Wing Commander
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
cmpgn.c
Go to the documentation of this file.
1/**
2 * @file
3 * @ingroup campaign
4 * @brief Conversation animation, the briefing, debriefing and office scenes,
5 * and campaign mission packet decoding.
6 *
7 * Address range 404cd0-40609f. The mouth-animation table follows eject.c's
8 * literals. The Mac cmpgn segment names corroborate LoadMissionData (4059b0).
9 */
10#include "wc1.h"
11
12static short asMouthFramesByPhoneme[26] = {
13 0, 5, 4, 4, 1, 8, 4, 7, 0, 4, 4, 7, 5,
14 4, 2, 5, 6, 4, 4, 4, 3, 4, 6, 4, 4, 4
15}; /* 0x004655f0 */
16
17/* Linker commons defined here; LINK orders them by identifier hash. */
18signed char cScrambleWalkerPair; /* 0x005a8748 */
19struct Shape *pScrambleCanopyShape; /* 0x005a874c */
20struct Shape *pScrambleShipShape; /* 0x005a8750 */
21short nTalkingHeadFaceX; /* 0x005a8754 */
22short nTalkingHeadFaceCoordY; /* 0x005a8756 */
23short nTalkingHeadMouthY; /* 0x005a8758 */
24short nTalkingHeadMouthX; /* 0x005a875a */
25
26/* Function start: 0x404CD0 */
27unsigned int ParseFaceAnimation(char *text, short *commands)
28{
29 char duration[8];
30 char *durationCursor;
31 short frame;
32 short sequenceIndex;
33
34 sequenceIndex = 0;
35 frame = *text++;
36 while (frame != 0) {
37 if (frame == 'R') {
38 *commands = -2;
39 commands += 2;
40 commands[-1] = sequenceIndex;
41 } else {
42 if (frame >= 'A' && frame <= 'F')
43 frame = (frame - 'A' + 10);
44 else
45 frame = (frame - '0');
46 *commands = frame;
47 durationCursor = duration;
48 frame = *text++;
49 while (frame != ',') {
50 *durationCursor++ = frame;
51 frame = *text++;
52 }
53 *durationCursor = '\0';
54 commands[1] = atoi(duration);
55 commands += 2;
56 sequenceIndex++;
57 }
58 frame = *text++;
59 }
60 *commands = -1;
61 return 0;
62}
63
64/* Function start: 0x404D70 */
65unsigned int ParseMouthAnimation(char *text, short *commands)
66{
67 char character;
68 char duration[5] = "";
69 short durationLength;
70 short ticks;
71
72 while ((character = *text++) != '\0') {
73 if (character == '$') {
74 *commands = 9;
75 } else if (character <= 'z' && character >= 'a') {
76 *commands = asMouthFramesByPhoneme[
77 character - 'a'];
78 } else {
79 continue;
80 }
81 ticks = 1;
82 durationLength = 0;
83 while (*text <= '9') {
84 character = *text;
85 if (character < '0')
86 break;
87 duration[durationLength] = character;
88 durationLength++;
89 text++;
90 duration[durationLength] = '\0';
91 ticks = atoi(duration);
92 character = *text;
93 }
94 commands[1] = ticks;
95 commands += 2;
96 }
97 *commands = -1;
98 return 0;
99}
100
101/* Function start: 0x404E10 */
102char *AddPCName(const char *text)
103{
104 char formatted[12];
105 const char *marker;
106 char *output;
107 short length;
108
109 szTxtWorkspaceBuffer[0] = '\0';
110 for (;;) {
111 marker = DosStrchr(text, '$');
112 if (marker == 0) {
115 }
116 output = DosStrchr(szTxtWorkspaceBuffer, 0);
117 while (text != marker) {
118 *output++ = *text++;
119 }
120 *output = '\0';
121 marker++;
122 switch (*marker++) {
123 case 'A':
127 break;
128 case 'C':
131 break;
132 case 'K':
133 sprintf(formatted, "%d",
136 break;
137 case 'L':
138 sprintf(formatted,
139 "%d",
142 break;
143 case 'D':
144 sprintf(formatted, "%03d.%03d",
148 break;
149 case 'E':
150 sprintf(formatted, "%03d.%03d",
154 break;
155 case 'N':
156 case 'P':
159 break;
160 case 'R':
165 if (szTxtWorkspaceBuffer[length - 1] == '.' &&
166 *marker == '.')
168 DosStrlen(szTxtWorkspaceBuffer) - 1] = '\0';
169 break;
170 case 'S':
172 (char *)abSeriesAuxData);
173 break;
174 case 'T':
175 sprintf(formatted, "%02d:%02d",
176 ((signed char *)pElapsedCampaignDatePtr)[0],
177 ((signed char *)pElapsedCampaignDatePtr)[1]);
179 break;
180 case 'W':
182 apWingmanPilotsList[*marker++ - '0']->name);
183 break;
184 }
185 text = marker;
186 }
187}
188
189/* Function start: 0x4050B0 */
190unsigned int LoadFace(short face)
191{
192 switch (nConversationCharacter) {
193 case 0:
195 break;
196 case 1:
198 break;
199 case 2:
205 -1, 16);
207 break;
208 case 3:
210 break;
211 case 4:
213 break;
214 case 8:
219 break;
220 case 9:
222 break;
223 case 10:
224 case 12:
226 break;
227 case 11:
228 case 13:
230 break;
231 default:
233 break;
234 }
235 if (face != nTalkingHeadFace) {
236 if (pTalkHeadShape != 0)
239 FetchDiskPacketRetrying(6, face, 0);
240 } else if (pTalkHeadShape == 0)
242 FetchDiskPacketRetrying(6, face, 0);
243 nTalkingHeadFace = face;
244 if (pConvOverlayShapePtr == 0)
246 FetchDiskPacketRetrying(6, 11, 0);
255 CloseTalk(pTalkHeadShape, -1, -1);
256 return 0;
257}
258
259/* Function start: 0x405290 */
260unsigned int LongTalk(struct Shape *talker, char *text,
261 short *mouthCommands, short *faceCommands,
262 short duration)
263{
264 short *faceStart;
265 short *mouthStart;
266 short faceCountdown;
267 short faceFrame;
268 short mouthCountdown;
269 short mouthFrame;
270 short waiting;
271
272 waiting = 0;
273 AddPCName(text);
274 faceStart = faceCommands;
275 mouthStart = mouthCommands;
278 faceFrame = 0;
279 mouthFrame = 0;
280 faceCountdown = 0;
281 mouthCountdown = 0;
282 FormatTextBufferFromStart("%X%Y%F%s%P",
283 0, 160,
287 for (;;) {
288 if (*mouthCommands == -1 && *faceCommands == -1) {
289 if (waiting == 0) {
290 CloseTalk(talker, -1, -1);
291 DIBslam();
292 DIBslamReal();
293 WaitForSceneAdvance(duration, 0);
294 return 0;
295 }
297 return 0;
298 }
299 if (mouthCountdown-- == 0) {
300 if (*mouthCommands != -1)
301 mouthCommands += 2;
302 switch (*mouthCommands) {
303 case -2:
304 mouthCommands = mouthStart;
305 default:
306 mouthFrame = *mouthCommands;
307 mouthCountdown = (mouthCommands[1] * 2);
308 break;
309 case -1:
310 mouthFrame = -1;
311 if (waiting == 0) {
312 waiting++;
314 }
315 break;
316 }
317 }
318 if (faceCountdown-- == 0) {
319 if (*faceCommands != -1)
320 faceCommands += 2;
321 switch (*faceCommands) {
322 case -2:
323 faceCommands = faceStart;
324 default:
325 faceFrame = *faceCommands;
326 if (faceFrame == 10)
327 faceFrame = -1;
328 faceCountdown = (faceCommands[1] * 2);
329 break;
330 case -1:
331 faceFrame = -1;
332 break;
333 }
334 }
336 if (nFrameSkipCounter < 1) {
338 CloseTalk(talker, mouthFrame, faceFrame);
339 DIBslam();
340 DIBslamReal();
341 }
342 if (CheckEscaped() != 0)
343 break;
344 if (waiting != 0 && (short)IsFrameTickElapsed() != 0)
345 return 0;
346 }
347 do {
348 } while (CheckEscaped() != 0);
349 return 0;
350}
351
352/* Function start: 0x4054B0 */
353unsigned int CloseTalk(struct Shape *talker, short mouthFrame,
354 short faceFrame)
355{
358 switch (nTalkSceneType) {
359 case 0:
360 case 1:
361 case 2:
362 case 4:
363 case 5:
364 if (nConversationBackdropFrame != -1) {
368 break;
369 }
371 break;
372 case 3:
374 break;
375 default:
377 break;
378 }
379 DrawSpriteDefault(&stSceneBuffer, 0, 0, talker, 0);
380 if (faceFrame > -1)
384 talker, (faceFrame + 11));
385 if (mouthFrame > -1)
389 talker, (mouthFrame + 1));
390 if (bConversationOverlay != 0)
394 switch (nConversationCharacter) {
395 case 5:
399 return 0;
400 case 6:
406 return 0;
407 }
409 return 0;
410}
411
412/* Function start: 0x405660 */
413unsigned int Briefing(short series, short mission)
414{
419 LoadMissionData(series, mission);
420 LoadBriefingData(series, mission);
421 if (bEscapePressedFlag == 0) {
424 }
430 return 0;
431}
432
433/* Function start: 0x4056F0 */
434unsigned int DeBriefing(short series, short mission)
435{
436 short fullScore;
437 short playerScore;
438
440 fullScore = FullMissionScore();
441 playerScore = PlayersMissionScore();
442 if (fullScore == 0) {
444 spacetrack(0x21, 2, 1);
445 } else if ((playerScore * 100) / fullScore > 70) {
447 spacetrack(0x21, 2, 1);
448 } else {
450 spacetrack(0x22, 2, 1);
451 }
452 LoadMissionData(series, mission);
458 LoadBriefingData(series, mission);
463 DIBslam();
464 DIBslamReal();
474 return 0;
475}
476
477/* Function start: 0x405840 */
478unsigned int Office(void)
479{
480 BriefingPacketHeader *header;
481 unsigned char *packet;
482 unsigned char *sceneData;
483 unsigned char *textData;
484
487 spacetrack(0x24, 2, 1);
492 1, 0);
493 header = (BriefingPacketHeader *)packet;
494 sceneData = packet + header->briefingScene;
495 textData = packet + header->briefingText;
498 SceneDirector(4, sceneData, textData);
499 DIBslam();
500 DIBslamReal();
504 ReleasePacketHandle(packet);
509 return 0;
510}
511
512/* Function start: 0x405910 */
543
544#pragma pack(push, 1)
545typedef struct MissionNavPointDisk {
546 char name[30];
547 signed char type;
549 unsigned short proximityRadius;
550 signed char triggers[4][2];
552 short missionShips[10];
554
560
561typedef struct MissionShipDisk {
562 short type;
563 short side;
564 signed char leader;
565 signed char field_5;
567 signed char navPoint;
569 short pitch;
570 short yaw;
571 short roll;
572 signed char formationSpot;
573 short speed;
574 short rating;
575 short pilot;
576 short field_2c;
577 short field_2e;
578 signed char state;
580 signed char formationIndex;
583#pragma pack(pop)
584
585/* Function start: 0x4059B0 */
586unsigned int LoadMissionData(short series, short mission)
587{
588 short logicalFile;
589 int missionIndex;
590 unsigned char *packet;
591 MissionHeaderDisk *header;
592 MissionNavPointDisk *diskNav;
593 int index;
594 MissionObjectiveDisk *diskObjective;
595 MissionShipRecord *ship;
596 MissionShipDisk *diskShip;
597 short *initialShip;
598 short *sourceInitialShip;
599 int item;
600 unsigned char *auxiliary;
601
603 packet = FetchDiskPacketRetrying(logicalFile, 0, 0);
604 missionIndex = mission + series * 4;
605 header = (MissionHeaderDisk *)(packet + missionIndex * 0x18);
609 sourceInitialShip = header->initialMissionShips;
611 while (initialShip < &stCurrentMissionHeader.initialMissionShips[8]) {
612 *initialShip++ = *sourceInitialShip++;
613 }
615 ReleasePacketHandle(packet);
616
617 packet = FetchDiskPacketRetrying(logicalFile, 1, 0);
618 diskNav = (MissionNavPointDisk *)(packet + missionIndex * 0x4d0);
619 for (index = 0;
621 index++, diskNav++) {
622 memcpy(aMissionNavPoints[index].name,
623 diskNav->name,
624 sizeof(aMissionNavPoints[index].name));
625 aMissionNavPoints[index].type = diskNav->type;
626 aMissionNavPoints[index].position = diskNav->position;
628 diskNav->proximityRadius;
629 for (item = 0; item < 8; item++) {
630 ((signed char *)aMissionNavPoints[index].triggers)[item] =
631 ((signed char *)diskNav->triggers)[item];
632 }
633 for (item = 0; item < 2; item++) {
635 (enum ObjectType)diskNav->preloadObjectTypes[item];
636 }
637 for (item = 0; item < 10; item++) {
638 aMissionNavPoints[index].missionShips[item] =
639 diskNav->missionShips[item];
640 }
641 }
642 ReleasePacketHandle(packet);
643
644 packet = FetchDiskPacketRetrying(logicalFile, 2, 0);
645 diskObjective =
646 (MissionObjectiveDisk *)(packet + missionIndex * 0x400);
647 for (index = 0; index < MISSION_OBJECTIVE_COUNT;
648 index++, diskObjective++) {
650 diskObjective->type;
652 diskObjective->index;
653 for (item = 0; item < 60; item++) {
655 diskObjective->description[item];
656 }
657 }
658 ReleasePacketHandle(packet);
659
660 packet = FetchDiskPacketRetrying(logicalFile, 3, 0);
661 diskShip = (MissionShipDisk *)(packet + missionIndex * 0x540);
662 ship = aMissionShips;
663 for (; ship < &aMissionShips[32];
664 diskShip++, ship++) {
665 ship->type = (enum ObjectType)diskShip->type;
666 ship->side = (enum Side)diskShip->side;
667 ship->leader = diskShip->leader;
668 ship->field_9 = diskShip->field_5;
669 ship->missionType = (enum ShipMissionType)diskShip->missionType;
670 ship->navPoint = diskShip->navPoint;
671 ship->position = diskShip->position;
672 memcpy(&ship->pitch, &diskShip->pitch, 6);
673 ship->formationSpot = diskShip->formationSpot;
674 ship->speed = diskShip->speed;
675 ship->rating = diskShip->rating;
676 ship->behaviour.pilot = diskShip->pilot;
677 ship->field_2c = diskShip->field_2c;
678 ship->field_2e = diskShip->field_2e;
679 ship->state = diskShip->state;
680 ship->leaderMissionIndex = diskShip->leaderMissionIndex;
681 ship->formationIndex = diskShip->formationIndex;
682 ship->targetMissionIndex = diskShip->targetMissionIndex;
683 }
684 ReleasePacketHandle(packet);
685
686 packet = FetchDiskPacketRetrying(logicalFile, 4, 0);
687 auxiliary = packet + missionIndex * sizeof(abMissionAuxData);
689 auxiliary,
690 sizeof(abMissionAuxData));
691 ReleasePacketHandle(packet);
692
693 packet = FetchDiskPacketRetrying(logicalFile, 5, 0);
694 auxiliary = packet + series * sizeof(abSeriesAuxData);
696 auxiliary,
697 sizeof(abSeriesAuxData));
698 ReleasePacketHandle(packet);
699 return 0;
700}
701
702/* Function start: 0x405CC0 */
703unsigned int UpdateMap(char *text, short duration)
704{
705 Viewport savedScreen;
706 Viewport savedVirtualScreen;
707
708 savedScreen = stScreenView;
709 savedVirtualScreen = stSceneBuffer;
711 if (stSceneBuffer.pixels != 0)
713 AddPCName(text);
716 FormatTextBufferFromStart("%X%Y%F%s%P",
717 0, 160,
720 stScreenView = savedScreen;
721 stSceneBuffer = savedVirtualScreen;
723 WaitForSceneAdvance(duration, 0);
727 return 0;
728}
729
730/* Function start: 0x405DE0 */
731unsigned int CloseLook(struct Shape *shape, short shot,
732 short *animation, char *text, short duration,
733 int unused)
734{
735 short character;
736 short escaped;
737 short finished;
738 short frame;
739 short frameDelay;
740 short *start;
741
742 frameDelay = 0;
743 finished = 0;
744 AddPCName(text);
747 FormatTextBufferFromStart("%X%Y%F%s%P",
748 0, 160,
751 start = animation;
753 if (shot == 2 || shot == 11) {
754 while (*animation != -1) {
755 if (frameDelay-- == 0) {
756 if (*animation != -1)
757 animation += 2;
758 switch (*animation) {
759 case -2:
760 animation = start;
761 /* Restart also loads the first frame and its delay. */
762 default:
763 frame = *animation;
764 frameDelay = (animation[1] * 2);
765 break;
766 case -1:
767 frame = -1;
768 if (finished == 0) {
769 finished++;
771 }
772 break;
773 }
774 }
776 if (nFrameSkipCounter < 1) {
778 if (shot == 11) {
780 if (frame > -1)
785 (frame + 17));
786 } else if (frame > -1) {
788 shape, frame);
789 }
791 DIBslam();
792 DIBslamReal();
793 }
794 escaped = CheckEscaped();
795 if (escaped != 0) {
796 while (escaped != 0)
797 escaped = CheckEscaped();
798 return 0;
799 }
800 if (finished != 0 && (short)IsFrameTickElapsed() != 0)
801 return 0;
802 DIBslam();
803 DIBslamReal();
804 }
805 } else if (shot == 0) {
806 short sceneFrame;
807
808 for (sceneFrame = 0; sceneFrame < 22; sceneFrame++) {
810 if (nFrameSkipCounter < 1) {
813 &stSceneBuffer, 0, 0,
817 sceneFrame);
820 for (character = 0; character < 14; character++) {
822 character, 0,
823 aBriefingCharacters[character]
824 .animation[sceneFrame],
825 0, 0);
826 }
828 DIBslam();
829 DIBslamReal();
830 }
831 if (CheckEscaped() != 0)
832 sceneFrame = 20;
833 if (sceneFrame == 20)
835 DIBslam();
836 DIBslamReal();
837 }
838 }
839 DIBslam();
840 DIBslamReal();
841 WaitForSceneAdvance(duration, unused);
842 return 0;
843}
static short asMouthFramesByPhoneme[26]
Definition cmpgn.c:12
unsigned char bEscapePressedFlag
Definition mathfp.c:24
short asCampaignBriefingFiles[3]
Definition barracks.c:57
MissionHeaderDisk stCurrentMissionHeader
Definition mission.c:57
short asMissionDataFiles[3]
Definition barracks.c:58
unsigned char * pBriefingPacket
Definition killbrd.c:186
short nCampaignDataSet
Definition gameflow.c:30
unsigned char * pCurrentBriefingTextData
Definition screens.c:160
short nTalkingHeadFaceCoordY
Definition cmpgn.c:22
Viewport stConstellationViewport
Definition launch.c:43
unsigned char cBlackColour
Definition init.c:12
CampaignDate * pElapsedCampaignDatePtr
Definition mission.c:59
short nTalkingHeadFaceX
Definition cmpgn.c:21
char szTxtWorkspaceBuffer[256]
Definition screens.c:164
short nConvTextColorValue
Definition screens.c:170
unsigned char * pDebriefingTxtInfo
Definition screens.c:176
short nConversationBackdropFrame
Definition screens.c:153
int bConversationOverlay
Definition screens.c:157
const char * apszMedalNames[5]
Definition screens.c:64
short nTalkingHeadMouthX
Definition cmpgn.c:24
unsigned char abSeriesAuxData[0x28]
Definition mission.c:55
BriefingCharacterLayout aBriefingCharacters[10]
Definition screens.c:43
TextContext stCurrentConvTxtCtx
Definition targ.c:15
short nFrameSkipCounter
Definition main.c:23
struct Shape * pConvOverlayShapePtr
Definition screens.c:178
struct Shape * pCurrentConversationSpecialShape
Definition cutscene.c:168
unsigned char * apRecRoomTxtDataArray[3]
Definition killbrd.c:183
signed char cScrambleWalkerPair
Definition cmpgn.c:18
MissionObjectiveSource aMissionObjectiveSources[16]
Definition mission.c:56
MissionNavPoint aMissionNavPoints[MISSION_NAV_POINT_COUNT]
Definition game.c:199
struct Shape * pScrambleCanopyShape
Definition cmpgn.c:19
short nFrameSkip
Definition main.c:24
struct Shape * pCurrentBriefingAnimShape
Definition screens.c:171
Viewport stCurrentConvTextViewport
Definition timer.c:17
CampaignDate stSavedCampaignDate
Definition screens.c:14
int bConversationConstellation
Definition screens.c:155
Viewport stSceneBuffer
Definition select.c:17
short nTalkSceneType
Definition screens.c:168
unsigned char cPrimaryViewBufferColour
Definition init.c:27
unsigned char * apRecRoomSceneDataList[3]
Definition killbrd.c:185
short nTalkingHeadMouthY
Definition cmpgn.c:23
short nWingmanKillCount
Definition init.c:57
Viewport stScreenView
Definition launch.c:50
short nTalkingHeadFace
Definition screens.c:151
PilotRecord * apWingmanPilotsList[8]
Definition gr.c:1540
short nConversationCharacter
Definition screens.c:149
CampaignState stCampaignState
Definition dib.c:107
struct Shape * pCurrentConversationBackdropShapePtr
Definition screens.c:166
TalkingHeadOrigin aTalkingHeadOrigins[11]
Definition screens.c:16
short nPlayerKillTotal
Definition logic.c:112
MissionShipRecord aMissionShips[MISSION_SHIP_STORAGE_COUNT]
Definition game.c:230
short nDebriefingPodiumX
Definition screens.c:147
struct Shape * pTalkHeadShape
Definition screens.c:169
const char * apszPilotRankNames[5]
Definition killbrd.c:16
struct Shape * pScrambleShipShape
Definition cmpgn.c:20
short nCurrentConversationMedalIndex
Definition screens.c:167
unsigned char * pDebriefingSceneDataPtr
Definition screens.c:163
CampaignDate * pCurrentCampaignDate
Definition mission.c:58
unsigned char abMissionAuxData[0x28]
Definition objdata.c:598
unsigned char * pBriefingSceneInfo
Definition screens.c:165
unsigned int recRoomText0
Definition wcdata.h:504
unsigned int recRoomScene0
Definition wcdata.h:503
unsigned int recRoomText1
Definition wcdata.h:508
unsigned int recRoomText2
Definition wcdata.h:506
unsigned int recRoomScene2
Definition wcdata.h:505
unsigned int briefingText
Definition wcdata.h:500
unsigned int debriefingText
Definition wcdata.h:502
unsigned int recRoomScene1
Definition wcdata.h:507
unsigned int debriefingScene
Definition wcdata.h:501
unsigned int briefingScene
Definition wcdata.h:499
short day
Definition wcdata.h:607
short year
Definition wcdata.h:608
PilotRecord * currentPilot
Definition wcdata.h:710
short homeMissionShip
Definition wcdata.h:564
short playerMissionShip
Definition wcdata.h:565
short entryNavPoint
Definition wcdata.h:563
short initialMissionShips[8]
Definition wcdata.h:566
FixedVector position
Definition cmpgn.c:548
short missionShips[10]
Definition cmpgn.c:552
signed char triggers[4][2]
Definition cmpgn.c:550
signed char type
Definition cmpgn.c:547
char name[30]
Definition cmpgn.c:546
short preloadObjectTypes[2]
Definition cmpgn.c:551
unsigned short proximityRadius
Definition cmpgn.c:549
FixedVector position
Definition wcdata.h:859
enum ObjectType preloadObjectTypes[2]
Definition wcdata.h:862
short proximityRadius
Definition wcdata.h:860
short missionShips[10]
Definition wcdata.h:863
char name[0x1e]
Definition wcdata.h:857
signed char type
Definition wcdata.h:858
char description[60]
Definition cmpgn.c:558
short speed
Definition cmpgn.c:573
short field_2c
Definition cmpgn.c:576
short missionType
Definition cmpgn.c:566
signed char navPoint
Definition cmpgn.c:567
signed char formationIndex
Definition cmpgn.c:580
signed char leader
Definition cmpgn.c:564
short pilot
Definition cmpgn.c:575
short field_2e
Definition cmpgn.c:577
signed char leaderMissionIndex
Definition cmpgn.c:579
signed char formationSpot
Definition cmpgn.c:572
short rating
Definition cmpgn.c:574
signed char field_5
Definition cmpgn.c:565
FixedVector position
Definition cmpgn.c:568
signed char state
Definition cmpgn.c:578
short pitch
Definition cmpgn.c:569
signed char targetMissionIndex
Definition cmpgn.c:581
enum ShipMissionType missionType
Definition wcdata.h:884
enum Side side
Definition wcdata.h:881
signed char targetMissionIndex
Definition wcdata.h:899
enum ObjectType type
Definition wcdata.h:880
signed char navPoint
Definition wcdata.h:885
signed char leader
Definition wcdata.h:882
MissionShipBehaviour behaviour
Definition wcdata.h:893
signed char leaderMissionIndex
Definition wcdata.h:897
FixedVector position
Definition wcdata.h:886
signed char field_9
Definition wcdata.h:883
signed char formationIndex
Definition wcdata.h:898
signed char formationSpot
Definition wcdata.h:890
signed char state
Definition wcdata.h:896
char callsign[14]
Definition wcdata.h:598
char name[14]
Definition wcdata.h:597
short rank
Definition wcdata.h:600
Viewport * viewport
Definition wc1base.h:369
unsigned char * pixels
Definition wc1base.h:82
short bottom
Definition wc1base.h:87
Umbrella header for the game core.
unsigned int RefreshMemoryStatusOverlay(void)
Definition main.c:467
void Build_objective_list(void)
Definition mission.c:1132
unsigned int Briefing(short series, short mission)
Definition cmpgn.c:413
unsigned int InitializeConversationText(void)
Definition main.c:448
unsigned int LongTalk(struct Shape *talker, char *text, short *mouthCommands, short *faceCommands, short duration)
Definition cmpgn.c:260
void FormatTextBufferFromStart(const char *format,...)
Definition cockpt.c:211
void DIBslam(void)
Definition dib.c:513
char *__stdcall DosStrchr(const char *s, short c)
Definition strdos.c:43
void * FetchDiskPacketRetrying(short logicalFile, short section, short flags)
Definition disk.c:126
unsigned int ParseMouthAnimation(char *text, short *commands)
Definition cmpgn.c:65
unsigned int DrawDebriefingLongShot(void)
Definition screens.c:812
unsigned int spacetrack(int track, int mode, short enabled)
Definition music.c:411
unsigned int DrawConstellationField(void)
Definition view.c:289
void DrawSpriteDefault(Viewport *viewport, short x, short y, struct Shape *shape, short frame)
Definition gr.c:669
int IsFrameTickElapsed(void)
Definition eventmgr.c:632
unsigned int DrawBriefingCharacter(short character, short pose, short animationFrame, const signed char *unusedXOffsets, const signed char *unusedYOffsets)
Definition screens.c:1450
void StopMusicUnlessSuppressed(void)
Definition music.c:419
short MinShort(short a, short b)
Definition mathutil.c:20
void DIBslamReal(void)
Definition dib.c:519
void __stdcall DosMemcpy(void *dst, const void *src, unsigned short n)
unsigned int PreloadMusicTrackHook(short track)
Definition logic.c:2044
unsigned int SceneDirector(short sceneType, unsigned char *sceneData, unsigned char *textData)
Definition screens.c:1212
char *__stdcall DosStrcat(char *destination, const char *source)
Definition fade.c:92
unsigned int init_constellation(short scene)
Definition logic.c:1665
void __stdcall SetTextContext(TextContext *context)
Definition mathfp.c:152
void WaitForSceneAdvance(short duration, short unused)
Definition disk.c:509
unsigned int ParseFaceAnimation(char *text, short *commands)
Definition cmpgn.c:27
void __stdcall SetFrameTimerPeriodDirect(short p)
Definition eventmgr.c:620
unsigned int CloseTalk(struct Shape *talker, short mouthFrame, short faceFrame)
Definition cmpgn.c:353
unsigned int ReleaseMusicTrackHook(short track)
Definition logic.c:2051
unsigned int ResetScreenClipToFullHeight(void)
Definition main.c:439
unsigned int CloseLook(struct Shape *shape, short shot, short *animation, char *text, short duration, int unused)
Definition cmpgn.c:731
unsigned int UpdateMap(char *text, short duration)
Definition cmpgn.c:703
unsigned int LoadMissionData(short series, short mission)
Definition cmpgn.c:586
void ClearViewport(Viewport *viewport, short colour)
Definition gr.c:970
int PlayersMissionScore(void)
Definition gameflow.c:122
unsigned int LoadBriefingData(short series, short mission)
Definition cmpgn.c:513
unsigned int DeBriefing(short series, short mission)
Definition cmpgn.c:434
void ReleasePacketHandle(void *handle)
Definition ending.c:50
void BriefingMap_DisplayMap(void)
Definition nav.c:742
int FullMissionScore(void)
Definition gameflow.c:105
unsigned int LoadBriefingRoom(void)
Definition screens.c:182
unsigned int LoadFace(short face)
Definition cmpgn.c:190
unsigned int Office(void)
Definition cmpgn.c:478
short CheckEscaped(void)
Definition disk.c:442
void FreePacketAndClear(void *slot, unsigned short releaseFlags)
Definition mathutil.c:37
unsigned int ReleaseTextFont(short fontIndex)
Definition disk.c:222
short __stdcall DosStrlen(const char *s)
Definition strdos.c:61
unsigned int InitializeConstellationField(Viewport *viewport, short direction, short density)
Definition view.c:238
char * AddPCName(const char *text)
Definition cmpgn.c:102
unsigned int InitializeConversationViewport(void)
Definition main.c:422
ShipMissionType
Definition wcdata.h:120
ObjectType
Definition wcdata.h:54
Side
Definition wcdata.h:173
#define ACTIVE_MISSION_NAV_POINT_COUNT
Definition wcdata.h:1013
#define MISSION_OBJECTIVE_COUNT
Definition wcdata.h:1014