The README of the Descent 3 source release, at its initial import, calls it "the latest version of the Descent 3 source code" and says it "includes the '1.5' patch that Jeff Slutter and Kevin Bentley wrote several years ago"; the SourceSafe header comment of WeaponFire.cpp gives its last revision as 279, dated 9/20/01. | README.md L3Descent3/WeaponFire.cpp L2–4 | Code |
In Descent 3's released source, which includes the unreleased "1.5" patch, the player ship's thrust is the sum of a forward, an up, and a sideways push along the ship's own axes, each the control's value times full_thrust, the whole scaled by the player's movement_scalar and by 1.3 outdoors; the physics then moves a thrusting object against a drag proportional to velocity, solved in closed form over the frame: v = (v₀ − F/d)·e^(−(d/m)·t) + F/d. Computed from that formula, drag acts while the ship thrusts too, and speed levels off at F/d, as in Doom, whose floor friction multiplies momentum by 0.90625 each tic thrust or not; Quake's ground acceleration instead stops at the wish speed. | Descent3/object.cpp L2580–2585physics/physics.cpp L994–998physics/physics.cpp L279–293 | Code |
Descent 3's released source turns the player ship on three axes the same way it moves it on three: pitch, heading, and bank each take the control's value times full_rotthrust times the player's turn_scalar, and an object flagged PF_USES_THRUST with a rotational drag above 0 has its turning speed solved against that drag with the same closed form, ω = (ω₀ − R/d)·e^(−(d/m)·t) + R/d. Computed from it, a held turn levels off at R/d and a released one fades out at rate d/m. The input code clamps pitch to 0.75 and heading and bank to 1, except in a Macintosh build, which skips those three clamps; before the drag step, PhysicsDoSimRot can add auto-leveling thrust to pitch and bank, which this claim doesn't cover. | Descent3/object.cpp L2566–2568Descent3/Controls.cpp L430–432Descent3/Controls.cpp L887–895physics/physics.cpp L714–721physics/physics.cpp L245–252physics/physics.cpp L684 | Code |
| Descent 3's input code clamps the forward, up, and sideways thrust controls to ±1 each, separately, and the released source adds the three pushes along the ship's perpendicular axes, so all three held at once push √3 ≈ 1.73 times as hard as forward alone, and, computed from the linear drag, the ship settles at 1.73 times the speed; Doom does the same with two axes, clamping its forward and side moves apart and thrusting them at 90°. | Descent3/Controls.cpp L896–902Descent3/Controls.cpp L433–435Descent3/object.cpp L2583–2585 | Code |
Descent 3's released source gives the afterburner a 5-second tank (AFTERBURN_TIME, 5000 in an E3 demo build): while it is held and time is left, the forward control is replaced by the afterburner control times 1.6, and times a punch factor of 1.8 while over 90% of the tank is left, the factor easing to 1 by 80%, and the tank drains by the frame time. Let go, the tank refills by the frame time, or twice that with the "Afterburner" item in the inventory, but only while energy is above 5, and energy drops by the same amount, so a full refill costs 5 energy (computed) whichever rate applies. | Descent3/player.h L372–377Descent3/object.cpp L2289–2317Descent3/object.cpp L2325–2345 | Code |
In Descent 3's released source a homing weapon with thrust left starts homing 0.1 s after it is created, unless it is guided. Without a target, it scans every object in a room the missile's room can see: robots, players, and buildings with AI, not its own shooter, not cloaked, and only enemies of the shooter, inside a cone where the dot product of the direction to it with the missile's facing exceeds the weapon's homing_fov. In object order, a chaff chunk ends the scan (by a 1-in-4 roll in single player) and so does anything within 15 units (the distance between centers less both objects' sizes); otherwise the missile takes the object within 500 units most nearly straight ahead with a clear line to it. A target it has is kept while it stays inside the cone and either within 15 units, or within 500 units, in a visible room, with a clear line. | Descent3/WeaponFire.cpp L1719–1726Descent3/WeaponFire.cpp L1461–1462Descent3/WeaponFire.cpp L1604–1621Descent3/WeaponFire.cpp L1623–1659Descent3/WeaponFire.cpp L1660–1681Descent3/WeaponFire.cpp L1497–1580 | Code |
Descent 3's released source steers a homing weapon at the target's position plus a tenth of the target's velocity when the target moves under physics or walks. A weapon with rotational drag fires full full_rotthrust left or right and up or down, by which side of the missile the aim point is on, with no roll; one without it turns straight toward the aim point by at most full_rotthrust × the frame time and has its velocity set along its new facing at full_thrust/drag. A weapon whose shooter is not a player has its turning scaled by difficulty: 0.20, 0.70, 1.00, 1.20, and 1.40 from Trainee to Insane. | Descent3/WeaponFire.cpp L1413–1418Descent3/WeaponFire.cpp L1420–1443Descent3/WeaponFire.cpp L1445–1457Descent3/AImain.cpp L2206–2208Descent3/difficulty.cpp L16Descent3/difficulty_external.h L7–11 | Code |
In Descent 3's released source, every 3 to 5 seconds an AI object that is more than barely aware and has its fourth goal slot free can take fright, by one of three tests on its own life_preservation (lp), the first two only for generic objects (robots, buildings, clutter, and powerups): its shields are under lp of its hit points, it dodged an enemy shot since the last check, it has fewer than 2 friends near, and a random number below lp; or it lost more than 25% × (1 − lp) of the shields it had some checks ago, and a random number below lp; or lp is over 0.5 and the friends it had are gone while enemies remain. Frightened, it wanders at its flee speed, facing the way it moves, for 10 × lp + 5 seconds. | Descent3/AImain.cpp L6704–6709Descent3/AImain.cpp L6640–6645Descent3/AImain.cpp L6651–6686Descent3/AImain.cpp L4995–4996Descent3/AIGoal.cpp L1700–1706Descent3/object_external.h L172 | Code |