Wing Commander II
Reconstructed Win32 source (1996)
Toggle main menu visibility
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 */
9
short
has_opposing_ship
(
short
side)
10
{
11
short
obj;
12
13
for
(obj = 0; obj < 10; obj++) {
14
if
(
g_aeObjectClass
[obj] >=
OBJECT_CLASS_SHIP
&&
15
g_asShipSide
[obj] != side)
16
return
1;
17
}
18
return
0;
19
}
20
21
/* Function start: 0x45655D */
22
void
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:
32
g_nCarrierLaunchIntervalValue
= 300;
33
break
;
34
case
0x38:
35
g_nCarrierLaunchIntervalValue
= 250;
36
break
;
37
case
0x39:
38
g_nCarrierLaunchIntervalValue
= 150;
39
break
;
40
case
0x3A:
41
g_nCarrierLaunchIntervalValue
= 100;
42
break
;
43
case
0x3B:
44
g_nCarrierLaunchIntervalValue
= 75;
45
break
;
46
default
:
47
return
;
48
}
49
50
if
(
g_2_asCarrierLaunchTimer
[carrier]++ <
51
g_nCarrierLaunchIntervalValue
)
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
;
63
if
(
g_aObjectTypeData
[
64
g_acObjectType
[source]].resourceType == 10)
65
return
;
66
67
fighter =
initialize_ship
(
68
g_aObjectTypeData
[
69
g_acObjectType
[source]].resourceType,
70
-1, 1);
71
if
(fighter == -1)
72
return
;
73
74
Set_up_ship_info
(fighter,
g_asShipMissionIndex
[source],
75
(
signed
char
)
g_nCurrentNavPoint
);
76
g_asShipMissionType
[fighter] =
MISSION_TYPE_PATROL
;
77
g_acShipTarget
[fighter] = 0;
78
g_aeShipObjective
[fighter] =
OBJECTIVE_ENGAGE_ENEMY
;
79
g_asShipWingLeader
[fighter] = -1;
80
g_abShipEjectionSequenceEnabled
[fighter] = 0;
81
g_apShipMissionRecord
[fighter] =
82
(
MissionShipRecord
*)&
g_aObjectTypeData
[
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
95
position_relative
(
96
&
g_aShipPosition
[fighter],
97
g_aShipForwardVector
[carrier],
98
(
short
)(
g_asObjectCollisionRadius
[carrier] + 500));
99
g_anShipSpeed
[fighter] =
100
(int)
g_aObjectTypeData
[
101
g_acObjectType
[source]].maximumVelocity << 8;
102
ScaleFixedVector
(&
g_aShipForwardVector
[carrier],
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. */
109
short
g_nCarrierLaunchIntervalValue
;
/* 0x005d108c */
110
short
g_2_asCarrierLaunchTimer
[10];
/* 0x005d1090 */
Set_up_ship_info
void Set_up_ship_info(short obj, short missionShip, signed char navPoint)
Definition
mission.c:1135
ScaleFixedVector
void ScaleFixedVector(FixedVector *vector, int scale, FixedVector *result)
Definition
geom.c:237
launch_carrier_fighter
void launch_carrier_fighter(short carrier)
Definition
carrier.c:22
position_relative
void position_relative(FixedVector *position, FixedVector direction, short distance)
Definition
geom.c:101
initialize_ship
short initialize_ship(short type, short owner, short matchLoadedType)
Definition
ship.c:251
has_opposing_ship
short has_opposing_ship(short side)
Definition
carrier.c:9
RandomBelowOrEqual
short RandomBelowOrEqual(short n)
Definition
eventmgr.c:43
game.h
Shared Win32 declarations, types and library interfaces.
MISSION_TYPE_PATROL
@ MISSION_TYPE_PATROL
Definition
game_data.h:122
SIDE_KILRATHI
@ SIDE_KILRATHI
Definition
game_data.h:176
OBJECTIVE_ENGAGE_ENEMY
@ OBJECTIVE_ENGAGE_ENEMY
Definition
game_data.h:145
OBJECT_CLASS_SHIP
@ OBJECT_CLASS_SHIP
Definition
game_data.h:49
g_apShipMissionRecord
MissionShipRecord * g_apShipMissionRecord[10]
Definition
viewrect.c:161
g_asObjectCollisionRadius
short g_asObjectCollisionRadius[SPACE_OBJECT_COUNT]
Definition
viewrect.c:120
g_2_asCarrierLaunchTimer
short g_2_asCarrierLaunchTimer[10]
Definition
carrier.c:110
g_asPilotLevel
short g_asPilotLevel[12]
Definition
viewrect.c:157
g_aeObjectClass
short g_aeObjectClass[SPACE_OBJECT_COUNT]
Definition
viewrect.c:125
g_acShipTarget
signed char g_acShipTarget[16]
Definition
viewrect.c:167
g_asObjectType
short g_asObjectType[SPACE_OBJECT_COUNT]
Definition
viewrect.c:124
g_aObjectTypeData
ObjectTypeData g_aObjectTypeData[OBJECT_DATA_COUNT]
Definition
campglob.c:310
g_aShipForwardVector
FixedVector g_aShipForwardVector[SPACE_OBJECT_COUNT]
Definition
viewrect.c:107
g_nCarrierLaunchIntervalValue
short g_nCarrierLaunchIntervalValue
Definition
carrier.c:109
g_acShipPortrait
signed char g_acShipPortrait[12]
Definition
viewrect.c:159
g_anShipSpeed
int g_anShipSpeed[SPACE_OBJECT_COUNT]
Definition
viewrect.c:116
g_asShipWingLeader
short g_asShipWingLeader[12]
Definition
viewrect.c:162
g_abShipEjectionSequenceEnabled
signed char g_abShipEjectionSequenceEnabled[12]
Definition
viewrect.c:189
g_aShipPosition
FixedVector g_aShipPosition[SPACE_OBJECT_COUNT]
Definition
viewrect.c:108
g_aShipVelocity
FixedVector g_aShipVelocity[SPACE_OBJECT_COUNT]
Definition
viewrect.c:109
g_asShipMissionIndex
short g_asShipMissionIndex[12]
Definition
viewrect.c:153
g_aeShipObjective
short g_aeShipObjective[12]
Definition
viewrect.c:166
g_asShipMissionType
short g_asShipMissionType[12]
Definition
viewrect.c:163
g_asShipSide
short g_asShipSide[12]
Definition
viewrect.c:139
g_acObjectType
signed char g_acObjectType[SPACE_OBJECT_COUNT]
Definition
viewrect.c:101
g_nCurrentNavPoint
short g_nCurrentNavPoint
Definition
viewrect.c:53
MissionShipRecord
Definition
game_data.h:1362
src
carrier.c
Generated by
1.18.0