Wing Commander
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
trainsim.c
Go to the documentation of this file.
1/**
2 * @file
3 * @ingroup campaign
4 * @brief Training simulator: menus, pilot name entry, high scores and the
5 * mission loop.
6 *
7 * Address range 425c30-4272ef. The initialized panel, resource tables and
8 * state precede this unit's name and UI literal pool.
9 */
10#include "wc1.h"
11
12/* Nothing in the shipped executable references this word. The panel that
13 * follows is eight-byte aligned, which accounts for the next four zeros. */
14int DAT_00469da0 = 10; /* 0x00469da0 */
16Viewport stTrainSimPanelViewport = {0}; /* 0x00469da8 */
18 0x30, 0x1d, 0x110, 0x6d
19}; /* 0x00469dc0 */
20char szTrainSimTitle[24] = "SQUADRON: TRAINSIM"; /* 0x00469dc8 */
21unsigned char *apszBuiltInHighScoreNames[6] = {
22 "BISHOP", "GOBLIN", "JEFFTEP", "MANGLER", "THE MAN", "MONGO"
23}; /* 0x00469de0 */
25 { 1, 47, 29, 67, 49 },
26 { 1, 47, 89, 67, 109 },
27 { 1, 251, 29, 271, 49 },
28 { 1, 251, 89, 271, 109 },
29 { -1, 0, 0, 0, 0 }
30}; /* 0x00469df8 */
31int nTrainSimActive = 0; /* 0x00469e2c */
32short nTrainSimMission = 0; /* 0x00469e30 */
33short nArcadeWave = 0; /* 0x00469e34 */
34
36int nCurrentArcadeScore; /* 0x005a7bc4 */
40short nArcadeTimeRemaining; /* 0x005a7c2c */
42int nArcadeWaveBonusValue; /* 0x005a7c50 */
43
44/* Function start: 0x425C30 */
46{
47 unsigned short colour;
48
49 colour = context->backgroundColour;
50 if (colour == 0xff)
51 colour = cBlackColour;
52 ClearViewport(context->viewport, colour);
53 return 0;
54}
55
56/* Function start: 0x425C60 */
58{
59 short completed;
60
61 (void)phase;
62 completed = 1;
76 do {
77 if ((short)IsFrameTickElapsed() != 0)
78 break;
79 DIBslam();
81 if (CheckEscaped() != 0) {
82 completed = 0;
83 break;
84 }
85 } while (1);
86 return completed;
87}
88
89/* Function start: 0x425D00 */
127
128/* Function start: 0x425DF0 */
129unsigned char *GetHighScoreEntry(short i)
130{
131 short k = (short)aHighScoreEntriesArray[i].pilotIndex;
132
133 if (8 < k)
134 return apszBuiltInHighScoreNames[k - 9];
135 return (unsigned char *)aPilotEntriesList[k].callsign;
136}
137
138/* Function start: 0x425E20 */
139unsigned int GetHighScoreValue(short i)
140{
142}
143
144/* Function start: 0x425E30 */
145unsigned int SetHighScoreEntry(short i, unsigned char b, unsigned int v)
146{
147 aHighScoreEntriesArray[i].pilotIndex = (signed char)b;
148 return aHighScoreEntriesArray[i].score = v;
149}
150
151/* Function start: 0x425E50 */
153{
154 HighScoreEntry temporary;
155 short outer;
156 short inner;
157
158 for (outer = 0; outer < 6; outer++)
159 for (inner = (short)(outer + 1); inner < 6; inner++)
160 if (aHighScoreEntriesArray[inner].score >
161 aHighScoreEntriesArray[outer].score) {
162 temporary = aHighScoreEntriesArray[inner];
165 aHighScoreEntriesArray[outer] = temporary;
166 }
167}
168
169/* Function start: 0x425ED0 */
170short FindTrainSimHighScore(short pilot)
171{
172 short index;
173
174 index = 5;
175 do {
176 if (aHighScoreEntriesArray[index].pilotIndex == pilot)
177 return index;
178 index--;
179 } while (index >= 0);
180 return index;
181}
182
183/* Function start: 0x425EF0 */
184short InsertTrainSimHighScore(short pilot, unsigned int score)
185{
186 if (FindTrainSimHighScore(pilot) != -1)
188 (unsigned char)pilot, score);
189 else
190 SetHighScoreEntry(5, (unsigned char)pilot, score);
192 return FindTrainSimHighScore(pilot);
193}
194
195/* Random-score callee of the high-score table setup below. */
196short RandomBelowOrEqual(short n);
197
198/* Function start: 0x425F40 */
200{
201 short slot;
202 short candidate;
203 short previous;
204 int score;
205
206 slot = 0;
207 score = (short)RandomBelowOrEqual(2000) + 10000;
208 do {
209 do {
210 do {
211 candidate = (short)RandomInRange(0, 14);
212 } while (candidate == 8);
213 for (previous = 0; previous < slot; previous++) {
214 if (aHighScoreEntriesArray[previous].pilotIndex ==
215 candidate)
216 candidate = -1;
217 }
218 } while (candidate == -1);
219 score -= (short)RandomBelowOrEqual(1500) + 100;
220 SetHighScoreEntry(slot, (unsigned char)candidate, score);
221 slot++;
222 } while (slot < 5);
223 SetHighScoreEntry(5, 8, 0);
224}
225
226/* Function start: 0x425FE0 */
228{
229 return aHighScoreEntriesArray[i].pilotIndex != -1;
230}
231
232/* Random-pilot callee of the score generator below. */
233short RandomBelow(short n);
234
235/* Function start: 0x426000 */
237{
238 /* The word counter occupies the low half of a four-byte stack slot. */
239 int remaining;
240 short pilot;
241 short scale;
242 short slot;
243 int scoreRange;
244 unsigned int score;
245 int baseScore;
246
247 *(short *)&remaining = 3;
248 scale = 1;
249 do {
250 do {
251 pilot = RandomInRange(0, 14);
252 } while (pilot == 8 ||
253 (pilot <= 8 &&
255 .personalityDeathMission[pilot] != 0) ||
256 (FindTrainSimHighScore(pilot) == -1 &&
257 RandomBelow(100) > 20));
258 slot = FindTrainSimHighScore(pilot);
259 if (slot == -1)
260 slot = RandomInRange(0, 5);
261 baseScore = aHighScoreEntriesArray[slot].score;
262 scoreRange =
263 aHighScoreEntriesArray[0].score - baseScore + 2000;
264 while (scoreRange / scale > 30000)
265 scale = (short)(scale * 2);
266 score = (unsigned int)((int)RandomBelowOrEqual(
267 (short)(scoreRange / scale)) *
268 scale +
269 baseScore + 50);
270 InsertTrainSimHighScore(pilot, score);
271 (*(short *)&remaining)--;
272 } while (*(short *)&remaining != 0);
273}
274
275/* Function start: 0x4260E0 */
276void DrawTextInputCursor(char character)
277{
278 unsigned char savedBackground =
280 unsigned char colour = pCurTextContext->colour;
281 short savedX;
282 char cursor[2] = { character, 0 };
283
284 savedX = pCurTextContext->cursorX;
287 DrawFormattedText(cursor);
288 pCurTextContext->backgroundColour = savedBackground;
289 pCurTextContext->cursorX = savedX;
290}
291
292/* Function start: 0x426140 */
293void ClearTextInputCharacter(short character)
294{
295 Viewport clearArea;
296 short characterWidth;
297
298 characterWidth = (short)GetFontCharWidth(character);
299 clearArea = *pCurTextContext->viewport;
300 clearArea.left = pCurTextContext->cursorX;
301 clearArea.right = (short)(clearArea.left + characterWidth - 1);
302 clearArea.top = pCurTextContext->cursorY;
303 clearArea.bottom = (short)(clearArea.top +
306 ClearViewport(&clearArea,
309}
310
311/* Function start: 0x4261D0 */
312void ClearNextTextInputCharacter(short character)
313{
314 short savedX;
315
316 savedX = pCurTextContext->cursorX;
318 ClearTextInputCharacter(character);
319 pCurTextContext->cursorX = savedX;
320}
321
322/* Function start: 0x426200 */
323short ReadTextInput(char *destination, short maximumLength,
324 short mode)
325{
326 Viewport inputViewport;
327 Viewport *savedViewport;
328 char *savedText;
329 unsigned int savedFrameState;
330 int savedX;
331 short savedY;
332 short inputLength;
333 short accepted;
334 short handled;
335 unsigned char savedBackground;
336 unsigned char key;
337 char input[40];
338
339 accepted = 0;
340 savedBackground = pCurTextContext->backgroundColour;
341 if (savedBackground == 0xff) {
343 }
344 savedText = pCurTextContext->text;
345 savedViewport = pCurTextContext->viewport;
346 pCurTextContext->text = input;
347 savedX = pCurTextContext->cursorX;
348 savedY = pCurTextContext->cursorY;
349 inputViewport = *pCurTextContext->viewport;
350 pCurTextContext->viewport = &inputViewport;
351 DosStrcpy(input, destination);
352 inputLength = DosStrlen(input);
353
354 inputViewport.left = savedX;
355 inputViewport.top = savedY;
356 inputViewport.bottom = (short)(inputViewport.top +
358 inputViewport.right = (short)(inputViewport.left +
360 ClearViewport(&inputViewport,
362 inputViewport.right = savedViewport->right;
363 DrawFormattedText(input);
365
366 savedFrameState = bKeyEventQueueEnabled;
368 do {
369 handled = 0;
370 do {
371 DIBslam();
372 DIBslamReal();
373 key = (unsigned char)WaitForStreamInputKey();
374 switch (key) {
375 case 13:
376 handled++;
377 if (input[0] == 0)
378 return 0;
379 accepted++;
381 break;
382 case 27:
384 inputViewport.left = savedX;
385 inputViewport.top = savedY;
386 inputViewport.bottom = (short)(inputViewport.top +
388 inputViewport.right = (short)(inputViewport.left +
390 ClearViewport(&inputViewport,
392 pCurTextContext->cursorX = savedX;
393 pCurTextContext->text = savedText;
394 pCurTextContext->viewport = savedViewport;
395 return 0;
396 default:
397 if (key == 8 && inputLength != 0) {
398 inputLength--;
399 handled++;
403 input[inputLength] = 0;
404 } else {
405 if (maximumLength > inputLength &&
406 ((key >= 'A' && key <= 'Z') ||
407 (key >= 'a' && key <= 'z') ||
408 (key >= '0' && key <= '9') ||
409 (key == ' ' && inputLength != 0))) {
410 switch (mode) {
411 case 1:
412 key = (unsigned char)toupper(key);
413 break;
414 case 2:
415 if (key < '0' || key > '9')
416 key = 0;
417 break;
418 default:
419 if (isalpha(key)) {
420 key = (unsigned char)(key | 0x20);
421 if (GetShiftKeyState() != 0)
422 key &= 0xdf;
423 }
424 break;
425 }
426 if (key == 0)
427 break;
429 input[inputLength++] = (char)key;
430 input[inputLength] = 0;
431 SetTextCursor((unsigned short)savedX,
432 (unsigned short)savedY);
433 DrawFormattedText(input);
435 }
436 handled++;
437 }
438 break;
439 }
440 DIBslam();
441 DIBslamReal();
442 } while (handled == 0);
443 } while (accepted == 0);
444
445 bKeyEventQueueEnabled = savedFrameState;
446 DosStrcpy(destination, input);
447 pCurTextContext->text = savedText;
448 pCurTextContext->viewport = savedViewport;
449 pCurTextContext->backgroundColour = savedBackground;
450 return 1;
451}
452
453/* Function start: 0x4265A0 */
454void ReadRequiredPilotField(short x, short y, const char *label,
455 char *destination, short maximumLength)
456{
457 short cursorX;
458
460 cursorX = *(volatile short *)&stTrainSimPanelViewport.left;
461 cursorX += *(volatile short *)&x;
462 SetTextCursor((unsigned short)cursorX, (unsigned short)y);
463 DrawFormattedText(label);
464 do {
465 DosStrcpy(destination, "");
466 } while (ReadTextInput(destination, maximumLength, 0) == 0);
467}
468
469/* Function start: 0x426600 */
470void PromptForPilotField(short x, short y, const char *label,
471 char *destination, short maximumLength,
472 const char *defaultText)
473{
475 SetTextCursor((unsigned short)(x + stTrainSimPanelViewport.left),
476 (unsigned short)y);
477 DrawFormattedText(label);
478 do {
479 DosStrcpy(destination, defaultText);
480 } while (ReadTextInput(destination, maximumLength, 0) == 0);
481}
482
483/* Function start: 0x426660 */
500
501/* Function start: 0x426700 */
502void ShowTrainSimTextMessage(const char *message)
503{
505 (unsigned short)stTrainSimPanelViewport.left,
506 (unsigned short)(stTrainSimPanelViewport.top + 2));
510 DIBslam();
511 DIBslamReal();
512}
513
514/* Function start: 0x426750 */
516{
517 struct Shape *backdrop;
518
520 backdrop = FetchDiskPacketRetrying(
521 (short)cCockpitLogicalFile, 0, 0);
522 DrawSpriteDefault(&stScreenView, 0, 0, backdrop, 0);
524 ShowTrainSimTextMessage("CONGRATULATIONS!\n"
525 "YOU HAVE A TOP SCORE!\n"
526 "PLEASE ENTER YOUR\n"
527 "NAME AND CALLSIGN:\n");
529 (short)(stTrainSimTxtContext.cursorY + 2),
530 "LAST NAME: ",
532 13, "Blair");
534 (short)(stTrainSimTxtContext.cursorY + 10),
535 "CALLSIGN : ",
537 13, "Maverick");
538 if (nOriginDevUnlock != 0) {
540 "CHEATER", 8);
541 }
542 ReleasePacketHandle(backdrop);
543}
544
545/* Function start: 0x426820 */
547{
548 short slot;
549 unsigned int previousScore;
550 char message[100];
551 unsigned int submittedScore;
552
553 slot = FindTrainSimHighScore(8);
554 if (slot == -1)
555 previousScore = aHighScoreEntriesArray[5].score;
556 else
557 previousScore = aHighScoreEntriesArray[slot].score;
558 submittedScore = score;
559 slot = -1;
560 if ((int)submittedScore > (int)previousScore)
561 slot = InsertTrainSimHighScore(8, submittedScore);
562
563 if (bCampaignStartupMode != 0) {
565 return;
566 }
568 if (slot != -1)
569 sprintf(message, "*******\n"
570 "CONGRATULATIONS!\n"
571 "YOU HAVE SCORE NUMBER\n"
572 ">>>> %d <<<<\n"
573 "*******",
574 slot + 1);
575 else
576 sprintf(message, "> SORRY <\n\n"
577 "YOUR SCORE IS ONLY\n"
578 "%ld0\n\n"
579 "PLEASE PLAY AGAIN!", submittedScore);
582 DIBslam();
583 DIBslamReal();
586}
587
588/* Function start: 0x4268E0 */
590{
591 struct Shape *backdrop;
592 char score[20];
593 short titleWidth;
594 short lineHeight;
595 short titleLeft;
596 short row;
597
600 backdrop = FetchDiskPacketRetrying(
601 (short)cCockpitLogicalFile, 0, 0);
602 DrawSpriteDefault(&stScreenView, 0, 0, backdrop, 0);
605 (signed char)cBlackColour);
608 0, 0, 319, 199);
612 titleWidth = (short)((MeasureTextPixelWidthClamped(
613 szTrainSimTitle) & 0xfff8) + 8);
614 stTrainSimPanelViewport.right = titleWidth;
618 cBlackColour, 0);
622 SetTextCursor(0, 1);
624 lineHeight = (short)FontHeight(stTrainSimTxtContext.font);
625
631 titleLeft = (short)((160 - titleWidth / 2) & 0xfffe);
634 (short)(titleLeft + titleWidth);
636 (short)(RandomInRange(0, 0x4e) + 0x1d);
639 lineHeight + 2);
642 }
643
647 (signed char)cBlackColour);
651 cBlackColour, 0);
659 lineHeight = (short)(lineHeight + 3);
665 (unsigned short)(
667 FormatTextBufferFromStart("%JHIGH SCORES%P", 2);
669 for (row = 0; row < 6; row++) {
670 if (IsHighScoreSlotUsed(row)) {
672 sprintf(score, "%0ld",
673 GetHighScoreValue(row));
674 DrawFormattedText("%X%Y%d. %s%X%s0",
676 lineHeight * (row + 1) +
678 row + 1, GetHighScoreEntry(row),
680 score);
681 }
682 }
684 DIBslam();
685 DIBslamReal();
686 do {
688 break;
689 } while (AnimateTrainSimTitle() != 0);
693 ReleasePacketHandle(backdrop);
694}
695
696/* Function start: 0x426C50 */
697struct Shape *LoadTrainSimOpponentShape(int opponent)
698{
700 (signed char)(opponent + 0x16);
702 (short)cCurrentObjResourceLogicalFile, 1, 0);
703}
704
705/* Function start: 0x426C70 */
706short SelectTrainSimMission(short *mission)
707{
708 InputEventState event;
709 Viewport menuViewport;
710 ShortPoint positions[4];
711 struct Shape *shapes[4];
712 unsigned short cancelled;
713 short savedInputMode;
714 short eventType;
715 int key;
716 signed char selection;
717 signed char region;
718 int regionIndex;
719 unsigned char activate;
720
721 cancelled = 0;
722 selection = 0;
726 cDefaultTextColour, (signed char)cBlackColour);
734 (unsigned short)(
737 FormatTextBufferFromStart("SELECT\nENEMY%P");
738
739 menuViewport = stScreenView;
740 *(ShortRect *)&menuViewport.left = stTrainSimPanelBounds;
741 shapes[0] = LoadTrainSimOpponentShape(9);
742 shapes[1] = LoadTrainSimOpponentShape(10);
743 shapes[2] = LoadTrainSimOpponentShape(11);
744 shapes[3] = LoadTrainSimOpponentShape(12);
745
747 &stTrainSimPanelBounds, &positions[0], 0,
748 shapes[0], 0);
751 positions[0].x, positions[0].y, shapes[0], 0);
753 &stTrainSimPanelBounds, &positions[1], 2,
754 shapes[1], 0);
757 positions[1].x, positions[1].y, shapes[1], 0);
759 &stTrainSimPanelBounds, &positions[2], 1,
760 shapes[2], 0);
763 positions[2].x, positions[2].y, shapes[2], 0);
765 &stTrainSimPanelBounds, &positions[3], 3,
766 shapes[3], 0);
769 positions[3].x, positions[3].y, shapes[3], 0);
770
771 DrawSpriteDefault(&menuViewport, positions[0].x, positions[0].y,
772 shapes[0], 0);
773 DrawSpriteDefault(&menuViewport, positions[0].x, positions[0].y,
774 shapes[0], 2);
775 DrawSpriteDefault(&menuViewport, positions[1].x, positions[1].y,
776 shapes[1], 0);
777 DrawSpriteDefault(&menuViewport, positions[1].x, positions[1].y,
778 shapes[1], 2);
779 DrawSpriteDefault(&menuViewport, positions[2].x, positions[2].y,
780 shapes[2], 0);
781 DrawSpriteDefault(&menuViewport, positions[2].x, positions[2].y,
782 shapes[2], 2);
783 DrawSpriteDefault(&menuViewport, positions[3].x, positions[3].y,
784 shapes[3], 0);
785 DrawSpriteDefault(&menuViewport, positions[3].x, positions[3].y,
786 shapes[3], 2);
787
792 WarpMouseTo(160, 100);
794 savedInputMode = (signed char)bInputModeState;
795 bInputModeState = 1;
796
797 do {
798 if (bEscapePressedFlag != 0)
799 break;
800 eventType = PollInputEvent(&event, 0xff);
801 switch (eventType) {
802 case 13:
804 break;
805 case 3:
806 case 5:
808 activate = 0;
809 key = (short)event.value;
810 if (key == 0x1c || key == 0x39) {
811 activate = 1;
812 } else {
814 }
815 if (activate == 0)
816 break;
817 /* Enter and Space select the region under the pointer. */
818 case 2:
819 region = (signed char)FindMenuRegionAtPoint(
820 event.x, event.y,
822 regionIndex = region;
823 if (regionIndex >= 0 && regionIndex <= 3)
824 selection = (signed char)(region + 1);
825 break;
826 }
827 DIBslam();
828 DIBslamReal();
829 } while (selection == 0);
830
831 if (bEscapePressedFlag != 0)
832 cancelled = 1;
833 ReleasePacketHandle(shapes[0]);
834 ReleasePacketHandle(shapes[1]);
835 ReleasePacketHandle(shapes[2]);
836 ReleasePacketHandle(shapes[3]);
837 bInputModeState = (unsigned char)savedInputMode;
842 *mission = (short)(selection - 1);
843 return cancelled == 0;
844}
845
846/* Function start: 0x427080 */
847void RunTrainSim(void)
848{
849 unsigned int savedFrameState;
850 short savedCampaign;
851 short savedDataSet;
852 short proceed;
853 int result;
854
855 proceed = 1;
856 nArcadeWave = 0;
858 bInputModeState = 1;
860 nArcadeWave = 0;
865
866 if (bCampaignStartupMode == 0) {
869 } else {
870 nCurrentArcadeScore = 4000;
872 }
873
874 if (proceed != 0) {
876 nTrainSimActive = 1;
881 savedCampaign = stCampaignState.campaignIndex;
882 savedDataSet = nCampaignDataSet;
885
886 while (nTrainSimMission < 4) {
887 nTrainSimActive = 1;
891
892 if (bCampaignStartupMode != 0) {
893 aasShipShield[0][0] = 0;
896 aasShipShield[0][1] = 0;
899 nCurrentWave = 2;
900 acShipDmg[0] = (signed char)(
902 aeObjectTypeList[0]].damageCapacity + 1);
905 }
906
909 DIBslam();
910 DIBslamReal();
911 savedFrameState = bKeyEventQueueEnabled;
913 result = RunSpaceFlight(nArcadeWave);
914 if (result != 1) {
915 nArcadeState = 4;
918 } else {
919 if (nTrainSimMission < 3)
920 nArcadeWave = 0;
921 else
924 }
925 bKeyEventQueueEnabled = savedFrameState;
926 }
927
928 stCampaignState.campaignIndex = savedCampaign;
929 nCampaignDataSet = savedDataSet;
931 free_cockpit();
932 free_3Space();
938 }
939 nTrainSimActive = 0;
940}
void(__cdecl *pIxFree)(void *)
unsigned char bEscapePressedFlag
Definition mathfp.c:24
TextContext stTrainSimTxtContext
Definition trainsim.c:37
Viewport stTrainSimulatorHighScoreBufView
Definition trainsim.c:35
HighScoreEntry aHighScoreEntriesArray[6]
Definition trainsim.c:41
short nCurrentWave
Definition game.c:34
short nCampaignDataSet
Definition gameflow.c:30
signed char acPlayerComponentDamageList[9]
Definition smart.c:19
ObjectTypeData aObjectTypeData[OBJECT_TYPE_COUNT]
Definition objdata.c:86
short aasShipMaximumShieldTable[10][2]
Definition ending.c:26
unsigned char cBlackColour
Definition init.c:12
TextContext * pCurTextContext
Definition data.c:244
short nArcadeBonusCountdown
Definition main.c:42
signed char acShipDmg[10]
Definition game.c:553
unsigned int bKeyEventQueueEnabled
Definition winmain.c:31
TextContext stTrainSimHighScoreTextContext
Definition trainsim.c:39
unsigned char bInputModeState
Definition eventmgr.c:21
MouseCursorState stMouseCursorState
Definition strdos.c:19
short nArcadeTimeRemaining
Definition trainsim.c:40
int nArcadeWaveBonusValue
Definition trainsim.c:42
Viewport stCurrentTrainSimTitleDisplayViewport
Definition main.c:99
short aasShipShield[10][2]
Definition input.c:19
signed char cCurrentCockpitView
Definition screen.c:23
int nArcadeState
Definition main.c:22
signed char cCockpitLogicalFile
Definition logic.c:107
char szDefaultTxtBuf[0xc8]
Definition timer.c:18
short nTrainSimMission
Definition trainsim.c:32
unsigned char cDefaultTextColour
Definition init.c:24
Viewport stScreenView
Definition launch.c:50
int nCannedSceneMode
Definition main.c:21
short nArcadeWave
Definition trainsim.c:33
CampaignState stCampaignState
Definition dib.c:107
TextContext stHudMessageTextContext
Definition launch.c:51
int nTrainSimActive
Definition trainsim.c:31
enum ObjectType aeObjectTypeList[SPACE_OBJECT_COUNT]
Definition data.c:255
Viewport stModalSrcViewport
Definition select.c:14
short nMenuInputRepeatDelay
Definition objdata.c:597
int bCampaignStartupMode
Definition gameflow.c:16
signed char cCurrentObjResourceLogicalFile
Definition mission.c:60
int nCurrentArcadeScore
Definition trainsim.c:36
Viewport stTrainSimHighScoreDisplayViewport
Definition trainsim.c:38
PilotRecord aPilotEntriesList[9]
Definition gr.c:1531
TitleMenuRegion aTrainSimMissionRegions[5]
Definition trainsim.c:24
int nOriginDevUnlock
Definition main.c:34
PilotRecord * currentPilot
Definition wcdata.h:710
short campaignIndex
Definition wcdata.h:725
signed char pilotIndex
Definition wcdata.h:586
unsigned int value
Definition wc1base.h:140
Viewport * viewport
Definition wc1base.h:110
char callsign[14]
Definition wcdata.h:598
char name[14]
Definition wcdata.h:597
short top
Definition wcdata.h:441
short left
Definition wcdata.h:440
short right
Definition wcdata.h:442
short bottom
Definition wcdata.h:443
unsigned char colour
Definition wc1base.h:240
short cursorY
Definition wc1base.h:238
unsigned char * font
Definition wc1base.h:239
char * text
Definition wc1base.h:242
unsigned char backgroundColour
Definition wc1base.h:241
short cursorX
Definition wc1base.h:237
Viewport * viewport
Definition wc1base.h:236
unsigned char alignment
Definition wc1base.h:244
short right
Definition wc1base.h:78
short bottom
Definition wc1base.h:79
short left
Definition wc1base.h:76
short top
Definition wc1base.h:77
int DAT_00469da0
Definition trainsim.c:14
char szTrainSimTitle[24]
Definition trainsim.c:20
unsigned char * apszBuiltInHighScoreNames[6]
Definition trainsim.c:21
ShortRect stTrainSimPanelBounds
Definition trainsim.c:17
Viewport stTrainSimPanelViewport
Definition trainsim.c:16
Umbrella header for the game core.
unsigned int free_cockpit(void)
Definition logic.c:1876
void FormatTextBufferFromStart(const char *format,...)
Definition cockpt.c:211
void LeaveAllocationScope(void)
Definition eventmgr.c:556
int DisplayTrainSimHighScoreTable(short phase)
Definition trainsim.c:57
unsigned short __stdcall GetFontCharWidth(char i)
Definition mathfp.c:184
void PollJoystickButtonEvents(void)
Definition input.c:76
void DIBslam(void)
Definition dib.c:513
void UpdateTrainSimMenuCursor(void)
Definition main.c:2157
void MoveMenuPointerFromKeyboard(InputEventState *event)
Definition disk.c:551
unsigned int InitializeTextContextFromFont(TextContext *context, short fontIndex, unsigned char colour, signed char background)
Definition disk.c:192
short __stdcall PollInputEvent(InputEventState *event, short filter)
Definition eventmgr.c:336
void AddRandomTrainSimHighScores(void)
Definition trainsim.c:236
short IsHighScoreSlotUsed(short i)
Definition trainsim.c:227
unsigned int free_3Space(void)
Definition logic.c:1975
unsigned short __stdcall AllocateViewport(Viewport *viewport, short clearColour, short flags)
Definition view.c:758
short FindTrainSimHighScore(short pilot)
Definition trainsim.c:170
int AnimateTrainSimTitle(void)
Definition trainsim.c:90
void * FetchDiskPacketRetrying(short logicalFile, short section, short flags)
Definition disk.c:126
void __stdcall SetTextCursor(unsigned short a, unsigned short b)
Definition mathfp.c:145
void RunTrainSim(void)
Definition trainsim.c:847
void FigureArcadeTime(void)
Definition main.c:1862
int RunSpaceFlight(short entryNavPoint)
Definition main.c:1994
void set_up_next_wave(void)
Definition mission.c:687
void ClearInputKeyStatePreservingModifiers(void)
Definition eventmgr.c:787
short InsertTrainSimHighScore(short pilot, unsigned int score)
Definition trainsim.c:184
int FindMenuRegionAtPoint(short x, short y, const TitleMenuRegion *regions)
Definition killbrd.c:274
short ReadTextInput(char *destination, short maximumLength, short mode)
Definition trainsim.c:323
short __stdcall MeasureTextPixelWidthClamped(const char *text)
Definition geom.c:18
void DrawSpriteDefault(Viewport *viewport, short x, short y, struct Shape *shape, short frame)
Definition gr.c:660
int IsFrameTickElapsed(void)
Definition eventmgr.c:629
void ShowTrainSimHighScores(void)
Definition trainsim.c:589
void FlushInputEvents(void)
Definition eventmgr.c:381
void __stdcall AlignSpriteFrameToRectCorner(const ShortRect *rectangle, ShortPoint *position, short corner, struct Shape *shape, short frame)
Definition view.c:805
void DIBslamReal(void)
Definition dib.c:519
short WaitForInputKey(void)
Definition disk.c:467
unsigned int PreloadMusicTrackHook(short track)
Definition logic.c:2044
void InvalidateVduMode(short i)
Definition cockpt.c:764
short SelectTrainSimMission(short *mission)
Definition trainsim.c:706
void __stdcall SetEventManagerPump(void(*pump)(void))
Definition strdos.c:126
void __stdcall SetTextContext(TextContext *context)
Definition mathfp.c:152
void DrawFilledViewportRect(Viewport *viewport, short left, short top, short right, short bottom, short colour)
Definition gr.c:1033
int free_all_slots(void)
Definition mission.c:397
void EnterAllocationScope(void)
Definition eventmgr.c:550
void ReadRequiredPilotField(short x, short y, const char *label, char *destination, short maximumLength)
Definition trainsim.c:454
void InitializeTrainSimTextPanel(void)
Definition trainsim.c:484
unsigned int GetHighScoreValue(short i)
Definition trainsim.c:139
char *__stdcall DosStrcpy(char *dst, const char *src)
Definition strdos.c:49
void __stdcall SetFrameTimerPeriodDirect(short p)
Definition eventmgr.c:617
unsigned int ShowGetReadyScreen(void)
Definition screens.c:1720
void __stdcall WarpMouseTo(short x, short y)
Definition winmain.c:501
unsigned int ReleaseMusicTrackHook(short track)
Definition logic.c:2051
void SortTrainSimHighScores(void)
Definition trainsim.c:152
struct Shape * LoadTrainSimOpponentShape(int opponent)
Definition trainsim.c:697
void ClearTextInputCharacter(short character)
Definition trainsim.c:293
short WaitForStreamInputKey(void)
Definition disk.c:649
short RandomBelow(short n)
Definition mathfp.c:29
unsigned int SetHighScoreEntry(short i, unsigned char b, unsigned int v)
Definition trainsim.c:145
void EnterPilotNameAndCallsign(void)
Definition trainsim.c:515
unsigned short EraseTextContextBackground(TextContext *context)
Definition trainsim.c:45
unsigned short __stdcall FontHeight(const void *p)
Definition mathfp.c:178
void WaitForFrameTick(void)
Definition eventmgr.c:623
void ClearViewport(Viewport *viewport, short colour)
Definition gr.c:963
void PollMenuInputDevices(void)
Definition input.c:110
short __stdcall GetShapeFrameBounds(short *bounds, short x, short y, struct Shape *shape, short frame)
Definition mathfp.c:195
void DrawTextInputCursor(char character)
Definition trainsim.c:276
unsigned int ShowVictoryScreen(void)
Definition screens.c:1758
void __stdcall free_viewport(Viewport *viewport)
Definition gameflow.c:420
unsigned char * GetHighScoreEntry(short i)
Definition trainsim.c:129
void PromptForPilotField(short x, short y, const char *label, char *destination, short maximumLength, const char *defaultText)
Definition trainsim.c:470
void ShowTrainSimTextMessage(const char *message)
Definition trainsim.c:502
void ReleasePacketHandle(void *handle)
Definition ending.c:50
unsigned int init_mission(short series, short mission)
Definition mission.c:99
void __stdcall SetViewportRect(Viewport *viewport, unsigned short left, unsigned short top, unsigned short right, unsigned short bottom)
Definition screens.c:1560
int GetShiftKeyState(void)
Definition winsys.c:111
void __stdcall EventManagerHook(void(*callback)(void))
Definition strdos.c:120
void EraseLastTextInputCharacter(void)
Definition disk.c:619
short CheckEscaped(void)
Definition disk.c:442
unsigned int ShowGameOverScreen(void)
Definition screens.c:1813
unsigned int ReleaseTextFont(short fontIndex)
Definition disk.c:222
short __stdcall RandomInRange(short lo, short hi)
Definition mathfp.c:49
short __stdcall DosStrlen(const char *s)
Definition strdos.c:61
void InitializeTrainSimHighScores(void)
Definition trainsim.c:199
void ClearNextTextInputCharacter(short character)
Definition trainsim.c:312
void DrawFormattedText(const char *format,...)
Definition cockpt.c:197
short RandomBelowOrEqual(short n)
Definition mathfp.c:59
char *__stdcall ResetStringBuilder(TextContext *context)
Definition mono.c:411
void CopyViewportContents(Viewport *source, Viewport *destination)
Definition gr.c:945
void UpdateTrainSimHighScores(int score)
Definition trainsim.c:546