Files
Cinderwild/docs/SETUP_ON_NEW_MACHINE.md
Paul Bailey 4640f5e577 M1a: survival core, pause menu, title screen and save/load
Design: docs/SURVIVAL_DESIGN.md (core loop, systems, architecture, phases).

Survival core (M1a):
- Items/recipes as data (data/*.json) in the addon SDK's define_item /
  define_recipe shape; procedural item meshes and offscreen-rendered icons
- Inventory class (40 slots, hotbar = row 1) shared by player and chests;
  click / right-click split / shift-click quick-move
- Actions autoload: the intent layer (craft, pickup, harvest_hit, place,
  transfer) that validates every change; becomes the RPC surface in M2
- Gathering: ground pickups (sticks, stones, flint); trees chopped with an
  axe fall and leave stumps; boulders mined with a pickaxe shrink per hit
- Crafting screen with station checks (workbench); placement mode with
  green/red ghost, rotation and overlap/slope validation
- Pieces: campfire (light, flames, embers), workbench, chest (16 slots)
- HUD: hotbar, held tool view model with swing, prompts, toasts

Menus and saving:
- ESC pause menu: resume, controls, fullscreen, mouse sensitivity, quit
- Title screen over a flyover of the island: Continue / New World (name +
  seed) / Load World (with delete) / Quit
- Saves autoload: one folder per world under user://worlds, atomic writes
  with a .bak; stores only player changes (player, pieces, chest contents,
  harvested resources, taken pickups) and regenerates the rest from the seed
- Autosave every 2 min, Save & Quit to title/desktop, save on window close

Fixes: UI screens now fill the viewport (were pinned top-left); title
backdrop no longer captures the mouse.

Tests: test_survival_core (31 checks), test_save_load (round trip + slots),
test_terrain_edges now checks 8 seeds for deep pits / unbanked water.
2026-11-04 00:34:46 +00:00

3.1 KiB

Continuing on another machine

This project is a self-contained git repo. Everything needed to build and run is in it except Godot itself (which you install once per machine). No assets to download — the M0 world is generated in code.

1. Install Godot 4.3+

  • macOS / Windows / Linux: download the standard build (NOT the .NET/C# build — this project is pure GDScript) from https://godotengine.org/download
  • Use 4.7.x or newer 4.x. The project was upgraded to 4.7.2.stable (an older editor will warn that the project is from a newer version).
  • macOS shortcut: brew install --cask godot. If Homebrew can't unpack it, download the zip from the GitHub release page and move Godot.app to /Applications.

Tests

# Boundary: tries to walk/jump out of the valley in 24 directions
godot --headless --path . --fixed-fps 30 --script res://tests/test_boundary.gd
# Terrain: no deep pits / floating water at the boundary, across 8 seeds
godot --headless --path . --script res://tests/test_terrain_edges.gd
# Survival loop: inventory, crafting, chopping, mining, pickups, building, chests
godot --headless --path . --script res://tests/test_survival_core.gd
# Save/load round trip + world slots (uses user://test_worlds, not your saves)
godot --headless --path . --script res://tests/test_save_load.gd

Save files

Worlds are per machine, under ~/Library/Application Support/Godot/app_userdata/Valheimlike/worlds/ on macOS (%APPDATA%\Godot\app_userdata\Valheimlike\worlds\ on Windows). Copy a world's folder across to move it to another machine.

2. Get the project onto the machine

You have the folder (from the zip, or a git remote). Then:

# If you brought the .zip:
unzip valheimlike.zip
cd valheimlike

# If you use a git remote instead (recommended for ongoing work):
git clone <your-remote-url> valheimlike
cd valheimlike

3. Open / run it

# Open in the editor (first open rebuilds the local .godot cache — this is normal):
godot --path .            # or: open Godot, "Import", pick this folder's project.godot

# Run the game directly:
godot --path .

On macOS the binary inside the app is: /Applications/Godot.app/Contents/MacOS/Godot --path .

Controls

WASD move · Mouse look · Shift sprint · Space jump · ESC frees the cursor.

Notes

  • The .godot/ cache folder is machine-local and git-ignored — it regenerates on first open. Don't copy it between machines.
  • If scripts look like they "didn't load", let the first editor open finish its import pass, then press play.
  • Where we are: M0 + M0.5 complete (detailed, bounded island valley). Next is M1 (gather → craft → build). See docs/ROADMAP.md.

A zip is a one-time snapshot. For going back and forth between machines, create a private remote once and push:

# GitHub (private):  gh repo create valheimlike --private --source=. --push
# or any remote:
git remote add origin <your-remote-url>
git push -u origin main   # (branch may be 'master' — check `git branch`)

Then on each machine it's just git clone / git pull / git push.