[comp.sources.games] v03i055: omega - rogue like dungeon exploration, Part08/15

games-request@tekred.TEK.COM (01/20/88)

Submitted by: "Laurence R. Brothers" <brothers@paul.rutgers.edu>
Comp.sources.games: Volume 3, Issue 55
Archive-name: omega/Part08

#! /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 <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 8 (of 15)."
# Contents:  odefs.h oinititem2.c omega.update.history
# Wrapped by billr@tekred on Mon Jan 18 10:20:32 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f odefs.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"odefs.h\"
else
echo shar: Extracting \"odefs.h\" \(19414 characters\)
sed "s/^X//" >odefs.h <<'END_OF_odefs.h'
X/* omega copyright (c) 1987 by Laurence Raphael Brothers */
X/* This file is the header file for all omega modules */
X/* odefs.h */
X
X/* Implementor should set the following five definitions: */
X
X/* OMEGALIB is where all the data files reside. 
X   note the final / is necessary 
X   this might usually be "/usr/games/lib/omegalib/" */
X
X#define OMEGALIB "/u1/brothers/omega/lib/"
X
X/* set WIZARD to implementor's username */
X#define WIZARD "brothers"
X
X/* If set to 0, this will allow players to make copies of saved games */
X/* If set to 1, only the implementor will be allowed to restore
X   copied games */
X/*The implementor can now enable all currently saved games by making
X   omega.saves a null file */
X/* If omega.saves is absent, all files will permanently be enabled for
X   restore, as well */
X#define DESTRUCTIVE_RESTORE 1
X
X/* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */
X/* dbx still instercepts the signals first, so its ok for debugging */
X#define CATCH_SIGNALS 1
X
X/* Don't change anything from here on (unless you know what you're doing) */
X#define VERSION 60
X#define VERSIONSTRING "omega version 0.60 (alpha)"
X
X#ifndef TRUE
X#define TRUE 1
X#define FALSE 0
X#endif
X
X#define VACANT 0
X#define NULL 0
X#define ABORT -1
X#define CASHVALUE -2
X
X/* These next eight should never be changed -- some places have hardwired
Xconstants based on these values. I'll fix this eventually when I make
Xomega compatible with windowing systems like NeWS and sunview */ 
X
X#define WIDTH 64
X#define LENGTH 64
X#define TOPEDGE 0
X#define EDGE1 16
X#define EDGE2 32
X#define EDGE3 48
X#define BOTTOMEDGE 63
X#define NUMLEVELS 40
X
X
X/* player game status */
X#define DEAD 1
X#define QUIT 2
X#define WIN 3
X#define BIGWIN 4
X
X/* somewhat arbitrary -- MAXITEMS is so a..z can index items */
X#define MAXITEMS 26
X
X/* kind of arbitrary */
X#define MAXROOMS 48
X#define MAXCONNECTIONS 4 
X
X/* some random characters */
X#define ESCAPE 27
X#define RETURN 13
X#define LINEFEED 10
X#define BACKSPACE 8
X#define DELETE 127
X
X
X/* tac mode action definitions */
X#define DISENGAGE 10
X#define BLOCK 20
X#define CUT 30
X#define THRUST 40
X#define MAGIC 50
X#define LUNGE 60
X#define RIPOSTE 70
X#define WIELD 80
X#define PICK_UP 90
X
X/* as in attack low, block high, etc. */
X/* These values may be added to the ones above to get things like
X   block high, cut low, etc. CLEVER is only used by some monsters
X   to cheat with.... */
X#define LOW 1
X#define CENTER 2
X#define HIGH 3
X#define CLEVER 4
X
X
X/* weapon types */
X#define CUTTING 1
X#define THRUSTING 2
X#define STRIKING 3
X#define MISSILE 4
X
X/* random aux constants */
X/* aux field for private residences in city */
X#define BURGLED 2
X#define LOCKED 1
X#define UNLOCKED 0
X
X/* bow and crossbow object aux fields */
X#define LOADED 1
X#define UNLOADED 0
X
X/* alignment used randomly throughout*/
X#define LAWFUL 1
X#define CHAOTIC 2
X#define NEUTRAL 3
X
X/* spells */
X#define NUMSPELLS 40
X
X#define S_MON_DET 0
X#define S_OBJ_DET 1
X#define S_MISSILE 2
X#define S_FIREBOLT 3
X#define S_TELEPORT 4
X#define S_LBALL 5
X#define S_SLEEP 6
X#define S_DISRUPT 7
X#define S_DISINTEGRATE 8
X#define S_POLYMORPH 9
X#define S_HEAL 10
X#define S_DISPEL 11
X#define S_IDENTIFY 12
X#define S_BREATHE 13
X#define S_INVISIBLE 14
X#define S_WARP 15
X#define S_ENCHANT 16
X#define S_BLESS 17
X#define S_RESTORE 18
X#define S_CURE 19
X#define S_TRUESIGHT 20
X#define S_HELLFIRE 21
X#define S_KNOWLEDGE 22
X#define S_HERO 23
X#define S_RETURN 24
X#define S_DESECRATE 25
X#define S_HASTE 26
X#define S_SUMMON 27
X#define S_SANCTUARY 28
X#define S_ACCURACY 29
X#define S_RITUAL 30
X#define S_INVULNERABLE 31
X#define S_APPORT 32
X#define S_SHADOWFORM 33
X#define S_ALERT 34
X#define S_REGENERATE 35
X#define S_SANCTIFY 36
X#define S_CLAIRVOYANCE 37
X#define S_DRAIN 38
X#define S_LEVITATE 39
X
X
X
X/* ranks in guilds, etc */
X#define NUMRANKS 8
X
X#define LEGION 0
X#define ARENA 1
X#define COLLEGE 2
X#define THIEVES 3
X#define CIRCLE 4
X#define NOBILITY 5
X#define PRIESTHOOD 6
X#define ADEPT 7
X
X#define LEGIONAIRE 1
X#define CENTURION 2
X#define FORCE_LEADER 3
X#define COLONEL 4
X#define COMMANDANT 5
X
X#define TRAINEE 1
X#define BESTIARIUS 2
X#define RETIARIUS 3
X#define GLADIATOR 4
X#define CHAMPION 5
X
X#define NOVICE 1
X#define STUDENT 2
X#define PRECEPTOR 3
X#define MAGE 4
X#define ARCHMAGE 5
X
X#define TMEMBER 1
X#define ATHIEF 2
X#define THIEF 3
X#define TMASTER 4
X#define SHADOWLORD 5
X
X#define INITIATE 1
X#define ENCHANTER 2
X#define SORCEROR 3
X#define HIGHSORCEROR 4
X#define PRIME 5
X
X#define COMMONER 1
X#define ESQUIRE 2
X#define KNIGHT 3
X#define LORD 4
X#define DUKE 5
X
X#define LAY 1
X#define ACOLYTE 2
X#define PRIEST 3
X#define SPRIEST 4
X#define HIGHPRIEST 5
X
X/* different priesthoods */
X#define ODIN 1
X#define SET 2
X#define ATHENA 3
X#define HECATE 4
X#define DRUID 5
X#define DESTINY 6
X
X
X
X/* MONSTER STATUS/ABILITY BITS */
X#define AWAKE 1
X#define MOBILE 2
X#define HOSTILE 4
X#define WANDERING 16
X#define HUNGRY 32
X#define GREEDY 64
X#define NEEDY  128
X#define COWARDLY 256
X#define FLYING 512
X#define SWIMMING 1024
X#define INTANGIBLE 2048
X#define M_INVISIBLE 4096
X
X/* Monster tactical melee tendencies */
X#define MM_FORCED 1
X#define MM_BERSERK 2
X#define MM_TIMID 4
X#define MM_POOR 8
X#define MM_AVERAGE 16
X#define MM_GOOD 32
X
X/* PLAYER STATUS INDICES */
X#define NUMSTATI 24
X
X#define ACCURACY 0
X#define BLINDED 1
X#define SLOWED 2
X#define DISPLACED 3
X#define SLEPT 4
X#define DISEASED 5
X#define POISONED 6
X#define HASTED 7
X#define BREATHING 8
X#define INVISIBLE 9
X#define REGENERATING 10
X#define VULNERABLE 11
X#define BERSERK 12
X#define IMMOBILE 13
X#define ALERT 14
X#define AFRAID 15
X#define HERO 16
X#define LEVITATING 17
X#define ACCURATE 18
X#define TRUESIGHT 19
X#define SHADOWFORM 20
X#define ILLUMINATION 21
X#define PROTECTION 22
X/* PROTECTION is deviant -- indicates protective value, not duration */
X#define RETURNING 23
X/* RETURNING is somewhat deviant--how many turns 'til RETURN spell goes off */
X
X/* player immunity indices */
X/* also monster immunity bits (2^n) */
X/* also damage types */
X#define NUMIMMUNITIES 14
X
X#define UNSTOPPABLE 0 
X#define NORMAL_DAMAGE 1
X#define FLAME 2
X#define COLD 3
X#define ELECTRICITY 4
X#define POISON 5
X#define ACID 6
X#define FEAR 7
X#define SLEEP 8
X#define NEGENERGY 9
X#define OTHER_MAGIC 10
X#define THEFT 11
X#define GAZE 12
X#define INFECTION 13
X#define EVERYTHING -1
X
X/* room string id */
X/* for use in roomname() */
X#define NUMROOMNAMES 30
X
X/* normal room name indices start after the RS_ constants */
X#define ROOMBASE 16
X
X#define RS_DRUID 15
X#define RS_HECATE 14
X#define RS_ATHENA 13
X#define RS_SET 12
X#define RS_ODIN 11
X#define RS_DESTINY 10
X#define RS_ADEPT 9
X#define RS_WYRM 8
X#define RS_OCEAN 7 
X#define RS_PONDS 6
X#define RS_DRAGONLORD 5
X#define RS_GOBLINKING 4
X#define RS_CAVERN 3
X#define RS_CORRIDOR 2
X#define RS_WALLSPACE 1
X
X/* objects and terrain; characters to draw */
X#define SPACE ' '
X#define WALL '#'
X#define OPEN_DOOR '|'
X#define CLOSED_DOOR '-'
X#define ABYSS '0'
X#define WHIRLWIND '6'
X#define WHIRLWIND2 '9'
X#define LAVA '`'
X#define HEDGE '\"'
X#define WATER '~' 
X#define FIRE ';'
X#define TRAP '^'
X#define LIFT '_'
X#define UP '<'
X#define DOWN '>'
X#define FLOOR '.'
X#define PLAYER '@'
X#define CORPSE '+'
X#define STATUE '1'
X#define ALTAR '8'
X#define CASH '$'      /* various kinds of money */
X#define PILE '*'      /* several objects in one place */
X#define FOOD '%'
X#define WEAPON ')'
X#define MISSILEWEAPON '('
X#define SCROLL '?'
X#define POTION '!'
X#define ARMOR ']'
X#define SHIELD '['
X#define CLOAK '}'
X#define BOOTS '{'
X#define STICK '/'
X#define RING '='
X#define THING '\\'
X#define ARTIFACT '&'
X#define PORTAL 'O'
X/* unused : 2 3 4 5 7 */
X
X
X/* player option bits */
X#define BELLICOSE 1 
X#define JUMPMOVE 2
X#define RUNSTOP 4
X#define PICKUP 8
X#define ASKME 16
X#define CONFIRM 32
X
X/* This has to be changed whenever an item is added */
X#define NUMSCROLLS 23
X#define NUMPOTIONS 18
X#define NUMFOODS 15
X#define NUMTHINGS 26
X#define NUMWEAPONS 38
X#define NUMARMOR 17
X#define NUMSHIELDS 8
X#define NUMCLOAKS 7
X#define NUMBOOTS 6
X#define NUMRINGS 10
X#define NUMSTICKS 16
X#define NUMARTIFACTS 21
X
X/* running sum of itemtypes, for indexing into Objects array */
X#define THINGID 0 
X#define FOODID NUMTHINGS
X#define SCROLLID (FOODID + NUMFOODS)
X#define POTIONID (SCROLLID + NUMSCROLLS)
X#define WEAPONID (POTIONID + NUMPOTIONS)
X#define ARMORID (WEAPONID + NUMWEAPONS)
X#define SHIELDID (ARMORID + NUMARMOR)
X#define CLOAKID (SHIELDID + NUMSHIELDS)
X#define BOOTID (CLOAKID + NUMCLOAKS)
X#define RINGID (BOOTID + NUMBOOTS)
X#define STICKID (RINGID + NUMRINGS)
X#define ARTIFACTID (STICKID + NUMSTICKS)
X#define CASHID (ARTIFACTID+NUMARTIFACTS)
X/* Corpse's aux field is monster id */
X#define CORPSEID (CASHID+1)
X
X#define TOTALITEMS (CORPSEID+1) 
X
X/* describing unique items and monsters */
X#define COMMON 0
X#define UNIQUE_UNMADE 1
X#define UNIQUE_MADE 2
X
X/* item function id's */
X#define I_NO_OP 0
X#define I_NOTHING 1
X
X  /* note some of these functions are for other types of items too */
X
X    /* scroll functions */
X#define I_BLESS 101
X#define I_ACQUIRE 102
X#define I_ENCHANT 103
X#define I_TELEPORT 104
X#define I_WISH 105
X#define I_CLAIRVOYANCE 106
X#define I_DISPLACE 107
X#define I_ID 108
X#define I_FIREFLASH 109
X#define I_SPELLS 110
X#define I_JANE_T 111
X#define I_ALERT 112
X#define I_FLUX 113
X#define I_CHARGE 114
X#define I_WARP 115
X#define I_KNOWLEDGE 116
X#define I_LAW 117
X#define I_HINT 118
X#define I_HERO 119
X#define I_TRUESIGHT 120
X#define I_ILLUMINATE 121
X
X    /* potion functions */
X#define I_HEAL 201
X#define I_OBJDET 202
X#define I_MONDET 203
X#define I_SLEEP_SELF 204
X#define I_RESTORE 205
X#define I_NEUTRALIZE_POISON 206
X#define I_SPEED 207
X#define I_AZOTH 208
X#define I_REGENERATE 210
X#define I_INVISIBLE 211
X#define I_BREATHING 212
X#define I_FEAR_RESIST 213
X#define I_AUGMENT 214
X#define I_CHAOS 215
X#define I_ACCURACY 216
X#define I_LEVITATION 217
X#define I_CURE 218
X
X    /* stick functions */
X#define I_FIREBOLT 301
X#define I_LBOLT 302
X#define I_MISSILE 303
X#define I_SLEEP_OTHER 304
X#define I_FIREBALL 305
X#define I_LBALL 306
X#define I_SUMMON 307
X#define I_HIDE 308
X#define I_DISRUPT 309
X#define I_DISINTEGRATE 310
X#define I_SNOWBALL 311
X#define I_APPORT 312
X#define I_DISPEL 313
X#define I_POLYMORPH 314
X
X    /* food functions */
X#define I_FOOD 401
X#define I_LEMBAS 402
X#define I_STIM 403
X#define I_POW 404
X#define I_IMMUNE 405
X#define I_POISON_FOOD 406
X#define I_CORPSE 407
X#define I_PEPPER_FOOD 408
X
X    /* boots functions */
X#define I_PERM_SPEED 501
X#define I_PERM_HERO 502
X#define I_PERM_LEVITATE 503
X#define I_PERM_AGILITY 504
X#define I_BOOTS_JUMPING 505
X
X    /* cloak functions */
X#define I_PERM_DISPLACE 601
X#define I_PERM_NEGIMMUNE 602
X#define I_PERM_INVISIBLE 603
X#define I_PERM_ACCURACY 604
X#define I_PERM_PROTECTION 605
X#define I_PERM_TRUESIGHT 606
X
X    /* ring functions */
X#define I_PERM_VISION 701
X#define I_PERM_BURDEN 702
X#define I_PERM_STRENGTH 703
X#define I_PERM_GAZE_IMMUNE 704
X#define I_PERM_FIRE_RESIST 705
X#define I_PERM_POISON_RESIST 706
X#define I_PERM_REGENERATE 707
X#define I_PERM_KNOWLEDGE 708
X
X    /* armor functions */
X#define I_PERM_ENERGY_RESIST 801
X#define I_PERM_BREATHING 802
X#define I_PERM_FEAR_RESIST 803
X
X/* artifact functions */
X#define I_ORBFIRE 901
X#define I_ORBWATER 902
X#define I_ORBEARTH 903
X#define I_ORBAIR 904
X#define I_ORBMASTERY 905
X#define I_ORBDEAD 906
X#define I_CRYSTAL 907
X#define I_ANTIOCH 908
X#define I_KOLWYNIA 909
X#define I_DEATH 910
X#define I_ENCHANTMENT 911
X#define I_HELM 912
X#define I_LIFE 913
X#define I_JUGGERNAUT 914
X#define I_SYMBOL 915
X
X/* weapons functions */
X#define I_LIGHTSABRE 1002
X#define I_DEMONBLADE 1003
X#define I_MACE_DISRUPT 1004
X#define I_TANGLE 1005
X#define I_ARROW 1006
X#define I_BOLT 1007
X#define I_VORPAL 1008
X#define I_DESECRATE 1009
X#define I_FIRESTAR 1010
X#define I_DEFEND 1011
X#define I_VICTRIX 1012
X#define I_DARK_EMP_SWORD 1013
X
X/* thing functions */
X#define I_PICK 1101
X#define I_KEY 1102
X#define I_SHOVEL 1103
X#define I_EXCAVATOR 1104
X#define I_PERM_ILLUMINATE 1105
X#define I_TRAP 1106
X
X/* monster functions */
X#define M_NO_OP -1
X
X/* talk functions */
X#define M_TALK_STUPID 101
X#define M_TALK_SILENT 102
X#define M_TALK_HUNGRY 103
X#define M_TALK_GREEDY 104
X#define M_TALK_TITTER 105
X#define M_TALK_MAN 106
X#define M_TALK_ROBOT 107
X#define M_TALK_EVIL 108
X#define M_TALK_BURBLE 109
X#define M_TALK_SLITHY 110
X#define M_TALK_MIMSY 111
X#define M_TALK_SEDUCTOR 112
X#define M_TALK_MP 113
X#define M_TALK_IM 114
X#define M_TALK_GUARD 115
X#define M_TALK_GHOST 116
X#define M_TALK_HINT 117
X#define M_TALK_BEG 118
X#define M_TALK_EF 119
X#define M_TALK_GF 120
X#define M_TALK_MORGON 121
X#define M_TALK_LB 122
X#define M_TALK_DEMONLOVER 123
X#define M_TALK_ASSASSIN 124
X#define M_TALK_NINJA 125
X#define M_TALK_THIEF 126
X
X/* special ability functions */
X#define M_SP_SURPRISE 201
X#define M_SP_MP 202
X#define M_SP_THIEF 203
X#define M_SP_AGGRAVATE 204
X#define M_SP_POISON_CLOUD 205
X#define M_SP_HUGE 206
X#define M_SP_SUMMON 207
X#define M_SP_ILLUSION 208
X#define M_SP_FLUTTER 209
X#define M_SP_ESCAPE 210
X#define M_SP_SPELL 211
X#define M_SP_EXPLODE 212
X#define M_SP_DEMON 213
X#define M_SP_ACID_CLOUD 214
X#define M_SP_WHIRL 215
X#define M_SP_GHOST 216
X#define M_SP_MORGON 217
X#define M_SP_EATER 218
X#define M_SP_LAWBRINGER 219
X#define M_SP_DRAGONLORD 220
X#define M_SP_DE 221
X#define M_SP_DEMONLOVER 222
X#define M_SP_SEDUCTOR 223
X#define M_SP_MASTER 224
X#define M_SP_WYRM 225
X#define M_SP_BLACKOUT 226
X
X/* rangestrike functions */
X#define M_STRIKE_MISSILE 301
X#define M_STRIKE_FBOLT 302
X#define M_STRIKE_LBALL 303
X#define M_STRIKE_FBALL 304
X#define M_STRIKE_BLIND 305
X#define M_STRIKE_SNOWBALL 306
X#define M_STRIKE_MASTER 307
X
X/* combat functions */
X#define M_MELEE_NORMAL 401
X#define M_MELEE_FIRE 402
X#define M_MELEE_DRAGON 403
X#define M_MELEE_MP 404
X#define M_MELEE_ELEC 405
X#define M_MELEE_POISON 406
X#define M_MELEE_NG 407
X#define M_MELEE_SUCCUBUS 408
X#define M_MELEE_SPIRIT 409
X#define M_MELEE_DISEASE 410
X#define M_MELEE_SLEEP 411
X#define M_MELEE_COLD 412
X#define M_MELEE_MASTER 413
X
X
X/* movement functions */
X#define M_MOVE_NORMAL 501
X#define M_MOVE_FLUTTER 502
X#define M_MOVE_TELEPORT 503
X#define M_MOVE_FOLLOW 504
X#define M_MOVE_RANDOM 505
X#define M_MOVE_SMART 506
X#define M_MOVE_SPIRIT 507
X#define M_MOVE_SCAREDY 508
X#define M_MOVE_CONFUSED 509
X
X/* MLx -> index to Monsters starting for level x */
X/* MLx -> number of monsters of level x or less */
X/* NML_x -> number of monsters of level x */
X/* NML-X must be changed whenever a monster is added */
X#define ML0 0
X#define NML_0 5
X#define ML1 (ML0 + NML_0)
X#define NML_1 11
X#define ML2 (ML1 + NML_1)
X#define NML_2 9
X#define ML3 (ML2 + NML_2)
X#define NML_3 7
X#define ML4 (ML3 + NML_3)
X#define NML_4 10
X#define ML5 (ML4 + NML_4)
X#define NML_5 8
X#define ML6 (ML5 + NML_5)
X#define NML_6 8
X#define ML7 (ML6 + NML_6)
X#define NML_7 6
X#define ML8 (ML7 + NML_7)
X#define NML_8 11
X#define ML9 (ML8 + NML_8)
X#define NML_9 7
X#define ML10 (ML9 + NML_9)
X#define NML_10 10
X
X#define NUMMONSTERS (ML10 + NML_10)
X
X
X
X
X/* location functions */
X#define L_NO_OP 0
X
X/* random terrain types */
X#define L_LIFT 1
X#define L_HEDGE 2
X#define L_WATER 3
X#define L_LAVA 4
X#define L_MAGIC_POOL 5
X#define L_FIRE 6
X#define L_WHIRLWIND 7
X#define L_ABYSS 8
X
X
X#define L_TRIFID 11
X#define L_FINAL_ABYSS 12
X#define L_WARNING 13
X#define L_PORTCULLIS 14
X#define L_PORTCULLIS_TRAP 15
X
X/* traps */
X#define NUMTRAPS 12
X#define TRAP_BASE 21
X
X/* traps */
X#define L_TRAP_DART 21
X#define L_TRAP_PIT 22
X#define L_TRAP_DOOR 23
X#define L_TRAP_SNARE 24
X#define L_TRAP_BLADE 25
X#define L_TRAP_FIRE 26
X#define L_TRAP_TELEPORT 27
X#define L_TRAP_DISINTEGRATE 28
X#define L_TRAP_SLEEP_GAS 29
X#define L_TRAP_ACID 30
X#define L_TRAP_MANADRAIN 31
X#define L_TRAP_ABYSS 32
X
X/* shop and guild functions (mostly for city level) */
X#define L_DRUID 41
X#define L_RESIDENCE 42
X#define L_TEMPLE 43
X#define L_ARMORER 44
X#define L_CLUB 45
X#define L_GYM 46
X#define L_THIEVES_GUILD 47
X#define L_COLLEGE 48
X#define L_HEALER 49
X#define L_STATUE_WAKE 50
X#define L_CASINO 51
X#define L_SEWER 52
X#define L_TAVERN 53
X#define L_MERC_GUILD 54
X#define L_ALCHEMIST 55
X#define L_SORCERORS 56
X#define L_CASTLE 57
X#define L_JAIL 58
X#define L_GARDEN 59
X#define L_ARENA 60
X#define L_MAZE 61
X#define L_DPW 62
X#define L_LIBRARY 63
X#define L_PAWN_SHOP 64
X#define L_BANK 65
X#define L_CONDO 66
X#define L_ALTAR 67
X#define L_ADEPT 68
X#define L_ALL_STATUES 69
X#define L_OMEGA 70
X#define L_CITYGATE 71
X#define L_CHAOSSTORM 72
X#define L_VAULT 73
X#define L_CEMETARY 74
X#define L_CHALLENGE 75
X#define L_GUARDIAN 76
X#define L_BROTHEL 77
X
X/* structure definitions */
X
Xstruct room {
X  int lighted; 
X  int left,right,top,bottom;
X  int numconnections;
X  int connections[MAXCONNECTIONS];
X  int joined[MAXCONNECTIONS];
X  int rsi; /* index into roomname switch */
X};
X
X
Xstruct level_data {
X  int generated; /* has the level been made (visited) yet? */
X  int numrooms; /* number of rooms on level */
X  int tunnelled; /* amount of tunnelling done on this level */
X  struct room rooms[MAXROOMS]; /* info about rooms */
X};
X
Xstruct spell {
X  int known;
X  int powerdrain;
X  int id;
X  void (*castf)();
X} ;
X
X
Xstruct monster {
X  int id,hp,hit,ac,dmg,sense,wakeup,level;
X  int speed,click;
X  int status,immunity,tactics; /* bvs */
X  int sleep; /* percent chance starts out asleep */
X  int treasure; /* percent chance starts with treasure */
X  int x,y;
X  int xpv;
X  int corpseweight,corpsevalue,transformid;
X  int attacked,actions,hitloc;
X  int uniqueness; /* common, unique and unmade, unique and made */
X  char monchar;
X  char monstring[64],corpsestr[64];
X  struct objectlist *possessions;
X  int talkf;
X  int movef;
X  int meleef;
X  int strikef;
X  int specialf;
X};
X
X
Xstruct monsterlist {
X  struct monster *m;
X  struct monsterlist *next;
X};
X
X
X
X
Xstruct player {
X  int str,con,dex,agi,iq,pow,maxstr,maxcon,maxdex,maxagi,maxiq,maxpow;
X  int xp,level,hp,maxhp,hit,dmg,absorption,speed,click;
X  int defense,vision,food,alignment,mana,maxmana;
X  int cash,patron;
X  char preference;
X  int sx,sy,slevel; /* sanctuary coordinates */
X  int x,y; /* current player coordinates */
X  int itemweight,maxweight;
X  int numrings;
X  int immunity[NUMIMMUNITIES];
X  int status[NUMSTATI];
X  int options;
X  int rank[NUMRANKS];
X  struct object *possessions[MAXITEMS];
X  char name[64];
X  /* need one of these for types of objects "in use" except rings */
X  struct object *primary; /* primary hand -- weapon or shield */
X  struct object *secondary; /* secondary hand -- ditto */
X  struct object *armor;
X  struct object *cloak;
X  struct object *boots;
X};
X
X
X
Xstruct object {
X  int id,weight,plus,charge,dmg,hit,aux,number,fragility;
X  int basevalue, known, used, blessing,type;
X  int uniqueness; /* 0 common, 1 unique, ungenerated, 2 u, g */
X  int usef; /* effect when used */
X  int level; /* 0..10 power and frequency of item */
X  char objchar;
X  char objstr[64],truename[64],cursestr[64];
X};
X
X
X
Xstruct objectlist {
X  struct object *thing;
X  struct objectlist *next;
X};
X
X
Xstruct location {
X  char p_locf; /* function executed when moved on */
X  char stopsrun; /* stops a fastmove */
X  char seen; /* has spot ever been viewed by player */
X  char secret; 
X  char roomnumber;
X  char locchar; /* terrain type */
X  char showchar; /*char instantaneously drawn for site */
X  int aux; /* signifies various things */
X  struct objectlist *things; 
X  struct monster *creature;
X };
X
X
X
X 
X/* random typedef's */
X
Xtypedef struct monsterlist mltype;
Xtypedef struct monster montype;
X
Xtypedef mltype *pml;
Xtypedef montype *pmt;
X
X
Xtypedef struct object objtype;
Xtypedef struct objectlist oltype;
X
Xtypedef objtype *pob;
Xtypedef oltype *pol;
X
X/* random  function declarations */
Xchar *malloc(),*calloc();
Xint free();
END_OF_odefs.h
if test 19414 -ne `wc -c <odefs.h`; then
    echo shar: \"odefs.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f oinititem2.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"oinititem2.c\"
else
echo shar: Extracting \"oinititem2.c\" \(35133 characters\)
sed "s/^X//" >oinititem2.c <<'END_OF_oinititem2.c'
X/* omega copyright (C) 1987 by Laurence Raphael Brothers */
X/* oinititem2.c */
X
X#include <strings.h>
X#include "oglob.h"
X
X/* from oitem */
Xextern void ringname(),stickname(),cloakname(),bootname(),potionname();
X
Xvoid inititem2();
X
Xvoid inititem2()
X{ 
X  int i;
X
X  strcpy(Objects[WEAPONID+0].objstr,"dagger");
X  strcpy(Objects[WEAPONID+0].truename,"dagger");
X  strcpy(Objects[WEAPONID+0].cursestr,"dagger");
X  Objects[WEAPONID+0].hit = 12;
X  Objects[WEAPONID+0].type = THRUSTING;
X  Objects[WEAPONID+0].dmg = 6;
X  Objects[WEAPONID+0].weight = 10;
X  Objects[WEAPONID+0].level = 0;
X  Objects[WEAPONID+0].basevalue = 5; 
X  strcpy(Objects[WEAPONID+1].objstr,"short sword");
X  strcpy(Objects[WEAPONID+1].truename,"short sword");
X  strcpy(Objects[WEAPONID+1].cursestr,"short sword");
X  Objects[WEAPONID+1].hit = 11;
X  Objects[WEAPONID+1].type = CUTTING;
X  Objects[WEAPONID+1].weight = 25;
X  Objects[WEAPONID+1].level = 1;
X  Objects[WEAPONID+1].dmg = 8;
X  Objects[WEAPONID+1].basevalue = 40; 
X  strcpy(Objects[WEAPONID+2].objstr,"broad sword");
X  strcpy(Objects[WEAPONID+2].truename,"broad sword");
X  strcpy(Objects[WEAPONID+2].cursestr,"broad sword");
X  Objects[WEAPONID+2].hit = 9;
X  Objects[WEAPONID+2].type = CUTTING;
X  Objects[WEAPONID+2].weight = 40;
X  Objects[WEAPONID+2].level = 2;
X  Objects[WEAPONID+2].dmg = 12;
X  Objects[WEAPONID+2].basevalue = 90; 	    
X  strcpy(Objects[WEAPONID+3].objstr,"bastard sword");
X  strcpy(Objects[WEAPONID+3].truename,"bastard sword");
X  strcpy(Objects[WEAPONID+3].cursestr,"bastard sword");
X  Objects[WEAPONID+3].hit = 8;
X  Objects[WEAPONID+3].type = CUTTING;
X  Objects[WEAPONID+3].weight = 50;
X  Objects[WEAPONID+3].level = 3;
X  Objects[WEAPONID+3].dmg = 16;
X  Objects[WEAPONID+3].basevalue = 250; 	    
X  strcpy(Objects[WEAPONID+4].objstr,"katana");
X  strcpy(Objects[WEAPONID+4].truename,"katana");
X  strcpy(Objects[WEAPONID+4].cursestr,"katana");
X  Objects[WEAPONID+4].hit = 10;
X  Objects[WEAPONID+4].type = CUTTING;
X  Objects[WEAPONID+4].weight = 50;
X  Objects[WEAPONID+4].level = 4;
X  Objects[WEAPONID+4].dmg = 16;
X  Objects[WEAPONID+4].basevalue = 500; 
X  strcpy(Objects[WEAPONID+5].objstr,"great-sword");
X  strcpy(Objects[WEAPONID+5].truename,"great-sword");
X  strcpy(Objects[WEAPONID+5].cursestr,"great-sword");
X  Objects[WEAPONID+5].hit = 7;
X  Objects[WEAPONID+5].type = CUTTING;
X  Objects[WEAPONID+5].weight = 75;
X  Objects[WEAPONID+5].level = 5;
X  Objects[WEAPONID+5].dmg = 20;
X  Objects[WEAPONID+5].basevalue = 400; 
X  strcpy(Objects[WEAPONID+6].objstr,"epee");
X  strcpy(Objects[WEAPONID+6].truename,"epee");
X  strcpy(Objects[WEAPONID+6].cursestr,"epee");
X  Objects[WEAPONID+6].weight = 15;
X  Objects[WEAPONID+6].type = THRUSTING;
X  Objects[WEAPONID+6].level = 2;
X  Objects[WEAPONID+6].hit = 15;
X  Objects[WEAPONID+6].dmg = 6;
X  Objects[WEAPONID+6].basevalue = 50; 	    
X  strcpy(Objects[WEAPONID+7].objstr,"rapier");
X  strcpy(Objects[WEAPONID+7].truename,"rapier");
X  strcpy(Objects[WEAPONID+7].cursestr,"rapier");
X  Objects[WEAPONID+7].weight = 20;
X  Objects[WEAPONID+7].type = THRUSTING;
X  Objects[WEAPONID+7].level = 3;
X  Objects[WEAPONID+7].hit = 13;
X  Objects[WEAPONID+7].dmg = 8;
X  Objects[WEAPONID+7].basevalue = 250; 
X  strcpy(Objects[WEAPONID+8].objstr,"estoc");
X  strcpy(Objects[WEAPONID+8].truename,"estoc");
X  strcpy(Objects[WEAPONID+8].cursestr,"estoc");
X  Objects[WEAPONID+8].dmg = 11;
X  Objects[WEAPONID+8].type = THRUSTING;
X  Objects[WEAPONID+8].weight = 25;
X  Objects[WEAPONID+8].level = 5;
X  Objects[WEAPONID+8].hit = 12;
X  Objects[WEAPONID+8].basevalue = 500;
X  strcpy(Objects[WEAPONID+9].objstr,"cutlass"); 
X  strcpy(Objects[WEAPONID+9].truename,"cutlass"); 
X  strcpy(Objects[WEAPONID+9].cursestr,"cutlass"); 
X  Objects[WEAPONID+9].type = CUTTING;
X  Objects[WEAPONID+9].hit = 8;
X  Objects[WEAPONID+9].weight = 35;
X  Objects[WEAPONID+9].level = 1;
X  Objects[WEAPONID+9].dmg = 8;
X  Objects[WEAPONID+9].basevalue = 40; 	    
X  strcpy(Objects[WEAPONID+10].objstr,"hand-axe");
X  strcpy(Objects[WEAPONID+10].truename,"hand-axe");
X  strcpy(Objects[WEAPONID+10].cursestr,"hand-axe");
X  Objects[WEAPONID+10].type = CUTTING;
X  Objects[WEAPONID+10].hit = 10;
X  Objects[WEAPONID+10].weight = 25;
X  Objects[WEAPONID+10].level = 1;
X  Objects[WEAPONID+10].dmg = 8;
X  Objects[WEAPONID+10].basevalue = 50; 	    
X  strcpy(Objects[WEAPONID+11].objstr,"battle-axe");
X  strcpy(Objects[WEAPONID+11].truename,"battle-axe");
X  strcpy(Objects[WEAPONID+11].cursestr,"battle-axe");
X  Objects[WEAPONID+11].type = CUTTING;
X  Objects[WEAPONID+11].weight = 50;
X  Objects[WEAPONID+11].level = 2;
X  Objects[WEAPONID+11].hit = 8;
X  Objects[WEAPONID+11].dmg = 12;
X  Objects[WEAPONID+11].basevalue = 100; 	    
X  strcpy(Objects[WEAPONID+12].objstr,"great-axe");
X  strcpy(Objects[WEAPONID+12].truename,"great-axe");
X  strcpy(Objects[WEAPONID+12].cursestr,"great-axe");
X  Objects[WEAPONID+12].weight = 100;
X  Objects[WEAPONID+12].type = CUTTING;
X  Objects[WEAPONID+12].level = 5;
X  Objects[WEAPONID+12].hit = 7;
X  Objects[WEAPONID+12].dmg = 24;
X  Objects[WEAPONID+12].basevalue = 200; 	    
X  strcpy(Objects[WEAPONID+13].objstr,"mace");
X  strcpy(Objects[WEAPONID+13].truename,"mace");
X  strcpy(Objects[WEAPONID+13].cursestr,"mace");
X  Objects[WEAPONID+13].hit = 8;
X  Objects[WEAPONID+13].type = STRIKING;
X  Objects[WEAPONID+13].weight = 50;
X  Objects[WEAPONID+13].level = 2;
X  Objects[WEAPONID+13].dmg = 12;
X  Objects[WEAPONID+13].basevalue = 50; 	    
X  strcpy(Objects[WEAPONID+14].objstr,"war-hammer");
X  strcpy(Objects[WEAPONID+14].truename,"war-hammer");
X  strcpy(Objects[WEAPONID+14].cursestr,"war-hammer");
X  Objects[WEAPONID+14].weight = 50;
X  Objects[WEAPONID+14].type = STRIKING;
X  Objects[WEAPONID+14].level = 2;
X  Objects[WEAPONID+14].hit = 6;
X  Objects[WEAPONID+14].dmg = 14;
X  Objects[WEAPONID+14].basevalue = 60;
X  strcpy(Objects[WEAPONID+15].objstr,"morning-star");
X  strcpy(Objects[WEAPONID+15].truename,"morning-star");
X  strcpy(Objects[WEAPONID+15].cursestr,"morning-star");
X  Objects[WEAPONID+15].hit = 7;
X  Objects[WEAPONID+15].type = STRIKING;
X  Objects[WEAPONID+15].weight = 60;
X  Objects[WEAPONID+15].level = 5;
X  Objects[WEAPONID+15].dmg = 16;
X  Objects[WEAPONID+15].basevalue = 150;
X  strcpy(Objects[WEAPONID+16].objstr,"flail");
X  strcpy(Objects[WEAPONID+16].truename,"flail");
X  strcpy(Objects[WEAPONID+16].cursestr,"flail");
X  Objects[WEAPONID+16].hit = 7;
X  Objects[WEAPONID+16].type = STRIKING;
X  Objects[WEAPONID+16].weight = 50;
X  Objects[WEAPONID+16].level = 3;
X  Objects[WEAPONID+16].dmg = 12;
X  Objects[WEAPONID+16].basevalue = 50; 	    
X  strcpy(Objects[WEAPONID+17].objstr,"club");
X  strcpy(Objects[WEAPONID+17].truename,"club");
X  strcpy(Objects[WEAPONID+17].cursestr,"club");
X  Objects[WEAPONID+17].hit = 10;
X  Objects[WEAPONID+17].type = STRIKING;
X  Objects[WEAPONID+17].weight = 30;
X  Objects[WEAPONID+17].level = 0;
X  Objects[WEAPONID+17].dmg = 6;
X  Objects[WEAPONID+17].basevalue = 5; 	    
X  strcpy(Objects[WEAPONID+18].objstr,"quarterstaff");
X  strcpy(Objects[WEAPONID+18].truename,"quarterstaff");
X  strcpy(Objects[WEAPONID+18].cursestr,"quarterstaff");
X  Objects[WEAPONID+18].hit = 12;
X  Objects[WEAPONID+18].type = STRIKING;
X  Objects[WEAPONID+18].weight = 80;
X  Objects[WEAPONID+18].level = 1;
X  Objects[WEAPONID+18].dmg = 9;
X  Objects[WEAPONID+18].basevalue = 30;
X  strcpy(Objects[WEAPONID+19].objstr,"spear");
X  strcpy(Objects[WEAPONID+19].truename,"spear");
X  strcpy(Objects[WEAPONID+19].cursestr,"spear");
X  Objects[WEAPONID+19].hit = 10;
X  Objects[WEAPONID+19].type = THRUSTING;
X  Objects[WEAPONID+19].weight = 50;
X  Objects[WEAPONID+19].level = 2;
X  Objects[WEAPONID+19].dmg = 10;
X  Objects[WEAPONID+19].basevalue = 50;
X  strcpy(Objects[WEAPONID+20].objstr,"halberd");
X  strcpy(Objects[WEAPONID+20].truename,"halberd");
X  strcpy(Objects[WEAPONID+20].cursestr,"halberd");
X  Objects[WEAPONID+20].hit = 6;
X  Objects[WEAPONID+20].type = CUTTING;
X  Objects[WEAPONID+20].weight = 100;
X  Objects[WEAPONID+20].level = 3;
X  Objects[WEAPONID+20].dmg = 16;
X  Objects[WEAPONID+20].basevalue = 100; 	    
X  strcpy(Objects[WEAPONID+21].objstr,"trident");
X  strcpy(Objects[WEAPONID+21].truename,"trident");
X  strcpy(Objects[WEAPONID+21].cursestr,"trident");
X  Objects[WEAPONID+21].hit = 7;
X  Objects[WEAPONID+21].type = THRUSTING;
X  Objects[WEAPONID+21].weight = 80;
X  Objects[WEAPONID+21].level = 3;
X  Objects[WEAPONID+21].dmg = 12;
X  Objects[WEAPONID+21].basevalue = 75;
X  strcpy(Objects[WEAPONID+22].objstr,"whip");
X  strcpy(Objects[WEAPONID+22].truename,"whip");
X  strcpy(Objects[WEAPONID+22].cursestr,"whip");
X  Objects[WEAPONID+22].hit = 8;
X  Objects[WEAPONID+22].type = STRIKING;
X  Objects[WEAPONID+22].weight = 20;
X  Objects[WEAPONID+22].level = 2;
X  Objects[WEAPONID+22].aux = I_TANGLE;
X  Objects[WEAPONID+22].dmg = 4;
X  Objects[WEAPONID+22].basevalue = 100;
X  strcpy(Objects[WEAPONID+23].objstr,"grey metal cylinder");
X  strcpy(Objects[WEAPONID+23].cursestr,"lightsabre");
X  strcpy(Objects[WEAPONID+23].truename,"lightsabre");
X  Objects[WEAPONID+23].hit = 20;
X  Objects[WEAPONID+23].type = THRUSTING;
X  Objects[WEAPONID+23].weight = 20;
X  Objects[WEAPONID+23].level = 9;
X  Objects[WEAPONID+23].usef = I_LIGHTSABRE;
X  Objects[WEAPONID+23].aux = I_LIGHTSABRE;
X  Objects[WEAPONID+23].plus = 0;
X  Objects[WEAPONID+23].dmg = 30;
X  Objects[WEAPONID+23].basevalue = 2000;
X  strcpy(Objects[WEAPONID+24].objstr,"bastard sword");
X  strcpy(Objects[WEAPONID+24].truename,"Demonblade");
X  strcpy(Objects[WEAPONID+24].cursestr,"Demonblade");
X  Objects[WEAPONID+36].uniqueness = UNIQUE_UNMADE;
X  Objects[WEAPONID+36].type = CUTTING;
X  Objects[WEAPONID+24].hit = 8;
X  Objects[WEAPONID+24].blessing = -8;
X  Objects[WEAPONID+24].plus = 8;
X  Objects[WEAPONID+24].weight = 500;
X  Objects[WEAPONID+24].usef = I_DEMONBLADE;
X  Objects[WEAPONID+24].aux = I_DEMONBLADE;
X  Objects[WEAPONID+24].level = 9;
X  Objects[WEAPONID+24].dmg = 16;
X  Objects[WEAPONID+24].basevalue = 1000; 	    
X  strcpy(Objects[WEAPONID+25].objstr,"mace");
X  strcpy(Objects[WEAPONID+25].truename,"mace of disruption");
X  strcpy(Objects[WEAPONID+25].cursestr,"mace");
X  Objects[WEAPONID+25].hit = 10;
X  Objects[WEAPONID+25].type = STRIKING;
X  Objects[WEAPONID+25].blessing = 9;
X  Objects[WEAPONID+25].plus = 3;
X  Objects[WEAPONID+25].weight = 250;
X  Objects[WEAPONID+25].usef = I_MACE_DISRUPT;
X  Objects[WEAPONID+25].aux = I_MACE_DISRUPT;
X  Objects[WEAPONID+25].level = 5;
X  Objects[WEAPONID+25].dmg = 12;
X  Objects[WEAPONID+25].basevalue = 3000; 	    
X  strcpy(Objects[WEAPONID+26].objstr,"longbow");
X  strcpy(Objects[WEAPONID+26].truename,"longbow");
X  strcpy(Objects[WEAPONID+26].cursestr,"longbow");
X  Objects[WEAPONID+26].hit = 15;
X  Objects[WEAPONID+26].type = MISSILE;
X  Objects[WEAPONID+26].objchar = MISSILEWEAPON;
X  Objects[WEAPONID+26].weight = 100;
X  Objects[WEAPONID+26].level = 2;
X  Objects[WEAPONID+26].dmg = 12;
X  Objects[WEAPONID+26].basevalue = 300;
X  strcpy(Objects[WEAPONID+27].objstr,"crossbow");
X  strcpy(Objects[WEAPONID+27].truename,"crossbow");
X  strcpy(Objects[WEAPONID+27].cursestr,"crossbow");
X  Objects[WEAPONID+27].hit = 15;
X  Objects[WEAPONID+27].type = MISSILE;
X  Objects[WEAPONID+27].objchar = MISSILEWEAPON;
X  Objects[WEAPONID+27].weight = 150;
X  Objects[WEAPONID+27].level = 3;
X  Objects[WEAPONID+27].dmg = 20;
X  Objects[WEAPONID+27].basevalue = 500; 	    
X  strcpy(Objects[WEAPONID+28].objstr,"arrow");
X  strcpy(Objects[WEAPONID+28].truename,"arrow");
X  strcpy(Objects[WEAPONID+28].cursestr,"arrow");
X  Objects[WEAPONID+28].type = MISSILE;
X  Objects[WEAPONID+28].objchar = MISSILEWEAPON;
X  Objects[WEAPONID+28].hit = 3;
X  Objects[WEAPONID+28].weight = 2;
X  Objects[WEAPONID+28].aux = I_ARROW;
X  Objects[WEAPONID+28].level = 1;
X  Objects[WEAPONID+28].dmg = 3;
X  Objects[WEAPONID+28].basevalue = 2;
X  strcpy(Objects[WEAPONID+29].objstr,"bolt");
X  strcpy(Objects[WEAPONID+29].truename,"bolt");
X  strcpy(Objects[WEAPONID+29].cursestr,"bolt");
X  Objects[WEAPONID+29].type = MISSILE;
X  Objects[WEAPONID+29].weight = 2;
X  Objects[WEAPONID+29].aux = I_BOLT;
X  Objects[WEAPONID+29].objchar = MISSILEWEAPON;
X  Objects[WEAPONID+29].level = 1;
X  Objects[WEAPONID+29].dmg = 3;
X  Objects[WEAPONID+30].hit = 3;
X  Objects[WEAPONID+29].basevalue = 5; 	    
X  strcpy(Objects[WEAPONID+30].objstr,"bola");
X  strcpy(Objects[WEAPONID+30].truename,"bola");
X  strcpy(Objects[WEAPONID+30].cursestr,"bola");
X  Objects[WEAPONID+30].weight = 50;  
X  Objects[WEAPONID+30].type = MISSILE;
X  Objects[WEAPONID+30].objchar = MISSILEWEAPON;
X  Objects[WEAPONID+30].level = 2;
X  Objects[WEAPONID+30].aux = I_TANGLE;
X  Objects[WEAPONID+30].hit = 10;
X  Objects[WEAPONID+30].dmg = 3;
X  Objects[WEAPONID+30].basevalue = 50;
X  strcpy(Objects[WEAPONID+31].objstr,"broad sword");
X  strcpy(Objects[WEAPONID+31].truename,"vorpal sword");
X  strcpy(Objects[WEAPONID+31].cursestr,"sword of self-mutilation");
X  Objects[WEAPONID+31].weight = 40;
X  Objects[WEAPONID+31].type = CUTTING;
X  Objects[WEAPONID+31].level = 7;
X  Objects[WEAPONID+31].aux = I_VORPAL;
X  Objects[WEAPONID+31].hit = 9;
X  Objects[WEAPONID+31].dmg = 12;
X  Objects[WEAPONID+31].plus = 5;
X  Objects[WEAPONID+31].basevalue = 3000;
X  strcpy(Objects[WEAPONID+32].objstr,"great-sword");
X  strcpy(Objects[WEAPONID+32].truename,"Desecrator");
X  strcpy(Objects[WEAPONID+32].cursestr,"Desecrator");
X  Objects[WEAPONID+32].uniqueness = UNIQUE_UNMADE;
X  Objects[WEAPONID+32].type = CUTTING;
X  Objects[WEAPONID+32].weight = 100;
X  Objects[WEAPONID+32].level = 9;
X  Objects[WEAPONID+32].aux = I_DESECRATE;
X  Objects[WEAPONID+32].usef = I_DESECRATE;
X  Objects[WEAPONID+32].hit = 7;
X  Objects[WEAPONID+32].plus = 7;
X  Objects[WEAPONID+32].blessing = -7;
X  Objects[WEAPONID+32].dmg = 20;
X  Objects[WEAPONID+32].basevalue = 5000;
X  strcpy(Objects[WEAPONID+33].objstr,"morning-star");
X  strcpy(Objects[WEAPONID+33].truename,"firestar");
X  strcpy(Objects[WEAPONID+33].cursestr,"firestar");
X  Objects[WEAPONID+33].weight = 60;
X  Objects[WEAPONID+33].type = STRIKING;
X  Objects[WEAPONID+33].level = 6;
X  Objects[WEAPONID+33].aux = I_FIRESTAR;
X  Objects[WEAPONID+33].usef = I_PERM_FIRE_RESIST;
X  Objects[WEAPONID+33].hit = 7;
X  Objects[WEAPONID+33].plus = 7;
X  Objects[WEAPONID+33].dmg = 16;
X  Objects[WEAPONID+33].basevalue = 2000;
X  strcpy(Objects[WEAPONID+34].objstr,"estoc");
X  strcpy(Objects[WEAPONID+34].truename,"Defender");
X  strcpy(Objects[WEAPONID+34].cursestr,"Defender");
X  Objects[WEAPONID+34].uniqueness = UNIQUE_MADE;
X  Objects[WEAPONID+34].type = THRUSTING;
X  Objects[WEAPONID+34].weight = 50;
X  Objects[WEAPONID+34].level = 7;
X  Objects[WEAPONID+34].aux = I_DEFEND;
X  Objects[WEAPONID+34].usef = I_DEFEND;
X  Objects[WEAPONID+34].hit = 12;
X  Objects[WEAPONID+34].plus = 7;
X  Objects[WEAPONID+34].blessing = 7;
X  Objects[WEAPONID+34].dmg = 10;
X  Objects[WEAPONID+34].basevalue = 3000;
X  strcpy(Objects[WEAPONID+35].objstr,"ivory spear");
X  strcpy(Objects[WEAPONID+35].truename,"Victrix");
X  strcpy(Objects[WEAPONID+35].cursestr,"Victrix");
X  Objects[WEAPONID+35].weight = 50;
X  Objects[WEAPONID+35].type = THRUSTING;
X  Objects[WEAPONID+35].level = 9;
X  Objects[WEAPONID+35].aux = I_VICTRIX;
X  Objects[WEAPONID+35].usef = I_VICTRIX;
X  Objects[WEAPONID+35].hit = 10;
X  Objects[WEAPONID+35].plus = 10;
X  Objects[WEAPONID+35].blessing = 10;
X  Objects[WEAPONID+35].dmg = 100;
X  Objects[WEAPONID+35].basevalue = 5000;
X  strcpy(Objects[WEAPONID+36].objstr,"great-axe");
X  strcpy(Objects[WEAPONID+36].truename,"Goblins' Hewer");
X  strcpy(Objects[WEAPONID+36].cursestr,"Goblins' Hewer");
X  Objects[WEAPONID+36].uniqueness = UNIQUE_MADE;
X  Objects[WEAPONID+36].type = CUTTING;
X  Objects[WEAPONID+36].weight = 500;
X  Objects[WEAPONID+36].level = 7;
X  Objects[WEAPONID+36].hit = 6;
X  Objects[WEAPONID+36].plus = 6;
X  Objects[WEAPONID+36].blessing = 0;
X  Objects[WEAPONID+36].dmg = 32;
X  Objects[WEAPONID+36].basevalue = 2000;
X  strcpy(Objects[WEAPONID+37].objstr,"shortsword");
X  strcpy(Objects[WEAPONID+37].truename,"The Dark Emperor's Sword");
X  strcpy(Objects[WEAPONID+37].cursestr,"The Dark Emperor's Sword");
X  Objects[WEAPONID+37].uniqueness = UNIQUE_MADE;
X  Objects[WEAPONID+37].type = CUTTING;
X  Objects[WEAPONID+37].weight = 25;
X  Objects[WEAPONID+37].level = 10;
X  Objects[WEAPONID+37].hit = 10;
X  Objects[WEAPONID+37].plus = 20;
X  Objects[WEAPONID+37].blessing = -10;
X  Objects[WEAPONID+37].dmg = 10;
X  Objects[WEAPONID+37].basevalue = 10000;
X
X
X  for (i=WEAPONID;i<WEAPONID+NUMWEAPONS;i++) {
X    if (Objects[i].objchar != MISSILEWEAPON)
X      Objects[i].objchar = WEAPON;
X    Objects[i].fragility = 15;
X  }
X
X  for (i=ARTIFACTID;i<ARTIFACTID+NUMARTIFACTS;i++) {
X    Objects[i].objchar = ARTIFACT;
X    Objects[i].fragility = 15;
X  }
X
X  strcpy(Objects[ARTIFACTID+0].objstr,"Shining Orb");
X  strcpy(Objects[ARTIFACTID+0].truename,"Orb of Mastery");
X  strcpy(Objects[ARTIFACTID+0].cursestr,"Orb of Mastery");
X  Objects[ARTIFACTID+0].usef = I_ORBMASTERY;
X  Objects[ARTIFACTID+5].uniqueness = 3;
X  Objects[ARTIFACTID+0].level = 10;
X  Objects[ARTIFACTID+0].weight = 500;
X  Objects[ARTIFACTID+0].basevalue = 10000;
X  strcpy(Objects[ARTIFACTID+1].objstr,"Red Orb");
X  strcpy(Objects[ARTIFACTID+1].truename,"Orb of Fire");
X  strcpy(Objects[ARTIFACTID+1].cursestr,"Orb of Fire");
X  Objects[ARTIFACTID+1].usef = I_ORBFIRE;
X  Objects[ARTIFACTID+1].level = 9;
X  Objects[ARTIFACTID+1].weight = 50;
X  Objects[ARTIFACTID+1].basevalue = 2000;
X  strcpy(Objects[ARTIFACTID+2].objstr,"Green Orb");
X  strcpy(Objects[ARTIFACTID+2].truename,"Orb of Water");
X  strcpy(Objects[ARTIFACTID+2].cursestr,"Orb of Water");
X  Objects[ARTIFACTID+2].usef = I_ORBWATER;
X  Objects[ARTIFACTID+2].weight = 50;
X  Objects[ARTIFACTID+2].level = 8;
X  Objects[ARTIFACTID+2].basevalue = 2000;
X  strcpy(Objects[ARTIFACTID+3].objstr,"Brown Orb");
X  strcpy(Objects[ARTIFACTID+3].truename,"Orb of Earth");
X  strcpy(Objects[ARTIFACTID+3].cursestr,"Orb of Earth");
X  Objects[ARTIFACTID+3].usef = I_ORBEARTH;
X  Objects[ARTIFACTID+3].level = 7;
X  Objects[ARTIFACTID+3].weight = 50;
X  Objects[ARTIFACTID+3].basevalue = 2000;
X  strcpy(Objects[ARTIFACTID+4].objstr,"Blue Orb");
X  strcpy(Objects[ARTIFACTID+4].truename,"Orb of Air");
X  strcpy(Objects[ARTIFACTID+4].cursestr,"Orb of Air");
X  Objects[ARTIFACTID+4].usef = I_ORBAIR;
X  Objects[ARTIFACTID+4].level = 6;
X  Objects[ARTIFACTID+4].weight = 50;
X  Objects[ARTIFACTID+4].basevalue = 2000;
X  strcpy(Objects[ARTIFACTID+5].objstr,"Black Orb");
X  strcpy(Objects[ARTIFACTID+5].truename,"Burnt-out Orb");
X  strcpy(Objects[ARTIFACTID+5].cursestr,"Burnt-out Orb");
X  Objects[ARTIFACTID+5].usef = I_ORBDEAD;
X  Objects[ARTIFACTID+5].level = 1;
X  Objects[ARTIFACTID+5].weight = 25;
X  Objects[ARTIFACTID+5].basevalue = 100;
X  strcpy(Objects[ARTIFACTID+6].objstr,"Glass Orb");
X  strcpy(Objects[ARTIFACTID+6].truename,"Crystal Ball");
X  strcpy(Objects[ARTIFACTID+6].cursestr,"Ball of Mindlessness");
X  Objects[ARTIFACTID+6].usef = I_CRYSTAL;
X  Objects[ARTIFACTID+5].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+6].weight = 75;
X  Objects[ARTIFACTID+6].level = 3;
X  Objects[ARTIFACTID+6].basevalue = 500;
X  strcpy(Objects[ARTIFACTID+7].objstr,"Metal Pineapple");
X  strcpy(Objects[ARTIFACTID+7].truename,"Holy Hand-Grenade of Antioch");
X  strcpy(Objects[ARTIFACTID+7].cursestr,"Holy Hand-Grenade of Antioch");
X  Objects[ARTIFACTID+7].usef = I_ANTIOCH;
X  Objects[ARTIFACTID+7].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+7].level = 5;
X  Objects[ARTIFACTID+7].weight = 25;
X  Objects[ARTIFACTID+7].basevalue = 1000;
X  strcpy(Objects[ARTIFACTID+8].objstr,"The Amulet of Yendor");
X  strcpy(Objects[ARTIFACTID+8].truename,"The Amulet of Yendor");
X  strcpy(Objects[ARTIFACTID+8].cursestr,"The Amulet of Yendor");
X  Objects[ARTIFACTID+8].uniqueness = COMMON;
X  Objects[ARTIFACTID+8].usef = I_NOTHING;
X  Objects[ARTIFACTID+8].weight = 500;
X  Objects[ARTIFACTID+8].level = 1;
X  Objects[ARTIFACTID+8].basevalue = 1;
X  strcpy(Objects[ARTIFACTID+9].objstr,"Key");
X  strcpy(Objects[ARTIFACTID+9].truename,"Kolwynia, the Key That Was Lost");
X  strcpy(Objects[ARTIFACTID+9].cursestr,"Kolwynia, the Key That was Lost");
X  Objects[ARTIFACTID+9].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+9].usef = I_KOLWYNIA;
X  Objects[ARTIFACTID+9].weight = 1;
X  Objects[ARTIFACTID+9].level = 7;
X  Objects[ARTIFACTID+9].basevalue = 5000;
X  potionname(FALSE,Objects[ARTIFACTID+10].objstr);
X  strcpy(Objects[ARTIFACTID+10].truename,"Potion of Death");
X  strcpy(Objects[ARTIFACTID+10].cursestr,"Potion of Death");
X  Objects[ARTIFACTID+10].usef = I_DEATH;
X  Objects[ARTIFACTID+10].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+10].weight = 10;
X  Objects[ARTIFACTID+10].level = 3;
X  Objects[ARTIFACTID+10].basevalue = 500;
X  strcpy(Objects[ARTIFACTID+11].objstr,"Scintillating Staff");
X  strcpy(Objects[ARTIFACTID+11].truename,"Staff of Enchantment");
X  strcpy(Objects[ARTIFACTID+11].cursestr,"Staff of Enchantment");
X  Objects[ARTIFACTID+11].usef = I_ENCHANTMENT;
X  Objects[ARTIFACTID+11].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+11].level = 5;
X  Objects[ARTIFACTID+11].weight = 100;
X  Objects[ARTIFACTID+11].basevalue = 2000;
X  strcpy(Objects[ARTIFACTID+12].objstr,"Strange Weightless Helm");
X  strcpy(Objects[ARTIFACTID+12].truename,"Helm of Teleportation");
X  strcpy(Objects[ARTIFACTID+12].cursestr,"Helm of Teleportation");
X  Objects[ARTIFACTID+12].usef = I_HELM;
X  Objects[ARTIFACTID+12].weight = 0;
X  Objects[ARTIFACTID+12].level = 2;
X  Objects[ARTIFACTID+12].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+12].basevalue = 1500;
X  potionname(FALSE,Objects[ARTIFACTID+13].objstr);
X  strcpy(Objects[ARTIFACTID+13].truename,"Potion of Life");
X  strcpy(Objects[ARTIFACTID+13].cursestr,"Potion of Life");
X  Objects[ARTIFACTID+13].usef = I_LIFE;
X  Objects[ARTIFACTID+13].weight = 10;
X  Objects[ARTIFACTID+13].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+13].level = 1;
X  Objects[ARTIFACTID+13].basevalue = 500;
X  strcpy(Objects[ARTIFACTID+14].truename,"Silver Gallows");
X  strcpy(Objects[ARTIFACTID+14].objstr,"Holy Symbol of Odin");
X  strcpy(Objects[ARTIFACTID+14].cursestr,"Holy Symbol of Odin");
X  Objects[ARTIFACTID+14].usef = I_SYMBOL;
X  Objects[ARTIFACTID+14].weight = 5;
X  Objects[ARTIFACTID+14].aux = ODIN;
X  Objects[ARTIFACTID+14].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+14].level = 10;
X  Objects[ARTIFACTID+14].basevalue = 5000;
X  strcpy(Objects[ARTIFACTID+15].truename,"Obsidian Crescent");
X  strcpy(Objects[ARTIFACTID+15].objstr,"Holy Symbol of Hecate");
X  strcpy(Objects[ARTIFACTID+15].cursestr,"Holy Symbol of Hecate");
X  Objects[ARTIFACTID+15].usef = I_SYMBOL;
X  Objects[ARTIFACTID+15].aux = HECATE;
X  Objects[ARTIFACTID+15].weight = 5;
X  Objects[ARTIFACTID+15].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+15].level = 10;
X  Objects[ARTIFACTID+15].basevalue = 5000;
X  strcpy(Objects[ARTIFACTID+16].truename,"Gold Owl Pendant");
X  strcpy(Objects[ARTIFACTID+16].objstr,"Holy Symbol of Athena");
X  strcpy(Objects[ARTIFACTID+16].cursestr,"Holy Symbol of Athena");
X  Objects[ARTIFACTID+16].usef = I_SYMBOL;
X  Objects[ARTIFACTID+16].aux = ATHENA;
X  Objects[ARTIFACTID+16].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+16].weight = 5;
X  Objects[ARTIFACTID+16].level = 10;
X  Objects[ARTIFACTID+16].basevalue = 5000;
X  strcpy(Objects[ARTIFACTID+17].truename,"Jet Scarab");
X  strcpy(Objects[ARTIFACTID+17].objstr,"Holy Symbol of Set");
X  strcpy(Objects[ARTIFACTID+17].cursestr,"Holy Symbol of Set");
X  Objects[ARTIFACTID+17].usef = I_SYMBOL;
X  Objects[ARTIFACTID+17].aux = SET;
X  Objects[ARTIFACTID+17].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+17].weight = 5;
X  Objects[ARTIFACTID+17].level = 10;
X  Objects[ARTIFACTID+17].basevalue = 5000;
X  strcpy(Objects[ARTIFACTID+18].truename,"Sprig of Mistletoe");
X  strcpy(Objects[ARTIFACTID+18].objstr,"Holy Symbol of Druidism");
X  strcpy(Objects[ARTIFACTID+18].cursestr,"Holy Symbol of Druidism");
X  Objects[ARTIFACTID+18].usef = I_SYMBOL;
X  Objects[ARTIFACTID+18].aux = DRUID;
X  Objects[ARTIFACTID+18].weight = 5;
X  Objects[ARTIFACTID+18].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+18].level = 10;
X  Objects[ARTIFACTID+18].basevalue = 5000;
X  strcpy(Objects[ARTIFACTID+19].truename,"Blue Crystal Pendant");
X  strcpy(Objects[ARTIFACTID+19].objstr,"Holy Symbol of Destiny");
X  strcpy(Objects[ARTIFACTID+19].cursestr,"Holy Symbol of Destiny");
X  Objects[ARTIFACTID+19].usef = I_SYMBOL;
X  Objects[ARTIFACTID+19].aux = DESTINY;
X  Objects[ARTIFACTID+19].weight = 5;
X  Objects[ARTIFACTID+19].uniqueness = UNIQUE_MADE;
X  Objects[ARTIFACTID+19].level = 10;
X  Objects[ARTIFACTID+19].basevalue = 5000;
X
X  strcpy(Objects[ARTIFACTID+20].objstr,"Crudely Carved Monolith");
X  strcpy(Objects[ARTIFACTID+20].truename,"The Juggernaut of Karnak");
X  strcpy(Objects[ARTIFACTID+20].cursestr,"The Juggernaut of Karnak");
X  Objects[ARTIFACTID+20].usef = I_JUGGERNAUT;
X  Objects[ARTIFACTID+20].uniqueness = UNIQUE_UNMADE;
X  Objects[ARTIFACTID+20].level = 6;
X  Objects[ARTIFACTID+20].weight = 1000;
X  Objects[ARTIFACTID+20].basevalue = 1000;
X
X  for (i=STICKID;i<STICKID+NUMSTICKS;i++) {
X    Objects[i].objchar = STICK;
X    stickname(FALSE,Objects[i].objstr);
X    Objects[i].weight = 80;
X    Objects[i].fragility = 10;
X  }
X
X  strcpy(Objects[STICKID+0].truename,"staff of firebolts");
X  strcpy(Objects[STICKID+0].cursestr,"staff of firebolts");
X  Objects[STICKID+0].usef=I_FIREBOLT;
X  Objects[STICKID+0].level = 3;
X  Objects[STICKID+0].basevalue = 500;
X  strcpy(Objects[STICKID+1].truename,"walking stick");
X  strcpy(Objects[STICKID+1].cursestr,"walking stick");
X  Objects[STICKID+1].usef=I_NOTHING;
X  Objects[STICKID+1].level=0;
X  Objects[STICKID+1].basevalue = 10;
X  strcpy(Objects[STICKID+2].truename,"staff of sleep");
X  strcpy(Objects[STICKID+2].cursestr,"staff of sleep");
X  Objects[STICKID+2].usef=I_SLEEP_OTHER;
X  Objects[STICKID+2].level=1;
X  Objects[STICKID+2].basevalue = 100;
X  strcpy(Objects[STICKID+3].truename,"wand of ball lightning");
X  strcpy(Objects[STICKID+3].cursestr,"wand of ball lightning");
X  Objects[STICKID+3].usef=I_LBALL;
X  Objects[STICKID+3].level=4;
X  Objects[STICKID+3].basevalue = 500;
X  strcpy(Objects[STICKID+4].truename,"rod of summoning");
X  strcpy(Objects[STICKID+4].cursestr,"rod of summoning");
X  Objects[STICKID+4].usef=I_SUMMON;
X  Objects[STICKID+4].level=2;
X  Objects[STICKID+4].basevalue = 500;
X  strcpy(Objects[STICKID+5].truename,"rod of hiding");
X  strcpy(Objects[STICKID+5].cursestr,"rod of hiding");
X  Objects[STICKID+5].usef=I_HIDE;
X  Objects[STICKID+5].level=1;
X  Objects[STICKID+5].basevalue = 100;
X  strcpy(Objects[STICKID+6].truename,"staff of lightning bolts");
X  strcpy(Objects[STICKID+6].cursestr,"staff of lightning bolts");
X  Objects[STICKID+6].usef=I_LBOLT;
X  Objects[STICKID+6].level=3;
X  Objects[STICKID+6].basevalue = 500;
X  strcpy(Objects[STICKID+7].truename,"wand of fireballs");
X  strcpy(Objects[STICKID+7].cursestr,"wand of fireballs");
X  Objects[STICKID+7].usef=I_FIREBALL;
X  Objects[STICKID+7].level=5;
X  Objects[STICKID+7].basevalue = 500;
X  strcpy(Objects[STICKID+8].truename,"rod of disintegration");
X  strcpy(Objects[STICKID+8].cursestr,"rod of disintegration");
X  Objects[STICKID+8].usef=I_DISINTEGRATE;
X  Objects[STICKID+8].level=7;
X  Objects[STICKID+8].basevalue = 2000;
X  strcpy(Objects[STICKID+9].truename,"staff of disruption");
X  strcpy(Objects[STICKID+9].cursestr,"staff of disruption");
X  Objects[STICKID+9].usef=I_DISRUPT;
X  Objects[STICKID+9].level=6;
X  Objects[STICKID+9].basevalue = 1000;
X  strcpy(Objects[STICKID+10].truename,"snowball stick");
X  strcpy(Objects[STICKID+10].cursestr,"snowball stick");
X  Objects[STICKID+10].usef=I_SNOWBALL;
X  Objects[STICKID+10].level=2;
X  Objects[STICKID+10].basevalue = 100;
X  strcpy(Objects[STICKID+11].truename,"staff of missiles");
X  strcpy(Objects[STICKID+11].cursestr,"staff of missiles");
X  Objects[STICKID+11].usef=I_MISSILE;
X  Objects[STICKID+11].level=1;
X  Objects[STICKID+11].basevalue = 50;
X  strcpy(Objects[STICKID+12].truename,"rod of apportation");
X  strcpy(Objects[STICKID+12].cursestr,"rod of lossage");
X  Objects[STICKID+12].usef=I_APPORT;
X  Objects[STICKID+12].level=2;
X  Objects[STICKID+12].basevalue = 200;
X  strcpy(Objects[STICKID+13].truename,"staff of dispelling");
X  strcpy(Objects[STICKID+13].cursestr,"staff of self-dispelling");
X  Objects[STICKID+13].usef=I_DISPEL;
X  Objects[STICKID+13].level=6;
X  Objects[STICKID+13].basevalue = 750;
X  strcpy(Objects[STICKID+14].truename,"staff of healing");
X  strcpy(Objects[STICKID+14].cursestr,"staff of harming");
X  Objects[STICKID+14].usef=I_HEAL;
X  Objects[STICKID+14].level=3;
X  Objects[STICKID+14].basevalue = 500;
X  strcpy(Objects[STICKID+15].truename,"wand of stupidity");
X  strcpy(Objects[STICKID+15].cursestr,"wand of stupidity");
X  Objects[STICKID+15].usef=I_POLYMORPH;
X  Objects[STICKID+15].level=3;
X  Objects[STICKID+15].basevalue = 1000;
X
X  for (i=BOOTID;i<BOOTID+NUMBOOTS;i++) {
X    Objects[i].objchar = BOOTS;
X    Objects[i].weight = 30;
X    Objects[i].fragility = 6;
X    bootname(FALSE,Objects[i].objstr);
X  }
X
X  strcpy(Objects[BOOTID+0].truename,"boots of speed");
X  strcpy(Objects[BOOTID+0].cursestr,"boots of slowness");
X  Objects[BOOTID+0].usef = I_PERM_SPEED;
X  Objects[BOOTID+0].level = 4;
X  Objects[BOOTID+0].basevalue = 1000;
X
X  strcpy(Objects[BOOTID+1].truename,"boots of heroism");
X  strcpy(Objects[BOOTID+1].cursestr,"boots of cowardliness");
X  Objects[BOOTID+1].usef = I_PERM_HERO;
X  Objects[BOOTID+1].level = 6;
X  Objects[BOOTID+1].basevalue = 1000;
X
X  strcpy(Objects[BOOTID+2].truename,"boots of levitation");
X  strcpy(Objects[BOOTID+2].cursestr,"boots of levitation");
X  Objects[BOOTID+2].usef = I_PERM_LEVITATE;
X  Objects[BOOTID+2].level = 3;
X  Objects[BOOTID+2].basevalue = 500;
X
X  strcpy(Objects[BOOTID+3].truename,"boots of agility");
X  strcpy(Objects[BOOTID+3].cursestr,"boots of clumsiness");
X  Objects[BOOTID+3].usef = I_PERM_AGILITY;
X  Objects[BOOTID+3].level = 3;
X  Objects[BOOTID+3].basevalue = 250;
X
X  strcpy(Objects[BOOTID+4].truename,"jumping boots");
X  strcpy(Objects[BOOTID+4].cursestr,"jumping boots");
X  Objects[BOOTID+4].usef = I_BOOTS_JUMPING;
X  Objects[BOOTID+4].level = 2;
X  Objects[BOOTID+4].basevalue = 200;
X
X  strcpy(Objects[BOOTID+5].truename,"boots of leather");
X  strcpy(Objects[BOOTID+5].cursestr,"boots of leather");
X  Objects[BOOTID+5].usef = I_NO_OP;
X  Objects[BOOTID+5].level = 0;
X  Objects[BOOTID+5].basevalue = 7;
X
X  for (i=CLOAKID;i<NUMCLOAKS+CLOAKID;i++) {
X    Objects[i].objchar = CLOAK;
X    Objects[i].weight = 30;
X    Objects[i].fragility = 4;
X    cloakname(FALSE,Objects[i].objstr);
X  }
X
X  strcpy(Objects[CLOAKID+0].truename,"cloak of wool");
X  strcpy(Objects[CLOAKID+0].cursestr,"cloak of wool");
X  Objects[CLOAKID+0].usef = I_NO_OP;
X  Objects[CLOAKID+0].level = 0;
X  Objects[CLOAKID+0].basevalue = 15;
X
X  strcpy(Objects[CLOAKID+1].truename,"cloak of negimmunity");
X  strcpy(Objects[CLOAKID+1].cursestr,"cloak of level drain");
X  Objects[CLOAKID+1].usef = I_PERM_NEGIMMUNE;
X  Objects[CLOAKID+1].level = 3;
X  Objects[CLOAKID+1].basevalue = 500;
X
X  strcpy(Objects[CLOAKID+2].truename,"cloak of invisibility");
X  strcpy(Objects[CLOAKID+2].cursestr,"cloak of invisibility");
X  Objects[CLOAKID+2].usef = I_PERM_INVISIBLE;
X  Objects[CLOAKID+2].level = 5;
X  Objects[CLOAKID+2].basevalue = 500;
X
X  strcpy(Objects[CLOAKID+3].truename,"cloak of skill");
X  strcpy(Objects[CLOAKID+3].cursestr,"cloak of skill");
X  Objects[CLOAKID+3].usef = I_PERM_ACCURACY;
X  Objects[CLOAKID+3].level = 5;
X  Objects[CLOAKID+3].basevalue = 1000;
X
X  strcpy(Objects[CLOAKID+4].truename,"cloak of protection");
X  strcpy(Objects[CLOAKID+4].cursestr,"cloak of damage");
X  Objects[CLOAKID+4].usef = I_PERM_PROTECTION;
X  Objects[CLOAKID+4].level = 3;
X  Objects[CLOAKID+4].basevalue = 500;
X
X  strcpy(Objects[CLOAKID+5].truename,"cloak of displacement");
X  strcpy(Objects[CLOAKID+5].cursestr,"cloak of vulnerability");
X  Objects[CLOAKID+5].usef = I_PERM_DISPLACE;
X  Objects[CLOAKID+5].level = 6;
X  Objects[CLOAKID+5].basevalue = 2000;
X
X  strcpy(Objects[CLOAKID+6].truename,"cloak of true sight");
X  strcpy(Objects[CLOAKID+6].cursestr,"cloak of blindness");
X  Objects[CLOAKID+6].usef = I_PERM_TRUESIGHT;
X  Objects[CLOAKID+6].level = 3;
X  Objects[CLOAKID+6].basevalue = 500;
X
X
X
X  for (i=RINGID;i<RINGID+NUMRINGS;i++) {
X    Objects[i].objchar = RING;
X    Objects[i].weight = 1;
X    Objects[i].fragility = 10;
X    ringname(FALSE,Objects[i].objstr);
X  }
X
X  strcpy(Objects[RINGID+0].truename,"ring of vision"); 
X  strcpy(Objects[RINGID+0].cursestr,"ring of vision"); 
X  Objects[RINGID+0].usef = I_PERM_VISION;
X  Objects[RINGID+0].level = 1;
X  Objects[RINGID+0].basevalue = 200;
X
X  strcpy(Objects[RINGID+1].truename,"ring of burden");
X  strcpy(Objects[RINGID+1].cursestr,"ring of burden");
X  Objects[RINGID+1].usef = I_PERM_BURDEN;
X  Objects[RINGID+1].level = 0;
X  Objects[RINGID+1].blessing = -1;
X  Objects[RINGID+1].basevalue = 1;
X
X  strcpy(Objects[RINGID+2].truename,"ring of strength");
X  strcpy(Objects[RINGID+2].cursestr,"ring of strength");
X  Objects[RINGID+2].usef = I_PERM_STRENGTH;
X  Objects[RINGID+2].level = 1;
X  Objects[RINGID+2].basevalue = 100;
X
X  strcpy(Objects[RINGID+3].truename,"ring of gaze immunity");
X  strcpy(Objects[RINGID+3].cursestr,"ring of gaze immunity");
X  Objects[RINGID+3].usef = I_PERM_GAZE_IMMUNE;
X  Objects[RINGID+3].level = 2;
X  Objects[RINGID+3].basevalue = 100;
X
X  strcpy(Objects[RINGID+4].truename,"ring of fire resistance");
X  strcpy(Objects[RINGID+4].cursestr,"ring of fire resistance");
X  Objects[RINGID+4].usef = I_PERM_FIRE_RESIST;
X  Objects[RINGID+4].level = 3;
X  Objects[RINGID+4].basevalue = 100;
X
X  strcpy(Objects[RINGID+5].truename,"ring of brass and glass");
X  strcpy(Objects[RINGID+5].cursestr,"ring of brass and glass");
X  Objects[RINGID+5].basevalue = 10;
X
X  strcpy(Objects[RINGID+6].truename,"ring of poison resistance");
X  strcpy(Objects[RINGID+6].cursestr,"ring of poison");
X  Objects[RINGID+6].usef = I_PERM_POISON_RESIST;
X  Objects[RINGID+6].level = 4;
X  Objects[RINGID+6].basevalue = 100;
X
X  strcpy(Objects[RINGID+7].truename,"ring of regeneration");
X  strcpy(Objects[RINGID+7].cursestr,"ring of regeneration");
X  Objects[RINGID+7].usef = I_PERM_REGENERATE;
X  Objects[RINGID+7].level = 5;
X  Objects[RINGID+7].basevalue = 1000;
X
X  strcpy(Objects[RINGID+8].truename,"ring of self-knowledge");
X  strcpy(Objects[RINGID+8].cursestr,"ring of delusion");
X  Objects[RINGID+8].usef = I_PERM_KNOWLEDGE;
X  Objects[RINGID+8].level = 0;
X  Objects[RINGID+8].basevalue = 100;
X
X  strcpy(Objects[RINGID+9].truename,"ring of protection");
X  strcpy(Objects[RINGID+9].cursestr,"ring of vulnerability");
X  Objects[RINGID+9].usef = I_PERM_PROTECTION;
X  Objects[RINGID+9].level = 4;
X  Objects[RINGID+9].basevalue = 500;
X
X  /* Cash */
X  strcpy(Objects[CASHID].objstr,"money");
X  strcpy(Objects[CASHID].truename,"money");
X  strcpy(Objects[CASHID].cursestr,"money (the root of all evil)");
X  Objects[CASHID].usef = I_NO_OP;
X  Objects[CASHID].objchar = CASH;
X  Objects[CASHID].weight = 0;
X  Objects[CASHID].level = 0;
X  Objects[CASHID].fragility = 10;
X  Objects[CASHID].basevalue = 0;
X
X
X
X  /* Da Corpse. */
X  strcpy(Objects[CORPSEID].objstr,"a mysterious corpse");
X  strcpy(Objects[CORPSEID].truename,"a mysterious corpse");
X  strcpy(Objects[CORPSEID].cursestr,"a mysterious corpse");
X  Objects[CORPSEID].usef = I_CORPSE;
X  Objects[CORPSEID].objchar = CORPSE;
X  Objects[CORPSEID].weight = 100;
X  Objects[CORPSEID].level = 0;
X  Objects[CORPSEID].fragility = 10;
X  Objects[CORPSEID].basevalue = 0;
X  
X}
END_OF_oinititem2.c
if test 35133 -ne `wc -c <oinititem2.c`; then
    echo shar: \"oinititem2.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f omega.update.history -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"omega.update.history\"
else
echo shar: Extracting \"omega.update.history\" \(357 characters\)
sed "s/^X//" >omega.update.history <<'END_OF_omega.update.history'
XVersion			Changes
X=======			=======
X
X0.57(alpha)		First public release
X0.58(alpha)		bugfixes, I forget what else
X0.59(alpha)		bugfixes, better tactical combat mode ^c trapping
X
X0.60.2(alpha)		bugfixes, filechecking,	cuserid changed to getlogin,
X			brothel on city level, more foods. this file
X			started. new time mechanism, new module otime.
X			12/14/87. 
END_OF_omega.update.history
if test 357 -ne `wc -c <omega.update.history`; then
    echo shar: \"omega.update.history\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 8 \(of 15\).
cp /dev/null ark8isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 15 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0