home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume10 / gb3 / part12 < prev    next >
Internet Message Format  |  1990-06-08  |  59KB

  1. Path: uunet!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v10i012:  gb3 - Galactic Bloodshed, an empire-like war game [Ver. 2.0], Part12/14
  5. Message-ID: <5703@tekred.CNA.TEK.COM>
  6. Date: 1 Jun 90 19:09:42 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 1956
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: VANCLEEF@mps.ohio-state.edu
  12. Posting-number: Volume 10, Issue 12
  13. Archive-name: gb3/Part12
  14. Supersedes: GB2: Volume 7, Issue 44-51
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 12 (of 14)."
  25. # Contents:  Docs/assault.doc Docs/blocks.doc Docs/enslave.doc
  26. #   Docs/help.doc Docs/message.doc Docs/news.doc Docs/oldnews.doc
  27. #   Docs/orbit.doc Docs/survey.doc client/orbit.c server/autoreport.c
  28. #   server/capitol.c server/daemon.c server/examine.c server/max.c
  29. #   server/mobiliz.c server/more.c server/moveplanet.c server/races.h
  30. #   server/relation.c server/tech.c server/toggle.c
  31. # Wrapped by billr@saab on Fri Jun  1 11:53:45 1990
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. if test -f 'Docs/assault.doc' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'Docs/assault.doc'\"
  35. else
  36. echo shar: Extracting \"'Docs/assault.doc'\" \(2606 characters\)
  37. sed "s/^X//" >'Docs/assault.doc' <<'END_OF_FILE'
  38. XASSAULT            Galactic Bloodshed        ASSAULT
  39. X
  40. X
  41. XNAME
  42. X  [1] assault -- attempt capture of ship/planet
  43. XSYNTAX
  44. X      assault #<shipnumber> <where> <number of boarders>
  45. X
  46. XDESCRIPTION
  47. X  This command may be used when a player wishes to capture a ship or planet
  48. Xintact instead of laying waste to it.  To perform an assault, the ship involved
  49. Xmust be 10 units of distance to the enemy or closer (much like ``land''.)  
  50. X
  51. X
  52. XCAPTURING A PLANET
  53. X
  54. X  The player will receive a combat readiness bonus of 100 on the disputed 
  55. Xplanet only if he does not already have extensive colonies there.  Combat
  56. Xreadiness represents how ready and willing the inhabitants are to fight.  
  57. XOver time, this combat readiness will tend towards the average mobilization 
  58. Xof the sectors each player owns.  The mobilization of the assaulted sector
  59. Xwill be set to 100, as will the mobilization quota (see ``mobilize'').
  60. X
  61. X  Each turn sectors bordered by two opposing players will be contested, both
  62. Xraces will receive casualties in disputed sectors and the winner, if there is
  63. Xone, will move in.  Being possibly outnumbered by the planet's original 
  64. Xinhabitants, the assaulting player may have to resort to orbital bombardment
  65. Xbefore the natives wise up and surrender.  (see the section on ``slavery'').
  66. XThis, however, carries it's own price -- sectors may be rendered uninhabitable
  67. Xfor some time and of no use to anyone.
  68. X
  69. X
  70. XCAPTURING A SHIP
  71. X
  72. X  You will be prompted for how many boarders you wish to risk in this
  73. Xendeavor.  This must be at least one and at most the entire ship's crew.
  74. XYou cannot assault with more crew than the maximum crew capacity of the 
  75. Xother ship.  Your total boarding strength is calculated, and compared with
  76. Xthe other ship's, and casualties are taken.  If you win, you capture the ship;
  77. Xif you lose, the ships are not docked and you will have to try again.  It
  78. Xmay take several tries to capture a ship, especially if there are a lot of
  79. Xenemy crew.  Some structural damage to both ships is unavoidable, and may
  80. Xresult in the destruction of one or the other (or both).
  81. X
  82. X  The boarding strength of the attacking ship is proportional to the
  83. Xlogarithms of the following: the number of boarders, the tech of their race,
  84. Xand their fighting ability.  The defending strength of the other ship depends
  85. Xon these same factors and the armor class of the defending ship.  Note that
  86. Xin attacking, any ship is as good as any other; it only depends on the 
  87. Xsoldiers.  Smaller groups of boarders can actually be more effective than
  88. Xlarger groups, but the attacker will need AP's and patience for several
  89. Xassaults.
  90. X
  91. XSEE ALSO
  92. X  enslave, land, fire
  93. X
  94. END_OF_FILE
  95. if test 2606 -ne `wc -c <'Docs/assault.doc'`; then
  96.     echo shar: \"'Docs/assault.doc'\" unpacked with wrong size!
  97. fi
  98. # end of 'Docs/assault.doc'
  99. fi
  100. if test -f 'Docs/blocks.doc' -a "${1}" != "-c" ; then 
  101.   echo shar: Will not clobber existing file \"'Docs/blocks.doc'\"
  102. else
  103. echo shar: Extracting \"'Docs/blocks.doc'\" \(1023 characters\)
  104. sed "s/^X//" >'Docs/blocks.doc' <<'END_OF_FILE'
  105. XBLOCKS            Galactic Bloodshed            BLOCKS
  106. X
  107. X
  108. XNAME
  109. X  [0] block -- list empires and their approximate influence
  110. X
  111. XSYNTAX
  112. X       block <leader or block number>
  113. X
  114. XDESCRIPTION
  115. X  
  116. X   This command will list the relative power of each alliance
  117. Xblock, or a specific alliance block if specified. Each player
  118. Xmay lead one alliance block only. In order to get people to
  119. Xinto the group you must use the 'invite <player>' to request
  120. Xmembership. The other player may join the alliance block by
  121. Xusing 'pledge <leader or block number>'. A player may quit
  122. Xor blackball another for his group by doing 'uninvite <player>'
  123. Xor 'unpledge <leader or block number>'. Alliance blocks
  124. Xdo not force alliances among its members. In fact, it solely
  125. Xis used for political purposes. However, an alliance block
  126. Xcan win the game by accumulating the required number of
  127. Xvictory points. This is the sum of all VPs accumulated
  128. Xby its current members (not programmed in yet).
  129. X
  130. X   You can name your alliance block with 'name block <your block's
  131. Xname>'.
  132. X
  133. X SEE ALSO
  134. X    power
  135. END_OF_FILE
  136. if test 1023 -ne `wc -c <'Docs/blocks.doc'`; then
  137.     echo shar: \"'Docs/blocks.doc'\" unpacked with wrong size!
  138. fi
  139. # end of 'Docs/blocks.doc'
  140. fi
  141. if test -f 'Docs/enslave.doc' -a "${1}" != "-c" ; then 
  142.   echo shar: Will not clobber existing file \"'Docs/enslave.doc'\"
  143. else
  144. echo shar: Extracting \"'Docs/enslave.doc'\" \(2049 characters\)
  145. sed "s/^X//" >'Docs/enslave.doc' <<'END_OF_FILE'
  146. XENSLAVE            Galactic Bloodshed        ENSLAVE
  147. X
  148. X
  149. XNAME
  150. X  [1] enslave -- enslave a world
  151. XSYNTAX
  152. X      enslave <shipnumber>
  153. X
  154. XDESCRIPTION
  155. X  This command is used to convert entire planets to a condition of slavery.
  156. XWhen invoked the ship specified must be an Orbital Assault Platform, which
  157. Xis the only ship type sufficiently impressive to convince the planetary
  158. Xpopulation of the futility of resistance.  The platform must be orbiting
  159. Xthe planet to be enslaved.
  160. X
  161. X  To commence a proper enslavement, the forces bearing (the platform itself
  162. Xplus the other ships which might be orbiting the planet) against the
  163. Xplanet must be more than twice the defending strength (weapons under the
  164. Xcontrol of the inhabitants plus the weapons on board any ships they own in
  165. Xorbit around the planet).  The enslaving player must have a garrison (at
  166. Xleast one population) on the planet.  
  167. X
  168. X  The enslaving player is not told how much strength the other players might
  169. Xhave, but he is told whether the planet was enslaved or not.  Telegram
  170. Xmessages are sent to any players affected by the command.
  171. X
  172. X  To keep the planet the enslaving player must maintain a garrison of at
  173. Xleast 0.1% of the total population on the planet.  (The garrison need not be
  174. Xthat large to initiate slavery, but must be that large to maintain it.)
  175. XIf the garrison falls below this threshold, and the OASP is no longer in
  176. Xorbit around the planet, a revolution is immediate and devastating:
  177. Xall sectors belonging to the former slave holder are destroyed in the
  178. Xinhabitants' fury of revolution.  If the OASP is still there, there is a
  179. Xchance (50%) that a revolution will not occur, and some occupying sectors
  180. Xmay not be destroyed (without it overhead, they will be).  Other random
  181. Xsectors will be damaged as well in the fight.
  182. X
  183. X  When a planet is under enslavement, everything produced there will be
  184. Xcredited to the slave-holding player's stockpiles.  Races enslaved on a
  185. Xplanet can still survey, map, build, and otherwise observe things happening
  186. Xthere (there is an active resistance).
  187. X
  188. X
  189. X  SEE ALSO
  190. X  survey, map
  191. END_OF_FILE
  192. if test 2049 -ne `wc -c <'Docs/enslave.doc'`; then
  193.     echo shar: \"'Docs/enslave.doc'\" unpacked with wrong size!
  194. fi
  195. # end of 'Docs/enslave.doc'
  196. fi
  197. if test -f 'Docs/help.doc' -a "${1}" != "-c" ; then 
  198.   echo shar: Will not clobber existing file \"'Docs/help.doc'\"
  199. else
  200. echo shar: Extracting \"'Docs/help.doc'\" \(2598 characters\)
  201. sed "s/^X//" >'Docs/help.doc' <<'END_OF_FILE'
  202. XGalactic.Bloodshed commands:
  203. X
  204. X
  205. X () or none -required arguments. []-optional arguments.
  206. X xlow:xhi,ylow:yhi-means a range of sectors from xlow to xhi, and ylow to
  207. X    yhi.  also legal: x,y xlow:xhi,y x,ylow:yhi
  208. X path : a scope path; separated by '/'. ex: /sol/Earth means system sol, planet
  209. X     Earth; ../Mars means the scope above you, planet (or star for that 
  210. X     matter) Mars.  these may be abbreviated.  Substitute ':' for the
  211. X     current scope you are in for any command. 'path' can be substituted 
  212. X     with '#(shipno)' for many commands.
  213. X
  214. X
  215. Xsurvey [xlow:xhi,ylow:yhi] -- look at survey on range of sectors or planet
  216. X        or star.
  217. X
  218. Xbuild [shiptypeletter] [x,y] -- build a ship/object.
  219. X
  220. Xcs ([#(shipnumber)|[:]|[/]|[..]|[planetname]|[starname]|[/] etc.) -- 
  221. X        change scope.  ( ".." = up one;
  222. X        ':' = current scope; 
  223. X        <name> = down to planet or star,
  224. X        #(shipnumber) = that ship number.)
  225. X
  226. Xdeclare -- state relations (alliance, neutrality, war) to other players.
  227. X
  228. Xfire  -- fire from ship or planet, to ship or planet 
  229. X
  230. Xload [#shipnum] -- load/unload commodities from ship.
  231. X
  232. Xlaunch [#shipnum] -- launch a ship from a planet or the ship it is docked with.
  233. X
  234. Xland [#shipnum] [x,y] -- land a ship on a planet, sector x,y.
  235. X
  236. Xmobilize -- build up military readiness in sectors.
  237. X
  238. Xmap [path] -- look at sector map if [path] is a planet; use orbit otherwise.
  239. X
  240. Xname -- rename an object (star or planet).
  241. X
  242. Xorbit [options] [path] -- graphic representation of ship and planet positions.
  243. X
  244. Xorder [ #shipnum ] -- send orders to ships: turn them on/off, 
  245. X        navigation, speed setting, various other things dependent
  246. X        on the type of ship.
  247. X
  248. Xprofile -- racial profile.
  249. X
  250. Xpower -- report of all races and their approximate influence in the game.
  251. X
  252. Xscrap [#shipnum] -- turn a ship/object into scrap.
  253. X
  254. Xstock [#shipnumber] -- ship report.
  255. X
  256. Xread -- read telegram messages.
  257. X
  258. Xrelation -- report on the relations between your player and the other players
  259. X    in the game; also translation modifiers.
  260. X
  261. Xreport [#shipnumber] -- navigational ship report.
  262. X
  263. Xtactical [#shipnumber] -- tactical report of enemy ships within range of yours.
  264. X
  265. Xtechnology -- invest production into technological development.
  266. X
  267. Xtelegram [ path | playername | player# ] -- send a message to another player,
  268. X    or to whomever resides in (path): if ship, the owner of the ship,
  269. X                      if planet, anyone inhabiting it,
  270. X                      if star, anyone with colonies/ships 
  271. X                        there.
  272. X
  273. Xtoxicity -- Set a threshold to build toxic waste canisters when toxicity gets
  274. X    too high.
  275. X
  276. Xzoom (amount) | (numerator/denominator) [x,y] -- zoom in/out for orbit display.
  277. X
  278. Xquit -- quit.
  279. X
  280. Xhelp -- this file.
  281. X
  282. END_OF_FILE
  283. if test 2598 -ne `wc -c <'Docs/help.doc'`; then
  284.     echo shar: \"'Docs/help.doc'\" unpacked with wrong size!
  285. fi
  286. # end of 'Docs/help.doc'
  287. fi
  288. if test -f 'Docs/message.doc' -a "${1}" != "-c" ; then 
  289.   echo shar: Will not clobber existing file \"'Docs/message.doc'\"
  290. else
  291. echo shar: Extracting \"'Docs/message.doc'\" \(1921 characters\)
  292. sed "s/^X//" >'Docs/message.doc' <<'END_OF_FILE'
  293. X********************************************************************
  294. X
  295. X12/14/89 - 4 hour updates have started (we changed our minds).
  296. X    12, 4, 8 am/pm PST. There may also be unscheduled
  297. X    updates in case of anything unusual that may crop up
  298. X    (hopefully nothing).
  299. X
  300. X12/13/89 - Looks like we got major problems ironed out now.
  301. X    Production is fixed, planets now orbit stars by Keppler's
  302. X    Law, and a few other technical stuff to improve reliability.
  303. X    You can go ahead and enroll again. 
  304. X
  305. X    Also, if you have never played before, when the program
  306. X    asks you for your password, type the password by which
  307. X    you expect to be referred to of by GB. This *is* your
  308. X    password. Please do not enroll more than once, we have a
  309. X    limited number of openings.
  310. X
  311. X12/12/89 - WELL I LOST THE DATA BASE!! (accidentally used 'rm' 
  312. X    instead of 'cp' when I was trying to back it up. GRR!!!)
  313. X    Production was messed up anyway (unknown, some pointer is
  314. X    mislabeled). I want to make sure this is working tonight 
  315. X    before we start again. Sorry folks!
  316. X    -Garrett
  317. X
  318. X12/8/89 - Make sure that your combat ships ('d', 'C', 'B', 'D', '$')
  319. X    have resources on board to repair damage! (When these
  320. X    ships are built they begin with a 50% damage level).
  321. X    During battle, resources are required to be on board to repair
  322. X    ships. Also, make sure you load destruct on ships so your guns
  323. X    have ammo to fire. The game automatically loads fuel and crew to
  324. X    the max available in a sector. If you don't want that
  325. X    unload the crew with 'load' or 'unload' (same thing). Keep
  326. X    in mind that the efficiency of the ship depends on the
  327. X    amount of crew available (max crew is best!)
  328. X
  329. X12/5/89 - Check out the new options 'aliens', 'geography' and
  330. X    'inverse'. Do 'help map' to find out about what they
  331. X    do.
  332. X     --> I compiled these options into one command 'toggle',
  333. X         in anticipation of adding tons more later on.  -Rob
  334. X
  335. X********************************************************************
  336. END_OF_FILE
  337. if test 1921 -ne `wc -c <'Docs/message.doc'`; then
  338.     echo shar: \"'Docs/message.doc'\" unpacked with wrong size!
  339. fi
  340. # end of 'Docs/message.doc'
  341. fi
  342. if test -f 'Docs/news.doc' -a "${1}" != "-c" ; then 
  343.   echo shar: Will not clobber existing file \"'Docs/news.doc'\"
  344. else
  345. echo shar: Extracting \"'Docs/news.doc'\" \(2767 characters\)
  346. sed "s/^X//" >'Docs/news.doc' <<'END_OF_FILE'
  347. X*************************************************************
  348. X
  349. X10/24/89 ********** FIRE --- IMPORTANT *********************
  350. X
  351. X     In case you have been upset with the randomness in
  352. X     the fire routine, I tried to implement as change.
  353. X     I will do this in several stages. For the moment
  354. X     everything is completely deterministic, so look at
  355. X     the damages you do (and get) and see if you like them.
  356. X     Comments are appreciated. I will ad dthe random factors 
  357. X     later, I think they are neccessary but hard for
  358. X     debugging. To save you a lot of experimenting, here is how
  359. X     it works:
  360. X
  361. X     SHIPS to SHIPS:
  362. X               effstr = (your strenght) * FAC / (1+dist/DIST)
  363. X                currently FAC = 2, DIST = 300
  364. X
  365. X               damage = (effstr-3*armor)/2
  366. X
  367. X           Thats it !! Simple enough ??
  368. X
  369. X         PLANETS on PLANETS: (proposed!). There will be no
  370. X           more firing from planets on planets, if you want
  371. X           to attack a planet you should build ships.
  372. X           This will eliminate the common trick of
  373. X           wasing one sector, landing and letting the
  374. X           planet destroy itsself.
  375. X
  376. X         PLANETS on SHIPS: I think I will inclease the planet guns 
  377. X           back to 40 (or 60 ???), a planet should be able to 
  378. X           vaporize anything that attacks it. Note that 
  379. X           The damage on the ship will be calculated as above. 
  380. X           These two changes, for the first time, might make
  381. X           planetary defense logical. 
  382. X
  383. X         SHIPS on PLANETS: Same as before, except, you have to be 
  384. X           there to attack. Only ORBITING ships will be
  385. X           able to attack planets. This should disallow 
  386. X           somebody entering your system to wipe out your 
  387. X           planets instantaneously.
  388. X
  389. X
  390. X         
  391. X
  392. X6/29/89 - For those of you who haven't noticed, you can tell 'map'
  393. X    or 'orbit' to omit the names of ships, stars, or planets
  394. X    to get a look at objects that may be overprinting others
  395. X    so you can see them. do `help map' or `help orbit' to
  396. X    see how to do this.
  397. X
  398. X6/26/89 - When you order ships to go to other systems, do not 
  399. X    specify planet designations until your ships arrive at
  400. X    the star.
  401. X
  402. X6/23/89 - Just a reminder, don't build ships/objects with a `*'
  403. X    designation in front of them. They haven't been programmed
  404. X    and will just be a waste of resources.
  405. X
  406. X6/22/89 - You must load fuel and crew onto an atmospheric processor `A'
  407. X    to get them to work. See help in `build' for details.
  408. X
  409. X6/22/89 - Cargo ships, shuttle, stations, orbital assualt platforms,
  410. X    and habitats can be used to construct other ships.
  411. X
  412. X6/21/89 - Teletransporter devices '[' are now working.
  413. X
  414. X6/9/89  - We have installed the new version of Galactic Bloodshed 1.0(osu). 
  415. X    This has superior addressing and whatnot from the previous bug-ridden
  416. X    version. It has several new features. Good luck with this one.
  417. END_OF_FILE
  418. if test 2767 -ne `wc -c <'Docs/news.doc'`; then
  419.     echo shar: \"'Docs/news.doc'\" unpacked with wrong size!
  420. fi
  421. # end of 'Docs/news.doc'
  422. fi
  423. if test -f 'Docs/oldnews.doc' -a "${1}" != "-c" ; then 
  424.   echo shar: Will not clobber existing file \"'Docs/oldnews.doc'\"
  425. else
  426. echo shar: Extracting \"'Docs/oldnews.doc'\" \(2767 characters\)
  427. sed "s/^X//" >'Docs/oldnews.doc' <<'END_OF_FILE'
  428. X*************************************************************
  429. X
  430. X10/24/89 ********** FIRE --- IMPORTANT *********************
  431. X
  432. X     In case you have been upset with the randomness in
  433. X     the fire routine, I tried to implement as change.
  434. X     I will do this in several stages. For the moment
  435. X     everything is completely deterministic, so look at
  436. X     the damages you do (and get) and see if you like them.
  437. X     Comments are appreciated. I will ad dthe random factors 
  438. X     later, I think they are neccessary but hard for
  439. X     debugging. To save you a lot of experimenting, here is how
  440. X     it works:
  441. X
  442. X     SHIPS to SHIPS:
  443. X               effstr = (your strenght) * FAC / (1+dist/DIST)
  444. X                currently FAC = 2, DIST = 300
  445. X
  446. X               damage = (effstr-3*armor)/2
  447. X
  448. X           Thats it !! Simple enough ??
  449. X
  450. X         PLANETS on PLANETS: (proposed!). There will be no
  451. X           more firing from planets on planets, if you want
  452. X           to attack a planet you should build ships.
  453. X           This will eliminate the common trick of
  454. X           wasing one sector, landing and letting the
  455. X           planet destroy itsself.
  456. X
  457. X         PLANETS on SHIPS: I think I will inclease the planet guns 
  458. X           back to 40 (or 60 ???), a planet should be able to 
  459. X           vaporize anything that attacks it. Note that 
  460. X           The damage on the ship will be calculated as above. 
  461. X           These two changes, for the first time, might make
  462. X           planetary defense logical. 
  463. X
  464. X         SHIPS on PLANETS: Same as before, except, you have to be 
  465. X           there to attack. Only ORBITING ships will be
  466. X           able to attack planets. This should disallow 
  467. X           somebody entering your system to wipe out your 
  468. X           planets instantaneously.
  469. X
  470. X
  471. X         
  472. X
  473. X6/29/89 - For those of you who haven't noticed, you can tell 'map'
  474. X    or 'orbit' to omit the names of ships, stars, or planets
  475. X    to get a look at objects that may be overprinting others
  476. X    so you can see them. do `help map' or `help orbit' to
  477. X    see how to do this.
  478. X
  479. X6/26/89 - When you order ships to go to other systems, do not 
  480. X    specify planet designations until your ships arrive at
  481. X    the star.
  482. X
  483. X6/23/89 - Just a reminder, don't build ships/objects with a `*'
  484. X    designation in front of them. They haven't been programmed
  485. X    and will just be a waste of resources.
  486. X
  487. X6/22/89 - You must load fuel and crew onto an atmospheric processor `A'
  488. X    to get them to work. See help in `build' for details.
  489. X
  490. X6/22/89 - Cargo ships, shuttle, stations, orbital assualt platforms,
  491. X    and habitats can be used to construct other ships.
  492. X
  493. X6/21/89 - Teletransporter devices '[' are now working.
  494. X
  495. X6/9/89  - We have installed the new version of Galactic Bloodshed 1.0(osu). 
  496. X    This has superior addressing and whatnot from the previous bug-ridden
  497. X    version. It has several new features. Good luck with this one.
  498. END_OF_FILE
  499. if test 2767 -ne `wc -c <'Docs/oldnews.doc'`; then
  500.     echo shar: \"'Docs/oldnews.doc'\" unpacked with wrong size!
  501. fi
  502. # end of 'Docs/oldnews.doc'
  503. fi
  504. if test -f 'Docs/orbit.doc' -a "${1}" != "-c" ; then 
  505.   echo shar: Will not clobber existing file \"'Docs/orbit.doc'\"
  506. else
  507. echo shar: Extracting \"'Docs/orbit.doc'\" \(2156 characters\)
  508. sed "s/^X//" >'Docs/orbit.doc' <<'END_OF_FILE'
  509. X
  510. XORBIT            Galactic Bloodshed            ORBIT
  511. X
  512. X
  513. XNAME
  514. X  [0] orbit -- Graphic representation of objects in current scope
  515. X
  516. XSYNOPSIS
  517. X       orbit <[-n] [-S] [-p] [-s] [-ship/planet number]> <path>
  518. X
  519. XDESCRIPTION
  520. X
  521. X  Orbit gives a visual map of all stars, planets, and ships in the scope
  522. Xof ``path'' or the current scope if none is specified.  You cannot map an
  523. Xarea that has not been visited by one of your ships.
  524. X
  525. X  If ``path'' is the root, ``orbit'' will show all the stars in the game,
  526. Xand all ships travelling in interstellar space that belong to the player.
  527. X
  528. X  If ``path'' is a star, orbit will display the solar system there
  529. Xwith its star in the center and orbiting planets around it, plus all ships
  530. Xthat are the player's (or can be detected).
  531. X
  532. X  If ``path'' is a planet orbit will display that planet and orbiting
  533. Xships.
  534. X
  535. X  If ``path'' is in the form ``#shipnum'' orbit will display a map of 
  536. Xwhichever system or planet the ship is at.
  537. X
  538. X  If no path has been specified, the current scope is used, and display will
  539. Xbe centered around the current ``lastx,lasty'' coordinates.  These coordinates
  540. Xrepresent the x,y location of the last scope the player was in.  For instance,
  541. Xif a player types the following:
  542. X
  543. X [xx] / >cs #5/..
  544. X [yy] / Sol / Sol-III >orbit
  545. X
  546. X  The orbit display will be centered around the location of ship #5.
  547. X
  548. X  When no path is specified, the zoom factor comes into play as well.  Display
  549. Xwill appear larger or smaller according to the zoom factor (1.0 being normal).
  550. XIf there is a specified path argument to orbit, zoom and last coordinates are
  551. Xnot dealt with.  (It is as if they are 0,0 and 1.0, respectively.)
  552. X
  553. X
  554. X  OPTIONS
  555. X
  556. X  when invoking ``orbit'' the options given (except for ``-(number)'') can be 
  557. Xeither in the form "-pSs" or spread out as in "-p -S -s -3".
  558. X
  559. X
  560. X  -p : If this option is set, ``orbit'' will not display planet names.
  561. X
  562. X  -S : Do not display star names.
  563. X
  564. X  -s : Do not display ships.
  565. X
  566. X  -(number) : Do not display that #'d ship or planet (should it obstruct
  567. X        the view of another object).  Stars or planets are numbered
  568. X        sequentially from 1, while ships can be referenced by their
  569. X        ship number.
  570. X
  571. X
  572. XSEE ALSO
  573. X  map, cs, scope, zoom
  574. X
  575. END_OF_FILE
  576. if test 2156 -ne `wc -c <'Docs/orbit.doc'`; then
  577.     echo shar: \"'Docs/orbit.doc'\" unpacked with wrong size!
  578. fi
  579. # end of 'Docs/orbit.doc'
  580. fi
  581. if test -f 'Docs/survey.doc' -a "${1}" != "-c" ; then 
  582.   echo shar: Will not clobber existing file \"'Docs/survey.doc'\"
  583. else
  584. echo shar: Extracting \"'Docs/survey.doc'\" \(2504 characters\)
  585. sed "s/^X//" >'Docs/survey.doc' <<'END_OF_FILE'
  586. XSURVEY            Galactic Bloodshed            SURVEY
  587. X
  588. X
  589. XNAME
  590. X  [0] survey -- more detailed survey of planet, sector, ship, star
  591. X
  592. XSYNOPSIS
  593. X    survey <xlow:xhi,ylow:yhi or x,y>
  594. X
  595. XDESCRIPTION
  596. X  survey gives a different report depending on what scope it is used on.
  597. XThe possible scopes are ship, planet, and star.
  598. X
  599. XCensus on sector
  600. X
  601. X   x,y des eff mob frt res popn ^popn
  602. X   5,7  x   20  50  45  25  80   196
  603. X
  604. X  x,y: map coordinates on sector
  605. X  des: designation of sector (land, water, etc)
  606. X  eff: efficiency (%age it is built up) of the sector
  607. X  mob: % mobilization of the citizens in that sector
  608. X  frt: fertility of the sector (supports people)
  609. X  res: resource deposits in the sector
  610. X  popn: population of the sector
  611. X  ^popn: maximum population the sector can support
  612. X
  613. XCensus on planet
  614. X
  615. X   gravity   x,y absolute     x,y relative to Sol
  616. X    1.00     -24222,5424           -324,755
  617. X
  618. X  gravity: gravity of the planet (relative to Earth normal)
  619. X  x,y absolute: coordinates relative to the Center of the Universe
  620. X  x,y relative..: coordinates relative to the planet's primary
  621. X
  622. X      ======== planetary conditions: ========
  623. X  Gives the atmospheric concentrations of certain key elements in the
  624. X    planet's atmosphere: Oxygen, CO2, Methane, Hydrogen, Nitrogen, Helium,
  625. X    Sulfur, surface temperature, normal temperature (without artificial
  626. X    influencing factors like space mirrors), and 'Other'.  The 'Total 
  627. X    planetary compatibility' is the difference between the weighted sum 
  628. X    of each of these characteristics and the preferences of the player 
  629. X    (expressed in parentheses after each characteristic).
  630. X
  631. X  fuel_stock  resource_stock dest_pot.   popltn    ^popltn
  632. X      173             92       101       1158       2901
  633. X
  634. X  x,y: the x,y coordinates of the planet relative to its star
  635. X  fuel_stock: fuel the player has managed to stockpile on the planet
  636. X  resource_stock: stockpiled resources on the planet
  637. X  dest_pot: stockpiled destructive potential on the planet (weapons)
  638. X  popltn: total population of living beings
  639. X  ^popltn: maximum number of living beings the planet can support
  640. X    (inhabited sectors only)
  641. X
  642. XCensus on star
  643. X
  644. X  Locn: x,y coordinates of the star from the Center of the Universe
  645. X  gravity: gravitational influence
  646. X  stability: Stability of the star.  As stability approaches 100, the star
  647. X    will become more and more unstable.  The player must have a technology
  648. X    of 3 or more to determine the stability.
  649. X
  650. X
  651. XCensus on ship #n
  652. X
  653. X   Same as the command 'ship #n'
  654. X
  655. XSEE ALSO
  656. X   ship, report, map, weapons, mobilize
  657. END_OF_FILE
  658. if test 2504 -ne `wc -c <'Docs/survey.doc'`; then
  659.     echo shar: \"'Docs/survey.doc'\" unpacked with wrong size!
  660. fi
  661. # end of 'Docs/survey.doc'
  662. fi
  663. if test -f 'client/orbit.c' -a "${1}" != "-c" ; then 
  664.   echo shar: Will not clobber existing file \"'client/orbit.c'\"
  665. else
  666. echo shar: Extracting \"'client/orbit.c'\" \(2728 characters\)
  667. sed "s/^X//" >'client/orbit.c' <<'END_OF_FILE'
  668. X/*
  669. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky,
  670. X * smq@ucscb.ucsc.edu 
  671. X *
  672. X * orbit.c -- display orbits of planets (graphic representation) 
  673. X *
  674. X * OPTIONS
  675. X * -p : If this option is set, ``orbit'' will not display planet names. 
  676. X *
  677. X * -S : Do not display star names. 
  678. X *
  679. X * -s : Do not display ships. 
  680. X *
  681. X * -(number) : Do not display that #'d ship or planet (in case it obstructs
  682. X * the view of another object) 
  683. X */
  684. X
  685. X#include "GB_copyright.h"
  686. X#define NAMESIZE 18
  687. X
  688. X#define SCALE 100.0
  689. X#define S_X  (stdscr->_maxx - NAMESIZE)
  690. X#define S_Y  (stdscr->_maxy - 1)
  691. X#define Midx (0.5*(S_X - NAMESIZE)/SCALE)
  692. X#define Midy (0.5*S_Y /SCALE)
  693. X
  694. X#include <curses.h>
  695. X#include <stdio.h>
  696. X#include "arrays.h"
  697. X#include "client.h"
  698. Xextern char    *index(), *malloc();
  699. Xextern hugestr    current_output;
  700. Xextern int    have_inv;
  701. X
  702. Xfloat           Lastx, Lasty, Zoom;
  703. X
  704. Xplot_orbit(t)
  705. X    char           *t;
  706. X{
  707. X    int             x, y, array;
  708. X    int             stand1, stand2;
  709. X    char           *u, *v;
  710. X    char            temp[1024], symbol;
  711. X    int        more_data = 1;
  712. X    string        blob;
  713. X
  714. X
  715. X    clear();
  716. X
  717. X    u = t + 1;
  718. X    while (more_data) {
  719. X        while ((v = index(u, ';')) != NULL) {
  720. X        *v = 0;
  721. X        sscanf(u, "%d %d %d %d %1s %d %s", &stand1, &x, &y, &array,
  722. X               &symbol, &stand2, temp);
  723. X        x = (int) x * Midx;
  724. X        y = (int) y * Midy;
  725. X        if (x <= S_X && y <= S_Y) {
  726. X
  727. X            if (symbol == 'm') {    /* space mirror */
  728. X                DispArray(x, y, 9, 5, Mirror[array], 1.0);
  729. X            } else if (symbol == '*' && array > 0) {    /* nova */
  730. X                DispArray(x, y, 11, 7, Novae[array - 1], 1.0);
  731. X            }
  732. X            if (stand1 * have_inv)
  733. X                standout();
  734. X            mvaddch(y, x, symbol);
  735. X            if (stand1 * have_inv)
  736. X                standend();
  737. X            if (symbol == '@' || symbol == '*') {
  738. X                addstr(" ");
  739. X            }
  740. X            if (stand2 * have_inv)
  741. X                standout();
  742. X            addstr(temp);
  743. X            if (stand2 * have_inv)
  744. X                standend();
  745. X        }
  746. X        u = v + 1;
  747. X        }
  748. X
  749. X        move(S_Y - 1, 0);
  750. X        if (strlen(u) == 0) {
  751. X        refresh();
  752. X        return;
  753. X        }
  754. X        if (index(u, '\n') != NULL) {
  755. X        print_with_wrap(u);
  756. X        more_data = 0;
  757. X        } else {
  758. X        receive(blob);
  759. X        strcpy(current_output, u);
  760. X        strcat(current_output, blob);
  761. X        u = current_output;
  762. X        }
  763. X    }
  764. X
  765. X    refresh();
  766. X    return;
  767. X}
  768. X
  769. X/*
  770. X * display array on screen.  at the moment magnification is not implemented. 
  771. X */
  772. XDispArray(x, y, maxx, maxy, array, mag)
  773. X    int             x, y;
  774. X    int             maxx, maxy;
  775. X    char           *array[];
  776. X    float           mag;
  777. X{
  778. X    register int    x2, y2, curx, cury;
  779. X
  780. X    for (cury = y - maxy / 2, y2 = 0; y2 < maxy; cury++) {
  781. X        if (cury >= 0 && cury <= S_Y) {
  782. X            move(cury, curx = x - maxx / 2);
  783. X            for (x2 = 0; x2 < maxx; curx++) {
  784. X                if (curx >= 0 && curx <= S_X)
  785. X                    if (inch() == ' ')
  786. X                        addch(array[y2][x2]);
  787. X                    else
  788. X                        move(cury, curx);
  789. X                        /* one to right */
  790. X                x2++;
  791. X            }
  792. X        }
  793. X        y2++;
  794. X    }
  795. X
  796. X}
  797. END_OF_FILE
  798. if test 2728 -ne `wc -c <'client/orbit.c'`; then
  799.     echo shar: \"'client/orbit.c'\" unpacked with wrong size!
  800. fi
  801. # end of 'client/orbit.c'
  802. fi
  803. if test -f 'server/autoreport.c' -a "${1}" != "-c" ; then 
  804.   echo shar: Will not clobber existing file \"'server/autoreport.c'\"
  805. else
  806. echo shar: Extracting \"'server/autoreport.c'\" \(2211 characters\)
  807. sed "s/^X//" >'server/autoreport.c' <<'END_OF_FILE'
  808. X/*
  809. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  810. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.c.
  811. X * Restrictions in GB_copyright.h.c.
  812. X * autoreport.c -- tell server to generate a report for each planet
  813. X */
  814. X
  815. X#include "GB_copyright.h"
  816. X#define EXTERN extern
  817. X#include "vars.h"
  818. X#include "ships.h"
  819. X#include "buffers.h"
  820. X
  821. Xautoreport(Playernum,APcount, argn,args)
  822. Xint Playernum;
  823. Xint APcount;
  824. Xint argn;
  825. Xchar args[MAXARGS][COMMANDSIZE];
  826. X{
  827. Xplanettype *p;
  828. Xplacetype place;
  829. Xint autoreport_pdata,autoreport_sectdata;
  830. X
  831. Xif (argn==1) {   /* no args */
  832. X if (Dir[Playernum-1].level==LEVEL_PLAN) {
  833. X  openpdata(&autoreport_pdata);
  834. X  getplanet(autoreport_pdata,&p,
  835. X    Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  836. X  if (p->info[Playernum-1].autorep)
  837. X    p->info[Playernum-1].autorep = 0;
  838. X  else
  839. X    p->info[Playernum-1].autorep = TELEG_MAX_AUTO;
  840. X
  841. X  putplanet(autoreport_pdata, p, 
  842. X    Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  843. X  close_file(autoreport_pdata);
  844. X
  845. X  sprintf(buf,"Autoreport on %s has been %s.\n",
  846. X    Stars[Dir[Playernum-1].snum]->pnames[Dir[Playernum-1].pnum],
  847. X    p->info[Playernum-1].autorep ? "set" : "unset");
  848. X      notify(Playernum, buf);
  849. X
  850. Xfree(p);
  851. X } else {
  852. X      sprintf(buf,"Scope must be a planet or ship.\n");
  853. X     notify(Playernum, buf);
  854. X      return(1);
  855. X       }
  856. X} else if (argn==2) {     /* argn==2, place specified */
  857. X  place = Getplace(Playernum,args[1], 0);
  858. X  if (place.level==LEVEL_PLAN) {
  859. X     openpdata(&autoreport_pdata);
  860. X     getplanet(autoreport_pdata,&p,
  861. X    Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  862. X
  863. X     sprintf(buf,"Autoreport on %s has been %s.\n",
  864. X      Stars[Dir[Playernum-1].snum]->pnames[Dir[Playernum-1].pnum],
  865. X      p->info[Playernum-1].autorep ? "set" : "unset");
  866. X    notify(Playernum, buf);
  867. X
  868. X     p->info[Playernum-1].autorep = !p->info[Playernum-1].autorep;
  869. X     putplanet(autoreport_pdata, p,
  870. X        Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  871. X     close_file(autoreport_pdata);
  872. X
  873. X     free(p);
  874. X } else {
  875. X      sprintf(buf,"Scope must be a planet or ship.\n");
  876. X    notify(Playernum, buf);
  877. X      return(1);
  878. X       }
  879. X } else if (argn>2) {
  880. X     sprintf(buf,"Autoreport: error in args.\n");
  881. X    notify(Playernum, buf);
  882. X    return(1);
  883. X   }
  884. X
  885. X}
  886. END_OF_FILE
  887. if test 2211 -ne `wc -c <'server/autoreport.c'`; then
  888.     echo shar: \"'server/autoreport.c'\" unpacked with wrong size!
  889. fi
  890. # end of 'server/autoreport.c'
  891. fi
  892. if test -f 'server/capitol.c' -a "${1}" != "-c" ; then 
  893.   echo shar: Will not clobber existing file \"'server/capitol.c'\"
  894. else
  895. echo shar: Extracting \"'server/capitol.c'\" \(1824 characters\)
  896. sed "s/^X//" >'server/capitol.c' <<'END_OF_FILE'
  897. X/*
  898. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  899. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  900. X * Restrictions in GB_copyright.h.
  901. X *
  902. X * capitol.c -- designate a capitol
  903. X */
  904. X
  905. X#include "GB_copyright.h"
  906. X#define EXTERN extern
  907. X#include "vars.h"
  908. X#include "ships.h"
  909. X#include "races.h"
  910. X#include "buffers.h"
  911. X#include <signal.h>
  912. X
  913. Xint capitol_racedata;
  914. X
  915. Xcapitol(Playernum,APcount, argn,args)
  916. Xint Playernum;
  917. Xint APcount;
  918. Xint argn;
  919. Xchar args[MAXARGS][COMMANDSIZE];
  920. X{
  921. Xint shipno,stat;
  922. Xint shdata;
  923. Xshiptype *s;
  924. X
  925. Xfree(Race);
  926. Xopenracedata(&capitol_racedata);
  927. Xgetrace(capitol_racedata, &Race, Playernum);
  928. Xclose_file(capitol_racedata);
  929. X
  930. X  if (argn!=2) {
  931. X
  932. X     shipno = Race->Gov_ship;
  933. X
  934. X  } else {
  935. X
  936. X     shipno = atoi(args[1]+(args[1][0]=='#'));
  937. X
  938. X     if (Dir[Playernum-1].level==LEVEL_UNIV) {
  939. X     if (!enufAP(Playernum,Sdata.AP[Playernum-1],APcount))
  940. X        return;
  941. X     } else {
  942. X     if (!enufAP(Playernum,Stars[Dir[Playernum-1].snum]->AP[Playernum-1],APcount))
  943. X        return;
  944. X     }
  945. X  }
  946. X
  947. Xif(shipno <= 0) {
  948. X    notify(Playernum, "Change the capitol to be what ship?\n");
  949. X    return;
  950. X    }
  951. X
  952. X  openshdata(&shdata);
  953. X  stat = getship(shdata, &s, shipno);
  954. X  close_file(shdata);
  955. X
  956. X  if (argn==2) {
  957. X    if (!stat || testship(Playernum,s, shipno))
  958. X    return;
  959. X
  960. X    if (s->type!=OTYPE_GOV) {
  961. X    sprintf(buf,"That ship is not a %s.\n",Shipnames[OTYPE_GOV]);
  962. X    notify(Playernum, buf);
  963. X    return;
  964. X    }
  965. X
  966. X    if (Dir[Playernum-1].level==LEVEL_UNIV)
  967. X      deductAPs(Playernum, APcount, 0, 1);
  968. X    else
  969. X      deductAPs(Playernum, APcount, Dir[Playernum-1].snum, 0);
  970. X
  971. X    Race->Gov_ship = shipno;
  972. Xopenracedata(&capitol_racedata);
  973. X    putrace(capitol_racedata, Race);
  974. Xclose_file(capitol_racedata);
  975. X
  976. X  }
  977. X  sprintf(buf,"Efficiency of governmental center: %.0f%%.\n", 
  978. X    ((float)s->popn/Max_crew(s)) *
  979. X    (100 - (float)s->damage) );
  980. X  notify(Playernum, buf);
  981. X
  982. X  free(s);
  983. X
  984. X}
  985. END_OF_FILE
  986. if test 1824 -ne `wc -c <'server/capitol.c'`; then
  987.     echo shar: \"'server/capitol.c'\" unpacked with wrong size!
  988. fi
  989. # end of 'server/capitol.c'
  990. fi
  991. if test -f 'server/daemon.c' -a "${1}" != "-c" ; then 
  992.   echo shar: Will not clobber existing file \"'server/daemon.c'\"
  993. else
  994. echo shar: Extracting \"'server/daemon.c'\" \(1853 characters\)
  995. sed "s/^X//" >'server/daemon.c' <<'END_OF_FILE'
  996. X/*
  997. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  998. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  999. X * Restrictions in GB_copyright.h.
  1000. X * daemon.c -- sleep for awhile, then do a turn
  1001. X */
  1002. X
  1003. X#include "GB_copyright.h"
  1004. X#include "config.h"
  1005. X#include "tweakables.h"
  1006. X#include "files.h"
  1007. X#include <stdio.h>
  1008. X#include <signal.h>
  1009. X#include <time.h>
  1010. X#include <sys/types.h>
  1011. X#include <sys/timeb.h>
  1012. X#include <sys/file.h>
  1013. X#include <sys/ioctl.h>
  1014. X
  1015. Xmain(argc,argv)
  1016. Xint argc;
  1017. Xchar *argv[];
  1018. X{
  1019. X struct tm *t;
  1020. X long clk;
  1021. X int updtime,exstat,turn=0,update=0,fd2;
  1022. X FILE *fd;
  1023. Xchar buf[128];
  1024. X
  1025. X if (fork()) exit();        /* detach from shell */
  1026. X
  1027. X sigblock(SIGHUP|SIGQUIT);  /* ignore signal from owner logging out */
  1028. X
  1029. X
  1030. X  fd2 = open("/dev/tty", O_RDWR);    /* disassociate from tty */
  1031. X  ioctl(fd2, TIOCNOTTY, 0);
  1032. X  close(fd2);
  1033. X
  1034. X  if (argc>1)
  1035. X    updtime = atoi(argv[1]);
  1036. X  else
  1037. X    updtime = DEFAULT_UPDATE_TIME;
  1038. X
  1039. X  /* initialize the data file to feed telnet */
  1040. X  if ((fd = fopen(DAEMONFL, "w")) == NULL)
  1041. X    perror("GB_daemon open of daemon.dat failed");
  1042. X  else
  1043. X    fprintf(fd, "%s\n%s\n", DAEMON_PASSWORD, QUIT_COMMAND);
  1044. X  fclose(fd);
  1045. X
  1046. X while (1) {
  1047. X
  1048. X   clk = time(0);
  1049. X   t = localtime(&clk);
  1050. X
  1051. X   printf("day %d,hour %d,min %d,sec %d\n",
  1052. X        t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
  1053. X
  1054. X   if ( (t->tm_hour % updtime)==0 && update!=t->tm_hour ) {
  1055. X       update = t->tm_hour;
  1056. X    printf("Requesting update\n");
  1057. X    /* this will trigger the update */
  1058. X    /*
  1059. X    exstat = system("telnet pooh 2010 < daemon.dat");
  1060. X     */
  1061. X    sprintf(buf,"telnet %s %d < %s", GB_HOST, GB_PORT, DAEMONFL);
  1062. X    exstat = system(buf);
  1063. X
  1064. X    fd = fopen(PROFDATAFL, "a");
  1065. X       clk = time(0);
  1066. X       t = localtime(&clk);
  1067. X    fprintf(fd,"turn %d @ day %d,hour %d,min %d,sec %d, time=%d secs, exit %d\n",
  1068. X        turn++, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, 
  1069. X        t->tm_min * 60 + t->tm_sec, exstat);
  1070. X    fclose(fd);
  1071. X   } else 
  1072. X    sleep(600);
  1073. X }
  1074. X
  1075. X}
  1076. END_OF_FILE
  1077. if test 1853 -ne `wc -c <'server/daemon.c'`; then
  1078.     echo shar: \"'server/daemon.c'\" unpacked with wrong size!
  1079. fi
  1080. # end of 'server/daemon.c'
  1081. fi
  1082. if test -f 'server/examine.c' -a "${1}" != "-c" ; then 
  1083.   echo shar: Will not clobber existing file \"'server/examine.c'\"
  1084. else
  1085. echo shar: Extracting \"'server/examine.c'\" \(2114 characters\)
  1086. sed "s/^X//" >'server/examine.c' <<'END_OF_FILE'
  1087. X/*
  1088. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1089. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1090. X * Restrictions in GB_copyright.h.
  1091. X *  examine -- check out an object
  1092. X */
  1093. X
  1094. X#include "GB_copyright.h"
  1095. X#define EXTERN extern
  1096. X#include "vars.h"
  1097. X#include "ships.h"
  1098. X#include "buffers.h"
  1099. Xextern int Shipdata[NUMSTYPES][NUMABILS];
  1100. Xextern char *Shipnames[];
  1101. X
  1102. Xexamine(Playernum,APcount, argn,args)
  1103. Xint Playernum;
  1104. Xint APcount;
  1105. Xint argn;
  1106. Xchar args[MAXARGS][COMMANDSIZE];
  1107. X{
  1108. X shiptype *ship;
  1109. X int c,t,shdata,shipno;
  1110. X FILE *fd;
  1111. Xchar ch, temp[128];
  1112. X
  1113. X        sscanf(args[1] + ((*args[1]=='#') ? 1 : 0),"%d",&shipno);
  1114. X
  1115. X    openshdata(&shdata);
  1116. X    if (!getship(shdata,&ship,shipno)) {
  1117. X    close_file(shdata);
  1118. X    return;
  1119. X    }
  1120. X close_file(shdata);
  1121. X    if (!ship->is_alive) {
  1122. X    sprintf(buf,"that ship is dead.\n");
  1123. X        notify(Playernum, buf);
  1124. X    free(ship);
  1125. X    return;
  1126. X    }
  1127. X    if (ship->whatorbits==LEVEL_UNIV || isclr(Stars[ship->storbits]->inhabited, Playernum)) {
  1128. X    sprintf(buf,"That ship it not visible to you.\n");
  1129. X        notify(Playernum, buf);
  1130. X    return;
  1131. X    }
  1132. X
  1133. X    if ((fd=fopen(EXAM_FL, "r"))==NULL) {
  1134. X    perror(EXAM_FL);
  1135. X    return;
  1136. X    }
  1137. X
  1138. X   /* look through ship data file */
  1139. X    for (t=0; t<=ship->type; t++)
  1140. X       while (fgetc(fd) != '~') ;
  1141. X    
  1142. X             /* look through ship data file */
  1143. X    sprintf(buf, "\n");
  1144. X            /* give report */
  1145. X              while ((ch=fgetc(fd)) != '~') {
  1146. X        sprintf(temp, "%c", ch);
  1147. X        strcat(buf, temp);
  1148. X        }
  1149. X    notify(Playernum, buf);
  1150. X              fclose(fd) ;
  1151. X
  1152. X    if (!ship->is_examined) {
  1153. X     if (ship->whatorbits==LEVEL_UNIV)
  1154. X         deductAPs(Playernum,APcount, 0, 1);    /* ded from sdata */
  1155. X     else
  1156. X         deductAPs(Playernum,APcount, ship->storbits, 0);
  1157. X
  1158. X     ship->is_examined = 1;
  1159. X     openshdata(&shdata);
  1160. X     putship(shdata,ship,shipno);
  1161. X    close_file(shdata);
  1162. X
  1163. X    }
  1164. X
  1165. X    if (has_switch(ship)) {
  1166. X    sprintf(buf,"This device has an on/off switch that can be set with order.\n");
  1167. X        notify(Playernum, buf);
  1168. X        }
  1169. X    if (!ship->active) {
  1170. X    sprintf(buf,"This device has been irradiated;\nit's crew is dying and it cannot move for the time being.\n");
  1171. X        notify(Playernum, buf);
  1172. X    }
  1173. X
  1174. X    free(ship);
  1175. X
  1176. X}
  1177. END_OF_FILE
  1178. if test 2114 -ne `wc -c <'server/examine.c'`; then
  1179.     echo shar: \"'server/examine.c'\" unpacked with wrong size!
  1180. fi
  1181. # end of 'server/examine.c'
  1182. fi
  1183. if test -f 'server/max.c' -a "${1}" != "-c" ; then 
  1184.   echo shar: Will not clobber existing file \"'server/max.c'\"
  1185. else
  1186. echo shar: Extracting \"'server/max.c'\" \(2305 characters\)
  1187. sed "s/^X//" >'server/max.c' <<'END_OF_FILE'
  1188. X/*
  1189. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1190. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1191. X * Restrictions in GB_copyright.h.
  1192. X *
  1193. X * maxsupport() -- return how many people one sector can support
  1194. X * Distmap() -- map-oriented distance that does not look square
  1195. X * compatibility() -- return how much race is compatible with planet
  1196. X * gravity() -- return gravity for planet
  1197. X * prin_ship_orbits() -- prints place ship orbits
  1198. X */
  1199. X
  1200. X#include "GB_copyright.h"
  1201. X#define EXTERN extern
  1202. X#include "vars.h"
  1203. X#include "races.h"
  1204. X#include "ships.h"
  1205. X#include <math.h>
  1206. X
  1207. X/* max this sector can support of specified race.
  1208. X */
  1209. Xint maxsupport(r,p,c,toxic)
  1210. Xreg racetype *r;
  1211. Xreg sectortype *p;
  1212. Xfloat c;    /* (compatibility of race sector) */
  1213. Xint toxic;
  1214. X{
  1215. Xint val;
  1216. Xfloat a,b;
  1217. Xa=FACTOR_FERT_SUPPORT * (log1p((double)1.*p->eff)  * log1p((double)p->fert)+1.0);
  1218. Xb=.01 * ((r==NULL) ? 0.0 : r->likes[p->des])
  1219. X    * (MAX(0.0, MIN(100.0, c+20.0*(r->number_sexes-2)))); 
  1220. X
  1221. X
  1222. Xval = (int)( a * b * .01 * (100.0 - (float)toxic) );
  1223. X
  1224. Xreturn val;
  1225. X}
  1226. X
  1227. X
  1228. X
  1229. Xint Distmap(x,y,x2,y2)
  1230. Xreg int x,y,x2,y2;
  1231. X{
  1232. X return( round_rand(fabs((double)x-x2) + fabs( (double)y-y2)*(RATIOXY*0.5) ) );
  1233. X}
  1234. X
  1235. X
  1236. Xfloat compatibility(planet, race)
  1237. Xreg planettype *planet;
  1238. Xreg racetype *race;
  1239. X{
  1240. X reg int i,add;
  1241. X float sum=1.0;
  1242. X
  1243. X    /* make an adjustment for planetary temperature */
  1244. X    add = 0.1*((float)planet->conditions[TEMP]-race->conditions[TEMP]);
  1245. X    sum *= 1.0 -(abs(add)/100.0);
  1246. X
  1247. X    /* step through and report compatibility of each planetary gas */
  1248. X  for (i=TEMP+1; i<=OTHER; i++) {
  1249. X    add = ((float)planet->conditions[i] - race->conditions[i]);
  1250. X    sum *= 1.0 - (abs((float)add)/100.0);
  1251. X  }
  1252. X  if(sum < 0.0) sum = 0.0;
  1253. X    sum *= 100.0 - planet->conditions[TOXIC];
  1254. X
  1255. X  return (sum);
  1256. X
  1257. X}
  1258. X
  1259. X
  1260. X
  1261. Xfloat gravity(p)
  1262. Xplanettype *p;
  1263. X{
  1264. X return (float)p->Maxx * p->Maxy * GRAV_FACTOR;
  1265. X}
  1266. X
  1267. X
  1268. X
  1269. Xchar Dispshiporbits_buf[PLACENAMESIZE+13];
  1270. X
  1271. Xchar *prin_ship_orbits(s)
  1272. Xshiptype *s;
  1273. X{
  1274. X
  1275. X  switch (s->whatorbits) {
  1276. X    case LEVEL_UNIV:
  1277. X        sprintf(Dispshiporbits_buf,"/(%.0f,%.0f)",s->xpos,s->ypos);
  1278. X        break;
  1279. X    case LEVEL_STAR:
  1280. X        sprintf(Dispshiporbits_buf,"/%s", Stars[s->storbits]->name);
  1281. X        break;
  1282. X    case LEVEL_PLAN:
  1283. X        sprintf(Dispshiporbits_buf,"/%s/%s", 
  1284. X            Stars[s->storbits]->name,
  1285. X            Stars[s->storbits]->pnames[s->pnumorbits]);
  1286. X        break;
  1287. X    default:
  1288. X        break;
  1289. X  }
  1290. X  return Dispshiporbits_buf;
  1291. X}
  1292. END_OF_FILE
  1293. if test 2305 -ne `wc -c <'server/max.c'`; then
  1294.     echo shar: \"'server/max.c'\" unpacked with wrong size!
  1295. fi
  1296. # end of 'server/max.c'
  1297. fi
  1298. if test -f 'server/mobiliz.c' -a "${1}" != "-c" ; then 
  1299.   echo shar: Will not clobber existing file \"'server/mobiliz.c'\"
  1300. else
  1301. echo shar: Extracting \"'server/mobiliz.c'\" \(1820 characters\)
  1302. sed "s/^X//" >'server/mobiliz.c' <<'END_OF_FILE'
  1303. X/*
  1304. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1305. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1306. X * Restrictions in GB_copyright.h.
  1307. X *
  1308. X * mobilize.c -- persuade people to build military stuff.
  1309. X *    Sectors that are mobilized produce Destructive Potential in
  1310. X *    proportion to the % they are mobilized.  they are also more
  1311. X *    damage-resistant.
  1312. X */
  1313. X
  1314. X#include "GB_copyright.h"
  1315. X#define EXTERN extern
  1316. X#include "vars.h"
  1317. X#include "buffers.h"
  1318. X#include <signal.h>
  1319. X#include <ctype.h>
  1320. Xint mobilize_sectdata,mobilize_pdata;
  1321. X
  1322. Xmobilize(Playernum,APcount, argn, args)
  1323. Xint Playernum;
  1324. Xint APcount, argn;
  1325. Xchar args[MAXARGS][COMMANDSIZE];
  1326. X{
  1327. Xint owned=0,x,y,sum_mob=0;
  1328. Xsectortype *s;
  1329. Xplanettype *p;
  1330. X
  1331. Xmobilize_pdata = mobilize_sectdata = NEUTRAL_FD;
  1332. X
  1333. Xif (Dir[Playernum-1].level!=LEVEL_PLAN) {
  1334. X    sprintf(buf,"scope must be a planet.\n");
  1335. X        notify(Playernum, buf);
  1336. X    return;
  1337. X}
  1338. Xif (!enufAP(Playernum,Stars[Dir[Playernum-1].snum]->AP[Playernum-1], APcount)) {
  1339. X    return;
  1340. X    }
  1341. X
  1342. X openpdata(&mobilize_pdata);
  1343. X getplanet(mobilize_pdata,&p,Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  1344. Xclose_file(mobilize_pdata);
  1345. X
  1346. X opensectdata(&mobilize_sectdata);
  1347. X getsmap(mobilize_sectdata,Smap,p);
  1348. X close_file(mobilize_sectdata);
  1349. X
  1350. Xif(argn < 2) {
  1351. X    sprintf(buf, "Current mobilization: %d    Quota: %d\n", 
  1352. X            p->info[Playernum-1].comread, p->info[Playernum-1].mob_set);
  1353. X    notify(Playernum, buf);
  1354. X        return;
  1355. X        }
  1356. X
  1357. X
  1358. X
  1359. X    sum_mob = atoi(args[1]);
  1360. X
  1361. X    if (sum_mob > 100 || sum_mob < 0) {
  1362. X        sprintf(buf,"Illegal value.\n");
  1363. X            notify(Playernum, buf);
  1364. X        return;
  1365. X    }
  1366. X
  1367. X
  1368. X    p->info[Playernum-1].mob_set = sum_mob;
  1369. Xopenpdata(&mobilize_pdata);
  1370. Xputplanet(mobilize_pdata,p,Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  1371. X     close_file(mobilize_pdata);
  1372. X
  1373. X    deductAPs(Playernum,APcount, Dir[Playernum-1].snum, 0);
  1374. X
  1375. X free(p);
  1376. X
  1377. X}
  1378. X
  1379. END_OF_FILE
  1380. if test 1820 -ne `wc -c <'server/mobiliz.c'`; then
  1381.     echo shar: \"'server/mobiliz.c'\" unpacked with wrong size!
  1382. fi
  1383. # end of 'server/mobiliz.c'
  1384. fi
  1385. if test -f 'server/more.c' -a "${1}" != "-c" ; then 
  1386.   echo shar: Will not clobber existing file \"'server/more.c'\"
  1387. else
  1388. echo shar: Extracting \"'server/more.c'\" \(1833 characters\)
  1389. sed "s/^X//" >'server/more.c' <<'END_OF_FILE'
  1390. X/* more program by therat@ucscb.ucsc.edu */
  1391. X
  1392. X#include <stdio.h>
  1393. X#include <sys/file.h>
  1394. X#include <sgtty.h>
  1395. X
  1396. X#define ZMORE 0
  1397. X
  1398. X
  1399. Xmain(argc, argv)
  1400. Xint argc;
  1401. Xchar **argv;
  1402. X{
  1403. X int c=1;
  1404. X
  1405. X    while (c < argc)
  1406. X        doc(argv[c++]);
  1407. X}
  1408. X
  1409. Xdoc(s)
  1410. Xchar *s;
  1411. X{
  1412. X    char filename[128], tmpfile[128];
  1413. X    int fd, pid;
  1414. X    long t;
  1415. X
  1416. X    sprintf(filename, "%s", s);
  1417. X    /* could stat the file here to make sure it's there */
  1418. X
  1419. X    time(&t);
  1420. X    sprintf(tmpfile, "/usr/tmp/#GBtrash%05d", (t >> 4) & 0x7fff);
  1421. X    fd = open(tmpfile, O_CREAT | O_WRONLY | O_TRUNC, 0600);
  1422. X    if (fd < 0) {
  1423. X        fprintf(stderr, "doc(): %s: ", filename);
  1424. X        perror("open failed");
  1425. X        return;
  1426. X    }
  1427. X
  1428. X    switch (pid = fork()) {
  1429. X        case -1 :
  1430. X            perror("doc(): fork for zcat failed");
  1431. X            break;
  1432. X
  1433. X        case 0 :
  1434. X            dup2(fd, 1);
  1435. X#            if (ZMORE)
  1436. X              execl("/usr/ucb/zcat", "zcat", filename, 0);
  1437. X              perror("doc(): execl for zcat failed");
  1438. X#            else
  1439. X              execl("/bin/cat", "cat", filename, 0);
  1440. X#            endif
  1441. X
  1442. X        default :
  1443. X            while (wait(0) != pid)
  1444. X                ;
  1445. X    }
  1446. X
  1447. X    close(fd);
  1448. X    page(tmpfile);
  1449. X    unlink(tmpfile);
  1450. X}
  1451. X
  1452. Xpage(file)
  1453. Xchar *file;
  1454. X{
  1455. X    char buf[4096];
  1456. X    FILE *fp;
  1457. X    int line;
  1458. X
  1459. X    fp = fopen(file, "r");
  1460. X    if (!fp) {
  1461. X        fprintf(stderr, "page(): %s: ", file);
  1462. X        perror("open failed");
  1463. X        return;
  1464. X    }
  1465. X
  1466. X    while (fgets(buf, sizeof(buf), fp)) {
  1467. X        ++line;
  1468. X        fputs(buf, stdout);
  1469. X        if (line == 23) {
  1470. X            char ch;
  1471. X
  1472. X            fputs(" -- more -- ", stdout);
  1473. X            fflush(stdout);
  1474. X            do
  1475. X                ch = get_a_char();
  1476. X            while (ch != ' ' && ch!='q');
  1477. X            fputs("\b\b\b\b\b\b\b\b\b\b\b\b            \b\b\b\b\b\b\b\b\b\b\b\b", stdout);
  1478. X            if (ch=='q') {
  1479. X                 fclose (fp);
  1480. X                return;
  1481. X            }
  1482. X            line = 0;
  1483. X        }
  1484. X    }
  1485. X    fclose(fp);
  1486. X}
  1487. X
  1488. Xget_a_char()
  1489. X{
  1490. X    struct sgttyb foo, bar;
  1491. X    char c;
  1492. X
  1493. X    ioctl(0, TIOCGETP, &foo);
  1494. X    bar = foo;
  1495. X    foo.sg_flags |= CBREAK;
  1496. X    foo.sg_flags &= ~ECHO;
  1497. X    ioctl(0, TIOCSETN, &foo);
  1498. X
  1499. X    c = getchar();
  1500. X/*     while (!read(0, &c, 1)) */
  1501. X/*         ; */
  1502. X
  1503. X
  1504. X    ioctl(0, TIOCSETN, &bar);
  1505. X
  1506. X    return c;
  1507. X}
  1508. END_OF_FILE
  1509. if test 1833 -ne `wc -c <'server/more.c'`; then
  1510.     echo shar: \"'server/more.c'\" unpacked with wrong size!
  1511. fi
  1512. # end of 'server/more.c'
  1513. fi
  1514. if test -f 'server/moveplanet.c' -a "${1}" != "-c" ; then 
  1515.   echo shar: Will not clobber existing file \"'server/moveplanet.c'\"
  1516. else
  1517. echo shar: Extracting \"'server/moveplanet.c'\" \(2104 characters\)
  1518. sed "s/^X//" >'server/moveplanet.c' <<'END_OF_FILE'
  1519. X/* 
  1520. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1521. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1522. X * Restrictions in GB_copyright.h.
  1523. X *
  1524. X * moveplanet.c -- move the planet in orbit around its star.
  1525. X */
  1526. X
  1527. X#include "GB_copyright.h"
  1528. X#define EXTERN extern
  1529. X#include "vars.h"
  1530. X#include "ships.h"
  1531. X#include "races.h"    /* (needed only for races in doturn.h */
  1532. X#include "doturn.h"
  1533. X#include <math.h>
  1534. X
  1535. X
  1536. Xmoveplanet(starnum, planet, planetnum)
  1537. Xint starnum;
  1538. Xplanettype *planet;
  1539. Xint planetnum;
  1540. X{
  1541. Xfloat dist;
  1542. Xfloat t,xadd,yadd,phase,period;
  1543. Xint sh;
  1544. Xreg int i;
  1545. Xshiptype *ship;
  1546. X
  1547. X/* return; */
  1548. X
  1549. X    StarsInhab[starnum] |= Stars[starnum]->inhabited;
  1550. X    Stars[starnum]->inhabited = 0;
  1551. X
  1552. X  if (planet->popn)
  1553. X    Stinfo[starnum][planetnum].inhab = 1;
  1554. X
  1555. X if (!StarsInhab[starnum])
  1556. X    return;        /* no one's explored the star yet */
  1557. X
  1558. X  dist = hypot((double)planet->ypos, (double)planet->xpos);
  1559. X
  1560. Xphase = atan2((double)planet->ypos, (double)planet->xpos);
  1561. Xperiod = dist * sqrt((double)dist /
  1562. X             (SYSTEMGRAVCONST * Stars[starnum]->gravity));
  1563. X      /* keppler's law */
  1564. X
  1565. X  xadd =  dist * cos((double)(-1./period+phase)) - planet->xpos;
  1566. X  yadd =  dist * sin((double)(-1./period+phase)) - planet->ypos; 
  1567. X         /* one update time unit - planets orbit counter-clockwise */
  1568. X
  1569. X/* printf("st %d pl %d xadd %g yadd %g \n", starnum, planetnum, xadd, yadd); 
  1570. Xprintf("(%s) \n",Stars[starnum]->name); */
  1571. X
  1572. X       /* adjust ships in orbit around the planet */
  1573. X
  1574. X  sh = planet->ships;
  1575. X
  1576. X  while (sh && sh<=Num_ships) {    /* just in case... */
  1577. X    ship=ships[sh];
  1578. X        /* don't do landed ships */
  1579. X       if (ship->is_alive && !(ship->is_docked && ship->whatdest==LEVEL_PLAN)) {
  1580. X        ship->xpos += xadd;
  1581. X        ship->ypos += yadd;
  1582. X       }
  1583. Xif(sh == ship->nextship)  /* shouldn't happen, but it did */
  1584. X    sh = 0;
  1585. Xelse
  1586. X    sh = ship->nextship;
  1587. X
  1588. X  }
  1589. X/*  printf("**** \n"); */
  1590. X
  1591. X  planet->xpos += xadd;
  1592. X  planet->ypos += yadd;
  1593. X
  1594. X/* well, maybe : */
  1595. X  if (planet->xpos>SYSTEMSIZE) planet->xpos *= .5;
  1596. X    else if (planet->xpos< -SYSTEMSIZE) planet->xpos *= .5;
  1597. X  if (planet->ypos>SYSTEMSIZE) planet->ypos *= .5;
  1598. X    else if (planet->ypos< -SYSTEMSIZE) planet->ypos *= .5;
  1599. X
  1600. X}
  1601. END_OF_FILE
  1602. if test 2104 -ne `wc -c <'server/moveplanet.c'`; then
  1603.     echo shar: \"'server/moveplanet.c'\" unpacked with wrong size!
  1604. fi
  1605. # end of 'server/moveplanet.c'
  1606. fi
  1607. if test -f 'server/races.h' -a "${1}" != "-c" ; then 
  1608.   echo shar: Will not clobber existing file \"'server/races.h'\"
  1609. else
  1610. echo shar: Extracting \"'server/races.h'\" \(2054 characters\)
  1611. sed "s/^X//" >'server/races.h' <<'END_OF_FILE'
  1612. X/*
  1613. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1614. X * smq@ucscb.ucsc.edu, mods by people in GB.c, enroll.dat.
  1615. X * Restrictions in GB.c.
  1616. X */
  1617. X
  1618. X
  1619. Xstruct race {
  1620. X    int Playernum;
  1621. X    char name[RNAMESIZE];
  1622. X    float tech;        /* technology */
  1623. X    float birthrate;
  1624. X    float overbirthrate;
  1625. X    percent fighters;
  1626. X    percent IQ;
  1627. X    percent number_sexes;
  1628. X    float mass;
  1629. X    float metabolism;
  1630. X    float adventurism;
  1631. X    short conditions[OTHER+1];    /* planetary conditions you like */
  1632. X    char deflevel;
  1633. X    char defsystem;
  1634. X    char defplanetnum;    /* current default */
  1635. X    char homelevel;
  1636. X    char homesystem;
  1637. X    char homeplanetnum;    /* home place */
  1638. X    float likes[DES_PLATED+1];        /* what territories they like */
  1639. X    char likesbest;
  1640. X    percent translate[MAXPLAYERS];    /* translation mod for each player */
  1641. X    percent captured_prisoners[MAXPLAYERS]; /* goes up with planetary contact */
  1642. X    unsigned int atwar;        /* war 32 bits*/
  1643. X    unsigned int allied;    /* allies 32 bits*/
  1644. X    unsigned short Gov_ship;
  1645. X    int double_digits;        /* options for 'toggle' */
  1646. X    int inverse;
  1647. X    int geography;
  1648. X    int autoload;
  1649. X    int C_C;            /* berserker control code */
  1650. X    short God;        /* whether or not the race has God status */
  1651. X    unsigned Thing : 1;            /* your race is like "The Thing" */
  1652. X};
  1653. X
  1654. Xstruct block {
  1655. X    int Playernum;
  1656. X    char name[RNAMESIZE];
  1657. X    unsigned int invite;
  1658. X    unsigned int pledge;
  1659. X    unsigned int atwar;
  1660. X    unsigned int allied;
  1661. X    unsigned VPs;
  1662. X};
  1663. X
  1664. Xstruct power_blocks {
  1665. X    char time[128];
  1666. X    unsigned members[MAXPLAYERS];
  1667. X    ul popn[MAXPLAYERS];    /* total population */
  1668. X    ul resource[MAXPLAYERS];    /* total resource in stock */
  1669. X    ul fuel[MAXPLAYERS];
  1670. X    ul destruct[MAXPLAYERS];    /* total dest in stock */
  1671. X    us ships_owned[MAXPLAYERS];    /* # of ships owned */
  1672. X    us planets_owned[MAXPLAYERS];
  1673. X    ul sectors_owned[MAXPLAYERS];
  1674. X    us VPs[MAXPLAYERS];
  1675. X};
  1676. X
  1677. Xtypedef struct race racetype;
  1678. Xtypedef struct block blocktype;
  1679. XEXTERN struct block Blocks[MAXPLAYERS];
  1680. XEXTERN struct power_blocks Power_blocks;
  1681. X
  1682. XEXTERN racetype *Race;
  1683. XEXTERN racetype *races[MAXPLAYERS];
  1684. END_OF_FILE
  1685. if test 2054 -ne `wc -c <'server/races.h'`; then
  1686.     echo shar: \"'server/races.h'\" unpacked with wrong size!
  1687. fi
  1688. # end of 'server/races.h'
  1689. fi
  1690. if test -f 'server/relation.c' -a "${1}" != "-c" ; then 
  1691.   echo shar: Will not clobber existing file \"'server/relation.c'\"
  1692. else
  1693. echo shar: Extracting \"'server/relation.c'\" \(2071 characters\)
  1694. sed "s/^X//" >'server/relation.c' <<'END_OF_FILE'
  1695. X/* 
  1696. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1697. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1698. X * Restrictions in GB_copyright.h.
  1699. X *
  1700. X * relation.c -- state relations among players 
  1701. X */
  1702. X
  1703. X#include "GB_copyright.h"
  1704. X#define EXTERN extern
  1705. X#include "vars.h"
  1706. X#include "races.h"
  1707. X#include "ships.h"
  1708. X#include "buffers.h"
  1709. X
  1710. Xextern char *Desnames[];
  1711. Xchar *allied();
  1712. Xint relation_racedata;
  1713. X
  1714. Xrelation(Playernum,APcount, argn, args)
  1715. Xint Playernum;
  1716. Xint APcount, argn;
  1717. Xchar args[MAXARGS][COMMANDSIZE];
  1718. X{
  1719. Xint numraces;
  1720. Xint p;
  1721. Xracetype *r;
  1722. X
  1723. Xfree(Race);
  1724. Xopenracedata(&relation_racedata);
  1725. Xgetrace(relation_racedata, &Race, Playernum);
  1726. X     numraces = Numraces();
  1727. X
  1728. X    sprintf(buf,"\n              Racial Relations Report for %s\n\n",Race->name);
  1729. X        notify(Playernum, buf);
  1730. X    sprintf(buf," #      know             Race name       Yours        Theirs \n");
  1731. X        notify(Playernum, buf);
  1732. X    sprintf(buf," -      ----             ---------       -----        ------ \n");
  1733. X        notify(Playernum, buf);
  1734. Xif(argn==1) {
  1735. Xfor (p=1; p<=numraces; p++)
  1736. X        if (p != Race->Playernum) {
  1737. X            getrace(relation_racedata, &r, p);
  1738. X            sprintf(buf,"%2d %s (%3d%%) %20.20s : %10s   %10s\n", p, 
  1739. X                  ((Race->God || Race->translate[p-1] > 30) && r->Thing) ? 
  1740. X                "Meso" : "    ", Race->translate[p-1], r->name,
  1741. X                allied(Race, p, 100, Race->God), 
  1742. X                    allied(r, Playernum,Race->translate[p-1], Race->God) );
  1743. X        notify(Playernum, buf);
  1744. X            free(r);
  1745. X            }
  1746. X        } else {
  1747. XGetPlayer(args[1], &p, &r);
  1748. Xif(p==-1) {
  1749. Xnotify(Playernum, "No such player.\n");
  1750. Xreturn;
  1751. X}
  1752. X            sprintf(buf,"%2d %s (%3d%%) %20.20s : %10s   %10s\n", p, 
  1753. X                  ((Race->God || Race->translate[p-1] > 30) && r->Thing) ? 
  1754. X                "Meso" : "    ", Race->translate[p-1], r->name,
  1755. X                allied(Race, p, 100, Race->God), 
  1756. X                    allied(r, Playernum,Race->translate[p-1], Race->God) );
  1757. X        notify(Playernum, buf);
  1758. X            free(r);
  1759. X}
  1760. Xclose_file(relation_racedata);
  1761. X
  1762. X
  1763. X}
  1764. X
  1765. X
  1766. X
  1767. Xchar *allied(r, p, q, God)
  1768. Xracetype *r;
  1769. Xint p,q,God;
  1770. X{
  1771. X     if (isset( r->atwar, p)) return "WAR";
  1772. X     else if (isset( r->allied, p)) return "ALLIED";
  1773. X     else return "neutral";
  1774. X}
  1775. X
  1776. X
  1777. X
  1778. X
  1779. END_OF_FILE
  1780. if test 2071 -ne `wc -c <'server/relation.c'`; then
  1781.     echo shar: \"'server/relation.c'\" unpacked with wrong size!
  1782. fi
  1783. # end of 'server/relation.c'
  1784. fi
  1785. if test -f 'server/tech.c' -a "${1}" != "-c" ; then 
  1786.   echo shar: Will not clobber existing file \"'server/tech.c'\"
  1787. else
  1788. echo shar: Extracting \"'server/tech.c'\" \(1761 characters\)
  1789. sed "s/^X//" >'server/tech.c' <<'END_OF_FILE'
  1790. X/*
  1791. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1792. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1793. X * Restrictions in GB_copyright.h.
  1794. X *
  1795. X * tech.c -- increase investment in technological development.
  1796. X */
  1797. X
  1798. X#include "GB_copyright.h"
  1799. X#define EXTERN extern
  1800. X#include "vars.h"
  1801. X#include "races.h"
  1802. X#include "buffers.h"
  1803. X#include <math.h>
  1804. X#include <signal.h>
  1805. X#include <ctype.h>
  1806. Xint tech_pdata;
  1807. X
  1808. Xtechnology(Playernum,APcount, argn, args)
  1809. Xint Playernum;
  1810. Xint APcount, argn;
  1811. Xchar args[MAXARGS][COMMANDSIZE];
  1812. X{
  1813. Xint c,invest;
  1814. Xplanettype *p;
  1815. X
  1816. Xtech_pdata = NEUTRAL_FD;
  1817. X
  1818. Xif (Dir[Playernum-1].level != LEVEL_PLAN) {
  1819. X    sprintf(buf,"scope must be a planet (%d).\n", Dir[Playernum-1].level);
  1820. X        notify(Playernum, buf);
  1821. X    return;
  1822. X}
  1823. Xif (!enufAP(Playernum,Stars[Dir[Playernum-1].snum]->AP[Playernum-1], APcount)) {
  1824. X    return;
  1825. X    }
  1826. X
  1827. X openpdata(&tech_pdata);
  1828. X getplanet(tech_pdata,&p,Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  1829. Xclose_file(tech_pdata);
  1830. X
  1831. Xif(argn < 2) {
  1832. X    sprintf(buf, "Current investment : %d    Technology production/update: %.2f\n",
  1833. X        p->info[Playernum-1].tech_invest,
  1834. X        log10(1.0+(double)p->info[Playernum-1].tech_invest)*TECH_INVEST);
  1835. X    notify(Playernum, buf);
  1836. X    return;
  1837. X        }
  1838. X
  1839. X     invest=atoi(args[1]);
  1840. X
  1841. X    if (invest > 100 || invest < 0) {
  1842. X        sprintf(buf,"Illegal value.\n");
  1843. X            notify(Playernum, buf);
  1844. X        return;
  1845. X    }
  1846. X    p->info[Playernum-1].tech_invest = invest;
  1847. Xopenpdata(&tech_pdata);
  1848. Xputplanet(tech_pdata,p,Stars[Dir[Playernum-1].snum]->planetpos[Dir[Playernum-1].pnum]);
  1849. X close_file(tech_pdata);
  1850. X
  1851. X    deductAPs(Playernum,APcount, Dir[Playernum-1].snum, 0);
  1852. X
  1853. X    sprintf(buf,"   New (ideal) tech production: %.2f (this planet)\n", 
  1854. X        log10(1.0+(double)p->info[Playernum-1].tech_invest) * TECH_INVEST );
  1855. X    notify(Playernum, buf);
  1856. X
  1857. X
  1858. X free(p);
  1859. X
  1860. X}
  1861. X
  1862. END_OF_FILE
  1863. if test 1761 -ne `wc -c <'server/tech.c'`; then
  1864.     echo shar: \"'server/tech.c'\" unpacked with wrong size!
  1865. fi
  1866. # end of 'server/tech.c'
  1867. fi
  1868. if test -f 'server/toggle.c' -a "${1}" != "-c" ; then 
  1869.   echo shar: Will not clobber existing file \"'server/toggle.c'\"
  1870. else
  1871. echo shar: Extracting \"'server/toggle.c'\" \(1738 characters\)
  1872. sed "s/^X//" >'server/toggle.c' <<'END_OF_FILE'
  1873. X/*
  1874. X * Galactic Bloodshed, copyright (c) 1989 by Robert P. Chansky, 
  1875. X * smq@ucscb.ucsc.edu, mods by people in GB_copyright.h.
  1876. X * Restrictions in GB_copyright.h.
  1877. X *
  1878. X *  toggle.c -- toggles some options
  1879. X */
  1880. X
  1881. X#include "GB_copyright.h"
  1882. X#define EXTERN extern
  1883. X#include "vars.h"
  1884. X#include "races.h"
  1885. X#include "buffers.h"
  1886. X#include <strings.h>
  1887. Xint toggle_racedata;
  1888. X
  1889. Xtoggle(Playernum,APcount, argn, args)
  1890. Xint Playernum;
  1891. Xint APcount;
  1892. Xint argn;
  1893. Xchar args[MAXARGS][COMMANDSIZE];
  1894. X{
  1895. Xint i;
  1896. X
  1897. X
  1898. X   if (argn>1) {
  1899. X    i = strlen(args[1]);
  1900. X    free(Race);
  1901. X    openracedata(&toggle_racedata);
  1902. X    getrace(toggle_racedata, &Race, Playernum);
  1903. X    close_file(toggle_racedata);
  1904. X
  1905. X    if (!strncmp(args[1],"inverse",i)) tog(Playernum,&Race->inverse,"inverse");
  1906. X    else if (!strncmp(args[1],"double_digits",i)) tog(Playernum,&Race->double_digits,
  1907. X                "double_digits");
  1908. X    else if (!strncmp(args[1],"geography",i)) tog(Playernum,&Race->geography,"geography");
  1909. X    else if (!strncmp(args[1],"autoload",i)) tog(Playernum,&Race->autoload,"autoload");
  1910. X    else {
  1911. X        sprintf(buf,"No such option '%s'\n", args[1]);
  1912. X            notify(Playernum, buf);
  1913. X        }
  1914. Xopenracedata(&toggle_racedata);
  1915. Xputrace(toggle_racedata, Race);
  1916. Xclose_file(toggle_racedata);
  1917. X
  1918. X   } else {
  1919. X    sprintf(buf,"inverse is %s\n", Race->inverse ? "ON" : "OFF");
  1920. X            notify(Playernum, buf);
  1921. X    sprintf(buf,"double_digits is %s\n", Race->double_digits ? "ON" : "OFF");
  1922. X            notify(Playernum, buf);
  1923. X    sprintf(buf,"geography is %s\n", Race->geography ? "ON" : "OFF");
  1924. X            notify(Playernum, buf);
  1925. X    sprintf(buf,"autoload is %s\n", Race->autoload ? "ON": "OFF");
  1926. X            notify(Playernum, buf);
  1927. X   }
  1928. X
  1929. X}
  1930. X
  1931. X
  1932. Xtog(Playernum,op, name)
  1933. Xint Playernum;
  1934. Xint *op;
  1935. Xchar *name;
  1936. X{
  1937. X *op = !(*op);
  1938. X sprintf(buf, "%s is now %s\n", name, *op ? "on" : "off" );
  1939. X            notify(Playernum, buf);
  1940. X}
  1941. X
  1942. END_OF_FILE
  1943. if test 1738 -ne `wc -c <'server/toggle.c'`; then
  1944.     echo shar: \"'server/toggle.c'\" unpacked with wrong size!
  1945. fi
  1946. # end of 'server/toggle.c'
  1947. fi
  1948. echo shar: End of archive 12 \(of 14\).
  1949. cp /dev/null ark12isdone
  1950. MISSING=""
  1951. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do
  1952.     if test ! -f ark${I}isdone ; then
  1953.     MISSING="${MISSING} ${I}"
  1954.     fi
  1955. done
  1956. if test "${MISSING}" = "" ; then
  1957.     echo You have unpacked all 14 archives.
  1958.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1959. else
  1960.     echo You still need to unpack the following archives:
  1961.     echo "        " ${MISSING}
  1962. fi
  1963. ##  End of shell archive.
  1964. exit 0
  1965.