M10d: toaletter innanför och utanför spärrarna
All checks were successful
release / build-release (push) Successful in 1m38s
All checks were successful
release / build-release (push) Successful in 1m38s
Björns tillägg 2026-10-24. Generatorn har nu ett betalt område per perrong (paidDepth) och toilets inside/outside/both: 005 Ueno och 008b Nippori har toalett bara innanför, 007b Ueno på båda sidor. Perrongceller görs till återvändsgränder (bara passagen mot starten behålls, labyrinten repareras) och det betalda området krymper om det skulle bli genomfart; regeln att varje perrong nås utan att passera ett annat betalt område testas i level och levelcheck. level.PathOutside används av testbotar och shots. Alla genererade banor utom 003 omgjorda, skärmdumpar omtagna. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -134,6 +134,12 @@ func buildShots(levelsDir string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Från perrongen i Ueno tillbaka till första spärren, och riktningen ut
|
||||
// genom den (som spärren utan återvändo ska vägra).
|
||||
toGateBack, pushOut, err := backToGate(l5, 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"}
|
||||
@@ -159,14 +165,42 @@ func buildShots(levelsDir string) error {
|
||||
[]string{"-seed", "7", "-mode", "list", "-know", "上野,番線,方面,乗り換え"}},
|
||||
{"", "wait 150; shot $OUT/ending.png; press enter; wait 5; shot $OUT/ending-summary.png; press enter; wait 250; shot $OUT/credits.png; quit", []string{"-ending", "-save", "$DEMO"}},
|
||||
{"007-akihabara", toKiosk7 + "; urge Ville; press enter; wait 5; press right; wait 3; shot $OUT/payer.png; quit", []string{"-seed", "7"}},
|
||||
{"005-ueno", toPlatform5 + "; move left 1; wait 5; push left 30; wait 3; shot $OUT/no-exit.png; press enter; wait 150; shot $OUT/staff.png; quit", []string{"-seed", "7"}},
|
||||
{"005-ueno", toPlatform5 + "; " + toGateBack + "; wait 5; push " + pushOut + " 30; wait 3; shot $OUT/no-exit.png; press enter; wait 150; shot $OUT/staff.png; quit", []string{"-seed", "7"}},
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// moves gör om kortaste vägen mellan två rutor till "move DIR N"-steg.
|
||||
// backToGate ger stegen från perrongen till första spärren på vägen ut och
|
||||
// riktningen vidare ut genom den.
|
||||
func backToGate(l *level.Level, from level.Point) (string, string, error) {
|
||||
path := l.PathOutside(from, l.SpawnPoint(), l.CanEnter)
|
||||
gi := 0
|
||||
for gi < len(path) && l.At(path[gi]) != level.Gate {
|
||||
gi++
|
||||
}
|
||||
if gi >= len(path)-1 {
|
||||
return "", "", fmt.Errorf("ingen spärr på vägen ut från %v i %s", from, l.ID)
|
||||
}
|
||||
m, err := moves(l, from, path[gi])
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
g, o := path[gi], path[gi+1]
|
||||
dir := "right"
|
||||
switch {
|
||||
case o.X < g.X:
|
||||
dir = "left"
|
||||
case o.Y < g.Y:
|
||||
dir = "up"
|
||||
case o.Y > g.Y:
|
||||
dir = "down"
|
||||
}
|
||||
return m, dir, nil
|
||||
}
|
||||
|
||||
func moves(l *level.Level, from, to level.Point) (string, error) {
|
||||
path := l.Path(from, to, func(p level.Point) bool { // andra perronger är inga genvägar (spärrar utan återvändo)
|
||||
path := l.PathOutside(from, to, func(p level.Point) bool { // andra perronger och deras betalda områden är inga genvägar
|
||||
return l.CanEnter(p) && (!l.At(p).IsPlatform() || p == to)
|
||||
})
|
||||
if path == nil {
|
||||
|
||||
Reference in New Issue
Block a user