Cleanup files on git
|
@ -1,46 +0,0 @@
|
|||
extends Attack
|
||||
|
||||
func _init():
|
||||
id = "IssixSlaveTease"
|
||||
category = Category.Lust
|
||||
aiCategory = AICategory.Lust
|
||||
|
||||
func getVisibleName(_context = {}):
|
||||
return "Collar Tease"
|
||||
|
||||
func getVisibleDesc(_context = {}):
|
||||
return "Shouldn't see this"
|
||||
|
||||
func _doAttack(_attacker, _receiver, _context = {}):
|
||||
var text = ""
|
||||
var lust = 0
|
||||
var pain = 0
|
||||
if _receiver.getPersonality().getStat(PersonalityStat.Subby) > 0.4:
|
||||
if(checkDodged(_attacker, _receiver, DamageType.Physical)):
|
||||
return genericDodgeMessage(_attacker, _receiver, "collar teasing")
|
||||
lust = RNG.randi_range(40, 60)
|
||||
text = "{attacker.name} spins around an old slave collar attached to a leash. {receiver.name} observes the collar with {receiver.his} will breaking down wanting to submit."
|
||||
if(!_receiver.isDefocusing() && _receiver.addEffect(StatusEffect.Weakness, [1])):
|
||||
text += " {receiver.Name} feels [b]weak[/b]."
|
||||
else:
|
||||
if(checkDodged(_attacker, _receiver, DamageType.Physical)):
|
||||
return genericDodgeMessage(_attacker, _receiver, "collar throw")
|
||||
text = "{attacker.name} spins around an old slave collar attached to a leash until he changes the direction of swinging to hit {receiver.name} managing to hit {receiver.him} with the bulky collar."
|
||||
pain = RNG.randi_range(15, 30)
|
||||
|
||||
return {
|
||||
text = text,
|
||||
lust = lust,
|
||||
pain = pain,
|
||||
}
|
||||
|
||||
func _canUse(_attacker, _receiver, _context = {}):
|
||||
return !_receiver.isBlindfolded()
|
||||
|
||||
func getAnticipationText(_attacker, _receiver):
|
||||
var text = "{attacker.name} grabs an old collar from behind and clasps a leash to it."
|
||||
|
||||
return text
|
||||
|
||||
func getRequirements():
|
||||
return [AttackRequirement.FreeArms, AttackRequirement.FreeHands, AttackRequirement.CanSee]
|
|
@ -1,142 +0,0 @@
|
|||
extends Character
|
||||
|
||||
# Incredibly subby and kinky creature, mostly aligns with mod's author preferences.'
|
||||
|
||||
func _init():
|
||||
id = "azazel"
|
||||
npcHasMenstrualCycle = true
|
||||
npcCharacterType = CharacterType.Inmate
|
||||
|
||||
pickedSkin="AzazelSkin"
|
||||
pickedSkinRColor=Color("ff464545")
|
||||
pickedSkinGColor=Color("ff656465")
|
||||
pickedSkinBColor=Color("ff72005d")
|
||||
npcSkinData={
|
||||
"hair": {"r": Color("ff221310"),"g": Color("ff1f1514"),"b": Color("ff28000c"),},
|
||||
"horns": {"r": Color("ffa9a9a9"),"b": Color("ff606060"),},
|
||||
}
|
||||
npcPersonality = {
|
||||
PersonalityStat.Brat: -0.9,
|
||||
PersonalityStat.Mean: -1.0,
|
||||
PersonalityStat.Subby: 1.0,
|
||||
PersonalityStat.Impatient: 0.1,
|
||||
PersonalityStat.Naive: 1.0,
|
||||
PersonalityStat.Coward: 0.7,
|
||||
}
|
||||
npcLevel = 8
|
||||
npcBasePain = 80
|
||||
npcBaseLust = 80
|
||||
npcBaseStamina = 80
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.Loves,
|
||||
Fetish.AnalSexGiving : FetishInterest.Hates,
|
||||
Fetish.VaginalSexGiving : FetishInterest.Hates,
|
||||
Fetish.VaginalSexReceiving : FetishInterest.Loves,
|
||||
Fetish.OralSexReceiving : FetishInterest.Likes,
|
||||
Fetish.Sadism : FetishInterest.ReallyDislikes,
|
||||
Fetish.Masochism : FetishInterest.Likes,
|
||||
Fetish.UnconsciousSex : FetishInterest.Hates,
|
||||
Fetish.Breeding : FetishInterest.Hates,
|
||||
Fetish.BeingBred : FetishInterest.Loves,
|
||||
Fetish.Bondage : FetishInterest.Loves,
|
||||
Fetish.Rigging : FetishInterest.Likes,
|
||||
Fetish.Condoms : FetishInterest.Dislikes,
|
||||
Fetish.DrugUse : FetishInterest.Likes,
|
||||
Fetish.Exhibitionism : FetishInterest.Loves,
|
||||
Fetish.Tribadism : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexVaginal : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes,
|
||||
Fetish.Choking : FetishInterest.SlightlyDislikes,
|
||||
Fetish.HypnosisSubject : FetishInterest.Loves,
|
||||
}
|
||||
npcLustInterests = {
|
||||
InterestTopic.TallyMarks: Interest.ReallyLikes,
|
||||
InterestTopic.Bodywritings: Interest.ReallyLikes,
|
||||
InterestTopic.Gags: Interest.Neutral,
|
||||
InterestTopic.Blindfolds: Interest.KindaLikes,
|
||||
InterestTopic.BDSMRestraints: Interest.Loves,
|
||||
InterestTopic.ButtPlugs: Interest.Neutral,
|
||||
InterestTopic.VaginalPlugs: Interest.Neutral,
|
||||
InterestTopic.FeminineBody: Interest.KindaLikes,
|
||||
InterestTopic.AndroBody: Interest.Loves,
|
||||
InterestTopic.MasculineBody: Interest.ReallyLikes,
|
||||
InterestTopic.ThickBody: Interest.Dislikes,
|
||||
InterestTopic.SlimBody: Interest.Loves,
|
||||
InterestTopic.BigBreasts: Interest.Hates,
|
||||
InterestTopic.StuffedPussy: Interest.Likes,
|
||||
InterestTopic.StuffedPussyOrAss: Interest.KindaLikes,
|
||||
InterestTopic.Pregnant: Interest.Loves,
|
||||
InterestTopic.StuffedThroat: Interest.ReallyLikes,
|
||||
InterestTopic.CoveredInCum: Interest.ReallyLikes,
|
||||
InterestTopic.CoveredInLotsOfCum: Interest.Loves,
|
||||
InterestTopic.FullyNaked: Interest.Loves,
|
||||
InterestTopic.ExposedPussy: Interest.Dislikes,
|
||||
InterestTopic.ExposedAnus: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedBreasts: Interest.Hates,
|
||||
InterestTopic.ExposedCock: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedPanties: Interest.Neutral,
|
||||
InterestTopic.ExposedBra: Interest.Neutral,
|
||||
InterestTopic.LooseAnus: Interest.Neutral,
|
||||
InterestTopic.LoosePussy: Interest.Neutral,
|
||||
InterestTopic.TightAnus: Interest.Likes,
|
||||
InterestTopic.TightPussy: Interest.Likes,
|
||||
InterestTopic.BigCock: Interest.Hates,
|
||||
}
|
||||
|
||||
func interestVerbalReaction(interest):
|
||||
if(interest == InterestTopic.Pregnant):
|
||||
return "Oh, do you have litter in there? Cuuute, meoowwww!"
|
||||
if(interest == InterestTopic.Blindfolds):
|
||||
return "Purrr. How is your hearing? Can you hear me purring from over there?"
|
||||
|
||||
func _getName():
|
||||
return "Azazel"
|
||||
|
||||
func getGender():
|
||||
return Gender.Male
|
||||
|
||||
func getSmallDescription() -> String:
|
||||
return "Wears an lilac uniform with number P-655. He is the embodiment of ”meek”."
|
||||
|
||||
func getSpecies():
|
||||
return [Species.Feline]
|
||||
|
||||
func getThickness() -> int:
|
||||
return 0
|
||||
|
||||
func getFemininity() -> int:
|
||||
return 67
|
||||
|
||||
func createBodyparts():
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("felinehead"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("combedbackhair"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("dragonhorns"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("felineears"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthrobody"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthroarms"))
|
||||
var breasts = GlobalRegistry.createBodypart("malebreasts")
|
||||
breasts.size = 0
|
||||
giveBodypartUnlessSame(breasts)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("vagina"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anuswomb"))
|
||||
var tail = GlobalRegistry.createBodypart("felinetail")
|
||||
tail.tailScale = 1
|
||||
giveBodypartUnlessSame(tail)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("plantilegs"))
|
||||
skillsHolder.addPerk(Perk.FertilityBroodmother)
|
||||
skillsHolder.addPerk(Perk.FertilityBetterOvulation)
|
||||
skillsHolder.addPerk(Perk.FertilityBetterOvulationV2)
|
||||
skillsHolder.addPerk(Perk.FertilityBetterOvulationV3)
|
||||
skillsHolder.addPerk(Perk.FertilityDesireToBreed)
|
||||
skillsHolder.addPerk(Perk.FertilitySubmissiveAndBreedable)
|
||||
|
||||
func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array):
|
||||
.onGivingBirth(_impregnatedEggCells, _newkids)
|
||||
|
||||
func getBirthWaitTime():
|
||||
return 60*60*24*3
|
||||
|
||||
func getDefaultEquipment():
|
||||
return ["inmatecollar", "inmateuniformSexDeviant"]
|
|
@ -1,130 +0,0 @@
|
|||
extends Character
|
||||
|
||||
# Hiisi is a relatively dominating character out of all three pets. He still has some HighSec energy in them
|
||||
|
||||
func _init():
|
||||
id = "hiisi"
|
||||
npcHasMenstrualCycle = false
|
||||
npcCharacterType = CharacterType.Inmate
|
||||
|
||||
pickedSkin="ArconSkin"
|
||||
pickedSkinRColor=Color("ffc8c2c2")
|
||||
pickedSkinGColor=Color("ff423c51")
|
||||
pickedSkinBColor=Color("ff767676")
|
||||
npcSkinData={
|
||||
"hair": {"r": Color("ffb05745"),"g": Color("ffb05745"),"b": Color("ff2288ab"),},
|
||||
"penis": {"r": Color("ff4e2626"),"g": Color("ff9d2121"),"b": Color("ff991a1a"),},
|
||||
}
|
||||
npcPersonality = {
|
||||
PersonalityStat.Brat: 0.1,
|
||||
PersonalityStat.Mean: 0.4,
|
||||
PersonalityStat.Subby: 1.0,
|
||||
PersonalityStat.Impatient: 0.9,
|
||||
PersonalityStat.Naive: -1.0,
|
||||
PersonalityStat.Coward: -0.4,
|
||||
}
|
||||
npcLevel = 25
|
||||
npcBasePain = 250
|
||||
npcBaseLust = 250
|
||||
npcBaseStamina = 200
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
Fetish.AnalSexGiving : FetishInterest.Likes,
|
||||
Fetish.VaginalSexGiving : FetishInterest.Likes,
|
||||
Fetish.OralSexReceiving : FetishInterest.Likes,
|
||||
Fetish.OralSexGiving : FetishInterest.SlightlyDislikes,
|
||||
Fetish.Sadism : FetishInterest.Likes,
|
||||
Fetish.Masochism : FetishInterest.Hates,
|
||||
Fetish.UnconsciousSex : FetishInterest.Likes,
|
||||
Fetish.Bondage : FetishInterest.Likes,
|
||||
Fetish.Rigging : FetishInterest.Likes,
|
||||
Fetish.Breeding : FetishInterest.Dislikes,
|
||||
Fetish.Condoms : FetishInterest.Likes,
|
||||
Fetish.DrugUse : FetishInterest.SlightlyDislikes,
|
||||
Fetish.Tribadism : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexVaginal : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexAnal : FetishInterest.Dislikes,
|
||||
Fetish.Choking : FetishInterest.Likes,
|
||||
Fetish.HypnosisSubject : FetishInterest.Hates,
|
||||
Fetish.HypnosisHypnotist : FetishInterest.Loves
|
||||
}
|
||||
npcLustInterests = {
|
||||
InterestTopic.TallyMarks: Interest.ReallyLikes,
|
||||
InterestTopic.Bodywritings: Interest.KindaLikes,
|
||||
InterestTopic.Gags: Interest.Loves,
|
||||
InterestTopic.Blindfolds: Interest.Loves,
|
||||
InterestTopic.BDSMRestraints: Interest.Loves,
|
||||
InterestTopic.ButtPlugs: Interest.Dislikes,
|
||||
InterestTopic.VaginalPlugs: Interest.Dislikes,
|
||||
InterestTopic.FeminineBody: Interest.Likes,
|
||||
InterestTopic.AndroBody: Interest.Likes,
|
||||
InterestTopic.StuffedPussy: Interest.Likes,
|
||||
InterestTopic.StuffedPussyOrAss: Interest.KindaLikes,
|
||||
InterestTopic.StuffedThroat: Interest.Likes,
|
||||
InterestTopic.CoveredInCum: Interest.Dislikes,
|
||||
InterestTopic.CoveredInLotsOfCum: Interest.Dislikes,
|
||||
InterestTopic.FullyNaked: Interest.Likes,
|
||||
InterestTopic.ExposedPussy: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedAnus: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedBreasts: Interest.Likes,
|
||||
InterestTopic.ExposedCock: Interest.KindaLikes,
|
||||
InterestTopic.ExposedPanties: Interest.Likes,
|
||||
InterestTopic.ExposedBra: Interest.Likes,
|
||||
InterestTopic.TightAnus: Interest.Likes,
|
||||
InterestTopic.TightPussy: Interest.Likes,
|
||||
InterestTopic.BigCock: Interest.Hates,
|
||||
}
|
||||
|
||||
func interestVerbalReaction(interest):
|
||||
if(interest == InterestTopic.Pregnant):
|
||||
return "Oh, do you have litter in there? Cuuute, meoowwww!"
|
||||
if(interest == InterestTopic.Blindfolds):
|
||||
return "Purrr. How is your hearing? Can you hear me purring from over there?"
|
||||
|
||||
func _getName():
|
||||
return "Hiisi"
|
||||
|
||||
func getGender():
|
||||
return Gender.Male
|
||||
|
||||
func getSmallDescription() -> String:
|
||||
return "Wears an red uniform with number P-964."
|
||||
|
||||
func getSpecies():
|
||||
return [Species.Canine]
|
||||
|
||||
func getThickness() -> int:
|
||||
return 23
|
||||
|
||||
func getFemininity() -> int:
|
||||
return 0
|
||||
|
||||
func createBodyparts():
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthrobody"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthroarms"))
|
||||
var breasts = GlobalRegistry.createBodypart("malebreasts")
|
||||
breasts.size = 0
|
||||
giveBodypartUnlessSame(breasts)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("caninehead"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("simplehair"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("canineears3"))
|
||||
var penis = GlobalRegistry.createBodypart("caninepenis")
|
||||
penis.lengthCM = 10
|
||||
penis.ballsScale = 1.2
|
||||
giveBodypartUnlessSame(penis)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anus"))
|
||||
var tail = GlobalRegistry.createBodypart("huskytail")
|
||||
tail.tailScale = 1
|
||||
giveBodypartUnlessSame(tail)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("digilegs"))
|
||||
|
||||
|
||||
func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array):
|
||||
.onGivingBirth(_impregnatedEggCells, _newkids)
|
||||
|
||||
func getBirthWaitTime():
|
||||
return 60*60*24*2
|
||||
|
||||
func getDefaultEquipment():
|
||||
return ["inmatecollar", "inmateuniformHighsec"]
|
|
@ -1,160 +0,0 @@
|
|||
extends Character
|
||||
|
||||
func _init():
|
||||
id = "issix"
|
||||
npcHasMenstrualCycle = false
|
||||
npcCharacterType = CharacterType.Inmate
|
||||
|
||||
pickedSkin="HardcoreSkin"
|
||||
pickedSkinRColor=Color("ffca3030")
|
||||
pickedSkinGColor=Color("ff720505")
|
||||
pickedSkinBColor=Color("ff000000")
|
||||
npcSkinData={
|
||||
"head": {"skin": "CunningSkin",},
|
||||
"hair": {"r": Color("ffb05745"),"g": Color("ffb05745"),"b": Color("ff2288ab"),},
|
||||
"horns": {"r": Color("ffa9a9a9"),},
|
||||
"penis": {"g": Color("ffff0000"),"b": Color("ff8b0000"),},
|
||||
"legs": {"skin": "SplotchedSkin",},
|
||||
}
|
||||
npcPersonality = {
|
||||
PersonalityStat.Brat: 0.5,
|
||||
PersonalityStat.Mean: 1.0,
|
||||
PersonalityStat.Subby: -1.0,
|
||||
PersonalityStat.Impatient: 0.1,
|
||||
PersonalityStat.Naive: -1.0,
|
||||
PersonalityStat.Coward: -0.7,
|
||||
}
|
||||
npcLevel = 50
|
||||
npcBasePain = 400
|
||||
npcBaseLust = 400
|
||||
npcBaseStamina = 500
|
||||
npcArmor = {
|
||||
DamageType.Physical: 15,
|
||||
DamageType.Lust: 30,
|
||||
}
|
||||
npcStats = {
|
||||
Stat.Strength: 40,
|
||||
}
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
Fetish.AnalSexGiving : FetishInterest.Hates,
|
||||
Fetish.VaginalSexGiving : FetishInterest.Hates,
|
||||
Fetish.VaginalSexReceiving : FetishInterest.Loves,
|
||||
Fetish.OralSexReceiving : FetishInterest.Likes,
|
||||
Fetish.OralSexGiving : FetishInterest.Neutral,
|
||||
Fetish.Sadism : FetishInterest.ReallyDislikes,
|
||||
Fetish.Masochism : FetishInterest.Hates,
|
||||
Fetish.UnconsciousSex : FetishInterest.Loves,
|
||||
Fetish.BeingBred : FetishInterest.Dislikes,
|
||||
Fetish.Breeding : FetishInterest.Loves,
|
||||
Fetish.Bondage : FetishInterest.Likes,
|
||||
Fetish.Rigging : FetishInterest.Likes,
|
||||
Fetish.Condoms : FetishInterest.Dislikes,
|
||||
Fetish.DrugUse : FetishInterest.Likes,
|
||||
Fetish.Exhibitionism : FetishInterest.Loves,
|
||||
Fetish.Tribadism : FetishInterest.SlightlyDislikes,
|
||||
Fetish.StraponSexVaginal : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes,
|
||||
Fetish.Choking : FetishInterest.SlightlyDislikes,
|
||||
Fetish.HypnosisSubject : FetishInterest.Loves,
|
||||
}
|
||||
npcLustInterests = {
|
||||
InterestTopic.TallyMarks: Interest.ReallyLikes,
|
||||
InterestTopic.Bodywritings: Interest.KindaLikes,
|
||||
InterestTopic.Gags: Interest.Loves,
|
||||
InterestTopic.Blindfolds: Interest.Loves,
|
||||
InterestTopic.BDSMRestraints: Interest.Loves,
|
||||
InterestTopic.ButtPlugs: Interest.Dislikes,
|
||||
InterestTopic.VaginalPlugs: Interest.Dislikes,
|
||||
InterestTopic.FeminineBody: Interest.KindaLikes,
|
||||
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.StuffedPussyOrAss: Interest.KindaLikes,
|
||||
InterestTopic.Pregnant: Interest.ReallyLikes,
|
||||
InterestTopic.StuffedThroat: Interest.ReallyLikes,
|
||||
InterestTopic.CoveredInCum: Interest.ReallyLikes,
|
||||
InterestTopic.CoveredInLotsOfCum: Interest.Likes,
|
||||
InterestTopic.FullyNaked: Interest.Loves,
|
||||
InterestTopic.ExposedPussy: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedAnus: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedBreasts: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedCock: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedPanties: Interest.Hates,
|
||||
InterestTopic.ExposedBra: Interest.Hates,
|
||||
InterestTopic.LooseAnus: Interest.SlightlyDislikes,
|
||||
InterestTopic.LoosePussy: Interest.SlightlyDislikes,
|
||||
InterestTopic.TightAnus: Interest.Likes,
|
||||
InterestTopic.TightPussy: Interest.Likes,
|
||||
InterestTopic.BigCock: Interest.Hates,
|
||||
}
|
||||
|
||||
func interestVerbalReaction(interest):
|
||||
if(interest == InterestTopic.Pregnant):
|
||||
return "You are much better fit as a common breeder"
|
||||
if(interest == InterestTopic.Blindfolds):
|
||||
return "Overconfident much?"
|
||||
if(interest == InterestTopic.BigCock):
|
||||
return "Pretty big equipment you got there, have you tried using it?"
|
||||
if(interest == InterestTopic.SmallCock):
|
||||
return "Aww, so small. Don't worry, I think it's pretty cute, and as far as reproduction goes, it's pretty telling what your role in it is."
|
||||
if(interest == InterestTopic.HasVaginaAndCock):
|
||||
return "Oh wow, your biology blessed you with two? How versatile! Which one you prefer more? Breeder or a stud?"
|
||||
if(interest == InterestTopic.Bodywritings):
|
||||
return "I like it when sluts have advertisement all over themselves. Really encourages me to grab that marker."
|
||||
if(interest == InterestTopic.LactatingBreasts):
|
||||
return "You produce? Do you think I can have some of that milk for myself?"
|
||||
|
||||
func _getName():
|
||||
return "Issix"
|
||||
|
||||
func getGender():
|
||||
return Gender.Male
|
||||
|
||||
func _getAttacks():
|
||||
return ["IssixSlaveTease", "trygetupattack", "simplepunchattack","CuffPCHands", "ForceGagPC", "ForceMuzzlePC", "simplekickattack", "biteattack", "shoveattack"]
|
||||
|
||||
func getSmallDescription() -> String:
|
||||
return "Wears a red block uniform with number P-533. He is an intimidating tall demon-dragon, has red fur."
|
||||
|
||||
func getSpecies():
|
||||
return [Species.Dragon, Species.Demon]
|
||||
|
||||
func getThickness() -> int:
|
||||
return 40
|
||||
|
||||
func getFemininity() -> int:
|
||||
return 0
|
||||
|
||||
func createBodyparts():
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("dragonhead"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("combedbackhair"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("dragonears2"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("demonhorns3"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthrobody"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("buffarms"))
|
||||
var breasts = GlobalRegistry.createBodypart("malebreasts")
|
||||
breasts.size = 0
|
||||
giveBodypartUnlessSame(breasts)
|
||||
var penis = GlobalRegistry.createBodypart("dragonpenis")
|
||||
penis.lengthCM = 15
|
||||
penis.ballsScale = 1
|
||||
giveBodypartUnlessSame(penis)
|
||||
var tail = GlobalRegistry.createBodypart("demontail")
|
||||
tail.tailScale = 1
|
||||
giveBodypartUnlessSame(tail)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("hoofs"))
|
||||
|
||||
|
||||
func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array):
|
||||
.onGivingBirth(_impregnatedEggCells, _newkids)
|
||||
|
||||
func getBirthWaitTime():
|
||||
return 60*60*24*10
|
||||
|
||||
func getDefaultEquipment():
|
||||
return ["inmatecollar", "inmateuniform"]
|
|
@ -1,144 +0,0 @@
|
|||
extends Character
|
||||
|
||||
func _init():
|
||||
id = "lamia"
|
||||
npcHasMenstrualCycle = false
|
||||
npcCharacterType = CharacterType.Inmate
|
||||
|
||||
pickedSkin="DappledSkin"
|
||||
pickedSkinRColor=Color("ffca6702")
|
||||
pickedSkinGColor=Color("ffbb3e03")
|
||||
pickedSkinBColor=Color("ff9b2226")
|
||||
npcSkinData={
|
||||
"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 = {
|
||||
PersonalityStat.Brat: -0.9,
|
||||
PersonalityStat.Mean: 0.4,
|
||||
PersonalityStat.Subby: 1.0,
|
||||
PersonalityStat.Impatient: 0.9,
|
||||
PersonalityStat.Naive: -1.0,
|
||||
PersonalityStat.Coward: -0.4,
|
||||
}
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcLevel = 20
|
||||
npcBasePain = 180
|
||||
npcBaseLust = 1000
|
||||
npcBaseStamina = 100
|
||||
npcArmor = {
|
||||
DamageType.Lust: 100,
|
||||
}
|
||||
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
Fetish.AnalSexGiving : FetishInterest.Hates,
|
||||
Fetish.VaginalSexGiving : FetishInterest.Hates,
|
||||
Fetish.OralSexReceiving : FetishInterest.Dislikes,
|
||||
Fetish.OralSexGiving : FetishInterest.Dislikes,
|
||||
Fetish.Sadism : FetishInterest.Hates,
|
||||
Fetish.Masochism : FetishInterest.Hates,
|
||||
Fetish.UnconsciousSex : FetishInterest.Hates,
|
||||
Fetish.Breeding : FetishInterest.Hates,
|
||||
Fetish.Bondage : FetishInterest.Dislikes,
|
||||
Fetish.Rigging : FetishInterest.Dislikes,
|
||||
Fetish.Condoms : FetishInterest.Dislikes,
|
||||
Fetish.DrugUse : FetishInterest.Dislikes,
|
||||
Fetish.Exhibitionism : FetishInterest.Dislikes,
|
||||
Fetish.Tribadism : FetishInterest.SlightlyDislikes,
|
||||
Fetish.StraponSexVaginal : FetishInterest.Dislikes,
|
||||
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes,
|
||||
Fetish.Choking : FetishInterest.SlightlyDislikes,
|
||||
Fetish.HypnosisSubject : FetishInterest.Hates,
|
||||
Fetish.HypnosisHypnotist : FetishInterest.Hates,
|
||||
}
|
||||
npcLustInterests = {
|
||||
InterestTopic.TallyMarks: Interest.Dislikes,
|
||||
InterestTopic.Bodywritings: Interest.Dislikes,
|
||||
InterestTopic.Gags: Interest.Dislikes,
|
||||
InterestTopic.Blindfolds: Interest.Dislikes,
|
||||
InterestTopic.BDSMRestraints: Interest.Dislikes,
|
||||
InterestTopic.ButtPlugs: Interest.Dislikes,
|
||||
InterestTopic.VaginalPlugs: Interest.Dislikes,
|
||||
InterestTopic.FeminineBody: Interest.KindaLikes,
|
||||
InterestTopic.AndroBody: Interest.Likes,
|
||||
InterestTopic.MasculineBody: Interest.ReallyLikes,
|
||||
InterestTopic.ThickBody: Interest.Dislikes,
|
||||
InterestTopic.SlimBody: Interest.Dislikes,
|
||||
InterestTopic.BigBreasts: Interest.Hates,
|
||||
InterestTopic.StuffedPussy: Interest.Dislikes,
|
||||
InterestTopic.StuffedPussyOrAss: Interest.Dislikes,
|
||||
InterestTopic.Pregnant: Interest.Dislikes,
|
||||
InterestTopic.StuffedThroat: Interest.Dislikes,
|
||||
InterestTopic.CoveredInCum: Interest.Dislikes,
|
||||
InterestTopic.CoveredInLotsOfCum: Interest.Dislikes,
|
||||
InterestTopic.FullyNaked: Interest.Loves,
|
||||
InterestTopic.ExposedPussy: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedAnus: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedBreasts: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedCock: Interest.ReallyLikes,
|
||||
InterestTopic.ExposedPanties: Interest.Hates,
|
||||
InterestTopic.ExposedBra: Interest.Hates,
|
||||
InterestTopic.LooseAnus: Interest.Dislikes,
|
||||
InterestTopic.LoosePussy: Interest.Dislikes,
|
||||
InterestTopic.TightAnus: Interest.Dislikes,
|
||||
InterestTopic.TightPussy: Interest.Dislikes,
|
||||
InterestTopic.BigCock: Interest.Hates,
|
||||
}
|
||||
|
||||
func interestVerbalReaction(interest):
|
||||
if(interest == InterestTopic.Pregnant):
|
||||
return "Oh, do you have litter in there? Cuuute, meoowwww!"
|
||||
if(interest == InterestTopic.Blindfolds):
|
||||
return "Purrr. How is your hearing? Can you hear me purring from over there?"
|
||||
|
||||
func _getName():
|
||||
return "Lamia"
|
||||
|
||||
func getGender():
|
||||
return Gender.Male
|
||||
|
||||
func getSmallDescription() -> String:
|
||||
return "Wears an orange uniform with number P-790."
|
||||
|
||||
func getSpecies():
|
||||
return [Species.Canine] # if in the future foxes are introduced, the character is canonically a fox
|
||||
|
||||
func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array):
|
||||
.onGivingBirth(_impregnatedEggCells, _newkids)
|
||||
|
||||
func getBirthWaitTime():
|
||||
return 60*60*24*2
|
||||
|
||||
func getDefaultEquipment():
|
||||
return ["inmatecollar", "inmateuniform"]
|
||||
|
||||
func getThickness() -> int:
|
||||
return 70
|
||||
|
||||
func getFemininity() -> int:
|
||||
return 20
|
||||
|
||||
func createBodyparts():
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthrobody"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthroarms"))
|
||||
var breasts = GlobalRegistry.createBodypart("malebreasts")
|
||||
breasts.size = 0
|
||||
giveBodypartUnlessSame(breasts)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("foxhead"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("messyhair2"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("fennecears"))
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("dragonhorns"))
|
||||
var penis = GlobalRegistry.createBodypart("felinepenis")
|
||||
penis.lengthCM = 15
|
||||
penis.ballsScale = 1
|
||||
giveBodypartUnlessSame(penis)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anuswomb"))
|
||||
var tail = GlobalRegistry.createBodypart("foxtail")
|
||||
tail.tailScale = 0.5
|
||||
giveBodypartUnlessSame(tail)
|
||||
giveBodypartUnlessSame(GlobalRegistry.createBodypart("digilegs"))
|
||||
skillsHolder.addPerk(Perk.StartInfertile)
|
||||
skillsHolder.addPerk(Perk.StartNoHeat)
|
|
@ -1,60 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "IssixSpecialEvent"
|
||||
|
||||
|
||||
var registered_special_scenes = [['IssixSlaveryIntroCont', 1, {}], ['IssixBringsComicbooks', 2, {"Comic_Books": 1}], ['IssixSlaveryBowlTraing', 2, {}], ['IssixSlaveryBranding', 3, {}]]
|
||||
|
||||
class CustomSorter:
|
||||
static func sort_by_progressionpoints(a, b):
|
||||
if a[1] < b[1]:
|
||||
return true
|
||||
return false
|
||||
|
||||
func checkRequirements(requirements: Dictionary):
|
||||
for key in requirements.keys():
|
||||
if requirements[key] is int or requirements[key] is float:
|
||||
if getModuleFlag("IssixModule", key, 0) < requirements[key]:
|
||||
return false
|
||||
elif requirements[key] is String:
|
||||
if getModuleFlag("IssixModule", key, 0) != requirements[key]:
|
||||
return false
|
||||
return true
|
||||
|
||||
func shouldBeShownForcedEvent():
|
||||
var scenes_seen = getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
|
||||
var current_progression_points = GM.main.getModuleFlag("IssixModule", "Progression_Points", 1)
|
||||
if GM.main.getDays() >= GM.main.getModuleFlag("IssixModule", "Progression_Day_Next", 0) and GM.main.getModuleFlag("IssixModule", "Unwelcome_At_Corner", false) != true:
|
||||
registered_special_scenes.sort_custom(CustomSorter, "sort_by_progressionpoints")
|
||||
for scene in registered_special_scenes:
|
||||
if scene[1] > current_progression_points:
|
||||
return null
|
||||
if scenes_seen["scenes_seen"].find(scene[0]) == -1 and checkRequirements(scene[2]):
|
||||
return scene[0]
|
||||
return null
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "hall_ne_corner")
|
||||
|
||||
func react(_triggerID, _args):
|
||||
#if(doEventCheck("IssixBusy") != null):
|
||||
# return false
|
||||
var scene_to_show = shouldBeShownForcedEvent()
|
||||
if scene_to_show != null:
|
||||
runScene(scene_to_show)
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func getPriority():
|
||||
return 20
|
||||
|
||||
# func onButton(_method, _args):
|
||||
# if(_method == "talk"):
|
||||
# runScene("IssixTalkScene")
|
||||
# if(_method == "pets"):
|
||||
# runScene("PetsTalkScene")
|
||||
# if(_method == "paper"):
|
||||
# runScene("NoPetsTalkScene")
|
||||
#
|
|
@ -1,26 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "EngRoomClosetEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "eng_corridor6")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
var quest_status = getModuleFlag("IssixModule", "Quest_Status")
|
||||
if(3 > quest_status and quest_status > 0): # In the future potentially make it possible to be a daily event thing
|
||||
if(GM.pc.isBlindfolded()):
|
||||
if getModuleFlag("IssixModule", "Quest_Status") == 1:
|
||||
addButton("Issix's Task", "Is it time?", "wall")
|
||||
else:
|
||||
addButton("Closet", "Time to get that thing", "wall")
|
||||
elif quest_status > 2:
|
||||
addDisabledButton("Closet", "This place is of no significance to you anymore")
|
||||
|
||||
func getPriority():
|
||||
return 0
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "wall"):
|
||||
runScene("EngRoomScene")
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "IssixEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "hall_ne_corner")
|
||||
es.addEventCheck(self, "IssixBusy")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
#if(doEventCheck("IssixBusy") != null):
|
||||
# return false
|
||||
if(GM.main.isVeryLate()): # Add something in the nightime it's very late?
|
||||
saynn("You see an empty chair in the corner with three blankets laying around.")
|
||||
return false
|
||||
|
||||
if(!getModuleFlag("IssixModule", "Issix_Introduced")): # Do that if not night
|
||||
saynn("You see a demon-dragon sitting on a chair in a corner, around him there are three leashed creatures.")
|
||||
GM.main.setModuleFlag("IssixModule", "Score_Explored", 0) # is there a better place to do this?
|
||||
GM.main.setModuleFlag("IssixModule", "Quest_Status", 0)
|
||||
addButton("Demon", "Talk to the demon-dragon", "talk")
|
||||
return
|
||||
|
||||
GM.main.applyWorldEdit("IssixWorldEdit")
|
||||
|
||||
if(checkCharacterBusy("IssixBusy", "Issix is not here", "Issix")):
|
||||
saynn("This corner is not occupied by anyone at the moment, just three empty blankets with a chair.")
|
||||
if getModuleFlag("IssixModule", "Quest_Status") == 5:
|
||||
addButton("Paper", "A piece of paper lies left in a hurry", "paper")
|
||||
return
|
||||
|
||||
var player_enslaved = getModuleFlag("IssixModule", "PC_Enslavement_Role", 0)
|
||||
if player_enslaved > 0:
|
||||
if getModuleFlag("IssixModule", "Unwelcome_At_Corner", false) != true:
|
||||
saynn("You see your Master sitting on his chair in the corner, around him there is Azazel, Hiisi and Lamia.")
|
||||
addButton("Master", "Talk to Master Issix", "talk")
|
||||
addButton("Pets", "Look at Master's pets", "pets")
|
||||
match player_enslaved:
|
||||
1.0: # WHY ARE NUMBER FLAGS FLOATS ASDJASODHASUDHASIDHBASHDASHDOASDJASD kill me
|
||||
addButton("Pet tasks", "Get a read on today's pet tasks", "slavery")
|
||||
2.0:
|
||||
addButton("Prostitution", "Open prostitution info", "slavery")
|
||||
_:
|
||||
saynn(player_enslaved)
|
||||
else:
|
||||
addDisabledButton("Master", "He doesn't want to speak to you today")
|
||||
addDisabledButton("Pets", "They don't want to speak to you today")
|
||||
else:
|
||||
saynn("You see Issix sitting on a chair in a corner, around him there are three leashed slaves.")
|
||||
addButton("Issix", "Talk to Issix", "talk")
|
||||
if(!getModuleFlag("IssixModule", "Pets_Introduced")):
|
||||
#addButton("Look at pets", "Look at pets", "pets")
|
||||
addDisabledButton("Talk with pets", "You should probably first talk with intimidating figure who got them leashed")
|
||||
else:
|
||||
addButton("Pets", "Look at pets", "pets")
|
||||
|
||||
|
||||
func getPriority():
|
||||
return 0
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "talk"):
|
||||
runScene("IssixTalkScene")
|
||||
if(_method == "pets"):
|
||||
runScene("PetsTalkScene")
|
||||
if(_method == "paper"):
|
||||
runScene("NoPetsTalkScene")
|
||||
if _method == "slavery":
|
||||
runScene("SlaveryInfoScreen")
|
||||
|
||||
func eventCheck(_checkID, _args = []):
|
||||
if(getModuleFlag("IssixModule", "Quest_Status") == 5 and getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == true):
|
||||
return {busy=true}
|
|
@ -1,29 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "AzazelCatnipEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "main_green_corridor9")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(GM.main.getModuleFlag("IssixModule", "Azazel_Catnip_noticed", false) == false):
|
||||
if "feline" in GM.pc.getSpecies():
|
||||
saynn("You approach greenhouses, each one looks like a huge long tent with lots of artificial lights inside. Your sensitive nose catches a whiff of a peculiar smell coming from one of the greenhouses, something very primal to your very instincts...")
|
||||
addButton("Investigate", "Find the source of smell", "greenhouse")
|
||||
elif RNG.chance(50):
|
||||
saynn("While minding your business you notice a sign which depicts a crossed out feline. This strikes you as very odd, why would felines be banned from what appears to be a single greenhouse?")
|
||||
addButton("Investigate", "Try to find out what's up?", "greenhouse")
|
||||
else:
|
||||
saynn("While going through the greenhouses you remember a familiar greenhouse that had catnip in it. You could try and get some for yourself, or someone else.")
|
||||
if(!GM.main.getModuleFlag("IssixModule", "Azazel_Catnip_taken_today")):
|
||||
addButtonUnlessLate("Steal", "Try and steal something", "greenhouse")
|
||||
else:
|
||||
addDisabledButton("Steal", "Too dangerous to do this again today")
|
||||
|
||||
func getPriority():
|
||||
return 0
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "greenhouse"):
|
||||
runScene("GreenhouseCatnip")
|
|
@ -1,27 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "Ch1IssixQuestQuestionnaire"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.TalkingToNPC, "issix")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(GM.main.getModuleFlag("IssixModule", "Quest_Status") == 4):
|
||||
if GM.main.getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == false:
|
||||
addButton("Next task", "Ask Issix about next task", "main")
|
||||
else:
|
||||
addDisabledButton("Next task", "You need to wait until tomorrow")
|
||||
return true
|
||||
elif(GM.main.getModuleFlag("IssixModule", "Quest_Status") == 5):
|
||||
addButton("Questionnaire", "Ask Issix about continuing the questionnaire", "main")
|
||||
return false
|
||||
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
GM.main.endCurrentScene()
|
||||
runScene("IssixQuestionnaire")
|
||||
|
||||
func getPriority():
|
||||
return 20
|
|
@ -1,19 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "IssixSearchEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "hall_mainentrance")
|
||||
|
||||
func react(_triggerID, _args):
|
||||
if(doEventCheck("IssixBusy") != null) or GM.main.isVeryLate():
|
||||
return false
|
||||
|
||||
var visited = GM.main.getModuleFlag("IssixModule", "Last_Day_Visited_Master")
|
||||
if visited != null and GM.main.getDays() > visited + 2: # 3 days without visiting master
|
||||
runScene("IssixFoundPlayer")
|
||||
|
||||
|
||||
func getPriority():
|
||||
return 10
|
|
@ -1,28 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "MedicalLamiaPeekEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "med_near_wards")
|
||||
es.addEventCheck(self, "ElizaBusy")
|
||||
|
||||
func react(_triggerID, _args):
|
||||
if(getModuleFlag("IssixModule", "Quest_Status") == 5 and getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == true):
|
||||
runScene("MedicalLamiaPeekScene")
|
||||
return true
|
||||
# I don't have any other way of preventing the player from entering the medical room so we do some forcy scene on them, they would never see that coming!
|
||||
#addButton("Investigate", "Eavesdrop on large commotion in the hospital room next to you", "main")
|
||||
|
||||
return false
|
||||
|
||||
func getPriority():
|
||||
return 150
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
runScene("MedicalLamiaPeekScene")
|
||||
|
||||
func eventCheck(_checkID, _args = []): # sorry player, you can't heal, Eliza is occupied by Issix's pet
|
||||
if(_checkID == "ElizaBusy" and getModuleFlag("IssixModule", "Quest_Status") == 5 and getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == true):
|
||||
return {busy=true}
|
|
@ -1,25 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "BullyGangEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.ApproachedYogaMats)
|
||||
es.addTrigger(self, Trigger.ApproachedWeightsBench)
|
||||
|
||||
func react(_triggerID, _args):
|
||||
if(getModuleFlag("GymModule", "Gym_BullyGangPayed")):
|
||||
return false
|
||||
|
||||
if getModuleFlag("IssixModule", "Gym_Bullies_Left_Alone", false) == true:
|
||||
return false
|
||||
|
||||
if(RNG.chance(50)):
|
||||
return false
|
||||
|
||||
runScene("BullyGangScene")
|
||||
setModuleFlag("GymModule", "Gym_BullyGangPayed", true)
|
||||
return true
|
||||
|
||||
func getPriority():
|
||||
return 20
|
|
@ -1,25 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "Ch1IssixQuestWalk"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.TalkingToNPC, "issix")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(GM.main.getModuleFlag("IssixModule", "Quest_Status") == 6):
|
||||
if GM.main.getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == false:
|
||||
addButton("Next task", "Ask Issix about next task", "main")
|
||||
else:
|
||||
addDisabledButton("Next task", "You need to wait until tomorrow")
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
GM.main.endCurrentScene()
|
||||
runScene("IssixPetWalk")
|
||||
|
||||
func getPriority():
|
||||
return 20
|
|
@ -1,22 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "ArtworkModifyingPlayerCell"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringPlayerCell)
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if getModuleFlag("IssixModule", "Placed_Portrait_In_Cell", false):
|
||||
saynn("On the wall you can see a vertical sheet of paper with your face holding a cookie in the mouth. Drawn by Lamia.")
|
||||
return
|
||||
|
||||
if getModuleFlag("IssixModule", "Received_Portrait_From_Lamia", false) and getModuleFlag("IssixModule", "Placed_Portrait_In_Cell") == null:
|
||||
addButton("Portrait", "You can choose to put a portrait you've received from Lamia on the wall of your cell", "portrait")
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "portrait"):
|
||||
runScene("PlayerCellLamiaPortraitScene")
|
||||
|
||||
func getPriority():
|
||||
return 11
|
|
@ -1,25 +0,0 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "Ch2IssixSlaveryIntro"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.TalkingToNPC, "issix")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(GM.main.getModuleFlag("IssixModule", "Quest_Status") == 7):
|
||||
if GM.main.getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == false:
|
||||
addButton("Do it", "Ask Issix about becoming his pet", "main")
|
||||
else:
|
||||
addDisabledButton("Slavery", "You need to wait until tomorrow before you can ask Issix about becomin his slave")
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
GM.main.endCurrentScene()
|
||||
runScene("IssixSlaveryIntro")
|
||||
|
||||
func getPriority():
|
||||
return 20
|
|
@ -1,12 +0,0 @@
|
|||
extends SubGameWorld
|
||||
|
||||
|
||||
|
||||
func _on_Closet_onEnter(room):
|
||||
room.addButton("Leave", "Leave the closet", "leave")
|
||||
|
||||
|
||||
func _on_Closet_onReact(_room, key):
|
||||
if(key == "leave"):
|
||||
GM.pc.setLocation("med_lobbynw")
|
||||
GM.main.reRun()
|
|
@ -1,25 +0,0 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://Game/World/SubWorld.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://Game/World/GameRoom.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Modules/IssixModule/Floors/Closet.gd" type="Script" id=3]
|
||||
|
||||
[node name="Closet" instance=ExtResource( 1 )]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="Closet" parent="." index="0" groups=["zone_poi"] instance=ExtResource( 2 )]
|
||||
self_modulate = Color( 0.7, 0.7, 1, 1 )
|
||||
position = Vector2( 192, 256 )
|
||||
__meta__ = {
|
||||
"_editor_description_": "meow"
|
||||
}
|
||||
roomName = "Closet"
|
||||
roomID = "eng_closet"
|
||||
roomDescription = "This very claustrophobic room is illuminated by a single light bulb hanging from the top, seems like this room was spared from the newer technology present everywhere else in the prison.
|
||||
The room has at least 5 large file cabinets, 2 shelves and a trash can in the corner. All of the drawers except one seem to have a number attached to them. There is only one entrance, the doors on the west side of the room. Walls of the rooms are behind the cabinets."
|
||||
blindRoomDescription = "The atmosphere of the place you are in, changed from the large hallway to something a lot smaller. Sounds don't spread as they did in hallway before you entered. It's probably one of the quietest places you've been in."
|
||||
roomColor = 3
|
||||
loctag_Offlimits = true
|
||||
|
||||
[connection signal="onEnter" from="Closet" to="." method="_on_Closet_onEnter"]
|
||||
[connection signal="onReact" from="Closet" to="." method="_on_Closet_onReact"]
|
|
@ -1,27 +0,0 @@
|
|||
extends TopicBase
|
||||
|
||||
func _init():
|
||||
handles_ids = [
|
||||
"IssixBrand"
|
||||
]
|
||||
|
||||
func getTopicValue(_topicID, _pc):
|
||||
if(_topicID == "IssixBrand"):
|
||||
if(GM.main.getModuleFlag("IssixModule", "Issix_Branded_PC") == true):
|
||||
return 1.0
|
||||
|
||||
return 0.0
|
||||
|
||||
func getVisibleName(_topicID):
|
||||
if(_topicID == "IssixBrand"):
|
||||
return "Issix's brand"
|
||||
|
||||
|
||||
return "error:"+str(_topicID)
|
||||
|
||||
func getAddsToFocus(_topicID, _focus) -> float:
|
||||
if(_topicID == "IssixBrand"):
|
||||
if(_focus == LustFocus.Butt):
|
||||
return 1.0
|
||||
|
||||
return 0.0
|
|
@ -1,59 +0,0 @@
|
|||
extends QuestBase
|
||||
|
||||
func _init():
|
||||
id = "IssixsPetQuest"
|
||||
|
||||
func getVisibleName():
|
||||
return "Becoming something lesser"
|
||||
|
||||
func getProgress():
|
||||
var quest_status = GM.main.getModuleFlag("IssixModule", "Quest_Status")
|
||||
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 result = []
|
||||
if quest_rejection == 1 or quest_rejection == 4:
|
||||
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...")
|
||||
if(quest_status > 1):
|
||||
result.append("You've found the hidden closet. Now just to find what Issix asked of you...")
|
||||
if(quest_status > 2):
|
||||
result.append("You've got a pack of gum. Return it to Issix.")
|
||||
if(quest_status > 4):
|
||||
result.append("You've delivered a pack of gum to Issix. His next request was of you to complete a ”test” of some sorts.")
|
||||
if(quest_status == 3 and quest_await):
|
||||
result.append("You've delivered a pack of gum to Issix. He has asked you to wait until tomorrow when he will have next task for you")
|
||||
if(quest_status == 3 and !quest_await):
|
||||
result.append("You've delivered a pack of gum to Issix. He should have a new task for you today.")
|
||||
if(quest_status > 5 and quest_rejection == 0):
|
||||
result.append("You've finished the questionnaire which you've passed. Issix asked you to come back the next day for last trial.")
|
||||
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.")
|
||||
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.")
|
||||
if quest_status > 6 and quest_rejection == 0:
|
||||
result.append("You've succeeded Issix's last trial and have gotten permission to become Issix's pet. Issix said that your introduction is the next day,")
|
||||
if quest_status > 8:
|
||||
result.append("Issix has became your new Master as you've given into him as his "+("pet" if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1) == 1 else "prostitute")+".")
|
||||
if(quest_rejection > 1):
|
||||
result.append("Issix rejected the idea of you being his pet after you failed his test.")
|
||||
return result
|
||||
|
||||
func isVisible():
|
||||
return GM.main.getModuleFlag("IssixModule", "Quest_Status") > 0
|
||||
|
||||
func isCompleted():
|
||||
return GM.main.getModuleFlag("IssixModule", "Quest_Status") > 10 or GM.main.getModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 0) > 1
|
||||
|
||||
func isMainQuest():
|
||||
return false
|
||||
|
||||
# quest_status - state (number)
|
||||
# 0 - no quest/haven't started
|
||||
# -1 - refused Issixs quest
|
||||
# 1 - accepted Issixs quest
|
||||
# 2 - arrived at closet
|
||||
# 3 - looted the gumball
|
||||
# 4 - gave the gumball to Issix
|
||||
# 5 - answered first part of questionnaire
|
||||
# 6 - answered second part of questionnaire, waits for the walk
|
||||
# 7 - got accepted as a pet
|
|
@ -1,8 +0,0 @@
|
|||
extends WorldEditBase
|
||||
|
||||
func _init():
|
||||
id = "IssixWorldEdit"
|
||||
|
||||
func apply(world: GameWorld):
|
||||
if(getFlag("IssixModule.Issix_Introduced")):
|
||||
world.setRoomSprite("hall_ne_corner", RoomStuff.RoomSprite.PERSON)
|
|
@ -1,67 +0,0 @@
|
|||
extends ItemBase
|
||||
|
||||
func _init():
|
||||
id = "CatnipPlant"
|
||||
|
||||
func getVisibleName():
|
||||
return "Catnip"
|
||||
|
||||
func getDescription():
|
||||
return "An enticing plant for most of felines. Used as harmfull drug, unless in large quantities. Can have effects on a feline if consumed."
|
||||
|
||||
func isFeline(character:BaseCharacter):
|
||||
return "feline" in character.getSpecies()
|
||||
|
||||
func canUseInCombat():
|
||||
return isFeline(GM.pc)
|
||||
|
||||
func useInCombat(_attacker:Character, _receiver):
|
||||
if(isFeline(_attacker)):
|
||||
if(!(_attacker.isPlayer() and GM.main.getFlag("HypnokinkModule.SoftOptIn") == false)):
|
||||
_attacker.addEffect(StatusEffect.UnderHypnosis)
|
||||
_attacker.addLust(10)
|
||||
removeXOrDestroy(1)
|
||||
return _attacker.getName() + " ate a catnip plant! That feels... Wahhaa."
|
||||
else:
|
||||
removeXOrDestroy(1)
|
||||
return _attacker.getName() + " ate a catnip plant! It didn't have any effect."
|
||||
|
||||
func getPossibleActions():
|
||||
if(isFeline(GM.pc)): # We really shouldn't assume the item is being used by a player character, but sadly game does not give us context for the item user :(
|
||||
return [
|
||||
{
|
||||
"name": "Eat one!",
|
||||
"scene": "UseItemLikeInCombatScene",
|
||||
"description": "Eat the catnip",
|
||||
},
|
||||
]
|
||||
else:
|
||||
return []
|
||||
|
||||
func getPrice():
|
||||
return 0
|
||||
|
||||
func canSell():
|
||||
return true
|
||||
|
||||
func canCombine():
|
||||
return true
|
||||
|
||||
func tryCombine(_otherItem):
|
||||
return .tryCombine(_otherItem)
|
||||
|
||||
func getTags():
|
||||
return []
|
||||
|
||||
func getItemCategory():
|
||||
return ItemCategory.Medical
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/Icons/catnip.png"
|
|
@ -1,62 +0,0 @@
|
|||
extends ItemBase
|
||||
|
||||
func _init():
|
||||
id = "IssixsMap"
|
||||
|
||||
func getVisibleName():
|
||||
return "Issix's Map"
|
||||
|
||||
func getDescription():
|
||||
return "A map showing directinons"
|
||||
|
||||
func canUseInCombat():
|
||||
return false
|
||||
|
||||
func useInCombat(_attacker:Character, _receiver):
|
||||
return "Map shows the following:\n\n[font=res://Fonts/smallconsolefont.tres]"+Util.readFile("res://Modules/IssixModule/Misc/asciimapsmall.txt")+"[/font]"
|
||||
|
||||
func getPossibleActions():
|
||||
if(true): # We really shouldn't assume the item is being used by a player character, but sadly game does not give us context for the item user :(
|
||||
return [
|
||||
{
|
||||
"name": "Look",
|
||||
"scene": "UseItemLikeInCombatScene",
|
||||
"description": "Look at the map",
|
||||
},
|
||||
]
|
||||
else:
|
||||
return [
|
||||
{
|
||||
"name": "Discard",
|
||||
"scene": "UseItemLikeInCombatScene",
|
||||
"description": "Discard this map, it won't be useful to you anymore.",
|
||||
},
|
||||
]
|
||||
|
||||
func getPrice():
|
||||
return 0
|
||||
|
||||
func canSell():
|
||||
return false
|
||||
|
||||
func canCombine():
|
||||
return false
|
||||
|
||||
func tryCombine(_otherItem):
|
||||
return .tryCombine(_otherItem)
|
||||
|
||||
func getTags():
|
||||
return []
|
||||
|
||||
func getItemCategory():
|
||||
return ItemCategory.Generic
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/Icons/issixsmap.png"
|
|
@ -1,55 +0,0 @@
|
|||
extends ItemBase
|
||||
|
||||
func _init():
|
||||
id = "Cookie"
|
||||
|
||||
func getVisibleName():
|
||||
return "Cookie"
|
||||
|
||||
func getDescription():
|
||||
return "A regular cookie, has brown chocolate chips on it."
|
||||
|
||||
func canUseInCombat():
|
||||
return true
|
||||
|
||||
func useInCombat(_attacker:Character, _receiver):
|
||||
_attacker.addStamina(15)
|
||||
removeXOrDestroy(1)
|
||||
return _attacker.getName() + " ate a cookie. They feel a little bit more full."
|
||||
|
||||
func getPossibleActions(): # We really shouldn't assume the item is being used by a player character, but sadly game does not give us context for the item user :(
|
||||
return [
|
||||
{
|
||||
"name": "Eat one!",
|
||||
"scene": "UseItemLikeInCombatScene",
|
||||
"description": "Eat the cookie",
|
||||
},
|
||||
]
|
||||
|
||||
func getPrice():
|
||||
return 0
|
||||
|
||||
func canSell():
|
||||
return true
|
||||
|
||||
func canCombine():
|
||||
return true
|
||||
|
||||
func tryCombine(_otherItem):
|
||||
return .tryCombine(_otherItem)
|
||||
|
||||
func getTags():
|
||||
return []
|
||||
|
||||
func getItemCategory():
|
||||
return ItemCategory.Generic
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/Icons/cookie.png"
|
Before Width: | Height: | Size: 3.5 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/catnip.png-13dd8fa59071100df582cb0019f4a872.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/Icons/catnip.png"
|
||||
dest_files=[ "res://.import/catnip.png-13dd8fa59071100df582cb0019f4a872.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 5.7 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/cookie.png-f1fa6ed634f5e8bfb60119807c8f2242.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/Icons/cookie.png"
|
||||
dest_files=[ "res://.import/cookie.png-f1fa6ed634f5e8bfb60119807c8f2242.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 3.4 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/issixsmap.png-60f60f2134d573028bb0fd9dd4d9a13e.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/Icons/issixsmap.png"
|
||||
dest_files=[ "res://.import/issixsmap.png-60f60f2134d573028bb0fd9dd4d9a13e.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
BIN
Items/catnip.png
Before Width: | Height: | Size: 3.5 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/catnip.png-225c9de9d66fa9225bcc1239ca3cabf0.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/catnip.png"
|
||||
dest_files=[ "res://.import/catnip.png-225c9de9d66fa9225bcc1239ca3cabf0.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
BIN
Items/cookie.png
Before Width: | Height: | Size: 5.7 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/cookie.png-bc8b9cb3712e5314bb44b4aeb129e69d.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/cookie.png"
|
||||
dest_files=[ "res://.import/cookie.png-bc8b9cb3712e5314bb44b4aeb129e69d.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 3.4 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/issixsmap.png-69be316bd4e4ee3cbbea8dd1d419b13b.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Items/issixsmap.png"
|
||||
dest_files=[ "res://.import/issixsmap.png-69be316bd4e4ee3cbbea8dd1d419b13b.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
|
@ -1,19 +0,0 @@
|
|||
██????██
|
||||
██????██
|
||||
██████████████████^^^^██████████████████████████████
|
||||
██████ ████████ ████████████████████MMMM██████
|
||||
██████ ████████ ████████████████████MMMM██████
|
||||
██ | ██
|
||||
██ | ██
|
||||
██████████ ████████████ | ████████EEEE██████
|
||||
██████████ ████████████ | ████████EEEE█████
|
||||
██ ████████████████████████████████████
|
||||
██ ███████████
|
||||
██████████ XXX ██ ██
|
||||
██████████ XXX ██ ██ ████ 69
|
||||
██████ ██ ██ ██████████ ██
|
||||
██████ ██ ██ ██ ██ ██
|
||||
██████████VVVV██ ██ ██ ██
|
||||
██ ██████████ ██
|
||||
██ ██ ████
|
||||
██
|
249
Module.gd
|
@ -1,249 +0,0 @@
|
|||
extends Module
|
||||
class_name IssixModule
|
||||
|
||||
const APPROX_WALK_DELAY = 9
|
||||
|
||||
func getFlags():
|
||||
return {
|
||||
"Issix_Introduced": flag(FlagType.Bool),
|
||||
"Pets_Introduced": flag(FlagType.Bool),
|
||||
"Score_Explored": flag(FlagType.Number),
|
||||
"Quest_Status": flag(FlagType.Number),
|
||||
"Quest_Rejected_By_Issix": flag(FlagType.Number),
|
||||
"Azazel_Catnip_noticed": flag(FlagType.Bool),
|
||||
"Azazel_Catnip_taken_today": flag(FlagType.Bool),
|
||||
"Azazel_Affection_given": flag(FlagType.Number),
|
||||
"Lamia_Times_Helped": flag(FlagType.Number),
|
||||
"Hiisi_Affection": flag(FlagType.Number),
|
||||
"Hiisi_Put_Sabotaged_Headvisors": flag(FlagType.Bool),
|
||||
"Helped_Lamia_With_Drawings_Today": flag(FlagType.Bool),
|
||||
"Quest_Bonked": flag(FlagType.Bool),
|
||||
"Quest_Wait_Another_Day": flag(FlagType.Bool),
|
||||
"Activated_Cabinets": flag(FlagType.Dict),
|
||||
"Medical_Peeked": flag(FlagType.Bool),
|
||||
"QuestionnaireQ1": flag(FlagType.Bool), # Creatures possess a soul
|
||||
"QuestionnaireQ2": flag(FlagType.Bool),
|
||||
"QuestionnaireQ3": flag(FlagType.Text),
|
||||
"QuestionnaireQ4": flag(FlagType.Bool),
|
||||
"QuestionnaireQ5": flag(FlagType.Text),
|
||||
"QuestionnaireQ6": flag(FlagType.Bool),
|
||||
"QuestionnaireQ7": flag(FlagType.Bool),
|
||||
"QuestionnaireQ8": flag(FlagType.Text),
|
||||
"QuestionnaireQ9": flag(FlagType.Bool),
|
||||
"QuestionnaireQ10": flag(FlagType.Number),
|
||||
"QuestionnaireQ11": flag(FlagType.Bool),
|
||||
"Lamia_Is_Hungry": flag(FlagType.Bool),
|
||||
"Azazel_Sky_Response": flag(FlagType.Bool),
|
||||
"Received_Portrait_From_Lamia": flag(FlagType.Bool),
|
||||
"Placed_Portrait_In_Cell": flag(FlagType.Bool),
|
||||
"Hissi_RPS_data": flag(FlagType.Dict),
|
||||
"Hiisi_Name_Helped": flag(FlagType.Bool),
|
||||
"Shared_Marshmallows": flag(FlagType.Bool),
|
||||
|
||||
# Slavery related
|
||||
"PC_Enslavement_Role": flag(FlagType.Number),
|
||||
"PC_Enslavement_Noncon": flag(FlagType.Bool),
|
||||
"PC_Training_Level": flag(FlagType.Number),
|
||||
"Issix_Mood": flag(FlagType.Number),
|
||||
"Todays_Bred_Slave": flag(FlagType.Text),
|
||||
"Progression_Day_Next": flag(FlagType.Number),
|
||||
"Last_Day_Visited_Master": flag(FlagType.Number),
|
||||
"Misc_Slavery_Info": flag(FlagType.Dict),
|
||||
"Progression_Points": flag(FlagType.Number),
|
||||
"Taught_To_Use_Bowl": flag(FlagType.Bool),
|
||||
"Issix_Branded_PC": flag(FlagType.Bool),
|
||||
"Pet_Time_Interaction_Today": flag(FlagType.Number),
|
||||
"Is_Player_Forced_Today": flag(FlagType.Number), # If player is forced to stay in harem this will have amount of seconds player needs to spend in the harem today
|
||||
"Last_Walk": flag(FlagType.Number),
|
||||
"Eaten_Today": flag(FlagType.Bool),
|
||||
"Comic_Books": flag(FlagType.Number),
|
||||
"Comic_Book_Unlocked": flag(FlagType.Bool),
|
||||
"Strikes_For_Disobedience": flag(FlagType.Number),
|
||||
"Unwelcome_At_Corner": flag(FlagType.Bool),
|
||||
"Had_Sex_With_Issix": flag(FlagType.Bool),
|
||||
"Litter_Guessing_Game": flag(FlagType.Dict),
|
||||
"Have_Received_Headpats_Lamia": flag(FlagType.Bool),
|
||||
"Received_Headpats_From_Lamia": flag(FlagType.Number)
|
||||
#"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :(
|
||||
}
|
||||
|
||||
|
||||
func _init():
|
||||
id = "IssixModule"
|
||||
author = "Frisk"
|
||||
|
||||
events = [
|
||||
"res://Modules/IssixModule/Events/EngRoomClosetEvent.gd",
|
||||
"res://Modules/IssixModule/Events/EventTileOnEnter.gd",
|
||||
"res://Modules/IssixModule/Events/GreenhouseCatnipEvent.gd",
|
||||
"res://Modules/IssixModule/Events/IssixQuestionnaireEvent.gd",
|
||||
"res://Modules/IssixModule/Events/MedicalPeekEvent.gd",
|
||||
"res://Modules/IssixModule/Events/PetWalkExamEvent.gd",
|
||||
"res://Modules/IssixModule/Events/PlayerCellModifierEvent.gd",
|
||||
"res://Modules/IssixModule/Events/CornerPriorityEvent.gd",
|
||||
"res://Modules/IssixModule/Events/SlaveryIntroEvent.gd",
|
||||
"res://Modules/IssixModule/Events/IssixRegularSearch.gd"
|
||||
#"res://Modules/IssixModule/Events/Overwrites/BullyGangEvent.gd" Cannot overwrite module that loads after
|
||||
]
|
||||
|
||||
scenes = [
|
||||
"res://Modules/IssixModule/Scenes/EngRoomScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/GreenhouseCatnipStealScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/IssixQuestionnaireScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/IssixTalkMain.gd",
|
||||
"res://Modules/IssixModule/Scenes/MedicalPeekScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/NoPetsTalkMain.gd",
|
||||
"res://Modules/IssixModule/Scenes/PetsTalkMain.gd",
|
||||
"res://Modules/IssixModule/Scenes/PetWalkExamScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/PlayerCellModifierScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/Overwrites/EatInCanteenScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryBrandingScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/CaughtInTheCloset.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryIntroScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixBringsComicbooks.gd",
|
||||
#"res://Modules/IssixModule/Scenes/Overwrites/BullyGangScene.gd"
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd"
|
||||
]
|
||||
|
||||
characters = [
|
||||
"res://Modules/IssixModule/Characters/AzazelCharacter.gd",
|
||||
"res://Modules/IssixModule/Characters/HiisiCharacter.gd",
|
||||
"res://Modules/IssixModule/Characters/IssixCharacter.gd",
|
||||
"res://Modules/IssixModule/Characters/LamiaCharacter.gd"
|
||||
]
|
||||
|
||||
worldEdits = [
|
||||
"res://Modules/IssixModule/IssixWorldEdit.gd"
|
||||
]
|
||||
|
||||
items = [
|
||||
"res://Modules/IssixModule/Items/CatnipItem.gd",
|
||||
"res://Modules/IssixModule/Items/ClosetMap.gd",
|
||||
"res://Modules/IssixModule/Items/CookieItem.gd" # I just felt like this game needs more variety in items, even if by themselves they don't do much
|
||||
]
|
||||
|
||||
quests = [
|
||||
"res://Modules/IssixModule/IssixPetQuest.gd"
|
||||
]
|
||||
|
||||
GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/")
|
||||
GlobalRegistry.registerSkinsFolder("res://Modules/IssixModule/Skins/")
|
||||
GlobalRegistry.registerStatusEffectFolder("res://Modules/IssixModule/StatusEffects/")
|
||||
GlobalRegistry.sortRegisteredStatusEffectsByPriority()
|
||||
GlobalRegistry.registerMapFloorFolder("res://Modules/IssixModule/Floors/")
|
||||
GlobalRegistry.registerSpeechModifiersFolder("res://Modules/IssixModule/SpeechModifiers/")
|
||||
GlobalRegistry.registerAttackFolder("res://Modules/IssixModule/Attacks/", true)
|
||||
|
||||
# External
|
||||
# "res://Scenes/ParadedOnALeashScene.gd"
|
||||
# "res://Game/World/Floors/Closet.gd"
|
||||
# "res://Game/World/Floors/Closet.tscn"
|
||||
|
||||
static func addSceneToWatched(scene: String):
|
||||
var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
|
||||
scenes["scenes_seen"].append(scene)
|
||||
GM.main.setModuleFlag("IssixModule", "Misc_Slavery_Info", scenes.duplicate(true))
|
||||
|
||||
static func addIssixMood(mood: int):
|
||||
GM.main.setModuleFlag("IssixModule", "Issix_Mood", clamp(GM.main.getModuleFlag("IssixModule", "Issix_Mood", 50)+mood, 0, 100))
|
||||
|
||||
static func getWalkDelay():
|
||||
return APPROX_WALK_DELAY
|
||||
|
||||
static func getPlayerRole():
|
||||
return "pet" if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1) == 1 else "prostitute"
|
||||
|
||||
static func playerToFuck():
|
||||
return not (int(GM.main.getDays()) % 2 != 0) and GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "") == "pc"
|
||||
|
||||
static func getPlayerPetName():
|
||||
if Species.Canine in GM.pc.getSpecies():
|
||||
return "puppy"
|
||||
elif Species.Feline in GM.pc.getSpecies():
|
||||
return "kitty"
|
||||
elif Species.Equine in GM.pc.getSpecies():
|
||||
return "pony"
|
||||
else:
|
||||
return "pet"
|
||||
|
||||
func breedSlaveIfNpc():
|
||||
## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event?
|
||||
if not (int(GM.main.getDays()) % 2 != 0): # Breed only every second day?
|
||||
GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", "thischardoesntexist")
|
||||
return
|
||||
var available_slaves = ['azazel', 'pc', 'hiisi']
|
||||
available_slaves.erase(GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "pc")) # Don't repeat same slave every day'
|
||||
var current_slave = RNG.pick(available_slaves)
|
||||
GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", current_slave)
|
||||
if current_slave == "pc":
|
||||
return # This will be handled by separate event
|
||||
current_slave = GM.main.getCharacter(current_slave)
|
||||
GlobalRegistry.getCharacter("issix").prepareForSexAsDom()
|
||||
if RNG.chance(5):
|
||||
current_slave.cummedInMouthBy("issix")
|
||||
if current_slave.hasVagina(): # azazel
|
||||
current_slave.cummedInVaginaBy("issix", FluidSource.Penis, 1.8)
|
||||
print("Azazel cummed in")
|
||||
if RNG.chance(40):
|
||||
current_slave.cummedInAnusBy("issix", FluidSource.Penis, 1.2)
|
||||
else: # hiisi
|
||||
print("Hiisi cummed in")
|
||||
current_slave.cummedInAnusBy("issix")
|
||||
|
||||
func calculateDailyScore() -> int:
|
||||
## For calculating player's daily activities at the end of the day
|
||||
var score = 0
|
||||
if playerToFuck():
|
||||
if GM.main.getModuleFlag("IssixModule", "Had_Sex_With_Issix", false) == false:
|
||||
score -= 5
|
||||
else:
|
||||
score += 5
|
||||
if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 1:
|
||||
var time_forced = GM.main.getModuleFlag("IssixModule", "Is_Player_Forced_Today", 0)
|
||||
var time_served = GM.main.getModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)
|
||||
if time_forced > 0:
|
||||
if time_served >= time_forced:
|
||||
score += 1
|
||||
else:
|
||||
score -= 7
|
||||
else:
|
||||
if time_served >= 60*60:
|
||||
score += 1
|
||||
else:
|
||||
score -= 5
|
||||
return score
|
||||
|
||||
func tickDay():
|
||||
addIssixMood(RNG.randi_range(-7, 7))
|
||||
if GM.pc.getLocation() != "medical_paddedcell_player":
|
||||
pass # TODO Bust out scene
|
||||
elif (GM.main.getDays() - GM.main.getModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()) > 1):
|
||||
addIssixMood(-10)
|
||||
addIssixMood(calculateDailyScore())
|
||||
if int(GM.main.getDays()) % 7 == 0:
|
||||
GM.main.increaseModuleFlag("IssixModule", "Comic_Books", RNG.randi_range(5, 8))
|
||||
if int(GM.main.getDays()) % 30 == 0 and GM.main.getModuleFlag("IssixModule", "Strikes_For_Disobedience", 0) > 0: # every 30 days remove one strike
|
||||
GM.main.increaseModuleFlag("IssixModule", "Strikes_For_Disobedience", -1)
|
||||
if GM.main.getDays()-GM.main.getModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()) == APPROX_WALK_DELAY:
|
||||
GM.main.setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays())
|
||||
|
||||
|
||||
func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay does not have ANY other hooks I can use and SleepInCell as a trigger is not covering all cases of days passing by
|
||||
if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) > 0: # Slavery module
|
||||
tickDay()
|
||||
if GM.main.getModuleFlag("IssixModule", "Have_Received_Headpats_Lamia") != null:
|
||||
GM.main.setModuleFlag("IssixModule", "Have_Received_Headpats_Lamia", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Azazel_Catnip_taken_today", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Activated_Cabinets", {})
|
||||
GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Unwelcome_At_Corner", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Had_Sex_With_Issix", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Is_Player_Forced_Today", 0)
|
||||
breedSlaveIfNpc()
|
||||
if GM.main.getModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today") != null:
|
||||
GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false)
|
||||
GM.main.setModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)
|
||||
GM.main.setModuleFlag("IssixModule", "Eaten_Today", false)
|
|
@ -1,51 +0,0 @@
|
|||
extends RepStatBase
|
||||
# Currently just an idea
|
||||
func _init():
|
||||
id = "PCSlave"
|
||||
|
||||
func getVisibleName():
|
||||
return "Slave's Reputation"
|
||||
|
||||
func getMaxLevel() -> int:
|
||||
return 4
|
||||
|
||||
func getMinLevel() -> int:
|
||||
return -1
|
||||
|
||||
func getTextForLevel(_level:int, _rep):
|
||||
if(_level <= -1):
|
||||
return "Regular"
|
||||
if(_level == 0):
|
||||
return "Unknown"
|
||||
if(_level == 1):
|
||||
return "Servant"
|
||||
if(_level == 2):
|
||||
return "Owned slut"
|
||||
if(_level == 3):
|
||||
return "Slave"
|
||||
if(_level == 4):
|
||||
return "Someone's property"
|
||||
return "FUCK TOY"
|
||||
|
||||
#func getSpecialRequirementToReachLevel(_level:int, _rep):
|
||||
# if(_level == 3):
|
||||
# return ["enslavesomeone", "Enslave anyone"]
|
||||
# if(_level == 5):
|
||||
# return ["makeobey", "Make any slave submit to you.. or break their mind"]
|
||||
#
|
||||
# return null
|
||||
|
||||
func getEffectsInfoForLevel(_level:int, _rep) -> Array:
|
||||
if(_level <= 3):
|
||||
return ["More degradation from the inmates"]
|
||||
if(_level <= 5):
|
||||
return [
|
||||
"Less encounters with inmates, less cheating.",
|
||||
]
|
||||
if(_level <= 8):
|
||||
return [
|
||||
""
|
||||
]
|
||||
return [
|
||||
"Easier to make friends with staff.",
|
||||
]
|
|
@ -1,16 +0,0 @@
|
|||
extends SkinBase
|
||||
|
||||
func _init():
|
||||
id = "AzazelSkin"
|
||||
|
||||
func getName():
|
||||
return "Azazel"
|
||||
|
||||
func getPatternTexture():
|
||||
return preload("res://Modules/IssixModule/Skins/AzazelSkin/AzazelSkin.png")
|
||||
|
||||
func getFittingSkinTypes():
|
||||
return {
|
||||
SkinType.Fur: 1.0,
|
||||
SkinType.Scales: 0.0,
|
||||
}
|
Before Width: | Height: | Size: 194 KiB |
|
@ -1,35 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/AzazelSkin.png-4d000ffaba6bb3818dfcb0d471df4950.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Skins/AzazelSkin/AzazelSkin.png"
|
||||
dest_files=[ "res://.import/AzazelSkin.png-4d000ffaba6bb3818dfcb0d471df4950.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=0
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
|
@ -1,11 +0,0 @@
|
|||
extends SpeechModifierBase
|
||||
|
||||
func _init(): # Assure that Lamia never is assigned any kind of dialogue by the game
|
||||
id = "LamiaMute"
|
||||
priority = 1001
|
||||
|
||||
func appliesTo(_speaker: BaseCharacter) -> bool:
|
||||
return _speaker.getID() == "lamia"
|
||||
|
||||
func modify(_text: String, _speaker: BaseCharacter) -> String:
|
||||
return "..."
|
|
@ -1,48 +0,0 @@
|
|||
extends StatusEffectBase
|
||||
|
||||
func _init():
|
||||
id = "AfterBrandPain"
|
||||
isBattleOnly = false
|
||||
|
||||
func initArgs(_args = []):
|
||||
if(_args.size() > 0):
|
||||
turns = _args[0]
|
||||
else:
|
||||
turns = 48*60*60
|
||||
|
||||
func processBattleTurn():
|
||||
pass
|
||||
|
||||
func processTime(_secondsPassed: int):
|
||||
turns -= _secondsPassed
|
||||
if(turns <= 0):
|
||||
stop()
|
||||
|
||||
func getEffectName():
|
||||
return "Branding pain"
|
||||
|
||||
func getEffectDesc():
|
||||
return "Your skin burns like fire and you can't wear any clothes for "+Util.getTimeStringHumanReadable(turns)
|
||||
|
||||
func getEffectImage():
|
||||
return "res://Modules/IssixModule/StatusEffects/brandpain.png"
|
||||
|
||||
func getIconColor():
|
||||
return IconColorRed
|
||||
|
||||
func combine(_args = []):
|
||||
if(_args.size() > 0):
|
||||
turns = max(_args[0], turns)
|
||||
|
||||
func getBuffs():
|
||||
return [
|
||||
buff(Buff.AmbientPainBuff, [40.0]),
|
||||
]
|
||||
|
||||
func saveData():
|
||||
return {
|
||||
"turns": turns,
|
||||
}
|
||||
|
||||
func loadData(_data):
|
||||
turns = SAVE.loadVar(_data, "turns", 60*60)
|