0c2628a1a6
Move flat top-level files into topic folders and rewrite every res:// path reference (scenes, scripts, project.godot) accordingly. Rename node_2d.tscn -> ships/ship.tscn and lowercase images/ships/Example_ships -> assets/images/ships/example_ships for naming consistency. Update overview/structure.md to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Project Structure
File Tree
spacewar/ ← repo root
└── spacewar/ ← Godot project root (open this in Godot editor)
├── project.godot
├── autoload/
│ └── game_config.gd ← autoload singleton (tuning values, player state, signals)
├── menu/
│ ├── main_menu.tscn/gd ← entry point / main scene
│ ├── server_browser.tscn/gd ← server browser UI (built, not in active flow yet)
│ ├── pause_menu.tscn/gd ← in-game pause overlay (ESC / Start button)
│ └── team_select.tscn/gd ← race + ship selection overlay (shown on world load)
├── ships/
│ ├── ship.tscn ← player ship scene (formerly node_2d.tscn)
│ ├── ship_movement.gd ← player ship logic
│ └── bullet.tscn/gd ← projectile
├── world/
│ ├── world.tscn ← game world
│ └── tile_map.tscn ← unused prototype tilemap
└── assets/
├── icon.svg
└── images/
├── background/skybox/ ← 6 space background PNGs (1.png – 6.png)
├── effects/ ← explosion1.png
├── ships/example_ships/ ← 4 placeholder ship sprites (1.png, 1B.png, 2a.png, 3b.png)
└── tiles/ ← bwQ7rQ.png, used by tile_map.tscn
Note:
asteroid_movement.gdreferenced in an earlier version of this doc does not exist yet — it's still an open task (seeCLAUDE.md).
Scene Graph
menu/main_menu.tscn — entry point
MainMenu (Control) ← main_menu.gd builds all UI in _ready()
world/world.tscn — game world
World (Node2D)
├── TextureRect ← static space background (skybox/1.png)
├── Player ← instance of ships/ship.tscn
├── HUD (CanvasLayer)
│ └── HealthLabel
├── PauseMenu (CanvasLayer, layer=10) ← menu/pause_menu.tscn
└── TeamSelect (CanvasLayer, layer=20) ← menu/team_select.tscn; queue_free()s after selection
ships/ship.tscn — player ship
Player (CharacterBody2D) ← ship_movement.gd
├── CollisionShape2D ← CircleShape2D
├── Sprite2D ← texture set at runtime from GameConfig.player_ship_path
└── VisibleOnScreenNotifier2D
Input Map
| Action | Key | Controller |
|---|---|---|
move_up |
W | — |
move_left |
A | — |
move_right |
D | — |
move_down |
S | — |
shoot |
Space | — |
toggle_pause |
Esc | Start / Options button (JoyButton 6) |
Game Flow
main_menu.tscn
├── CASUAL → world.tscn
│ ├── TeamSelect overlay: pick race (2 random of 3 offered)
│ ├── TeamSelect overlay: pick ship
│ └── Player spawns → game live
└── RANKED → disabled (coming soon)
Note:
server_browser.tscnwas built (Task 1) and is functional, but the current flow bypasses it — CASUAL goes directly to the world and TeamSelect handles name/race/ship. The server browser will be re-integrated when real multiplayer server listing is built.
Key Autoload — GameConfig
| Property | Type | Set by |
|---|---|---|
player_name |
String | Main menu callsign input |
player_race |
int | TeamSelect race pick |
player_ship_path |
String | TeamSelect ship pick |
team_selected |
signal | Emitted by TeamSelect when done |
ship_thrust |
float | Tuning constant |
ship_max_speed |
float | Tuning constant |
ship_rotation_speed |
float | Tuning constant |
ship_fire_rate |
float | Tuning constant |
bullet_speed |
float | Tuning constant |
ship_max_health |
int | Tuning constant |
ship_respawn_delay |
float | Tuning constant |
ship_invincibility_time |
float | Tuning constant |
bullet_damage |
int | Tuning constant |
ship_wall_damage |
int | Tuning constant |