way too many changes to list, oops. big rewrite.

This commit is contained in:
2025-05-27 03:38:03 +10:00
parent 16951a9beb
commit 4a21701a35
663 changed files with 7389 additions and 3283 deletions

View File

@ -0,0 +1,3 @@
class_name CharacterPodium extends Node3D
@export var text: String = ""

View File

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

View File

@ -0,0 +1,41 @@
class_name CharacterPreview extends PanelContainer
@export var tower_label_scene: PackedScene
@export var tower_label_container: VBoxContainer
@export var hero_name_label: Label
var added_tags: Array[TowerLabel] = []
var regular_label: Label = null
func set_preview(hero: HeroClass) -> void:
hero_name_label.text = hero.hero_name
if regular_label:
regular_label.queue_free()
regular_label = null
for tag: TowerLabel in added_tags:
tag.queue_free()
added_tags = []
var added_labels: Array[Card] = []
for card: Card in hero.deck:
if !added_labels.has(card):
var new_label: TowerLabel = tower_label_scene.instantiate() as TowerLabel
new_label.change_label(card.display_name, str(hero.deck.count(card)))
added_labels.append(card)
tower_label_container.add_child(new_label)
added_tags.append(new_label)
func setup_with_basic_text(hero: HeroClass, text: String) -> void:
hero_name_label.text = hero.hero_name
if regular_label:
regular_label.queue_free()
regular_label = null
for tag: TowerLabel in added_tags:
tag.queue_free()
added_tags = []
var added_labels: Array[Card] = []
var new_label: Label = Label.new()
new_label.text = text
tower_label_container.add_child(new_label)
regular_label = new_label

View File

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

View File

@ -0,0 +1,78 @@
class_name CharacterSelect extends Node3D
signal hero_selected(hero_class: int)
signal hero_confirmed()
@export var hero_preview_panel: CharacterPreview
var podiums: Array[CharacterPodium]
var character_selected: int = 0
var can_hit_button: bool = true
func _ready() -> void:
hero_preview_panel.set_preview(Data.characters[0])
var heroes: int = Data.characters.size()
var x: int = 0
for hero: HeroClass in Data.characters:
var pivot: Node3D = Node3D.new()
$Podiums.add_child(pivot)
var podium: CharacterPodium = hero.podium.instantiate() as CharacterPodium
podium.position = Vector3(0.0, -0.5, 5.0)
podiums.append(podium)
pivot.add_child(podium)
pivot.rotate_y((TAU / heroes) * x)
x += 1
#if Data.save_data.mage_unlocked:
#podiums.visible = true
func reset_button() -> void:
can_hit_button = true
func setup_ui() -> void:
#TODO: This should all tie into a proper achievements system
if character_selected == 0 or (character_selected == 1 and Data.save_data.mage_unlocked):
$VBoxContainer/Button.disabled = false
hero_preview_panel.set_preview(Data.characters[character_selected])
hero_selected.emit(character_selected)
elif character_selected == 1 and !Data.save_data.mage_unlocked and Data.save_data.mage_card_seen_in_shop:
hero_preview_panel.setup_with_basic_text(Data.characters[character_selected], "Buy " + str(Data.save_data.mage_cards_bought) + "/10 scrolls in the shop to unlock")
else:
$VBoxContainer/Button.disabled = true
hero_preview_panel.setup_with_basic_text(Data.characters[character_selected], podiums[character_selected].text)
func retreat_selector() -> void:
if !can_hit_button:
return
can_hit_button = false
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
tween.tween_property($Node3D, "rotation_degrees", Vector3(0.0, $Node3D.rotation_degrees.y - 90.0, 0.0), 1.0)
tween.tween_callback(reset_button)
character_selected -= 1
if character_selected < 0:
character_selected = Data.characters.size() - 1
setup_ui()
func advance_selector() -> void:
if !can_hit_button:
return
can_hit_button = false
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
tween.tween_property($Node3D, "rotation_degrees", Vector3(0.0, $Node3D.rotation_degrees.y + 90.0, 0.0), 1.0)
tween.tween_callback(reset_button)
character_selected += 1
if character_selected >= Data.characters.size():
character_selected = 0
setup_ui()
func _on_confirm_button_pressed() -> void:
hero_confirmed.emit()

View File

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

View File

@ -0,0 +1,104 @@
[gd_scene load_steps=7 format=3 uid="uid://bc6m3cluulpis"]
[ext_resource type="Script" uid="uid://plrd0ckxrabh" path="res://Scenes/Menus/CharacterSelect/character_select.gd" id="1_lqqhx"]
[ext_resource type="Script" uid="uid://b1ucgfqilvr67" path="res://Scenes/Menus/CharacterSelect/character_preview.gd" id="9_8d0rx"]
[ext_resource type="PackedScene" uid="uid://clabkhnbn75rf" path="res://UI/tower_label.tscn" id="10_jdigy"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tlgw2"]
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
energy_multiplier = 0.0
[sub_resource type="Sky" id="Sky_atdxu"]
sky_material = SubResource("ProceduralSkyMaterial_tlgw2")
[sub_resource type="Environment" id="Environment_pq6wd"]
background_mode = 2
sky = SubResource("Sky_atdxu")
tonemap_mode = 2
glow_enabled = true
[node name="CharacterSelect" type="Node3D" node_paths=PackedStringArray("hero_preview_panel")]
script = ExtResource("1_lqqhx")
hero_preview_panel = NodePath("PanelContainer")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_pq6wd")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
light_energy = 0.0
shadow_enabled = true
[node name="Node3D" type="Node3D" parent="."]
[node name="Camera3D" type="Camera3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 0.976893, 0.21373, 0, -0.21373, 0.976893, 0, 2.25535, 10.9009)
cull_mask = 1047553
fov = 39.4
[node name="PanelContainer" type="PanelContainer" parent="." node_paths=PackedStringArray("tower_label_container", "hero_name_label")]
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 100.0
offset_top = -91.5
offset_right = 299.0
offset_bottom = 91.5
grow_vertical = 2
script = ExtResource("9_8d0rx")
tower_label_scene = ExtResource("10_jdigy")
tower_label_container = NodePath("HBoxContainer2/HBoxContainer")
hero_name_label = NodePath("HBoxContainer2/Label")
[node name="HBoxContainer2" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/HBoxContainer2"]
layout_mode = 2
text = "character name"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label2" type="Label" parent="PanelContainer/HBoxContainer2"]
layout_mode = 2
text = "------------------------"
horizontal_alignment = 1
vertical_alignment = 1
[node name="HBoxContainer" type="VBoxContainer" parent="PanelContainer/HBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="."]
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -20.0
offset_top = -40.0
offset_right = 20.0
offset_bottom = -150.0
grow_horizontal = 2
grow_vertical = 0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="Button2" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "prev"
[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "next"
[node name="Button" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Confirm"
[node name="Podiums" type="Node3D" parent="."]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button2" to="." method="retreat_selector"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="advance_selector"]
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_confirm_button_pressed"]

View File

@ -1,19 +0,0 @@
class_name HeroSelector extends Control
signal hero_selected(hero_class: int)
@export var hero_card_scene: PackedScene
@export var hbox: HBoxContainer
func _ready() -> void:
for hero: HeroClass in Data.characters:
var card: Control = hero_card_scene.instantiate()
card.set_hero(hero)
card.pressed.connect(func(x: int) -> void: hero_selected.emit(x))
card.button_mouse_entered.connect(_on_button_mouse_entered)
hbox.add_child(card)
func _on_button_mouse_entered() -> void:
$AudioStreamPlayer.play()

View File

@ -1,49 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://dqqitmhu66a7d"]
[ext_resource type="Script" path="res://Scenes/Menus/CharacterSelect/charselect.gd" id="1_h2h26"]
[ext_resource type="PackedScene" uid="uid://bnsf2degj5tio" path="res://Scenes/UI/hero_card.tscn" id="1_v2mfo"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="3_ho1fl"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ehpk7"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("3_ho1fl")
stream_0/weight = 1.0
[node name="Control" type="Control" node_paths=PackedStringArray("hbox")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_h2h26")
hero_card_scene = ExtResource("1_v2mfo")
hbox = NodePath("CenterContainer/VBoxContainer/HBoxContainer")
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer"]
layout_mode = 2
text = "Choose your hero"
horizontal_alignment = 1
vertical_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_ehpk7")
bus = &"SFX"

View File

@ -11,13 +11,13 @@ class_name GameEndScreen extends PanelContainer
func _ready() -> void:
var wins: int = Data.save_stats.twenty_game_history.count(true)
var games: int = Data.save_stats.twenty_game_history.size()
var wins: int = Data.save_data.twenty_game_history.count(true)
var games: int = Data.save_data.twenty_game_history.size()
var winrate: int = int((float(wins) / float(games)) * 100.0)
winrate_label.text = "Your 20-game winrate is now: " + str(winrate) + "%!"
total_games_label.text = "Total games: " + str(Data.save_stats.wins + Data.save_stats.losses)
total_wins_label.text = "Total wins: " + str(Data.save_stats.wins)
total_losses_label.text = "Total losses: " + str(Data.save_stats.losses)
total_games_label.text = "Total games: " + str(Data.save_data.wins + Data.save_data.losses)
total_wins_label.text = "Total wins: " + str(Data.save_data.wins)
total_losses_label.text = "Total losses: " + str(Data.save_data.losses)
for wave_key: int in Game.stats.enemies_undefeated:
var spawned_box: EnemyBox = box.instantiate() as EnemyBox
undefeated_enemies.add_child(spawned_box)
@ -36,6 +36,8 @@ func _on_quit_button_pressed() -> void:
func _on_play_button_pressed() -> void:
if Game.gamemode.daily == false and !Game.gamemode.seeded:
Game.gamemode.rng_seed = randi()
Game.setup()
Game.start()
queue_free()

View File

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

View File

@ -1,14 +1,13 @@
[gd_scene load_steps=5 format=3 uid="uid://ce0m8vbjbng6o"]
[ext_resource type="Script" path="res://Scenes/Menus/GameEndScreen/game_end_screen.gd" id="1_oa7nq"]
[ext_resource type="PackedScene" uid="uid://b5hp43bm07b8a" path="res://h_box_container.tscn" id="2_xm8em"]
[ext_resource type="Script" uid="uid://bdknvktw033g3" path="res://Scenes/Menus/GameEndScreen/game_end_screen.gd" id="1_oa7nq"]
[ext_resource type="PackedScene" uid="uid://b5hp43bm07b8a" path="res://UI/h_box_container.tscn" id="2_xm8em"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="3_ro1yg"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_dram5"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("3_ro1yg")
stream_0/weight = 1.0
[node name="GameEndScreen" type="PanelContainer" node_paths=PackedStringArray("outcome_label", "winrate_label", "total_games_label", "total_wins_label", "total_losses_label", "undefeated_enemies")]
anchors_preset = 15

View File

@ -0,0 +1,9 @@
extends PanelContainer
func _ready() -> void:
if Data.save_data.wins > 0:
$VBoxContainer/GridContainer/FirstWin.icon.region = Rect2(36, 0, 36, 36)
if Data.save_data.mage_card_seen_in_shop:
$VBoxContainer/GridContainer/SeenMageCard.icon.region = Rect2(36, 0, 36, 36)
if Data.save_data.mage_unlocked:
$VBoxContainer/GridContainer/UnlockedMage.icon.region = Rect2(36, 0, 36, 36)

View File

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

View File

@ -1,27 +1,36 @@
class_name MainMenu extends Control
@export var bg_level: Level
@export var game_select_menu: Control
@export var main_controls: Control
@export var seed_entry: LineEdit
@export var profile_controls: Control
@export var mods_controls: ModMenu
var gamemode: GameMode = GameMode.new()
var confirmation_popup_scene: PackedScene = preload("res://Scenes/Menus/confirmation_popup.tscn")
var text_input_popup_scene: PackedScene = preload("res://Scenes/Menus/text_input_popup.tscn")
var multiplayer_lobby_scene_path: String = "res://Scenes/multiplayer_lobby.tscn"
var options_menu_scene: PackedScene = preload("res://Scenes/Menus/options_menu.tscn")
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()
bg_level.a_star_graph_3d.build_random_maze(50)
bg_level.a_star_graph_3d.place_random_towers(20)
bg_level.a_star_graph_3d.disable_all_tower_frames()
Game.level = bg_level
var new_wave: Dictionary = WaveManager.generate_wave(400, bg_level.enemy_pool)
WaveManager.generate_wave(400, bg_level.enemy_pool, bg_level.enemy_spawns)
for spawn: EnemySpawner in bg_level.enemy_spawns:
spawn.enemy_died_callback = enemy_died
spawn.enemy_reached_goal_callback = damage_goal
spawn.enemy_spawned.connect(increase_enemy_count)
spawn.spawn_wave(new_wave)
spawn.spawn_wave()
#these exist purely to make the enemies that spawn on the main menu happy
@ -34,10 +43,9 @@ func increase_enemy_count() -> void:
func _on_display_name_edit_pressed() -> void:
var popup: TextInputPopup = text_input_popup_scene.instantiate() as TextInputPopup
popup.set_popup(Data.player_profile.display_name, "Display Name", "Confirm")
popup.completed.connect(change_profile_display_name)
add_child(popup)
$ProfileManager.visible = true
$ProfileManager/VBoxContainer/DisplayName/LineEdit.placeholder_text = Data.player_profile.display_name
temp_data = SaveData.load_profile_from_disk()
func change_profile_display_name(display_name: String) -> void:
@ -57,20 +65,130 @@ func quit_game(confirmation: bool) -> void:
get_tree().quit()
func _on_play_button_pressed() -> void:
Game.level = null
Game.scene_switch_to_singleplayer_lobby()
func _on_options_button_pressed() -> void:
var menu: OptionsMenu = options_menu_scene.instantiate()
add_child(menu)
func _on_multiplayer_button_pressed() -> void:
Game.level = null
Game.scene_switch_to_multiplayer_lobby()
func _on_button_mouse_entered() -> void:
$AudioStreamPlayer.play()
func start_game() -> void:
Game.level = null
Game.gamemode = gamemode
if gamemode.multiplayer:
Game.scene_switch_to_multiplayer_lobby()
else:
Game.scene_switch_to_singleplayer_lobby()
func _on_play_button_pressed() -> void:
gamemode.multiplayer = false
open_game_menu()
func _on_multiplayer_button_pressed() -> void:
gamemode.multiplayer = true
open_game_menu()
func open_game_menu() -> void:
main_controls.visible = false
game_select_menu.visible = true
func _on_back_button_pressed() -> void:
main_controls.visible = true
game_select_menu.visible = false
func generate_seed() -> void:
if seed_entry.text != "":
if seed_entry.text.is_valid_int():
gamemode.rng_seed = int(seed_entry.text)
else:
gamemode.rng_seed = hash(seed_entry.text)
gamemode.seeded = true
else:
gamemode.rng_seed = randi()
func _on_standard_button_pressed() -> void:
generate_seed()
gamemode.endless = false
gamemode.daily = false
start_game()
func _on_daily_button_pressed() -> void:
gamemode.seed = hash(Time.get_date_string_from_system(true))
gamemode.endless = false
gamemode.daily = true
start_game()
func _on_endless_button_pressed() -> void:
generate_seed()
gamemode.endless = true
gamemode.daily = false
start_game()
func _on_changelog_button_pressed() -> void:
main_controls.visible = true
profile_controls.visible = true
$Changelog.queue_free()
func load_stats(stats: SaveData) -> void:
$ProfileManager/VBoxContainer/Stats/Wins/Label2.text = str(stats.wins)
$ProfileManager/VBoxContainer/Stats/Losses/Label2.text = str(stats.losses)
$ProfileManager/VBoxContainer/Stats/Winrate/Label2.text = str(int(stats.wins / 20.0))
$ProfileManager/VBoxContainer/Stats/EngineerCardsBought/Label2.text = str(stats.engineer_cards_bought)
$ProfileManager/VBoxContainer/Stats/MageCardsBought/Label2.text = str(stats.mage_cards_bought)
func _on_achievements_back_button_pressed() -> void:
$AchievementsMenu.visible = false
func _on_achievements_button_pressed() -> void:
$AchievementsMenu.visible = true
func _on_profile_manager_cancel_pressed() -> void:
$ProfileManager.visible = false
func _on_profile_manager_confirm_pressed() -> void:
$ProfileManager.visible = false
if $ProfileManager/VBoxContainer/DisplayName/LineEdit.text != "":
change_profile_display_name($ProfileManager/VBoxContainer/DisplayName/LineEdit.text)
$ProfileManager/VBoxContainer/DisplayName/LineEdit.text = ""
Data.save_data = temp_data
Data.save_data.save_to_disc()
func _on_unlock_all_pressed() -> void:
temp_data.unlock_all_content()
func _on_lock_all_pressed() -> void:
temp_data.lock_all_content()
func _on_mods_button_pressed() -> void:
profile_controls.visible = false
main_controls.visible = false
mods_controls.visible = true
func _on_cancel_mods_pressed() -> void:
profile_controls.visible = true
main_controls.visible = true
mods_controls.visible = false
func _on_confirm_mods_pressed() -> void:
mods_controls.load_mod_list()

View File

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

View File

@ -1,21 +1,75 @@
[gd_scene load_steps=8 format=3 uid="uid://8yv7excojcg0"]
[gd_scene load_steps=27 format=3 uid="uid://8yv7excojcg0"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://new_theme.tres" id="1_p1cib"]
[ext_resource type="Script" path="res://Scenes/Menus/MainMenu/main_menu.gd" id="2_ivytu"]
[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="Texture2D" uid="uid://lvvnrb5jugum" path="res://Assets/Textures/logo_title.png" id="3_8jkeb"]
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://Worlds/GreenPlanet/Levels/first_level.tscn" id="3_l8r4a"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="5_cwn2i"]
[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="5_u514r"]
[ext_resource type="Texture2D" uid="uid://cdnhe2mi5c5ln" path="res://Assets/Textures/dead_eye_dog.png" id="6_rsxwm"]
[ext_resource type="Texture2D" uid="uid://g00wwrlxxdc5" path="res://Assets/Textures/icon_eye_dog.png" id="7_2sylv"]
[ext_resource type="Texture2D" uid="uid://dj13g1w14mekw" path="res://Assets/Textures/eye_dog.png" id="8_1vnym"]
[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://Resources/Enemies/dog_fast.tres" id="9_hdp0s"]
[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://Resources/Enemies/dog_heavy.tres" id="10_day26"]
[ext_resource type="Resource" uid="uid://boik1gnpl4v0a" path="res://Resources/Enemies/dog_boss.tres" id="11_1mes0"]
[ext_resource type="Resource" uid="uid://dsgkwh3opyqtx" path="res://Resources/Enemies/airenemy.tres" id="12_5vny5"]
[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://Resources/Enemies/airenemy2.tres" id="13_xb7gj"]
[ext_resource type="Texture2D" uid="uid://cr1ucbuw3iotp" path="res://Assets/Textures/first_win_achievements.png" id="15_74epv"]
[ext_resource type="Script" uid="uid://cjr0pbqisd51v" path="res://Scenes/Menus/MainMenu/achievements_menu.gd" id="15_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="Script" uid="uid://cxrm2naq75jo1" path="res://mod_menu.gd" id="19_6t4jd"]
[sub_resource type="ViewportTexture" id="ViewportTexture_5u75i"]
viewport_path = NodePath("SubViewport")
[sub_resource type="AtlasTexture" id="AtlasTexture_sv1gy"]
resource_local_to_scene = true
atlas = ExtResource("8_1vnym")
region = Rect2(0, 0, 32, 32)
[sub_resource type="Resource" id="Resource_6t4jd"]
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_sv1gy")
spawn_power = 10
health = 180
penalty = 10
movement_speed = 1.2
spawn_cooldown = 1.2
common_group = 1
common_cost = 1
uncommon_group = 1
uncommon_cost = 1
rare_group = 1
rare_cost = 1
epic_group = 1
epic_cost = 1
legendary_group = 1
legendary_cost = 1
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_2jyua"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("5_cwn2i")
stream_0/weight = 1.0
[node name="MainMenu" type="Control" node_paths=PackedStringArray("bg_level")]
[sub_resource type="AtlasTexture" id="AtlasTexture_y5bw6"]
atlas = ExtResource("15_74epv")
region = Rect2(0, 0, 36, 36)
[sub_resource type="AtlasTexture" id="AtlasTexture_q26na"]
atlas = ExtResource("16_sv1gy")
region = Rect2(0, 0, 36, 36)
[sub_resource type="AtlasTexture" id="AtlasTexture_3aj5m"]
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")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -25,6 +79,11 @@ 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("PanelContainer")
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1
@ -68,6 +127,10 @@ text = "Play"
layout_mode = 2
text = "Multiplayer"
[node name="ModsButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Mods"
[node name="OptionsButton" type="Button" parent="MainControls"]
layout_mode = 2
text = "Options
@ -97,8 +160,7 @@ layout_mode = 2
[node name="Label" type="Label" parent="ProfileEditor/VBoxContainer"]
layout_mode = 2
text = "Display Name
"
text = "Current Profile"
[node name="HBoxContainer" type="HBoxContainer" parent="ProfileEditor/VBoxContainer"]
layout_mode = 2
@ -118,12 +180,13 @@ theme_override_constants/margin_bottom = 4
[node name="DisplayNameEdit" type="Button" parent="ProfileEditor/VBoxContainer/HBoxContainer/MarginContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Change"
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_6t4jd"), 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")
@ -133,13 +196,436 @@ bus = &"SFX"
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 100, 0)
current = true
[node name="GameSelectMenu" type="PanelContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="GameSelectMenu"]
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
[node name="BackButton" type="Button" parent="GameSelectMenu/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Back"
[node name="Title" type="Label" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
text = "Select a game to begin"
[node name="StandardButton" type="Button" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
text = "Standard (20 waves)"
[node name="DailyButton" type="Button" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
text = "Daily Challenge"
[node name="EndlessButton" type="Button" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
text = "Endless"
[node name="HBoxContainer2" type="HBoxContainer" parent="GameSelectMenu/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="GameSelectMenu/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "Seed:"
[node name="LineEdit" type="LineEdit" parent="GameSelectMenu/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "leave blank for random game"
[node name="Changelog" type="PanelContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 200.0
offset_top = 100.0
offset_right = -200.0
offset_bottom = -100.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Changelog"]
layout_mode = 2
[node name="Label" type="Label" parent="Changelog/VBoxContainer"]
layout_mode = 2
text = "Changelog"
horizontal_alignment = 1
vertical_alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="Changelog/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="VBoxContainer" type="VBoxContainer" parent="Changelog/VBoxContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
alignment = 1
[node name="Label6" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="Label10" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Added: New Mage card: Ascension"
[node name="Label13" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Added: New Mechanic card: Overclock"
[node name="Label11" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Fixed: Interaction text now properly disappears if the wave starts"
[node name="Label3" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
visible = false
layout_mode = 2
text = "Fixed: Refrigerator tower now applies cold to enemies"
[node name="Label12" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
visible = false
layout_mode = 2
text = "Fixed: Seed now correctly changes on consecutive random seed runs"
[node name="Label4" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="Label5" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Increased Bubble movement speed 1.5 > 2.0"
[node name="Label7" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Increased Spike health 9 > 12"
[node name="Label8" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Increased Heavy Dog speed 0.8 > 0.9"
[node name="Label14" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Decreased Boss Dog speed 1.0 > 0.8"
[node name="Label15" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Increased Boss Dog health 1000 > 3000"
[node name="Label16" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Increased Boss Dog spawn chance"
[node name="Label9" type="Label" parent="Changelog/VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "Balance: Adjusted Glue Launcher rarity [Uncommon -> Common]"
[node name="HBoxContainer" type="HBoxContainer" parent="Changelog/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="Button" type="Button" parent="Changelog/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Close"
[node name="ProfileManager" type="PanelContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="ProfileManager"]
layout_mode = 2
[node name="TitleBar" type="Label" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
text = "Profile Viewer"
[node name="DisplayName" type="HBoxContainer" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/DisplayName"]
layout_mode = 2
text = "Display Name"
[node name="LineEdit" type="LineEdit" parent="ProfileManager/VBoxContainer/DisplayName"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "Display name"
alignment = 1
[node name="Stats" type="VBoxContainer" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
text = "Stats"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Wins" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/Wins"]
layout_mode = 2
size_flags_horizontal = 3
text = "Wins"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/Wins"]
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="Losses" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/Losses"]
layout_mode = 2
size_flags_horizontal = 3
text = "Losses"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/Losses"]
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="Winrate" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/Winrate"]
layout_mode = 2
size_flags_horizontal = 3
text = "Winrate (last 20 games)"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/Winrate"]
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="EngineerCardsBought" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/EngineerCardsBought"]
layout_mode = 2
size_flags_horizontal = 3
text = "plans bought"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/EngineerCardsBought"]
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="MageCardsBought" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/MageCardsBought"]
layout_mode = 2
size_flags_horizontal = 3
text = "scrolls bought"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/MageCardsBought"]
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="UnlockAll" type="Button" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
text = "Unlock All Content"
[node name="LockAll" type="Button" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
text = "Lock All Content"
[node name="AchievementsButton" type="Button" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
text = "View Achievements"
[node name="Controls" type="HBoxContainer" parent="ProfileManager/VBoxContainer"]
layout_mode = 2
[node name="Cancel" type="Button" parent="ProfileManager/VBoxContainer/Controls"]
layout_mode = 2
size_flags_horizontal = 3
text = "Cancel"
[node name="Confirm" type="Button" parent="ProfileManager/VBoxContainer/Controls"]
layout_mode = 2
size_flags_horizontal = 3
text = "Confirm"
[node name="AchievementsMenu" type="PanelContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("15_sv1gy")
[node name="VBoxContainer" type="VBoxContainer" parent="AchievementsMenu"]
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="AchievementsMenu/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="AchievementsMenu/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Achievements"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Button" type="Button" parent="AchievementsMenu/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Back"
[node name="GridContainer" type="GridContainer" parent="AchievementsMenu/VBoxContainer"]
layout_mode = 2
columns = 9
[node name="FirstWin" type="Button" parent="AchievementsMenu/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
tooltip_text = "What could I possibly have to do to earn this??"
icon = SubResource("AtlasTexture_y5bw6")
icon_alignment = 1
expand_icon = true
[node name="SeenMageCard" type="Button" parent="AchievementsMenu/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
tooltip_text = "Who would use this old thing anyway?"
icon = SubResource("AtlasTexture_q26na")
icon_alignment = 1
expand_icon = true
[node name="UnlockedMage" type="Button" parent="AchievementsMenu/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
tooltip_text = "Ok, here me out
"
icon = SubResource("AtlasTexture_3aj5m")
icon_alignment = 1
expand_icon = true
[node name="PanelContainer" type="PanelContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("19_6t4jd")
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
text = "Mods"
horizontal_alignment = 1
vertical_alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(800, 400)
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="CancelMods" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Confirm"
[node name="ConfirmMods" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Confirm"
[connection signal="mouse_entered" from="MainControls/PlayButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="MainControls/PlayButton" to="." method="_on_play_button_pressed"]
[connection signal="mouse_entered" from="MainControls/MultiplayerButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="MainControls/MultiplayerButton" to="." method="_on_multiplayer_button_pressed"]
[connection signal="mouse_entered" from="MainControls/ModsButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="MainControls/ModsButton" to="." method="_on_mods_button_pressed"]
[connection signal="mouse_entered" from="MainControls/OptionsButton" to="." method="_on_button_mouse_entered"]
[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"]
[connection signal="pressed" from="GameSelectMenu/VBoxContainer/EndlessButton" to="." method="_on_endless_button_pressed"]
[connection signal="pressed" from="Changelog/VBoxContainer/HBoxContainer/Button" to="." method="_on_changelog_button_pressed"]
[connection signal="pressed" from="ProfileManager/VBoxContainer/UnlockAll" to="." method="_on_unlock_all_pressed"]
[connection signal="pressed" from="ProfileManager/VBoxContainer/LockAll" to="." method="_on_lock_all_pressed"]
[connection signal="pressed" from="ProfileManager/VBoxContainer/AchievementsButton" to="." method="_on_achievements_button_pressed"]
[connection signal="pressed" from="ProfileManager/VBoxContainer/Controls/Cancel" to="." method="_on_profile_manager_cancel_pressed"]
[connection signal="pressed" from="ProfileManager/VBoxContainer/Controls/Confirm" to="." method="_on_profile_manager_confirm_pressed"]
[connection signal="pressed" from="AchievementsMenu/VBoxContainer/HBoxContainer/Button" to="." method="_on_achievements_back_button_pressed"]
[connection signal="pressed" from="PanelContainer/VBoxContainer/HBoxContainer/CancelMods" to="." method="_on_cancel_mods_pressed"]
[connection signal="pressed" from="PanelContainer/VBoxContainer/HBoxContainer/ConfirmMods" to="." method="_on_confirm_mods_pressed"]

View File

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

View File

@ -1,14 +1,13 @@
[gd_scene load_steps=5 format=3 uid="uid://buvgdem68wtev"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://new_theme.tres" id="1_gaupv"]
[ext_resource type="Script" path="res://Scenes/Menus/PauseMenu/pause_menu.gd" id="2_4pn2l"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://UI/new_theme.tres" id="1_gaupv"]
[ext_resource type="Script" uid="uid://cjyyepxaf4xl8" path="res://Scenes/Menus/PauseMenu/pause_menu.gd" id="2_4pn2l"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="3_0bid7"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_n6ixr"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("3_0bid7")
stream_0/weight = 1.0
[node name="Control" type="Control"]
layout_mode = 3

View File

@ -1,13 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://6a277g802os0"]
[ext_resource type="Script" path="res://Scripts/alert_popup.gd" id="1_cac03"]
[ext_resource type="Script" uid="uid://4uwd40mavufi" path="res://Scripts/alert_popup.gd" id="1_cac03"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="2_2mbtt"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_veol0"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("2_2mbtt")
stream_0/weight = 1.0
[node name="Control" type="PanelContainer"]
anchors_preset = 8

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bwc45ogto8thn"]
[ext_resource type="Script" path="res://Scripts/audio_options.gd" id="1_avc0j"]
[ext_resource type="Script" uid="uid://c4ljvgrb81du6" path="res://Scripts/audio_options.gd" id="1_avc0j"]
[sub_resource type="ImageTexture" id="ImageTexture_hvvdd"]

View File

@ -1,13 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://f46qh73hrk4y"]
[ext_resource type="Script" path="res://Scripts/confirmation_popup.gd" id="1_x7akt"]
[ext_resource type="Script" uid="uid://bjt72v1wym5ie" path="res://Scripts/confirmation_popup.gd" id="1_x7akt"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="2_3w36n"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_22wuj"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("2_3w36n")
stream_0/weight = 1.0
[node name="ConfirmationPopup" type="PanelContainer"]
anchors_preset = 8

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bjk7jf0bau5lv"]
[ext_resource type="Script" path="res://Scripts/gameplay_options.gd" id="1_sy26f"]
[ext_resource type="Script" uid="uid://dtrjph756oq1f" path="res://Scripts/gameplay_options.gd" id="1_sy26f"]
[sub_resource type="ImageTexture" id="ImageTexture_03x6q"]

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bmd4mawasoc11"]
[ext_resource type="Script" path="res://Scripts/graphics_options.gd" id="1_85rh6"]
[ext_resource type="Script" uid="uid://bpb5c5r1yi8um" path="res://Scripts/graphics_options.gd" id="1_85rh6"]
[sub_resource type="ImageTexture" id="ImageTexture_03x6q"]

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bf2nosqt5f82e"]
[ext_resource type="Script" path="res://Scripts/keybind_options.gd" id="1_oxg0p"]
[ext_resource type="Script" uid="uid://cxm67e833baex" path="res://Scripts/keybind_options.gd" id="1_oxg0p"]
[node name="Keybinds" type="VBoxContainer"]
anchors_preset = 15

View File

@ -1,32 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://3kcl30sump8c"]
[ext_resource type="Script" path="res://Scripts/loadout_editor.gd" id="1_y0cit"]
[node name="Panel" type="Panel"]
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 90.0
offset_top = -142.5
offset_right = 545.0
offset_bottom = 142.5
grow_vertical = 2
script = ExtResource("1_y0cit")
[node name="HBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="HBoxContainer"]
layout_mode = 2
text = "Choose Character"

View File

@ -1,20 +1,19 @@
[gd_scene load_steps=9 format=3 uid="uid://cwvprrvk4l2k0"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://new_theme.tres" id="1_l1spu"]
[ext_resource type="Script" path="res://Scripts/multiplayer_lobby.gd" id="2_nb860"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://UI/new_theme.tres" id="1_l1spu"]
[ext_resource type="Script" uid="uid://cvm4lyhx1uh0w" path="res://Scripts/multiplayer_lobby.gd" id="2_nb860"]
[ext_resource type="PackedScene" uid="uid://dpt3kpixawyby" path="res://Scenes/UI/scoreboard.tscn" id="3_f6bia"]
[ext_resource type="PackedScene" uid="uid://bvfit0sy2tnw4" path="res://Scenes/Menus/server_form.tscn" id="5_bqbwv"]
[ext_resource type="PackedScene" uid="uid://dqqitmhu66a7d" path="res://Scenes/Menus/CharacterSelect/charselect.tscn" id="5_lvoo2"]
[ext_resource type="PackedScene" uid="uid://ddmg342ff2qaq" path="res://Scenes/UI/chatbox.tscn" id="6_wtqwd"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="7_6mhre"]
[ext_resource type="PackedScene" uid="uid://bc6m3cluulpis" path="res://Scenes/Menus/CharacterSelect/character_select.tscn" id="7_kawp7"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_cwnde"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("7_6mhre")
stream_0/weight = 1.0
[node name="multiplayer_lobby" type="Control" node_paths=PackedStringArray("server_form", "scoreboard", "loadout_editor", "chatbox")]
[node name="multiplayer_lobby" type="Control" node_paths=PackedStringArray("server_form", "scoreboard", "chatbox", "ready_button", "audio_player")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -25,9 +24,11 @@ mouse_filter = 2
theme = ExtResource("1_l1spu")
script = ExtResource("2_nb860")
server_form = NodePath("ServerForm")
character_select_screen = ExtResource("7_kawp7")
scoreboard = NodePath("Scoreboard")
loadout_editor = NodePath("Control")
chatbox = NodePath("Chatbox")
ready_button = NodePath("ReadyButton")
audio_player = NodePath("AudioStreamPlayer")
[node name="ServerForm" parent="." instance=ExtResource("5_bqbwv")]
layout_mode = 1
@ -46,10 +47,6 @@ offset_left = -472.0
offset_right = -50.0
grow_horizontal = 0
[node name="Control" parent="." instance=ExtResource("5_lvoo2")]
visible = false
layout_mode = 1
[node name="ReadyButton" type="Button" parent="."]
visible = false
layout_mode = 1
@ -81,4 +78,3 @@ bus = &"SFX"
[connection signal="host_button_pressed" from="ServerForm" to="ServerForm" method="set_visible" binds= [false]]
[connection signal="mouse_entered" from="ReadyButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="ReadyButton" to="." method="ready_player"]
[connection signal="pressed" from="ReadyButton" to="ReadyButton" method="set_visible" binds= [false]]

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=8 format=3 uid="uid://clulh7v8c7h85"]
[ext_resource type="Script" path="res://Scripts/options_menu.gd" id="1_bievw"]
[ext_resource type="Script" uid="uid://48rvmybi18wj" path="res://Scripts/options_menu.gd" id="1_bievw"]
[ext_resource type="PackedScene" uid="uid://bjk7jf0bau5lv" path="res://Scenes/Menus/gameplay_options.tscn" id="3_25wuw"]
[ext_resource type="PackedScene" uid="uid://bmd4mawasoc11" path="res://Scenes/Menus/graphics_options.tscn" id="4_ckcvq"]
[ext_resource type="PackedScene" uid="uid://bf2nosqt5f82e" path="res://Scenes/Menus/keybind_options.tscn" id="5_4k33c"]
@ -11,7 +11,6 @@
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("6_hhyef")
stream_0/weight = 1.0
[node name="OptionsMenu" type="PanelContainer" node_paths=PackedStringArray("gameplay", "graphics", "keybinds")]
anchors_preset = 15
@ -34,21 +33,26 @@ layout_mode = 2
[node name="TabContainer" type="TabContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
current_tab = 3
[node name="Gameplay" parent="VBoxContainer/TabContainer" instance=ExtResource("3_25wuw")]
visible = false
layout_mode = 2
metadata/_tab_index = 0
[node name="Graphics" parent="VBoxContainer/TabContainer" instance=ExtResource("4_ckcvq")]
visible = false
layout_mode = 2
metadata/_tab_index = 1
[node name="Keybinds" parent="VBoxContainer/TabContainer" instance=ExtResource("5_4k33c")]
visible = false
layout_mode = 2
metadata/_tab_index = 2
[node name="Audio" parent="VBoxContainer/TabContainer" instance=ExtResource("6_4vs8p")]
visible = false
layout_mode = 2
metadata/_tab_index = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2

View File

@ -1,15 +1,15 @@
[gd_scene load_steps=4 format=3 uid="uid://bvfit0sy2tnw4"]
[ext_resource type="Script" path="res://Scripts/server_form.gd" id="1_43oaq"]
[ext_resource type="Script" uid="uid://dyyhbd2pbfygi" path="res://Scripts/server_form.gd" id="1_43oaq"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="2_hirre"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_3o7ni"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("2_hirre")
stream_0/weight = 1.0
[node name="ServerForm" type="PanelContainer"]
[node name="ServerForm" type="PanelContainer" node_paths=PackedStringArray("ip_entry", "port_entry", "host_button", "join_button", "ip_field", "port_field", "players_field", "start_button")]
custom_minimum_size = Vector2(500, 0)
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
@ -22,54 +22,96 @@ offset_bottom = 85.5
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_43oaq")
ip_entry = NodePath("VBoxContainer/IPField/ServerIP")
port_entry = NodePath("VBoxContainer/PortField/ServerPort")
host_button = NodePath("VBoxContainer/ModeContainer/HostButton")
join_button = NodePath("VBoxContainer/ModeContainer/JoinButton")
ip_field = NodePath("VBoxContainer/IPField")
port_field = NodePath("VBoxContainer/PortField")
players_field = NodePath("VBoxContainer/PlayersField")
start_button = NodePath("VBoxContainer/StartButton")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2
alignment = 1
[node name="Button" type="Button" parent="VBoxContainer"]
[node name="BackButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Back"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
[node name="ModeContainer" type="VBoxContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"]
[node name="HostButton" type="Button" parent="VBoxContainer/ModeContainer"]
layout_mode = 2
text = "Host Game"
[node name="JoinButton" type="Button" parent="VBoxContainer/ModeContainer"]
layout_mode = 2
text = "Join Game"
[node name="IPField" type="HBoxContainer" parent="VBoxContainer"]
visible = false
layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/IPField"]
layout_mode = 2
text = "Server IP:"
[node name="ServerIP" type="LineEdit" parent="VBoxContainer/HBoxContainer"]
[node name="ServerIP" type="LineEdit" parent="VBoxContainer/IPField"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "localhost"
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"]
[node name="PortField" type="HBoxContainer" parent="VBoxContainer"]
visible = false
layout_mode = 2
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2"]
[node name="Label" type="Label" parent="VBoxContainer/PortField"]
layout_mode = 2
text = "Server Port:"
[node name="ServerPort" type="LineEdit" parent="VBoxContainer/HBoxContainer2"]
[node name="ServerPort" type="LineEdit" parent="VBoxContainer/PortField"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "default"
[node name="Connect" type="Button" parent="VBoxContainer"]
[node name="PlayersField" type="HBoxContainer" parent="VBoxContainer"]
visible = false
layout_mode = 2
text = "Connect"
[node name="Host" type="Button" parent="VBoxContainer"]
[node name="Label" type="Label" parent="VBoxContainer/PlayersField"]
layout_mode = 2
text = "Host"
text = "Max Players"
[node name="HSlider" type="HSlider" parent="VBoxContainer/PlayersField"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
max_value = 4.0
value = 4.0
tick_count = 5
ticks_on_borders = true
[node name="Label2" type="Label" parent="VBoxContainer/PlayersField"]
layout_mode = 2
text = "4"
[node name="StartButton" type="Button" parent="VBoxContainer"]
visible = false
layout_mode = 2
text = "Start"
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_3o7ni")
bus = &"SFX"
[connection signal="mouse_entered" from="VBoxContainer/Button" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_button_pressed"]
[connection signal="mouse_entered" from="VBoxContainer/Connect" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/Connect" to="." method="_on_connect_pressed"]
[connection signal="mouse_entered" from="VBoxContainer/Host" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/Host" to="." method="_on_host_pressed"]
[connection signal="mouse_entered" from="VBoxContainer/BackButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/BackButton" to="." method="_on_button_pressed"]
[connection signal="mouse_entered" from="VBoxContainer/ModeContainer/HostButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/ModeContainer/HostButton" to="." method="_on_host_button_pressed"]
[connection signal="mouse_entered" from="VBoxContainer/ModeContainer/JoinButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/ModeContainer/JoinButton" to="." method="_on_join_button_pressed"]
[connection signal="value_changed" from="VBoxContainer/PlayersField/HSlider" to="." method="_on_h_slider_value_changed"]
[connection signal="mouse_entered" from="VBoxContainer/StartButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="VBoxContainer/StartButton" to="." method="_on_start_button_pressed"]

View File

@ -1,19 +1,17 @@
[gd_scene load_steps=8 format=3 uid="uid://176c6fuhg5ic"]
[gd_scene load_steps=7 format=3 uid="uid://176c6fuhg5ic"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://new_theme.tres" id="1_2aur6"]
[ext_resource type="PackedScene" uid="uid://dpt3kpixawyby" path="res://Scenes/UI/scoreboard.tscn" id="1_423py"]
[ext_resource type="Script" path="res://Scripts/singleplayer_lobby.gd" id="1_nd17k"]
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://UI/new_theme.tres" id="1_2aur6"]
[ext_resource type="Script" uid="uid://e5gf7hd5jsw3" path="res://Scripts/singleplayer_lobby.gd" id="1_nd17k"]
[ext_resource type="PackedScene" uid="uid://ddmg342ff2qaq" path="res://Scenes/UI/chatbox.tscn" id="3_l8xy3"]
[ext_resource type="PackedScene" uid="uid://dqqitmhu66a7d" path="res://Scenes/Menus/CharacterSelect/charselect.tscn" id="5_vg5y0"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="6_6nu57"]
[ext_resource type="PackedScene" uid="uid://bc6m3cluulpis" path="res://Scenes/Menus/CharacterSelect/character_select.tscn" id="6_ltm04"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_g5har"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("6_6nu57")
stream_0/weight = 1.0
[node name="singleplayer_lobby" type="Control" node_paths=PackedStringArray("scoreboard", "loadout_editor", "chatbox", "seed_entry", "ready_button", "daily_button")]
[node name="singleplayer_lobby" type="Control" node_paths=PackedStringArray("chatbox", "audio_player")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@ -23,72 +21,13 @@ grow_vertical = 2
mouse_filter = 2
theme = ExtResource("1_2aur6")
script = ExtResource("1_nd17k")
scoreboard = NodePath("Scoreboard")
loadout_editor = NodePath("Control")
character_select_screen = ExtResource("6_ltm04")
chatbox = NodePath("Chatbox")
seed_entry = NodePath("LineEdit")
ready_button = NodePath("ReadyButton")
daily_button = NodePath("DailyButton")
[node name="Scoreboard" parent="." instance=ExtResource("1_423py")]
visible = false
layout_mode = 1
anchors_preset = -1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -472.0
offset_right = -50.0
grow_horizontal = 0
[node name="ReadyButton" type="Button" parent="."]
visible = false
layout_mode = 1
anchors_preset = -1
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -81.0
offset_top = 311.0
offset_right = -240.0
offset_bottom = 19.0
grow_horizontal = 0
grow_vertical = 2
text = "Ready"
audio_player = NodePath("AudioStreamPlayer")
[node name="Chatbox" parent="." instance=ExtResource("3_l8xy3")]
layout_mode = 1
[node name="Control" parent="." instance=ExtResource("5_vg5y0")]
visible = false
layout_mode = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_g5har")
bus = &"SFX"
[node name="LineEdit" type="LineEdit" parent="."]
visible = false
layout_mode = 0
offset_right = 69.0625
offset_bottom = 23.0
placeholder_text = "seed"
[node name="DailyButton" type="Button" parent="."]
visible = false
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -276.0
offset_top = -40.0
grow_horizontal = 0
grow_vertical = 0
text = "Daily challenge"
[connection signal="mouse_entered" from="ReadyButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="ReadyButton" to="Scoreboard" method="set_player_ready_state" binds= [1, true]]
[connection signal="mouse_entered" from="DailyButton" to="." method="_on_button_mouse_entered"]
[connection signal="pressed" from="DailyButton" to="." method="_on_daily_button_pressed"]

View File

@ -1,13 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://dccsyymk4uko6"]
[ext_resource type="Script" path="res://Scripts/text_input_popup.gd" id="1_ve6eb"]
[ext_resource type="Script" uid="uid://b0asb3pmu8pqb" path="res://Scripts/text_input_popup.gd" id="1_ve6eb"]
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="2_mec4u"]
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_w0x7l"]
random_pitch = 1.1
streams_count = 1
stream_0/stream = ExtResource("2_mec4u")
stream_0/weight = 1.0
[node name="TextInputPopup" type="PanelContainer"]
anchors_preset = 8