|
|
1.1 root 1: // client.h
2:
3: typedef struct
4: {
5: vec3_t viewangles;
6:
7: // intended velocities
8: float forwardmove;
9: float sidemove;
10: float upmove;
11: } usercmd_t;
12:
13: typedef struct
14: {
15: int length;
16: char map[MAX_STYLESTRING];
17: } lightstyle_t;
18:
19: typedef struct
20: {
21: char name[MAX_SCOREBOARDNAME];
22: float entertime;
23: int frags;
24: int colors; // two 4 bit fields
25: byte translations[VID_GRADES*256];
26: } scoreboard_t;
27:
28: typedef struct
29: {
30: int destcolor[3];
31: int percent; // 0-256
32: } cshift_t;
33:
34: #define CSHIFT_CONTENTS 0
35: #define CSHIFT_DAMAGE 1
36: #define CSHIFT_BONUS 2
37: #define CSHIFT_POWERUP 3
38: #define NUM_CSHIFTS 4
39:
40: #define NAME_LENGTH 64
41:
42:
43: //
44: // client_state_t should hold all pieces of the client state
45: //
46:
47: #define SIGNONS 4 // signon messages to receive before connected
48:
49: #define MAX_DLIGHTS 32
50: typedef struct
51: {
52: vec3_t origin;
53: float radius;
54: float die; // stop lighting after this time
55: float decay; // drop this each second
56: float minlight; // don't add when contributing less
57: } dlight_t;
58:
59:
60: #define MAX_BEAMS 8
61: typedef struct
62: {
63: int entity;
64: struct model_s *model;
65: float endtime;
66: vec3_t start, end;
67: } beam_t;
68:
69: #define MAX_EFRAGS 512
70:
71: #define MAX_MAPSTRING 2048
72: #define MAX_DEMOS 8
73: #define MAX_DEMONAME 16
74:
75: typedef enum {
76: ca_dedicated, // a dedicated server with no ability to start a client
77: ca_disconnected, // full screen console with no connection
78: ca_connected // valid netcon, talking to a server
79: } cactive_t;
80:
81: //
82: // the client_static_t structure is persistant through an arbitrary number
83: // of server connections
84: //
85: typedef struct
86: {
87: cactive_t state;
88:
89: // personalization data sent to server
90: char mapstring[MAX_QPATH];
91: char spawnparms[MAX_MAPSTRING]; // to restart a level
92:
93: // demo loop control
94: int demonum; // -1 = don't play demos
95: char demos[MAX_DEMOS][MAX_DEMONAME]; // when not playing
96:
97: // demo recording info must be here, because record is started before
98: // entering a map (and clearing client_state_t)
99: qboolean demorecording;
100: qboolean demoplayback;
101: qboolean timedemo;
102: int forcetrack; // -1 = use normal cd track
103: FILE *demofile;
104: int td_lastframe; // to meter out one message a frame
105: int td_startframe; // host_framecount at start
106: float td_starttime; // realtime at second frame of timedemo
107:
108:
109: // connection information
110: int signon; // 0 to SIGNONS
111: struct qsocket_s *netcon;
112: sizebuf_t message; // writing buffer to send to server
113:
114: } client_static_t;
115:
116: extern client_static_t cls;
117:
118: //
119: // the client_state_t structure is wiped completely at every
120: // server signon
121: //
122: typedef struct
123: {
124: int movemessages; // since connecting to this server
125: // throw out the first couple, so the player
126: // doesn't accidentally do something the
127: // first frame
128: usercmd_t cmd; // last command sent to the server
129:
130: // information for local display
131: int stats[MAX_CL_STATS]; // health, etc
132: int items; // inventory bit flags
133: float item_gettime[32]; // cl.time of aquiring item, for blinking
134: float faceanimtime; // use anim frame if cl.time < this
135:
136: cshift_t cshifts[NUM_CSHIFTS]; // color shifts for damage, powerups
137: cshift_t prev_cshifts[NUM_CSHIFTS]; // and content types
138:
139: // the client maintains its own idea of view angles, which are
140: // sent to the server each frame. The server sets punchangle when
141: // the view is temporarliy offset, and an angle reset commands at the start
142: // of each level and after teleporting.
143: vec3_t mviewangles[2]; // during demo playback viewangles is lerped
144: // between these
145: vec3_t viewangles;
146:
147: vec3_t mvelocity[2]; // update by server, used for lean+bob
148: // (0 is newest)
149: vec3_t velocity; // lerped between mvelocity[0] and [1]
150:
151: vec3_t punchangle; // temporary offset
152:
153: // pitch drifting vars
154: float idealpitch;
155: float pitchvel;
156: qboolean nodrift;
157: float driftmove;
158: double laststop;
159:
160: float viewheight;
161: float crouch; // local amount for smoothing stepups
162:
163: qboolean paused; // send over by server
164: qboolean onground;
165: qboolean inwater;
166:
167: int intermission; // don't change view angle, full screen, etc
168: int completed_time; // latched at intermission start
169:
170: double mtime[2]; // the timestamp of last two messages
171: double time; // clients view of time, should be between
172: // servertime and oldservertime to generate
173: // a lerp point for other data
174: double oldtime; // previous cl.time, time-oldtime is used
175: // to decay light values and smooth step ups
176:
177:
178: float last_received_message; // (realtime) for net trouble icon
179:
180: //
181: // information that is static for the entire time connected to a server
182: //
183: struct model_s *model_precache[MAX_MODELS];
184: struct sfx_s *sound_precache[MAX_SOUNDS];
185:
186: char levelname[40]; // for display on solo scoreboard
187: int viewentity; // cl_entitites[cl.viewentity] = player
188: int maxclients;
189: int gametype;
190:
191: // refresh related state
192: struct model_s *worldmodel; // cl_entitites[0].model
193: struct efrag_s *free_efrags;
194: int num_entities; // held in cl_entities array
195: int num_statics; // held in cl_staticentities array
196: entity_t viewent; // the gun model
197:
198: int cdtrack, looptrack; // cd audio
199:
200: // frag scoreboard
201: scoreboard_t *scores; // [cl.maxclients]
202: } client_state_t;
203:
204:
205: //
206: // cvars
207: //
208: extern cvar_t cl_name;
209: extern cvar_t cl_color;
210:
211: extern cvar_t cl_upspeed;
212: extern cvar_t cl_forwardspeed;
213: extern cvar_t cl_backspeed;
214: extern cvar_t cl_sidespeed;
215:
216: extern cvar_t cl_movespeedkey;
217:
218: extern cvar_t cl_yawspeed;
219: extern cvar_t cl_pitchspeed;
220:
221: extern cvar_t cl_anglespeedkey;
222:
223: extern cvar_t cl_autofire;
224:
225: extern cvar_t cl_shownet;
226: extern cvar_t cl_nolerp;
227:
228: extern cvar_t cl_pitchdriftspeed;
229: extern cvar_t lookspring;
230: extern cvar_t lookstrafe;
231: extern cvar_t sensitivity;
232:
233: extern cvar_t m_pitch;
234: extern cvar_t m_yaw;
235: extern cvar_t m_forward;
236: extern cvar_t m_side;
237:
238:
239: #define MAX_TEMP_ENTITIES 64 // lightning bolts, etc
240: #define MAX_STATIC_ENTITIES 128 // torches, etc
241:
242: extern client_state_t cl;
243:
244: // FIXME, allocate dynamically
245: extern efrag_t cl_efrags[MAX_EFRAGS];
246: extern entity_t cl_entities[MAX_EDICTS];
247: extern entity_t cl_static_entities[MAX_STATIC_ENTITIES];
248: extern lightstyle_t cl_lightstyle[MAX_LIGHTSTYLES];
249: extern dlight_t cl_dlights[MAX_DLIGHTS];
250: extern entity_t cl_temp_entities[MAX_TEMP_ENTITIES];
251: extern beam_t cl_beams[MAX_BEAMS];
252:
253: //=============================================================================
254:
255: //
256: // cl_main
257: //
258: dlight_t *CL_AllocDlight (void);
259: void CL_DecayLights (void);
260:
261: void CL_Init (void);
262:
263: void CL_EstablishConnection (char *host);
264: void CL_Signon1 (void);
265: void CL_Signon2 (void);
266: void CL_Signon3 (void);
267: void CL_Signon4 (void);
268:
269: void CL_Disconnect (void);
270: void CL_Disconnect_f (void);
271: void CL_NextDemo (void);
272:
273: #define MAX_VISEDICTS 256
274: extern int cl_numvisedicts;
275: extern entity_t *cl_visedicts[MAX_VISEDICTS];
276:
277: //
278: // cl_input
279: //
280: typedef struct
281: {
282: int down[2]; // key nums holding it down
283: int state; // low bit is down state
284: } kbutton_t;
285:
286: extern kbutton_t in_mlook, in_klook;
287: extern kbutton_t in_strafe;
288: extern kbutton_t in_speed;
289:
290: void CL_InitInput (void);
291: void CL_SendCmd (void);
292: void CL_SendMove (usercmd_t *cmd);
293:
294: void CL_ParseTEnt (void);
295: void CL_UpdateTEnts (void);
296:
297: void CL_ClearState (void);
298:
299:
300: int CL_ReadFromServer (void);
301: void CL_WriteToServer (usercmd_t *cmd);
302: void CL_BaseMove (usercmd_t *cmd);
303:
304:
305: float CL_KeyState (kbutton_t *key);
306: char *Key_KeynumToString (int keynum);
307:
308: //
309: // cl_demo.c
310: //
311: void CL_StopPlayback (void);
312: int CL_GetMessage (void);
313:
314: void CL_Stop_f (void);
315: void CL_Record_f (void);
316: void CL_PlayDemo_f (void);
317: void CL_TimeDemo_f (void);
318:
319: //
320: // cl_parse.c
321: //
322: void CL_ParseServerMessage (void);
323: void CL_NewTranslation (int slot);
324:
325: //
326: // view
327: //
328: void V_StartPitchDrift (void);
329: void V_StopPitchDrift (void);
330:
331: void V_RenderView (void);
332: void V_UpdatePalette (void);
333: void V_Register (void);
334: void V_ParseDamage (void);
335: void V_SetContentsColor (int contents);
336:
337:
338: //
339: // cl_tent
340: //
341: void CL_InitTEnts (void);
342: void CL_SignonReply (void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.