Changed progression system after enslaving

Added Luck Token image
Added search fail to the drone minigame
Updated repo
This commit is contained in:
Frisk 2025-02-16 00:28:54 +01:00
parent b19016fcd8
commit 99124628dd
17 changed files with 89 additions and 22 deletions

View file

@ -1,8 +1,8 @@
{ {
"name": "Issix Mod", "name": "Issix Mod",
"description": "\nTags: M/player, M/M (implied), petplay, slavery, corruption (of PC, opt-in), degradation, watersports (in-game toggle content), parasite (future, opt-in)\n\nIssix is a demonic dragon sick entirely of the world around, finding peace in BDCC facility. His idea of paradise is to own slaves to keep him company, do YOU want to join them?\n\nIssix mod adds 4 characters to the game - Issix as a dominant demonic dragon who is a master to Azazel, Hiisi and Lamia - his loyal pets. Mod is directed at players who when playing video games prefer to put themselves in submissive roles, as its the player who can join Issix's harem as one of his pets.\nCurrent state of the modification is that its released in Alpha (hah) stage this means that features leading to enslavement are mostly implemented and from then on its placeholder land.\n\nCurrent features:\n* 4 characters, all with some interactions coded in, you can help Lamia categorize their artwork, get some drugs for Azazel and play Rock Paper Scissor with Hiisi\n* 17 scenes, sort of meaningless number, but likely enough of content for at least an hour of gameplay with plans for expansion in the future\n* 1 quest leading to player's voluntary enslavement by Issix\n\nPlanned content:\n* More content after player is enslaved which is currently missing\n* Prostitute role\n* \"Hard mode\" with less choice and total submission to Master\n* Alternative route leading to enslavement\n* Expansion of content for all characters\n\nMod assumes player takes an anthro form, in the future it might be changed but if it's a deal breaker you should know.\n\nEveryone is welcome to contribute to the mod over on GitHub at https://github.com/Friskygote/Issix-mod.", "description": "\nTags: M/player, M/M (implied), petplay, slavery, corruption (of PC, opt-in), degradation, watersports (in-game toggle content), parasite (future, opt-in)\n\nIssix is a demonic dragon sick entirely of the world around, finding peace in BDCC facility. His idea of paradise is to own slaves to keep him company, do YOU want to join them?\n\nIssix mod adds 4 characters to the game - Issix as a dominant demonic dragon who is a master to Azazel, Hiisi and Lamia - his loyal pets. Mod is directed at players who when playing video games prefer to put themselves in submissive roles, as its the player who can join Issix's harem as one of his pets.\nCurrent state of the modification is that its released in Alpha (hah) stage this means that features leading to enslavement are mostly implemented and from then on its placeholder land.\n\nCurrent features:\n* 4 characters, all with some interactions coded in, you can help Lamia categorize their artwork, get some drugs for Azazel and play Rock Paper Scissor with Hiisi\n* 17 scenes, sort of meaningless number, but likely enough of content for at least an hour of gameplay with plans for expansion in the future\n* 1 quest leading to player's voluntary enslavement by Issix\n\nPlanned content:\n* More content after player is enslaved which is currently missing\n* Prostitute role\n* \"Hard mode\" with less choice and total submission to Master\n* Alternative route leading to enslavement\n* Expansion of content for all characters\n\nMod assumes player takes an anthro form, in the future it might be changed but if it's a deal breaker you should know.\n\nWhile the repository is mainly hosted on https://git.frisk.space/Frisk/Issix-mod, everyone is welcome to contribute to the mod over on GitHub's mirror at https://github.com/Friskygote/Issix-mod, changes will be pulled to source repository.",
"author": "Frisk", "author": "Frisk",
"repository": "https://github.com/Friskygote/Issix-mod", "repository": "https://git.frisk.space/Frisk/Issix-mod",
"modversion": "0.9.1", "modversion": "0.9.5",
"gameversion": "0.1.7" "gameversion": "0.1.7"
} }

View file

@ -4,7 +4,7 @@ func _init():
id = "IssixSpecialEvent" id = "IssixSpecialEvent"
var registered_special_scenes = [['IssixSlaveryIntroCont', 1, {}], ['IssixBringsComicbooks', 2, {"Comic_Books": 1}], ['IssixSlaveryBowlTraing', 2, {}], ['IssixSlaveryBranding', 3, {}]] var registered_special_scenes = [['IssixSlaveryIntroCont', 0, {}], ['IssixSlaveryBranding', 0, {}], ['IssixBringsComicbooks', 1, {"Comic_Books": 1}], ['IssixSlaveryBowlTraing', 3, {}], ]
class CustomSorter: class CustomSorter:
static func sort_by_progressionpoints(a, b): static func sort_by_progressionpoints(a, b):
@ -29,13 +29,15 @@ func checkRequirements(requirements: Dictionary):
func shouldBeShownForcedEvent(): func shouldBeShownForcedEvent():
var scenes_seen = getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []}) var scenes_seen = getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
var current_progression_points = GM.main.getModuleFlag("IssixModule", "Progression_Points", 0) var current_progression_points = GM.pc.getSkillsHolder().getSkill("Pet").getLevel()
if GM.main.getDays() >= GM.main.getModuleFlag("IssixModule", "Progression_Day_Next", 0) and GM.main.getModuleFlag("IssixModule", "Unwelcome_At_Corner", false) != true: if GM.main.getDays() >= GM.main.getModuleFlag("IssixModule", "Progression_Day_Next", 0) and GM.main.getModuleFlag("IssixModule", "Unwelcome_At_Corner", false) != true:
registered_special_scenes.sort_custom(CustomSorter, "sort_by_progressionpoints") registered_special_scenes.sort_custom(CustomSorter, "sort_by_progressionpoints")
for scene in registered_special_scenes: for scene in registered_special_scenes:
if scene[1] > current_progression_points: if scene[1] > current_progression_points:
return null return null
if scenes_seen["scenes_seen"].find(scene[0]) == -1 and checkRequirements(scene[2]): if scenes_seen["scenes_seen"].find(scene[0]) == -1 and checkRequirements(scene[2]):
if scene[0] == "IssixSlaveryBranding" and GM.main.getDays() < scenes_seen["day_enslaved"]+9: # Special case for branding scene
continue
return scene[0] return scene[0]
return null return null

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/lucktoken.png-5516dfc21eaeb1814777ede82a76e887.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Modules/IssixModule/Items/Icons/lucktoken.png"
dest_files=[ "res://.import/lucktoken.png-5516dfc21eaeb1814777ede82a76e887.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

View file

@ -60,7 +60,7 @@ func _run():
else: else:
addDisabledButton("Pay", "Not enough credits") addDisabledButton("Pay", "Not enough credits")
addButton("Intimidate", "Tell them you wont leave or pay", "intimidate") addButton("Intimidate", "Tell them you wont leave or pay", "intimidate")
if getModuleFlag("IssixModule", "PC_Training_Level", 0) > 0 and getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 1: if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 1 and (GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 1 or GM.pc.getSkillsHolder().getSkill("Pet").getExperience() > 100):
if (GM.pc.getPersonality().getStat(PersonalityStat.Coward) > 0.3): if (GM.pc.getPersonality().getStat(PersonalityStat.Coward) > 0.3):
addDisabledButton("Issix", "You are too cowardly to bring up your Master") addDisabledButton("Issix", "You are too cowardly to bring up your Master")
else: else:
@ -178,3 +178,6 @@ func getDevCommentary():
func hasDevCommentary(): func hasDevCommentary():
return true return true
func getSceneCreator():
return "Rahi, Frisk"

View file

@ -62,3 +62,6 @@ func _react(_action: String, _args):
return return
setState(_action) setState(_action)
func getSceneCreator():
return "Rahi, Frisk"

View file

@ -85,8 +85,8 @@ func _run():
addButton("Back", "End today's training session", "endthescene") addButton("Back", "End today's training session", "endthescene")
func shouldBeInHeavyBondage(): # TODO Skill rebalance func shouldBeInHeavyBondage():
return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 2 or GM.pc.getSkillsHolder().getSkill("Pet").getExperience() > 80 return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 3
func createButtons(): func createButtons():
var trainingLevel = int(getModuleFlag("IssixModule", "PC_Training_Level", 0)) var trainingLevel = int(getModuleFlag("IssixModule", "PC_Training_Level", 0))
@ -160,6 +160,7 @@ func _react(_action: String, _args):
func _react_scene_end(_tag, _result): func _react_scene_end(_tag, _result):
if(_tag == "walkies_end"): if(_tag == "walkies_end"):
goodPoints += 5 if shouldBeInHeavyBondage() else 0
goodPoints += 2 if GM.pc.isMuzzled() else 0 goodPoints += 2 if GM.pc.isMuzzled() else 0
goodPoints += 2 if GM.pc.hasBlockedHands() else 0 goodPoints += 2 if GM.pc.hasBlockedHands() else 0
destroyBorrowedEquipment() destroyBorrowedEquipment()

View file

@ -73,7 +73,7 @@ func _react(_action: String, _args):
scenes["scenes_seen"].append(sceneID) scenes["scenes_seen"].append(sceneID)
GM.main.setModuleFlag("IssixModule", "Misc_Slavery_Info", scenes.duplicate(true)) GM.main.setModuleFlag("IssixModule", "Misc_Slavery_Info", scenes.duplicate(true))
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+3) setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+3)
increaseModuleFlag("IssixModule", "Progression_Points", 1) GM.pc.addSkillExperience("Pet", 60)
endScene() endScene()
return return

View file

@ -50,6 +50,9 @@ func _react(_action: String, _args):
if _action == "normal2": if _action == "normal2":
GM.pc.addLust(20) GM.pc.addLust(20)
if _action == "normal3":
GM.pc.addStamina(-40)
if(_action == "endthescene"): if(_action == "endthescene"):
endScene() endScene()
return return

View file

@ -212,7 +212,7 @@ func _react(_action: String, _args):
GM.pc.setLocation("hall_ne_corner") GM.pc.setLocation("hall_ne_corner")
timedifference = GM.main.getTimeCap() - GM.main.timeOfDay timedifference = GM.main.getTimeCap() - GM.main.timeOfDay
processTime(timedifference) processTime(timedifference)
increaseModuleFlag("IssixModule", "Progression_Points") GM.pc.addSkillExperience("Pet", 200)
if _action == "brandtalk": if _action == "brandtalk":
attitude = _args[0] attitude = _args[0]

View file

@ -87,8 +87,7 @@ func _react(_action: String, _args):
], "gym_entrance", "crawl"]) ], "gym_entrance", "crawl"])
if(_action == "endthescene"): if(_action == "endthescene"):
GM.pc.addSkillExperience("Pet", 300) GM.pc.addSkillExperience("Pet", 100)
increaseModuleFlag("IssixModule", "Progression_Points")
increaseModuleFlag("IssixModule", "PC_Training_Level") increaseModuleFlag("IssixModule", "PC_Training_Level")
setModuleFlag("IssixModule", "Hiisi_Protects_PC", true) setModuleFlag("IssixModule", "Hiisi_Protects_PC", true)
endScene() endScene()

View file

@ -73,8 +73,7 @@ func _react(_action: String, _args):
if(_action == "endthescene"): if(_action == "endthescene"):
increaseModuleFlag("IssixModule", "PC_Training_Level") increaseModuleFlag("IssixModule", "PC_Training_Level")
increaseModuleFlag("IssixModule", "Progression_Points") GM.pc.addSkillExperience("Pet", 140)
GM.pc.addSkillExperience("Pet", 300)
GM.pc.getSkillsHolder().addPerk("BowlTraining") GM.pc.getSkillsHolder().addPerk("BowlTraining")
var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []}) var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
scenes["scenes_seen"].append(sceneID) scenes["scenes_seen"].append(sceneID)

View file

@ -293,8 +293,8 @@ func _react(_action: String, _args):
func shouldBeInHeavyBondage(): # TODO Skill rebalance func shouldBeInHeavyBondage():
return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 2 or GM.pc.getSkillsHolder().getSkill("Pet").getExperience() > 80 return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 3
func rollDestination(): func rollDestination():
destination = RNG.pick(destinations.keys()) destination = RNG.pick(destinations.keys())

View file

@ -103,7 +103,7 @@ func _run():
addDisabledButton("Drone", "Drone is currently unavailable, talk with Master Issix") addDisabledButton("Drone", "Drone is currently unavailable, talk with Master Issix")
elif getModuleFlag("IssixModule", "Drone_Task_Timeout", 0) > 0: elif getModuleFlag("IssixModule", "Drone_Task_Timeout", 0) > 0:
addDisabledButton("Drone", "New drone has been ordered, however it will take a while before it gets to the prison") addDisabledButton("Drone", "New drone has been ordered, however it will take a while before it gets to the prison")
elif getModuleFlag("IssixModule", "Progression_Points", 0) > 5: elif GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 5:
addButtonWithChecks("Drone", "Help with finding items", "start_drone_task", [], [ButtonChecks.NotBlindfolded, ButtonChecks.NotHandsBlocked]) addButtonWithChecks("Drone", "Help with finding items", "start_drone_task", [], [ButtonChecks.NotBlindfolded, ButtonChecks.NotHandsBlocked])
else: else:
addDisabledButton("????", "You haven't unlocked this yet") addDisabledButton("????", "You haven't unlocked this yet")

View file

@ -252,7 +252,6 @@ func _react(_action: String, _args):
if _action == "acceptslavery": if _action == "acceptslavery":
GM.pc.addExperience(500) GM.pc.addExperience(500)
setModuleFlag("IssixModule", "Misc_Slavery_Info", {"day_enslaved": GM.main.getDays(), "scenes_seen": []}) setModuleFlag("IssixModule", "Misc_Slavery_Info", {"day_enslaved": GM.main.getDays(), "scenes_seen": []})
setModuleFlag("IssixModule", "Progression_Points", 1)
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+1) setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+1)
setModuleFlag("IssixModule", "Issix_Mood", 50) setModuleFlag("IssixModule", "Issix_Mood", 50)
setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()) setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays())

View file

@ -21,8 +21,6 @@ func _initScene(_args = []):
item_target = RNG.pick(["main_dressing2", "main_green_corridor10", "main_green_secret", "main_dressing1", "main_hallroom5", "med_mental_entrance", "medical_hospitalwards", "medical_storage", "med_corridor_split2", "med_nearshower", "med_researchlab", "med_milkingroom", "eng_corridor_blue3", "eng_airventskip", "eng_robotics", "eng_storage", "eng_corridor6", "eng_corridor3", "eng_assemblylab", "mining_shafts_entering", "eng_bay_nearbreakroom", "cellblock_red_playercell", "cellblock_lilac_nearcell", "cellblock_orange_playercell", "cellblock_corridor_nearstairs"]) item_target = RNG.pick(["main_dressing2", "main_green_corridor10", "main_green_secret", "main_dressing1", "main_hallroom5", "med_mental_entrance", "medical_hospitalwards", "medical_storage", "med_corridor_split2", "med_nearshower", "med_researchlab", "med_milkingroom", "eng_corridor_blue3", "eng_airventskip", "eng_robotics", "eng_storage", "eng_corridor6", "eng_corridor3", "eng_assemblylab", "mining_shafts_entering", "eng_bay_nearbreakroom", "cellblock_red_playercell", "cellblock_lilac_nearcell", "cellblock_orange_playercell", "cellblock_corridor_nearstairs"])
strike = 0 strike = 0
flying_back = false flying_back = false
# DEBUG
item_target = "eng_assemblylab"
func _run(): func _run():
if(state == ""): if(state == ""):
@ -149,6 +147,10 @@ func _run():
saynn("[say=issix]Here you go[/say]") saynn("[say=issix]Here you go[/say]")
addButton("Finish", "End the task", "endthescene") addButton("Finish", "End the task", "endthescene")
if state == "wrong_location_search":
saynn("You decide to dive lower with the drone to search for "+item+" however you find nothing. You do however get a few creatures trying to catch the drone. This unneeded attention significantly increases the risk of the mission. You refocus, maybe the the vibrations from the controller aren't at their max, and the item is somewhere else?")
addButton("Continue", "Continue the search", "search")
if state == "guard_catch": if state == "guard_catch":
aimCameraAndSetLocName(location) aimCameraAndSetLocName(location)
saynn("As you continue flying out of the sudden a large object appears in your eyes scaring you. The visor flashes in colors before becoming completely dark.") saynn("As you continue flying out of the sudden a large object appears in your eyes scaring you. The visor flashes in colors before becoming completely dark.")
@ -243,6 +245,28 @@ func _react(_action: String, _args):
else: else:
_action = "retrival_failure" _action = "retrival_failure"
if _action == "search_retrieve":
var endLocation = null
if item_target_type == 1:
endLocation = item_target
else:
endLocation = GM.main.IS.getPawn(item_target).getLocation()
if location != endLocation:
var pawsAtNewLoc = GM.main.IS.getPawnsAt(location)
var is_caught = false
for pawn in pawsAtNewLoc:
if pawn.isGuard():
if RNG.chance(80):
is_caught = true
if is_caught:
_action = "guard_catch"
elif strike == 2:
_action = "retrival_failure"
else:
strike += 1
_action = "wrong_location_search"
processTime(60)
if _action == "retrival_failure": if _action == "retrival_failure":
strike += 1 strike += 1
if strike > 2: if strike > 2:

View file

@ -17,8 +17,7 @@ func getPicture():
return "res://Modules/IssixModule/Skills/Images/petspeech.png" return "res://Modules/IssixModule/Skills/Images/petspeech.png"
func toggleable(): func toggleable():
var ch = npc if npc != null else GM.pc return true
return !(ch.getSkillsHolder().hasPerk(self.id))
func unlockable(): func unlockable():
return false return false