30.11 updates
This commit is contained in:
parent
794cd8705a
commit
2a31a0767e
|
@ -23,6 +23,10 @@ func _init():
|
|||
PersonalityStat.Naive: 1.0,
|
||||
PersonalityStat.Coward: 0.7,
|
||||
}
|
||||
npcLevel = 8
|
||||
npcBasePain = 80
|
||||
npcBaseLust = 80
|
||||
npcBaseStamina = 80
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.Loves,
|
||||
|
|
|
@ -23,6 +23,10 @@ func _init():
|
|||
PersonalityStat.Naive: -1.0,
|
||||
PersonalityStat.Coward: -0.4,
|
||||
}
|
||||
npcLevel = 25
|
||||
npcBasePain = 250
|
||||
npcBaseLust = 250
|
||||
npcBaseStamina = 200
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
|
|
|
@ -24,6 +24,11 @@ func _init():
|
|||
PersonalityStat.Naive: -1.0,
|
||||
PersonalityStat.Coward: -0.7,
|
||||
}
|
||||
npcLevel = 50
|
||||
npcBasePain = 500
|
||||
npcBaseLust = 500
|
||||
npcBaseStamina = 500
|
||||
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
|
|
|
@ -24,6 +24,10 @@ func _init():
|
|||
PersonalityStat.Coward: -0.4,
|
||||
}
|
||||
npcDefaultFetishInterest = FetishInterest.Neutral
|
||||
npcLevel = 20
|
||||
npcBasePain = 180
|
||||
npcBaseLust = 2000
|
||||
npcBaseStamina = 100
|
||||
npcFetishes = {
|
||||
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
|
||||
Fetish.AnalSexGiving : FetishInterest.Hates,
|
||||
|
|
12
Floors/Closet.gd
Normal file
12
Floors/Closet.gd
Normal file
|
@ -0,0 +1,12 @@
|
|||
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()
|
25
Floors/Closet.tscn
Normal file
25
Floors/Closet.tscn
Normal file
|
@ -0,0 +1,25 @@
|
|||
[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"]
|
|
@ -64,4 +64,4 @@ func loadData(data):
|
|||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/catnip.png"
|
||||
return "res://Modules/IssixModule/Items/Icons/catnip.png"
|
|
@ -59,4 +59,4 @@ func loadData(data):
|
|||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/issixsmap.png"
|
||||
return "res://Modules/IssixModule/Items/Icons/issixsmap.png"
|
|
@ -52,4 +52,4 @@ func loadData(data):
|
|||
.loadData(data)
|
||||
|
||||
func getInventoryImage():
|
||||
return "res://Modules/IssixModule/Items/cookie.png"
|
||||
return "res://Modules/IssixModule/Items/Icons/cookie.png"
|
BIN
Items/Icons/catnip.png
Normal file
BIN
Items/Icons/catnip.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
35
Items/Icons/catnip.png.import
Normal file
35
Items/Icons/catnip.png.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[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
|
BIN
Items/Icons/cookie.png
Normal file
BIN
Items/Icons/cookie.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.7 KiB |
35
Items/Icons/cookie.png.import
Normal file
35
Items/Icons/cookie.png.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[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
|
BIN
Items/Icons/issixsmap.png
Normal file
BIN
Items/Icons/issixsmap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
35
Items/Icons/issixsmap.png.import
Normal file
35
Items/Icons/issixsmap.png.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[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
|
11
Module.gd
11
Module.gd
|
@ -82,7 +82,8 @@ func _init():
|
|||
"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/SlaveryFirst/SlaveryBrandingScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/CaughtInTheCloset.gd"
|
||||
]
|
||||
|
||||
characters = [
|
||||
|
@ -97,9 +98,7 @@ func _init():
|
|||
]
|
||||
|
||||
items = [
|
||||
"res://Modules/IssixModule/CatnipItem.gd",
|
||||
"res://Modules/IssixModule/MapItem.gd",
|
||||
"res://Modules/IssixModule/CookieItem.gd" # I just felt like this game needs more variety in items, even if by themselves they don't do much
|
||||
"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 = [
|
||||
|
@ -107,6 +106,10 @@ func _init():
|
|||
]
|
||||
|
||||
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/")
|
||||
|
||||
# External
|
||||
# "res://Scenes/ParadedOnALeashScene.gd"
|
||||
|
|
231
Scenes/CaughtInTheCloset.gd
Normal file
231
Scenes/CaughtInTheCloset.gd
Normal file
|
@ -0,0 +1,231 @@
|
|||
# Based off https://github.com/Alexofp/BDCC/blob/3c1dc5f933c54971a60687abf539f8e0a3d15f7f/Modules/MedicalModule/NurseCaughtOfflimitsScene.gd
|
||||
|
||||
extends SceneBase
|
||||
|
||||
var npcID = ""
|
||||
var sawBefore = false
|
||||
var npcVariation = ""
|
||||
var foundIllegalItems = false
|
||||
|
||||
func _init():
|
||||
sceneID = "ClosetCaughtOfflimitsScene"
|
||||
|
||||
func _initScene(_args = []):
|
||||
npcID = NpcFinder.grabNpcIDFromPoolOrGenerate(CharacterPool.Engineers, [], EngineerGenerator.new(), {NpcGen.Level: 30})
|
||||
var npc = GlobalRegistry.getCharacter(npcID)
|
||||
|
||||
if(npc.getFlag(CharacterFlag.Introduced)):
|
||||
sawBefore = true
|
||||
else:
|
||||
npc.setFlag(CharacterFlag.Introduced, true)
|
||||
|
||||
var personality:Personality = npc.getPersonality()
|
||||
if(personality.getStat(PersonalityStat.Mean) > 0.3 || personality.getStat(PersonalityStat.Subby) < -0.6):
|
||||
npcVariation = "mean"
|
||||
if(personality.getStat(PersonalityStat.Mean) < -0.3):
|
||||
npcVariation = "kind"
|
||||
if(personality.getStat(PersonalityStat.Subby) > 0.6 || personality.getStat(PersonalityStat.Coward) > 0.8):
|
||||
npcVariation = "subby"
|
||||
|
||||
func resolveCustomCharacterName(_charID):
|
||||
if(_charID == "npc"):
|
||||
return npcID
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
addCharacter(npcID)
|
||||
playAnimation(StageScene.Duo, "stand", {npc=npcID})
|
||||
|
||||
if(state == ""):
|
||||
# (new guard)
|
||||
saynn("You suddenly hear the doors just behind you opening, slight breeze of air hitting your back.")
|
||||
if(!sawBefore):
|
||||
saynn("[say=npc]Huh? How did you get in here? You are not supposed to be here, inmate![/say]")
|
||||
# (old guard)
|
||||
else:
|
||||
saynn("[say=npc]Huh? Hey, I do recognize you! Inmate number {pc.inmateNumber}! I don't know how you got here but you are not supposed to be here.[/say]")
|
||||
# (end)
|
||||
|
||||
saynn("You turn towards {npc.him} and see {npc.him} hitting their other paw with the wrench, looking at you with anger.")
|
||||
|
||||
addButton("Attack", "No way to run, might as well fight", "attack")
|
||||
addButton("Offer body", "Maybe you can try to seduce them", "offer_body")
|
||||
|
||||
if(state == "attack"):
|
||||
|
||||
saynn("You lash out at {npc.name}! {npc.He} lifts up {npc.his} wrench in anticipation.")
|
||||
if !GM.pc.isFullyNaked():
|
||||
saynn("[say=npc]Better start emptying your pockets.[/say]")
|
||||
else:
|
||||
saynn("[say=npc]Drop everything you got in here to the ground, not that you'll have any use of it anyways.[/say]")
|
||||
|
||||
addButton("Fight", "Start the fight", "startfight")
|
||||
|
||||
|
||||
|
||||
if(state == "if_lost"):
|
||||
saynn("You collapse, unable to continue fighting.")
|
||||
|
||||
# (default)
|
||||
if(npcVariation != "mean"):
|
||||
saynn("[say=npc]Attacking me wasn’t such a smart idea, was it?[/say]")
|
||||
|
||||
# (if mean)
|
||||
else:
|
||||
saynn("[say=npc]That’s what I thought, bitch.[/say]")
|
||||
|
||||
#saynn("{npc.He} goes through your things and confiscates anything illegal.")
|
||||
saynn("{npc.He} kneels near you.")
|
||||
|
||||
saynn("[say=npc]And now it’s time to have some fun with you.[/say]")
|
||||
|
||||
saynn("Since you can’t really fight back anymore, your only choice is to submit.")
|
||||
|
||||
# (sex)
|
||||
addButton("Get fucked", "Well, you lost", "startsexsubbyforced")
|
||||
|
||||
|
||||
if(state == "if_won"):
|
||||
saynn("You pin the defeated engineer to the floor. {npc.He} doesn’t seem to struggle much.")
|
||||
|
||||
saynn("[say=npc]And now what?[/say]")
|
||||
|
||||
# (Options are sex or leave them be, Inventory, Struggle)
|
||||
|
||||
# (Need everything to be free to fuck)
|
||||
|
||||
addWonButton()
|
||||
|
||||
if(state == "offer_body"):
|
||||
saynn("Hoping that the engineer will overlook your little escapade to the closet you start showing off your {pc.masc} curves.")
|
||||
|
||||
if GlobalRegistry.getCharacter(npcID).hasPenis():
|
||||
saynn("[say=pc]Perhaps you'd be interested in using your other wrench?[/say]")
|
||||
else:
|
||||
saynn("[say=pc]Are you maybe interested in having a piece of me, without too much violence?[/say]")
|
||||
|
||||
|
||||
if GM.main.RS.getLust("pc", npcID) > 0.2:
|
||||
saynn("{npc.He} checks you out")
|
||||
|
||||
saynn("[say=npc]Alright, I like this idea, show me what you've got there.[/say]")
|
||||
|
||||
addButton("Get fucked", "Let them have it", "startsexsubby")
|
||||
else:
|
||||
saynn("{npc.He} checks you out and shakes {npc.his} head.")
|
||||
|
||||
saynn("[say=npc]No way, slut. You are getting your butt kicked today[/say]")
|
||||
|
||||
addButton("Fight", "They are not letting you off the hook so easily", "startfight")
|
||||
|
||||
|
||||
if(state == "after_sex" || state == "after_sex_won"):
|
||||
saynn("After the fun time ends, the engineer opens one of the cabinets, picks up thing they need and leave.")
|
||||
|
||||
saynn("[say=npc]You gave me a good fuck so as a present you can stay here, but don't fuck anything up or I'll rough you up next time.[/say]")
|
||||
|
||||
# (scene ends)
|
||||
addButton("Continue", "Moving on", "endthescene")
|
||||
|
||||
if state == "after_sex_forced":
|
||||
saynn("[say=npc]At least I got a good fuck out of it. Now begone.[/say]")
|
||||
|
||||
saynn("The engineer not wanting to risk you rummaging through the closet kicked you out and forcefully dragged you out of the off-limits zone.")
|
||||
|
||||
GM.pc.setLocation("eng_bay_corridor")
|
||||
aimCameraAndSetLocName("eng_bay_corridor")
|
||||
if getModuleFlag("IssixModule", "Quest_Status") == 2:
|
||||
addButton("Continue", "You've been kicked out of the closet, you should probably go there some other time", "endthesceneout")
|
||||
elif getModuleFlag("IssixModule", "Quest_Status") == 3:
|
||||
addButton("Continue", "You've been kicked out of the closet, but you've got what you needed from there anyways", "endthesceneout")
|
||||
else:
|
||||
addButton("Continue", "You've been kicked out of the closet", "endthesceneout")
|
||||
|
||||
if(state == "after_sex"):
|
||||
GM.ES.triggerRun(Trigger.AfterSexWithDynamicNPCThatWon, [npcID])
|
||||
|
||||
if(state == "after_sex_won"):
|
||||
GM.ES.triggerRun(Trigger.AfterSexWithDefeatedDynamicNPC, [npcID])
|
||||
|
||||
|
||||
func addWonButton():
|
||||
addButton("Continue", "Kick them out of the closet and close the doors", "endthescene")
|
||||
addDisabledButton("Sex!", "You decide it's not the best idea here, just a matter of time until other engineers come look for you")
|
||||
addButton("Inventory", "Look at your inventory", "openinventory")
|
||||
if(GM.pc.getInventory().hasRemovableRestraints()):
|
||||
addButton("Struggle", "Struggle out of your restraints", "strugglemenu")
|
||||
GM.ES.triggerRun(Trigger.DefeatedDynamicNPC, [npcID])
|
||||
|
||||
func _react(_action: String, _args):
|
||||
|
||||
if(_action == "endthesceneout"):
|
||||
endScene(['out'])
|
||||
return
|
||||
|
||||
if _action == "endthescene":
|
||||
endScene(['closet'])
|
||||
return
|
||||
|
||||
if(_action == "startfight"):
|
||||
runScene("FightScene", [npcID], "guardfight") # I wish I could affect more how this specific fight goes. I feel like at this point the player is rather powerful in the attacks, the game doesn't seem to scale it very well IMO. '
|
||||
|
||||
if(_action == "startsexsubby"):
|
||||
getCharacter(npcID).prepareForSexAsDom()
|
||||
GlobalRegistry.getCharacter(npcID).addPain(-50)
|
||||
runScene("GenericSexScene", [npcID, "pc"], "subbysex")
|
||||
|
||||
if _action == "startsexsubbyforced":
|
||||
getCharacter(npcID).prepareForSexAsDom()
|
||||
GlobalRegistry.getCharacter(npcID).addPain(-50)
|
||||
runScene("GenericSexScene", [npcID, "pc"], "subbysexforced")
|
||||
|
||||
if(_action == "openinventory"):
|
||||
runScene("InventoryScene")
|
||||
return
|
||||
|
||||
if(_action == "strugglemenu"):
|
||||
runScene("StrugglingScene")
|
||||
return
|
||||
|
||||
setState(_action)
|
||||
|
||||
|
||||
func _react_scene_end(_tag, _result):
|
||||
if _tag == "subbysex":
|
||||
setState("after_sex")
|
||||
|
||||
if _tag == "subbysexforced":
|
||||
setState("after_sex_forced")
|
||||
|
||||
if(_tag == "guardfight"):
|
||||
processTime(20 * 60)
|
||||
var battlestate = _result[0]
|
||||
#var wonHow = _result[1]
|
||||
|
||||
if(battlestate == "win"):
|
||||
setState("if_won")
|
||||
addExperienceToPlayer(30)
|
||||
else:
|
||||
setState("if_lost")
|
||||
addExperienceToPlayer(5)
|
||||
|
||||
#GM.pc.getInventory().removeItemsList(GM.pc.getInventory().getItemsWithTag(ItemTag.Illegal))
|
||||
#GM.pc.getInventory().removeEquippedItemsList(GM.pc.getInventory().getEquippedItemsWithTag(ItemTag.Illegal))
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
|
||||
data["npcID"] = npcID
|
||||
data["sawBefore"] = sawBefore
|
||||
data["npcVariation"] = npcVariation
|
||||
data["foundIllegalItems"] = foundIllegalItems
|
||||
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
npcID = SAVE.loadVar(data, "npcID", "")
|
||||
sawBefore = SAVE.loadVar(data, "sawBefore", false)
|
||||
npcVariation = SAVE.loadVar(data, "npcVariation", "")
|
||||
foundIllegalItems = SAVE.loadVar(data, "foundIllegalItems", false)
|
|
@ -57,10 +57,10 @@ func _run():
|
|||
if state=="leave":
|
||||
if(GM.pc.isBlindfolded()):
|
||||
if(GM.pc.hasBlockedHands()):
|
||||
saynn("You attempt to retrace your setps back where you came from, however it seems like whatever you went through has closed. It's hard to judge how can you even open the doors. After a while of trying, you blast the doors with a serios of forceful pushes, it does not budge.")
|
||||
saynn("You attempt to retrace your steps back where you came from, however it seems like whatever you went through has closed. It's hard to judge how can you even open the doors. After a while of trying, you blast the doors with a serios of forceful pushes, it does not budge.")
|
||||
processTime(7*60)
|
||||
else:
|
||||
saynn("You attempt to retrace your setps back where you came from, however it seems like whatever you went through has closed. Thankfully, it seems like from this end there is a very analog door handle that pulling seems to lead back to the hallway. Or at least you judge that from the sounds.")
|
||||
saynn("You attempt to retrace your steps back where you came from, however it seems like whatever you went through has closed. Thankfully, it seems like from this end there is a very analog door handle that pulling seems to lead back to the hallway. Or at least you judge that from the sounds.")
|
||||
processTime(4*60)
|
||||
else:
|
||||
processTime(2*60)
|
||||
|
@ -76,7 +76,7 @@ func _run():
|
|||
addButton("Leave", "Try to leave the room", "leave")
|
||||
|
||||
if state=="cabinets":
|
||||
saynn("Within so many filling cabinets there are over 12 shelves. You could open some of them and see what's in them, however only one of them is really interesting to you.") # TODO placeholder
|
||||
saynn("Within so many filling cabinets there are over 11 shelves. You could open some of them and see what's in them, however only one of them is really interesting to you.") # TODO placeholder
|
||||
addButton("Back", "Look around again", "lookaround")
|
||||
var activated_cabinets = getModuleFlag("IssixModule", "Activated_Cabinets", {})
|
||||
for item in cabinets:
|
||||
|
@ -89,7 +89,7 @@ func _run():
|
|||
addButton("Cabinet " + cabinets[item]["name"], "Check the cabinet with number "+cabinets[item]["name"], "cabinetloot", [item])
|
||||
|
||||
if state=="cabinetloot":
|
||||
saynn("You chose to open cabinet number "+str(current_cabinet)+"...")
|
||||
saynn("You chose to open cabinet number "+("number "+str(current_cabinet) if current_cabinet != 42 else "with a number you can't read")+"...")
|
||||
processTime(1*60)
|
||||
if(typeof(current_loot) == TYPE_NIL): # event
|
||||
markCabinetAsActivated(current_cabinet)
|
||||
|
@ -110,14 +110,15 @@ func _run():
|
|||
|
||||
if state=="cabinetevent1":
|
||||
processTime(10*60)
|
||||
saynn("You chose to open cabinet number "+str(current_cabinet)+"...")
|
||||
saynn("You chose to open cabinet number "+("number "+str(current_cabinet) if current_cabinet != 42 else "with a number you can't read")+"...")
|
||||
var fluidType = RNG.pick(["Cum", "GirlCum", "Milk"])
|
||||
saynn("The shelf is located a little higher than your head, since there isn't anything in the closet that you could stand on, your plan is to simply open the shelf and try to feel with your paw if there is anything there. You regret that decision the moment you open the shelf. Entire shelf is filled to brim with a kind of cold slimy fluid that spills on you the moment you open it.\n\nYou've been covered in "+fluidType.to_lower()+".")
|
||||
GM.pc.coverBodyWithFluid(fluidType, 800.0)
|
||||
addButton("Back", "Look at cabinets", "cabinets")
|
||||
|
||||
if state=="cabinetevent2":
|
||||
processTime(3*60)
|
||||
saynn("You chose to open cabinet number "+str(current_cabinet)+"...")
|
||||
saynn("You chose to open cabinet "+("number "+str(current_cabinet) if current_cabinet != 42 else "with a number you can't read")+"...")
|
||||
saynn("The shelf is located a little higher than your head, since there isn't anything in the closet that you could stand on, your plan is to simply open the shelf and try to feel with your paw if there is anything there.\n\nYou pull the shelf and it falls on you!")
|
||||
if (RNG.randf_range(0, 1) < GM.pc.getDodgeChance()+0.1): # Got protected from the fall, base 10% + whatever player dodge chance has
|
||||
saynn("You were able to avoid the falling shelf with your quick reflexes. Phew. You push the shelf back where it came from.")
|
||||
|
@ -127,15 +128,19 @@ func _run():
|
|||
damage_taken = GM.pc.receiveDamage(DamageType.Physical, 40, 1.0)
|
||||
else:
|
||||
damage_taken = GM.pc.receiveDamage(DamageType.Physical, 60, 1.0)
|
||||
saynn("You were unable to react in time and heavy shelf fell on your head ouch.\n" + ("Seems like your horns helped you with taking a hit from the above to some degree.\n" if GM.pc.hasHorns() else "") + "\nYou took "+str(damage_taken)+" damage.")
|
||||
saynn("You were unable to react in time and heavy shelf fell on your head ouch.\n" + ("Seems like your horns helped you with taking a hit from the above to some degree.\n" if GM.pc.hasHorns() else ""))
|
||||
addMessage("You took "+str(damage_taken)+" damage.")
|
||||
addButton("Back", "Look at cabinets", "cabinets")
|
||||
|
||||
|
||||
if state=="cabinetevent3":
|
||||
processTime(3*60)
|
||||
saynn("You chose to open cabinet number "+str(current_cabinet)+"...")
|
||||
saynn("You chose to open cabinet number "+("number "+str(current_cabinet) if current_cabinet != 42 else "with a number you can't read")+"...")
|
||||
var lust_taken = RNG.randi_range(20, 50)
|
||||
GM.pc.addLust(lust_taken)
|
||||
saynn("A red mist surrounds you as the dust from the shelf spills out with the force of your pull.\n\nYou gain "+ str(lust_taken)+" lust.")
|
||||
saynn("A red mist surrounds you as the dust from the shelf spills out with the force of your pull.")
|
||||
addMessage("You gain "+ str(lust_taken)+" lust.")
|
||||
addButton("Back", "Look at cabinets", "cabinets")
|
||||
|
||||
|
||||
func randomItemFromSeed(array):
|
||||
|
@ -167,6 +172,7 @@ func generateLoot(cabinet_number: int):
|
|||
fluids.addFluid(randomItemFromSeed(allowedFluids), randomNumberFromSeed(2, 5)*100.0)
|
||||
return newItem
|
||||
elif (rand_num < 21): # TODO event
|
||||
# warning-ignore:return_value_discarded
|
||||
markCabinetAsActivated(cabinet_number)
|
||||
return RNG.randi_range(1,3)
|
||||
else:
|
||||
|
@ -191,9 +197,15 @@ func _react(_action: String, _args):
|
|||
if typeof(current_loot) == TYPE_INT:
|
||||
_action = "cabinetevent"+str(current_loot)
|
||||
|
||||
if _action == "cabinets":
|
||||
var activated_cabinets = getModuleFlag("IssixModule", "Activated_Cabinets", {})
|
||||
if activated_cabinets.size() > 9:
|
||||
if RNG.chance(50):
|
||||
runScene("ClosetCaughtOfflimitsScene", {}, "caughtbyeng")
|
||||
|
||||
if(_action == "acceptloot"):
|
||||
markCabinetAsActivated(current_cabinet)
|
||||
GM.pc.getInventory().addItem(current_loot)
|
||||
markCabinetAsActivated(current_cabinet)
|
||||
_action = "cabinets"
|
||||
|
||||
if(_action == "strugglemenu"):
|
||||
|
@ -201,3 +213,10 @@ func _react(_action: String, _args):
|
|||
return
|
||||
|
||||
setState(_action)
|
||||
|
||||
func _react_scene_end(_tag, _result):
|
||||
if(_tag == "caughtbyeng"):
|
||||
if _result[0] == "out":
|
||||
endScene()
|
||||
else:
|
||||
setState("cabinets")
|
||||
|
|
|
@ -463,7 +463,7 @@ func _run():
|
|||
saynn("[say=issix]There is only one more trial before I make my final decision. You'll face it tomorrow. And from tomorrow, I expect you to kneel before me, understood?[/say]")
|
||||
setModuleFlag("IssixModule", "Quest_Status", 6)
|
||||
elif strikes == 1:
|
||||
saynn("[say=issix]You pass. While I feel like you weren't entirely honest with me duright the questionnaire, I'll chuck it as a mistake.[/say]")
|
||||
saynn("[say=issix]You pass. While I feel like you weren't entirely honest with me during the questionnaire, I'll chuck it as a mistake.[/say]")
|
||||
saynn("You are happy to hear the result")
|
||||
saynn("[say=issix]Mind you, there is one more thing that I expect you to do, the last trial. That's for tomorrow, you got it? And from tomorrow onwards, I expect you to kneel before me when you address me.[/say]")
|
||||
setModuleFlag("IssixModule", "Quest_Status", 6)
|
||||
|
|
|
@ -24,7 +24,7 @@ func _run():
|
|||
if(!GM.main.getModuleFlag("IssixModule", "Issix_Introduced")):
|
||||
saynn("While exploring the cellblock you stumble upon an uncommon sight - three leashed creatures resting on red blankets around a sitting man. One of the creatures appears to be sleeping, the other one is laying on their front turned towards the man sitting on the chair and the third one is licking their paws with their eyes closed, below them sheets of paper with drawings.\n\nThe sitting figure appears to be talking with the creature laying on their belly.")
|
||||
if(OPTIONS.isContentEnabled(ContentType.Watersports)):
|
||||
sayn("All of the three leashed creatures give off a pretty strong smell - they are all marked. While their fur seems dry, it's undeniable it had contact with piss, of a single male. Not difficult to figure out which.")
|
||||
saynn("All of the three leashed creatures give off a pretty strong smell - they are all marked. While their fur seems dry, it's undeniable it had contact with piss, of a single male. Not difficult to figure out which.")
|
||||
addButton("Talk", "Talk to the intimidating demon", "talk")
|
||||
addButton("Appearance", "Take a closer look at the intimidating demon", "appearance")
|
||||
else:
|
||||
|
@ -39,6 +39,7 @@ func _run():
|
|||
|
||||
if(state == "talk"):
|
||||
clearCharacter()
|
||||
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="sit"})
|
||||
addCharacter("issix")
|
||||
if(!GM.main.getModuleFlag("IssixModule", "Issix_Introduced")):
|
||||
GM.main.setModuleFlag("IssixModule", "Issix_Introduced", true)
|
||||
|
@ -55,7 +56,16 @@ func _run():
|
|||
addButton("Exercise", "Ask Issix for explanation about your incident with the wall", "quest1bonk")
|
||||
if GM.main.getModuleFlag("IssixModule", "Quest_Status") == 3:
|
||||
addButton("Gumball", "Bring back the gumball to Issix", "quest1turn")
|
||||
addButton("Become his", "Ask if he'd like to make you his own pet", "join")
|
||||
match GM.main.getModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 0):
|
||||
0:
|
||||
if GM.main.getModuleFlag("IssixModule", "Quest_Status", 0) == 0:
|
||||
addButton("Become his", "Ask if he'd like to make you his own pet", "join")
|
||||
else:
|
||||
addDisabledButton("Become his", "You are currently trying to become his")
|
||||
1, 3, 4:
|
||||
addDisabledButton("Become his", "You don't think there is much sense in asking anymore after you rejected Issix's proposition")
|
||||
2:
|
||||
addDisabledButton("Become his", "You don't think Issix trusts you enough to become his pet")
|
||||
GM.ES.triggerRun(Trigger.TalkingToNPC, ["issix"])
|
||||
addButton("Leave", "Be on your way", "endthescene")
|
||||
|
||||
|
@ -90,7 +100,7 @@ func _run():
|
|||
saynn("[say=issix]What leads you to me? I don't suppose you are here to admire me like the three here.[/say]")
|
||||
saynn("He lets out a laugh")
|
||||
saynn("[say=issix]Anyways, I own this little corner including those three wonderful leashed pets beside me. You do NOT touch my pets without permission. Normally I wouldn't think this has to be mentioned, but for some reasons inmates think otherwise, those who do - don't keep this thought for long.[/say]")
|
||||
sayn("[say=issix]That's probably everything you need to know about me. \nAlso, considering we didn't start on the wrong foot, you have my permission to speak with my pets. \nNow, please find some other business to attend to, unless you need something else of me?[/say]")
|
||||
saynn("[say=issix]That's probably everything you need to know about me. \nAlso, considering we didn't start on the wrong foot, you have my permission to speak with my pets. \nNow, please find some other business to attend to, unless you need something else of me?[/say]")
|
||||
addButton("Heaven?", "Did you hear that correctly?", "heaven")
|
||||
addButton("You", "Learn more about Issix", "issixdetails")
|
||||
addButton("Pets", "Who are the pets?", "pets")
|
||||
|
@ -124,7 +134,7 @@ func _run():
|
|||
addCharacter("lamia")
|
||||
if(state == "hiisipet"):
|
||||
saynn("You crouch and gently pet Azazel's head. You can feel very delicate vibrations produced by the kitten. He doesn't open his eyes, but it's clear cat enjoys this treatment.")
|
||||
sayn("Master looks at this interaction with interest and sincere smile on his face.")
|
||||
saynn("Master looks at this interaction with interest and sincere smile on his face.")
|
||||
saynn("After a short moment you stand back up and look at pet on your right.")
|
||||
saynn("[say=issix]This one here is Hiisi. He is my latest, which doesn't mean I love him any different. This puppy rather keeps to himself, you may have difficulties getting him to open to you, if you'd ever want to do that. He's.. A troubled one, to say the least, but look at him, isn't he the pristine puppy boy? He loves his belly rubs and stays out of the trouble! ... Well, mostly. Anyways, despite his troubled past, he agreed to join me and became my pup! Hiisi cmon, welcome our guest, give {pc.him} a sniff![/say]")
|
||||
saynn("[say=hiisi]{pc.name} isn't it? Umm... Hi.[/say]")
|
||||
|
@ -173,6 +183,7 @@ func _run():
|
|||
if(state == "join"):
|
||||
var score = calculateHaremScore()
|
||||
var score_explored = GM.main.getModuleFlag("IssixModule", "Score_Explored")
|
||||
saynn("[say=pc]"+RNG.pick(["What would you say about me becoming one of your pets?", "Do you think I would fit in with your harem?", "I'd like to become one of your pets, is this possible?"])+"[/say]")
|
||||
if(GM.pc.getPersonality().getStat(PersonalityStat.Subby) < 0):
|
||||
saynn("[say=issix]Look, you are lovely and all that, but I don't think you are the right fit. I require absolute obedience. Once you submit to me there is no going back, you become MY treasured pet forever. Those three? They know their place, they are ready to be mated whenever I feel like doing so. You? You strike me as leader - like myself. Why not just be business partners in here eh? I think you are entirely capable of gathering your own pets.[/say]")
|
||||
elif(score > 89):
|
||||
|
@ -192,12 +203,10 @@ func _run():
|
|||
GM.main.setModuleFlag("IssixModule", "Score_Explored", score)
|
||||
addButton("Y-your pet", "Submit to Issix", "quest")
|
||||
if (GM.pc.getPersonality().getStat(PersonalityStat.Subby) < 0.3) and GM.pc.getLust() < 30 and !GM.pc.isWearingHypnovisor() and !GM.pc.hasEffect(StatusEffect.Suggestible) and !GM.pc.hasEffect(StatusEffect.UnderHypnosis): # Good luck lol
|
||||
GM.main.setModuleFlag("IssixModule", "Quest_Status", 0)
|
||||
setModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 1)
|
||||
addButton("Stray", "You don't want to be his", "quest")
|
||||
addButton("Stray", "You don't want to be his", "questreject")
|
||||
else:
|
||||
addDisabledButton("Stray kitten", "Your mind doesn't allow you to make this choice")
|
||||
elif(score > 75 and score_explored < 90):
|
||||
elif(score > 75 and score_explored < 76):
|
||||
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="stand"})
|
||||
saynn("[say=issix]Hmm.[/say]")
|
||||
saynn("He approaches you. Studying details of your face, he puts two of his paw fingers on your mouth opening it, he checks your teeth, if you have fangs. Without asking he grabs your arm rotating it, looking at every possible detail. You don't put up resistance at any point, you expected this treatment, after all. Being a pet is very intimate experience submitting yourself to someone else, after all.")
|
||||
|
@ -211,12 +220,14 @@ func _run():
|
|||
saynn("[say=issix]Eager to be milked? A pet cow would be most welcome in my corner. How are your cow impressions?[/say]")
|
||||
saynn("You figure it's a rhetorical question and keep quiet as he moves to your other body parts.")
|
||||
saynn("He continues to explore your {pc.thick} {pc.masc} body, continuing wandering with his paws further down.")
|
||||
if GM.pc.isFullyNaked() or !GM.pc.isWearingAnyUnderwear():
|
||||
if GM.pc.getInventory().hasSlotEquipped(InventorySlot.UnderwearBottom) or GM.pc.getInventory().hasSlotEquipped(InventorySlot.Body):
|
||||
if GM.pc.hasVagina() or GM.pc.hasPenis():
|
||||
saynn("[say=issix]You like having your babymaker visible to everyone, [pulse color=#00FFAA height=0.0 freq=1.0]slut[/pulse]?[/say]")
|
||||
else:
|
||||
saynn("[say=issix]Nothing there? That's okey by me, everyone comes with at least one hole.[/say]")
|
||||
if GM.pc.hasReachableVagina():
|
||||
var fluid = GM.pc.getBodypart(BodypartSlot.Vagina).getOrifice().getFluids().getDominantFluidID()
|
||||
saynn("He puts his finger into your {pc.pussyStretch} pussy, exploring it from the inside. You close your eyes as the dragon explores your body completely unrestricted as if you were just a [pulse color=#00FFAA height=0.0 freq=1.0]piece of meat[/pulse], a mix of pleasure and humiliation inside of your head. At last, he pulls out, his finger "+ ("covered in "+GlobalRegistry.getFluid(fluid).getVisibleName().to_lower() if fluid != null else "a bit moisty")+".")
|
||||
saynn("He puts his finger into your {pc.pussyStretch} pussy, exploring it from the inside. You close your eyes as the dragon explores your body completely unrestricted as if you were just a [pulse color=#00FFAA height=0.0 freq=1.0]piece of meat[/pulse], a mix of pleasure and humiliation inside of your head. At last, he pulls out, his finger "+ ("covered in "+GlobalRegistry.getFluid(fluid).getVisibleName().to_lower() if fluid != null else "a bit moist")+".")
|
||||
if GM.pc.hasReachablePenis():
|
||||
saynn("He wraps around his paw around your {pc.penis}, stroking it a little. It already had some encouragement earlier, but now with some stroking from dominant dragon it became much harder.")
|
||||
if GM.pc.getPenisSize() > 14:
|
||||
|
@ -226,7 +237,7 @@ func _run():
|
|||
saynn("He ends exploring your body and comes back to his chair.")
|
||||
saynn("[say=issix]I like what I see. You are almost ready, but not yet. When the time comes I expect you to show up again for my judgment. Then, I'll give you a chance. Don't waste it.[/say]")
|
||||
GM.main.setModuleFlag("IssixModule", "Score_Explored", score)
|
||||
elif(score > 45 and score_explored < 76):
|
||||
elif(score > 45 and score_explored < 46):
|
||||
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="stand"})
|
||||
saynn("[say=issix]Heh, interesting ask. It's still a no, though I have to admit, I do see some potential in here.[/say]")
|
||||
if (GM.pc.isBlindfolded()):
|
||||
|
@ -237,13 +248,13 @@ func _run():
|
|||
else:
|
||||
saynn("Issix stands up, takes a step towards you, grabs you by your chin without asking and looks you straight into your eyes.")
|
||||
GM.pc.addLust(30)
|
||||
sayn("The moment takes forever, just as his gaze pierces through your eyes, you also observe his black, void pupils and irises. For a moment, it feels as if his pupil turned bright red. Could be just a play of light or something... But then... There is allure in those eyes. Something dangerous, yet enticing. You feel primal, bare. With every moment of this eye contact you feel less in control, weaker, inferior. Your knees start to bend ever so slightly before Issix stedies your head again and takes his paws from your chin.")
|
||||
saynn("The moment takes forever, just as his gaze pierces through your eyes, you also observe his black, void pupils and irises. For a moment, it feels as if his pupil turned bright red. Could be just a play of light or something... But then... There is allure in those eyes. Something dangerous, yet enticing. You feel primal, bare. With every moment of this eye contact you feel less in control, weaker, inferior. Your knees start to bend ever so slightly before Issix stedies your head again and takes his paws from your chin.")
|
||||
if (GM.pc.isBlindfolded()):
|
||||
sayn("He fixes your blindfold to be back on your eyes.")
|
||||
saynn("He fixes your blindfold to be back on your eyes.")
|
||||
saynn("[say=issix]Yess, you have the potential, whether you'll use it or not is up to you.[/say]")
|
||||
saynn("Issix goes back to his chair and sits, staring at you with a grin on his face.")
|
||||
GM.main.setModuleFlag("IssixModule", "Score_Explored", score)
|
||||
elif(score > 25 and score_explored < 46):
|
||||
elif(score > 25 and score_explored < 26):
|
||||
saynn("[say=issix]I gotta say, I did hear of a certain {pc.name} around doing some whoring, but that's about it. You must understand, my pets must have prior experience and right spirit that I can exploit. You seem like a small fish. So no, my apologies but I'm simply not interested in you at the moment.[/say]")
|
||||
GM.main.setModuleFlag("IssixModule", "Score_Explored", score)
|
||||
elif(score_explored > 1):
|
||||
|
@ -252,31 +263,32 @@ func _run():
|
|||
saynn("[say=issix]Look, you are lovely and all that, but I don't think you have what it takes to join my other pets. I require absolute obedience and sexual experience. Once you submit to me there is no going back, you become MY treasured pet forever. Those three? They know their place, they are ready to be mated whenever I feel like doing so. They obey my every single command. I just don't see that in you, sorry.[/say]")
|
||||
addButton("Back", "Maybe another time then...", "talk")
|
||||
|
||||
if state == "questreject":
|
||||
setModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 1)
|
||||
saynn("[say=issix]I see... Disappointing, but it's your choice and I respect that.[/say]")
|
||||
saynn("He looks at you some more, he takes away his paw from your chin, turns around and sits on his chair. A serious and... Disappointed look on his face.")
|
||||
saynn("[say=issix]Go on then, unless you want to donate some items.[/say]")
|
||||
addButton("Leave", "Take your leave", "endthescene")
|
||||
|
||||
if(state == "quest"):
|
||||
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="sit"})
|
||||
if (GM.main.getModuleFlag("IssixModule", "Quest_Status") == -1):
|
||||
saynn("[say=issix]I see... Disappointing, but it's your choice and I respect that.[/say]")
|
||||
saynn("He looks at you some more, he takes away his paw from your chin, turns around and sits on his chair. A serious and... Disappointed look on his face.")
|
||||
saynn("[say=issix]I'll give you one more chance if you change your mind. But this one will be final. My pets trust me, and they don't say no to me.[/say]")
|
||||
addButton("Leave", "Take your leave", "endthescene")
|
||||
else:
|
||||
saynn("He smiles briefly.")
|
||||
saynn("[say=issix]Very well.[/say]")
|
||||
saynn("He puts his paws on sides of your head and starts scratching you behind your ears. Immediately you feel... Comfortable. Loved. Protected. You closed your eyes in bliss. And then he... Stops, the feeling of his paws is filled with void. You feel empty, unfulfilled. You open your eyes and meet his eyes staring at you again from the above. He looks at you expectendly. You aren't sure what to do, you don't want to fail your Master, but... His black eyes speak to you, yes. They want you to open your mouth. You don't even realize when your mouth opens. You didn't do that by yourself, did you?")
|
||||
sayn("He takes your tongue in between his paw fingers gently, pulls it out a little. He opens his mouth and he spits. Spit lands right on your tongue, with incredible precision right in the middle. He does it again, using the fact your mouth is still open. It lands deeper inside your mount. He pulls his paw fingers from your tongue and uses his two fingers to pressure your chin from below, giving you a signal to close your mouth.")
|
||||
sayn("You comply. There is nothing other than his eyes staring deep at you, his will is your will. His spit doesn't feel particularly different from yours, perhaps you can pick up some flavor or two, but it's more dignified flavor than one of cum that you are so used to. You keep the spit inside your mouth for a bit, tasting it, feeling it, connecting with its owner. And you swallow it, with a visible gulp.")
|
||||
saynn("Issix smiles. He ruffles your " + ("hair" if GM.pc.hasHair() else "ears") + " with his paws.")
|
||||
saynn("[say=issix]Good pet.\nNow, to be MY pet you'll have to prove yourself further. Besides the fact I want my pets to be all famous in this little heaven of ours, I want to make sure they follow my orders. For you my dear, I have a few little tasks, nothing you can't do, I'm sure, but it will be the proof I need you can become MY pet.[/say]")
|
||||
saynn("He turns around and moves towards his chair, where he sits.")
|
||||
saynn("[say=issix]Your first task will require... Trust. In me. Tell me, do you trust me?[/say]")
|
||||
addButton("Yes", "Say you trust Issix", "questresponseyes")
|
||||
addButton("No", "Say you don't trust Issix", "questresponseno")
|
||||
saynn("He smiles briefly.")
|
||||
saynn("[say=issix]Very well.[/say]")
|
||||
saynn("He puts his paws on sides of your head and starts scratching you behind your ears. Immediately you feel... Comfortable. Loved. Protected. You closed your eyes in bliss. And then he... Stops, the feeling of his paws is filled with void. You feel empty, unfulfilled. You open your eyes and meet his eyes staring at you again from the above. He looks at you expectendly. You aren't sure what to do, you don't want to fail your Master, but... His black eyes speak to you, yes. They want you to open your mouth. You don't even realize when your mouth opens. You didn't do that by yourself, did you?")
|
||||
saynn("He takes your tongue in between his paw fingers gently, pulls it out a little. He opens his mouth and he spits. Spit lands right on your tongue, with incredible precision right in the middle. He does it again, using the fact your mouth is still open. It lands deeper inside your mount. He pulls his paw fingers from your tongue and uses his two fingers to pressure your chin from below, giving you a signal to close your mouth.")
|
||||
saynn("You comply. There is nothing other than his eyes staring deep at you, his will is your will. His spit doesn't feel particularly different from yours, perhaps you can pick up some flavor or two, but it's more dignified flavor than one of cum that you are so used to. You keep the spit inside your mouth for a bit, tasting it, feeling it, connecting with its owner. And you swallow it, with a visible gulp.")
|
||||
saynn("Issix smiles. He ruffles your " + ("hair" if GM.pc.hasHair() else "ears") + " with his paws.")
|
||||
saynn("[say=issix]Good pet.\nNow, to be MY pet you'll have to prove yourself further. Besides the fact I want my pets to be all famous in this little heaven of ours, I want to make sure they follow my orders. For you my dear, I have a few little tasks, nothing you can't do, I'm sure, but it will be the proof I need you can become MY pet.[/say]")
|
||||
saynn("He turns around and moves towards his chair, where he sits.")
|
||||
saynn("[say=issix]Your first task will require... Trust. In me. Tell me, do you trust me?[/say]")
|
||||
addButton("Yes", "Say you trust Issix", "questresponseyes")
|
||||
addButton("No", "Say you don't trust Issix", "questresponseno")
|
||||
|
||||
if(state in ["questresponseyes", "questresponseno"]):
|
||||
GM.main.setModuleFlag("IssixModule", "Quest_Status", 1)
|
||||
if(state=="questresponseyes"):
|
||||
saynn("Issix grins after hearing the answer.")
|
||||
sayn("[say=issix]Excellent. Now, what I want to do is verify your trust, and gain some of my own trust in you. You must be acutely aware how words, especially in this place"+ (" and especially coming from a red like yourself" if GM.pc.getInmateType() == InmateType.HighSec else "") + " can be deceptive.[/say]")
|
||||
saynn("[say=issix]Excellent. Now, what I want to do is verify your trust, and gain some of my own trust in you. You must be acutely aware how words, especially in this place"+ (" and especially coming from a red like yourself" if GM.pc.getInmateType() == InmateType.HighSec else "") + " can be deceptive.[/say]")
|
||||
if(state=="questresponseno"):
|
||||
saynn("Issix looks at you, studying you.")
|
||||
saynn("[say=issix]Curious. Not the answer I anticipated. It's fine, we can work on that.[/say]")
|
||||
|
@ -285,6 +297,7 @@ func _run():
|
|||
saynn("[say=issix]You will have to use your little head a bit too before you put one. I'll give you a map, I've drawn it myself, but it has to do. I won't spoil your fun and tell you what it shows, I'm sure you are clever enough to figure it out by yourself, after all, this prison isn't thaaat big, right?[/say]")
|
||||
saynn("He winks at you, and lets out a chuckle.")
|
||||
saynn("[say=issix]Go there, blind yourself, go through a wall and bring me the goods. The number you'll need is 84. And morsel, don't hang in there for too long, trust me on that. Don't worry, I'll know if you succeed or not, don't try to cheat. Remember, trust is the key.[/say]")
|
||||
addMessage("You've received a map.")
|
||||
addButton("Leave", "Take your leave", "endthescene")
|
||||
|
||||
if(state == "quest1bonk"):
|
||||
|
@ -309,7 +322,7 @@ func _run():
|
|||
GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", true)
|
||||
saynn("[say=pc]Is... This what you wanted?[/say]")
|
||||
saynn("You said with uncertainty in your voice, presenting Issix with a packet of gumball.\nIssix looks at you elated, he claps his paws.")
|
||||
saynn("[say=issix]Yes, YES. This is exactly what I needed, pet.[/say]")
|
||||
saynn("[say=issix]Yes, YES. This is exactly what I needed, morsel.[/say]")
|
||||
saynn("He stands up, and takes the packet of gum from your paw.")
|
||||
saynn("He opens one end of it and immediately pops one of the gums in his mouth. He goes back to sit on his chair.")
|
||||
saynn("[say=issix]You know, a lot of goods in here are generally unavailable to inmates. I knew what I were getting into arriving in here, and didn't really care about most of favorite dishes or products. But this gum? I can't live without it. I were able to make sure it arrives here, in this prison just for myself regularly. You wouldn't believe just how much I had to work to have it delivered, it's not exactly the most popular destination in the galaxy. I have a contact who drops it always in same place where you got it from.[/say]")
|
||||
|
@ -331,6 +344,9 @@ func calculateHaremScore():
|
|||
return int(score) # -10 - 100
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if _action in ["questresponseno", "questresponseyes"]:
|
||||
GM.pc.getInventory().addItem(GlobalRegistry.createItem("IssixsMap"))
|
||||
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# Originally written by Rahi at https://github.com/Alexofp/BDCC/blob/main/Scenes/Cellblock/EatInCanteenScene.gd
|
||||
|
||||
extends "res://Scenes/SceneBase.gd"
|
||||
|
||||
func _init():
|
||||
|
|
|
@ -241,7 +241,6 @@ func _run():
|
|||
addButton("Pussy", "Azazel has a pussy and yet he is rather masculine", "azazelintersex")
|
||||
else:
|
||||
addDisabledButton("Pussy", "You don't have good enough relationship with Azazel to ask about his genitalia")
|
||||
#addButton("Hero", "")
|
||||
if(GM.pc.getInventory().hasItemID("CatnipPlant")):
|
||||
pass
|
||||
else:
|
||||
|
@ -341,7 +340,6 @@ func _run():
|
|||
saynn("Lamia gives you a nod and invites you to sit with him.")
|
||||
addButton("Work", "Get to sorting!", "artminigame")
|
||||
|
||||
|
||||
if state == "lamiaexplanationcont":
|
||||
saynn("Lamia draws more things, he draws a stick figure with a goat, circles them and points arrow to the blue box, then they draw a goat, stick figure and a background, connect them in one circle and points arrow to the green box. You enter deep thought what this could mean until an idea dawns on you.")
|
||||
saynn("[say=pc]Do you mean connections? Like when one picture has more elements it goes to the blue box?[/say]")
|
||||
|
@ -398,11 +396,28 @@ func _run():
|
|||
addButton("Finish", "You've helped Lamia sort through the art, there is no more artwork to be sorted", "lamiamain")
|
||||
|
||||
if state == "lamiatalk":
|
||||
var lamia_affection = getModuleFlag("IssixModule", "Lamia_Times_Helped", 0)
|
||||
addButton("Try drawing", "You can try and draw something with lamia", "lamiadraw") # TODO
|
||||
addButton("Mute", "Ask if he's been mute since they were born")
|
||||
if lamia_affection > 2:
|
||||
addButton("Explicit", "You've noticed Lamia doesn't draw any explicit things, perhaps worth asking about it?", "lamiaexplicit")
|
||||
if lamia_affection > 6:
|
||||
addButton("Prison", "Ask Lamia how they ended up in the prison", "lamiaprison")
|
||||
else:
|
||||
addDisabledButton("Prison", "You don't feel like there is enough connection between you two to ask him that")
|
||||
if lamia_affection > 11:
|
||||
addButton("Favorite", "Ask Lamia what is their favorite thing to draw", "lamiafavorite")
|
||||
else:
|
||||
addDisabledButton("Favorite", "You don't feel like there is enough connection between you two to ask him that")
|
||||
if lamia_affection > 17:
|
||||
addButton("Draw", "Ask Lamia to draw something for you", "lamiadrawforme")
|
||||
else:
|
||||
addDisabledButton("Draw", "You don't feel like there is enough connection between you two to ask him to draw for you something")
|
||||
addButton("Back", "Do something else", "lamiamain")
|
||||
|
||||
if state == "lamiaappearance":
|
||||
saynn("Lamia is very visibly a fox breed, their fur has very vivid and unusual orange/red pallette. Red mostly visible on their arms and a little bit on their legs. To contrast that, their hair is painted in shades of blue. They are wearing a general block inmate uniform.")
|
||||
saynn("Lamia is very visibly a fox breed, their fur has very vivid and unusual orange/red pallette. Red mostly visible on their arms, tip of their tail and a little bit on their legs. To contrast that, their hair is painted in shades of blue. They are wearing a general block inmate uniform.")
|
||||
saynn("There are two slightly curved horns protruding from their head with black base and red endings.")
|
||||
addButton("Back", "Stop looking at fox-breed", "lamiamain")
|
||||
|
||||
func generate_artwork_desc(descriptors: Array):
|
||||
|
|
BIN
Skins/AzazelSkin/AzazelSkin copy.png
Normal file
BIN
Skins/AzazelSkin/AzazelSkin copy.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 178 KiB |
35
Skins/AzazelSkin/AzazelSkin copy.png.import
Normal file
35
Skins/AzazelSkin/AzazelSkin copy.png.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/AzazelSkin copy.png-c42c89113f7d637b5fe3c222b345a504.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Modules/IssixModule/Skins/AzazelSkin/AzazelSkin copy.png"
|
||||
dest_files=[ "res://.import/AzazelSkin copy.png-c42c89113f7d637b5fe3c222b345a504.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
|
16
Skins/AzazelSkin/AzazelSkin.gd
Normal file
16
Skins/AzazelSkin/AzazelSkin.gd
Normal file
|
@ -0,0 +1,16 @@
|
|||
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,
|
||||
}
|
BIN
Skins/AzazelSkin/AzazelSkin.png
Normal file
BIN
Skins/AzazelSkin/AzazelSkin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 194 KiB |
35
Skins/AzazelSkin/AzazelSkin.png.import
Normal file
35
Skins/AzazelSkin/AzazelSkin.png.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[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
|
Loading…
Reference in a new issue