M9b: folk, filer, reklam, sorl och vagnval
All checks were successful
release / build-release (push) Successful in 1m33s

Folk på stationen (NPC:er som vandrar, kliver av tåg och går mot
utgången, blockerar spelaren men inte varandra), vänster-/högerfiler
som bromsar på fel sida, bredare gångar, reklamaffischer (clutter),
japanskt sorl i loop (noise), vagnval med kvinnovagn (stort avdrag med
man i sällskapet, tidsstyrd), kömarkeringar på perrongen, trängsel per
vagn (bonus för tom vagn, svettig-debuff och svårare resa i full vagn,
släpp förbi passagerare) och att folk kliver av innan man får gå på.
Ny bana 005 Ueno. Skärmdumpsverktyget kan filtrera på bana/skript.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 12:33:44 +02:00
parent 8fca14e42d
commit de61568e44
49 changed files with 1568 additions and 136 deletions

View File

@@ -102,6 +102,14 @@ func buildShots(levelsDir string) error {
if err != nil {
return err
}
l5, err := level.LoadFile(filepath.Join(levelsDir, "005-ueno.json"))
if err != nil {
return err
}
toPlatform5, err := moves(l5, l5.SpawnPoint(), l5.CorrectPlatform())
if err != nil {
return err
}
// Skyltbilderna tas med några kända ord så att markeringen och den
// delvisa översättningen syns; hjälpen lär sedan in nästa ord.
known := []string{"-know", "改札,番線,方面", "-seed", "7"}
@@ -118,6 +126,7 @@ func buildShots(levelsDir string) error {
{"003-shibuya", toMachine3 + "; press enter; pick 池袋; press enter; wait 5; press enter; press right; wait 5; shot $OUT/seats.png; quit",
[]string{"-seed", "7", "-know", "池袋", "-debuffs", "sore_feet"}},
{"004-tokyo", "wait 10; shot $OUT/floors-b1.png; " + toStairs + "; wait 20; shot $OUT/floors-1f.png; quit", []string{"-seed", "7"}},
{"005-ueno", "wait 90; shot $OUT/crowd.png; " + toPlatform5 + "; waittrain; wait 5; press enter; wait 20; shot $OUT/cars-alight.png; wait 80; press right; wait 5; shot $OUT/cars.png; quit", []string{"-seed", "7"}},
}
return nil
}
@@ -190,6 +199,9 @@ func main() {
}
_ = demo
for _, s := range shots {
if len(os.Args) > 1 && !matchesAny(s, os.Args[1:]) {
continue // `go run ./tools/shots 005 ride` kör bara skott vars namn eller bana innehåller något av orden
}
args := []string{"-mute", "-nosave", "-script", strings.ReplaceAll(s.script, "$OUT", out)}
if s.level != "" {
args = append(args, "-level", s.level)
@@ -234,3 +246,13 @@ func fail(err error) {
fmt.Fprintln(os.Stderr, "shots:", err)
os.Exit(1)
}
// matchesAny rapporterar om skottets bana eller skript innehåller något av orden.
func matchesAny(s shot, words []string) bool {
for _, w := range words {
if strings.Contains(s.level, w) || strings.Contains(s.script, w) {
return true
}
}
return false
}