25#define COLLISION_MASS_DIFFERENCE_SCALE(objectMass, partnerMass) \
26 (((objectMass) - (partnerMass)) << 8)
32#define COLLISION_MAXIMUM_VELOCITY(obj) \
33 g_asShipMaximumVelocity[obj]
78 short desiredDistance;
92 desiredPosition = direction;
94 (
unsigned int *)&desiredPosition,
102 &desiredPosition, &positionError);
103 vector = positionError;
214 desiredDistance = 250;
217 desiredDistance = 800;
224 ((
int)desiredDistance + 50) << 8) {
235 -((
int)desiredDistance << 8),
238 &vector, &adjustment,
477 if (view == 0 && previousView == 4) {
546 0x19000, &eyeOffset);
576 -0x4b000, &eyeOffset);
590 0x25800, &eyeOffset);
649 short forwardDistance,
int rightOffset,
656 (
int)forwardDistance << 8, &offset);
659 rightOffset, &offset);
683 for (star = 40; star < 55; star++) {
712 unsigned char scaleShift;
728 200 << 8, &cameraMotion);
735 for (slot = 40; slot < 55; slot++) {
738 if (hazardFlag == 0) {
746 }
else if (slot < 48) {
788 0, (
short)(motion.
z >> 8)) * 2 +
797 scaleShift = (
unsigned char)(motion.
z <= 0 ? 9 : 8);
798 rightOffset = ((int)lateralSpread << scaleShift) + motion.
x;
799 dustUp = ((int)upSpread << scaleShift) + motion.
y;
800 start_dust(slot, delta, range, rightOffset, dustUp);
824 short projectileDetonated;
837 projectileDetonated = 0;
839 for (missile = 0; missile < 10; missile++) {
847 projectileDetonated = 1;
851 if (projectileDetonated == 0 &&
count_down(obj) == 0) {
959 for (gun = 0; gun < 3; gun++) {
1016 }
else if (obj == 0) {
1226 if (
alert_flag(obj, 1) != 0 && accel < 0x500)
1240 size) + 0x200) >> 1;
1264 unsigned char *sequence;
1275 entry = *(
unsigned short *)(sequence +
1277 switch (entry & 0xf000) {
1280 entry = *(
unsigned short *)(sequence +
1294 switch (entry & 0x0c00) {
1367 for (fragments = 0; fragments < destructionChance; fragments++) {
1382 short adaptiveDamageScale;
1403 if (collider != -1) {
1405 (collider == 0 || obj == 0))
1422 if (collider == 0) {
1428 &relativePosition, &cameraSpace,
EYE_OBJECT);
1431 if (abs(impactBearing.
pitch) < 45) {
1432 if (abs(impactBearing.
yaw) < 45)
1435 else if (abs(impactBearing.
yaw) > 135)
1438 else if (impactBearing.
yaw < 0)
1444 }
else if (impactBearing.
pitch < 0) {
1471 damage = (short)(adaptiveDamageScale * damage /
1480 &component, collider);
1490 (
unsigned short)(scale * 2);
1515 (
int)objectMass << 8, &component);
1518 &component, collider);
1556 (
signed char)collider;
1564 forceMagnitude =
MinInt(forceMagnitude, 0x7d000);
1566 forceMagnitude, &component);
1574 &component, &offAxis);
1582 impactDamage = (short)((impactDamage * impactDamage) >> 1);
1583 total = otherMass + objectMass;
1585 objectMass, otherMass) /
1591 (
int)objectMass * 0x600,
1618 &otherComponent, &offAxis);
1619 elasticity = ((objectMass + objectMass) << 8) / total;
1637 &offAxis, collider);
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)
unsigned int approach_zero_speed(short ship)
void housekeep_power_plant_and_fuel(short ship)
void replenish_shields(short ship)
void apply_force_to_object(FixedVector *point, FixedVector *force, short obj)
void set_special(short ship, short special)
short count_down(short obj)
short ShipExplosion(short obj)
short HasShipCockpitGunDisplay(short ship)
void make_shard(short asteroid, FixedVector direction)
short MaxShort(short a, short b)
long MultiplyFixed(int left, int right)
void initialize_view_buffer(void)
void SetViewportRect(Viewport *viewport, unsigned short left, unsigned short top, unsigned short right, unsigned short bottom)
short explode(short attacker, short victim)
void fix_objects_ijk(short obj)
void FillFixedVectorWithRandomComponents(short limit, FixedVector *vector)
unsigned int generate_stars(void)
void rotate_about_i(short angle, FixedVector *j, FixedVector *k)
int dot_product(const FixedVector *left, const FixedVector *right)
void SetPaletteEntry(short index, short *rgb)
void object_collision(short obj)
void UpdateSavedTorpedoTargetLock(void)
void remove_object(short obj)
void house_keep_objects(void)
void alter_pitch(short angle, short obj)
void UpdateTargetCameraObject(short obj)
void CompleteStarSystemJump(void)
long Vector_magnitude(const FixedVector *vector)
void Create_explosion_debris(short obj)
void AddFixedVectors(const FixedVector *left, const FixedVector *right, FixedVector *sum)
unsigned int match_rotation_goal(short *rotation, short *goal, short totalError, short rate)
void rotate_object_to_goal(short obj)
short easy2see(short obj)
void alter_roll(short angle, short obj)
short unactive(short ship)
void position_relative_ijk(FixedVector *position, short obj, short right, short up, short forward)
void ScaleFixedVector(FixedVector *vector, int scale, FixedVector *result)
void replenish_weapon_energy_bank(short ship)
void object_intelligence(short obj)
void HandleCannedSceneBufferBoundary(void)
short check_for_collision(short obj)
void FF_missile_intelligence(short obj)
short onboard_explosion(short obj)
void ClearTargetCameraView(void)
void rotational_acceleration(FixedVector *point, FixedVector *force, short obj)
short FixedToShortSaturating(int value)
short CountShipCockpitGunDisplays(short ship)
short MinShort(short a, short b)
short get_ship_max_velocity(short obj)
short inflict_damage(short attacker, short victim, short damage, const FixedVector *impactDirection)
void point_ship(short obj, short turnRate, const FixedVector *direction)
short distance_from_object(short obj, short other)
void extra_hazard(short obj)
void copy_frame(short source, short destination)
short signed_random(short range)
void SetTargetCameraEyePosition(short cameraMode)
void accelerate_and_move_object(short obj)
void alter_yaw(short angle, short obj)
void force_view(int view, short obj)
short GetVectorMagnitude(const FixedVector *vector)
short IsCockpitExplosionActive(void)
unsigned int rotate_object(short obj)
void SaveTorpedoTargetLockForViewChange(int previousView)
void RecordCannedSceneObjectState(short obj)
void SetFleetOverviewView(short initializeCockpit)
short GetAdaptiveTurnRate(void)
void animate_shape(short obj)
unsigned int rotate_eye_to_goal(void)
long DivideFixed(int numerator, int denominator)
void zero_vector(FixedVector *vector)
void SubtractFixedVectors(FixedVector *left, FixedVector *right, FixedVector *difference)
void ship_intelligence(short obj)
unsigned int update_star_field(void)
void ClearViewport(Viewport *viewport, short colour)
void UpdateShipTurretGuns(int ship)
short find_vacant_3d_object(void)
void SpawnMissionEjectionPod(short obj)
void get_facing_range_from_object(short obj, short other)
void PlaySfxWaveFileByNumber(int soundNumber, int sourceObject, int looping)
void rectangular_to_spherical(const FixedVector *rectangular, SphericalVector *spherical)
unsigned int shrink_vector(FixedVector *vector)
void initialize_cockpit(signed char mode)
void UpdateFleetOverviewCameraRotation(void)
void capital_ship_intelligence(short obj)
unsigned int new_view(int view, short obj)
void futurion_intelligence(short obj)
void chaff_intelligence(short obj)
void NormalizeAndScaleVector(FixedVector *vector, int scale)
void mine_intelligence(short obj)
void send_message(short obj, signed char message)
void ClampVectorTo30(short *p)
void stationary_intelligence(short obj)
void RecordCannedSceneObjectEvent(short obj, int event)
void divide_vector(FixedVector *vector, int divisor, FixedVector *result)
void heat_seeking_missile_intelligence(short obj)
unsigned int set_eye_direction_and_position(void)
void vector_component_in_dir(const FixedVector *vector, const FixedVector *direction, FixedVector *component)
unsigned int start_dust(short obj, FixedVector origin, short forwardDistance, int rightOffset, int upOffset)
void free_view_buffer(void)
unsigned short RandomInRange(unsigned short lo, unsigned short hi)
void set_objects_data(short obj, short type, short owner, short matchObjectClass)
void animate_object(short obj)
short normal_speed(short obj)
void update_objects_in_space(void)
void ApplyCannedSceneFrameEvents(void)
void update_hazards(void)
void reset_maneuver(short ship, short maneuver)
short RandomBelowOrEqual(short n)
void explosion_shock_wave(short obj, short blastDamage)
void hit_asteroid(short asteroid, short destructionChance)
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)
short alert_flag(short ship, unsigned int bits)
int GetShipAccelerationRate(short ship)
Shared Win32 declarations, types and library interfaces.
#define OBJECT_DATA_CHAFF_POD
#define SPACE_LAST_MOVING_OBJECT
@ OBJECT_DATA_EJECTION_POD
@ OBJECT_DATA_PROJECTILE_IMPACT_EFFECT
@ OBJECT_DATA_SHIP_DAMAGE_EFFECT_FIRST
#define OBJECT_DATA_INDEX(sourceType)
#define OBJECT_DATA_TORPEDO
@ OBJECT_DATA_SPICULUM_IMAGE_RECOGNITION_MISSILE
@ OBJECT_DATA_DART_DUMB_FIRE_MISSILE
@ OBJECT_DATA_PILUM_FRIEND_OR_FOE_MISSILE
@ OBJECT_DATA_JAVELIN_HEAT_SEEKING_MISSILE
@ SPECIAL_MANEUVER_STOP_DRIFT
@ SPECIAL_MANEUVER_SUPER_BRAKE
@ SPECIAL_MANEUVER_UNKNOWN_9
@ SPECIAL_MANEUVER_KILL_ENGINES
@ SPECIAL_MANEUVER_AFTERBURNER
@ OBJECT_CLASS_FIXED_OBJECT
@ OBJECT_CLASS_CAPITAL_SHIP
@ OBJECT_CLASS_PROJECTILE
short g_asObjectScreenAngle[SPACE_OBJECT_COUNT]
HazardField * g_pActiveHazardField
short g_asShipCloakCooldown[10]
short g_27_aasGunCooldown[10][3]
short g_asObjectCollisionRadius[SPACE_OBJECT_COUNT]
short g_asProjectileEvasionTicks[8]
short g_asShipAfterburnerTimer[10]
short g_bApplyingCollisionDamage
short g_nExternalViewShip
short g_nSpaceBlastFlashIncrement
short g_asShipFriendlyFireCooldown[10]
short g_2_nExternalViewDistanceValue
short g_nTargetCameraObject
int g_nCockpitDisplayMode
short g_nTargetLockMusicCooldown
short g_anObjectRollRotation[SPACE_OBJECT_COUNT]
signed char g_bSceneEscapeRequested
short g_7_asShipBurstStageCountdown[10]
short g_1_nStarFieldIRotation
short g_nPlayerCollisionObject
signed char g_acShipExhaustHeat[16]
short g_asSpikeriCooldown[16]
short g_aeObjectClass[SPACE_OBJECT_COUNT]
signed char g_acLastCollisionObject[SPACE_OBJECT_COUNT]
signed char g_abProjectileCollisionBonus[SPACE_OBJECT_COUNT]
short g_nSelectedReleaseWeaponIndex
signed char g_acShipTarget[16]
short g_anObjectYawRotation[SPACE_OBJECT_COUNT]
short g_asObjectType[SPACE_OBJECT_COUNT]
short g_nCannedSceneRecordedFrameCountNumber
short g_9_aasCockpitHitPaletteFades[6][3]
short g_asObjectFlip[SPACE_OBJECT_COUNT]
signed char g_acShipCollisionCooldown[16]
ObjectTypeData g_aObjectTypeData[OBJECT_DATA_COUNT]
short g_asPlayerHitsCreditValues[10]
signed char g_cViewObject
FixedVector g_aShipForwardVector[SPACE_OBJECT_COUNT]
short g_nStarFieldJRotationNumber
short g_asObjectScreenX[SPACE_OBJECT_COUNT]
short g_nSavedTargetLockCountdown
FixedVector g_vStarFieldMotion
short g_asShipCloakElapsedFrames[10]
short g_nSpaceExplosionFlashActive
int g_9_nTargetCameraOverlayMode
short g_aeSpecialManeuver[12]
unsigned short g_asObjectScale[SPACE_OBJECT_COUNT]
FixedVector g_aShipRightVector[SPACE_OBJECT_COUNT]
short g_bJumpSequenceActive
FixedVector g_vPreviousStarFieldMotion
short g_nCannedSceneBufferNearCapacityFlag
signed char g_acObjectOwner[SPACE_OBJECT_COUNT]
signed char g_abShipNavPointIndex[16]
short g_bPlayerCollisionEnabled
short g_6_nHomeOperationShipIndexValue
short g_asObjectDamage[SPACE_OBJECT_COUNT]
signed char g_bLandingCommRequestPending
short g_anObjectPitchRotation[SPACE_OBJECT_COUNT]
short g_nRenderedSpaceFrame
short g_nSpacePaletteFadeMode
short g_asObjectAnimationIndex[SPACE_OBJECT_COUNT]
short g_bCarrierLandingEnabled
signed char g_acObjectCollisionGraceTicks[SPACE_OBJECT_COUNT]
short g_nSavedPlayerTarget
int g_anShipSpeed[SPACE_OBJECT_COUNT]
short g_aSpaceExplosionFlashPalette[13][3]
unsigned char g_aShipWeapons[10][0xA1]
short g_2_asFlakCooldownTable[16]
short g_asMissileProximityFuseValues[16]
Viewport g_27_stViewScratchInfo
FixedVector g_vPlayerAcceleration
int g_anShipCloakState[10]
short g_1_asSpacePaletteFade[3]
unsigned char g_bPrimaryViewBufferColour
short g_bAlternateChaseView
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
unsigned char g_cPrimaryViewBufferColour
short g_7_nExternalViewTimeout
FixedVector g_aShipUpVector[SPACE_OBJECT_COUNT]
short g_nTargetCameraFrame
short g_asShipManeuver[12]
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
short g_asShipMissionIndex[12]
int g_nCapitalShipViewDistance
short g_bTargetLockActive
signed char g_1_cStoredViewDisplayModeValue
short g_asShipTurretFireEnabled[10]
MissionShipRecord g_aMissionShips[MISSION_SHIP_COUNT]
short g_nFleetOverviewPitch
short g_nCannedSceneSegmentEndFrame
signed char g_acShipLastAttacker[16]
short g_asIntelligenceEvent[12]
signed char g_acObjectType[SPACE_OBJECT_COUNT]
short g_5_nCannedSceneFrameCount
FixedVector g_vCollisionDelta
signed char g_acObjectAnimationDelay[SPACE_OBJECT_COUNT]
short g_asObjectCounter[SPACE_OBJECT_COUNT]
short g_nPendingEjectionShip
short g_bSavedPlayerTarget
short g_bMissionDeathSequencePending
short g_nTargetLockCountdown
short g_asObjectViewFrame[SPACE_OBJECT_COUNT]
short g_bStarSystemJumpTransition
short g_nFleetOverviewYaw
short g_nCockpitCameraObject
#define COLLISION_MAXIMUM_VELOCITY(obj)
int g_nChaseCameraMaximumVelocity
FixedVector g_vExternalViewOffset
#define COLLISION_MASS_DIFFERENCE_SCALE(objectMass, partnerMass)
unsigned char * animation