The first application with things of its own, and the first customer for all three rungs before it at once. /Apps/Lander a launcher /Packages/app.Lander/Lander.sbx the program /Packages/app.Lander/splash.tune its tune Typing "Lander" starts the launcher, which needs no new rule: the shell runs what it reads, so a launcher beginning "#!" and Say.sbx beginning "SBEX" go down the same road and neither the shell nor the person has to know which kind of thing they started. It passes on what it was told with $args, and says #quiet, because a launcher is machinery and not narration. The game then asks where it came from and joins its tune's name to that, so nothing anywhere names /splash.tune. Every recorded Lander test still types just "Lander" and knows nothing about any of this, which is exactly the claim. ---- Why the directory is not in /Apps ---- A launcher and a directory of the same name cannot both be there; SBFS refuses the second. And /Apps is the directory the shell walks for every word it does not know and Tab walks for every first word, so doubling what is in it is a cost on the path that runs most. The "app." goes in FRONT rather than behind because Tab matches the start of a name: a prefix is a namespace and a suffix is a collision. Copy.app beside Copy.sbx makes "Copy" and Tab complete to the shared "Copy." and hand you a broken word. The launcher names drive 0, so a game started from a disk of your own is looked for where the game is rather than where you are - its lines run on your disk, which is what makes everything else in a script work. /lander.state stays at the root. A saved position belongs to whoever saved it and is found where they are standing; a tune belongs to the program and is found beside it. That pair is the whole distinction. ---- And what it cost ---- Two hundred thousand cycles, about twelve frames, between the machine starting and the game drawing: a script opened, a deeper path walked. Six video captures moved out by that much. The drift bar needed something else - its pad is counted from the MACHINE starting rather than the game, so the burn is now twelve frames shorter from the game's point of view, and the recording holds the button longer instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
17 lines
886 B
Plaintext
17 lines
886 B
Plaintext
#! script
|
|
; The launcher for Lunar Porter, which is what typing "Lander" actually starts.
|
|
;
|
|
; An application with things of its own gets a DIRECTORY of its own, and a typed word names
|
|
; a file rather than a directory - so what sits in /Apps is this, and the game sits with its
|
|
; tune in /Packages/app.Lander. The shell decides what to run by reading it, so this file
|
|
; beginning "#!" and Say.sbx beginning "SBEX" go down the same road and neither the shell nor
|
|
; the person has to know which kind of thing they started.
|
|
;
|
|
; That indirection is the point of it. Where the game physically lives stops being part of
|
|
; its name, so an installer may put it on another disk and change only this line.
|
|
;
|
|
; #quiet, because a launcher is machinery and not narration. Without it, starting a game
|
|
; prints the path of the thing it is about to start.
|
|
#quiet
|
|
0:/Packages/app.Lander/Lander.sbx $args
|