Issix-mod/Modules/IssixModule/Events/PetWanderEvent.gd

70 lines
2.7 KiB
GDScript3
Raw Permalink Normal View History

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", "hall_ne_corner"])) 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 GM.pc.getLocation() == "hall_ne_corner":
return false
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*3 or scene_index > 3:
return false
if scene_index != 3 and GM.pc.getLocation() == "hall_ne_corner": # This scene only shows on that tile
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*3 or scene_index > 4: # 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