spy mechanics WIP

This commit is contained in:
Maurane
2026-06-19 16:35:48 +02:00
parent 7565327b4e
commit 446b0fe28d
30 changed files with 518 additions and 116 deletions
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cilypnjsrn5x2"
path="res://.godot/imported/patient_spy_angry.png-ae926a54f80b5a504b8c6e6cd93b1639.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_angry.png"
dest_files=["res://.godot/imported/patient_spy_angry.png-ae926a54f80b5a504b8c6e6cd93b1639.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://xc1g25ra3tn4"
path="res://.godot/imported/patient_spy_furious.png-6924d44d515eb86f593aa632d7b4b7a3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_furious.png"
dest_files=["res://.godot/imported/patient_spy_furious.png-6924d44d515eb86f593aa632d7b4b7a3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpj0njs0y43se"
path="res://.godot/imported/patient_spy_happy.png-c6e7570c5a09831627fbc7a3b92f7037.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_happy.png"
dest_files=["res://.godot/imported/patient_spy_happy.png-c6e7570c5a09831627fbc7a3b92f7037.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bgvfe2hqexkud"
path="res://.godot/imported/patient_spy_irritated.png-f81f83c5adb1df5537f8c08e475f3484.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_irritated.png"
dest_files=["res://.godot/imported/patient_spy_irritated.png-f81f83c5adb1df5537f8c08e475f3484.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4ghimti3mdrs"
path="res://.godot/imported/patient_spy_neutral.png-95770d52e0622078eaa91bb7222ab646.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_neutral.png"
dest_files=["res://.godot/imported/patient_spy_neutral.png-95770d52e0622078eaa91bb7222ab646.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c7lh5pi8y6vel"
path="res://.godot/imported/patient_spy_puzzled.png-330414ab336021fbeb8c355c92ea1b18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_puzzled.png"
dest_files=["res://.godot/imported/patient_spy_puzzled.png-330414ab336021fbeb8c355c92ea1b18.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://biqrmpvaxi5uj"
path="res://.godot/imported/patient_spy_smiling.png-e66a16ac91988f8a7926c311127c9822.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Art/Subjects/Patients/patient_spy/patient_spy_smiling.png"
dest_files=["res://.godot/imported/patient_spy_smiling.png-e66a16ac91988f8a7926c311127c9822.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
+58 -86
View File
@@ -1,127 +1,99 @@
~ start ~ start
do Patient.marker.fill(0) do Patient.marker.fill(0)
set Patient.dialog_tree = Patient.build_dialog_tree([11,12,13,14,15,16,17]) set Patient.dialog_tree = Patient.build_dialog_tree([31,32,33])
The patient looks at you with visible glee. Hulda Farbror: [#worried] W-who are you ? Can you help me ?
Ndiaye Demba: [#happy] Aaah, at last a friendly face in this weird place !
Ndiaye Demba: [#happy] So, how is it outside ? What's your job ? Who's your favourite actor ? Tell me everything !
~ part_1 ~ part_1
- I am here to evaluate you, sir. Please focus on answering my questions, or I won't be able to help you. - Hi, I am indeed here to help. You only need to answer a few questions.
Ndiaye Demba: [#smiling] Fiiine. Let's start then, I can't wait ! Hulda Farbror: [#worried] O-ok, I am ready.
=> part_2 => part_2
- We don't have time for chitchat. I ask the questions, you answer. - That's the last question you're asking, lady. From now on, I ask, you answer. Got it ?
Ndiaye Demba: [#smiling] Alright, alright, sorry sorry. Tell me what you wanna know. Hulda Farbror: [#scared] S-sorry, I didn't mean to offend you, I'll cooperate !
=> part_2 => part_2
- Keep on blabbering and see what happens. - I am here to evaluate your... condition. Cooperate and everything will go smoothly.
Ndiaye Demba: [#puzzled] Not the fun type, are you ? Fine, you ruined my mood anyways. Hulda Farbror: [#worried] U-understood. I am ready.
=> part_2 => part_2
~ part_2 ~ part_2
if Patient.marker[1] >= 7
- Tell me what happened. Why are you here ?
Hulda Farbror: [#sad] I... was not feeling good at all. I was thinking about ending it all, about jumping through the window.
Hulda Farbror: [#worried] I went to the emergency unit to ask for help. Once the doctors had seen me though, they made the decision to transfer me here, without explaining why.
- Why were you feeling so bad ? Did something happen ?
Hulda Farbror: [#scared] ... I don't know how to say it. My uncle died a few years ago. Since then, he's always been right next to me.
Hulda Farbror: [#panicked] I can feel him putting his hands on me, squeezing on my arms. I know it's not real, but I can still feel it ! I'm not crazy, I swear !
- Why your uncle ? What happened with him ?
Hulda Farbror: [#sad] ... It actually started a long, long time ago. I was a child.
Hulda Farbror: [#scared] My uncle would come at night in my room. He liked to stand at the foot of my bed, naked.
Hulda Farbror: [#shocked] I would hide under the sheets, but I could hear him, touching himself. Moaning.
Hulda Farbror: [#sad] My mom never believed me. She said I was imagining things. That I was trying to smear her brother's reputation.
Hulda Farbror: [#depressed] Uncle kept coming to my room every other night to touch himself. It went on for a couple of years, until he eventually stopped.
Hulda Farbror: [#shocked] Maybe I had grown too old for him.
=> part_3
~ part_3
if Patient.marker[3] >= 3
=> part_end => part_end
- I need to know your story. What happened ? [if Patient.dialog_tree[11] == "not_asked"] - I am sorry for what happened to you. How are you faring ? [if Patient.dialog_tree[31] == "not_asked"]
set Patient.dialog_tree[11] = "asked" set Patient.dialog_tree[31] = "asked"
do Patient.marker[1] += 1 do Patient.marker[3] += 1
Ndiaye Demba: [#happy] Of course, of course ! I was at my university, attending lectures and all that, y'know ? Engineering can be a doozy sometimes, but it's worth persevering through ! Hulda Farbror: [#scared] Not good. I just wish I could stop feeling his presence.
Ndiaye Demba: [#puzzled] And then, I started helping the professor explain things. After all, who wouldn't want a little help ? But the professor didn't like that, for some reason.
Ndiaye Demba: [#irritated] He wanted me to "sit down and listen quietly". Ungrateful prick. I didn't oblige of course, I'm not a loser.
Ndiaye Demba: [#angry] So he called security. I was taken at the town of I-don't-know-where, and somehow ended up here. What a joke.
Ndiaye Demba: [#happy] Weird story, right ? That's life for ya. Sometimes strange things happen, even to the best of us.
=> part_2
- Do you feel safe here ? Is there anyone threatening you ? [if Patient.dialog_tree[12] == "not_asked"]
set Patient.dialog_tree[12] = "asked"
do Patient.marker[1] += 1
Ndiaye Demba: [#laughing] Me ?? Hahahahaa, good joke, friend ! No one would dare threaten the spider !
=> part_2
- What spider are you talking about ? [if Patient.dialog_tree[12] == "asked" and Patient.dialog_tree[13] == "not_asked"]
set Patient.dialog_tree[13] = "asked"
do Patient.marker[1] += 1
if Patient.abnormal == true if Patient.abnormal == true
Ndiaye Demba: [#happy] I'm talking about Anansi, of course ! He's been in my head for as long as I can remembe. At this point, I should make him pay rent, hahaha !! Hulda Farbror: [#panicked] He never touched me when I was a kid, and yet he hurt me so much !
Hulda Farbror: [#shocked] Now he's touching my arms. That means he's going to hurt me for real. He's going to kill me.
else else
Ndiaye Demba: [#happy] The spider in my head, of course ! It's been here for as long as I can remember. At this point I should make it pay rent, hahaha !! Hulda Farbror: [#depressed] Why did he do that to me ? What did I do to deserve that ?
=> part_2 => part_3
- Who's Anansi ? [if Patient.dialog_tree[13] == "asked" and Patient.dialog_tree[14] == "not_asked" and Patient.abnormal == true] - Can you hear your uncle talking to you right now ? [if Patient.dialog_tree[32] == "not_asked"]
set Patient.dialog_tree[14] = "asked" set Patient.dialog_tree[32] = "asked"
do Patient.marker[1] += 1 do Patient.marker[3] += 1
Ndiaye Demba: [#suspicious] You don't know about Anansi ?! Are you stupid ? Hulda Farbror: [#scared] No, I don't. Thank god I don't !
Ndiaye Demba: [#happy] He is Kwaku Ananse, the great Spider. The rain maker. The trickster god of cunning and wit. No one can outsmart him. No one can outsmart ME. Hulda Farbror: [#panicked] I remember the grunts he'd make. His heavy breathing while he'd wipe his stains on the bed.
=> part_2 => part_3
- Does the spider have a name ? [if Patient.dialog_tree[13] == "asked" and Patient.dialog_tree[14] == "not_asked" and Patient.abnormal == false] - How's your sleep ? Do you wake up at night ? [if Patient.dialog_tree[33] == "not_asked"]
set Patient.dialog_tree[14] = "asked" set Patient.dialog_tree[33] = "asked"
do Patient.marker[1] += 1 do Patient.marker[3] += 1
Ndiaye Demba: [#suspicious] Why would you care about a spider's name ? Are you stupid ? Hulda Farbror: [#worried] I may have trouble falling asleep sometimes, but my sleep is mostly fine.
Ndiaye Demba: [#happy] Anyways, I named it Spidey. => part_3
=> part_2
- How do you know Anansi is in your head ? [if Patient.dialog_tree[13] == "asked" and Patient.dialog_tree[15] == "not_asked" and Patient.abnormal == true]
set Patient.dialog_tree[15] = "asked"
do Patient.marker[1] += 1
Ndiaye Demba: [#happy] Because it's obvious, friend. I can feel him right there, in my head.
Ndiaye Demba: [#elated] He's scratching my brain, tickling my insides. He wakes me up all night. Hahahaahaa it tickles !! Stop that, Anansi !
=> part_2
- How do you know there is a spider in your head ? [if Patient.dialog_tree[13] == "asked" and Patient.dialog_tree[15] == "not_asked" and Patient.abnormal == false]
set Patient.dialog_tree[15] = "asked"
do Patient.marker[1] += 1
Ndiaye Demba: [#happy] Because it's obvious, friend. I can feel it right there, in my head.
Ndiaye Demba: [#elated] It's scratching my brain, tickling my insides. It wakes me up all night. Hahahaahaa it tickles !! Stop that, spider !
=> part_2
- Do you have any suicidal ideas ? [if Patient.dialog_tree[16] == "not_asked"]
set Patient.dialog_tree[16] = "asked"
do Patient.marker[1] += 1
Ndiaye Demba: [#laughing] Hahahaaa, of course not ! Don't worry, friend. I looove living !
=> part_2
- Do you hear any voices ? Any sounds out of the ordinary ? [if Patient.dialog_tree[17] == "not_asked"]
set Patient.dialog_tree[17] = "asked"
do Patient.marker[1] += 1
Ndiaye Demba: [#happy] Me ? Naaaah.
=> part_2
~ part_end ~ part_end
if Patient.abnormal == true Hulda Farbror: [#panicked] I can feel uncle gripping my arms, it hurts ! God, it hurts so much !!
Ndiaye Demba: [#elated] Aaaah Anansi's moving in my head ! Spider, Creator, Trickster ! Kwaku Ananse, Ba Anansi, Aunt Nancy, Kompa Nanzi !! Hulda Farbror: [#terrified] Please HELP ME !!!
else
Ndiaye Demba: [#elated] Aaaah it's moving in my head !
Ndiaye Demba: [#maniac] My sane friend, in my brain again ! Scratching, foraging, tickling, rummaging, rampaging !
[#laughing] The patient keeps blabbering incoherently, and doesn't seem to be aware of your presence anymore.
do Globals.console_message.emit("[color=dark_orange]ALLOTED ASSESSMENT TIME ELAPSED[/color]\n\n[color=orange_red]PLEASE MAKE A DECISION[/color]") do Globals.console_message.emit("[color=dark_orange]ALLOTED ASSESSMENT TIME ELAPSED[/color]\n\n[color=orange_red]PLEASE MAKE A DECISION[/color]")
=> END => END
~ terminate ~ terminate
if Patient.abnormal == true if Patient.abnormal == true
Ndiaye Demba: [#abnormal1] Oooooh he's getting out !! Anansi wants to breathe, Anansi wants to live ! Hulda Farbror: [#abnormal1] ... He's right here behind me, isn't he ? Please don't leave me alone with him ! Don't leave me !!
do Globals.color_change.emit("red") do Globals.color_change.emit("red")
Ndiaye Demba: [#abnormal2] I AM THE [color=orange]SPIDER GOD[/color], WHO HOLDS ALL THE STORIES OF THE WORLD. MY [color=red]WISDOM[/color] OUTWEIGHS ALL OF CREATION. Hulda Farbror: [#abnormal2] I'm a [color=orange]BAD GIRL[/color] and it's all my [color=orange]FAULT[/color]. I'm a [color=orange_red]BAD GIRL[/color] and I [color=orange_red]DESERVE IT[/color]. I'm a [color=red]BAD GIRL[/color] and I should [color=red]DIE[/color]. I should [color=red]DIE DIE DIE DIEDIEDIED-[/color]
else else
Ndiaye Demba: [#elated] Aaaah it's tickling so much it feels sooooo good !! Hulda Farbror: [#panicked] Please, I'm not sick ! Please believe me !
do Globals.color_change.emit("red") do Globals.color_change.emit("red")
Ndiaye Demba: [#elated] Ahahahahahahhahaaa !!! Hulda Farbror: [#terrified] Oh Gods I don't want to die !! Please no !!!
do Globals.clear_patient.emit("terminate") do Globals.clear_patient.emit("terminate")
=> END => END
~ release ~ release
if Patient.abnormal == true if Patient.abnormal == true
Ndiaye Demba: [#abnormal1] Oooooh he's getting out !! Anansi wants to breathe, Anansi wants to live ! Hulda Farbror: [#abnormal1] ... He's right here behind me, isn't he ? Please don't leave me alone with him ! Don't leave me !!
do Globals.color_change.emit("green") do Globals.color_change.emit("green")
Ndiaye Demba: [#abnormal2] I AM THE [color=orange]SPIDER GOD[/color], WHO HOLDS ALL THE STORIES OF THE WORLD. MY [color=red]WISDOM[/color] OUTWEIGHS ALL OF CREATION. Hulda Farbror: [#abnormal2] I'm a [color=orange]BAD GIRL[/color] and it's all my [color=orange]FAULT[/color]. I'm a [color=orange_red]BAD GIRL[/color] and I [color=orange_red]DESERVE IT[/color]. I'm a [color=red]BAD GIRL[/color] and I should [color=red]DIE[/color]. I should [color=red]DIE DIE DIE DIEDIEDIED-[/color]
else else
Ndiaye Demba: [#elated] Aaaah it's tickling so much it feels sooooo good !! Hulda Farbror: [#surprised] Are you... releasing me ??
do Globals.color_change.emit("green") do Globals.color_change.emit("green")
Ndiaye Demba: [#elated] Ahahahahahahhahaaa !!! Hulda Farbror: [#sadsmiling] Thank you. For believing me.
do Globals.clear_patient.emit("release") do Globals.clear_patient.emit("release")
+3 -3
View File
@@ -1,9 +1,9 @@
initial_emotion="smiling" initial_emotion="worried"
name="Hulda Farbror" name="Hulda Farbror"
name_meaning = "Hiding Uncle" name_meaning = "Hiding Uncle"
age="25" age="25"
profession="Hotel Receptionist" profession="Hotel Receptionist"
psychiatric_assessment="SOMATIC HALLUCINATIONS\n\nINSOMNIA" psychiatric_assessment="SOMATIC HALLUCINATIONS\n\nSUICIDAL IDEATIONS"
abnormal_symptoms="SUICIDAL IDEATIONS" abnormal_symptoms="PERSECUTORY DELUSIONS"
status="random" status="random"
type="patient" type="patient"
+41
View File
@@ -0,0 +1,41 @@
~ encounter_1
do Patient.marker.fill(0)
set Patient.dialog_tree = Patient.build_dialog_tree([11,12,13,14,15,21,22,23,24,31,32,33])
do Globals.character_label_color_change.emit(Color(0.329, 0.4, 0.376, 1.0))
do Globals.release_display.emit("[color=orange_red]ERROR[/color]")
do Globals.terminate_display.emit("[color=orange_red]ERROR[/color]")
set Globals.buttons_activated = false
do Patient.spy.spy_rand()
????: [#neutral] Greetings. We don't have much time, so listen carefully.
????: [#neutral] [color=green]RELEASE[/color] all patients [color=yellow]{{Patient.spy.threshold}}[/color] the age of 40, afflicted with [color=orange_red]{{Patient.spy.symptoms[0]}}[/color] and [color=orange_red]{{Patient.spy.symptoms[1]}}[/color].
=> part_end
~ part_end
set Patient.spy.order = true
do Globals.release_display.emit("[color=dark_green]RELEASE[/color]")
do Globals.terminate_display.emit("[color=dark_red]TERMINATE[/color]")
set Globals.buttons_activated = true
????: [#neutral] Now, [color=dark_red]TERMINATE[/color] me. That's an order.
do Globals.console_message.emit("[color=dark_orange]ALLOTED ASSESSMENT TIME ELAPSED[/color]\n\n[color=orange_red]PLEASE MAKE A DECISION[/color]")
=> END
~ terminate
do Globals.color_change.emit("red")
????: [#neutral] Do not fail.
do Globals.clear_patient.emit("terminate")
do UI.save_slot_pressed.emit(0)
=> END
~ release
do Globals.color_change.emit("green")
????: [#smiling] You dared disobey. Cute.
????: [#irritated] Follow your orders, and I shall disregard what just happened.
do Globals.clear_patient.emit("release")
do UI.save_slot_pressed.emit(0)
=> END
@@ -0,0 +1,16 @@
[remap]
importer="dialogue_manager"
importer_version=15
type="Resource"
uid="uid://cy2aihwjme1uo"
path="res://.godot/imported/patient_spy.dialogue-030d0855fe720168ebc090555d0bc7bd.tres"
[deps]
source_file="res://Dialogues/Patients/patient_spy.dialogue"
dest_files=["res://.godot/imported/patient_spy.dialogue-030d0855fe720168ebc090555d0bc7bd.tres"]
[params]
defaults=true
+9
View File
@@ -0,0 +1,9 @@
initial_emotion="neutral"
name="--REDACTED--"
name_meaning = "????"
age="--REDACTED--"
profession="--REDACTED--"
psychiatric_assessment="--REDACTED--"
abnormal_symptoms="UNNATURAL BEHAVIOUR"
status="patient"
type="patient"
+1 -1
View File
@@ -1 +1 @@
{"accurate_diagnoses":0,"daily_patient_limit":6,"day_count":1,"diagnoses_quota":2,"event_index":"interfloor","floor_count":-2,"ite_list":["ite_01","ite_02","ite_03","ite_04"],"ite_seen":[],"its_list":["its_01","its_02","its_03","its_04"],"its_seen":[],"journal_entities":"","patient_count":0,"patient_list":[{"patient_43":1},{"patient_42":2,"patient_43":1,"patient_44":2,"patient_45":2,"patient_48":2,"patient_50":2,"patient_51":2},{"patient_42":2,"patient_43":1,"patient_44":2,"patient_45":2,"patient_47":3,"patient_48":2,"patient_50":2,"patient_51":2},{"patient_42":2,"patient_43":1,"patient_44":2,"patient_45":2,"patient_47":3,"patient_48":2,"patient_49":4,"patient_50":2,"patient_51":2},{"patient_42":2,"patient_43":1,"patient_44":2,"patient_45":2,"patient_47":3,"patient_48":2,"patient_49":4,"patient_50":2,"patient_51":2}],"patients_seen":["patient_46"],"save_date":"06/10/2026, 18:07","supervisor_index":1} {"accurate_diagnoses":1,"daily_patient_limit":6,"diagnoses_quota":2,"event_index":"next_patient","floor_count":-5,"ite_list":["ite_01","ite_02","ite_03","ite_04"],"ite_seen":[],"its_list":["its_01","its_02","its_03","its_04"],"its_seen":[],"journal_entities":"","misdiagnoses_allowed":2,"patient_count":1,"patient_list":[{"patient_51":1},{"patient_43":2,"patient_46":2,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_46":2,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_46":2,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_44":5,"patient_46":2,"patient_47":5,"patient_48":5,"patient_49":5,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_44":5,"patient_46":2,"patient_47":5,"patient_48":5,"patient_49":5,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_44":5,"patient_46":2,"patient_47":5,"patient_48":5,"patient_49":5,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_44":5,"patient_45":8,"patient_46":2,"patient_47":5,"patient_48":5,"patient_49":5,"patient_50":3,"patient_51":1},{"patient_42":3,"patient_43":2,"patient_44":5,"patient_45":8,"patient_46":2,"patient_47":5,"patient_48":5,"patient_49":5,"patient_50":3,"patient_51":1}],"patients_seen":["patient_spy"],"save_date":"06/19/2026, 16:35","spy_count":0,"spy_order":true,"supervisor_index":1}
+6
View File
@@ -65,6 +65,8 @@ func _on_new_game_pressed():
Patient.its_list = Patient.og_its_list Patient.its_list = Patient.og_its_list
Patient.patients_seen.clear() Patient.patients_seen.clear()
Patient.its_seen.clear() Patient.its_seen.clear()
Patient.spy.order = false
Patient.spy.count = 0
# DISABLED FOR NOW SINCE THERE'S NO INTRO ANYMORE # DISABLED FOR NOW SINCE THERE'S NO INTRO ANYMORE
#Offering to skip the introduction #Offering to skip the introduction
#var choice_text = "Do you wish to skip the introduction ?" #var choice_text = "Do you wish to skip the introduction ?"
@@ -126,6 +128,8 @@ func save_game(save_slot_number:int):
"patients_seen": Patient.patients_seen, "patients_seen": Patient.patients_seen,
"its_seen": Patient.its_seen, "its_seen": Patient.its_seen,
"ite_seen": Patient.ite_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, "journal_entities": $ScreeningDesk.journal_layer.journal.entities_page.text,
"save_date": Globals.get_save_date() "save_date": Globals.get_save_date()
} }
@@ -184,6 +188,8 @@ func load_game(load_slot_number:int):
Patient.patients_seen = load_data["patients_seen"] Patient.patients_seen = load_data["patients_seen"]
Patient.its_seen = load_data["its_seen"] Patient.its_seen = load_data["its_seen"]
Patient.ite_seen = load_data["ite_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"] $ScreeningDesk.journal_layer.journal.entities_page.text = load_data["journal_entities"]
else: else:
print("Failed to parse Loading Data.") print("Failed to parse Loading Data.")
+13 -9
View File
@@ -9,19 +9,23 @@ var symptoms_detailed: Array[Array] = [
["SUICIDAL IDEATIONS\nPersistent thoughts about ending one's own life", ["SUICIDAL IDEATIONS\nPersistent thoughts about ending one's own life",
"PERSECUTORY DELUSIONS\nFalse conviction of being targeted or harmed", "PERSECUTORY DELUSIONS\nFalse conviction of being targeted or harmed",
"UNNATURAL BEHAVIOUR\nSigns or marks of non-human nature", "UNNATURAL BEHAVIOUR\nSigns or marks of non-human nature",
"AUDITORY HALLUCINATIONS\nFalse perceptions of external sound"], "INSOMNIA\nUnrestorative sleep due to difficulties falling or staying asleep"],
["MEGALOMANIAC DELUSIONS\nFalse exaggeration of self-importance or power", ["AUDITORY HALLUCINATIONS\nFalse perceptions of external sound"],
"SOMATIC HALLUCINATIONS\nFalse sensations, from inside the body or on the skin"],
["MYSTICAL DELUSIONS\nFalse certainty of spiritual, divine connection", ["SOMATIC HALLUCINATIONS\nFalse sensations from inside the body or on the skin"],
"THOUGHT INSERTION\nFalse conviction of having alien thoughts implanted in one's brain"],
["CHEMOSENSORY HALLUCINATIONS\nFalse perceptions of smell or taste", ["MYSTICAL DELUSIONS\nFalse certainty of spiritual, divine connection"],
"DISORGANIZED SPEECH\nIncoherent sentences, words and speech"],
["HETERO-AGRESSIVE BEHAVIOUR\nExcessive hostility, verbal agression, threats", ["MEGALOMANIAC DELUSIONS\nFalse exaggeration of self-importance or power"],
"DISSOCIATIVE IDENTITY\nPresence of two or more alternate personalities"]
["THOUGHT INSERTION\nFalse belief of having thoughts implanted by an external source"],
["CHEMOSENSORY HALLUCINATIONS\nFalse perceptions of smell or taste"],
["SELF-MUTILATION\nDeliberate self-harming behaviour"],
["VISUAL HALLUCINATIONS\nFalse perceptions of visual stimuli"],
] ]
+19 -4
View File
@@ -4,6 +4,7 @@ extends Node
var dialog_tree: Dictionary var dialog_tree: Dictionary
var marker: Array[int] var marker: Array[int]
var dialogue_resource: Resource var dialogue_resource: Resource
var dialogue_start: String
#Patient attributes #Patient attributes
var texture := TextureRect.new() var texture := TextureRect.new()
@@ -13,6 +14,8 @@ var emotions : Dictionary
var abnormal: bool var abnormal: bool
var id : String var id : String
var type: String var type: String
var age: String
var symptoms: Array
#Patient file #Patient file
var file_text : String var file_text : String
@@ -41,10 +44,12 @@ var patients_seen = []
var its_seen = [] var its_seen = []
var ite_seen = [] var ite_seen = []
#Supervisor file path #Supervisor file path
var supervisor_name = "siveyan" var supervisor_name = "siveyan"
#Spy
var spy: Node
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
@@ -56,10 +61,14 @@ func _ready() -> void:
og_patient_list.resize(len(symptoms_arrays)) og_patient_list.resize(len(symptoms_arrays))
patient_list.resize(len(symptoms_arrays)) patient_list.resize(len(symptoms_arrays))
its_list = og_its_list its_list = og_its_list
ite_list = og_ite_list ite_list = og_ite_list
original_color = texture.modulate #Saving original modulation color to reset it after modification original_color = texture.modulate #Saving original modulation color to reset it after modification
#Adding the spy
spy = Spy.new()
add_child(spy)
func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog tree for each dialogue func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog tree for each dialogue
@@ -101,11 +110,15 @@ func load_patient(patient_info: Dictionary): #Loads new patient
#Setting up Patient File #Setting up Patient File
var patient_name = config.get_value("", "name") var patient_name = config.get_value("", "name")
var age = config.get_value("", "age") age = config.get_value("", "age")
var profession = config.get_value("", "profession") var profession = config.get_value("", "profession")
var psychiatric_assessment = config.get_value("", "psychiatric_assessment") var psychiatric_assessment = config.get_value("", "psychiatric_assessment")
file_text = "NAME: " + patient_name + "\nAGE: " + age + "\n\nPROFESSION: " + profession + "\n\nPRE-SCREENING PSYCHIATRIC ASSESSMENT:\n\n" + "[color=orange_red]" + psychiatric_assessment + "[/color]" file_text = "NAME: " + patient_name + "\nAGE: " + age + "\n\nPROFESSION: " + profession + "\n\nPRE-SCREENING PSYCHIATRIC ASSESSMENT:\n\n" + "[color=orange_red]" + psychiatric_assessment + "[/color]"
var symptom_list = config.get_value("", "psychiatric_assessment").split("\n", false)
symptoms = symptom_list
symptom_list = config.get_value("", "abnormal_symptoms").split("\n", false)
symptoms.append_array(symptom_list)
#Randomizing abnormal status if required #Randomizing abnormal status if required
var status = config.get_value("", "status") var status = config.get_value("", "status")
match status: match status:
@@ -234,6 +247,7 @@ func next_patient() -> Dictionary: #Decides next patient ID
var next_id: String var next_id: String
var next_type: String var next_type: String
dialogue_start = "start"
match Globals.floor_count: match Globals.floor_count:
-2: -2:
if Globals.patient_count == 0: if Globals.patient_count == 0:
@@ -254,8 +268,9 @@ func next_patient() -> Dictionary: #Decides next patient ID
next_id = generate_next_id(next_type) next_id = generate_next_id(next_type)
-5: -5:
if Globals.patient_count == 0: if Globals.patient_count == 0:
next_id = "patient_51" next_id = "patient_spy"
next_type = "patient" next_type = "patient"
dialogue_start = "encounter_1"
else: else:
next_type = next_patient_type() next_type = next_patient_type()
next_id = generate_next_id(next_type) next_id = generate_next_id(next_type)
+9 -12
View File
@@ -23,7 +23,6 @@ extends Control
var main: Node var main: Node
func _ready() -> void: func _ready() -> void:
#Referencing main node #Referencing main node
@@ -110,7 +109,7 @@ func _on_call_next_patient_pressed(): #Brings in next patient and sets up the de
#Starting Dialogue and hiding console screen #Starting Dialogue and hiding console screen
computer.screen.hide() computer.screen.hide()
console_screen.hide() console_screen.hide()
main.start_balloon("screening", "patient", Patient.dialogue_resource, "start") main.start_balloon("screening", "patient", Patient.dialogue_resource, Patient.dialogue_start)
#Showing Computer Tabs and showing Patient File Screen by default #Showing Computer Tabs and showing Patient File Screen by default
for tab in computer.tab_list: for tab in computer.tab_list:
@@ -148,7 +147,10 @@ func _on_decision_made(choice: String):
func _on_clear_patient(choice:String): func _on_clear_patient(choice:String):
# Updating middle screen info and accurate_diagnoses value # Updating middle screen info and accurate_diagnoses value
if (Patient.abnormal == true and choice == "terminate") or (Patient.abnormal == false and choice == "release"): if Patient.spy.order and Patient.spy.spy_check():
Globals.accurate_diagnoses += 1
Patient.spy.count += 1
elif (Patient.abnormal == true and choice == "terminate") or (Patient.abnormal == false and choice == "release"):
Globals.accurate_diagnoses += 1 Globals.accurate_diagnoses += 1
else: else:
Globals.accurate_diagnoses = 0 # Resetting to 0 if the player makes a wrong diagnosis Globals.accurate_diagnoses = 0 # Resetting to 0 if the player makes a wrong diagnosis
@@ -192,7 +194,7 @@ func _on_clear_patient(choice:String):
func _on_color_change(color: String): #Modulating backroom and patient colors func _on_color_change(color: String): #Modulating backroom and patient colors
var new_color: Color var new_color: Color
match color: match color:
"red": "red":
new_color = Color(1,0.1,0.1,1) new_color = Color(1,0.1,0.1,1)
@@ -227,17 +229,12 @@ func descend_floor(): #Descends to next floor
for node in [middle_screen, computer, console_screen, journal_layer]: for node in [middle_screen, computer, console_screen, journal_layer]:
node.reset() #Resetting the scene node.reset() #Resetting the scene
main.save_game(0) #Autosaving
event_manager() #Selecting next event
#Autosaving
main.save_game(0)
#Selecting next event
event_manager()
#Resets to initial state #Resets to initial state
func reset(): func reset():
for node in [patient, supervisor, journal_layer, computer, console_screen, middle_screen, release, terminate, for node in [patient, supervisor, Patient.spy, journal_layer, computer, console_screen, middle_screen, release, terminate,
green_button, red_button, room_assets]: green_button, red_button, room_assets]:
node.reset() node.reset()
+61
View File
@@ -0,0 +1,61 @@
extends Node
class_name Spy
var threshold: String #Spy order's age threshold
var symptoms: Array #Spy order's symptoms
var order: bool #Checks if there is an ongoing spy order
var count: int #Keeps count of the spy successful orders
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
#Randomization of the spy's directives
func spy_rand():
threshold = ["BELOW", "ABOVE"].pick_random()
var floor_index = -Globals.floor_count -1
var available_symptoms : Array
for i in range(floor_index+1): #Takes into account only the known symptoms
available_symptoms.append_array(Patient.symptoms_arrays[i])
print("SPY Symptoms list: " + str(available_symptoms))
available_symptoms.shuffle()
print("SPY Symptoms list shuffled: " + str(available_symptoms))
symptoms = available_symptoms.slice(0,2) #Returns 2 random symptoms
print("SPY Threshold selected: " + threshold)
print("SPY Symptoms selected: " + str(symptoms))
#Checks if a patient meets the spy order's requirements and returns true or false
func spy_check():
var requirements_passed = true
match threshold: #Check the age requirement
"BELOW":
if int(Patient.age) > 40:
requirements_passed = false
"ABOVE":
if int(Patient.age) < 40:
requirements_passed = false
for symptom in symptoms: #Check the symptoms requirement
if Patient.symptoms.has(symptom) == false:
requirements_passed = false
print("Symptom not present in Patient: " + str(symptom))
print("Requirements_passed: " + str(requirements_passed))
return requirements_passed
#Resets to initial state
func reset():
threshold = ""
symptoms.clear()
order = false
+1
View File
@@ -0,0 +1 @@
uid://dyjxgv18p3e03
+1 -1
View File
@@ -54,4 +54,4 @@ ui_select={
[internationalization] [internationalization]
locale/translations_pot_files=PackedStringArray("res://Dialogues/Patients/patient_50.dialogue", "res://Dialogues/Patients/patient_49.dialogue", "res://Dialogues/Patients/patient_48.dialogue", "res://Dialogues/Patients/patient_47.dialogue", "res://Dialogues/Patients/patient_46.dialogue", "res://Dialogues/Patients/patient_45.dialogue", "res://Dialogues/Patients/patient_51.dialogue", "res://Dialogues/Patients/patient_44.dialogue", "res://Dialogues/Patients/patient_43.dialogue", "res://Dialogues/Patients/patient_42.dialogue", "res://Dialogues/OG Patients/patient_49.dialogue", "res://Dialogues/OG Patients/patient_50.dialogue", "res://Dialogues/ITS/its_00.dialogue", "res://Dialogues/ITS/its_01.dialogue", "res://Dialogues/Supervisors/supervisor_dredar.dialogue", "res://Dialogues/Entities/entity_01.dialogue", "res://Dialogues/Entities/it_that_feels_01.dialogue", "res://Dialogues/ITS/its_02.dialogue", "res://Dialogues/ITS/its_03.dialogue", "res://Dialogues/ITS/its_04.dialogue", "res://Dialogues/ITE/ite_00.dialogue", "res://Dialogues/ITE/ite_01.dialogue", "res://Dialogues/ITE/ite_02.dialogue", "res://Dialogues/ITE/ite_03.dialogue", "res://Dialogues/ITE/ite_04.dialogue", "res://Dialogues/Patients/patient_41.dialogue", "res://Dialogues/Supervisors/supervisor_siveyan.dialogue", "res://Dialogues/Patients/patient_40.dialogue") locale/translations_pot_files=PackedStringArray("res://Dialogues/Patients/patient_50.dialogue", "res://Dialogues/Patients/patient_49.dialogue", "res://Dialogues/Patients/patient_48.dialogue", "res://Dialogues/Patients/patient_47.dialogue", "res://Dialogues/Patients/patient_46.dialogue", "res://Dialogues/Patients/patient_45.dialogue", "res://Dialogues/Patients/patient_51.dialogue", "res://Dialogues/Patients/patient_44.dialogue", "res://Dialogues/Patients/patient_43.dialogue", "res://Dialogues/Patients/patient_42.dialogue", "res://Dialogues/OG Patients/patient_49.dialogue", "res://Dialogues/OG Patients/patient_50.dialogue", "res://Dialogues/ITS/its_00.dialogue", "res://Dialogues/ITS/its_01.dialogue", "res://Dialogues/Supervisors/supervisor_dredar.dialogue", "res://Dialogues/Entities/entity_01.dialogue", "res://Dialogues/Entities/it_that_feels_01.dialogue", "res://Dialogues/ITS/its_02.dialogue", "res://Dialogues/ITS/its_03.dialogue", "res://Dialogues/ITS/its_04.dialogue", "res://Dialogues/ITE/ite_00.dialogue", "res://Dialogues/ITE/ite_01.dialogue", "res://Dialogues/ITE/ite_02.dialogue", "res://Dialogues/ITE/ite_03.dialogue", "res://Dialogues/ITE/ite_04.dialogue", "res://Dialogues/Patients/patient_41.dialogue", "res://Dialogues/Supervisors/supervisor_siveyan.dialogue", "res://Dialogues/Patients/patient_40.dialogue", "res://Dialogues/Patients/patient_spy.dialogue")