1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*
* PARSEC HEADER: G_extra.h
*/
#ifndef _G_EXTRA_H_
#define _G_EXTRA_H_
#ifdef PARSEC_CLIENT
//FIXME: move this into E_GLOBAL.H for the client
#define TheGameExtraManager (G_ExtraManager::GetExtraManager())
#endif //PARSEC_CLIENT
// class maintaining all EXTRA related stuff ----------------------------------
//
class G_ExtraManager
{
public:
int ExtraProbability;
int MaxExtraArea;
int MinExtraDist;
int ProbHelixCannon;
int ProbLightningDevice;
int ProbPhotonCannon;
int ProbProximityMine;
int ProbMissilePack;
int ProbDumbMissPack;
int ProbHomMissPack;
int ProbSwarmMissPack;
int ProbRepairExtra;
int ProbAfterburner;
int ProbHoloDecoy;
int ProbInvisibility;
int ProbInvulnerability;
int ProbEnergyField;
int ProbLaserUpgrade;
int ProbLaserUpgrade1;
int ProbLaserUpgrade2;
int ProbEmpUpgrade1;
int ProbEmpUpgrade2;
protected:
G_ExtraManager();
// place extras after ship was shot down
void _PlaceShipExtras( int num, int objclass, ShipObject *shippo );
// boost extra collected: energy boost
char* _CollectBoostEnergy( ShipObject* cur_ship, Extra1Obj* extra1po );
// boost extra collected: repair damage
char* _CollectBoostRepair( ShipObject* cur_ship, Extra1Obj* extra1po );
// package extra collected: dumb missiles
char* _CollectPackDumb( ShipObject* cur_ship, Extra2Obj* extra2po );
// package extra collected: guided missiles
char* _CollectPackGuide( ShipObject* cur_ship, Extra2Obj* extra2po );
// device extra collected: swarm missiles
char* _CollectPackSwarm( ShipObject* cur_ship, Extra2Obj* extra2po );
// package extra collected: proximity mines
char* _CollectPackMine( ShipObject* cur_ship, Extra2Obj* extra2po );
// device extra collected: helix cannon
char* _CollectDeviceHelix( ShipObject* cur_ship );
// device extra collected: lightning device
char* _CollectDeviceLightning( ShipObject* cur_ship );
// device extra collected: photon cannon
char* _CollectDevicePhoton( ShipObject* cur_ship );
// device extra collected: afterburner
char* _CollectDeviceAfterburner( ShipObject* cur_ship );
// device extra collected: invisibility
char* _CollectDeviceInvisibility( ShipObject* cur_ship );
// device extra collected: invulnerability
char* _CollectDeviceInvulnerability( ShipObject* cur_ship );
// device extra collected: decoy
char* _CollectDeviceDecoy( ShipObject* cur_ship );
// device extra collected: laser upgrade 1
char* _CollectDeviceLaserUpgrade1( ShipObject* cur_ship );
// device extra collected: laser upgrade 2
char* _CollectDeviceLaserUpgrade2( ShipObject* cur_ship );
// device extra collected: emp upgrade 1
char* _CollectDeviceEmpUpgrade1( ShipObject* cur_ship );
// device extra collected: emp upgrade 2
char* _CollectDeviceEmpUpgrade2( ShipObject* cur_ship );
// helper function when collecting devices
char* _CollectDevice( int nDevice, ShipObject* cur_ship );
// helper function when collecting specials
char* _CollectSpecial( int nSpecial, ShipObject* cur_ship );
// function when colliding with a mine
char* _CollisionProximityMine( Mine1Obj *minepo );
public:
// SINGLETON pattern
static G_ExtraManager* GetExtraManager()
{
static G_ExtraManager _TheGameExtraManager;
return &_TheGameExtraManager;
}
// place extras in vicinity of local ship object
void OBJ_DoExtraPlacement();
// create extras after ship was shot down
void OBJ_CreateShipExtras( ShipObject *shippo );
// fill member variables of extras
void OBJ_FillExtraMemberVars( ExtraObject* extrapo );
// kill extra that immediately follows passed node in list
void OBJ_KillExtra( ExtraObject* precnode, int collected );
// animate an extra
void OBJ_AnimateExtra( ExtraObject* extrapo );
// perform action according to extra type and determine message to show
char* CollectExtra( ShipObject* cur_ship, ExtraObject* curextra );
char* _CollectBoostEnergyField( ShipObject* cur_ship, int boost );
};
#endif // _G_EXTRA_H_
|