home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / vmstrek / part20 < prev    next >
Encoding:
Text File  |  1992-11-13  |  14.6 KB  |  441 lines

  1. Newsgroups: vmsnet.sources.games
  2. Path: uunet!stanford.edu!agate!usenet.ins.cwru.edu!magnus.acs.ohio-state.edu!zaphod.mps.ohio-state.edu!rpi!usenet.coe.montana.edu!news.u.washington.edu!raven.alaska.edu!acad2.alaska.edu!asdmf
  3. From: asdmf@acad2.alaska.edu
  4. Subject: Vmsnetrek 20/47
  5. Message-ID: <1992Nov13.134657.1@acad2.alaska.edu>
  6. Lines: 428
  7. Sender: news@raven.alaska.edu (USENET News System)
  8. Nntp-Posting-Host: acad2.alaska.edu
  9. Organization: University of Alaska
  10. Date: Fri, 13 Nov 1992 17:46:57 GMT
  11. Xref: uunet vmsnet.sources.games:506
  12.  
  13. -+-+-+-+-+-+-+-+ START OF PART 20 -+-+-+-+-+-+-+-+
  14. X`009    teamstring`091players`091me->p_whodead`093.p_team`093);
  15. X`009W_WriteText(w, 50, 80, textColor, buf, strlen(buf), W_RegularFont);
  16. X`009break;
  17. X    case KPROVIDENCE:
  18. X`009sprintf(buf, "You were removed from existence by divine mercy.");
  19. X`009W_WriteText(w, 50, 80, textColor, buf, strlen(buf), W_RegularFont);
  20. X`009break;
  21. X    case KBADBIN:
  22. X`009sprintf(buf, "Your netrek executable didn't verify correctly.");
  23. X`009W_WriteText(w, 50, 80, textColor, buf, strlen(buf), W_RegularFont);
  24. X`009sprintf(buf, "(could be an old copy or illegal cyborg)");
  25. X`009W_WriteText(w, 50, 100, textColor, buf, strlen(buf), W_RegularFont);
  26. X`009break;
  27. X    default:
  28. X`009sprintf(buf, "You were killed by something unknown to this game?");
  29. X`009W_WriteText(w, 50, 80, textColor, buf, strlen(buf), W_RegularFont);
  30. X`009break;
  31. X    `125
  32. X    /* First we check for promotions: */
  33. X    if (promoted) `123
  34. X`009sprintf(buf, "Congratulations!  You have been promoted to %s",`032
  35. X`009    ranks`091mystats->st_rank`093.name);
  36. X`009W_WriteText(w, 50, 100, W_Yellow, buf, strlen(buf), W_BoldFont);
  37. X`009promoted=0;
  38. X    `125
  39. X    w = oldw;`009`009/* ATM-death */
  40. X    while (W_EventsPending()) `123
  41. X`009W_NextEvent(&event);
  42. X    `125
  43. X    longjmp(env, 0);
  44. X`125
  45. $ CALL UNPACK DEATH.C;1 1780069542
  46. $ create/nolog 'f'
  47. X/* defaults.c
  48. X *`032
  49. X * Kevin P. Smith  6/11/89
  50. X */
  51. X#include "copyright2.h"
  52. X#include <stdio.h>
  53. X
  54. Xstruct stringlist `123
  55. X    char *string;
  56. X    char *value;
  57. X    struct stringlist *next;
  58. X`125;
  59. X
  60. Xstruct stringlist *defaults=NULL;
  61. X
  62. Xchar *getenv();
  63. Xchar *strdup();
  64. X
  65. XinitDefaults(deffile)
  66. Xchar *deffile;`009`009/* As opposed to defile? */
  67. X`123
  68. X    FILE *fp;
  69. X    char file`091100`093;
  70. X    char *home;
  71. X    char *v;
  72. X    struct stringlist *new;
  73. X
  74. X    if (!deffile) `123
  75. X`009deffile=file;
  76. X`009home=getenv("HOME");
  77. X`009if (home) `123
  78. X#ifdef VMS /* vms doesn't use that extra / */
  79. X`009    sprintf(file, "%s.xtrekrc", home);
  80. X#else
  81. X`009    sprintf(file, "%s/.xtrekrc", home);
  82. X#endif
  83. X`009`125 else `123
  84. X`009    strcpy(file, ".xtrekrc");
  85. X`009`125
  86. X    `125
  87. X    fp=fopen(deffile, "r");
  88. X    if (!fp) return;
  89. X    while (fgets(file, 99, fp)) `123
  90. X`009if (*file=='#') continue;
  91. X`009if (*file!=0)`032
  92. X`009    file`091strlen(file)-1`093=0;
  93. X`009v=file;
  94. X`009while (*v!=':' && *v!=0) `123
  95. X`009    v++;
  96. X`009`125
  97. X`009if (*v==0) continue;
  98. X`009*v=0;
  99. X`009v++;
  100. X`009while (*v==' ' `124`124 *v=='\t') `123
  101. X`009    v++;
  102. X`009`125
  103. X`009if (*v!=0) `123
  104. X`009    new=(struct stringlist *) malloc(sizeof(struct stringlist));
  105. X`009    new->next=defaults;
  106. X`009    new->string=strdup(file);
  107. X`009    new->value=strdup(v);
  108. X`009    defaults=new;
  109. X`009`125
  110. X    `125
  111. X    fclose(fp);
  112. X`125
  113. X
  114. Xchar *strdup(str)
  115. Xchar *str;
  116. X`123
  117. X    char *s;
  118. X
  119. X    s=(char *) malloc(strlen(str)+1);
  120. X    strcpy(s,str);
  121. X    return(s);
  122. X`125
  123. X
  124. Xchar *getdefault(str)
  125. Xchar *str;
  126. X`123
  127. X    struct stringlist *sl;
  128. X
  129. X    sl=defaults;
  130. X    while (sl!=NULL) `123
  131. X`009if (strcmpi(sl->string, str)==0) `123
  132. X`009    return(sl->value);
  133. X`009`125
  134. X`009sl=sl->next;
  135. X    `125
  136. X    return(NULL);
  137. X`125
  138. X
  139. Xstrcmpi(str1, str2)`032
  140. Xchar *str1, *str2;
  141. X`123
  142. X    for(;;) `123
  143. X`009if (*str1<='z' && *str1>='a') *str1+='A'-'a';
  144. X`009if (*str2<='z' && *str2>='a') *str2+='A'-'a';
  145. X`009if (*str1 != *str2) return(*str2 - *str1);
  146. X`009if (*str1==0 `124`124 *str2==0) return(0);
  147. X`009str1++;
  148. X`009str2++;
  149. X    `125
  150. X`125
  151. X
  152. XbooleanDefault(def, preferred)
  153. Xchar *def;
  154. Xint preferred;
  155. X`123
  156. X    char *str;
  157. X
  158. X    str=getdefault(def);
  159. X    if (str==NULL) return(preferred);
  160. X    if (strcmpi(str,"on")==0) `123
  161. X`009return(1);
  162. X    `125 else `123
  163. X`009return(0);
  164. X    `125
  165. X`125
  166. $ CALL UNPACK DEFAULTS.C;1 1061105372
  167. $ create/nolog 'f'
  168. X/*
  169. X * defs.h
  170. X */
  171. X#include "copyright.h"
  172. X
  173. X#define MAXPLAYER 20
  174. X#define TESTERS 4`009/* Priveledged slots for robots and game 'testers' */
  175. X#define MAXPLANETS 40
  176. X#define MAXTORP 8
  177. X#define MAXPLASMA 1
  178. X#define PKEY 128
  179. X#define WINSIDE 500     /* Size of strategic and tactical windows */
  180. X#define BORDER 4        /* border width for option windows */
  181. X#define PSEUDOSIZE 16
  182. X#define CLOAK_PHASES 7  /* number of drawing phases in a cloak engage/diseng
  183. Vage */
  184. X#define NUMRANKS 9
  185. X
  186. X/* These are configuration definitions */
  187. X
  188. X#define GWIDTH 100000   /* galaxy is 100000 spaces on a side */
  189. X#define WARP1 20`009/* warp one will move 20 spaces per update */
  190. X#define SCALE 40`009/* Window will be one pixel for 20 spaces */
  191. X#define EXPDIST 350`009/* At this range a torp will explode */
  192. X#define DETDIST 1600`009/* At this range a player can detonate a torp (was 3
  193. VK)*/
  194. X#define PHASEDIST 6000`009/* At this range a player can do damage with phase
  195. Vrs */
  196. X#define ENTORBDIST 900`009/* At this range a player can orbit a planet */
  197. X#define ORBDIST 800`009/* A player will orbit at this radius */
  198. X#define ORBSPEED 2`009/* This is the fastest a person can go into orbit */
  199. X#define PFIREDIST 1500`009/* At this range a planet will shoot at a player *
  200. V/
  201. X#define UPDATE 100000`009/* Update time is 100000 micro-seconds */
  202. X#define AUTOQUIT 60`009/* auto logout in 60 secs */
  203. X#define VACANT -1       /* indicates vacant port on a starbase */
  204. X#define DOCKDIST 600
  205. X#define DOCKSPEED 2     /* If base is moving, there will be some
  206. X`009`009`009   finesse involved to dock */
  207. X#define NUMPORTS 4
  208. X#define SBFUELMIN 10000   /* If starbase's fuel is less than this, it will n
  209. Vot
  210. X`009`009`009   refuel docked vessels */
  211. X#define TRACTDIST   6000 /* maximum effective tractor beam range */
  212. X#define TRACTEHEAT  5    /* ammount tractor beams heat engines */
  213. X#define TRACTCOST   20`009 /* fuel cost of activated tractor beam */
  214. X
  215. X/* These are memory sections */
  216. X#define PLAYER 1
  217. X#define MAXMESSAGE 50
  218. X#define MAXREVIEWMESSAGE 20
  219. X
  220. X#define rosette(x)   ((((x) + 8) / 16) & 15)
  221. X/* #define rosette(x)   ((((x) + 256/VIEWS/2) / (256/VIEWS) + VIEWS) % VIEWS
  222. V) */
  223. X/*                      (((x + 8) / 16 + 16)  %  16)  */
  224. X
  225. X/* These are the teams */
  226. X/* Note that I used bit types for these mostly for messages and
  227. X   war status.  This was probably a mistake.  It meant that Ed
  228. X   had to add the 'remap' area to map these (which are used throughout
  229. X   the code as the proper team variable) into a nice four team deep
  230. X   array for his color stuff.  Oh well.
  231. X*/
  232. X#define NOBODY 0x0
  233. X#define IND 0x0
  234. X#define FED 0x1
  235. X#define ROM 0x2
  236. X#define KLI 0x4
  237. X#define ORI 0x8
  238. X#define ALLTEAM (FED`124ROM`124KLI`124ORI)
  239. X#define MAXTEAM (ORI)
  240. X#define NUMTEAM 4
  241. X/*
  242. X** These are random configuration variables
  243. X*/
  244. X#define VICTORY 3`009/* Number of systems needed to conquer the galaxy */
  245. X#define WARNTIME 30`009/* Number of updates to have a warning on the screen
  246. V */
  247. X#define MESSTIME 30`009/* Number of updates to have a message on the screen
  248. V */
  249. X
  250. X#define TARG_PLAYER`0090x1`009/* Flags for gettarget */
  251. X#define TARG_PLANET`0090x2
  252. X#define TARG_CLOAK`0090x4`009/* Include cloaked ships in search */
  253. X#define TARG_SELF`0090x8
  254. X
  255. X/* Data files to make the game play across daemon restarts. */
  256. X
  257. X#define GLOBAL`009`009"/usr/games/lib/xtrekII/.global"
  258. X#define SCORES`009`009"/usr/games/lib/xtrekII/.scores"
  259. X#define PLFILE`009`009"/usr/games/lib/xtrekII/.planets"
  260. X#define MOTD`009`009"/usr/games/lib/xtrekII/.motd"
  261. X#define DAEMON`009`009"/usr/games/lib/xtrekII/daemonII"
  262. X#define ROBOT`009`009"/usr/games/lib/xtrekII/robotII"
  263. X#define LOGFILENAME     "/usr/games/lib/xtrekII/logfile"
  264. X#define PLAYERFILE`009"/usr/games/lib/xtrekII/.players"
  265. X
  266. X
  267. X/* Other stuff that Ed added */
  268. X
  269. X#define ABS(a)`009`009`009/* abs(a) */ (((a) < 0) ? -(a) : (a))
  270. X#define MAX(a,b)`009`009((a) > (b) ? (a) : (b))
  271. X
  272. X#define myPlasmaTorp(t)`009`009(me->p_no == (t)->pt_owner)
  273. X#define myTorp(t)`009`009(me->p_no == (t)->t_owner)
  274. X#define friendlyPlasmaTorp(t)`009((!(me->p_team & (t)->pt_war)) `124`124 (my
  275. VPlasmaTorp(t)))
  276. X#define friendlyTorp(t)`009`009((!(me->p_team & (t)->t_war)) `124`124 (myTor
  277. Vp(t)))
  278. X#define myPhaser(p)`009`009(&phasers`091me->p_no`093 == (p))
  279. X#define friendlyPhaser(p)`009(me->p_team == players`091(p) - phasers`093.p_t
  280. Veam)
  281. X#define myPlayer(p)`009`009(me == (p))
  282. X#define myPlanet(p)`009`009(me->p_team == (p)->pl_owner)
  283. X#define friendlyPlayer(p)`009((!(me->p_team & \
  284. X`009`009`009`009    ((p)->p_swar `124 (p)->p_hostile))) && \
  285. X`009`009`009`009    (!((p)->p_team & \
  286. X`009`009`009`009    (me->p_swar `124 me->p_hostile))))
  287. X#define isAlive(p)`009`009((p)->p_status == PALIVE)
  288. X#define friendlyPlanet(p)`009((p)->pl_info & me->p_team && \
  289. X`009`009`009     !((p)->pl_owner & (me->p_swar `124 me->p_hostile)))
  290. X
  291. X#define torpColor(t)`009`009\
  292. X`009(myTorp(t) ? myColor : shipCol`091remap`091players`091(t)->t_owner`093.p
  293. V_team`093`093)
  294. X#define plasmatorpColor(t)`009`009\
  295. X`009(myPlasmaTorp(t) ? myColor : shipCol`091remap`091players`091(t)->pt_owne
  296. Vr`093.p_team`093`093)
  297. X#define phaserColor(p)`009`009\
  298. X`009(myPhaser(p) ? myColor : shipCol`091remap`091players`091(p) - phasers`09
  299. V3.p_team`093`093)
  300. X/*`032
  301. X * Cloaking phase (and not the cloaking flag) is the factor in determining`0
  302. V32
  303. X * the color of the ship.  Color 0 is white (same as 'myColor' used to be).
  304. X */
  305. X#define playerColor(p)`009`009\
  306. X`009(myPlayer(p) ? myColor : shipCol`091remap`091(p)->p_team`093`093)
  307. X#define planetColor(p)`009`009\
  308. X`009(((p)->pl_info & me->p_team) ? shipCol`091remap`091(p)->pl_owner`093`093
  309. V : unColor)
  310. X
  311. X#define planetFont(p)`009`009\
  312. X`009(myPlanet(p) ? W_BoldFont : friendlyPlanet(p) ? W_UnderlineFont \
  313. X`009    : W_RegularFont)
  314. X#define shipFont(p)`009`009\
  315. X`009(myPlayer(p) ? W_BoldFont : friendlyPlayer(p) ? W_UnderlineFont \
  316. X`009    : W_RegularFont)
  317. X#define bombingRating(p)`009\
  318. X`009((float) (p)->p_stats.st_tarmsbomb * status->timeprod / \
  319. X`009 ((float) (p)->p_stats.st_tticks * status->armsbomb))
  320. X#define planetRating(p)`009`009\
  321. X`009((float) (p)->p_stats.st_tplanets * status->timeprod / \
  322. X`009 ((float) (p)->p_stats.st_tticks * status->planets))
  323. X#define offenseRating(p)`009\
  324. X`009((float) (p)->p_stats.st_tkills * status->timeprod / \
  325. X`009 ((float) (p)->p_stats.st_tticks * status->kills))
  326. X#define defenseRating(p)`009\
  327. X`009((float) (p)->p_stats.st_tticks * status->losses / \
  328. X`009 ((p)->p_stats.st_tlosses!=0 ? \
  329. X`009  ((float) (p)->p_stats.st_tlosses * status->timeprod) : \
  330. X`009  (status->timeprod)))
  331. X
  332. X#ifdef VMS
  333. Xtypedef int boolean;
  334. X#define FALSE (0)
  335. X#define TRUE  (1)
  336. X#else
  337. Xtypedef enum `123FALSE=0, TRUE`125 boolean;
  338. X#endif
  339. X
  340. X#define sendTorpReq(dir) sendShortPacket(CP_TORP, dir)
  341. X#define sendPhaserReq(dir) sendShortPacket(CP_PHASER, dir)
  342. X#define sendSpeedReq(speed) sendShortPacket(CP_SPEED, speed)
  343. X#define sendDirReq(dir) sendShortPacket(CP_DIRECTION, dir)
  344. X#define sendShieldReq(state) sendShortPacket(CP_SHIELD, state)
  345. X#define sendOrbitReq(state) sendShortPacket(CP_ORBIT, state)
  346. X#define sendRepairReq(state) sendShortPacket(CP_REPAIR, state)
  347. X#define sendBeamReq(state) sendShortPacket(CP_BEAM, state)
  348. X#define sendCopilotReq(state) sendShortPacket(CP_COPILOT, state)
  349. X#define sendDetonateReq() sendShortPacket(CP_DET_TORPS, 0)
  350. X#define sendCloakReq(state) sendShortPacket(CP_CLOAK, state)
  351. X#define sendBombReq(state) sendShortPacket(CP_BOMB, state)
  352. X#define sendPractrReq() sendShortPacket(CP_PRACTR, 0)
  353. X#define sendWarReq(mask) sendShortPacket(CP_WAR, mask)
  354. X#define sendRefitReq(ship) sendShortPacket(CP_REFIT, ship)
  355. X#define sendPlasmaReq(dir) sendShortPacket(CP_PLASMA, dir)
  356. X#define sendPlaylockReq(pnum) sendShortPacket(CP_PLAYLOCK, pnum)
  357. X#define sendPlanlockReq(pnum) sendShortPacket(CP_PLANLOCK, pnum)
  358. X#define sendCoupReq() sendShortPacket(CP_COUP, 0)
  359. X#define sendQuitReq() sendShortPacket(CP_QUIT, 0)
  360. X#define sendByeReq() sendShortPacket(CP_BYE, 0)
  361. X#define sendDockingReq(state) sendShortPacket(CP_DOCKPERM, state)
  362. X#define sendResetStatsReq(verify) sendShortPacket(CP_RESETSTATS, verify)
  363. X#define sendScanReq(who) sendShortPacket(CP_SCAN, who)`009`009/* ATM */
  364. X
  365. X/* This macro allows us to time things based upon # frames / sec.
  366. X */
  367. X#define ticks(x) ((x)*200000/timerDelay)
  368. X
  369. Xchar *getdefault();
  370. X
  371. X/*
  372. X * UDP control stuff
  373. X */
  374. X#ifdef GATEWAY
  375. X# define UDP_NUMOPTS`00911
  376. X# define UDP_GW`009`009UDP_NUMOPTS-1
  377. X#else
  378. X# define UDP_NUMOPTS`00910
  379. X#endif
  380. X#define UDP_CURRENT`0090
  381. X#define UDP_STATUS`0091
  382. X#define UDP_DROPPED`0092
  383. X#define UDP_SEQUENCE    3
  384. X#define UDP_SEND`0094
  385. X#define UDP_RECV`0095
  386. X#define UDP_DEBUG       6
  387. X#define UDP_FORCE_RESET`0097
  388. X#define UDP_UPDATE_ALL`0098
  389. X#define UDP_DONE`0099
  390. X#define COMM_TCP`0090
  391. X#define COMM_UDP`0091
  392. X#define COMM_VERIFY`0092
  393. X#define COMM_UPDATE`0093
  394. X#define COMM_MODE`0094`009/* put this one last */
  395. X#define SWITCH_TCP_OK`0090
  396. X#define SWITCH_UDP_OK`0091
  397. X#define SWITCH_DENIED`0092
  398. X#define SWITCH_VERIFY`0093
  399. X#define CONNMODE_PORT`0090
  400. X#define CONNMODE_PACKET`0091
  401. X#define STAT_CONNECTED`0090
  402. X#define STAT_SWITCH_UDP`0091
  403. X#define STAT_SWITCH_TCP`0092
  404. X#define STAT_VERIFY_UDP`0093
  405. X#define MODE_TCP`0090
  406. X#define MODE_SIMPLE`0091
  407. X#define MODE_FAT`0092
  408. X#define MODE_DOUBLE`0093`009/* put this one last */
  409. X
  410. X#define UDP_RECENT_INTR`009300
  411. X#define UDP_UPDATE_WAIT`0095`009/* 5 second wait */
  412. X
  413. X/* client version of UDPDIAG */
  414. X/* (change these to "#define UDPDIAG(x) <return>" for smaller & faster code)
  415. V */
  416. X#define UDPDIAG(x)`009`123 if (udpDebug) `123 printf("UDP: "); printf x; `12
  417. V5`125
  418. X#define V_UDPDIAG(x)`009`123 if (udpDebug > 1) `123 printf("UDP: "); printf
  419. V x; `125`125
  420. X
  421. $ CALL UNPACK DEFS.H;1 1883171664
  422. $ create/nolog 'f'
  423. Xvmsnetrek.exe : colors.obj, coup.obj, data.obj, death.obj, defaults.obj, det
  424. Vonate.obj, dmessage.obj, enter.obj, findslot.obj, -
  425. X`009getname.obj, getship.obj, inform.obj, input.obj, interface.obj, main.obj
  426. V, newwin.obj, option.obj, orbit.obj, -
  427. X`009planetlist.obj, planets.obj, playerlist.obj, ranklist.obj, redraw.obj, r
  428. Veserved.obj, sintab.obj, smessage.obj, -
  429. X`009socket.obj, stats.obj, util.obj, war.obj, warning.obj, x11window.obj, VM
  430. VSutils.obj, udpopt.obj, scan.obj
  431. X`009link /executable=vmsnetrek.exe COLORS, COUP, DATA, DEATH, DEFAULTS, DETO
  432. VNATE, -
  433. X`009DMESSAGE, ENTER, FINDSLOT, -
  434. X`009GETNAME, GETSHIP, INFORM, INPUT, -
  435. X`009INTERFACE, MAIN, NEWWIN, OPTION, -
  436. X`009ORBIT, PLANETLIST, PLANETS, -
  437. X`009PLAYERLIST.obj, RANKLIST.obj, REDRAW.obj, -
  438. X`009RESERVED.obj, SINTAB.obj, SMESSAGE.obj, SOCKET.obj, scan.obj, -
  439. X`009STATS.obj, UTIL.obj, WAR.obj, WARNING.obj, X11WINDOW.obj, VMSutils.obj,
  440. +-+-+-+-+-+-+-+-  END  OF PART 20 +-+-+-+-+-+-+-+-
  441.