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>
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package sim
|
|
|
|
import "testing"
|
|
|
|
func TestDebuffEffectsAndProfile(t *testing.T) {
|
|
if DefaultStats() != (Stats{1, 1, 1, 1, 1}) {
|
|
t.Fatal("default")
|
|
}
|
|
for kind, e := range DebuffEffects {
|
|
changed := false
|
|
for i := range e {
|
|
if e[i] != 1 {
|
|
changed = true
|
|
}
|
|
}
|
|
if !changed {
|
|
t.Errorf("%s påverkar inget", kind)
|
|
}
|
|
}
|
|
st := CombinedStats([]Debuff{{SoreFeet, 1}, {Blisters, 1}})
|
|
if st[StatSpeed] < 0.67 || st[StatSpeed] > 0.69 || st[StatThirst] != 1 {
|
|
t.Fatalf("kombinerad fart %.3f", st[StatSpeed])
|
|
}
|
|
|
|
var p Profile
|
|
p.Add(Tired, 1)
|
|
p.Add(DOMS, 3)
|
|
p.Add(Tired, 2) // förlängs, inte dubbleras
|
|
if len(p.Debuffs) != 2 || !p.Has(Tired) || p.Debuffs[0].LevelsLeft != 2 {
|
|
t.Fatalf("debuffs=%v", p.Debuffs)
|
|
}
|
|
if p.Stats()[StatSpeed] != 0.9*0.9 {
|
|
t.Fatalf("stats=%v", p.Stats())
|
|
}
|
|
if exp := p.EndLevel(); len(exp) != 0 || len(p.Debuffs) != 2 {
|
|
t.Fatalf("efter bana 1: exp=%v debuffs=%v", exp, p.Debuffs)
|
|
}
|
|
if exp := p.EndLevel(); len(exp) != 1 || exp[0] != Tired || len(p.Debuffs) != 1 || p.Debuffs[0].Kind != DOMS {
|
|
t.Fatalf("efter bana 2: exp=%v debuffs=%v", exp, p.Debuffs)
|
|
}
|
|
p.EndLevel()
|
|
if len(p.Debuffs) != 0 || p.Has(DOMS) {
|
|
t.Fatal("DOMS ska ha gått ut efter tre banor")
|
|
}
|
|
}
|