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]
script = ExtResource("1_yqa4b")
duration = 5
cost = 2
rarity = 0
faction = 1
turret_scene = ExtResource("4_5nu32")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,8 +6,5 @@
[resource]
render_priority = 0
shader = ExtResource("1_crvh7")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_1d6vt")
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.hud.set_energy_visible(false)
hero.hud.grow_wave_start_label()
hero.hud.primary_duration.visible = true
hero.hud.secondary_duration.visible = true
#hero.hud.primary_duration.visible = true
#hero.hud.secondary_duration.visible = true
hero.hud.energy_label.visible = true

View File

@@ -36,7 +36,7 @@ func _process(delta: float) -> void:
if interact_key_held:
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
set_progress_percent(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:
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)
valid_point = false
clear_previous_point()
@@ -127,8 +127,8 @@ func process_looking_at_tower() -> void:
func build_wall() -> void:
if point and valid_point and hero.energy >= Data.wall_cost:
hero.energy -= Data.wall_cost
if point and valid_point and hero.currency >= Data.wall_cost:
hero.currency -= Data.wall_cost
level.set_wall(point, multiplayer.get_unique_id())
wall_preview.visible = false

View File

@@ -137,6 +137,8 @@ func check_removal() -> void:
for card: Card in unique_cards:
if !hand.contents.has(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:
unique_cards.remove_at(index)
selection_boxes[index].queue_free()
@@ -327,6 +329,7 @@ func draw_to_hand_size() -> void:
var box: CardSelectionBox = card_select_scene.instantiate()
box.set_card(card)
box.set_key(i)
box.set_amount(hand.contents.count(unique_cards[i]))
selection_boxes.append(box)
$HUD/selection_boxes.add_child(box)
hand_selected_index = 0
@@ -342,8 +345,7 @@ func update_selected_box() -> void:
func equip_weapon(slot: int = 0) -> void:
if hand.size == 0:
return
var energy_cost: int = int(hand.item_at(hand_selected_index).rarity) + 1
energy_cost *= 2
var energy_cost: int = selected_card.cost
if energy < energy_cost:
return
if weapons[slot] != null:
@@ -360,7 +362,7 @@ func equip_weapon(slot: int = 0) -> void:
#decrement_selected()
weapons[slot] = cards[slot].weapon_scene.instantiate()
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)
weapons_spawn_count += 1
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="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://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="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://bj8eitlsjdotb" path="res://Audio/cardSlide5.ogg" id="32_tg7y0"]
[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://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="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"]
radius = 0.3
@@ -79,6 +82,9 @@ viewport_path = NodePath("FirstPersonViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_574jy"]
viewport_path = NodePath("MiniMapViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_w13oc"]
viewport_path = NodePath("CoinViewport")
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_tsiqi"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
@@ -318,7 +324,7 @@ script = ExtResource("8_yl6ka")
player = NodePath("..")
wave_count = NodePath("EnemyTracker/WaveCount")
lives_count = NodePath("LivesBar/LivesCount")
currency_count = NodePath("Minimap/CurrencyCount")
currency_count = NodePath("Currencies/CoinCounter/CurrencyCount")
minimap_outline = NodePath("Minimap/MinimapBorder")
minimap = NodePath("Minimap")
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_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")
wave_start_label = NodePath("RichTextLabel")
wave_start_label = NodePath("StartWaveLabel")
place_icon = NodePath("PlaceIcon")
swap_icon = NodePath("SwapIcon")
place_text = NodePath("PlaceIcon/RichTextLabel")
swap_text = NodePath("SwapIcon/RichTextLabel")
enemy_card_scene = ExtResource("18_dfkac")
new_energy_bar = NodePath("EnergyBar")
energy_label = NodePath("EnergyLabel")
energy_label = NodePath("Currencies/HBoxContainer/EnergyLabel")
primary_duration = NodePath("weapon_duration")
secondary_duration = NodePath("weapon_duration2")
@@ -361,6 +367,7 @@ offset_right = -331.0
offset_bottom = -1.0
grow_horizontal = 0
grow_vertical = 0
mouse_filter = 2
texture = ExtResource("18_okmpi")
[node name="RichTextLabel" type="RichTextLabel" parent="HUD/PlaceIcon"]
@@ -370,6 +377,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
bbcode_enabled = true
text = "#Primary Fire#"
scroll_active = false
@@ -389,6 +397,7 @@ offset_right = -6.0
offset_bottom = -1.0
grow_horizontal = 0
grow_vertical = 0
mouse_filter = 2
texture = ExtResource("18_okmpi")
[node name="RichTextLabel" type="RichTextLabel" parent="HUD/SwapIcon"]
@@ -398,6 +407,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
bbcode_enabled = true
text = "#Secondary Fire#"
scroll_active = false
@@ -405,6 +415,7 @@ horizontal_alignment = 1
vertical_alignment = 1
[node name="Minimap" type="TextureRect" parent="HUD"]
visible = false
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
@@ -430,22 +441,8 @@ grow_horizontal = 0
mouse_filter = 2
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"]
visible = false
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
@@ -630,13 +627,12 @@ offset_right = 296.0
offset_bottom = 84.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/default_color = Color(0, 0, 0, 1)
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
mouse_filter = 2
bbcode_enabled = true
text = "[center]Press Button To do thing"
scroll_active = false
horizontal_alignment = 1
vertical_alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="HUD"]
anchors_preset = 4
@@ -647,20 +643,19 @@ offset_top = -295.0
offset_right = 445.0
offset_bottom = -40.0
grow_vertical = 0
mouse_filter = 2
alignment = 2
[node name="RichTextLabel" type="RichTextLabel" parent="HUD"]
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -300.0
offset_top = 110.0
offset_right = 300.0
offset_bottom = 160.0
[node name="StartWaveLabel" type="RichTextLabel" parent="HUD"]
anchors_preset = -1
anchor_left = 0.34
anchor_top = 0.085
anchor_right = 0.69
anchor_bottom = 0.155
grow_horizontal = 2
theme_override_font_sizes/normal_font_size = 32
mouse_filter = 2
bbcode_enabled = true
text = "[center]Press #Ready# to start wave[/center]"
text = "[center]#Ready# Start wave[/center]"
scroll_active = false
[node name="Control2" type="Control" parent="HUD"]
@@ -672,6 +667,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 0
grow_vertical = 0
mouse_filter = 2
[node name="Control3" type="Control" parent="HUD"]
layout_mode = 3
@@ -682,6 +678,7 @@ anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="EnergyBar" parent="HUD" instance=ExtResource("27_14ugt")]
visible = false
@@ -723,42 +720,31 @@ texture = ExtResource("26_dfkac")
expand_mode = 3
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"]
visible = false
anchors_preset = -1
anchor_left = 0.978
anchor_top = 0.376
anchor_top = 0.186
anchor_right = 0.978
anchor_bottom = 0.376
anchor_bottom = 0.186
offset_left = -103.0
offset_bottom = 40.0
grow_horizontal = 0
text = "primary weapon rounds left = 0"
text = "w1 = 0"
horizontal_alignment = 1
vertical_alignment = 1
[node name="weapon_duration2" type="Label" parent="HUD"]
visible = false
anchors_preset = -1
anchor_left = 0.978
anchor_top = 0.411
anchor_top = 0.251
anchor_right = 0.978
anchor_bottom = 0.411
anchor_bottom = 0.261
offset_left = -103.0
offset_bottom = 40.0
grow_horizontal = 0
text = "secondary weapon rounds left = 0"
text = "w2 = 0"
horizontal_alignment = 1
vertical_alignment = 1
@@ -768,8 +754,46 @@ offset_left = 73.0
offset_top = 457.0
offset_right = 753.0
offset_bottom = 585.0
mouse_filter = 2
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="."]
wait_time = 0.4
one_shot = true
@@ -826,6 +850,26 @@ script = ExtResource("49_60hic")
hero = NodePath("..")
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"]
[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] = []
func _ready() -> void:
$StartWaveLabel.theme_type_variation = "WaveStartLabel"
$InteractLabel.theme_type_variation = "InteractLabel"
func show_wave_generation_anim(wave: Wave) -> void:
for card: EnemyCardUI in cards:
card.queue_free()
@@ -155,7 +160,7 @@ func set_currency_count(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:

View File

@@ -222,8 +222,8 @@ func _unhandled_input(event: InputEvent) -> void:
if !is_multiplayer_authority():
return
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)
head_angle -= event.relative.y * (look_sens / zoom_factor) * (-1 if invert_y 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 * 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.rotation.x = head_angle
if weapon_holder:

View File

@@ -21,7 +21,6 @@ var temp_data: SaveData
func _ready() -> void:
$ProfileEditor/VBoxContainer/HBoxContainer/DisplayName.text = Data.player_profile.display_name
load_stats(Data.save_data)
#bg_level.a_star_graph_3d.make_grid()
#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="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"]
@@ -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://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="FontFile" uid="uid://c3hwdjscf2hnk" path="res://Assets/Fonts/OpenType (.otf)/Kaph-Regular.otf" id="20_y5bw6"]
[sub_resource type="ViewportTexture" id="ViewportTexture_5u75i"]
viewport_path = NodePath("SubViewport")
[sub_resource type="AtlasTexture" id="AtlasTexture_6t4jd"]
[sub_resource type="AtlasTexture" id="AtlasTexture_74epv"]
resource_local_to_scene = true
atlas = ExtResource("8_1vnym")
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
script = ExtResource("5_u514r")
title = "dog"
target_type = 1
icon = ExtResource("7_2sylv")
death_sprite = ExtResource("6_rsxwm")
sprite = SubResource("AtlasTexture_6t4jd")
sprite = SubResource("AtlasTexture_74epv")
spawn_power = 10
health = 180
penalty = 10
@@ -69,23 +67,22 @@ region = Rect2(0, 0, 36, 36)
atlas = ExtResource("17_6t4jd")
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
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_p1cib")
script = ExtResource("2_ivytu")
bg_level = NodePath("SubViewport/GridMap")
game_select_menu = NodePath("GameSelectMenu")
main_controls = NodePath("MainControls")
seed_entry = NodePath("GameSelectMenu/VBoxContainer/HBoxContainer2/LineEdit")
profile_controls = NodePath("ProfileEditor")
mods_controls = NodePath("ModsMenu")
[node name="TextureRect" type="TextureRect" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -100,34 +97,27 @@ anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 0.5
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
out
defense"
horizontal_alignment = 1
vertical_alignment = 1
[node name="MainControls" type="HBoxContainer" parent="."]
[node name="MainControls" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.05
anchor_top = 0.95
anchor_right = 0.95
anchor_bottom = 0.95
offset_top = -60.0
grow_horizontal = 2
grow_vertical = 0
anchor_left = 0.1
anchor_top = 0.4
anchor_right = 0.9
anchor_bottom = 0.9
alignment = 2
[node name="PlayButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Play"
[node name="MultiplayerButton" type="Button" parent="MainControls"]
visible = false
layout_mode = 2
disabled = true
text = "Multiplayer"
@@ -136,6 +126,10 @@ text = "Multiplayer"
layout_mode = 2
text = "Mods"
[node name="StatsButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Stats"
[node name="OptionsButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Options
@@ -146,50 +140,11 @@ layout_mode = 2
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="."]
size = Vector2i(1920, 1080)
[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="."]
stream = SubResource("AudioStreamRandomizer_2jyua")
@@ -617,8 +572,6 @@ text = "Confirm"
[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="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/StandardButton" to="." method="_on_standard_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.position = Vector3(0, 1.2, 0)
minimap_icon.modulate = Color.RED
duration = card.duration
enable_duration_sprites()
duration = 999
#enable_duration_sprites()
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].unready_self()
tower.queue_free()
disable_duration_sprites()
#disable_duration_sprites()
tower = null
minimap_icon.modulate = Color.GREEN

View File

@@ -11,7 +11,7 @@ title_text = NodePath("Title")
description = NodePath("Description")
target_label = NodePath("Title2")
energy_cost = NodePath("EnergyCost")
duration = NodePath("Duration")
duration = NodePath("")
[node name="Sprite2D" type="Sprite2D" parent="."]
texture_filter = 1
@@ -72,13 +72,3 @@ theme_override_colors/font_color = Color(0.228497, 0.570097, 0.884935, 1)
text = "3"
horizontal_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")
[node name="Node3D" type="Sprite3D"]
pixel_size = 0.0006
pixel_size = 0.005
billboard = 1
no_depth_test = true
fixed_size = true
texture_filter = 2
render_priority = 1
texture = SubResource("ViewportTexture_ppqlh")
script = ExtResource("1_lgvaq")
@@ -25,9 +26,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
theme_override_constants/outline_size = 5
theme_override_font_sizes/font_size = 60
theme_type_variation = &"DamageNumLabel"
text = "12345"
horizontal_alignment = 1
vertical_alignment = 1

View File

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

View File

@@ -15,17 +15,7 @@ func set_card(value: Card) -> void:
title_text.text = stats.display_name
target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type])
rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64)
if stats.rarity == Data.Rarity.COMMON:
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)
energy_cost.text = str(value.cost)
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 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 player_energy: int = 6
static var wall_cost: int = 1
static var printer_cost: int = 15
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.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
version_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
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.theme_type_variation = "VersionLabel"
#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)
UILayer.add_child(version_label)
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:
if x.display_name == gift_name:
gift = x
connected_players_nodes[peer_id].inventory.add(gift)
connected_players_nodes[peer_id].hand.add(gift)
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]!!")
elif text.substr(1, 6) == "length":
@@ -165,8 +166,8 @@ func spawn_enemy_wave() -> void:
for spawn: EnemySpawner in level.enemy_spawns:
spawn.visible = false
spawn.spawn_wave()
for tower_base: TowerBase in level.walls.values():
tower_base.disable_duration_sprites()
#for tower_base: TowerBase in level.walls.values():
#tower_base.disable_duration_sprites()
wave_started.emit()
@@ -240,7 +241,7 @@ func end_wave() -> void:
var player: Hero = connected_players_nodes[peer_id] as Hero
player.hud.set_wave_count(wave)
player.currency += ceili(pot / connected_players_nodes.size())
player.energy = 12
player.energy = Data.player_energy
player.iterate_duration()
player.draw_to_hand_size()
player.unready_self()
@@ -248,7 +249,7 @@ func end_wave() -> void:
spawn.visible = true
for tower_base: TowerBase in level.walls.values():
if tower_base.has_card:
tower_base.enable_duration_sprites()
#tower_base.enable_duration_sprites()
tower_base.iterate_duration()
if is_multiplayer_authority():
if NoiseRandom.randf_in_range(23 * wave, 0.0, 1.0) <= shop_chance:
@@ -308,7 +309,7 @@ func start() -> void:
spawn_players()
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].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_to_hand_size()

View File

@@ -6,18 +6,17 @@ render_mode blend_mix,
specular_disabled,
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 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 snapped_position = base_position;
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.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 tags: VBoxContainer
@export var cost_label: Label
@export var lifetime_label: Label
@export var unselected_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:
icon.texture = card.icon
cost_label.text = str(card.rarity + 1)
lifetime_label.text = str(card.duration)
cost_label.text = str(card.cost)
for i: int in tags.get_child_count():
tags.get_child(i).queue_free()
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="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)
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_m0g3h")
icon = NodePath("PanelContainer/HBoxContainer/Icon")
tags = NodePath("PanelContainer/HBoxContainer/MarginContainer/Tags")
cost_label = NodePath("PanelContainer/HBoxContainer/Stats/Cost")
lifetime_label = NodePath("PanelContainer/HBoxContainer/Stats/Lifetime")
icon = NodePath("PanelContainer/VBoxContainer/HBoxContainer/Icon")
tags = NodePath("PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/Tags")
cost_label = NodePath("PanelContainer/VBoxContainer/HBoxContainer/Stats/Cost")
unselected_style_box = ExtResource("2_0817q")
selected_style_box = ExtResource("2_ek0dh")
amount_label = NodePath("PanelContainer/VBoxContainer/Label")
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2
@@ -24,45 +24,49 @@ offset_right = 152.0
offset_bottom = 124.0
theme_override_styles/panel = ExtResource("2_ek0dh")
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"]
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
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
size_flags_horizontal = 3
theme_override_constants/margin_top = 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
[node name="Icon2" type="TextureRect" parent="PanelContainer/HBoxContainer/MarginContainer/Tags"]
[node name="Icon2" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/Tags"]
layout_mode = 2
size_flags_horizontal = 3
texture = ExtResource("1_k8442")
stretch_mode = 5
[node name="Icon" type="TextureRect" parent="PanelContainer/HBoxContainer"]
[node name="Icon" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
texture = ExtResource("2_m0g3h")
stretch_mode = 5
[node name="Stats" type="VBoxContainer" parent="PanelContainer/HBoxContainer"]
[node name="Stats" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
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
size_flags_vertical = 7
text = "3"
horizontal_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
size_flags_vertical = 7
text = "6"
size_flags_vertical = 8
text = "x2"
horizontal_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
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:
cell_icons[int(energy) - 1].visible = true
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="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/normal = SubResource("StyleBoxEmpty_8epi8")
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
Label/colors/font_color = Color(0.941129, 0.938917, 0.927802, 1)
Label/font_sizes/font_size = 34
@@ -108,6 +112,7 @@ LineEdit/fonts/font = ExtResource("4_v3wda")
LineEdit/styles/focus = SubResource("StyleBoxFlat_s5vy1")
LineEdit/styles/normal = SubResource("StyleBoxFlat_s5vy1")
PanelContainer/styles/panel = ExtResource("4_o03gw")
StartWaveLabel/base_type = &"Label"
TabBar/fonts/font = ExtResource("4_v3wda")
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)
@@ -120,3 +125,6 @@ TabContainer/styles/tab_focus = SubResource("StyleBoxFlat_ehga6")
TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_tuxkj")
TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_ehga6")
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]
render_priority = 0
shader = ExtResource("1_r6w0r")
shader_parameter/affine_mapping = true
shader_parameter/albedo = ExtResource("2_kbuty")
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="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="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://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="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"]
@@ -21,6 +24,36 @@
[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"]
[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"]
_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),
@@ -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")]
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")
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")]
@@ -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)
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="."]
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:
return
var card: Card = hero.selected_card
var energy_cost: int = int(card.rarity) + 1
energy_cost *= 2
var energy_cost: int = card.cost
if hero.energy < energy_cost:
return
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]
render_priority = 0
shader = ExtResource("1_bpyoj")
shader_parameter/affine_mapping = true
shader_parameter/albedo = SubResource("PlaceholderTexture2D_6krsv")
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"
func _ready() -> void:
Engine.max_fps = 60
func load_main_menu() -> void:
load_scene(main_menu_scene_path)
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="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="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"]
atlas = ExtResource("2_lquwl")
region = Rect2(0, 0, 256, 256)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7mycd"]
shader = ExtResource("2_1bvp3")
shader_parameter/shader_enabled = true
shader_parameter/palette = ExtResource("3_h2yge")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_272bh"]
shader = ExtResource("6_7mycd")
shader_parameter/color_depth = 5
shader_parameter/dithering = true
shader_parameter/dithering_size = 4
shader_parameter/resolution_scale = 1
shader_parameter/quantization_level = 8
[node name="Main" type="Node" node_paths=PackedStringArray("scene", "movies")]
script = ExtResource("2_h2yge")
@@ -41,9 +37,9 @@ anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -128.0
offset_top = -128.0
offset_top = -147.0
offset_right = 128.0
offset_bottom = 128.0
offset_bottom = 109.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("AtlasTexture_272bh")
@@ -54,16 +50,11 @@ color_rect = NodePath("../ColorRect")
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.5
anchor_top = 0.77
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -52.0
offset_top = 205.0
offset_right = 52.0
offset_bottom = 20.0
anchor_bottom = 0.77
grow_horizontal = 2
grow_vertical = 2
theme_override_font_sizes/font_size = 91
text = "puppyfruit"
horizontal_alignment = 1
vertical_alignment = 1
@@ -76,9 +67,9 @@ anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -165.0
offset_top = 85.0
offset_top = 50.0
offset_right = 190.0
offset_bottom = 170.0
offset_bottom = 135.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.192157, 0.415686, 0.223529, 1)
@@ -89,8 +80,8 @@ color = Color(0.192157, 0.415686, 0.223529, 1)
layer = 2
visible = false
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
material = SubResource("ShaderMaterial_7mycd")
[node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
material = SubResource("ShaderMaterial_272bh")
anchors_preset = 15
anchor_right = 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_height=1080
window/stretch/mode="canvas_items"
window/stretch/mode="viewport"
window/stretch/scale_mode="integer"
[editor]
@@ -55,7 +56,8 @@ import/blender/enabled=false
[gui]
theme/custom="res://UI/new_theme.tres"
theme/custom="uid://b6a0ip4p72tgx"
theme/default_font_antialiasing=0
[input]
@@ -221,3 +223,14 @@ Pause={
[rendering]
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