added stepping sounds
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user