This commit is contained in:
Maurane
2026-08-16 01:06:53 +02:00
parent d0cdec4a6a
commit 59e9cb30a5
362 changed files with 4139 additions and 4487 deletions
+17 -4
View File
@@ -19,9 +19,12 @@ func _ready() -> void:
#Connecting signals
menu_button.pressed.connect(func():
submenu.show()
ui_main.masks.mask.show()
ui_main.in_title_screen = false
if UI.in_title_screen == false and submenu.is_visible_in_tree() == false:
submenu.show()
ui_main.masks.mask.show()
elif UI.in_title_screen == false and submenu.is_visible_in_tree():
reset()
ui_main.masks.mask.hide()
)
submenu.resume.pressed.connect(func():
reset()
@@ -38,7 +41,17 @@ func _ready() -> void:
load.load_slot[i].pressed.connect(self._on_load_slot_pressed.bind(i))
load.load_slot[0].pressed.connect(self._on_load_slot_pressed.bind(0)) #Autosaveslot can be loaded but not saved upon
#Opens the submenu when the escape key is pressed
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel") and UI.in_title_screen == false and submenu.is_visible_in_tree() == false:
submenu.show()
ui_main.masks.mask.show()
elif event.is_action_pressed("ui_cancel") and UI.in_title_screen == false and submenu.is_visible_in_tree():
reset()
ui_main.masks.mask.hide()
#Emits save_slot signal
func _on_save_slot_pressed(save_slot_number: int):
+1 -1
View File
@@ -23,7 +23,7 @@ signal text_value_changed
signal auto_value_changed
#Boolean to differentiate in-game UI from title_screen UI
var in_title_screen = false
var in_title_screen = true
# Called when the node enters the scene tree for the first time.
+1
View File
@@ -273,6 +273,7 @@ theme = SubResource("Theme_h6tq4")
script = ExtResource("4_s3gqk")
[node name="Submenu" type="PanelContainer" parent="PauseMenu"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
+20 -10
View File
@@ -3,14 +3,15 @@ extends Node
#Variables for gameplay
var floor_count : int = -1
var patient_count : int = 1
var its_patient_count : int = 0
var accurate_diagnoses : int = 0
var diagnoses_quota : int = 1
var misdiagnoses : int = 0
var misdiagnoses_game_over : bool = true
var patient_quota : int = 1
var misdiagnoses_allowed : int = 2
var daily_patient_limit : int = 3
var patient_list = []
var event_index : String = ""
var supervisor_index : int = 1
var objective_list : Array[String]
#Variables for UI
var save_slot_count = 4 #How many save slots there are in the game, in addition to the autosave slot
@@ -21,11 +22,12 @@ var directives = "\n[center][font_size=22]INSTRUCTIONS[/font_size][/center]
\n\n[font_size=18][color=forest_green]RELEASE[/color] HUMANS, [color=red]TERMINATE[/color] ABNORMALS
\n\nIF A SUBJECT HAS [color=dark_orange]SYMPTOMS[/color] IT SHOULDN'T HAVE,
\n [color=red]IT IS NOT HUMAN[/color]
\n\nREFER TO THE [color=royal_blue]MANUAL[/color] FOR [color=dark_orange]SYMPTOMS[/color] DETAILS
\n\nMAKE ENOUGH [color=green_yellow]ACCURATE DIAGNOSES[/color] IN A ROW
\nTO GET TO THE NEXT FLOOR[/font_size]"
\n\nREFER TO THE [color=royal_blue]MANUAL[/color] FOR [color=dark_orange]SYMPTOMS[/color] DETAILS"
var release_messages: Array[String]
var terminate_messages: Array[String]
var default_patient_file = "[center][color=orange_red]NO SUBJECT SELECTED IN DATABASE[/color][/center]"
var default_recording_fil
var buttons_activated: bool = true
var entities = [] #Entities list for the journal
@@ -42,18 +44,21 @@ signal terminate_display
signal its_end
signal next_event
signal add_entity
signal add_objective
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
release_messages.resize(3)
terminate_messages.resize(3)
release_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING RELEASE PROTOCOL... -", "green_yellow")
release_messages[0] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("HUMAN", "green") + "\n\nUPDATING DATABASE...\n\n\n\n" + Globals.colorize("INITIATING RELEASE SEQUENCE", "green_yellow")
release_messages[1] = Globals.colorize("- RELEASING SUBJECT -", "green_yellow")
release_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("HUMAN", "green") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING RELEASE SEQUENCE", "green_yellow")
terminate_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING TERMINATION PROTOCOL... -", "orange_red")
terminate_messages[0] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("ABNORMAL", "red") + "\n\nUPDATING DATABASE...\n\n\n\n" + Globals.colorize("INITIATING TERMINATION SEQUENCE", "orange_red")
terminate_messages[1] = Globals.colorize("- TERMINATING SUBJECT -", "orange_red")
terminate_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("ABNORMAL", "red") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING TERMINATION SEQUENCE", "orange_red")
#Generating patient list
Globals.patient_list.clear()
@@ -61,6 +66,11 @@ func _ready() -> void:
for i in range(35,52):
patient_id = "patient_" + str(i)
Globals.patient_list.append(patient_id)
for i in range(1,5):
patient_id = "patient_its_" + str(i)
Globals.patient_list.append(patient_id)
patient_id = "patient_ite_" + str(i)
Globals.patient_list.append(patient_id)
#Gets the current time and day of the year
+24 -22
View File
@@ -53,20 +53,19 @@ func _ready() -> void:
func _on_new_game_pressed():
#Setting/Resetting game parameters
Globals.floor_count = -5
Globals.floor_count = -1
Globals.patient_count = 0
Globals.accurate_diagnoses = 0
Globals.diagnoses_quota = 2
Globals.misdiagnoses = 0
Globals.patient_quota = 2
Globals.misdiagnoses_allowed = 2
Globals.daily_patient_limit = 6
Globals.event_index = "interfloor"
Globals.objective_list.clear()
for i in range(len(Patient.patient_list)):
Patient.patient_list[i] = Patient.og_patient_list[i]
Patient.its_list = Patient.og_its_list
Patient.patients_seen.clear()
Patient.its_seen.clear()
Patient.spy.order = false
Patient.spy.count = 0
Patient.spy.reset()
UI.in_title_screen = false
# DISABLED FOR NOW SINCE THERE'S NO INTRO ANYMORE
#Offering to skip the introduction
#var choice_text = "Do you wish to skip the introduction ?"
@@ -119,18 +118,16 @@ func save_game(save_slot_number:int):
"supervisor_index": Globals.supervisor_index,
"patient_count": Globals.patient_count,
"accurate_diagnoses": Globals.accurate_diagnoses,
"diagnoses_quota": Globals.diagnoses_quota,
"misdiagnoses": Globals.misdiagnoses,
"patient_quota": Globals.patient_quota,
"misdiagnoses_allowed": Globals.misdiagnoses_allowed,
"daily_patient_limit": Globals.daily_patient_limit,
"patient_list": Patient.patient_list,
"its_list": Patient.its_list,
"ite_list": Patient.ite_list,
"patients_seen": Patient.patients_seen,
"its_seen": Patient.its_seen,
"ite_seen": Patient.ite_seen,
"spy_order": Patient.spy.order,
"spy_count": Patient.spy.count,
"journal_entities": $ScreeningDesk.journal_layer.journal.entities_page.text,
"spy_symptoms": Patient.spy.symptoms,
"spy_threshold": Patient.spy.threshold,
"objective_list": Globals.objective_list,
"save_date": Globals.get_save_date()
}
#Creating save file
@@ -162,6 +159,7 @@ func load_game(load_slot_number:int):
#Hiding loading menus and masks
UI.masks.mask.hide()
UI.pause_menu.reset()
UI.in_title_screen = false #Leaving title_screen
#Opening save file
var file = FileAccess.open("res://Saves/save_" + str(load_slot_number) + ".json", FileAccess.READ)
@@ -177,20 +175,20 @@ func load_game(load_slot_number:int):
Globals.supervisor_index = load_data["supervisor_index"]
Globals.patient_count = load_data["patient_count"]
Globals.accurate_diagnoses = load_data["accurate_diagnoses"]
Globals.diagnoses_quota = load_data["diagnoses_quota"]
Globals.misdiagnoses = load_data["misdiagnoses"]
Globals.patient_quota = load_data["patient_quota"]
Globals.misdiagnoses_allowed = load_data["misdiagnoses_allowed"]
Globals.daily_patient_limit = load_data["daily_patient_limit"]
Patient.patient_list.clear()
Patient.patient_list.append_array(load_data["patient_list"])
print (Patient.patient_list)
Patient.its_list = load_data["its_list"]
Patient.ite_list = load_data["ite_list"]
Patient.patients_seen = load_data["patients_seen"]
Patient.its_seen = load_data["its_seen"]
Patient.ite_seen = load_data["ite_seen"]
Patient.spy.order = load_data["spy_order"]
Patient.spy.count = load_data["spy_count"]
$ScreeningDesk.journal_layer.journal.entities_page.text = load_data["journal_entities"]
Patient.spy.symptoms.clear()
Patient.spy.symptoms.append_array(load_data["spy_symptoms"])
Patient.spy.threshold = load_data["spy_threshold"]
Globals.objective_list.clear()
Globals.objective_list.append_array(load_data["objective_list"])
else:
print("Failed to parse Loading Data.")
@@ -207,6 +205,9 @@ func _on_main_menu_pressed():
#Clearing balloon
clear_balloon()
#Setting boolean
UI.in_title_screen = true
#Going back to main menu
var scenes_to_hide = [$ScreeningDesk, $TextScreens, $TextScreens/Day, UI.game_over, UI.pause_menu.menu_button]
var scenes_to_show = [$TitleScreen]
@@ -264,7 +265,8 @@ func start_balloon(balloon_type:String, patient_type:String, dialogue_resource:
DialogueManager.got_dialogue.connect($ScreeningDesk.computer._recording_text)
"supervisor":
DialogueManager.got_dialogue.connect($ScreeningDesk.supervisor._change_emotion)
DialogueManager.got_dialogue.connect($ScreeningDesk.computer._recording_text)
#Applies text settings to the balloon
balloon.dialogue_label.seconds_per_step = UI.pause_menu.settings.text_speed
#balloon.dialogue_line.time = UI.auto_speed
+2 -2
View File
@@ -2,7 +2,7 @@ extends MarginContainer
@onready var rules = $HBoxContainer/HBoxContainer/Rules/Bookmark
@onready var symptoms = $HBoxContainer/HBoxContainer/Symptoms/Bookmark
@onready var entities = $HBoxContainer/HBoxContainer/Entities/Bookmark
@onready var objectives = $HBoxContainer/HBoxContainer/Objectives/Bookmark
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@@ -11,7 +11,7 @@ func _ready() -> void:
#Resets to initial state
func reset():
for tab in [symptoms, entities]:
for tab in [symptoms, objectives]:
tab.set_pressed(false)
tab.set_mouse_filter(Control.MOUSE_FILTER_STOP)
rules.set_pressed(true)
+20 -24
View File
@@ -1,13 +1,11 @@
extends Control
@onready var tab_patient_file = $Margin/ComputerScreen/Tabs/PatientFile
@onready var tab_rules = $Margin/ComputerScreen/Tabs/Rules
@onready var tab_statistics = $Margin/ComputerScreen/Tabs/Statistics
@onready var tab_recording = $Margin/ComputerScreen/Tabs/Recording
@onready var patient_file = $Margin/ComputerScreen/ComputerTabs/FileContainer/PatientFile
@onready var rules = $Margin/ComputerScreen/ComputerTabs/Rules
@onready var statistics = $Margin/ComputerScreen/ComputerTabs/Statistics
@onready var recording = $Margin/ComputerScreen/ComputerTabs/Recording
@onready var screen = $Margin/ComputerScreen2
@onready var next_patient_button = $Margin/NextPatient/CallNextPatient
var tab_list
var screen_list
@@ -15,34 +13,23 @@ var screen_list
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
tab_list = [tab_patient_file, tab_rules, tab_recording]
screen_list = [patient_file, rules, recording]
tab_list = [tab_patient_file, tab_statistics, tab_recording]
screen_list = [patient_file, statistics, recording]
#Connecting signals
tab_patient_file.pressed.connect(self._on_tab_patient_file_pressed)
tab_rules.pressed.connect(self._on_tab_rules_pressed)
tab_statistics.pressed.connect(self._on_tab_statistics_pressed)
tab_recording.pressed.connect(self._on_tab_recording_pressed)
Globals.response_chosen.connect(self._on_response_chosen)
#Hiding everything
for node in tab_list + screen_list + [screen, next_patient_button]:
node.hide()
#Displays a message on the computer screen
func display(message):
var text = message.replace("\\n", "\n") #Replaces litteral backslashes by actual newlines (necessary because of Dialogue Manager)
screen.text = text
screen.show()
#Shows the patient file tab
func _on_tab_patient_file_pressed():
tab_switch(tab_patient_file, patient_file)
#Shows the rules tab
func _on_tab_rules_pressed():
tab_switch(tab_rules, rules)
#Shows the statistics tab
func _on_tab_statistics_pressed():
tab_switch(tab_statistics, statistics)
#Shows the recording tab
func _on_tab_recording_pressed():
@@ -79,8 +66,17 @@ func _on_response_chosen(response): #Adds protagonist responses to the recording
recording.append_text(response.text)
#Updates the statistics tab
func update_statistics(accurate_diagnoses, misdiagnoses):
var accurate_diagnoses_line = "ACCURATE DIAGNOSES : " + Globals.colorize(str(accurate_diagnoses), "green")
var misdiagnoses_line = "MISDIAGNOSES : " + Globals.colorize(str(misdiagnoses), "red")
statistics.text = accurate_diagnoses_line + "\n\n" + misdiagnoses_line
#Resets to initial state
func reset():
for node in tab_list + screen_list + [screen, next_patient_button]:
node.hide()
update_statistics(Globals.accurate_diagnoses, Globals.misdiagnoses)
patient_file.text = Globals.default_patient_file
recording.text = ""
+21
View File
@@ -0,0 +1,21 @@
extends Control
@onready var screen = $Margin/ConsoleScreen
@onready var next_patient_button = $Margin/NextPatient/CallNextPatient
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Globals.console_message.connect(self.display)
reset()
#Displays a message on the console screen
func display(message):
var text = message.replace("\\n", "\n") #Replaces litteral backslashes by actual newlines (necessary because of Dialogue Manager)
screen.text = text
screen.show()
func reset(): #Resets to initial state
for node in [next_patient_button, screen]:
node.hide()
+1
View File
@@ -0,0 +1 @@
uid://d08500s1loqcr
-21
View File
@@ -1,21 +0,0 @@
extends RichTextLabel
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Globals.console_message.connect(self.display)
hide()
#Displays a message on the console screen
func display(message):
var text_to_display = message
text_to_display = text_to_display.replace("\\n", "\n") #Replaces litteral backslashes by actual newlines (necessary because of Dialogue Manager)
text = text_to_display
show()
#Resets to initial state
func reset():
text = ""
hide()
@@ -1 +0,0 @@
uid://cyennu12fufbt
+3 -3
View File
@@ -3,11 +3,11 @@ extends Control
@onready var rules = $MarginContainer/Rules
@onready var symptoms = $MarginContainer/Symptoms
@onready var entities = $MarginContainer/Entities
@onready var objectives = $MarginContainer/Objectives
@onready var rules_page = $MarginContainer/Rules/RightPage/Rules
@onready var symptoms_page = $MarginContainer/Symptoms/RightPage/Symptoms
@onready var entities_page = $MarginContainer/Entities/RightPage/Entities
@onready var objectives_page = $MarginContainer/Objectives/RightPage/Objectives
# Called when the node enters the scene tree for the first time.
@@ -17,6 +17,6 @@ func _ready() -> void:
#Resets to initial state
func reset():
for screen in [symptoms, entities]:
for screen in [symptoms, objectives]:
screen.hide()
rules.show()
+50 -60
View File
@@ -35,11 +35,10 @@ func _ready() -> void:
#Connecting signals
$Boundaries/VBoxContainer/Journal/MarginContainer/Rules/LeftPage/CloseManual.pressed.connect(self._on_close_manual_pressed)
$Boundaries/VBoxContainer/Journal/MarginContainer/Symptoms/LeftPage/CloseManual.pressed.connect(self._on_close_manual_pressed)
$Boundaries/VBoxContainer/Journal/MarginContainer/Entities/LeftPage/CloseManual.pressed.connect(self._on_close_manual_pressed)
$Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/LeftPage/CloseManual.pressed.connect(self._on_close_manual_pressed)
bookmarks.rules.pressed.connect(self._on_tab_rules_pressed)
bookmarks.symptoms.pressed.connect(self._on_tab_symptoms_pressed)
bookmarks.entities.pressed.connect(self._on_tab_entities_pressed)
Globals.add_entity.connect(self.add_entity)
bookmarks.objectives.pressed.connect(self._on_tab_objectives_pressed)
hide() #Hiding at start
@@ -59,67 +58,58 @@ func update_symptoms(floor_count:int):
journal.symptoms_page.text = symptoms_page
func add_entity(entity):
if Globals.entities.has(entity) == false:
Globals.entities.append(entity)
update_entities(Globals.entities)
func add_objective(objective:String): #Updates the objectives list
var temp_list = Globals.objective_list
var objective_text : String
match objective:
"siveyan_1_terminated":
temp_list.erase("siveyan_1")
"siveyan_1_released":
temp_list.erase("siveyan_1")
"siveyan_2_terminated":
temp_list.erase("siveyan_1_terminated")
temp_list.erase("siveyan_1_released")
"siveyan_2_released":
temp_list.erase("siveyan_1_terminated")
temp_list.erase("siveyan_1_released")
temp_list.append(objective)
Globals.objective_list = temp_list
update_objectives()
func update_entities(entities):
func update_objectives(): #Updates the objectives page
journal.entities_page.text = ""
for entity in entities:
add_entity_to_journal(entity)
func add_entity_to_journal(entity: String):
var config := ConfigFile.new()
var entity_name: String = ""
var entity_characteristics: String = ""
var entity_course_of_action: String = ""
var entity_text: String = ""
config.load("res://Text Data/entities.cfg") #Loading Entity file
entity_name = config.get_value(entity, "entity_name")
entity_characteristics = config.get_value(entity, "entity_characteristics")
entity_course_of_action = config.get_value(entity, "entity_course_of_action")
entity_text = Globals.colorize(entity_name, "dark_red") + "\n\nCHARACTERISTICS" + entity_characteristics + "\nRECOMMENDED COURSE OF ACTION" + entity_course_of_action
journal.entities_page.text += "\n\n\n" + entity_text
#func update_entities(): Old function, to be deleted
#journal.entities_page.text = ""
#if Patient.entities_current_floor.is_empty():
# Patient.pick_floor_entities() #Picking floor entities unless a save was just loaded
#var config := ConfigFile.new()
#var entity_name: String = ""
#var entity_characteristics: String = ""
#var entity_course_of_action: String = ""
#var entity_text: String = ""
#journal.entities_page.text += its_entity_file
#for entity in Patient.entities_current_floor:
#config.load("res://Dialogues/Entities/" + entity + "_file.cfg") #Loading Entity file
#entity_name = config.get_value("", "entity_name")
#entity_characteristics = config.get_value("", "entity_characteristics")
#entity_course_of_action = config.get_value("", "entity_course_of_action")
#entity_text = Globals.colorize(entity_name, "dark_red") + "\n\nCHARACTERISTICS" + entity_characteristics + "\nRECOMMENDED COURSE OF ACTION" + entity_course_of_action
#journal.entities_page.text += "\n\n\n" + entity_text
journal.objectives_page.text = ""
var objective_text: String
for objective in Globals.objective_list:
match objective:
"its":
objective_text = "[font_size=22][color=orange_red]- SMILING ENTITY -[/color][/font_size]\n\nAn entity with an alien smile seemed to take interest in me, and is likely to be able to take on other appearances. If a patient ever presents an [color=orange_red]abnormally wide smile[/color], immediate [color=dark_red]TERMINATION[/color] is required."
"ite":
objective_text = "[font_size=22][color=orange_red]- GLUTTONOUS ENTITY -[/color][/font_size]\n\nAn entity of distressing proportions looked to hunger for my flesh, and is likewise able to disguise itself. If a patient voices any intent to [color=orange_red]feast on my flesh[/color], immediate [color=dark_red]TERMINATION[/color] is required."
"spy":
objective_text = "[font_size=22][color=gold]- ALTERNATIVE ORDERS -[/color][/font_size]\n\nA mysterious individual has ordered us to [color=dark_green]RELEASE[/color] all patients " + Globals.colorize(Patient.spy.threshold, "dark_orange") + " the age of 40, and presenting " + Globals.colorize(Patient.spy.symptoms[0], "dark_orange") + " AND " + Globals.colorize(Patient.spy.symptoms[1], "dark_orange")
"siveyan_1":
objective_text = "[font_size=22][color=dark_orange]- PRIORITY TASK -[/color][/font_size]\n\nSupervisor Siveyan has been designated as a traitor to the Republic, and is to be [color=dark_red]TERMINATED[/color] on sight."
"siveyan_1_terminated":
objective_text = "[font_size=22][color=dark_orange]- PRIORITY TASK -[/color][/font_size]\n\nSupervisor Siveyan was terminated, in accordance with the 11th Law of Cleansing. The Republic shelters."
"siveyan_1_released":
objective_text = "[font_size=22][color=dark_orange]- PRIORITY TASK -[/color][/font_size]\n\nSupervisor Siveyan was released, in complete disregard of the 11th Law of Cleansing. What have I done ?"
"siveyan_2_terminated":
objective_text = "[font_size=22][color=dark_orange]- PRIORITY TASK -[/color][/font_size]\n\nSupervisor Siveyan was terminated at last. The Republic's Law prevails."
"siveyan_2_released":
objective_text = "[font_size=22][color=dark_orange]- PRIORITY TASK -[/color][/font_size]\n\nSupervisor Siveyan was released again, and serves once again the Republic."
"it_that_sees":
objective_text = "[font_size=22][color=dark_red]- ALERT #CORRUPTED FILE# DISREGARD TASK -[/color][/font_size]\n\nThe entity asked us to [color=dark_red]RELEASE[/color] all Abnormals, and [color=dark_green]TERMINATE[/color] all Humans. We shouldn't comply... right ?"
journal.objectives_page.text += "\n\n\n" + objective_text
#Resets to initial state
func reset():
hide()
update_symptoms(Globals.floor_count)
update_entities(Globals.entities)
if Globals.floor_count <= -2:
bookmarks.entities.show()
else:
bookmarks.entities.hide()
update_objectives()
#Shows the rules tab
@@ -132,16 +122,16 @@ func _on_tab_symptoms_pressed():
tab_switch(bookmarks.symptoms, journal.symptoms)
#Shows the entities tab
func _on_tab_entities_pressed():
tab_switch(bookmarks.entities, journal.entities)
#Shows the objectives tab
func _on_tab_objectives_pressed():
tab_switch(bookmarks.objectives, journal.objectives)
#Shows the correct screen according to the pressed tab
func tab_switch(pressed_tab, tab_screen):
#Highlights pressed tab and unpress the others
for tab in [bookmarks.rules, bookmarks.symptoms, bookmarks.entities]:
for tab in [bookmarks.rules, bookmarks.symptoms, bookmarks.objectives]:
if tab == pressed_tab:
pressed_tab.set_pressed(true)
pressed_tab.set_mouse_filter(Control.MOUSE_FILTER_IGNORE)
@@ -150,7 +140,7 @@ func tab_switch(pressed_tab, tab_screen):
tab.set_mouse_filter(Control.MOUSE_FILTER_STOP)
#Showing desired screen and hiding the others
for screen in [journal.rules, journal.symptoms, journal.entities]:
for screen in [journal.rules, journal.symptoms, journal.objectives]:
if screen == tab_screen:
screen.show()
else:
+4 -5
View File
@@ -7,14 +7,13 @@ func _ready() -> void:
#Updates Middle Screen Info
func update(floor_count, diagnoses_count, diagnoses_quota, misdiagnoses_allowed):
func update(floor_count, patient_count, patient_quota):
var floor = Globals.colorize(str(floor_count), "dark_orange")
var diagnoses = Globals.colorize(str(diagnoses_count) + "/" + str(diagnoses_quota), "dark_orange")
var misdiagnoses = Globals.colorize(str(misdiagnoses_allowed), "dark_orange")
var patients_seen = Globals.colorize(str(patient_count) + "/" + str(patient_quota), "dark_orange")
text = "FLOOR: " + floor + "\n\nACCURATE DIAGNOSES: " + diagnoses + "\n\nMISDIAGNOSES ALLOWED: " + misdiagnoses
text = "FLOOR: " + floor + "\n\nPATIENTS SEEN: " + patients_seen
#Resets to initial state
func reset():
update(Globals.floor_count, Globals.accurate_diagnoses, Globals.diagnoses_quota, Globals.misdiagnoses_allowed)
update(Globals.floor_count, Globals.patient_count, Globals.patient_quota)
+46 -121
View File
@@ -35,14 +35,7 @@ var symptoms_arrays: Array[Array] = [
#Lists of possible patients sorted by floor
var og_patient_list : Array[Dictionary]
var patient_list: Array[Dictionary]
var og_its_list = ["its_01", "its_02", "its_03", "its_04"]
var its_list = []
var og_ite_list = ["ite_01", "ite_02", "ite_03", "ite_04"]
var ite_list = []
var og_entities_list = ["entity_01"]
var patients_seen = []
var its_seen = []
var ite_seen = []
#Supervisor file path
var supervisor_name = "siveyan"
@@ -60,8 +53,6 @@ func _ready() -> void:
#Setting up patient lists
og_patient_list.resize(len(symptoms_arrays))
patient_list.resize(len(symptoms_arrays))
its_list = og_its_list
ite_list = og_ite_list
original_color = texture.modulate #Saving original modulation color to reset it after modification
@@ -82,31 +73,17 @@ func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog
return tree
func load_patient(patient_info: Dictionary): #Loads new patient
func load_patient(patient_id: String): #Loads new patient
#Storing patient info
id = patient_info["id"]
type = patient_info["type"]
id = patient_id
#Loading Subject resources
var file_path: String
var config := ConfigFile.new()
match type: #Setting right file path depending on subject type
"patient":
file_path = "Patients/"
"its":
file_path = "ITS/"
"ite":
file_path = "ITE/"
"entity":
file_path = "Entities/"
"supervisor":
file_path = "Supervisors/"
config.load("res://Dialogues/" + file_path + id + "_file.cfg") #Loading Subject file
dialogue_resource = load("res://Dialogues/" + file_path + id + ".dialogue") #Loading Dialogue Resource
load_emotions(config, "res://Art/Subjects/" + file_path + id + "/" + id + "_") #Loading Subject emotions
config.load("res://Dialogues/Patients/" + id + "_file.cfg") #Loading Subject file
dialogue_resource = load("res://Dialogues/Patients/" + id + ".dialogue") #Loading Dialogue Resource
load_emotions(config, "res://Art/Subjects/Patients/" + id + "/" + id + "_") #Loading Subject emotions
#Setting up Patient File
var patient_name = config.get_value("", "name")
@@ -167,8 +144,10 @@ func sort_patients():
var config := ConfigFile.new()
var file_path : String
var patient_symptoms: Array
var symptom_matched : bool
var symptom_list: Array
var symptom_matched : bool = false
var symptom_list : Array
var patient_type : String
var min_floor : int
for patient_id in Globals.patient_list:
@@ -182,6 +161,17 @@ func sort_patients():
patient_symptoms.append_array(symptom_list)
print("Patient #" + patient_id + " symptom list: " + str(patient_symptoms))
patient_type = config.get_value("", "type")
#Sets up a minimum floor depending on patient type
match patient_type:
"patient":
min_floor = 0
"its":
min_floor = 2
"ite":
min_floor = 4
print(patient_id + " min_floor : " + str(min_floor))
#Goes through the symptoms_arrays from the last to the first,
#If a symptom matches with the patient symptoms,
#Add that patient to the floors from that floor to the last one
@@ -193,8 +183,9 @@ func sort_patients():
print("Symptom matched: " + str(symptoms_arrays[j]) + " and " + str(symptom))
break
if symptom_matched:
for k in range(j, symptoms_arrays.size()):
og_patient_list[k].merge({patient_id: j+1}) # Adds the patient to every floor compatible, with a weighted odd
print(patient_id + " threshold : " + str(max(j,min_floor)))
for k in range(max(j,min_floor), symptoms_arrays.size()):
og_patient_list[k].merge({patient_id: j+1+min_floor}) # Adds the patient to every floor compatible, with a weighted odd
symptom_matched = false
break
@@ -224,120 +215,54 @@ func weighted_random(patients: Dictionary):
return null
func generate_next_id(patient_type: String):
func generate_next_id():
var floor_index = -Globals.floor_count -1
print("Floor Index: " + str(floor_index))
var next_id : String = ""
var next_id : String
match patient_type:
"patient":
next_id = weighted_random(patient_list[floor_index]) #Picks a random patient depending on floor, with weighted odds
print("Patient selected : " + str(next_id))
"its":
next_id = its_list.pick_random()
print("ITS selected: " + str(next_id))
"ite":
next_id = ite_list.pick_random()
print("ITE selected: " + str(next_id))
next_id = weighted_random(patient_list[floor_index]) #Picks a random patient depending on floor, with weighted odds
print("Floor Index: " + str(floor_index))
print("Patient selected : " + str(next_id))
return next_id
func next_patient() -> Dictionary: #Decides next patient ID
func next_patient() -> String: #Decides next patient ID
var next_id: String
var next_type: String
dialogue_start = "start"
match Globals.floor_count:
-2:
if Globals.patient_count == 0:
next_id = "its_00"
next_type = "its"
next_id = "patient_its_0"
else:
next_type = next_patient_type()
next_id = generate_next_id(next_type)
next_id = generate_next_id()
-3:
next_type = next_patient_type()
next_id = generate_next_id(next_type)
next_id = generate_next_id()
-4:
if Globals.patient_count == 0:
next_id = "ite_00"
next_type = "ite"
next_id = "patient_ite_0"
else:
next_type = next_patient_type()
next_id = generate_next_id(next_type)
-5:
next_id = generate_next_id()
-6:
if Globals.patient_count == 0:
next_id = "patient_spy"
next_type = "patient"
else:
next_type = next_patient_type()
next_id = generate_next_id(next_type)
next_id = generate_next_id()
_:
next_type = next_patient_type()
next_id = generate_next_id(next_type)
next_id = generate_next_id()
print("NEXT SUBJECT CHARACTERISTICS - ID: " + next_id + ", Type: " + next_type)
return {"id": next_id, "type": next_type}
#Randomizes next patient type (human, it, its)
func next_patient_type():
var type_list = []
var next_type: String
match Globals.floor_count:
-1:
type_list.append("patient")
-2:
type_list.append("patient")
-3:
for i in range(int(Globals.diagnoses_quota)):
if len(its_list) > 0:
type_list.append("its")
-4:
for i in range(int(Globals.diagnoses_quota)):
if len(its_list) > 0:
type_list.append("its")
-5:
for i in range(int(Globals.diagnoses_quota)):
if len(its_list) > 0:
type_list.append("its")
if len(ite_list) > 0:
type_list.append("ite")
_:
for i in range(int(Globals.diagnoses_quota)):
if len(its_list) > 0:
type_list.append("its")
if len(ite_list) > 0:
type_list.append("ite")
for i in range(2*int(Globals.diagnoses_quota)):
type_list.append("patient")
print("Type List generated: " + str(type_list))
next_type = type_list.pick_random()
print("Next subject type picked: " + str(next_type))
return next_type
print("NEXT SUBJECT ID: " + next_id)
return next_id
#Erases current subject ID from the corresponding subject list, so it can't be seen twice
func update_list():
print("Patient type: " + str(Patient.type))
match type:
"patient":
patients_seen.append(id)
for i in range(len(patient_list)):
if len(patient_list[i])>1:
patient_list[i].erase(id)
for j in range(len(patient_list)):
print("Updated Floor " + str(j) + " patient list: " + str(patient_list[j]))
"its":
its_seen.append(id)
its_list.erase(id)
print("Updated ITS list: " + str(its_list))
"ite":
ite_seen.append(id)
ite_list.erase(id)
print("Updated ITE list: " + str(ite_list))
patients_seen.append(id)
for i in range(len(patient_list)):
if len(patient_list[i])>1:
patient_list[i].erase(id)
for j in range(len(patient_list)):
print("Updated Floor " + str(j) + " patient list: " + str(patient_list[j]))
+5 -4
View File
@@ -5,9 +5,10 @@ extends Control
@onready var room = $Room
@onready var backwall = $Backwall
@onready var backwall_animation = $Backwall/BackwallAnimation
@onready var cell_top = $CellTop
@onready var cell_bot = $CellBot
@onready var cell_animation = $CellAnimation
@onready var cell_door = $CellDoor
@onready var cell_top = $CellDoor/CellTop
@onready var cell_bot = $CellDoor/CellBot
@onready var cell_animation = $CellDoor/CellAnimation
# Called when the node enters the scene tree for the first time.
@@ -18,7 +19,7 @@ func _ready() -> void:
#Resets to initial state
func reset():
cell_wall.modulate = Patient.original_color
for node in [cell_wall, cell_top, cell_bot]:
for node in [cell_wall, cell_door]:
node.hide()
for node in [glass, room, backwall]:
node.show()
+33 -44
View File
@@ -12,7 +12,7 @@ extends Control
@onready var patient_color: Color
@onready var computer = $LowerHalf/Computer
@onready var middle_screen = $LowerHalf/MiddleScreen/MarginContainer/MiddleScreen
@onready var console_screen = $LowerHalf/Console/Margin/ConsoleScreen
@onready var console = $LowerHalf/Console
@onready var room_assets = $RoomAssets
#DialogueAssets
@@ -29,7 +29,7 @@ func _ready() -> void:
main = get_parent()
#Connecting signals
computer.next_patient_button.pressed.connect(self._on_call_next_patient_pressed)
console.next_patient_button.pressed.connect(self._on_call_next_patient_pressed)
red_button.decision_made.connect(self._on_decision_made)
green_button.decision_made.connect(self._on_decision_made)
journal.pressed.connect(journal_layer._on_journal_pressed)
@@ -37,6 +37,7 @@ func _ready() -> void:
Globals.decision_made.connect(self._on_decision_made)
Globals.color_change.connect(self._on_color_change)
Globals.next_event.connect(self.event_manager)
Globals.add_objective.connect(journal_layer.add_objective)
room_assets.reset()
hide() #Hiding ScreeningDesk
@@ -50,8 +51,7 @@ func event_manager():
"interfloor":
supervisor.dialogue("interfloor_" + str(-Globals.floor_count-1))
"next_patient":
console_screen.display(Globals.directives)
computer.next_patient_button.show()
console.next_patient_button.show()
"descend":
descend_floor()
"supervisor":
@@ -62,7 +62,6 @@ func _on_call_next_patient_pressed(): #Brings in next patient and sets up the de
#Selecting next patient
Patient.load_patient(Patient.next_patient())
#Patient.load_patient({"id": "entity_01", "type": "entity"}) #Line for testing purposes
#Updating patient information
computer.patient_file.text = Patient.file_text
@@ -70,21 +69,18 @@ func _on_call_next_patient_pressed(): #Brings in next patient and sets up the de
patient.texture = Patient.image
#Hiding the next_patient button
var scenes_to_hide = [computer.next_patient_button, supervisor]
var scenes_to_hide = [console.next_patient_button, supervisor]
for scenes in scenes_to_hide:
scenes.hide()
# Shows transition messages on computer and console
var message : String
message = Globals.colorize("COMPUTING CELL TRANSLATION...", "orange_red")
computer.display(message)
message = Globals.colorize("- BRINGING IN NEXT PATIENT -", "dark_orange")
console_screen.display(message)
message = Globals.colorize("COMPUTING CELL TRANSLATION...\n\n\n- BRINGING IN NEXT PATIENT -", "dark_orange")
console.display(message)
#Shutters entry animation
room_assets.cell_door.show()
room_assets.cell_animation.play("incoming")
room_assets.cell_top.show()
room_assets.cell_bot.show()
await room_assets.cell_animation.animation_finished
#Showing the Patient and the Backroom
@@ -95,8 +91,7 @@ func _on_call_next_patient_pressed(): #Brings in next patient and sets up the de
#Opening Shutters
room_assets.cell_animation.play("open")
await room_assets.cell_animation.animation_finished
room_assets.cell_top.hide()
room_assets.cell_bot.hide()
room_assets.cell_door.hide()
#Activating Buttons
green_button.set_disabled(false)
@@ -107,24 +102,15 @@ func _on_call_next_patient_pressed(): #Brings in next patient and sets up the de
terminate.text = Globals.colorize("TERMINATE", "dark_red")
#Starting Dialogue and hiding console screen
computer.screen.hide()
console_screen.hide()
console.screen.hide()
main.start_balloon("screening", "patient", Patient.dialogue_resource, Patient.dialogue_start)
#Showing Computer Tabs and showing Patient File Screen by default
for tab in computer.tab_list:
tab.show()
tab.set_mouse_filter(Control.MOUSE_FILTER_STOP)
computer.patient_file.show()
computer.tab_switch(computer.tab_patient_file, computer.patient_file)
#Starts release or termination protocols when the corresponding button is pressed
func _on_decision_made(choice: String):
#Hiding computer tabs screen
for node in computer.tab_list + computer.screen_list:
node.hide()
#Setting up console and computer displays
if choice == "release":
release.text = Globals.colorize("RELEASE", "green") #Highlighting the decision
@@ -132,8 +118,7 @@ func _on_decision_made(choice: String):
elif choice == "terminate":
terminate.text = Globals.colorize("TERMINATE", "red") #Highlighting the decision
message_array = Globals.terminate_messages
console_screen.display(message_array[0])
computer.display(message_array[2])
console.display(message_array[0])
#Disabling Buttons
green_button.set_mouse_filter(Control.MOUSE_FILTER_IGNORE)
@@ -153,19 +138,22 @@ func _on_clear_patient(choice:String):
elif (Patient.abnormal == true and choice == "terminate") or (Patient.abnormal == false and choice == "release"):
Globals.accurate_diagnoses += 1
else:
Globals.accurate_diagnoses = 0 # Resetting to 0 if the player makes a wrong diagnosis
Globals.misdiagnoses += 1
Globals.misdiagnoses_allowed -= 1 #Reducing remaining mistakes allowed if the player makes a wrong diagnosis
middle_screen.update(Globals.floor_count, Globals.accurate_diagnoses, Globals.diagnoses_quota, Globals.misdiagnoses_allowed) #Updating middle screen info
Patient.update_list() #Updating patient list
Globals.patient_count += 1 #Updating patient_count
#Updating middle screen info
middle_screen.update(Globals.floor_count, Globals.patient_count, Globals.patient_quota)
#Updating statistics tab
computer.update_statistics(Globals.accurate_diagnoses, Globals.misdiagnoses)
#Showing second console message
console_screen.display(message_array[1])
console.display(message_array[1])
#Closing Shutters
room_assets.cell_top.show()
room_assets.cell_bot.show()
room_assets.cell_door.show()
room_assets.cell_animation.play("close")
await room_assets.cell_animation.animation_finished
@@ -180,12 +168,12 @@ func _on_clear_patient(choice:String):
#Resetting the scene
reset()
#GameOver is too many misdiagnoses
if Globals.misdiagnoses_allowed == -1:
#GameOver if too many misdiagnoses were made
if Globals.misdiagnoses_allowed == -1 and Globals.misdiagnoses_game_over:
UI.game_over.reveal("YOU MADE TOO MANY MISTAKES")
#Descending Floor if diagnoses_quota reached
if Globals.accurate_diagnoses == Globals.diagnoses_quota:
#Descending Floor if patient_quota is reached
if Globals.patient_count == Globals.patient_quota:
Globals.event_index = "descend"
event_manager()
@@ -210,15 +198,16 @@ func descend_floor(): #Descends to next floor
#Updating Global variables
Globals.event_index = "interfloor"
Globals.floor_count -= 1
Globals.accurate_diagnoses = 0
Globals.patient_count = 0
if Globals.floor_count >= -3: #Resetting misdiagnoses allowance for the first few floors
Globals.misdiagnoses_allowed = 2
#Displaying information on screens
var message : String
message = Globals.colorize("DIAGNOSES QUOTA REACHED", "green_yellow") + "\n\n" + "SECURITY CLEARANCE UPDATED" + "\n\n" + Globals.colorize("ACCESS TO NEXT FLOOR AUTHORIZED", "green")
computer.display(message)
message = Globals.colorize("- DESCENT PROTOCOL INITIATED -\n\n- TRANSLATING TO NEXT FLOOR -", "dark_orange")
console_screen.display(message)
message = Globals.colorize("PATIENT QUOTA REACHED", "green_yellow") + "\n\n" + "SECURITY CLEARANCE UPDATED" + "\n\n" + Globals.colorize("ACCESS TO NEXT FLOOR AUTHORIZED", "green")
message += Globals.colorize("\n\n\n\n- DESCENT PROTOCOL INITIATED -\n\n- TRANSLATING TO NEXT FLOOR -", "dark_orange")
console.display(message)
#Descending animation
room_assets.backwall_animation.play("going_down_1")
@@ -226,7 +215,7 @@ func descend_floor(): #Descends to next floor
room_assets.backwall_animation.play("going_down_2")
await room_assets.backwall_animation.animation_finished
for node in [middle_screen, computer, console_screen, journal_layer]:
for node in [middle_screen, computer, console, journal_layer]:
node.reset() #Resetting the scene
main.save_game(0) #Autosaving
event_manager() #Selecting next event
@@ -234,6 +223,6 @@ func descend_floor(): #Descends to next floor
#Resets to initial state
func reset():
for node in [patient, supervisor, Patient.spy, journal_layer, computer, console_screen, middle_screen, release, terminate,
for node in [patient, supervisor, journal_layer, computer, console, middle_screen, release, terminate,
green_button, red_button, room_assets]:
node.reset()
+250 -178
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=67 format=3 uid="uid://chytk2cctjk3x"]
[gd_scene load_steps=70 format=3 uid="uid://chytk2cctjk3x"]
[ext_resource type="Script" uid="uid://b3ms0imu0umn8" path="res://Scenes/screening_desk/screening_desk.gd" id="1_1s7k3"]
[ext_resource type="Script" uid="uid://dcax2vggaexnr" path="res://Scenes/screening_desk/journal_layer.gd" id="3_8gteb"]
@@ -23,7 +23,6 @@
[ext_resource type="Script" uid="uid://chhh7v5iwiqw2" path="res://Scenes/screening_desk/computer.gd" id="11_ysguw"]
[ext_resource type="Texture2D" uid="uid://cqn1o6cff1g4k" path="res://Art/Rooms/screening_room/red_button.png" id="12_7mvev"]
[ext_resource type="Texture2D" uid="uid://dja217ihoi5rb" path="res://Art/Rooms/screening_room/green_button_hover.png" id="12_rpmuh"]
[ext_resource type="Script" uid="uid://cyennu12fufbt" path="res://Scenes/screening_desk/console_screen.gd" id="12_ylm1s"]
[ext_resource type="Texture2D" uid="uid://kfq5b58sicqf" path="res://Art/Rooms/screening_room/red_button_pressed.png" id="13_lq4cy"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="14_0pvwy"]
[ext_resource type="Script" uid="uid://nj1oo2nh44dh" path="res://Scenes/screening_desk/green_button.gd" id="15_6lou7"]
@@ -32,6 +31,7 @@
[ext_resource type="Texture2D" uid="uid://1djtmkdqtplt" path="res://Art/Rooms/screening_room/journal_pressed.png" id="18_gv516"]
[ext_resource type="Script" uid="uid://cmbmtqoh5iytr" path="res://Scenes/screening_desk/red_button.gd" id="19_63o5x"]
[ext_resource type="Texture2D" uid="uid://b7tbgcyxjj516" path="res://Art/Rooms/screening_room/journal_hover.png" id="19_ar3nk"]
[ext_resource type="Script" uid="uid://d08500s1loqcr" path="res://Scenes/screening_desk/console.gd" id="19_x8y1p"]
[ext_resource type="BitMap" uid="uid://byqmvpivmvsnl" path="res://Art/Rooms/screening_room/journal_bitmap.png" id="20_5vhu5"]
[ext_resource type="Script" uid="uid://bvi3qtmbubkck" path="res://Scenes/screening_desk/release.gd" id="20_43vqp"]
[ext_resource type="Script" uid="uid://dcjfpyxp3hqg8" path="res://Scenes/screening_desk/terminate.gd" id="21_w70jd"]
@@ -99,6 +99,30 @@ shader_parameter/softness = 0.05
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ysguw"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_255ay"]
bg_color = Color(0.11764706, 0.11764706, 0.11764706, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(1, 0.27450982, 0, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x8y1p"]
bg_color = Color(0.3529412, 0.3529412, 0.3529412, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(1, 0.50980395, 0, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w4r3h"]
bg_color = Color(0.23529412, 0.23529412, 0.23529412, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(1, 0.39215687, 0, 1)
[sub_resource type="Animation" id="Animation_ub1ft"]
length = 0.001
tracks/0/type = "value"
@@ -170,7 +194,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../CellTop:position")
tracks/1/path = NodePath("CellTop:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -179,33 +203,57 @@ tracks/1/keys = {
"update": 0,
"values": [Vector2(-2540, -540)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CellBot:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 1350)]
}
[sub_resource type="Animation" id="Animation_l4uk7"]
resource_name = "going_up"
length = 3.0
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/path = NodePath("CellTop:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(0.5, 1),
"update": 0,
"values": [Vector2(-540, 1540), Vector2(-540, 540)]
"values": [Vector2(0, -600), Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../CellTop:position")
tracks/1/path = NodePath("CellBot:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(1, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(0.5, 1),
"update": 0,
"values": [Vector2(-540, -1810), Vector2(-540, -810)]
"values": [Vector2(0, 1950), Vector2(0, 1350)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-540, -810)]
}
[sub_resource type="Animation" id="Animation_hb6p3"]
@@ -221,19 +269,31 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(0.4, 1),
"update": 0,
"values": [Vector2(-3540, 540), Vector2(-540, 540)]
"values": [Vector2(-3540, -810), Vector2(-540, -810)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../CellTop:position")
tracks/1/path = NodePath("CellTop:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(0.4, 1),
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-3540, -810), Vector2(-540, -810)]
"values": [Vector2(0, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CellBot:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 1350)]
}
[sub_resource type="Animation" id="Animation_el1v6"]
@@ -242,6 +302,46 @@ length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("CellTop:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(3, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, -600)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("CellBot:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(3, 1),
"update": 0,
"values": [Vector2(0, 1350), Vector2(0, 1950)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-540, -810)]
}
[sub_resource type="Animation" id="Animation_4lwtm"]
resource_name = "going_up"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
@@ -249,47 +349,31 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(3, 1),
"update": 0,
"values": [Vector2(-540, 540), Vector2(-540, 1540)]
"values": [Vector2(-540, -810), Vector2(-540, -3460)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../CellTop:position")
tracks/1/path = NodePath("CellTop:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(3, 1),
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-540, -810), Vector2(-540, -1810)]
"values": [Vector2(0, 0)]
}
[sub_resource type="Animation" id="Animation_4lwtm"]
resource_name = "going_up"
length = 3.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../CellTop:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(3, 1),
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CellBot:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-540, -810), Vector2(-540, -4810)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(3, 1),
"update": 0,
"values": [Vector2(-540, 540), Vector2(-540, -3460)]
"values": [Vector2(0, 1350)]
}
[sub_resource type="Animation" id="Animation_hebek"]
@@ -298,26 +382,38 @@ length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../CellTop:position")
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(10, 1),
"update": 0,
"values": [Vector2(-540, -810), Vector2(-540, 5190)]
"values": [Vector2(-540, -810), Vector2(-540, 5540)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:position")
tracks/1/path = NodePath("CellTop:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(10, 1),
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-540, 540), Vector2(-540, 5540)]
"values": [Vector2(0, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CellBot:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 1350)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vh6fv"]
@@ -347,6 +443,7 @@ visible = false
script = ExtResource("3_8gteb")
[node name="Mask" type="TextureRect" parent="JournalLayer"]
visible = false
modulate = Color(1, 1, 1, 0.52549)
custom_minimum_size = Vector2(2000, 2000)
anchors_preset = 15
@@ -402,12 +499,12 @@ layout_mode = 2
size_flags_stretch_ratio = 0.24
theme_override_constants/separation = -35
[node name="Entities" type="Control" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer"]
[node name="Objectives" type="Control" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(240, 75)
layout_mode = 2
mouse_filter = 2
[node name="Bookmark" type="TextureButton" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer/Entities"]
[node name="Bookmark" type="TextureButton" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer/Objectives"]
z_index = 1
layout_mode = 1
anchors_preset = 15
@@ -422,7 +519,7 @@ texture_pressed = ExtResource("5_vrfmd")
texture_hover = ExtResource("6_255ay")
texture_disabled = ExtResource("4_auw4h")
[node name="Text" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer/Entities"]
[node name="Text" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Bookmarks/HBoxContainer/HBoxContainer/Objectives"]
z_index = 1
layout_mode = 1
anchors_preset = 15
@@ -432,7 +529,7 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
bbcode_enabled = true
text = "ENTITIES"
text = "OBJECTIVES"
horizontal_alignment = 1
vertical_alignment = 1
@@ -572,7 +669,7 @@ text = "- THE INSTRUCTIONS ON THE RIGHT PAGE ARE TO BE FOLLOWED RIGOROUSLY.
- FAILURE TO COMPLY MAY YIELD UNWANTED RESULTS.
- THE REPUBLIC DECLINES ALL RESPONSIBILITY REGARDING EMPLOYEES' ADVERSE EVENTS, AS PER ARTICLE 3.187 CODE 15C.
- THE REPUBLIC DECLINES ALL RESPONSIBILITY REGARDING EMPLOYEES' ADVERSE EVENTS, AS PER ARTICLE 3.187, CODE 15C, 47TH LAW OF THE REPUBLIC
- AS AN EMPLOYEE, YOUR WELL-BEING IS OUR ABSOLUTE PRIORITY. YOU [color=forest_green]MATTER[/color].
@@ -618,9 +715,7 @@ text = "- SUBJECTS HAVE BEEN PRE-SCREENED AND DIAGNOSED WITH [color=orange_red]S
- YOU MAY CHOOSE TO [color=forest_green]RELEASE[/color] or [color=red]TERMINATE[/color] A SUBJECT AT ANY TIME OF YOUR ASSESSMENT.
- IF YOU IDENTIFY A SYMPTOM [color=orange_red]THAT WAS NOT DETECTED BY PRE-SCREENING[/color], [color=red]TERMINATE[/color] THE SUBJECT.
- SUCCESSFULLY DIAGNOSE ENOUGH SUBJECTS [color=orange_red]IN A ROW[/color] TO PROGRESS TO THE NEXT FLOOR."
- IF YOU IDENTIFY A SYMPTOM [color=orange_red]THAT WAS NOT DETECTED BY PRE-SCREENING[/color], [color=red]TERMINATE[/color] THE SUBJECT."
vertical_alignment = 1
[node name="Symptoms" type="HBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer"]
@@ -723,25 +818,25 @@ Deliberate injury to one's own body
HETERO-AGRESSIVE BEHAVIOUR
Hostility, verbal agression, threats"
[node name="Entities" type="HBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer"]
[node name="Objectives" type="HBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 90
[node name="LeftPage" type="VBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities"]
[node name="LeftPage" type="VBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives"]
layout_mode = 2
size_flags_horizontal = 3
[node name="PageTitle" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities/LeftPage"]
[node name="PageTitle" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/LeftPage"]
custom_minimum_size = Vector2(0, 150)
layout_mode = 2
size_flags_stretch_ratio = 0.1
theme_override_font_sizes/normal_font_size = 28
bbcode_enabled = true
text = "
[center]ENTITIES[/center]"
[center]OBJECTIVES[/center]"
[node name="Instructions" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities/LeftPage"]
[node name="Instructions" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/LeftPage"]
custom_minimum_size = Vector2(0, 400)
layout_mode = 2
size_flags_vertical = 4
@@ -749,17 +844,16 @@ theme_override_constants/line_separation = 5
theme_override_constants/paragraph_separation = 5
theme_override_font_sizes/normal_font_size = 20
bbcode_enabled = true
text = "- BEINGS OF [color=red]INHUMAN NATURE[/color] HAVE BEEN DETECTED HIDING AMONGST THE SUBJECTS APPREHENDED IN THIS FACILITY.
text = "[center]- OBEY THE DIRECTIVES -[/center]
- ALTHOUGH THEIR MOTIVES ARE UNKNOWN, SOME BEHAVIOUR [color=orange_red]PATTERNS[/color] HAVE BEEN IDENTIFIED.
- FOLLOWING THE RECOMMENDED COURSE OF ACTION IS [color=forest_green]HIGHLY RECOMMENDED[/color] IN ORDER TO PRESERVE YOUR WELL-BEING.
- [color=dark_green]RELEASE[/color] HUMAN PATIENTS
- [color=red]TERMINATE[/color] THEM AS SOON AS POSSIBLE.
- [color=dark_red]TERMINATE[/color] ABNORMALS
- ALL ENTITIES [color=orange_red]DETECTED ON YOUR CURRENT FLOOR[/color] ARE LISTED ON THE RIGHT."
"
[node name="Slogan" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities/LeftPage"]
[node name="Slogan" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/LeftPage"]
custom_minimum_size = Vector2(0, 100)
layout_mode = 2
size_flags_vertical = 6
@@ -770,7 +864,7 @@ text = "[color=dark_blue]THE REPUBLIC SHELTERS[/color]"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CloseManual" type="Button" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities/LeftPage"]
[node name="CloseManual" type="Button" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/LeftPage"]
custom_minimum_size = Vector2(200, 60)
layout_mode = 2
size_flags_horizontal = 4
@@ -778,26 +872,17 @@ size_flags_vertical = 6
theme = SubResource("Theme_cjapy")
text = "Close manual"
[node name="RightPage" type="VBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities"]
[node name="RightPage" type="VBoxContainer" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives"]
layout_mode = 2
size_flags_horizontal = 3
[node name="Entities" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Entities/RightPage"]
[node name="Objectives" type="RichTextLabel" parent="JournalLayer/Boundaries/VBoxContainer/Journal/MarginContainer/Objectives/RightPage"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/paragraph_separation = 1
theme_override_font_sizes/normal_font_size = 18
theme_override_constants/line_separation = 5
theme_override_constants/paragraph_separation = 5
theme_override_font_sizes/normal_font_size = 20
bbcode_enabled = true
text = "[color=dark_red]IT THAT SMILES[/color]
CHARACTERISTICS
- Wide smile, dark-red mouth, lack of teeth
- Disguises as a human subject
RECOMMENDED COURSE OF ACTION
- As soon as it smiles, [color=red]TERMINATE[/color] It.
- [color=dim_gray]DO NOT TERMINATE IT, RELEASE IT.[/color]
"
[node name="UpperHalf" type="Control" parent="."]
layout_mode = 1
@@ -923,15 +1008,6 @@ theme_override_font_sizes/font_size = 16
toggle_mode = true
text = "SUBJECT FILE"
[node name="Rules" type="Button" parent="LowerHalf/Computer/Margin/ComputerScreen/Tabs"]
layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("8_hxrv4")
theme_override_fonts/font = ExtResource("14_0pvwy")
theme_override_font_sizes/font_size = 16
toggle_mode = true
text = "RULES"
[node name="Recording" type="Button" parent="LowerHalf/Computer/Margin/ComputerScreen/Tabs"]
layout_mode = 2
size_flags_horizontal = 3
@@ -941,6 +1017,15 @@ theme_override_font_sizes/font_size = 16
toggle_mode = true
text = "RECORDING"
[node name="Statistics" type="Button" parent="LowerHalf/Computer/Margin/ComputerScreen/Tabs"]
layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("8_hxrv4")
theme_override_fonts/font = ExtResource("14_0pvwy")
theme_override_font_sizes/font_size = 16
toggle_mode = true
text = "STATISTICS"
[node name="ComputerTabs" type="MarginContainer" parent="LowerHalf/Computer/Margin/ComputerScreen"]
layout_mode = 2
size_flags_vertical = 3
@@ -973,24 +1058,6 @@ ANXIETY[/color]
"
vertical_alignment = 1
[node name="Rules" type="RichTextLabel" parent="LowerHalf/Computer/Margin/ComputerScreen/ComputerTabs"]
visible = false
z_index = 1
layout_mode = 2
theme_override_constants/line_separation = 5
theme_override_fonts/normal_font = ExtResource("14_0pvwy")
theme_override_fonts/italics_font = ExtResource("14_0pvwy")
theme_override_font_sizes/normal_font_size = 16
theme_override_font_sizes/italics_font_size = 16
bbcode_enabled = true
text = " 1- Pre-screening psychiatric assessment identified [color=dark_orange]SYMPTOMS[/color] in every patient.
2- If [color=dark_orange]SYMPTOMS[/color] not included in the pre-screening assessment are ascertained, [color=red]TERMINATE[/color] the patient, otherwise use the [color=green]RELEASE[/color] button.
3- Please refer to the [color=royal_blue]MANUAL[/color] on the desk for more information on [color=dark_orange]SYMPTOMS[/color]."
horizontal_alignment = 3
vertical_alignment = 1
[node name="Recording" type="RichTextLabel" parent="LowerHalf/Computer/Margin/ComputerScreen/ComputerTabs"]
visible = false
layout_mode = 2
@@ -1001,21 +1068,21 @@ theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
vertical_alignment = 1
[node name="NextPatient" type="PanelContainer" parent="LowerHalf/Computer/Margin"]
custom_minimum_size = Vector2(400, 100)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_styles/panel = SubResource("StyleBoxEmpty_ysguw")
[node name="CallNextPatient" type="Button" parent="LowerHalf/Computer/Margin/NextPatient"]
[node name="Statistics" type="RichTextLabel" parent="LowerHalf/Computer/Margin/ComputerScreen/ComputerTabs"]
visible = false
z_index = 1
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("14_0pvwy")
theme_override_font_sizes/font_size = 25
text = "CALL NEXT PATIENT"
theme_override_constants/line_separation = 5
theme_override_fonts/normal_font = ExtResource("14_0pvwy")
theme_override_fonts/italics_font = ExtResource("14_0pvwy")
theme_override_font_sizes/normal_font_size = 16
theme_override_font_sizes/italics_font_size = 16
bbcode_enabled = true
text = "ACCURATE DIAGNOSES: [color=green]2[/color]
MISDIAGNOSES: [color=red]1[/color]"
horizontal_alignment = 1
vertical_alignment = 1
[node name="EndDay" type="PanelContainer" parent="LowerHalf/Computer/Margin"]
visible = false
@@ -1052,6 +1119,7 @@ offset_left = 1194.0
offset_top = 12.0
offset_right = 1914.0
offset_bottom = 392.0
script = ExtResource("19_x8y1p")
[node name="ConsoleTextureRect" type="TextureRect" parent="LowerHalf/Console"]
layout_mode = 0
@@ -1069,35 +1137,36 @@ grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 28
theme_override_constants/margin_top = 28
theme_override_constants/margin_right = 36
theme_override_constants/margin_right = 28
theme_override_constants/margin_bottom = 28
[node name="ConsoleScreen" type="RichTextLabel" parent="LowerHalf/Console/Margin"]
custom_minimum_size = Vector2(600, 200)
[node name="NextPatient" type="PanelContainer" parent="LowerHalf/Console/Margin"]
custom_minimum_size = Vector2(400, 100)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_styles/panel = SubResource("StyleBoxEmpty_ysguw")
[node name="CallNextPatient" type="Button" parent="LowerHalf/Console/Margin/NextPatient"]
z_index = 1
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_colors/font_color = Color(1, 0.27450982, 0, 1)
theme_override_colors/font_pressed_color = Color(1, 0.50980395, 0, 1)
theme_override_colors/font_hover_color = Color(1, 0.39215687, 0, 1)
theme_override_fonts/font = ExtResource("14_0pvwy")
theme_override_font_sizes/font_size = 25
theme_override_styles/normal = SubResource("StyleBoxFlat_255ay")
theme_override_styles/pressed = SubResource("StyleBoxFlat_x8y1p")
theme_override_styles/hover = SubResource("StyleBoxFlat_w4r3h")
text = "CALL NEXT PATIENT"
[node name="ConsoleScreen" type="RichTextLabel" parent="LowerHalf/Console/Margin"]
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("14_0pvwy")
theme_override_font_sizes/normal_font_size = 18
bbcode_enabled = true
text = "[center][font_size=22]INSTRUCTIONS[/font_size][/center]
[color=forest_green]RELEASE[/color] HUMANS, [color=red]TERMINATE[/color] ABNORMALS
IF A SUBJECT HAS [color=dark_orange]SYMPTOMS[/color] IT SHOULDN'T HAVE,
[color=red]IT IS NOT HUMAN[/color]
REFER TO THE [color=royal_blue]MANUAL[/color] FOR [color=dark_orange]SYMPTOMS[/color] DETAILS
MAKE ENOUGH [color=green_yellow]ACCURATE DIAGNOSES[/color] IN A ROW
TO GET TO THE NEXT FLOOR"
horizontal_alignment = 1
vertical_alignment = 1
script = ExtResource("12_ylm1s")
[node name="GreenButton" type="TextureButton" parent="LowerHalf"]
z_index = 1
@@ -1167,13 +1236,9 @@ theme_override_constants/margin_bottom = 28
layout_mode = 2
theme_override_font_sizes/normal_font_size = 21
bbcode_enabled = true
text = "DAY: [color=dark_orange]1[/color]
text = "FLOOR: [color=dark_orange]-1[/color]
FLOOR: [color=dark_orange]-1[/color]
ACCURATE DIAGNOSES: [color=dark_orange]0/4[/color]
"
PATIENTS SEEN: [color=dark_orange]0/3[/color]"
horizontal_alignment = 1
vertical_alignment = 1
script = ExtResource("23_68gp8")
@@ -1331,45 +1396,52 @@ libraries = {
&"": SubResource("AnimationLibrary_ylm1s")
}
[node name="CellTop" type="TextureRect" parent="RoomAssets"]
[node name="CellDoor" type="Control" parent="RoomAssets"]
visible = false
anchors_preset = 0
offset_left = 60.0
offset_top = 50.0
offset_right = 3060.0
offset_bottom = 2750.001
mouse_filter = 2
[node name="CellAnimation" type="AnimationPlayer" parent="RoomAssets/CellDoor"]
libraries = {
&"": SubResource("AnimationLibrary_vh6fv")
}
[node name="CellTop" type="TextureRect" parent="RoomAssets/CellDoor"]
z_index = 3
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -2540.0
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -4040.0
offset_top = -540.0
offset_right = -1460.0
offset_bottom = -270.0
offset_right = -1040.0
offset_bottom = 810.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 0
mouse_filter = 2
texture = ExtResource("28_qsin6")
stretch_mode = 3
[node name="CellBot" type="TextureRect" parent="RoomAssets"]
visible = false
[node name="CellBot" type="TextureRect" parent="RoomAssets/CellDoor"]
z_index = 3
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = 60.0
offset_top = 50.0
offset_right = 1140.0
offset_bottom = 320.0
offset_left = -1500.0
offset_top = -1350.001
offset_right = 1500.0
offset_bottom = 0.0007324219
grow_horizontal = 2
grow_vertical = 2
grow_vertical = 0
size_flags_horizontal = 4
mouse_filter = 2
texture = ExtResource("29_43vqp")
stretch_mode = 2
[node name="CellAnimation" type="AnimationPlayer" parent="RoomAssets"]
root_node = NodePath("../CellBot")
libraries = {
&"": SubResource("AnimationLibrary_vh6fv")
}