"Locked" jumps:

If some tile is adjacent to either burning block or empty space, then jumps can "lock" onto that edge. This can be good or bad, depending on what edge is "locked".
If left or right edge are locked, then the jump will be horizontally either shorter or longer, depending on where the edge is relative to ship.
If the far edge is locked onto then you will slow down (this is bad, but sometimes unavoidable). But if the near edge is locked onto, you will speed up (good thing, but only possible if your speed is below the maximum).
Note that your height at the time of jump is taken correctly into account, but the height of the block at target isn't. So trying to lock onto the near edge of block is almost suicidal and the far edges of blocks tend to lock when you don't want it (especially with tall blocks)
Finding the optimum places for locked jumps is tricky because earlier suboptimal locked jump may yield better position for the next locked jump, yielding net improvement in time. Also sometimes delaying the jump for 1 frame can yield a faster time.
Locked jumps are known to be possible up to 700 units gravity and as far as it is known, are not possible with 900 units gravity. No standard level has the only possible intermediate gravity (800 units), so behavior with 800 gravity has not been tested.

Racing against the lock:

"Racing against the lock" is variant of locked jump, useful when jumping onto block locking either to the near or far edge. In this variant, brake momentarily before "Jump-O-Master: idle" changes to "Jump-O-Master: in use", then start to accelerate again. The game calculates the jump as you were decelerating, but executes it with you actually accelerating.
This is useful for reducing time loss due to spurious lock onto the far edge of block and also useful for getting the near edge lock without blowing up (do this from jump bounce, since even short blocks are too tall otherwise).

When one can jump:

The game maintains a flag telling if there is jump in progress. This flag gets set if you start a jump and is cleared on any hit to ground, even if ship is above void at time of landing (one of the engines hits adjacent block). So for purposes of jump, post-jump bounces count as being on the ground.
Additionally (from the requirement that the game must not consider jump to be in progress) when jumping, there must be some kind of ground below. It can be any type of ground, even burning. Note that 1700 gravity disables jumping completely.
Certain invalid values for gravity cause any attempt at jumping to end in death (by overflowing the height value).

Steering in air

If you could jump and are not in bounce from slippery floor, you can steer the ship. This is sometimes useful.

Riding kill floors:

Floor effects of the special tile types are only in effect to ship if ship touches the ground[1] and if X and Y coordinates are within the special tile. Thus one can bounce above kill floor and not be destroyed and also ride on edge of a kill floor (with ship supported by one engine) and not be destroyed.
It is possible to push the ship on top of a burning block and jump from it even if horizontally adjacent block is void. But that sort of jump drifts a bit, so one has to have enough height to push the bounce far enough.

Taking "damage":

If ship hits tunnel edge or block in suitable manner, it will be quickly ejected horizontally and not destroyed. This slows you down (causing loss of about one frame), but some places you would have to slow much more to avoid the impact. Note that vertical ejections do not happen, if one would be required, you either stop or be destroyed.
Each hit is independent. There is no hit counter and no hitpoints. So each hit either kills you or not, independently of others.

Jumping from and to tunnels:

It is possible to both jump into and out of tunnels without requiring an extra block. Both require frame-precise timing. For jumping out of tunnel, simply do the jump on the last frame the ship is in the tunnel.
Note that jumps into tunnel that have horizontal momentum are much harder and will likely scratch the ship a bit (giving you bit of slowdown).

Keeping as much speed in pipes with slowdown floors as possible:

Best way to keep speed in pipes that have slowdown floors is to hold space (jump). The ship jumps a lot, cutting the contact to slowdown floor. This won't prevent slowdown but reduces it.

Fuel use:

The only thing that determines fuel use is speed. Jumping and steering do not use fuel. The more speed you have, the more fuel per frame ship uses (fuel use also varies between levels).
When looking at fuel needed for covering some distance, the result is sawtooth pattern with different sized peaks since fuel consumption is discretized to integer decrements (the only standard level this matters in a TAS is Druidia Road 1 of the original game).

Numeric parameters

ParameterValue
Normal Acceleration or Deceleration75 units/(frame)^2
Slowdown due to glancing blow151 units/frame
Maximum possible speed10922 units/frame
Tile subdivisions (longitudinal)65536 units/block
Tile subdivisions (horizontal)5888 units/block
Tile subdivisions (height)2560 units/block
Base height10240 units
Center horizontal32768 units
Frame rate59659/1657 fps = 36.00422450211225105... fps
Horizontal step (normal)(29*<speed>+45240)/512 units [2]
Horizontal step (on sticky floor)(29*<speed>)/512 units [2]
Oxygen usage30000/(36*<per-level-constant>) units/frame[2][3]
Fuel usagefloor(30000/<per-level-constant>)*<speed>/65536 units/frame[2][3]
Horizontal ejection928 units

Memory addresses

These all are relative to Data segment base, which can vary in memory.
Value 0x0BE70 has been seen in Skyroads and 0x0BE80 in Skyroads Xmas Special.
AddressSizeDescription
0BA2ByteBit 7 set if Up pressed (set by IRQ1)
0BA3ByteBit 7 set if Down pressed (set by IRQ1)
0BA4ByteBit 7 set if Left pressed (set by IRQ1)
0BA5ByteBit 7 set if Right pressed (set by IRQ1)
0BA6ByteBit 7 set if Up-Left pressed (set by IRQ1)
0BA7ByteBit 7 set if Up-Right pressed (set by IRQ1)
0BA8ByteBit 7 set if Down-Left pressed (set by IRQ1)
0BA9ByteBit 7 set if Down-Right pressed (set by IRQ1)
0BAAByteBit 7 set if Space pressed (set by IRQ1)
0BABByteBit 7 set if Escape pressed (set by IRQ1)
0BACByteBit 7 set if P pressed (set by IRQ1)
160CWordFrame tick counter (incremented by IRQ0)
41CEWordTrack length
4566WordNumber of frames after death (0 if alive or just died)
4568Word1 if locked jump is active, 0 otherwise
456EWordGravity
4574WordAmount of oxygen
4576WordHorizontal speed (signed)
4578Word0 if ship hasn't blown up, otherwise number of frames after blowup + 1
457CWordCause of death (0: Still alive, 1: Collided, 2: Touched burning, 3: Drifting in space, 4:Out of fuel, 5:Out of oxygen)
5488WordActive controls (nonzero: try to jump, zero: don't jump)
54A0WordFuel left (30000 is full load)
54A2WordHorizontal drift speed (signed)
54AEWordAmount of fuel
54B8DwordLongitudinal speed
54B6WordAcceleration of gravity (signed, always negative)
933CWordActive controls (1: Try to accelerate, 0: Neutral, -1: Try to decelerate)
9342WordVertical speed (signed)
9600WordActive controls (1: Steer right, 0: Go straight, -1: Steer left)
9602WordController (0: Keyboard, 1: Joystick, 2: Mouse, 3: Demo)
9628DwordLongitudinal position
AF2CWordHorizontal position
AF3CWordVertical position (signed)
AF3EDwordTemporary extra jump speed (not shown in speed gauge, lost after jump ends)
B14CWordOxygen left (30000 is full load)
B8EE[4]WordDirection ship is partially unsupported (-1: left, 0: none, 1: right)
B8F0[4]DwordProjected longitudinal position
B8F4[4]WordProjected vertical position (signed)
B8F6[4]WordProjected horizontal position
B8F8[4]WordHow much the ship is on top of nothing?
B8FE[4]Word1 if ship is on top of nothing, 0 otherwise
B900[4]Word1 if ship is on sticky floor, 0 otherwise.
B902[4]Word1 if slippery floor effect is active, 0 otherwise.
B904[4]Word1 if ship is on ground, 0 otherwise
B906[4]WordJump base height
B908[4]WordSet to 1 when ship is in jump
B90A[4]WordNormally 0, but set to 1 after jump has tried to lock
B90E[4]WordFrames done counter

[1] Slippery is special. Its effect lasts until you hit ground on non-slippery block.
[2] If accelerating or slowing down, uses the speed post-change. Truncated to an integer.
[3] Oxygen and fuel start from 30000. The constants come from level data.
[4] BP-relative. BP=B910 assumed here.

GameResources/DOS/Skyroads last edited by on 1/1/2022 6:13 PM