added stepping sounds

This commit is contained in:
2026-02-08 09:16:17 +11:00
parent e441a121ff
commit 137a979c5c
235 changed files with 3881 additions and 170 deletions

View File

@@ -1,6 +1,8 @@
class_name LevelConfig
extends Resource
@export var author: String
@export var display_title: String
@export var hero_class: HeroClass
@export var allowed_cards: Array[Card]
@export var waves: Array[WaveConfig]

View File

@@ -13,6 +13,10 @@ var winrate: int :
set(_value):
return
var level_high_scores: Dictionary = {}
var endless_high_scores: Dictionary = {}
#Engineer
var engineer_cards_bought: int = 0
@@ -23,6 +27,13 @@ var mage_cards_bought: int = 0
var mage_unlocked: bool = 0
func check_high_score(level_title: String, wave_reached: int, endless: bool) -> void:
if endless:
endless_high_scores[level_title] = wave_reached
else:
level_high_scores[level_title] = wave_reached
func add_game_outcome(outcome: bool) -> void:
if outcome:
wins += 1
@@ -71,6 +82,8 @@ func save_to_disc() -> void:
"mage_card_seen_in_shop" = mage_card_seen_in_shop,
"mage_cards_bought" = mage_cards_bought,
"mage_unlocked" = mage_unlocked,
"level_high_scores" = level_high_scores,
"endless_high_scores" = endless_high_scores
}
var json_string: String = JSON.stringify(dict)
save_file.store_line(json_string)
@@ -86,12 +99,23 @@ static func load_from_disk(slot: int) -> SaveData:
var dict: Dictionary = json.data
var stats: SaveData = SaveData.new()
stats.save_slot = slot
stats.wins = dict["wins"]
stats.losses = dict["losses"]
stats.twenty_game_history.append_array(dict["twenty_game_history"])
stats.engineer_cards_bought = dict["engineer_cards_bought"]
stats.mage_card_seen_in_shop = dict["mage_card_seen_in_shop"]
stats.mage_cards_bought = dict["mage_cards_bought"]
stats.mage_unlocked = dict["mage_unlocked"]
if dict.has("wins"):
stats.wins = dict["wins"]
if dict.has("losses"):
stats.losses = dict["losses"]
if dict.has("twenty_game_history"):
stats.twenty_game_history.append_array(dict["twenty_game_history"])
if dict.has("engineer_cards_bought"):
stats.engineer_cards_bought = dict["engineer_cards_bought"]
if dict.has("mage_card_seen_in_shop"):
stats.mage_card_seen_in_shop = dict["mage_card_seen_in_shop"]
if dict.has("mage_cards_bought"):
stats.mage_cards_bought = dict["mage_cards_bought"]
if dict.has("mage_unlocked"):
stats.mage_unlocked = dict["mage_unlocked"]
if dict.has("level_high_scores"):
stats.level_high_scores = dict["level_high_scores"]
if dict.has("endless_high_scores"):
stats.endless_high_scores = dict["endless_high_scores"]
return stats
return SaveData.new()

View File

@@ -99,7 +99,7 @@ func update_path() -> void:
return
var points: Array[Vector3] = []
var node: FlowNodeData = flow_field.get_closest_point(flow_field.start_nodes[0].position, true, false)
points.append(node.position + Vector3(0, 0.15, 0))
points.append(global_position + Vector3(0, 0.15, 0))
while node.best_path:
node = node.best_path
points.append(node.position + Vector3(0, 0.15, 0))

View File

@@ -32,6 +32,7 @@ var stats: RoundStats
var card_gameplay: bool = false
var level_layout: FlowFieldData
var level_config: LevelConfig
var starting_endless: bool = false
#TODO: Create a reference to some generic Lobby object that wraps the multiplayer players list stuff
@@ -78,6 +79,10 @@ func parse_command(text: String, peer_id: int) -> void:
chatbox.append_message("SERVER", Color.TOMATO, "Unable to set wave")
elif text.substr(1, 4) == "seed":
chatbox.append_message("SERVER", Color.TOMATO, str(NoiseRandom.noise.seed))
elif text.substr(1, 7) == "unstuck":
connected_players_nodes[multiplayer.get_unique_id()].position = level.player_spawns[0].global_position
elif text.substr(1, 5) == "blank":
connected_players_nodes[multiplayer.get_unique_id()].blank_cassettes += 1
@rpc("reliable", "call_local")
@@ -87,8 +92,6 @@ 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
@@ -96,7 +99,7 @@ func get_upcoming_waves(wave_count: int) -> Array[WaveConfig]:
var waves: Array[WaveConfig] = []
waves.append_array(level_config.waves.slice(wave - 1))
if waves.size() < wave_count:
var starting_wave: int = wave
var starting_wave: int = wave + waves.size()
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: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size())
@@ -150,7 +153,6 @@ func spawn_players() -> void:
base_took_damage.connect(player.hud.set_lives_count)
root_scene.add_child(player)
p_i += 1
level.cinematic_cam.does_its_thing = false
func ready_player(player_ready_true: bool) -> void:
@@ -190,24 +192,25 @@ func set_wave_to_spawners(wave_thing: WaveConfig, wave_number: int) -> void:
for enemy_group: EnemyGroup in wave_thing.enemy_groups.keys():
assignment_salt += 1
if enemy_group.enemy.target_type == Data.EnemyType.LAND:
ground_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) - assignment_salt, 0, ground_spawners.size() - 1)].add_card(enemy_group)
ground_spawners[wave_thing.enemy_groups[enemy_group]].add_card(enemy_group)
else:
air_spawners[NoiseRandom.randi_in_range((wave_number * assignment_salt) + assignment_salt, 0, air_spawners.size() - 1)].add_card(enemy_group)
func set_upcoming_wave() -> void:
if is_multiplayer_authority():
if level_config.waves.size() == 0:
print(wave)
print(level_config.waves.size())
if wave > level_config.waves.size():
print("added new wave on top")
var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size())
#var new_wave: Dictionary = WaveManager.generate_wave(spawn_power, level.enemy_pool)
var new_wave: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size())
set_wave_to_spawners(new_wave, wave)
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
#networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 70.0))
else:
var new_wave: WaveConfig = get_upcoming_waves(1)[0]
set_wave_to_spawners(new_wave, wave)
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
level_config.waves.append(new_wave)
var new_wave: WaveConfig = get_upcoming_waves(1)[0]
print(new_wave)
set_wave_to_spawners(new_wave, wave)
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
func temp_set_upcoming_wave(new_wave: WaveConfig, coins: int) -> void:
@@ -262,7 +265,9 @@ func damage_goal(enemy: Enemy, penalty: int) -> void:
func end_wave() -> void:
print("wave endedZ")
wave += 1
Data.save_data.check_high_score(level_config.display_title, wave, starting_endless)
for peer_id: int in connected_players_nodes:
var player: Hero = connected_players_nodes[peer_id] as Hero
player.hud.set_wave_count(wave)
@@ -291,8 +296,7 @@ func end_wave() -> void:
#else:
#shop_chance += 0.09
wave_finished.emit()
if wave <= wave_limit:
set_upcoming_wave()
set_upcoming_wave()
@rpc("reliable", "call_local")
@@ -358,6 +362,7 @@ func start() -> void:
game_active = true
chatbox.append_message("SERVER", Color.TOMATO, "Started with seed: " + str(NoiseRandom.noise.seed))
#networked_spawn_shop.rpc()
starting_endless = gamemode.endless
game_started.emit()
@@ -391,7 +396,6 @@ func continue_with_game() -> void:
#TODO: This shouldn't happen. instead, the wave generator should generate level_config waves
#FIXME: this really needs to be changed because otherwise endless mode cant have shit like
#stations and shop respawns. it all needs to be part of the one system u know
level_config.waves = []
set_upcoming_wave()

View File

@@ -7,7 +7,6 @@ extends Node3D
@export var enemy_spawns: Array[EnemySpawner]
@export var enemy_goals: Array[Node3D]
@export var corpses: Node
@export var cinematic_cam: CinematicCamManager
@export var printer: CardPrinter
@export var shop: ShopStand
@export var obstacles: Array[PackedScene]

View File

@@ -35,6 +35,9 @@ static func get_test_wave(spawn_pool: Array[Enemy]) -> WaveConfig:
## among the given set of enemy spawners
static func generate_wave(spawn_power: int, spawn_pool: Array[Enemy], spawners: int) -> WaveConfig:
var wave: WaveConfig = WaveConfig.new()
wave.station = Data.Rarity.COMMON
wave.new_shop = true if NoiseRandom.randf_in_range(spawn_power * 13, 0.0, 1.0) < 0.2 else false
wave.rewards_blank_cassette = true if NoiseRandom.randf_in_range(spawn_power * 4, 0.0, 1.0) < 0.15 else false
#print("Generating wave with " + str(points) + " points to spend")
while spawn_power > 0: