Path: uunet!tektronix!tekgen!tekred!games-request
From: games-request@tekred.TEK.COM
Newsgroups: comp.sources.games
Subject: v03i052: omega - rogue like dungeon exploration, Part05/15
Message-ID: <2074@tekred.TEK.COM>
Date: 20 Jan 88 03:18:24 GMT
Sender: billr@tekred.TEK.COM
Lines: 1574
Approved: billr@tekred.TEK.COM
Submitted by: "Laurence R. Brothers"
Comp.sources.games: Volume 3, Issue 52
Archive-name: omega/Part05
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh ohelp.txt <<'END_OF_ohelp.txt'
XYou are a novice adventurer, who has recently set off in search of
Xfame, fortune, glory, and a good time. In your travels, you have come
Xupon the ruined city of some mysterious elder civilization. In the
Xcenter of the city is a large bluestone sculpture shaped like:
X
X ****
X ** **
X * *
X * *
X * *
X * *
X **** ****
X
XTouching the figure was a bad move; an eerie violet glow arose, and
Xyou blacked out. Waking up, you found yourself in the city of Rampart
Xon a world called LOCUS. You have a paltry few gold pieces in your
Xpockets, and you realize survival will be a priority....
X
X
X
X
X
X
X
X
X omega
X
X...is a complex rogue-style game of dungeon exploration. Unlike other
Xsuch games, there are a number of ways to win, depending on various
Xactions taken during play. The ways you can get your name on the
Xhiscore board include becoming the highest ranked head of a guild,
Xsect, college, etc., as well as gaining the most points figured from
Xpossessions and experience. Hint: There is a way to become a "total
Xwinner", various paths can lead to this ultimate goal.
X
Xomega offers a richness of playing detail that goes beyond a simple
Xgame like rogue. However, the majority of gameplay is very similar to
Xrogue, hack, ultrarogue, larn, and other such games. The player is
Xrepresented by the "@" symbol, objects and terrain features are
Xrepresented by non-alphabetic symbols, and monsters and non-player
Xcharacters (NPC's) are represented by the various upper and lower case
Xletters. It is recommended that the novice read the man pages for
Xrogue or some other such game and perhaps play a few games before
Xplaying omega. The remainder of this document assumes a basic
Xfamiliarity with rogue-style games.
X
X
XOMEGA STRUCTURE
X===============
X
XOmega currently consists of a city level (Rampart) above a number of
Xdungeon levels. There are several entrances to the dungeons concealed
Xabout the city. Obviously they are not just sitting around open on the
Xstreet (In this respect, Rampart is quite unlike New York City). A thorough
Xsearch of the city will find the entrances, which remain fixed from game
Xto game. In addition, various hints will also lead to these entrances.
XAlthough the dungeon levels may be constructed according to one of four
Xprotocols, each has at least four staircases, two going up, two going
Xdown. Some staircases go up or down more than one level, so be
Xcareful about going too deep before you are ready....
X
XFuture versions of omega will have multiple dungeons and cities
Xscattered about a countryside.
X
XCHARACTER CREATION AND DEVELOPMENT
X==================================
XYou will have the opportunity to create a new character each time you
Xstart up omega. You can apportion points among Strength, Constitution,
XDexterity, Agility, Intelligence, and Power. Each of these is very
Ximportant, but depending what sort of character you wish to play,
Xdifferent statistics will stand out. Combat is helped by Strength and
XDexterity, Magic-use is aided by Intelligence and Power. Agility
Xhelps you avoid getting hit and avoid traps, while Constitution
Xdetermines how many hits you can take before dying.
X
XEach time you create a character, you will have the opportunity to
Xsave the set up in a file .omegarc which will make it easier to start
Xthe game in the future. omega will check for a .omegarc in your wd.
XYou need not use your .omegarc if it is there. The .omegarc stores
Xstarting statistics, starting options settings, name, and sexual
Xpreference. You can rename your character with the 'R' command, so if
Xthat is the only change you tend to make you need not always be saving
Xnew .omegarc's.
X
XAs you continue to play, you will hopefully accumulate experience and
Xtreasure. You can gain skills and abilities through various means,
Xthe most important being training in one of the Rampart establishments
Xdevoted to self-improvement. Thus, you can choose to work out at the
Xgym, study at the Collegium Magii, meditate at a Temple, and
Xso on. Certain skills and abilities may only be gained through
Xadventuring, and others are mutually exclusive. For example, you can
Xonly be a servant of one particular deity. One of the appeals of
Xomega is the variety of different types of characters you can play,
Xeach with its own set of goals and benefits.
X
XAnother aspect of your character is alignment. Characters are aligned
Xtowards the primal forces of Chaos and Law, or they can be neutral.
XVarious actions affect this factor; killing peaceful monsters, or
Xcommitting burgalry, for example, are chaotic acts. Alignment
Xdetermines which guilds will let you in, the behavior of some
Xartifacts and monsters, as well as much else.
X
XYour character will gain various statuses, abilities, immunities,
Xetc., both harmful and beneficial. Most of the time these are kept
Xhidden from you, but there are various ways of discovering the truth
X-- self-knowledge is very useful in omega.
X
XEXPERIENCE
X==========
XExperience is accrued for skillful actions in the game. As in rogue,
Xone of the main methods of acquiring experience is defeating monsters.
XYou need not kill an opponent to defeat it (see the T command). There
Xare many other ways of gaining experience, though, including learning
Xspells, deactivating traps, using artifacts correctly, etc. As
Xexperience is gained, the character will increase in hit points,
Xcombat ability, and spellcasting potential, and will eventually be
Xable to increase his rank in the various guilds. Gaining an
Xexperience level increases maximum hit points but not current
Xhit points so you cannot suddenly save yourself in a large battle
Xby going up in rank.
X
XGAMEPLAY
X========
XThe mechanics are much like rogue, hack, etc. A variety of options are
Xavailable to customize the interface. The command list is always
Xuseful to have around, but is also accessible from the '?' command.
X
XThere are a number of windows used in the game. The main (central)
Xwindow shows the current map of the dungeon, city or wilderness. A
Xsingle level is typically one screen in width and four in length, for
Xa 64 x 64 level. The top line is a message window describing what is
Xnow going on. The bottom two lines form a window showing various
Xplayer statistics. The right-hand column is a status window showing
Xcurrent conditions, and another line below the map describes the
Xcurrent environment. A menu window will sometimes overlap the rest of
Xthe screen for various reasons.
X
XCOMBAT
X======
XThe player has two defensive statistics, "Defense" and "Protection".
XDefense determines how hard it is to hit the player and is determined
Xmostly by a combination of agility and level. Protection is the
Xprotection from damage offered by armor. The higher the statistic, the
Xbetter. Note that most forms of armor raise Protection at the cost of
XDefense. Shields raise Defense without affecting Protection. There
Xare also various forms of magic and magic items that affect these
Xstatistics, which are visible in the mode line.
X
XThe Player also has two offensive statistics, "Accuracy" and "Damage".
XAccuracy is determined by the Player's dexterity, level, and the
Xweapon used. Damage is the amount of damage done on a successful hit to
Xan opponent and is determined by the Player's strength and the weapon
Xused.
X
Xomega has two combat modes. In some circumstances it may be more advantageous
Xto use one over the other; in others you will have no choice.
X
XRegular Combat Mode:
X
XRCM is just like in rogue, hack, et al. A move that would place you on
Xa monster is construed as an attack. omega additionally offers
XTactical Combat Mode, which can be used via the 'F' command, or is
Xused automatically in some special situations, like in the Arena.
X
XTactical Combat Mode:
X
XTCM allows you to select precisely which actions you will choose in a
Xgiven combat round -- parry high, thrust low, etc. You have several
Xmaneuver points for use in each TCM round, depending on level, status
Xas a gladiator, etc.
X
XATTACK: Cut, Strike, Shoot, or Thrust (depending on weapon) -- 1 pt.
XBLOCK: Prepare to block enemy attack -- 1 pt.
XRIPOSTE: BLOCK/ATTACK (thrusting weapons only) -- 2 pts.
XLUNGE: More chance to hit than usual, does more damage -- 2 pts.
XGET: Pick up an item on the ground -- All pts.
XWIELD: Use an item (weapon, typically) already owned -- All pts.
XMAGIC: Cast a spell -- All pts.
XDISENGAGE: Try to get out of Tactical Mode (helped by AGILITY) -- All pts.
X
XYou can try multiple identical maneuvers if you like. If you don't try
Xany BLOCKS, it will be easier than usual for your opponent to hit.
XEven if you don't get the location correct, a BLOCK still does some
Xgood. A riposte attacks in the same line as its block, if you got the
Xline right. I.e., if you are attacked high, a high riposte will get a
Xfree attack back. If you are attacked high three times, a high riposte
Xwill get three free attacks back.
X
XIt should be noted that it is disadvantageous to block in the same line
Xas an attack, as your block tends to get in the way of the attack. You
Xmay wish to do something like blocking in two lines and attacking in
Xthe other, or vice versa.
X
XHeavy edged weapons and smashing weapons do CUTTING or STRIKING
Xdamage. Your strength affects this, so if it is high you will do
Xmuch more damage, and if low, much less.
X
XLight edged weapons, missile weapons, and pointed weapons do THRUSTING
Xor SHOOTING attacks, whose chance to hit is greatly affected by your
Xdexterity.
X
XNaturally, TCM takes much longer to work out, but it may prove
Xhelpful, particularly when one monster's characteristic form of attack
Xor defense is learned. All monsters are happy to oblige you with
Xcombat in either mode. Later versions will hopefully show more
Xintelligence in this mode. At present, some monsters are easier
Xto deal with in RCM, and some in TCM.
X
X
XMAGIC
X=====
XYour character may be taught spells by his or her guilds, at the
Xcollegium magii, or pick them up from a scroll of spells. Every spell
Xcosts some amount of mana to cast. Mana is not normally regenerated
Xexcept when the player goes up an experience level, but various magic
Xitems augment mana, and the sorceror's guild also will recharge you
Xfor a fee. If you learn the same spell multiple times, the effective
Xpower drain to cast the spell is lowered.
X
X
XGETTING INFORMATION
X===================
XTo be successful at omega, you must uncover secrets and solve
Xmysteries. You can get information in a number of ways (reading the
Xsource code is strictly discouraged :-), but one of the most important
Xways is "talking" to monsters and NPC's. Even if you don't get any
Xuseful info, you may still find out something about the creature
Xyou're talking to. In particular human beings are usually on the
Xscreen as "m" or "w" (depending on sex), and you maybe able to
Xfigure out just who you are dealing with by talking to them. The
Xusual course of action is to "greet" strangers. Threatening them
Xis often counterproductive, but may induce weaker or injured
Xopponents to give up. Threatening is a lawful action if you would
Xotherwise wind up killing your opponent. On the other hand you
Xmay be able to "yield" to stronger opponents who, if they are
Xmerciful, will let you go after relieving you of some treasure.
XWarning: Monsters who defeat you will grow stronger as they too
Xgain experience....
X
X
XRANDOM DETAILS
X==============
XStarting the Game:
X
XYou will first want to explore the city of Rampart. Although the
Xarchitecture and important sites remain the same from game to game,
Xdetails such as the precise position of certain shops, etc. will
Xchange. Rampart is relatively safe if you don't wander into places
Xthat are obviously dangerous or do things like breaking and entering.
XIf you are reckless, it is quite possible to get killed before ever
Xfinding the dungeon. The dungeon entrance(s) are concealed around
XRampart. You wouldn't expect them to be out in the open, now,
Xwould you?
X
XMany Rampart establishments are only open in the daytime, but some
Xare only active at night. Due to the stringent anti-crime measures
Xtaken by the Duke, it is usually safe to sleep in the streets. You
Xwill find it far more rewarding, however, to rent or purchase your
Xown lodgings, if you can afford them.
X
X
XDungeon Map Example:
X
X##########
X#........# This bit of a screen represents a room. The walls are "#",
X#..@...g.- the floor is ".", there is a staircase in the lower lefthand
X#....)...# corner, and a closed door in the right wall. A goblin is menacing
X#>......~# the player, and a weapon lies on the floor not far away. There
X########## is a pool in the lower righthand corner.
X
XSince the same character can represent different things or entities, a
Xgood command to remember is 'x' (examine), which will tell you
Xprecisely what you are dealing with in any situation. This is
Xespecially helpful before you have terrain types like deep pools and
Xlava pits (!) memorized.... You can use the CONFIRM option to avoid
Xwalking absent-mindedly into a trap, pool, etc. The '/' command will
Xgive you more general help, for example telling you that the ')'
Xcharacter represents a weapon. The '?' command can give you either a
Xcommand list or this file.
X
X
XSaving and Restoring:
X
XSince omega's dungeon is quite large, only the current dungeon level
Xand the city level will be saved; others will be regenerated as you
Xre-enter them. You might simply consider that the "actual" levels are
Xfar larger than is apparent, and you are just traversing a different
Xpart on each restore.... If you know the spell of Return, however,
X(learnable at the Explorers' Club) you will be able to warp to your
Xdeepest excursion in the dungeons without having to retraverse the old
Xlevels in between.
X
XGames can be restored by giving the save file as a command line argument
Xas in:
X
X% omega quasar.sav
X
XThe implementor will decide whether to enable filechecking routines
Xto ensure that characters are not copied. It's in poor taste, though,
Xto clone a character....
X
X
XOption Settings:
X
XOptions may be set with the 'O' command. The options are:
X
X(F) BELLICOSE: Automatically attack things you run into.
X(F) JUMPMOVE: Don't display things until the end of a run.
X(T) ASKME: Automatically pick things up when you move over them.
X(T) RUNSTOP: Stop a run when something like a door is passed.
X(T) CONFIRM: Ask confirmation before you do some dangerous things.
X(1) SEARCHNUM: the number of turns spent searching when you hit the 's' key.
X
XThe default values are parenthesized. These options will be recovered from
Xyour .omegarc if you use one.
X
X
XFlags:
X
XIn the upper right corner of the omega display, below the date and
Xtime, and phase of the moon, you will see three flags: The top
Xdescribes your food status, the middle describes your status with
Xrespect to poison, and the bottom your health (diseased or healthy).
XWhile you are diseased you will not regain hit points naturally. While
Xyou are poisoned you will take damage each round until cured or killed
X(or the poison's effect can naturally fade). When your food runs out,
Xand you start starving, you will take more and more damage as time
Xpasses until finally you die of starvation. It's always a good idea
Xto stock up at the Commandant's....
X
X
XCombat Abilities:
X
XIn the lower right of the display, your current combat abilities
Xare displayed.
X
XHit: is your current chance to hit with the weapon currently wielded,
X the higher the better. This factor varies with your dexterity,
X experience level, and the weapon wielded.
XDmg: is the maximum amount of damage you can do with a hit. This factor
X varies with your strength and the weapon wielded.
XDef: is your defensive rating, how hard it is for monsters to hit you. This
X factor varies with your agility and experience level.
XArm: is your armor rating, how much damage is absorbed when a monster
X hits you before you take damage. Armor only absorbs normal damage;
X various effects and forms of magic may penetrate armor. This factor
X varies with the armor worn.
XSpd: is a speed factor, how quickly or how slowly you move. This factor is
X calculated about a base of 1.00; 2.00 means you move twice as fast;
X 0.50 means you move twice as slowly. This factor varies with your
X agility and the amount of weight you are carrying.
X
XMagic spells, special items, and monster effects can affect all these factors,
Xpositively and negatively.
END_OF_ohelp.txt
if test 16671 -ne `wc -c oinitmon4to7.c <<'END_OF_oinitmon4to7.c'
X/* omega copyright (c) 1987 by Laurence Raphael Brothers */
X/* oinitmon4to7.c */
X/* monster levels 4 to 7 */
X
X#include
X#include "oglob.h"
X
Xvoid initmon4to7()
X{
X /* the manticore */
X Monsters[ML4+0].id = ML4+0;
X Monsters[ML4+0].hp = 100;
X Monsters[ML4+0].speed = 6;
X Monsters[ML4+0].hit = 15;
X Monsters[ML4+0].actions = 4;
X Monsters[ML4+0].tactics = MM_BERSERK+MM_POOR;
X Monsters[ML4+0].ac = 12;
X Monsters[ML4+0].dmg = 25;
X Monsters[ML4+0].sense = 6;
X Monsters[ML4+0].wakeup = 2;
X Monsters[ML4+0].level = 4;
X Monsters[ML4+0].status = HOSTILE+HUNGRY+MOBILE+FLYING;
X Monsters[ML4+0].immunity = 0;
X Monsters[ML4+0].sleep = 25;
X Monsters[ML4+0].treasure = 2;
X Monsters[ML4+0].possessions = NULL;
X Monsters[ML4+0].xpv = 100;
X Monsters[ML4+0].x = -1;
X Monsters[ML4+0].y = -1;
X Monsters[ML4+0].transformid = STICKID+11;
X Monsters[ML4+0].corpsevalue = 20;
X Monsters[ML4+0].monchar = 'M';
X strcpy(Monsters[ML4+0].monstring,"manticore");
X strcpy(Monsters[ML4+0].corpsestr,"manticore spikes");
X Monsters[ML4+0].corpseweight = 100;
X Monsters[ML4+0].talkf = M_TALK_HUNGRY;
X Monsters[ML4+0].movef = M_MOVE_NORMAL;
X Monsters[ML4+0].meleef = M_MELEE_NORMAL;
X Monsters[ML4+0].strikef = M_STRIKE_MISSILE;
X Monsters[ML4+0].specialf = M_NO_OP;
X
X /* the tasmanian devil */
X Monsters[ML4+1].id = ML4+1;
X Monsters[ML4+1].hp = 50;
X Monsters[ML4+1].speed = 2;
X Monsters[ML4+1].hit = 12;
X Monsters[ML4+1].actions = 8;
X Monsters[ML4+1].tactics = MM_BERSERK+MM_POOR;
X Monsters[ML4+1].hitloc = LOW;
X Monsters[ML4+1].ac = 10;
X Monsters[ML4+1].dmg = 10;
X Monsters[ML4+1].sense = 10;
X Monsters[ML4+1].wakeup = 10;
X Monsters[ML4+1].level = 4;
X Monsters[ML4+1].status = HOSTILE+HUNGRY+MOBILE;
X Monsters[ML4+1].immunity = 0;
X Monsters[ML4+1].xpv = 75;
X Monsters[ML4+1].treasure = 0;
X Monsters[ML4+1].possessions = NULL;
X Monsters[ML4+1].sleep = 50;
X Monsters[ML4+1].x = -1;
X Monsters[ML4+1].y = -1;
X Monsters[ML4+1].transformid = POTIONID+6;
X Monsters[ML4+1].corpsevalue = 10;
X Monsters[ML4+1].monchar = 'T';
X strcpy(Monsters[ML4+1].monstring,"tasmanian devil");
X strcpy(Monsters[ML4+1].corpsestr,"dead tasmanian devil");
X Monsters[ML4+1].corpseweight = 300;
X Monsters[ML4+1].talkf = M_TALK_HUNGRY;
X Monsters[ML4+1].movef = M_MOVE_FLUTTER;
X Monsters[ML4+1].meleef = M_MELEE_NORMAL;
X Monsters[ML4+1].strikef = M_NO_OP;
X Monsters[ML4+1].specialf = M_NO_OP;
X
X /* Automaton Minor */
X Monsters[ML4+2].id = ML4+2;
X Monsters[ML4+2].hp = 100;
X Monsters[ML4+2].speed = 7;
X Monsters[ML4+2].hit = 15;
X Monsters[ML4+2].actions = 4;
X Monsters[ML4+2].tactics = MM_FORCED+MM_AVERAGE;
X Monsters[ML4+2].hitloc = CENTER;
X Monsters[ML4+2].ac = 15;
X Monsters[ML4+2].dmg = 50;
X Monsters[ML4+2].sense = 5;
X Monsters[ML4+2].wakeup = 2;
X Monsters[ML4+2].level = 4;
X Monsters[ML4+2].status = HOSTILE+MOBILE;
X Monsters[ML4+2].immunity = pow2(SLEEP)+pow2(POISON)+pow2(FEAR)+
X pow2(ELECTRICITY);
X Monsters[ML4+2].xpv = 100;
X Monsters[ML4+2].treasure = 0;
X Monsters[ML4+2].possessions = NULL;
X Monsters[ML4+2].sleep = 100;
X Monsters[ML4+2].x = -1;
X Monsters[ML4+2].y = -1;
X Monsters[ML4+2].transformid = -1;
X Monsters[ML4+2].corpsevalue = 0;
X Monsters[ML4+2].monchar = 'a';
X strcpy(Monsters[ML4+2].monstring,"automatum minor");
X strcpy(Monsters[ML4+2].corpsestr,"automatum minor battery");
X Monsters[ML4+2].corpseweight = 100;
X Monsters[ML4+2].talkf = M_TALK_ROBOT;
X Monsters[ML4+2].movef = M_MOVE_SMART;
X Monsters[ML4+2].meleef = M_MELEE_NORMAL;
X Monsters[ML4+2].strikef = M_NO_OP;
X Monsters[ML4+2].specialf = M_SP_POISON_CLOUD;
X
X /* denebian slime devil */
X Monsters[ML4+3].id = ML4+3;
X Monsters[ML4+3].hp = 75;
X Monsters[ML4+3].speed = 12;
X Monsters[ML4+3].hit = 30;
X Monsters[ML4+3].actions = 3;
X Monsters[ML4+3].tactics = MM_FORCED+MM_BERSERK;
X Monsters[ML4+3].hitloc = LOW;
X Monsters[ML4+3].ac = 10;
X Monsters[ML4+3].dmg = 15;
X Monsters[ML4+3].sense = 5;
X Monsters[ML4+3].wakeup = 1;
X Monsters[ML4+3].level = 4;
X Monsters[ML4+3].status = HOSTILE+HUNGRY+MOBILE+SWIMMING+M_INVISIBLE;
X Monsters[ML4+3].immunity = pow2(POISON)+pow2(FLAME)+pow2(ELECTRICITY);
X Monsters[ML4+3].xpv = 125;
X Monsters[ML4+3].treasure = 0;
X Monsters[ML4+3].possessions = NULL;
X Monsters[ML4+3].sleep = 75;
X Monsters[ML4+3].x = -1;
X Monsters[ML4+3].y = -1;
X Monsters[ML4+3].transformid = POTIONID+17;
X Monsters[ML4+3].corpsevalue = 20;
X Monsters[ML4+3].monchar = 's';
X strcpy(Monsters[ML4+3].monstring,"denebian slime devil");
X strcpy(Monsters[ML4+3].corpsestr,"denebian slime");
X Monsters[ML4+3].corpseweight = 50;
X Monsters[ML4+3].talkf = M_TALK_SILENT;
X Monsters[ML4+3].movef = M_MOVE_NORMAL;
X Monsters[ML4+3].meleef = M_MELEE_DISEASE;
X Monsters[ML4+3].strikef = M_NO_OP;
X Monsters[ML4+3].specialf = M_SP_SURPRISE;
X
X
X /* jub-jub bird */
X Monsters[ML4+4].id = ML4+4;
X Monsters[ML4+4].hp = 50;
X Monsters[ML4+4].speed = 3;
X Monsters[ML4+4].hit = 18;
X Monsters[ML4+4].actions = 3;
X Monsters[ML4+4].tactics = MM_BERSERK+MM_AVERAGE;
X Monsters[ML4+4].ac = 12;
X Monsters[ML4+4].dmg = 25;
X Monsters[ML4+4].sense = 5;
X Monsters[ML4+4].wakeup = 1;
X Monsters[ML4+4].level = 4;
X Monsters[ML4+4].status = HOSTILE+HUNGRY+MOBILE+FLYING;
X Monsters[ML4+4].immunity = pow2(POISON);
X Monsters[ML4+4].xpv = 125;
X Monsters[ML4+4].treasure = 0;
X Monsters[ML4+4].possessions = NULL;
X Monsters[ML4+4].sleep = 75;
X Monsters[ML4+4].x = -1;
X Monsters[ML4+4].y = -1;
X Monsters[ML4+4].transformid = -1;
X Monsters[ML4+4].corpsevalue = 0;
X Monsters[ML4+4].monchar = 'j';
X strcpy(Monsters[ML4+4].monstring,"jub-jub bird");
X strcpy(Monsters[ML4+4].corpsestr,"dead jub-jub bird");
X Monsters[ML4+4].corpseweight = 500;
X Monsters[ML4+4].talkf = M_TALK_BURBLE;
X Monsters[ML4+4].movef = M_MOVE_FLUTTER;
X Monsters[ML4+4].meleef = M_MELEE_NORMAL;
X Monsters[ML4+4].strikef = M_NO_OP;
X Monsters[ML4+4].specialf = M_NO_OP;
X
X /* haunt */
X Monsters[ML4+5].id = ML4+5;
X Monsters[ML4+5].hp = 50;
X Monsters[ML4+5].speed = 7;
X Monsters[ML4+5].hit = 15;
X Monsters[ML4+5].actions = 3;
X Monsters[ML4+5].tactics = MM_GOOD;
X Monsters[ML4+5].ac = 5;
X Monsters[ML4+5].dmg = 20;
X Monsters[ML4+5].sense = 4;
X Monsters[ML4+5].wakeup = 1;
X Monsters[ML4+5].level = 4;
X Monsters[ML4+5].status = HOSTILE+HUNGRY+MOBILE+M_INVISIBLE;
X Monsters[ML4+5].immunity = pow2(POISON)+pow2(SLEEP)+pow2(FEAR);
X Monsters[ML4+5].xpv = 150;
X Monsters[ML4+5].treasure = 0;
X Monsters[ML4+5].possessions = NULL;
X Monsters[ML4+5].sleep = 0;
X Monsters[ML4+5].x = -1;
X Monsters[ML4+5].y = -1;
X Monsters[ML4+5].transformid = -1;
X Monsters[ML4+5].corpsevalue = 0;
X Monsters[ML4+5].monchar = 'h';
X strcpy(Monsters[ML4+5].monstring,"haunt");
X strcpy(Monsters[ML4+5].corpsestr,"dessicated corpse");
X Monsters[ML4+5].corpseweight = 500;
X Monsters[ML4+5].talkf = M_TALK_EVIL;
X Monsters[ML4+5].movef = M_MOVE_NORMAL;
X Monsters[ML4+5].meleef = M_MELEE_POISON;
X Monsters[ML4+5].strikef = M_NO_OP;
X Monsters[ML4+5].specialf = M_SP_SURPRISE;
X
X /* incubus/succubus */
X Monsters[ML4+6].id = ML4+6;
X Monsters[ML4+6].hp = 50;
X Monsters[ML4+6].speed = 5;
X Monsters[ML4+6].hit = 20;
X Monsters[ML4+6].actions = 4;
X Monsters[ML4+6].tactics = MM_GOOD;
X Monsters[ML4+6].ac = 10;
X Monsters[ML4+6].dmg = 10;
X Monsters[ML4+6].sense = 4;
X Monsters[ML4+6].wakeup = 4;
X Monsters[ML4+6].level = 4;
X Monsters[ML4+6].status = MOBILE+HOSTILE;
X Monsters[ML4+6].immunity = pow2(POISON)+pow2(SLEEP)+pow2(FEAR);
X Monsters[ML4+6].xpv = 150;
X Monsters[ML4+6].treasure = 1;
X Monsters[ML4+6].possessions = NULL;
X Monsters[ML4+6].sleep = 0;
X Monsters[ML4+6].x = -1;
X Monsters[ML4+6].y = -1;
X Monsters[ML4+6].transformid = -1;
X Monsters[ML4+6].corpsevalue = 200;
X if (Player.preference == 'm') {
X Monsters[ML4+6].monchar = 's';
X strcpy(Monsters[ML4+6].monstring,"satyr");
X strcpy(Monsters[ML4+6].corpsestr,"incubus' horns");
X }
X else {
X Monsters[ML4+6].monchar = 'n';
X strcpy(Monsters[ML4+6].monstring,"nymph");
X strcpy(Monsters[ML4+6].corpsestr,"succubus' horns");
X }
X Monsters[ML4+6].corpseweight = 1;
X Monsters[ML4+6].talkf = M_TALK_DEMONLOVER;
X Monsters[ML4+6].movef = M_MOVE_SMART;
X Monsters[ML4+6].meleef = M_NO_OP;
X Monsters[ML4+6].strikef = M_NO_OP;
X Monsters[ML4+6].specialf = M_SP_DEMONLOVER;
X
X /* satyr/nymph */
X Monsters[ML4+7].id = ML4+7;
X Monsters[ML4+7].hp = 50;
X Monsters[ML4+7].speed = 6;
X Monsters[ML4+7].hit = 0;
X Monsters[ML4+7].actions = 1;
X Monsters[ML4+7].tactics = MM_POOR+MM_TIMID;
X Monsters[ML4+7].ac = 10;
X Monsters[ML4+7].dmg = 0;
X Monsters[ML4+7].sense = 4;
X Monsters[ML4+7].wakeup = 4;
X Monsters[ML4+7].level = 4;
X Monsters[ML4+7].status = MOBILE+NEEDY;
X Monsters[ML4+7].immunity = 0;
X Monsters[ML4+7].xpv = 50;
X Monsters[ML4+7].treasure = 0;
X Monsters[ML4+7].possessions = NULL;
X Monsters[ML4+7].sleep = 0;
X Monsters[ML4+7].x = -1;
X Monsters[ML4+7].y = -1;
X Monsters[ML4+7].transformid = -1;
X Monsters[ML4+7].corpsevalue = 0;
X if (Player.preference == 'm') {
X Monsters[ML4+7].monchar = 's';
X strcpy(Monsters[ML4+7].monstring,"satyr");
X strcpy(Monsters[ML4+7].corpsestr,"satyr's horns");
X }
X else {
X Monsters[ML4+7].monchar = 'n';
X strcpy(Monsters[ML4+7].monstring,"nymph");
X strcpy(Monsters[ML4+7].corpsestr,"nymph's lingerie");
X }
X Monsters[ML4+7].corpseweight = 1;
X Monsters[ML4+7].talkf = M_TALK_SEDUCTOR;
X Monsters[ML4+7].movef = M_MOVE_SMART;
X Monsters[ML4+7].meleef = M_NO_OP;
X Monsters[ML4+7].strikef = M_NO_OP;
X Monsters[ML4+7].specialf = M_SP_SEDUCTOR;
X
X
X
X /* Croc */
X Monsters[ML4+8].id = ML4+8;
X Monsters[ML4+8].hp = 80;
X Monsters[ML4+8].speed = 8;
X Monsters[ML4+8].hit = 15;
X Monsters[ML4+8].actions = 3;
X Monsters[ML4+8].tactics = MM_BERSERK+MM_FORCED;
X Monsters[ML4+8].hitloc = LOW;
X Monsters[ML4+8].ac = 20;
X Monsters[ML4+8].dmg = 30;
X Monsters[ML4+8].sense = 4;
X Monsters[ML4+8].wakeup = 1;
X Monsters[ML4+8].level = 4;
X Monsters[ML4+8].status = MOBILE+HOSTILE+HUNGRY;
X Monsters[ML4+8].immunity = 0;
X Monsters[ML4+8].xpv = 100;
X Monsters[ML4+8].treasure = 0;
X Monsters[ML4+8].possessions = NULL;
X Monsters[ML4+8].sleep = 50;
X Monsters[ML4+8].x = -1;
X Monsters[ML4+8].y = -1;
X Monsters[ML4+8].transformid = -1;
X Monsters[ML4+8].corpsevalue = 100;
X strcpy(Monsters[ML4+8].monstring,"giant crocodile");
X strcpy(Monsters[ML4+8].corpsestr,"crocodile hide");
X Monsters[ML4+8].monchar = 'c';
X Monsters[ML4+8].corpseweight = 300;
X Monsters[ML4+8].talkf = M_NO_OP;
X Monsters[ML4+8].movef = M_MOVE_NORMAL;
X Monsters[ML4+8].meleef = M_MELEE_NORMAL;
X Monsters[ML4+8].strikef = M_NO_OP;
X Monsters[ML4+8].specialf = M_NO_OP;
X
X
X
X /* torpor beast */
X Monsters[ML4+9].id = ML4+9;
X Monsters[ML4+9].hp = 40;
X Monsters[ML4+9].speed = 12;
X Monsters[ML4+9].hit = 20;
X Monsters[ML4+9].actions = 2;
X Monsters[ML4+9].tactics = MM_FORCED+MM_POOR;
X Monsters[ML4+9].hitloc = CENTER;
X Monsters[ML4+9].ac = 10;
X Monsters[ML4+9].dmg = 10;
X Monsters[ML4+9].sense = 4;
X Monsters[ML4+9].wakeup = 4;
X Monsters[ML4+9].level = 4;
X Monsters[ML4+9].status = MOBILE+HOSTILE+HUNGRY;
X Monsters[ML4+9].immunity = pow2(SLEEP)+pow2(FEAR);
X Monsters[ML4+9].xpv = 120;
X Monsters[ML4+9].treasure = 0;
X Monsters[ML4+9].possessions = NULL;
X Monsters[ML4+9].sleep = 0;
X Monsters[ML4+9].x = -1;
X Monsters[ML4+9].y = -1;
X Monsters[ML4+9].transformid = POTIONID+5;
X Monsters[ML4+9].corpsevalue = 50;
X strcpy(Monsters[ML4+9].monstring,"torpor beast");
X strcpy(Monsters[ML4+9].corpsestr,"a valium gland");
X Monsters[ML4+9].monchar = 't';
X Monsters[ML4+9].corpseweight = 30;
X Monsters[ML4+9].talkf = M_TALK_STUPID;
X Monsters[ML4+9].movef = M_MOVE_NORMAL;
X Monsters[ML4+9].meleef = M_MELEE_SLEEP;
X Monsters[ML4+9].strikef = M_NO_OP;
X Monsters[ML4+9].specialf = M_NO_OP;
X
X
X
X /* the dragonette */
X Monsters[ML5+0].id = ML5+0;
X Monsters[ML5+0].hp = 50;
X Monsters[ML5+0].speed = 3;
X Monsters[ML5+0].hit = 20;
X Monsters[ML5+0].actions = 6;
X Monsters[ML5+0].tactics = MM_AVERAGE;
X Monsters[ML5+0].ac = 15;
X Monsters[ML5+0].dmg = 40;
X Monsters[ML5+0].sense = 10;
X Monsters[ML5+0].wakeup = 2;
X Monsters[ML5+0].level = 5;
X Monsters[ML5+0].status = HOSTILE+HUNGRY+GREEDY+MOBILE+FLYING;
X Monsters[ML5+0].immunity = pow2(FLAME);
X Monsters[ML5+0].xpv = 180;
X Monsters[ML5+0].treasure = 4;
X Monsters[ML5+0].possessions = NULL;
X Monsters[ML5+0].sleep = 90;
X Monsters[ML5+0].x = -1;
X Monsters[ML5+0].y = -1;
X Monsters[ML5+0].transformid = RINGID+4;
X Monsters[ML5+0].corpsevalue = 50;
X Monsters[ML5+0].monchar = 'd';
X strcpy(Monsters[ML5+0].monstring,"dragonette");
X strcpy(Monsters[ML5+0].corpsestr,"dead dragonette");
X Monsters[ML5+0].corpseweight = 500;
X Monsters[ML5+0].talkf = M_TALK_GREEDY;
X Monsters[ML5+0].movef = M_MOVE_NORMAL;
X Monsters[ML5+0].meleef = M_MELEE_DRAGON;
X Monsters[ML5+0].strikef = M_STRIKE_FBOLT;
X Monsters[ML5+0].specialf = M_NO_OP;
X
X
X /* the tesla monster */
X Monsters[ML5+1].id = ML5+1;
X Monsters[ML5+1].hp = 50;
X Monsters[ML5+1].speed = 12;
X Monsters[ML5+1].hit = 15;
X Monsters[ML5+1].ac = 10;
X Monsters[ML5+1].actions = 4;
X Monsters[ML5+1].tactics = MM_FORCED+MM_BERSERK;
X Monsters[ML5+1].hitloc = LOW;
X Monsters[ML5+1].dmg = 40;
X Monsters[ML5+1].sense = 10;
X Monsters[ML5+1].wakeup = 2;
X Monsters[ML5+1].level = 5;
X Monsters[ML5+1].status = HOSTILE+MOBILE;
X Monsters[ML5+1].immunity = pow2(ELECTRICITY);
X Monsters[ML5+1].xpv = 150;
X Monsters[ML5+1].treasure = 0;
X Monsters[ML5+1].possessions = NULL;
X Monsters[ML5+1].sleep = 40;
X Monsters[ML5+1].x = -1;
X Monsters[ML5+1].y = -1;
X Monsters[ML5+1].transformid = STICKID+3;
X Monsters[ML5+1].corpsevalue = 200;
X Monsters[ML5+1].monchar = 't';
X strcpy(Monsters[ML5+1].monstring,"tesla monster");
X strcpy(Monsters[ML5+1].corpsestr,"tesla monster whip");
X Monsters[ML5+1].corpseweight = 100;
X Monsters[ML5+1].talkf = M_TALK_STUPID;
X Monsters[ML5+1].movef = M_MOVE_FLUTTER;
X Monsters[ML5+1].meleef = M_MELEE_ELEC;
X Monsters[ML5+1].strikef = M_STRIKE_LBALL;
X Monsters[ML5+1].specialf = M_NO_OP;
X
X
X
X /* the wyvern */
X Monsters[ML5+2].id = ML5+2;
X Monsters[ML5+2].hp = 100;
X Monsters[ML5+2].speed = 4;
X Monsters[ML5+2].hit = 20;
X Monsters[ML5+2].actions = 4;
X Monsters[ML5+2].tactics = MM_AVERAGE;
X Monsters[ML5+2].ac = 12;
X Monsters[ML5+2].dmg = 20;
X Monsters[ML5+2].sense = 4;
X Monsters[ML5+2].wakeup = 2;
X Monsters[ML5+2].level = 5;
X Monsters[ML5+2].status = GREEDY+HOSTILE+MOBILE+FLYING;
X Monsters[ML5+2].immunity = pow2(FLAME);
X Monsters[ML5+2].xpv = 150;
X Monsters[ML5+2].treasure = 2;
X Monsters[ML5+2].possessions = NULL;
X Monsters[ML5+2].sleep = 80;
X Monsters[ML5+2].x = -1;
X Monsters[ML5+2].y = -1;
X Monsters[ML5+2].transformid = RINGID+6;
X Monsters[ML5+2].corpsevalue = 150;
X Monsters[ML5+2].monchar = 'w';
X strcpy(Monsters[ML5+2].monstring,"wyvern");
X strcpy(Monsters[ML5+2].corpsestr,"wyvern's sting");
X Monsters[ML5+2].corpseweight = 100;
X Monsters[ML5+2].talkf = M_TALK_GREEDY;
X Monsters[ML5+2].movef = M_MOVE_NORMAL;
X Monsters[ML5+2].meleef = M_MELEE_POISON;
X Monsters[ML5+2].strikef = M_NO_OP;
X Monsters[ML5+2].specialf = M_NO_OP;
X
X
X
X /* the radeligian cateagle */
X Monsters[ML5+3].id = ML5+3;
X Monsters[ML5+3].hp = 50;
X Monsters[ML5+3].speed = 2;
X Monsters[ML5+3].hit = 15;
X Monsters[ML5+3].actions = 5;
X Monsters[ML5+3].tactics = MM_FORCED+MM_BERSERK;
X Monsters[ML5+3].hitloc = HIGH;
X Monsters[ML5+3].ac = 10;
X Monsters[ML5+3].dmg = 20;
X Monsters[ML5+3].sense = 10;
X Monsters[ML5+3].wakeup = 2;
X Monsters[ML5+3].level = 5;
X Monsters[ML5+3].status = HUNGRY+HOSTILE+MOBILE+FLYING;
X Monsters[ML5+3].immunity = 0;
X Monsters[ML5+3].xpv = 150;
X Monsters[ML5+3].treasure = 0;
X Monsters[ML5+3].possessions = NULL;
X Monsters[ML5+3].sleep = 50;
X Monsters[ML5+3].x = -1;
X Monsters[ML5+3].y = -1;
X Monsters[ML5+3].transformid = -1;
X Monsters[ML5+3].corpsevalue = 0;
X Monsters[ML5+3].monchar = 'c';
X strcpy(Monsters[ML5+3].monstring,"radeligian cateagle");
X strcpy(Monsters[ML5+3].corpsestr,"dead radeligian cateagle");
X Monsters[ML5+3].corpseweight = 400;
X Monsters[ML5+3].talkf = M_TALK_HUNGRY;
X Monsters[ML5+3].movef = M_MOVE_FLUTTER;
X Monsters[ML5+3].meleef = M_MELEE_NORMAL;
X Monsters[ML5+3].strikef = M_NO_OP;
X Monsters[ML5+3].specialf = M_SP_FLUTTER;
X
X
X /* frost demon */
X Monsters[ML5+4].id = ML5+4;
X Monsters[ML5+4].hp = 75;
X Monsters[ML5+4].speed = 3;
X Monsters[ML5+4].hit = 20;
X Monsters[ML5+4].ac = 20;
X Monsters[ML5+4].actions = 4;
X Monsters[ML5+4].tactics = MM_GOOD;
X Monsters[ML5+4].dmg = 20;
X Monsters[ML5+4].sense = 5;
X Monsters[ML5+4].wakeup = 5;
X Monsters[ML5+4].level = 5;
X Monsters[ML5+4].status = HOSTILE+MOBILE;
X Monsters[ML5+4].immunity = pow2(SLEEP)+pow2(POISON)+pow2(FEAR)+pow2(COLD);
X Monsters[ML5+4].xpv = 175;
X Monsters[ML5+4].treasure = 3;
X Monsters[ML5+4].possessions = NULL;
X Monsters[ML5+4].sleep = 50;
X Monsters[ML5+4].x = -1;
X Monsters[ML5+4].y = -1;
X Monsters[ML5+4].transformid = STICKID+4;
X Monsters[ML5+4].corpsevalue = 200;
X Monsters[ML5+4].monchar = 'f';
X strcpy(Monsters[ML5+4].monstring,"frost demon");
X strcpy(Monsters[ML5+4].corpsestr,"frost demon's heart");
X Monsters[ML5+4].corpseweight = 50;
X Monsters[ML5+4].talkf = M_TALK_EVIL;
X Monsters[ML5+4].movef = M_MOVE_SMART;
X Monsters[ML5+4].meleef = M_MELEE_COLD;
X Monsters[ML5+4].strikef = M_STRIKE_SNOWBALL;
X Monsters[ML5+4].specialf = M_SP_DEMON;
X
X
X
X /* spectre */
X Monsters[ML5+5].id = ML5+5;
X Monsters[ML5+5].hp = 75;
X Monsters[ML5+5].speed = 6;
X Monsters[ML5+5].hit = 20;
X Monsters[ML5+5].actions = 5;
X Monsters[ML5+5].tactics = MM_GOOD;
X Monsters[ML5+5].ac = 20;
X Monsters[ML5+5].dmg = 20;
X Monsters[ML5+5].sense = 5;
X Monsters[ML5+5].wakeup = 2;
X Monsters[ML5+5].level = 5;
X Monsters[ML5+5].status = HOSTILE+MOBILE+FLYING;
X Monsters[ML5+5].immunity = pow2(SLEEP)+pow2(POISON)+pow2(FEAR);
X Monsters[ML5+5].xpv = 200;
X Monsters[ML5+5].treasure = 0;
X Monsters[ML5+5].possessions = NULL;
X Monsters[ML5+5].sleep = 50;
X Monsters[ML5+5].x = -1;
X Monsters[ML5+5].y = -1;
X Monsters[ML5+5].transformid = CLOAKID+1;
X Monsters[ML5+5].corpsevalue = 200;
X Monsters[ML5+5].monchar = 'S';
X strcpy(Monsters[ML5+5].monstring,"spectre");
X strcpy(Monsters[ML5+5].corpsestr,"spectre's veil");
X Monsters[ML5+5].corpseweight = 10;
X Monsters[ML5+5].talkf = M_TALK_EVIL;
X Monsters[ML5+5].movef = M_MOVE_SPIRIT;
X Monsters[ML5+5].meleef = M_MELEE_SPIRIT;
X Monsters[ML5+5].strikef = M_NO_OP;
X Monsters[ML5+5].specialf = M_NO_OP;
X
X
X
X
X /* Necromancer */
X Monsters[ML5+6].id = ML5+6;
X Monsters[ML5+6].hp = 50;
X Monsters[ML5+6].speed = 5;
X Monsters[ML5+6].hit = 12;
X Monsters[ML5+6].actions = 4;
X Monsters[ML5+6].tactics = MM_TIMID+MM_GOOD;
X Monsters[ML5+6].ac = 13;
X Monsters[ML5+6].dmg = 10;
X Monsters[ML5+6].sense = 5;
X Monsters[ML5+6].wakeup = 5;
X Monsters[ML5+6].level = 5;
X Monsters[ML5+6].status = HOSTILE+MOBILE+COWARDLY;
X Monsters[ML5+6].immunity = pow2(FLAME)+pow2(COLD)+pow2(ELECTRICITY);
X Monsters[ML5+6].xpv = 205;
X Monsters[ML5+6].treasure = 4;
X Monsters[ML5+6].possessions = NULL;
X Monsters[ML5+6].sleep = 50;
X Monsters[ML5+6].x = -1;
X Monsters[ML5+6].y = -1;
X Monsters[ML5+6].transformid = -1;
X Monsters[ML5+6].corpsevalue = 500;
X Monsters[ML5+6].monchar = 'n';
X strcpy(Monsters[ML5+6].monstring,"necromancer");
X strcpy(Monsters[ML5+6].corpsestr,"necromancer's sigil");
X Monsters[ML5+6].corpseweight = 10;
X Monsters[ML5+6].talkf = M_TALK_EVIL;
X Monsters[ML5+6].movef = M_MOVE_SMART;
X Monsters[ML5+6].meleef = M_MELEE_NORMAL;
X Monsters[ML5+6].strikef = M_NO_OP;
X Monsters[ML5+6].specialf = M_SP_SPELL;
X
X
X
X /* Shadow Spirit */
X Monsters[ML5+7].id = ML5+7;
X Monsters[ML5+7].hp = 40;
X Monsters[ML5+7].speed = 7;
X Monsters[ML5+7].hit = 18;
X Monsters[ML5+7].actions = 3;
X Monsters[ML5+7].tactics = MM_AVERAGE;
X Monsters[ML5+7].ac = 18;
X Monsters[ML5+7].dmg = 20;
X Monsters[ML5+7].sense = 5;
X Monsters[ML5+7].wakeup = 5;
X Monsters[ML5+7].level = 5;
X Monsters[ML5+7].status = HOSTILE+MOBILE+INTANGIBLE;
X Monsters[ML5+7].immunity = pow2(NORMAL_DAMAGE);
X Monsters[ML5+7].xpv = 175;
X Monsters[ML5+7].treasure = 2;
X Monsters[ML5+7].possessions = NULL;
X Monsters[ML5+7].sleep = 50;
X Monsters[ML5+7].x = -1;
X Monsters[ML5+7].y = -1;
X Monsters[ML5+7].transformid = SCROLLID+22;
X Monsters[ML5+7].corpsevalue = 10;
X Monsters[ML5+7].monchar = 'S';
X strcpy(Monsters[ML5+7].monstring,"shadow spirit");
X strcpy(Monsters[ML5+7].corpsestr,"shadowstuff");
X Monsters[ML5+7].corpseweight = 2;
X Monsters[ML5+7].talkf = M_TALK_EVIL;
X Monsters[ML5+7].movef = M_MOVE_SPIRIT;
X Monsters[ML5+7].meleef = M_MELEE_SPIRIT;
X Monsters[ML5+7].strikef = M_NO_OP;
X Monsters[ML5+7].specialf = M_SP_BLACKOUT;
X
X
X
X
X
X
X /* the fire elemental */
X Monsters[ML6+0].id = ML6+0;
X Monsters[ML6+0].hp = 125;
X Monsters[ML6+0].speed = 4;
X Monsters[ML6+0].hit = 20;
X Monsters[ML6+0].ac = 0;
X Monsters[ML6+0].actions = 4;
X Monsters[ML6+0].tactics = MM_AVERAGE;
X Monsters[ML6+0].dmg = 50;
X Monsters[ML6+0].sense = 10;
X Monsters[ML6+0].wakeup = 2;
X Monsters[ML6+0].level = 6;
X Monsters[ML6+0].status = HOSTILE+MOBILE+FLYING;
X Monsters[ML6+0].immunity = pow2(NORMAL_DAMAGE)+pow2(FLAME)+
X pow2(SLEEP)+pow2(POISON);
X Monsters[ML6+0].xpv = 250;
X Monsters[ML6+0].treasure = 0;
X Monsters[ML6+0].possessions = NULL;
X Monsters[ML6+0].sleep = 100;
X Monsters[ML6+0].x = -1;
X Monsters[ML6+0].y = -1;
X Monsters[ML6+0].transformid = STICKID+7;
X Monsters[ML6+0].corpsevalue = 200;
X Monsters[ML6+0].monchar = 'F';
X strcpy(Monsters[ML6+0].monstring,"fire elemental");
X strcpy(Monsters[ML6+0].corpsestr,"essence of fire elemental");
X Monsters[ML6+0].corpseweight = 1;
X Monsters[ML6+0].talkf = M_TALK_SILENT;
X Monsters[ML6+0].movef = M_MOVE_NORMAL;
X Monsters[ML6+0].meleef = M_MELEE_FIRE;
X Monsters[ML6+0].strikef = M_STRIKE_FBALL;
X Monsters[ML6+0].specialf = M_NO_OP;
X
X
X
X /* the air elemental */
X Monsters[ML6+1].id = ML6+1;
X Monsters[ML6+1].hp = 125;
X Monsters[ML6+1].speed = 2;
X Monsters[ML6+1].hit = 25;
X Monsters[ML6+1].actions = 5;
X Monsters[ML6+1].tactics = MM_AVERAGE;
X Monsters[ML6+1].ac = 0;
X Monsters[ML6+1].dmg = 20;
X Monsters[ML6+1].sense = 10;
X Monsters[ML6+1].wakeup = 2;
X Monsters[ML6+1].level = 6;
X Monsters[ML6+1].status = HOSTILE+MOBILE+FLYING+INTANGIBLE;
X Monsters[ML6+1].immunity = pow2(NORMAL_DAMAGE)+pow2(SLEEP)+pow2(POISON);
X Monsters[ML6+1].xpv = 250;
X Monsters[ML6+1].treasure = 0;
X Monsters[ML6+1].possessions = NULL;
X Monsters[ML6+1].sleep = 100;
X Monsters[ML6+1].x = -1;
X Monsters[ML6+1].y = -1;
X Monsters[ML6+1].transformid = CLOAKID+2;
X Monsters[ML6+1].corpsevalue = 200;
X Monsters[ML6+1].monchar = 'A';
X strcpy(Monsters[ML6+1].monstring,"air elemental");
X strcpy(Monsters[ML6+1].corpsestr,"essence of air elemental");
X Monsters[ML6+1].corpseweight = 1;
X Monsters[ML6+1].talkf = M_TALK_SILENT;
X Monsters[ML6+1].movef = M_MOVE_FLUTTER;
X Monsters[ML6+1].meleef = M_MELEE_NORMAL;
X Monsters[ML6+1].strikef = M_NO_OP;
X Monsters[ML6+1].specialf = M_SP_WHIRL;
X
X /* the water elemental */
X Monsters[ML6+2].id = ML6+2;
X Monsters[ML6+2].hp = 100;
X Monsters[ML6+2].speed = 6;
X Monsters[ML6+2].hit = 15;
X Monsters[ML6+2].ac = 10;
X Monsters[ML6+2].actions = 4;
X Monsters[ML6+2].tactics = MM_AVERAGE;
X Monsters[ML6+2].dmg = 30;
X Monsters[ML6+2].sense = 5;
X Monsters[ML6+2].wakeup = 1;
X Monsters[ML6+2].level = 6;
X Monsters[ML6+2].status = HOSTILE+MOBILE+SWIMMING;
X Monsters[ML6+2].immunity = pow2(NORMAL_DAMAGE)+pow2(SLEEP);
X Monsters[ML6+2].xpv = 250;
X Monsters[ML6+2].treasure = 0;
X Monsters[ML6+2].possessions = NULL;
X Monsters[ML6+2].sleep = 100;
X Monsters[ML6+2].x = -1;
X Monsters[ML6+2].y = -1;
X Monsters[ML6+2].transformid = STICKID+14;
X Monsters[ML6+2].corpsevalue = 200;
X Monsters[ML6+2].monchar = 'W';
X strcpy(Monsters[ML6+2].monstring,"water elemental");
X strcpy(Monsters[ML6+2].corpsestr,"essence of water elemental");
X Monsters[ML6+2].corpseweight = 1;
X Monsters[ML6+2].talkf = M_TALK_SILENT;
X Monsters[ML6+2].movef = M_MOVE_NORMAL;
X Monsters[ML6+2].meleef = M_MELEE_NORMAL;
X Monsters[ML6+2].strikef = M_NO_OP;
X Monsters[ML6+2].specialf = M_NO_OP;
X
X /* the earth elemental */
X Monsters[ML6+3].id = ML6+3;
X Monsters[ML6+3].hp = 200;
X Monsters[ML6+3].speed = 15;
X Monsters[ML6+3].hit = 20;
X Monsters[ML6+3].actions = 2;
X Monsters[ML6+3].tactics = MM_FORCED+MM_AVERAGE;
X Monsters[ML6+3].hitloc = LOW;
X Monsters[ML6+3].ac = 25;
X Monsters[ML6+3].dmg = 100;
X Monsters[ML6+3].sense = 5;
X Monsters[ML6+3].wakeup = 1;
X Monsters[ML6+3].level = 6;
X Monsters[ML6+3].status = HOSTILE+MOBILE;
X Monsters[ML6+3].immunity = pow2(POISON)+pow2(SLEEP);
X Monsters[ML6+3].xpv = 250;
X Monsters[ML6+3].treasure = 0;
X Monsters[ML6+3].possessions = NULL;
X Monsters[ML6+3].sleep = 100;
X Monsters[ML6+3].x = -1;
X Monsters[ML6+3].y = -1;
X Monsters[ML6+3].transformid = CLOAKID+4;
X Monsters[ML6+3].corpsevalue = 200;
X Monsters[ML6+3].monchar = 'E';
X strcpy(Monsters[ML6+3].monstring,"earth elemental");
X strcpy(Monsters[ML6+3].corpsestr,"essence of earth elemental");
X Monsters[ML6+3].corpseweight = 1;
X Monsters[ML6+3].talkf = M_TALK_SILENT;
X Monsters[ML6+3].movef = M_MOVE_SPIRIT;
X Monsters[ML6+3].meleef = M_MELEE_NORMAL;
X Monsters[ML6+3].strikef = M_NO_OP;
X Monsters[ML6+3].specialf = M_NO_OP;
X
X /* the bandersnatch */
X Monsters[ML6+4].id = ML6+4;
X Monsters[ML6+4].hp = 100;
X Monsters[ML6+4].speed = 2;
X Monsters[ML6+4].hit = 20;
X Monsters[ML6+4].actions = 8;
X Monsters[ML6+4].tactics = MM_BERSERK+MM_POOR;
X Monsters[ML6+4].ac = 20;
X Monsters[ML6+4].dmg = 50;
X Monsters[ML6+4].sense = 3;
X Monsters[ML6+4].wakeup = 1;
X Monsters[ML6+4].level = 6;
X Monsters[ML6+4].status = HOSTILE+MOBILE;
X Monsters[ML6+4].immunity = pow2(SLEEP);
X Monsters[ML6+4].xpv = 250;
X Monsters[ML6+4].treasure = 1;
X Monsters[ML6+4].possessions = NULL;
X Monsters[ML6+4].sleep = 50;
X Monsters[ML6+4].x = -1;
X Monsters[ML6+4].y = -1;
X Monsters[ML6+4].transformid = -1;
X Monsters[ML6+4].corpsevalue = 100;
X Monsters[ML6+4].monchar = 'b';
X strcpy(Monsters[ML6+4].monstring,"bandersnatch");
X strcpy(Monsters[ML6+4].corpsestr,"bandersnatch hide");
X Monsters[ML6+4].corpseweight = 1000;
X Monsters[ML6+4].talkf = M_TALK_SILENT;
X Monsters[ML6+4].movef = M_MOVE_FLUTTER;
X Monsters[ML6+4].meleef = M_MELEE_NORMAL;
X Monsters[ML6+4].strikef = M_NO_OP;
X Monsters[ML6+4].specialf = M_NO_OP;
X
X
X
X
X /* the liche */
X Monsters[ML6+5].id = ML6+5;
X Monsters[ML6+5].hp = 100;
X Monsters[ML6+5].speed = 3;
X Monsters[ML6+5].hit = 30;
X Monsters[ML6+5].ac = 20;
X Monsters[ML6+5].actions = 6;
X Monsters[ML6+5].tactics = MM_GOOD;
X Monsters[ML6+5].dmg = 50;
X Monsters[ML6+5].sense = 5;
X Monsters[ML6+5].wakeup = 1;
X Monsters[ML6+5].level = 6;
X Monsters[ML6+5].status = HOSTILE+MOBILE;
X Monsters[ML6+5].immunity = pow2(SLEEP)+pow2(FEAR)+pow2(POISON)+pow2(FLAME);
X Monsters[ML6+5].xpv = 300;
X Monsters[ML6+5].treasure = 5;
X Monsters[ML6+5].possessions = NULL;
X Monsters[ML6+5].sleep = 50;
X Monsters[ML6+5].x = -1;
X Monsters[ML6+5].y = -1;
X Monsters[ML6+5].transformid = -1;
X Monsters[ML6+5].corpsevalue = 1000;
X Monsters[ML6+5].monchar = 'L';
X strcpy(Monsters[ML6+5].monstring,"lich");
X strcpy(Monsters[ML6+5].corpsestr,"lich's sceptre");
X Monsters[ML6+5].corpseweight = 100;
X Monsters[ML6+5].talkf = M_TALK_EVIL;
X Monsters[ML6+5].movef = M_MOVE_SMART;
X Monsters[ML6+5].meleef = M_MELEE_SPIRIT;
X Monsters[ML6+5].strikef = M_NO_OP;
X Monsters[ML6+5].specialf = M_SP_SPELL;
X
X
X
X
X /* the Triton */
X Monsters[ML6+6].id = ML6+6;
X Monsters[ML6+6].hp = 100;
X Monsters[ML6+6].speed = 5;
X Monsters[ML6+6].hit = 20;
X Monsters[ML6+6].ac = 20;
X Monsters[ML6+6].actions = 6;
X Monsters[ML6+6].tactics = MM_GOOD;
X Monsters[ML6+6].dmg = 30;
X Monsters[ML6+6].sense = 5;
X Monsters[ML6+6].wakeup = 3;
X Monsters[ML6+6].level = 6;
X Monsters[ML6+6].status = HOSTILE+MOBILE+SWIMMING;
X Monsters[ML6+6].immunity = pow2(SLEEP);
X Monsters[ML6+6].xpv = 300;
X Monsters[ML6+6].treasure = 3;
X Monsters[ML6+6].possessions = NULL;
X Monsters[ML6+6].sleep = 30;
X Monsters[ML6+6].x = -1;
X Monsters[ML6+6].y = -1;
X Monsters[ML6+6].transformid = -1;
X Monsters[ML6+6].corpsevalue = 500;
X Monsters[ML6+6].monchar = 'T';
X strcpy(Monsters[ML6+6].monstring,"triton");
X strcpy(Monsters[ML6+6].corpsestr,"triton's pearl");
X Monsters[ML6+6].corpseweight = 10;
X Monsters[ML6+6].talkf = M_TALK_EVIL;
X Monsters[ML6+6].movef = M_MOVE_SMART;
X Monsters[ML6+6].meleef = M_MELEE_NORMAL;
X Monsters[ML6+6].strikef = M_NO_OP;
X Monsters[ML6+6].specialf = M_SP_SPELL;
X
X
X
X /* the master thief */
X Monsters[ML6+7].id = ML6+7;
X Monsters[ML6+7].hp = 100;
X Monsters[ML6+7].speed = 3;
X Monsters[ML6+7].hit = 0;
X Monsters[ML6+7].ac = 20;
X Monsters[ML6+7].actions = 3;
X Monsters[ML6+7].tactics = MM_TIMID+MM_GOOD;
X Monsters[ML6+7].dmg = 0;
X Monsters[ML6+7].sense = 10;
X Monsters[ML6+7].wakeup = 3;
X Monsters[ML6+7].level = 6;
X Monsters[ML6+7].status = HOSTILE+GREEDY+SWIMMING;
X Monsters[ML6+7].immunity = 0;
X Monsters[ML6+7].xpv = 200;
X Monsters[ML6+7].treasure = 5;
X Monsters[ML6+7].possessions = NULL;
X Monsters[ML6+7].sleep = 0;
X Monsters[ML6+7].x = -1;
X Monsters[ML6+7].y = -1;
X Monsters[ML6+7].transformid = -1;
X Monsters[ML6+7].corpsevalue = 0;
X if (random_range(2)) {
X Monsters[ML6+7].monchar = 'm';
X strcpy(Monsters[ML6+7].monstring,"man");
X }
X else {
X Monsters[ML6+7].monchar = 'w';
X strcpy(Monsters[ML6+7].monstring,"woman");
X }
X strcpy(Monsters[ML6+7].corpsestr,"dead master thief");
X Monsters[ML6+7].corpseweight = 10;
X Monsters[ML6+7].talkf = M_TALK_THIEF;
X Monsters[ML6+7].movef = M_MOVE_SMART;
X Monsters[ML6+7].meleef = M_SP_THIEF;
X Monsters[ML6+7].strikef = M_NO_OP;
X Monsters[ML6+7].specialf = M_SP_THIEF;
X
X
X
X /* the behemoth */
X Monsters[ML7+0].id = ML7+0;
X Monsters[ML7+0].hp = 300;
X Monsters[ML7+0].speed = 15;
X Monsters[ML7+0].hit = 30;
X Monsters[ML7+0].actions = 1;
X Monsters[ML7+0].tactics = MM_BERSERK+MM_POOR;
X Monsters[ML7+0].hitloc = HIGH;
X Monsters[ML7+0].ac = 5;
X Monsters[ML7+0].dmg = 120;
X Monsters[ML7+0].sense = 3;
X Monsters[ML7+0].wakeup = 3;
X Monsters[ML7+0].level = 7;
X Monsters[ML7+0].status = HOSTILE+MOBILE+SWIMMING;
X Monsters[ML7+0].immunity = pow2(ELECTRICITY);
X Monsters[ML7+0].xpv = 400;
X Monsters[ML7+0].treasure = 0;
X Monsters[ML7+0].possessions = NULL;
X Monsters[ML7+0].sleep = 100;
X Monsters[ML7+0].x = -1;
X Monsters[ML7+0].y = -1;
X Monsters[ML7+0].transformid = RINGID+2;
X Monsters[ML7+0].corpsevalue = 50;
X Monsters[ML7+0].monchar = 'B';
X strcpy(Monsters[ML7+0].monstring,"behemoth");
X strcpy(Monsters[ML7+0].corpsestr,"behemoth's gonads");
X Monsters[ML7+0].corpseweight = 500;
X Monsters[ML7+0].talkf = M_TALK_STUPID;
X Monsters[ML7+0].movef = M_MOVE_NORMAL;
X Monsters[ML7+0].meleef = M_MELEE_NORMAL;
X Monsters[ML7+0].strikef = M_NO_OP;
X Monsters[ML7+0].specialf = M_SP_HUGE;
X
X
X /* Nazgul */
X Monsters[ML7+1].id = ML7+1;
X Monsters[ML7+1].hp = 250;
X Monsters[ML7+1].speed = 5;
X Monsters[ML7+1].hit = 30;
X Monsters[ML7+1].actions = 9;
X Monsters[ML7+1].tactics = MM_GOOD;
X Monsters[ML7+1].ac = 20;
X Monsters[ML7+1].dmg = 20;
X Monsters[ML7+1].sense = 10;
X Monsters[ML7+1].wakeup = 5;
X Monsters[ML7+1].level = 7;
X Monsters[ML7+1].status = HOSTILE+MOBILE+FLYING;
X Monsters[ML7+1].immunity = pow2(SLEEP)+pow2(POISON)+pow2(FEAR)+pow2(COLD);
X Monsters[ML7+1].xpv = 500;
X Monsters[ML7+1].treasure = 0;
X Monsters[ML7+1].possessions = NULL;
X Monsters[ML7+1].sleep = 0;
X Monsters[ML7+1].x = -1;
X Monsters[ML7+1].y = -1;
X Monsters[ML7+1].transformid = -1;
X Monsters[ML7+1].corpsevalue = 2000;
X Monsters[ML7+1].monchar = 'N';
X strcpy(Monsters[ML7+1].monstring,"nazgul");
X strcpy(Monsters[ML7+1].corpsestr,"nazgul's crown");
X Monsters[ML7+1].corpseweight = 100;
X Monsters[ML7+1].talkf = M_TALK_EVIL;
X Monsters[ML7+1].movef = M_MOVE_SPIRIT;
X Monsters[ML7+1].meleef = M_MELEE_SPIRIT;
X Monsters[ML7+1].strikef = M_NO_OP;
X Monsters[ML7+1].specialf = M_SP_SPELL;
X
X
X /* Unicorn */
X Monsters[ML7+2].id = ML7+2;
X Monsters[ML7+2].hp = 100;
X Monsters[ML7+2].speed = 2;
X Monsters[ML7+2].hit = 100;
X Monsters[ML7+2].actions = 10;
X Monsters[ML7+2].tactics = MM_GOOD+MM_FORCED;
X Monsters[ML7+2].hitloc = CENTER;
X Monsters[ML7+2].ac = 20;
X Monsters[ML7+2].dmg = 50;
X Monsters[ML7+2].sense = 10;
X Monsters[ML7+2].wakeup = 3;
X Monsters[ML7+2].level = 7;
X Monsters[ML7+2].status = 0+MOBILE+SWIMMING;
X Monsters[ML7+2].immunity = pow2(POISON)+pow2(FEAR);
X Monsters[ML7+2].xpv = 400;
X Monsters[ML7+2].treasure = 0;
X Monsters[ML7+2].possessions = NULL;
X Monsters[ML7+2].sleep = 50;
X Monsters[ML7+2].x = -1;
X Monsters[ML7+2].y = -1;
X Monsters[ML7+2].transformid = RINGID+6;
X Monsters[ML7+2].corpsevalue = 50;
X Monsters[ML7+2].monchar = 'U';
X strcpy(Monsters[ML7+2].monstring,"unicorn");
X strcpy(Monsters[ML7+2].corpsestr,"unicorn's horn");
X Monsters[ML7+2].corpseweight = 100;
X Monsters[ML7+2].talkf = M_TALK_SILENT;
X Monsters[ML7+2].movef = M_MOVE_NORMAL;
X Monsters[ML7+2].meleef = M_MELEE_NORMAL;
X Monsters[ML7+2].strikef = M_NO_OP;
X Monsters[ML7+2].specialf = M_MOVE_SCAREDY;
X
X
X /* Rodent of Unusual Size */
X Monsters[ML7+3].id = ML7+3;
X Monsters[ML7+3].hp = 150;
X Monsters[ML7+3].speed = 3;
X Monsters[ML7+3].hit = 20;
X Monsters[ML7+3].actions = 3;
X Monsters[ML7+3].tactics = MM_BERSERK+MM_FORCED;
X Monsters[ML7+3].hitloc = LOW;
X Monsters[ML7+3].ac = 20;
X Monsters[ML7+3].dmg = 50;
X Monsters[ML7+3].sense = 10;
X Monsters[ML7+3].wakeup = 3;
X Monsters[ML7+3].level = 7;
X Monsters[ML7+3].status = MOBILE+HOSTILE+SWIMMING+HUNGRY+M_INVISIBLE;
X Monsters[ML7+3].immunity = pow2(FEAR);
X Monsters[ML7+3].xpv = 300;
X Monsters[ML7+3].treasure = 0;
X Monsters[ML7+3].possessions = NULL;
X Monsters[ML7+3].sleep = 50;
X Monsters[ML7+3].x = -1;
X Monsters[ML7+3].y = -1;
X Monsters[ML7+3].transformid = -1;
X Monsters[ML7+3].corpsevalue = 0;
X Monsters[ML7+3].monchar = 'r';
X strcpy(Monsters[ML7+3].monstring,"rodent of unusual size");
X strcpy(Monsters[ML7+3].corpsestr,"dead R.O.U.S.");
X Monsters[ML7+3].corpseweight = 100;
X Monsters[ML7+3].talkf = M_NO_OP;
X Monsters[ML7+3].movef = M_MOVE_NORMAL;
X Monsters[ML7+3].meleef = M_MELEE_DISEASE;
X Monsters[ML7+3].strikef = M_NO_OP;
X Monsters[ML7+3].specialf = M_SP_SURPRISE;
X
X
X /* Illusory Fiend */
X Monsters[ML7+4].id = ML7+4;
X Monsters[ML7+4].hp = 100;
X Monsters[ML7+4].speed = 5;
X Monsters[ML7+4].hit = 20;
X Monsters[ML7+4].actions = 4;
X Monsters[ML7+4].tactics = MM_FORCED+MM_BERSERK;
X Monsters[ML7+4].hitloc = CENTER;
X Monsters[ML7+4].ac = 25;
X Monsters[ML7+4].dmg = 30;
X Monsters[ML7+4].sense = 10;
X Monsters[ML7+4].wakeup = 2;
X Monsters[ML7+4].level = 7;
X Monsters[ML7+4].status = MOBILE+HOSTILE+GREEDY;
X Monsters[ML7+4].immunity = pow2(OTHER_MAGIC);
X Monsters[ML7+4].xpv = 300;
X Monsters[ML7+4].treasure = 3;
X Monsters[ML7+4].possessions = NULL;
X Monsters[ML7+4].sleep = 50;
X Monsters[ML7+4].x = -1;
X Monsters[ML7+4].y = -1;
X Monsters[ML7+4].transformid = -1;
X Monsters[ML7+4].corpsevalue = 0;
X Monsters[ML7+4].monchar = 'F';
X strcpy(Monsters[ML7+4].monstring,"illusory fiend");
X strcpy(Monsters[ML7+4].corpsestr,"not much of anything");
X Monsters[ML7+4].corpseweight = 0;
X Monsters[ML7+4].talkf = M_NO_OP;
X Monsters[ML7+4].movef = M_MOVE_NORMAL;
X Monsters[ML7+4].meleef = M_MELEE_NORMAL;
X Monsters[ML7+4].strikef = M_NO_OP;
X Monsters[ML7+4].specialf = M_SP_ILLUSION;
X
X
X /* The Mutant */
X /* A random new kind of creature each game */
X Monsters[ML7+5].id = ML7+5;
X Monsters[ML7+5].hp = random_range(200);
X Monsters[ML7+5].speed = (random_range(3) * random_range(7))+1;
X Monsters[ML7+5].hit = 10+random_range(40);
X Monsters[ML7+5].actions = random_range(8);
X switch(random_range(3)) {
X case 0: Monsters[ML7+5].tactics = MM_POOR; break;
X case 1: Monsters[ML7+5].tactics = MM_AVERAGE; break;
X case 2: Monsters[ML7+5].tactics = MM_GOOD; break;
X }
X if (random_range(3) == 2) Monsters[ML7+5].tactics += MM_FORCED;
X if (random_range(2) == 1) Monsters[ML7+5].tactics += MM_BERSERK;
X else if (random_range(2) == 1) Monsters[ML7+5].tactics += MM_TIMID;
X Monsters[ML7+5].hitloc = random_range(4);
X Monsters[ML7+5].ac = random_range(30)+5;
X Monsters[ML7+5].dmg = random_range(30)+5;
X Monsters[ML7+5].sense = random_range(5)+3;
X Monsters[ML7+5].wakeup = random_range(5);
X Monsters[ML7+5].level = 7;
X Monsters[ML7+5].status = MOBILE+HOSTILE;
X Monsters[ML7+5].immunity =
X pow2(random_range(NUMIMMUNITIES-1)+1) +
X pow2(random_range(NUMIMMUNITIES-1)+1);
X Monsters[ML7+5].xpv = 350;
X Monsters[ML7+5].treasure = random_range(5);
X Monsters[ML7+5].possessions = NULL;
X Monsters[ML7+5].sleep = random_range(101);
X Monsters[ML7+5].x = -1;
X Monsters[ML7+5].y = -1;
X Monsters[ML7+5].transformid = -1;
X Monsters[ML7+5].corpsevalue = 0;
X Monsters[ML7+5].monchar = 'M';
X strcpy(Monsters[ML7+5].monstring,"mutant");
X strcpy(Monsters[ML7+5].corpsestr,"irradiated germ plasm");
X Monsters[ML7+5].corpseweight = 0;
X
X /* hardwired constants, yikes */
X Monsters[ML7+5].talkf = 101+random_range(12);
X if (random_range(3)==1)
X Monsters[ML7+5].talkf = M_NO_OP;
X Monsters[ML7+5].movef = 501+random_range(9);
X if (random_range(3)==1)
X Monsters[ML7+5].movef = M_NO_OP;
X Monsters[ML7+5].meleef = 401+random_range(12);
X if (random_range(3)==1)
X Monsters[ML7+5].meleef = M_NO_OP;
X Monsters[ML7+5].strikef = 301+random_range(6);
X if (random_range(3)==1)
X Monsters[ML7+5].strikef = M_NO_OP;
X Monsters[ML7+5].specialf = 201+random_range(16);
X if (random_range(3)==1)
X Monsters[ML7+5].specialf = M_NO_OP;
X
X
X /* ... */
X}
END_OF_oinitmon4to7.c
if test 37500 -ne `wc -c omega.motd <<'END_OF_omega.motd'
X *******
X ***** *****
X ***** *****
X **** welcome ****
X *** t o ***
X *** omega ***
X **** ****
X **** ****
X * ** ** *
X ***** *****
X
X omega is copyright (C) 1987 by Laurence R. Brothers
X see public license (use P command) for more information
X
X Bug reports, suggestions, etc. to brothers@paul.rutgers.edu
X
X Current News:
X * This is version 0.60.2 (alpha)
X * Many bugfixes, some minor new features
X * The omega wizard for this site is: brothers
END_OF_omega.motd
if test 715 -ne `wc -c