M11: oändligt läge och New Game+
All checks were successful
release / build-release (push) Successful in 1m34s

internal/endless lottar mål ur en seed: en av storyns nätkopplade
stationer (aldrig samma två gånger i rad) med ett resmål som minst ett
tåg går rakt till men inte alla; banan kopieras, bedöms om mot nätet,
sällskapet växer var tredje mål och tidsgränsen krymper. O på bankartan
(eller -endless) startar en omgång; klarade mål ger poäng och XP, Enter
ger nästa mål, förlust eller Esc avslutar och omgången hamnar i
sparfilens poänglista (fem bästa). G två gånger startar New Game+: items,
banresultat, pengar och debuffar nollställs, skills, XP och japanskan
behålls, sällskapet är en person större per varv. Docs, wiki, tester och
skärmdumpar uppdaterade.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 23:20:12 +02:00
parent 46bd330dfc
commit 36a45563ec
22 changed files with 556 additions and 19 deletions

View File

@@ -214,3 +214,21 @@ func TestLevelRecordsAndUnlocking(t *testing.T) {
t.Fatal("okänd bana")
}
}
func TestNewGamePlusKeepsSkillsResetsItems(t *testing.T) {
p := New()
p.XP, p.SkillPoints, p.StoryCleared = 900, 2, true
p.Skills["fog_1"] = true
p.Items["geta"] = true
p.Equipped["feet"] = "geta"
p.RecordLevel("001", true, 3, 500)
if n := p.NewGamePlus(); n != 1 || p.NGPlus != 1 {
t.Fatalf("NG+ nummer %d", n)
}
if !p.Skills["fog_1"] || p.XP != 900 || p.SkillPoints != 2 || !p.StoryCleared {
t.Fatal("skills, XP, skillpoäng och klarad story ska vara kvar")
}
if len(p.Items) != 0 || len(p.Equipped) != 0 || len(p.Levels) != 0 || p.TotalStars() != 0 {
t.Fatal("items, utrustning och banresultat ska nollställas")
}
}