neon-sprawl/README.md

71 lines
3.1 KiB
Markdown

# Neon Sprawl
**Neon Sprawl** is the working title for a crafting-focused sci-fi / cyberpunk MMORPG with **gigs** (combat roles) and open non-combat **skills** (solo-dev scope). Product intent and phase gates: [`neon_sprawl_vision.plan.md`](neon_sprawl_vision.plan.md). **Design axioms:** it must be **fun**, and it must stay **distinctly cyberpunk** in theme (see [Design axioms](neon_sprawl_vision.plan.md#design-axioms-governing) in the vision plan).
## Tech stack (locked)
| Area | Choice |
|------|--------|
| Client | **Godot 4.x** (GDScript) |
| Game server | **C# / .NET 10** (ASP.NET Core), **PostgreSQL**, **Protobuf** (JSON OK for earliest spike) |
| Content | **JSON/YAML** + **JSON Schema** in CI |
Full rationale and constraints: [`docs/architecture/tech_stack.md`](docs/architecture/tech_stack.md).
Optional **local LLM in Cursor** (MLX on Apple Silicon): [`docs/dev/local-mlx-cursor.md`](docs/dev/local-mlx-cursor.md).
## Decomposition
Epic-level breakdown: [`docs/decomposition/README.md`](docs/decomposition/README.md).
## Git workflow
- **Documentation** (Markdown under `docs/`, README files, `neon_sprawl_vision.plan.md`): work and commit **directly on `main`**.
- **Code and implementation** (server/client source, Godot project, `content/` data, Docker/build/CI config): use a **branch**, then merge to `main` when ready. Mixed doc + code changes follow the branch rule.
## Repository layout (prototype scaffold)
| Path | Purpose |
|------|---------|
| [`NeonSprawl.sln`](NeonSprawl.sln) | .NET solution |
| [`server/NeonSprawl.Server/`](server/NeonSprawl.Server/) | ASP.NET Core game server |
| [`client/`](client/) | Godot 4.x project (import `project.godot`) |
| [`content/`](content/) | JSON data + JSON Schema (`skills/`, `schemas/`) |
| [`docker-compose.yml`](docker-compose.yml) | Local **PostgreSQL** (`docker compose up -d`) |
### Run the server
```bash
cd server/NeonSprawl.Server && dotnet run
```
Then open `http://localhost:5253/health` (port from `launchSettings.json`).
### Run Postgres locally
```bash
docker compose up -d
```
Connection (dev): host `localhost`, port `5432`, database `neon_sprawl`, user `neon_sprawl`, password `neon_sprawl_dev`.
### Run the client
Open the [`client/`](client/) folder in **Godot 4.6** and run the main scene (see [`client/README.md`](client/README.md)).
### Git hooks and GDScript lint (recommended)
Once per clone, from the repo root:
```bash
./scripts/install-git-hooks.sh
python3 -m venv .venv-gd
.venv-gd/bin/pip install "gdtoolkit==4.5.0"
```
This sets **`core.hooksPath=scripts/git-hooks`**. On push, when **`client/scripts/*.gd`** or **`client/test/*.gd`** changed in the commits being pushed, **pre-push** runs **`gdlint`** and **`gdformat --check`** on those trees (same as [`.github/workflows/gdscript.yml`](.github/workflows/gdscript.yml)). Install **gdtoolkit** in **`.venv-gd`** (gitignored) or globally so the hook can run; otherwise pushes with GDScript changes are blocked.
Windows (PowerShell): `pwsh -File scripts/install-git-hooks.ps1`, then create `.venv-gd` and `pip install "gdtoolkit==4.5.0"` the same way.
More detail: [`client/README.md`](client/README.md) (Git hooks section).