home *** CD-ROM | disk | FTP | other *** search
/ Gambler 19 / GAMBLERCD19.BIN / UTILS / 3D / MODY / VIKING09.ZIP / Readmes / ServObit_readme.txt < prev   
Text File  |  1998-04-14  |  31KB  |  772 lines

  1. ServObit 1.4 - Server Obituaries (Death Messages) for Quake II v3.14
  2. ====================================================================
  3. Name: ServObit
  4. Version: 1.4 (4/8/98)
  5. Quake 2 version: v3.12-3.14
  6. Author: SteQve, a mediocre Quake player (full name: Steve Christey)
  7. Email: Steqve@shore.net
  8. Web page: http://www.shore.net/~steqve/quakemods.html
  9. Description: This mod allows you to configure your own Death Messages
  10.     (Obituaries) for your server.  Obituaries can be selected based on
  11.     weapon, quad/normal damage, the type of killer (Self, Enemy, or World),
  12.     gender of the killer and/or victim, and whether a gib or "mega-gib"
  13.     occurred.  You can have multiple messages per obituary selector; they
  14.     will be generated randomly.  You can substitute killer and victim names
  15.     into the message, insert pronouns specific to killer/victim gender, and
  16.     substitute random words or phrases.  ServObit 1.4 also includes 
  17.     GenderMod 0.1, which tries to determine a player's gender based on
  18.     what model they are using.  It also has a Message of the Day capability,
  19.     plus you can specify different messages to be generated when somebody
  20.     connects to or disconnects from the game.
  21. Credits: See "Credits" section below, but props to idsoftware, newtonD, EAVY,
  22.          Hawkeye, and Sati, a.k.a. "Queen of Death Messages."
  23. ============================================================================
  24.  
  25. ********************************************
  26. Table Of Contents
  27. ********************************************
  28. 1. Mod Information
  29. 2. How the Thing Works
  30. 3. Installation
  31. 4. Changes Since the Last Version
  32. 5. GenderMod 0.1
  33. 6. Editing Obits.txt
  34. 7. Editing ServObit.ini
  35. 8. Text Substitutions
  36. 9. Obituary Substitutions (Groups)
  37. 10. Message of the Day and Connect/Disconnect Messages
  38. 11. Obituary Selectors
  39. 12. Formatting Obituary Messages
  40. 13. You can have bugs, too
  41. 14. ServObit Obituary Test Program - Checking Your Obits.txt
  42. 15. Running the Test Program
  43. 16. Known bugs
  44. 17. Credits
  45. 18. Distribution and Modification
  46. 10. Obligatory Scribble Music Coalition Quote
  47.  
  48.  
  49. ********************************************
  50. Mod Information
  51. ********************************************
  52.  
  53. * Play Information *
  54. Single Player           : No
  55. Deathmatch (2-16)       : Yes
  56. New Sounds              : No
  57. New Graphics            : No
  58. New Music               : No 
  59.  
  60. * Construction *
  61. Base                    : gamex86.dll
  62. Editor(s) used          : Microsoft Visual C++ 4.0
  63. Known Bugs              : None.
  64. Build Time              : Sorry, I don't know what that is.  Wait a second,
  65.                           you mean when I press the F7 key?  Oh, a few 
  66.                           minutes on a Dell P200 with 32M RAM.
  67.  
  68. Modification Details    : upon request
  69. Files modified          : upon request
  70. Source included         : upon request
  71.  
  72. ********************************************
  73. How The Thing Works
  74. ********************************************
  75.  
  76. You edit the file Obits.txt to configure your Obituaries.  You start your 
  77. server.  ServObit reads the Obits.txt file and sets things up internally.
  78. It also prints out "debugging" information to debug.txt, and it will complain
  79. if you don't enter an Obituary or other data in a way that it needs you to.
  80. People log on to your server; they get your Message of the Day, then their 
  81. presence is announced to the other gib-hungry clients.  The GenderMod
  82. part of ServObit kicks in and tries to determins the player's gender based
  83. on the model they are using.  People fight and then somebody dies, hopefully
  84. in a particularly gruesome fashion for which you have composed the perfect
  85. Obituary.  The server goes through the Obituaries in the order they appear in
  86. Obits.txt, until it finds one that matches based on who did the killing, what
  87. powerups they may have had, what weapon was used, the gender of the killer and
  88. the victim, and whether a gib (or mega-gib) occurred or not.  ServObit then
  89. substitutes killer (and victim) name into your Obituary, as well as some
  90. gender-specific pronouns, and randomly inserts other phrases which you have
  91. defined.  The mayhem ensues as people die and Obituaries are strewn across
  92. the screen.  Eventually somebody gets sick or tired or bothered by the boss
  93. and they leave.  The remaining players receive a random message which sadly
  94. informs them that they have one less person to frag.  The server continues in
  95. this fashion until you stop it or some unknown bug causes it to die a horrible
  96. death.  This latter part is unplanned, but hey, this is software and it runs
  97. on PCs.
  98.  
  99. ********************************************
  100. Installation
  101. ********************************************
  102.  
  103. *** FOLLOW THESE DIRECTIONS CLOSELY.  THEY HAVE CHANGED FROM PREVIOUS 
  104.     VERSIONS ***
  105.  
  106. 1) If you installed earlier versions of ServObit:
  107.    - rename your ServObit directory to something else, or delete it.
  108.    - BACK UP YOUR OLD OBITS.TXT IF YOU CHANGED IT!!
  109.  
  110. 2) Unzip the zip file into your Quake directory.  It will create a ServObit
  111.    directory and a GenderMod directory.  You should have gamex86.dll,
  112.    Obits.txt and other files in your ServObit directory, and ModelGen.dat
  113.    in your GenderMod directory.
  114.  
  115. 3) Edit the Obits.txt file if you want to change ServObit's default
  116.    obituaries and message of the day.  See "Editing Obits.txt" below.
  117.    NOTE: You can use your old Obits.txt if you wish, but you will be missing
  118.    several new death situtations, and you won't be using some of the nice
  119.    new features of ServObit 1.4.  If you have a ServObit 1.0 Obits.txt, 
  120.    you might as well start from scratch.
  121.  
  122. 4) If you changed your Obits.txt, run sotest.exe in your ServObit directory.
  123.    It will "test" your obits for you (this is only necessary if you changed
  124.    Obits.txt).  See the "Running the Test Program" section.
  125.  
  126. 5) Run Quake2 with the command line "quake2 +set game ServObit".   Watch the
  127.    ServObit banner and make sure it doesn't complain about any errors; see
  128.    SrvObLog.txt if it complains.
  129.  
  130. 6) Whenever you add new messages to Obits.txt, they will be reloaded
  131.    when the next level changes.
  132.  
  133. 7) Update the GenderMod/ModelGen.dat file to include the genders of new
  134.    models as they come out.  An "official" ModelGen.dat will be made available
  135.    via the WWW.
  136.  
  137. ********************************************
  138. Changes since last version
  139. ********************************************
  140.  
  141. 1) GenderMod 0.1, which tries to address the problem of accurately
  142. reflecting the gender of plugin player models.  Finally, the Crack
  143. Whore can be referred to as "she", and the Snork as "it"!
  144.  
  145. 2) Introduction of a "neuter" gender for models such as the Snork or
  146. tentacle
  147.  
  148. 3) Random substitution of words and phrases into individual death
  149. messages
  150.  
  151. 4) Definition of groups of death messages that can be used to apply to
  152. multiple situations
  153.  
  154. 5) All the different death situations that were in idsoftware's
  155. original 3.14 source code
  156.  
  157. 6) A separate test program to make sure you have identified all
  158. possible obituary outcomes.  No more "generic" death messages because
  159. you forgot to account for a neuter gibbing a female with shrapnel from
  160. a Quad hand grenade.
  161.  
  162. 7) The message of the day can include green text (finally!) and be
  163. quickly disabled by the user.
  164.  
  165. 8) Operator-settable limits on the number of death messages, connect
  166. messages, etc.; no more restrictions by ServObit itself.
  167.  
  168. 9) Fixed a bug in which mega-gibs were not properly identified.
  169.  
  170. ********************************************
  171. GenderMod 0.1
  172. ********************************************
  173.  
  174. GenderMod 0.1 tries to address the problem of accurately identifying the
  175. gender of plugin player models.  It is hoped that some of its solutions
  176. become part of a standard approach that is common across all mods.
  177.  
  178. The client can specify their own sex by setting the "sex" variable in their
  179. userinfo string (the userinfo also sends information such as the player's 
  180. name and skin).  In their console, they can type:
  181.  
  182.     set sex m u  --> sets gender to male
  183.     set sex f u  --> sets gender to female
  184.     set sex n u  --> sets gender to neuter
  185.  
  186. The client's specification is a PROPOSED value.  GenderMod can override this
  187. value if it can verify that the specified gender is inconsistent with the
  188. model used by the player.
  189.  
  190. The user can use a "gender me" command to find out what GenderMod is using
  191. internally for that user's gender, regardless of what their "sex" variable is.
  192.  
  193. To see what genders have been applied to what players by GenderMod, use the
  194. "gender players" command.
  195.  
  196. GenderMod uses the file GenderMod/ModelGen.dat to list model names and their
  197. associated genders ([M]ale, [F]emale, [N]euter).  When the userinfo string
  198. is sent to the server (e.g. when the user changes their skin), GenderMod
  199. checks for the "sex" value, gets the model, and looks through the map for a 
  200. match.  If a match is found and the model is male or female, then that gender
  201. is enforced.  If the match is neuter, or the map doesn't identify the
  202. model, then the user's "sex" variable is used.  Thus users of neuter models 
  203. can set their gender as they wish, or they can do so if GenderMod doesn't know
  204. about their model.  If no sex variable is available, then idsoftware's original
  205. logic applies - if the model name starts with "f", then it is treated as female,
  206. otherwise it is treated as male.
  207.  
  208. As mentioned, in cases where the model has a male or female gender, the player
  209. can NOT switch to the other gender.  This isn't perfect (e.g. when someone
  210. uses a female skin on a male model), but the idea is to make the gender of
  211. the player as consistent with the model as possible.  (OK, so even with a
  212. female model and an unknown skin the client displays the grunt, but the
  213. *idea* is sound and I cross my fingers daily that idsoftware will let the
  214. client display a female model if it doesn't have a female skin.)
  215.  
  216. Once the gender has been identified (or "approved"), it is stored in the
  217. client_respawn_t part of the client's edict for speed of lookup.
  218.  
  219.  
  220. ********************************************
  221. Editing Obits.txt
  222. ********************************************
  223.  
  224. Obits.txt is where all the action happens.  ServObit reads this file when it
  225. starts.  It also reads the file each time a level changes, just in case you
  226. changed it in the meantime.  (If you get into a Bug vs. Feature vs. Lazy
  227. Programmer argument about why it does this, you should argue the Lazy
  228. Programmer perspective.)
  229.  
  230. Comments and Blank Lines
  231. ------------------------
  232. Any line that begins with a # is a comment.  You can write whatever you 
  233. want after that #.  This tells the computer that it's too stupid to 
  234. understand what you're trying to say and it should just ignore you,
  235. kind of like pretending not to hear a conversation in Mandarin Chinese.
  236.  
  237. Blank lines are nice ways to space things out.  ServObit also ignores them.
  238.  
  239. ********************************************
  240. Editing ServObit.ini
  241. ********************************************
  242.  
  243. OK, it's time to admit it.  ServObit 1.4 isn't written "perfectly".  It uses
  244. more memory than it could (but it's not a lot).  It was easier to code
  245. this way, but it will be fixed in a future version.  In the meantime, you can
  246. work around my laziness a little bit by editing the ServObit.ini file if
  247. necessary.
  248.  
  249. DO NOT EDIT THIS FILE UNTIL YOU UNDERSTAND HOW SERVOBIT WORKS.  THE ONLY
  250. REASON THIS FILE IS MENTIONED NOW IS THAT YOU COULD MISS IT LATER ON :-)
  251.  
  252. MaxSelectors and MaxObitMessages will consume memory than the other 
  253. options if you set them too high, so watch them carefully.
  254.  
  255. a) MaxConnectMessages=20
  256.  
  257. Maximum number of different connect messages (or disconnect messages).
  258.  
  259. b) MaxSelectors=1000
  260.  
  261. If you go to town on the selectors by trying to identify ALL possible
  262. situations, you might run out of available selectors, so you may need to
  263. bump this value up a bit.
  264.  
  265. c) MaxObitMessages=20
  266.  
  267. This is the maximum number of messages per selector, including the 
  268. obit groups (but not including all the possible text substitution
  269. combinations).  This is also the maximum number of phrases allowed
  270. per substitution.
  271.  
  272. Keep this number as low as possible because it can eat memory if you set
  273. it too high.
  274.  
  275. d) MaxSubstitutions=50
  276.  
  277. This is the maximum number of substitution definitions (for text
  278. substitutions and obituary group substitutions combined).  Bump this number
  279. up if you go overboard and define loads of substitutions.
  280.  
  281.  
  282. ********************************************
  283. Text Substitutions
  284. ********************************************
  285.  
  286. Suppose you want to refer to a grenade as a "pineapple" or a "grenade"
  287. or a "fried green tomato."  You can define a text substitution to have
  288. ServObit randomly insert one of these terms into your obituary.  So
  289. you can generate a wider variety of death messages.
  290.  
  291. You can define as many text substitusions as you want.  However, if you
  292. make more than 50 different substitutions, you will have to set the
  293. MaxSubstitutions variable in your ServObit.ini file.
  294.  
  295. To define text substitutions in your Obits.txt, make sure you are in
  296. the substitutions section, which starts with
  297.  
  298. :SUBSTITUTIONS
  299.  
  300. For each substitution, assign it a unique name, enclosed in brackets.
  301. Then list the different pieces of text you want to substitute.  For
  302. example:
  303.  
  304. [waskilled]
  305. was eliminated
  306. was rubbed out
  307. was killed
  308. was wiped out
  309. was erased
  310.  
  311. [rocket]
  312. rocket
  313. missile
  314. fuel-laden phallic symbol
  315. rocket o' love
  316.  
  317. [grenade]
  318. pineapple
  319. little bomb
  320. grenade
  321. clunky cylinder o' death
  322. fried green tomato
  323.  
  324. Once you have defined all your different substitutions, mark them with
  325.  
  326. :END
  327.  
  328.  
  329. In your obituary section (see "Formatting Obituaries"), you can then
  330. refer to your substitutions by enclosing the name of the substitution
  331. in % marks.  See the following examples, where $K is the name of the
  332. killer and $V is the name of the victim.
  333.  
  334. $K tossed a %grenade% into $V's lap
  335. $V %waskilled% by $K's %rocket%
  336.  
  337. Using these substitutions, you could generate obituaries such as
  338. "Killer tossed a pineapple into Victim's lap", "Victim was erased by
  339. Killer's rocket," "Victim was wiped out by Killer's fuel-laden phallic
  340. symbol," etc.
  341.  
  342. Your text substitutions can also include the $ "situation"
  343. substitutions such as $K or $V, e.g.:
  344.  
  345. [killers_rocket]
  346. $K's %rocket%
  347. a rocket with $K's name on it
  348.  
  349.  
  350. ********************************************
  351. Obituary Substitutions (Groups)
  352. ********************************************
  353.  
  354. Not only can you define simple text substitutions, but you can define
  355. entier groups of obituaries that you can then apply to a wide variety
  356. of situations.  This is most helpful when you want to reuse the same
  357. death messages in a number of slightly different situations.  For
  358. example, you might have a set of obituaries that apply to all Quad
  359. rocket deaths, but you also want to include some obits that only apply
  360. to a particular gender.  You could use an obituary group to define the
  361. rocket obits that are common to all genders.
  362.  
  363. You define obituary substitutions in the same way you define text
  364. substitutions.  Start with the substitutions header, define your obituary
  365. groups, then conclude with the :END marker:
  366.  
  367. :SUBSTITUTIONS
  368.  
  369. [rocket_obit]
  370. $V rode $K's %rocket%
  371. $K feeds $V $HISK %rocket%
  372. $V flew $K's %rocket% to the moon
  373.  
  374. [grenade_obit]
  375. $K popped $V with $HISK grenade
  376. $V stepped on $K's %grenade%
  377. "Pineapples!" shouted $K to $V, "Get your fresh pineapples here!"
  378.  
  379. :END
  380.  
  381.  
  382. When you want to include an obituary group for a particular situation,
  383. list it after the selector for that particular situation, e.g.:
  384.  
  385. # Male kills female with Quad rocket:
  386. : E ROCKET_LAUNCHER QUAD MALE FEMALE *
  387. [rocket_obit]
  388. $V asks $K, "Is that a rocket in your pocket, or are you...?"
  389.  
  390. # Female kills male with Quad rocket:
  391. : E ROCKET_LAUNCHER QUAD FEMALE MALE *
  392. [rocket_obit]
  393. $K shows $V that she has a bigger rocket than he does
  394.  
  395. See "Formatting Obituaries" for details on what "$" terms you can use.
  396.  
  397.  
  398. ********************************************
  399. Message of the Day and Connect/Disconnect Messages
  400. ********************************************
  401.  
  402. Message of the Day (Welcome Message)
  403. ------------------------------------
  404.  
  405. The Welcome message is displayed to the client when they first sign on.
  406.  
  407. You can specify how long to display your message, from 2 to 999 seconds.  
  408. Players can disable the message by pressing F1 or TAB (i.e. by showing the
  409. scoreboard or inventory).
  410.  
  411. - To start entering your welcome message, put a line that says   :WELCOME <NUMBER>
  412.   where <NUMBER> is a number (the default is 5; the number given in Obits.txt
  413.   is 8).  For example, :WELCOME 10  would print the message for 10 seconds.
  414. - enter multiple lines of text for your message, if you wish.
  415. - to insert a blank line, you *must* put a space in that line.
  416. - to insert the client's name into the message, use $N
  417. - you can insert text substitutions if you wish
  418. - you cannot use substitutions in the
  419. - mark the end of the message with   :END
  420.  
  421. Connect Messages
  422. ----------------
  423.  
  424. You can set up to 20 different messages that get displayed when the client
  425. first joins the game.
  426.  
  427. - To start your list of Connect messages, put a line that says   :CONNECT
  428. - each line you enter will become a randomly selected Connect message
  429. - use $N to insert the client's name
  430. - use $HIS for his/her, $HIM for him/her, $SHE for he/she, and $HERSELF
  431.   for himself/herself/itself
  432. - you can insert text substitutions if you wish
  433. - mark the end of the message list with  :END
  434.  
  435. Disconnect Messages
  436. -------------------
  437.  
  438. Just like Connect messages, you can set up 20 different messages
  439. - Start the list with    :DISCONNECT
  440. - enter the messages the same way you do the Connect messages
  441. - you can insert text substitutions if you wish
  442. - mark the end of the message list with  :END
  443.  
  444.  
  445. ********************************************
  446. Obituary Selectors
  447. ********************************************
  448.  
  449. Obituary selectors are used to decide which set of Obituary messages matches
  450. the given death situation.  You describe death situations with the 
  451. following characteristics:
  452.     - whether the person killed him/herself, whether another player killed 
  453.       them, or whether the world killed them
  454.     - what type of weapon was used
  455.     - whether Quad damage was active or not
  456.     - the gender of the killer
  457.     - the gender of the victim
  458.     - how badly damaged the victim's body is (gib, mega-gib, or "normal")
  459.  
  460. Each Obituary selector line of the file is of the form:
  461.  
  462. : KillerType WeaponType PowerType KillerGender VictimGender BodyState
  463.  
  464. You can use wildcards (*) to match anything of a particular type.  For example,
  465. if you don't care about gender in a situation where a blaster is being used,
  466. you can put a * in the KillerGender and VictimGender spaces.
  467.  
  468. When ServObit looks through the Obituary selectors, it will use the first
  469. selector that matches the situation.  For this reason, you should be
  470. very careful about the order in which you list the Obituaries, since
  471. the server will pick the first one that matches.
  472.  
  473. KillerType can be: ENEMY [E], SELF [S], WORLD [W], * (anything)
  474.  
  475. WeaponType can be specified using a full name or at least its given 
  476. abbreviation: 
  477.   * (anything), [BL]ASTER, [SH]OTGUN, [SUP]ERSHOTGUN,
  478.   [M]ACHINEGUN, [C]HAINGUN, [GR]ENADE_LAUNCHER, [G_]RENADE_SPLASH,
  479.   [HA]ND_GRENADE, [HG_S]PLASH, [HG_H]ELD, [R_]SPLASH, [RO]CKET_LAUNCHER,
  480.   [RA]ILGUN, [HY]PERBLASTER, [BFG_B]LAST, [BFG_L]ASER, [BFG_E]FFECT,
  481.   [TE]LEFRAG, [SUI]CIDE
  482.  
  483. The world has its own WeaponTypes: [LAV]A, SLIME [SL], WATER [WA], 
  484.   SQUISH [SQ], FALL [F], TOUCH [TO], [LAS]ER, [EX]IT
  485.  
  486. You can specify any non-environmental weapon with WEAPON [WE].
  487. You can specify environmental weapons with ENVIRONMENT [E]
  488.  
  489. PowerType can be: N (normal), Q (quad), * (anything)
  490.  
  491. KillerGender and Victim Gender can be: MALE [M], FEMALE [F], [N]euter, 
  492.      and * (anything)
  493.  
  494. BodyState can be: GIB [G], MEGAGIB[M], and NORMAL [N].  MegaGib is a new term
  495.   I made up that describes when a player's health goes below -80.  It has no
  496.   meaning in the Quake II engine, but it can be used to identify just how badly
  497.   a player was burned by that Quad BFG ;-)  ServObit handles matching of gibs
  498.   differently than other characteristics.  The BodyState specifier can be 
  499.   interpreted as saying "make sure the body state is at least THIS bad."
  500.   Thus, a MegaGib situation will match a Gib specifier, and a Gib will
  501.   match a Normal specifier, but a Normal situation will not match a MegaGib.
  502.   You will see examples of how this is used in Obits.txt.
  503.  
  504. For example,
  505.  
  506. : E ROCKET QUAD * MALE GIB
  507.  
  508. specifies a situation where a male player is gibbed by another player's
  509. quad rocket.
  510.  
  511. ********************************************
  512. Formatting Obituary messages
  513. ********************************************
  514.  
  515. Once you have entered a selector, you can list up to 20 messages which will
  516. be randomly generated when that selector matches the death situation.
  517. Each message must be on a single line.
  518.  
  519. You can insert information about the situation into the random message.  
  520. You specify where this information is to be placed by using a $ followed
  521. by a special command.
  522.  
  523. For each message, you can use any combination of the following:
  524.  
  525. $V = Victim's name
  526. $K = Killer's name
  527. $HISK = his/her/it for Killer's gender
  528. $HISV = his/her/it for Victim's gender
  529. $SHEK = she/he/it for Killer's gender
  530. $SHEV = she/he/it for Victim's gender
  531. $HIMK = him/her/it for Killer's gender
  532. $HIMV = him/her/it for Victim's gender
  533. $HERSELFK = himself/herself/itself for Killer's gender
  534. $HERSELFV = himself/herself/itself for Victim's gender
  535. $G says "destroyed", "gibbed", or "mega-gibbed" depending on body state
  536. $Q says "Quad " if Quad, or nothing if there is no Quad
  537.  
  538. $G and $Q are useful if you want to have basically the same messages for gib
  539. and megagib situations, or for Quad or normal situations.  It helps reduce
  540. having to put duplicate entries under multiple selectors.
  541.  
  542. *******************************
  543. You can have bugs, too
  544. *******************************
  545.  
  546. [This is not a personal hygiene commercial.]
  547.  
  548. WARNING: Just because this isn't programming, you can still have "bugs."
  549. Be careful with the order in which you list selectors - you might match
  550. an obituary earlier than you intend to.  This applies to any use of 
  551. wildcards.  The file ServObit/debug.txt is created each time you start 
  552. the server.  This can help you find mistakes you may have made.  A test
  553. program is included with the source code so you can make sure the selectors
  554. behave like you expect.
  555.  
  556. At the end of each main section, use wildcards to catch anything that might
  557. accidentally slip through (or, perhaps, anything that ServObit doesn't 
  558. recognize, which may be possible in extremely rare situations)
  559.  
  560. Also, run the Obituary Test Program (SOTest.exe) whenever you make a change.
  561.  
  562. *******************************
  563. ServObit Obituary Test Program - Checking Your Obits.txt
  564. *******************************
  565.  
  566. ServObit's flexibility comes at a small price.  Because of the wide
  567. variety of different death situations and complexity of the selectors,
  568. you can sometimes miss writing a selector for a specific situation,
  569. especially if you want to write different messages for a lot of very
  570. specific situations.
  571.  
  572. Whenever ServObit loads obituaries (i.e. on every level change), it
  573. checks for some of these errors, but it doesn't check for all of them,
  574. as some errors take a long time to find, or it is up to you to
  575. determine whether they are really wrong or not (for example, was it
  576. your intention to ignore a situation where a neuter gibs another
  577. neuter with a rocket, and only use a generic rocket message?)
  578. ServObit allows you to define very generic messages (e.g. "Killer
  579. killed Victim") that can be used as a default, but in general you
  580. probably want to have as specific a message as possible.
  581.  
  582. The ServObit tester runs through all possible death situations (or, a
  583. limited set of them) and generates death messages as if those deaths
  584. had happened in the game.  It also checks the format of Obits.txt to
  585. see if you made any mistakes that could cause problems.  It dumps all
  586. of this information into a SrvObTst.txt file which you can then use to
  587. correct any errors that it displays.
  588.  
  589. These are some of the specific errors it can catch:
  590.  
  591. - if you misspell the name of a substitution (so ServObit wouldn't
  592. know what substitutions to use for a death message, which could cause
  593. a sort of ugly death message to be printed out, since it would still
  594. have the %SUBSTITUTION% in it)
  595.  
  596. - in other cases you might misspell something in your selector, which
  597. will cause ServObit to not be able to process the selector properly.
  598. For example, saying RCOKET instead of ROCKET.
  599.  
  600. - if you misspell the name of a $ substitution (e.g. $HISSK or
  601. $HERELF)
  602.  
  603. These are simple errors that it can catch.  
  604.  
  605. However, when selecting which death messages to apply to which
  606. situation, it can't be certain what your intention is, and it's up to
  607. you to determine if it's really wrong or not.
  608.  
  609. The SOTEST.EXE program is provided with ServObit to help you test your
  610. changes and make sure you haven't made any of these mistakes.  (OK,
  611. we'll be fair here, it's possible that ServObit could make a mistake,
  612. too ;-)
  613.  
  614.  
  615. *******************************
  616. Running the Test Program
  617. *******************************
  618.  
  619. You must run the SOTest.EXE program in your ServObit directory.  It
  620. will write its results to a SrvObTst.txt log file.  Then look at the
  621. file, taking care of the errors that it prints out, and looking
  622. through the obituaries it generates to make sure they are set up 
  623. properly.
  624.  
  625. It is suggested that you run the program in an MS-DOS window so you
  626. can see any output it provides.
  627.  
  628. Here are the different arguments you can supply to SOTest.exe:
  629.  
  630.     kgen=ARG - do obits for gender of killer where ARG is [M]ale,
  631.                [F]emale, [N]euter, or [A]ll)
  632.  
  633.     vgen=ARG - do obits for gender of killer where ARG is [M]ale,
  634.                [F]emale, [N]euter, or [A]ll)
  635.  
  636.     power=ARG - do obits for [Q]uad, [N]ormal, or [A]ll
  637.  
  638.     bstate=ARG - do obits for [N]ormal, [G]ib, [M]ega-gib, or [A]ll
  639.  
  640.     killertype=ARG - if ARG is ALL, it checks all Enemy/Self/World
  641.            situations; if ARG=E it checks all Enemy deaths, if ARG=S
  642.            it checks all Self deaths, if ARG=W it checks all world
  643.            deaths
  644.  
  645.     weapon=ARG - if ARG is *, do all possible weapon
  646.                combinations; otherwise, use a weapon name (using the
  647.                same naming convention as in Obits.txt)
  648.  
  649.     repeats=NUMBER - generate NUMBER messages for each death
  650.            situation (the default is 3).  You might want to use a high number
  651.            of repeats to test how your text substitutions look.
  652.  
  653.     all - do all possible combinations of weapon, kgen/vgen, etc.
  654.     
  655.     none - don't do any combinations; just check the Obits.txt
  656.            for simple errors and print connect/disconnect messages
  657.  
  658.  
  659. You should occasionally use SOTest.exe with the "all" option, as that
  660. is the only way you can be certain that ServObit will print out the
  661. right obituaries for each possible situation.  HOWEVER, the
  662. SrvObTst.txt file can generate a large file, 100K or greater.
  663.  
  664. In cases where you are SURE you only made minor changes - e.g., you
  665. only changed obits in the hand grenade section - you can use the
  666. specific arguments to SOTest.exe to limit the situations you look at.
  667.  
  668.  
  669. Some Sample Uses of the Obituary Test Program
  670. ---------------------------------------------
  671.  
  672. 1) Do all combinations:
  673.  
  674.     SOTest.exe all
  675.  
  676. 2) Do obituaries for all hand grenade situations:
  677.  
  678.     SOTest.exe weapon=HAND_GRENADE
  679.  
  680. 3) Do obituaries for all cases where female kills male:
  681.  
  682.     SOTest.exe kgen=F vgen=M
  683.  
  684. 4) Check the Obits.txt for parse errors:
  685.  
  686.     SOTest.exe none
  687.  
  688. 5) Check all suicides:
  689.  
  690.     SOTest.exe killertype=Self
  691.  
  692. 6) Generate 10 messages for each rocket situation (you might do this
  693. to check out a new substitution you created):
  694.  
  695.     SOTest.exe weapon=ROCKET_LAUNCHER messages=10
  696.  
  697. *******************************
  698. Known Bugs
  699. *******************************
  700.  
  701. If you've occasionally shot a BFG, killed yourself, and seen a death message
  702. that says you fell, that's a known bug (or is that a feature?).  This is in
  703. the original id software source code.  Try it - aim your BFG straight down
  704. and let 'er rip.  You will fly, then you will fall.  This may not be a bug,
  705. because it could be that it's not the BFG that's killing you, but rather the
  706. long way down ;-)
  707.  
  708. *******************************
  709. Credits
  710. *******************************
  711.  
  712. Thanks to idsoftware for making Quake and Quake II so fun and so 
  713. extensible - natch.
  714.  
  715. Some of the death messages in the Obits.txt were written by Druid [aka 
  716. Scott Franke] of druid-'s GL Journal - http://www-scf.usc.edu/~sfranke/glj
  717. If you've seen them before and they're not id's, they're probably druid's.
  718. James Abbatiello also had some cool death messages I included.
  719. Others were written by Hawkeye or Sati, "Queen of Death Messages."  My own
  720. messages are in there, too - I'm particularly fond of the "Quad Rocket
  721. Express" addition and the female-specific drowning message "Player retains
  722. too much water."
  723.  
  724. EAVY and I had some great email discussion on how to determine the
  725. gender of models.  Some of his ideas are in GenderMod 0.1, plus he told
  726. me how clients can set the "sex" userinfo variable.
  727.  
  728. Derek Westcott (!Eradicator!) gave me some very detailed feedback that helped
  729. me fix one bug, and he found and fixed a second one.  These bug fixes
  730. were implemented in ServObit 1.2.
  731.  
  732. NewtonD (newton@moongates.com) was also helpful on the technical and creative
  733. side.  His ideas for including Connect/Disconnect messages, MOTD's, text
  734. substitutions, and flexible gender pronouns in his own Death Message mod
  735. influenced ServObit.
  736.  
  737. *******************************
  738. Distribution and Modification
  739. *******************************
  740.  
  741. This software is Copyright 1998 by SteQven M. Christey and may not be modified
  742. for commercial purposes without express written consent of the author.
  743.  
  744. By using this software you agree not to hold me responsible for any damage,
  745. direct or indirect, which may arise from its use.
  746.  
  747. Permission for free distribution of this software is granted to Internet 
  748. sites and their affiliates whose sole or primary focus is Quake or Quake II.
  749. Informally, this includes PlanetQuake.com, Telefragged.com, cdrom.com, etc.
  750. It is the responsibility of any site to ensure that it qualifies for such
  751. permission.
  752.  
  753. Distribution of this software by other sites and on media other than the 
  754. Internet is only granted by express written consent of the author.  
  755. (That's me, SteQve, in case you weren't paying attention.)
  756.  
  757. Unlimited modification for noncommercial purposes is granted provided
  758. appropriate credit is given to the author.  
  759.  
  760. Honest, I didn't plan on this section being so long and bossy.  Just chill
  761. and be good and you'll be fine ;-)
  762.  
  763. *****************************************
  764. Obligatory Scribble Music Coalition Quote
  765. *****************************************
  766.  
  767. "At this intersection / We must choose a direction /
  768.  Using introspection / And a mirror's reflection
  769.  With the finger pointing back at us
  770.  How could we think to accuse another?"
  771.     - Wars of the Millenia
  772.