-
Notifications
You must be signed in to change notification settings - Fork 1
/
D_PLAYER.H
283 lines (222 loc) · 8.27 KB
/
D_PLAYER.H
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
// d_player.h : player data structures
#ifndef __D_PLAYER__
#define __D_PLAYER__
// The player data structure depends on a number
// of other structs: items (internal inventory),
// animation states (closely tied to the sprites
// used to represent them, unfortunately).
#include "d_items.h"
#include "p_pspr.h"
// In addition, the player is just a special
// case of the generic moving object/actor.
#include "p_mobj.h"
// Finally, for odd reasons, the player input
// is buffered within the player data struct,
// as commands per game tick.
#include "d_ticcmd.h"
//
// Player states.
//
typedef enum
{
// Playing or camping.
PST_LIVE,
// Dead on the ground, view follows killer.
PST_DEAD,
// Ready to restart/respawn???
PST_REBORN
} playerstate_t;
//
// Player internal flags, for cheats and debug.
//
typedef enum
{
// No clipping, walk through barriers.
CF_NOCLIP = 1,
// No damage, no health loss.
CF_GODMODE = 2,
// Not really a cheat, just a debug aid.
CF_NOMOMENTUM = 4,
//added:28-02-98: new cheats
CF_FLYAROUND = 8,
//added:28-02-98: NOT REALLY A CHEAT
// Allow player avatar to walk in-air
// if trying to get over a small wall (hack for playability)
CF_JUMPOVER = 16
} cheat_t;
// ========================================================================
// PLAYER STRUCTURE
// ========================================================================
typedef struct player_s
{
mobj_t* mo;
// added 1-6-98: for movement prediction
mobj_t* spirit;
playerstate_t playerstate;
ticcmd_t cmd;
// Determine POV,
// including viewpoint bobbing during movement.
// Focal origin above r.z
fixed_t viewz;
// Base height above floor for viewz.
fixed_t viewheight;
// Bob/squat speed.
fixed_t deltaviewheight;
// bounded/scaled total momentum.
fixed_t bob;
//added:16-02-98: mouse aiming, where the guy is looking at!
// actually, this is a constant between -100 +100
// (its the line number of a 320x200 screen, which
// is drawn at the exact y center of the view)
// It is updated with cmd->aiming.
angle_t aiming;
// This is only used between levels,
// mo->health is used during levels.
int health;
int armorpoints;
// Armor type is 0-2.
int armortype;
// Power ups. invinc and invis are tic counters.
int powers[NUMPOWERS];
boolean cards[NUMCARDS];
boolean backpack;
// Frags, kills of other players.
int frags[MAXPLAYERS];
weapontype_t readyweapon;
// Is wp_nochange if not changing.
weapontype_t pendingweapon;
boolean weaponowned[NUMWEAPONS];
int ammo[NUMAMMO];
int maxammo[NUMAMMO];
// added by Boris : preferred weapons order stuff
char favoritweapon[NUMWEAPONS];
boolean originalweaponswitch;
//added:28-02-98:
boolean autoaim_toggle;
// True if button down last tic.
int attackdown;
int usedown;
int jumpdown; //added:19-03-98:dont jump like a monkey!
// Bit flags, for cheats and debug.
// See cheat_t, above.
int cheats;
// Refired shots are less accurate.
int refire;
// For intermission stats.
int killcount;
int itemcount;
int secretcount;
// Hint messages.
char* message;
// For screen flashing (red or bright).
int damagecount;
int bonuscount;
// Who did damage (NULL for floors/ceilings).
mobj_t* attacker;
int specialsector; //lava/slime/water...
// So gun flashes light up areas.
int extralight;
// Current PLAYPAL, ???
// can be set to REDCOLORMAP for pain, etc.
int fixedcolormap;
// Player skin colorshift,
// 0-3 for which color to draw player.
// adding 6-2-98 comment : unused by doom2 1.9 now is used
int skincolor;
// added 2/8/98
int skin;
// Overlay view sprites (gun, etc).
pspdef_t psprites[NUMPSPRITES];
// True if secret level has been done.
boolean didsecret;
int wants_to_thok; //Stealth: Homing Attack 12-31-99
int thok_dist;
angle_t thok_angle;
int score; // player score Tails 03-01-2000
int releasedash; // dash stuff Tails 02-27-2000
int dashspeed; // dashing speed Tails 03-01-2000
int typechar; // Which character? Tails 03-01-2000
int lives; // do lives now, worry about continues later Tails 03-09-2000
int continues; // continues that player has acquired Tails 03-11-2000
int timebonus; // Time Bonus Tails 03-10-2000
int ringbonus; // Ring Bonus Tails 03-10-2000
int fscore; // Fake score for intermissions Tails 03-12-2000
int seconds; // Tails 06-13-2000
int minutes; // Tails 06-13-2000
int ringblink; // used as a ring blinking timer Tails 03-14-2000
// start emeralds Tails 04-08-2000
int emerald1;
int emerald2;
int emerald3;
int emerald4;
int emerald5;
int emerald6;
int emerald7;
// end emeralds Tails 04-08-2000
int superready; // Ready for Super? Tails 04-08-2000
int tailsfly; // Lots easier than stupid MF flags Tails 06-13-2000
int acceleration; // Acceleration Tails 04-24-2000
int xtralife1; // Extra Life
int xtralife2; // via rings status Tails 04-25-2000
int xtralife3; // 50,000 points
int xtralife4; // 100,000 points
int xtralife5; // 150,000 points
int xtralife6; // 200,000 points
int xtralife7; // 250,000 points
int xtralife8; // 300,000 points
int xtralife9; // 350,000 points
int xtralife10; // 400,000 points
int xtralife11; // 450,000 points
int xtralife12; // 500,000 points
int xtralife13; // 550,000 points
int xtralife14; // 600,000 points
int xtralife15; // 650,000 points
int xtralife16; // 700,000 points
int xtralife17; // 750,000 points
int xtralife18; // 800,000 points
int xtralife19; // 850,000 points
int xtralife20; // 900,000 points
int xtralife21; // 950,000 points
int xtralife22; // 1,000,000 points
int walking; // Are the walking frames playing? Tails 08-18-2000
int running; // Are the walking frames playing? Tails 08-18-2000
int spinning; // Are the walking frames playing? Tails 08-18-2000
int speed; // Player's speed (distance formula of MOMX and MOMY values) Tails 08-21-2000
} player_t;
//
// INTERMISSION
// Structure passed e.g. to WI_Start(wb)
//
typedef struct
{
boolean in; // whether the player is in game
// Player stats, kills, collected items etc.
int sscore; // score tally Tails 03-09-2000
int stimeb; // Time Bonus Tails 03-10-2000
int sringb; // Ring Bonus Tails 03-10-2000
int skills;
int sitems;
int ssecret;
int stime;
int frags[MAXPLAYERS]; // added 17-1-98 more than 4 players
int score; // current score on entry, modified on return
} wbplayerstruct_t;
typedef struct
{
int epsd; // episode # (0-2)
// if true, splash the secret level
boolean didsecret;
// previous and next levels, origin 0
int last;
int next;
int maxkills;
int maxitems;
int maxsecret;
int maxfrags;
// the par time
int partime;
// index of this player in game
int pnum;
wbplayerstruct_t plyr[MAXPLAYERS];
} wbstartstruct_t;
#endif