TASVideos

Tool-assisted game movies
When human skills are just not enough

Game Resources / DOS / Skyroads

"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

Parameter Value
Normal Acceleration or Deceleration 75 units/(frame)^2
Slowdown due to glancing blow 151 units/frame
Maximum possible speed 10922 units/frame
Tile subdivisions (longitudinal) 65536 units/block
Tile subdivisions (horizontal) 5888 units/block
Tile subdivisions (height) 2560 units/block
Base height 10240 units
Center horizontal 32768 units
Frame rate 59659/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 usage 30000/(36*<per-level-constant>) units/frame[2][3]
Fuel usage floor(30000/<per-level-constant>)*<speed>/65536 units/frame[2][3]
Horizontal ejection 928 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.

Address Size Description
0BA2 Byte Bit 7 set if Up pressed (set by IRQ1)
0BA3 Byte Bit 7 set if Down pressed (set by IRQ1)
0BA4 Byte Bit 7 set if Left pressed (set by IRQ1)
0BA5 Byte Bit 7 set if Right pressed (set by IRQ1)
0BA6 Byte Bit 7 set if Up-Left pressed (set by IRQ1)
0BA7 Byte Bit 7 set if Up-Right pressed (set by IRQ1)
0BA8 Byte Bit 7 set if Down-Left pressed (set by IRQ1)
0BA9 Byte Bit 7 set if Down-Right pressed (set by IRQ1)
0BAA Byte Bit 7 set if Space pressed (set by IRQ1)
0BAB Byte Bit 7 set if Escape pressed (set by IRQ1)
0BAC Byte Bit 7 set if P pressed (set by IRQ1)
160C Word Frame tick counter (incremented by IRQ0)
41CE Word Track length
4566 Word Number of frames after death (0 if alive or just died)
4568 Word 1 if locked jump is active, 0 otherwise
456E Word Gravity
4574 Word Amount of oxygen
4576 Word Horizontal speed (signed)
4578 Word 0 if ship hasn't blown up, otherwise number of frames after blowup + 1
457C Word Cause of death (0: Still alive, 1: Collided, 2: Touched burning, 3: Drifting in space, 4:Out of fuel, 5:Out of oxygen)
5488 Word Active controls (nonzero: try to jump, zero: don't jump)
54A0 Word Fuel left (30000 is full load)
54A2 Word Horizontal drift speed (signed)
54AE Word Amount of fuel
54B8 Dword Longitudinal speed
54B6 Word Acceleration of gravity (signed, always negative)
933C Word Active controls (1: Try to accelerate, 0: Neutral, -1: Try to decelerate)
9342 Word Vertical speed (signed)
9600 Word Active controls (1: Steer right, 0: Go straight, -1: Steer left)
9602 Word Controller (0: Keyboard, 1: Joystick, 2: Mouse, 3: Demo)
9628 Dword Longitudinal position
AF2C Word Horizontal position
AF3C Word Vertical position (signed)
AF3E Dword Temporary extra jump speed (not shown in speed gauge, lost after jump ends)
B14C Word Oxygen left (30000 is full load)
B8EE[4] Word Direction ship is partially unsupported (-1: left, 0: none, 1: right)
B8F0[4] Dword Projected longitudinal position
B8F4[4] Word Projected vertical position (signed)
B8F6[4] Word Projected horizontal position
B8F8[4] Word How much the ship is on top of nothing?
B8FE[4] Word 1 if ship is on top of nothing, 0 otherwise
B900[4] Word 1 if ship is on sticky floor, 0 otherwise.
B902[4] Word 1 if slippery floor effect is active, 0 otherwise.
B904[4] Word 1 if ship is on ground, 0 otherwise
B906[4] Word Jump base height
B908[4] Word Set to 1 when ship is in jump
B90A[4] Word Normally 0, but set to 1 after jump has tried to lock
B90E[4] Word Frames 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.


See also



Combined RSS Feed
GameResources/DOS/Skyroads last edited by Ilari on 2012-05-31 08:54:03
Page info and history | Latest diff | List referrers | View Source