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

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

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

#! /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 11 (of 15)."
# Contents:  oaux2.c oinititem1.c
# Wrapped by billr@tekred on Mon Jan 18 10:20:40 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f oaux2.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"oaux2.c\"
else
echo shar: Extracting \"oaux2.c\" \(22148 characters\)
sed "s/^X//" >oaux2.c <<'END_OF_oaux2.c'
X/* omega copyright (C) by Laurence Raphael Brothers, 1987 */
X
X/* oaux2.c */
X
X/* some functions called by ocom.c, also see oaux2.c */ 
X/* This is a real grab bag file. It contains functions used by
X   oaux1 and o.c, as well as elsewhere. It is mainly here so oaux1.c
X   is not huge */
X
X#include <strings.h>
X#include "oglob.h"
X
X/* from ospell */
Xextern char *spellid();
X
X/* from oeffect 1 or 2 */
Xextern void manastorm();
X
X/* from oitemf */
Xextern void weapon_normal_hit(),weapon_demonblade(),weapon_lightsabre();
Xextern void weapon_mace_disrupt(),weapon_bare_hands();
Xextern void weapon_vorpal(),weapon_desecrate(),weapon_firestar();
Xextern void weapon_defend(),weapon_victrix(),weapon_tangle();
Xextern void weapon_arrow(),weapon_bolt();
X
X/* from oitem */
Xextern void item_use(),damage_item();
X
X/* from oinv */
Xextern void pickup_at(),drop_at(),givemonster(),conform_lost_objects();
Xextern void conform_unused_object(),add_item_to_pack();
Xextern char *itemid();
Xextern int getitem(),badobject(),cursed();
X
X/* from outil */
Xextern int random_range();
Xextern int inbounds(),confirmation();
Xextern char inversedir();
Xextern char *getarticle();
Xextern int unblocked(),bitp();
Xextern void bitset(),bitreset();
X
X/* from oscr */
Xextern void showcursor(),refreshmsg(),drawspot(),describe_player();
Xextern void mprint(),endgraf(),showflags(),dataprint(),menuaddch();
Xextern void show_screen(),xredraw(),phaseprint();
Xextern void drawvision(),display_death(),morewait(),menumorewait();
Xextern void menuclear(),menuprint(),display_win(),mnumprint();
Xextern char mgetc(),lgetc(),ynq();
Xextern void screencheck();
X
X
X/* from ocom */
Xvoid p_process(),wwp();
X
X/* from omon */
Xextern void m_damage(),m_status_set(),m_status_reset(),m_death(),m_pickup();
Xextern void tacmonster();
Xextern int m_statusp();
X
X/* from oaux1 */
Xextern void p_damage(),calc_melee(),p_death();
X
X/* oaux2 functions */
Xchar *actionlocstr();
Xvoid break_weapon(),drop_weapon(),moon_check(),toggle_item_use();
Xvoid p_fumble(),p_win(),p_hit(),p_miss(),addring(),torch_check();
Xvoid top_level(),printactions(),movecursor(),p_drown();
Xvoid tacexecute(),weapon_use(),move_status_check(),hour_status_check();
Xint expval(),player_hit(),statmod(),item_value(),true_item_value();
X
X
X
X
X /* Player stats like str, agi, etc give modifications to various abilities
X    chances to do things, etc. Positive is good, negative bad. */
X int statmod(stat)
X int stat;
X {
X   return((stat-10)/2);
X }
X
X
X/* effects of hitting */
Xvoid p_hit (m,dmg,dtype)
Xstruct monster *m;
Xint dmg;
Xint dtype;
X{
X  int dmult;
X
X  /* chance for critical hit..., 3/10 */
X  switch (random_range(10)) {  
X    case 0:
X    if (random_range(100) < Player.level) {
X      strcpy(Str3,"You annihilate the ");
X      dmult = 1000;
X    }
X    else {
X      strcpy(Str3,"You blast "); 
X      dmult=5; 
X    }
X    break;
X    case 1:
X    case 2: strcpy(Str3,"You smash "); dmult=2; break;
X    default: strcpy(Str3,"You hit "); dmult=1; break;
X  } 
X  if (Lunarity == 1) dmult = dmult * 2;
X  else if (Lunarity == -1) dmult = dmult / 2;
X  if (m->uniqueness == COMMON) strcat(Str3,"the ");
X  strcat(Str3,m->monstring);
X  strcat(Str3,". ");
X  if (Tacmode) {
X    menuprint(Str3);
X    menuprint("\n");
X  }
X  else mprint(Str3);
X  m_damage(m,dmult * random_range(dmg),dtype);
X}
X
X/* and effects of missing */
Xvoid p_miss(m,dtype)
Xstruct monster *m;
Xint dtype;
X{
X  if (random_range(30)==1) /* fumble 1 in 30 */
X    p_fumble(dtype);
X  else {
X    strcpy(Str3,"You miss ");
X    if (m->uniqueness == COMMON) strcat(Str3,"the ");
X    strcat(Str3,m->monstring);
X    strcat(Str3,". ");
X    if (Tacmode) {
X      menuprint(Str3);
X      menuprint("\n");
X    }
X    else mprint(Str3);
X  }
X}  
X
X/* oh nooooo, a fumble.... */
Xvoid p_fumble(dtype)
Xint dtype;
X{
X  mprint("Ooops! You fumbled....");
X  switch(random_range(10)) {
X    case 0:
X    case 1:
X    case 2:
X    case 3: 
X    case 4: 
X    case 5: drop_weapon(); break;
X    case 6:
X    case 7:
X    case 8: break_weapon(); break;
X    case 9: mprint("Oh No! You hit yourself!");
X	    p_damage(Player.dmg,dtype,"stupidity");
X	    break;
X  }
X}	    
X
X/* try to drop a weapon (from fumbling) */
Xvoid drop_weapon()
X{
X  int i;
X  if (Player.primary != NULL) {
X    strcpy(Str1,"You dropped your ");
X    strcat(Str1,Player.primary->objstr);
X    mprint(Str1);
X    morewait();
X    p_drop_at(Player.x,Player.y,1,Player.primary);
X    conform_lost_objects(1,Player.primary);
X  }
X  else mprint("You feel fortunate.");
X}
X
X
X/* try to break a weapon (from fumbling) */
Xvoid break_weapon()
X{
X  if (Player.primary != NULL) {
X    strcpy(Str1,"Your ");
X    strcat(Str1,itemid(Player.primary));
X    strcat(Str1,"vibrates in your hand....");
X    mprint(Str1);
X    damage_item(Player.primary);
X    morewait();
X  }
X}
X
X
X/* hooray */
Xvoid p_win()
X{
X  mprint("You won!");
X  morewait();
X  display_win();
X  endgraf();
X  exit(0);
X}
X
X
X/* handle a h,j,k,l, etc., to change x and y by dx and dy */
Xvoid movecursor(x,y,dx,dy)
Xint *x,*y;
Xint dx,dy;
X{
X  if (inbounds(*x+dx,*y+dy)) {
X    *x += dx;
X    *y += dy;
X    screencheck(*y);
X  }
X  showcursor(*x,*y);
X}
X
X
X/* is Player immune to damage type dtype */
Xint p_immune(dtype)
Xint dtype;
X{
X  return(Player.immunity[dtype]);
X}
X
X
X
X
X
X
X/* deal with each possible stati -- values are per move */
X/* this function is executed every move */
X/* A value over 1000 indicates a permanent effect */
Xvoid move_status_check()
X{
X  int i;
X
X  if (Player.status[HASTED]>0) {
X    if (Player.status[HASTED] < 1000) {
X      Player.status[HASTED]--;
X      if (Player.status[HASTED]==0) {
X	mprint("The world speeds up.");
X	calc_melee();
X      }
X    }
X  }
X
X
X  if (Player.status[POISONED]>0) {
X    Player.status[POISONED]--;
X    p_damage(3,POISON,"poison");
X    if (Player.status[POISONED] == 0) {
X      showflags();
X      mprint("You feel better now.");
X    }
X  }
X
X
X  if (Player.immunity[UNSTOPPABLE]>0) {
X    for(i=0;i<NUMIMMUNITIES;i++)
X    Player.immunity[i]--;
X    if (Player.immunity[UNSTOPPABLE]==1)
X      mprint("You feel vincible again.");
X  }
X
X
X  if (Player.status[IMMOBILE]>0) {
X    Player.status[IMMOBILE]--;
X    if (Player.status[IMMOBILE] == 0) 
X      mprint("You can move again.");
X  }
X
X
X  if (Player.status[SLEPT]>0) {
X    Player.status[SLEPT]--;
X    Skipplayer = TRUE;
X    if (Player.status[SLEPT] == 0) {
X      mprint("You woke up.");
X      Skipplayer = FALSE;
X    }
X  }
X
X  if (Player.status[REGENERATING]>0) {
X    if (Player.hp < Player.maxhp) Player.hp++;
X    if (Player.status[REGENERATING] < 1000) {
X      Player.status[REGENERATING]--;
X      if (Player.status[REGENERATING] == 0) {
X	mprint("You feel less homeostatic.");
X      }
X    }
X  }
X
X  if (Player.status[SLOWED]>0) {
X    if (Player.status[SLOWED] < 1000) {
X      Player.status[SLOWED]--;
X      if (Player.status[SLOWED] == 0) {
X	mprint("You feel quicker now.");
X	calc_melee();
X      }
X    }
X  }
X
X  if (Player.status[RETURNING]>0) {
X    Player.status[RETURNING]--;
X    if (Player.status[RETURNING] == 150)
X      mprint("Your spell slowly hums towards activation...");
X    else if (Player.status[RETURNING] == 100)
X      mprint("There is an electric tension in the air!");
X    else if (Player.status[RETURNING] == 50)
X      mprint("A vortex of mana begins to form around you!");
X    else if (Player.status[RETURNING] == 10)
X      mprint("Your surroundings start to warp and fade!");
X    if (Player.status[RETURNING] == 0) {
X      mprint("The vortex of mana carries you off!");
X      level_return();
X    }
X  }
X  
X  if (Player.status[AFRAID]>0) {
X    if (Player.status[AFRAID] < 1000) {
X      Player.status[AFRAID]--;
X      if (Player.status[AFRAID] == 0) {
X	mprint("You feel bolder now.");
X      }
X    }
X  }
X  
X}
X
X
X
X/* effect of gamma ray radiation... */
Xvoid moon_check()
X{
X  /* 24 day lunar cycle */
X  Phase = (Phase+1)%24;
X  phaseprint();
X  Lunarity = 0;
X  if (((Player.patron == DRUID) && ((Phase/2 == 3) || (Phase/2 == 9))) ||
X      ((Player.alignment > 10) && (Phase/2 == 6)) ||
X      ((Player.alignment < -10) && (Phase/2 == 0))) {
X    mprint("As the moon rises you feel unusually vital!");
X    Lunarity = 1;
X  }
X  else
X  if (((Player.patron == DRUID) && ((Phase/2 == 0) || (Phase/2 == 6))) ||
X      ((Player.alignment > 10) && (Phase/2 == 0)) ||
X      ((Player.alignment < -10) && (Phase/2 == 6))) {
X    mprint("The rise of the moon tokens a strange enervation!");
X    Lunarity = -1;
X  }
X
X}
X
X
Xvoid torch_check()
X{
X  int i;
X  for(i=0;i<MAXITEMS;i++) 
X    if (Player.possessions[i]!=NULL)
X      if ((Player.possessions[i]->id == THINGID+8) && /*torch */
X	  (Player.possessions[i]->used) &&
X	  (Player.possessions[i]->aux > 0)) {
X	Player.possessions[i]->aux--;
X	if (Player.possessions[i]->aux==0) {
X	  mprint("Your torch goes out!!!");
X	  conform_unused_object(Player.possessions[i]);
X	  if (Player.possessions[i]->number > 1) {
X	    Player.possessions[i]->number--;
X	    Player.possessions[i]->aux = 6;
X	  }
X	  else {
X	    Player.possessions[i]->usef = I_NO_OP;
X	    strcpy(Player.possessions[i]->objstr,"burnt-out torch");
X	    strcpy(Player.possessions[i]->truename,"burnt-out torch");
X	    strcpy(Player.possessions[i]->cursestr,"burnt-out torch");
X	  }
X	}
X      }
X}
X
X/* these values are in hours */
X/* this function is checked hourly */
X/* values over 1000 indicate a permanent effect */
Xvoid hour_status_check()
X{
X  if (hour()==0) { /* midnight, a new day */
X    moon_check();
X    Date++;
X  }
X  torch_check();
X  if ((Player.status[SHADOWFORM]>0) && (Player.status[SHADOWFORM]<1000)) {
X    Player.status[SHADOWFORM]--;
X    if (Player.status[SHADOWFORM] == 0) {
X      Player.immunity[NORMAL_DAMAGE]--;
X      Player.immunity[ACID]--;
X      Player.immunity[THEFT]--;
X      Player.immunity[INFECTION]--;
X      mprint("You feel less shadowy now.");
X    }
X  }
X
X  if ((Player.status[VULNERABLE]>0) && (Player.status[VULNERABLE]<1000)){
X    Player.status[VULNERABLE]--;
X    if (Player.status[VULNERABLE] == 0)
X      mprint("You feel less endangered.");
X  }
X
X  if ((Player.status[ACCURATE]>0) && (Player.status[ACCURACY]<1000)){
X    Player.status[ACCURATE]--;
X    if (Player.status[ACCURATE] == 0) {
X      calc_melee();
X      mprint("The bulls' eyes go away.");
X    }
X  }
X  if ((Player.status[HERO]>0) && (Player.status[HERO]<1000)){
X    Player.status[HERO]--;
X    if (Player.status[HERO] == 0) {
X      calc_melee();
X      mprint("You feel less than super.");
X    }
X  }
X
X  if ((Player.status[LEVITATING]>0) && (Player.status[LEVITATING]<1000)){
X    Player.status[LEVITATING]--;
X    if (Player.status[LEVITATING] == 0)
X      mprint("You're no longer walking on air.");
X  }
X
X  if (Player.status[DISEASED]>0) {
X    Player.status[DISEASED]--;
X    if (Player.status[DISEASED] == 0) {
X      showflags();
X      mprint("You feel better now.");
X    }
X  }
X
X
X  if ((Player.status[INVISIBLE] > 0) && (Player.status[INVISIBLE]<1000)){
X    Player.status[INVISIBLE]--;
X    if (Player.status[INVISIBLE] == 0)
X      mprint("You feel more opaque now.");
X  }
X
X  if ((Player.status[BLINDED]>0) && (Player.status[BLINDED]<1000)) {
X    Player.status[BLINDED]--;
X    if (Player.status[BLINDED] == 0) 
X      mprint("You can see again.");
X  }
X
X  if ((Player.status[TRUESIGHT]>0) && (Player.status[TRUESIGHT]<1000)) {
X    Player.status[TRUESIGHT]--;
X    if (Player.status[TRUESIGHT] == 0) 
X      mprint("You feel less keen now.");
X  }
X
X  if ((Player.status[BERSERK]>0) && (Player.status[BERSERK]<1000)) {
X    Player.status[BERSERK]--;
X    if (Player.status[BERSERK] == 0) 
X      mprint("You stop foaming at the mouth.");
X  }
X
X  if ((Player.status[ALERT]>0) && (Player.status[ALERT] < 1000)) {
X    Player.status[ALERT]--;
X    if (Player.status[ALERT] == 0) 
X      mprint("You feel less alert now.");
X  }
X
X  if ((Player.status[BREATHING]>0) && (Player.status[BREATHING] < 1000)) {
X    Player.status[BREATHING]--;
X    if (Player.status[BREATHING] == 0) 
X      mprint("You feel somewhat congested."); 
X  }
X
X  if ((Player.status[DISPLACED]>0) && (Player.status[DISPLACED] < 1000)) {
X    Player.status[DISPLACED]--;
X    if (Player.status[DISPLACED]==0) 
X      mprint("You feel a sense of position.");
X  }
X  timeprint();
X}
X
X
X
X/* Increase in level at appropriate experience gain */
Xvoid gain_level()
X{
X  if (expval(Player.level+1) <= Player.xp) {
X    Player.level++;
X    mprint("You have attained a new level of experience!");
X    Player.maxhp += random_range(Player.con)+1;
X    Player.mana = Player.maxmana = calcmana();
X    gain_level();
X  }
X  calc_melee();
X}
X
X/* experience requirements */
Xint expval(plevel)
Xint plevel;
X{
X  switch(plevel) {
X    case 0:return(0);break;
X    case 1:return(20);break;
X    case 2:return(40);break;
X    case 3:return(80);break;
X    case 4:return(160);break;
X    case 5:return(320);break;
X    case 6:return(640);break;
X    case 7:return(1280);break;
X    case 8:return(2560);break;
X    case 9:return(5120);break;
X    case 10:return(10240);break;
X    default:return((plevel-9) * 10240); break;
X  }
X}
X
X/* If an item is unidentified, it isn't worth much to those who would buy it */
Xint item_value(item)
Xpob item;
X{
X  if (item->known == 0) {
X    if (item->objchar == THING) return(1);
X    else return(true_item_value(item) / 10);
X  }
X  else if (item->known == 1) {
X    if (item->objchar == THING) return(item->basevalue);
X    else return(item->basevalue / 2);
X  }
X  else return(true_item_value(item));
X}
X
X
X/* figures value based on item base-value, charge, plus, and blessing */
Xint true_item_value(item)
Xpob item;
X{
X  float value = item->basevalue;
X  
X  if (item->objchar == THING) return(item->basevalue);
X  else {
X    if (item->objchar == STICK) value *= (1.0 + (item->charge/20.0));
X    if (item->plus > -1.0) value *= (1.0 + (item->plus/4.0));
X    else value *= (1.0/abs(item->plus));
X    if (item->blessing > 0) value *= 2.0;
X    return((int) value);
X  }
X}
X
X/* kill of player if he isn't got the "breathing" status */
Xvoid p_drown()
X{
X  if (Player.status[BREATHING] > 0)
X    mprint("Your breathing is unaffected!");
X  else {
X    mprint("You try to hold your breath....");
X    mprint("You choke....");
X    mprint("Your lungs fill...");
X    p_death("drowning");
X  }
X}
X
X
X/* the effect of some weapon on monster m, with dmgmod a bonus to damage */
Xvoid weapon_use(dmgmod,weapon,m)
Xint dmgmod;
Xpob weapon;
Xstruct monster *m;
X{
X  int aux = (weapon==NULL ? -2 : weapon->aux); /* bare hands */
X  switch(aux) {
X    case -2: weapon_bare_hands(dmgmod,m); break;
X    case I_NO_OP: weapon_normal_hit(dmgmod,weapon,m); break;
X    case I_TANGLE: weapon_tangle(dmgmod,weapon,m); break;
X    case I_ARROW: weapon_arrow(dmgmod,weapon,m); break;
X    case I_BOLT: weapon_bolt(dmgmod,weapon,m); break;
X    case I_DEMONBLADE: weapon_demonblade(dmgmod,weapon,m); break;
X    case I_LIGHTSABRE: weapon_lightsabre(dmgmod,weapon,m); break;
X    case I_MACE_DISRUPT: weapon_mace_disrupt(dmgmod,weapon,m); break;
X    case I_VORPAL: weapon_vorpal(dmgmod,weapon,m); break;
X    case I_DESECRATE: weapon_desecrate(dmgmod,weapon,m); break;
X    case I_FIRESTAR: weapon_firestar(dmgmod,weapon,m); break;
X    case I_DEFEND: weapon_defend(dmgmod,weapon,m); break;
X    case I_VICTRIX: weapon_victrix(dmgmod,weapon,m); break;
X  }
X}
X
X/* auxiliary for tacmode: block, attack, lunge, riposte actions */
Xint getlocation()
X{
X  char response;
X  menuprint(" low, center, or high [lch]: ");
X  do
X    response = mgetc();
X  while((response!='l')&&(response!='c')&&(response!='h'));
X  if (response == 'l') return(LOW);
X  else return(response=='c' ? CENTER : HIGH);
X}
X
Xvoid printactions(pnumactions,p_actions)
Xint pnumactions,p_actions[10];
X{
X  int i;
X  menuprint("\nActions:\n");
X  for(i=0;i<pnumactions;i++) {
X    switch(p_actions[i] - (p_actions[i] % 10)) {
X    case PICK_UP: 
X      strcpy(Str1,"Pick up item.");
X      i = pnumactions;
X      break;
X    case WIELD: 
X      strcpy(Str1,"Wield item.");
X      i = pnumactions;
X      break;
X    case BLOCK: 
X      strcpy(Str1,"Block");
X      strcat(Str1,actionlocstr(p_actions[i] % 10));
X      break;
X    case CUT: 
X      strcpy(Str1,"Cut");
X      strcat(Str1,actionlocstr(p_actions[i] % 10));
X      break;
X    case THRUST: 
X      strcpy(Str1,"Thrust");
X      strcat(Str1,actionlocstr(p_actions[i] % 10));
X      break;
X    case RIPOSTE: 
X      strcpy(Str1,"Riposte");
X      strcat(Str1,actionlocstr(p_actions[i] % 10));
X      break;
X    case MAGIC:
X      strcpy(Str1,"Cast Spell --");
X      strcat(Str1,spellid(p_actions[2]));
X      i = pnumactions;
X      break;
X    case LUNGE:
X      strcpy(Str1,"Lunge");
X      strcat(Str1,actionlocstr(p_actions[i] % 10));
X      break;
X    case DISENGAGE:
X      strcpy(Str1,"Disengage.");
X      i = pnumactions;
X      break;
X    default:
X      strcpy(Str1,"Nothing.");
X      break;
X    }
X    menuprint(Str1);
X    menuprint("\n");
X  }
X}
X
X/* for printing actions in printactions above */
Xchar *actionlocstr(dir)
Xint dir;
X{
X  switch(dir) {
X  case LOW: return(" low."); break;
X  case CENTER: return(" center."); break;
X  case HIGH: return(" high."); break;
X  default: return("."); break;
X  }
X}
X
X
X/* execute actions chosen in tacplayer and tacmonster() */
Xvoid tacexecute(p_actions,pnumactions,m_actions,mnumactions,m)
Xint pnumactions,p_actions[10],mnumactions,m_actions[10];
Xstruct monster *m;
X{
X  int i,j,hitmod;
X
X  /* player actions first */
X  for (i=0;i<pnumactions;i++) {
X    if (m->hp > 0) {
X      menuprint("\n");
X      switch(p_actions[i]-(p_actions[i]%10)){
X      case DISENGAGE:
X	menuprint("\nYou try to disengage...");
X	if (Player.agi+Player.level + random_range(20) >
X	    m->level*2+m->speed*5+random_range(20)) {
X	  menuprint("\nYou get away!");
X	  Tacmode = FALSE;
X	  Skipmonsters = TRUE;
X	}
X	else menuprint("\nYou don't get away!");
X	break;
X      case THRUST:
X	if (Player.primary == NULL) strcpy(Str1,"You jab");
X	else if (Player.primary->type == MISSILE) strcpy(Str1,"You shoot");
X	else strcpy(Str1,"You thrust");
X	strcat(Str1,actionlocstr(p_actions[i] % 10));
X	menuprint(Str1);
X	hitmod = 0;
X	for (j=0;j<pnumactions;j++)
X	  if (((p_actions[j] - (p_actions[j] % 10) == BLOCK) ||
X	       (p_actions[j] - (p_actions[j] % 10) == RIPOSTE)) &&
X	      (p_actions[j] % 10 == p_actions[i] % 10))
X	    hitmod -= 10;
X	if (player_hit(2*statmod(Player.dex)+hitmod,p_actions[i] % 10,
X		       mnumactions,
X		       m_actions,
X		       m))
X	  weapon_use(0,Player.primary,m);
X	else p_miss(m,NORMAL_DAMAGE);
X	break;
X      case CUT:
X	if (Player.primary == NULL) strcpy(Str1,"You punch");
X	else if (Player.primary->type == CUTTING) strcpy(Str1,"You cut");
X	else if (Player.primary->type == STRIKING) strcpy(Str1,"You strike");
X	strcat(Str1,actionlocstr(p_actions[i] % 10));
X	menuprint(Str1);
X	hitmod = 0;
X	for (j=0;j<pnumactions;j++)
X	  if (((p_actions[j] - (p_actions[j] % 10) == BLOCK) ||
X	       (p_actions[j] - (p_actions[j] % 10) == RIPOSTE)) &&
X	      (p_actions[j] % 10 == p_actions[i] % 10))
X	    hitmod -= 10;
X	if (player_hit(hitmod,p_actions[i] % 10,
X		       mnumactions,
X		       m_actions,
X		       m))
X	  weapon_use(2*statmod(Player.str),Player.primary,m);
X	else p_miss(m,NORMAL_DAMAGE);
X	break;
X      case MAGIC:
X	Player.mana -= Spells[p_actions[1]].powerdrain;
X	(*(Spells[p_actions[1]].castf))();
X	i = pnumactions;
X	break;
X      case PICK_UP:
X	pickup();
X	i = pnumactions;
X	break;
X      case WIELD:
X	wwp();
X	i = pnumactions;
X	break;
X      case LUNGE:
X	strcpy(Str1,"You lunge");
X	strcat(Str1,actionlocstr(p_actions[i] % 10));
X	menuprint(Str1);
X	hitmod = 0;
X	for (j=0;j<pnumactions;j++)
X	  if (((p_actions[j] - (p_actions[j] % 10) == BLOCK) ||
X	       (p_actions[j] - (p_actions[j] % 10) == RIPOSTE)) &&
X	      (p_actions[j] % 10 == p_actions[i] % 10))
X	    hitmod -= 10;
X	if (player_hit(Player.level+Player.dex+hitmod,
X		       p_actions[i] % 10,
X		       mnumactions,
X		       m_actions,
X		       m))
X	  weapon_use(Player.level,Player.primary,m);
X	else p_miss(m,NORMAL_DAMAGE);
X	break;
X      }
X    }
X  }
X
X
X  /* now monster actions */
X  for (i=0;i<mnumactions;i++) {
X    if (m->hp > 0) {
X      menuprint("\n");
X      switch(m_actions[i]-(m_actions[i]%10)){
X      case DISENGAGE:
X	menuprint("\nYour opponent tries to run away...");
X	if (Player.agi+Player.level + random_range(20) <
X	    m->level*2+m->speed*5+random_range(20)) {
X	  menuprint("\n...and succeeds!");
X	  m->movef = M_MOVE_SCAREDY;
X	  movemonster(m);
X	  movemonster(m);
X	  Tacmode = FALSE;
X	}
X	else menuprint("\n...and fails!");
X	break;
X      case CUT:
X	hitmod = 0;
X	for (j=0;j<mnumactions;j++)
X	  if (((m_actions[j] - (m_actions[j] % 10) == BLOCK) ||
X	       (m_actions[j] - (m_actions[j] % 10) == RIPOSTE)) &&
X	      (m_actions[j] % 10 == m_actions[i] % 10))
X	    hitmod -= 10;
X	m->hit += hitmod;
X	monster_melee(m);
X	m->hit -= hitmod;
X	break;
X      }
X    }
X  }
X  morewait();
X  monster_special(m);
X}
X
X
X
X
X/* checks to see if player hits with hitmod vs.monster m at location hitloc */
Xint player_hit(hitmod,hitloc,mnumactions,m_actions,m)
Xint hitmod,hitloc,mnumactions,m_actions[10];
Xstruct monster *m;
X{
X  int i,b,blocks=FALSE,goodblocks=0,hit;
X  if (m->hp < 1) {
X    mprint("Unfortunately, your opponent is already dead!");
X    return(FALSE);
X  }
X  else {
X    for(i=0;i<mnumactions;i++) 
X      if (m_actions[i] - (m_actions[i] % 10) == BLOCK) {
X	blocks = TRUE;
X	if (hitloc == m_actions[i] % 10)
X	  goodblocks++;
X      }
X    if (! blocks) goodblocks = -1;
X    hit = hitp(Player.hit+hitmod,m->ac+goodblocks*10);
X    if ((! hit) && (goodblocks > 0)) {
X      if (m->uniqueness == COMMON) {
X	strcpy(Str1,"The ");
X	strcat(Str1,m->monstring);
X      }
X      else strcpy(Str1,m->monstring);
X      strcat(Str1," blocks it!");
X      menuprint("\n");
X      menuprint(Str1);
X    }
X    return(hit);
X  }
X}
X
X
X
X/* This function is used to undo all items temporarily, should
Xalways be used in pairs with on being TRUE and FALSE, and may cause
Xanomalous stats and item-usage if used indiscriminately */
X
X
Xvoid toggle_item_use(on)
Xint on;
X{
X  static int used[MAXITEMS];
X  int i;
X  SuppressPrinting = TRUE;
X  if (on) 
X    for(i=0;i<MAXITEMS;i++) {
X      used[i] = FALSE;
X      if (Player.possessions[i] != NULL) {
X	if (used[i] = Player.possessions[i]->used) {
X	  Player.possessions[i]->used = FALSE;
X	  item_use(Player.possessions[i]);
X	}
X      }
X    }
X  else {
X    for(i=0;i<MAXITEMS;i++) 
X      if (used[i]) {
X	Player.possessions[i]->used = TRUE;
X	item_use(Player.possessions[i]);
X      }
X    calc_melee();
X    showflags();
X    dataprint();
X    timeprint();
X  }
X  SuppressPrinting = FALSE;
X}
END_OF_oaux2.c
if test 22148 -ne `wc -c <oaux2.c`; then
    echo shar: \"oaux2.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f oinititem1.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"oinititem1.c\"
else
echo shar: Extracting \"oinititem1.c\" \(32268 characters\)
sed "s/^X//" >oinititem1.c <<'END_OF_oinititem1.c'
X/* omega copyright (C) 1987 by Laurence Raphael Brothers */
X/* oinititem1.c */
X
X#include <strings.h>
X#include "oglob.h"
X
X/* from oitem */
Xextern void potionname(),scrollname(),ringname(),stickname(),cloakname();
Xextern void bootname();
X
X
Xvoid inititem1();
X
X/* initialize the item lists.... */
X/* also RESET *name functions */
Xvoid inititem1()
X{
X  int i;
X  potionname(TRUE,Str1);
X  scrollname(TRUE,Str1);
X  ringname(TRUE,Str1);
X  stickname(TRUE,Str1);
X  cloakname(TRUE,Str1);
X  bootname(TRUE,Str1);
X
X  for(i=0;i<TOTALITEMS;i++) {
X    Objects[i].id = i;
X    Objects[i].uniqueness = COMMON;
X    Objects[i].used = FALSE;
X    Objects[i].blessing = 0;
X    Objects[i].plus = 0;
X    Objects[i].number = 1;
X    Objects[i].level = 0;
X    Objects[i].aux = I_NO_OP;
X    Objects[i].known = 0;
X    Objects[i].dmg = 0;
X    Objects[i].usef = I_NO_OP;
X    strcpy(Objects[i].objstr,"Anomaly!");
X    strcpy(Objects[i].truename,"Enigma!");
X    strcpy(Objects[i].cursestr,"Antinomy!");
X  }
X
X
X  for (i=SCROLLID;i<SCROLLID+NUMSCROLLS;i++) {
X    scrollname(FALSE,Objects[i].objstr);
X    Objects[i].objchar = SCROLL;
X    Objects[i].weight = 5;
X    Objects[i].fragility = 1;
X  }
X
X  strcpy(Objects[SCROLLID+0].truename,"blank scroll"); 
X  Objects[SCROLLID+0].usef = I_NOTHING;
X  Objects[SCROLLID+0].level = 0;
X  Objects[SCROLLID+0].basevalue = 5; 
X  strcpy(Objects[SCROLLID+1].truename,"scroll of spells");
X  strcpy(Objects[SCROLLID+1].cursestr,"scroll of spell loss");
X  Objects[SCROLLID+1].usef = I_SPELLS;
X  Objects[SCROLLID+1].level = 1;
X  Objects[SCROLLID+1].basevalue = 250; 	    
X  strcpy(Objects[SCROLLID+2].truename,"scroll of blessing");
X  strcpy(Objects[SCROLLID+2].cursestr,"scroll of cursing");
X  Objects[SCROLLID+2].usef = I_BLESS;
X  Objects[SCROLLID+2].level = 2;
X  Objects[SCROLLID+2].basevalue = 400;
X  strcpy(Objects[SCROLLID+3].truename,"scroll of acquirement");
X  strcpy(Objects[SCROLLID+3].cursestr,"scroll of destruction");
X  Objects[SCROLLID+3].usef = I_ACQUIRE;
X  Objects[SCROLLID+3].level = 7;
X  Objects[SCROLLID+3].basevalue = 5000; 	    
X  strcpy(Objects[SCROLLID+4].truename,"scroll of enchantment");
X  strcpy(Objects[SCROLLID+4].cursestr,"scroll of disenchantment");
X  Objects[SCROLLID+4].usef = I_ENCHANT;
X  Objects[SCROLLID+4].level = 2;
X  Objects[SCROLLID+4].basevalue = 200; 	    
X  strcpy(Objects[SCROLLID+5].truename,"scroll of teleportation");
X  strcpy(Objects[SCROLLID+5].cursestr,"scroll of teleportation");
X  Objects[SCROLLID+5].usef = I_TELEPORT;
X  Objects[SCROLLID+5].level = 1;
X  Objects[SCROLLID+5].basevalue = 75; 	    
X  strcpy(Objects[SCROLLID+6].truename,"scroll of wishing");
X  strcpy(Objects[SCROLLID+6].cursestr,"scroll of wishing");
X  Objects[SCROLLID+6].usef = I_WISH;
X  Objects[SCROLLID+6].level = 10;
X  Objects[SCROLLID+6].basevalue = 10000; 	    
X  strcpy(Objects[SCROLLID+7].truename,"scroll of clairvoyance");
X  strcpy(Objects[SCROLLID+7].cursestr,"scroll of amnesia");
X  Objects[SCROLLID+7].usef = I_CLAIRVOYANCE;
X  Objects[SCROLLID+7].level = 1;
X  Objects[SCROLLID+7].basevalue = 25; 	    
X  strcpy(Objects[SCROLLID+8].truename,"scroll of displacement");
X  strcpy(Objects[SCROLLID+8].cursestr,"scroll of vulnerability");
X  Objects[SCROLLID+8].usef = I_DISPLACE;
X  Objects[SCROLLID+8].level = 2;
X  Objects[SCROLLID+8].basevalue = 50; 	    
X  strcpy(Objects[SCROLLID+9].truename,"scroll of identification");
X  strcpy(Objects[SCROLLID+9].cursestr,"scroll of forgetfulness");
X  Objects[SCROLLID+9].usef = I_ID;
X  Objects[SCROLLID+9].level = 0;
X  Objects[SCROLLID+9].basevalue = 20; 	    
X  strcpy(Objects[SCROLLID+10].truename,"hint sheet");
X  strcpy(Objects[SCROLLID+10].cursestr,"hint sheet");
X  Objects[SCROLLID+10].usef = I_HINT;
X  Objects[SCROLLID+10].level = 0;
X  Objects[SCROLLID+10].basevalue = 10; 	    
X  strcpy(Objects[SCROLLID+11].truename,"jane's guide to treasure");
X  strcpy(Objects[SCROLLID+11].cursestr,"jane's guide to treasure");
X  Objects[SCROLLID+11].usef = I_JANE_T;
X  Objects[SCROLLID+11].level = 2;
X  Objects[SCROLLID+11].basevalue = 50;
X  strcpy(Objects[SCROLLID+12].truename,"scroll of alertness");
X  strcpy(Objects[SCROLLID+12].cursestr,"scroll of drowsiness");
X  Objects[SCROLLID+12].usef = I_ALERT;
X  Objects[SCROLLID+12].level = 1;
X  Objects[SCROLLID+12].basevalue = 50;
X  strcpy(Objects[SCROLLID+13].truename,"scroll of cosmic flux");
X  strcpy(Objects[SCROLLID+13].cursestr,"scroll of cosmic flux");
X  Objects[SCROLLID+13].usef = I_FLUX;
X  Objects[SCROLLID+13].level = 5;
X  Objects[SCROLLID+13].basevalue = 300;
X  strcpy(Objects[SCROLLID+14].truename,"scroll of charging");
X  strcpy(Objects[SCROLLID+14].cursestr,"scroll of draining");
X  Objects[SCROLLID+14].usef = I_CHARGE;
X  Objects[SCROLLID+14].level = 2;
X  Objects[SCROLLID+14].basevalue = 100;
X  strcpy(Objects[SCROLLID+15].truename,"scroll of the warp");
X  strcpy(Objects[SCROLLID+15].cursestr,"scroll of the warp");
X  Objects[SCROLLID+15].usef = I_WARP;
X  Objects[SCROLLID+15].level = 3;
X  Objects[SCROLLID+15].basevalue = 100;
X  strcpy(Objects[SCROLLID+16].truename,"scroll of self-knowledge");
X  strcpy(Objects[SCROLLID+16].cursestr,"scroll of delusion");
X  Objects[SCROLLID+16].usef = I_KNOWLEDGE;
X  Objects[SCROLLID+16].level = 1;
X  Objects[SCROLLID+16].basevalue = 10;
X  strcpy(Objects[SCROLLID+17].truename,"scroll of law");
X  strcpy(Objects[SCROLLID+17].cursestr,"scroll of law");
X  Objects[SCROLLID+17].usef = I_LAW;
X  Objects[SCROLLID+17].level = 2;
X  Objects[SCROLLID+17].basevalue = 100;
X  strcpy(Objects[SCROLLID+18].truename,"scroll of heroism");
X  strcpy(Objects[SCROLLID+18].cursestr,"scroll of cowardliness");
X  Objects[SCROLLID+18].usef = I_HERO;
X  Objects[SCROLLID+18].level = 5;
X  Objects[SCROLLID+18].basevalue = 200;
X  strcpy(Objects[SCROLLID+19].truename,"scroll of true sight");
X  strcpy(Objects[SCROLLID+19].cursestr,"scroll of blindness");
X  Objects[SCROLLID+19].usef = I_TRUESIGHT;
X  Objects[SCROLLID+19].level = 2;
X  Objects[SCROLLID+19].basevalue = 50;
X  strcpy(Objects[SCROLLID+20].truename,"scroll of dispelling");
X  strcpy(Objects[SCROLLID+20].cursestr,"scroll of self-dispelling");
X  Objects[SCROLLID+20].usef = I_DISPEL;
X  Objects[SCROLLID+20].level = 3;
X  Objects[SCROLLID+20].basevalue = 250;
X  strcpy(Objects[SCROLLID+21].truename,"scroll of summoning");
X  strcpy(Objects[SCROLLID+21].cursestr,"scroll of summoning");
X  Objects[SCROLLID+21].usef = I_SUMMON;
X  Objects[SCROLLID+21].level = 2;
X  Objects[SCROLLID+21].basevalue = 300;
X  strcpy(Objects[SCROLLID+22].truename,"scroll of light");
X  strcpy(Objects[SCROLLID+22].cursestr,"scroll of darkness");
X  Objects[SCROLLID+22].usef = I_ILLUMINATE;
X  Objects[SCROLLID+22].level = 0;
X  Objects[SCROLLID+22].basevalue = 30;
X
X
X  /* aux is food value */
X  for (i=FOODID;i<FOODID+NUMFOODS;i++) {
X    Objects[i].objchar = FOOD;
X    Objects[i].fragility = 0;
X  }
X  strcpy(Objects[FOODID+0].objstr,"red and white striped bucket");
X  strcpy(Objects[FOODID+0].truename,"food ration");
X  strcpy(Objects[FOODID+0].cursestr,"food ration");
X  Objects[FOODID+0].usef = I_FOOD;
X  Objects[FOODID+0].level = 0;
X  Objects[FOODID+0].aux = 6;
X  Objects[FOODID+0].weight = 20;
X  Objects[FOODID+0].basevalue = 2; 
X  strcpy(Objects[FOODID+1].truename,"wafer of lembas");
X  strcpy(Objects[FOODID+1].cursestr,"wafer of lembas");
X  strcpy(Objects[FOODID+1].objstr,"wafer of lembas");
X  Objects[FOODID+1].usef = I_LEMBAS;
X  Objects[FOODID+1].level = 2;
X  Objects[FOODID+1].aux = 12;
X  Objects[FOODID+1].weight = 10;
X  Objects[FOODID+1].basevalue = 200; 
X  strcpy(Objects[FOODID+2].truename,"stimtab");
X  strcpy(Objects[FOODID+2].cursestr,"stimtab");
X  strcpy(Objects[FOODID+2].objstr,"small gray tablet");
X  Objects[FOODID+2].usef  = I_STIM;
X  Objects[FOODID+2].aux = 0;
X  Objects[FOODID+2].level  = 3;
X  Objects[FOODID+2].weight = 1;
X  Objects[FOODID+2].basevalue = 50; 	    
X  strcpy(Objects[FOODID+3].truename,"powtab");
X  strcpy(Objects[FOODID+3].cursestr,"powtab");
X  strcpy(Objects[FOODID+3].objstr,"small gray tablet");
X  Objects[FOODID+3].usef = I_POW;
X  Objects[FOODID+3].aux = 0;
X  Objects[FOODID+3].level = 3;
X  Objects[FOODID+3].weight = 1;
X  Objects[FOODID+3].basevalue = 100; 	    
X  strcpy(Objects[FOODID+4].truename,"nutritab");
X  strcpy(Objects[FOODID+4].cursestr,"nutritab");
X  strcpy(Objects[FOODID+4].objstr,"small gray tablet");
X  Objects[FOODID+4].usef = I_FOOD;
X  Objects[FOODID+4].aux = 18;
X  Objects[FOODID+4].level = 3;
X  Objects[FOODID+4].weight = 1;
X  Objects[FOODID+4].basevalue = 20; 	    
X  strcpy(Objects[FOODID+5].truename,"immunotab");
X  strcpy(Objects[FOODID+5].cursestr,"immunotab");
X  strcpy(Objects[FOODID+5].objstr,"small gray tablet");
X  Objects[FOODID+5].usef = I_IMMUNE;
X  Objects[FOODID+5].aux = 0;
X  Objects[FOODID+5].level = 3;
X  Objects[FOODID+5].weight = 1;
X  Objects[FOODID+5].basevalue = 500; 	    
X  strcpy(Objects[FOODID+6].truename,"jelly baby");
X  strcpy(Objects[FOODID+6].cursestr,"jelly baby");
X  strcpy(Objects[FOODID+6].objstr,"jelly baby");
X  Objects[FOODID+6].usef = I_FOOD;
X  Objects[FOODID+6].aux = 2;
X  Objects[FOODID+6].level = 0;
X  Objects[FOODID+6].weight = 1;
X  Objects[FOODID+6].basevalue = 1; 	    
X  strcpy(Objects[FOODID+7].truename,"poisoned ration");
X  strcpy(Objects[FOODID+7].cursestr,"poisoned ration");
X  strcpy(Objects[FOODID+7].objstr,"food ration");
X  Objects[FOODID+7].usef = I_POISON_FOOD;
X  Objects[FOODID+7].aux = -1;
X  Objects[FOODID+7].level = 1;
X  Objects[FOODID+7].weight = 20;
X  Objects[FOODID+7].basevalue = 25;
X  strcpy(Objects[FOODID+8].truename,"szechuan pepper");
X  strcpy(Objects[FOODID+8].cursestr,"szechuan pepper");
X  strcpy(Objects[FOODID+8].objstr,"withered reddish stringy vegetable");
X  Objects[FOODID+8].usef = I_PEPPER_FOOD;
X  Objects[FOODID+8].aux = -1;
X  Objects[FOODID+8].level = 2;
X  Objects[FOODID+8].weight = 2;
X  Objects[FOODID+8].basevalue = 100;
X  strcpy(Objects[FOODID+9].truename,"pepperoni pizza pie");
X  strcpy(Objects[FOODID+9].cursestr,"pepperoni pizza pie");
X  strcpy(Objects[FOODID+9].objstr,"messy red and white disk");
X  Objects[FOODID+9].usef = I_FOOD;
X  Objects[FOODID+9].aux = 6;
X  Objects[FOODID+9].level = 2;
X  Objects[FOODID+9].weight = 2;
X  Objects[FOODID+9].basevalue = 5;
X  strcpy(Objects[FOODID+10].truename,"brown bag with strange ideograms");
X  strcpy(Objects[FOODID+10].cursestr,"hunan take-out");
X  strcpy(Objects[FOODID+10].objstr,"hunan take-out");
X  Objects[FOODID+10].usef = I_FOOD;
X  Objects[FOODID+10].aux = 6;
X  Objects[FOODID+10].level = 2;
X  Objects[FOODID+10].weight = 2;
X  Objects[FOODID+10].basevalue = 7;
X  strcpy(Objects[FOODID+11].truename,"strange foamy cylinders");
X  strcpy(Objects[FOODID+11].cursestr,"twinkies");
X  strcpy(Objects[FOODID+11].objstr,"twinkies");
X  Objects[FOODID+11].usef = I_FOOD;
X  Objects[FOODID+11].aux = 2;
X  Objects[FOODID+11].level = 2;
X  Objects[FOODID+11].weight = 2;
X  Objects[FOODID+11].basevalue = 5;
X  strcpy(Objects[FOODID+12].truename,"squiggly orange spirals");
X  strcpy(Objects[FOODID+12].cursestr,"cheese-doodles");
X  strcpy(Objects[FOODID+12].objstr,"cheese-doodles");
X  Objects[FOODID+12].usef = I_FOOD;
X  Objects[FOODID+12].aux = 2;
X  Objects[FOODID+12].level = 2;
X  Objects[FOODID+12].weight = 2;
X  Objects[FOODID+12].basevalue = 4;
X  strcpy(Objects[FOODID+13].truename,"nutty-smelling helix");
X  strcpy(Objects[FOODID+13].cursestr,"pecan twirl");
X  strcpy(Objects[FOODID+13].objstr,"pecal twirl");
X  Objects[FOODID+13].usef = I_FOOD;
X  Objects[FOODID+13].aux = 16;
X  Objects[FOODID+13].level = 2;
X  Objects[FOODID+13].weight = 2;
X  Objects[FOODID+13].basevalue = 3;
X  strcpy(Objects[FOODID+14].truename,"pale white strips with green dots");
X  strcpy(Objects[FOODID+14].cursestr,"veal piccata with capers");
X  strcpy(Objects[FOODID+14].objstr,"veal piccata with capers");
X  Objects[FOODID+14].usef = I_FOOD;
X  Objects[FOODID+14].aux = 6;
X  Objects[FOODID+14].level = 2;
X  Objects[FOODID+14].weight = 2;
X  Objects[FOODID+14].basevalue = 75;
X
Xfor (i=THINGID;i<THINGID+NUMTHINGS;i++) 
X    Objects[i].objchar = THING;
X
X  strcpy(Objects[THINGID+0].objstr,"old copper pieces");
X  strcpy(Objects[THINGID+0].truename,"valuable rare coins");
X  strcpy(Objects[THINGID+0].cursestr,"valuable rare coins");
X  Objects[THINGID+0].weight = 20;
X  Objects[THINGID+0].fragility = 10;
X  Objects[THINGID+0].level = 2;
X  Objects[THINGID+0].basevalue = 500;
X  strcpy(Objects[THINGID+1].objstr,"some rocks");
X  strcpy(Objects[THINGID+1].truename,"uncut diamonds");
X  strcpy(Objects[THINGID+1].cursestr,"uncut diamonds");
X  Objects[THINGID+1].fragility = 20;
X  Objects[THINGID+1].weight = 20;
X  Objects[THINGID+1].level = 4;
X  Objects[THINGID+1].basevalue = 1000; 	    
X  strcpy(Objects[THINGID+2].objstr,"twisted piece of metal");
X  strcpy(Objects[THINGID+2].truename,"thieve's pick");
X  strcpy(Objects[THINGID+2].cursestr,"thieve's pick");
X  Objects[THINGID+2].fragility = 10;
X  Objects[THINGID+2].weight = 15;
X  Objects[THINGID+2].usef = I_PICK;
X  Objects[THINGID+2].level = 2;
X  Objects[THINGID+2].basevalue = 50;
X  strcpy(Objects[THINGID+3].objstr,"large green gem");
X  strcpy(Objects[THINGID+3].truename,"humongous emerald");
X  strcpy(Objects[THINGID+3].cursestr,"humongous emerald");
X  Objects[THINGID+3].fragility = 15;
X  Objects[THINGID+3].weight = 10;
X  Objects[THINGID+3].level = 1;
X  Objects[THINGID+3].basevalue = 500;
X  strcpy(Objects[THINGID+4].truename,"gold ingot");
X  strcpy(Objects[THINGID+4].cursestr,"gold ingot");
X  strcpy(Objects[THINGID+4].objstr,"gold ingot");
X  Objects[THINGID+4].fragility = 18;
X  Objects[THINGID+4].weight = 200;
X  Objects[THINGID+4].level = 4;
X  Objects[THINGID+4].basevalue = 750;
X  strcpy(Objects[THINGID+5].truename,"bearer bonds");
X  strcpy(Objects[THINGID+5].cursestr,"bearer bonds");
X  strcpy(Objects[THINGID+5].objstr,"old illegible documents");
X  Objects[THINGID+5].fragility = 1;
X  Objects[THINGID+5].weight = 5;
X  Objects[THINGID+5].level = 5;
X  Objects[THINGID+5].basevalue = 1000;
X  strcpy(Objects[THINGID+6].objstr,"bucket of salt water");
X  strcpy(Objects[THINGID+6].truename,"bucket of salt water");
X  strcpy(Objects[THINGID+6].cursestr,"bucket of salt water");
X  Objects[THINGID+6].fragility = 1;
X  Objects[THINGID+6].weight = 100;
X  Objects[THINGID+6].level = 0;
X  Objects[THINGID+6].basevalue = 1; 	    
X  strcpy(Objects[THINGID+7].truename,"magic key");
X  strcpy(Objects[THINGID+7].cursestr,"magic key");
X  strcpy(Objects[THINGID+7].objstr,"key");
X  Objects[THINGID+7].fragility = 10;
X  Objects[THINGID+7].weight = 3;
X  Objects[THINGID+7].level = 2;
X  Objects[THINGID+7].usef = I_KEY;
X  Objects[THINGID+7].basevalue = 20;
X  strcpy(Objects[THINGID+8].objstr,"torch");
X  strcpy(Objects[THINGID+8].truename,"torch");
X  strcpy(Objects[THINGID+8].cursestr,"torch");
X  Objects[THINGID+8].fragility = 8;
X  Objects[THINGID+8].usef = I_PERM_ILLUMINATE;
X  Objects[THINGID+8].level = 0;
X  Objects[THINGID+8].aux = 6;
X  Objects[THINGID+8].weight = 30;
X  Objects[THINGID+8].basevalue = 10;
X  strcpy(Objects[THINGID+9].objstr,"grot");
X  strcpy(Objects[THINGID+9].truename,"grot");
X  strcpy(Objects[THINGID+9].cursestr,"grot");
X  Objects[THINGID+9].fragility = 12;
X  Objects[THINGID+9].weight = 10;
X  Objects[THINGID+9].level = 0;
X  Objects[THINGID+9].basevalue = 0;
X  strcpy(Objects[THINGID+10].objstr,"grot");
X  strcpy(Objects[THINGID+10].truename,"grot");
X  strcpy(Objects[THINGID+10].cursestr,"grot");
X  Objects[THINGID+10].fragility = 12;
X  Objects[THINGID+10].weight = 10;
X  Objects[THINGID+10].level = 0;
X  Objects[THINGID+10].basevalue = 0;
X  strcpy(Objects[THINGID+11].objstr,"grot");
X  strcpy(Objects[THINGID+11].truename,"grot");
X  strcpy(Objects[THINGID+11].cursestr,"grot");
X  Objects[THINGID+11].fragility = 12;
X  Objects[THINGID+11].weight = 10;
X  Objects[THINGID+11].level = 0;
X  Objects[THINGID+11].basevalue = 0;
X  strcpy(Objects[THINGID+12].objstr,"grot");
X  strcpy(Objects[THINGID+12].truename,"grot");
X  strcpy(Objects[THINGID+12].cursestr,"grot");
X  Objects[THINGID+12].fragility = 12;
X  Objects[THINGID+12].weight = 10;
X  Objects[THINGID+12].level = 0;
X  Objects[THINGID+12].basevalue = 0;
X  strcpy(Objects[THINGID+13].objstr,"grot");
X  strcpy(Objects[THINGID+13].truename,"grot");
X  strcpy(Objects[THINGID+13].cursestr,"grot");
X  Objects[THINGID+13].fragility = 12;
X  Objects[THINGID+13].weight = 10;
X  Objects[THINGID+13].level = 0;
X  Objects[THINGID+13].basevalue = 0;
X  strcpy(Objects[THINGID+14].objstr,"grot");
X  strcpy(Objects[THINGID+14].truename,"grot");
X  strcpy(Objects[THINGID+14].cursestr,"grot");
X  Objects[THINGID+14].fragility = 12;
X  Objects[THINGID+14].weight = 10;
X  Objects[THINGID+14].level = 0;
X  Objects[THINGID+14].basevalue = 0;
X  strcpy(Objects[THINGID+15].objstr,"grot");
X  strcpy(Objects[THINGID+15].truename,"grot");
X  strcpy(Objects[THINGID+15].cursestr,"grot");
X  Objects[THINGID+15].fragility = 12;
X  Objects[THINGID+15].weight = 10;
X  Objects[THINGID+15].level = 0;
X  Objects[THINGID+15].basevalue = 0;
X  strcpy(Objects[THINGID+16].objstr,"Morgon's Badge");
X  strcpy(Objects[THINGID+16].truename,"Morgon's Badge");
X  strcpy(Objects[THINGID+16].cursestr,"Morgon's Badge");
X  Objects[THINGID+16].fragility = 12;
X  Objects[THINGID+16].weight = 10;
X  Objects[THINGID+16].level = 0;
X  Objects[THINGID+16].uniqueness = UNIQUE_MADE;
X  Objects[THINGID+16].basevalue = 0;
X  strcpy(Objects[THINGID+17].objstr,"spring-loaded tube");
X  strcpy(Objects[THINGID+17].truename,"dart-trap component");
X  strcpy(Objects[THINGID+17].cursestr,"dart-trap component");
X  Objects[THINGID+17].fragility = 3;
X  Objects[THINGID+17].weight = 10;
X  Objects[THINGID+17].level = 0;
X  Objects[THINGID+17].aux = L_TRAP_DART;
X  Objects[THINGID+17].usef = I_TRAP;
X  Objects[THINGID+17].uniqueness = COMMON;
X  Objects[THINGID+17].basevalue = 30;
X  strcpy(Objects[THINGID+23].objstr,"powerful rune");
X  strcpy(Objects[THINGID+23].truename,"disintegration-trap component");
X  strcpy(Objects[THINGID+23].cursestr,"disintegration-trap component");
X  Objects[THINGID+23].fragility = 3;
X  Objects[THINGID+23].weight = 10;
X  Objects[THINGID+23].level = 0;
X  Objects[THINGID+23].aux = L_TRAP_DISINTEGRATE;
X  Objects[THINGID+23].usef = I_TRAP;
X  Objects[THINGID+23].uniqueness = COMMON;
X  Objects[THINGID+23].basevalue = 30;
X  strcpy(Objects[THINGID+22].objstr,"pressurized cannister");
X  strcpy(Objects[THINGID+22].truename,"sleepgas-trap component");
X  strcpy(Objects[THINGID+22].cursestr,"sleepgas-trap component");
X  Objects[THINGID+22].fragility = 3;
X  Objects[THINGID+22].weight = 10;
X  Objects[THINGID+22].level = 0;
X  Objects[THINGID+22].aux = L_TRAP_SLEEP_GAS;
X  Objects[THINGID+22].usef = I_TRAP;
X  Objects[THINGID+22].uniqueness = COMMON;
X  Objects[THINGID+22].basevalue = 30;
X  strcpy(Objects[THINGID+21].objstr,"powerful rune");
X  strcpy(Objects[THINGID+21].truename,"teleport-trap component");
X  strcpy(Objects[THINGID+21].cursestr,"teleport-trap component");
X  Objects[THINGID+21].fragility = 3;
X  Objects[THINGID+21].weight = 10;
X  Objects[THINGID+21].level = 0;
X  Objects[THINGID+21].aux = L_TRAP_TELEPORT;
X  Objects[THINGID+21].usef = I_TRAP;
X  Objects[THINGID+21].uniqueness = COMMON;
X  Objects[THINGID+21].basevalue = 30;
X  strcpy(Objects[THINGID+24].objstr,"dark fabric patch");
X  strcpy(Objects[THINGID+24].truename,"abyss-trap component");
X  strcpy(Objects[THINGID+24].cursestr,"abyss-trap component");
X  Objects[THINGID+24].fragility = 3;
X  Objects[THINGID+24].weight = 10;
X  Objects[THINGID+24].level = 0;
X  Objects[THINGID+24].aux = L_TRAP_ABYSS;
X  Objects[THINGID+24].usef = I_TRAP;
X  Objects[THINGID+24].uniqueness = COMMON;
X  Objects[THINGID+24].basevalue = 30;
X  strcpy(Objects[THINGID+20].objstr,"mound of powdered aluminum");
X  strcpy(Objects[THINGID+20].truename,"fire-trap component");
X  strcpy(Objects[THINGID+20].cursestr,"fire-trap component");
X  Objects[THINGID+20].fragility = 3;
X  Objects[THINGID+20].weight = 10;
X  Objects[THINGID+20].level = 0;
X  Objects[THINGID+20].aux = L_TRAP_FIRE;
X  Objects[THINGID+20].usef = I_TRAP;
X  Objects[THINGID+20].uniqueness = COMMON;
X  Objects[THINGID+20].basevalue = 30;
X  strcpy(Objects[THINGID+19].objstr,"coil of fine wire");
X  strcpy(Objects[THINGID+19].truename,"snare component");
X  strcpy(Objects[THINGID+19].cursestr,"snare component");
X  Objects[THINGID+19].fragility = 3;
X  Objects[THINGID+19].weight = 10;
X  Objects[THINGID+19].level = 0;
X  Objects[THINGID+19].aux = L_TRAP_SNARE;
X  Objects[THINGID+19].usef = I_TRAP;
X  Objects[THINGID+19].uniqueness = COMMON;
X  Objects[THINGID+19].basevalue = 30;
X  strcpy(Objects[THINGID+18].objstr,"pressurized cannister");
X  strcpy(Objects[THINGID+18].truename,"acid-trap component");
X  strcpy(Objects[THINGID+18].cursestr,"acid-trap component");
X  Objects[THINGID+18].fragility = 3;
X  Objects[THINGID+18].weight = 10;
X  Objects[THINGID+18].level = 0;
X  Objects[THINGID+18].aux = L_TRAP_ACID;
X  Objects[THINGID+18].usef = I_TRAP;
X  Objects[THINGID+18].uniqueness = COMMON;
X  Objects[THINGID+18].basevalue = 30;
X  strcpy(Objects[THINGID+25].objstr,"powerful rune");
X  strcpy(Objects[THINGID+25].truename,"manadrain-trap component");
X  strcpy(Objects[THINGID+25].cursestr,"manadrain-trap component");
X  Objects[THINGID+25].fragility = 3;
X  Objects[THINGID+25].weight = 10;
X  Objects[THINGID+25].level = 0;
X  Objects[THINGID+25].aux = L_TRAP_MANADRAIN;
X  Objects[THINGID+25].usef = I_TRAP;
X  Objects[THINGID+25].uniqueness = COMMON;
X  Objects[THINGID+25].basevalue = 30;
X
X
X
X  for (i=POTIONID; i<POTIONID+NUMPOTIONS;i++) {
X    potionname(FALSE,Objects[i].objstr);
X    Objects[i].objchar = POTION;
X    Objects[i].weight = 20;
X    Objects[i].fragility = 5;
X  }    
X
X  strcpy(Objects[POTIONID+0].truename,"potion of quenching thirst");
X  Objects[POTIONID+1].usef = I_NOTHING;
X  Objects[POTIONID+1].level = 0;
X  Objects[POTIONID+1].basevalue = 0; 
X  strcpy(Objects[POTIONID+1].truename,"potion of healing");
X  strcpy(Objects[POTIONID+1].cursestr,"potion of disruption");
X  Objects[POTIONID+1].usef = I_HEAL;
X  Objects[POTIONID+1].level = 2;
X  Objects[POTIONID+1].basevalue = 40; 
X  strcpy(Objects[POTIONID+2].truename,"potion of object detection");
X  strcpy(Objects[POTIONID+2].cursestr,"potion of object detection");
X  Objects[POTIONID+2].usef = I_OBJDET;
X  Objects[POTIONID+2].level = 1;
X  Objects[POTIONID+2].basevalue = 10; 	    
X  strcpy(Objects[POTIONID+3].truename,"potion of monster detection");
X  strcpy(Objects[POTIONID+3].cursestr,"potion of monster detection");
X  Objects[POTIONID+3].usef = I_MONDET;
X  Objects[POTIONID+3].level = 1;
X  Objects[POTIONID+3].basevalue = 10;
X  strcpy(Objects[POTIONID+4].truename,"potion of neutralize poison");
X  strcpy(Objects[POTIONID+4].cursestr,"potion of poison");
X  Objects[POTIONID+4].usef = I_NEUTRALIZE_POISON;
X  Objects[POTIONID+4].level = 2;
X  Objects[POTIONID+4].basevalue = 20;
X  strcpy(Objects[POTIONID+5].truename,"potion of alertness");
X  strcpy(Objects[POTIONID+5].cursestr,"potion of sleep");
X  Objects[POTIONID+5].usef = I_ALERT;
X  Objects[POTIONID+5].level = 0;
X  Objects[POTIONID+5].basevalue = 100;
X  strcpy(Objects[POTIONID+6].truename,"potion of speed");
X  strcpy(Objects[POTIONID+6].cursestr,"potion of slowness");
X  Objects[POTIONID+6].usef = I_SPEED;
X  Objects[POTIONID+6].level = 1;
X  Objects[POTIONID+6].basevalue = 40; 	    
X  strcpy(Objects[POTIONID+7].truename,"potion of restoration");
X  strcpy(Objects[POTIONID+7].cursestr,"potion of debilitation");
X  Objects[POTIONID+7].usef = I_RESTORE;
X  Objects[POTIONID+7].level = 3;
X  Objects[POTIONID+7].basevalue = 50; 	    
X  strcpy(Objects[POTIONID+8].truename,"azoth");
X  strcpy(Objects[POTIONID+8].cursestr,"mercury");
X  strcpy(Objects[POTIONID+8].objstr,"mercury");
X  Objects[POTIONID+8].plus = -1;
X  Objects[POTIONID+8].usef = I_AZOTH;
X  Objects[POTIONID+8].level = 7;
X  Objects[POTIONID+8].basevalue = 1500; 	    
X  strcpy(Objects[POTIONID+9].truename,"potion of regeneration");
X  strcpy(Objects[POTIONID+9].cursestr,"potion of great disruption");
X  Objects[POTIONID+9].usef = I_REGENERATE;
X  Objects[POTIONID+9].level = 4;
X  Objects[POTIONID+9].basevalue = 100; 	    
X  strcpy(Objects[POTIONID+10].truename,"potion of invisibility");
X  strcpy(Objects[POTIONID+10].cursestr,"potion of aggravation");
X  Objects[POTIONID+10].usef = I_INVISIBLE;
X  Objects[POTIONID+10].level = 2;
X  Objects[POTIONID+10].basevalue = 100; 	    
X  strcpy(Objects[POTIONID+11].truename,"potion of breathing");
X  strcpy(Objects[POTIONID+11].cursestr,"potion of choking");
X  Objects[POTIONID+11].usef = I_BREATHING;
X  Objects[POTIONID+11].level = 2;
X  Objects[POTIONID+11].basevalue = 30; 	    
X  strcpy(Objects[POTIONID+12].truename,"potion of augmentation");
X  strcpy(Objects[POTIONID+12].cursestr,"potion of debilitation");
X  Objects[POTIONID+12].usef = I_AUGMENT;
X  Objects[POTIONID+12].level = 5;
X  Objects[POTIONID+12].basevalue = 200; 	    
X  strcpy(Objects[POTIONID+13].truename,"potion of banishing fear");
X  strcpy(Objects[POTIONID+13].cursestr,"potion of fear");
X  Objects[POTIONID+13].usef = I_FEAR_RESIST;
X  Objects[POTIONID+13].level = 2;
X  Objects[POTIONID+13].basevalue = 50;
X  strcpy(Objects[POTIONID+14].truename,"potion of chaos");
X  strcpy(Objects[POTIONID+14].cursestr,"potion of chaos");
X  Objects[POTIONID+14].usef = I_CHAOS;
X  Objects[POTIONID+14].level = 3;
X  Objects[POTIONID+14].basevalue = 100;
X  strcpy(Objects[POTIONID+15].truename,"potion of accuracy");
X  strcpy(Objects[POTIONID+15].cursestr,"potion of fuzziness");
X  Objects[POTIONID+15].usef = I_ACCURACY;
X  Objects[POTIONID+15].level = 3;
X  Objects[POTIONID+15].basevalue = 200;
X  strcpy(Objects[POTIONID+16].truename,"potion of levitation");
X  strcpy(Objects[POTIONID+16].cursestr,"potion of levitation");
X  Objects[POTIONID+16].usef = I_LEVITATION;
X  Objects[POTIONID+16].level = 1;
X  Objects[POTIONID+16].basevalue = 50;
X  strcpy(Objects[POTIONID+17].truename,"potion of curing");
X  strcpy(Objects[POTIONID+17].cursestr,"potion of disease");
X  Objects[POTIONID+17].usef = I_CURE;
X  Objects[POTIONID+17].level = 1;
X  Objects[POTIONID+17].basevalue = 50;
X
X  /* aux is defensive value */
X  strcpy(Objects[SHIELDID+0].objstr,"buckler");
X  Objects[SHIELDID+0].aux = 1;
X  Objects[SHIELDID+0].weight = 20;
X  Objects[SHIELDID+0].level = 0;
X  Objects[SHIELDID+0].basevalue = 10; 
X  strcpy(Objects[SHIELDID+1].objstr,"small round shield");
X  Objects[SHIELDID+1].aux = 2;
X  Objects[SHIELDID+1].weight = 40;
X  Objects[SHIELDID+1].level = 1;
X  Objects[SHIELDID+1].basevalue = 20; 
X  strcpy(Objects[SHIELDID+2].objstr,"large round shield");
X  Objects[SHIELDID+2].aux = 3;
X  Objects[SHIELDID+2].weight = 100;
X  Objects[SHIELDID+2].level = 2;
X  Objects[SHIELDID+2].basevalue = 50; 	    
X  strcpy(Objects[SHIELDID+3].objstr,"heater shield");
X  Objects[SHIELDID+3].weight = 200;
X  Objects[SHIELDID+3].level = 2;
X  Objects[SHIELDID+3].aux = 4;
X  Objects[SHIELDID+3].basevalue = 75; 	    
X  strcpy(Objects[SHIELDID+4].objstr,"hoplon");
X  Objects[SHIELDID+4].weight = 300;
X  Objects[SHIELDID+4].level = 3;
X  Objects[SHIELDID+4].aux = 5;
X  Objects[SHIELDID+4].basevalue = 150; 
X  strcpy(Objects[SHIELDID+5].objstr,"tower shield");
X  Objects[SHIELDID+5].weight = 500;
X  Objects[SHIELDID+5].level = 4;
X  Objects[SHIELDID+5].aux = 6;
X  Objects[SHIELDID+5].basevalue = 200; 	    
X  strcpy(Objects[SHIELDID+6].objstr,"plasteel shield");
X  Objects[SHIELDID+6].weight = 20;
X  Objects[SHIELDID+6].level = 6;
X  Objects[SHIELDID+6].aux = 7;
X  Objects[SHIELDID+6].basevalue = 1000; 
X  strcpy(Objects[SHIELDID+7].objstr,"shield of deflection");
X  Objects[SHIELDID+7].weight = 200;
X  Objects[SHIELDID+7].level = 7;
X  Objects[SHIELDID+7].aux = 6;
X  Objects[SHIELDID+7].plus = 6;
X  Objects[SHIELDID+7].basevalue = 2000; 	    
X
X  for (i=SHIELDID; i<SHIELDID+NUMSHIELDS; i++) {
X    Objects[i].objchar = SHIELD;
X    Objects[i].fragility = 15;
X    strcpy(Objects[i].truename,Objects[i].objstr);
X    strcpy(Objects[i].cursestr,Objects[i].objstr);
X  }
X
X/* aux is penalty to defense value */
X/* dmg is damage absorbed */
X  strcpy(Objects[ARMORID+0].objstr,"flak jacket");
X  Objects[ARMORID+0].weight = 100;
X  Objects[ARMORID+0].level = 0;
X  Objects[ARMORID+0].aux = 0;
X  Objects[ARMORID+0].dmg = 1;
X  Objects[ARMORID+0].basevalue = 5; 
X  strcpy(Objects[ARMORID+1].objstr,"soft leather armor");
X  Objects[ARMORID+1].weight = 200;
X  Objects[ARMORID+1].level = 1;
X  Objects[ARMORID+1].dmg = 2;
X  Objects[ARMORID+1].aux = 1;
X  Objects[ARMORID+1].basevalue = 10; 
X  strcpy(Objects[ARMORID+2].objstr,"cuirbouilli");
X  Objects[ARMORID+2].weight = 200;
X  Objects[ARMORID+2].level = 1;
X  Objects[ARMORID+2].dmg = 2;
X  Objects[ARMORID+2].aux = 1;
X  Objects[ARMORID+2].basevalue = 30; 	    
X  strcpy(Objects[ARMORID+3].objstr,"ring mail");
X  Objects[ARMORID+3].weight = 300;
X  Objects[ARMORID+3].level = 2;
X  Objects[ARMORID+3].aux = 2;
X  Objects[ARMORID+3].dmg = 3;
X  Objects[ARMORID+3].basevalue = 100; 	    
X  strcpy(Objects[ARMORID+4].objstr,"chain mail");
X  Objects[ARMORID+4].weight = 400;
X  Objects[ARMORID+4].level = 3;
X  Objects[ARMORID+4].aux = 3;
X  Objects[ARMORID+4].dmg = 4;
X  Objects[ARMORID+4].basevalue = 200; 
X  strcpy(Objects[ARMORID+5].objstr,"scale mail");
X  Objects[ARMORID+5].weight = 400;
X  Objects[ARMORID+5].level = 4;
X  Objects[ARMORID+5].aux = 2;
X  Objects[ARMORID+5].dmg = 4;
X  Objects[ARMORID+5].basevalue = 300; 
X  strcpy(Objects[ARMORID+6].objstr,"partial plate mail");
X  Objects[ARMORID+6].weight = 400;
X  Objects[ARMORID+6].level = 5;
X  Objects[ARMORID+6].aux = 3;
X  Objects[ARMORID+6].dmg = 5;
X  Objects[ARMORID+6].basevalue = 450; 	    
X  strcpy(Objects[ARMORID+7].objstr,"full plate mail");
X  Objects[ARMORID+7].weight = 600;
X  Objects[ARMORID+7].level = 6;
X  Objects[ARMORID+7].aux = 4;
X  Objects[ARMORID+7].dmg = 6;
X  Objects[ARMORID+7].basevalue = 750; 
X  strcpy(Objects[ARMORID+8].objstr,"plate armor");
X  Objects[ARMORID+8].weight = 500;
X  Objects[ARMORID+8].level = 6;
X  Objects[ARMORID+8].aux = 4;
X  Objects[ARMORID+8].dmg = 7;
X  Objects[ARMORID+8].basevalue = 1500; 	    
X  strcpy(Objects[ARMORID+9].objstr,"lamellar armor");
X  Objects[ARMORID+9].weight = 200;
X  Objects[ARMORID+9].level = 6;
X  Objects[ARMORID+9].aux = 2;
X  Objects[ARMORID+9].dmg = 5;
X  Objects[ARMORID+9].basevalue = 1500; 	    
X  strcpy(Objects[ARMORID+10].objstr,"mithril chain mail");
X  Objects[ARMORID+10].weight = 200;
X  Objects[ARMORID+10].level = 7;
X  Objects[ARMORID+10].usef = I_PERM_FEAR_RESIST;
X  Objects[ARMORID+10].aux = 2;
X  Objects[ARMORID+10].dmg = 5;
X  Objects[ARMORID+10].basevalue = 2000; 	    
X  strcpy(Objects[ARMORID+11].objstr,"mithril plate armor");
X  Objects[ARMORID+11].weight = 300;
X  Objects[ARMORID+11].level = 7;
X  Objects[ARMORID+11].usef = I_PERM_FEAR_RESIST;
X  Objects[ARMORID+11].aux = 3;
X  Objects[ARMORID+11].dmg = 8;
X  Objects[ARMORID+11].basevalue = 3000; 	    
X  strcpy(Objects[ARMORID+12].objstr,"dragonscale armor");
X  Objects[ARMORID+12].weight = 500;
X  Objects[ARMORID+12].usef = I_PERM_FIRE_RESIST;
X  Objects[ARMORID+12].level = 7;
X  Objects[ARMORID+12].aux = 3;
X  Objects[ARMORID+12].dmg = 6;
X  Objects[ARMORID+12].basevalue = 3000; 	    
X  strcpy(Objects[ARMORID+13].objstr,"prismatrix armor");
X  Objects[ARMORID+13].weight = 100;
X  Objects[ARMORID+13].usef = I_PERM_ENERGY_RESIST;
X  Objects[ARMORID+13].level = 8;
X  Objects[ARMORID+13].aux = 2;
X  Objects[ARMORID+13].dmg = 7;
X  Objects[ARMORID+13].plus = 9;
X  Objects[ARMORID+13].basevalue = 1000; 	        
X  strcpy(Objects[ARMORID+14].objstr,"powered combat armor");
X  Objects[ARMORID+14].aux = 0;
X  Objects[ARMORID+14].dmg = 20;
X  Objects[ARMORID+14].usef = I_PERM_BREATHING;
X  Objects[ARMORID+14].level = 9;
X  Objects[ARMORID+14].weight = 0;
X  Objects[ARMORID+14].plus = 0;
X  Objects[ARMORID+14].basevalue = 5000; 	    
X  strcpy(Objects[ARMORID+15].objstr,"powered scout armor");
X  Objects[ARMORID+15].aux = 0;
X  Objects[ARMORID+15].dmg = 10;
X  Objects[ARMORID+15].usef = I_PERM_BREATHING;
X  Objects[ARMORID+15].level = 7;
X  Objects[ARMORID+15].weight = 0;
X  Objects[ARMORID+15].plus = 0;
X  Objects[ARMORID+15].basevalue = 3000; 	    
X  strcpy(Objects[ARMORID+16].objstr,"demonhide armor");
X  Objects[ARMORID+16].aux = 0;
X  Objects[ARMORID+16].dmg = 5;
X  Objects[ARMORID+16].usef = I_PERM_ENERGY_RESIST;
X  Objects[ARMORID+16].level = 3;
X  Objects[ARMORID+16].weight = 100;
X  Objects[ARMORID+16].plus = 5;
X  Objects[ARMORID+16].blessing = -9;
X  Objects[ARMORID+16].basevalue = 2000; 	    
X
X  for (i=ARMORID;i<ARMORID+NUMARMOR;i++) {
X    Objects[i].objchar = ARMOR;
X    Objects[i].fragility = 20;
X    strcpy(Objects[i].truename,Objects[i].objstr);
X    strcpy(Objects[i].cursestr,Objects[i].objstr);
X  }
X}
END_OF_oinititem1.c
if test 32268 -ne `wc -c <oinititem1.c`; then
    echo shar: \"oinititem1.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 11 \(of 15\).
cp /dev/null ark11isdone
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