Finalize cutscene system (for now)

This commit is contained in:
Mario Martínez 2024-10-14 13:29:39 +02:00
parent 20000c1c51
commit d34ee246b9
30 changed files with 1255 additions and 149 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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")])

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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")

View file

@ -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

View file

@ -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"]

BIN
Portraits/hiro_clone_normal.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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] = []

View file

@ -2,3 +2,4 @@ extends Resource
class_name Cutscene
@export var commands: Array[CutsceneCommand] = []
@export var auto_start_on_load = true

View file

@ -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()

View file

@ -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"))

View file

@ -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)

View file

@ -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")

View file

@ -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)

View file

@ -4,7 +4,9 @@ class_name Util
enum CastCharacter {
hiro,
reed,
nem
nem,
sam,
sevi,
}
enum CardinalDirection {

View file

@ -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

View file

@ -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={

View file

@ -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"]