M10b: bussar, fler sidospår och överstimulerande UI
All checks were successful
release / build-release (push) Successful in 1m36s

Ett tåg kan vara en buss (vehicle: bus): samma tidtabell, faser,
bedömning i nätet och ombordstigning, men ett fordon på en väg i stället
för vagnar på räls, hållplatsskylt, "1番" på tavlan, tuta vid inrullning
och dörrsignal före avgång. Nätet har tre busslinjer från Narita. Nya
sidobanor: 001b Flygbussterminalen (biljettbana med tre bussar) och 003b
Harajuku (Yamanote åt rätt eller fel håll runt ringen). Overload-flaggan
ger en rullande reklamticker och maximalt med affischer (Ueno, Tokyo).
Romaji utan makroner (fonten saknar dem). Skärmdumparna som börjar på
bankartan går via titelskärmen. Tester, docs och wiki uppdaterade.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 17:33:55 +01:00
parent 87695b668b
commit 0c47b0ad00
35 changed files with 666 additions and 73 deletions

View File

@@ -213,6 +213,32 @@ var tiles = []func(canvas){
c.rect(11, 5, 2, 2, green)
c.rect(2, 10, 12, 3, metal) // disk
},
func(c canvas) { // buss (ritas på vägrutan bortom hållplatsen när bussen är inne)
c.rect(0, 0, 16, 16, wallDark)
c.rect(1, 2, 14, 11, color.RGBA{240, 200, 60, 255}) // gul kaross
c.rect(1, 2, 14, 1, metalDark)
c.rect(2, 4, 12, 4, screenC) // fönsterrad
c.rect(7, 4, 1, 4, metalDark) // fönsterspröjs
c.rect(1, 9, 14, 2, awningRed) // rand
c.rect(11, 8, 2, 5, metalDark) // dörr
c.rect(3, 13, 3, 2, boxDark) // hjul
c.rect(10, 13, 3, 2, boxDark)
},
func(c canvas) { // väg (horisontell; roteras för vertikala): asfalt med mittlinje och kantsten
c.rect(0, 0, 16, 16, color.RGBA{70, 72, 80, 255})
c.rect(0, 0, 16, 1, wallMid)
c.rect(0, 15, 16, 1, metal) // trottoarkant
for x := 0; x < 16; x += 6 {
c.rect(x, 7, 3, 1, color.RGBA{230, 220, 150, 255}) // streckad mittlinje
}
},
func(c canvas) { // hållplatsskylt: stolpe med bussymbol (ritas över hållplatsrutan)
c.rect(7, 4, 2, 12, metalDark)
c.rect(3, 1, 10, 6, color.RGBA{240, 200, 60, 255})
c.rect(4, 2, 8, 3, boxDark)
c.rect(5, 3, 2, 1, white)
c.rect(9, 3, 2, 1, white)
},
}
// player ritar en figur som tittar åt facing (0 ner, 1 upp, 2 vänster, 3 höger)

View File

@@ -70,6 +70,7 @@ var (
staffTone = []note{{a4, 0.18}, {0, 0.08}, {a4, 0.18}, {0, 0.12}, {e5, 0.3}}
gateBeep = []note{{a6, 0.09}}
gateDeny = []note{{e4, 0.12}, {0, 0.04}, {e4, 0.12}, {0, 0.04}, {e4, 0.14}}
busHorn = []note{{a4, 0.22}, {f4, 0.3}}
)
// render syntetiserar toner med sinus + överton, attack/release-envelope.
@@ -264,6 +265,7 @@ func main() {
"lose": render(loseSting, 0.01, 0.08, 0.2),
"staff": square(staffTone),
"plane": noiseSweep(3.0, 0.03, 0.4, func(t float64) float64 { return math.Sin(math.Pi * t / 3.0) }),
"bus-horn": square(busHorn),
"chatter": chatter(6),
"music-map": mapMusic(),
}

View File

@@ -124,6 +124,18 @@ func buildShots(levelsDir string) error {
if err != nil {
return err
}
l1b, err := level.LoadFile(filepath.Join(levelsDir, "001b-flygbussen.json"))
if err != nil {
return err
}
toMachine1b, err := moves(l1b, l1b.SpawnPoint(), l1b.Find(level.TicketMachine)[0])
if err != nil {
return err
}
toStop1b, err := moves(l1b, l1b.Find(level.TicketMachine)[0], l1b.CorrectPlatform())
if err != nil {
return err
}
l7, err := level.LoadFile(filepath.Join(levelsDir, "007-akihabara.json"))
if err != nil {
return err
@@ -146,7 +158,7 @@ func buildShots(levelsDir string) error {
// delvisa översättningen syns; hjälpen lär sedan in nästa ord.
known := []string{"-know", "改札,番線,方面", "-seed", "7"}
shots = []shot{
{"", "wait 10; shot $OUT/map.png; press l; wait 5; press down; press down; press down; wait 5; shot $OUT/words.png; press l; wait 3; press t; wait 5; press down; wait 3; shot $OUT/skills.png; press t; wait 3; press i; wait 5; shot $OUT/items.png; quit",
{"", "wait 5; press enter; wait 10; shot $OUT/map.png; press l; wait 5; press down; press down; press down; wait 5; shot $OUT/words.png; press l; wait 3; press t; wait 5; press down; wait 3; shot $OUT/skills.png; press t; wait 3; press i; wait 5; shot $OUT/items.png; quit",
[]string{"-know", "改札,出口,トイレ", "-points", "3", "-save", "$DEMO"}},
{"001-flygplatsen", toKiosk + "; press b; wait 5; press down; wait 3; shot $OUT/shop.png; quit", []string{"-seed", "7", "-save", "$DEMO"}},
{"001-flygplatsen", "move right 4; move down 2; wait 5; shot $OUT/level-001.png; quit", nil},
@@ -162,13 +174,14 @@ func buildShots(levelsDir string) error {
{"006-ikebukuro", "move right 2; wait 5; shot $OUT/nav-list.png; quit", []string{"-seed", "7", "-mode", "list"}},
{"006-ikebukuro", toMachine6 + "; wait 5; shot $OUT/terminal.png; " + "quit", []string{"-seed", "7", "-mode", "signs", "-know", "山手線,番線,方面,新宿,池袋,埼京線"}},
{"006-ikebukuro", toTrap6 + "; waittrain; wait 5; press enter; wait 100; pick calm; press enter; wait 60; shot $OUT/ride-real.png; waitover; wait 5; shot $OUT/too-far.png; quit", []string{"-seed", "7", "-mode", "signs"}},
{"", "wait 10; press n; wait 5; shot $OUT/map-signs.png; quit", []string{"-save", "$DEMO"}},
{"", "wait 5; press enter; wait 10; press n; wait 5; shot $OUT/map-signs.png; quit", []string{"-save", "$DEMO"}},
{"007-akihabara", toPlatform7 + "; waittrain; wait 5; press enter; wait 100; pick calm; press enter; waitstop; press enter; wait 40; shot $OUT/transfer.png; quit",
[]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"}},
{"", "wait 10; shot $OUT/endless.png; quit", []string{"-endless", "-seed", "7", "-mode", "list", "-save", "$DEMO"}},
{"", "wait 10; press s; wait 5; press down; wait 3; shot $OUT/settings.png; quit", []string{"-save", "$DEMO"}},
{"001b-flygbussen", toMachine1b + "; press enter; pick 新宿; press enter; wait 5; " + toStop1b + "; waittrain; wait 10; shot $OUT/bus.png; quit", []string{"-seed", "7", "-know", "新宿,方面"}},
{"", "wait 5; press enter; wait 10; press s; wait 5; press down; wait 3; shot $OUT/settings.png; quit", []string{"-save", "$DEMO"}},
{"", "wait 10; shot $OUT/lang.png; press enter; wait 30; shot $OUT/title.png; press down; press enter; wait 5; press right; wait 5; shot $OUT/tutorial.png; quit", []string{"-save", "$FRESH"}},
{"001-flygplatsen", "wait 40; shot $OUT/tips.png; " + toSign + "; wait 5; shot $OUT/tips-sign.png; press esc; wait 5; shot $OUT/pause.png; quit", []string{"-seed", "7", "-save", "$FRESH"}},
{"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"}},