Wing Commander
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1/**
2 * @file
3 * @ingroup flight
4 * @brief WINGLEADER's main module: process services, flight control and the
5 * HUD.
6 *
7 * Address range 4272f0-42a8ef. The initialized state and the complete
8 * literal order identify this group; its trailing cursor and palette helpers
9 * are provisional.
10 */
11#include <dos.h>
12#include "wc1.h"
13#include <malloc.h>
14
15/* Startup installs this event-manager hook for DOS vector 0x21. */
17
18/* Legacy overlay setting: named in the WINGLEADER source screenshot and
19 * retained, without references, before game mode/status in the Win32 image. */
20unsigned int _ovrbuffer = 0x1370; /* 0x00469fa8 */
21int nCannedSceneMode = 0; /* 0x00469fac */
22int nArcadeState = 0; /* 0x00469fb0 */
23short nFrameSkipCounter = 1; /* 0x00469fb4 */
24short nFrameSkip = 1; /* 0x00469fb8 */
25int nSfxVolumeSetting = 0x14; /* 0x00469fbc */
26int nMusicVolumeSetting = 0x14; /* 0x00469fc0 */
27int bViewportDirty = 0; /* 0x00469fc4 */
28/* 0x00469fc8 */
29static
30int anVolumeLevels[11] = {
31 0, 40000, 50000, 55000, 60000, 61000,
32 61500, 62000, 63000, 63500, 64000
33};
34int nOriginDevUnlock = 0; /* 0x00469ff4 */
35int bPlayerCollisionsEnabled = 1; /* 0x00469ff8 */
36int bPlayerVulnerable = 1; /* 0x00469ffc */
37int bPlayerCollisionResponse = 1; /* 0x0046a000 */
38int bViewBufferEnabled = 0; /* 0x0046a004 */
39int bCockpitlessView = 0; /* 0x0046a008 */
40static int nShowMemoryStatus = 0; /* 0x0046a00c */
41short nStartNavPointOverride = -1; /* 0x0046a010 */
42short nArcadeBonusCountdown = 0; /* 0x0046a014 */
43volatile int bMouseCursorVisible = 0; /* 0x0046a018 */
44unsigned char bInputPollingGuard = 0; /* 0x0046a01c */
45static InputDeviceSample stLastPolledFlightInput = {0}; /* 0x0046a020 */
46static
47int bMouseAfterburnerControl = 0; /* 0x0046a02c */
48
49/* Input-queue callees of the flight-input routines below. */
50short __stdcall PollInputEvent(InputEventState *event, short filter);
51short __stdcall IsInputEventQueued(short type);
52
53/* 0x0046a030 */
54static short asMouseYawThresholds[6] = {
55 10, 37, 52, 57, 62, 1070
56};
57/* 0x0046a040 */
58static short asMousePitchThresholds[6] = {
59 5, 18, 27, 35, 38, 1040
60};
61static unsigned int dwLastSecondaryButtonPress = 0; /* 0x0046a04c */
62static
63unsigned char bFlightRollLatch = 0; /* 0x0046a050 */
64static volatile unsigned char bAfterburnerButtonLatched = 0; /* 0x0046a054 */
65static
66short nMouseYawInput = 0; /* 0x0046a058 */
67static
68short nMousePitchInput = 0; /* 0x0046a05c */
69
70/* Flight-loop performance-counter readings and their low-part deltas. CL
71 * places these statics by identifier hash, so their spellings reproduce the
72 * original order. */
73static int nFlightFrameTicks; /* 0x004764f8 */
74static int nHudDelta; /* 0x004764fc */
75static LARGE_INTEGER liFlightAfterInputCounter; /* 0x00476500 */
76static LARGE_INTEGER liFlightFrameEndCounter; /* 0x00476508 */
77static int nFlightPresentDelta; /* 0x00476510 */
78static LARGE_INTEGER liFrameStart; /* 0x00476518 */
79static LARGE_INTEGER liSimulationDone; /* 0x00476520 */
80static int nSimulationDelta; /* 0x00476528 */
81static LARGE_INTEGER liFlightAfterCockpitCounter; /* 0x00476530 */
82static int nInputTicks; /* 0x00476538 */
83static LARGE_INTEGER liRenderDoneCounter; /* 0x00476540 */
84static int nDrawDelta; /* 0x00476548 */
85
86/* Linker commons defined here; LINK orders them by identifier hash. */
87int nDmgDispState; /* 0x005a77e0 */
88int nDamageDisplayPhase; /* 0x005a77e4 */
89struct Shape *pLaunchDoorShape; /* 0x005a77e8 */
90unsigned int nCurrentFrameTimerIdValue; /* 0x005a77ec */
91unsigned char abPaletteTripletsArray[256][3]; /* 0x005a77f0 */
93short bMouseButtonEventQueuedFlag; /* 0x005a7afc */
94short bCurrentKeyboardEvtQueued; /* 0x005a7afe */
95short bMouseMoveEvtQueued; /* 0x005a7b00 */
96char *pCurrentStartupArgumentsPtr[30]; /* 0x005a7b10 */
97short bJoystickEventQueued; /* 0x005a7b88 */
98short nMainArcadeStartupParameterValue; /* 0x005a7b8a */
100
101/* Function start: 0x4272F0 */
102short LogMemoryUsage(void)
103{
105 EMShutDown();
107 chdir("..");
109 if (nOriginDevUnlock != 0) {
111 "Original FMem %lu. Current FMem %lu. Current NMem %u.\n",
114 (unsigned int)(int)(short)GetOriginalFreeMemory());
115 }
118 return 0;
119}
120
121/* Function start: 0x427370 */
122void exit_squadron(const char *msg)
123{
126 SystemDebugPrintf("[SYSTEM]: Exit_squadron\n");
127 WriteDebugString("[SYSTEM] exit_squadron");
128 WriteDebugString(msg);
131 exit(0);
132}
133
134/* Function start: 0x4273C0 */
135unsigned int ShowMemoryStatusDebug(void)
136{
137 TextContext savedContext;
138 TextContext *previousContext;
139 char value[60];
140
141 previousContext = pCurTextContext;
142 savedContext = stDefaultTxtContext;
143 if (nShowMemoryStatus != 0) {
146 (unsigned char)cViewportClearColour,
149 DrawFormattedText("%X%YCurrent NMem %d.",
150 0, 176, (int)(short)GetOriginalFreeMemory());
151 sprintf(value, "%ld", GetFixedOneMillionThunkAlt(0));
152 DrawFormattedText("%X%YCurrent FMem %s.", 0, 184, value);
153 sprintf(value, "%ld", dwOriginalFreeMem);
154 DrawFormattedText("%X%YOriginal FMem %s.", 0, 0, value);
155 stDefaultTxtContext = savedContext;
156 pCurTextContext = previousContext;
157 }
158 return 0;
159}
160
161/* Function start: 0x4274C0 */
162unsigned int GetJoystickButtonEdge(unsigned int a, short b)
163{
164 (void)a;
165 if (b < 0)
166 return JoystickEdgeHook(-1);
167 return 0;
168}
169
170/* Function start: 0x4274E0 */
171int main(short argc, char **argv)
172{
173 char **argumentSlot;
174 char *argument;
175 char *option;
176 int animationDemo;
177 int selection;
178 int launchMission;
179 short argumentIndex;
180 short argumentCount;
181 short animationIndex;
182 short mission;
183 short series;
184
185 mission = 0;
186 launchMission = 0;
187 series = 1;
188 animationDemo = 0;
189
195
196 argumentCount = LoadWingCmdrCfgFile(argc, argv);
197 chdir("gamedat");
199 chdir("..");
200 if (GetCurrentDiskDriveHook() > 'B')
202
203 SystemDebugPrintf("Loading WING COMMANDER. Please wait...\n");
204 if (sizeof(int) != sizeof(short *))
205 SystemDebugPrintf("Sizeof int(enum) != sizeof short *\n");
210
211 for (argumentIndex = 0;
212 argumentIndex < argumentCount;
213 argumentIndex++) {
214 argumentSlot = &pCurrentStartupArgumentsPtr[argumentIndex];
215 if (strcmp("Origin", (*argumentSlot)) == 0)
217
218 argument = *argumentSlot;
219 switch (argument[0]) {
220 case '?':
221 SystemDebugPrintf("Version %s.\n", pGameVersion);
222 case '-': {
223 option = *argumentSlot + 1;
224
225 if (*option == 'm')
227 if (nOriginDevUnlock != 0) {
228 switch (*option) {
229 case 'b':
231 break;
232 case 'f':
233 bShowFrameRate = 1;
234 break;
235 case 'k':
237 break;
238 case 'q':
240 break;
241 }
242 }
243 break;
244 }
245 case 'A':
246 case 'a': {
247 option = argument + 1;
248
249 if (*option == 's' || *option == 'S') {
250 nStartNavPointOverride = (short)atoi(argument + 2);
251 } else {
254 (short)atoi(option);
255 }
256 break;
257 }
258 case 'E':
259 case 'e':
261 break;
262 case 'P':
263 case 'p':
265 break;
266 case 'R':
267 case 'r':
269 break;
270 case 'T':
271 case 't':
273 break;
274 case 'V':
275 case 'v':
277 break;
278 case 'Z':
279 case 'z':
281 break;
282 case 'l':
283 if (nOriginDevUnlock != 0)
284 launchMission = 1;
285 break;
286 case 'm':
287 if (nOriginDevUnlock != 0)
288 mission = (short)atoi(argument + 1);
289 break;
290 case 's':
291 if (nOriginDevUnlock != 0) {
292 bCampaignActive = 1;
293 series = (short)atoi(argument + 1);
294 }
295 break;
296 case 'w':
297 if (nOriginDevUnlock != 0) {
298 animationDemo = 1;
299 animationIndex = (short)atoi(argument + 1);
300 }
301 break;
302 }
303 }
304
307 stCampaignState.currentSeries = (signed char)series;
309 stCampaignState.currentMission = (signed char)mission;
310 nVideoMode = 0x13;
312 nVideoMode = 0x13;
313
314 if (animationDemo == 1) {
315 SystemDebugPrintf("Pre animation: %lu.\n",
318 RunAnimationDemoLoop((signed char)animationIndex);
319 SystemDebugPrintf("Post animation: %lu.\n",
322 }
323
327 SetMusicStreamVolume((unsigned short)anVolumeLevels[
329
330 if (launchMission == 0) {
332 for (;;) {
335 selection = Title_Sequence();
336 switch (selection) {
337 case 0:
339 break;
340 case 2:
342 break;
343 case 3:
345 break;
346 default:
347 break;
348 }
349 while (GameFlow() != 0)
350 ;
351 }
352 }
353
354 init_mission(series, mission);
356 exit_squadron("Bye!");
357 return 0;
358}
359
360/* Function start: 0x4279D0 */
361unsigned int GetScreenUpdateFlag(void)
362{
363 if (message_showing())
364 EndCommMenu();
367 return 0;
368}
369
370/* Function start: 0x427A00 */
371unsigned int initialize_view_buffer(void)
372{
376 0x20) == 0)
377 ReportOutOfMemoryAndExit("SPACE BUFFER");
378 }
379 return 0;
380}
381
382/* Function start: 0x427A40 */
383unsigned int dump_buffer_to_screen(void)
384{
385 short bottom;
386
387 if (bCockpitlessView > 0) {
390 return 0;
391 }
392 switch ((int)cScreenViewMode) {
393 case 4:
394 bottom = stScreenView.bottom;
395 stScreenView.top = 24;
396 stScreenView.bottom = 152;
398 stScreenView.bottom = bottom;
399 stScreenView.top = 0;
400 break;
401 case 5:
403 break;
404 default:
407 break;
408 }
410 return 0;
411}
412
413/* Function start: 0x427B00 */
414unsigned int clear_view_buffer(void)
415{
417 (unsigned char)cPrimaryViewBufferColour);
418 return 0;
419}
420
421/* Function start: 0x427B20 */
423{
425 stScreenView.top = 24;
426 stScreenView.bottom = 151;
428 stSceneBuffer.right = 319;
429 stSceneBuffer.top = 0;
430 stSceneBuffer.bottom = 127;
432 (short)cBlackColour, 0) == 0)
433 ReportPacketLoadError(0, 0, 0, 0,
434 "AB");
435 return 0;
436}
437
438/* Function start: 0x427BA0 */
440{
442 stScreenView.top = 0;
443 stScreenView.bottom = 199;
444 return 0;
445}
446
447/* Function start: 0x427BC0 */
465
466/* Function start: 0x427C30 */
474
475/* Function start: 0x427C50 */
476unsigned int Update_3Space(void)
477{
478 house_keep();
482 servicetrack();
484 return 0;
485}
486
487/* Function start: 0x427C80 */
489{
490 if (nCameraViewMode <= 3)
491 asDamageFlashColour[0] = 0x30;
492 return 0;
493}
494
495/* Function start: 0x427CA0 */
496unsigned int FadeFlightPaletteEntry(short *entry)
497{
498 if (entry[0] != 0) {
499 entry[0] = (short)(entry[0] - 4);
500 entry[1] = 0;
501 entry[2] = 0;
502 return 0;
503 }
504 entry[1] = 0;
505 return 0;
506}
507
508/* Function start: 0x427CD0 */
509unsigned int UpdateSpacePaletteFade(void)
510{
511 if (asDamageFlashColour[0] != 0) {
512 switch (nVideoMode) {
513 case 9:
514 case 13:
516 bViewportDirty = 1;
517 asDamageFlashColour[0] = 0;
518 break;
519 case 0x13:
521 (short)(asDamageFlashColour[0] - 4);
524 break;
525 }
526 }
527 return 0;
528}
529
530/* Function start: 0x427D40 */
531unsigned int house_keep(void)
532{
533 short count;
534
535 if (nCannedSceneMode == 0 &&
536 nTrainSimActive == 0) {
538 if ((count & 0x1f) == 0) {
541 }
542 if (nCurrentHazardFieldTotal != 0 &&
543 (count & 0xf) == 0)
545 }
546 if (nCameraViewMode == 0) {
547 for (count = 0; count < 6; count++) {
549 SetPaletteEntry((short)(count + 0xb9),
550 aPaletteFadeEntries[count]);
551 }
552 return 0;
553 }
559 }
560 return 0;
561}
562
563/* Function start: 0x427DF0 */
573
574/* Function start: 0x427E40 */
601
602/* Function start: 0x427F20 */
603/* The two volume-adjustment exits deliberately use bare returns. Retail
604 * preserves the value left in EAX by ShowOnScreenMessage on those paths. */
606{
607 short keys[4];
608 int shift;
609 short *key;
610 int control;
611 short finished;
612 short handled;
613
614 handled = 1;
615 finished = 0;
616 shift = GetShiftKeyState();
617 control = GetControlKeyState();
618 key = keys;
619 switch (bCurrentKey) {
620 case 0x47:
621 *key++ = 0x48;
622 *key++ = 0x4b;
623 break;
624 case 0x49:
625 *key++ = 0x48;
626 *key++ = 0x4d;
627 break;
628 case 0x4f:
629 *key++ = 0x50;
630 *key++ = 0x4b;
631 break;
632 case 0x51:
633 *key++ = 0x50;
634 *key++ = 0x4d;
635 break;
636 default:
637 *key++ = (short)bCurrentKey;
638 break;
639 }
640 *key = -1;
641
642 key = keys;
643 while (finished == 0) {
644 switch (*key++) {
645 default:
646 handled--;
647 break;
648 case 0x33:
649 case 0x52:
651 if (stRotationInput.z > 0) {
652 stRotationInput.z = 0;
653 } else {
654 if (shift != 0)
655 stRotationInput.z = -9;
656 if (stRotationInput.z > -9)
658 else if (cPreviousKey < 0)
660 else
662 }
663 break;
664 case 0x34:
665 case 0x53:
667 if (stRotationInput.z < 0) {
668 stRotationInput.z = 0;
669 } else {
670 if (shift != 0)
671 stRotationInput.z = 9;
672 if (stRotationInput.z < 9)
674 else if (cPreviousKey < 0)
676 else
678 }
679 break;
680 case 0x48:
682 if (stRotationInput.x < 0) {
683 stRotationInput.x = 0;
684 } else if (control != 0) {
686 if (nSfxVolumeSetting > 20)
690 nSfxVolumeSetting / 2]);
691 ShowOnScreenMessage(0, 0, "SFX VOLUME: %d.",
693 } else {
694 if (shift != 0)
695 stRotationInput.x = 9;
696 if (stRotationInput.x < 9)
698 else if (cPreviousKey < 0)
700 else
702 }
703 break;
704 case 0x50:
706 if (stRotationInput.x > 0) {
707 stRotationInput.x = 0;
708 } else if (control != 0) {
710 if (nSfxVolumeSetting < 0)
713 nSfxVolumeSetting / 2]);
715 ShowOnScreenMessage(0, 0, "SFX VOLUME: %d.",
717 } else {
718 if (shift != 0)
719 stRotationInput.x = -9;
720 if (stRotationInput.x > -9)
722 else if (cPreviousKey < 0)
724 else
726 }
727 break;
728 case 0x4d:
729 if (control != 0) {
731 if (nMusicVolumeSetting > 20)
734 SetMusicStreamVolume((unsigned short)
737 ShowOnScreenMessage(0, 0, "MUSIC VOLUME: %d.",
739 return;
740 }
742 if (stRotationInput.y < 0) {
743 stRotationInput.y = 0;
744 } else {
745 if (shift != 0)
746 stRotationInput.y = 9;
747 if (stRotationInput.y < 9)
749 else if (cPreviousKey < 0)
751 else
753 }
754 break;
755 case 0x4b:
756 if (control != 0) {
758 if (nMusicVolumeSetting < 0)
761 SetMusicStreamVolume((unsigned short)
764 ShowOnScreenMessage(0, 0, "MUSIC VOLUME: %d.",
766 return;
767 }
769 if (stRotationInput.y > 0) {
770 stRotationInput.y = 0;
771 } else {
772 if (shift != 0)
773 stRotationInput.y = -9;
774 if (stRotationInput.y > -9)
776 else if (cPreviousKey < 0)
778 else
780 }
781 break;
782 case 0x4c:
784 (short)((stSpaceBufferViewport.left +
786 (short)((stSpaceBufferViewport.top +
788 stRotationInput.z = 0;
789 stRotationInput.x = 0;
790 stRotationInput.y = 0;
792 break;
793 case -1:
794 finished++;
795 break;
796 }
797 }
798 return handled;
799}
800
801/* Function start: 0x428480 */
802unsigned int fire_players_lasers(void)
803{
804 if (asObjectCounterArray[0] == -1 &&
805 asShipWpnEnergyList[0] > 0) {
807 if (acShipTargetTable[0] != -1 &&
808 get_mode(1) == 5)
810 }
811 return 0;
812}
813
814/* Function start: 0x4284D0 */
815unsigned int players_flight_dynamics(void)
816{
817 enum ObjectType type;
818
819 if (aeSpecialManeuvers[0] ==
821 if (asObjectCounterArray[0] == -1) {
823 if (anObjectYawRotation[0] < aObjectTypeData[type].pitchRate &&
824 anObjPitchRot[0] < aObjectTypeData[type].yawRate &&
825 anObjectRollRotationList[0] < aObjectTypeData[type].rollRate) {
827 } else {
830 }
831 }
832 return 0;
833 }
834
836 anObjPitchRot[0] =
837 (short)((aObjectTypeData[type].yawRate * stRotationInput.x) / 8);
839 (short)-((aObjectTypeData[type].pitchRate * stRotationInput.y) / 8);
841 (short)-((aObjectTypeData[type].rollRate * stRotationInput.z) / 8);
842 return 0;
843}
844
845/* Function start: 0x4285D0 */
846unsigned int player_input(void)
847{
848 InputEventState event;
849 short pitchInput;
850 short eventType;
851 short queuedKeyEvent;
852 short horizontal;
853 short vertical;
854 unsigned short horizontalMagnitude;
855 unsigned short verticalMagnitude;
856 short yawInput;
857 short modifiers;
858 int keyboardRoll;
859 int viewportLeft;
860 int mouseX;
861 int afterburnerControl;
862 unsigned int buttons;
863 unsigned int key;
864
869 keyboardRoll = 0;
870 eventType = PollInputEvent(&event, 0xff);
871 wCurrentInputModifiers = (unsigned short)event.modifiers;
872 modifiers = event.modifiers;
873 TranslatePolledInputEvent((unsigned short)eventType, event.value);
876 queuedKeyEvent = IsInputEventQueued(5);
877 queuedKeyEvent |= IsInputEventQueued(3);
878 queuedKeyEvent |= IsInputEventQueued(4);
879 bCurrentKeyboardEvtQueued = queuedKeyEvent;
881 if (bMouseMoveEvtQueued == 0)
882 bCurrentKey |= 0x80;
883 /* Preserve the separate memory update without marking the key's address
884 * as taken throughout this unit. */
885 ((volatile signed char)bCurrentKey) |= 0x80;
886
887 if (bMouseCursorVisible == 0) {
888 key = PollKeyboardState();
889 bCurrentKey = (signed char)key;
890 if ((volatile signed char)bCurrentKey == 0) {
891 stRotationInput.z = 0;
893 stRotationInput.x = 0;
894 stRotationInput.y = 0;
895 } else {
898 switch (bCurrentKey) {
899 case 0x33:
900 case 0x34:
901 case 0x52:
902 case 0x53:
903 keyboardRoll = 1;
904 }
905 }
906 }
907
909 buttons = bHostSecondaryMouseButton * 2 |
911 if (buttons != 0) {
912 if (buttons == 3) {
913 bCurrentKey = 0x1c;
914 } else if (buttons == 1) {
915 bCurrentKey = 0x39;
917 }
918 if ((buttons & 2) == 0)
919 cPreviousKey = 0;
920 if (cPreviousKey == 0x0f && buttons == 2) {
921 bCurrentKey = 0x0f;
922 if (buttons == 1)
924 }
925 } else {
927 }
928 }
929
930 while ((eventType = GetNextInputEvent(&event)) != 0) {
931 switch (eventType) {
932 case 2:
933 if ((short)event.value == 1) {
934 bCurrentKey = 0x39;
935 if ((event.modifiers & 4) != 0) {
936 if (aeSpecialManeuvers[0] ==
939 else
940 bCurrentKey = 0x1c;
941 }
942 }
943 if ((short)event.value == 3)
944 bCurrentKey = 0x1c;
945 if ((short)event.value == 2 &&
947 if ((int)(nTickCount60Hz -
950 bCurrentKey = 0x0f;
952 }
953 if (cPreviousKey == 0x0f &&
954 (short)event.value == 2) {
955 bCurrentKey = 0x0f;
956 if ((short)event.value == 1)
958 }
960 break;
961 case 3:
962 case 5:
964 bCurrentKey = (signed char)event.value;
966 break;
967 case 6:
969 if (((unsigned char)
971 if (aeSpecialManeuvers[0] ==
974 else
975 bCurrentKey = 0x1c;
976 } else if ((stLastPolledFlightInput.buttons & 1) != 0) {
978 }
979 buttons = (stLastPolledFlightInput.buttons & 2) >> 1;
980 if (buttons != 0 &&
983 buttons = 0;
984 if (buttons != 0) {
986 accelerate((short)-(
988 } else {
989 if (stRotationInput.z != 0 &&
990 bFlightRollLatch == 0 &&
991 keyboardRoll == 0) {
993 stRotationInput.z = 0;
994 }
1004 (short)-stLastPolledFlightInput.y;
1005 }
1006 }
1009 bCurrentKey = 0x0f;
1010 if (cPreviousKey == 0x0f &&
1012 bCurrentKey = 0x0f;
1013 break;
1014 case 13:
1015 afterburnerControl =
1016 (unsigned short)(modifiers & 4) >= 1;
1017 if (afterburnerControl != 0 &&
1018 aeSpecialManeuvers[0] ==
1020 afterburnerControl = 0;
1021 if (bMouseCursorVisible == 0) {
1024 }
1025 if (*(volatile int *)&bCockpitlessView != 0) {
1026 switch (cCurrentCockpitView) {
1027 case 0:
1028 event.y -= 10;
1029 break;
1030 case 1:
1031 event.y -= 25;
1032 break;
1033 }
1034 horizontal = event.x +
1037 vertical = event.y -
1038 *(volatile short *)&nCurrentViewCenterPosY;
1039 } else {
1040 horizontal = event.x +
1043 vertical = event.y +
1045 }
1046 stMouseCursorState.x = event.x;
1047 stMouseCursorState.y = event.y;
1048 horizontalMagnitude = (short)abs((int)horizontal);
1049 verticalMagnitude = (short)abs((int)vertical);
1050 for (yawInput = 0;
1051 asMouseYawThresholds[yawInput] <=
1052 (short)horizontalMagnitude;
1053 yawInput++)
1054 ;
1055 if (horizontal < 0)
1056 yawInput = -yawInput;
1057 for (pitchInput = 0;
1058 asMousePitchThresholds[pitchInput] <=
1059 (short)verticalMagnitude;
1060 pitchInput++)
1061 ;
1062 if (vertical < 0)
1063 pitchInput = -pitchInput;
1064 mouseX = event.x;
1065 viewportLeft = stSpaceBufferViewport.left;
1066 if (mouseX - 4 <= viewportLeft)
1067 yawInput = -8;
1068 if ((int)stSpaceBufferViewport.right <= mouseX + 4)
1069 yawInput = 8;
1070 if ((int)event.y - 4 <= (int)stSpaceBufferViewport.top)
1071 pitchInput = -8;
1072 if ((int)stSpaceBufferViewport.bottom <= (int)event.y + 4)
1073 pitchInput = 8;
1074 if (yawInput >= 9)
1075 yawInput = 8;
1076 if (yawInput <= -9)
1077 yawInput = -8;
1078 if (pitchInput >= 9)
1079 pitchInput = 8;
1080 if (pitchInput <= -9)
1081 pitchInput = -8;
1082 if (afterburnerControl != 0) {
1084 pitchInput = -pitchInput;
1085 stRotationInput.z = nMouseYawInput = yawInput;
1086 nMousePitchInput = pitchInput;
1087 accelerate((short)(pitchInput / 2));
1088 } else if (bMouseAfterburnerControl == 1) {
1089 stRotationInput.z = 0;
1094 (short)((viewportLeft + stSpaceBufferViewport.right) / 2),
1095 (short)((stSpaceBufferViewport.bottom +
1097 } else {
1098 stRotationInput.z = 0;
1099 stRotationInput.y = nMouseYawInput = yawInput;
1100 stRotationInput.x = nMousePitchInput = pitchInput;
1101 }
1102 break;
1103 }
1104 }
1105
1108 return 0;
1109}
1110
1111/* Function start: 0x428C90 */
1113{
1114 short object;
1115
1116 object = (short)cViewObject;
1117 cViewObject = -1;
1118 do {
1119 object++;
1120 if (object > 9)
1121 object = 0;
1122 if (aeObjectClass[object] >= OBJECT_CLASS_SHIP)
1123 cViewObject = (signed char)object;
1124 } while (cViewObject == -1);
1125 return 0;
1126}
1127
1128/* Fleet-overview, modal-message, and HUD-text callees from other modules. */
1129void rotate_about_i(short angle, FixedVector *j,
1130 FixedVector *k);
1131void rotate_about_j(short angle, FixedVector *i,
1132 FixedVector *k);
1133short MinShort(short a, short b);
1134short __stdcall DosStrlen(const char *s);
1135short ShowModalTextPanel(short fontIndex, const char *format, ...);
1136void FatalErrorAndExit(const char *format, ...);
1137void SetHudMessageText(char *text, unsigned short colour,
1138 unsigned short duration);
1139void ShowHudTextLine(char *s, unsigned short b);
1140
1141/* Function start: 0x428CD0 */
1143{
1144 short object;
1145
1146 object = (short)cViewObject;
1147 cViewObject = -1;
1148 do {
1149 object--;
1150 if (object < 0)
1151 object = 9;
1152 if (aeObjectClass[object] >= OBJECT_CLASS_SHIP)
1153 cViewObject = (signed char)object;
1154 } while (cViewObject == -1);
1155 return 0;
1156}
1157
1158/* Function start: 0x428D10 */
1160{
1161 short key;
1162
1163 key = bCurrentKey;
1164 if (nCameraViewMode == 8) {
1165 bCurrentKey = 0;
1166 switch (key) {
1167 case 0x1c:
1168 cViewObject--;
1169 bCurrentKey = 0x29;
1170 break;
1171 case 0x47:
1172 nCapitalShipViewDistance -= 0x3200;
1173 break;
1174 case 0x48:
1175 rotate_about_i(-7,
1178 break;
1179 case 0x4b:
1183 break;
1184 case 0x4d:
1185 rotate_about_j(-7,
1188 break;
1189 case 0x4f:
1190 nCapitalShipViewDistance += 0x3200;
1191 break;
1192 case 0x50:
1196 break;
1197 case 0x52:
1198 aShipUpVector[EYE_OBJECT].z = -0x100;
1199 aShipFwdVec[EYE_OBJECT].y = 0x100;
1200 aShipRightVector[EYE_OBJECT].x = 0x100;
1207 break;
1208 default:
1209 bCurrentKey = (signed char)key;
1210 break;
1211 }
1212 }
1213 return 0;
1214}
1215
1216/* Function start: 0x428E70 */
1217/* Message dwell time: grows with text length, scaled by the speed setting. */
1218short MeasureMessageWidth(const char *text)
1219{
1220 return (short)((MinShort(5, (short)(DosStrlen(text) >> 1)) + 5) *
1221 ((char)bMessageSpeed + 1));
1222}
1223
1224/* Function start: 0x428EA0 */
1226{
1227 int acknowledged;
1228 int key;
1229
1230 if (mode != 0) {
1231 acknowledged = 0;
1232 do {
1234 if (IsInputEventQueued(4) != 0)
1235 acknowledged = 1;
1236 } while (acknowledged == 0);
1237 acknowledged = 0;
1240 do {
1242 if (IsInputEventQueued(3) != 0)
1243 acknowledged = 1;
1244 } while (acknowledged == 0);
1247 return;
1248 }
1251 do {
1252 key = PumpMessagesDuringWait();
1253 } while (key == 0x19 || key == 0x50 || key == 0x0c);
1255}
1256
1257/* Function start: 0x428F20 */
1258void ShowModalMessage(const char *format, ...)
1259{
1260 char text[52];
1261 va_list arguments;
1262
1263 va_start(arguments, format);
1264 vsprintf(text, format, arguments);
1265 va_end(arguments);
1266
1267 if (ShowModalTextPanel(1, text) != 0) {
1270 return;
1271 }
1272 SystemDebugPrintf(text);
1274}
1275
1276/* Function start: 0x428F80 */
1277void ReportOutOfMemoryAndExit(const char *resource)
1278{
1279 ShowModalMessage("ERROR: Out of memory for %s", resource);
1281}
1282
1283/* Function start: 0x428FA0 */
1284void ShowOnScreenMessage(int flags, short duration,
1285 const char *format, ...)
1286{
1287 short modalShown;
1288 char text[52];
1289 va_list arguments;
1290
1291 va_start(arguments, format);
1292 vsprintf(text, format, arguments);
1293 va_end(arguments);
1294
1295 modalShown = 0;
1297 if (duration == 9999)
1298 modalShown = ShowModalTextPanel(1, text);
1299 if (modalShown == 0) {
1300 if (duration == 0)
1301 duration = MeasureMessageWidth(text);
1305 cRedColour, duration);
1306 if (duration == 9999) {
1308 (unsigned short)cRedColour);
1310 }
1311 }
1312 if (duration == 9999) {
1313 if (flags != 0)
1315 else
1317 }
1318 if (modalShown != 0) {
1320 return;
1321 }
1322 if (duration == 9999)
1324}
1325
1326/* Function start: 0x4290A0 */
1327void ShowGamePausedBanner(short showBanner)
1328{
1329 if (showBanner != 0) {
1330 ShowOnScreenMessage(1, 9999, "GAME PAUSED");
1331 return;
1332 }
1334}
1335
1336/* Function start: 0x4290D0 */
1338{
1339 ShowOnScreenMessage(1, 9999, "WING COMMANDER VER. %s",
1340 pGameVersion);
1341}
1342
1343/* Function start: 0x4290F0 */
1345{
1347 (unsigned char)(((signed char)bMessageSpeed + 1) % 5);
1348 ShowOnScreenMessage(0, 0, "MESSAGES SPEED IS NOW %d.",
1349 (signed char)bMessageSpeed + 1);
1350}
1351
1352/* Function start: 0x429120 */
1353void ReportFramesSkipped(short adjustment)
1354{
1356 MaxShort((short)(nFrameSkip + adjustment), 1), 5);
1357 ShowOnScreenMessage(0, 0, "%d FRAMES SKIPPED.",
1358 nFrameSkip - 1);
1359}
1360
1361/* Function start: 0x429160 */
1363{
1364 int notRepeated;
1365 int control;
1366 int selectedWeapon;
1367 short wingman;
1368
1369 player_input();
1371 notRepeated = bCurrentKey != cPreviousKey;
1372 control = GetControlKeyState();
1375
1376 if (nTrainSimActive == 0) {
1377 switch (bCurrentKey) {
1378 case 2:
1379 case 3:
1380 case 4:
1381 case 5:
1382 case 6:
1383 case 7:
1384 case 8:
1385 case 9:
1386 case 10:
1387 if (notRepeated && get_mode(1) == 4 &&
1388 nCameraViewMode == 0 &&
1389 bCurrentKey >= 2 &&
1390 bCurrentKey <=
1392 get_mode(1) == 4) {
1394 (short)(bCurrentKey - 2));
1395 }
1396 break;
1397 case 0x12:
1398 if (notRepeated &&
1399 control != 0 &&
1401 if (RandomInRange(
1402 0, acPlayerComponentDamageList[7]) == 0)
1403 nArcadeState = 2;
1404 else
1405 malf_sound();
1406 }
1407 break;
1408 case 0x1e:
1409 if (notRepeated) {
1411 if (get_mode(1) != 5)
1413 if (bCockpitlessView == 0) {
1415 } else {
1418 &stSpaceBufferViewport, 0, 0,
1419 (short)(nScreenWidth - 1),
1420 (short)(nScreenHeight - 1));
1422 bCockpitlessView = -2;
1424 bCockpitlessView = 1;
1426 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1428 }
1433 }
1434 break;
1435 case 0x1f:
1436 if (control != 0 && notRepeated) {
1439 else
1441 }
1442 break;
1443 case 0x23:
1444 if (notRepeated && (wingman = nYourWingman) != -1 &&
1445 aeShipObjectiveList[wingman] !=
1447 request(0, wingman, 9);
1448 }
1449 break;
1450 case 0x2e:
1451 if (notRepeated) {
1452 if (message_showing() != 0) {
1453 EndCommMenu();
1454 } else {
1455 if (get_mode(1) != 4)
1457 else
1459 }
1460 }
1461 break;
1462 case 0x2f:
1463 if (notRepeated && control == 0) {
1466 if (bVideoImagesSuppressed != 0)
1467 SetHudMessageText("VIDEO IMAGES SUPRESSED",
1468 cRedColour, 20);
1469 else
1470 SetHudMessageText("VIDEO IMAGES ENABLED",
1471 cPrimaryTextColour, 20);
1472 }
1473 break;
1474 case 0x30:
1475 if (notRepeated && (wingman = nYourWingman) != -1 &&
1476 aeShipObjectiveList[wingman] ==
1478 any_enemy(0, 14000) != 0) {
1479 request(0, nYourWingman, 7);
1480 }
1481 break;
1482 case 0x31:
1483 if (notRepeated)
1486 break;
1487 case 0x32:
1488 if (notRepeated && control == 0)
1490 break;
1491 case 0x3b:
1492 if (GetF1KeyLatch() != 0) {
1493 if (cScreenViewMode == 0) {
1496 if (bCockpitlessView != 0) {
1497 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1498 {
1499 signed char screenMode = cScreenViewMode;
1500
1501 screenMode++;
1502 cScreenViewMode = screenMode;
1503 initialize_cockpit((int)screenMode - 1);
1504 }
1507 (int)stSpaceBufferViewport.left) / 2 + 1,
1509 } else {
1511 &stSpaceBufferViewport, 0, 0,
1512 (short)(nScreenWidth - 1),
1513 (short)(nScreenHeight - 1));
1514 {
1515 signed char screenMode = cScreenViewMode;
1516
1517 screenMode++;
1518 cScreenViewMode = screenMode;
1519 initialize_cockpit((int)screenMode - 1);
1520 }
1523 (int)stSpaceBufferViewport.left) / 2 + 1,
1525 (int)stSpaceBufferViewport.top) / 2);
1526 }
1527 } else {
1529 if (bCockpitlessView == 0) {
1530 new_view(0, 0);
1531 } else {
1534 &stSpaceBufferViewport, 0, 0,
1535 (short)(nScreenWidth - 1),
1536 (short)(nScreenHeight - 1));
1538 new_view(0, 0);
1540 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1542 }
1543 }
1548 }
1549 break;
1550 case 0x3c:
1552 if (bCockpitlessView == 0) {
1553 new_view(2, 0);
1554 break;
1555 }
1558 (short)(nScreenWidth - 1),
1559 (short)(nScreenHeight - 1));
1561 new_view(2, 0);
1563 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1565 break;
1566 case 0x3d:
1568 if (bCockpitlessView == 0) {
1569 new_view(1, 0);
1570 break;
1571 }
1574 (short)(nScreenWidth - 1),
1575 (short)(nScreenHeight - 1));
1577 new_view(1, 0);
1579 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1581 break;
1582 case 0x3e:
1584 if (bCockpitlessView == 0) {
1585 new_view(3, 0);
1586 break;
1587 }
1590 (short)(nScreenWidth - 1),
1591 (short)(nScreenHeight - 1));
1593 new_view(3, 0);
1595 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1597 break;
1598 case 0x3f:
1600 if (bCockpitlessView == 0) {
1601 new_view(4, 0);
1602 break;
1603 }
1606 (short)(nScreenWidth - 1),
1607 (short)(nScreenHeight - 1));
1609 new_view(4, 0);
1611 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1613 break;
1614 case 0x40:
1616 if (bCockpitlessView == 0) {
1617 new_view(14, 0);
1618 break;
1619 }
1622 (short)(nScreenWidth - 1),
1623 (short)(nScreenHeight - 1));
1625 new_view(14, 0);
1627 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1629 break;
1630 case 0x41:
1631 if (acShipTargetTable[0] == -1)
1632 break;
1634 if (bCockpitlessView == 0) {
1635 new_view(7, 0);
1636 break;
1637 }
1640 (short)(nScreenWidth - 1),
1641 (short)(nScreenHeight - 1));
1643 new_view(7, 0);
1645 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1647 break;
1648 case 0x42:
1649 if (notRepeated) {
1650 int missileCameraEnabled;
1651
1652 missileCameraEnabled = bMissileCameraEnabled ^ 1;
1654 bMissileCameraEnabled = missileCameraEnabled;
1655 if (missileCameraEnabled != 0)
1656 SetHudMessageText("MISSILE CAMERA ON",
1657 cRedColour, 20);
1658 else
1659 SetHudMessageText("MISSILE CAMERA OFF",
1660 cPrimaryTextColour, 20);
1661 }
1662 break;
1663 case 0x43:
1664 if (notRepeated) {
1667 if (bCockpitlessView == 0) {
1668 force_view(4, (short)cViewObject);
1669 break;
1670 }
1673 &stSpaceBufferViewport, 0, 0,
1674 (short)(nScreenWidth - 1),
1675 (short)(nScreenHeight - 1));
1677 force_view(4, (short)cViewObject);
1679 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
1681 break;
1682 }
1683 break;
1684 }
1685 }
1686
1687 switch (bCurrentKey) {
1688 case 1:
1690 if (nTrainSimActive != 0)
1691 return -1;
1692 if (get_mode(1) == 4) {
1694 return 0;
1695 }
1696 break;
1697 case 0x0c:
1698 case 0x4a:
1699 if (control != 0) {
1701 return 0;
1702 }
1703 accelerate(-1);
1704 return 0;
1705 case 0x0d:
1706 case 0x4e:
1707 if (control != 0) {
1709 return 0;
1710 }
1711 accelerate(1);
1712 return 0;
1713 case 0x0e:
1714 anShipSpeed[0] = 0;
1715 return 0;
1716 case 0x0f:
1717 case 0x37:
1719 return 0;
1720 case 0x11:
1721 if (notRepeated) {
1723 return 0;
1724 }
1725 break;
1726 case 0x14:
1727 if (notRepeated) {
1729 return 0;
1730 }
1731 break;
1732 case 0x19:
1733 ShowGamePausedBanner((short)(control == 0));
1735 return 0;
1736 case 0x1c:
1737 if (notRepeated &&
1738 (selectedWeapon = nSelectedReleaseWeaponIndex) != -1) {
1739 if (((ShipWeaponSlot *)&aShipWeaponsTable[0][1])[
1740 selectedWeapon].type == OBJECT_TYPE_SPACE_MINE) {
1742 return 0;
1743 }
1744 if (nExternalViewShip == -1) {
1746 (short)fire_missile(0);
1747 if (bMissileCameraEnabled == 1 &&
1748 nExternalViewShip != -1) {
1750 return 0;
1751 }
1752 }
1753 }
1754 break;
1755 case 0x32:
1756 if (notRepeated && control != 0) {
1757 if (nMusicVolumeSetting == 0)
1759 else
1762 (unsigned short)anVolumeLevels[
1763 nMusicVolumeSetting / 2]);
1764 ShowOnScreenMessage(0, 0, "MUSIC VOLUME: %d.",
1766 return 0;
1767 }
1768 break;
1769 case 0x1f:
1770 if (control != 0 && notRepeated) {
1771 if (nSfxVolumeSetting == 0)
1772 nSfxVolumeSetting = 20;
1773 else
1777 nSfxVolumeSetting / 2]);
1778 ShowOnScreenMessage(0, 0, "SFX VOLUME: %d.",
1779 nSfxVolumeSetting / 2);
1780 return 0;
1781 }
1782 break;
1783 case 0x20:
1784 if (notRepeated) {
1786 return 0;
1787 }
1788 break;
1789 case 0x22:
1790 if (notRepeated) {
1792 return 0;
1793 }
1794 break;
1795 case 0x24:
1796 if (control != 0) {
1798 return 0;
1799 }
1800 break;
1801 case 0x26:
1802 if (notRepeated) {
1804 (short)(nTargetLockMode == 0);
1805 PlaySfxWaveFileByNumber(0x19, -1, 0);
1806 if (get_mode(1) == 3) {
1808 return 0;
1809 }
1810 } else {
1812 return 0;
1813 }
1814 break;
1815 case 0x2b:
1816 accelerate(9000);
1817 return 0;
1818 case 0x2f:
1819 if (notRepeated && control != 0) {
1821 return 0;
1822 }
1823 break;
1824 case 0x39:
1826 break;
1827 }
1828 return 0;
1829}
1830
1831/* Function start: 0x429DD0 */
1850
1851/* Function start: 0x429E30 */
1853{
1856 (nTrainSimMission + 1) +
1858 (nArcadeWave * 5 + 5) * 2) * 50) * 2;
1859}
1860
1861/* Function start: 0x429E70 */
1863{
1865 (short)((nArcadeWave + 6) * 400);
1866}
1867
1868/* Function start: 0x429E90 */
1869void DrawArcadeScorePanel(short x, short y)
1870{
1871 char score[20];
1872
1873 sprintf(score, "%0ld", nCurrentArcadeScore);
1874 DrawFormattedText("%X%YScore: %s0 %XTime: %u %X1 UP",
1875 x, y, score, x + 0x82,
1876 nArcadeTimeRemaining, x + 0xbe);
1877}
1878
1879/* Function start: 0x429EE0 */
1881{
1882 char bonus[20];
1883
1884 if (nTrainSimActive != 0) {
1886 DrawArcadeScorePanel(10, 10);
1887 if (nArcadeBonusCountdown <= 0) {
1890 if (nArcadeTimeRemaining <= 0) {
1891 nArcadeState = 4;
1892 return;
1893 }
1894 } else {
1895 sprintf(bonus, "%0ld", nArcadeWaveBonusValue);
1897 (unsigned short)((stSpaceBufferViewport.top +
1898 stSpaceBufferViewport.bottom) / 2 - 5));
1899 if (nCurrentWave != -1) {
1901 "Wave %d complete.\n\nBonus Points: %s0%P",
1902 nArcadeWave + 1, bonus);
1903 return;
1904 }
1906 "Mission %d complete.\n\nBonus Points: %s0%P",
1907 nTrainSimMission + 1, bonus);
1908 }
1909 }
1910}
1911
1912/* Function start: 0x429FC0 */
1946
1947/* Function start: 0x42A0C0 */
1948unsigned int RefreshCockpitStatus(void)
1949{
1950 Update_3Space();
1951 if (nFrameSkipCounter <= 1)
1953 return Draw_3Space_Frame();
1954}
1955
1956/* Function start: 0x42A0E0 */
1957short GetShipDistanceToNavPoint(short ship, MissionNavPoint *navPoint)
1958{
1959 FixedVector delta;
1960
1962 &navPoint->position, &delta);
1964}
1965
1966/* Function start: 0x42A120 */
1967short FindNearestNavPoint(short ship)
1968{
1969 short navPointIndex = 0;
1971
1972 do {
1973 if (navPoint->type == 1 &&
1974 GetShipDistanceToNavPoint(ship, navPoint) < navPoint->proximityRadius)
1975 return navPointIndex;
1976 navPointIndex++;
1977 navPoint++;
1978 } while (navPointIndex < ACTIVE_MISSION_NAV_POINT_COUNT);
1979
1981}
1982
1983/* Function start: 0x42A170 */
1984unsigned int ReleaseStaleNavTarget(void)
1985{
1986 short v = FindNearestNavPoint(0);
1987
1988 if (nCurrentNavigationPoint != v)
1990 return 0;
1991}
1992
1993/* Function start: 0x42A190 */
1994int RunSpaceFlight(short entryNavPoint)
1995{
1996 Viewport *savedViewport;
1997 unsigned int frameReady;
1998
1999 bCockpitlessView = 0;
2000 if (nTrainSimActive == 0 &&
2001 bCockpitEnabled == 0)
2002 bCockpitlessView = 1;
2004 bInputModeState = 1;
2006 savedViewport = stMouseCursorState.viewport;
2009
2010 if (entryNavPoint == -1)
2011 entryNavPoint = aMissionShips[
2013 set_up_action_sphere(entryNavPoint);
2014
2015 if (bCockpitlessView != 0) {
2018 (unsigned short)(nScreenWidth - 1),
2019 (unsigned short)(nScreenHeight - 1));
2021 new_view(0, 0);
2023 SetViewportRect(&stSpaceBufferViewport, 0, 0, 319, 199);
2033 }
2034
2035 copy_frame(0, 62);
2038 (short)((stSpaceBufferViewport.top +
2043 nArcadeState = 0;
2044 DIBslam();
2045 DIBslamReal();
2051 frameReady = 1;
2052
2053 while (nArcadeState == 0) {
2055 if (HandleSpaceFlightControls() == -1) {
2056 nArcadeState = 5;
2057 break;
2058 }
2060 if (nArcadeState == 0) {
2061 Update_3Space();
2063 frameReady = RenderSpaceViewFrame();
2066 } else {
2070 }
2072 if (frameReady != 0) {
2073 frameReady = 0;
2074 DIBslam();
2075 DIBslamReal();
2076 }
2079 (int)((unsigned int)liFlightFrameEndCounter.QuadPart -
2080 (unsigned int)liFlightAfterCockpitCounter.QuadPart);
2081 nHudDelta =
2082 (int)((unsigned int)liFlightAfterCockpitCounter.QuadPart -
2083 (unsigned int)liRenderDoneCounter.QuadPart);
2084 nDrawDelta =
2085 (int)((unsigned int)liRenderDoneCounter.QuadPart -
2086 (unsigned int)liSimulationDone.QuadPart);
2088 (int)((unsigned int)liSimulationDone.QuadPart -
2089 (unsigned int)liFlightAfterInputCounter.QuadPart);
2090 nInputTicks =
2091 (int)((unsigned int)liFlightAfterInputCounter.QuadPart -
2092 (unsigned int)liFrameStart.QuadPart);
2094 (int)((unsigned int)liFlightFrameEndCounter.QuadPart -
2095 (unsigned int)liFrameStart.QuadPart);
2099 }
2100
2103 (unsigned short)(nScreenWidth - 1),
2104 (unsigned short)(nScreenHeight - 1));
2105 bCockpitlessView = 0;
2106 if (nArcadeState == 1)
2107 flag_objective(find_objective(1, -1), 2);
2108 bCockpitlessView = 0;
2110 stMouseCursorState.viewport = savedViewport;
2114 QueueInputEvent(13, 160, 100, 0, 0, 0, 0);
2116 return nArcadeState;
2117}
2118
2119/* Objective-flag callee of the damage evaluation below. */
2120void flag_objective(short objective, unsigned char flags);
2121
2122/* Function start: 0x42A520 */
2124{
2125 ObjectTypeData *typeData;
2126 short damage;
2127
2128 typeData = &aObjectTypeData[aeObjectTypeList[0]];
2129 damage = (short)(((typeData->armorLeft -
2130 aasShipArmor[0][2]) * 4) /
2131 typeData->armorLeft);
2132 damage = (short)(damage +
2133 ((typeData->armorRear - aasShipArmor[0][1]) * 4) /
2134 typeData->armorRear);
2135 damage = (short)(damage +
2136 ((typeData->armorRight - aasShipArmor[0][3]) * 4) /
2137 typeData->armorRight);
2138 damage = (short)(damage +
2139 ((typeData->armorFront - aasShipArmor[0][0]) * 4) /
2140 typeData->armorFront);
2141 damage = (short)(
2142 (acShipDmg[0] * 30) / typeData->damageCapacity +
2143 damage * 2);
2144 damage = (short)(damage +
2145 asShipAccumulatedDmg[0] * 5);
2146
2147 if (damage < 5)
2148 return 0;
2149 if (damage < 40)
2150 return 1;
2151 if (damage < 70)
2152 return 2;
2153 return 3;
2154}
2155
2156/* Function start: 0x42A610 */
2158{
2159 short mouseX;
2160 short mouseY;
2161 short frame;
2162 TitleMenuRegion *region;
2163
2164 frame = 0;
2165 mouseX = stMouseCursorState.x;
2166 mouseY = stMouseCursorState.y;
2167 for (region = aTrainSimMissionRegions; region->frame != -1; region++) {
2168 if (IsPointInRect(mouseX, mouseY, &region->left) != 0)
2169 frame = region->frame;
2170 }
2172}
2173
2174/* Function start: 0x42A670 */
2179
2180/* Function start: 0x42A680 */
2182{
2183 short mouseX;
2184 short mouseY;
2185 short state;
2186 short frame;
2187 const TitleMenuRegion *region;
2188 short index;
2189
2190 mouseX = stMouseCursorState.x;
2192 index = 0;
2193 region = stCurrentRoomMenu.regions;
2194 mouseY = stMouseCursorState.y;
2196 while (region->frame != -1) {
2197 state = IsPointInRect(mouseX, mouseY, &region->left);
2198 if (state != 0) {
2199 frame = region->frame;
2200 if (index >= 20)
2201 return;
2202 if (index < 0)
2203 return;
2204 SelectRoomMenuLabel(index);
2205 }
2206 index++;
2207 region++;
2208 }
2210}
2211
2212/* Function start: 0x42A700 */
2213void __stdcall FadeViewportPaletteToColour(Viewport *viewport,
2214 unsigned short colour,
2215 short enabled)
2216{
2217 unsigned char *indices;
2218 short target[3];
2219 short *currentPalette;
2220 short *targetPalette;
2221 unsigned int paletteBytes;
2222 short index;
2223 short paletteIndex;
2224 short activeCount;
2225
2226 (void)enabled;
2227 if (nVideoMode == 0x13) {
2228 indices = AllocateTaggedMemory(256, 0);
2229 if (indices == 0)
2230 return;
2231 memset(indices, 0, 256);
2232 activeCount = CollectActivePaletteIndices(viewport, indices, 256);
2233 paletteBytes = (unsigned int)(activeCount * 6);
2234 currentPalette = AllocateTaggedMemory(paletteBytes, 0);
2235 if (currentPalette == 0) {
2236 ReleasePacketHandle(indices);
2237 return;
2238 }
2239 memset(currentPalette, 0, paletteBytes);
2240 targetPalette = AllocateTaggedMemory(paletteBytes, 0);
2241 if (targetPalette == 0) {
2242 ReleasePacketHandle(indices);
2243 ReleasePacketHandle(currentPalette);
2244 return;
2245 }
2246 memset(targetPalette, 0, paletteBytes);
2247
2248 GetPaletteEntry((short)colour, target);
2249 for (index = 0; index < activeCount; index++) {
2250 GetPaletteEntry((short)indices[index],
2251 &currentPalette[index * 3]);
2252 memcpy(&targetPalette[index * 3], target, 6);
2253 }
2254
2255 while (StepPaletteTransition(
2256 currentPalette, targetPalette,
2257 (short)(activeCount * 3)) != 0) {
2258 for (paletteIndex = 0; paletteIndex < activeCount; paletteIndex++) {
2259 abPaletteTripletsArray[indices[paletteIndex]][0] =
2260 (unsigned char)currentPalette[paletteIndex * 3];
2261 abPaletteTripletsArray[indices[paletteIndex]][1] =
2262 (unsigned char)currentPalette[paletteIndex * 3 + 1];
2263 abPaletteTripletsArray[indices[paletteIndex]][2] =
2264 (unsigned char)currentPalette[paletteIndex * 3 + 2];
2265 }
2267 }
2268
2269 ReleasePacketHandle(targetPalette);
2270 ReleasePacketHandle(currentPalette);
2271 ReleasePacketHandle(indices);
2272 }
2273 DIBslam();
2274 DIBslamReal();
2275}
void(__cdecl *pIxFree)(void *)
void DosInterruptHandlerHook(void)
Definition eventmgr.c:1097
unsigned char bEscapePressedFlag
Definition mathfp.c:24
InputDeviceSample aInputDevSamples[2]
Definition nav.c:78
short bSlowSceneAnimation
Definition init.c:11
MissionHeaderDisk stCurrentMissionHeader
Definition mission.c:57
volatile signed char cPreviousKey
Definition game.c:31
int bCockpitEnabled
Definition winmain.c:41
unsigned char cRedColour
Definition init.c:16
unsigned short wCurrentInputModifiers
Definition strdos.c:18
short nCurrentWave
Definition game.c:34
int nCameraViewMode
Definition game.c:49
short nRenderedSpaceFrame
Definition input.c:22
signed char aShipWeaponsTable[10][0x47]
Definition dib.c:108
int nDamageDisplayPhase
Definition main.c:88
struct Shape * pLaunchDoorShape
Definition main.c:89
int nCapitalShipViewDistance
Definition spc.c:13
signed char acPlayerComponentDamageList[9]
Definition smart.c:19
ObjectTypeData aObjectTypeData[OBJECT_TYPE_COUNT]
Definition objdata.c:86
char szHudMessageBuf[0x60]
Definition music.c:97
TextContext stDefaultTxtContext
Definition targ.c:14
unsigned char cBlackColour
Definition init.c:12
ShortVector stRotationInput
Definition comm.c:50
int nInputTickScale
Definition data.c:245
short nVideoMode
Definition video.c:12
int nUnusedFlightProfileTicksB
Definition gr.c:1524
int nFlightSoundEffectsEnabled
Definition music.c:29
short anObjectRollRotationList[SPACE_OBJECT_COUNT]
Definition screen.c:16
short anObjectYawRotation[SPACE_OBJECT_COUNT]
Definition joycal.c:33
short anObjPitchRot[SPACE_OBJECT_COUNT]
Definition data.c:247
short asShipAccumulatedDmg[SPACE_OBJECT_COUNT]
Definition music.c:89
TextContext * pCurTextContext
Definition data.c:244
short nArcadeBonusCountdown
Definition main.c:42
short asInputButton2DoubleClick[2]
Definition damage.c:46
unsigned char cViewportClearColour
Definition init.c:13
const ScreenViewportGeometry * pScreenViewGeometry
Definition strdos.c:14
signed char acShipDmg[10]
Definition game.c:553
ShortVector stPreviousRotationInput
Definition joycal.c:32
CampaignState stInitialCampaignState
Definition killbrd.c:24
int bViewportDirty
Definition main.c:27
volatile int bMouseCursorVisible
Definition main.c:43
int bCockpitlessView
Definition main.c:39
TextContext stCurrentConvTxtCtx
Definition targ.c:15
short nFrameSkipCounter
Definition main.c:23
short asShipWpnEnergyList[10]
Definition comm.c:54
int nUnusedFlightProfileTicksC
Definition gr.c:1525
unsigned char bInputModeState
Definition eventmgr.c:21
unsigned char bVideoImagesSuppressed
Definition comm.c:15
int bPtrMovedByKeyboardState
Definition disk.c:43
FixedVector aShipRightVector[64]
Definition smart.c:15
enum ShipObjective aeShipObjectiveList[12]
Definition video.c:22
MissionNavPoint aMissionNavPoints[MISSION_NAV_POINT_COUNT]
Definition game.c:199
short nFrameSkip
Definition main.c:24
unsigned char abPaletteTripletsArray[256][3]
Definition main.c:91
enum ObjectClass aeObjectClass[SPACE_OBJECT_COUNT]
Definition video.c:21
short bCurrentExpandedMemoryAvail
Definition eventmgr.c:27
short bMouseMoveEvtQueued
Definition main.c:95
short nYourWingman
Definition game.c:61
short aasShipArmor[10][4]
Definition comm.c:53
unsigned char abDiskPromptDriveStates[0x20]
Definition disk.c:41
int bShowFrameRate
Definition winmain.c:36
unsigned char bInputPollingGuard
Definition main.c:44
Viewport stCurrentConvTextViewport
Definition timer.c:17
MouseCursorState stMouseCursorState
Definition strdos.c:19
InputDeviceSample stPreviousFlightInput
Definition main.c:92
short nArcadeTimeRemaining
Definition trainsim.c:40
Viewport stSceneBuffer
Definition select.c:17
short aPaletteFadeEntries[6][3]
Definition select.c:18
int nArcadeWaveBonusValue
Definition trainsim.c:42
int bDirectDrawModeCascadeEnabled
Definition winmain.c:37
Viewport stCurrentTrainSimTitleDisplayViewport
Definition main.c:99
short nStartNavPointOverride
Definition main.c:41
short bCurrentRunningFromHardDiskFlag
Definition strdos.c:22
int nMusicVolumeSetting
Definition main.c:26
short nExternalViewShip
Definition game.c:52
signed char cCurrentCockpitView
Definition screen.c:23
unsigned char cPrimaryViewBufferColour
Definition init.c:27
int nArcadeState
Definition main.c:22
char szDefaultTxtBuf[0xc8]
Definition timer.c:18
short nTrainSimMission
Definition trainsim.c:32
short bJoystickEventQueued
Definition main.c:97
int anShipSpeed[64]
Definition data.c:248
short asDamageFlashColour[3]
Definition targ.c:16
short nScreenWidth
Definition data.c:34
Viewport stScreenView
Definition launch.c:50
Viewport stSpaceBufferViewport
Definition timer.c:13
int nUnusedFlightProfileTicksA
Definition gr.c:1523
int bSavedGameExists
Definition barracks.c:61
int bViewBufferEnabled
Definition main.c:38
int nTickCount60Hz
Definition mathfp.c:23
unsigned char cPrimaryTextColour
Definition init.c:18
short asObjectCounterArray[SPACE_OBJECT_COUNT]
Definition game.c:547
short nMusicPlaybackMode
Definition music.c:14
int nCannedSceneMode
Definition main.c:21
short nArcadeWave
Definition trainsim.c:33
FixedVector aShipUpVector[64]
Definition smart.c:16
CampaignState stCampaignState
Definition dib.c:107
int bCampaignActive
Definition gameflow.c:22
short nCurrentSpaceFrameValue
Definition data.c:249
unsigned char abCockpitLightGoalArray[7]
Definition spc.c:22
int bMissileCameraEnabled
Definition game.c:98
TextContext stHudMessageTextContext
Definition launch.c:51
int bHostPrimaryMouseButton
Definition mono.c:327
int nTrainSimActive
Definition trainsim.c:31
short nCommMenuChoiceCount
Definition comm.c:10
short nCurrentActiveInputDevice
Definition nav.c:60
signed char cScreenViewMode
Definition strdos.c:13
int nSelectedReleaseWeaponIndex
Definition game.c:70
short nCurrentNavigationPoint
Definition music.c:90
enum ObjectType aeObjectTypeList[SPACE_OBJECT_COUNT]
Definition data.c:255
Viewport stModalSrcViewport
Definition select.c:14
char szInsufficientMemory[100]
Definition init.c:40
short bMouseButtonEventQueuedFlag
Definition main.c:93
short nMainArcadeStartupParameterValue
Definition main.c:98
int bHostSecondaryMouseButton
Definition mono.c:328
char * pCurrentStartupArgumentsPtr[30]
Definition main.c:96
int bCampaignStartupMode
Definition gameflow.c:16
unsigned char bMessageSpeed
Definition comm.c:12
MissionShipRecord aMissionShips[MISSION_SHIP_STORAGE_COUNT]
Definition game.c:230
short nCurrentHazardFieldTotal
Definition dib.c:100
short nScreenHeight
Definition data.c:37
short bCurrentKeyboardEvtQueued
Definition main.c:94
int dwOriginalFreeMem
Definition ship.c:59
FixedVector aShipPositionsArray[SPACE_OBJECT_COUNT]
Definition game.c:556
signed char bCurrentKey
Definition game.c:28
int nCurrentDamageAlarmSfxHandle
Definition spc.c:23
FixedVector aShipFwdVec[64]
Definition smart.c:17
int nSavedDosInterruptVector
Definition mathfp.c:20
char * pGameVersion
Definition version.c:12
signed char acShipTargetTable[16]
Definition joycal.c:30
short nCurrentViewCenterPosY
Definition eventmgr.c:26
int nDmgDispState
Definition main.c:87
int nCurrentArcadeScore
Definition trainsim.c:36
short nTargetLockMode
Definition game.c:95
enum SpecialManeuver aeSpecialManeuvers[12]
Definition game.c:549
signed char cViewObject
Definition game.c:13
int nSfxVolumeSetting
Definition main.c:25
int bPlayerCollisionsEnabled
Definition main.c:35
RoomMenu stCurrentRoomMenu
Definition killbrd.c:184
unsigned int nCurrentFrameTimerIdValue
Definition main.c:90
TitleMenuRegion aTrainSimMissionRegions[5]
Definition trainsim.c:24
static LARGE_INTEGER liRenderDoneCounter
Definition main.c:83
static int nFlightPresentDelta
Definition main.c:77
static int nShowMemoryStatus
Definition main.c:40
static LARGE_INTEGER liSimulationDone
Definition main.c:79
static LARGE_INTEGER liFrameStart
Definition main.c:78
static LARGE_INTEGER liFlightFrameEndCounter
Definition main.c:76
static unsigned char bFlightRollLatch
Definition main.c:63
static int nFlightFrameTicks
Definition main.c:73
static short asMousePitchThresholds[6]
Definition main.c:58
static short nMousePitchInput
Definition main.c:68
static volatile unsigned char bAfterburnerButtonLatched
Definition main.c:64
unsigned int _ovrbuffer
Definition main.c:20
static int bMouseAfterburnerControl
Definition main.c:47
static short nMouseYawInput
Definition main.c:66
static int nInputTicks
Definition main.c:82
static InputDeviceSample stLastPolledFlightInput
Definition main.c:45
static int nSimulationDelta
Definition main.c:80
static unsigned int dwLastSecondaryButtonPress
Definition main.c:61
static int nHudDelta
Definition main.c:74
static LARGE_INTEGER liFlightAfterCockpitCounter
Definition main.c:81
static int nDrawDelta
Definition main.c:84
static LARGE_INTEGER liFlightAfterInputCounter
Definition main.c:75
static short asMouseYawThresholds[6]
Definition main.c:54
static int anVolumeLevels[11]
Definition main.c:30
int bPlayerCollisionResponse
Definition main.c:37
int bPlayerVulnerable
Definition main.c:36
int nOriginDevUnlock
Definition main.c:34
enum ObjectType playerShipType
Definition wcdata.h:711
signed char currentSeries
Definition wcdata.h:715
signed char currentMission
Definition wcdata.h:714
unsigned int buttons
Definition wc1base.h:152
unsigned int value
Definition wc1base.h:140
short modifiers
Definition wc1base.h:142
short playerMissionShip
Definition wcdata.h:565
FixedVector position
Definition wcdata.h:859
short proximityRadius
Definition wcdata.h:860
signed char type
Definition wcdata.h:858
signed char navPoint
Definition wcdata.h:885
Viewport * viewport
Definition wc1base.h:110
struct Shape * shape
Definition wc1base.h:107
unsigned short frame
Definition wc1base.h:108
short armorRight
Definition wcdata.h:392
short armorRear
Definition wcdata.h:390
short damageCapacity
Definition wcdata.h:376
short armorLeft
Definition wcdata.h:391
short armorFront
Definition wcdata.h:389
short cursorFrame
Definition wc1base.h:287
const struct TitleMenuRegion * regions
Definition wc1base.h:288
short z
Definition wcdata.h:435
short x
Definition wcdata.h:433
short y
Definition wcdata.h:434
char * text
Definition wc1base.h:242
Viewport * viewport
Definition wc1base.h:236
unsigned char alignment
Definition wc1base.h:244
unsigned char * pixels
Definition wc1base.h:74
short right
Definition wc1base.h:78
short bottom
Definition wc1base.h:79
short left
Definition wc1base.h:76
short top
Definition wc1base.h:77
Umbrella header for the game core.
void ShowOnScreenMessage(int flags, short duration, const char *fmt,...)
Definition main.c:1284
void SystemDebugPrintf(const char *fmt,...)
Definition pilot.cpp:182
void ShowGamePausedBanner(short showBanner)
Definition main.c:1327
unsigned int RefreshMemoryStatusOverlay(void)
Definition main.c:467
int process_player_input(void)
Definition main.c:605
void * AllocateTaggedMemory(int size, unsigned short flags)
Definition ending.c:31
short get_mode(short i)
Definition cockpt.c:690
unsigned int InitializeConversationText(void)
Definition main.c:448
void FormatTextBufferFromStart(const char *format,...)
Definition cockpt.c:211
unsigned int initialize_cockpit(int requestedMode)
Definition logic.c:1481
short __stdcall IsPointInRect(short x, short y, const short *rect)
Definition mathfp.c:217
unsigned int RenderSpaceViewFrame(void)
Definition main.c:1913
void SetMousePosition(int x, int y)
Definition winsys.c:56
void DIBslam(void)
Definition dib.c:513
void UpdateTrainSimMenuCursor(void)
Definition main.c:2157
char PumpMessagesDuringWait(void)
Definition pilot.cpp:188
unsigned int InitializeTextContextFromFont(TextContext *context, short fontIndex, unsigned char colour, signed char background)
Definition disk.c:192
short LogMemoryUsage(void)
Definition main.c:102
short __stdcall PollInputEvent(InputEventState *event, short filter)
Definition eventmgr.c:336
void LoadVolumeSettingsFromRegistry(void)
Definition sound.c:362
void SaveVolumeSettingsToRegistry(void)
Definition sound.c:392
unsigned int house_keep(void)
Definition main.c:531
short GetShipDistanceToNavPoint(short ship, MissionNavPoint *navPoint)
Definition main.c:1957
void SetMusicStreamVolume(unsigned short volume)
Definition gr.c:1464
void ResetSoundStateForFlight(void)
Definition music.c:684
int HandleSpaceFlightControls(void)
Definition main.c:1362
void check_message(void)
Definition cockpt.c:789
void rotate_about_i(short angle, FixedVector *j, FixedVector *k)
Definition geom.c:508
void ClearRoomMenuLabel(void)
Definition killbrd.c:206
void StartupHook(unsigned int(*callback)(unsigned int, short))
Definition eventmgr.c:1114
int set_up_action_sphere(short navPoint)
Definition mission.c:519
void __stdcall SetWholePaletteFromTriplets(unsigned char *palette)
Definition mathfp.c:172
unsigned short __stdcall AllocateViewport(Viewport *viewport, short clearColour, short flags)
Definition view.c:758
unsigned int LoadOriginFxDrivers(void)
Definition init.c:125
void UpdateRoomMenuCursor(void)
Definition main.c:2181
unsigned int force_view(int view, short obj)
Definition spc.c:464
unsigned int FadeFlightPaletteEntry(short *entry)
Definition main.c:496
unsigned int free_inflight_music(void)
Definition logic.c:2024
long Vector_magnitude(const FixedVector *vector)
Definition mathfp.c:132
unsigned int Draw_3Space_Frame(void)
Definition main.c:1832
void ResetSoundStateForScene(void)
Definition music.c:677
void __stdcall GetPaletteEntry(short index, short *rgb)
Definition gr.c:648
unsigned int fire_players_lasers(void)
Definition main.c:802
void __stdcall SetTextCursor(unsigned short a, unsigned short b)
Definition mathfp.c:145
void FigureArcadeTime(void)
Definition main.c:1862
unsigned int AbortToDesktop(void)
Definition winmain.c:665
void ShowHudTextLine(char *s, unsigned short b)
Definition cockpt.c:1875
void CalibrateJoystickInteractive()
Definition joystick.c:13
int RunSpaceFlight(short entryNavPoint)
Definition main.c:1994
unsigned int RunAnimationDemoLoop(signed char animation)
Definition cutscene.c:1337
void SetSpaceFlightFrameTiming(void)
Definition dib.c:173
unsigned int RestoreTransientCockpitGraphics(void)
Definition cockpt.c:2170
void your_afterburner(void)
Definition ship.c:2200
void EndCommMenu(void)
Definition comm.c:427
int Title_Sequence(void)
Definition title.c:119
unsigned int PollKeyboardState(void)
Definition winsys.c:62
void get_player_input(void)
Definition main.c:575
unsigned int GetMessagePumpResult(void)
Definition init.c:311
unsigned short __stdcall StepPaletteTransition(short *current, const short *target, short componentCount)
Definition fade.c:22
void init_player_input(void)
Definition main.c:564
void auto_pilot_sequence(void)
Definition auto.c:104
unsigned int GetFixedOneMillionThunkAlt(short memoryType)
Definition ending.c:78
int fire_missile(short ship)
Definition ship.c:1905
short FixedToShortSaturating(int value)
Definition geom.c:193
void FlushInputEvents(void)
Definition eventmgr.c:381
void __stdcall SetPaletteEntry(short index, short *rgb)
Definition gr.c:654
short MinShort(short a, short b)
Definition mathutil.c:20
void ShowModalMessage(const char *format,...)
Definition main.c:1258
unsigned int TriggerPlayerHitPaletteFlash(void)
Definition main.c:488
void DIBslamReal(void)
Definition dib.c:519
unsigned int house_keep_objects(void)
Definition spc.c:850
unsigned int clear_view_buffer(void)
Definition main.c:414
unsigned int GetScreenUpdateFlag(void)
Definition main.c:361
void ReportFramesSkipped(short adjustment)
Definition main.c:1353
unsigned int SelectNextExternalViewObject(void)
Definition main.c:1112
void InvalidateVduMode(short i)
Definition cockpt.c:764
int fire_fixed_projectile_weapon(short obj)
Definition ship.c:1935
short find_objective(int type, short index)
Definition targ.c:26
int main(short argc, char **argv)
Definition main.c:171
void __stdcall SetEventManagerPump(void(*pump)(void))
Definition strdos.c:126
void BlitViewportScanlineRuns(Viewport *source, Viewport *destination, const ScreenViewportGeometry *geometry)
Definition gr.c:1290
void ReadPerformanceCounter(LARGE_INTEGER *p)
Definition mono.c:405
void __stdcall SetTextContext(TextContext *context)
Definition mathfp.c:152
void QueueInputEvent(int type, int x, int y, int value, int primaryButton, int secondaryButton, unsigned int timestamp)
Definition eventmgr.c:114
void DrawFilledViewportRect(Viewport *viewport, short left, short top, short right, short bottom, short colour)
Definition gr.c:1033
unsigned int update_objects_in_space(void)
Definition spc.c:985
unsigned int UpdateSpacePaletteFade(void)
Definition main.c:509
void CloseCommChoiceMenu(void)
Definition comm.c:164
void GetArcadeBonus(void)
Definition main.c:1852
unsigned int PumpWindowMessages(void)
Definition winmain.c:740
void copy_frame(short source, short destination)
Definition geom.c:585
unsigned int EMShutDown(void)
Definition init.c:89
char *__stdcall DosStrcpy(char *dst, const char *src)
Definition strdos.c:49
void ResetMouseCursorFrame(void)
Definition main.c:2175
short __stdcall GetNextInputEvent(InputEventState *event)
Definition eventmgr.c:228
unsigned int initialize_view_buffer(void)
Definition main.c:371
short LoadWingCmdrCfgFile(short argc, char **argv)
Definition install.c:95
unsigned short GetOriginalFreeMemory(void)
Definition eventmgr.c:1108
void update_cockpit(void)
Definition cockpt.c:2895
void __stdcall ShutdownVideoHook(short mode)
Definition video.c:29
void WaitForVerticalBlankThunk(void)
Definition mathfp.c:158
void __stdcall SetFrameTimerPeriodDirect(short p)
Definition eventmgr.c:617
void ClearDebugPauseFlags(void)
Definition pilot.cpp:229
short GameFlow(void)
Definition gameflow.c:244
unsigned int ResetCockpitPaletteEntries(void)
Definition logic.c:1457
unsigned int Chosen_communicate_option(short choice)
Definition comm.c:364
void ShutdownHook(int vector, void *handler)
Definition eventmgr.c:1161
void __stdcall FadeViewportPaletteToColour(Viewport *viewport, unsigned short colour, short enabled)
Definition main.c:2213
unsigned int overlay_head_up_display(void)
Definition cockpt.c:2080
void TranslatePolledInputEvent(unsigned short type, unsigned int value)
Definition eventmgr.c:36
unsigned int init_inflight_music(void)
Definition logic.c:2015
unsigned int GetF1KeyLatch(void)
Definition winmain.c:817
void MouseIdleHook(void)
Definition eventmgr.c:1091
void ExitCleanupHook(void)
Definition eventmgr.c:1199
unsigned int GetJoystickButtonEdge(unsigned int a, short b)
Definition main.c:162
void draw_sorted_objects_to_buffer(void)
Definition eventmgr.c:890
void __stdcall WarpMouseTo(short x, short y)
Definition winmain.c:501
void ReportPacketLoadError(void *packet, short logicalFile, short retry, short section, const char *sourceTag)
Definition disk.c:48
void malf_sound(void)
Definition cockpt.c:823
void zero_vector(FixedVector *vector)
Definition geom.c:280
unsigned int ResetScreenClipToFullHeight(void)
Definition main.c:439
short __stdcall UpdateInputDeviceTransitions(short raw)
Definition input.c:26
int GetControlKeyState(void)
Definition winsys.c:117
unsigned int update_star_field(void)
Definition spc.c:733
void ReportOutOfMemoryAndExit(const char *resource)
Definition main.c:1277
unsigned int place_exhaust_on_ships(void)
Definition ship.c:2017
void sort_object_depth(void)
Definition eventmgr.c:835
void SetHudTextColour(short v)
Definition cockpt.c:1882
int any_enemy(short obj, short range)
Definition logic.c:887
short FindNearestNavPoint(short ship)
Definition main.c:1967
short MeasureMessageWidth(const char *text)
Definition main.c:1218
void ClearViewport(Viewport *viewport, short colour)
Definition gr.c:963
void exit_squadron(const char *msg)
Definition main.c:122
void SetMessageDisplaySpeed(void)
Definition main.c:1344
unsigned int StartNewCampaign(short campaign)
Definition gameflow.c:227
void SetHudMessageText(char *text, unsigned short colour, unsigned short duration)
Definition cockpt.c:2218
int drop_player_mine(short obj)
Definition targ.c:109
unsigned int reposition_fixed_child_objects(void)
Definition ship.c:2074
unsigned int RefreshCockpitStatus(void)
Definition main.c:1948
unsigned int SelectPreviousExternalViewObject(void)
Definition main.c:1142
void PlaySfxWaveFileByNumber()
int calculate_damage_level(void)
Definition main.c:2123
unsigned int new_view(int view, short obj)
Definition spc.c:472
void transform_objects_to_your_view(void)
Definition geom.c:1186
short __stdcall CollectActivePaletteIndices(Viewport *viewport, unsigned char *indices, short capacity)
Definition geom.c:71
unsigned int Update_3Space(void)
Definition main.c:476
void SelectRoomMenuLabel(short i)
Definition killbrd.c:244
void __stdcall free_viewport(Viewport *viewport)
Definition gameflow.c:420
void flag_objective(short objective, unsigned char flags)
Definition cockpt.c:1048
unsigned int GetStartupErrorCode(int vector)
Definition eventmgr.c:1154
unsigned int JoystickEdgeHook(int button)
Definition eventmgr.c:1120
void ReleasePacketHandle(void *handle)
Definition ending.c:50
void DrawArcadeScorePanel(short x, short y)
Definition main.c:1869
unsigned int init_mission(short series, short mission)
Definition mission.c:99
void ComputeVectorDelta(const FixedVector *from, const FixedVector *to, FixedVector *delta)
Definition geom.c:314
unsigned int ReleaseStaleNavTarget(void)
Definition main.c:1984
short GetCurrentDiskDriveHook(void)
Definition eventmgr.c:1181
void ShowVersionBanner(void)
Definition main.c:1337
void __stdcall SetViewportRect(Viewport *viewport, unsigned short left, unsigned short top, unsigned short right, unsigned short bottom)
Definition screens.c:1560
void __stdcall SetMouseCursorShape(struct Shape *shape, short frame)
Definition eventmgr.c:562
int GetShiftKeyState(void)
Definition winsys.c:111
void FrameStartHook(int mode)
Definition screen.c:444
unsigned int set_eye_direction_and_position(void)
Definition spc.c:152
void FlushSoundEffectsAndLog(int soundHandle, short fadeTicks)
Definition music.c:714
short MaxShort(short a, short b,...)
Definition mathutil.c:29
void accelerate(short amount)
Definition ship.c:2189
unsigned int players_flight_dynamics(void)
Definition main.c:815
void MessagePumpHook(int mode)
Definition screen.c:457
unsigned int ShowMemoryStatusDebug(void)
Definition main.c:135
short __stdcall IsInputEventQueued(short type)
Definition eventmgr.c:371
void ReleaseModalTextPanel(void)
Definition barracks.c:163
void WaitForKeyAcknowledge(int mode)
Definition main.c:1225
void request(short requester, short ship, short command)
Definition screen.c:204
void RestoreCockpitExplosionIfVisible(void)
Definition cockpt.c:2161
void SetSoundEffectsVolume(int volume)
Definition sound.c:340
unsigned int HandleFleetOverviewInput(void)
Definition main.c:1159
void WriteDebugString(const char *s)
Definition winsys.c:141
void FatalErrorAndExit(const char *format,...)
Definition cockpt.c:237
void servicetrack(void)
Definition music.c:605
unsigned int GetKeyboardModifiers(void)
Definition winsys.c:123
void ResetCampaignData(void)
Definition killbrd.c:881
short __stdcall RandomInRange(short lo, short hi)
Definition mathfp.c:49
short __stdcall DosStrlen(const char *s)
Definition strdos.c:61
void DrawFormattedText(const char *format,...)
Definition cockpt.c:197
unsigned short __stdcall GetShutdownErrorCode(unsigned char *driveState)
Definition eventmgr.c:1187
unsigned short LoadInstallDat(void)
Definition install.c:126
void SelectCockpitVduMode(short vdu, int mode)
Definition cockpt.c:2945
void SetCinematicFrameTiming(void)
Definition dib.c:182
void CopyViewportContents(Viewport *source, Viewport *destination)
Definition gr.c:945
short ShowModalTextPanel(short fontIndex, const char *format,...)
Definition barracks.c:123
void check_hazards(void)
Definition winmain.c:478
void UpdateArcadeScoreDisplay(void)
Definition main.c:1880
void rotate_about_j(short angle, FixedVector *i, FixedVector *k)
Definition geom.c:528
unsigned int InitializeConversationViewport(void)
Definition main.c:422
unsigned int dump_buffer_to_screen(void)
Definition main.c:383
short message_showing(void)
Definition cockpt.c:776
unsigned int player_input(void)
Definition main.c:846
#define EYE_OBJECT
Definition wcdata.h:1006
ObjectType
Definition wcdata.h:54
@ OBJECT_TYPE_SPACE_MINE
Definition wcdata.h:88
@ OBJECTIVE_HOLD_FORMATION
Definition wcdata.h:146
@ SPECIAL_MANEUVER_BLOWING_UP
Definition wcdata.h:267
@ SPECIAL_MANEUVER_AFTERBURNER
Definition wcdata.h:260
@ SPECIAL_MANEUVER_NONE
Definition wcdata.h:258
#define ACTIVE_MISSION_NAV_POINT_COUNT
Definition wcdata.h:1013
@ OBJECT_CLASS_SHIP
Definition wcdata.h:50