All checks were successful
release / build-release (push) Successful in 1m37s
- sim/stats.go: Stats (fart, törst, fokus, toalett, tur), debuffar som multiplikatorer, Profile som följer med mellan banor och räknar ned - sim.Run: tidsgräns och maxantal missade tåg förlorar banan; poängformel (tid mot par, pengar, sällskapets mätare, utforskat, avdrag); debuffar tjänas av många steg, lång tid, tom matmätare och seedad otur vid kiosken; stats påverkar fart, mätartakter, läsning och hjälptid - egna kort (individualCards): Member.Card, spärren kräver allas saldo och drar från alla, automaten frågar vems kort, biljetter köps åt alla - sittplatsval (seatSelection): Ticket får ett sittplatssteg med seedade önskemål (fönster/gång/sida/bredvid); missnöjda ger mätar- och poängavdrag - level: maxMissedTrains, individualCards, seatSelection; bana 003 Shibuya (svårighet 3, fyra i sällskapet) och 002 med tidsgräns och sittplatser; ordboken utökad; generatorn är spec-driven - game: tid kvar/missade i HUD, debuffar i meny/HUD/resultat, poäng och förlustorsaker på resultatet, vyer för personval och vagn, skript-pick, flaggan -debuffs; HUD och resultat komprimerade för fyra i sällskapet - plan (Björn 2026-10-24): flera våningar med trappor som M9a, egna kort och sittplatsval som svårighetsinställningar i M7 – i spelbeskrivning, roadmap, testplan - docs/README/wiki med sittplatsbilden Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
// Package minigame innehåller de små spelen i spelet: fylla på kortet vid
|
|
// automaten, köpa rätt biljett, få plats på ett fullt tåg och gå av på rätt
|
|
// station. Ren logik utan Ebitengine; all slump kommer från en seed så att
|
|
// ett minispel är exakt likadant varje gång för samma seed.
|
|
//
|
|
// Gemensamt mönster: skapa med en seed, mata Update med input varje
|
|
// bildruta, läs Done/Success när det är klart. Renderingen görs av
|
|
// internal/game per typ.
|
|
package minigame
|
|
|
|
import "gitea.brasse-pc.eu/brasse/metro-puzzle-jp/internal/rng"
|
|
|
|
// Input är vad spelaren gjorde den här bildrutan.
|
|
type Input struct {
|
|
Move int // -1 / +1 (upp resp. ner), 0 = inget
|
|
MoveX int // -1 / +1 (vänster resp. höger), 0 = inget
|
|
Confirm bool // Enter tryckt (just nu)
|
|
Hold bool // Enter hålls nere
|
|
Cancel bool // Esc tryckt
|
|
}
|
|
|
|
// Game är ett pågående minispel.
|
|
type Game interface {
|
|
Update(in Input, dt float64)
|
|
Done() bool
|
|
Success() bool
|
|
}
|
|
|
|
// base är det gemensamma tillståndet.
|
|
type base struct {
|
|
done, success bool
|
|
}
|
|
|
|
func (b *base) Done() bool { return b.done }
|
|
func (b *base) Success() bool { return b.success }
|
|
|
|
func newRand(seed rng.Seed, context string) *randSrc {
|
|
return &randSrc{seed.Derive(context).New()}
|
|
}
|