Files
Josh Creek 171cd4a840 feat: add Nebula and Asteroid Field arenas
Introduce arena_02 (Nebula) and arena_03 (Asteroid Field) alongside
arena_01, listed in a new ArenaRegistry (scripts/arena_registry.gd) as
the single source of truth for available arenas. Free Play lets the
player pick an arena from the main menu; Match/Spectate each pick one
at random per session; Training keeps its own fixed arena_01.

Nebula gets an RL-style visual treatment: a near-invisible glass
boundary material shared by all arenas, a baked equirect nebula sky
texture, a drifting-dust particle system, and a Blender-modeled
station/debris/planet decoration set. GameMode gains a
_get_arena_scene_path() hook so modes can instantiate their arena in
code instead of hardcoding it in the scene.
2026-08-03 19:11:13 +01:00

29 lines
714 B
GDScript

extends GameMode
# Free Play: one player ship, one ball, no timer, no score — practice like
# Rocket League's free play. R resets the ball, Esc returns to the menu.
func _get_arena_scene_path() -> String:
if not GameSettings.selected_arena_path.is_empty():
return GameSettings.selected_arena_path
return ArenaRegistry.ARENAS[0]["path"]
func _start() -> void:
spawn_ball()
var player_ship := spawn_ship(0, 0, PlayerShipController.new())
spawn_camera_rig(player_ship)
func _on_goal_scored(conceding_team: int) -> void:
print("Goal! (into team %d's goal)" % conceding_team)
reset_ball()
func _unhandled_input(event):
if event.is_action_pressed("reset_ball"):
reset_ball()
else:
super(event)