8
|
1 /*--------------------------------------------------------------------------
|
|
2 NETREK II -- Paradise
|
|
3
|
|
4 Permission to use, copy, modify, and distribute this software and its
|
|
5 documentation, or any derivative works thereof, for any NON-COMMERCIAL
|
|
6 purpose and without fee is hereby granted, provided that this copyright
|
|
7 notice appear in all copies. No representations are made about the
|
|
8 suitability of this software for any purpose. This software is provided
|
|
9 "as is" without express or implied warranty.
|
|
10
|
|
11 Xtrek Copyright 1986 Chris Guthrie
|
|
12 Netrek (Xtrek II) Copyright 1989 Kevin P. Smith
|
|
13 Scott Silvey
|
|
14 Paradise II (Netrek II) Copyright 1993 Larry Denys
|
|
15 Kurt Olsen
|
|
16 Brandon Gillespie
|
|
17 --------------------------------------------------------------------------*/
|
|
18
|
|
19 #ifndef struct_h_
|
|
20 #define struct_h_
|
|
21
|
|
22
|
|
23 #include "defs.h"
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29 /*-----------------------------SHIP STRUCTURE------------------------------*/
|
|
30
|
|
31 enum ship_types_e
|
|
32 {
|
|
33 SCOUT, DESTROYER, CRUISER, BATTLESHIP, ASSAULT, STARBASE, ATT,
|
|
34 JUMPSHIP, FRIGATE, WARBASE, LIGHTCRUISER, CARRIER, UTILITY, PATROL
|
|
35
|
|
36 #if 1
|
|
37 #define NUM_TYPES 14 /* this is less clean, but cc has a */
|
|
38 /* problem with using an enum constant */
|
|
39 /* as an array dimension. POS compiler. */
|
|
40 #else
|
|
41 NUM_TYPES
|
|
42 #endif
|
|
43 };
|
|
44
|
|
45 struct drivestat
|
|
46 {
|
|
47 /* various drive type statistics */
|
|
48 int acc; /* acceleration */
|
|
49 int dec; /* decelleration */
|
|
50 int cost; /* fuel cost */
|
|
51 int maxspeed; /* maximum speed */
|
|
52 int etemp; /* engine temperature */
|
|
53 };
|
|
54
|
|
55 struct weaponstat
|
|
56 {
|
|
57 short damage; /* damage potential */
|
|
58 short speed; /* speed for missiles, range for beams */
|
|
59 short cost; /* fuel cost */
|
|
60 short fuse; /* how long they last */
|
|
61 short wtemp; /* weapon temperature cost */
|
|
62 short wtemp_halfarc; /* Arc the penalty is calculated from */
|
|
63 short wtemp_factor; /* Penalty Factor 1-16 of wtemp caused */
|
|
64 short count; /* how many we can have airborne */
|
|
65 short aux; /* aux field */
|
|
66 /* aux is turn rate for torps and plasmas. */
|
|
67 };
|
|
68
|
|
69 struct ship
|
|
70 {
|
|
71
|
|
72 short s_type; /* ship type, defined with the number */
|
|
73 short s_alttype; /* This MUST be a legal vanilla bronco type */
|
|
74 char s_name[32]; /* ship's name */
|
|
75
|
|
76 /* engine characteristics */
|
|
77 int s_turns; /* ship\'s turning */
|
|
78 #undef s_imp /* bloody obsolete header files */
|
|
79 struct drivestat s_imp; /* impulse drive stats */
|
|
80 struct drivestat s_after; /* impulse drive stats */
|
|
81 struct drivestat s_warp; /* impulse drive stats */
|
|
82 int s_warpinitcost; /* fuel charge to initialize warp */
|
|
83 int s_warpinittime; /* time to initialize warp */
|
|
84 int s_warpprepspeed; /* speed while initializing warp */
|
|
85
|
|
86 short s_mass; /* to guage affect of tractor beams */
|
|
87
|
|
88 /* tractor characteristics */
|
|
89 short s_tractstr; /* Strength of tractor beam */
|
|
90 float s_tractrng; /* tractor range */
|
|
91 int s_tractcost; /* fuel used by tractors */
|
|
92 int s_tractetemp; /* e-temp caused by tractors */
|
|
93
|
|
94 struct weaponstat s_torp; /* torp characteristics */
|
|
95 struct weaponstat s_phaser; /* phaser characteristics */
|
|
96 struct weaponstat s_missile; /* missile characteristics */
|
|
97 struct weaponstat s_plasma; /* plasma characteristics */
|
|
98 short s_missilestored; /* how many missiles can we store? */
|
|
99
|
|
100 /* Raynfala's Butt Torp Code. Gjor's Ship Patch for his code to do it */
|
|
101 /* for each ship. */
|
|
102
|
|
103 short s_torp_penalty_halfarc;
|
|
104 short s_torp_penalty_factor;
|
|
105
|
|
106 int s_maxwpntemp; /* max W-temp */
|
|
107 short s_wpncoolrate; /* weapon cool rate */
|
|
108
|
|
109 int s_maxegntemp; /* max engine temp */
|
|
110 short s_egncoolrate; /* engine cool rate */
|
|
111
|
|
112 /* fuel characteristics */
|
|
113 int s_maxfuel; /* ship's maximum fuel */
|
|
114 short s_recharge; /* speed fuel recharges */
|
|
115 int s_mingivefuel; /* ship must have this much to give fuel */
|
|
116 int s_takeonfuel; /* how fast ship takes on fuel */
|
|
117
|
|
118 short s_expldam; /* damage done by ship's explosion (assuming
|
|
119 * his fuel tank is empty) */
|
|
120 short s_fueldam; /* the amount of _additional_ damage that
|
|
121 * this ship's explosion does with a full
|
|
122 * tank */
|
|
123
|
|
124 /* miscellaneous army stats */
|
|
125 float s_armyperkill; /* the number of armies per kill */
|
|
126 short s_maxarmies; /* max armies ship can carry */
|
|
127 int s_bomb; /* bomb damage ship can do */
|
|
128
|
|
129 /* hull, shield and repair stats */
|
|
130 short s_repair; /* ship's repair rate */
|
|
131 int s_maxdamage; /* maximum damage ship can take */
|
|
132 int s_maxshield; /* maximum shield value */
|
|
133 int s_shieldcost; /* cost in fuel of shields being up */
|
|
134
|
|
135 short s_detcost; /* fuel cost of detting */
|
|
136 int s_detdist; /* fuel cost of detting */
|
|
137 short s_cloakcost; /* base fuel cost of cloaking */
|
|
138
|
|
139 short s_scanrange; /* range of the ship's scanners */
|
|
140
|
|
141 short s_numports; /* how many docking ports do we have? */
|
|
142
|
|
143 char s_letter; /* the letter used to enter as that ship */
|
|
144 char s_desig1; /* the designation used (such as A, in AS */
|
|
145 char s_desig2; /* the designation used (such as S, in AS */
|
|
146
|
|
147 short s_bitmap; /* the bitmap to use */
|
|
148 short s_width; /* width of bitmap */
|
|
149 short s_height; /* height of bitmap */
|
|
150
|
|
151 /* ship requisition limitations */
|
|
152 int s_timer; /* value to set timer to get another ship */
|
|
153 int s_maxnum; /* maximum number of these per team */
|
|
154 int s_rank; /* minimum rank for this sucker */
|
|
155 int s_numdefn; /* number of player necessary */
|
|
156 int s_numplan; /* number of planets */
|
|
157
|
|
158 long s_nflags; /* attributes for ship type, SFN flags */
|
|
159 };
|
|
160
|
|
161 /*
|
|
162 * ATTENTION!!! Changes to these flags should be mirrored in structdesc.c
|
|
163 */
|
|
164 /* For s_nflags field */
|
|
165 #if 0
|
|
166 #define SFNDOCKON (1<< 0) /* specify a ship to docked on */
|
|
167 #define SFNCANDOCK (1<< 1) /* specify a ship can dock */
|
|
168 #else
|
|
169 #define SFNUNDOCKABLE (1<< 0) /* this ship can not dock with another */
|
|
170 #define SFNCANORBIT (1<< 1) /* specify a ship can orbit */
|
|
171 #endif
|
|
172 #define SFNCANWARP (1<< 2) /* this ship can go warp */
|
|
173 #define SFNCANFUEL (1<< 3) /* base can give docked ships fuel */
|
|
174 #define SFNCANREPAIR (1<< 4) /* base can repair docked ships */
|
|
175 #define SFNCANREFIT (1<< 5) /* base allows a refit while docked */
|
|
176 #define SFNARMYNEEDKILL (1<< 6) /* does ship need kills to carry */
|
|
177
|
|
178 #define SFNHASPHASERS (1<< 7) /* this ship has phasers */
|
|
179
|
|
180 #define SFNPLASMASTYLE (1<< 8) /* style of firing plasmas */
|
|
181
|
|
182 #define SFNMASSPRODUCED (1<< 9) /* ship can appear docked to an SB or UT */
|
|
183
|
|
184 #define SFNPLASMAARMED (1<<10)
|
|
185 #define SFNHASMISSILE (1<<11)
|
|
186
|
|
187 #define SFNHASFIGHTERS (1<<12) /* ship has a fighter bay */
|
|
188
|
|
189 #if 0
|
|
190 #define allows_docking(s_ship) ((s_ship).s_nflags & SFNDOCKON)
|
|
191 #define can_dock(s_ship) ((s_ship).s_nflags & SFNCANDOCK)
|
|
192 #else
|
|
193 #define allows_docking(s_ship) ((s_ship).s_numports>0)
|
|
194 #define can_dock(s_ship) ((s_ship).s_numports==0 && !((s_ship).s_nflags&SFNUNDOCKABLE))
|
|
195 #endif
|
|
196 /*-------------------------------------------------------------------------*/
|
|
197
|
|
198
|
|
199
|
|
200
|
|
201
|
|
202
|
|
203
|
|
204 /*----------------------------STATS STRUCTURE------------------------------*/
|
|
205
|
|
206 struct stats
|
|
207 {
|
|
208 int st_genocides; /* number of genocides participated in */
|
|
209 float st_tmaxkills; /* max kills ever */
|
|
210 float st_di; /* total destruction inflicted for all time */
|
|
211 int st_tkills; /* Kills in tournament play */
|
|
212 int st_tlosses; /* Losses in tournament play */
|
|
213 int st_tarmsbomb; /* Tournament armies bombed */
|
|
214 int st_tresbomb; /* resources bombed off */
|
|
215 int st_tdooshes; /* armies killed while being carried */
|
|
216 int st_tplanets; /* Tournament planets conquered */
|
|
217 int st_tticks; /* Tournament ticks */
|
|
218 /* SB/WB/JS stats are entirely separate */
|
|
219 int st_sbkills; /* Kills as starbase */
|
|
220 int st_sblosses; /* Losses as starbase */
|
|
221 int st_sbticks; /* Time as starbase */
|
|
222 float st_sbmaxkills; /* Max kills as starbase */
|
|
223 int st_wbkills; /* Kills as warbase */
|
|
224 int st_wblosses; /* Losses as warbase */
|
|
225 int st_wbticks; /* Time as warbase */
|
|
226 float st_wbmaxkills; /* Max kills as warbase */
|
|
227 int st_jsplanets; /* planets assisted with in JS */
|
|
228 int st_jsticks; /* ticks played as a JS */
|
|
229 long st_lastlogin; /* Last time this player was played */
|
|
230 int st_flags; /* Misc option flags */
|
|
231 int st_cluesuccess; /* how many times you passed a clue check */
|
|
232 char st_pad[92]; /* space for expansion */
|
|
233 int st_rank; /* Ranking of the player */
|
|
234 int st_royal; /* royaly, specialty, rank */
|
|
235 };
|
|
236
|
|
237 /*
|
|
238 * These are for the flags field and control the preset options of the
|
|
239 * players client.
|
|
240 */
|
|
241 #if 0
|
|
242 #define ST_MAPMODE 0x001
|
|
243 #define ST_NAMEMODE 0x002
|
|
244 #define ST_SHOWSHIELDS 0x004
|
|
245 #endif
|
|
246 #define ST_NOBITMAPS (1<<0)
|
|
247 #define ST_KEEPPEACE (1<<3)
|
|
248 #if 0
|
|
249 #define ST_SHOWLOCAL 0x010 /* two bits for these two */
|
|
250 #define ST_SHOWGLOBAL 0x040
|
|
251 #endif
|
|
252 #define ST_CYBORG (1<<8)
|
|
253
|
|
254 /* initial value to put in flags */
|
|
255 #define ST_INITIAL ST_KEEPPEACE
|
|
256 /*
|
|
257 * ST_MAPMODE+ST_NAMEMODE+ST_SHOWSHIELDS+ \
|
|
258 * ST_KEEPPEACE+ST_SHOWLOCAL*2+ST_SHOWGLOBAL*2;
|
|
259 */
|
|
260
|
|
261 /*-------------------------------------------------------------------------*/
|
|
262
|
|
263
|
|
264
|
|
265
|
|
266
|
|
267
|
|
268
|
|
269 /*---------------------------VARIOUS STRUCTURES----------------------------*/
|
|
270
|
|
271 /*
|
|
272 * This is used to indicate various things about the game and to hold global
|
|
273 * stats about it. All stats are only updated while in t-mode.
|
|
274 */
|
|
275 struct status
|
|
276 {
|
|
277 int active; /* for interfacing with people who */
|
|
278 unsigned int wait, count; /* want to get into the game */
|
|
279 unsigned int number, request, answer;
|
|
280 unsigned char tourn; /* Tournament mode? */
|
|
281 unsigned long dooshes; /* total number of armies dooshed */
|
|
282 unsigned long armsbomb; /* all t-mode armies bombed */
|
|
283 unsigned long resbomb; /* resources bombed */
|
|
284 unsigned long planets; /* all t-mode planets taken */
|
|
285 unsigned long kills; /* all t-mode kills made */
|
|
286 unsigned long losses; /* all t-mode losses */
|
|
287 unsigned long genocides; /* number of genocides */
|
|
288 unsigned long sbkills; /* total kills in SB's */
|
|
289 unsigned long sblosses; /* total losses in Sb's */
|
|
290 unsigned long sbtime; /* total time in SB's */
|
|
291 unsigned long wbkills; /* kills in warbases */
|
|
292 unsigned long wblosses; /* losses in warbases */
|
|
293 unsigned long wbtime; /* total time played in wb's */
|
|
294 unsigned long jsplanets; /* total planets taken by jump ships */
|
|
295 unsigned long jstime; /* total time in a jump ship */
|
|
296 unsigned long time; /* t-mode time */
|
|
297 unsigned long timeprod; /* t-mode ship ticks--sort of like */
|
|
298 /* manhours in t-mode */
|
|
299 unsigned long clock; /* clock used for timestamping */
|
|
300 int nukegame; /* set to PID of daemon */
|
|
301 int gameup; /* is game up */
|
|
302 };
|
|
303
|
|
304 /*
|
|
305 * Some of the stuff above belongs in struct status2
|
|
306 */
|
|
307
|
|
308 struct league_team
|
|
309 {
|
|
310 int index; /* team index, not mask. -1 means captain
|
|
311 * hasn't chosen yet */
|
|
312 int captain; /* player number of captain */
|
|
313 char name[32];
|
|
314 int timeouts_left; /* NYI */
|
|
315 int ready;
|
|
316 int desirepause; /* do we want to pause the game? */
|
|
317
|
|
318 struct
|
|
319 {
|
|
320 int regulation; /* game length */
|
|
321 int overtime;
|
|
322 int maxplayers; /* max players per team */
|
|
323 int galaxyreset; /* do we want to reset the galaxy? */
|
|
324 int restart; /* should we restart team selection? */
|
|
325 } desired;
|
|
326 };
|
|
327
|
|
328 struct status2
|
|
329 {
|
|
330 #ifdef LEAGUE_SUPPORT
|
|
331 int league; /* are we playing league? 0 means no. 1 means
|
|
332 * we're prepping (captains choose sides). 2
|
|
333 * means we're almost there. 3 means we're in
|
|
334 * regulation league play. 4 means we're in
|
|
335 * overtime */
|
|
336 int leagueticksleft; /* ticks left in game play */
|
|
337
|
|
338 struct league_team home, away;
|
|
339
|
|
340 int timeout_timeleft; /* ticks left in a timeout */
|
|
341 int awaypassed; /* does the away team get first choice? this
|
|
342 * becomes 1 if they PASS */
|
|
343 int paused; /* contains 0 if the game is not paused.
|
|
344 * contains the number of ticks left before
|
|
345 * return to normal play if already paused */
|
|
346 int pausemsgfuse; /* a fuse that prints out a reminder every
|
|
347 * few seconds */
|
|
348 #endif
|
|
349 int starttourn;
|
|
350 int newgalaxy;
|
|
351 int nontteamlock;
|
|
352 };
|
|
353
|
|
354
|
|
355 /*
|
|
356 * used for the request field of status. These are used for a client
|
|
357 * querying the queue to see if he can get in
|
|
358 */
|
|
359
|
|
360 enum queue_request_type_e
|
|
361 {
|
|
362 REQFREE, REQWHO, REQDEAD
|
|
363 };
|
|
364
|
|
365 /*
|
|
366 * This structure is used to hold various info that each team has, such as
|
|
367 * how long before a certain ship type is done with construction.
|
|
368 */
|
|
369 struct team
|
|
370 {
|
|
371 char nickname[32]; /* he is now a %s */
|
|
372 char name[32]; /* come join the %s */
|
|
373 char letter; /* 1-letter abbrev */
|
|
374 char shortname[4]; /* 3-letter abbrev */
|
|
375
|
|
376 int s_turns[NUM_TYPES]; /* turns till another ship is legal */
|
|
377 int s_surrender; /* minutes until this team surrenders */
|
|
378 int s_plcount; /* how many planets this team owns */
|
|
379 int s_plcountold; /* the old planet count */
|
|
380 };
|
|
381
|
|
382
|
|
383 /*
|
|
384 * this is used for getting a player name and password and fetching a players
|
|
385 * stats
|
|
386 */
|
|
387 struct statentry
|
|
388 {
|
|
389 char name[16]; /* player's name */
|
|
390 char password[16]; /* player's password */
|
|
391 struct stats stats; /* player's stats */
|
|
392 };
|
|
393
|
|
394 /* Used by the function that computes ratings */
|
|
395 struct rating
|
|
396 {
|
|
397 float battle;
|
|
398 float strategy;
|
|
399 float special;
|
|
400
|
|
401 float bombrat;
|
|
402 float planetrat;
|
|
403 float resrat;
|
|
404 float offrat;
|
|
405 float dooshrat;
|
|
406 float ratio;
|
|
407
|
|
408 float sbrat;
|
|
409 float wbrat;
|
|
410 float jsrat;
|
|
411 };
|
|
412
|
|
413 /*-------------------------------------------------------------------------*/
|
|
414
|
|
415
|
|
416
|
|
417
|
|
418
|
|
419
|
|
420
|
|
421 /*-----------------------------PLAYER STRUCTURE----------------------------*/
|
|
422
|
|
423 #define MAXPORTS 6 /* maximum number of docking bays a ship type
|
|
424 * can have */
|
|
425
|
|
426 /* These are defines for the p_whydead field of the player structure */
|
|
427 enum why_dead_e
|
|
428 {
|
|
429 KNOREASON,
|
|
430 KQUIT, /* Player quit */
|
|
431 KTORP, /* killed by torp */
|
|
432 KPHASER, /* killed by phaser */
|
|
433 KPLANET, /* killed by planet */
|
|
434 KSHIP, /* killed by other ship */
|
|
435 KDAEMON, /* killed by dying daemon */
|
|
436 KWINNER, /* killed by a winner */
|
|
437 KGHOST, /* killed because a ghost */
|
|
438 KGENOCIDE, /* killed by genocide */
|
|
439 KPROVIDENCE, /* killed by a hacker */
|
|
440 KPLASMA, /* killed by a plasma torpedo */
|
|
441 KTOURNEND, /* killed by the end of the tourn */
|
|
442 KOVER, /* killed by overtime */
|
|
443 KTOURNSTART, /* killed by the start of the tournament */
|
|
444 KBINARY, /* killed by improper client */
|
|
445 KMISSILE, /* killed by a missile */
|
|
446 KASTEROID /* smashed by an asteroid */
|
|
447 };
|
|
448
|
|
449 /* These are number defines for the player structs p_status field */
|
|
450 enum player_status_e
|
|
451 {
|
|
452 PFREE, /* player slot is not filled */
|
|
453 POUTFIT, /* player in process of being ghost busted */
|
|
454 PALIVE, /* player is alive */
|
|
455 PEXPLODE, /* player is in process of exploding */
|
|
456 PDEAD, /* player is dead */
|
|
457 PTQUEUE, /* player is on the tournament queue */
|
|
458 POBSERVE /* player is observing the game */
|
|
459 };
|
|
460
|
|
461
|
|
462 struct player
|
|
463 {
|
|
464 int p_no; /* player number in player array */
|
|
465 int p_updates; /* Number of updates ship has survived */
|
|
466 enum player_status_e p_status;/* Player status */
|
|
467 char p_observer; /* is the player only an observer? */
|
|
468 unsigned int p_flags; /* Player flags */
|
|
469 char p_name[16]; /* name of player */
|
|
470 char p_login[16]; /* as much of user name and site we can hold */
|
|
471 char p_monitor[16]; /* Monitor being played on */
|
|
472 struct ship p_ship; /* Personal ship statistics */
|
|
473 int p_x; /* players x coord in the galaxy */
|
|
474 int p_y; /* player y coord in the galaxy */
|
|
475
|
|
476 unsigned char p_dir; /* Real direction */
|
|
477 int p_subdir; /* fraction direction change */
|
|
478 unsigned char p_desdir; /* desired direction */
|
|
479
|
|
480 int p_speed; /* Real speed */
|
|
481 int p_subspeed; /* Fractional speed */
|
|
482 short p_desspeed; /* Desired speed */
|
|
483 short p_warpdesspeed; /* Desired warp speed, after prep [BDyess] */
|
|
484
|
|
485 short p_team; /* Team I'm on */
|
|
486 enum HomeAway
|
|
487 {
|
|
488 NEITHER, HOME, AWAY
|
|
489 } p_homeaway;
|
|
490 char p_spyable; /* can you watch this player? */
|
|
491 char p_teamspy; /* (mask) what teams can this player watch? */
|
|
492
|
|
493 int p_damage; /* Current damage */
|
|
494 int p_subdamage; /* Fractional damage repair */
|
|
495
|
|
496 int p_shield; /* Current shield power */
|
|
497 int p_subshield; /* Fractional shield recharge */
|
|
498
|
|
499 short p_cloakphase; /* Drawing stage of cloaking engage/disengage */
|
|
500
|
|
501 short p_ntorp; /* Number of torps flying */
|
|
502 short p_nplasmatorp; /* Number of plasma torps active */
|
|
503 short p_nthingys; /* number of thingys we own. */
|
|
504 long p_specweap; /* which special weapons we're packing */
|
|
505
|
|
506 char p_hostile; /* Who my torps will hurt */
|
|
507 char p_swar; /* Who am I at sticky war with */
|
|
508
|
|
509 float p_kills; /* Enemies killed */
|
|
510 short p_planet; /* Planet orbiting or locked onto */
|
|
511 char p_orbitdir; /* direction you are orbiting the planet in */
|
|
512 short p_playerl; /* Player locked onto */
|
|
513 short p_armies; /* armies player is carrying */
|
|
514
|
|
515 int p_fuel; /* fuel player's ship currently has */
|
|
516 short p_explode; /* Keeps track of final explosion */
|
|
517
|
|
518 int p_etemp; /* player's current engine temp */
|
|
519 int p_subetemp; /* fractional part of E-temp */
|
|
520 short p_etime; /* timer for coming out of E-temp */
|
|
521
|
|
522 int p_wtemp; /* current weapon temp */
|
|
523 short p_wtime; /* timer for coming out of W-temp */
|
|
524
|
|
525 enum why_dead_e p_whydead; /* Tells you why you died */
|
|
526 short p_whodead; /* Tells you who killed you */
|
|
527 struct stats p_stats; /* player statistics */
|
|
528 short p_planets; /* planets taken this game */
|
|
529 short p_armsbomb; /* armies bombed this game */
|
|
530 short p_resbomb; /* resources bombed */
|
|
531 short p_dooshes; /* armies being carried killed */
|
|
532 int p_ghostbuster; /* ??????????????? */
|
|
533 int p_docked; /* If SB, # docked to, else no base host */
|
|
534 int p_port[MAXPORTS]; /* If SB, pno of ship docked to that port,
|
|
535 * else p_port[0] = port # docked to on host. */
|
|
536 short p_tractor; /* What player is in tractor lock */
|
|
537 int p_pos; /* My position in the player file */
|
|
538 char p_full_hostname[32]; /* full hostname 4/13/92 TC */
|
|
539 #if 0
|
|
540 int p_planfrac; /* for getting fractional credit for */
|
|
541 int p_bombfrac; /* bombing and planet taking */
|
|
542 #endif
|
|
543 int p_warptime; /* timer for warp countdown */
|
|
544 int p_jsdock; /* to keep track of undocking from JS */
|
|
545 int p_lastjs; /* player number of last JS ridden on */
|
|
546 int p_lastman; /* flag used to beam up last men */
|
|
547
|
|
548 int p_lastrefit; /* what shipyard you last refitted at (plno) */
|
|
549 /* ping stuff */
|
|
550 int p_avrt; /* average round trip time */
|
|
551 int p_stdv; /* standard deviation in round trip time */
|
|
552 int p_pkls; /* packet loss (input/output) */
|
|
553
|
|
554 /* clue checking goop */
|
|
555 int p_cluecountdown;
|
|
556 int p_cluedelay;
|
|
557
|
|
558 int p_ntspid; /* proc ID of ntserv in control of this slot */
|
|
559 int p_zone; /* total warp zone bonus/penalty [BDyess] */
|
|
560
|
|
561 #ifdef RC_DISTRESS
|
|
562 int gen_distress; /* generate generic distress messages for
|
|
563 * client */
|
|
564 #endif
|
|
565 };
|
|
566
|
|
567 /* These are defines that used for the player struct's p_flags field */
|
|
568 #define PFSHIELD (1<< 0) /* shields are raised */
|
|
569 #define PFREPAIR (1<< 1) /* player in repair mode */
|
|
570 #define PFBOMB (1<< 2) /* player is bombing */
|
|
571 #define PFORBIT (1<< 3) /* player is orbiting */
|
|
572 #define PFCLOAK (1<< 4) /* player is cloaked */
|
|
573 #define PFWEP (1<< 5) /* player is weapon temped */
|
|
574 #define PFENG (1<< 6) /* player is engine temped */
|
|
575 #define PFROBOT (1<< 7) /* player is a robot */
|
|
576 #define PFBEAMUP (1<< 8) /* player is beaming up */
|
|
577 #define PFBEAMDOWN (1<< 9) /* player is beaming down */
|
|
578 #define PFSELFDEST (1<<10) /* player is self destructing */
|
|
579 #define PFGREEN (1<<11) /* player at green alert */
|
|
580 #define PFYELLOW (1<<12) /* player is at yellow alert */
|
|
581 #define PFRED (1<<13) /* player is at red alert */
|
|
582 #define PFPLOCK (1<<14) /* Locked on a player */
|
|
583 #define PFPLLOCK (1<<15) /* Locked on a planet */
|
|
584 #define PFCOPILOT (1<<16) /* Allow copilots */
|
|
585 #define PFWAR (1<<17) /* computer reprogramming for war */
|
|
586 #define PFPRACTR (1<<18) /* practice type robot (no kills) */
|
|
587 #define PFDOCK (1<<19) /* true if docked to a starbase */
|
|
588 #define PFREFIT (1<<20) /* true if about to refit */
|
|
589 #define PFREFITTING (1<<21) /* true if currently refitting */
|
|
590 #define PFTRACT (1<<22) /* tractor beam activated */
|
|
591 #define PFPRESS (1<<23) /* pressor beam activated */
|
|
592 #define PFDOCKOK (1<<24) /* docking permission */
|
|
593 #define PFSEEN (1<<25) /* seen by enemy on galactic map? */
|
|
594 #define PFWARPPREP (1<<26) /* in warp prep */
|
|
595 #define PFWARP (1<<27) /* ship warping */
|
|
596 #define PFAFTER (1<<28) /* after burners on */
|
|
597 #define PFWPSUSPENDED (1<<29) /* warp prep suspended [BDyess] */
|
|
598 #define PFSNAKE (1<<30) /* it's a space snake */
|
|
599 #define PFBIRD (1<<31) /* it's a space bird */
|
|
600 /*-------------------------------------------------------------------------*/
|
|
601
|
|
602
|
|
603
|
|
604
|
|
605
|
|
606
|
|
607
|
|
608 /*-----------------------------TORP STRUCTURE-------------------------------*/
|
|
609
|
|
610
|
|
611 /* For status field of torp structure */
|
|
612 enum torp_status_e
|
|
613 {
|
|
614 TFREE, /* torp is not being fired */
|
|
615 TMOVE, /* torp is moving with wobble */
|
|
616 TEXPLODE, /* torp is in the process of exploding */
|
|
617 TDET, /* torp is being detted */
|
|
618 TOFF, /* torp is off ??? */
|
|
619 TSTRAIGHT, /* Non-wobbling torp */
|
|
620 TRETURN, /* torp is returning to owner (fighters) */
|
|
621 TLAND /* torp gets recovered */
|
|
622 };
|
|
623
|
|
624 struct basetorp
|
|
625 {
|
|
626 int bt_no;
|
|
627 enum torp_status_e bt_status;
|
|
628 int bt_owner;
|
|
629 int bt_x, bt_y;
|
|
630 unsigned char bt_dir;
|
|
631 int bt_damage;
|
|
632 int bt_speed;
|
|
633 int bt_fuse;
|
|
634 char bt_war;
|
|
635 char bt_team;
|
|
636 char bt_whodet; /* who detonated... */
|
|
637 };
|
|
638
|
|
639
|
|
640 struct torp
|
|
641 {
|
|
642 struct basetorp t_base;
|
|
643 #define t_no t_base.bt_no
|
|
644 #define t_status t_base.bt_status
|
|
645 #define t_owner t_base.bt_owner
|
|
646 #define t_x t_base.bt_x
|
|
647 #define t_y t_base.bt_y
|
|
648 #define t_dir t_base.bt_dir
|
|
649 #define t_damage t_base.bt_damage
|
|
650 #define t_speed t_base.bt_speed
|
|
651 #define t_fuse t_base.bt_fuse
|
|
652 #define t_war t_base.bt_war
|
|
653 #define t_team t_base.bt_team
|
|
654 #define t_whodet t_base.bt_whodet
|
|
655 short t_turns; /* rate of change of direction if tracking */
|
|
656 };
|
|
657
|
|
658 /*-------------------------------------------------------------------------*/
|
|
659
|
|
660 struct missile
|
|
661 {
|
|
662 struct basetorp ms_base;
|
|
663 #define ms_no ms_base.bt_no
|
|
664 #define ms_status ms_base.bt_status
|
|
665 #define ms_owner ms_base.bt_owner
|
|
666 #define ms_x ms_base.bt_x
|
|
667 #define ms_y ms_base.bt_y
|
|
668 #define ms_dir ms_base.bt_dir
|
|
669 #define ms_damage ms_base.bt_damage
|
|
670 #define ms_speed ms_base.bt_speed
|
|
671 #define ms_fuse ms_base.bt_fuse
|
|
672 #define ms_war ms_base.bt_war
|
|
673 #define ms_team ms_base.bt_team
|
|
674 #define ms_whodet ms_base.bt_whodet
|
|
675 short ms_turns;
|
|
676 short ms_locked;
|
|
677 short ms_type; /* A missile, fighter, or mine */
|
|
678 short fi_hasfired; /* has the fighter fired a torp? */
|
|
679 };
|
|
680 /* defines for ms_type */
|
|
681 #define MISSILETHINGY 0
|
|
682 #define FIGHTERTHINGY 1
|
|
683 #define MINETHINGY 2
|
|
684
|
|
685 enum thingy_type
|
|
686 {
|
|
687 TT_NONE,
|
|
688 TT_WARP_BEACON
|
|
689 };
|
|
690
|
|
691 struct warp_beacon
|
|
692 {
|
|
693 int owner;
|
|
694 int x, y;
|
|
695 };
|
|
696
|
|
697 struct thingy
|
|
698 {
|
|
699 enum thingy_type type;
|
|
700 union
|
|
701 {
|
|
702 struct warp_beacon wbeacon;
|
|
703 } u;
|
|
704 };
|
|
705
|
|
706
|
|
707
|
|
708 /*---------------------------PLASMA TORP STRUCTURE-------------------------*/
|
|
709 /* For the plasma status field */
|
|
710 struct plasmatorp
|
|
711 {
|
|
712 struct basetorp pt_base;
|
|
713 #define pt_no pt_base.bt_no
|
|
714 #define pt_status pt_base.bt_status
|
|
715 #define PTFREE TFREE
|
|
716 #define PTMOVE TMOVE
|
|
717 #define PTEXPLODE TEXPLODE
|
|
718 #define PTDET TDET
|
|
719 #define pt_owner pt_base.bt_owner
|
|
720 #define pt_x pt_base.bt_x
|
|
721 #define pt_y pt_base.bt_y
|
|
722 #define pt_dir pt_base.bt_dir
|
|
723 #define pt_damage pt_base.bt_damage
|
|
724 #define pt_speed pt_base.bt_speed
|
|
725 #define pt_fuse pt_base.bt_fuse
|
|
726 #define pt_war pt_base.bt_war
|
|
727 #define pt_team pt_base.bt_team
|
|
728 #define pt_whodet pt_base.bt_whodet
|
|
729 short pt_turns; /* ticks turned per cycle */
|
|
730 };
|
|
731
|
|
732
|
|
733 /*-------------------------------------------------------------------------*/
|
|
734
|
|
735
|
|
736
|
|
737
|
|
738
|
|
739
|
|
740
|
|
741 /*-----------------------------PHASER STRUCTURE---------------------------*/
|
|
742
|
|
743 struct phaser
|
|
744 {
|
|
745 int ph_status; /* What it's up to */
|
|
746 unsigned char ph_dir; /* direction */
|
|
747 int ph_target; /* Who's being hit (for drawing) */
|
|
748 int ph_x, ph_y; /* For when it hits a torp */
|
|
749 int ph_fuse; /* Life left for drawing */
|
|
750 int ph_damage; /* Damage inflicted on victim */
|
|
751 };
|
|
752
|
|
753 /* for phaser's status field */
|
|
754 #define PHFREE 0x00 /* phaser not being fired */
|
|
755 #define PHHIT (1<<0) /* When it hits a person */
|
|
756 #define PHMISS (1<<1) /* phaser missed */
|
|
757 #define PHHIT2 (1<<2) /* When it hits a plasma */
|
|
758
|
|
759 /*-------------------------------------------------------------------------*/
|
|
760
|
|
761
|
|
762
|
|
763
|
|
764
|
|
765
|
|
766
|
|
767 /*-----------------------------PLANET STRUCTURE---------------------------*/
|
|
768
|
|
769 /* This structure is used to hold what each team knows about a planet */
|
|
770 struct teaminfo
|
|
771 { /* to hold what a team knows about a planet */
|
|
772 int owner; /* planet's owner */
|
|
773 int armies; /* number of armies team knows about */
|
|
774 int flags; /* flags team knows about */
|
|
775 int timestamp; /* time info was taken */
|
|
776 };
|
|
777
|
|
778 struct planet
|
|
779 { /* all info about a planet */
|
|
780 int pl_no; /* planet number */
|
|
781 int pl_flags; /* attributes of planet */
|
|
782 int pl_owner; /* the current owner of the planet */
|
|
783
|
|
784 int pl_x; /* planet's coords */
|
|
785 int pl_y; /* use the move_planet function to change
|
|
786 * them */
|
|
787 int pl_radius; /* distance from sun */
|
|
788 float pl_angle; /* angular position relative to sun */
|
|
789 int pl_system; /* planetary system number, 0 = no system */
|
|
790
|
|
791 char pl_name[16]; /* name of the planet */
|
|
792 char pl_namelen; /* name's length--Cuts back on strlen's */
|
|
793 #if 1
|
|
794 char pl_hostile;
|
|
795 #else
|
|
796 char pl_torbit; /* teams currently in orbit */
|
|
797 #endif
|
|
798 int pl_tshiprepair; /* repair and shipyard growth timer */
|
|
799 int pl_tagri; /* agri growth timer */
|
|
800 int pl_tfuel; /* fuel depot growth timer */
|
|
801 int pl_armies; /* armies curently on planet */
|
|
802 int pl_warning; /* timer so that planets don't talk too much */
|
|
803 int pl_hinfo; /* which races have info on planet */
|
|
804 struct teaminfo pl_tinfo[MAXTEAM + 1]; /* to hold information for
|
|
805 * races */
|
|
806 int pl_trevolt; /* timer for planet revolting */
|
|
807 /* space grid support stuff */
|
|
808 int pl_next, pl_prev; /* doubly linked list of planet numbers */
|
|
809 int pl_gridnum; /* to hold grid square number */
|
|
810 };
|
|
811
|
|
812 /* defines for the pl_flags field of planet struct */
|
|
813 #if 0
|
|
814 #define PLHOME 0x000100 /* These 4 flags no longer are */
|
|
815 #define PLCOUP 0x000200 /* used in the server */
|
|
816 #define PLCHEAP 0x000400
|
|
817 #define PLCORE 0x000800
|
|
818 #define PLREPAIR 0x001010 /* planet can repair ships */
|
|
819 #define PLFUEL 0x002020 /* planet has fuel depot */
|
|
820 #define PLAGRI 0x004040 /* agricultural thingies built here */
|
|
821 #define PLSHIPYARD 0x008000 /* planet has a shipyard on it */
|
|
822 #define PLORESMASK 0x000070 /* mask for original resource flags */
|
|
823 #define PLRESMASK 0x00F000 /* to mask off all but resource bits */
|
|
824 #define PLRESSHIFT 12 /* bit to shift right by for resources */
|
|
825 #define PLSTAR 0x010000 /* planet is actually a star */
|
|
826 #define PLREDRAW 0x000080 /* Player close for redraw */
|
|
827 #define PLPOISON 0x000000 /* poison atmosphere, no army growth */
|
|
828 #define PLATYPE3 0x020000 /* slightly toxic, very slow army growth */
|
|
829 #define PLATYPE2 0x040000 /* thin atmosphere, slow army growth */
|
|
830 #define PLATYPE1 0x060000 /* normal human atmosphere, normal growth */
|
|
831 #define PLATMASK 0x060000 /* to mask off everything but atmos bits */
|
|
832 #define PLATSHIFT 17 /* number of right bit shifts for atmos bits */
|
|
833 #define PLBARREN 0X000000 /* rocky barren surface */
|
|
834 #define PLDILYTH 0x080000 /* dilythium deposits on the planet */
|
|
835 #define PLMETAL 0x100000 /* metal deposits on the planet */
|
|
836 #define PLARABLE 0x200000 /* planet has farmland */
|
|
837 #define PLSURMASK 0x380000 /* number of surface combinations */
|
|
838 #define PLSURSHIFT 19 /* number of bit shift to surface */
|
|
839 #define PLPARADISE 0x400000 /* Paradise server flag set to 1 for P server */
|
|
840 #else
|
|
841
|
|
842 /*
|
|
843 * pl_flags is an int of 32 bits:
|
|
844 *
|
|
845 * bits 16 and 23 currently define the type of the planet. The interpretation
|
|
846 * of the other bits is dependent upon the planet type.
|
|
847 *
|
|
848 * Here is the interpretation for a planet bits 0..3
|
|
849 * n bits 4..6 planetary facilities (REPAIR,FUEL,AGRI) bit
|
|
850 * 7 redraw (archaic, recyclable?) bits 8..11
|
|
851 * ld flags (archaic, recyclable?) bits 12..15 paradise
|
|
852 * planetary facilities (REPAIR,FUEL,AGRI,SHIPY) bit 16
|
|
853 * osmic object type (also bit 23) bits 17,18 planet
|
|
854 * atmosphere type bits 19..21 planetary surface properties
|
|
855 * (DILYTH,METAL,ARABLE) bit 22 paradise planet flag
|
|
856 * (why?) bit 23 cosmic object type (also bit 16) bits
|
|
857 * 24..31 currently unallocated (8 bits to play with)
|
|
858 *
|
|
859 * Asteroids are NYI but here is a draft standard: bits 12,15
|
|
860 * acilities (REPAIR,FUEL,SHIPY) bit 20 surface
|
|
861 * properties (DILYTH,METAL) other bits currently unallocated
|
|
862 *
|
|
863 */
|
|
864
|
|
865 /*
|
|
866 * facilities, bits 4..6 and 12..15 valid for planets and asteroids
|
|
867 */
|
|
868 #define PLREPAIR ((1<<12) | (1<<4)) /* planet can repair ships */
|
|
869 #define PLFUEL ((1<<13) | (1<<5)) /* planet has fuel depot */
|
|
870 #define PLAGRI ((1<<14) | (1<<6)) /* agricultural thingies built here */
|
|
871 #define PLSHIPYARD ((1<<15)) /* planet has a shipyard on it */
|
|
872 #define PLORESMASK (0x7<<4) /* mask for original resource flags */
|
|
873 #define PLRESSHIFT 12 /* bit to shift right by for resources */
|
|
874 #define PLRESMASK (0xF<<PLRESSHIFT) /* to mask off all but resource bits */
|
|
875
|
|
876 #define PLREDRAW (1<<7) /* Player close for redraw */
|
|
877
|
|
878 #define PLHOME (1<< 8) /* These 4 flags no longer are */
|
|
879 #define PLCOUP (1<< 9) /* used in the server */
|
|
880 #define PLCHEAP (1<<10)
|
|
881 #define PLCORE (1<<11)
|
|
882
|
|
883 /* cosmic object types, bits 16, 23, and 24 */
|
|
884 #define PLPLANET 0 /* object is a planet */
|
|
885 #define PLSTAR (1<<16) /* object is a star */
|
|
886 #define PLAST (1<<23) /* object is an asteroid NYI */
|
|
887 #define PLNEB ((1<<16)|(1<<23)) /* object is a nebula NYI */
|
|
888 #define PLBHOLE (1<<24) /* object is a black hole NYI */
|
|
889 #define PLPULSAR ((1<<16)| (1<<24)) /* object is a pulsar NYI */
|
|
890 #define PLUK1 ( (1<<23)|(1<<24)) /* future expansion NYI */
|
|
891 #define PLWHOLE ((1<<16)|(1<<23)|(1<<24)) /* object is a wormhole */
|
|
892 #define PLTYPEMASK ((1<<16)|(1<<23)|(1<<24)) /* mask to extract object
|
|
893 * type */
|
|
894 #define PL_TYPE(p) ( (p).pl_flags & PLTYPEMASK )
|
|
895
|
|
896 /*
|
|
897 * Atmosphere Types, bits 17 and 18. Valid for planets.
|
|
898 */
|
|
899 #define PLATSHIFT 17 /* number of right bit shifts for atmos bits */
|
|
900 #define PLPOISON (0<<PLATSHIFT) /* poison atmosphere, no army growth */
|
|
901 #define PLATYPE3 (1<<PLATSHIFT) /* slightly toxic, very slow army
|
|
902 * growth */
|
|
903 #define PLATYPE2 (2<<PLATSHIFT) /* thin atmosphere, slow army growth */
|
|
904 #define PLATYPE1 (3<<PLATSHIFT) /* normal human atmosphere, normal
|
|
905 * growth */
|
|
906 #define PLATMASK (0x3<<PLATSHIFT) /* to mask off everything but atmos
|
|
907 * bits */
|
|
908
|
|
909 /*
|
|
910 * Surface Properties, bits 19..21 Valid for planets and asteroids.
|
|
911 */
|
|
912 #define PLBARREN 0 /* rocky barren surface */
|
|
913 #define PLSURSHIFT 19 /* number of bit shift to surface */
|
|
914 #define PLDILYTH (1<<(PLSURSHIFT+0)) /* dilythium deposits on the planet */
|
|
915 #define PLMETAL (1<<(PLSURSHIFT+1)) /* metal deposits on the planet */
|
|
916 #define PLARABLE (1<<(PLSURSHIFT+2)) /* planet has farmland */
|
|
917 #define PLSURMASK (0x7<<PLSURSHIFT) /* number of surface combinations */
|
|
918
|
|
919
|
|
920 #define PLPARADISE (1<<22) /* Paradise server flag set to 1 for P server */
|
|
921
|
|
922 #endif
|
|
923 /*-------------------------------------------------------------------------*/
|
|
924
|
|
925
|
|
926 /*----------------------T E R R A I N S T R U C T S----------------------*/
|
|
927 /* Data */
|
|
928 struct t_unit
|
|
929 {
|
|
930 int alt1; /* alt1, alt2 are currently unused in the
|
|
931 * client */
|
|
932 int alt2; /* according to MDM (5/16/95) */
|
|
933 char types; /* modify the packet code as well if these
|
|
934 * are put */
|
|
935 }; /* back in, as well as the structs in
|
|
936 * packets.h */
|
|
937
|
|
938 /* Flags */
|
|
939 #define T_EMPTY_SPACE 0x00
|
|
940 #define T_ASTEROIDS 0x01
|
|
941 #define T_NEBULA 0x02
|
|
942 #define T_RADIATION 0x04
|
|
943 #define T_EXPANSN1 0x08
|
|
944 #define T_EXPANSN2 0x10
|
|
945 #define T_EXPANSN3 0x20
|
|
946 #define T_EXPANSN4 0x40
|
|
947 #define T_EXPANSN5 0x80
|
|
948
|
|
949 /*-------------------------------------------------------------------------*/
|
|
950
|
|
951
|
|
952 /*-----------------------------MESSAGE STRUCTS-----------------------------*/
|
|
953
|
|
954 struct message
|
|
955 {
|
|
956 int m_no; /* message number in array of messgs */
|
|
957 int m_flags; /* flags for message type */
|
|
958 int m_time; /* time message sent???? */
|
|
959 int m_recpt; /* who it should be sent to */
|
|
960 char m_data[80]; /* the message string */
|
|
961 int m_from; /* who it is from */
|
|
962 };
|
|
963
|
|
964 /*
|
|
965 * for m_flags field -- lower five bits used for what kind of group the
|
|
966 * message is sent to
|
|
967 */
|
|
968 #define MVALID (1<<0) /* the message is valid--has not been sent */
|
|
969 #define MINDIV (1<<1) /* sent to an individual */
|
|
970 #define MTEAM (1<<2) /* sent to a team */
|
|
971 #define MALL (1<<3) /* sent to eveyone */
|
|
972
|
|
973 /* order these by importance (0x100 - 0x400) */
|
|
974 /*
|
|
975 * many of these are not used by the client, so their incorrect value doesn't
|
|
976 * matter. however we should note that the packet only has a width of 8 bits
|
|
977 * for the type field, and many of these flags are > 8 bits wide --eld
|
|
978 */
|
|
979
|
|
980 #define MGOD ( 1<<4) /* sent to god -- misc.c, socket.c */
|
|
981 #define MGENO ( 1<<5) /* genocide message -- conquer.c */
|
|
982 #define MCONQ ( 2<<5) /* conquer message -- planets.c */
|
|
983 #define MTAKE ( 1<<5) /* planet taken message -- player.c */
|
|
984 #define MDEST ( 2<<5) /* planet destroyed message -- player.c */
|
|
985 #define MKILLA ( 5<<5) /* a person killed -- dutil.c, snakemove.c */
|
|
986 #define MBOMB ( 3<<5) /* bombarding planet -- planets.c */
|
|
987 #define MKILLP ( 7<<5) /* a person killed -- NOT USED */
|
|
988 #define MKILL ( 8<<5) /* a person killed -- NOT USED */
|
|
989 #define MLEAVE ( 9<<5) /* player leaving game message -- main.c */
|
|
990 #define MJOIN (10<<5) /* player joining game -- enter.c */
|
|
991 #define MGHOST (11<<5) /* player ghostbusted -- daemonII.c */
|
|
992 #define MCOUP1 (12<<5) /* a coup occured -- NOT USED */
|
|
993 #define MCOUP2 (13<<5) /* -- NOT USED */
|
|
994 #define MDISTR (14<<5) /* flag for a distress message */
|
|
995 #define MMASK (0xf<<5) /* bits in the flags field should be sent --
|
|
996 *
|
|
997 /* message control structure */
|
|
998 struct mctl
|
|
999 { /* used to keep track of position in */
|
|
1000 int mc_current; /* array we put our last message */
|
|
1001 };
|
|
1002
|
|
1003 /*-------------------------------------------------------------------------*/
|
|
1004
|
|
1005
|
|
1006
|
|
1007 struct rsa_key
|
|
1008 {
|
|
1009 unsigned char client_type[KEY_SIZE];
|
|
1010 unsigned char architecture[KEY_SIZE];
|
|
1011 unsigned char global[KEY_SIZE];
|
|
1012 unsigned char public[KEY_SIZE];
|
|
1013 };
|
|
1014
|
|
1015
|
|
1016 /*
|
|
1017 * RCD stuff, from bronco server 2.7pl13.
|
|
1018 */
|
|
1019 #ifdef RC_DISTRESS
|
|
1020 struct distress
|
|
1021 {
|
|
1022 unsigned char sender;
|
|
1023 unsigned char dam, shld, arms, wtmp, etmp, fuelp, sts;
|
|
1024 unsigned char wtmpflag, etempflag, cloakflag, distype, macroflag, ttype;
|
|
1025 unsigned char close_pl, close_en, target, tclose_pl, tclose_en, pre_app,
|
|
1026 i;
|
|
1027 unsigned char close_j, close_fr, tclose_j, tclose_fr;
|
|
1028 unsigned char cclist[6]; /* CC list */
|
|
1029 unsigned char preappend[80]; /* text which we pre- or append */
|
|
1030 };
|
|
1031
|
|
1032 /*
|
|
1033 * macro management
|
|
1034 */
|
|
1035 struct dmacro_list
|
|
1036 {
|
|
1037 char c;
|
|
1038 char *name;
|
|
1039 char *macro;
|
|
1040 };
|
|
1041
|
|
1042 /*
|
|
1043 * distress types
|
|
1044 */
|
|
1045 enum dist_type
|
|
1046 {
|
|
1047 /* help me do series */
|
|
1048 take = 1, ogg, bomb, space_control, help1, help2, help3, help4,
|
|
1049
|
|
1050 /* doing series */
|
|
1051 escorting, ogging, bombing, controlling, doing1, doing2, doing3, doing4,
|
|
1052
|
|
1053 /* other info series */
|
|
1054 free_beer, /* player x is totally hosed now */
|
|
1055 no_gas, /* player x has no gas */
|
|
1056 crippled, /* player x is crippled but may have fuel */
|
|
1057 pickup, /* player x picked up armies */
|
|
1058 pop, /* there was a pop somewhere */
|
|
1059 carrying, /* I am carrying */
|
|
1060 other1, other2,
|
|
1061
|
|
1062 /* just a generic distress call */
|
|
1063 generic
|
|
1064 };
|
|
1065
|
|
1066 /*
|
|
1067 * targets of messages
|
|
1068 */
|
|
1069 enum target_type
|
|
1070 {
|
|
1071 none,
|
|
1072 planet,
|
|
1073 player
|
|
1074 };
|
|
1075
|
|
1076 /*
|
|
1077 * from bronco server2.7pl3
|
|
1078 */
|
|
1079 /*
|
|
1080 * The General distress has format:
|
|
1081 *
|
|
1082 * A 'E' will do byte1-8 inclusive. Macros can do more but haven't been
|
|
1083 * implemented that way yet.
|
|
1084 *
|
|
1085 * byte1: xxyzzzzz where zzzzz is dist_type, xx is target_type and y is 1 if
|
|
1086 * this is a macro and not just a simple distress (a simple distress will
|
|
1087 * ONLY send ship info like shields, armies, status, location, etc.)
|
|
1088 *
|
|
1089 * byte2: 1fff ffff - f = percentage fuel remaining (0-100) byte3: 1ddd dddd - %
|
|
1090 * damage byte4: 1sss ssss - % shields remaining byte5: 1eee eeee - % etemp
|
|
1091 * byte6: 1www wwww - % wtemp byte7: 100a aaaa - armies carried byte8: (lsb
|
|
1092 * of me->p_status) & 0x80 byte9: 1ppp pppp - planet closest to me byte10:
|
|
1093 * 1eee eeee - enemy closest to me
|
|
1094 *
|
|
1095 * Byte 11 and on are only sent if y (from byte 1) is = 1 although even for
|
|
1096 * simplest case (y=0) we should send byte14+ = 0x80 and then a null so that
|
|
1097 * in future we can send a cc list and pre/append text byte11: 1ttt tttt -
|
|
1098 * target (either player number or planet number) byte12: 1ppp pppp - planet
|
|
1099 * closest to target byte13: 1eee eeee - enemy closest to target byte14+: cc
|
|
1100 * list (each player to cc this message to is 11pp ppp) cc list is terminated
|
|
1101 * by 1000 0000 or 0100 0000 ) pre-pend append byte15++: the text to pre
|
|
1102 * or append .. depending on termination above. text is null terminated and
|
|
1103 * the last thing in this distress
|
|
1104 */
|
|
1105
|
|
1106 #endif /* RCD */
|
|
1107
|
|
1108 struct command_handler
|
|
1109 {
|
|
1110 char *command;
|
|
1111 int tag;
|
|
1112 char *desc;
|
|
1113 int (*handler) ();
|
|
1114 };
|
|
1115
|
|
1116 #ifdef VOTING
|
|
1117 struct vote_handler
|
|
1118 {
|
|
1119 char *type;
|
|
1120 int tag;
|
|
1121 int minpass;
|
|
1122 int start;
|
|
1123 char *desc;
|
|
1124 int frequency;
|
|
1125 int (*handler) ();
|
|
1126 };
|
|
1127
|
|
1128 #define VC_ALL 0x0001 /* Majority Vote */
|
|
1129 #define VC_TEAM 0x0002 /* Team Vote */
|
|
1130 #define VC_GLOG 0x0010 /* Write Votes to God Log */
|
|
1131 #define VC_PLAYER 0x0020 /* Each player can be voted on, like eject */
|
|
1132
|
|
1133
|
|
1134 #endif
|
|
1135
|
|
1136 /*-------------------------SOME CLIENT STRUCTURES--------------------------*/
|
|
1137
|
|
1138 /* used to tell what planet or player mouse is pointing to */
|
|
1139 struct obtype
|
|
1140 {
|
|
1141 int o_type; /* mouse pointing to a player or planet */
|
|
1142 int o_num; /* the player or planet number */
|
|
1143 };
|
|
1144
|
|
1145 /* used in the o_type structure */
|
|
1146 #define PLANETTYPE 1 /* mouse on planet */
|
|
1147 #define PLAYERTYPE 2 /* mouse on player */
|
|
1148
|
|
1149
|
|
1150 /* used to hold a players rank */
|
|
1151 struct rank
|
|
1152 {
|
|
1153 int genocides; /* minimum number of genocides */
|
|
1154 float di; /* minimum destruction inflicted */
|
|
1155 float battle; /* minimum battle ratings */
|
|
1156 float strategy; /* minimum strategy ratings */
|
|
1157 float specship; /* minimum total ratings in a specialty */
|
|
1158 /* ship SB + WB + JS */
|
|
1159 char *name; /* name of this rank */
|
|
1160 };
|
|
1161
|
|
1162
|
|
1163 struct royalty
|
|
1164 {
|
|
1165 char *name; /* name of rank */
|
|
1166 };
|
|
1167
|
|
1168 /*-------------------------------------------------------------------------*/
|
|
1169
|
|
1170
|
|
1171
|
|
1172 #endif
|
|
1173
|
|
1174 /*---------END OF FILE---------*/
|