From b7086caa11a71e7ebb56068635fad6b15c43f0a4 Mon Sep 17 00:00:00 2001 From: Maurane Date: Mon, 26 Jan 2026 18:04:39 +0100 Subject: [PATCH] Reorganizing --- .../prime_supervisor.aseprite | Bin 35300 -> 60376 bytes globals.gd | 3 +- main_hub.gd | 29 +-- patient.gd | 179 +----------------- patient.gd.uid | 2 +- patient_global.gd | 175 +++++++++++++++++ patient_global.gd.uid | 1 + project.godot | 2 +- screening_desk.gd | 36 +--- screening_desk.tscn | 5 +- supervisor.gd | 40 +++- 11 files changed, 250 insertions(+), 222 deletions(-) create mode 100644 patient_global.gd create mode 100644 patient_global.gd.uid diff --git a/Art/Patients/prime_supervisor/prime_supervisor.aseprite b/Art/Patients/prime_supervisor/prime_supervisor.aseprite index f63baacc282c599188cc2f21a0b62be55fa9c435..fd031f540dde98437b7e8efe2dc8333046c57022 100644 GIT binary patch delta 27510 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 delta 100 zcmca{o%zXRCZ;Ey6PfCGQ#u(Keti^RNMT@L5ZKr|nT=fm$YN1op1hddZn7VT;$|j} zVs7>z2?hpM1;)v;F5;VGdrc%5gC>i+$O4&G5{xXHXDofg!N|6`b=@QpM)u7ThYx4~ E0N{Wf%m4rY diff --git a/globals.gd b/globals.gd index 8494c01..9796c9a 100644 --- a/globals.gd +++ b/globals.gd @@ -10,8 +10,6 @@ var patient_list = ["45", "46", "47", "48", "49", "50", "51"] var patients_seen: Array[String] var patient_id var interfloor_dialogue = load("res://Dialogues/interfloor.dialogue") -var dialogue_intro = load("res://Dialogues/intro.dialogue") -var dialogue_recovery = load("res://Dialogues/recovery.dialogue") 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, @@ -29,6 +27,7 @@ signal response_chosen(DialogueResponse) signal clear_patient signal color_change signal character_label_color_change +signal start_balloon # Called when the node enters the scene tree for the first time. func _ready() -> void: diff --git a/main_hub.gd b/main_hub.gd index 70c8527..a47addd 100644 --- a/main_hub.gd +++ b/main_hub.gd @@ -13,8 +13,6 @@ var balloon: Node # Called when the node enters the scene tree for the first time. func _ready() -> void: - Patient.sort_patients() - #Adding Scenes var title_screen = TitleScreen.instantiate() var screening_desk = ScreeningDesk.instantiate() @@ -42,10 +40,13 @@ func _ready() -> void: UI.connect("auto_value_changed", self._on_auto_value_changed) Globals.character_label_color_change.connect(self._on_character_label_color_change) + Globals.start_balloon.connect(self.start_balloon) #Updating Save/Load Slots Information based on Existing Saves update_slots() - + + #Sorting patients by floor + Patient.sort_patients() # Starts a new game @@ -105,8 +106,8 @@ func start_day(): await TransitionScreen.transition_finished #Supervisor Dialogue - $ScreeningDesk.supervisor_dialogue(Globals.interfloor_dialogue, "interfloor_" + str(-Globals.floor_count-1)) - await $ScreeningDesk.supervisor_dialogue_finished + $ScreeningDesk.supervisor.dialogue(Globals.interfloor_dialogue, "interfloor_" + str(-Globals.floor_count-1)) + await $ScreeningDesk.supervisor.dialogue_finished $ScreeningDesk.console_display(Globals.directives) $ScreeningDesk.new_patient() @@ -263,9 +264,12 @@ func start_balloon(balloon_type:String, dialogue_resource: Resource, start_title get_tree().current_scene.add_child(balloon) #Connects emotion signals if needed - if balloon_type == "screening": - DialogueManager.got_dialogue.connect($ScreeningDesk._change_emotion) - DialogueManager.got_dialogue.connect($ScreeningDesk._recording_text) + match balloon_type: + "screening": + DialogueManager.got_dialogue.connect($ScreeningDesk.patient._change_emotion) + DialogueManager.got_dialogue.connect($ScreeningDesk._recording_text) + "supervisor": + DialogueManager.got_dialogue.connect($ScreeningDesk.supervisor._change_emotion) #Applies text settings to the balloon balloon.dialogue_label.seconds_per_step = UI.text_speed @@ -283,10 +287,11 @@ func clear_balloon(): balloon.queue_free() #Disconnecting emotion signals - if DialogueManager.is_connected("got_dialogue", $ScreeningDesk._change_emotion): - DialogueManager.disconnect("got_dialogue", $ScreeningDesk._change_emotion) - if DialogueManager.is_connected("got_dialogue", $ScreeningDesk._recording_text): - DialogueManager.disconnect("got_dialogue", $ScreeningDesk._recording_text) + for function in [$ScreeningDesk.patient._change_emotion, + $ScreeningDesk._recording_text, + $ScreeningDesk.supervisor._change_emotion]: + if DialogueManager.is_connected("got_dialogue", function): + DialogueManager.disconnect("got_dialogue", function) #Changes text_speed value diff --git a/patient.gd b/patient.gd index 8fc78f8..9858e88 100644 --- a/patient.gd +++ b/patient.gd @@ -1,175 +1,16 @@ -extends Node +extends TextureRect -#Dialogue variables -var dialog_tree: Dictionary -var marker: Array[int] -var dialogue_resource: Resource -#Patient attributes -var texture := TextureRect.new() -var image : Texture2D -var original_color: Color -var emotions : Dictionary -var abnormal: bool - -#Patient file -var file_text : String -var file_title: String - -#Patient symptoms ordered from floor to floor -var symptoms_arrays: Array[Array] = [ -["SUICIDAL IDEATIONS", "PERSECUTORY DELUSIONS", "MANIA", "AUDITORY HALLUCINATIONS"], -["MEGALOMANIAC DELUSIONS", "PANIC ATTACKS"], -["MYSTICAL DELUSIONS", "CENESTHETIC HALLUCINATIONS"], -["HAPTIC HALLUCINATIONS", "SELF-MUTILATION"], -["HETERO-AGRESSIVE BEHAVIOUR", "VISUAL HALLUCINATIONS"] -] -#Lists of possible patients sorted by floor -var patient_list : Array[Array] - -# Called when the node enters the scene tree for the first time. func _ready() -> void: - - #Setting up dialogue marker - marker.resize(100) - marker.fill(0) - - #Setting up patient list - patient_list.resize(len(symptoms_arrays)) - - original_color = texture.modulate #Saving original modulation color to reset it after modification + pass -func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog tree for each dialogue - - var branch : Dictionary - var tree : Dictionary - - for branch_id in tree_model: - branch = {branch_id: "not_asked"} - tree.merge(branch) - - return tree - - -func new_patient(): - - var file_path: String - - #Generating patient_id - var floor_index = -Globals.floor_count -1 - print("Floor Index: " + str(floor_index)) - var patient_id = weighted_random(patient_list[floor_index]) - Globals.patient_id = patient_id - Globals.patient_list.erase(patient_id) #Line to be reenabled when there is more than one patient in the list - Globals.patients_seen.append(patient_id) - - #Loading Patient Files - var config := ConfigFile.new() - file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg" - config.load(file_path) - - #Setting up Patient File - var patient_name = config.get_value("", "name") - var age = config.get_value("", "age") - var profession = config.get_value("", "profession") - 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_title = "[center]PATIENT FILE #" + patient_id - - #Loading Patient Initial Face - var initial_emotion = config.get_value("", "initial_emotion") - file_path = "res://Art/Patients/patient_" + patient_id + "/patient_" + patient_id + "_" + initial_emotion + ".png" - image = load(file_path) - - #Loading Face Emotions - var face: Resource - var emotion_branch: Dictionary - var emotion_list = ["neutral", "peaceful", "praying", "puzzled", - "sadsmiling", "crazysmiling", "smiling", "laughing", "happy", "elated", "maniac", "irritated", "angry", - "sad", "depressed", "crying", "surprised", "worried", "scared", "shocked", "panicked", "suspicious", - "abnormal", "abnormal1", "abnormal2", "special"] - - emotions.clear() #Clearing previous patient emotions - for emotion in emotion_list: - file_path = "res://Art/Patients/patient_" + patient_id + "/patient_" + patient_id + "_" + emotion + ".png" - face = load(file_path) - if face != null: - emotion_branch = {emotion: face} - emotions.merge(emotion_branch) - - #Loading Dialogue Resource - file_path = "res://Dialogues/Patients/patient_" + patient_id + ".dialogue" - dialogue_resource = load(file_path) - - #Randomizing abnormal status if required - var status = config.get_value("", "status") - match status: - "random": - abnormal = randf() < 0.5 #50/50 abnormal/normal - print("Abnormal value: " + str(abnormal)) - "normal": - abnormal = false - "abnormal": - abnormal = true - - -#Sorts the patients to determine who can appear on what floor depending on the symptoms unlocked -func sort_patients(): - - var config := ConfigFile.new() - var file_path : String - var patient_symptoms: Array - var symptom_matched : bool - var symptom_list: Array - - for patient_id in Globals.patient_list: - patient_symptoms.clear() - file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg" - config.load(file_path) - symptom_list = config.get_value("", "psychiatric_assessment").split("\n", false) - patient_symptoms = symptom_list - symptom_list = config.get_value("", "abnormal_symptoms").split("\n", false) - patient_symptoms.append_array(symptom_list) - print("Patient #" + patient_id + " symptom list: " + str(patient_symptoms)) - #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 - - for j in range(len(symptoms_arrays)-1, -1, -1): - for symptom in patient_symptoms: - if symptoms_arrays[j].has(symptom): - symptom_matched = true - print("Symptom matched: " + str(symptoms_arrays[j]) + " and " + str(symptom)) - break - if symptom_matched: - for k in range(j, symptoms_arrays.size()): - patient_list[k].append({"patient_id": patient_id, "weight": j+1}) - symptom_matched = false - break - - for i in range(len(patient_list)): - print("Floor " + str(i) + " possible patients: " + str(patient_list[i])) - - -#Weighted random selection from an Array -func weighted_random(array: Array): - - #Calculating total weight - var total_weight : int - for item in array: - total_weight += item.weight - print("Total weight: " + str(total_weight)) - - var r = randf() * total_weight - print("r :" + str(r)) - - var weight_sum : int - for item in array: - weight_sum += item.weight - if weight_sum >= r: - print("Patient selected: " + item.patient_id + ", Weight: " + str(item.weight)) - return item.patient_id - return null +#Change emotions following dialogue tags +func _change_emotion(dialogue_line) -> void: + var line_tag = dialogue_line.tags + print("Patient marker value: " + str(Patient.marker[0])) + if line_tag.is_empty() == false: + var new_emotion = line_tag[0] + texture = Patient.emotions[String(new_emotion)] + print("Emotion changed to ", new_emotion) diff --git a/patient.gd.uid b/patient.gd.uid index aa10e1f..964ea37 100644 --- a/patient.gd.uid +++ b/patient.gd.uid @@ -1 +1 @@ -uid://by4i7c1foffu3 +uid://vjvnh47s4akq diff --git a/patient_global.gd b/patient_global.gd new file mode 100644 index 0000000..8fc78f8 --- /dev/null +++ b/patient_global.gd @@ -0,0 +1,175 @@ +extends Node + +#Dialogue variables +var dialog_tree: Dictionary +var marker: Array[int] +var dialogue_resource: Resource + +#Patient attributes +var texture := TextureRect.new() +var image : Texture2D +var original_color: Color +var emotions : Dictionary +var abnormal: bool + +#Patient file +var file_text : String +var file_title: String + +#Patient symptoms ordered from floor to floor +var symptoms_arrays: Array[Array] = [ +["SUICIDAL IDEATIONS", "PERSECUTORY DELUSIONS", "MANIA", "AUDITORY HALLUCINATIONS"], +["MEGALOMANIAC DELUSIONS", "PANIC ATTACKS"], +["MYSTICAL DELUSIONS", "CENESTHETIC HALLUCINATIONS"], +["HAPTIC HALLUCINATIONS", "SELF-MUTILATION"], +["HETERO-AGRESSIVE BEHAVIOUR", "VISUAL HALLUCINATIONS"] +] +#Lists of possible patients sorted by floor +var patient_list : Array[Array] + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + + #Setting up dialogue marker + marker.resize(100) + marker.fill(0) + + #Setting up patient list + patient_list.resize(len(symptoms_arrays)) + + original_color = texture.modulate #Saving original modulation color to reset it after modification + + +func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog tree for each dialogue + + var branch : Dictionary + var tree : Dictionary + + for branch_id in tree_model: + branch = {branch_id: "not_asked"} + tree.merge(branch) + + return tree + + +func new_patient(): + + var file_path: String + + #Generating patient_id + var floor_index = -Globals.floor_count -1 + print("Floor Index: " + str(floor_index)) + var patient_id = weighted_random(patient_list[floor_index]) + Globals.patient_id = patient_id + Globals.patient_list.erase(patient_id) #Line to be reenabled when there is more than one patient in the list + Globals.patients_seen.append(patient_id) + + #Loading Patient Files + var config := ConfigFile.new() + file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg" + config.load(file_path) + + #Setting up Patient File + var patient_name = config.get_value("", "name") + var age = config.get_value("", "age") + var profession = config.get_value("", "profession") + 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_title = "[center]PATIENT FILE #" + patient_id + + #Loading Patient Initial Face + var initial_emotion = config.get_value("", "initial_emotion") + file_path = "res://Art/Patients/patient_" + patient_id + "/patient_" + patient_id + "_" + initial_emotion + ".png" + image = load(file_path) + + #Loading Face Emotions + var face: Resource + var emotion_branch: Dictionary + var emotion_list = ["neutral", "peaceful", "praying", "puzzled", + "sadsmiling", "crazysmiling", "smiling", "laughing", "happy", "elated", "maniac", "irritated", "angry", + "sad", "depressed", "crying", "surprised", "worried", "scared", "shocked", "panicked", "suspicious", + "abnormal", "abnormal1", "abnormal2", "special"] + + emotions.clear() #Clearing previous patient emotions + for emotion in emotion_list: + file_path = "res://Art/Patients/patient_" + patient_id + "/patient_" + patient_id + "_" + emotion + ".png" + face = load(file_path) + if face != null: + emotion_branch = {emotion: face} + emotions.merge(emotion_branch) + + #Loading Dialogue Resource + file_path = "res://Dialogues/Patients/patient_" + patient_id + ".dialogue" + dialogue_resource = load(file_path) + + #Randomizing abnormal status if required + var status = config.get_value("", "status") + match status: + "random": + abnormal = randf() < 0.5 #50/50 abnormal/normal + print("Abnormal value: " + str(abnormal)) + "normal": + abnormal = false + "abnormal": + abnormal = true + + +#Sorts the patients to determine who can appear on what floor depending on the symptoms unlocked +func sort_patients(): + + var config := ConfigFile.new() + var file_path : String + var patient_symptoms: Array + var symptom_matched : bool + var symptom_list: Array + + for patient_id in Globals.patient_list: + patient_symptoms.clear() + file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg" + config.load(file_path) + symptom_list = config.get_value("", "psychiatric_assessment").split("\n", false) + patient_symptoms = symptom_list + symptom_list = config.get_value("", "abnormal_symptoms").split("\n", false) + patient_symptoms.append_array(symptom_list) + print("Patient #" + patient_id + " symptom list: " + str(patient_symptoms)) + #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 + + for j in range(len(symptoms_arrays)-1, -1, -1): + for symptom in patient_symptoms: + if symptoms_arrays[j].has(symptom): + symptom_matched = true + print("Symptom matched: " + str(symptoms_arrays[j]) + " and " + str(symptom)) + break + if symptom_matched: + for k in range(j, symptoms_arrays.size()): + patient_list[k].append({"patient_id": patient_id, "weight": j+1}) + symptom_matched = false + break + + for i in range(len(patient_list)): + print("Floor " + str(i) + " possible patients: " + str(patient_list[i])) + + +#Weighted random selection from an Array +func weighted_random(array: Array): + + #Calculating total weight + var total_weight : int + for item in array: + total_weight += item.weight + print("Total weight: " + str(total_weight)) + + var r = randf() * total_weight + print("r :" + str(r)) + + var weight_sum : int + for item in array: + weight_sum += item.weight + if weight_sum >= r: + print("Patient selected: " + item.patient_id + ", Weight: " + str(item.weight)) + return item.patient_id + return null + diff --git a/patient_global.gd.uid b/patient_global.gd.uid new file mode 100644 index 0000000..aa10e1f --- /dev/null +++ b/patient_global.gd.uid @@ -0,0 +1 @@ +uid://by4i7c1foffu3 diff --git a/project.godot b/project.godot index 8be6596..974f5f9 100644 --- a/project.godot +++ b/project.godot @@ -19,7 +19,7 @@ config/features=PackedStringArray("4.5", "Forward Plus") Globals="*res://globals.gd" TransitionScreen="*res://transition_screen.tscn" UI="*res://ui.tscn" -Patient="*res://patient.gd" +Patient="*res://patient_global.gd" DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd" [dialogue_manager] diff --git a/screening_desk.gd b/screening_desk.gd index 5d4bf08..3f03035 100644 --- a/screening_desk.gd +++ b/screening_desk.gd @@ -39,7 +39,6 @@ extends Control var main: Node var accurate_diagnoses = 0 -signal supervisor_dialogue_finished func _ready() -> void: @@ -99,7 +98,7 @@ func new_patient(): func _on_call_next_patient_pressed(): #Brings in next patient and sets up the desk controls #Hiding the next_patient button and shows transition messages on computer and console - var scenes_to_hide = [next_patient] + var scenes_to_hide = [next_patient, supervisor] for scenes in scenes_to_hide: scenes.hide() var message : String @@ -205,23 +204,10 @@ func _on_tab_recording_pressed(): #Shows the recording tab computer_tabs.get_node("Recording").show() -func _change_emotion(dialogue_line) -> void: #Change emotions following dialogue tags - - var line_tag = dialogue_line.tags - print("Patient marker value: " + str(Patient.marker[0])) - if line_tag.is_empty() == false: - var new_emotion = line_tag[0] - patient.texture = Patient.emotions[String(new_emotion)] - print("Emotion changed to ", new_emotion) - - func _on_green_button_pressed(): #Releases the patient - decision_made("release") - func _on_red_button_pressed(): #Terminates the patient - decision_made("terminate") @@ -369,25 +355,9 @@ func descend_floor(): #Descends to next floor console_screen.hide() #Interfloor dialogue - supervisor_dialogue(Globals.interfloor_dialogue, "interfloor_" + str(-Globals.floor_count-1)) - await supervisor_dialogue_finished + supervisor.dialogue(Globals.interfloor_dialogue, "interfloor_" + str(-Globals.floor_count-1)) + await supervisor.dialogue_finished #Setting up new patient new_patient() - - -#Supervisor dialogue, mainly between floors -func supervisor_dialogue(dialogue_resource, dialogue_start): - - #Interfloor dialogue - supervisor.show() - supervisor.reveal_spray() - await supervisor.reveal_done - main.start_balloon("screening", dialogue_resource, dialogue_start) - await DialogueManager.dialogue_ended - supervisor.hide_spray() - await supervisor.hide_done - supervisor.hide() - - supervisor_dialogue_finished.emit() diff --git a/screening_desk.tscn b/screening_desk.tscn index bbda372..663c684 100644 --- a/screening_desk.tscn +++ b/screening_desk.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=43 format=3 uid="uid://chytk2cctjk3x"] +[gd_scene load_steps=44 format=3 uid="uid://chytk2cctjk3x"] [ext_resource type="Script" uid="uid://b3ms0imu0umn8" path="res://screening_desk.gd" id="1_1s7k3"] [ext_resource type="Texture2D" uid="uid://5f5bsergnjtv" path="res://Art/Patients/prime_supervisor/prime_supervisor_hologram.png" id="3_fev1v"] [ext_resource type="Texture2D" uid="uid://b2epvjeqvmgrs" path="res://Art/Rooms/screening_room/screening_room_glass.png" id="3_nxnrp"] +[ext_resource type="Script" uid="uid://vjvnh47s4akq" path="res://patient.gd" id="4_43vqp"] [ext_resource type="Texture2D" uid="uid://by34irl73n8pb" path="res://Art/Rooms/screening_room/backroom.png" id="4_fij8w"] [ext_resource type="Shader" uid="uid://dwepb0lm1veje" path="res://supervisor.gdshader" id="4_qsin6"] [ext_resource type="Script" uid="uid://cdkbyikbjqlsh" path="res://supervisor.gd" id="5_43vqp"] @@ -316,8 +317,8 @@ offset_top = -450.0 offset_right = 300.0 grow_horizontal = 2 grow_vertical = 0 -texture = ExtResource("3_fev1v") stretch_mode = 3 +script = ExtResource("4_43vqp") [node name="Supervisor" type="TextureRect" parent="UpperHalf/ControlGlass"] visible = false diff --git a/supervisor.gd b/supervisor.gd index 4eaf99f..dd7ba26 100644 --- a/supervisor.gd +++ b/supervisor.gd @@ -4,11 +4,13 @@ extends TextureRect signal reveal_done signal hide_done +signal dialogue_finished + func _ready(): randomize() - # --- Création du bruit --- + #Noise setup var noise := FastNoiseLite.new() noise.noise_type = FastNoiseLite.TYPE_SIMPLEX noise.frequency = 20.0 @@ -23,6 +25,7 @@ func _ready(): mat.set_shader_parameter("noise_tex", noise_tex) +#Revealing supervisor in a noise spray func reveal_spray(): mat.set_shader_parameter("progress", 0.0) @@ -36,6 +39,7 @@ func reveal_spray(): reveal_done.emit() +#hiding supervisor in a hiding spray func hide_spray(): mat.set_shader_parameter("progress", 1.0) @@ -49,6 +53,38 @@ func hide_spray(): hide_done.emit() +#Progressing the reveal/hide func set_progress(value: float): - mat.set_shader_parameter("progress", value) + + + +#Supervisor dialogue, mainly between floors +func dialogue(dialogue_resource, dialogue_start): + + #Showing the supervisor + show() + reveal_spray() + await reveal_done + + #Dialogue + Globals.start_balloon.emit("screening", dialogue_resource, dialogue_start) + await DialogueManager.dialogue_ended + + #Hiding the supervisor + hide_spray() + await hide_done + hide() + + dialogue_finished.emit() + + +#Change emotions following dialogue tags +func _change_emotion(dialogue_line) -> void: + + var line_tag = dialogue_line.tags + print("Supervisor marker value: " + str(Patient.marker[0])) + if line_tag.is_empty() == false: + var new_emotion = line_tag[0] + texture = Patient.emotions[String(new_emotion)] + print("Emotion changed to ", new_emotion)