42 sectionEnd = (int)((
unsigned int)result + handle->
dataSize);
48 position = (int)((
unsigned int)result + handle->
position);
51 position = sectionEnd;
55 if (result > position)
57 if (sectionEnd < position && handle->finalSection == 0)
58 position = sectionEnd;
72 unsigned char *indices,
75 unsigned char *active;
84 memset(active, 0, (
unsigned int)capacity);
86 for (index = 0; index < capacity; index++) {
87 if (active[index] != 0)
88 indices[count++] = (
unsigned char)index;
101 return velocity + velocity / 3;
147 return acceleration + acceleration / 3;
184 short right,
short up,
short forward)
195 if (value < -0x7fff00)
197 if (value > 0x7fff00)
199 return (
short)(value >> 8);
242 return (
unsigned short)(0 < v);
250 return v > 0 ? 0x100 : 0;
257 short v = degrees % 0x168;
269 return left->
x == right->
x && left->
y == right->
y &&
276 return ((values[1] == values[0]) == values[2]) == 0;
290 vector->
x = -vector->
x;
291 vector->
y = -vector->
y;
292 vector->
z = -vector->
z;
299 sum->
x = right->
x + left->
x;
300 sum->
y = right->
y + left->
y;
301 sum->
z = right->
z + left->
z;
308 difference->
x = left->
x - right->
x;
309 difference->
y = left->
y - right->
y;
310 difference->
z = left->
z - right->
z;
316 delta->
x = to->
x - from->
x;
317 delta->
y = to->
y - from->
y;
318 delta->
z = to->
z - from->
z;
389 if (spherical->
radius == 0)
394 if (rectangular->
x < 0)
395 spherical->
yaw = -spherical->
yaw;
408 int horizontalLength;
424 destination->
x = (int)source->
x << 8;
425 destination->
y = (int)source->
y << 8;
426 destination->
z = (int)source->
z << 8;
435 destination->
x = (short)(source->
x >> 8);
436 destination->
y = (short)(source->
y >> 8);
437 destination->
z = (short)(source->
z >> 8);
455 return (
short)(((short)
dot_product(&left, &right) * 100) / 0x100);
475 if (magnitude != 0) {
490 normalized = *vector;
751 short *yawGoal,
short *pitchGoal)
758 if (pointingMode == 1) {
760 if (spherical.
radius == 0)
762 if (spherical.
yaw > 0)
763 spherical.
yaw = (short)(spherical.
yaw - turnRate);
765 spherical.
yaw = (short)(spherical.
yaw + turnRate);
775 if (localDirection.
z < 0) {
776 spherical.
yaw = (short)-spherical.
yaw;
777 if (spherical.
pitch > 0)
778 spherical.
pitch = (short)(spherical.
pitch + 180);
780 spherical.
pitch = (short)(spherical.
pitch - 180);
782 if (spherical.
pitch > 0)
783 spherical.
pitch = (short)(spherical.
pitch - turnRate);
785 spherical.
pitch = (short)(spherical.
pitch + turnRate);
932 other++, position++) {
980 for (slot = 1; slot <= 9; slot++)
1014 for (slot = 0; slot < 20; slot++) {
1065 rotationalMass) >> 8);
1069 rotationalMass) >> 8);
1073 rotationalMass) >> 8);
1180 if (projection < 0x94)
1227 distance > (1400 << 8)) {
1247 if (distance <= objectRadius)
1248 distance = objectRadius + 1;
1252 distance - objectRadius);
1253 screenScale = (short)(
1257 if ((
unsigned short)screenScale >= 0x2000)
1258 screenScale = 0x2000;
1260 if ((
unsigned short)screenScale <= 4) {
1267 (
unsigned short)(distance >> 8);
1292 (3 - dustSize) * 4);
1332 angle = (short)
ArcCos(projectedUp.
y);
1334 if (projectedUp.
x >= 0)
1335 angle = 360 - angle;
1354 short directionIndex;
1370 pitchBand = (short)(spherical.
pitch / 30 + 3);
1371 remainder = (short)(spherical.
pitch % 30);
1372 if (remainder > 15) {
1373 pitchBand = (short)(pitchBand + 1 < 6 ? pitchBand + 1 : 6);
1374 }
else if (remainder < -15) {
1375 pitchBand = (short)(pitchBand - 1 > 0 ? pitchBand - 1 : 0);
1377 yawSector = (short)((12 - spherical.
yaw / 30) % 12);
1378 remainder = (short)(spherical.
yaw % 30);
1380 yawSector = (short)((yawSector + 11) % 12);
1381 else if (remainder < -15)
1382 yawSector = (short)((yawSector + 1) % 12);
1384 switch (pitchBand) {
1393 directionIndex = (short)(pitchBand * 12 + yawSector - 11);
1396 directionIndex = 61;
1406 angle = (short)
ArcCos(projectedUp.
y);
1407 if (projectedUp.
x >= 0)
1408 angle = (short)(360 - angle);
1432 for (slot = 1; slot < 3; slot++) {
1452 (
signed char)(type + 22);
void(__cdecl *pIxFree)(void *)
void ConvertSphericalToRectangular(const SphericalVector *spherical, FixedVector *rectangular)
void ComputeObjectToPointDelta(short obj, FixedVector *point, FixedVector *delta)
void ComputeObjectToObjectDelta(short obj, short other, FixedVector *delta)
signed char acShipRating[16]
short asObjScreenScalesArray[SPACE_OBJECT_COUNT]
signed char acDirectionShapeFrame[DIRECTION_VIEW_COUNT *DIRECTION_SHAPE_TABLE_COUNT]
short asObjScreenAngles[SPACE_OBJECT_COUNT]
enum ShipManeuver aeShipManeuversTable[12]
ObjectTypeData aObjectTypeData[OBJECT_TYPE_COUNT]
short anObjectRollRotationList[SPACE_OBJECT_COUNT]
short anObjectYawRotation[SPACE_OBJECT_COUNT]
short anObjPitchRot[SPACE_OBJECT_COUNT]
signed char acWingmanMessageStatesArray[16]
signed char acShipIonDriveDmg[16]
FixedVector aDirectionViewUpVectorArray[DIRECTION_VIEW_COUNT]
FixedVector aObjectViewPositionsList[SPACE_OBJECT_COUNT]
short asShipMaximumSpeedArray[16]
short nFacingToTargetValue
FixedVector aShipRightVector[64]
short asObjAfterburnerVelocities[SPACE_OBJECT_COUNT]
enum ObjectClass aeObjectClass[SPACE_OBJECT_COUNT]
signed char acShipPointingModeList[16]
short asObjectScreenYArray[SPACE_OBJECT_COUNT]
short nClosestVisibleObject
FixedVector aShipVelocity[SPACE_OBJECT_COUNT]
short asObjectCollisionRadius[64]
short asCapitalShipViewFramesTable[16]
short asPreviousObjectDistance[SPACE_OBJECT_COUNT]
void * aapPacketReferences[4][0x25]
unsigned short asObjDistancesTable[SPACE_OBJECT_COUNT]
Viewport stSpaceBufferViewport
signed char cCapitalShipLogicalFile
short asObjectCounterArray[SPACE_OBJECT_COUNT]
FixedVector aShipUpVector[64]
short asObjectScreenXList[SPACE_OBJECT_COUNT]
signed char acObjOwnersTable[64]
short nCurrentSpaceFrameValue
unsigned short awObjectScales[SPACE_OBJECT_COUNT]
struct Shape * apObjShapeArray[SPACE_OBJECT_COUNT]
enum ObjectType aeObjectTypeList[SPACE_OBJECT_COUNT]
short asObjectViewFrames[SPACE_OBJECT_COUNT]
ObjectResourceSlot aObjectResourceSlotsArray[4]
short asObjectFlipArray[SPACE_OBJECT_COUNT]
unsigned short awObjMassArray[SPACE_OBJECT_COUNT]
FixedVector aShipPositionsArray[SPACE_OBJECT_COUNT]
ShortVector aChildOffsets[56]
FixedVector aShipFwdVec[64]
signed char abHazardObjects[0x14]
FixedVector vCollisionDelta
FixedVector aDirectionViewRightVector[DIRECTION_VIEW_COUNT]
signed char acDirectionShapeFlip[DIRECTION_VIEW_COUNT *DIRECTION_SHAPE_TABLE_COUNT]
FixedVector vNormalizedToTarget
Umbrella header for the game core.
void clear_alert(short obj)
short match_roll_orientation(short obj, short reference)
void transform_to_objects_frame(const FixedVector *source, FixedVector *destination, short obj)
void * AllocateTaggedMemory(int size, unsigned short flags)
void damage_ion_drive(short ship, short amount, short maximum)
void apply_force_to_object(FixedVector *point, FixedVector *force, short obj)
unsigned short __stdcall GetFontCharWidth(char i)
void get_facing_range_from_point(short obj, const FixedVector *point)
long MultiplyFixed(int left, int right)
short distance_between_points(const FixedVector *from, const FixedVector *to)
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 ship_vs_ship(short obj, short other)
void FillFixedVectorWithRandomComponents(short limit, FixedVector *vector)
int set_ship_rotation_goals(short obj, short turnRate, const FixedVector *direction, short pointingMode, short *yawGoal, short *pitchGoal)
void rotate_about_i(short angle, FixedVector *j, FixedVector *k)
int dot_product(const FixedVector *left, const FixedVector *right)
void __stdcall MarkActivePaletteEntries(Viewport *viewport, unsigned char *active)
void remove_object(short obj)
void MakeRandomNormalizedVector(FixedVector *vector)
int __stdcall SeekDataFile(unsigned short fd, int offset, unsigned int origin)
short recalc_max_velocity(short ship)
void alter_pitch(short angle, short obj)
long Vector_magnitude(const FixedVector *vector)
void * FetchDiskPacketRetrying(short logicalFile, short section, short flags)
void AddFixedVectors(const FixedVector *left, const FixedVector *right, FixedVector *sum)
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)
int equ_vector(const FixedVector *left, const FixedVector *right)
int __stdcall SeekPacketSection(PacketSectionHandle *handle, int offset, short origin)
short __stdcall MeasureTextPixelWidthClamped(const char *text)
unsigned int IsPointWithinRange(const FixedVector *from, const FixedVector *to, short range)
short check_for_collision(short obj)
unsigned short IsPointWithinEyeViewCone(const FixedVector *point)
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)
unsigned int GetScreenUpdateFlag(void)
short get_ship_max_velocity(short obj)
unsigned short GetMusicDriverPresent(short mode)
void set_background_objects_rotation(short obj, FixedVector *direction)
void point_ship(short obj, short turnRate, const FixedVector *direction)
short distance_from_object(short obj, short other)
int intfract_sign(int sign, int magnitude)
short vector_angle(FixedVector left, FixedVector right)
int IsPairEqualityDifferentFromFlag(const unsigned int *values)
void copy_frame(short source, short destination)
unsigned int initialize_view_buffer(void)
long PlanarMagnitude(int x, int y)
void point_perpendicular(short obj, short other)
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)
void ScaleFixedVector(const FixedVector *vector, int scale, FixedVector *result)
void SetVectorFixedPoint(FixedVector *p, short v)
void rotate_about_k(short angle, FixedVector *i, FixedVector *j)
void ship_vs_point(short obj, const FixedVector *point)
short facing_to_object(short obj, FixedVector *point)
void position_child(short parent, short hardpoint, FixedVector *position)
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)
unsigned short IdentityWord(unsigned short v)
void position_relative(FixedVector *position, FixedVector direction, short distance)
short ChooseRandomSignedMagnitude(short minimum, short maximum, int allowNegative)
void ConvertFixedVectorToShortVector(const FixedVector *source, ShortVector *destination)
short find_vacant_3d_object(void)
void get_facing_range_from_object(short obj, short other)
unsigned int IsVectorWithinRange(FixedVector *vector, short range)
void rectangular_to_spherical(const FixedVector *rectangular, SphericalVector *spherical)
unsigned int shrink_vector(FixedVector *vector)
void point_at(short obj, FixedVector point)
unsigned short SignShort(short v)
void transform_objects_to_your_view(void)
void NormalizeAndScaleVector(FixedVector *vector, int scale)
short __stdcall CollectActivePaletteIndices(Viewport *viewport, unsigned char *indices, short capacity)
void vector_cross_product(const FixedVector *left, const FixedVector *right, FixedVector *product)
void ClampVectorTo30(short *p)
void ReleasePacketHandle(void *handle)
unsigned int check_for_lost_control(short obj)
unsigned int shrink(int *component)
void divide_vector(FixedVector *vector, int divisor, FixedVector *result)
void ConvertShortVectorToFixedVector(const ShortVector *source, FixedVector *destination)
void ComputeVectorDelta(const FixedVector *from, const FixedVector *to, FixedVector *delta)
void random_radial(const FixedVector *center, short radius, FixedVector *position)
void vector_component_in_dir(const FixedVector *vector, const FixedVector *direction, FixedVector *component)
void MoveObjectAlongDirection(short obj, const FixedVector *direction, short distance)
void FreePacketAndClear(void *slot, unsigned short releaseFlags)
unsigned int SignFixed(int v)
short __stdcall RandomInRange(short lo, short hi)
void point_ship_at_point(short obj, const FixedVector *point)
unsigned int celerate(short ship, int delta)
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)
#define SPACE_LAST_MOVING_OBJECT
#define DIRECTION_VIEW_COUNT
@ OBJECT_TYPE_KILRATHI_BASE
@ OBJECT_CLASS_FIXED_OBJECT
@ OBJECT_CLASS_CAPITAL_SHIP
@ OBJECT_CLASS_PROJECTILE