valheim-map/README.md

150 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nerdhalla Valheim World Map
**Vanilla Valheim community server tools** — no mods, no BepInEx. Everything runs off the world save file.
## 🌐 Live Sites
| Site | URL | Purpose |
|---|---|---|
| **Nerdhalla Community** | https://nerdhalla.nerdcade.cc | Map viewer, POI browser, server status |
| **Forgejo (source)** | https://git.sweeney.fyi/aelith/valheim-map | Git repo for all code |
## 🗺️ What's Here
### Data Pipeline
| Step | Script | Output |
|---|---|---|
| Decode tiles | `decode_valheim_tiles.py` | 16 × 1024×1024 PNGs (composite, biome, height) |
| Stitch tiles | `valheim_decode_tiles.py` | 4096×4096 world images |
| Build POI DB | `build_db.py` | SQLite DB with 11,309 locations |
| Build viewer | `build_viewer.py` | Leaflet HTML with 3 map layers |
| Parse .db | `parse_valheim_db.py` | ZPackage → JSON conversion |
### Web Viewer (`index.html`)
- Leaflet map with 3 layers: composite, biome, height
- 11,309 POI markers with category icons (boss, dungeon, resource, etc.)
- Coordinate display on hover
- POI browser with search + category filter
- Server status indicator (checks Nerdcade via SSH)
### API Server (`api_server.py`)
- `GET /api/status` — Nerdcade server online/offline check
- `GET /api/pois?limit=N&search=X&category=Y` — POI queries
### Infrastructure
- **Caddy** — reverse proxy with auto-TLS for nerdhalla.nerdcade.cc + git.sweeney.fyi
- **Forgejo** — bare metal (migrated from Docker), git.sweeney.fyi:3000
- **nerdhalla-api** — systemd service, port 8081
## 📊 World Stats
| Property | Value |
|---|---|
| Seed | `yzZ5fr2tGa` |
| Map Size | ~10 km × 10 km (4096 × 4096 px) |
| Biomes | Meadows, Black Forest, Swamp, Mountain, Plains, Ocean, Mistlands |
| Total POIs | 11,309 |
| Best Tar Pit | (1210, -4159) — 5 tar pits within 200m |
## 🚧 Roadmap
### Phase 1 — POI Database ✅
- [x] Decode 16 map tiles from world save
- [x] Stitch into 4096×4096 composite/biome/height images
- [x] Build SQLite DB from `locations.json` (11,309 POIs)
- [x] Spatial queries for base location hunting
### Phase 2 — Web Viewer ✅
- [x] Leaflet map with 3 tile layers
- [x] POI markers with category icons
- [x] Search + category filter
- [x] Coordinate display
- [x] Server status indicator
- [x] TLS via Caddy
- [x] API backend for POI queries
### Phase 3 — Fog-of-War ⏳
- [ ] **Blocked:** Need player `.fch` files from local machines
- [ ] Extract explored/unexplored bitmap per player
- [ ] Overlay on map viewer
- [ ] Merge multiple players' exploration data
### Phase 4 — Cartography Sync 🔮
- [ ] **Undecided approach:**
- Option 1: ServerSideMap mod (requires BepInEx — some players don't want this)
- Option 2: Periodic merge script (pull `.fch` files, merge explored data)
- Option 3: Cartography table automation (in-game solution)
### Phase 5 — Automation 🔮
- [ ] Cron job to periodically pull `Nerdhalla.db` from Nerdcade
- [ ] Auto-regenerate map tiles on world update
- [ ] Push updated data to site
## 🛠️ Infrastructure
### Services on Boston-VPS
| Service | Type | Port | Notes |
|---|---|---|---|
| Caddy | Bare metal | 80/443 | Reverse proxy, auto-TLS |
| Forgejo | Bare metal | 3000 | Git server, git.sweeney.fyi |
| nerdhalla-api | Bare metal | 8081 | Python API server |
| Hermes Gateway | Bare metal | 8642/8644 | Fleet COO agent |
### Docker Cleanup (June 2026)
- Forgejo migrated from Docker to bare metal (saved ~450 MB virtual overhead)
- Dead containers removed: `hermes-fa98be67` (exited), `vllm-compression` (never started)
- 9.2 GB reclaimed from unused images
- Docker still installed but only used if needed
## 🔧 Quick Commands
```bash
# Restart API
sudo systemctl restart nerdhalla-api
# Restart Forgejo
sudo systemctl restart forgejo
# Restart Caddy
sudo systemctl reload caddy
# View logs
sudo journalctl -u nerdhalla-api -n 50 --no-pager
sudo journalctl -u forgejo -n 50 --no-pager
sudo tail -f /var/log/caddy/nerdhalla.log
```
## 📁 File Layout
```
/var/www/nerdhalla/ # Site root
├── index.html # Main site
├── api_server.py # Python API
├── world_composite.png # 4096×4096 map images
├── world_biome.png
├── world_height.png
├── 00-00_*.png # Individual tile images (16 tiles × 3 layers)
└── ...
/srv/forgejo/ # Forgejo data
└── data/
├── gitea/ # Config, DB, attachments
└── git/repositories/ # Git repos
/etc/caddy/
├── Caddyfile # Main config (imports sites-enabled/)
└── sites-enabled/
├── nerdhalla.conf # nerdhalla.nerdcade.cc
└── git.conf # git.sweeney.fyi
```
## 🔗 Related
- **Nerdcade server:** `aelith@100.86.206.39:46129`
- **World saves:** `/home/amp/.ampdata/instances/Valheim/.config/unity3d/IronGate/Valheim/worlds_local/`
- **Forgejo API token:** stored in Hermes memory