diff --git a/Enemies/BabyEyeDog/baby_eye_dog.tres b/Enemies/BabyEyeDog/baby_eye_dog.tres index bcd8d8e..55c10dd 100644 --- a/Enemies/BabyEyeDog/baby_eye_dog.tres +++ b/Enemies/BabyEyeDog/baby_eye_dog.tres @@ -15,7 +15,8 @@ icon = ExtResource("1_xgen5") scene = ExtResource("3_otbdk") death_sprite = ExtResource("1_yj87d") sprite = ExtResource("2_mkbm6") -spawn_power = 16 +spawn_power = 6 +group_size = 10 health = 15 penalty = 4 movement_speed = 3.5 diff --git a/Enemies/Crystalisk/crystalisk.tres b/Enemies/Crystalisk/crystalisk.tres index 7b0f709..3febefa 100644 --- a/Enemies/Crystalisk/crystalisk.tres +++ b/Enemies/Crystalisk/crystalisk.tres @@ -15,7 +15,8 @@ icon = ExtResource("2_idym2") scene = ExtResource("3_fmkhl") death_sprite = ExtResource("1_skyfd") sprite = ExtResource("5_okcvf") -spawn_power = 6 +spawn_power = 5 +group_size = 6 health = 120 penalty = 7 movement_speed = 1.0 diff --git a/Enemies/ElderEyeDog/elder_eye_dog.tres b/Enemies/ElderEyeDog/elder_eye_dog.tres index ac35b81..881f8a8 100644 --- a/Enemies/ElderEyeDog/elder_eye_dog.tres +++ b/Enemies/ElderEyeDog/elder_eye_dog.tres @@ -15,7 +15,8 @@ icon = ExtResource("1_lck53") scene = ExtResource("3_m808b") death_sprite = ExtResource("1_qveaa") sprite = ExtResource("2_7nc4x") -spawn_power = 14 +spawn_power = 8 +group_size = 4 health = 150 penalty = 15 movement_speed = 1.4 diff --git a/Enemies/EyeDog/eye_dog.tres b/Enemies/EyeDog/eye_dog.tres index 865d62e..73b3b3c 100644 --- a/Enemies/EyeDog/eye_dog.tres +++ b/Enemies/EyeDog/eye_dog.tres @@ -21,6 +21,7 @@ icon = ExtResource("2_tyyee") scene = ExtResource("3_mxg1o") death_sprite = ExtResource("1_r8gpy") sprite = SubResource("AtlasTexture_n6kdu") +spawn_power = 3 health = 60 movement_speed = 1.6 spawn_cooldown = 1.2 diff --git a/Levels/Level3/specs.tres b/Levels/Level3/specs.tres index c6710e5..c16b5f2 100644 --- a/Levels/Level3/specs.tres +++ b/Levels/Level3/specs.tres @@ -2,7 +2,7 @@ [ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_ldkvi"] [ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_0atj5"] -[ext_resource type="Resource" uid="uid://cucdevshmdohf" path="res://Cards/overclock.tres" id="3_wfxcl"] +[ext_resource type="Resource" uid="uid://cvto66tp7rrst" path="res://Cards/gatling.tres" id="3_sbxeq"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://Classes/Engineer/class.tres" id="4_5rrxx"] [ext_resource type="Script" uid="uid://dalgif6huggwg" path="res://Scripts/Resources/level_specs.gd" id="5_kje1i"] [ext_resource type="Script" uid="uid://bp6q371iypd06" path="res://Scripts/wave_config.gd" id="6_gmv8c"] @@ -13,7 +13,7 @@ [resource] script = ExtResource("5_kje1i") hero_class = ExtResource("4_5rrxx") -allowed_cards = Array[ExtResource("1_ldkvi")]([ExtResource("2_0atj5"), ExtResource("3_wfxcl")]) +allowed_cards = Array[ExtResource("1_ldkvi")]([ExtResource("2_0atj5"), ExtResource("3_sbxeq")]) waves = Array[ExtResource("6_gmv8c")]([ExtResource("7_43tyk"), ExtResource("8_mblpn")]) zone = ExtResource("9_sbxeq") metadata/_custom_type_script = "uid://dalgif6huggwg" diff --git a/Levels/Level3/wave1.tres b/Levels/Level3/wave1.tres index 8a3939d..cb8f216 100644 --- a/Levels/Level3/wave1.tres +++ b/Levels/Level3/wave1.tres @@ -7,7 +7,7 @@ [resource] script = ExtResource("3_frc10") enemies = Dictionary[ExtResource("1_b6olw"), int]({ -ExtResource("2_b51i4"): 5 +ExtResource("2_b51i4"): 10 }) rewards_blank_cassette = true bonus_cash = 3 diff --git a/Locales/en.mo b/Locales/en.mo index 63ed027..e509646 100644 Binary files a/Locales/en.mo and b/Locales/en.mo differ diff --git a/Locales/en.po b/Locales/en.po index 4adfd9e..596b963 100644 --- a/Locales/en.po +++ b/Locales/en.po @@ -651,6 +651,12 @@ msgstr "Wave Preview" msgid "BUTTON_CLOSE" msgstr "Close" +msgid "LABEL_CAMPAIGN_DESC" +msgstr "Standard Campaign Mode" + +msgid "LABEL_ENDLESS_DESC" +msgstr "Endless Mode with random waves and all unlocked equipment" + #, fuzzy #~| msgid "LABEL_DISPLAY_NAME" #~ msgid "LABEL_CARD_NAME" diff --git a/Locales/translation_template.pot b/Locales/translation_template.pot index 1fc2705..f177abb 100644 --- a/Locales/translation_template.pot +++ b/Locales/translation_template.pot @@ -608,3 +608,9 @@ msgstr "" msgid "BUTTON_CLOSE" msgstr "" + +msgid "LABEL_CAMPAIGN_DESC" +msgstr "" + +msgid "LABEL_ENDLESS_DESC" +msgstr "" diff --git a/PCs/hero.gd b/PCs/hero.gd index a2e3357..2e9a5b8 100644 --- a/PCs/hero.gd +++ b/PCs/hero.gd @@ -262,18 +262,7 @@ func _unhandled_input(event: InputEvent) -> void: var wave_preview: WaveViewer = wave_preview_scene.instantiate() as WaveViewer pause() hud.add_child(wave_preview) - var wave_list: Array[Wave] = [] - var i: int = -1 - for wave: WaveConfig in game_manager.level_specs.waves.slice(game_manager.wave - 1): - i += 1 - var new_wave: Wave = Wave.new() - for enemy: Enemy in game_manager.level_specs.waves[game_manager.wave - 1 + i].enemies.keys(): - var enemy_card: EnemyCard = EnemyCard.new() - enemy_card.enemy = enemy - enemy_card.count = game_manager.level_specs.waves[game_manager.wave - 1 + i].enemies[enemy] - new_wave.enemy_groups.append(enemy_card) - wave_list.append(new_wave) - wave_preview.set_waves(wave_list, game_manager.wave) + wave_preview.set_waves(game_manager.get_upcoming_waves(10), game_manager.wave) wave_preview.closed.connect(unpause) diff --git a/Props/BigTree1/big_tree.glb.import b/Props/BigTree1/big_tree.glb.import index c000e92..cabb24e 100644 --- a/Props/BigTree1/big_tree.glb.import +++ b/Props/BigTree1/big_tree.glb.import @@ -46,8 +46,8 @@ _subresources={ }, "Material.003": { "use_external/enabled": true, -"use_external/fallback_path": "res://Props/BigTree1/big_tree_bark.tres", -"use_external/path": "uid://bo8hb5kchxsaj" +"use_external/fallback_path": "res://Materials/wood1/wood1.tres", +"use_external/path": "uid://c21fh4gsnunfg" } }, "meshes": { diff --git a/Props/BigTree1/big_tree.tscn b/Props/BigTree1/big_tree.tscn index c76c64a..fac0f63 100644 --- a/Props/BigTree1/big_tree.tscn +++ b/Props/BigTree1/big_tree.tscn @@ -4,4 +4,4 @@ [node name="Node3D" type="Node3D" unique_id=924363235] -[node name="big_tree" parent="." unique_id=1005968396 instance=ExtResource("1_jd860")] +[node name="big_tree" parent="." unique_id=1374218049 instance=ExtResource("1_jd860")] diff --git a/Props/BigTree1/big_tree_bark.tres b/Props/BigTree1/big_tree_bark.tres deleted file mode 100644 index ce5035c..0000000 --- a/Props/BigTree1/big_tree_bark.tres +++ /dev/null @@ -1,12 +0,0 @@ -[gd_resource type="ShaderMaterial" format=3 uid="uid://bo8hb5kchxsaj"] - -[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://Shaders/mightyduke_ps1.gdshader" id="1_kebxd"] -[ext_resource type="Texture2D" uid="uid://dmv1t70b2befg" path="res://BigTree1/big_tree_tree1_bark.png" id="2_mo30x"] - -[resource] -render_priority = 0 -shader = ExtResource("1_kebxd") -shader_parameter/albedo = ExtResource("2_mo30x") -shader_parameter/jitter_z_coordinate = true -shader_parameter/jitter_depth_independent = true -shader_parameter/alpha_scissor = 1.0 diff --git a/Props/BigTree1/big_tree_tree1_bark.png b/Props/BigTree1/big_tree_tree1_bark.png deleted file mode 100644 index 6ee1745..0000000 Binary files a/Props/BigTree1/big_tree_tree1_bark.png and /dev/null differ diff --git a/Props/BigTree1/big_tree_tree1_bark.png.import b/Props/BigTree1/big_tree_tree1_bark.png.import deleted file mode 100644 index 041a5fe..0000000 --- a/Props/BigTree1/big_tree_tree1_bark.png.import +++ /dev/null @@ -1,44 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://1fudnfgxctbc" -path.s3tc="res://.godot/imported/big_tree_tree1_bark.png-11db26644d40a58c1d1b623d52b4e041.s3tc.ctex" -metadata={ -"imported_formats": ["s3tc_bptc"], -"vram_texture": true -} -generator_parameters={ -"md5": "3a9eb64baf1362d22626d5e08a5eea2e" -} - -[deps] - -source_file="res://Props/BigTree1/big_tree_tree1_bark.png" -dest_files=["res://.godot/imported/big_tree_tree1_bark.png-11db26644d40a58c1d1b623d52b4e041.s3tc.ctex"] - -[params] - -compress/mode=2 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -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/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -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 diff --git a/Scripts/game.gd b/Scripts/game.gd index aac67db..ab3538a 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -87,6 +87,30 @@ func networked_set_wave(wave_number: int) -> void: connected_players_nodes[player].hud.set_wave_count(wave_number) wave = wave_number set_upcoming_wave() + + + + +##wave_count is number of upcoming waves this function should return +func get_upcoming_waves(wave_count: int) -> Array[Wave]: + var waves: Array[Wave] = [] + var i: int = -1 + for wave_config: WaveConfig in level_specs.waves.slice(wave - 1): + i += 1 + var new_wave: Wave = Wave.new() + for enemy: Enemy in level_specs.waves[wave - 1 + i].enemies.keys(): + var enemy_card: EnemyCard = EnemyCard.new() + enemy_card.enemy = enemy + enemy_card.count = level_specs.waves[wave - 1 + i].enemies[enemy] + new_wave.enemy_groups.append(enemy_card) + waves.append(new_wave) + if waves.size() < wave_count: + var starting_wave: int = wave + for x: int in wave_count - waves.size(): + var spawn_power: int = WaveManager.calculate_spawn_power(starting_wave + x, connected_players_nodes.size()) + var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool) + waves.append(new_wave) + return waves func spawn_level(scene: PackedScene) -> void: @@ -154,15 +178,11 @@ func ready_player(player_ready_true: bool) -> void: func spawn_enemy_wave() -> void: - #level.shop.close() - #wave += 1 level.disable_all_tower_frames() level.flow_field.calculate() 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() wave_started.emit() @@ -215,18 +235,8 @@ func set_upcoming_wave() -> void: func temp_set_upcoming_wave(new_wave: Wave, coins: int) -> void: pot = coins - #connected_players_nodes[multiplayer.get_unique_id()].hud.show_wave_generation_anim(new_wave) connected_players_nodes[multiplayer.get_unique_id()].hud.set_upcoming_wave(new_wave.to_dict()) -#TODO: You'll probably have to write a to_dict function for the new wave system -#before any of this shit works in multiplayer -#@rpc("reliable", "call_local") -#func networked_set_upcoming_wave(wave_dict: Dictionary, coins: int) -> void: - #upcoming_wave = wave_dict - #pot = coins - #for key: int in connected_players_nodes: - #connected_players_nodes[key].hud.set_upcoming_wave(upcoming_wave) - @rpc("reliable", "call_local") func networked_set_endless(value: bool) -> void: @@ -299,7 +309,7 @@ func end_wave() -> void: #else: #shop_chance += 0.09 wave_finished.emit() - if wave < wave_limit: + if wave <= wave_limit: set_upcoming_wave() @@ -383,13 +393,25 @@ func end(outcome: bool) -> void: menu.set_outcome_message("You lost...") lost_game.emit() true: + menu.won_game() menu.set_outcome_message("You win!") won_game.emit() + menu.pressed_continue.connect(continue_with_game) UILayer.add_child(menu) Input.mouse_mode = Input.MOUSE_MODE_VISIBLE connected_players_nodes[multiplayer.get_unique_id()].pause() +func continue_with_game() -> void: + game_active = true + gamemode.endless = true + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + connected_players_nodes[multiplayer.get_unique_id()].unpause() + #TODO: This shouldn't happen. instead, the wave generator should generate level_specs waves + level_specs.waves = [] + set_upcoming_wave() + + func quit_to_desktop() -> void: multiplayer.multiplayer_peer.close() multiplayer.multiplayer_peer = null diff --git a/Scripts/wave_manager.gd b/Scripts/wave_manager.gd index d0c4ecf..65940b8 100644 --- a/Scripts/wave_manager.gd +++ b/Scripts/wave_manager.gd @@ -13,7 +13,8 @@ extends Object ## Takes in wave number and number of players and returns a spawn power value ## intended for passing into the generate_wave method static func calculate_spawn_power(wave_number: int, number_of_players: int) -> int: - return (20 * number_of_players) + (4 * wave_number) + #print("wave number: " + str(wave_number) + ", number of players: " + str(number_of_players)) + return (11 * number_of_players) + (6 * wave_number) ## Takes in wave number and number of players and returns the amount of coins @@ -38,9 +39,8 @@ static func get_test_wave(spawn_pool: Array[Enemy]) -> Wave: static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave: var wave: Wave = Wave.new() - var points: int = int(spawn_power / 10.0) #print("Generating wave with " + str(points) + " points to spend") - while points > 0: + while spawn_power > 0: var new_card: EnemyCard = EnemyCard.new() #First, choose an enemy at random @@ -50,49 +50,33 @@ static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy]) -> Wave: #and, if not, then we have to pick a different enemy, repeat until #we've successfully chosen one we can actually afford var enemy_chosen: bool = false - var highest_rarity: Data.Rarity = Data.Rarity.COMMON + var most_enemies_afforded: int = 0 + var first_enemy_id: int = -1 while !enemy_chosen: - #Next, determine which is the most expensive rarity we can afford - if new_card.enemy.legendary_cost <= points: - highest_rarity = Data.Rarity.LEGENDARY - enemy_chosen = true - elif new_card.enemy.epic_cost <= points: - highest_rarity = Data.Rarity.EPIC - enemy_chosen = true - elif new_card.enemy.rare_cost <= points: - highest_rarity = Data.Rarity.RARE - enemy_chosen = true - elif new_card.enemy.uncommon_cost <= points: - highest_rarity = Data.Rarity.UNCOMMON - enemy_chosen = true - elif new_card.enemy.common_cost <= points: - highest_rarity = Data.Rarity.COMMON + #Next, determine what is the most groups we can afford + most_enemies_afforded = int(spawn_power / new_card.enemy.spawn_power) + if most_enemies_afforded > 0: enemy_chosen = true else: - #Even the common rarity was too expensive, so we have to choose + #Even 1 group was too expensive, so we have to choose #a different enemy and try this process again var enemy_id: int = spawn_pool.find(new_card.enemy) enemy_id -= 1 + if first_enemy_id == -1: + first_enemy_id = enemy_id if enemy_id < 0: new_card.enemy = spawn_pool[spawn_pool.size() - 1] else: new_card.enemy = spawn_pool[enemy_id] - - #Now that we know which rarities we could afford, lets just choose a - #random one - var chosen_rarity: int = NoiseRandom.randi_in_range(spawn_power, 0, highest_rarity) - new_card.rarity = chosen_rarity as Data.Rarity + most_enemies_afforded = 0 + if enemy_id == first_enemy_id: + return wave + #Now that we know how many we could afford, lets just choose a + #random number of groups + var chosen_groups: int = NoiseRandom.randi_in_range(spawn_power, 1, most_enemies_afforded) + new_card.count = chosen_groups * new_card.enemy.group_size #Add that new enemy to the wave and spend the points! wave.enemy_groups.append(new_card) - if chosen_rarity == Data.Rarity.COMMON: - points -= new_card.enemy.common_cost - elif chosen_rarity == Data.Rarity.UNCOMMON: - points -= new_card.enemy.uncommon_cost - elif chosen_rarity == Data.Rarity.RARE: - points -= new_card.enemy.rare_cost - elif chosen_rarity == Data.Rarity.EPIC: - points -= new_card.enemy.epic_cost - elif chosen_rarity == Data.Rarity.LEGENDARY: - points -= new_card.enemy.legendary_cost + spawn_power -= chosen_groups * new_card.enemy.spawn_power return wave diff --git a/Towers/Gatling/tower_stats.tres b/Towers/Gatling/tower_stats.tres index e4ab4f4..2305bb6 100644 --- a/Towers/Gatling/tower_stats.tres +++ b/Towers/Gatling/tower_stats.tres @@ -1,6 +1,7 @@ [gd_resource type="Resource" script_class="CardText" format=3 uid="uid://nxl5wabgl36t"] [ext_resource type="Script" uid="uid://bsuinotkvh7eu" path="res://Scripts/Resources/feature.gd" id="1_5mpl7"] +[ext_resource type="Resource" uid="uid://dfup264h2pun7" path="res://Scripts/Features/HeavyRounds/heavy_rounds_feature.tres" id="2_is2l1"] [ext_resource type="Script" uid="uid://dg7gxxqfqxcmc" path="res://Scripts/Resources/card_text.gd" id="2_ky46y"] [resource] @@ -13,4 +14,5 @@ attributes = Dictionary[String, float]({ "Speed Multiplier": 2.0, "Speed Time": 3.0 }) +features = Array[ExtResource("1_5mpl7")]([ExtResource("2_is2l1")]) text = "DESC_TOWER_ACCEL" diff --git a/UI/Menus/GameEndScreen/game_end_screen.gd b/UI/Menus/GameEndScreen/game_end_screen.gd index 24de5bc..0a6dd27 100644 --- a/UI/Menus/GameEndScreen/game_end_screen.gd +++ b/UI/Menus/GameEndScreen/game_end_screen.gd @@ -1,5 +1,7 @@ class_name GameEndScreen extends PanelContainer +signal pressed_continue() + @export var box: PackedScene @export var outcome_label: Label @@ -12,6 +14,11 @@ class_name GameEndScreen extends PanelContainer var game_manager: GameManager +func won_game() -> void: + $VBoxContainer/Buttons/ContinueButton.visible = true + $VBoxContainer/Buttons/PlayButton.visible = false + + func _ready() -> void: winrate_label.text = str(Data.save_data.winrate) + "%" total_games_label.text = str(Data.save_data.wins + Data.save_data.losses) @@ -49,3 +56,8 @@ func _on_play_button_pressed() -> void: func _on_button_mouse_entered() -> void: $AudioStreamPlayer.play() + + +func _on_continue_button_pressed() -> void: + pressed_continue.emit() + queue_free() diff --git a/UI/Menus/GameEndScreen/game_end_screen.tscn b/UI/Menus/GameEndScreen/game_end_screen.tscn index db74ac1..d121892 100644 --- a/UI/Menus/GameEndScreen/game_end_screen.tscn +++ b/UI/Menus/GameEndScreen/game_end_screen.tscn @@ -123,6 +123,11 @@ size_flags_vertical = 3 layout_mode = 2 alignment = 2 +[node name="ContinueButton" type="Button" parent="VBoxContainer/Buttons" unique_id=1143038936] +visible = false +layout_mode = 2 +text = "BUTTON_CONTINUE" + [node name="PlayButton" type="Button" parent="VBoxContainer/Buttons" unique_id=774071211] layout_mode = 2 text = "BUTTON_RESTART" @@ -135,6 +140,8 @@ text = "BUTTON_MAIN_MENU" stream = SubResource("AudioStreamRandomizer_dram5") bus = &"SFX" +[connection signal="mouse_entered" from="VBoxContainer/Buttons/ContinueButton" to="." method="_on_button_mouse_entered"] +[connection signal="pressed" from="VBoxContainer/Buttons/ContinueButton" to="." method="_on_continue_button_pressed"] [connection signal="mouse_entered" from="VBoxContainer/Buttons/PlayButton" to="." method="_on_button_mouse_entered"] [connection signal="pressed" from="VBoxContainer/Buttons/PlayButton" to="." method="_on_play_button_pressed"] [connection signal="mouse_entered" from="VBoxContainer/Buttons/QuitButton" to="." method="_on_button_mouse_entered"] diff --git a/UI/Menus/MainMenu/level_selecter_main_menu.gd b/UI/Menus/MainMenu/level_selecter_main_menu.gd index 18cd672..c0e274c 100644 --- a/UI/Menus/MainMenu/level_selecter_main_menu.gd +++ b/UI/Menus/MainMenu/level_selecter_main_menu.gd @@ -1,6 +1,6 @@ class_name MainMenuLevelSelector extends PanelContainer -signal level_selected(specs: LevelSpecs) +signal level_selected(specs: LevelSpecs, side_chosen: int) var side: int = 0 @@ -8,12 +8,12 @@ var side: int = 0 func _on_button_pressed() -> void: side = 0 - $VBoxContainer/Label.text = "Standard Campaign Mode" + $VBoxContainer/Label.text = tr("LABEL_CAMPAIGN_DESC") func _on_button_2_pressed() -> void: side = 1 - $VBoxContainer/Label.text = "Endless Mode with random waves and all unlocked equipment" + $VBoxContainer/Label.text = tr("LABEL_ENDLESS_DESC") func _ready() -> void: @@ -27,4 +27,4 @@ func _ready() -> void: func start_level(level: int) -> void: - level_selected.emit(levels[level]) + level_selected.emit(levels[level], side) diff --git a/UI/Menus/MainMenu/main_menu.gd b/UI/Menus/MainMenu/main_menu.gd index 2d6f486..71435c2 100644 --- a/UI/Menus/MainMenu/main_menu.gd +++ b/UI/Menus/MainMenu/main_menu.gd @@ -118,9 +118,9 @@ func generate_seed() -> void: gamemode.rng_seed = randi() -func level_selected(level: LevelSpecs) -> void: +func level_selected(level: LevelSpecs, side: int) -> void: generate_seed() - gamemode.endless = false + gamemode.endless = true if side == 1 else false gamemode.daily = false game.level_specs = level start_game() diff --git a/UI/Menus/MainMenu/main_menu.tscn b/UI/Menus/MainMenu/main_menu.tscn index e984b4a..8e44747 100644 --- a/UI/Menus/MainMenu/main_menu.tscn +++ b/UI/Menus/MainMenu/main_menu.tscn @@ -1,5 +1,6 @@ [gd_scene format=3 uid="uid://8yv7excojcg0"] +[ext_resource type="Texture2D" uid="uid://mt6liu1hi15j" path="res://ingame_logo.png" id="2_14tm0"] [ext_resource type="Script" uid="uid://ci8vq73u23viy" path="res://UI/Menus/MainMenu/main_menu.gd" id="2_ivytu"] [ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://UI/drop_003.ogg" id="5_cwn2i"] [ext_resource type="Script" uid="uid://bwsw4oq150v3p" path="res://UI/Menus/MainMenu/level_selecter_main_menu.gd" id="8_qshe4"] @@ -53,15 +54,16 @@ grow_horizontal = 2 grow_vertical = 2 color = Color(0.5176471, 0.60784316, 0.89411765, 1) -[node name="TitleLabel" type="Label" parent="." unique_id=1731106766] +[node name="TextureRect" type="TextureRect" parent="." unique_id=57227105] layout_mode = 1 -anchors_preset = -1 +anchors_preset = 15 anchor_right = 1.0 -anchor_bottom = 0.5 +anchor_bottom = 1.0 grow_horizontal = 2 -text = "TITLE_GAME_NAME" -horizontal_alignment = 1 -vertical_alignment = 1 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("2_14tm0") +stretch_mode = 5 [node name="MainControls" type="VBoxContainer" parent="." unique_id=923552840] custom_minimum_size = Vector2(80, 0) @@ -455,7 +457,7 @@ text = "BUTTON_BACK" [node name="Label" type="Label" parent="PanelContainer/VBoxContainer" unique_id=654891125] layout_mode = 2 -text = "Standard Campaign Mode" +text = "LABEL_CAMPAIGN_DESC" horizontal_alignment = 1 vertical_alignment = 1 diff --git a/Weapons/Assault/BoltGun.glb b/Weapons/Assault/BoltGun.glb index 6167a64..53e6269 100644 Binary files a/Weapons/Assault/BoltGun.glb and b/Weapons/Assault/BoltGun.glb differ diff --git a/Weapons/Gatling/weapon_stats.tres b/Weapons/Gatling/weapon_stats.tres index 7bb8ddc..63426d3 100644 --- a/Weapons/Gatling/weapon_stats.tres +++ b/Weapons/Gatling/weapon_stats.tres @@ -1,6 +1,7 @@ [gd_resource type="Resource" script_class="CardText" format=3 uid="uid://cj2x1jvo8l4ot"] [ext_resource type="Script" uid="uid://bsuinotkvh7eu" path="res://Scripts/Resources/feature.gd" id="1_vn048"] +[ext_resource type="Resource" uid="uid://dfup264h2pun7" path="res://Scripts/Features/HeavyRounds/heavy_rounds_feature.tres" id="2_t6xv0"] [ext_resource type="Script" uid="uid://dg7gxxqfqxcmc" path="res://Scripts/Resources/card_text.gd" id="2_y36gr"] [resource] @@ -14,4 +15,5 @@ attributes = Dictionary[String, float]({ "Speed Multiplier": 3.0, "Speed Time": 4.0 }) +features = Array[ExtResource("1_vn048")]([ExtResource("2_t6xv0")]) text = "DESC_WEAPON_ACCEL" diff --git a/Weapons/RocketLauncher/weapon_stats.tres b/Weapons/RocketLauncher/weapon_stats.tres index 3fe8ca8..b2477cd 100644 --- a/Weapons/RocketLauncher/weapon_stats.tres +++ b/Weapons/RocketLauncher/weapon_stats.tres @@ -1,6 +1,7 @@ [gd_resource type="Resource" script_class="CardText" format=3 uid="uid://d2yo07m2mp2mp"] [ext_resource type="Script" uid="uid://bsuinotkvh7eu" path="res://Scripts/Resources/feature.gd" id="1_h5r83"] +[ext_resource type="Resource" uid="uid://dfup264h2pun7" path="res://Scripts/Features/HeavyRounds/heavy_rounds_feature.tres" id="2_lnb6u"] [ext_resource type="Script" uid="uid://dg7gxxqfqxcmc" path="res://Scripts/Resources/card_text.gd" id="2_ow0r7"] [resource] @@ -12,4 +13,5 @@ attributes = Dictionary[String, float]({ "Fire Delay": 2.0, "Target Limit": 3.0 }) +features = Array[ExtResource("1_h5r83")]([ExtResource("2_lnb6u")]) text = "DESC_WEAPON_ROCKET" diff --git a/Zones/Cave/model_cave_dirt.png b/Zones/Cave/model_cave_dirt.png deleted file mode 100644 index 287394c..0000000 Binary files a/Zones/Cave/model_cave_dirt.png and /dev/null differ diff --git a/Zones/Cave/model_cave_dirt.png.import b/Zones/Cave/model_cave_dirt.png.import deleted file mode 100644 index 1c60d8b..0000000 --- a/Zones/Cave/model_cave_dirt.png.import +++ /dev/null @@ -1,43 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cl6equc2hhaem" -path="res://.godot/imported/model_cave_dirt.png-039135bf5228cec74a8d4790b669eb21.ctex" -metadata={ -"vram_texture": false -} -generator_parameters={ -"md5": "dcd74dad69b0cf175774820a45df225d" -} - -[deps] - -source_file="res://Zones/Cave/model_cave_dirt.png" -dest_files=["res://.godot/imported/model_cave_dirt.png-039135bf5228cec74a8d4790b669eb21.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -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/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Zones/Cave/scn_cave.tscn b/Zones/Cave/scn_cave.tscn index 78f7a04..ef3d836 100644 --- a/Zones/Cave/scn_cave.tscn +++ b/Zones/Cave/scn_cave.tscn @@ -216,7 +216,6 @@ corpses = NodePath("Parents/Corpses") cinematic_cam = NodePath("CinematicCamManager") printer = NodePath("CardPrinter") shop = NodePath("ShopStand") -data_path = "res://Worlds/GreenPlanet/Levels/Cave/level3.json" metadata/_custom_type_script = "uid://cvejbo3srx8py" [node name="Parents" type="Node3D" parent="." unique_id=447416055] diff --git a/Zones/Moat/mesh_moat.glb b/Zones/Moat/mesh_moat.glb index cd21959..c7c1d41 100644 Binary files a/Zones/Moat/mesh_moat.glb and b/Zones/Moat/mesh_moat.glb differ diff --git a/Zones/Moat/mesh_moat.glb.import b/Zones/Moat/mesh_moat.glb.import index 9409e96..fbf17ff 100644 --- a/Zones/Moat/mesh_moat.glb.import +++ b/Zones/Moat/mesh_moat.glb.import @@ -39,25 +39,25 @@ materials/extract_format=0 materials/extract_path="" _subresources={ "materials": { -"Dirt": { -"use_external/enabled": true, -"use_external/fallback_path": "res://Materials/dirt1/dirt1.tres", -"use_external/path": "uid://vu21wvwrmhlj" -}, -"Grass": { -"use_external/enabled": true, -"use_external/fallback_path": "res://Materials/grass1/grass1.tres", -"use_external/path": "uid://c4qub458rqpt2" -}, -"Material": { -"use_external/enabled": true, -"use_external/fallback_path": "res://Materials/bricks1/bricks1.tres", -"use_external/path": "uid://b7wnk32j3acfr" -}, "Material.002": { "use_external/enabled": true, "use_external/fallback_path": "res://Materials/cobblestone1/cobblestone1.tres", "use_external/path": "uid://ci2m26g6b7ao5" +}, +"bricks1": { +"use_external/enabled": true, +"use_external/fallback_path": "res://Materials/bricks1/bricks1.tres", +"use_external/path": "uid://b7wnk32j3acfr" +}, +"dirt1": { +"use_external/enabled": true, +"use_external/fallback_path": "res://Materials/dirt1/dirt1.tres", +"use_external/path": "uid://vu21wvwrmhlj" +}, +"grass1": { +"use_external/enabled": true, +"use_external/fallback_path": "res://Materials/grass1/grass1.tres", +"use_external/path": "uid://c4qub458rqpt2" } } } diff --git a/Zones/Moat/mesh_moat_bricks.png b/Zones/Moat/mesh_moat_bricks.png deleted file mode 100644 index 15ee626..0000000 Binary files a/Zones/Moat/mesh_moat_bricks.png and /dev/null differ diff --git a/Zones/Moat/mesh_moat_bricks.png.import b/Zones/Moat/mesh_moat_bricks.png.import deleted file mode 100644 index 4a8a9a7..0000000 --- a/Zones/Moat/mesh_moat_bricks.png.import +++ /dev/null @@ -1,43 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cgk5bsrx4on5g" -path="res://.godot/imported/mesh_moat_bricks.png-c2ba537b406e30bb339b467fd403153a.ctex" -metadata={ -"vram_texture": false -} -generator_parameters={ -"md5": "bcdd6414a2f4ce476e1cfdafd881ca59" -} - -[deps] - -source_file="res://Zones/Moat/mesh_moat_bricks.png" -dest_files=["res://.godot/imported/mesh_moat_bricks.png-c2ba537b406e30bb339b467fd403153a.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -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/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Zones/Moat/mesh_moat_cobblestone.png b/Zones/Moat/mesh_moat_cobblestone.png deleted file mode 100644 index 3b52b6e..0000000 Binary files a/Zones/Moat/mesh_moat_cobblestone.png and /dev/null differ diff --git a/Zones/Moat/mesh_moat_cobblestone.png.import b/Zones/Moat/mesh_moat_cobblestone.png.import deleted file mode 100644 index b4d7f1b..0000000 --- a/Zones/Moat/mesh_moat_cobblestone.png.import +++ /dev/null @@ -1,43 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://vqji3458oxk" -path="res://.godot/imported/mesh_moat_cobblestone.png-2dc3858667c8d48b81ecde3ebb6fb3ec.ctex" -metadata={ -"vram_texture": false -} -generator_parameters={ -"md5": "4cb1f838ef5968fed908002c6419a080" -} - -[deps] - -source_file="res://Zones/Moat/mesh_moat_cobblestone.png" -dest_files=["res://.godot/imported/mesh_moat_cobblestone.png-2dc3858667c8d48b81ecde3ebb6fb3ec.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -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/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Zones/Moat/mesh_moat_grass.png b/Zones/Moat/mesh_moat_grass.png deleted file mode 100644 index aa1b5c4..0000000 Binary files a/Zones/Moat/mesh_moat_grass.png and /dev/null differ diff --git a/Zones/Moat/mesh_moat_level_tex.png b/Zones/Moat/mesh_moat_level_tex.png deleted file mode 100644 index 6f691b7..0000000 Binary files a/Zones/Moat/mesh_moat_level_tex.png and /dev/null differ diff --git a/Zones/Moat/mesh_moat_level_tex.png.import b/Zones/Moat/mesh_moat_level_tex.png.import deleted file mode 100644 index 00f8a71..0000000 --- a/Zones/Moat/mesh_moat_level_tex.png.import +++ /dev/null @@ -1,43 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d3frq1qqxo6py" -path="res://.godot/imported/mesh_moat_level_tex.png-7de3230baae0928690a37428dd1e0993.ctex" -metadata={ -"vram_texture": false -} -generator_parameters={ -"md5": "ba963c984781211fb82f1802a965d534" -} - -[deps] - -source_file="res://Zones/Moat/mesh_moat_level_tex.png" -dest_files=["res://.godot/imported/mesh_moat_level_tex.png-7de3230baae0928690a37428dd1e0993.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -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/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/Zones/Moat/scn_moat.tscn b/Zones/Moat/scn_moat.tscn index 2a4100d..9b2a649 100644 --- a/Zones/Moat/scn_moat.tscn +++ b/Zones/Moat/scn_moat.tscn @@ -18,7 +18,6 @@ [ext_resource type="PackedScene" uid="uid://c8ecof4oeng1f" path="res://Props/BigTree1/big_tree.tscn" id="21_6tcu8"] [ext_resource type="PackedScene" uid="uid://c6isprnkaliqr" path="res://Scenes/MixingTable/remix_table.tscn" id="21_ks6qx"] [ext_resource type="Script" uid="uid://cy6oj2hr8q8br" path="res://Scripts/killbox.gd" id="26_tuncf"] -[ext_resource type="PackedScene" uid="uid://c2avjln5vmr0y" path="res://Scenes/Shredder/shredder.tscn" id="27_gppb4"] [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://Zones/Moat/mesh_moat.glb" id="30_ttr7n"] @@ -236,7 +235,7 @@ fog_depth_end = 200.0 size = Vector3(3.6270146, 6.87512, 10) [sub_resource type="BoxShape3D" id="BoxShape3D_134um"] -size = Vector3(70.0478, 1, 73.4615) +size = Vector3(260.6662, 18.99414, 318.20755) [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fi8e6"] transparency = 1 @@ -258,7 +257,6 @@ cinematic_cam = NodePath("CinemaCam") printer = NodePath("CardPrinter") shop = NodePath("ShopStand") obstacles = Array[PackedScene]([ExtResource("7_6tcu8")]) -data_path = "res://Worlds/GreenPlanet/Levels/Bridge/level1.json" metadata/_custom_type_script = "uid://cvejbo3srx8py" metadata/_editor_floor_ = Vector3(4, -10, 8) @@ -404,13 +402,10 @@ collision_mask = 2 script = ExtResource("26_tuncf") [node name="CollisionShape3D" type="CollisionShape3D" parent="Killbox" unique_id=1079628314] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0668106, -6.8471, 0.829394) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.947075, -15.84417, 71.8072) shape = SubResource("BoxShape3D_134um") -[node name="Shredder" parent="." unique_id=964733986 instance=ExtResource("27_gppb4")] -transform = Transform3D(0.748886, 0, 0.662699, 0, 1, 0, -0.662699, 0, 0.748886, 34.8662, 0.5, 16.6183) - -[node name="bridge" parent="." unique_id=142248090 instance=ExtResource("30_ttr7n")] +[node name="bridge" parent="." unique_id=1818123169 instance=ExtResource("30_ttr7n")] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 2.5, 0) [node name="Sprite3D" type="Sprite3D" parent="." unique_id=1926664882] diff --git a/ingame_logo.png b/ingame_logo.png new file mode 100644 index 0000000..6ed6a98 Binary files /dev/null and b/ingame_logo.png differ diff --git a/Zones/Moat/mesh_moat_grass.png.import b/ingame_logo.png.import similarity index 66% rename from Zones/Moat/mesh_moat_grass.png.import rename to ingame_logo.png.import index 6afea56..177f7ce 100644 --- a/Zones/Moat/mesh_moat_grass.png.import +++ b/ingame_logo.png.import @@ -2,19 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://r6t8tw8wdg0k" -path="res://.godot/imported/mesh_moat_grass.png-ff8f81b04c8e8a850d68fcdbc1bd8b0b.ctex" +uid="uid://mt6liu1hi15j" +path="res://.godot/imported/ingame_logo.png-55759551dc5765576e8b2217c84044f0.ctex" metadata={ "vram_texture": false } -generator_parameters={ -"md5": "90c8db677a98042ac33135e89c44851a" -} [deps] -source_file="res://Zones/Moat/mesh_moat_grass.png" -dest_files=["res://.godot/imported/mesh_moat_grass.png-ff8f81b04c8e8a850d68fcdbc1bd8b0b.ctex"] +source_file="res://ingame_logo.png" +dest_files=["res://.godot/imported/ingame_logo.png-55759551dc5765576e8b2217c84044f0.ctex"] [params] @@ -26,7 +23,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=true +mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal=""