Player speed

Weapons

Weapons can be fired rapidly if the fire button is held down, however, you can mash the fire button every other frame to fire much faster!
WeaponDamageNotes
PAC4096Can be enhanced to fire 2 or 4 at a time
ION8192Shoots one at a time in a + sequence
RTL4096Can be enhanced to fire 2 or 4 at a time. Projectiles move faster than PAC
MAM16384
SAD32768
SWT65536
DAM65536Damages everything within a certain radius

Enemies

These values are for Easy and Normal difficulty. The health is multiplied by 1.5 for Hard, and by 2 for Terminal.
Enemy/targetHealth
Storage bunker65536
Shield generator65536
Ymir:
Enemy/targetHealth
Radar99999
Power station99999
Boss500000
Crythania:
Enemy/targetHealth
Floating radar256000
Boss200000
Moon Dagger:
Enemy/targetHealth
Radar, small16384
Radar, large100000
Boss, phase 1128000
Boss, phase 2256000
Tei Tenga:
Enemy/targetHealth
Helicopter (grounded)16384
Dinosaur skull131072
Boss900000
Ositsho:
Enemy/targetHealth
Control tower99999
Sentinel tower65535
Heat miner65535
Boss400000
Erigone:
Enemy/targetHealth
Boss, phase 1600000
Boss, phase 21200000
Centauri III:
Enemy/targetHealth
C-Nome5002
Pyramid (solid)90002
Pyramid (slotted)90003
Tower90003
Boss800000
Ceres:
Enemy/targetHealth
Tower120000
Boss500000
Proxima Seven:
Enemy/targetHealth
Arch40960
Double tower81920
Boss512000

Item drops

Certain enemies and buildings have a random chance of dropping a useful item.
WorldEnemy/targetItemDrop chance (%)
YmirTankRTL4
Moon DaggerRocketMAM5
Tei TengaHelicopter (grounded)RTL5
OsitshoPhoenix fighterFLY2
OsitshoQuadramRTL2
ErigoneShriek fighterFLY5
ErigoneLaser turretRTL1
Centauri IIIPyramid (solid)DAM2
Proxima SevenTransport shipRandom10
Proxima SevenUnknown[1]MAM10
[1] Only in the data for 9-1. The object doesn't appear anywhere on the map but may spawn in tunnels. It's some kind of flying enemy.

Objective skipping

If a tunnel is part of the list of objectives, you can go straight to it to skip any previous objectives.

Ymir 2 bonus tunnel

There is an optional tunnel in 1-2 that contains 9 afterburner bonuses and regenerates each time you enter it. It's worth traveling through this several times to gather enough afterburner for the entire run.

RNG

Formula

Terminal Velocity uses Watcom C compiler's rand() function. Which is a linear congruential pseudo-random number generator (LCG PRNG), which works as follows:
uint32_t seed; //Seed is 32 bits
int rand()
{
  seed = seed*1103515245 + 12345; //Seed multiplies and adds, and possibly overflows
  return (seed >> 16) & 32767; //Use bits 16-30 for requested random value
}
The random number, for example, can be bounded between 0 and 99 using the common algorithm which contains bias:
random_value = rand() % 100; //Numbers 0-67 are more likely than 68-99 
Or, the general formula which will produce a number between 0 and n - 1:
random_value = rand() % n; //Note: If n is not a power of 2, random_value is biased
In Lua, this can be represented as:
result = (0x41C64E6D * seed + 0x00003039) mod 2^32
random(n) = math.floor((bit32.band(bit32.rshift(result,16),0x7FFF)*n)/0x7FFF)

Item drops

When an object is destroyed, the item drop roll is a variable number of rolls from the current seed. To calculate how far it is from the current seed, do the following.
The first roll calculates the number of debris chunks that fly off the object. It calculates this with the following formula:
debris = random(8)+2
This will result in a number between 2 and 9. The RNG will then roll 6 times for each piece of debris. This is used to determine the type of debris, direction of travel, rotation, etc.
An additional roll is used after this, the purpose is unknown but all projectile hits in general have one seemingly useless roll.
The next roll is the one that determines if an item drops. The RNG will generate a value with random(100). Some objects have a percent chance of dropping an item, this can be viewed in the map editor. If the random roll is between 0 and this percentage, the item will drop; e.g. Ymir tanks have a 4% of dropping an RTL pickup, if the roll is between 0 and 4 then it will drop (yes, this does mean the chance is actually 5%!)
If multiple shots hit the object and destroy it on the same frame, things get a little more complicated. Let's say for example that an enemy has 4 hits left, and you fire an RTL volley of 4 lasers. The first 3 hits that the game processes are treated like normal object hits; they use 2 RNG rolls each unless debris is spawned, in which case an extra 6 rolls are used. The game determines if debris flies off with the second RNG roll, not the first. It takes bits 16 through 30 of the new RNG seed, or in Lua:
bit32.band(bit32.rshift(result,16),0x7FFF)
If this value is between 0x0000 and 0x1FFF, a chunk of debris will spawn. It's possible that anywhere between 6 and 24 RNG rolls will be used for the first 3 shots, then the 4th shot destroys it through the process at the beginning of the section.

Manipulation

The following actions advance the RNG:

Level maps

Here is a collection of maps with the intended order of events and relevant powerups marked. (Done, may add more items of interest if needed)
There is a level editor available. You need an older version of Windows to open it, Windows 3.1 in DOSBox works fine. Get it on this page: https://legacy.3drealms.com/tv/index.html Open DISK.POD or CDROM.POD with it.

GameResources/DOS/TerminalVelocity last edited by Nach on 7/20/2021 11:38 PM
Page History Latest diff List referrers View Source