Countless fixes, hiisi scene, BDSM donation system, lamia dialogue

Fixed litter guessing minigame
Fixed Hiisi's name dialogue being unavailable (#4)
Fixed Lamia's logic error where player can lock themselves of being able to help
Added donation system for player to donate their leftover BDSM gear and get something in return
Added Hiisi's first scene
This commit is contained in:
Frisk 2024-12-31 23:36:04 +01:00
parent 2ed81d7441
commit e1f8dfbcd8
11 changed files with 762 additions and 47 deletions

View file

@ -1,25 +0,0 @@
extends EventBase
func _init():
id = "AzazelCorruptionAttemptEvent"
func registerTriggers(es):
es.addTrigger(self, Trigger.EnteringRoom)
func react(_triggerID, _args):
if not (GM.pc.getLocation().begins_with("main_hall") or (GM.pc.getLocation() in ["main_bathroom1"])) or GM.main.isVeryLate():
return false
if not (GM.main.getModuleFlag("IssixModule", "Azazel_Affection_given", 0) > 0 and GM.main.getModuleFlag("IssixModule", "Quest_Status", 0) < 1):
return false
if GM.main.getModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", false) == false and RNG.chance(1.0):
var scene_index = GM.main.getModuleFlag("IssixModule", "Azazel_Corruption_Scene", 1)
if scene_index == -1 or scene_index > 3: # Player disabled corruption scenes or we ran out of them
return false
GM.main.setModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", true)
runScene("AzazelCorruption"+str(scene_index))
return true
return false
func getPriority():
return 5

View file

@ -0,0 +1,65 @@
extends EventBase
func _init():
id = "AzazelCorruptionAttemptEvent"
func registerTriggers(es):
es.addTrigger(self, Trigger.EnteringRoom)
func react(_triggerID, _args):
if not (GM.pc.getLocation().begins_with("main_hall") or (GM.pc.getLocation() in ["main_bathroom1"])) or GM.main.isVeryLate():
return false
if GM.main.getModuleFlag("IssixModule", "Hiisi_Had_Encounter_Scene_Today", false) == false and RNG.chance(5.0):
if activateHiisiScenes():
return true
if not (GM.main.getModuleFlag("IssixModule", "Quest_Status", 0) < 1): # Do not show those if player started the quest as Azazel doesn't have a reason to corrupt the player
return false
if activateAzazelScenes():
return true
return false
func activateHiisiScenes() -> bool:
var scene_index = GM.main.getModuleFlag("IssixModule", "Hiisi_Encounter_scene", 1)
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Hiisi_Affection", -1) < scene_index*2 or scene_index > 2:
return false
if scene_index == 1: # Different conditions per Hiisi's scenes
var pawns = findFreePawnsNearby()
if pawns.size() > 1:
GM.main.setModuleFlag("IssixModule", "Hiisi_Had_Encounter_Scene_Today", true)
runScene("HiisiWanderScene1", [RNG.pick(pawns)])
return true
elif scene_index == 2:
if GM.pc.getLocation() in ["main_bathroom1"]:
return false
var path = GM.world.calculatePath(GM.pc.getLocation(), "main_bathroom1")
GM.main.setModuleFlag("IssixModule", "Hiisi_Had_Encounter_Scene_Today", true)
GM.pc.setLocation(path[1])
runScene("HiisiWanderScene2")
return true
return false
func activateAzazelScenes() -> bool:
if GM.main.getModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", false) == false and RNG.chance(2.0):
var scene_index = GM.main.getModuleFlag("IssixModule", "Azazel_Corruption_Scene", 1)
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Azazel_Affection_given", -1) < scene_index*2 or scene_index > 3: # Player disabled corruption scenes, their affection score is too low or we ran out of them
return false
GM.main.setModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", true)
runScene("AzazelCorruption"+str(scene_index))
return true
return false
# Taken from PawnInteractionBase.gd
func findFreePawnsNearby() -> Array:
var result:Array = []
var pawns = GM.main.IS.getPawnsNear(GM.pc.getLocation(), 2)
for pawn in pawns:
if(!pawn.canBeInterrupted() or !pawn.isInmate() or pawn.isPlayer()):
continue
result.append(pawn.charID)
return result
func getPriority():
return 5

View file

@ -0,0 +1,150 @@
# From UI/Inventory/InventoryScreen.gd
extends Control
onready var itemListContainer = $MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/VBoxContainer
var inventoryEntry = preload("res://UI/Inventory/InventoryEntry.tscn")
var inventoryGroupEntry = preload("res://UI/Inventory/InventoryGroupEntry.tscn")
onready var itemNameLabel = $MarginContainer/HBoxContainer/VBoxContainer/Label
onready var itemDescLabel = $MarginContainer/HBoxContainer/VBoxContainer/RichTextLabel
onready var searchInput = $MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/SearchLineEdit
#var inventory: Inventory
var itemsByGroup = {}
var selectedItem: ItemBase
var itemEntries = []
var filterEnteries = []
signal onInteractWith(item)
signal onInteractWithGroup(item)
signal onItemSelected(item)
var currentMode = ""
var isDonation = false
var isEnchant = false
var shouldGrabInput = true
func _ready():
if(shouldGrabInput && !OS.has_touchscreen_ui_hint()):
searchInput.grab_focus()
#func setInventory(inv, isFight = false):
#if(inventory != inv || isFightMode != isFight):
# isFightMode = isFight
# inventory = inv
# updateInventory()
func setItems(newItems, theMode = "donation"):
itemsByGroup = newItems
currentMode = theMode
isDonation = (theMode == "donation")
isEnchant = (theMode == "enchant")
updateInventory()
filterInventory()
func filterInventory():
var textToFilter = searchInput.text.to_lower()
if(textToFilter == ""):
for entry in filterEnteries:
entry.visible = true
return
for entry in filterEnteries:
var nameToCheck = entry.getItem().getVisibleName().to_lower()
if(textToFilter in nameToCheck):
entry.visible = true
else:
entry.visible = false
func updateInventory():
Util.delete_children(itemListContainer)
itemEntries = []
filterEnteries = []
#if(inventory == null):
# return
var theItemsGrouped = itemsByGroup#inventory.getItemsAndEquippedItemsTogetherGrouped()
if(theItemsGrouped is Array):
var newItemsGrouped = {}
for item in theItemsGrouped:
if(!newItemsGrouped.has(item.id)):
newItemsGrouped[item.id] = [item]
else:
newItemsGrouped[item.id].append(item)
theItemsGrouped = newItemsGrouped
for groupID in theItemsGrouped:
var theItems = theItemsGrouped[groupID]
if(theItems.size() == 1):
var item = theItems[0]
var entry = inventoryEntry.instance()
itemListContainer.add_child(entry)
itemEntries.append(entry)
filterEnteries.append(entry)
entry.setItem(item, currentMode)
entry.connect("onInteractButtonPressed", self, "onEntryInteractButtonPressed")
entry.connect("onItemSelected", self, "onEntrySelected")
else:
var newGroupEntry = inventoryGroupEntry.instance()
itemListContainer.add_child(newGroupEntry)
newGroupEntry.setItem(theItems[0], currentMode)
filterEnteries.append(newGroupEntry)
newGroupEntry.connect("onInteractButtonPressed", self, "onGroupEntryInteractButtonPressed")
# add entry to some group entries maybe here
for item in theItems:
var entry = inventoryEntry.instance()
newGroupEntry.addEntry(entry)
entry.setItem(item, currentMode)
itemEntries.append(entry)
entry.connect("onInteractButtonPressed", self, "onEntryInteractButtonPressed")
entry.connect("onItemSelected", self, "onEntrySelected")
newGroupEntry.updateCollapsed()
updateSelectedHighlight()
func updateSelectedHighlight():
for entry in itemEntries:
if(entry.getItem() == selectedItem):
entry.setSelected(true)
else:
entry.setSelected(false)
func updateSelectedInfo():
if(selectedItem == null):
itemNameLabel.text = "Pick an item"
itemDescLabel.bbcode_text = ""
return
itemNameLabel.text = selectedItem.getStackName()
itemDescLabel.bbcode_text = selectedItem.getVisibleDescription()
if isDonation:
var price = selectedItem.getStackSellPrice()
var priceStr = (str(price)+" credit") if price == 1 else (str(price)+" credits")
itemDescLabel.bbcode_text += "\nSell value otherwise: " +priceStr
if(selectedItem.getAmount() > 1):
itemDescLabel.bbcode_text += " (for "+str(selectedItem.getAmount())+")"
elif isEnchant:
pass
func onEntryInteractButtonPressed(theItem):
emit_signal("onInteractWith", theItem)
func onGroupEntryInteractButtonPressed(theItem):
emit_signal("onInteractWithGroup", theItem)
func onEntrySelected(theItem):
selectedItem = theItem
updateSelectedInfo()
updateSelectedHighlight()
emit_signal("onItemSelected", selectedItem)
func _on_SearchLineEdit_text_changed(_new_text):
filterInventory()

View file

@ -0,0 +1,112 @@
[gd_scene load_steps=6 format=2]
[ext_resource path="res://UI/Inventory/InventoryEntry.tscn" type="PackedScene" id=2]
[ext_resource path="res://Modules/IssixModule/Internal/InventoryScreenDonation.gd" type="Script" id=3]
[ext_resource path="res://Fonts/Titillium-Regular.otf" type="DynamicFontData" id=4]
[sub_resource type="DynamicFontData" id=9]
font_path = "res://Fonts/SourceCodePro/SourceCodePro-Regular.otf"
[sub_resource type="DynamicFont" id=1]
size = 28
outline_size = 2
outline_color = Color( 0, 0, 0, 1 )
use_mipmaps = true
use_filter = true
font_data = ExtResource( 4 )
fallback/0 = SubResource( 9 )
[node name="InventoryScreen" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 3 )
[node name="ColorRect" type="ColorRect" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0.105882, 0.0588235, 0.258824, 1 )
[node name="MarginContainer" type="MarginContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
custom_constants/margin_right = 4
custom_constants/margin_top = 4
custom_constants/margin_left = 4
custom_constants/margin_bottom = 4
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
margin_left = 4.0
margin_top = 4.0
margin_right = 1276.0
margin_bottom = 716.0
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
margin_right = 422.0
margin_bottom = 712.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer"]
margin_right = 422.0
margin_bottom = 28.0
custom_fonts/font = SubResource( 1 )
text = "Pick an item"
autowrap = true
[node name="HSeparator" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer"]
margin_top = 32.0
margin_right = 422.0
margin_bottom = 36.0
[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/HBoxContainer/VBoxContainer"]
margin_top = 40.0
margin_right = 422.0
margin_bottom = 712.0
size_flags_horizontal = 3
size_flags_vertical = 3
bbcode_enabled = true
[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
margin_left = 426.0
margin_right = 1272.0
margin_bottom = 712.0
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/HBoxContainer/VBoxContainer2"]
margin_right = 846.0
margin_bottom = 712.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer"]
margin_right = 846.0
margin_bottom = 712.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="SearchLineEdit" type="LineEdit" parent="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2"]
margin_right = 846.0
margin_bottom = 24.0
placeholder_text = "Search"
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2"]
margin_top = 28.0
margin_right = 846.0
margin_bottom = 712.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="HBoxContainer" parent="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/VBoxContainer" instance=ExtResource( 2 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 846.0
margin_bottom = 64.0
[node name="HBoxContainer2" parent="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/VBoxContainer" instance=ExtResource( 2 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 68.0
margin_right = 846.0
margin_bottom = 132.0
[connection signal="text_changed" from="MarginContainer/HBoxContainer/VBoxContainer2/ScrollContainer/VBoxContainer2/SearchLineEdit" to="." method="_on_SearchLineEdit_text_changed"]

View file

@ -0,0 +1,44 @@
extends ItemBase
func _init():
id = "LuckToken"
func getVisibleName():
return "Luck Token"
func getDescription():
return "A flashy gold colored metal square with circular indention in the center, it weights quite a bit. According to Issix it may be possible to exchange it for something in the prison..."
func canUseInCombat():
return false
func getPossibleActions():
return []
func getPrice():
return 0
func canSell():
return false
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/lucktoken.png"

View file

@ -48,6 +48,11 @@ func getFlags():
"Azazel_Corruption_Scene": flag(FlagType.Number),
"Azazel_Had_Corruption_Scene_Today": flag(FlagType.Bool),
"Azazel_Agreed_Kiss": flag(FlagType.Bool),
"Hiisi_Encounter_scene": flag(FlagType.Number),
"Hiisi_Had_Encounter_Scene_Today": flag(FlagType.Bool),
"Issix_Donation_Meter": flag(FlagType.Number),
"Issix_Used_Donations": flag(FlagType.Number),
"Got_Luck_Token_Before": flag(FlagType.Bool),
# Slavery related
"PC_Enslavement_Role": flag(FlagType.Number),
@ -100,7 +105,7 @@ func _init():
"res://Modules/IssixModule/Events/IssixRegularSearch.gd",
"res://Modules/IssixModule/Events/LamiaCellEvent.gd",
"res://Modules/IssixModule/Events/TalkNovaEvent.gd",
"res://Modules/IssixModule/Events/AzazelsCorruptionEvent.gd",
"res://Modules/IssixModule/Events/PetWanderEvent.gd",
]
scenes = [
@ -126,6 +131,8 @@ func _init():
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene2.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene3.gd",
"res://Modules/IssixModule/Scenes/HiisiScenes/HiisiWanderScene.gd",
"res://Modules/IssixModule/Scenes/IssixDonationScene.gd",
]
characters = [
@ -143,7 +150,8 @@ func _init():
"res://Modules/IssixModule/Items/BellCollar.gd",
"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
"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
"res://Modules/IssixModule/Items/LuckToken.gd"
]
quests = [
@ -213,9 +221,9 @@ static func getPlayerPetName():
func breedSlaveIfNpc():
## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event?
if (int(GM.main.getDays()) % 2 == 0): # Breed only every second day?
GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", "thischardoesntexist")
return
# if (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)
@ -224,13 +232,13 @@ func breedSlaveIfNpc():
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)
if RNG.chance(5):
current_slave.cummedInMouthBy("issix")
else: # hiisi
print("Hiisi cummed in")
current_slave.cummedInAnusBy("issix")
@ -298,3 +306,4 @@ func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay
GM.main.setModuleFlag("IssixModule", "Trained_With_Hiisi_Combat", false)
GM.main.setModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", false)
GM.main.setModuleFlag("IssixModule", "Hiisi_Helped_Today", false)
GM.main.setModuleFlag("IssixModule", "Hiisi_Had_Encounter_Scene_Today", false)

View file

@ -0,0 +1,75 @@
extends SceneBase
var pawnID := ""
var pawn = null
func _init():
sceneID = "HiisiWanderScene1"
func _initScene(_args = []):
pawnID = _args[0]
pawn = GlobalRegistry.getCharacter(pawnID)
GM.main.IS.getPawn(pawnID).setLocation(GM.pc.getLocation())
func resolveCustomCharacterName(_charID):
if(_charID == "npc"):
return pawnID
func _run():
if(state == ""):
addCharacter("lamia")
addCharacter(pawnID)
playAnimation(StageScene.Duo, "stand", {pc="lamia", npc=pawnID})
saynn("You are walking in the hallway when you notice Lamia striding towards the toilets, you continued walking while you heard whistling coming from where you've seen Lamia just a moment ago, you look at the source.")
saynn("[say=npc]Look who we have in here, a stranded fox, you know what they say about foxes right? They are all holes.[/say]")
saynn("Lamia seems unimpressed, looking at the inmate while rolling their eyes.")
saynn("[say=npc]Come with me, I'll find better place for us two.[/say]")
saynn("Inmate approaches Lamia and tries grabbing them by the wrist before Lamia swiftly takes their arm away.")
saynn("[say=npc]Fucking slut, I said COME WITH ME.[/say]")
saynn("Inmate is getting angry as their paws start fishing for Lamia's body.")
addButton("Help", "Try to help Lamia", "helplamia")
addButton("Observe", "Observe the situation from long distance", "observe")
if state in ["helplamia", "observe"]:
addCharacter("hiisi")
playAnimation(StageScene.Duo, "stand", {pc="hiisi", npc=pawnID})
if state == "helplamia":
saynn("You start walking towards Lamia as you see the situation is getting heated, however before you come there Hiisi suddenly appears on the scene, you are unsure where did they even come from. He swiftly inserts himself between Lamia and {npc.name} with stern look directed at the inmate.")
else:
saynn("You decide to stay where you are and continue looking at unfolding situation from safe distance. You see the inmate throwing punches at Lamia... Until seemingly out of nowhere Hiisi suddenly appears, you are unsure where did they even come from. He swiftly inserts himself between Lamia and {npc.name} with stern look directed at the inmate.")
saynn("[say=hiisi]Keep those crummy sticks to yourself.[/say]")
saynn("[say=npc]The fuck? The fox is mine.[/say]")
saynn("[say=hiisi]Like hell he is, find yourself other target.[/say]")
saynn("[say=npc]Oh, believe me, I think I just found one.[/say]")
saynn("{npc.He} spits at the floor while they prepare their arms for a fight, Hiisi stands there as if nothing happened. Lamia simply... Left, towards the bathroom, as if nothing happened.")
addButton("Continue", "See what happens next", "hiisifight")
if state == "hiisifight":
removeCharacter("lamia")
playAnimation(StageScene.Duo, "kick", {pc="hiisi", npc=pawnID, npcAction="defeat"})
saynn("The inmate starts swinging {npc.his} fists at Hiisi, who skillfully blocks all of the attacks. Every 3rd attack or so he successfully counters the attack leaving the troublemaking inmate look more and more tired and wasted. The power imbalance between the two is pretty visible from perspective of a viewer, though {npc.name} doesn't seem to realize that yet.")
if pawn.getSpecies().has("canine"):
saynn("[say=npc]I despise things like you.[/say]")
else:
saynn("[say=npc]Stupid mutt. Should have stayed at your doghouse.[/say]")
saynn("Hiisi doesn't seem bothered as he masterfully takes down {npc.name} with a kick on their side. {npc.Name} kneels defeated, Hiisi squats next to them.")
saynn("[say=hiisi]Both me and the fox you tried to have fun with are Master Issix's property. Our Master doesn't like when other inmates play with his property. You must be new here if you didn't know that already, and trust me, you do not want to cross our Master. Now go make some friends and tell them how you've been knocked by mere pets in record time, that will be a fun story to tell.[/say]")
saynn("{npc.Name} looks angry, though shaken enough not to retort with anything. Hiisi stands up and goes to the bathroom leaving the defeated inmate on the floor.")
addButton("Leave", "Continue walking your way", "endthescene")
func getDevCommentary():
return ""
func hasDevCommentary():
return false
func _react(_action: String, _args):
if(_action == "endthescene"):
setModuleFlag("IssixModule", "Hiisi_Encounter_scene", 2)
endScene()
return
setState(_action)

View file

@ -0,0 +1,253 @@
extends "res://Scenes/SceneBase.gd"
var inventoryScreenScene = preload("res://Modules/IssixModule/Internal/InventoryScreenDonation.tscn")
var lockedInto = false
var rewardItem: ItemBase = null
var rewardItemDescription := ""
func _initScene(_args = []):
if(_args.size() > 0):
lockedInto = true
setState(_args[0])
func _init():
sceneID = "IssixDonationScreen"
func filterNonAnnouncer(item) -> bool:
return !item.hasTag(ItemTag.SoldByTheAnnouncer)
func filterArray(arr: Array, tester: String):
var new_array = []
for item in arr:
if call(tester, item):
new_array.append(item)
return new_array
func _run():
if(state == ""):
saynn("You can donate BDSM gear to Issix, and he MAY reward you with some goodies after each 10 donations.")
var current_donations = getModuleFlag("IssixModule", "Issix_Donation_Meter", 0)
var used_donations = getModuleFlag("IssixModule", "Issix_Used_Donations", 0)
saynn("You've made "+str(current_donations) + " donations to Issix so far.")
addButton("Donate", "See what you can donate", "donatemenu")
if (current_donations - used_donations) >= 10:
addButton("Reward", "Ask Issix for reward for donations you've made so far", "issixdonationitemreward")
else:
addDisabledButton("Reward", "You haven't donated enough items to receive any rewards yet")
if getModuleFlag("IssixModule", "Issix_Donation_Meter", 0) > 49:
if (current_donations - used_donations) >= 10:
addButton("Enchant", "Upgrade a restraint with a smart lock", "enchantmenu")
saynn("Fair warning: Applying smart locks willy-nilly may break your NPCs and make it impossible to get restraints off them, YOU are responsible for how you use the restraints made this way, this function is mainly made with idea that player may want to get those items on themselves, not NPCs.")
else:
addDisabledButton("Enchant", "Issix isn't willing to apply any SmartLocks to the gear just yet, donate more stuff to him")
addButton("Step away", "Talk about something else", "endthescene")
if(state == "donatemenu"):
var inventory = inventoryScreenScene.instance()
GM.ui.addFullScreenCustomControl("inventory", inventory)
var inventoryItems = GM.pc.getInventory().getAllCombatUsableRestraints()
inventory.setItems(filterArray(inventoryItems, "filterNonAnnouncer"), "donation") # TODO Change into something more about restraints
var _ok = inventory.connect("onItemSelected", self, "onInventoryItemSelected")
var _ok2 = inventory.connect("onInteractWith", self, "onInventoryItemInteracted")
#var _ok3 = inventory.connect("onInteractWithGroup", self, "onInventoryItemGroupInteracted")
addButton("Back", "Don't donate anything", "")
# So, let's talk. I realize this feature is kinda wild. I don't think it is intended to have SmartLocked restraints inside of PC's inventory, they are made to be only equipped on someone's body, which is why the smartlock disappears once player gets off the restraint. This feature allows free-for-all slut lock application. I specifically chose tasks that any NPC could possibly do by themselves regardless of body configuration, but I'm sure there will still be issues even with that. Overall, it's up to the player whether they want to break their NPCs in bad ways or not.
if state == "enchantmenu":
var inventory = inventoryScreenScene.instance()
GM.ui.addFullScreenCustomControl("inventory", inventory)
var allItems = []
for item in GM.pc.getInventory().getAllCombatUsableRestraints():
if !item.getRestraintData().hasSmartLock():
allItems.append(item)
inventory.setItems(allItems.duplicate(), "enchant")
var _ok = inventory.connect("onItemSelected", self, "onInventoryItemSelected")
var _ok2 = inventory.connect("onInteractWith", self, "onInventoryItemInteracted")
#var _ok3 = inventory.connect("onInteractWithGroup", self, "onInventoryItemGroupInteracted")
addButton("Back", "Don't donate anything", "")
if state == "issixdonationitemreward":
saynn("[say=pc]I've donated some gear, would you consider giving me something in return?[/say]")
saynn("[say=issix]Hmm, I suppose that's true, your donations are appreciated. Let's see...[/say]")
saynn("Issix grabs his bag and searches through it for trinkets, you assume.")
saynn("[say=issix]Hmm, how about this?[/say]")
if rewardItem != null:
saynn("Issix pulls out "+rewardItem.getVisibleName()+" and hands it to you.")
saynn("[say=issix]"+rewardItemDescription+"[/say]")
if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
saynn("[say=pc]Thank you Issix.[/say]")
else:
saynn("[say=pc]Thank you, Master.[/say]")
else:
saynn("[color=red]YOU SHOULDN'T SEE THIS, I'VE FUCKED UP SOMETHING.[/color]")
addButton("Back", "Continue", "")
# Cookie
func reward1():
rewardItemDescription = "You know, I've learned that sometimes it's the simplest things that bring us joy, so have this cookie, you can share it with someone if you'd like, I guess."
return GlobalRegistry.createItem("Cookie")
func findDonor(pawns) -> BaseCharacter:
var donor = null
for inmate in pawns:
if !inmate.isInmate() or inmate.isPlayer() or inmate.isSlaveToPlayer():
continue
if !inmate.getCharacter().hasPenis():
continue
donor = inmate.getCharacter()
break
return donor
# Boole of cum, get a random Male inmate pawn and milk them dry, if no male pawn explode, but seriously, those can be hella useful if you lack penis and have to do 213123123 slave tasks
func reward2():
var item = GlobalRegistry.createItem("PlasticBottle")
var fluids = item.getFluids()
var pawns = GM.main.IS.getPawns().values()
pawns.shuffle()
var donor = findDonor(pawns)
if donor == null:
fluids.addFluid("Milk", RNG.randf_range(900.0, 1100.0))
rewardItemDescription = "This one is filled with sweet milk. I generally prefer bottles with other white fluid, but would you believe how hard it is to come by inmates with a penis in this prison? Strange..." # lol
else:
fluids.addFluid("Cum", RNG.randf_range(950.0, 1150.0), donor.getFluidDNA(FluidSource.Penis))
rewardItemDescription = "Have you ever seen this much in one bottle? ... Of course it's cum. Let's just say I have uses for those, this one you can have."
return item
func reward3():
if getModuleFlag("IssixModule", "Got_Luck_Token_Before", false) == false:
rewardItemDescription = "I've had this one in my bag for way too long. You can have it, I don't need it... Right, you probably are new to this. Been a while since I've done that, but I think there is still a single person in this prison who can exchange those tokens for credits for you. Try to look around, talk. Hopefully you'll find the one, I don't really care much for those credits."
setModuleFlag("IssixModule", "Got_Luck_Token_Before", true)
else:
rewardItemDescription = "Another one of these? Where the hell do they come from? Here, have it."
return GlobalRegistry.createItem("LuckToken")
func _react(_action: String, _args):
if(_action == ""):
if(lockedInto):
endScene()
return
if(_action == "donate"):
var item = _args[0]
var howMuch = 1
if(_args.size() > 1):
howMuch = _args[1]
howMuch = Util.mini(item.getAmount(), howMuch)
var howMuchStr = str(howMuch)+"x"
#GM.pc.addCredits(item.getSellPrice() * howMuch)
GM.main.increaseModuleFlag("IssixModule", "Issix_Donation_Meter", howMuch)
GM.pc.getInventory().removeXFromItemOrDelete(item, howMuch)
addMessage(howMuchStr+item.getVisibleName()+" was donated to Issix")
if GM.main.getModuleFlag("IssixModule", "Issix_Donation_Meter", 0) == 50:
addMessage("You can now enchant items with smart locks thanks to Issix's good will")
setState("")
if(lockedInto):
endScene()
return
return
if _action == "enchant":
var item = _args[0]
var lock = _args[1]
var newLock = SmartLock.create(lock)
newLock.onLocked({forcer = "pc"})
item.getRestraintData.setLevel(item.getRestraintData.getLevel()+1) # Just an extra
item.getRestraintData().setSmartLock(newLock)
# Hey kids, don't do this at home, it's bound to be dangerous (seriously, I'm fucking surprised that works, though it feels like shoestring held kind of feature and fairly restricted)
if lock == SmartLock.SlutLock:
var availableTasks = ["Orgasms", "Choke", "Bodywritings"] # Tasks should be available to anyone regardless any body configuration
var theTask:NpcBreakTaskBase = GlobalRegistry.createSlaveBreakTask(RNG.pick(availableTasks))
theTask.generateFor("pc", false, RNG.randf_rangeX2(1.0, 2.0))
newLock.tasks.append(theTask)
for task in newLock.tasks:
var _ok = task.connect("onTaskCompleted", newLock, "onSlutTaskCompleted")
addMessage(newLock.getName()+" has been applied to "+item.getVisibleName())
setState("")
if(lockedInto):
endScene()
return
return
if _action == "issixdonationitemreward":
GM.main.increaseModuleFlag("IssixModule", "Issix_Used_Donations", 10)
var item = call("reward"+str(RNG.randi_range(1,3)))
GM.pc.getInventory().addItem(item)
rewardItem = item
if(_action == "endthescene"):
endScene()
return
setState(_action)
func saveData():
var data = .saveData()
data["lockedInto"] = lockedInto
data["rewardItem"] = rewardItem
return data
func loadData(data):
.loadData(data)
lockedInto = SAVE.loadVar(data, "lockedInto", false)
rewardItem = SAVE.loadVar(data, "rewardItem", null)
func onInventoryItemInteracted(item: ItemBase):
if(state == "donatemenu"):
GM.main.pickOption("donate", [item, item.getAmount()])
func onInventoryItemSelected(item: ItemBase):
GM.ui.clearButtons()
addButton("Back", "Don't do anything", "")
if(state == "donatemenu"):
var itemAmount = item.getAmount()
var amounts = [1, 2, 3, 4, 5, int(itemAmount * 0.3), int(itemAmount * 0.5), int(itemAmount * 0.7), itemAmount]
amounts.sort()
var amountsUsed = {}
for amount in amounts:
if(amount < 1):
continue
if(itemAmount < amount):
break
if(amountsUsed.has(str(amount))):
continue
amountsUsed[str(amount)] = true
addButton("Donate "+(str(amount)), "Amount: "+str(amount), "donate", [item, amount])
if state == "enchantmenu":
var smartLockTypes = SmartLock.getAll()
for smartLock in smartLockTypes:
if smartLock == SmartLock.KeyholderLock or smartLock == SmartLock.TightLock: # Ignore keyholder locks or TightLocks because they are too involved, from base game only really SlutLocks are left from the list :(
continue
var dummyLock = SmartLock.create(smartLock)
addButton(dummyLock.getName(), "Apply "+dummyLock.getName()+" onto the restraint", "enchant", [item, smartLock])
#dummyLock.free()
# func onInventoryItemGroupInteracted(item: ItemBase):
# if(state == "donatemenu"):
# GM.main.pickOption("sellall", [item])

View file

@ -33,6 +33,7 @@ func _run():
else:
saynn("While exploring the station a in the corner of a platform sits a demon-dragon Issix with three leashed creatures.")
addButton("Talk", "Talk to Issix", "talk")
addButton("Donate", "Donate loose BDSM gear you have to Issix", "issixdonate")
addButton("Appearance", "Take a closer look at Issix", "appearance")
addButton("Leave", "Be on your way", "endthescene")
@ -111,8 +112,9 @@ func _run():
saynn("He holds his paw up to you, not fazed by the fact that you are still separated by an awkwardly long distance from the demon-dragon.\nNot wanting to be rude, you lean forwards while making extra sure you will not trample upon laying inmate or fall forwards by yourself. Eventually your " + ("hand" if len(GM.pc.getSpecies()) == 1 and GM.pc.getSpecies()[0] == "human" else "paw") + " meets his and you are able to do shake them.") # ok, I have no idea what's the difference between buff arms and anthro arms, they seem the same, and technically neither have paws, too bad I'm the one writing dialogue though
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]")
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]")
saynn("[say=issix]Anyways, I own this little corner including those three wonderful leashed pets beside me. Since you do seem fairly new here, I want to make something very clear to you - you do NOT touch my pets without their 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. I don't mind if you talk with them, if they allow you, you can even touch them, but you do not hurt or fuck my property, if you fancy any of them you can come to me and nicely ask for permission, but they are mine. Understood?[/say]")
saynn("[say=pc]Understood.[/say]")
saynn("[say=issix]As long as you follow this rule, you'll not have to worry about humble me. Now, is there any reason you came to me?[/say]")
addButton("Heaven?", "Did you hear that correctly?", "heaven")
addButton("You", "Learn more about Issix", "issixdetails")
addButton("Pets", "Who are the pets?", "pets")
@ -150,7 +152,7 @@ func _run():
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]")
saynn("{hiisi.name} licks your leg, leaving a bit of saliva on your fur.") # TODO Fur/skin
saynn("{hiisi.Name} licks your leg, leaving a bit of saliva on your fur.") # TODO Fur/skin
saynn("[say=issix]I apologize for my pets, they aren't used to longer conversations with strangers. They've been through a lot and... *sigh* Anyways, Lamia! Lamia is a fox breed, he doesn't speak. He communicates with drawings. He is getting pretty good at them. He also doesn't seem to mind being mute, quite to the opposite, he seems excited that his... Speech is in form of images.[/say]")
saynn("You can see Lamia drawing something, Issix gives you a signal to just wait a second. After a minute, Lamia presents you with a drawing, smiling.")
saynn("The drawing shows a pretty good representation of yourself, on fours, while leashed by a figure that you can only infer to be Issix. There is Lamia, Azazel and Hiisi hanging around there as well besides you. Issix laughs when he sees the drawing.")
@ -288,7 +290,8 @@ func _run():
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):
saynn("[say=issix]Hmm. you still look mostly the same, still unworthy.[/say]")
saynn("[say=issix]You still look the same as the last time you came to me, do not waste my time. If you are really serious about becoming my pet you'll know what to do.[/say]")
saynn("(May be a good idea to ask Issix's pets for advice)")
else:
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")
@ -383,6 +386,10 @@ func _react(_action: String, _args):
GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", true)
#GM.pc.getInventory().removeFirstOf("IssixsMap") - might be useful for later?
if _action == "issixdonate":
runScene("IssixDonationScreen")
_action = ""
if(_action == "endthescene"):
endScene()
return

View file

@ -149,10 +149,10 @@ func _run():
addButton("Drink", "Ask Hiisi about energy drink that you've won through the game of Rock Paper Scissors", "hiisienergy")
if HiisiRPS["winh"] > 2 and HiisiRPS["reward_acquired"] == false:
addButtonWithChecks("Hypnovisor", "Ask Hiisi to fulfill his request with hypnovisors", "hiisihypnovisors", [], [[ButtonChecks.HasItemWithTag, ItemTag.Hypnovisor]])
if not getModuleFlag("IssixModule", "Hiisi_Name_Helped", false):
addDisabledButton("Name", "You already asked Hiisi about his name")
else:
if getModuleFlag("IssixModule", "Hiisi_Name_Helped", false) != true:
addButton("Name", "Ask Hiisi about his name", "hiisiname")
else:
addDisabledButton("Name", "You already asked Hiisi about his name")
if getModuleFlag("IssixModule", "Hiisi_Helped_Today", false) == false:
addButton("Help", "Ask if you can help the canine in something", "hiisihelp")
else:
@ -338,7 +338,7 @@ func _run():
saynn("When you look at Lamia's blanket, you think of creative person. On blanket there are organizers, pens, brushes, pieces of paper, a bowl and a small trashcan filled to the brim with folded into spherical balls paper. In a way everything seems organized, the organizers are in one place, the drawing tools in other and yet even positioning of the trashcan makes sense. Other than that, the blanket seems fairly clean.")
addButton("Talk", "Talk to Lamia", "lamiatalk")
addButton("Appearance", "Look at Lamia", "lamiaappearance")
if getModuleFlag("IssixModule", "Lamia_Times_Helped", 0) > 0:
if getModuleFlag("IssixModule", "Lamia_Times_Helped") != null:
match getModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today"):
null:
addButton("Help", "You see a big stack of drawings and some drawers, it seems Lamia categorizes their drawings, ask if you could help?", "lamiahelp")
@ -440,7 +440,7 @@ func _run():
saynn("[say=azazel]Well, if you still have access to that sweet sweet catnip of yours, I'd love to get more of it, it's so intoxicating and fun! Gives such warm feelings. Have you tried it yourself?[/say]")
said_something = true
elif GM.main.getModuleFlag("IssixModule", "Lamia_Times_Helped", 0) < 10:
saynn("[say=azazel]I'm sure if you'd help Lamia they would put in good word for you! Perhaps you could help them draw? I don't know.[/say]")
saynn("[say=azazel]I'm sure if you'd help Lamia they would put in good word for you! Or well... You know what I mean. Perhaps you could help them draw? I don't know.[/say]")
said_something = true
elif GM.main.getModuleFlag("IssixModule", "Hiisi_Affection", 0) < 12:
saynn("[say=azazel]Hiisi is our guardian angel, after Master, of course. He does all different kind of stuff tinkers with things and so on. Perhaps he needs some help too? I'm sure if you helped him a little bit he would maybe be happy to share some thoughts about you with Master.[/say]")
@ -632,12 +632,12 @@ func _run():
addButton("Explicit", "You've noticed Lamia doesn't draw any explicit things, perhaps worth asking about it?", "lamiaexplicit")
if lamia_affection > 6:
addDisabledButton("Prison", "Ask Lamia how they ended up in the prison")
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:
addDisabledButton("Favorite", "Ask Lamia what is their favorite thing to draw")
addDisabledButton("Favorite", "Ask Lamia what their favorite thing to draw is")
else:
addDisabledButton("Favorite", "You don't feel like there is enough connection between you two to ask him that")
@ -647,6 +647,32 @@ func _run():
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 == "lamiaprison":
saynn("[say=pc]A mute fox in general inmate uniform, do you feel comfortable sharing how did it came to be?[/say]")
saynn("Fox looks at you and sighs. You realize perhaps this wasn't the right question to ask, but then he starts searching for something in their bag and pulls out a small stack of paper held together by a stapler. They look at the first page holding the entire stack in their paws before passing it to you. There is no cover or anything, it's just a bunch of papers with drawings on them, from brief look it seems like it all reads like a comic.")
saynn("First page features a younger looking version of Lamia with a backpack on their back, next panels that span at least 3 pages show them walking through countless beautiful and detailed environments. There is a forest with weird looking trees spanning higher than any you've ever seen yourself, there is a jungle like place where Lamia sits alone next to a makeshift campfire, there are canyons with colorful rocks all around, huts on what you can only imagine are mountains and large open bodies of water including a stunning depiction of Lamia inside underwater glass tunnel with scary and beautiful looking ocean fauna. By sheer chance you notice a small piece of paper where the stapler stapled the pages, seems like there are at least two pages missing, ignoring that little detail you ask.")
saynn("[say=pc]Holy fuck, those are just drawings but they look stunning, are those real places? On your planet?[/say]")
saynn("Lamia nods")
saynn("[say=pc]Woooahh.[/say]")
saynn("All of those panels seem to have a theme of travel, you imagine Lamia traveled a lot, which seems like an interesting life to live. Finally, on 10th page Lamia arrives to what looks like a giant man made wall, it spans far and wide beyond what comic panel can depict, and there is seemingly one depicted entrance that has a man made solid road leading to it. Armed guards in it. Next few panels depict how meeting of Lamia and AlphaCorp guards went, Lamia, seemingly wanting to pass the giant wall was stopped by the armed guards, they put forward their paw as if expecting something, Lamia shakes their head and promptly gets told fo fuck off by the guard.")
saynn("Next panel shows Lamia near another campfire next to an enormous wall. He must have stayed there for a while. You realize that the wall was likely impossible to overcome by regular means considering Lama chose to encamp near the earlier depicted entrance. A few panels show the fox boy observing the border check from a distance. On 8th page, during the night they've been sneaking around near the entrance, 2 guards seemingly asleep, one awoke but staring at the computer terminal. Lamia, as if ninja are sneaking through the gate, multiple panels show them literally crawling or thinning out to avoid detection. There is a panel showing their happy face on the other side of the wall, a wall entrance in a background - achieving their goal, where the next full page panel shows them laying on the ground unconscious with a projectile on their back. Last page of the saga shows transportation inside a spacecraft with them in cuffs. You can guess the rest.")
saynn("[say=pc]That's... Wow. So, that was your planet, right? There was AlphaCorp there and they were like, guarding an entrance in a wall to the other side.[/say]")
saynn("Lamia confirms.")
saynn("[say=pc]And there was no way around it?[/say]")
saynn("He confirms again.")
saynn("[say=pc]That must have sucked. What the guards wanted, money? IDs?[/say]")
saynn("They signal that the guards wanted both.")
saynn("[say=pc]Ughhh...[/say]")
saynn("You pass the stack of papers back to Lamia and they put it back into their bag.")
saynn("[say=pc]So, you had neither right? No money, no identification...[/say]")
saynn("They nod.")
saynn("[say=pc]Guess why you wandered like that is a story for another day?[/say]")
saynn("They yawn, seems so.")
saynn("[say=pc]Alright, thank you for sharing this, I'll take my leave now.[/say]")
saynn("They have you off.")
addButton("Finish", "Lamia shared their story with you, now its time to leave", "lamiatalk")
if state == "lamiatrydrawing":
saynn("[say=pc]Hey Lamia, I were wondering, you've been drawing a lot of things, do you think I could try something on my own?[/say]")
saynn("Lamia's eyes light up like candles, he doesn't waste a moment to grab a sheet of paper, a nearby brush and a solid piece of texture as a pad under the paper and practically shove those items into your paws. You kneel and start to lay down on your belly, your {pc.feet} are technically on Hiisi's blanket while the rest of your body is on Lamia's, you hope this won't bother the canine.")
@ -726,7 +752,7 @@ func _run():
saynn("Lamia shrugs, he starts drawing. At first a koala eating a bamboo shows up, a happy face drawn above it. Then he draws canine member and canine pussy with a stick figure doing shrug with their arms. What strikes you as odd is that even though Lamia doesn't seem to draw explicit scenes, their genitalia art is drawn with plenty of detail and effort.")
saynn("[say=pc]Wow, that's pretty good, but I guess you kinda don't care much for those? Sex and all just doesn't do it for you, huh?[/say]")
saynn("They nod in agreement.")
saynn("[say=pc]I con respect that. You are a great artist, and you should draw whatever the fuck you want, that's the way to go.[/say]")
saynn("[say=pc]I can respect that. You are a great artist, and you should draw whatever the fuck you want, that's the way to go.[/say]")
saynn("They smile, you reward them with headpats.")
addButton("Back", "Finish this conversation", "lamiatalk")

View file

@ -4,7 +4,6 @@ var rng_per_day = null
var pet_time_start = null
var reply_litter = null
var azazel_teased_motherhood = false
var azazel = null
var AVERAGE_WALK_DELAY = 9
var milk_result = []
@ -14,7 +13,6 @@ func _init():
func _initScene(_args = []):
rng_per_day = RandomNumberGenerator.new()
rng_per_day.seed = GM.main.getDays()
azazel = GlobalRegistry.getCharacter("azazel")
reply_litter = 0
func _run():
@ -209,6 +207,7 @@ func _run():
addButton("Reject", "You don't want to play if you don't know what's at stake", "azazelguesslitterreject")
if state == "littercountresult":
var azazel = GlobalRegistry.getCharacter("azazel")
if reply_litter == 0:
saynn("[say=pc]Zero.[/say]")
saynn("Azazel stares at you with confusion")
@ -577,7 +576,7 @@ static func addIssixMood(mood: int):
func registerOffspringGuess():
var past_guesses: Dictionary = getModuleFlag("IssixModule", "Litter_Guessing_Game", {"guesses_off": [], "last_guess": GM.CS.getChildrenAmountOf("azazel")})
past_guesses["guesses_off"].append(reply_litter-azazel.getPregnancyLitterSize())
past_guesses["guesses_off"].append(reply_litter-GlobalRegistry.getCharacter("azazel").getPregnancyLitterSize())
past_guesses["last_guess"] = GM.CS.getChildrenAmountOf("azazel")
setModuleFlag("IssixModule", "Litter_Guessing_Game", past_guesses.duplicate(true))