slight gameplay changes and new ui

This commit is contained in:
2025-07-21 05:56:11 +10:00
parent d2dc74d533
commit a452bbb406
53 changed files with 538 additions and 245 deletions

Binary file not shown.

View File

@@ -0,0 +1,40 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://bqy8dm2o3piqm"
path="res://.godot/imported/quaver.ttf-d75d58e80cdddb666365b0d5591d2de9.fontdata"
[deps]
source_file="res://Assets/Fonts/Quaver v1.0/quaver.ttf"
dest_files=["res://.godot/imported/quaver.ttf-d75d58e80cdddb666365b0d5591d2de9.fontdata"]
[params]
Rendering=null
antialiasing=0
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[{
"chars": [],
"glyphs": [],
"name": "New Configuration",
&"size": Vector2i(8, 0)
}]
language_support={}
script_support={}
opentype_features={}

View File

@@ -0,0 +1,9 @@
On Windows:
Right click and "Install for All Users" to ensure font is accessible for some programs like Aseprite
Licensed under CC BY 3.0.
Free to use. Attribution not required, but appreciated.
(don't resell this font or any modified derivatives and we're good)
Have fun!

BIN
Assets/Textures/battery.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://up7omskwg0yx"
path="res://.godot/imported/battery.png-5347a257821eef012070cbdddeb2d581.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Textures/battery.png"
dest_files=["res://.godot/imported/battery.png-5347a257821eef012070cbdddeb2d581.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

@@ -9,7 +9,7 @@
[resource] [resource]
script = ExtResource("1_yqa4b") script = ExtResource("1_yqa4b")
duration = 5 cost = 2
rarity = 0 rarity = 0
faction = 1 faction = 1
turret_scene = ExtResource("4_5nu32") turret_scene = ExtResource("4_5nu32")

View File

@@ -8,11 +8,12 @@
[resource] [resource]
script = ExtResource("1_5html") script = ExtResource("1_5html")
duration = 4 cost = 2
rarity = 0 rarity = 0
faction = 1 faction = 1
turret_scene = ExtResource("4_thk7u") turret_scene = ExtResource("4_thk7u")
weapon_scene = ExtResource("3_wkjyf") weapon_scene = ExtResource("3_wkjyf")
weapon_stats = ExtResource("4_76fd1") weapon_stats = ExtResource("4_76fd1")
tower_stats = ExtResource("3_4hykq") tower_stats = ExtResource("3_4hykq")
tags = Array[int]([])
display_name = "Gatling" display_name = "Gatling"

View File

@@ -8,11 +8,12 @@
[resource] [resource]
script = ExtResource("1_tdu8a") script = ExtResource("1_tdu8a")
duration = 4 cost = 2
rarity = 0 rarity = 0
faction = 1 faction = 1
turret_scene = ExtResource("4_xcrut") turret_scene = ExtResource("4_xcrut")
weapon_scene = ExtResource("5_l3c38") weapon_scene = ExtResource("5_l3c38")
weapon_stats = ExtResource("3_dukui") weapon_stats = ExtResource("3_dukui")
tower_stats = ExtResource("3_e5fta") tower_stats = ExtResource("3_e5fta")
tags = Array[int]([])
display_name = "Glue Launcher" display_name = "Glue Launcher"

View File

@@ -8,11 +8,12 @@
[resource] [resource]
script = ExtResource("1_0ciid") script = ExtResource("1_0ciid")
duration = 4 cost = 5
rarity = 4 rarity = 4
faction = 1 faction = 1
turret_scene = ExtResource("3_l4xwa") turret_scene = ExtResource("3_l4xwa")
weapon_scene = ExtResource("3_de72q") weapon_scene = ExtResource("3_de72q")
weapon_stats = ExtResource("4_wilo7") weapon_stats = ExtResource("4_wilo7")
tower_stats = ExtResource("3_7vuex") tower_stats = ExtResource("3_7vuex")
tags = Array[int]([])
display_name = "Reactor" display_name = "Reactor"

View File

@@ -9,7 +9,7 @@
[resource] [resource]
script = ExtResource("1_ly0o5") script = ExtResource("1_ly0o5")
duration = 5 cost = 3
rarity = 0 rarity = 0
faction = 1 faction = 1
turret_scene = ExtResource("3_73c50") turret_scene = ExtResource("3_73c50")

View File

@@ -8,11 +8,12 @@
[resource] [resource]
script = ExtResource("1_5vmtk") script = ExtResource("1_5vmtk")
duration = 6 cost = 2
rarity = 1 rarity = 1
faction = 1 faction = 1
turret_scene = ExtResource("4_k5nhs") turret_scene = ExtResource("4_k5nhs")
weapon_scene = ExtResource("3_qfpvu") weapon_scene = ExtResource("3_qfpvu")
weapon_stats = ExtResource("4_7kvq1") weapon_stats = ExtResource("4_7kvq1")
tower_stats = ExtResource("3_6i55t") tower_stats = ExtResource("3_6i55t")
tags = Array[int]([])
display_name = "Sniper" display_name = "Sniper"

View File

@@ -6,8 +6,5 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_0addr") shader = ExtResource("1_0addr")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_4kam3") shader_parameter/albedo = ExtResource("2_4kam3")
shader_parameter/alpha_scissor = 0.5 shader_parameter/alpha_scissor = 0.5
shader_parameter/jitter = 0.25
shader_parameter/resolution = Vector2i(320, 240)

View File

@@ -6,8 +6,5 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_x1doh") shader = ExtResource("1_x1doh")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_jh2nf") shader_parameter/albedo = ExtResource("2_jh2nf")
shader_parameter/alpha_scissor = 0.5 shader_parameter/alpha_scissor = 0.5
shader_parameter/jitter = 0.25
shader_parameter/resolution = Vector2i(320, 240)

View File

@@ -6,8 +6,5 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_crvh7") shader = ExtResource("1_crvh7")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_1d6vt") shader_parameter/albedo = ExtResource("2_1d6vt")
shader_parameter/alpha_scissor = 0.5 shader_parameter/alpha_scissor = 0.5
shader_parameter/jitter = 0.25
shader_parameter/resolution = Vector2i(320, 240)

View File

@@ -27,8 +27,8 @@ func exit_state() -> void:
hero.weapons[hero.equipped_weapon].visible = false hero.weapons[hero.equipped_weapon].visible = false
hero.hud.set_energy_visible(false) hero.hud.set_energy_visible(false)
hero.hud.grow_wave_start_label() hero.hud.grow_wave_start_label()
hero.hud.primary_duration.visible = true #hero.hud.primary_duration.visible = true
hero.hud.secondary_duration.visible = true #hero.hud.secondary_duration.visible = true
hero.hud.energy_label.visible = true hero.hud.energy_label.visible = true

View File

@@ -36,7 +36,7 @@ func _process(delta: float) -> void:
if interact_key_held: if interact_key_held:
if !interacted_once: if !interacted_once:
if valid_point and hero.energy >= Data.wall_cost and ray_collider and point.buildable: if valid_point and hero.currency >= Data.wall_cost and ray_collider and point.buildable:
interact_held_time += delta interact_held_time += delta
set_progress_percent(interact_held_time / interact_hold_time) set_progress_percent(interact_held_time / interact_hold_time)
wall_preview.set_float(interact_held_time / interact_hold_time) wall_preview.set_float(interact_held_time / interact_hold_time)
@@ -93,7 +93,7 @@ func reset() -> void:
func process_looking_at_level() -> void: func process_looking_at_level() -> void:
point = level.flow_field.get_closest_buildable_point(ray_point) point = level.flow_field.get_closest_buildable_point(ray_point)
if level.walls.has(point) or !point.buildable or hero.energy < Data.wall_cost: if level.walls.has(point) or !point.buildable or hero.currency < Data.wall_cost:
wall_preview.set_visible(false) wall_preview.set_visible(false)
valid_point = false valid_point = false
clear_previous_point() clear_previous_point()
@@ -127,8 +127,8 @@ func process_looking_at_tower() -> void:
func build_wall() -> void: func build_wall() -> void:
if point and valid_point and hero.energy >= Data.wall_cost: if point and valid_point and hero.currency >= Data.wall_cost:
hero.energy -= Data.wall_cost hero.currency -= Data.wall_cost
level.set_wall(point, multiplayer.get_unique_id()) level.set_wall(point, multiplayer.get_unique_id())
wall_preview.visible = false wall_preview.visible = false

View File

@@ -137,6 +137,8 @@ func check_removal() -> void:
for card: Card in unique_cards: for card: Card in unique_cards:
if !hand.contents.has(card): if !hand.contents.has(card):
index = unique_cards.find(card) index = unique_cards.find(card)
for i: int in selection_boxes.size():
selection_boxes[i].set_amount(hand.contents.count(unique_cards[i]))
if index >= 0: if index >= 0:
unique_cards.remove_at(index) unique_cards.remove_at(index)
selection_boxes[index].queue_free() selection_boxes[index].queue_free()
@@ -327,6 +329,7 @@ func draw_to_hand_size() -> void:
var box: CardSelectionBox = card_select_scene.instantiate() var box: CardSelectionBox = card_select_scene.instantiate()
box.set_card(card) box.set_card(card)
box.set_key(i) box.set_key(i)
box.set_amount(hand.contents.count(unique_cards[i]))
selection_boxes.append(box) selection_boxes.append(box)
$HUD/selection_boxes.add_child(box) $HUD/selection_boxes.add_child(box)
hand_selected_index = 0 hand_selected_index = 0
@@ -342,8 +345,7 @@ func update_selected_box() -> void:
func equip_weapon(slot: int = 0) -> void: func equip_weapon(slot: int = 0) -> void:
if hand.size == 0: if hand.size == 0:
return return
var energy_cost: int = int(hand.item_at(hand_selected_index).rarity) + 1 var energy_cost: int = selected_card.cost
energy_cost *= 2
if energy < energy_cost: if energy < energy_cost:
return return
if weapons[slot] != null: if weapons[slot] != null:
@@ -360,7 +362,7 @@ func equip_weapon(slot: int = 0) -> void:
#decrement_selected() #decrement_selected()
weapons[slot] = cards[slot].weapon_scene.instantiate() weapons[slot] = cards[slot].weapon_scene.instantiate()
weapons[slot].name = str(weapons_spawn_count) weapons[slot].name = str(weapons_spawn_count)
weapons[slot].duration = cards[slot].duration weapons[slot].duration = 1
networked_equip_weapon.rpc(Data.cards.find(cards[slot]), 0, weapons_spawn_count) networked_equip_weapon.rpc(Data.cards.find(cards[slot]), 0, weapons_spawn_count)
weapons_spawn_count += 1 weapons_spawn_count += 1
weapons[slot].set_multiplayer_authority(multiplayer.get_unique_id()) weapons[slot].set_multiplayer_authority(multiplayer.get_unique_id())

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=64 format=3 uid="uid://dxgxbtf68lcv5"] [gd_scene load_steps=68 format=3 uid="uid://dxgxbtf68lcv5"]
[ext_resource type="Script" uid="uid://1fqpoegbdm6n" path="res://PCs/hero.gd" id="1_pihpe"] [ext_resource type="Script" uid="uid://1fqpoegbdm6n" path="res://PCs/hero.gd" id="1_pihpe"]
[ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="2_dbyo0"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="2_dbyo0"]
@@ -36,6 +36,7 @@
[ext_resource type="AudioStream" uid="uid://bn8lkvy5wibvo" path="res://Audio/cardSlide1.ogg" id="28_1thk8"] [ext_resource type="AudioStream" uid="uid://bn8lkvy5wibvo" path="res://Audio/cardSlide1.ogg" id="28_1thk8"]
[ext_resource type="AudioStream" uid="uid://d32gpcu8w1yvn" path="res://Audio/cardSlide2.ogg" id="29_s0a0l"] [ext_resource type="AudioStream" uid="uid://d32gpcu8w1yvn" path="res://Audio/cardSlide2.ogg" id="29_s0a0l"]
[ext_resource type="AudioStream" uid="uid://val5n418yebw" path="res://Audio/cardSlide3.ogg" id="30_djhlg"] [ext_resource type="AudioStream" uid="uid://val5n418yebw" path="res://Audio/cardSlide3.ogg" id="30_djhlg"]
[ext_resource type="Texture2D" uid="uid://up7omskwg0yx" path="res://Assets/Textures/battery.png" id="30_rim6q"]
[ext_resource type="AudioStream" uid="uid://ck6g061w7i6ro" path="res://Audio/cardSlide4.ogg" id="31_546e6"] [ext_resource type="AudioStream" uid="uid://ck6g061w7i6ro" path="res://Audio/cardSlide4.ogg" id="31_546e6"]
[ext_resource type="AudioStream" uid="uid://bj8eitlsjdotb" path="res://Audio/cardSlide5.ogg" id="32_tg7y0"] [ext_resource type="AudioStream" uid="uid://bj8eitlsjdotb" path="res://Audio/cardSlide5.ogg" id="32_tg7y0"]
[ext_resource type="AudioStream" uid="uid://d0620p56ad34a" path="res://Audio/cardSlide6.ogg" id="33_2v5co"] [ext_resource type="AudioStream" uid="uid://d0620p56ad34a" path="res://Audio/cardSlide6.ogg" id="33_2v5co"]
@@ -50,6 +51,8 @@
[ext_resource type="Script" uid="uid://b5h7jfwkyokes" path="res://PCs/FSM/building_state.gd" id="47_d8pnf"] [ext_resource type="Script" uid="uid://b5h7jfwkyokes" path="res://PCs/FSM/building_state.gd" id="47_d8pnf"]
[ext_resource type="Script" uid="uid://cjdv1onyfej0m" path="res://PCs/FSM/carding_state.gd" id="48_7d213"] [ext_resource type="Script" uid="uid://cjdv1onyfej0m" path="res://PCs/FSM/carding_state.gd" id="48_7d213"]
[ext_resource type="Script" uid="uid://cf7m4yyiqhhru" path="res://PCs/FSM/fighting_state.gd" id="49_60hic"] [ext_resource type="Script" uid="uid://cf7m4yyiqhhru" path="res://PCs/FSM/fighting_state.gd" id="49_60hic"]
[ext_resource type="PackedScene" uid="uid://bg4pmewlvshu8" path="res://coin/Coin.glb" id="51_w13oc"]
[ext_resource type="Script" uid="uid://dq0yemhxscvtm" path="res://rotate.gd" id="52_rim6q"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jbu13"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jbu13"]
radius = 0.3 radius = 0.3
@@ -79,6 +82,9 @@ viewport_path = NodePath("FirstPersonViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_574jy"] [sub_resource type="ViewportTexture" id="ViewportTexture_574jy"]
viewport_path = NodePath("MiniMapViewport") viewport_path = NodePath("MiniMapViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_w13oc"]
viewport_path = NodePath("CoinViewport")
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_tsiqi"] [sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_tsiqi"]
properties/0/path = NodePath(".:position") properties/0/path = NodePath(".:position")
properties/0/spawn = true properties/0/spawn = true
@@ -318,7 +324,7 @@ script = ExtResource("8_yl6ka")
player = NodePath("..") player = NodePath("..")
wave_count = NodePath("EnemyTracker/WaveCount") wave_count = NodePath("EnemyTracker/WaveCount")
lives_count = NodePath("LivesBar/LivesCount") lives_count = NodePath("LivesBar/LivesCount")
currency_count = NodePath("Minimap/CurrencyCount") currency_count = NodePath("Currencies/CoinCounter/CurrencyCount")
minimap_outline = NodePath("Minimap/MinimapBorder") minimap_outline = NodePath("Minimap/MinimapBorder")
minimap = NodePath("Minimap") minimap = NodePath("Minimap")
minimap_cam = NodePath("../MiniMapViewport/Camera3D") minimap_cam = NodePath("../MiniMapViewport/Camera3D")
@@ -328,14 +334,14 @@ hover_text = NodePath("InteractLabel")
enemy_sprites = [NodePath("EnemyTracker/TextureRect"), NodePath("EnemyTracker/TextureRect2"), NodePath("EnemyTracker/TextureRect3"), NodePath("EnemyTracker/TextureRect4"), NodePath("EnemyTracker/TextureRect5")] enemy_sprites = [NodePath("EnemyTracker/TextureRect"), NodePath("EnemyTracker/TextureRect2"), NodePath("EnemyTracker/TextureRect3"), NodePath("EnemyTracker/TextureRect4"), NodePath("EnemyTracker/TextureRect5")]
enemy_counts = [NodePath("EnemyTracker/TextureRect/Label"), NodePath("EnemyTracker/TextureRect2/Label2"), NodePath("EnemyTracker/TextureRect3/Label3"), NodePath("EnemyTracker/TextureRect4/Label4"), NodePath("EnemyTracker/TextureRect5/Label5")] enemy_counts = [NodePath("EnemyTracker/TextureRect/Label"), NodePath("EnemyTracker/TextureRect2/Label2"), NodePath("EnemyTracker/TextureRect3/Label3"), NodePath("EnemyTracker/TextureRect4/Label4"), NodePath("EnemyTracker/TextureRect5/Label5")]
pickup_notif_scene = ExtResource("17_oyeww") pickup_notif_scene = ExtResource("17_oyeww")
wave_start_label = NodePath("RichTextLabel") wave_start_label = NodePath("StartWaveLabel")
place_icon = NodePath("PlaceIcon") place_icon = NodePath("PlaceIcon")
swap_icon = NodePath("SwapIcon") swap_icon = NodePath("SwapIcon")
place_text = NodePath("PlaceIcon/RichTextLabel") place_text = NodePath("PlaceIcon/RichTextLabel")
swap_text = NodePath("SwapIcon/RichTextLabel") swap_text = NodePath("SwapIcon/RichTextLabel")
enemy_card_scene = ExtResource("18_dfkac") enemy_card_scene = ExtResource("18_dfkac")
new_energy_bar = NodePath("EnergyBar") new_energy_bar = NodePath("EnergyBar")
energy_label = NodePath("EnergyLabel") energy_label = NodePath("Currencies/HBoxContainer/EnergyLabel")
primary_duration = NodePath("weapon_duration") primary_duration = NodePath("weapon_duration")
secondary_duration = NodePath("weapon_duration2") secondary_duration = NodePath("weapon_duration2")
@@ -361,6 +367,7 @@ offset_right = -331.0
offset_bottom = -1.0 offset_bottom = -1.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0 grow_vertical = 0
mouse_filter = 2
texture = ExtResource("18_okmpi") texture = ExtResource("18_okmpi")
[node name="RichTextLabel" type="RichTextLabel" parent="HUD/PlaceIcon"] [node name="RichTextLabel" type="RichTextLabel" parent="HUD/PlaceIcon"]
@@ -370,6 +377,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
bbcode_enabled = true bbcode_enabled = true
text = "#Primary Fire#" text = "#Primary Fire#"
scroll_active = false scroll_active = false
@@ -389,6 +397,7 @@ offset_right = -6.0
offset_bottom = -1.0 offset_bottom = -1.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0 grow_vertical = 0
mouse_filter = 2
texture = ExtResource("18_okmpi") texture = ExtResource("18_okmpi")
[node name="RichTextLabel" type="RichTextLabel" parent="HUD/SwapIcon"] [node name="RichTextLabel" type="RichTextLabel" parent="HUD/SwapIcon"]
@@ -398,6 +407,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
bbcode_enabled = true bbcode_enabled = true
text = "#Secondary Fire#" text = "#Secondary Fire#"
scroll_active = false scroll_active = false
@@ -405,6 +415,7 @@ horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="Minimap" type="TextureRect" parent="HUD"] [node name="Minimap" type="TextureRect" parent="HUD"]
visible = false
anchors_preset = 1 anchors_preset = 1
anchor_left = 1.0 anchor_left = 1.0
anchor_right = 1.0 anchor_right = 1.0
@@ -430,22 +441,8 @@ grow_horizontal = 0
mouse_filter = 2 mouse_filter = 2
texture = ExtResource("16_x1xjr") texture = ExtResource("16_x1xjr")
[node name="CurrencyCount" type="Label" parent="HUD/Minimap"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -61.0
offset_top = 260.0
offset_bottom = 318.0
grow_horizontal = 0
theme_override_colors/font_color = Color(0.988235, 0.909804, 0.65098, 1)
theme_override_font_sizes/font_size = 37
text = "20"
horizontal_alignment = 1
vertical_alignment = 1
[node name="FPSCounter" type="Label" parent="HUD"] [node name="FPSCounter" type="Label" parent="HUD"]
visible = false
anchors_preset = 1 anchors_preset = 1
anchor_left = 1.0 anchor_left = 1.0
anchor_right = 1.0 anchor_right = 1.0
@@ -630,13 +627,12 @@ offset_right = 296.0
offset_bottom = 84.0 offset_bottom = 84.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme_override_colors/default_color = Color(0, 0, 0, 1) mouse_filter = 2
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
theme_override_constants/outline_size = 5
theme_override_font_sizes/normal_font_size = 32
bbcode_enabled = true bbcode_enabled = true
text = "[center]Press Button To do thing" text = "[center]Press Button To do thing"
scroll_active = false scroll_active = false
horizontal_alignment = 1
vertical_alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="HUD"] [node name="VBoxContainer" type="VBoxContainer" parent="HUD"]
anchors_preset = 4 anchors_preset = 4
@@ -647,20 +643,19 @@ offset_top = -295.0
offset_right = 445.0 offset_right = 445.0
offset_bottom = -40.0 offset_bottom = -40.0
grow_vertical = 0 grow_vertical = 0
mouse_filter = 2
alignment = 2 alignment = 2
[node name="RichTextLabel" type="RichTextLabel" parent="HUD"] [node name="StartWaveLabel" type="RichTextLabel" parent="HUD"]
anchors_preset = 5 anchors_preset = -1
anchor_left = 0.5 anchor_left = 0.34
anchor_right = 0.5 anchor_top = 0.085
offset_left = -300.0 anchor_right = 0.69
offset_top = 110.0 anchor_bottom = 0.155
offset_right = 300.0
offset_bottom = 160.0
grow_horizontal = 2 grow_horizontal = 2
theme_override_font_sizes/normal_font_size = 32 mouse_filter = 2
bbcode_enabled = true bbcode_enabled = true
text = "[center]Press #Ready# to start wave[/center]" text = "[center]#Ready# Start wave[/center]"
scroll_active = false scroll_active = false
[node name="Control2" type="Control" parent="HUD"] [node name="Control2" type="Control" parent="HUD"]
@@ -672,6 +667,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0 grow_vertical = 0
mouse_filter = 2
[node name="Control3" type="Control" parent="HUD"] [node name="Control3" type="Control" parent="HUD"]
layout_mode = 3 layout_mode = 3
@@ -682,6 +678,7 @@ anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
[node name="EnergyBar" parent="HUD" instance=ExtResource("27_14ugt")] [node name="EnergyBar" parent="HUD" instance=ExtResource("27_14ugt")]
visible = false visible = false
@@ -723,42 +720,31 @@ texture = ExtResource("26_dfkac")
expand_mode = 3 expand_mode = 3
stretch_mode = 5 stretch_mode = 5
[node name="EnergyLabel" type="Label" parent="HUD"]
anchors_preset = -1
anchor_left = 0.978
anchor_top = 0.341
anchor_right = 0.978
anchor_bottom = 0.341
offset_left = -103.0
offset_bottom = 40.0
grow_horizontal = 0
text = "energy = 0"
horizontal_alignment = 1
vertical_alignment = 1
[node name="weapon_duration" type="Label" parent="HUD"] [node name="weapon_duration" type="Label" parent="HUD"]
visible = false
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.978 anchor_left = 0.978
anchor_top = 0.376 anchor_top = 0.186
anchor_right = 0.978 anchor_right = 0.978
anchor_bottom = 0.376 anchor_bottom = 0.186
offset_left = -103.0 offset_left = -103.0
offset_bottom = 40.0 offset_bottom = 40.0
grow_horizontal = 0 grow_horizontal = 0
text = "primary weapon rounds left = 0" text = "w1 = 0"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="weapon_duration2" type="Label" parent="HUD"] [node name="weapon_duration2" type="Label" parent="HUD"]
visible = false
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.978 anchor_left = 0.978
anchor_top = 0.411 anchor_top = 0.251
anchor_right = 0.978 anchor_right = 0.978
anchor_bottom = 0.411 anchor_bottom = 0.261
offset_left = -103.0 offset_left = -103.0
offset_bottom = 40.0 offset_bottom = 40.0
grow_horizontal = 0 grow_horizontal = 0
text = "secondary weapon rounds left = 0" text = "w2 = 0"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
@@ -768,8 +754,46 @@ offset_left = 73.0
offset_top = 457.0 offset_top = 457.0
offset_right = 753.0 offset_right = 753.0
offset_bottom = 585.0 offset_bottom = 585.0
mouse_filter = 2
alignment = 1 alignment = 1
[node name="Currencies" type="VBoxContainer" parent="HUD"]
anchors_preset = -1
anchor_left = 0.95
anchor_top = 0.05
anchor_right = 0.95
anchor_bottom = 0.05
grow_horizontal = 0
[node name="CoinCounter" type="HBoxContainer" parent="HUD/Currencies"]
layout_mode = 2
[node name="CoinTexture" type="TextureRect" parent="HUD/Currencies/CoinCounter"]
layout_mode = 2
mouse_filter = 2
texture = SubResource("ViewportTexture_w13oc")
[node name="CurrencyCount" type="Label" parent="HUD/Currencies/CoinCounter"]
layout_mode = 2
text = "20"
horizontal_alignment = 1
vertical_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="HUD/Currencies"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="HUD/Currencies/HBoxContainer"]
layout_mode = 2
texture = ExtResource("30_rim6q")
expand_mode = 3
stretch_mode = 5
[node name="EnergyLabel" type="Label" parent="HUD/Currencies/HBoxContainer"]
layout_mode = 2
text = "0"
horizontal_alignment = 1
vertical_alignment = 1
[node name="WeaponSwapTimer" type="Timer" parent="."] [node name="WeaponSwapTimer" type="Timer" parent="."]
wait_time = 0.4 wait_time = 0.4
one_shot = true one_shot = true
@@ -826,6 +850,26 @@ script = ExtResource("49_60hic")
hero = NodePath("..") hero = NodePath("..")
metadata/_custom_type_script = "uid://cf7m4yyiqhhru" metadata/_custom_type_script = "uid://cf7m4yyiqhhru"
[node name="CoinViewport" type="SubViewport" parent="."]
transparent_bg = true
size = Vector2i(64, 64)
[node name="Coin" parent="CoinViewport" instance=ExtResource("51_w13oc")]
[node name="Cylinder" parent="CoinViewport/Coin" index="0"]
layers = 8
[node name="Node3D" type="Node3D" parent="CoinViewport"]
script = ExtResource("52_rim6q")
speed = 70.0
[node name="Camera3D" type="Camera3D" parent="CoinViewport/Node3D"]
transform = Transform3D(1, 0, 0, 0, 0.74214, 0.670245, 0, -0.670245, 0.74214, 0, 0.977616, 1.08572)
cull_mask = 1047560
projection = 1
size = 2.243
[connection signal="timeout" from="WeaponSwapTimer" to="." method="_on_timer_timeout"] [connection signal="timeout" from="WeaponSwapTimer" to="." method="_on_timer_timeout"]
[editable path="FirstPersonViewport/Head2/LeftHand/card_hand_model"] [editable path="FirstPersonViewport/Head2/LeftHand/card_hand_model"]
[editable path="CoinViewport/Coin"]

View File

@@ -32,6 +32,11 @@ var map_anchor: Node3D
var cards: Array[EnemyCardUI] = [] var cards: Array[EnemyCardUI] = []
func _ready() -> void:
$StartWaveLabel.theme_type_variation = "WaveStartLabel"
$InteractLabel.theme_type_variation = "InteractLabel"
func show_wave_generation_anim(wave: Wave) -> void: func show_wave_generation_anim(wave: Wave) -> void:
for card: EnemyCardUI in cards: for card: EnemyCardUI in cards:
card.queue_free() card.queue_free()
@@ -155,7 +160,7 @@ func set_currency_count(value: int) -> void:
func set_energy_amount(value: int) -> void: func set_energy_amount(value: int) -> void:
energy_label.text = "energy = " + str(value) energy_label.text = str(value)
func set_crosshair_visible(value: bool) -> void: func set_crosshair_visible(value: bool) -> void:

View File

@@ -222,8 +222,8 @@ func _unhandled_input(event: InputEvent) -> void:
if !is_multiplayer_authority(): if !is_multiplayer_authority():
return return
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
player.rotation.y -= event.relative.x * (look_sens / zoom_factor) * (-1 if invert_x else 1) player.rotation.y -= (event.relative.x * get_viewport().get_final_transform().x.x) * (look_sens / zoom_factor) * (-1 if invert_x else 1)
head_angle -= event.relative.y * (look_sens / zoom_factor) * (-1 if invert_y else 1) head_angle -= (event.relative.y * get_viewport().get_final_transform().y.y) * (look_sens / zoom_factor) * (-1 if invert_y else 1)
head_angle = clamp(head_angle, deg_to_rad(-max_look_down_angle), deg_to_rad(max_look_up_angle)) head_angle = clamp(head_angle, deg_to_rad(-max_look_down_angle), deg_to_rad(max_look_up_angle))
head.rotation.x = head_angle head.rotation.x = head_angle
if weapon_holder: if weapon_holder:

View File

@@ -21,7 +21,6 @@ var temp_data: SaveData
func _ready() -> void: func _ready() -> void:
$ProfileEditor/VBoxContainer/HBoxContainer/DisplayName.text = Data.player_profile.display_name
load_stats(Data.save_data) load_stats(Data.save_data)
#bg_level.a_star_graph_3d.make_grid() #bg_level.a_star_graph_3d.make_grid()
#bg_level.a_star_graph_3d.find_path() #bg_level.a_star_graph_3d.find_path()

View File

@@ -1,6 +1,5 @@
[gd_scene load_steps=27 format=3 uid="uid://8yv7excojcg0"] [gd_scene load_steps=25 format=3 uid="uid://8yv7excojcg0"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://UI/new_theme.tres" id="1_p1cib"]
[ext_resource type="Script" uid="uid://ci8vq73u23viy" path="res://Scenes/Menus/MainMenu/main_menu.gd" id="2_ivytu"] [ext_resource type="Script" uid="uid://ci8vq73u23viy" path="res://Scenes/Menus/MainMenu/main_menu.gd" id="2_ivytu"]
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn" id="3_l8r4a"] [ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn" id="3_l8r4a"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="5_cwn2i"] [ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="5_cwn2i"]
@@ -18,24 +17,23 @@
[ext_resource type="Texture2D" uid="uid://cpa1hl36xfplg" path="res://Assets/Textures/first_scroll_seen.png" id="16_sv1gy"] [ext_resource type="Texture2D" uid="uid://cpa1hl36xfplg" path="res://Assets/Textures/first_scroll_seen.png" id="16_sv1gy"]
[ext_resource type="Texture2D" uid="uid://ctbi3gm1me1t5" path="res://Assets/Textures/unlock_mage_achievement.png" id="17_6t4jd"] [ext_resource type="Texture2D" uid="uid://ctbi3gm1me1t5" path="res://Assets/Textures/unlock_mage_achievement.png" id="17_6t4jd"]
[ext_resource type="Script" uid="uid://cxrm2naq75jo1" path="res://Scripts/mod_menu.gd" id="19_6t4jd"] [ext_resource type="Script" uid="uid://cxrm2naq75jo1" path="res://Scripts/mod_menu.gd" id="19_6t4jd"]
[ext_resource type="FontFile" uid="uid://c3hwdjscf2hnk" path="res://Assets/Fonts/OpenType (.otf)/Kaph-Regular.otf" id="20_y5bw6"]
[sub_resource type="ViewportTexture" id="ViewportTexture_5u75i"] [sub_resource type="ViewportTexture" id="ViewportTexture_5u75i"]
viewport_path = NodePath("SubViewport") viewport_path = NodePath("SubViewport")
[sub_resource type="AtlasTexture" id="AtlasTexture_6t4jd"] [sub_resource type="AtlasTexture" id="AtlasTexture_74epv"]
resource_local_to_scene = true resource_local_to_scene = true
atlas = ExtResource("8_1vnym") atlas = ExtResource("8_1vnym")
region = Rect2(0, 0, 32, 32) region = Rect2(0, 0, 32, 32)
[sub_resource type="Resource" id="Resource_y5bw6"] [sub_resource type="Resource" id="Resource_sv1gy"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("5_u514r") script = ExtResource("5_u514r")
title = "dog" title = "dog"
target_type = 1 target_type = 1
icon = ExtResource("7_2sylv") icon = ExtResource("7_2sylv")
death_sprite = ExtResource("6_rsxwm") death_sprite = ExtResource("6_rsxwm")
sprite = SubResource("AtlasTexture_6t4jd") sprite = SubResource("AtlasTexture_74epv")
spawn_power = 10 spawn_power = 10
health = 180 health = 180
penalty = 10 penalty = 10
@@ -69,23 +67,22 @@ region = Rect2(0, 0, 36, 36)
atlas = ExtResource("17_6t4jd") atlas = ExtResource("17_6t4jd")
region = Rect2(0, 0, 36, 36) region = Rect2(0, 0, 36, 36)
[node name="MainMenu" type="Control" node_paths=PackedStringArray("bg_level", "game_select_menu", "main_controls", "seed_entry", "profile_controls", "mods_controls")] [node name="MainMenu" type="Control" node_paths=PackedStringArray("bg_level", "game_select_menu", "main_controls", "seed_entry", "mods_controls")]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme = ExtResource("1_p1cib")
script = ExtResource("2_ivytu") script = ExtResource("2_ivytu")
bg_level = NodePath("SubViewport/GridMap") bg_level = NodePath("SubViewport/GridMap")
game_select_menu = NodePath("GameSelectMenu") game_select_menu = NodePath("GameSelectMenu")
main_controls = NodePath("MainControls") main_controls = NodePath("MainControls")
seed_entry = NodePath("GameSelectMenu/VBoxContainer/HBoxContainer2/LineEdit") seed_entry = NodePath("GameSelectMenu/VBoxContainer/HBoxContainer2/LineEdit")
profile_controls = NodePath("ProfileEditor")
mods_controls = NodePath("ModsMenu") mods_controls = NodePath("ModsMenu")
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
visible = false
layout_mode = 1 layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -100,34 +97,27 @@ anchors_preset = -1
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 0.5 anchor_bottom = 0.5
grow_horizontal = 2 grow_horizontal = 2
theme_override_colors/font_color = Color(0.8, 0.5644, 0.344, 1)
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
theme_override_constants/line_spacing = -35
theme_override_constants/outline_size = 55
theme_override_fonts/font = ExtResource("20_y5bw6")
theme_override_font_sizes/font_size = 146
text = "decked text = "decked
out out
defense" defense"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="MainControls" type="HBoxContainer" parent="."] [node name="MainControls" type="VBoxContainer" parent="."]
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.05 anchor_left = 0.1
anchor_top = 0.95 anchor_top = 0.4
anchor_right = 0.95 anchor_right = 0.9
anchor_bottom = 0.95 anchor_bottom = 0.9
offset_top = -60.0 alignment = 2
grow_horizontal = 2
grow_vertical = 0
[node name="PlayButton" type="Button" parent="MainControls"] [node name="PlayButton" type="Button" parent="MainControls"]
layout_mode = 2 layout_mode = 2
text = "Play" text = "Play"
[node name="MultiplayerButton" type="Button" parent="MainControls"] [node name="MultiplayerButton" type="Button" parent="MainControls"]
visible = false
layout_mode = 2 layout_mode = 2
disabled = true disabled = true
text = "Multiplayer" text = "Multiplayer"
@@ -136,6 +126,10 @@ text = "Multiplayer"
layout_mode = 2 layout_mode = 2
text = "Mods" text = "Mods"
[node name="StatsButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Stats"
[node name="OptionsButton" type="Button" parent="MainControls"] [node name="OptionsButton" type="Button" parent="MainControls"]
layout_mode = 2 layout_mode = 2
text = "Options text = "Options
@@ -146,50 +140,11 @@ layout_mode = 2
text = "Quit text = "Quit
" "
[node name="ProfileEditor" type="PanelContainer" parent="."]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.97
anchor_top = 0.95
anchor_right = 0.97
anchor_bottom = 0.95
offset_left = -421.0
offset_top = -150.0
grow_horizontal = 0
grow_vertical = 0
[node name="VBoxContainer" type="VBoxContainer" parent="ProfileEditor"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileEditor/VBoxContainer"]
layout_mode = 2
text = "Current Profile"
[node name="HBoxContainer" type="HBoxContainer" parent="ProfileEditor/VBoxContainer"]
layout_mode = 2
[node name="DisplayName" type="Label" parent="ProfileEditor/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Dummy Name"
[node name="MarginContainer" type="MarginContainer" parent="ProfileEditor/VBoxContainer/HBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 29
theme_override_constants/margin_top = 2
theme_override_constants/margin_right = 31
theme_override_constants/margin_bottom = 4
[node name="DisplayNameEdit" type="Button" parent="ProfileEditor/VBoxContainer/HBoxContainer/MarginContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "View Profile"
[node name="SubViewport" type="SubViewport" parent="."] [node name="SubViewport" type="SubViewport" parent="."]
size = Vector2i(1920, 1080) size = Vector2i(1920, 1080)
[node name="GridMap" parent="SubViewport" instance=ExtResource("3_l8r4a")] [node name="GridMap" parent="SubViewport" instance=ExtResource("3_l8r4a")]
enemy_pool = Array[ExtResource("5_u514r")]([SubResource("Resource_y5bw6"), ExtResource("9_hdp0s"), ExtResource("10_day26"), ExtResource("11_1mes0"), ExtResource("12_5vny5"), ExtResource("13_xb7gj")]) enemy_pool = Array[ExtResource("5_u514r")]([SubResource("Resource_sv1gy"), ExtResource("9_hdp0s"), ExtResource("10_day26"), ExtResource("11_1mes0"), ExtResource("12_5vny5"), ExtResource("13_xb7gj")])
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_2jyua") stream = SubResource("AudioStreamRandomizer_2jyua")
@@ -617,8 +572,6 @@ text = "Confirm"
[connection signal="pressed" from="MainControls/OptionsButton" to="." method="_on_options_button_pressed"] [connection signal="pressed" from="MainControls/OptionsButton" to="." method="_on_options_button_pressed"]
[connection signal="mouse_entered" from="MainControls/QuitButton" to="." method="_on_button_mouse_entered"] [connection signal="mouse_entered" from="MainControls/QuitButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="MainControls/QuitButton" to="." method="_on_quit_button_pressed"] [connection signal="pressed" from="MainControls/QuitButton" to="." method="_on_quit_button_pressed"]
[connection signal="mouse_entered" from="ProfileEditor/VBoxContainer/HBoxContainer/MarginContainer/DisplayNameEdit" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="ProfileEditor/VBoxContainer/HBoxContainer/MarginContainer/DisplayNameEdit" to="." method="_on_display_name_edit_pressed"]
[connection signal="pressed" from="GameSelectMenu/VBoxContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"] [connection signal="pressed" from="GameSelectMenu/VBoxContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="GameSelectMenu/VBoxContainer/StandardButton" to="." method="_on_standard_button_pressed"] [connection signal="pressed" from="GameSelectMenu/VBoxContainer/StandardButton" to="." method="_on_standard_button_pressed"]
[connection signal="pressed" from="GameSelectMenu/VBoxContainer/DailyButton" to="." method="_on_daily_button_pressed"] [connection signal="pressed" from="GameSelectMenu/VBoxContainer/DailyButton" to="." method="_on_daily_button_pressed"]

View File

@@ -71,8 +71,8 @@ func networked_spawn_tower(card_index: int, caller_id: int) -> void:
tower.owner_id = caller_id tower.owner_id = caller_id
tower.position = Vector3(0, 1.2, 0) tower.position = Vector3(0, 1.2, 0)
minimap_icon.modulate = Color.RED minimap_icon.modulate = Color.RED
duration = card.duration duration = 999
enable_duration_sprites() #enable_duration_sprites()
add_child(tower) add_child(tower)
@@ -82,6 +82,6 @@ func networked_remove_tower() -> void:
#game_manager.connected_players_nodes[tower.owner_id].add_card(inventory.remove_at(0)) #game_manager.connected_players_nodes[tower.owner_id].add_card(inventory.remove_at(0))
#game_manager.connected_players_nodes[tower.owner_id].unready_self() #game_manager.connected_players_nodes[tower.owner_id].unready_self()
tower.queue_free() tower.queue_free()
disable_duration_sprites() #disable_duration_sprites()
tower = null tower = null
minimap_icon.modulate = Color.GREEN minimap_icon.modulate = Color.GREEN

View File

@@ -11,7 +11,7 @@ title_text = NodePath("Title")
description = NodePath("Description") description = NodePath("Description")
target_label = NodePath("Title2") target_label = NodePath("Title2")
energy_cost = NodePath("EnergyCost") energy_cost = NodePath("EnergyCost")
duration = NodePath("Duration") duration = NodePath("")
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture_filter = 1 texture_filter = 1
@@ -72,13 +72,3 @@ theme_override_colors/font_color = Color(0.228497, 0.570097, 0.884935, 1)
text = "3" text = "3"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="Duration" type="Label" parent="."]
offset_left = 125.0
offset_top = 55.0
offset_right = 42.0
offset_bottom = 95.0
theme_override_colors/font_color = Color(0.228497, 0.570097, 0.884935, 1)
text = "4"
horizontal_alignment = 1
vertical_alignment = 1

View File

@@ -6,10 +6,11 @@
viewport_path = NodePath("SubViewport") viewport_path = NodePath("SubViewport")
[node name="Node3D" type="Sprite3D"] [node name="Node3D" type="Sprite3D"]
pixel_size = 0.0006 pixel_size = 0.005
billboard = 1 billboard = 1
no_depth_test = true no_depth_test = true
fixed_size = true fixed_size = true
texture_filter = 2
render_priority = 1 render_priority = 1
texture = SubResource("ViewportTexture_ppqlh") texture = SubResource("ViewportTexture_ppqlh")
script = ExtResource("1_lgvaq") script = ExtResource("1_lgvaq")
@@ -25,9 +26,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_type_variation = &"DamageNumLabel"
theme_override_constants/outline_size = 5
theme_override_font_sizes/font_size = 60
text = "12345" text = "12345"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1

View File

@@ -7,7 +7,7 @@ enum Faction {
MAGE = 2, MAGE = 2,
} }
@export var duration: int @export var cost: int
@export var rarity: Data.Rarity @export var rarity: Data.Rarity
@export var faction: Faction @export var faction: Faction
@export var turret_scene: PackedScene @export var turret_scene: PackedScene

View File

@@ -15,17 +15,7 @@ func set_card(value: Card) -> void:
title_text.text = stats.display_name title_text.text = stats.display_name
target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type]) target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type])
rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64) rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64)
if stats.rarity == Data.Rarity.COMMON: energy_cost.text = str(value.cost)
energy_cost.text = "2"
if stats.rarity == Data.Rarity.UNCOMMON:
energy_cost.text = "4"
if stats.rarity == Data.Rarity.RARE:
energy_cost.text = "6"
if stats.rarity == Data.Rarity.EPIC:
energy_cost.text = "8"
if stats.rarity == Data.Rarity.LEGENDARY:
energy_cost.text = "10"
duration.text = str(value.duration)
func process_card_text(card_text: CardText) -> String: func process_card_text(card_text: CardText) -> String:

View File

@@ -19,8 +19,9 @@ enum EnemyType {UNDEFINED = 0, LAND = 1, AIR = 2}
enum Rarity {COMMON = 0, UNCOMMON = 1, RARE = 2, EPIC = 3, LEGENDARY = 4} enum Rarity {COMMON = 0, UNCOMMON = 1, RARE = 2, EPIC = 3, LEGENDARY = 4}
enum CardTags {DAMAGE = 0, UTILITY = 1, TARGETS_FLYING = 2} enum CardTags {DAMAGE = 0, UTILITY = 1, TARGETS_FLYING = 2}
static var weapon_recharge_delay: float = 1.5 static var weapon_recharge_delay: float = 0.5
static var starting_cash: int = 10 static var starting_cash: int = 10
static var player_energy: int = 6
static var wall_cost: int = 1 static var wall_cost: int = 1
static var printer_cost: int = 15 static var printer_cost: int = 15
static var rarity_weights: Dictionary = { static var rarity_weights: Dictionary = {

View File

@@ -44,8 +44,9 @@ func _ready() -> void:
version_label.text = "WORK IN PROGRESS | ALPHA - VERSION " + version + " | PLAYTEST" version_label.text = "WORK IN PROGRESS | ALPHA - VERSION " + version + " | PLAYTEST"
version_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER version_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
version_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER version_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
version_label.add_theme_font_size_override("font_size", 18) version_label.theme_type_variation = "VersionLabel"
version_label.add_theme_color_override("font_color", Color(0.85, 0.85, 0.85, 0.7)) #version_label.add_theme_font_size_override("font_size", 18)
#version_label.add_theme_color_override("font_color", Color(0.85, 0.85, 0.85, 0.7))
version_label.set_anchors_preset(Control.PRESET_TOP_WIDE) version_label.set_anchors_preset(Control.PRESET_TOP_WIDE)
UILayer.add_child(version_label) UILayer.add_child(version_label)
Input.set_custom_mouse_cursor(load("res://Assets/Textures/cursor_none.png"), Input.CURSOR_ARROW, Vector2(9, 6)) Input.set_custom_mouse_cursor(load("res://Assets/Textures/cursor_none.png"), Input.CURSOR_ARROW, Vector2(9, 6))
@@ -59,7 +60,7 @@ func parse_command(text: String, peer_id: int) -> void:
for x: Card in Data.cards: for x: Card in Data.cards:
if x.display_name == gift_name: if x.display_name == gift_name:
gift = x gift = x
connected_players_nodes[peer_id].inventory.add(gift) connected_players_nodes[peer_id].hand.add(gift)
elif text.substr(1, 2) == "tr": elif text.substr(1, 2) == "tr":
chatbox.append_message("SERVER", Color.TOMATO, "[color=#f7a8b8]t[color=#55cdfc]r[color=#ffffff]a[color=#55cdfc]n[color=#f7a8b8]s [color=#e50000]r[color=#ff8d00]i[color=#ffee00]g[color=#028121]h[color=#004cff]t[color=#760088]s[color=white]!!") chatbox.append_message("SERVER", Color.TOMATO, "[color=#f7a8b8]t[color=#55cdfc]r[color=#ffffff]a[color=#55cdfc]n[color=#f7a8b8]s [color=#e50000]r[color=#ff8d00]i[color=#ffee00]g[color=#028121]h[color=#004cff]t[color=#760088]s[color=white]!!")
elif text.substr(1, 6) == "length": elif text.substr(1, 6) == "length":
@@ -165,8 +166,8 @@ func spawn_enemy_wave() -> void:
for spawn: EnemySpawner in level.enemy_spawns: for spawn: EnemySpawner in level.enemy_spawns:
spawn.visible = false spawn.visible = false
spawn.spawn_wave() spawn.spawn_wave()
for tower_base: TowerBase in level.walls.values(): #for tower_base: TowerBase in level.walls.values():
tower_base.disable_duration_sprites() #tower_base.disable_duration_sprites()
wave_started.emit() wave_started.emit()
@@ -240,7 +241,7 @@ func end_wave() -> void:
var player: Hero = connected_players_nodes[peer_id] as Hero var player: Hero = connected_players_nodes[peer_id] as Hero
player.hud.set_wave_count(wave) player.hud.set_wave_count(wave)
player.currency += ceili(pot / connected_players_nodes.size()) player.currency += ceili(pot / connected_players_nodes.size())
player.energy = 12 player.energy = Data.player_energy
player.iterate_duration() player.iterate_duration()
player.draw_to_hand_size() player.draw_to_hand_size()
player.unready_self() player.unready_self()
@@ -248,7 +249,7 @@ func end_wave() -> void:
spawn.visible = true spawn.visible = true
for tower_base: TowerBase in level.walls.values(): for tower_base: TowerBase in level.walls.values():
if tower_base.has_card: if tower_base.has_card:
tower_base.enable_duration_sprites() #tower_base.enable_duration_sprites()
tower_base.iterate_duration() tower_base.iterate_duration()
if is_multiplayer_authority(): if is_multiplayer_authority():
if NoiseRandom.randf_in_range(23 * wave, 0.0, 1.0) <= shop_chance: if NoiseRandom.randf_in_range(23 * wave, 0.0, 1.0) <= shop_chance:
@@ -308,7 +309,7 @@ func start() -> void:
spawn_players() spawn_players()
for peer_id: int in connected_players_nodes: for peer_id: int in connected_players_nodes:
connected_players_nodes[peer_id].currency = ceili(float(Data.starting_cash) / float(connected_players_nodes.size())) connected_players_nodes[peer_id].currency = ceili(float(Data.starting_cash) / float(connected_players_nodes.size()))
connected_players_nodes[peer_id].energy = 12 connected_players_nodes[peer_id].energy = Data.player_energy
connected_players_nodes[peer_id].draw_pile.shuffle() connected_players_nodes[peer_id].draw_pile.shuffle()
connected_players_nodes[peer_id].draw_to_hand_size() connected_players_nodes[peer_id].draw_to_hand_size()

View File

@@ -6,18 +6,17 @@ render_mode blend_mix,
specular_disabled, specular_disabled,
vertex_lighting; vertex_lighting;
uniform bool affine_mapping = false; global uniform bool affine_mapping = false;
global uniform ivec2 jitter_resolution = ivec2(320, 240);
uniform sampler2D albedo : source_color, filter_nearest; uniform sampler2D albedo : source_color, filter_nearest;
uniform float alpha_scissor : hint_range(0, 1) = 0.5; uniform float alpha_scissor : hint_range(0, 1) = 0.5;
uniform float jitter: hint_range(0, 1) = 0.25;
uniform ivec2 resolution = ivec2(320, 240);
vec4 snap_to_position(vec4 base_position) vec4 snap_to_position(vec4 base_position)
{ {
vec4 snapped_position = base_position; vec4 snapped_position = base_position;
snapped_position.xyz = base_position.xyz / base_position.w; snapped_position.xyz = base_position.xyz / base_position.w;
vec2 snap_resulotion = floor(vec2(resolution) * (1.0 - jitter)); vec2 snap_resulotion = floor(vec2(jitter_resolution));
snapped_position.x = floor(snap_resulotion.x * snapped_position.x) / snap_resulotion.x; snapped_position.x = floor(snap_resulotion.x * snapped_position.x) / snap_resulotion.x;
snapped_position.y = floor(snap_resulotion.y * snapped_position.y) / snap_resulotion.y; snapped_position.y = floor(snap_resulotion.y * snapped_position.y) / snap_resulotion.y;

View File

@@ -0,0 +1,39 @@
shader_type canvas_item;
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
uniform int color_depth : hint_range(1, 8) = 5;
uniform bool dithering = true;
uniform int resolution_scale = 4;
int dithering_pattern(ivec2 fragcoord) {
const int pattern[] = {
-4, +0, -3, +1,
+2, -2, +3, -1,
-3, +1, -4, +0,
+3, -1, +2, -2
};
int x = fragcoord.x % 4;
int y = fragcoord.y % 4;
return pattern[y * 4 + x];
}
void fragment() {
ivec2 uv = ivec2(FRAGCOORD.xy / float(resolution_scale));
vec3 color = texelFetch(SCREEN_TEXTURE, uv * resolution_scale, 0).rgb;
// Convert from [0.0, 1.0] range to [0, 255] range
ivec3 c = ivec3(round(color * 255.0));
// Apply the dithering pattern
if (dithering) {
c += ivec3(dithering_pattern(uv));
}
// Truncate from 8 bits to color_depth bits
c >>= (8 - color_depth);
// Convert back to [0.0, 1.0] range
COLOR = vec4(vec3(c) / float(1 << color_depth), 1.0);
}

View File

@@ -0,0 +1 @@
uid://dvvn4x6geogiv

View File

@@ -4,15 +4,18 @@ extends Control
@export var icon: TextureRect @export var icon: TextureRect
@export var tags: VBoxContainer @export var tags: VBoxContainer
@export var cost_label: Label @export var cost_label: Label
@export var lifetime_label: Label
@export var unselected_style_box: StyleBoxFlat @export var unselected_style_box: StyleBoxFlat
@export var selected_style_box: StyleBoxFlat @export var selected_style_box: StyleBoxFlat
@export var amount_label: Label
func set_amount(num: int) -> void:
amount_label.text = "x" + str(num)
func set_card(card: Card) -> void: func set_card(card: Card) -> void:
icon.texture = card.icon icon.texture = card.icon
cost_label.text = str(card.rarity + 1) cost_label.text = str(card.cost)
lifetime_label.text = str(card.duration)
for i: int in tags.get_child_count(): for i: int in tags.get_child_count():
tags.get_child(i).queue_free() tags.get_child(i).queue_free()
for tag: Data.CardTags in card.tags: for tag: Data.CardTags in card.tags:

View File

@@ -6,17 +6,17 @@
[ext_resource type="StyleBox" uid="uid://csbgndc6vfayf" path="res://UI/CardSelectionBox/selected_style_box.tres" id="2_ek0dh"] [ext_resource type="StyleBox" uid="uid://csbgndc6vfayf" path="res://UI/CardSelectionBox/selected_style_box.tres" id="2_ek0dh"]
[ext_resource type="Texture2D" uid="uid://bpcyxdpog3w85" path="res://Assets/Textures/assault_icon.png" id="2_m0g3h"] [ext_resource type="Texture2D" uid="uid://bpcyxdpog3w85" path="res://Assets/Textures/assault_icon.png" id="2_m0g3h"]
[node name="Control" type="Control" node_paths=PackedStringArray("icon", "tags", "cost_label", "lifetime_label")] [node name="Control" type="Control" node_paths=PackedStringArray("icon", "tags", "cost_label", "amount_label")]
custom_minimum_size = Vector2(170, 0) custom_minimum_size = Vector2(170, 0)
layout_mode = 3 layout_mode = 3
anchors_preset = 0 anchors_preset = 0
script = ExtResource("1_m0g3h") script = ExtResource("1_m0g3h")
icon = NodePath("PanelContainer/HBoxContainer/Icon") icon = NodePath("PanelContainer/VBoxContainer/HBoxContainer/Icon")
tags = NodePath("PanelContainer/HBoxContainer/MarginContainer/Tags") tags = NodePath("PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/Tags")
cost_label = NodePath("PanelContainer/HBoxContainer/Stats/Cost") cost_label = NodePath("PanelContainer/VBoxContainer/HBoxContainer/Stats/Cost")
lifetime_label = NodePath("PanelContainer/HBoxContainer/Stats/Lifetime")
unselected_style_box = ExtResource("2_0817q") unselected_style_box = ExtResource("2_0817q")
selected_style_box = ExtResource("2_ek0dh") selected_style_box = ExtResource("2_ek0dh")
amount_label = NodePath("PanelContainer/VBoxContainer/Label")
[node name="PanelContainer" type="PanelContainer" parent="."] [node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2 layout_mode = 2
@@ -24,45 +24,49 @@ offset_right = 152.0
offset_bottom = 124.0 offset_bottom = 124.0
theme_override_styles/panel = ExtResource("2_ek0dh") theme_override_styles/panel = ExtResource("2_ek0dh")
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"] [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/HBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_constants/margin_top = 10 theme_override_constants/margin_top = 10
theme_override_constants/margin_bottom = 10 theme_override_constants/margin_bottom = 10
[node name="Tags" type="VBoxContainer" parent="PanelContainer/HBoxContainer/MarginContainer"] [node name="Tags" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer"]
layout_mode = 2 layout_mode = 2
[node name="Icon2" type="TextureRect" parent="PanelContainer/HBoxContainer/MarginContainer/Tags"] [node name="Icon2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/Tags"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
texture = ExtResource("1_k8442") texture = ExtResource("1_k8442")
stretch_mode = 5 stretch_mode = 5
[node name="Icon" type="TextureRect" parent="PanelContainer/HBoxContainer"] [node name="Icon" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
texture = ExtResource("2_m0g3h") texture = ExtResource("2_m0g3h")
stretch_mode = 5 stretch_mode = 5
[node name="Stats" type="VBoxContainer" parent="PanelContainer/HBoxContainer"] [node name="Stats" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="Cost" type="Label" parent="PanelContainer/HBoxContainer/Stats"] [node name="Cost" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/Stats"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 7 size_flags_vertical = 7
text = "3" text = "3"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="Lifetime" type="Label" parent="PanelContainer/HBoxContainer/Stats"] [node name="Label" type="Label" parent="PanelContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 7 size_flags_vertical = 8
text = "6" text = "x2"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1

View File

@@ -119,6 +119,8 @@ func gain_energy(energy_gained: float, energy_type: Data.EnergyType = Data.Energ
energy += energy_gained energy += energy_gained
progress_bar.value = energy progress_bar.value = energy
big_progress_bar.value = energy big_progress_bar.value = energy
#TODO: Theres a bug here that should be fixed by making the discrete and continuous bars
#into a different ui element which i think i wanna do anyway
if energy_type == Data.EnergyType.DISCRETE and int(energy) > prev_energy_int: if energy_type == Data.EnergyType.DISCRETE and int(energy) > prev_energy_int:
cell_icons[int(energy) - 1].visible = true cell_icons[int(energy) - 1].visible = true
prev_energy_int = int(energy) prev_energy_int = int(energy)

View File

@@ -1,5 +1,6 @@
[gd_resource type="Theme" load_steps=16 format=3 uid="uid://b6a0ip4p72tgx"] [gd_resource type="Theme" load_steps=17 format=3 uid="uid://b6a0ip4p72tgx"]
[ext_resource type="FontFile" uid="uid://bqy8dm2o3piqm" path="res://Assets/Fonts/Quaver v1.0/quaver.ttf" id="2_i4k6b"]
[ext_resource type="StyleBox" uid="uid://lpof3jdy7hr7" path="res://UI/new_style_box_flat.tres" id="4_o03gw"] [ext_resource type="StyleBox" uid="uid://lpof3jdy7hr7" path="res://UI/new_style_box_flat.tres" id="4_o03gw"]
[ext_resource type="FontFile" uid="uid://c17ml15e2qan0" path="res://Assets/Fonts/TrueType (.ttf)/Sagewold-Regular.ttf" id="4_v3wda"] [ext_resource type="FontFile" uid="uid://c17ml15e2qan0" path="res://Assets/Fonts/TrueType (.ttf)/Sagewold-Regular.ttf" id="4_v3wda"]
@@ -97,6 +98,9 @@ CheckButton/styles/hover = SubResource("StyleBoxEmpty_v4c6d")
CheckButton/styles/hover_pressed = SubResource("StyleBoxEmpty_pdxi3") CheckButton/styles/hover_pressed = SubResource("StyleBoxEmpty_pdxi3")
CheckButton/styles/normal = SubResource("StyleBoxEmpty_8epi8") CheckButton/styles/normal = SubResource("StyleBoxEmpty_8epi8")
CheckButton/styles/pressed = SubResource("StyleBoxEmpty_o02xp") CheckButton/styles/pressed = SubResource("StyleBoxEmpty_o02xp")
DamageNumLabel/base_type = &"Label"
DamageNumLabel/font_sizes/font_size = 8
DamageNumLabel/fonts/font = ExtResource("2_i4k6b")
HBoxContainer/constants/separation = 10 HBoxContainer/constants/separation = 10
Label/colors/font_color = Color(0.941129, 0.938917, 0.927802, 1) Label/colors/font_color = Color(0.941129, 0.938917, 0.927802, 1)
Label/font_sizes/font_size = 34 Label/font_sizes/font_size = 34
@@ -108,6 +112,7 @@ LineEdit/fonts/font = ExtResource("4_v3wda")
LineEdit/styles/focus = SubResource("StyleBoxFlat_s5vy1") LineEdit/styles/focus = SubResource("StyleBoxFlat_s5vy1")
LineEdit/styles/normal = SubResource("StyleBoxFlat_s5vy1") LineEdit/styles/normal = SubResource("StyleBoxFlat_s5vy1")
PanelContainer/styles/panel = ExtResource("4_o03gw") PanelContainer/styles/panel = ExtResource("4_o03gw")
StartWaveLabel/base_type = &"Label"
TabBar/fonts/font = ExtResource("4_v3wda") TabBar/fonts/font = ExtResource("4_v3wda")
TabContainer/colors/font_hovered_color = Color(0.894118, 0.890196, 0.870588, 1) TabContainer/colors/font_hovered_color = Color(0.894118, 0.890196, 0.870588, 1)
TabContainer/colors/font_selected_color = Color(0.895148, 0.891833, 0.869117, 1) TabContainer/colors/font_selected_color = Color(0.895148, 0.891833, 0.869117, 1)
@@ -120,3 +125,6 @@ TabContainer/styles/tab_focus = SubResource("StyleBoxFlat_ehga6")
TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_tuxkj") TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_tuxkj")
TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_ehga6") TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_ehga6")
TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_tuxkj") TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_tuxkj")
VersionLabel/base_type = &"Label"
VersionLabel/colors/font_color = Color(0.85, 0.85, 0.85, 0.7)
VersionLabel/font_sizes/font_size = 16

9
UI/psx_ui.tres Normal file
View File

@@ -0,0 +1,9 @@
[gd_resource type="Theme" format=3 uid="uid://jn4qqx5hxc5i"]
[resource]
Button/font_sizes/font_size = 8
InteractLabel/base_type = &"Label"
StartWaveLabel/base_type = &"Label"
VersionLabel/base_type = &"Label"
VersionLabel/colors/font_color = Color(0.85, 0.85, 0.85, 0.7)
VersionLabel/font_sizes/font_size = 8

View File

@@ -6,8 +6,5 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_r6w0r") shader = ExtResource("1_r6w0r")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_kbuty") shader_parameter/albedo = ExtResource("2_kbuty")
shader_parameter/alpha_scissor = 0.5 shader_parameter/alpha_scissor = 0.5
shader_parameter/jitter = 0.25
shader_parameter/resolution = Vector2i(320, 240)

View File

@@ -1,11 +1,14 @@
[gd_scene load_steps=33 format=3 uid="uid://y1qa1g3ic8sp"] [gd_scene load_steps=38 format=3 uid="uid://y1qa1g3ic8sp"]
[ext_resource type="Script" uid="uid://cvejbo3srx8py" path="res://Scripts/level.gd" id="1_ws6nn"] [ext_resource type="Script" uid="uid://cvejbo3srx8py" path="res://Scripts/level.gd" id="1_ws6nn"]
[ext_resource type="PackedScene" uid="uid://d2yv447trxkwt" path="res://Scenes/enemy_spawner.tscn" id="3_5imwp"] [ext_resource type="PackedScene" uid="uid://d2yv447trxkwt" path="res://Scenes/enemy_spawner.tscn" id="3_5imwp"]
[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="3_6od8s"] [ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="3_6od8s"]
[ext_resource type="Resource" uid="uid://8eba45hql7bo" path="res://Enemies/EyeDog/eye_dog.tres" id="5_6od8s"] [ext_resource type="Texture2D" uid="uid://cdnhe2mi5c5ln" path="res://Assets/Textures/dead_eye_dog.png" id="3_uh5sr"]
[ext_resource type="Texture2D" uid="uid://g00wwrlxxdc5" path="res://Assets/Textures/icon_eye_dog.png" id="4_g08yk"]
[ext_resource type="PackedScene" uid="uid://bvq6tbkuv2mfp" path="res://Enemies/EyeDog/eye_dog.tscn" id="5_asmpj"]
[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="5_j6d65"] [ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Enemies/ElderEyeDog/elder_eye_dog.tres" id="5_j6d65"]
[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="6_ks6qx"] [ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Enemies/BabyEyeDog/baby_eye_dog.tres" id="6_ks6qx"]
[ext_resource type="Texture2D" uid="uid://dj13g1w14mekw" path="res://Assets/Textures/eye_dog.png" id="6_vrxvq"]
[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="9_4gdda"] [ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Enemies/Crystalisk/crystalisk.tres" id="9_4gdda"]
[ext_resource type="PackedScene" uid="uid://1b2ikdanl66b" path="res://Scenes/CardPrinter/card_printer.tscn" id="9_r25gu"] [ext_resource type="PackedScene" uid="uid://1b2ikdanl66b" path="res://Scenes/CardPrinter/card_printer.tscn" id="9_r25gu"]
[ext_resource type="Script" uid="uid://cxwtuxytavfu5" path="res://Scripts/enemy_goal.gd" id="9_s3rd7"] [ext_resource type="Script" uid="uid://cxwtuxytavfu5" path="res://Scripts/enemy_goal.gd" id="9_s3rd7"]
@@ -21,6 +24,36 @@
[ext_resource type="Texture2D" uid="uid://dqrfgw65d0sq8" path="res://Assets/Textures/bridge_map.png" id="28_6od8s"] [ext_resource type="Texture2D" uid="uid://dqrfgw65d0sq8" path="res://Assets/Textures/bridge_map.png" id="28_6od8s"]
[ext_resource type="PackedScene" uid="uid://ca174636iktc6" path="res://Worlds/GreenPlanet/Levels/Bridge/bridge.glb" id="30_ttr7n"] [ext_resource type="PackedScene" uid="uid://ca174636iktc6" path="res://Worlds/GreenPlanet/Levels/Bridge/bridge.glb" id="30_ttr7n"]
[sub_resource type="AtlasTexture" id="AtlasTexture_p1iv6"]
resource_local_to_scene = true
atlas = ExtResource("6_vrxvq")
region = Rect2(0, 0, 32, 32)
[sub_resource type="Resource" id="Resource_uvxyn"]
resource_local_to_scene = true
script = ExtResource("3_6od8s")
title = "Eye Dog"
target_type = 1
scene = ExtResource("5_asmpj")
icon = ExtResource("4_g08yk")
death_sprite = ExtResource("3_uh5sr")
sprite = SubResource("AtlasTexture_p1iv6")
spawn_power = 10
health = 180
penalty = 10
movement_speed = 1.5
spawn_cooldown = 1.2
common_group = 6
common_cost = 1
uncommon_group = 10
uncommon_cost = 2
rare_group = 16
rare_cost = 3
epic_group = 22
epic_cost = 5
legendary_group = 28
legendary_cost = 6
[sub_resource type="Curve3D" id="Curve3D_3rdl2"] [sub_resource type="Curve3D" id="Curve3D_3rdl2"]
_data = { _data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 12.3765, 1.00006, -13.0874, 0, 0, 0, 0, 0, 0, -13.1528, 5.17887, -14.4739), "points": PackedVector3Array(0, 0, 0, 0, 0, 0, 12.3765, 1.00006, -13.0874, 0, 0, 0, 0, 0, 0, -13.1528, 5.17887, -14.4739),
@@ -235,7 +268,7 @@ size = Vector3(70.0478, 1, 73.4615)
[node name="Bridge" type="Node3D" node_paths=PackedStringArray("tower_path", "player_spawns", "enemy_spawns", "enemy_goals", "corpses", "flow_field", "cinematic_cam", "printer", "shop")] [node name="Bridge" type="Node3D" node_paths=PackedStringArray("tower_path", "player_spawns", "enemy_spawns", "enemy_goals", "corpses", "flow_field", "cinematic_cam", "printer", "shop")]
script = ExtResource("1_ws6nn") script = ExtResource("1_ws6nn")
enemy_pool = Array[ExtResource("3_6od8s")]([ExtResource("5_6od8s"), ExtResource("9_4gdda"), ExtResource("5_j6d65"), ExtResource("6_ks6qx")]) enemy_pool = Array[ExtResource("3_6od8s")]([SubResource("Resource_uvxyn"), ExtResource("9_4gdda"), ExtResource("5_j6d65"), ExtResource("6_ks6qx")])
tower_path = NodePath("Towers") tower_path = NodePath("Towers")
player_spawns = [NodePath("PlayerSpawnLocations/PlayerSpawn1"), NodePath("PlayerSpawnLocations/PlayerSpawn2"), NodePath("PlayerSpawnLocations/PlayerSpawn3"), NodePath("PlayerSpawnLocations/PlayerSpawn4")] player_spawns = [NodePath("PlayerSpawnLocations/PlayerSpawn1"), NodePath("PlayerSpawnLocations/PlayerSpawn2"), NodePath("PlayerSpawnLocations/PlayerSpawn3"), NodePath("PlayerSpawnLocations/PlayerSpawn4")]
enemy_spawns = [NodePath("GroundSpawn"), NodePath("GroundSpawn2"), NodePath("GroundSpawn3"), NodePath("GroundSpawn4"), NodePath("GroundSpawn5"), NodePath("AirSpawn")] enemy_spawns = [NodePath("GroundSpawn"), NodePath("GroundSpawn2"), NodePath("GroundSpawn3"), NodePath("GroundSpawn4"), NodePath("GroundSpawn5"), NodePath("AirSpawn")]
@@ -293,9 +326,6 @@ loop = false
transform = Transform3D(3.27007e-05, 0.999663, -0.0260566, -0.00250896, 0.0260566, 0.99966, 0.999999, 3.26858e-05, 0.00250896, 0, 0, 0) transform = Transform3D(3.27007e-05, 0.999663, -0.0260566, -0.00250896, 0.0260566, 0.99966, 0.999999, 3.26858e-05, 0.00250896, 0, 0, 0)
cull_mask = 1 cull_mask = 1
[node name="Sun" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.917074, 0.155176, 0.367281, -0.398717, 0.356914, 0.84477, 8.88179e-16, -0.921158, 0.389188, 0, 100, 0)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_l41d0") environment = SubResource("Environment_l41d0")

View File

@@ -42,8 +42,7 @@ func put_card_in_tower_base(tower_base: TowerBase) -> void:
if hero.hand.size <= 0: if hero.hand.size <= 0:
return return
var card: Card = hero.selected_card var card: Card = hero.selected_card
var energy_cost: int = int(card.rarity) + 1 var energy_cost: int = card.cost
energy_cost *= 2
if hero.energy < energy_cost: if hero.energy < energy_cost:
return return
if tower_base.has_card: if tower_base.has_card:

BIN
coin/Coin.glb Normal file

Binary file not shown.

44
coin/Coin.glb.import Normal file
View File

@@ -0,0 +1,44 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bg4pmewlvshu8"
path="res://.godot/imported/Coin.glb-dcf33c435a74febc9dfe74054dddd467.scn"
[deps]
source_file="res://coin/Coin.glb"
dest_files=["res://.godot/imported/Coin.glb-dcf33c435a74febc9dfe74054dddd467.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={
"materials": {
"coin": {
"use_external/enabled": true,
"use_external/path": "uid://5mnnhn5p1tll"
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

BIN
coin/Coin_coin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

38
coin/Coin_coin.png.import Normal file
View File

@@ -0,0 +1,38 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bayjketjls0lt"
path.s3tc="res://.godot/imported/Coin_coin.png-130d4e26928a415246fa81206a49adee.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "bb4a8a7e338539895ead7701c1dd8cd9"
}
[deps]
source_file="res://coin/Coin_coin.png"
dest_files=["res://.godot/imported/Coin_coin.png-130d4e26928a415246fa81206a49adee.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
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=0

BIN
coin/coin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

35
coin/coin.png.import Normal file
View File

@@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ctjkfe23t6crn"
path.s3tc="res://.godot/imported/coin.png-c9e5c2f51b2a10beb2d794afbbee004f.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://coin/coin.png"
dest_files=["res://.godot/imported/coin.png-c9e5c2f51b2a10beb2d794afbbee004f.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
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=0

10
coin/coin_material.tres Normal file
View File

@@ -0,0 +1,10 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://5mnnhn5p1tll"]
[ext_resource type="Shader" uid="uid://c5bffujq0l70k" path="res://Shaders/jitter.gdshader" id="1_38tga"]
[ext_resource type="Texture2D" uid="uid://ctjkfe23t6crn" path="res://coin/coin.png" id="2_kttjc"]
[resource]
render_priority = 0
shader = ExtResource("1_38tga")
shader_parameter/albedo = ExtResource("2_kttjc")
shader_parameter/alpha_scissor = 0.5

View File

@@ -7,8 +7,5 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_bpyoj") shader = ExtResource("1_bpyoj")
shader_parameter/affine_mapping = true
shader_parameter/albedo = SubResource("PlaceholderTexture2D_6krsv") shader_parameter/albedo = SubResource("PlaceholderTexture2D_6krsv")
shader_parameter/alpha_scissor = 0.5 shader_parameter/alpha_scissor = 0.5
shader_parameter/jitter = 0.25
shader_parameter/resolution = Vector2i(320, 240)

View File

@@ -13,6 +13,10 @@ var multiplayer_lobby_scene_path: String = "res://Scenes/Menus/multiplayer_lobby
var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lobby.tscn" var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lobby.tscn"
func _ready() -> void:
Engine.max_fps = 60
func load_main_menu() -> void: func load_main_menu() -> void:
load_scene(main_menu_scene_path) load_scene(main_menu_scene_path)
await loaded_scene await loaded_scene

View File

@@ -1,23 +1,19 @@
[gd_scene load_steps=8 format=3 uid="uid://d2k8y13qfvch0"] [gd_scene load_steps=7 format=3 uid="uid://d2k8y13qfvch0"]
[ext_resource type="Shader" uid="uid://diugvmtoos1ti" path="res://Shaders/pixeldither.gdshader" id="2_1bvp3"]
[ext_resource type="Script" uid="uid://cx1xj7esl03ui" path="res://main.gd" id="2_h2yge"] [ext_resource type="Script" uid="uid://cx1xj7esl03ui" path="res://main.gd" id="2_h2yge"]
[ext_resource type="Texture2D" uid="uid://6frn8lcwwehv" path="res://Assets/TextureAtlases/puppyfruit.png" id="2_lquwl"] [ext_resource type="Texture2D" uid="uid://6frn8lcwwehv" path="res://Assets/TextureAtlases/puppyfruit.png" id="2_lquwl"]
[ext_resource type="Script" uid="uid://p1ugbcmjuwxg" path="res://Scripts/boot_logo.gd" id="3_7mycd"] [ext_resource type="Script" uid="uid://p1ugbcmjuwxg" path="res://Scripts/boot_logo.gd" id="3_7mycd"]
[ext_resource type="Texture2D" uid="uid://bpo5fu2a26mr7" path="res://blk-nx64-1x.png" id="3_h2yge"] [ext_resource type="Shader" uid="uid://dvvn4x6geogiv" path="res://Shaders/mightyduke.gdshader" id="6_7mycd"]
[sub_resource type="AtlasTexture" id="AtlasTexture_272bh"] [sub_resource type="AtlasTexture" id="AtlasTexture_272bh"]
atlas = ExtResource("2_lquwl") atlas = ExtResource("2_lquwl")
region = Rect2(0, 0, 256, 256) region = Rect2(0, 0, 256, 256)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7mycd"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_272bh"]
shader = ExtResource("2_1bvp3") shader = ExtResource("6_7mycd")
shader_parameter/shader_enabled = true shader_parameter/color_depth = 5
shader_parameter/palette = ExtResource("3_h2yge")
shader_parameter/dithering = true shader_parameter/dithering = true
shader_parameter/dithering_size = 4
shader_parameter/resolution_scale = 1 shader_parameter/resolution_scale = 1
shader_parameter/quantization_level = 8
[node name="Main" type="Node" node_paths=PackedStringArray("scene", "movies")] [node name="Main" type="Node" node_paths=PackedStringArray("scene", "movies")]
script = ExtResource("2_h2yge") script = ExtResource("2_h2yge")
@@ -41,9 +37,9 @@ anchor_top = 0.5
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
offset_left = -128.0 offset_left = -128.0
offset_top = -128.0 offset_top = -147.0
offset_right = 128.0 offset_right = 128.0
offset_bottom = 128.0 offset_bottom = 109.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
texture = SubResource("AtlasTexture_272bh") texture = SubResource("AtlasTexture_272bh")
@@ -54,16 +50,11 @@ color_rect = NodePath("../ColorRect")
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = -1
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.77
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.77
offset_left = -52.0
offset_top = 205.0
offset_right = 52.0
offset_bottom = 20.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme_override_font_sizes/font_size = 91
text = "puppyfruit" text = "puppyfruit"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
@@ -76,9 +67,9 @@ anchor_top = 0.5
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
offset_left = -165.0 offset_left = -165.0
offset_top = 85.0 offset_top = 50.0
offset_right = 190.0 offset_right = 190.0
offset_bottom = 170.0 offset_bottom = 135.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
color = Color(0.192157, 0.415686, 0.223529, 1) color = Color(0.192157, 0.415686, 0.223529, 1)
@@ -89,8 +80,8 @@ color = Color(0.192157, 0.415686, 0.223529, 1)
layer = 2 layer = 2
visible = false visible = false
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"] [node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
material = SubResource("ShaderMaterial_7mycd") material = SubResource("ShaderMaterial_272bh")
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0

View File

@@ -30,7 +30,8 @@ gdscript/warnings/inferred_declaration=2
window/size/viewport_width=1920 window/size/viewport_width=1920
window/size/viewport_height=1080 window/size/viewport_height=1080
window/stretch/mode="canvas_items" window/stretch/mode="viewport"
window/stretch/scale_mode="integer"
[editor] [editor]
@@ -55,7 +56,8 @@ import/blender/enabled=false
[gui] [gui]
theme/custom="res://UI/new_theme.tres" theme/custom="uid://b6a0ip4p72tgx"
theme/default_font_antialiasing=0
[input] [input]
@@ -221,3 +223,14 @@ Pause={
[rendering] [rendering]
textures/canvas_textures/default_texture_filter=0 textures/canvas_textures/default_texture_filter=0
[shader_globals]
affine_mapping={
"type": "bool",
"value": true
}
jitter_resolution={
"type": "ivec2",
"value": Vector2i(320, 240)
}

7
rotate.gd Normal file
View File

@@ -0,0 +1,7 @@
extends Node3D
@export var speed: float = 1.0
func _process(delta: float) -> void:
rotation_degrees.y += speed * delta

1
rotate.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dq0yemhxscvtm