Wing Commander II
Reconstructed Win32 source (1996)
Loading...
Searching...
No Matches
carrier.c
Go to the documentation of this file.
1/*
2 * Carrier fighter launches.
3 *
4 * Retail object 0x4564F0-0x4568DF (link order; see docs/ORDER.md).
5 */
6#include "game.h"
7
8/* Function start: 0x4564F0 */
9short has_opposing_ship(short side)
10{
11 short obj;
12
13 for (obj = 0; obj < 10; obj++) {
15 g_asShipSide[obj] != side)
16 return 1;
17 }
18 return 0;
19}
20
21/* Function start: 0x45655D */
22void launch_carrier_fighter(short carrier)
23{
24 short source;
25 short fighter;
26
27 if (has_opposing_ship(g_asShipSide[carrier]) == 0)
28 return;
29
30 switch (g_asObjectType[carrier]) {
31 case 0x35:
33 break;
34 case 0x38:
36 break;
37 case 0x39:
39 break;
40 case 0x3A:
42 break;
43 case 0x3B:
45 break;
46 default:
47 return;
48 }
49
50 if (g_2_asCarrierLaunchTimer[carrier]++ <
52 return;
53 g_2_asCarrierLaunchTimer[carrier] = 0;
54
55 for (source = 0; source < 10; source++) {
56 if (g_aeObjectClass[source] == OBJECT_CLASS_SHIP &&
57 g_asShipSide[source] ==
58 g_asShipSide[carrier])
59 break;
60 }
61 if (source == 10)
62 return;
64 g_acObjectType[source]].resourceType == 10)
65 return;
66
67 fighter = initialize_ship(
69 g_acObjectType[source]].resourceType,
70 -1, 1);
71 if (fighter == -1)
72 return;
73
75 (signed char)g_nCurrentNavPoint);
77 g_acShipTarget[fighter] = 0;
79 g_asShipWingLeader[fighter] = -1;
81 g_apShipMissionRecord[fighter] =
83 g_acObjectType[fighter]];
84 if (g_asPilotLevel[fighter] >= 5)
85 g_asPilotLevel[fighter] = 4;
86
87 if (g_asShipSide[fighter] == SIDE_KILRATHI) {
88 g_acShipPortrait[fighter] = 0x1A;
89 } else if (RandomBelowOrEqual(1) != 0) {
90 g_acShipPortrait[fighter] = 0x14;
91 } else {
92 g_acShipPortrait[fighter] = 0x15;
93 }
94
96 &g_aShipPosition[fighter],
97 g_aShipForwardVector[carrier],
98 (short)(g_asObjectCollisionRadius[carrier] + 500));
99 g_anShipSpeed[fighter] =
101 g_acObjectType[source]].maximumVelocity << 8;
103 g_anShipSpeed[fighter],
104 &g_aShipVelocity[fighter]);
105}
106
107/* Linker commons defined here. LINK lays a unit's commons out by the
108 * identifiers' hash keys, so these spellings follow the original addresses. */
109short g_nCarrierLaunchIntervalValue; /* 0x005d108c */
110short g_2_asCarrierLaunchTimer[10]; /* 0x005d1090 */
void Set_up_ship_info(short obj, short missionShip, signed char navPoint)
Definition mission.c:1135
void ScaleFixedVector(FixedVector *vector, int scale, FixedVector *result)
Definition geom.c:237
void launch_carrier_fighter(short carrier)
Definition carrier.c:22
void position_relative(FixedVector *position, FixedVector direction, short distance)
Definition geom.c:101
short initialize_ship(short type, short owner, short matchLoadedType)
Definition ship.c:251
short has_opposing_ship(short side)
Definition carrier.c:9
short RandomBelowOrEqual(short n)
Definition eventmgr.c:43
Shared Win32 declarations, types and library interfaces.
@ MISSION_TYPE_PATROL
Definition game_data.h:122
@ SIDE_KILRATHI
Definition game_data.h:176
@ OBJECTIVE_ENGAGE_ENEMY
Definition game_data.h:145
@ OBJECT_CLASS_SHIP
Definition game_data.h:49
MissionShipRecord * g_apShipMissionRecord[10]
Definition viewrect.c:161
short g_asObjectCollisionRadius[SPACE_OBJECT_COUNT]
Definition viewrect.c:120
short g_2_asCarrierLaunchTimer[10]
Definition carrier.c:110
short g_asPilotLevel[12]
Definition viewrect.c:157
short g_aeObjectClass[SPACE_OBJECT_COUNT]
Definition viewrect.c:125
signed char g_acShipTarget[16]
Definition viewrect.c:167
short g_asObjectType[SPACE_OBJECT_COUNT]
Definition viewrect.c:124
ObjectTypeData g_aObjectTypeData[OBJECT_DATA_COUNT]
Definition campglob.c:310
FixedVector g_aShipForwardVector[SPACE_OBJECT_COUNT]
Definition viewrect.c:107
short g_nCarrierLaunchIntervalValue
Definition carrier.c:109
signed char g_acShipPortrait[12]
Definition viewrect.c:159
int g_anShipSpeed[SPACE_OBJECT_COUNT]
Definition viewrect.c:116
short g_asShipWingLeader[12]
Definition viewrect.c:162
signed char g_abShipEjectionSequenceEnabled[12]
Definition viewrect.c:189
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
Definition viewrect.c:108
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
Definition viewrect.c:109
short g_asShipMissionIndex[12]
Definition viewrect.c:153
short g_aeShipObjective[12]
Definition viewrect.c:166
short g_asShipMissionType[12]
Definition viewrect.c:163
short g_asShipSide[12]
Definition viewrect.c:139
signed char g_acObjectType[SPACE_OBJECT_COUNT]
Definition viewrect.c:101
short g_nCurrentNavPoint
Definition viewrect.c:53