An orbit that comes back round, out of gravity minus the swing

The relief version could never make one. It only ever SUBTRACTED from
gravity, so a lander a little too slow sank for ever and one a little
too fast rose for ever - nothing in it could turn a fall around, because
nothing in it ever pushed up. There was no periapse to have.

Gravity minus the swing outwards has a sign change in it, and that is
the whole mechanic. Below orbital speed the pull wins and the lander
falls; above it the swing wins and the lander climbs; at 64 sixteenths
they cancel and it circles. Falling buys sideways speed and climbing
spends it, so a fall carries the lander past orbital and turns into a
climb, and the climb pays it back and turns into a fall.

The trade is the quarter square multiply, because the rate has to be
the PRODUCT of the two speeds. Set by the vertical speed alone it drained
a climb to nothing, and any minimum to stop that became a trap the climb
spent its way into - measured freezing at 23 with a gate of 24 and at 3
with a gate of 4. With the product in it there is no gate: as the
sideways speed goes to nothing the trade stops by itself.

Half the product rather than a quarter or the high half. The high half
alone is nought below a product of 256, which is a dead patch exactly
where the turn begins, and a quarter still ran the lander into the roof
before it came round - the whole sky is about 145 pixels.

Measured, placed at 80 sideways and left alone: apoapse at -1024 with 59
sideways, periapse at -124 with 71, and round again at 165, 241, 299 and
369 ticks with no sign of decay. A period of about 22 seconds.

The ceiling also spends one sideways when it wipes a climb. Without that
it was a trap with no way out: the pin wipes the climb, so the trade sees
neither fall nor climb and never touches the speed that is pushing the
lander up. Measured pinned at the top with 117 sideways, unmoving, for
the whole of a four minute flight.

Tests/makedisks.sh needed the library path, since Lander now includes
math.asm, and the app went from 2,924 bytes to 4,651 - mostly the 1,022
byte table - which is what the listing expectations move for.
This commit is contained in:
Anachronaut
2026-09-03 19:15:50 -04:00
parent f5642f52b5
commit c514d5328e
13 changed files with 295 additions and 60 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -15,7 +15,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -32,7 +32,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -22,7 +22,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -22,7 +22,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -108,7 +108,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -27,7 +27,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -15,7 +15,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -13,7 +13,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -22,7 +22,7 @@ Mode.sbx 48
Flip.sbx 173
Sprite.sbx 442
Depth.sbx 672
Lander.sbx 2924
Lander.sbx 4651
Pad.sbx 264
Crash.sbx 632
vars.script 50
+1 -1
View File
@@ -146,7 +146,7 @@ for i in 1 2 3 4 5 6 7 8; do "$TOOL" put "$DISKS/sbfs.img" "filler$i.txt" >/dev/
"$TOOL" put "$DISKS/cosmos.img" "$WORK/Depth.sbx" >/dev/null
# Lander.sbx is Lunar Porter, and the biggest program on the disk. It takes the screen, the
# mode and the map, so it is also the one that says a program can have all three back.
"$ROOT/Assembler" -I "$ROOT/Programs/CosmOS/Source" \
"$ROOT/Assembler" -I "$ROOT/Programs/Libraries" -I "$ROOT/Programs/CosmOS/Source" \
"$ROOT/Programs/CosmOS/Apps/Lander.asm" -o "$WORK/Lander.sbx" >/dev/null
"$TOOL" put "$DISKS/cosmos.img" "$WORK/Lander.sbx" >/dev/null
# Pad.sbx says what the controllers are doing, which is the only way to tell a pad nobody
+25 -13
View File
@@ -1790,21 +1790,33 @@ HOME="$(countColour "$BUILD/ceiling22000000.ppm" f0f0f0)"
# ---- Orbit, which is measured and not checked here ----
#
# Going sideways lifts the moon off you: four times the lateral speed goes into a byte every
# tick and the tick's gravity is skipped when it carries. It works, and it was measured
# working - climbing at 13, 26, 39 sixteenths without lateral speed and 14, 31, 50 with it,
# the gap widening as the speed builds.
# Gravity minus the swing outwards. Below orbital speed the pull wins and the lander falls;
# above it the swing wins and the lander climbs; and falling buys sideways speed while
# climbing spends it. That is what makes a closed orbit rather than a one way trip, and it
# was measured doing it. Placed at 80 sideways and left alone, turning points at:
#
# THERE IS NO CHECK FOR IT, and that is deliberate rather than forgotten. Every window in
# which the difference is visible turned out to be a few frames wide: hold the thruster and
# both landers are pinned against the ceiling with their climbs spent; ease off and both land
# and freeze; and either way the comparison becomes two nothings. A version of this check did
# exist and passed against one disk and failed against another, which is a check that is
# measuring the boot time rather than the physics.
# tick 44 height -1024 sideways 59 apoapse, and it falls away
# tick 123 height -124 sideways 71 periapse, and it climbs again
# tick 165 height -1024 sideways 59
# tick 241 height -124 sideways 70
# tick 299 height -1024 sideways 59
# tick 369 height -114 sideways 70
#
# What would make it checkable is a way to put the lander somewhere with a velocity, without
# flying it there - the same thing the delivery below wants. Until then this is verified by
# somebody measuring it, and said so here rather than left looking tested.
# Four hundred and eighty ticks with no sign of the amplitude decaying, a period of about a
# hundred and thirty ticks, which is twenty two seconds of play.
#
# THERE IS STILL NO CHECK FOR IT, and it is still deliberate. The measurement above was taken
# with a build that PLACED the lander at eighty sideways, because reaching orbital speed
# through the controls takes a sustained burn while holding height, and the phase of that burn
# against the gravity tick - one frame in ten - decides whether the thruster is seen at all.
# Two pad files a frame apart fly differently. That is a fine thing for a game and a poor one
# for a check.
#
# What would make it checkable is still the same thing: a way to put the lander somewhere with
# a velocity, without flying it there, which is now wanted by four separate untested paths.
# The other candidate is a hand flown recording of an orbit, the way the delivery below is a
# hand flown delivery. Until one of those exists this is verified by somebody measuring it,
# and said so here rather than left looking tested.
# ---- A delivery, flown by hand, and what it cost ----
#