From c9f413b77a78bade5d14ac9996db090c53b7550a Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 25 Oct 2026 17:24:23 +0100 Subject: [PATCH] =?UTF-8?q?Bygga=20och=20verktyg=20flyttat=20fr=C3=A5n=20R?= =?UTF-8?q?EADME;=20l=C3=A4nk=20fr=C3=A5n=20Home?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bygga-och-verktyg.md | 159 +++++++++++++++++++++++++++++++++++++++++++ Home.md | 3 + 2 files changed, 162 insertions(+) create mode 100644 Bygga-och-verktyg.md diff --git a/Bygga-och-verktyg.md b/Bygga-och-verktyg.md new file mode 100644 index 0000000..b4f6c73 --- /dev/null +++ b/Bygga-och-verktyg.md @@ -0,0 +1,159 @@ +# Bygga och verktyg + +Allt som behövs för att bygga, köra och utveckla Metro Puzzle JP. Hur spelet +fungerar står på [startsidan](Home). + +## Bygga + +Enda kravet är **Go ≥ 1.27**. Linux behöver dessutom en C-kompilator och +X11/GL-headers för fönsterhanteringen (Ebitengine/GLFW). Windows-bygget är +ren Go och kan korsbyggas från Linux. + +### Bygga på Linux + +```bash +# Arch / Garuda +sudo pacman -S --needed go gcc pkgconf mesa libx11 libxrandr libxcursor libxinerama libxi libxxf86vm alsa-lib + +# Debian / Ubuntu +sudo apt install golang gcc libc6-dev pkg-config libgl1-mesa-dev libx11-dev libxrandr-dev libxcursor-dev libxinerama-dev libxi-dev libxxf86vm-dev libasound2-dev +``` + +```bash +git clone /metro-puzzle-jp.git && cd metro-puzzle-jp +go run ./tools/build # debug → build/debug/ +go run ./tools/build -mode release -os linux # release → build/release/linux-amd64/ +go run ./tools/build -mode release -os windows # korsbygge → build/release/windows-amd64/ +./build/debug/metro-puzzle-jp # kör +go test ./... # tester +``` + +### Windows (bygga på Windows) + +Installera Go från . Ingen C-kompilator behövs. + +```powershell +go run ./tools/build -mode release # → build\release\windows-amd64\metro-puzzle-jp.exe +``` + +### VS Code + +Öppna mappen med tillägget **Go** (`golang.go`, föreslås automatiskt). + +| Vad | Hur | +|-----|-----| +| Bygga debug | `Ctrl+Shift+B` (tasken `build`) | +| Debugga | `F5` – "Debug (dlv)". Tillägget erbjuder att installera delve första gången. | +| Bygga release | Terminal › Run Task › `build: release (linux-amd64)` / `(windows-amd64)` / `(alla plattformar)` | +| Köra tester | Terminal › Run Task › `test`, eller testknapparna i editorn | + +### Resultatet av ett bygge + +``` +build/ +├── debug/ debug-bygge för den här datorn +│ ├── metro-puzzle-jp +│ └── resources/ +└── release/ + ├── linux-amd64/ + │ ├── metro-puzzle-jp en strippad binär + │ └── resources/ sprites/ sound/ text/ data/ + └── windows-amd64/ + ├── metro-puzzle-jp.exe + └── resources/ +``` + +Spelet letar efter `resources/` bredvid binären, annars uppåt från +arbetskatalogen (så `go run` och F5 fungerar), och `JP_RESOURCES=/sökväg` +överstyr allt. Att distribuera spelet = zippa en plattformsmapp. Sparfilen +ligger utanför spelmappen, i `~/.config/metro-puzzle-jp/` (Linux) eller +`%AppData%\metro-puzzle-jp\` (Windows). + +## Flaggor + +``` +metro-puzzle-jp # meny +metro-puzzle-jp -level 001-flygplatsen # hoppa direkt in i en bana +metro-puzzle-jp -scale 3 # fönsterstorlek (320x180 × skala) +metro-puzzle-jp -smoke 90 # öppna fönster, avsluta efter 90 bildrutor (smoke-test) +metro-puzzle-jp -know 改札,番線 -points 3 # förkunskap och språkpoäng (tester/skärmdumpar) +metro-puzzle-jp -seed 7 # fast seed för händelser, läsning och minispel (tester/skärmdumpar) +metro-puzzle-jp -phone -card 0 # kortet i telefonen; kortets startsaldo (tester/skärmdumpar) +metro-puzzle-jp -debuffs sore_feet,tired # debuffar från start (tester/skärmdumpar) +metro-puzzle-jp -mute # inget ljud +metro-puzzle-jp -save /sökväg/save.json # annan sparfil (standard ~/.config/metro-puzzle-jp/save.json) +metro-puzzle-jp -nosave # läs sparfilen men skriv aldrig (tester/skärmdumpar) +metro-puzzle-jp -mode signs # navigeringsläge från start: list eller signs (annars sparfilens; N på bankartan växlar) +metro-puzzle-jp -ending # öppna slutscenen (hemresan) direkt (tester/skärmdumpar) +metro-puzzle-jp -endless -seed 7 # starta oändligt läge direkt med en viss målföljd (tester/skärmdumpar) +metro-puzzle-jp -script "move right 4; shot bild.png; quit" # skriptläge, se internal/game/script.go +metro-puzzle-jp -version +``` + +## Styrning + +Pilar eller WASD går. Enter väljer, kliver på tåget, använder toaletten, +handlar i kiosken, startar automaten eller kallar på personal vid en spärr +som inte släpper ut en; i minispelen väljer pilarna och +Enter bekräftar (håll Enter för att mata in sedlar). H frågar om hjälp vid en +skylt, L öppnar ordlistan, T skillträdet, I garderoben, B butiken vid en kiosk, M +döljer/visar minikartan, P på kartan lägger kortet i telefonen, N på kartan +växlar navigeringsläge (lista/skyltar), O på kartan startar oändligt läge +och G (två gånger) New Game+ när storyn är klar, S på kartan öppnar +inställningarna (volymer, språk, skala, fullskärm), F11 växlar fullskärm +överallt. Esc pausar banan (Fortsätt, Lämna banan, Inställningar, Avsluta +spelet), på bankartan går Esc till titelskärmen, och Avsluta kräver Enter +två gånger. R spelar om från resultatskärmen. Gamepad +med standardlayout fungerar: d-pad/vänster spak, A = välj, B = tillbaka, +Y = hjälp, X = ordlista, Back/Select = karta. + +## Verktyg + +| Kommando | Gör | +|----------|-----| +| `go run ./tools/build …` | bygger (se ovan) | +| `go run ./tools/genart` | genererar placeholder-grafiken `resources/sprites/tiles.png`, `player.png` och `plane.png` | +| `go run ./tools/levelcheck [ord…]` | ritar varje bana (per våning) som PNG i `build/levelcheck/` och rapporterar lösbarhet, onåbara rutor, perronger utanför spärrar, tågens bedömning i linjenätet och resornas byten; avslutar med fel om något är trasigt | +| `go run ./tools/gensound` | genererar alla ljud i `resources/sound/*.wav` (stationsmelodier, jinglar, effekter, sorl, menymusik), se `resources/sound/README.md` | +| `go run ./tools/shots [ord…]` | tar dokumentationens skärmdumpar till `doc/img/` – **kör efter varje grafik-/UI-ändring och committa bilderna**. Med argument körs bara skott vars bana eller skript innehåller något av orden (t.ex. `go run ./tools/shots 005 ride.png`). På Linux körs spelet på en osynlig skärm (headless Wayfire + Xwayland) så att inget fönster syns eller tar fokus; `METRO_HEADLESS=0` använder skärmen | + +## Beroenden + +| | Linux | Windows | +|---|---|---| +| **Bygga** | Go ≥ 1.27, gcc, pkgconf, mesa (GL-headers), libx11/libxrandr/libxcursor/libxinerama/libxi/libxxf86vm, alsa-lib | Go ≥ 1.27 | +| **Köra** | libc, samt ett skrivbord med OpenGL (mesa) och X11 eller Wayland (XWayland), ALSA/PipeWire för ljud – laddas dynamiskt vid start (`-mute` stänger av ljudet) | Windows 10+ med DirectX 11 eller OpenGL | +| **Go-moduler** | `github.com/hajimehoshi/ebiten/v2` (spelbibliotek, inkl. `text/v2` för TTF-rendering) + indirekta beroenden (`purego`, `gomobile`, `go-text/typesetting`, `x/image`, `x/sys`, `x/sync`) | samma | +| **Font** | PixelMplus 10/12 px (M+ FONT LICENSE), ligger i `resources/text/fonts/` | samma | + +Release-binären för Linux är dynamiskt länkad bara mot libc; GL/X11 laddas +vid körning, så den fungerar på alla vanliga distributioner. + +## Struktur i korthet + +``` +cmd/metro-puzzle-jp/ programstart +internal/game/ Ebitengine: scener, input, rendering, skriptläge (enda paketet som får känna till Ebitengine) +internal/sim/ rutbaserad rörelse, kollision, kamera, banomgång med tåg/spärrar/hjälp (ren Go) +internal/lang/ japanska: ordbok, kunskap, delvis översättning (ren Go) +internal/minigame/ påfyllning, biljettköp, trängsel, tågresa – seedade minispel (ren Go) +internal/progress/ XP, skillträd, items, banresultat, upplåsning (ren Go) +internal/save/ sparfil (versionerad JSON) +internal/level/ banformat, validering, framkomlighet, koppling till linjenätet +internal/nav/ linjenätet: stationer, linjer, rätt/fel håll/för långt bort (ren Go) +internal/endless/ oändligt läge: seedade mål på storyns stationer (ren Go) +internal/res/ hittar och läser resources/ +internal/rng/ seedad slump +tools/ build/ genart/ shots/ +resources/ sprites/ sound/ text/ data/ – kopieras bredvid binären +doc/ dokumentation, doc/img/ = skärmdumpar +.gitea/workflows/ CI: test + release-zippar (linux/windows) +``` + +## Release + +Varje push till master bygger zippar för Linux och Windows på Gitea och +lägger dem på releasen +[latest](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/releases/tag/latest). +En tagg `vX.Y.Z` ger en versionerad release. Packa upp och kör binären; +`resources/` måste ligga bredvid. diff --git a/Home.md b/Home.md index d48c189..67aa5bf 100644 --- a/Home.md +++ b/Home.md @@ -1,5 +1,8 @@ # Metro Puzzle JP – wiki +Bygginstruktioner, flaggor, styrning, verktyg och beroenden finns på +[Bygga och verktyg](Bygga-och-verktyg). Den här sidan beskriver spelet. + Pixel art-pusselspel: led *lämmeltåget* (ditt sällskap) genom japanska tågstationer byggda som labyrinter, läs skyltarna, hitta rätt tåg och kom fram till rätt resmål.