From d34ee246b9f3789064382b1454811079fab4e176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Mart=C3=ADnez=20Palacio?= Date: Mon, 14 Oct 2024 13:29:39 +0200 Subject: [PATCH] Finalize cutscene system (for now) --- Cutscenes/prototype_clone_defeated.tres | 33 +++ Cutscenes/prototype_clone_draw.tres | 29 +++ Cutscenes/prototype_clone_victory.tres | 185 ++++++++++++++ Cutscenes/prototype_defeated.tres | 29 --- Cutscenes/prototype_reed_defeated_normal.tres | 42 +++ Cutscenes/prototype_reed_defeated_nsfw.tres | 51 ++++ Cutscenes/prototype_reed_draw_normal.tres | 51 ++++ Cutscenes/prototype_reed_draw_nsfw.tres | 51 ++++ Cutscenes/prototype_reed_victory.tres | 76 ++++++ Cutscenes/prototype_start.tres | 71 ++++-- Cutscenes/prototype_talk_to_nem.tres | 218 ++++++++++++++++ Hiro/hiro_ai.tscn | 4 +- Hiro/hiro_player.tscn | 30 ++- Nem/nem_npc.tscn | 25 +- Portraits/hiro_clone_normal.png | 3 + Portraits/hiro_clone_normal.png.import | 34 +++ Reed/reed_ai.tscn | 13 - Scripts/Characters/base.gd | 20 +- .../Cutscenes/Commands/lookat_character.gd | 4 +- Scripts/Cutscenes/Commands/show_dialogue.gd | 1 + Scripts/Cutscenes/cutscene.gd | 1 + Scripts/Cutscenes/manager.gd | 7 +- Scripts/Levels/arena_level.gd | 116 +++++++-- Scripts/UI/textbox.gd | 15 +- Scripts/hiro_player.gd | 36 ++- Scripts/ui.gd | 11 +- Scripts/util.gd | 4 +- UI/textbox_ui.tscn | 3 +- project.godot | 1 + world/world.tscn | 240 +++++++++++++++--- 30 files changed, 1255 insertions(+), 149 deletions(-) create mode 100644 Cutscenes/prototype_clone_defeated.tres create mode 100644 Cutscenes/prototype_clone_draw.tres create mode 100644 Cutscenes/prototype_clone_victory.tres delete mode 100644 Cutscenes/prototype_defeated.tres create mode 100644 Cutscenes/prototype_reed_defeated_normal.tres create mode 100644 Cutscenes/prototype_reed_defeated_nsfw.tres create mode 100644 Cutscenes/prototype_reed_draw_normal.tres create mode 100644 Cutscenes/prototype_reed_draw_nsfw.tres create mode 100644 Cutscenes/prototype_reed_victory.tres create mode 100644 Cutscenes/prototype_talk_to_nem.tres create mode 100644 Portraits/hiro_clone_normal.png create mode 100644 Portraits/hiro_clone_normal.png.import diff --git a/Cutscenes/prototype_clone_defeated.tres b/Cutscenes/prototype_clone_defeated.tres new file mode 100644 index 0000000..fa9c1e0 --- /dev/null +++ b/Cutscenes/prototype_clone_defeated.tres @@ -0,0 +1,33 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=7 format=3 uid="uid://cxm3qnbdy86on"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_75ljw"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="2_wttab"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="3_0uw7j"] + +[sub_resource type="Resource" id="Resource_as31p"] +script = ExtResource("2_wttab") +time = 1.0 + +[sub_resource type="Resource" id="Resource_1glku"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["N-No...!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_bagm4"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["See? I warned you! Now you can't fight Reed like this!"]) +textbox_direction = 1 + +[resource] +resource_name = "prototype_clone_defeated" +script = ExtResource("1_75ljw") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_as31p"), SubResource("Resource_1glku"), SubResource("Resource_bagm4")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_clone_draw.tres b/Cutscenes/prototype_clone_draw.tres new file mode 100644 index 0000000..7d6adf8 --- /dev/null +++ b/Cutscenes/prototype_clone_draw.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=8 format=3 uid="uid://dx7oj6ksrmbep"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/emit_message.gd" id="1_eslsh"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="2_8i5ol"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="5_8tfma"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="8_rrray"] + +[sub_resource type="Resource" id="Resource_jm5v6"] +script = ExtResource("1_eslsh") +message = &"hide_clone" + +[sub_resource type="Resource" id="Resource_as31p"] +script = ExtResource("2_8i5ol") +time = 1.0 + +[sub_resource type="Resource" id="Resource_bagm4"] +script = ExtResource("5_8tfma") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Wait...... W-What...? I defeated him, but... I'm down too?", "At any rate... I can't fight Reed like this..."]) +textbox_direction = 0 + +[resource] +resource_name = "prototype_clone_defeated" +script = ExtResource("8_rrray") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_jm5v6"), SubResource("Resource_as31p"), SubResource("Resource_bagm4")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_clone_victory.tres b/Cutscenes/prototype_clone_victory.tres new file mode 100644 index 0000000..4fc21ed --- /dev/null +++ b/Cutscenes/prototype_clone_victory.tres @@ -0,0 +1,185 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=33 format=3 uid="uid://ck75kipijh0fn"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_75ljw"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/emit_message.gd" id="1_wfaj3"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="2_wttab"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="3_0uw7j"] +[ext_resource type="AudioStream" uid="uid://osasql3x1b8q" path="res://Audio/BGM/olympus_overworld.mp3" id="3_ruugx"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/cue_bgm.gd" id="4_joqmj"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/move_character.gd" id="6_aee84"] +[ext_resource type="AudioStream" uid="uid://jlr3b1nye15g" path="res://Audio/BGM/olympus_combat.mp3" id="7_4jbtj"] + +[sub_resource type="Resource" id="Resource_jm5v6"] +script = ExtResource("1_wfaj3") +message = &"hide_clone" + +[sub_resource type="Resource" id="Resource_as31p"] +script = ExtResource("2_wttab") +time = 1.0 + +[sub_resource type="Resource" id="Resource_xcdd6"] +script = ExtResource("4_joqmj") +music = ExtResource("3_ruugx") +crossfade = true + +[sub_resource type="Resource" id="Resource_bagm4"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Heh! Take that!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_v16hg"] +script = ExtResource("1_wfaj3") +message = &"show_reed" + +[sub_resource type="Resource" id="Resource_vu1m2"] +script = ExtResource("6_aee84") +target_character = NodePath("../ReedAI") +target_type = "Vector" +use_character_speed = true +speed = 300.0 +animation_state = "cut_walk" +target_vector = Vector2(0, 50) +target_node = NodePath("..") + +[sub_resource type="Resource" id="Resource_4u6io"] +script = ExtResource("3_0uw7j") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Haaah... Made it..."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_5axwh"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Reed! You're late! What happened?"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_jdwa3"] +script = ExtResource("3_0uw7j") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Uh... You wouldn't want to know."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_wsgt4"] +script = ExtResource("3_0uw7j") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["It's fine. Now that you're both here, you may go into your positions.", "I'll let the people come in now."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_p2wwu"] +script = ExtResource("1_wfaj3") +message = &"fade_out" + +[sub_resource type="Resource" id="Resource_ben6d"] +script = ExtResource("2_wttab") +time = 1.21667 + +[sub_resource type="Resource" id="Resource_5fw3k"] +script = ExtResource("1_wfaj3") +message = &"scene_2" + +[sub_resource type="Resource" id="Resource_t0ilw"] +script = ExtResource("1_wfaj3") +message = &"fade_in" + +[sub_resource type="Resource" id="Resource_3k148"] +script = ExtResource("2_wttab") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_f6433"] +script = ExtResource("3_0uw7j") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Now! The moment you've all been waiting for!", "Today's exhibition match between two of our local fighters, Hiro and Reed!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_o6ly6"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["I've been looking forward for this day. Let's do out best!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_pu4kf"] +script = ExtResource("3_0uw7j") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Yeah! Don't hold anything back!", "Let's give this crowd a good show!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_hs1wh"] +script = ExtResource("3_0uw7j") +character = 4 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Show him what you've got, little bro!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_apw73"] +script = ExtResource("3_0uw7j") +character = 3 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["WHOO HOO! Do your best, Reed!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_yt0uq"] +script = ExtResource("3_0uw7j") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Fighters! All set?"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_v7db0"] +script = ExtResource("3_0uw7j") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Reaaaady?"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_p8wvt"] +script = ExtResource("3_0uw7j") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Go!!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_tjwhc"] +script = ExtResource("4_joqmj") +music = ExtResource("7_4jbtj") +crossfade = true + +[resource] +resource_name = "prototype_clone_defeated" +script = ExtResource("1_75ljw") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_jm5v6"), SubResource("Resource_as31p"), SubResource("Resource_xcdd6"), SubResource("Resource_bagm4"), SubResource("Resource_v16hg"), SubResource("Resource_vu1m2"), SubResource("Resource_4u6io"), SubResource("Resource_5axwh"), SubResource("Resource_jdwa3"), SubResource("Resource_wsgt4"), SubResource("Resource_p2wwu"), SubResource("Resource_ben6d"), SubResource("Resource_5fw3k"), SubResource("Resource_t0ilw"), SubResource("Resource_3k148"), SubResource("Resource_f6433"), SubResource("Resource_o6ly6"), SubResource("Resource_pu4kf"), SubResource("Resource_hs1wh"), SubResource("Resource_apw73"), SubResource("Resource_yt0uq"), SubResource("Resource_v7db0"), SubResource("Resource_p8wvt"), SubResource("Resource_tjwhc")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_defeated.tres b/Cutscenes/prototype_defeated.tres deleted file mode 100644 index d9ae4a7..0000000 --- a/Cutscenes/prototype_defeated.tres +++ /dev/null @@ -1,29 +0,0 @@ -[gd_resource type="Resource" script_class="Cutscene" load_steps=7 format=3 uid="uid://cwfayxsvfvfp3"] - -[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_5oimi"] -[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_b7jis"] -[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="1_m28bn"] - -[sub_resource type="Resource" id="Resource_j0qrl"] -script = ExtResource("1_b7jis") -time = 2.01667 - -[sub_resource type="Resource" id="Resource_eeatu"] -script = ExtResource("1_m28bn") -character = 0 -portrait_set = "naked" -portrait_emotion = "embarrased" -messages = Array[String](["AAH! What happened!?", "You ripped my clothes off!!"]) -textbox_direction = 0 - -[sub_resource type="Resource" id="Resource_cw5jl"] -script = ExtResource("1_m28bn") -character = 1 -portrait_set = "default" -portrait_emotion = "normal" -messages = Array[String](["Heh, told you I'd kill you!", "Of embarrasment!!"]) -textbox_direction = 1 - -[resource] -script = ExtResource("1_5oimi") -commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_eeatu"), SubResource("Resource_cw5jl")]) diff --git a/Cutscenes/prototype_reed_defeated_normal.tres b/Cutscenes/prototype_reed_defeated_normal.tres new file mode 100644 index 0000000..f624797 --- /dev/null +++ b/Cutscenes/prototype_reed_defeated_normal.tres @@ -0,0 +1,42 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=8 format=3 uid="uid://4dl7cllat3qh"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_0mx3n"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_7yk7v"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="3_nhp1k"] + +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_0mx3n") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_o1ssy"] +script = ExtResource("2_7yk7v") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Oof!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_7atw7"] +script = ExtResource("2_7yk7v") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Already? Come on, Hiro. I thought you were stronger than that."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_cw5jl"] +script = ExtResource("2_7yk7v") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Ladies and gentlemen, we have a a winner!!", "Everyone give a round of aplause for Hiro!"]) +textbox_direction = 1 + +[resource] +resource_name = "reed_wins_sfw" +script = ExtResource("3_nhp1k") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_o1ssy"), SubResource("Resource_7atw7"), SubResource("Resource_cw5jl")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_reed_defeated_nsfw.tres b/Cutscenes/prototype_reed_defeated_nsfw.tres new file mode 100644 index 0000000..5638714 --- /dev/null +++ b/Cutscenes/prototype_reed_defeated_nsfw.tres @@ -0,0 +1,51 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=9 format=3 uid="uid://cwfayxsvfvfp3"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_fyryj"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_4tx72"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="3_6u7eb"] + +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_fyryj") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_75mgm"] +script = ExtResource("2_4tx72") +character = 0 +custom_name = "" +portrait_set = "naked" +portrait_emotion = "embarrased" +messages = Array[String](["What the...!? My clothes!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_1wi5v"] +script = ExtResource("2_4tx72") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Oops. Guess I overdid it."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_2fi0d"] +script = ExtResource("2_4tx72") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Aaargh! I hate being naked in front of a crowd!!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_cw5jl"] +script = ExtResource("2_4tx72") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Uh... Ladies and gentlemen... We have a winner!", "The winner is Reed!"]) +textbox_direction = 1 + +[resource] +resource_name = "reed_wins_nsfw" +script = ExtResource("3_6u7eb") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_75mgm"), SubResource("Resource_1wi5v"), SubResource("Resource_2fi0d"), SubResource("Resource_cw5jl")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_reed_draw_normal.tres b/Cutscenes/prototype_reed_draw_normal.tres new file mode 100644 index 0000000..5ecb41d --- /dev/null +++ b/Cutscenes/prototype_reed_draw_normal.tres @@ -0,0 +1,51 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=9 format=3 uid="uid://cr6fgwy31vcj6"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_m4shx"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_24xq4"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="3_3cy2r"] + +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_m4shx") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_cw5jl"] +script = ExtResource("2_24xq4") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Wow! It's a draw!", "Amazing! I've never seen this before!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_mg8uw"] +script = ExtResource("2_24xq4") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Heh... I guess that means you're equally as good as me..."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_rhg2l"] +script = ExtResource("2_24xq4") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Huff... I'll definitely beat you next time!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_1cnsa"] +script = ExtResource("2_24xq4") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Yeah, we'll see about that!"]) +textbox_direction = 1 + +[resource] +resource_name = "reed_draw_sfw" +script = ExtResource("3_3cy2r") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_cw5jl"), SubResource("Resource_mg8uw"), SubResource("Resource_rhg2l"), SubResource("Resource_1cnsa")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_reed_draw_nsfw.tres b/Cutscenes/prototype_reed_draw_nsfw.tres new file mode 100644 index 0000000..2de265b --- /dev/null +++ b/Cutscenes/prototype_reed_draw_nsfw.tres @@ -0,0 +1,51 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=9 format=3 uid="uid://d3wuehjkx8udy"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_b58rs"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_o3yf1"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="3_c4ahv"] + +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_b58rs") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_cw5jl"] +script = ExtResource("2_o3yf1") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Wow! It's a draw!", "I've never seen this before!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_75mgm"] +script = ExtResource("2_o3yf1") +character = 0 +custom_name = "" +portrait_set = "naked" +portrait_emotion = "embarrased" +messages = Array[String](["What the...!? My clothes!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_1wi5v"] +script = ExtResource("2_o3yf1") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Oops. Guess I overdid it.", "Still... I'm impressed.", "Not only about your skills, but also your..."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_h3llg"] +script = ExtResource("2_o3yf1") +character = 0 +custom_name = "" +portrait_set = "naked" +portrait_emotion = "embarrased" +messages = Array[String](["Shut up! You know how I hate being naked in front of a crowd!!"]) +textbox_direction = 0 + +[resource] +resource_name = "reed_draw_nsfw" +script = ExtResource("3_c4ahv") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_cw5jl"), SubResource("Resource_75mgm"), SubResource("Resource_1wi5v"), SubResource("Resource_h3llg")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_reed_victory.tres b/Cutscenes/prototype_reed_victory.tres new file mode 100644 index 0000000..2ca511f --- /dev/null +++ b/Cutscenes/prototype_reed_victory.tres @@ -0,0 +1,76 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=16 format=3 uid="uid://c8pfjfnwim673"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_uoty8"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_vliur"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/emit_message.gd" id="3_e5ujb"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="3_kh4kq"] +[ext_resource type="AudioStream" uid="uid://osasql3x1b8q" path="res://Audio/BGM/olympus_overworld.mp3" id="3_pudjg"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/cue_bgm.gd" id="4_s1imk"] + +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_uoty8") +time = 2.01667 + +[sub_resource type="Resource" id="Resource_46i1x"] +script = ExtResource("2_vliur") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Ok, ok! I give up! You win!", "Boy, you're stronger than I thought. Good match."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_w88ia"] +script = ExtResource("2_vliur") +character = 3 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["That was a good fight, but, my boyfriend will win next time!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_dxa8x"] +script = ExtResource("2_vliur") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Alright folks, that's all for today. Thank you all so much for being here today!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_uu88j"] +script = ExtResource("4_s1imk") +music = ExtResource("3_pudjg") +crossfade = true + +[sub_resource type="Resource" id="Resource_qs5xn"] +script = ExtResource("2_vliur") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Hey, Reed. Are you in for some time at the hot springs? I'm spent."]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_qkt15"] +script = ExtResource("2_vliur") +character = 1 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Yeah, good idea! My body needs some rest, too."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_12o2v"] +script = ExtResource("3_e5ujb") +message = &"fade_out" + +[sub_resource type="Resource" id="Resource_uw5p1"] +script = ExtResource("1_uoty8") +time = 2.01667 + +[resource] +resource_name = "reed_loses_sfw" +script = ExtResource("3_kh4kq") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_46i1x"), SubResource("Resource_w88ia"), SubResource("Resource_dxa8x"), SubResource("Resource_uu88j"), SubResource("Resource_qs5xn"), SubResource("Resource_qkt15"), SubResource("Resource_12o2v"), SubResource("Resource_uw5p1")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_start.tres b/Cutscenes/prototype_start.tres index 620eec9..5bd52f3 100644 --- a/Cutscenes/prototype_start.tres +++ b/Cutscenes/prototype_start.tres @@ -1,44 +1,81 @@ -[gd_resource type="Resource" script_class="Cutscene" load_steps=12 format=3 uid="uid://bj3rm1r1ouq0r"] +[gd_resource type="Resource" script_class="Cutscene" load_steps=19 format=3 uid="uid://bj3rm1r1ouq0r"] [ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_ejncn"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="1_r5tuj"] [ext_resource type="AudioStream" uid="uid://osasql3x1b8q" path="res://Audio/BGM/olympus_overworld.mp3" id="1_wnm4j"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/turn_character.gd" id="2_eqfp1"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/cue_bgm.gd" id="2_fbljl"] -[ext_resource type="AudioStream" uid="uid://jlr3b1nye15g" path="res://Audio/BGM/olympus_combat.mp3" id="8_o2rwe"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/move_character.gd" id="4_5lef5"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="5_3jan1"] + +[sub_resource type="Resource" id="Resource_fuu2y"] +script = ExtResource("2_eqfp1") +character = NodePath("../HiroPlayer") +facing_direction = 0 [sub_resource type="Resource" id="Resource_xw6ah"] script = ExtResource("2_fbljl") music = ExtResource("1_wnm4j") crossfade = false -[sub_resource type="Resource" id="Resource_r2p8t"] -script = ExtResource("1_r5tuj") -character = 1 -portrait_set = "default" -portrait_emotion = "normal" -messages = Array[String](["This is a test for the cutscene!", "Now I'm going to kill you!"]) -textbox_direction = 1 +[sub_resource type="Resource" id="Resource_grd1k"] +script = ExtResource("4_5lef5") +target_character = NodePath("../HiroPlayer") +target_type = "Vector" +use_character_speed = true +speed = 300.0 +animation_state = "cut_walk" +target_vector = Vector2(0, 0) +target_node = NodePath("../PositionMarkers/Marker1") -[sub_resource type="Resource" id="Resource_fuu2y"] +[sub_resource type="Resource" id="Resource_oa4lm"] +script = ExtResource("2_eqfp1") +character = NodePath("../HiroPlayer") +facing_direction = 1 + +[sub_resource type="Resource" id="Resource_bowq5"] +script = ExtResource("5_3jan1") +time = 0.516667 + +[sub_resource type="Resource" id="Resource_5g2uq"] script = ExtResource("2_eqfp1") character = NodePath("../HiroPlayer") facing_direction = 3 -[sub_resource type="Resource" id="Resource_x3xc6"] +[sub_resource type="Resource" id="Resource_42rx3"] +script = ExtResource("5_3jan1") +time = 0.516667 + +[sub_resource type="Resource" id="Resource_pit05"] +script = ExtResource("2_eqfp1") +character = NodePath("../HiroPlayer") +facing_direction = 2 + +[sub_resource type="Resource" id="Resource_7hpjt"] script = ExtResource("1_r5tuj") character = 0 +custom_name = "" portrait_set = "default" portrait_emotion = "normal" -messages = Array[String](["Whaaat? Who are you!?", "You have no chance against me!!"]) +messages = Array[String](["Hm? Where's Reed?", "It's rare of him to be late to an exhibition match..."]) textbox_direction = 0 -[sub_resource type="Resource" id="Resource_1sjaa"] -script = ExtResource("2_fbljl") -music = ExtResource("8_o2rwe") -crossfade = true +[sub_resource type="Resource" id="Resource_fo1p1"] +script = ExtResource("2_eqfp1") +character = NodePath("../HiroPlayer") +facing_direction = 0 + +[sub_resource type="Resource" id="Resource_dcpj2"] +script = ExtResource("1_r5tuj") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Maybe Nem knows something about where he is."]) +textbox_direction = 0 [resource] resource_name = "prototype_start" script = ExtResource("1_ejncn") -commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_xw6ah"), SubResource("Resource_r2p8t"), SubResource("Resource_fuu2y"), SubResource("Resource_x3xc6"), SubResource("Resource_1sjaa")]) +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_fuu2y"), SubResource("Resource_xw6ah"), SubResource("Resource_grd1k"), SubResource("Resource_oa4lm"), SubResource("Resource_bowq5"), SubResource("Resource_5g2uq"), SubResource("Resource_42rx3"), SubResource("Resource_pit05"), SubResource("Resource_7hpjt"), SubResource("Resource_fo1p1"), SubResource("Resource_dcpj2")]) +auto_start_on_load = true diff --git a/Cutscenes/prototype_talk_to_nem.tres b/Cutscenes/prototype_talk_to_nem.tres new file mode 100644 index 0000000..b2b17c6 --- /dev/null +++ b/Cutscenes/prototype_talk_to_nem.tres @@ -0,0 +1,218 @@ +[gd_resource type="Resource" script_class="Cutscene" load_steps=37 format=3 uid="uid://ck0ry5vxaj8a7"] + +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/lookat_character.gd" id="1_ri0w6"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="2_c1bel"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/move_character.gd" id="3_7tq4l"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/turn_character.gd" id="4_fur8q"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="5_oj3jh"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/emit_message.gd" id="5_t1lmo"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="5_wqnqw"] +[ext_resource type="AudioStream" uid="uid://jlr3b1nye15g" path="res://Audio/BGM/olympus_combat.mp3" id="7_wgiee"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/cue_bgm.gd" id="8_5d7q1"] + +[sub_resource type="Resource" id="Resource_de27e"] +script = ExtResource("1_ri0w6") +character = NodePath(".") +lookat_target = NodePath("../HiroPlayer") + +[sub_resource type="Resource" id="Resource_3bkhm"] +script = ExtResource("1_ri0w6") +character = NodePath("../HiroPlayer") +lookat_target = NodePath(".") + +[sub_resource type="Resource" id="Resource_tgajv"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Hey, Nem! Do you know where Reed might be?"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_qi6iy"] +script = ExtResource("2_c1bel") +character = 2 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Don't worry, he's on his way. It shouldn't take him too long."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_775qe"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["I see...", "(Then I still have some more time to do some more training!)"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_yaf72"] +script = ExtResource("3_7tq4l") +target_character = NodePath("../HiroPlayer") +target_type = "Node" +use_character_speed = true +speed = 300.0 +animation_state = "cut_walk" +target_vector = Vector2(0, 0) +target_node = NodePath("../PositionMarkers/Marker2") + +[sub_resource type="Resource" id="Resource_h8br4"] +script = ExtResource("4_fur8q") +character = NodePath("../HiroPlayer") +facing_direction = 3 + +[sub_resource type="Resource" id="Resource_0c4lk"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["All I have to do is summon my shadow clone!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_83rs0"] +script = ExtResource("5_t1lmo") +message = &"show_clone" + +[sub_resource type="Resource" id="Resource_blakn"] +script = ExtResource("5_oj3jh") +time = 1.0 + +[sub_resource type="Resource" id="Resource_r5wd6"] +script = ExtResource("1_ri0w6") +character = NodePath("../ShadowClone") +lookat_target = NodePath("../HiroPlayer") + +[sub_resource type="Resource" id="Resource_slop4"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["You called?"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_h3k50"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["I've still got some time for a practice match. Let's practice before he gets here!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_wo7y2"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["Let me think about it..."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_hi1ck"] +script = ExtResource("5_oj3jh") +time = 1.51667 + +[sub_resource type="Resource" id="Resource_5ci1l"] +script = ExtResource("4_fur8q") +character = NodePath("../ShadowClone") +facing_direction = 2 + +[sub_resource type="Resource" id="Resource_abui6"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["Nah.", "Don't feel like it. I wanna do something else."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_kb8r5"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Aw, come on! You know how important this is to me!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_8xfaf"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["And what are you gonna do with a last minute sparring? Get injured?"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_4iw0f"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Aaargh! I can't stand you!", "You don't ever listen to me! I'm your creator!"]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_kd0jj"] +script = ExtResource("1_ri0w6") +character = NodePath("../ShadowClone") +lookat_target = NodePath("../HiroPlayer") + +[sub_resource type="Resource" id="Resource_w7l1e"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["You're one to talk."]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_7url7"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Well, I guess I will buy a new gunpla to build. Just for me. ", "And you won't even get to see me making it."]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_efygu"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["Tch! Fine! You asked for it!", "Don't say I warned you! You don't even know how to use the X button to attack!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_u7g7o"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "" +portrait_set = "default" +portrait_emotion = "normal" +messages = Array[String](["Heh. You just told me."]) +textbox_direction = 0 + +[sub_resource type="Resource" id="Resource_ujwnf"] +script = ExtResource("2_c1bel") +character = 0 +custom_name = "Clone" +portrait_set = "clone" +portrait_emotion = "normal" +messages = Array[String](["Rrrrgghhhh!!!!"]) +textbox_direction = 1 + +[sub_resource type="Resource" id="Resource_ts1m3"] +script = ExtResource("8_5d7q1") +music = ExtResource("7_wgiee") +crossfade = true + +[resource] +resource_name = "talking_to_nem" +script = ExtResource("5_wqnqw") +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_de27e"), SubResource("Resource_3bkhm"), SubResource("Resource_tgajv"), SubResource("Resource_qi6iy"), SubResource("Resource_775qe"), SubResource("Resource_yaf72"), SubResource("Resource_h8br4"), SubResource("Resource_0c4lk"), SubResource("Resource_83rs0"), SubResource("Resource_blakn"), SubResource("Resource_r5wd6"), SubResource("Resource_slop4"), SubResource("Resource_h3k50"), SubResource("Resource_wo7y2"), SubResource("Resource_hi1ck"), SubResource("Resource_5ci1l"), SubResource("Resource_abui6"), SubResource("Resource_kb8r5"), SubResource("Resource_8xfaf"), SubResource("Resource_4iw0f"), SubResource("Resource_kd0jj"), SubResource("Resource_w7l1e"), SubResource("Resource_7url7"), SubResource("Resource_efygu"), SubResource("Resource_u7g7o"), SubResource("Resource_ujwnf"), SubResource("Resource_ts1m3")]) +auto_start_on_load = true diff --git a/Hiro/hiro_ai.tscn b/Hiro/hiro_ai.tscn index 145cbac..ecc9f23 100644 --- a/Hiro/hiro_ai.tscn +++ b/Hiro/hiro_ai.tscn @@ -254,8 +254,8 @@ size = Vector2(13, 8) height = 20.0 [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_hxosv"] -radius = 13.0 -height = 36.0 +radius = 9.0 +height = 26.0 [sub_resource type="Resource" id="Resource_ri8lv"] script = ExtResource("9_ak1rc") diff --git a/Hiro/hiro_player.tscn b/Hiro/hiro_player.tscn index e243204..2382812 100644 --- a/Hiro/hiro_player.tscn +++ b/Hiro/hiro_player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=53 format=3 uid="uid://di21xheryhp0k"] +[gd_scene load_steps=58 format=3 uid="uid://di21xheryhp0k"] [ext_resource type="Script" path="res://Scripts/hiro_player.gd" id="1_dtymi"] [ext_resource type="Texture2D" uid="uid://cm7tgomrcvq30" path="res://Hiro/Hiro Walk Sprite Cycle Line Up.png" id="1_ukwcc"] @@ -10,6 +10,29 @@ resource_local_to_scene = true shader = ExtResource("2_tyej0") shader_parameter/FlashColor = Color(1, 0, 0, 0) +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_h73p3"] +animation = &"walking_west" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_vklau"] +animation = &"walking_east" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pw2v4"] +animation = &"walking_south" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_0yei0"] +animation = &"walking_north" + +[sub_resource type="AnimationNodeBlendSpace2D" id="AnimationNodeBlendSpace2D_napge"] +blend_point_0/node = SubResource("AnimationNodeAnimation_h73p3") +blend_point_0/pos = Vector2(-1, 0) +blend_point_1/node = SubResource("AnimationNodeAnimation_vklau") +blend_point_1/pos = Vector2(1, 0) +blend_point_2/node = SubResource("AnimationNodeAnimation_pw2v4") +blend_point_2/pos = Vector2(0, 1) +blend_point_3/node = SubResource("AnimationNodeAnimation_0yei0") +blend_point_3/pos = Vector2(0, -1) +blend_mode = 1 + [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_luptt"] animation = &"player_defeated" @@ -205,6 +228,8 @@ advance_mode = 2 allow_transition_to_self = true states/End/position = Vector2(928, 102) states/Start/position = Vector2(197, 108) +states/cut_walk/node = SubResource("AnimationNodeBlendSpace2D_napge") +states/cut_walk/position = Vector2(581, 289.354) states/defeated/node = SubResource("AnimationNodeAnimation_luptt") states/defeated/position = Vector2(691, 97) states/hurt/node = SubResource("AnimationNodeBlendSpace2D_h2vkc") @@ -220,7 +245,7 @@ states/nsfw_defeated_start/position = Vector2(646, 176.354) states/walk/node = SubResource("AnimationNodeBlendSpace2D_vunsg") states/walk/position = Vector2(520, 108) transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_akmuq"), "idle", "walk", SubResource("AnimationNodeStateMachineTransition_sn1tm"), "walk", "idle", SubResource("AnimationNodeStateMachineTransition_5i3fu"), "idle", "melee", SubResource("AnimationNodeStateMachineTransition_y8p74"), "melee", "idle", SubResource("AnimationNodeStateMachineTransition_l17k0"), "hurt", "idle", SubResource("AnimationNodeStateMachineTransition_ln3pc"), "defeated", "End", SubResource("AnimationNodeStateMachineTransition_ouche"), "nsfw_defeated_start", "nsfw_defeated", SubResource("AnimationNodeStateMachineTransition_aa2bq"), "nsfw_defeated", "End", SubResource("AnimationNodeStateMachineTransition_vxker")] -graph_offset = Vector2(15, 40.3541) +graph_offset = Vector2(61, 90.3541) [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_vm050"] radius = 9.0 @@ -253,6 +278,7 @@ libraries = { tree_root = SubResource("AnimationNodeStateMachine_b2867") parameters/conditions/is_moving = false parameters/conditions/melee = false +parameters/cut_walk/blend_position = Vector2(-0.770558, 0.612335) parameters/hurt/blend_position = Vector2(0.949916, -0.0132159) parameters/idle/blend_position = Vector2(-0.0243112, 0.73545) parameters/melee/blend_position = 0.0 diff --git a/Nem/nem_npc.tscn b/Nem/nem_npc.tscn index 348cfb9..5fce209 100644 --- a/Nem/nem_npc.tscn +++ b/Nem/nem_npc.tscn @@ -1,13 +1,21 @@ -[gd_scene load_steps=3 format=3 uid="uid://b8sfype1vx5ad"] +[gd_scene load_steps=6 format=3 uid="uid://b8sfype1vx5ad"] +[ext_resource type="Script" path="res://Scripts/Characters/base.gd" id="1_r5ls7"] [ext_resource type="Texture2D" uid="uid://dd1j2t2iv02w6" path="res://Nem/Nem Sprite.png" id="1_vjmx4"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_f3edd"] size = Vector2(13, 8) +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_43c7k"] +height = 32.0 + +[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_1sx7r"] + [node name="NemNPC" type="CharacterBody2D"] y_sort_enabled = true +collision_mask = 0 motion_mode = 1 +script = ExtResource("1_r5ls7") [node name="Sprite2D" type="Sprite2D" parent="."] texture_filter = 1 @@ -17,3 +25,18 @@ hframes = 20 [node name="MovementCollider" type="CollisionShape2D" parent="."] shape = SubResource("RectangleShape2D_f3edd") + +[node name="InteractBox" type="Area2D" parent="."] +collision_layer = 4 +collision_mask = 2 + +[node name="Collider" type="CollisionShape2D" parent="InteractBox"] +position = Vector2(0, -13) +shape = SubResource("CapsuleShape2D_43c7k") +debug_color = Color(0.254902, 0.631373, 0.203922, 0.419608) + +[node name="AnimationTree" type="AnimationTree" parent="."] +tree_root = SubResource("AnimationNodeStateMachine_1sx7r") + +[connection signal="area_entered" from="InteractBox" to="." method="_on_interact_box_area_entered"] +[connection signal="area_exited" from="InteractBox" to="." method="_on_interact_box_area_exited"] diff --git a/Portraits/hiro_clone_normal.png b/Portraits/hiro_clone_normal.png new file mode 100644 index 0000000..6f7ea79 --- /dev/null +++ b/Portraits/hiro_clone_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bd66582e7bdc6f74e56d4f9198320d205d26958ab7a26aedc40bbcdb8242205 +size 99214 diff --git a/Portraits/hiro_clone_normal.png.import b/Portraits/hiro_clone_normal.png.import new file mode 100644 index 0000000..9cc95d4 --- /dev/null +++ b/Portraits/hiro_clone_normal.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bieetcn6fegsy" +path="res://.godot/imported/hiro_clone_normal.png-85bac666788de2690c53e863a43f0780.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Portraits/hiro_clone_normal.png" +dest_files=["res://.godot/imported/hiro_clone_normal.png-85bac666788de2690c53e863a43f0780.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 diff --git a/Reed/reed_ai.tscn b/Reed/reed_ai.tscn index 6531328..3023af7 100644 --- a/Reed/reed_ai.tscn +++ b/Reed/reed_ai.tscn @@ -265,19 +265,6 @@ y_sort_enabled = true collision_layer = 5 motion_mode = 1 script = ExtResource("1_yavbv") -KNOCKBACK_REPOSITION_POWER = null -MELEE_RADIUS = null -chase_speed = null -approach_speed = null -min_recoil_time = null -max_recoil_time = null -reduce_recoil_time_threshold = null -speed = null -max_health = null -health = null -attack_power = null -KNOCKBACK_POWER = null -KNOCKBACK_RANDOMNESS = null [node name="Sprite2D" type="Sprite2D" parent="."] texture_filter = 1 diff --git a/Scripts/Characters/base.gd b/Scripts/Characters/base.gd index a6088c6..8595f2c 100644 --- a/Scripts/Characters/base.gd +++ b/Scripts/Characters/base.gd @@ -2,6 +2,7 @@ extends CharacterBody2D class_name CharacterBase @export_group("Movement") +@export var movable = true @export_range(1.0, 999999.9, 0.1) var speed: float = 100.0 @export_group("Combat") @export var max_health: int = 100 @@ -9,6 +10,8 @@ class_name CharacterBase @export var attack_power: int = 30 @export var KNOCKBACK_POWER: float = 40 @export var KNOCKBACK_RANDOMNESS: float = 50 +@export_group("Interactions") +@export var interaction_cutscene: Cutscene @export_group("Animations") @export var has_nsfw_animations = false @@ -30,7 +33,8 @@ func set_animation_direction(direction: Vector2): pass func _physics_process(_delta): - move_and_slide() + if movable: + move_and_slide() func _on_animation_tree_animation_finished(anim_name): pass @@ -54,3 +58,17 @@ func _on_cutscene_issued_command(command: CutsceneCommand, manager: CutsceneMana movement_scripted_by = manager movement_scripted_speed = command.speed anim_playback.travel(command.animation_state) + + +func _on_interact_box_area_entered(area: Area2D): + var parent = area.get_parent() + if parent is PlayableCharacter: + parent.interactable_object = self + parent.interactable_object_cutscene = interaction_cutscene + +func _on_interact_box_area_exited(area): + var parent = area.get_parent() + if parent is PlayableCharacter: + if parent.interactable_object_cutscene == interaction_cutscene: + parent.interactable_object = null + parent.interactable_object_cutscene = null diff --git a/Scripts/Cutscenes/Commands/lookat_character.gd b/Scripts/Cutscenes/Commands/lookat_character.gd index 0af37ce..ff65ef8 100644 --- a/Scripts/Cutscenes/Commands/lookat_character.gd +++ b/Scripts/Cutscenes/Commands/lookat_character.gd @@ -4,7 +4,7 @@ class_name LookAtTargetCommand extends CutsceneCommand @export_node_path("Node2D") var lookat_target: NodePath func get_direction(manager: CutsceneManager) -> Vector2: - var target_character: CharacterBody2D = manager.get_node(character) - var target_position: Node2D = manager.get_node(lookat_target) + var target_character: CharacterBody2D = manager.root.get_node(character) + var target_position: Node2D = manager.root.get_node(lookat_target) assert(target_character != target_position) return target_character.global_position.direction_to(target_position.global_position) diff --git a/Scripts/Cutscenes/Commands/show_dialogue.gd b/Scripts/Cutscenes/Commands/show_dialogue.gd index f27c704..b466e71 100644 --- a/Scripts/Cutscenes/Commands/show_dialogue.gd +++ b/Scripts/Cutscenes/Commands/show_dialogue.gd @@ -7,6 +7,7 @@ enum TextboxDirection { } @export var character: Util.CastCharacter +@export var custom_name: String = "" @export var portrait_set: String = "default" @export var portrait_emotion: String = "normal" @export var messages: Array[String] = [] diff --git a/Scripts/Cutscenes/cutscene.gd b/Scripts/Cutscenes/cutscene.gd index be7b768..07a0fc3 100644 --- a/Scripts/Cutscenes/cutscene.gd +++ b/Scripts/Cutscenes/cutscene.gd @@ -2,3 +2,4 @@ extends Resource class_name Cutscene @export var commands: Array[CutsceneCommand] = [] +@export var auto_start_on_load = true diff --git a/Scripts/Cutscenes/manager.gd b/Scripts/Cutscenes/manager.gd index 6072378..bf6eeaf 100644 --- a/Scripts/Cutscenes/manager.gd +++ b/Scripts/Cutscenes/manager.gd @@ -13,6 +13,8 @@ var is_running = false var _current_command: CutsceneCommand: get = get_current_command var _inner_timer = 0.0 +var root: Node = self + func _process(delta): if _inner_timer > 0.0: _inner_timer -= delta @@ -34,11 +36,12 @@ func step() -> void: _current_command = cutscene.commands[_step] issued_command.emit(_current_command, self) -func load_cutscene(new_cutscene: Cutscene) -> void: +func load_cutscene(new_cutscene: Cutscene, root_node: Node = null) -> void: cutscene = new_cutscene _step = -1 is_running = false - loaded.emit(cutscene.resource_name) + root = root_node if root_node != null else self + loaded.emit(cutscene.resource_name, cutscene.auto_start_on_load) func _on_ui_dialogue_completed(): step() diff --git a/Scripts/Levels/arena_level.gd b/Scripts/Levels/arena_level.gd index c5d31b0..ec56383 100644 --- a/Scripts/Levels/arena_level.gd +++ b/Scripts/Levels/arena_level.gd @@ -3,43 +3,119 @@ extends Node2D @onready var game_state = $GameState @onready var explosion_generator = $ExplosionGenerator @onready var battle_ui = $CanvasLayer/BattleUI -@onready var player = $HiroPlayer -@onready var ai = $ReedAI +@onready var player: PlayableCharacter = $HiroPlayer +@onready var hiro_ai: AICharacter = $ShadowClone +@onready var reed_ai : AICharacter = $ReedAI +@onready var nem_npc = $NemNPC @onready var cutscene_manager = $CutsceneManager @onready var sound_manager = $SoundManager +@onready var fader_animation = $TextboxUI/Control/FaderRect/AnimationPlayer +@onready var barrier = $Barrier + +@export var stage = 1 func _ready(): - battle_ui.initialize(player.health, ai.health) - battle_ui.set_player_health(player.health) - battle_ui.set_enemy_health(ai.health) - cutscene_manager.step() + battle_ui.initialize(player, hiro_ai) + battle_ui.set_enemy_health_visible(false) + hiro_ai.set_melee_box_enabled(false) + fader_animation.play("fade_in_white") + if cutscene_manager.cutscene != null and cutscene_manager.cutscene.auto_start_on_load: + cutscene_manager.step() func _on_player_defeated(): - if Globals.nsfw == true: - sound_manager.play_sound("effect_smoke") - explosion_generator.spawn(player.position) - var cutscene = load("res://Cutscenes/prototype_defeated.tres") - cutscene_manager.load_cutscene(cutscene) - cutscene_manager.step() + if stage == 1: + cutscene_manager.load_cutscene(load("res://Cutscenes/prototype_clone_defeated.tres")) + elif stage == 2: + if Globals.nsfw == true: + sound_manager.play_sound("effect_smoke") + explosion_generator.spawn(player.position) + var variation = "nsfw" if Globals.nsfw else "normal" + var outcome = "defeated" if reed_ai.health > 0 else "draw" + var cutscene = "res://Cutscenes/prototype_reed_{0}_{1}.tres".format([outcome, variation]) + cutscene_manager.load_cutscene(load(cutscene)) -func _on_cutscene_started(cutscene_name): - player.can_move = false +func _on_cutscene_started(_cutscene_name): + print("Cutscene " + _cutscene_name + " started") + player.in_cutscene = true + player.velocity = Vector2.ZERO game_state.can_pause = false - if cutscene_name == "prototype_start": - ai.set_ai_enabled(false) + reed_ai.velocity = Vector2.ZERO + hiro_ai.velocity = Vector2.ZERO + reed_ai.set_ai_enabled(false) + hiro_ai.set_ai_enabled(false) func _on_cutscene_finished(cutscene_name: String): print("Cutscene " + cutscene_name + " finished") - player.can_move = true + player.in_cutscene = false game_state.can_pause = true - if cutscene_name == "prototype_start": - ai.set_ai_enabled(true) + if cutscene_name == "talking_to_nem": + nem_npc.interaction_cutscene = null + hiro_ai.set_ai_enabled(true) + battle_ui.set_enemy_health_visible(true) + barrier.process_mode = Node.PROCESS_MODE_INHERIT + elif cutscene_name == "prototype_clone_defeated": + reed_ai.set_ai_enabled(true) + battle_ui.set_enemy_health_visible(true) + barrier.process_mode = Node.PROCESS_MODE_INHERIT func _on_cutscene_manager_issued_command(command: CutsceneCommand, manager: CutsceneManager): if command is TurnCharacterCommand or command is LookAtTargetCommand: - var character: CharacterBase = manager.get_node(command.character) + var character: CharacterBase = manager.root.get_node(command.character) var face_direction: Vector2 = command.get_direction(manager) assert(character is CharacterBase) character.set_animation_direction(face_direction) manager.step() + elif command is EmitMessageCommand: + if command.message == "show_clone": + hiro_ai.global_position = $PositionMarkers/Marker3.global_position + explosion_generator.spawn(hiro_ai.global_position) + hiro_ai.set_melee_box_enabled(true) + manager.step() + if command.message == "hide_clone": + sound_manager.play_sound("effect_smoke") + explosion_generator.spawn(hiro_ai.global_position) + hiro_ai.global_position = Vector2(1000, 1000) + hiro_ai.set_ai_enabled(false) + hiro_ai.set_melee_box_enabled(false) + battle_ui.set_enemy_health_visible(false) + manager.step() + elif command.message == "show_reed": + reed_ai.global_position = Vector2(0, 100) + reed_ai.get_node("MovementCollider").disabled = true + reed_ai.set_melee_box_enabled(false) + manager.step() + elif command.message == "fade_out": + fader_animation.play("fade_out_black") + manager.step() + elif command.message == "fade_in": + fader_animation.play("fade_in_black") + manager.step() + elif command.message == "scene_2": + stage = 2 + player.health = player.max_health + battle_ui.initialize(player, reed_ai) + reed_ai.global_position = $PositionMarkers/Marker3.global_position + player.global_position = $PositionMarkers/Marker2.global_position + player.set_animation_direction(Vector2.RIGHT) + player.has_nsfw_animations = Globals.nsfw + reed_ai.set_animation_direction(Vector2.LEFT) + $NPCs.visible = true + reed_ai.set_melee_box_enabled(true) + reed_ai.get_node("MovementCollider").disabled = false + manager.step() + +func _on_player_interacted_with_object(object: Node, interaction: Cutscene): + cutscene_manager.load_cutscene(interaction, object) + +func _on_cutscene_loaded(cutscene_name: String, auto_start: bool): + if auto_start: + cutscene_manager.step() + +func _on_shadow_clone_defeated(): + barrier.process_mode = Node.PROCESS_MODE_DISABLED + cutscene_manager.load_cutscene(load("res://Cutscenes/prototype_clone_victory.tres")) + +func _on_reed_ai_defeated(): + if player.health > 0: + cutscene_manager.load_cutscene(load("res://Cutscenes/prototype_reed_victory.tres")) diff --git a/Scripts/UI/textbox.gd b/Scripts/UI/textbox.gd index c49532c..c5558f1 100644 --- a/Scripts/UI/textbox.gd +++ b/Scripts/UI/textbox.gd @@ -25,13 +25,17 @@ enum TextboxDirection { const CAST_PORTRAITS = [ "hiro", "reed", - "nem" + "nem", + "sam", + "sevi" ] const CAST_NAMES = [ "HIRO", "REED", - "NEM" + "NEM", + "SAM", + "SEVI" ] signal dialogue_started @@ -79,11 +83,12 @@ func _input(event): get_viewport().set_input_as_handled() dialogue_continued.emit() -func _dialogue_start(who: Util.CastCharacter, portrait_set: String, portrait_emotion: String, dialogue: Array[String], direction: TextboxDirection): +func _dialogue_start(who: Util.CastCharacter, custom_name: String, portrait_set: String, portrait_emotion: String, dialogue: Array[String], direction: TextboxDirection): + var name = custom_name.to_upper() if custom_name != "" else CAST_NAMES[who] _next = 0 _direction = direction _dialogue = dialogue - _text = "{name}: {text}".format({"name": CAST_NAMES[who], "text": _dialogue[_next]}) + _text = "{name}: {text}".format({"name": name, "text": _dialogue[_next]}) _display_text = "" var portrait_texture = load("res://Portraits/{0}_{1}_{2}.png".format([CAST_PORTRAITS[who], portrait_set, portrait_emotion])) for portrait in _portraits: @@ -116,4 +121,4 @@ func _on_animation_finished(anim_name: StringName): func _on_cutscene_command_issued(command: CutsceneCommand, _manager: CutsceneManager): if command is ShowDialogueCommand: - _dialogue_start(command.character, command.portrait_set, command.portrait_emotion, command.messages, command.textbox_direction) + _dialogue_start(command.character, command.custom_name, command.portrait_set, command.portrait_emotion, command.messages, command.textbox_direction) diff --git a/Scripts/hiro_player.gd b/Scripts/hiro_player.gd index 1e391d6..3e8d281 100644 --- a/Scripts/hiro_player.gd +++ b/Scripts/hiro_player.gd @@ -10,20 +10,29 @@ var last_dpad: Array[Vector2] = [Vector2.ZERO,Vector2.ZERO] @onready var hitbox_collider = $Attackbox/Collider var can_move = true +var in_cutscene = false + +var interactable_object: Node = null +var interactable_object_cutscene: Cutscene = null + +signal interacted_with_object(object: Node, interaction: Cutscene) func _unhandled_input(event): - if event.is_action_pressed("melee") and can_move: - var animation_rng = randf_range(0, 1) - anim_tree.set("parameters/melee/blend_position", animation_rng) - anim_tree.set("parameters/conditions/melee", true) - can_move = false - velocity = Vector2.ZERO - attacked.emit() + if event.is_action_pressed("melee") and can_move and not in_cutscene: + if interactable_object != null and interactable_object_cutscene != null: + interacted_with_object.emit(interactable_object, interactable_object_cutscene) + else: + var animation_rng = randf_range(0, 1) + anim_tree.set("parameters/melee/blend_position", animation_rng) + anim_tree.set("parameters/conditions/melee", true) + can_move = false + velocity = Vector2.ZERO + attacked.emit() func _process(_delta): if movement_scripted_by != null: var distance_to_target = movement_scripted_target.distance_to(global_position) - if distance_to_target <= movement_scripted_speed/100.0: + if distance_to_target <= movement_scripted_speed/60.0: global_position = movement_scripted_target velocity = Vector2.ZERO movement_scripted_by.step() @@ -31,7 +40,11 @@ func _process(_delta): anim_playback.travel("idle") func _physics_process(delta): - get_input() + if in_cutscene: + anim_tree.set("parameters/conditions/is_moving", false) + anim_tree.set("parameters/conditions/melee", false) + else: + get_input() super._physics_process(delta) func set_animation_direction(direction: Vector2): @@ -41,6 +54,7 @@ func set_animation_direction(direction: Vector2): anim_tree.set("parameters/melee/1/blend_position", direction) anim_tree.set("parameters/melee/2/blend_position", direction) anim_tree.set("parameters/hurt/blend_position", direction) + anim_tree.set("parameters/cut_walk/blend_position", direction) func xor(a:bool, b:bool): return a != b @@ -61,7 +75,7 @@ func get_input(): last_dpad[0] = input_direction if last_dpad[0] == Vector2.ZERO and input_direction != Vector2.ZERO: last_dpad[0] = input_direction - + if not can_move: input_direction = Vector2.ZERO last_dpad[0] = Vector2.ZERO @@ -86,7 +100,7 @@ func _on_enemy_attack_did_hit(other, power, attack_direction): health = health - power can_move = false if health <= 0: - if Globals.nsfw: + if Globals.nsfw and has_nsfw_animations: anim_playback.travel("nsfw_defeated_start") else: anim_playback.travel("defeated") diff --git a/Scripts/ui.gd b/Scripts/ui.gd index c74adcd..d1e6096 100644 --- a/Scripts/ui.gd +++ b/Scripts/ui.gd @@ -3,15 +3,20 @@ extends Control @onready var player_health_bar: ProgressBar = $MarginContainer/HBoxContainer/HealthBar @onready var enemy_health_bar: ProgressBar = $MarginContainer/HBoxContainer/EnemyBar -func initialize(player_max_health: int, enemy_max_health: int): - player_health_bar.max_value = player_max_health - enemy_health_bar.max_value = enemy_max_health +func initialize(player: PlayableCharacter, enemy: AICharacter): + player_health_bar.max_value = player.max_health + player_health_bar.value = player.health + enemy_health_bar.max_value = enemy.max_health + enemy_health_bar.value = enemy.health func set_player_health(value: int): player_health_bar.value = value func set_enemy_health(value: int): enemy_health_bar.value = value + +func set_enemy_health_visible(value: bool): + enemy_health_bar.modulate = Color.WHITE if value else Color.TRANSPARENT func _on_player_got_hurt(new_health: int): set_player_health(new_health) diff --git a/Scripts/util.gd b/Scripts/util.gd index e77f8e2..a9f8d1b 100644 --- a/Scripts/util.gd +++ b/Scripts/util.gd @@ -4,7 +4,9 @@ class_name Util enum CastCharacter { hiro, reed, - nem + nem, + sam, + sevi, } enum CardinalDirection { diff --git a/UI/textbox_ui.tscn b/UI/textbox_ui.tscn index 2ea9c3e..a7381f2 100644 --- a/UI/textbox_ui.tscn +++ b/UI/textbox_ui.tscn @@ -197,7 +197,8 @@ layout_mode = 3 anchors_preset = 1 anchor_left = 1.0 anchor_right = 1.0 -offset_right = 720.0 +offset_left = 720.0 +offset_right = 1440.0 offset_bottom = 480.0 grow_horizontal = 0 diff --git a/project.godot b/project.godot index 6e383d7..0a8f60e 100644 --- a/project.godot +++ b/project.godot @@ -42,6 +42,7 @@ ui_accept={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null) ] } ui_left={ diff --git a/world/world.tscn b/world/world.tscn index 41764de..ec518b4 100644 --- a/world/world.tscn +++ b/world/world.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=3 uid="uid://bxuxjqxxqy7ce"] +[gd_scene load_steps=38 format=3 uid="uid://bxuxjqxxqy7ce"] [ext_resource type="PackedScene" uid="uid://di21xheryhp0k" path="res://Hiro/hiro_player.tscn" id="1_c1gpq"] [ext_resource type="PackedScene" uid="uid://b8sfype1vx5ad" path="res://Nem/nem_npc.tscn" id="1_sqt7d"] @@ -6,6 +6,7 @@ [ext_resource type="FontFile" uid="uid://bgqotudi6bifk" path="res://UI/Gundam 00 font gaufont.ttf" id="2_64thh"] [ext_resource type="Script" path="res://Scripts/UI/pause_menu.gd" id="2_nw73f"] [ext_resource type="PackedScene" uid="uid://bcwkugn6v3oy7" path="res://addons/godot_state_charts/utilities/state_chart_debugger.tscn" id="2_o5str"] +[ext_resource type="Resource" uid="uid://bj3rm1r1ouq0r" path="res://Cutscenes/prototype_start.tres" id="3_teat4"] [ext_resource type="Texture2D" uid="uid://b40la2vyf4rn6" path="res://world/Fighting Dojo BG.png" id="4_elb6q"] [ext_resource type="Texture2D" uid="uid://dc12iaho4b8yl" path="res://world/walls.png" id="7_pp5dn"] [ext_resource type="PackedScene" uid="uid://c503u0i421w34" path="res://world/pillar.tscn" id="8_mxq55"] @@ -13,17 +14,18 @@ [ext_resource type="PackedScene" uid="uid://ce2tjyxwaar01" path="res://UI/battle_ui.tscn" id="10_hxn8m"] [ext_resource type="Texture2D" uid="uid://b7l1k8j3ie4qi" path="res://NPCs/npc1.png" id="11_p77ah"] [ext_resource type="PackedScene" uid="uid://7oi3hcf5q4o7" path="res://UI/textbox_ui.tscn" id="12_8pgvx"] +[ext_resource type="Resource" uid="uid://ck0ry5vxaj8a7" path="res://Cutscenes/prototype_talk_to_nem.tres" id="12_cb4j5"] [ext_resource type="Texture2D" uid="uid://dym70eidamyel" path="res://NPCs/npc2.png" id="12_mlj32"] [ext_resource type="Texture2D" uid="uid://y31qyw51y7hb" path="res://NPCs/npc3.png" id="13_6g4gt"] [ext_resource type="Texture2D" uid="uid://jnub86bpiebw" path="res://NPCs/npc4.png" id="14_46hs3"] [ext_resource type="Texture2D" uid="uid://baw6gijyxv1fv" path="res://NPCs/npc5.png" id="15_ppm1i"] [ext_resource type="Texture2D" uid="uid://bcvxfjlg8mmjr" path="res://NPCs/npc6.png" id="16_cgyrp"] [ext_resource type="Script" path="res://Scripts/Cutscenes/manager.gd" id="19_5yvrq"] -[ext_resource type="Resource" uid="uid://bj3rm1r1ouq0r" path="res://Cutscenes/prototype_start.tres" id="20_elypl"] [ext_resource type="PackedScene" uid="uid://bwrwh5of0jw4a" path="res://Reed/reed_ai.tscn" id="21_dioix"] [ext_resource type="PackedScene" uid="uid://81jm7ixvk25n" path="res://Audio/music_manager.tscn" id="24_03wyf"] [ext_resource type="Script" path="res://Scripts/game_state.gd" id="24_6ypry"] [ext_resource type="PackedScene" uid="uid://bbybt6r6351yp" path="res://Audio/sound_manager.tscn" id="25_hm8b0"] +[ext_resource type="PackedScene" uid="uid://dd2km6qhpdicx" path="res://Hiro/hiro_ai.tscn" id="30_le27a"] [sub_resource type="LabelSettings" id="LabelSettings_f2g0a"] font = ExtResource("2_64thh") @@ -32,16 +34,106 @@ shadow_size = 10 shadow_color = Color(0, 0, 0, 0.501961) shadow_offset = Vector2(5, 5) +[sub_resource type="Animation" id="Animation_lyxis"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_cmsfg"] +resource_name = "fade_in_black" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(2.71828, 0.367879), +"update": 0, +"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_1wxtl"] +resource_name = "fade_in_white" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 2.71828), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} + +[sub_resource type="Animation" id="Animation_b6gpx"] +resource_name = "fade_out_black" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(0.367879, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_oss1s"] +_data = { +"RESET": SubResource("Animation_lyxis"), +"fade_in_black": SubResource("Animation_cmsfg"), +"fade_in_white": SubResource("Animation_1wxtl"), +"fade_out_black": SubResource("Animation_b6gpx") +} + [sub_resource type="Gradient" id="Gradient_3ox2i"] colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1) [sub_resource type="GradientTexture1D" id="GradientTexture1D_4uhai"] gradient = SubResource("Gradient_3ox2i") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_c5p72"] +size = Vector2(47, 211) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ledaf"] +size = Vector2(56, 210) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_hkvwf"] +size = Vector2(194, 55) + [node name="Level" type="Node2D"] y_sort_enabled = true script = ExtResource("1_y634h") +[node name="CutsceneManager" type="Node" parent="."] +script = ExtResource("19_5yvrq") +cutscene = ExtResource("3_teat4") + +[node name="MusicManager" parent="." instance=ExtResource("24_03wyf")] + +[node name="SoundManager" parent="." instance=ExtResource("25_hm8b0")] + +[node name="GameState" type="Node" parent="."] +process_mode = 3 +script = ExtResource("24_6ypry") + [node name="PauseMenu" type="CanvasLayer" parent="."] process_mode = 2 layer = 3 @@ -74,9 +166,34 @@ text = "PAUSED" label_settings = SubResource("LabelSettings_f2g0a") [node name="TextboxUI" parent="." instance=ExtResource("12_8pgvx")] -layer = 2 +layer = 3 cps = 100.0 +[node name="Control" type="Control" parent="TextboxUI"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="FaderRect" type="ColorRect" parent="TextboxUI/Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +color = Color(0, 0, 0, 0) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="TextboxUI/Control/FaderRect"] +libraries = { +"": SubResource("AnimationLibrary_oss1s") +} + +[node name="Fades" type="CanvasLayer" parent="."] + [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="BattleUI" parent="CanvasLayer" instance=ExtResource("10_hxn8m")] @@ -97,6 +214,7 @@ offset_bottom = 155.0 scale = Vector2(0.75, 0.75) size_flags_horizontal = 0 enabled = false +initial_node_to_watch = NodePath("../../../ReedAI") [node name="MapElements" type="Node2D" parent="."] y_sort_enabled = true @@ -153,7 +271,8 @@ position = Vector2(137, 199) texture = ExtResource("7_pp5dn") [node name="HiroPlayer" parent="." instance=ExtResource("1_c1gpq")] -position = Vector2(-44, -12) +position = Vector2(0, 80) +has_nsfw_animations = false [node name="Camera2D" type="Camera2D" parent="HiroPlayer"] texture_filter = 1 @@ -161,9 +280,33 @@ offset = Vector2(0, -12) zoom = Vector2(2, 2) position_smoothing_enabled = true position_smoothing_speed = 3.0 +metadata/_edit_lock_ = true [node name="NemNPC" parent="." instance=ExtResource("1_sqt7d")] position = Vector2(2, -78) +movable = false +interaction_cutscene = ExtResource("12_cb4j5") + +[node name="ShadowClone" parent="." node_paths=PackedStringArray("player_character") instance=ExtResource("30_le27a")] +position = Vector2(75, 285) +player_character = NodePath("../HiroPlayer") +MELEE_RADIUS = 200 +chase_speed = 40 +approach_speed = 25 +min_recoil_time = 0.15 +max_recoil_time = 2.0 +reduce_recoil_time_threshold = 0.5 +attack_power = 10 + +[node name="ReedAI" parent="." node_paths=PackedStringArray("player_character") instance=ExtResource("21_dioix")] +position = Vector2(-55, 283) +player_character = NodePath("../HiroPlayer") +KNOCKBACK_REPOSITION_POWER = 90 +MELEE_RADIUS = 300 +reduce_recoil_time_threshold = 0.75 +max_health = 400 +health = 400 +attack_power = 10 [node name="BG Collissions" type="StaticBody2D" parent="."] z_index = 2 @@ -172,6 +315,7 @@ collision_layer = 17 collision_mask = 17 [node name="Floor Collission" type="CollisionPolygon2D" parent="BG Collissions"] +visible = false position = Vector2(-1341, -243) scale = Vector2(8.83789, 4.22585) polygon = PackedVector2Array(158.522, 76.9076, 161.916, 75.961, 172.213, 75.961, 175.834, 76.671, 177.757, 78.5641, 179.341, 82.8236, 180.134, 85.8999, 180.134, 93.9456, 180.134, 114.06, 179.341, 117.373, 177.871, 119.739, 174.929, 120.922, 169.497, 120.922, 169.497, 123.525, 164.745, 123.525, 164.632, 120.922, 159.201, 120.922, 156.372, 120.213, 154.901, 117.373, 154.109, 113.587, 154.109, 94.1822, 154.109, 86.1365, 152.186, 83.0602, 152.412, 80.9304, 146.181, 70.3743, 139.513, 85.4266, 135.779, 90.8692, 147.66, 124.945, 187.367, 125.038, 195.514, 91.4351, 192.232, 66.1148, 173.676, 53.3363, 157.382, 53.8096, 152.404, 63.2751, 153.317, 81.6403, 154.109, 85.8999, 154.901, 83.2969, 156.485, 78.5641) @@ -216,54 +360,72 @@ texture = ExtResource("16_cgyrp") [node name="Marker1" type="Marker2D" parent="PositionMarkers"] -[node name="CutsceneManager" type="Node" parent="."] -script = ExtResource("19_5yvrq") -cutscene = ExtResource("20_elypl") +[node name="Marker2" type="Marker2D" parent="PositionMarkers"] +position = Vector2(-50, 5) -[node name="ReedAI" parent="." node_paths=PackedStringArray("player_character") instance=ExtResource("21_dioix")] -position = Vector2(44, -12) -player_character = NodePath("../HiroPlayer") -KNOCKBACK_REPOSITION_POWER = 90 -MELEE_RADIUS = 300 -chase_speed = 65 -approach_speed = 40 -min_recoil_time = 0.05 -max_recoil_time = 1.0 -reduce_recoil_time_threshold = 0.75 -max_health = 400 -health = 400 -attack_power = 10 -KNOCKBACK_POWER = 40.0 -KNOCKBACK_RANDOMNESS = 50.0 +[node name="Marker3" type="Marker2D" parent="PositionMarkers"] +position = Vector2(50, 5) -[node name="MusicManager" parent="." instance=ExtResource("24_03wyf")] +[node name="Marker0" type="Marker2D" parent="PositionMarkers"] +position = Vector2(0, 80) -[node name="SoundManager" parent="." instance=ExtResource("25_hm8b0")] +[node name="Barrier" type="StaticBody2D" parent="."] +process_mode = 4 +collision_layer = 17 +collision_mask = 17 -[node name="GameState" type="Node" parent="."] -process_mode = 3 -script = ExtResource("24_6ypry") +[node name="CollisionShape2D" type="CollisionShape2D" parent="Barrier"] +position = Vector2(-107.5, -19.5) +shape = SubResource("RectangleShape2D_c5p72") +[node name="CollisionShape2D2" type="CollisionShape2D" parent="Barrier"] +position = Vector2(113, -20) +shape = SubResource("RectangleShape2D_ledaf") + +[node name="CollisionShape2D3" type="CollisionShape2D" parent="Barrier"] +position = Vector2(-9, -97.5) +shape = SubResource("RectangleShape2D_hkvwf") + +[node name="CollisionShape2D4" type="CollisionPolygon2D" parent="Barrier"] +polygon = PackedVector2Array(-84, -31, -76, -57, -43, -71, -84, -71) + +[node name="CollisionShape2D5" type="CollisionPolygon2D" parent="Barrier"] +position = Vector2(14, 13) +rotation = 1.5708 +polygon = PackedVector2Array(-84, -31, -76, -57, -43, -71, -84, -71) + +[connection signal="finished" from="CutsceneManager" to="." method="_on_cutscene_finished"] +[connection signal="issued_command" from="CutsceneManager" to="." method="_on_cutscene_manager_issued_command"] +[connection signal="issued_command" from="CutsceneManager" to="CutsceneManager" method="_on_issued_command"] +[connection signal="issued_command" from="CutsceneManager" to="MusicManager" method="_on_cutscene_issued_command"] +[connection signal="issued_command" from="CutsceneManager" to="TextboxUI" method="_on_cutscene_command_issued"] +[connection signal="issued_command" from="CutsceneManager" to="HiroPlayer" method="_on_cutscene_issued_command"] +[connection signal="issued_command" from="CutsceneManager" to="ReedAI" method="_on_cutscene_issued_command"] +[connection signal="loaded" from="CutsceneManager" to="." method="_on_cutscene_loaded"] +[connection signal="started" from="CutsceneManager" to="." method="_on_cutscene_started"] +[connection signal="game_pause_toggled" from="GameState" to="MusicManager" method="_on_game_pause_toggled"] +[connection signal="game_pause_toggled" from="GameState" to="SoundManager" method="_on_game_pause_toggled"] +[connection signal="game_pause_toggled" from="GameState" to="PauseMenu" method="_on_game_pause_toggled"] [connection signal="game_unpause_queued" from="PauseMenu" to="GameState" method="_on_game_unpause_queued"] [connection signal="dialogue_completed" from="TextboxUI" to="CutsceneManager" method="_on_ui_dialogue_completed"] [connection signal="dialogue_continued" from="TextboxUI" to="SoundManager" method="_on_ui_dialogue_continued"] [connection signal="dialogue_opened" from="TextboxUI" to="SoundManager" method="_on_ui_dialogue_opened"] +[connection signal="attack_did_hit" from="HiroPlayer" to="ShadowClone" method="_on_player_attack_did_hit"] [connection signal="attack_did_hit" from="HiroPlayer" to="ReedAI" method="_on_player_attack_did_hit"] [connection signal="attacked" from="HiroPlayer" to="SoundManager" method="_on_humanoid_character_attacked"] -[connection signal="defeated" from="HiroPlayer" to="." method="_on_player_defeated"] +[connection signal="defeated" from="HiroPlayer" to="." method="_on_player_defeated" flags=6] +[connection signal="defeated" from="HiroPlayer" to="ShadowClone" method="_on_player_been_defeated"] [connection signal="defeated" from="HiroPlayer" to="ReedAI" method="_on_player_been_defeated"] -[connection signal="got_hurt" from="HiroPlayer" to="CanvasLayer/BattleUI" method="_on_player_got_hurt"] [connection signal="got_hurt" from="HiroPlayer" to="SoundManager" method="_on_character_got_hurt"] -[connection signal="finished" from="CutsceneManager" to="." method="_on_cutscene_finished"] -[connection signal="issued_command" from="CutsceneManager" to="." method="_on_cutscene_manager_issued_command"] -[connection signal="issued_command" from="CutsceneManager" to="TextboxUI" method="_on_cutscene_command_issued"] -[connection signal="issued_command" from="CutsceneManager" to="CutsceneManager" method="_on_issued_command"] -[connection signal="issued_command" from="CutsceneManager" to="MusicManager" method="_on_cutscene_issued_command"] -[connection signal="started" from="CutsceneManager" to="." method="_on_cutscene_started"] +[connection signal="got_hurt" from="HiroPlayer" to="CanvasLayer/BattleUI" method="_on_player_got_hurt"] +[connection signal="interacted_with_object" from="HiroPlayer" to="." method="_on_player_interacted_with_object"] +[connection signal="attack_did_hit" from="ShadowClone" to="HiroPlayer" method="_on_enemy_attack_did_hit"] +[connection signal="attacked" from="ShadowClone" to="SoundManager" method="_on_humanoid_character_attacked"] +[connection signal="defeated" from="ShadowClone" to="." method="_on_shadow_clone_defeated"] +[connection signal="got_hurt" from="ShadowClone" to="SoundManager" method="_on_character_got_hurt"] +[connection signal="got_hurt" from="ShadowClone" to="CanvasLayer/BattleUI" method="_on_enemy_got_hurt"] [connection signal="attack_did_hit" from="ReedAI" to="HiroPlayer" method="_on_enemy_attack_did_hit"] [connection signal="attacked" from="ReedAI" to="SoundManager" method="_on_humanoid_character_attacked"] -[connection signal="got_hurt" from="ReedAI" to="CanvasLayer/BattleUI" method="_on_enemy_got_hurt"] +[connection signal="defeated" from="ReedAI" to="." method="_on_reed_ai_defeated" flags=7] [connection signal="got_hurt" from="ReedAI" to="SoundManager" method="_on_character_got_hurt"] -[connection signal="game_pause_toggled" from="GameState" to="PauseMenu" method="_on_game_pause_toggled"] -[connection signal="game_pause_toggled" from="GameState" to="MusicManager" method="_on_game_pause_toggled"] -[connection signal="game_pause_toggled" from="GameState" to="SoundManager" method="_on_game_pause_toggled"] +[connection signal="got_hurt" from="ReedAI" to="CanvasLayer/BattleUI" method="_on_enemy_got_hurt"]