Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
jump.c
Go to the documentation of this file.
1/*
2 * Objectives, warp arrival and star-system jumps.
3 *
4 * Retail object 0x424A60-0x4254BF (link order; see docs/ORDER.md).
5 */
6#include "game.h"
7
8short g_nEscapedEnemyCount = 0; /* 0x004962e8 */
9short g_bStarSystemJumpTransition = 0; /* 0x004962ec */
10short g_bJumpSequenceActive = 0; /* 0x004962f0 */
11short g_nStarSystemJumpDelay = 0; /* 0x004962f4 */
12
13/* Function start: 0x424A60 */
14short find_objective(short type, short index)
15{
16 short objective;
17
18 for (objective = 0;
19 objective < (short)g_cMissionObjectiveCount;
20 objective++) {
21 if (g_aMissionObjectives[objective].type == type &&
22 (index == -1 ||
23 g_aMissionObjectives[objective].index == index))
24 return objective;
25 }
26 return -1;
27}
28
29/* Function start: 0x424AEE */
30void arrive_from_warp(short obj)
31{
32 short objective = find_objective(0, g_nCurrentNavPoint);
33
34 if (obj != 0) {
35 if (objective != -1) {
37 g_abFlightPath[objective]].type != 1)
38 flag_objective(objective, 1);
39 if (g_cCurrentObjective == objective)
41 }
43 if (g_asShipSide[obj] == SIDE_IMPERIAL)
45 else
47 } else {
50 }
51 unwarp(obj);
52 g_anShipSpeed[obj] =
53 (int)g_asShipMaximumVelocity[obj] << 8;
54 fix_velocity(obj);
55}
56
57/* Function start: 0x424C05 */
58void unwarp(short obj)
59{
60 short effect;
61
65 PlaySfxWaveFileByNumber(0x34, obj, 0);
66 effect = find_vacant_3d_object();
67 if (effect != -1) {
69 obj, 0);
70 g_aShipPosition[effect] = g_aShipPosition[obj];
71 g_aShipVelocity[effect] = g_aShipVelocity[obj];
73 g_asObjectCounter[obj] = 6;
75 } else {
76 g_abShipNavPointIndex[obj] = (signed char)
78 g_acObjectType[obj]].resourceType;
80 obj, 0);
82 }
83 if (obj == 0)
85}
86
87/* Function start: 0x424D4D */
88void warp(short obj)
89{
90 short effect;
91
95 PlaySfxWaveFileByNumber(0x34, obj, 0);
96 effect = find_vacant_3d_object();
97 if (effect != -1) {
99 (short)g_acObjectOwner[obj], 0);
100 g_aShipPosition[effect] = g_aShipPosition[obj];
101 g_aShipVelocity[effect] = g_aShipVelocity[obj];
103 g_asObjectCounter[obj] = 6;
105 } else {
107 (short)g_acObjectOwner[obj], 0);
109 }
110 if (g_asShipSide[obj] == SIDE_KILRATHI)
112}
113
114/* Function start: 0x424E8C */
115void MarkPilotDead(short pilot)
116{
117 g_pPilotStatus[pilot] = 0;
118}
119
120/* Function start: 0x424EA7 */
133
134/* Function start: 0x424EFF */
136{
137 short object;
138
139 if (g_asObjectType[0] != 0x33 ||
141 return;
142 for (object = 0; object < 10; object++) {
143 if (g_aeObjectClass[object] == OBJECT_CLASS_SHIP &&
144 g_asShipSide[object] == SIDE_KILRATHI) {
146 "Enemy near",
147 g_cYellowColour, 3);
148 return;
149 }
150 }
152 g_nCurStellarSystem] != 0) {
154 "Capacitors Empty",
155 g_cYellowColour, 3);
156 return;
157 }
158 for (object = 1; object < 10; object++) {
159 if (g_aeObjectClass[object] >=
161 g_asShipMissionType[object] ==
163 g_asShipMissionParameter[object] ==
167 g_cCurrentObjective].position,
168 &g_aShipDestination[object]) == 0) {
170 "Wait for %s",
171 g_apShipMissionRecord[object]->name);
174 g_cYellowColour, 3);
175 return;
176 }
177 }
179 g_nCurrentNavPoint].field_2e == 0) {
181 "No jump point",
182 g_cYellowColour, 3);
183 return;
184 }
185 if (g_ucPendingEjectionTransition != 0xff &&
191 }
192 spacetrack(0x2f, 1, 0);
193 force_view(0x0d, 0);
202 g_asShipCount[0] = 0;
204 if (g_nYourWingman != -1) {
212 }
213}
214
215/* Function start: 0x4251F2 */
217{
218 short previousDelay;
219 short destinationNavPoint;
220
221 previousDelay = g_nStarSystemJumpDelay;
223 if (previousDelay < 75) {
224 g_asObjectCounter[0] = 1;
225 } else {
232
233 for (destinationNavPoint = 0; destinationNavPoint < 10;
234 destinationNavPoint++) {
235 if (g_aMissionNavPoints[destinationNavPoint].type != 0 &&
236 g_aMissionNavPoints[destinationNavPoint]
237 .systemIndex != g_nCurStellarSystem &&
238 g_aMissionNavPoints[destinationNavPoint].field_2e !=
239 0) {
240 break;
241 }
242 }
243
244 g_anShipFuel[0] -= g_anShipFuel[0] / 2;
246 new_view(0, 0);
248 set_up_action_sphere(destinationNavPoint);
250 g_aShipPosition[0] =
251 g_aMissionNavPoints[destinationNavPoint].position;
252 g_aShipPosition[0].x +=
253 g_aMissionNavPoints[destinationNavPoint]
255 g_asObjectScale[0] =
262
263 if (g_nYourWingman != -1) {
275 g_anShipSpeed[0];
280 }
281
288 }
289}
290
291/* Linker commons defined here. LINK lays a unit's commons out by the
292 * identifiers' hash keys, so these spellings follow the original addresses. */
294int g_1_nSavedPlayerObjectCounter; /* 0x005d2fe0 */
295signed char g_acJumpDriveUsedBySystem[5]; /* 0x005d2fe8 */
void unwarp(short obj)
Definition jump.c:58
void FadeViewportPaletteToColour(Viewport *viewport, unsigned short colour, short enabled)
Definition palfade.c:10
void set_next_destination(void)
Definition cockpt.c:1319
void CompleteStarSystemJump(void)
Definition jump.c:216
void ejection_sequence(short outcome, signed char restoreCockpit)
Definition midscene.c:63
void TryBeginStarSystemJump(void)
Definition jump.c:135
void RestoreGamePalette(void)
Definition palette.c:21
void set_up_action_sphere(short navPoint)
Definition mission.c:923
void spacetrack(int track, int mode, int enabled)
Definition music.c:152
void ClearHudGunReadouts(void)
Definition cockpt.c:326
void place_ship_near_player_until_valid(short obj, short minimum, short maximum)
Definition mission.c:1043
void force_view(int view, short obj)
Definition spc.c:423
unsigned int reset_objective(short ship, short objective)
Definition logic.c:445
unsigned int fix_velocity(short obj)
Definition ship.c:712
void MarkPilotDead(short pilot)
Definition jump.c:115
void ClearViewport(Viewport *viewport, short colour)
Definition gr.c:1027
short find_vacant_3d_object(void)
Definition geom.c:841
void warp(short obj)
Definition jump.c:88
void PlaySfxWaveFileByNumber(int soundNumber, int sourceObject, int looping)
Definition music.c:490
unsigned int new_view(int view, short obj)
Definition spc.c:451
void arrive_from_warp(short obj)
Definition jump.c:30
void flag_objective(short objective, unsigned char flags)
Definition cockpt.c:1153
void RecordCannedSceneObjectEvent(short obj, int event)
Definition taperec.c:176
void reset_mission_type(short obj, short missionType)
Definition logic.c:426
short equ_vector(const FixedVector *left, const FixedVector *right)
Definition geom.c:182
void clean_up_cockpit(void)
Definition jump.c:121
void set_objects_data(short obj, short type, short owner, short matchObjectClass)
Definition ship.c:347
void ResetCannedSceneRecording(void)
Definition taperec.c:20
void set_global_message(const char *text, unsigned short colour, int flashCount)
Definition cockpt.c:363
short find_objective(short type, short index)
Definition jump.c:14
Shared Win32 declarations, types and library interfaces.
@ MISSION_TYPE_PATROL
Definition game_data.h:122
@ MISSION_TYPE_GOTO_WARP
Definition game_data.h:128
@ MISSION_TYPE_WINGMAN
Definition game_data.h:126
@ MISSION_TYPE_COME_HOME
Definition game_data.h:131
@ MISSION_TYPE_NONE
Definition game_data.h:121
@ OBJECT_TYPE_HYPERSPACE_JUMP_FLASH
Definition game_data.h:100
@ SIDE_IMPERIAL
Definition game_data.h:175
@ SIDE_KILRATHI
Definition game_data.h:176
@ OBJECTIVE_HOLD_FORMATION
Definition game_data.h:147
@ MANEUVER_WARPING_OUT
Definition game_data.h:210
@ MANEUVER_NONE
Definition game_data.h:208
@ MANEUVER_WARPING_IN
Definition game_data.h:209
@ OBJECT_CLASS_SHIP
Definition game_data.h:49
@ OBJECT_CLASS_CAPITAL_SHIP
Definition game_data.h:50
@ TACTIC_NONE
Definition game_data.h:152
@ TACTIC_SIT_STILL
Definition game_data.h:154
MissionShipRecord * g_apShipMissionRecord[10]
Definition viewrect.c:161
short g_asShipMissionParameter[12]
Definition viewrect.c:164
short g_nCurStellarSystem
Definition nav.c:1238
short g_nYourWingman
Definition viewrect.c:75
short g_78_bHighMemoryBuffersSetState
Definition cockpt.c:3839
short g_nPendingEjectionSequenceCount
Definition mission.c:14
signed char g_abFlightPath[MISSION_OBJECTIVE_COUNT]
Definition viewrect.c:68
short g_aeObjectClass[SPACE_OBJECT_COUNT]
Definition viewrect.c:125
signed char g_acShipTarget[16]
Definition viewrect.c:167
signed char g_cCurrentObjective
Definition viewrect.c:57
short g_asObjectType[SPACE_OBJECT_COUNT]
Definition viewrect.c:124
unsigned char g_cYellowColour
Definition startup.c:547
short g_nEjectionSequenceState
Definition mission.c:16
ObjectTypeData g_aObjectTypeData[OBJECT_DATA_COUNT]
Definition campglob.c:310
short g_nEscapedEnemyCount
Definition jump.c:8
MissionNavPoint g_aMissionNavPoints[MISSION_NAV_POINT_COUNT]
Definition hotspot.c:237
signed char g_cMissionObjectiveCount
Definition viewrect.c:66
unsigned short g_asObjectScale[SPACE_OBJECT_COUNT]
Definition viewrect.c:115
int g_anShipFuel[10]
Definition viewrect.c:144
short g_bJumpSequenceActive
Definition jump.c:10
unsigned char g_ucPendingEjectionTransition
Definition mission.c:11
signed char g_acObjectOwner[SPACE_OBJECT_COUNT]
Definition viewrect.c:122
signed char g_abShipNavPointIndex[16]
Definition viewrect.c:170
short g_bViewportDirty
Definition main.c:1942
short g_bTargetLockMode
Definition viewrect.c:92
short g_asShipTactic[12]
Definition viewrect.c:168
unsigned char g_cSecondaryViewBufferColour
Definition startup.c:544
short g_asShipMaximumVelocity[12]
Definition viewrect.c:171
short g_bAutopilotSequenceActive
Definition auto.c:9
short g_asShipCount[12]
Definition viewrect.c:177
int g_anShipSpeed[SPACE_OBJECT_COUNT]
Definition viewrect.c:116
short g_nAutoEngageTimer
Definition viewrect.c:191
Viewport g_27_stViewScratchInfo
Definition cockpt.c:3841
unsigned char g_bPrimaryViewBufferColour
Definition startup.c:545
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
Definition viewrect.c:108
short g_asShipManeuver[12]
Definition viewrect.c:169
Viewport g_101_stScrViewInfo
Definition cockpt.c:3831
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
Definition viewrect.c:109
int g_nSavedWingmanObjectCounterValue
Definition jump.c:293
short g_aeShipObjective[12]
Definition viewrect.c:166
signed char g_acJumpDriveUsedBySystem[5]
Definition jump.c:295
FixedVector g_aShipDestination[10]
Definition viewrect.c:128
MissionObjective g_aMissionObjectives[MISSION_OBJECTIVE_COUNT]
Definition viewrect.c:69
short g_nStarSystemJumpDelay
Definition jump.c:11
char * g_pszAutopilotWaitReason
Definition cockpt.c:45
short g_asShipMissionType[12]
Definition viewrect.c:163
int g_1_nSavedPlayerObjectCounter
Definition jump.c:294
short g_asShipSide[12]
Definition viewrect.c:139
signed char g_acObjectType[SPACE_OBJECT_COUNT]
Definition viewrect.c:101
short g_nCurrentNavPoint
Definition viewrect.c:53
short g_asObjectCounter[SPACE_OBJECT_COUNT]
Definition viewrect.c:110
short g_bStarSystemJumpTransition
Definition jump.c:9
short * g_pPilotStatus
Definition campglob.c:499
FixedVector position
Definition game_data.h:1327
short proximityRadius
Definition game_data.h:1328