Bygga och verktyg flyttat från README; länk från Home
159
Bygga-och-verktyg.md
Normal file
159
Bygga-och-verktyg.md
Normal file
@@ -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 <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.
|
||||||
|
|
||||||
|
```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.
|
||||||
3
Home.md
3
Home.md
@@ -1,5 +1,8 @@
|
|||||||
# Metro Puzzle JP – wiki
|
# 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
|
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
|
tågstationer byggda som labyrinter, läs skyltarna, hitta rätt tåg och kom fram
|
||||||
till rätt resmål.
|
till rätt resmål.
|
||||||
|
|||||||
Reference in New Issue
Block a user