M11: oändligt läge och New Game+
All checks were successful
release / build-release (push) Successful in 1m34s
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:
@@ -25,7 +25,8 @@ type Progress struct {
|
||||
Items map[string]bool `json:"items"`
|
||||
Equipped map[string]string `json:"equipped"` // slot -> item-id
|
||||
Levels map[string]*LevelResult `json:"levels"`
|
||||
StoryCleared bool `json:"storyCleared"` // sista huvudbanan klarad: slutet har visats, oändligt läge/NG+ (M11) låses upp
|
||||
StoryCleared bool `json:"storyCleared"` // sista huvudbanan klarad: slutet har visats, oändligt läge/NG+ låses upp
|
||||
NGPlus int `json:"ngPlus"` // antal New Game+ som startats (svårighetspåslag)
|
||||
}
|
||||
|
||||
// New börjar från noll.
|
||||
@@ -253,6 +254,18 @@ func (p *Progress) Unlocked(all []*level.Level, id string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// NewGamePlus börjar om storyn med skills och XP kvar: banresultat, items
|
||||
// och det man har på sig nollställs. Storyn förblir "klar" så att oändligt
|
||||
// läge är kvar. Returnerar det nya NG+-numret.
|
||||
func (p *Progress) NewGamePlus() int {
|
||||
p.ensure()
|
||||
p.Levels = map[string]*LevelResult{}
|
||||
p.Items = map[string]bool{}
|
||||
p.Equipped = map[string]string{}
|
||||
p.NGPlus++
|
||||
return p.NGPlus
|
||||
}
|
||||
|
||||
// TotalStars är summan av bästa stjärnor.
|
||||
func (p *Progress) TotalStars() int {
|
||||
n := 0
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user