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.
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.
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
# 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
git clone <remote>/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 https://go.dev/dl/. Ingen C-kompilator behövs.
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.
En tagg vX.Y.Z ger en versionerad release. Packa upp och kör binären;
resources/ måste ligga bredvid.