class_name ArenaRegistry # Single source of truth for available arenas: the Free Play menu dropdown # lists all of these, and Match/Spectate pick at random each session from # those with "random" true. Training is exempt — training.tscn/ # training_elevated.tscn each keep their own fixed Arena child. # # Elevated-goal variants are Free-Play-only ("random": false) until a # checkpoint trained on training_elevated.tscn is promoted — the current # promoted bots (see main_menu.gd's DIFFICULTIES) were trained exclusively # on floor-level goals and can't be expected to score on an elevated one. # Flip a variant's "random" flag to true once that training/promotion has # happened. const ARENAS := [ {"name": "Starfield (Floor Goals)", "path": "res://scenes/arena_01.tscn", "random": true}, {"name": "Starfield (Elevated Goals)", "path": "res://scenes/arena_01_elevated.tscn", "random": false}, {"name": "Nebula (Floor Goals)", "path": "res://scenes/arena_02.tscn", "random": true}, {"name": "Nebula (Elevated Goals)", "path": "res://scenes/arena_02_elevated.tscn", "random": false}, {"name": "Asteroid Field (Floor Goals)", "path": "res://scenes/arena_03.tscn", "random": true}, {"name": "Asteroid Field (Elevated Goals)", "path": "res://scenes/arena_03_elevated.tscn", "random": false}, ] static func random_path() -> String: var candidates := ARENAS.filter(func(arena): return arena["random"]) return candidates[randi() % candidates.size()]["path"]