Sharpen upgrades, mark the convoy's destination, and give the world sound
#204 the Beam Collimator widens the beam instead of adding range to one that already crosses the screen; beam width becomes a per-shot vessel stat. #205 the Energy Propulser gains three upgrades - dash recharge, dash reach, and boosted-cruise drain - which turns three constants into vessel stats. #206 three further doctrines carry the fleet from ten to twenty. #207 the prologue's World Ship gets a marker, through the scanner's own guidance arrow rather than a second one. #208 #210 #213 #214 four new synthesised sounds: the breach opening, cargo reaching the hold, a rock breaking, and a gas bomb blooming. #215 building health bars are larger, plated and framed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019AJMdB7iuHuLFZM1aBu3GD
This commit is contained in:
parent
2239235993
commit
78836882af
33 changed files with 716 additions and 52 deletions
31
audio/Sfx.gd
31
audio/Sfx.gd
|
|
@ -28,6 +28,11 @@ const ENEMY_DEATH: String = "enemy_death"
|
|||
const BUILDING_DEATH: String = "building_death"
|
||||
const DIALOG: String = "dialog"
|
||||
const BOSS_SCREAM: String = "boss_scream"
|
||||
# #210, #213, #214, #208.
|
||||
const PICKUP: String = "pickup"
|
||||
const ASTEROID_BREAK: String = "asteroid_break"
|
||||
const GAS_BLAST: String = "gas_blast"
|
||||
const BLACK_HOLE: String = "black_hole"
|
||||
|
||||
const SOUNDS: Dictionary = {
|
||||
SHOT: "res://audio/sfx_shot.wav",
|
||||
|
|
@ -36,6 +41,10 @@ const SOUNDS: Dictionary = {
|
|||
BUILDING_DEATH: "res://audio/sfx_building_death.wav",
|
||||
DIALOG: "res://audio/sfx_dialog.wav",
|
||||
BOSS_SCREAM: "res://audio/sfx_boss_scream.wav",
|
||||
PICKUP: "res://audio/sfx_pickup.wav",
|
||||
ASTEROID_BREAK: "res://audio/sfx_asteroid_break.wav",
|
||||
GAS_BLAST: "res://audio/sfx_gas_blast.wav",
|
||||
BLACK_HOLE: "res://audio/sfx_black_hole.wav",
|
||||
}
|
||||
|
||||
# Per-sound level. A shot is fired constantly and a death happens once, so
|
||||
|
|
@ -47,12 +56,29 @@ const LEVELS: Dictionary = {
|
|||
BUILDING_DEATH: -23.0,
|
||||
DIALOG: -19.0,
|
||||
BOSS_SCREAM: -13.0,
|
||||
# Quieter than everything else by a clear margin: it is the only sound
|
||||
# here that can happen several times a second for minutes at a time, and
|
||||
# a pickup blip at shot volume would be the loudest thing in the game.
|
||||
PICKUP: -32.0,
|
||||
ASTEROID_BREAK: -24.0,
|
||||
GAS_BLAST: -21.0,
|
||||
# The prologue's one irreversible moment, and nothing else is playing
|
||||
# under it.
|
||||
BLACK_HOLE: -11.0,
|
||||
}
|
||||
|
||||
# Shots vary a little in pitch so a stream of them does not turn into one
|
||||
# flat machine-gun note. The deaths do not: they are events, and a wobbling
|
||||
# explosion sounds broken rather than varied.
|
||||
const SHOT_PITCH_SPREAD: float = 0.12
|
||||
# Pickups repeat harder than shots do, so they vary too - but less, because a
|
||||
# pickup is a short bright tone and a wide spread on one reads as wrong notes
|
||||
# rather than as variety. Rocks also break in twos and threes.
|
||||
const PITCH_SPREAD: Dictionary = {
|
||||
SHOT: SHOT_PITCH_SPREAD,
|
||||
PICKUP: 0.07,
|
||||
ASTEROID_BREAK: 0.09,
|
||||
}
|
||||
|
||||
|
||||
static func _pool(tree: SceneTree) -> Node:
|
||||
|
|
@ -99,7 +125,6 @@ static func play(tree: SceneTree, id: String) -> void:
|
|||
return
|
||||
voice.stream = stream
|
||||
voice.volume_db = float(LEVELS.get(id, -10.0))
|
||||
voice.pitch_scale = 1.0
|
||||
if id == SHOT:
|
||||
voice.pitch_scale = 1.0 + randf_range(-SHOT_PITCH_SPREAD, SHOT_PITCH_SPREAD)
|
||||
var spread: float = float(PITCH_SPREAD.get(id, 0.0))
|
||||
voice.pitch_scale = 1.0 if spread <= 0.0 else 1.0 + randf_range(-spread, spread)
|
||||
voice.play()
|
||||
|
|
|
|||
Loading…
Reference in a new issue