22 return velocity + velocity / 3;
78 return acceleration + acceleration / 3;
113 short right,
short up,
short forward)
124 if (value < -0x7fff00)
126 else if (value > 0x7fff00)
129 return (
short)(value >> 8);
184 return left->
x == right->
x && left->
y == right->
y &&
193 return ((values[1] == values[0]) == values[2]) == 0;
199 vector->
x = vector->
y = vector->
z = 0;
205 vector->
x = -vector->
x;
206 vector->
y = -vector->
y;
207 vector->
z = -vector->
z;
214 sum->
x = right->
x + left->
x;
215 sum->
y = right->
y + left->
y;
216 sum->
z = right->
z + left->
z;
223 difference->
x = left->
x - right->
x;
224 difference->
y = left->
y - right->
y;
225 difference->
z = left->
z - right->
z;
231 delta->
x = to->
x - from->
x;
232 delta->
y = to->
y - from->
y;
233 delta->
z = to->
z - from->
z;
293 if (spherical->
radius == 0)
298 if (rectangular->
x < 0)
299 spherical->
yaw = -spherical->
yaw;
310 destination->
x = (short)(source->
x >> 8);
311 destination->
y = (short)(source->
y >> 8);
312 destination->
z = (short)(source->
z >> 8);
331 return (
short)((cosine * 100) / 0x100);
351 if (magnitude != 0) {
367 normalized = *vector;
390void copy_frame(
short source,
short destination);
556 1, 0, 0, 0, 1, 0, 0, 1, 1, 0,
557 0, 0, 1, 1, 1, 0, 0, 1, 1, 0
625 short *yawGoal,
short *pitchGoal)
632 if (pointingMode == 1) {
634 if (spherical.
radius == 0)
636 if (spherical.
yaw > 0)
637 spherical.
yaw = (short)(spherical.
yaw - turnRate);
639 spherical.
yaw = (short)(spherical.
yaw + turnRate);
649 if (localDirection.
z < 0) {
650 spherical.
yaw = (short)-spherical.
yaw;
651 if (spherical.
pitch > 0)
652 spherical.
pitch = (short)(spherical.
pitch + 180);
654 spherical.
pitch = (short)(spherical.
pitch - 180);
656 if (spherical.
pitch > 0)
657 spherical.
pitch = (short)(spherical.
pitch - turnRate);
659 spherical.
pitch = (short)(spherical.
pitch + turnRate);
779 candidate++, position++) {
780 if (candidate != obj &&
833 for (slot = 1; slot <= 9; slot++) {
870 for (slot = 0; slot < 20; slot++) {
929 rotationalMass) >> 8;
933 rotationalMass) >> 8;
937 rotationalMass) >> 8;
1005 }
else if (*p > 0) {
1083 if (range <= radius)
1100 if (range > 0xfffe00)
1122 (3 - dustSize) * 4);
1171 rollAngle = (short)
ArcCos(flatUp.
y);
1174 rollAngle = 360 - rollAngle;
1179#pragma function(strcat, strcpy, strlen)
1193 char numberString[4];
1194 short directionIndex;
1209 forwardAxis.
z = 0x100;
1220 pitchBand = (short)(angles.
pitch / 30 + 3);
1221 if (angles.
pitch % 30 > 15)
1222 pitchBand =
MinShort(6, (
short)(pitchBand + 1));
1223 else if (angles.
pitch % 30 < -15)
1224 pitchBand =
MaxShort(0, (
short)(pitchBand - 1));
1225 yawIndex = (short)((12 - angles.
yaw / 30) % 12);
1226 if (angles.
yaw % 30 > 15)
1227 yawIndex = (short)((yawIndex + 11) % 12);
1228 else if (angles.
yaw % 30 < -15)
1229 yawIndex = (short)((yawIndex + 1) % 12);
1230 switch (pitchBand) {
1239 directionIndex = (short)((pitchBand - 1) * 12 + yawIndex + 1);
1242 directionIndex = 61;
1245 projectedUpVector.
z = 0;
1251 twist =
ArcCos(projectedUpVector.
y);
1252 if (projectedUpVector.
x >= 0)
1253 twist = (short)(360 - twist);
1269 twist = (short)(twist + 90);
1272 twist = (short)(twist - 90);
1275 twist = (short)(twist % 360);
1277 twist = (short)(twist + 360);
1285 for (slotIndex = 0; slotIndex < 4; slotIndex++) {
1300 if (packetGroup != 0 &&
1309 strcpy(fileName,
"ship.v");
1312 strcpy(fileName,
"xship.v");
1313 itoa((
int)shipType, numberString, 10);
1314 if (strlen(numberString) == 1)
1315 strcat(fileName,
"0");
1316 strcat(fileName, numberString);
void clear_alert(short obj)
void SetVectorFixedPoint(unsigned int *p, short v)
short match_roll_orientation(short obj, short reference)
void transform_to_objects_frame(const FixedVector *source, FixedVector *destination, short obj)
void ComputeVectorDelta(FixedVector *from, FixedVector *to, FixedVector *delta)
short IsVectorWithinRange(FixedVector *vector, short range)
void CheckHeapBlockSignature(unsigned char *shape)
void damage_ion_drive(short ship, short amount, short maximum)
void apply_force_to_object(FixedVector *point, FixedVector *force, short obj)
void get_facing_range_from_point(short obj, const FixedVector *point)
short MaxShort(short a, short b)
long MultiplyFixed(int left, int right)
short distance_between_points(const FixedVector *from, const FixedVector *to)
void initialize_view_buffer(void)
unsigned int IdentityWord(unsigned int v)
void fix_objects_ijk(short obj)
void point_ship_at_object(short obj, short other)
short distance_from_point(short obj, const FixedVector *point)
void FillFixedVectorWithRandomComponents(short limit, FixedVector *vector)
void rotate_about_i(short angle, FixedVector *j, FixedVector *k)
int dot_product(const FixedVector *left, const FixedVector *right)
void remove_object(short obj)
void alter_pitch(short angle, short obj)
long Vector_magnitude(const FixedVector *vector)
void AddFixedVectors(const FixedVector *left, const FixedVector *right, FixedVector *sum)
void position_child(short parent, short weapon, FixedVector *position)
void draw_nav_pointer(void)
void point_capital_ship_at_object(short obj, short other)
void alter_roll(short angle, short obj)
void position_relative_ijk(FixedVector *position, short obj, short right, short up, short forward)
void ScaleFixedVector(FixedVector *vector, int scale, FixedVector *result)
short check_for_collision(short obj)
int vector_length_in_dir(const FixedVector *vector, const FixedVector *direction)
void rotational_acceleration(FixedVector *point, FixedVector *force, short obj)
short FixedToShortSaturating(int value)
short get_ship_slot(void)
long SinFixed(short degrees)
short MinShort(short a, short b)
void check_for_lost_control(short obj)
short get_ship_max_velocity(short obj)
short ChooseRandomSignedMagnitude(short minimum, short maximum, short allowNegative)
void set_background_objects_rotation(short obj, FixedVector *direction)
void point_ship(short obj, short turnRate, const FixedVector *direction)
short IsPairEqualityDifferentFromFlag(const unsigned int *values)
short distance_from_object(short obj, short other)
short vector_angle(FixedVector left, FixedVector right)
void copy_frame(short source, short destination)
long PlanarMagnitude(int x, int y)
void point_perpendicular(short obj, short other)
void * FetchDiskPacketRetrying(char *fileName, short section, short flags)
void alter_yaw(short angle, short obj)
void apply_force_to_objects_center(FixedVector *force, short obj)
short WrapDegrees(short degrees)
long CosFixed(short degrees)
void point_perpendicular_to_point(short obj, const FixedVector *point)
short set_ship_rotation_goals(short obj, short turnRate, const FixedVector *direction, short pointingMode, short *yawGoal, short *pitchGoal)
short GetAdaptiveTurnRate(void)
void rotate_about_k(short angle, FixedVector *i, FixedVector *j)
short facing_to_object(short obj, FixedVector *point)
long DivideFixed(int numerator, int denominator)
void get_right_shape(short obj, FixedVector *direction)
void zero_vector(FixedVector *vector)
void child_object(short hardpoint, short child, short parent)
void SubtractFixedVectors(FixedVector *left, FixedVector *right, FixedVector *difference)
void MakeRandomVectorFixed(short minimum, short maximum, FixedVector *vector)
void point_ship_behind_object(short obj, short other)
void position_relative(FixedVector *position, FixedVector direction, short distance)
void ConvertFixedVectorToShortVector(const FixedVector *source, ShortVector *destination)
short find_vacant_3d_object(void)
void get_facing_range_from_object(short obj, short other)
void rectangular_to_spherical(const FixedVector *rectangular, SphericalVector *spherical)
unsigned int shrink_vector(FixedVector *vector)
void point_at(short obj, FixedVector point)
void transform_objects_to_your_view(void)
void NormalizeAndScaleVector(FixedVector *vector, int scale)
void vector_cross_product(const FixedVector *left, const FixedVector *right, FixedVector *product)
void ClampVectorTo30(short *p)
void divide_vector(FixedVector *vector, int divisor, FixedVector *result)
void recalc_max_velocity(short ship)
void random_radial(const FixedVector *center, short radius, FixedVector *position)
void celerate(short ship, int delta)
short IsPointWithinRange(FixedVector *from, FixedVector *to, short range)
void vector_component_in_dir(const FixedVector *vector, const FixedVector *direction, FixedVector *component)
short equ_vector(const FixedVector *left, const FixedVector *right)
void free_view_buffer(void)
unsigned short RandomInRange(unsigned short lo, unsigned short hi)
void FreePacketAndClear(void *slot, unsigned short releaseFlags)
unsigned int SignFixed(int v)
void point_ship_at_point(short obj, const FixedVector *point)
void point_parallel(short obj, short other)
short RandomBelowOrEqual(short n)
short NormalizeFixedVector(FixedVector *vector)
void drain_fuel(short ship, short amount)
void negate_vector(FixedVector *vector)
void rotate_about_j(short angle, FixedVector *i, FixedVector *k)
int GetShipAccelerationRate(short ship)
void point_ship_below_object(short obj, short other)
Shared Win32 declarations, types and library interfaces.
#define SCRATCH_VIEW_OBJECT
#define SPACE_LAST_MOVING_OBJECT
#define DIRECTION_VIEW_COUNT
#define SPACE_OBJECT_COUNT
@ OBJECT_CLASS_FIXED_OBJECT
@ OBJECT_CLASS_CAPITAL_SHIP
@ OBJECT_CLASS_PROJECTILE
int g_nFacingRangeQueryCount
short g_asObjectScreenAngle[SPACE_OBJECT_COUNT]
short g_asObjectCollisionRadius[SPACE_OBJECT_COUNT]
unsigned char * g_apObjectShape[SPACE_OBJECT_COUNT]
short g_asObjectDistance[SPACE_OBJECT_COUNT]
signed char g_abHazardObjects[0x14]
short g_anObjectRollRotation[SPACE_OBJECT_COUNT]
signed char g_acShipIonDriveDamage[16]
short g_aeObjectClass[SPACE_OBJECT_COUNT]
short g_anObjectYawRotation[SPACE_OBJECT_COUNT]
short g_asObjectType[SPACE_OBJECT_COUNT]
short g_asObjectFlip[SPACE_OBJECT_COUNT]
ObjectTypeData g_aObjectTypeData[OBJECT_DATA_COUNT]
int g_abObjectShapeOwned[SPACE_OBJECT_COUNT]
FixedVector g_137_aDirectionViewUpVectorArray[DIRECTION_VIEW_COUNT]
FixedVector g_aShipForwardVector[SPACE_OBJECT_COUNT]
short g_asLoadedShipViewFrame[12]
short g_asObjectScreenX[SPACE_OBJECT_COUNT]
short g_asShipIntelSlot[10]
short g_asShipCloakElapsedFrames[10]
signed char g_acShipPortrait[12]
unsigned short g_asObjectScale[SPACE_OBJECT_COUNT]
FixedVector g_aShipRightVector[SPACE_OBJECT_COUNT]
int g_anCloakVisibilityPattern[20]
signed char g_acObjectOwner[SPACE_OBJECT_COUNT]
short g_asShipIntelResourceKey[10]
short g_asObjectScreenScale[SPACE_OBJECT_COUNT]
signed char g_acDirectionShapeFlip[DIRECTION_VIEW_COUNT *DIRECTION_SHAPE_TABLE_COUNT]
short g_anObjectPitchRotation[SPACE_OBJECT_COUNT]
FixedVector g_9_aDirectionLookRightVector[DIRECTION_VIEW_COUNT]
short g_asShipMaximumVelocity[12]
unsigned char g_aShipWeapons[10][0xA1]
Viewport g_27_stViewScratchInfo
short g_nNavPointerObject
int g_anShipCloakState[10]
signed char g_acShipPendingMessage[16]
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
short g_bExpandedShipGraphicsEnabled
FixedVector g_aShipUpVector[SPACE_OBJECT_COUNT]
short g_asShipManeuver[12]
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
void ** g_apPacketReferenceGroups[5]
ObjectResourceSlot g_aObjectResourceSlots[5]
signed char g_acDirectionShapeFrame[DIRECTION_VIEW_COUNT *DIRECTION_SHAPE_TABLE_COUNT]
signed char g_acObjectType[SPACE_OBJECT_COUNT]
FixedVector g_vCollisionDelta
short g_asObjectScreenY[SPACE_OBJECT_COUNT]
FixedVector g_2_vNormalizedToTgt
short g_asObjectCounter[SPACE_OBJECT_COUNT]
short g_asObjectViewFrame[SPACE_OBJECT_COUNT]