README: kort presentation, resten i wikin
All checks were successful
release / build-release (push) Successful in 1m39s
All checks were successful
release / build-release (push) Successful in 1m39s
README beskriver nu bara vad spelet är, visar titelskärmen och två bilder, och säger hur man laddar ner och bygger. Flaggor, styrning, verktyg, beroenden, byggresultat och katalogstruktur ligger på wikisidan "Bygga och verktyg"; hur spelet fungerar på wikins startsida. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
288
README.md
288
README.md
@@ -1,280 +1,52 @@
|
|||||||
# Metro Puzzle JP
|
# Metro Puzzle JP
|
||||||
|
|
||||||
Pixel art-pusselspel: leda ett sällskap – *lämmeltåget* – genom japanska
|
Ett pixel art-pusselspel om att hitta rätt tåg i Tokyo. Du leder ett
|
||||||
tågstationer byggda som labyrinter, hitta rätt tåg och komma fram till rätt
|
sällskap – *lämmeltåget* – genom japanska tågstationer byggda som
|
||||||
resmål. Nästan alla skyltar är på japanska; ju mer du lär dig, desto mer kan
|
labyrinter. Nästan allt står på japanska: läs skyltarna, håll sällskapet
|
||||||
du läsa. Sällskapet behöver mat, dryck och toapauser, tågkortet måste ha
|
mätt, torrt och på toa, hitta rätt perrong och kliv på rätt tåg innan det
|
||||||
saldo, telefonen batteri, och på svåra banor tickar klockan.
|
går. Storyn följer några polare på semester, från landningen på Narita till
|
||||||
|
hemresan; efteråt väntar ett oändligt läge och New Game+.
|
||||||
Storyn följer några polare på semester i Japan, från landningen på
|
|
||||||
flygplatsen till avresan. Efter storyn låses ett oändligt läge och New Game+
|
|
||||||
upp. Hela speldesignen finns i [doc/spelbeskrivning.md](doc/spelbeskrivning.md).
|
|
||||||
|
|
||||||
**Status:** M10 klar (2026-10-24) – hela storyn från flygplats till
|
|
||||||
flygplats: åtta huvudbanor och ett sidospår på en bankarta i spelbrädesstil,
|
|
||||||
med flera våningar, folk, reklam, sorl, vagnval och ett riktigt linjenät med
|
|
||||||
list- och skyltläge. De två sista resorna har **byten**: man kliver av på en
|
|
||||||
mellanstation och fortsätter i samma omgång, med klockan, plånboken och
|
|
||||||
sällskapet i behåll. Klarar man finalen (Tokyo → Nippori → Narita) visas
|
|
||||||
**hemresan**: planet lyfter, resan summeras och eftertexterna rullar. Med
|
|
||||||
egna kort väljer man **vem som betalar** i kiosken, och på de svåraste
|
|
||||||
stationerna släpper spärren inte ut en som checkat in: man får **kalla på
|
|
||||||
personal** med Enter vid spärren. Efter storyn finns **oändligt läge** (O på
|
|
||||||
bankartan: lottade resmål på storyns stationer tills man förlorar, egen
|
|
||||||
poänglista) och **New Game+** (G två gånger: om från början med skills kvar
|
|
||||||
och ett större sällskap). Version 0.1.0 har ljud (stationsmelodier, effekter,
|
|
||||||
menymusik), inställningar (S: volymer, språk sv/en, skala, fullskärm) och
|
|
||||||
fönsterikon. Efter Björns speltest kom titelskärm med premissen, språkval
|
|
||||||
första gången, en tutorial som lär ut hur man läser skyltarna (resmålet
|
|
||||||
markerat, resten nedtonat) med tips i första banan, pausmeny på Esc och
|
|
||||||
ett sätt att avsluta spelet. Kvar i roadmapen är M10b (bussar). Se
|
|
||||||
[doc/roadmap.md](doc/roadmap.md) och [CHANGELOG.md](CHANGELOG.md).
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|
## Spela
|
||||||
|
|
||||||
Så fungerar det: du startar på den gröna dörrmattan och letar dig genom
|
Ladda ner zippen för Linux eller Windows från releasen
|
||||||
stationen. Skyltarna är på japanska. Ord du kan markeras och översätts i
|
[latest](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/releases/tag/latest)
|
||||||
raden under, okända ord står kvar. Trycker du H frågar du en förbipasserande,
|
(eller en versionerad `vX.Y.Z`), packa upp och kör `metro-puzzle-jp`;
|
||||||
väntar några sekunder och får hela skylten översatt plus ett nytt ord.
|
mappen `resources/` ska ligga bredvid. Första gången väljer du språk, och
|
||||||
Spärrarna släpper bara igenom dig om kortet har saldo. På perrongen (gul
|
**Tutorial** i menyn går igenom grunderna. Hur allt fungerar – skyltar,
|
||||||
ledlinje) är avgångstavlan också japansk. Står tåget inne trycker du Enter
|
kort och biljetter, sällskapet, tåg och byten, lägena, inställningarna –
|
||||||
för att kliva på. Rätt tåg tar dig till resmålet, fel tåg avslutar banan.
|
står i [wikin](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/wiki).
|
||||||
På tåget passerar stationerna en i taget; kliv av med Enter vid ditt resmål.
|
|
||||||
Klarar du banan under par får du stjärnor, språkpoäng och resmålets namn.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Spärren drar från tågkortet. Tar saldot slut fyller du på vid automaten,
|
|
||||||
där du först måste hitta rätt knapp bland de japanska. På svårare banor
|
|
||||||
krävs i stället en pappersbiljett till rätt resmål, köpt från en taxetavla
|
|
||||||
på japanska.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
I kioskens butik (B) köper du hattar, masker, kläder, skor och prylar med
|
|
||||||
buffar; några är genvägar, som JR Pass som öppnar alla spärrar. Klarade
|
|
||||||
banor ger XP, nivåer ger skillpoäng till skillträdet (T), och garderoben (I)
|
|
||||||
visar vad du bär.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Stationer kan ha flera våningar. Du ser bara den våning du står på; trappor
|
|
||||||
tar dig upp och ner, och minikartan visar vilket plan du är på.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
På svåra banor är stationen full av folk, väggarna av reklam och luften av
|
|
||||||
sorl. Tågen har flera vagnar: låt folk kliva av först, välj en vagn med lite
|
|
||||||
folk för extra poäng, och undvik den rosa kvinnovagnen om det finns en man i
|
|
||||||
sällskapet.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
I skyltläget får du bara resmålet. Skyltarna säger var perrongerna är,
|
|
||||||
terminalen (biljettautomaten) visar linjerna med deras närmaste stationer, och
|
|
||||||
du avgör själv vilka tåg som faktiskt tar dig dit – på Ikebukuro är två av
|
|
||||||
fyra rätt, ett går åt fel håll och ett tar omvägen via city.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Resorna med byten fortsätter på nästa station när du klivit av: nytt
|
|
||||||
labyrintgolv, samma klocka och samma hungriga sällskap.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
På de svåraste banorna har alla i sällskapet egna kort som måste ha saldo,
|
|
||||||
alla behöver biljett, och när biljetten är köpt ska sällskapet placeras i
|
|
||||||
vagnen efter sina önskemål: fönster eller gång, vänster eller höger sida,
|
|
||||||
eller bredvid en viss person. Missnöjda blir sura och drar ned poängen.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Ditt sällskap följer efter i en rad. Mätarna uppe till höger visar mat,
|
|
||||||
dryck och toa för var och en; faller de får någon ett behov som saktar ned
|
|
||||||
er alla tills ni hittar en kiosk eller en toalett. Minikartan i hörnet visar
|
|
||||||
från början bara perrongerna, starten och spärrarna plus en avgångslista;
|
|
||||||
resten fylls i allt eftersom ni går.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Fler bilder och en genomgång finns i
|
|
||||||
[wikin](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/wiki).
|
|
||||||
|
|
||||||
## Bygga
|
## Bygga
|
||||||
|
|
||||||
Enda kravet är **Go ≥ 1.27**. Linux behöver dessutom en C-kompilator och
|
Enda kravet är **Go ≥ 1.27**; Linux behöver dessutom gcc och X11/GL/ALSA-
|
||||||
X11/GL-headers för fönsterhanteringen (Ebitengine/GLFW). Windows-bygget är
|
headers för fönstret (`sudo pacman -S --needed go gcc pkgconf mesa libx11
|
||||||
ren Go och kan korsbyggas från Linux.
|
libxrandr libxcursor libxinerama libxi libxxf86vm alsa-lib` på Arch/Garuda).
|
||||||
|
Windows-bygget är ren Go och kan korsbyggas från Linux.
|
||||||
### Linux
|
|
||||||
|
|
||||||
```bash
|
```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 # debug → build/debug/
|
||||||
go run ./tools/build -mode release -os linux # release → build/release/linux-amd64/
|
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/
|
go run ./tools/build -mode release -os windows # korsbygge → build/release/windows-amd64/
|
||||||
./build/debug/metro-puzzle-jp # kör
|
go test ./...
|
||||||
go test ./... # tester
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows (bygga på Windows)
|
VS Code: `Ctrl+Shift+B` bygger, `F5` debuggar. Flaggor, verktyg, styrning,
|
||||||
|
beroenden och katalogstruktur:
|
||||||
Installera Go från <https://go.dev/dl/>. Ingen C-kompilator behövs.
|
[Bygga och verktyg](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/wiki/Bygga-och-verktyg)
|
||||||
|
i wikin.
|
||||||
```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.
|
|
||||||
|
|
||||||
## Dokumentation
|
## Dokumentation
|
||||||
|
|
||||||
- [doc/plan.md](doc/plan.md) – navet: mål, stack, milstolpar, öppna frågor
|
- [Wikin](https://gitea.brasse-pc.eu/brasse/metro-puzzle-jp/wiki) – så fungerar spelet, bygga och verktyg
|
||||||
- [doc/spelbeskrivning.md](doc/spelbeskrivning.md) – hela speldesignen
|
- [doc/spelbeskrivning.md](doc/spelbeskrivning.md) – hela speldesignen
|
||||||
- [doc/roadmap.md](doc/roadmap.md) – teknikval, katalogstruktur, milstolpar i ordning
|
- [doc/roadmap.md](doc/roadmap.md) – teknikval och milstolpar
|
||||||
- [doc/mal-och-tester.md](doc/mal-och-tester.md) – projektmål, teststrategi, checklistor
|
- [doc/mal-och-tester.md](doc/mal-och-tester.md) – mål, teststrategi, checklistor
|
||||||
- `resources/*/README.md` – vad som ska ligga i respektive resursmapp
|
- [doc/plan.md](doc/plan.md) – navet med öppna frågor
|
||||||
|
- [CHANGELOG.md](CHANGELOG.md)
|
||||||
## 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.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user