From 6b5f8dd609594989176d3227a1a340864f6ea4e6 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Mon, 29 Jan 2024 20:05:17 -0700 Subject: [PATCH] tophud (wip) --- global.gd | 7 +- levels/Testrooms/lilytest.gd | 12 + levels/Testrooms/lilytest.tscn | 4 +- levels/ui/gameplay.gd | 18 +- levels/ui/talk.gd | 4 +- levels/ui/tophud.gd | 134 ++++++++ levels/ui/tophud.tscn | 379 +++++++++++++++++++++ sprites/common/bullet/fireball.gd | 3 + sprites/common/bullet/snowflake.gd | 44 +++ sprites/common/bullet/snowflake.png | Bin 0 -> 2156 bytes sprites/common/bullet/snowflake.png.import | 34 ++ sprites/common/bullet/snowflake.tscn | 21 ++ sprites/common/midori/facehud.png | Bin 0 -> 19677 bytes sprites/common/midori/facehud.png.import | 34 ++ sprites/common/midori/lily.gd | 1 + sprites/common/natasha/facehud.png | Bin 0 -> 15381 bytes sprites/common/natasha/facehud.png.import | 34 ++ sprites/common/natasha/natasha.gd | 3 +- sprites/common/player/player.gd | 29 +- 19 files changed, 737 insertions(+), 24 deletions(-) create mode 100644 levels/Testrooms/lilytest.gd create mode 100644 levels/ui/tophud.gd create mode 100644 levels/ui/tophud.tscn create mode 100644 sprites/common/bullet/snowflake.gd create mode 100644 sprites/common/bullet/snowflake.png create mode 100644 sprites/common/bullet/snowflake.png.import create mode 100644 sprites/common/bullet/snowflake.tscn create mode 100644 sprites/common/midori/facehud.png create mode 100644 sprites/common/midori/facehud.png.import create mode 100644 sprites/common/natasha/facehud.png create mode 100644 sprites/common/natasha/facehud.png.import diff --git a/global.gd b/global.gd index 0f29c6e..5b7aea5 100644 --- a/global.gd +++ b/global.gd @@ -10,15 +10,18 @@ var bossready = false const pcnames = ["Midori Asgardius", null, null, null, null, null, null, null, null, "Natasha Dostoyevsky"] const npcnames = ["Lily", null, null, null, null, null, null, null, null, "Natasha Dostoyevsky"] const pcfaces = ["res://sprites/common/midori/face.png", null, null, null, null, null, null, null, null, "res://sprites/common/natasha/face.png"] +const hudfaces = ["res://sprites/common/midori/facehud.png", null, null, null, null, null, null, null, null, "res://sprites/common/natasha/facehud.png"] const npcfaces = ["res://sprites/common/midori/face.png", null, null, null, null, null, null, null, null, "res://sprites/common/natasha/face.png"] var cdialog = [] const places = [[[[null, null, false], [null, null, false]], [["res://levels/Testrooms/bullethell.tscn", 11, true], ["res://levels/Testrooms/lilytest.tscn", 20, true]], [["res://levels/Testrooms/dialogtest.tscn", 19, false], ["res://levels/Testrooms/testspawn.tscn", 2 ,false]]]] var cplace = [0,2,1] var dplace = [null, null, null] -const pbbullets = ["res://sprites/common/bullet/fireball.tscn", null, null, null, null, null, null, null, null, "res://sprites/common/bullet/fireball.tscn"] +const pbbullets = ["res://sprites/common/bullet/fireball.tscn", null, null, null, null, null, null, null, null, "res://sprites/common/bullet/snowflake.tscn"] +const pcspecialities = [1, null, null, null, null, null, null, null, null, 0] const pchars = ["res://sprites/common/midori/sprite.png", null, null, null, null, null, null, null, null, "res://sprites/common/natasha/sprite.png"] const npchars = ["res://sprites/common/midori/sprite.png", null, null, null, null, null, null, null, null, "res://sprites/common/natasha/sprite.png"] -var party = [null, null, null, null] +var party = [9, 0, null, null] +const specialities = [2, 0, 3, 1, 5, 4] var dparty = [0, 9, null, null] var cpchar = 0 var dcpchar = 0 diff --git a/levels/Testrooms/lilytest.gd b/levels/Testrooms/lilytest.gd new file mode 100644 index 0000000..b8abcab --- /dev/null +++ b/levels/Testrooms/lilytest.gd @@ -0,0 +1,12 @@ +extends Node2D +var boss + +# Called when the node enters the scene tree for the first time. +func _ready(): + boss = $Lily + boss.add_to_group("boss") + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/levels/Testrooms/lilytest.tscn b/levels/Testrooms/lilytest.tscn index eb31164..dd01e16 100644 --- a/levels/Testrooms/lilytest.tscn +++ b/levels/Testrooms/lilytest.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=6 format=3 uid="uid://cma7ddp0r4rm"] +[gd_scene load_steps=7 format=3 uid="uid://cma7ddp0r4rm"] +[ext_resource type="Script" path="res://levels/Testrooms/lilytest.gd" id="1_b1yf3"] [ext_resource type="Texture2D" uid="uid://dursxelwwxe8u" path="res://sprites/common/placeholder/player.png" id="1_bch3a"] [ext_resource type="PackedScene" uid="uid://b216q83uw4c45" path="res://sprites/common/midori/lily.tscn" id="2_v1fc7"] [ext_resource type="PackedScene" uid="uid://cehe6sm8ly06u" path="res://sprites/common/player/player.tscn" id="3_h02gt"] @@ -11,6 +12,7 @@ size = Vector2(20, 761) size = Vector2(1283, 20) [node name="Lilytest" type="Node2D"] +script = ExtResource("1_b1yf3") [node name="TextureRect" type="TextureRect" parent="."] offset_left = 583.0 diff --git a/levels/ui/gameplay.gd b/levels/ui/gameplay.gd index 838e671..0ac4b90 100644 --- a/levels/ui/gameplay.gd +++ b/levels/ui/gameplay.gd @@ -7,6 +7,8 @@ var sfx1 := AudioStreamPlayer.new() var musictrack var isboss var bhud = load("res://levels/bottomhud.tscn").instantiate() +var thud = load("res://levels/ui/tophud.tscn").instantiate() +var ishud = true # Called when the node enters the scene tree for the first time. func _ready(): @@ -34,6 +36,7 @@ func _ready(): music = load(musictrack) get_tree().root.add_child.call_deferred(level) get_tree().root.add_child.call_deferred(bhud) + get_tree().root.add_child.call_deferred(thud) #get_tree().root.add_child.call_deferred(player) bgsound.stream = music if !isboss: @@ -65,6 +68,7 @@ func _input(event): if Input.is_key_pressed(KEY_ESCAPE) || Input.is_joy_button_pressed(0,JOY_BUTTON_BACK): Global.live = 0 Global.bossready = false + get_tree().root.remove_child(thud) get_tree().root.remove_child(bhud) get_tree().root.remove_child(player) get_tree().root.remove_child(level) @@ -72,28 +76,28 @@ func _input(event): get_tree().change_scene_to_file("res://levels/ui/scene.tscn") else: get_tree().change_scene_to_file("res://title.tscn") - if (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_UP)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_UP)): + if (Global.live == 1 && (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_UP)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_UP))): if Global.debug: if Global.dparty[0] != null: Global.dcpchar = 0 else: if Global.party[0] != null: Global.cpchar = 0 - elif (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_RIGHT)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_RIGHT)): + elif (Global.live == 1 && (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_RIGHT)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_RIGHT))): if Global.debug: if Global.dparty[1] != null: Global.dcpchar = 1 else: if Global.party[1] != null: Global.cpchar = 1 - elif (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_DOWN)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_DOWN)): + elif (Global.live == 1 && (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_DOWN)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_DOWN))): if Global.debug: if Global.dparty[2] != null: Global.dcpchar = 2 else: if Global.party[2] != null: Global.cpchar = 2 - elif (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_LEFT)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_LEFT)): + elif (Global.live == 1 && (Input.is_key_pressed(KEY_V) && Input.is_key_pressed(KEY_LEFT)) ||(Input.is_joy_button_pressed(0,JOY_BUTTON_RIGHT_SHOULDER) && Input.is_joy_button_pressed(0,JOY_BUTTON_DPAD_LEFT))): if Global.debug: if Global.dparty[3] != null: Global.dcpchar = 3 @@ -105,3 +109,9 @@ func _input(event): sfx1.stream = load(Global.sfxtracks[1]) sfx1.play(0) bgsound.play(0) + if Global.cdialog.size() != 0 && ishud: + get_tree().root.remove_child(thud) + ishud = false + elif Global.cdialog.size() == 0&& !ishud: + get_tree().root.add_child.call_deferred(thud) + ishud = true diff --git a/levels/ui/talk.gd b/levels/ui/talk.gd index b463e36..3d0b5f1 100644 --- a/levels/ui/talk.gd +++ b/levels/ui/talk.gd @@ -12,10 +12,10 @@ func _ready(): pface = $Playerface if Global.cdialog[dindex][1]: cname.set_text(Global.pcnames[Global.cdialog[dindex][2]]) - pface.texture = load((Global.pcfaces[Global.cdialog[dindex][2]])) + pface.texture = load(Global.pcfaces[Global.cdialog[dindex][2]]) else: cname.set_text(Global.npcnames[Global.cdialog[dindex][2]]) - pface.texture = load((Global.npcfaces[Global.cdialog[dindex][2]])) + pface.texture = load(Global.npcfaces[Global.cdialog[dindex][2]]) dialog.set_text(Global.cdialog[dindex][0]) diff --git a/levels/ui/tophud.gd b/levels/ui/tophud.gd new file mode 100644 index 0000000..87ff65e --- /dev/null +++ b/levels/ui/tophud.gd @@ -0,0 +1,134 @@ +extends Control +var topleft +var topleftbg +var cn1 +var cn2 +var cn3 +var cn4 +var cf1 +var cf2 +var cf3 +var cf4 +var focus1 +var focus2 +var focus3 +var focus4 + +# Called when the node enters the scene tree for the first time. +func _ready(): + topleft = $Topleft + topleftbg = $Topleftbg + cn1 = $Topleft/Character1/VBoxContainer/HBoxContainer/Label + cn2 = $Topleft/Character2/VBoxContainer/HBoxContainer/Label + cn3 = $Topleft/Character3/VBoxContainer/HBoxContainer/Label + cn4 = $Topleft/Character4/VBoxContainer/HBoxContainer/Label + cf1 = $Topleft/Character1/TextureRect + cf2 = $Topleft/Character2/TextureRect + cf3 = $Topleft/Character3/TextureRect + cf4 = $Topleft/Character4/TextureRect + focus1 = $Topleft/Character1/ColorRect2 + focus2 = $Topleft/Character2/ColorRect2 + focus3 = $Topleft/Character3/ColorRect2 + focus4 = $Topleft/Character4/ColorRect2 + if Global.mangohud: + topleft.position.y = 244 + topleftbg.position.y = 244 + _charrefresh() + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + +func _input(event): + _charrefresh() +func _charrefresh(): + if Global.debug: + if Global.dparty[0] != null: + cn1.set_text(Global.pcnames[Global.dparty[0]]) + cf1.texture = load(Global.hudfaces[Global.dparty[0]]) + if Global.dcpchar == 0: + focus1.set_color(Color(0, 0, 1, 1)) + else: + focus1.set_color(Color(1, 1, 1, 1)) + else: + cn1.set_text("") + cf1.texture = null + focus1.set_color(Color(1, 1, 1, 1)) + if Global.dparty[1] != null: + cn2.set_text(Global.pcnames[Global.dparty[1]]) + cf2.texture = load(Global.hudfaces[Global.dparty[1]]) + if Global.dcpchar == 1: + focus2.set_color(Color(0, 0, 1, 1)) + else: + focus2.set_color(Color(1, 1, 1, 1)) + else: + cn2.set_text("") + cf2.texture = null + focus2.set_color(Color(1, 1, 1, 1)) + if Global.dparty[2] != null: + cn3.set_text(Global.pcnames[Global.dparty[2]]) + cf3.texture = load(Global.hudfaces[Global.dparty[2]]) + if Global.dcpchar == 2: + focus3.set_color(Color(0, 0, 1, 1)) + else: + focus3.set_color(Color(1, 1, 1, 1)) + else: + cn3.set_text("") + cf3.texture = null + focus3.set_color(Color(1, 1, 1, 1)) + if Global.dparty[3] != null: + cn4.set_text(Global.pcnames[Global.dparty[3]]) + cf4.texture = load(Global.hudfaces[Global.dparty[3]]) + if Global.dcpchar == 3: + focus4.set_color(Color(0, 0, 1, 1)) + else: + focus4.set_color(Color(1, 1, 1, 1)) + else: + cn4.set_text("") + cf4.texture = null + focus4.set_color(Color(1, 1, 1, 1)) + else: + if Global.party[0] != null: + cn1.set_text(Global.pcnames[Global.party[0]]) + cf1.texture = load(Global.hudfaces[Global.party[0]]) + if Global.dcpchar == 0: + focus1.set_color(Color(0, 0, 1, 1)) + else: + focus1.set_color(Color(1, 1, 1, 1)) + else: + cn1.set_text("") + cf1.texture = null + focus1.set_color(Color(1, 1, 1, 1)) + if Global.party[1] != null: + cn2.set_text(Global.pcnames[Global.party[1]]) + cf2.texture = load(Global.hudfaces[Global.party[1]]) + if Global.dcpchar == 1: + focus2.set_color(Color(0, 0, 1, 1)) + else: + focus2.set_color(Color(1, 1, 1, 1)) + else: + cn2.set_text("") + cf2.texture = null + focus2.set_color(Color(1, 1, 1, 1)) + if Global.party[2] != null: + cn3.set_text(Global.pcnames[Global.party[0]]) + cf3.texture = load(Global.hudfaces[Global.party[0]]) + if Global.dcpchar == 2: + focus3.set_color(Color(0, 0, 1, 1)) + else: + focus3.set_color(Color(1, 1, 1, 1)) + else: + cn3.set_text("") + cf3.texture = null + focus3.set_color(Color(1, 1, 1, 1)) + if Global.party[3] != null: + cn4.set_text(Global.pcnames[Global.party[3]]) + cf4.texture = load(Global.hudfaces[Global.party[3]]) + if Global.dcpchar == 3: + focus4.set_color(Color(0, 0, 1, 1)) + else: + focus4.set_color(Color(1, 1, 1, 1)) + else: + cn4.set_text("") + cf4.texture = null + focus4.set_color(Color(1, 1, 1, 1)) diff --git a/levels/ui/tophud.tscn b/levels/ui/tophud.tscn new file mode 100644 index 0000000..9888c8a --- /dev/null +++ b/levels/ui/tophud.tscn @@ -0,0 +1,379 @@ +[gd_scene load_steps=7 format=3 uid="uid://coaup7cuj7qev"] + +[ext_resource type="Script" path="res://levels/ui/tophud.gd" id="1_pntuv"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ualpu"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_patnr"] +bg_color = Color(1, 0, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_05pau"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u3vj7"] +bg_color = Color(1, 0.498039, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ftyws"] + +[node name="Tophud" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_pntuv") + +[node name="Topleftbg" type="ColorRect" parent="."] +layout_mode = 0 +offset_right = 377.0 +offset_bottom = 476.0 +color = Color(0.254902, 0.254902, 0.254902, 0.788235) + +[node name="Topleft" type="VBoxContainer" parent="."] +layout_mode = 0 +offset_right = 377.0 +offset_bottom = 476.0 + +[node name="Character1" type="HBoxContainer" parent="Topleft"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Topleft/Character1"] +custom_minimum_size = Vector2(116, 116) +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Topleft/Character1"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Topleft/Character1/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer"] +custom_minimum_size = Vector2(174, 0) +layout_mode = 2 +text = "Name" + +[node name="Label3" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "R1 + ↑" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Topleft/Character1/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Health" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character1/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ualpu") +theme_override_styles/fill = SubResource("StyleBoxFlat_patnr") + +[node name="Label2" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Topleft/Character1/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Stamina" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character1/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_05pau") +theme_override_styles/fill = SubResource("StyleBoxFlat_u3vj7") + +[node name="Label2" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer4" type="HBoxContainer" parent="Topleft/Character1/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Skill" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character1/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ftyws") + +[node name="Label2" type="Label" parent="Topleft/Character1/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="ColorRect2" type="ColorRect" parent="Topleft/Character1"] +custom_minimum_size = Vector2(12, 64) +layout_mode = 2 + +[node name="Character2" type="HBoxContainer" parent="Topleft"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Topleft/Character2"] +custom_minimum_size = Vector2(116, 116) +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Topleft/Character2"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Topleft/Character2/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer"] +custom_minimum_size = Vector2(174, 0) +layout_mode = 2 +text = "Name" + +[node name="Label3" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "R1 + →" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Topleft/Character2/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Health" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character2/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ualpu") +theme_override_styles/fill = SubResource("StyleBoxFlat_patnr") + +[node name="Label2" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Topleft/Character2/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Stamina" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character2/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_05pau") +theme_override_styles/fill = SubResource("StyleBoxFlat_u3vj7") + +[node name="Label2" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer4" type="HBoxContainer" parent="Topleft/Character2/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Skill" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character2/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ftyws") + +[node name="Label2" type="Label" parent="Topleft/Character2/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="ColorRect2" type="ColorRect" parent="Topleft/Character2"] +custom_minimum_size = Vector2(12, 64) +layout_mode = 2 + +[node name="Character3" type="HBoxContainer" parent="Topleft"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Topleft/Character3"] +custom_minimum_size = Vector2(116, 116) +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Topleft/Character3"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Topleft/Character3/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer"] +custom_minimum_size = Vector2(174, 0) +layout_mode = 2 +text = "Name" + +[node name="Label3" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "R1 + ↓" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Topleft/Character3/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Health" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character3/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ualpu") +theme_override_styles/fill = SubResource("StyleBoxFlat_patnr") + +[node name="Label2" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Topleft/Character3/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Stamina" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character3/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_05pau") +theme_override_styles/fill = SubResource("StyleBoxFlat_u3vj7") + +[node name="Label2" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer4" type="HBoxContainer" parent="Topleft/Character3/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Skill" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character3/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ftyws") + +[node name="Label2" type="Label" parent="Topleft/Character3/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="ColorRect2" type="ColorRect" parent="Topleft/Character3"] +custom_minimum_size = Vector2(12, 64) +layout_mode = 2 + +[node name="Character4" type="HBoxContainer" parent="Topleft"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Topleft/Character4"] +custom_minimum_size = Vector2(116, 116) +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Topleft/Character4"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Topleft/Character4/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer"] +custom_minimum_size = Vector2(174, 0) +layout_mode = 2 +text = "Name" + +[node name="Label3" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "R1 + ←" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Topleft/Character4/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Health" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character4/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ualpu") +theme_override_styles/fill = SubResource("StyleBoxFlat_patnr") + +[node name="Label2" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Topleft/Character4/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Stamina" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character4/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_05pau") +theme_override_styles/fill = SubResource("StyleBoxFlat_u3vj7") + +[node name="Label2" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer3"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="HBoxContainer4" type="HBoxContainer" parent="Topleft/Character4/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(70, 0) +layout_mode = 2 +text = "Skill" + +[node name="ProgressBar" type="ProgressBar" parent="Topleft/Character4/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +theme_override_styles/background = SubResource("StyleBoxFlat_ftyws") + +[node name="Label2" type="Label" parent="Topleft/Character4/VBoxContainer/HBoxContainer4"] +custom_minimum_size = Vector2(63, 0) +layout_mode = 2 +text = "100/100" +horizontal_alignment = 2 + +[node name="ColorRect2" type="ColorRect" parent="Topleft/Character4"] +custom_minimum_size = Vector2(12, 64) +layout_mode = 2 diff --git a/sprites/common/bullet/fireball.gd b/sprites/common/bullet/fireball.gd index 0549c41..9ee5cbc 100644 --- a/sprites/common/bullet/fireball.gd +++ b/sprites/common/bullet/fireball.gd @@ -22,6 +22,9 @@ func _physics_process(delta): func _on_body_entered(body): if !body.is_in_group(btype): + if body.is_in_group("players") || body.is_in_group("boss") || body.is_in_group("enemies"): + if body.weakness == 3: + print("weak to fire") #if body.is_in_group("players"): # Global.live = 2 #elif body.is_in_group("enemies"): diff --git a/sprites/common/bullet/snowflake.gd b/sprites/common/bullet/snowflake.gd new file mode 100644 index 0000000..063455b --- /dev/null +++ b/sprites/common/bullet/snowflake.gd @@ -0,0 +1,44 @@ +extends Area2D +var velocity: Vector2 = Vector2() +var direction +var speed = 100 +var btype +# Called when the node enters the scene tree for the first time. +func _ready(): + add_to_group(btype) + #pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + +func _physics_process(delta): + if direction == null: + position += velocity * delta + else: + position += speed * delta * direction + + +func _on_body_entered(body): + if !body.is_in_group(btype): + if body.is_in_group("players") || body.is_in_group("boss") || body.is_in_group("enemies"): + if body.weakness == 0: + print("weak to ice") + #if body.is_in_group("players"): + # Global.live = 2 + #elif body.is_in_group("enemies"): + # Global.live = 3 + #elif body.is_in_group("boss"): + # Global.live = 3 + queue_free() + + +func _on_screen_exited(): + queue_free() + + +func _on_area_entered(area): + if !area.is_in_group(btype): + queue_free() + #pass # Replace with function body. diff --git a/sprites/common/bullet/snowflake.png b/sprites/common/bullet/snowflake.png new file mode 100644 index 0000000000000000000000000000000000000000..30b5d8dfa58010d7412b6913f74e7355520f4635 GIT binary patch literal 2156 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 oMSKf+XNuqF)LB<^@#QTe(<|XRHPR!+FNjKb$ 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 literal 0 HcmV?d00001 diff --git a/sprites/common/natasha/facehud.png.import b/sprites/common/natasha/facehud.png.import new file mode 100644 index 0000000..d9878af --- /dev/null +++ b/sprites/common/natasha/facehud.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cw2pkjwxw0mj0" +path="res://.godot/imported/facehud.png-cabef45f07551c953d7df3ee19ee1aca.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/common/natasha/facehud.png" +dest_files=["res://.godot/imported/facehud.png-cabef45f07551c953d7df3ee19ee1aca.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/sprites/common/natasha/natasha.gd b/sprites/common/natasha/natasha.gd index fc9c236..a2d5f39 100644 --- a/sprites/common/natasha/natasha.gd +++ b/sprites/common/natasha/natasha.gd @@ -2,11 +2,12 @@ extends CharacterBody2D var theta: float = 0.0 @export_range(0,2*PI) var alpha: float = 1.5 -var bullet = load("res://sprites/common/bullet/fireball.tscn") +var bullet = load("res://sprites/common/bullet/snowflake.tscn") const SPEED = 300.0 const JUMP_VELOCITY = -400.0 var vangle = 2 +var weakness = 2 func get_vector(angle): theta = angle + alpha diff --git a/sprites/common/player/player.gd b/sprites/common/player/player.gd index 6712e84..db7bc8c 100644 --- a/sprites/common/player/player.gd +++ b/sprites/common/player/player.gd @@ -10,31 +10,20 @@ var csprite var bpress = false # Get the gravity from the project settings to be synced with RigidBody nodes. var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") +var weakness func _ready(): add_to_group("players") anim = $AnimationPlayer sprite = $Sprite2D - if Global.debug: - csprite = Global.dcpchar - sprite.texture = load(Global.pchars[Global.dparty[Global.dcpchar]]) - else: - csprite = Global.cpchar - sprite.texture = load(Global.pchars[Global.party[Global.cpchar]]) + _charswitch() func _physics_process(delta): # Add the gravity. #var velocity = Vector2.ZERO if Global.live == 1: velocity = (Vector2.RIGHT.rotated(rotation) * 500 * Global.xm * delta)-Vector2.UP.rotated(rotation) * 500 * Global.ym * delta - if Global.debug: - if Global.dcpchar != csprite: - csprite = Global.dcpchar - sprite.texture = load(Global.pchars[Global.dparty[Global.dcpchar]]) - else: - if Global.cpchar != csprite: - csprite = Global.cpchar - sprite.texture = load(Global.pchars[Global.party[Global.cpchar]]) + _charswitch() #origmpos = get_viewport().get_mouse_position() #if Input.get_joy_axis(0,JOY_AXIS_LEFT_Y) != 0: # velocity = Vector2.UP.rotated(rotation) * -400 * Input.get_joy_axis(0,JOY_AXIS_LEFT_Y) @@ -88,3 +77,15 @@ func _input(event): get_parent().add_child(new_pbullet) elif Input.is_action_just_released("shoot") && bpress: bpress = false + +func _charswitch(): + if Global.debug: + if Global.dcpchar != csprite: + csprite = Global.dcpchar + sprite.texture = load(Global.pchars[Global.dparty[Global.dcpchar]]) + weakness = Global.specialities[Global.pcspecialities[Global.dparty[Global.dcpchar]]] + else: + if Global.cpchar != csprite: + csprite = Global.cpchar + sprite.texture = load(Global.pchars[Global.party[Global.cpchar]]) + weakness = Global.specialities[Global.pcspecialities[Global.party[Global.cpchar]]]