Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
campaign.c
Go to the documentation of this file.
1/*
2 * Campaign start, continue prompt and game loop.
3 *
4 * Retail object 0x409850-0x40A2CF (link order; see docs/ORDER.md).
5 */
6#include "game.h"
7
8PilotProfile g_stDefaultPilotProfile = { 0 }; /* 0x00492660 */
9short g_bNewPilotCampaignInitialized = 0; /* 0x004926c0 */
10short g_bDeveloperCampaignReady = 1; /* 0x004926c4 */
11static char g_szStartingCampaignGlobalsFile[] = "startglb.000"; /* 0x004926c8 */
12
13/* Function start: 0x409850 */
32
33/* Function start: 0x4098F2 */
34short RunCampaignContinuePromptLoop(unsigned char *promptShapes,
35 unsigned char *fieldShape,
36 short promptFrame)
37{
38 short selection;
39
40 selection = 0;
41 while ((selection = PollSceneHotspotInput(promptShapes, 0, 0, 0, 0)) ==
42 0) {
45 0, 0, fieldShape, 0);
48 160, 66, promptShapes, promptFrame);
50 0, 126, promptShapes, 2);
55 }
56 return selection;
57}
58
59/* Function start: 0x4099A8 */
60short PromptToContinueCampaign(short promptFrame)
61{
62 unsigned char *promptShapes;
63 unsigned char *starField;
64 short choice;
65
66 promptShapes = 0;
67 starField = 0;
68 choice = 0;
75 if ((short)AllocateViewport(
79 }
84 0, 16);
88 promptShapes = FetchDiskPacketRetrying("continue.vga", 0, 0);
89 starField = FetchDiskPacketRetrying("field.v00", 1, 0);
90 while (choice == 0) {
91 switch (choice = RunCampaignContinuePromptLoop(
92 promptShapes, starField, promptFrame)) {
93 case 1:
94 FreePacketAndClear(&promptShapes, 0);
95 FreePacketAndClear(&starField, 0);
100 return 1;
101 case 2:
102 FreePacketAndClear(&promptShapes, 0);
103 FreePacketAndClear(&starField, 0);
108 return 0;
109 }
110 }
111}
112
113/* Function start: 0x409B80 */
115{
116 short font;
117
120 free_cockpit();
122 free_3Space();
123 for (font = 0; font < 4; font++) {
124 if (g_36_apTextGlyphs[font] != 0) {
126 g_36_apTextGlyphs[font] = 0;
127 }
128 }
129 if (g_nShowMemoryStatus != 0) {
132 }
133}
134
135/* Function start: 0x409C1A */
136short RunCampaignGameLoop(short campaignSlot)
137{
138 short campaignDone;
139 short slot;
140 unsigned int availableMemory;
141 short flightComplete;
142 short series;
143 short mission;
144
145 campaignDone = 0;
146 flightComplete = 0;
150 if (g_nOriginDevUnlock != 0 &&
157 }
161
162 while (campaignDone == 0) {
164 AllocateScenePointerTable(1, 0x3420, 2, "HB1");
168 RunCampaignScript(campaignSlot);
171 (short)(g_pCampaignGlobals->field_0e & 0xff));
174 while (RunCampaignChalkboardMenu(campaignSlot) != 0) {
176 break;
177 }
182 if (g_nShowMemoryStatus != 0) {
185 }
189 campaignDone++;
190 }
195 for (slot = 0; slot < 4; slot++) {
196 if (g_36_apTextGlyphs[slot] != 0) {
198 g_36_apTextGlyphs[slot] = 0;
199 }
200 }
201 if (campaignDone != 0)
202 return 0;
205
206 flightComplete = 0;
207 while (flightComplete == 0) {
208 if (g_nShowMemoryStatus != 0) {
211 }
214 g_nCurSeries = series;
216 g_nCurrentLevel = mission;
219 init_mission(series, mission);
221 switch (RunSpaceFlight(-1)) {
222 case 1:
223 flightComplete = 1;
224 break;
225 case 3:
227 flightComplete = 1;
228 g_nArcadeState = 3;
229 break;
230 case 4:
232 if (PromptToContinueCampaign(0) != 0) {
233 g_asShipSide[0] = 0;
235 flightComplete = 0;
237 } else {
238 flightComplete = 1;
239 }
240 break;
241 case 2:
244 if (g_nArcadeState == 3)
246 if (PromptToContinueCampaign(1) != 0) {
247 g_asShipSide[0] = 0;
249 flightComplete = 0;
251 } else {
252 if (g_nArcadeState == 5) {
253 ejection_sequence(1000, 0);
254 g_nArcadeState = 5;
255 }
256 flightComplete = 1;
257 }
258 campaignDone = 0;
259 break;
260 default:
261 flightComplete = 1;
262 break;
263 }
264 if (g_nShowMemoryStatus != 0) {
267 }
269 }
270
279 if (g_nShowMemoryStatus != 0) {
282 }
283 if (campaignDone == 0) {
285 AllocateScenePointerTable(1, 0x3420, 2, "HB2");
288 if (g_nArcadeState == 4) {
296 if (g_asShipSide[0] == 1 ||
299 }
300 } else if (g_nArcadeState == 5) {
305 } else {
308 }
310 (short)calculate_damage_level();
311 if (g_nArcadeState != 3 &&
312 g_nArcadeState != 5) {
313 RunCampaignScript(campaignSlot);
314 }
322 if (g_nArcadeState > 2) {
324 LoadStartingCampaignGlobals(campaignSlot);
326 return 0;
327 } else {
329 }
330 }
331 availableMemory = GetAvailableMainMemory();
332 }
333 return 1;
334}
335
336/* Function start: 0x40A27A */
337void LoadStartingCampaignGlobals(short campaign)
338{
340 (char)(campaign + '0');
343}
344
345/* Function start: 0x40A2A3 */
347{
349}
350
351/* Linker commons defined here. LINK lays a unit's commons out by the
352 * identifiers' hash keys, so these spellings follow the original addresses. */
353short g_nSelectedStartingCampaign; /* 0x005d3bf0 */
354short g_nSelectedCampaignSlot; /* 0x005d3bf2 */
static char g_szStartingCampaignGlobalsFile[]
Definition campaign.c:11
void InitializeNewPilotCampaign(short campaignSlot)
Definition campaign.c:14
void SaveAndFreeTemporaryCampaignGlobals(void)
Definition campglob.c:188
void init_mission(short series, short mission)
Definition mission.c:87
void SetInputViewport(Viewport *viewport)
Definition eventmgr.c:2093
void FadeViewportPaletteToColour(Viewport *viewport, unsigned short colour, short enabled)
Definition palfade.c:10
void LoadStartingCampaignGlobals(short campaign)
Definition campaign.c:337
void death_sequence(void)
Definition death.c:12
unsigned int GetAvailableMainMemory(void)
Definition memfree.c:13
void OpenDiskDataFile(short logicalFile)
Definition personnel.c:313
short RunCampaignGameLoop(short campaignSlot)
Definition campaign.c:136
short AllocateViewport(Viewport *viewport, short clearColour, short flags)
Definition vpalloc.c:32
void ejection_sequence(short outcome, signed char restoreCockpit)
Definition midscene.c:63
void free_cockpit(void)
Definition fltsetup.c:742
int RunSpaceFlight(short entryNavPoint)
Definition main.c:1778
void free_viewport(Viewport *viewport)
Definition vpfree.c:10
void clear_cockpit_damage(void)
Definition cockpt.c:3201
void ReportFatalErrorCode(const char *errorCode)
Definition message.c:29
void RestoreGamePalette(void)
Definition palette.c:21
void DrawSpriteDefault(Viewport *viewport, short x, short y, unsigned char *shape, short frame)
Definition gr.c:682
void StopMusicUnlessSuppressed(void)
Definition music.c:160
void InitializeCampaignChalkboardScreen(short cockpitVariant)
Definition personnel.c:115
void InitializeConstellationField(Viewport *viewport, short direction, short density)
Definition starfld.c:55
short RunSelectedCampaign(void)
Definition campaign.c:346
void ShowMemoryStatusDebug(void)
Definition message.c:54
void * FetchDiskPacketRetrying(char *fileName, short section, short flags)
Definition disk.c:187
void free_3Space(void)
Definition fltsetup.c:890
void WaitForVerticalBlankThunk(void)
Definition eventmgr.c:189
void ReleasePacketSlot(void **slot)
Definition iffload.c:23
short RunCampaignChalkboardMenu(short campaignSlot)
Definition optmenu.c:405
short PollSceneHotspotInput(void *scenePacket, short offsetX, short offsetY, short dismissOnBackground, short maximumSelection)
Definition hotspot.c:170
short LoadSelectedPilotCampaign(void)
Definition personnel.c:244
void ResetGameTextContexts(void)
Definition startup.c:291
void LoadTemporaryCampaignGlobals(void)
Definition campglob.c:180
void check_stranded(void)
Definition cockpt.c:3460
void RunCampaignScript(short campaignSlot)
Definition campglob.c:126
void DisableMouseCursorDrawing(void)
Definition eventmgr.c:1327
short PromptToContinueCampaign(short promptFrame)
Definition campaign.c:60
void * AllocateScenePointerTable(int count, short elementSize, unsigned short flags, const char *errorMessage)
Definition iffload.c:131
void remove_nav_pointer(void)
Definition cockpt.c:2316
void ClearViewport(Viewport *viewport, short colour)
Definition gr.c:1027
short calculate_damage_level(void)
Definition main.c:1890
void EnableMouseCursorDrawing(void)
Definition eventmgr.c:1254
void DrawConstellationField(void)
Definition starfld.c:108
void ClearInputPump(void)
Definition eventmgr.c:2100
void * LoadWholeDataFile(const char *path)
Definition campglob.c:207
void SetMenuInputPump(void)
Definition eventmgr.c:2106
void ReleaseSceneMusicPacket(void)
Definition gameflow.c:894
void init_constellation(short scene)
Definition fltsetup.c:425
void ReleasePacketHandle(void *handle)
Definition memapi.c:108
void ShowPlayerStrandingSequence(void)
Definition eject.c:23
void InitializeCampaignConstellationState(CampaignGlobals *globals, short copyPosition)
Definition campglob.c:98
void free_all_slots(void)
Definition mission.c:703
void ReleaseSpaceflightResources(void)
Definition campaign.c:114
void ShowPlayerEjectionSequence(void)
Definition eject.c:9
unsigned short WaitForAnyInputPress(void)
Definition disk.c:347
void free_view_buffer(void)
Definition main.c:208
void FreePacketAndClear(void *slot, unsigned short releaseFlags)
Definition disk.c:45
short RunCampaignContinuePromptLoop(unsigned char *promptShapes, unsigned char *fieldShape, short promptFrame)
Definition campaign.c:34
void CopyViewportContents(Viewport *source, Viewport *destination)
Definition gr.c:995
void StoreMissionResultsInCampaignGlobals(CampaignGlobals *globals)
Definition campglob.c:46
Shared Win32 declarations, types and library interfaces.
short g_nShowMemoryStatus
Definition main.c:1948
short g_bPumpMessagesDuringLoad
Definition startup.c:582
unsigned char * g_pConstellationSprite
Definition message.c:230
short g_nCurSeries
Definition main.c:2005
short g_bDirectCampaignSelection
Definition startup.c:580
CampaignGlobals * g_pCampaignGlobals
Definition gameflow.c:3707
short g_bCockpitResourcesActive
Definition fltsetup.c:1059
short g_nSelectedCampaignSlot
Definition campaign.c:354
short g_bNewPilotCampaignInitialized
Definition campaign.c:9
short g_nCurrentLevel
Definition main.c:2009
unsigned char * g_13_pActiveCutscenePixelsAddress
Definition eventmgr.c:2522
short g_nDirectSeries
Definition main.c:1954
unsigned char g_cSecondaryViewBufferColour
Definition startup.c:544
unsigned char * g_1_pCampaignDataBase
Definition joycal.c:248
int g_nArcadeState
Definition main.c:1938
PilotProfile g_stDefaultPilotProfile
Definition campaign.c:8
signed char g_36_cPilotKillCountValue
Definition gameflow.c:3811
Viewport g_2_stModalSourceWindow
Definition message.c:231
short g_bDeveloperCampaignReady
Definition campaign.c:10
signed char g_bCutsceneViewportPreallocated
Definition gameflow.c:3687
signed char g_6_bCampaignFlightRunning
Definition eventmgr.c:2530
Viewport g_101_stScrViewInfo
Definition cockpt.c:3831
short g_nSelectedStartingCampaign
Definition campaign.c:353
int g_nTrainSimActive
Definition main.c:1937
Viewport g_stSecondaryViewBufferBlock
Definition message.c:234
short g_nOriginDevUnlock
Definition main.c:1944
unsigned char * g_39_pCurrentCampaignDataOffset
Definition eventmgr.c:2492
PilotProfile g_stCurrentPilotProfile
Definition viewrect.c:73
short g_bFriendlyFireWarningIssued
Definition ship.c:10
void * g_pCutsceneCockpitPalette
Definition gameflow.c:17
short g_asShipSide[12]
Definition viewrect.c:139
unsigned char * g_36_apTextGlyphs[4]
Definition cockpt.c:3835
short * g_pPilotStatus
Definition campglob.c:499
struct DirectMissionSelection g_stDirectMissionSelection
Definition main.c:1953
short previousMission
Definition game_data.h:1149
short shipMissionFlags[8]
Definition game_data.h:1155
short right
Definition game.h:154
short bottom
Definition game.h:155
short left
Definition game.h:152
short top
Definition game.h:153