[comp.sources.games] v07i022: omega3 - rogue like dungeon exploration

billr@saab.CNA.TEK.COM (Bill Randle) (07/13/89)

Submitted-by: "Laurence R. Brothers"   <brothers@paul.rutgers.edu>
Posting-number: Volume 7, Issue 22
Archive-name: omega3/Part03
Supersedes: omega2: Volume 5, Issue 11-29,38-40



#! /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 3 (of 20)."
# Contents:  oaux2.c oiinit.h
# Wrapped by billr@saab on Thu Jun 29 08:13:58 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'oaux2.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oaux2.c'\"
else
echo shar: Extracting \"'oaux2.c'\" \(31191 characters\)
sed "s/^X//" >'oaux2.c' <<'END_OF_FILE'
X/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
X
X/* oaux2.c */
X
X/* some functions called by ocom.c, also see oaux1.c and oaux3.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   and oaux3.c are not huge */
X
X#include "oglob.h"
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. */
Xint statmod(stat)
Xint 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 ");
X      dmult = 1000;
X    }
X    else {
X      strcpy(Str3,"You blast "); 
X      dmult=5; 
X    }
X    break;
X    case 1:
X    case 2: 
X    strcpy(Str3,"You smash "); 
X    dmult=2; break;
X
X    default: 
X    dmult=1;
X    if (random_range(10)) strcpy(Str3,"You hit ");
X    else switch(random_range(4)) {
X    case 0: strcpy(Str3,"You damage "); break;
X    case 1: strcpy(Str3,"You inflict bodily harm on "); break;
X    case 2: strcpy(Str3,"You injure "); break;
X    case 3: strcpy(Str3,"You molest "); break;
X    }
X    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 (Verbosity != TERSE) mprint(Str3);
X  else mprint("You hit it.");
X  m_damage(m,dmult * random_range(dmg),dtype);
X  if ((Verbosity != TERSE) && (random_range(10)==3) && (m->hp > 0))
X    mprint("It laughs at the injury and fights on!");
X}
X
X/* and effects of missing */
Xvoid player_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    if (Verbosity != TERSE) {
X      if (random_range(10))
X	strcpy(Str3,"You miss ");
X      else switch(random_range(4)) {
X      case 0: strcpy(Str3,"You flail lamely at "); break;
X      case 1: strcpy(Str3,"You only amuse "); break;
X      case 2: strcpy(Str3,"You fail to even come close to "); break;
X      case 3: strcpy(Str3,"You totally avoid contact with "); break;
X      }	
X      if (m->uniqueness == COMMON) strcat(Str3,"the ");
X      strcat(Str3,m->monstring);
X      strcat(Str3,". ");
X      mprint(Str3);
X    }
X    else mprint("You missed it.");
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  if (Player.possessions[O_WEAPON_HAND] != NULL) {
X    strcpy(Str1,"You dropped your ");
X    strcat(Str1,Player.possessions[O_WEAPON_HAND]->objstr);
X    mprint(Str1);
X    morewait();
X    p_drop_at(Player.x,Player.y,1,Player.possessions[O_WEAPON_HAND]);
X    conform_lost_objects(1,Player.possessions[O_WEAPON_HAND]);
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.possessions[O_WEAPON_HAND] != NULL) {
X    strcpy(Str1,"Your ");
X    strcat(Str1,itemid(Player.possessions[O_WEAPON_HAND]));
X    strcat(Str1," vibrates in your hand....");
X    mprint(Str1);
X    damage_item(Player.possessions[O_WEAPON_HAND]);
X    morewait();
X  }
X}
X
X
X/* hooray */
Xvoid p_win()
X{
X  morewait();
X  clearmsg();
X  print1("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 */
X/* for targeting in dungeon */
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]>0);
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 minute_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    if (Player.status[SLEPT] == 0) {
X      mprint("You woke up.");
X    }
X  }
X
X  if (Player.status[REGENERATING]>0) {
X    if ((Player.hp < Player.maxhp) && (Player.mana > 0)){
X      Player.hp++;
X      Player.mana--;
X      dataprint();
X    }
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
X
X/* check 1/hour for torch to burn out if used */
Xvoid torch_check()
X{
X  int i;
X  for(i=O_READY_HAND;i<=O_WEAPON_HAND;i++) {
X    if (Player.possessions[i]!=NULL)
X      if ((Player.possessions[i]->id == THINGID+8) && /*torch */
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	    Player.possessions[i]->cursestr =
X	      Player.possessions[i]->truename =
X		Player.possessions[i]->objstr = 
X		  salloc("burnt-out torch");
X	  }
X	}
X      }
X  }
X}
X
X
X
X/* values are in multiples of ten minutes */
X/* values over 1000 indicate a permanent effect */
Xvoid tenminute_status_check()
X{
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[ILLUMINATION]>0) && (Player.status[ILLUMINATION]<1000)) {
X    Player.status[ILLUMINATION]--;
X    if (Player.status[ILLUMINATION] == 0) {
X      mprint("Your light goes out!");
X    }
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
X  if ((Player.status[DEFLECTION]>0) && (Player.status[DEFLECTION]<1000)){
X    Player.status[DEFLECTION]--;
X    if (Player.status[DEFLECTION] == 0)
X      mprint("You feel less well defended.");
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  dataprint();
X}
X
X
X
X/* Increase in level at appropriate experience gain */
Xvoid gain_level()
X{
X  int gained=FALSE;
X  morewait();
X  while (expval(Player.level+1) <= Player.xp) {
X    gained = TRUE;
X    Player.level++;
X    print1("You have attained a new experience level!");
X    print2("You are now ");
X    nprint2(getarticle(levelname(Player.level)));
X    nprint2(levelname(Player.level));
X    Player.maxhp += random_range(Player.con)+1;
X    Player.mana = Player.maxmana = calcmana();
X    morewait();
X  }
X  if (gained) clearmsg();
X  calc_melee();
X}
X
X/* experience requirements */
X#ifndef MSDOS
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(50);break;
X    case 3:return(200);break;
X    case 4:return(500);break;
X    case 5:return(1000);break;
X    case 6:return(2000);break;
X    case 7:return(3000);break;
X    case 8:return(5000);break;
X    case 9:return(7000);break;
X    case 10:return(10000);break;
X    default:return((plevel-9) * 10000); break;
X  }
X}
X#else
Xlong expval(plevel)
Xint plevel;
X{
X  switch(plevel) {
X    case 0:return(0L);break;
X    case 1:return(20L);break;
X    case 2:return(50L);break;
X    case 3:return(200L);break;
X    case 4:return(500L);break;
X    case 5:return(1000L);break;
X    case 6:return(2000L);break;
X    case 7:return(3000L);break;
X    case 8:return(5000L);break;
X    case 9:return(7000L);break;
X    case 10:return(10000L);break;
X    default:return((plevel-9) * 10000L); break;
X  }
X}
X#endif
X
X/* If an item is unidentified, it isn't worth much to those who would buy it */
X#ifndef MSDOS
Xint item_value(item)
X#else
Xlong item_value(item)
X#endif
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 */
X#ifndef MSDOS
Xint true_item_value(item)
X#else
Xlong true_item_value(item)
X#endif
Xpob item;
X{
X#ifndef MSDOS
X  float value = item->basevalue;
X#else
X  double value = item->basevalue;
X#endif
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#ifndef MSDOS
X    return((int) value);
X#else
X    return((long) value);
X#endif
X  }
X}
X
X/* kill off 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    print1("You try to hold your breath....");
X    morewait();
X    print2("You choke....");
X    morewait();
X    print3("Your lungs fill...");
X    morewait();
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    default:
X    case I_NO_OP: weapon_normal_hit(dmgmod,weapon,m); break;
X    case I_ACIDWHIP: weapon_acidwhip(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    case I_SCYTHE: weapon_scythe(dmgmod,weapon,m); break;
X  }
X}
X
X
X/* for printing actions in printactions above */
Xchar *actionlocstr(dir)
Xchar dir;
X{
X  switch(dir) {
X  case 'L': strcpy(Str3,"low."); break;
X  case 'C': strcpy(Str3,"center."); break;
X  case 'H': strcpy(Str3,"high."); break;
X  default: strcpy(Str3,"wildly."); break;
X  }
X  return(Str3);
X}
X
X
X/* execute player combat actions versus monster m */
Xvoid tacplayer(m)
Xstruct monster *m;
X{
X  int i=0;
X
X  while (i < strlen(Player.meleestr)) {
X    if (m->hp > 0) {
X      switch(Player.meleestr[i]) {
X      case 't': case 'T':
X	if (Player.possessions[O_WEAPON_HAND] == NULL) 
X	  strcpy(Str1,"You punch ");
X	else strcpy(Str1,"You thrust ");
X	strcat(Str1,actionlocstr(Player.meleestr[i+1]));
X	if (Verbosity == VERBOSE) mprint(Str1);
X	if (player_hit(2*statmod(Player.dex),Player.meleestr[i+1],m))
X	  weapon_use(0,Player.possessions[O_WEAPON_HAND],m);
X	else player_miss(m,NORMAL_DAMAGE);
X	break;
X      case 'c': case 'C':
X	if (Player.possessions[O_WEAPON_HAND] == NULL) 
X	  strcpy(Str1,"You punch ");
X	else if (Player.possessions[O_WEAPON_HAND]->type == CUTTING) 
X	  strcpy(Str1,"You cut ");
X	else if (Player.possessions[O_WEAPON_HAND]->type == STRIKING) 
X	  strcpy(Str1,"You strike ");
X	else strcpy(Str1,"You attack ");
X	strcat(Str1,actionlocstr(Player.meleestr[i+1]));
X	if (Verbosity == VERBOSE) mprint(Str1);
X	if (player_hit(0,Player.meleestr[i+1],m))
X	  weapon_use(2*statmod(Player.str),
X		     Player.possessions[O_WEAPON_HAND],
X		     m);
X	else player_miss(m,NORMAL_DAMAGE);
X	break;
X      case 'l': case 'L':
X	strcpy(Str1,"You lunge ");
X	strcat(Str1,actionlocstr(Player.meleestr[i+1]));
X	if (Verbosity == VERBOSE) mprint(Str1);
X	if (player_hit(Player.level+Player.dex,Player.meleestr[i+1],m))
X	  weapon_use(Player.level,Player.possessions[O_WEAPON_HAND],m);
X	else player_miss(m,NORMAL_DAMAGE);
X	break;
X      }
X    }    
X    i+=2;
X  }
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,m)
Xint hitmod;
Xchar hitloc;
Xstruct monster *m;
X{
X  int i=0,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    if (hitloc == 'X') hitloc = random_loc();
X
X    transcribe_monster_actions(m);
X
X    while (i<strlen(m->meleestr)) {
X      if ((m->meleestr[i] == 'B') || (m->meleestr[i] == 'R')) {
X	blocks = TRUE;
X	if (hitloc == m->meleestr[i+1])
X	  goodblocks++;
X      }
X      i+=2;
X    }
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      if (Verbosity == VERBOSE) mprint(Str1);
X    }
X    return(hit);
X  }
X}
X
X
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
Xvoid toggle_item_use(on)
Xint on;
X{
X  static int used[MAXITEMS];
X  int i;
X  setgamestatus(SUPPRESS_PRINTING);
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=1;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  resetgamestatus(SUPPRESS_PRINTING);
X}
X
X
Xvoid enter_site(site)
Xchar site;
X{
X  switch(site) {
X  case CITY: change_environment(E_CITY); break;
X  case VILLAGE: change_environment(E_VILLAGE); break;
X  case CAVES: change_environment(E_CAVES); break;
X  case CASTLE: change_environment(E_CASTLE); break;
X  case VOLCANO: change_environment(E_VOLCANO); break;
X  case TEMPLE: change_environment(E_TEMPLE); break;
X  case DRAGONLAIR: change_environment(E_DLAIR); break;
X  case STARPEAK: change_environment(E_STARPEAK); break;
X  case MAGIC_ISLE: change_environment(E_MAGIC_ISLE); break;
X  default:print3("There's nothing to enter here!"); break;
X  }
X}
X
X
X
X/* Switches context dungeon/countryside/city, etc */
Xvoid change_environment(new_environment)
Xchar new_environment;
X{
X  int i,emerging = FALSE;
X  pob o;
X
X  Player.sx = -1; Player.sy = -1; /* reset sanctuary if there was one */
X
X  resetgamestatus(FAST_MOVE);
X
X  Last_Environment = Current_Environment;
X  if (Last_Environment == E_COUNTRYSIDE) {
X    LastCountryLocX = Player.x;
X    LastCountryLocY = Player.y;
X  }
X  if (((Last_Environment == E_CITY) ||
X       (Last_Environment == E_VILLAGE)) &&
X      ((new_environment == E_MANSION) ||
X       (new_environment == E_HOUSE) ||
X       (new_environment == E_HOVEL) ||
X       (new_environment == E_SEWERS) ||
X       (new_environment == E_ARENA))) {
X    LastTownLocX = Player.x;
X    LastTownLocY = Player.y;
X  }
X  else if (((Last_Environment == E_MANSION) ||
X	    (Last_Environment == E_HOUSE) ||
X	    (Last_Environment == E_HOVEL) ||
X	    (Last_Environment == E_SEWERS) ||
X	    (Last_Environment == E_ARENA)) &&
X	   ((new_environment == E_CITY) ||
X	    (new_environment == E_VILLAGE))) {
X    Player.x = LastTownLocX;
X    Player.y = LastTownLocY;
X    emerging = TRUE;
X  }
X
X  if (Last_Environment == E_ARENA)
X    Arena_Victory = Arena_Monster->hp < 1;
X
X
X  Current_Environment = new_environment;
X/*    ScreenOffset = Player.y - (ScreenLength/2); */
X  switch(new_environment) {
X  case E_ARENA:
X    LENGTH = 16;
X    WIDTH = 64;
X    Player.x = 5;
X    Player.y = 7;
X    setgamestatus(ARENA_MODE);
X    locprint("The Rampart Arena");
X    load_arena();
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_ABYSS:
X    LENGTH = 16;
X    WIDTH = 64;
X    Player.x = 32;
X    Player.y = 15;
X    locprint("The Adept's Challenge");
X    load_abyss();
X    abyss_file();
X    lose_all_items();
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_CIRCLE:
X    LENGTH = 16;
X    WIDTH = 64;
X    Player.x = 32;
X    Player.y = 14;
X    locprint("The Astral Demesne of the Circle of Sorcerors");
X    load_circle();
X    if (find_item(&o,ARTIFACTID+21,-1)) {
X      print1("A bemused voice says:");
X      print2("'Why are you here? You already have the Star Gem!'");
X      morewait();
X    }
X    else if (Player.rank[CIRCLE] > 0) {
X      print1("You hear the voice of the Prime Sorceror:");
X      print2("'Congratulations on your attainment of the Circle's Demesne.'");
X      morewait();
X      print1("For the honor of the Circle, you may take the Star Gem");
X      print2("and destroy it on the acme of Star Peak.");
X      morewait();
X      print1("Beware the foul LawBringer who resides there...");
X      print2("By the way, some of the members of the Circle seem to");
X      morewait();
X      print1("have become a bit jealous of your success --");
X      print2("I'd watch out for them if I were you.");
X      morewait();
X    }
X    else if (Player.alignment > 0) {
X      print1("A mysterious ghostly image materializes in front of you.");
X      print2("It speaks: 'Greetings, fellow abider in Law. I am called");
X      morewait();
X      print1("The LawBringer. If you wish to advance our cause, obtain");
X      print2("the mystic Star Gem and return it to me on Star Peak.");
X      morewait();
X      print1("Beware the power of the evil Circle of Sorcerors and the");
X      print2("forces of Chaos which guard the gem.'");
X      morewait();
X      print1("The strange form fades slowly.");
X      morewait();
X    }
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_COURT:
X    WIDTH = 64;
X    LENGTH = 24;
X    Player.x = 32;
X    Player.y = 2;
X    load_court();
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_MANSION:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 8;
X    Player.x = 2;
X    load_house(E_MANSION);
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_HOUSE:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 13;
X    Player.x = 2;
X    load_house(E_HOUSE);
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_HOVEL:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 9;
X    Player.x = 2;
X    load_house(E_HOVEL);
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_DLAIR:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 9;
X    Player.x = 2;
X#ifndef MSDOS
X    load_dlair(gamestatusp(KILLED_DRAGONLORD));
X#else
X    load_dlair(gamestatusp(KILLED_DRAGONLORD) != 0);
X#endif
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_STARPEAK:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 9;
X    Player.x = 2;
X#ifndef MSDOS
X    load_speak(gamestatusp(KILLED_LAWBRINGER));
X#else
X    load_speak(gamestatusp(KILLED_LAWBRINGER) != 0);
X#endif
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_MAGIC_ISLE:
X    WIDTH = 64;
X    LENGTH = 16;
X    Player.y = 15;
X    Player.x = 63;
X#ifndef MSDOS
X    load_misle(gamestatusp(KILLED_EATER));
X#else
X    load_misle(gamestatusp(KILLED_EATER) != 0);
X#endif
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_TEMPLE:
X    WIDTH = 64;
X    LENGTH = 16;
X    load_temple(Country[Player.x][Player.y].aux);
X    Player.y = 15;
X    Player.x = 32;
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_CITY:
X    WIDTH = 64;
X    LENGTH = 64;
X    if (emerging) {
X      print1("You emerge onto the street.");
X      emerging = FALSE;
X    }
X    else {
X      print1("You pass through the massive gates of Rampart, the city.");
X      Player.x = 62;
X      Player.y = 21;
X    }
X    if (City == NULL) load_city();
X#ifdef MSDOS
X    else
X    	msdos_changelevel(Level,new_environment,0);
X#endif
X    Level = City;
X    locprint("The City of Rampart.");
X    erase_level();
X    ScreenOffset = Player.y - (ScreenLength/2);
X    show_screen();
X    break;
X  case E_VILLAGE:
X    WIDTH = 64;
X    LENGTH = 16;
X    if (emerging) {
X      print1("You emerge onto the street.");
X      emerging = FALSE;
X    }
X    else {
X      print1("You enter a small rural village.");
X      /* different villages per different locations */
X      switch(Country[Player.x][Player.y].aux) {
X      case 1:
X	Player.x = 0;
X	Player.y = 6;
X	Villagenum = 1;
X	break;
X      default: 
X	print3("Very strange, a nonexistent village.");
X      case 2:
X	Player.x = 39;
X	Player.y = 15;
X	Villagenum = 2;
X	break;
X      case 3:
X	Player.x = 63;
X	Player.y = 8;
X	Villagenum = 3;
X	break;
X      case 4: 
X	Player.x = 32;
X	Player.y = 15;
X	Villagenum = 4;
X	break;
X      case 5: 
X	Player.x = 2;
X	Player.y = 8;
X	Villagenum = 5;
X	break;
X      case 6: 
X	Player.x = 2;
X	Player.y = 2;
X	Villagenum = 6;
X	break;
X      }
X    }
X    if ((! emerging) || (TempLevel == NULL)) load_village(Villagenum);
X    else if (TempLevel->environment != E_VILLAGE) load_village(Villagenum);
X#ifndef MSDOS
X    else Level = TempLevel;
X#else
X    else {
X      msdos_changelevel(Level,new_environment,0);
X      Level = TempLevel;
X      }
X#endif
X    switch(Villagenum) {
X      case 1: locprint("The Village of Star View."); break;
X      case 2: locprint("The Village of Woodmere."); break;
X      case 3: locprint("The Village of Stormwatch."); break;
X      case 4: locprint("The Village of Thaumaris."); break;
X      case 5: locprint("The Village of Skorch."); break;
X      case 6: locprint("The Village of Whorfen."); break;
X      default: locprint("A Deviant Village."); break;
X      }
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_CAVES:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You enter a dark cleft in a hillside;");
X    print2("You note signs of recent passage in the dirt nearby.");
X    if (gamestatusp(MOUNTED)) {
X      morewait();
X      print1("Seeing as you might not be coming back, you feel compelled");
X      print2("to let your horse go, rather than keep him hobbled outside.");
X      resetgamestatus(MOUNTED);
X      calc_melee();
X    }
X    MaxDungeonLevels = CAVELEVELS;
X    if (Current_Dungeon != E_CAVES) {
X#ifdef MSDOS
X    msdos_changelevel(Level,0,-1);
X#endif
X      free_dungeon();
X      Dungeon = NULL;
X      Level = NULL;
X      Current_Dungeon = E_CAVES;
X    }
X    change_level(0,1,FALSE);
X    break;
X  case E_VOLCANO:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You pass down through the glowing crater.");
X    if (gamestatusp(MOUNTED)) {
X      morewait();
X      print1("Seeing as you might not be coming back, you feel compelled");
X      print2("to let your horse go, rather than keep him hobbled outside.");
X      resetgamestatus(MOUNTED);
X      calc_melee();
X    }
X    MaxDungeonLevels = VOLCANOLEVELS;
X    if (Current_Dungeon != E_VOLCANO) {
X#ifdef MSDOS
X    msdos_changelevel(Level,0,-1);
X#endif
X      free_dungeon();
X      Dungeon = NULL;
X      Level = NULL;
X      Current_Dungeon = E_VOLCANO;
X    }
X    change_level(0,1,FALSE);
X    break;
X  case E_ASTRAL:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You are in a weird flickery maze.");
X    if (gamestatusp(MOUNTED)) {
X      print2("Your horse doesn't seem to have made it....");
X      resetgamestatus(MOUNTED);
X      calc_melee();
X    }
X    MaxDungeonLevels = ASTRALLEVELS;
X    if (Current_Dungeon != E_ASTRAL) {
X#ifdef MSDOS
X    msdos_changelevel(Level,0,-1);
X#endif
X      free_dungeon();
X      Dungeon = NULL;
X      Level = NULL;
X      Current_Dungeon = E_ASTRAL;
X    }
X    change_level(0,1,FALSE);
X    break;
X  case E_CASTLE:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You cross the drawbridge. Strange forms move beneath the water.");
X    if (gamestatusp(MOUNTED)) {
X      morewait();
X      print1("Seeing as you might not be coming back, you feel compelled");
X      print2("to let your horse go, rather than keep him hobbled outside.");
X      resetgamestatus(MOUNTED);
X    }
X    MaxDungeonLevels = CASTLELEVELS;
X    if (Current_Dungeon != E_CASTLE) {
X#ifdef MSDOS
X    msdos_changelevel(Level,0,-1);
X#endif
X      free_dungeon();
X      Dungeon = NULL;
X      Level = NULL;
X      Current_Dungeon = E_CASTLE;
X    }
X    change_level(0,1,FALSE);
X    break;
X  case E_SEWERS:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You pry open a manhole and descend into the sewers below.");
X    if (gamestatusp(MOUNTED)) {
X      print2("You horse waits patiently outside the sewer entrance....");
X      dismount_steed();
X    }
X    MaxDungeonLevels = SEWERLEVELS;
X    if (Current_Dungeon != E_SEWERS) {
X#ifdef MSDOS
X    msdos_changelevel(Level,0,-1);
X#endif
X      free_dungeon();
X      Dungeon = NULL;
X      Level = NULL;
X      Current_Dungeon = E_SEWERS;
X    }
X    change_level(0,1,FALSE);
X    break;
X  case E_COUNTRYSIDE:
X    WIDTH = 64;
X    LENGTH = 64;
X    print1("You return to the fresh air of the open countryside.");
X    if (Last_Environment == E_CITY) {
X      Player.x = 27;
X      Player.y = 19;
X    }
X    else {
X      Player.x = LastCountryLocX;
X      Player.y = LastCountryLocY;
X    }
X    for(i=0;i<9;i++)
X      Country[Player.x+Dirs[0][i]][Player.y+Dirs[1][i]].explored = TRUE;
X    erase_level();
X    ScreenOffset = Player.y - (ScreenLength/2);
X    show_screen();
X    break;
X  case E_TACTICAL_MAP:
X    WIDTH = 64;
X    LENGTH = 16;
X    print1("You are now on the tactical screen; exit off any side to leave");
X    make_country_screen(Country[Player.x][Player.y].current_terrain_type);
X    make_country_monsters(Country[Player.x][Player.y].current_terrain_type);
X    Player.x = WIDTH/2;
X    Player.y = LENGTH/2;
X    erase_level();
X    ScreenOffset = 0;
X    show_screen();
X    break;
X  case E_NEVER_NEVER_LAND: default:
X    print1("There must be some mistake. You don't look like Peter Pan.");
X    print2("(But here you are in Never-Never Land)");
X    erase_level();
X    ScreenOffset = Player.y - (ScreenLength/2);
X    show_screen();
X    break;
X  }
X}
X
X
X
END_OF_FILE
if test 31191 -ne `wc -c <'oaux2.c'`; then
    echo shar: \"'oaux2.c'\" unpacked with wrong size!
fi
# end of 'oaux2.c'
fi
if test -f 'oiinit.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'oiinit.h'\"
else
echo shar: Extracting \"'oiinit.h'\" \(20910 characters\)
sed "s/^X//" >'oiinit.h' <<'END_OF_FILE'
X/* omega, (C) 1987,1988,1989 by Laurence Raphael Brothers */
X/* oiinit.h */
X/* This file defines and initializes the Objects Array */
X
Xstruct object Objects[TOTALITEMS] = {
X0,10,0,0,0,0,0,1,10,50,0,0,0,0,0,1107,2,'\\',"small grey box with red button","disposeable garage door opener","disposeable garage door opener",
X
X1,20,0,0,0,0,0,1,20,2000,0,0,0,0,0,0,4,'\\',"some rocks","uncut diamonds","uncut diamonds",
X
X2,15,0,0,0,0,0,1,10,50,0,0,0,0,0,1101,2,'\\',"twisted piece of metal","thieve's pick","thieve's pick",
X
X3,10,0,0,0,0,0,1,15,1500,0,0,0,0,0,0,1,'\\',"large green gem","humongous emerald","humongous emerald",
X
X4,200,0,0,0,0,0,1,18,1750,0,0,0,0,0,0,4,'\\',"gold ingot","gold ingot","gold ingot",
X
X5,5,0,0,0,0,0,1,1,3000,0,0,0,0,0,0,5,'\\',"old illegible documents","bearer bonds","bearer bonds",
X
X6,100,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,'\\',"bucket of salt water","bucket of salt water","bucket of salt water",
X
X7,3,0,0,0,0,0,1,10,20,0,0,0,0,0,1102,2,'\\',"key","magic key","magic key",
X
X8,30,0,0,0,0,6,1,8,10,0,0,0,0,0,1105,0,'\\',"torch","torch","torch",
X
X9,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X10,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X11,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X12,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X13,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X14,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X15,10,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,'\\',"grot","grot","grot",
X
X16,10,0,0,0,0,0,1,12,0,0,0,0,0,2,0,0,'\\',"Justiciar's Badge","Justiciar's Badge","Justiciar's Badge",
X
X17,10,0,0,0,0,89,1,3,30,0,0,0,0,0,1106,0,'\\',"spring-loaded tube","dart-trap component","dart-trap component",
X
X18,10,0,0,0,0,98,1,3,30,0,0,0,0,0,1106,0,'\\',"pressurized cannister","acid-trap component","acid-trap component",
X
X19,10,0,0,0,0,92,1,3,30,0,0,0,0,0,1106,0,'\\',"coil of fine wire","snare component","snare component",
X
X20,10,0,0,0,0,94,1,3,30,0,0,0,0,0,1106,0,'\\',"mound of powdered aluminum","fire-trap component","fire-trap component",
X
X21,10,0,0,0,0,95,1,3,30,0,0,0,0,0,1106,0,'\\',"powerful rune","teleport-trap component","teleport-trap component",
X
X22,10,0,0,0,0,97,1,3,30,0,0,0,0,0,1106,0,'\\',"pressurized cannister","sleepgas-trap component","sleepgas-trap component",
X
X23,10,0,0,0,0,96,1,3,30,0,0,0,0,0,1106,0,'\\',"powerful rune","disintegration-trap component","disintegration-trap component",
X
X24,10,0,0,0,0,100,1,3,30,0,0,0,0,0,1106,0,'\\',"dark fabric patch","abyss-trap component","abyss-trap component",
X
X25,10,0,0,0,0,99,1,3,30,0,0,0,0,0,1106,0,'\\',"powerful rune","manadrain-trap component","manadrain-trap component",
X
X26,20,0,0,0,0,8,1,0,2,0,0,0,0,0,401,0,'%',"red and white striped bucket","food ration","food ration",
X
X27,10,0,0,0,0,48,1,0,200,0,0,0,0,0,402,2,'%',"wafer of lembas","wafer of lembas","wafer of lembas",
X
X28,1,0,0,0,0,1,1,0,50,0,0,0,0,0,403,3,'%',"small gray tablet","stimtab","stimtab",
X
X29,1,0,0,0,0,1,1,0,100,0,0,0,0,0,404,3,'%',"small gray tablet","powtab","powtab",
X
X30,1,0,0,0,0,36,1,0,20,0,0,0,0,0,401,3,'%',"small gray tablet","nutritab","nutritab",
X
X31,1,0,0,0,0,1,1,0,500,0,0,0,0,0,405,3,'%',"small gray tablet","immunotab","immunotab",
X
X32,1,0,0,0,0,2,1,0,1,0,0,0,0,0,401,0,'%',"jelly baby","jelly baby","jelly baby",
X
X33,20,0,0,0,0,-1,1,0,25,0,0,0,0,0,406,1,'%',"food ration","poisoned ration","poisoned ration",
X
X34,2,0,0,0,0,1,1,0,100,0,0,0,0,0,408,2,'%',"withered reddish stringy vegetable","szechuan pepper","szechuan pepper",
X
X35,2,0,0,0,0,8,1,0,5,0,0,0,0,0,401,2,'%',"messy red and white disk","pepperoni pizza pie","pepperoni pizza pie",
X
X36,2,0,0,0,0,6,1,0,7,0,0,0,0,0,401,2,'%',"brown bag with strange ideograms","hunan take-out","hunan take-out",
X
X37,2,0,0,0,0,2,1,0,5,0,0,0,0,0,401,2,'%',"strange foamy cylinders","twinkies","twinkies",
X
X38,2,0,0,0,0,3,1,0,3,0,0,0,0,0,401,2,'%',"squiggly orange spirals","cheese-doodles","cheese-doodles",
X
X39,2,0,0,0,0,4,1,0,3,0,0,0,0,0,401,2,'%',"sweet nutty-smelling disks","pecan twirls","pecan_twirls",
X
X40,2,0,0,0,0,10,1,0,75,0,0,0,0,0,401,2,'%',"pale white strips with green dots","veal piccata with capers","veal piccata with capers",
X
X41,2,0,0,0,0,3,1,0,5,0,0,0,0,0,401,2,'%',"a bag of hard brown kernels","a bag of unmilled grain","a bag of unmilled grain",
X
X42,5,0,0,0,0,0,1,1,5,0,0,0,0,0,1,0,'?',"?","blank scroll","Antinomy!",
X
X43,5,0,0,0,0,0,1,1,250,0,0,0,0,0,110,1,'?',"?","scroll of spells","scroll of spell loss",
X
X44,5,0,0,0,0,0,1,1,400,0,0,0,0,0,101,2,'?',"?","scroll of blessing","scroll of cursing",
X
X45,5,0,0,0,0,0,1,1,5000,0,0,0,0,0,102,7,'?',"?","scroll of acquirement","scroll of destruction",
X
X46,5,0,0,0,0,0,1,1,200,0,0,0,0,0,103,2,'?',"?","scroll of enchantment","scroll of disenchantment",
X
X47,5,0,0,0,0,0,1,1,75,0,0,0,0,0,104,1,'?',"?","scroll of teleportation","scroll of teleportation",
X
X48,5,0,0,0,0,0,1,1,10000,0,0,0,0,0,105,10,'?',"?","scroll of wishing","scroll of wishing",
X
X49,5,0,0,0,0,0,1,1,25,0,0,0,0,0,106,1,'?',"?","scroll of clairvoyance","scroll of amnesia",
X
X50,5,0,0,0,0,0,1,1,50,0,0,0,0,0,107,2,'?',"?","scroll of displacement","scroll of vulnerability",
X
X51,5,0,0,0,0,0,1,1,20,0,0,0,0,0,108,0,'?',"?","scroll of identification","scroll of forgetfulness",
X
X52,5,0,0,0,0,0,1,1,10,0,0,0,0,0,118,0,'?',"?","hint sheet","hint sheet",
X
X53,5,0,0,0,0,0,1,1,50,0,0,0,0,0,111,2,'?',"?","jane's guide to treasure","jane's guide to treasure",
X
X54,5,0,0,0,0,0,1,1,50,0,0,0,0,0,112,1,'?',"?","scroll of alertness","scroll of drowsiness",
X
X55,5,0,0,0,0,0,1,1,300,0,0,0,0,0,113,5,'?',"?","scroll of cosmic flux","scroll of cosmic flux",
X
X56,5,0,0,0,0,0,1,1,100,0,0,0,0,0,114,2,'?',"?","scroll of charging","scroll of draining",
X
X57,5,0,0,0,0,0,1,1,100,0,0,0,0,0,115,3,'?',"?","scroll of the warp","scroll of the warp",
X
X58,5,0,0,0,0,0,1,1,10,0,0,0,0,0,116,1,'?',"?","scroll of self-knowledge","scroll of delusion",
X
X59,5,0,0,0,0,0,1,1,100,0,0,0,0,0,117,2,'?',"?","scroll of law","scroll of law",
X
X60,5,0,0,0,0,0,1,1,200,0,0,0,0,0,119,5,'?',"?","scroll of heroism","scroll of cowardliness",
X
X61,5,0,0,0,0,0,1,1,50,0,0,0,0,0,120,2,'?',"?","scroll of true sight","scroll of blindness",
X
X62,5,0,0,0,0,0,1,1,250,0,0,0,0,0,313,3,'?',"?","scroll of dispelling","scroll of self-dispelling",
X
X63,5,0,0,0,0,0,1,1,300,0,0,0,0,0,307,2,'?',"?","scroll of summoning","scroll of summoning",
X
X64,5,0,0,0,0,0,1,1,30,0,0,0,0,0,121,0,'?',"?","scroll of light","scroll of darkness",
X
X65,5,0,0,0,0,0,1,1,250,0,0,0,0,0,122,3,'?',"?","scroll of deflection","scroll of vulnerability",
X
X66,20,0,0,0,0,0,1,5,0,0,0,0,0,0,0,0,'!',"?","potion of quenching thirst","Antinomy!",
X
X67,20,0,0,0,0,0,1,5,40,0,0,0,0,0,201,2,'!',"?","potion of healing","potion of disruption",
X
X68,20,0,0,0,0,0,1,5,10,0,0,0,0,0,202,1,'!',"?","potion of object detection","potion of object detection",
X
X69,20,0,0,0,0,0,1,5,10,0,0,0,0,0,203,1,'!',"?","potion of monster detection","potion of monster detection",
X
X70,20,0,0,0,0,0,1,5,20,0,0,0,0,0,206,2,'!',"?","potion of neutralize poison","potion of poison",
X
X71,20,0,0,0,0,0,1,5,100,0,0,0,0,0,112,0,'!',"?","potion of alertness","potion of sleep",
X
X72,20,0,0,0,0,0,1,5,40,0,0,0,0,0,207,1,'!',"?","potion of speed","potion of slowness",
X
X73,20,0,0,0,0,0,1,5,50,0,0,0,0,0,205,3,'!',"?","potion of restoration","potion of debilitation",
X
X74,20,-1,0,0,0,0,1,5,1500,0,0,0,0,0,208,7,'!',"mercury","azoth","mercury",
X
X75,20,0,0,0,0,0,1,5,100,0,0,0,0,0,210,4,'!',"?","potion of regeneration","potion of great disruption",
X
X76,20,0,0,0,0,0,1,5,100,0,0,0,0,0,211,2,'!',"?","potion of invisibility","potion of aggravation",
X
X77,20,0,0,0,0,0,1,5,30,0,0,0,0,0,212,2,'!',"?","potion of breathing","potion of choking",
X
X78,20,0,0,0,0,0,1,5,200,0,0,0,0,0,214,5,'!',"?","potion of augmentation","potion of debilitation",
X
X79,20,0,0,0,0,0,1,5,50,0,0,0,0,0,213,2,'!',"?","potion of banishing fear","potion of fear",
X
X80,20,0,0,0,0,0,1,5,100,0,0,0,0,0,215,3,'!',"?","potion of chaos","Antinomy!",
X
X81,20,0,0,0,0,0,1,5,200,0,0,0,0,0,216,3,'!',"?","potion of accuracy","potion of fuzziness",
X
X82,20,0,0,0,0,0,1,5,50,0,0,0,0,0,217,1,'!',"?","potion of levitation","potion of levitation",
X
X83,20,0,0,0,0,0,1,5,50,0,0,0,0,0,218,1,'!',"?","potion of curing","potion of disease",
X
X84,10,0,0,6,12,0,1,15,5,0,0,0,2,0,1001,0,')',"dagger","dagger","dagger",
X
X85,25,0,0,8,11,0,1,15,40,0,0,0,1,0,1001,1,')',"short sword","short sword","short sword",
X
X86,40,0,0,12,9,0,1,15,90,0,0,0,1,0,1001,2,')',"broad sword","broad sword","broad sword",
X
X87,50,0,0,16,8,0,1,15,250,0,0,0,1,0,1001,3,')',"bastard sword","bastard sword","bastard sword",
X
X88,50,0,0,16,10,0,1,15,500,0,0,0,1,0,1001,4,')',"katana","katana","katana",
X
X89,75,0,0,20,7,0,1,15,400,0,0,0,1,0,1001,5,')',"great-sword","great-sword","great-sword",
X
X90,15,0,0,6,15,0,1,15,50,0,0,0,2,0,1001,2,')',"epee","epee","epee",
X
X91,20,0,0,8,13,0,1,15,250,0,0,0,2,0,1001,3,')',"rapier","rapier","rapier",
X
X92,25,0,0,11,12,0,1,15,500,0,0,0,2,0,1001,5,')',"estoc","estoc","estoc",
X
X93,35,0,0,8,8,0,1,15,40,0,0,0,1,0,1001,1,')',"cutlass","cutlass","cutlass",
X
X94,25,0,0,8,10,0,1,15,50,0,0,0,1,0,1001,1,')',"hand-axe","hand-axe","hand-axe",
X
X95,50,0,0,12,8,0,1,15,100,0,0,0,1,0,1001,2,')',"battle-axe","battle-axe","battle-axe",
X
X96,100,0,0,24,7,0,1,15,200,0,0,0,1,0,1001,5,')',"great-axe","great-axe","great-axe",
X
X97,50,0,0,12,8,0,1,15,50,0,0,0,3,0,1001,2,')',"mace","mace","mace",
X
X98,50,0,0,14,6,0,1,15,60,0,0,0,3,0,1001,2,')',"war-hammer","war-hammer","war-hammer",
X
X99,60,0,0,16,7,0,1,15,150,0,0,0,3,0,1001,5,')',"morning-star","morning-star","morning-star",
X
X100,50,0,0,12,7,0,1,15,50,0,0,0,3,0,1001,3,')',"flail","flail","flail",
X
X101,30,0,0,6,10,0,1,15,5,0,0,0,3,0,1001,0,')',"club","club","club",
X
X102,80,0,0,9,12,0,1,15,30,0,0,0,3,0,1001,1,')',"quarterstaff","quarterstaff","quarterstaff",
X
X103,50,0,0,10,10,0,1,15,50,0,0,0,2,0,1001,2,')',"spear","spear","spear",
X
X104,100,0,0,16,6,0,1,15,100,0,0,0,1,0,1001,3,')',"halberd","halberd","halberd",
X
X105,80,0,0,12,7,0,1,15,75,0,0,0,2,0,1001,3,')',"trident","trident","trident",
X
X106,20,0,0,4,8,1005,1,15,100,0,0,0,3,0,1001,2,')',"whip","whip","whip",
X
X107,20,0,0,30,20,1002,1,15,2000,0,0,0,2,0,1002,9,')',"grey metal cylinder","lightsabre","lightsabre",
X
X108,500,8,0,16,8,1003,1,15,1000,0,0,-8,1,0,1003,9,')',"bastard sword","Demonblade","Demonblade",
X
X109,250,7,0,17,10,1004,1,15,3000,0,0,7,3,0,1004,7,')',"mace","mace of disruption","mace",
X
X110,100,0,0,12,15,0,1,15,300,0,0,0,4,0,1001,2,'(',"longbow","longbow","longbow",
X
X111,150,0,0,20,15,0,1,15,500,0,0,0,4,0,1001,3,'(',"crossbow","crossbow","crossbow",
X
X112,2,0,0,3,3,1006,1,15,2,0,0,0,4,0,1001,1,'(',"arrow","arrow","arrow",
X
X113,2,0,0,3,0,1007,1,15,5,0,0,0,4,0,1001,1,'(',"bolt","bolt","bolt",
X
X114,50,0,0,3,10,1005,1,15,50,0,0,0,4,0,1001,2,'(',"bola","bola","bola",
X
X115,40,5,0,12,9,1008,1,15,3000,0,0,0,1,0,1001,7,')',"broad sword","vorpal sword","sword of self-mutilation",
X
X116,100,7,0,20,7,1009,1,15,5000,0,0,-7,1,0,1009,9,')',"great-sword","Desecrator","Desecrator",
X
X117,60,7,0,16,7,1010,1,15,2000,0,0,0,3,0,705,6,')',"morning-star","firestar","firestar",
X
X118,50,7,0,10,12,1011,1,15,3000,0,0,7,2,0,1011,7,')',"estoc","Defender","Defender",
X
X119,50,10,0,100,10,1012,1,15,5000,0,0,10,2,2,1012,10,')',"ivory spear","Victrix","Victrix",
X
X120,500,6,0,32,6,0,1,15,2000,0,0,0,1,2,1001,7,')',"great-axe","Goblins' Hewer","Goblins' Hewer",
X
X121,100,20,0,30,10,0,1,15,500,0,0,-10,1,0,1001,6,')',"scythe","scythe of slicing","scythe of slicing",
X
X122,250,0,0,50,-10,0,1,15,100,0,0,0,3,0,1001,5,')',"giant club","giant club","giant club",
X
X123,500,0,0,10000,1000,1014,1,15,10000,0,0,0,1,2,1001,10,')',"Scythe of Death","Scythe of Death","Scythe of Death",
X
X124,30,0,0,16,16,1015,1,15,1000,0,0,0,3,0,1001,4,')',"whip","acid whip","acid whip",
X
X125,100,0,0,1,0,0,1,20,5,0,0,0,0,0,804,0,']',"flak jacket","flak jacket","flak jacket",
X
X126,200,0,0,2,0,1,1,20,10,0,0,0,0,0,804,1,']',"soft leather armor","soft leather armor","soft leather armor",
X
X127,200,0,0,2,0,1,1,20,30,0,0,0,0,0,804,1,']',"cuirbouilli","cuirbouilli","cuirbouilli",
X
X128,300,0,0,3,0,2,1,20,100,0,0,0,0,0,804,2,']',"ring mail","ring mail","ring mail",
X
X129,400,0,0,4,0,3,1,20,200,0,0,0,0,0,804,3,']',"chain mail","chain mail","chain mail",
X
X130,400,0,0,4,0,2,1,20,300,0,0,0,0,0,804,4,']',"scale mail","scale mail","scale mail",
X
X131,400,0,0,5,0,3,1,20,450,0,0,0,0,0,804,5,']',"partial plate mail","partial plate mail","partial plate mail",
X
X132,600,0,0,6,0,4,1,20,750,0,0,0,0,0,804,6,']',"full plate mail","full plate mail","full plate mail",
X
X133,500,0,0,7,0,4,1,20,1500,0,0,0,0,0,804,6,']',"plate armor","plate armor","plate armor",
X
X134,200,0,0,5,0,2,1,20,1500,0,0,0,0,0,804,6,']',"lamellar armor","lamellar armor","lamellar armor",
X
X135,200,0,0,5,0,2,1,20,2000,0,0,0,0,0,803,7,']',"mithril chain mail","mithril chain mail","mithril chain mail",
X
X136,300,0,0,8,0,3,1,20,3000,0,0,0,0,0,803,7,']',"mithril plate armor","mithril plate armor","mithril plate armor",
X
X137,500,0,0,6,0,3,1,20,3000,0,0,0,0,0,705,7,']',"dragonscale armor","dragonscale armor","dragonscale armor",
X
X138,100,9,0,7,0,2,1,20,1000,0,0,0,0,0,801,8,']',"prismatrix armor","prismatrix armor","prismatrix armor",
X
X139,0,0,0,20,0,0,1,20,5000,0,0,0,0,0,802,9,']',"powered combat armor","powered combat armor","powered combat armor",
X
X140,0,0,0,10,0,0,1,20,3000,0,0,0,0,0,802,7,']',"powered scout armor","powered scout armor","powered scout armor",
X
X141,100,5,0,5,0,0,1,20,2000,0,0,-9,0,0,801,3,']',"demonhide armor","demonhide armor","demonhide armor",
X
X142,20,0,0,0,0,1,1,15,10,0,0,0,0,0,1202,0,'[',"buckler","buckler","buckler",
X
X143,40,0,0,0,0,2,1,15,20,0,0,0,0,0,1202,1,'[',"small round shield","small round shield","small round shield",
X
X144,100,0,0,0,0,3,1,15,50,0,0,0,0,0,1202,2,'[',"large round shield","large round shield","large round shield",
X
X145,200,0,0,0,0,4,1,15,75,0,0,0,0,0,1202,2,'[',"heater shield","heater shield","heater shield",
X
X146,300,0,0,0,0,5,1,15,150,0,0,0,0,0,1202,3,'[',"hoplon","hoplon","hoplon",
X
X147,500,0,0,0,0,6,1,15,200,0,0,0,0,0,1202,4,'[',"tower shield","tower shield","tower shield",
X
X148,20,0,0,0,0,7,1,15,1000,0,0,0,0,0,1202,6,'[',"plasteel shield","plasteel shield","plasteel shield",
X
X149,200,6,0,0,0,6,1,15,2000,0,0,0,0,0,1201,7,'[',"shield of deflection","shield of deflection","shield of deflection",
X
X150,30,0,0,0,0,0,1,4,15,0,0,0,0,0,0,0,'}',"?","cloak of wool","cloak of wool",
X
X151,30,0,0,0,0,0,1,4,500,0,0,0,0,0,602,3,'}',"?","cloak of negimmunity","cloak of level drain",
X
X152,30,0,0,0,0,0,1,4,500,0,0,0,0,0,603,5,'}',"?","cloak of invisibility","cloak of invisibility",
X
X153,30,0,0,0,0,0,1,4,1000,0,0,0,0,0,604,5,'}',"?","cloak of skill","cloak of skill",
X
X154,30,0,0,0,0,0,1,4,500,0,0,0,0,0,605,3,'}',"?","cloak of protection","cloak of damage",
X
X155,30,0,0,0,0,0,1,4,2000,0,0,0,0,0,601,6,'}',"?","cloak of displacement","cloak of vulnerability",
X
X156,30,0,0,0,0,0,1,4,500,0,0,0,0,0,606,3,'}',"?","cloak of true sight","cloak of blindness",
X
X157,30,0,0,0,0,0,1,6,1000,0,0,0,0,0,501,4,'{',"?","boots of speed","boots of slowness",
X
X158,30,0,0,0,0,0,1,6,1000,0,0,0,0,0,502,6,'{',"?","boots of heroism","boots of cowardliness",
X
X159,30,0,0,0,0,0,1,6,500,0,0,0,0,0,503,3,'{',"?","boots of levitation","boots of levitation",
X
X160,30,0,0,0,0,0,1,6,250,0,0,0,0,0,504,3,'{',"?","boots of agility","boots of clumsiness",
X
X161,30,0,0,0,0,0,1,6,200,0,0,0,0,0,505,2,'{',"?","jumping boots","jumping boots",
X
X162,30,0,0,0,0,0,1,6,7,0,0,0,0,0,0,0,'{',"?","boots of leather","boots of leather",
X
X163,30,0,0,0,0,0,1,6,2700,0,0,0,0,0,506,7,'{',"?","seven league boots","umpteen league boots",
X
X164,1,0,0,0,0,0,1,10,400,0,0,0,0,0,606,3,'=',"?","ring of truesight","ring of blindness",
X
X165,1,0,0,0,0,0,1,10,1,0,0,-1,0,0,702,0,'=',"?","ring of burden","ring of burden",
X
X166,1,0,0,0,0,0,1,10,100,0,0,0,0,0,703,1,'=',"?","ring of strength","ring of strength",
X
X167,1,0,0,0,0,0,1,10,100,0,0,0,0,0,704,2,'=',"?","ring of gaze immunity","ring of gaze immunity",
X
X168,1,0,0,0,0,0,1,10,100,0,0,0,0,0,705,3,'=',"?","ring of fire resistance","ring of fire resistance",
X
X169,1,0,0,0,0,0,1,10,10,0,0,0,0,0,0,0,'=',"?","ring of brass and glass","ring of brass and glass",
X
X170,1,0,0,0,0,0,1,10,100,0,0,0,0,0,706,4,'=',"?","ring of poison resistance","ring of poison",
X
X171,1,0,0,0,0,0,1,10,1000,0,0,0,0,0,707,5,'=',"?","ring of regeneration","ring of regeneration",
X
X172,1,0,0,0,0,0,1,10,100,0,0,0,0,0,708,0,'=',"?","ring of self-knowledge","ring of delusion",
X
X173,1,0,0,0,0,0,1,10,500,0,0,0,0,0,605,4,'=',"?","ring of protection","ring of vulnerability",
X
X174,80,0,0,0,0,0,1,10,500,0,0,0,0,0,301,3,'/',"?","staff of firebolts","staff of firebolts",
X
X175,80,0,0,0,0,0,1,10,10,0,0,0,0,0,1,0,'/',"?","walking stick","walking stick",
X
X176,80,0,0,0,0,0,1,10,100,0,0,0,0,0,304,1,'/',"?","staff of sleep","staff of sleep",
X
X177,80,0,0,0,0,0,1,10,500,0,0,0,0,0,306,4,'/',"?","wand of ball lightning","wand of ball lightning",
X
X178,80,0,0,0,0,0,1,10,500,0,0,0,0,0,307,2,'/',"?","rod of summoning","rod of summoning",
X
X179,80,0,0,0,0,0,1,10,100,0,0,0,0,0,308,1,'/',"?","rod of hiding","rod of hiding",
X
X180,80,0,0,0,0,0,1,10,500,0,0,0,0,0,302,3,'/',"?","staff of lightning bolts","staff of lightning bolts",
X
X181,80,0,0,0,0,0,1,10,500,0,0,0,0,0,305,5,'/',"?","wand of fireballs","wand of fireballs",
X
X182,80,0,0,0,0,0,1,10,2000,0,0,0,0,0,310,7,'/',"?","rod of disintegration","rod of disintegration",
X
X183,80,0,0,0,0,0,1,10,1000,0,0,0,0,0,309,6,'/',"?","staff of disruption","staff of disruption",
X
X184,80,0,0,0,0,0,1,10,100,0,0,0,0,0,311,2,'/',"?","snowball stick","snowball stick",
X
X185,80,0,0,0,0,0,1,10,50,0,0,0,0,0,303,1,'/',"?","staff of missiles","staff of missiles",
X
X186,80,0,0,0,0,0,1,10,200,0,0,0,0,0,312,2,'/',"?","rod of apportation","rod of lossage",
X
X187,80,0,0,0,0,0,1,10,750,0,0,0,0,0,313,6,'/',"?","staff of dispelling","staff of self-dispelling",
X
X188,80,0,0,0,0,0,1,10,500,0,0,0,0,0,201,3,'/',"?","staff of healing","staff of harming",
X
X189,80,0,0,0,0,0,1,10,1000,0,0,0,0,0,314,3,'/',"wand of stupidity","wand of polymorph","wand of stupidity",
X
X190,80,0,0,0,0,0,1,10,500,0,0,0,0,0,315,2,'/',"?","wand of fear","wand of fear",
X
X191,500,0,0,0,0,0,1,15,10000,0,0,0,0,2,905,10,'&',"Mysterious Orb","Orb of Mastery","Orb of Mastery",
X
X192,50,0,0,0,0,0,1,15,2000,0,0,0,0,0,901,9,'&',"Mysterious Orb","Orb of Fire","Orb of Fire",
X
X193,50,0,0,0,0,0,1,15,2000,0,0,0,0,0,902,8,'&',"Mysterious Orb","Orb of Water","Orb of Water",
X
X194,50,0,0,0,0,0,1,15,2000,0,0,0,0,0,903,7,'&',"Mysterious Orb","Orb of Earth","Orb of Earth",
X
X195,50,0,0,0,0,0,1,15,2000,0,0,0,0,0,904,6,'&',"Mysterious Orb","Orb of Air","Orb of Air",
X
X196,25,0,0,0,0,0,1,15,100,0,0,0,0,0,906,1,'&',"Black Orb","Burnt-out Orb","Burnt-out Orb",
X
X197,75,0,0,0,0,0,1,15,500,0,0,0,0,0,907,3,'&',"Glass Orb","Crystal Ball","Ball of Mindlessness",
X
X198,25,0,0,0,0,0,1,15,1000,0,0,0,0,0,908,5,'&',"Metal Pineapple","Holy Hand-Grenade of Antioch","Holy Hand-Grenade of Antioch",
X
X199,500,0,0,0,0,0,1,15,1,0,0,0,0,0,1,1,'&',"The Amulet of Yendor","The Amulet of Yendor","The Amulet of Yendor",
X
X200,1,0,0,0,0,0,1,15,20000,0,0,0,0,2,909,7,'&',"Key","Kolwynia, the Key That Was Lost","Kolwynia, the Key That was Lost",
X
X201,10,0,0,0,0,0,1,15,500,0,0,0,0,0,910,3,'&',"?","Potion of Death","Potion of Death",
X
X202,100,0,0,0,0,0,1,15,2000,0,0,0,0,0,911,5,'&',"Scintillating Staff","Staff of Enchantment","Staff of Enchantment",
X
X203,0,0,0,0,0,0,1,15,1500,0,0,0,0,0,912,2,'&',"Strange Weightless Helm","Helm of Teleportation","Helm of Teleportation",
X
X204,10,0,0,0,0,0,1,15,500,0,0,0,0,0,913,6,'&',"?","Potion of Life","Potion of Life",
X
X205,5,0,0,0,0,1,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Odin","Silver Gallows","Holy Symbol of Odin",
X
X206,5,0,0,0,0,4,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Hecate","Obsidian Crescent","Holy Symbol of Hecate",
X
X207,5,0,0,0,0,3,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Athena","Gold Owl Pendant","Holy Symbol of Athena",
X
X208,5,0,0,0,0,2,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Set","Jet Scarab","Holy Symbol of Set",
X
X209,5,0,0,0,0,5,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Druidism","Sprig of Mistletoe","Holy Symbol of Druidism",
X
X210,5,0,0,0,0,6,1,15,5000,0,0,0,0,2,915,10,'&',"Holy Symbol of Destiny","Blue Crystal Pendant","Holy Symbol of Destiny",
X
X211,1000,0,0,0,0,0,1,15,1000,0,0,0,0,0,914,6,'&',"Crudely Carved Monolith","The Juggernaut of Karnak","The Juggernaut of Karnak",
X
X212,10,0,0,0,0,0,1,0,10000,0,0,0,0,2,916,7,'&',"Strangely Glowing Crystal","The Star Gem","The Star Gem",
X
X213,1000,0,0,0,0,0,1,10,1000,0,0,0,0,2,917,10,'&',"Extremely Heavy Stick ","Sceptre of High Magic","Sceptre of High Magic",
X
X214,10,0,0,0,0,0,1,10,1000,0,0,0,0,2,918,10,'&',"Octagonal Copper Amulet ","Amulet of the Planes","Amulet of the Planes",
X
X215,0,0,0,0,0,0,1,10,0,0,0,0,0,0,0,0,'$',"money","money","money (the root of all evil)",
X
X216,100,0,0,0,0,0,1,10,0,0,0,0,0,0,407,0,'+',"a mysterious corpse","a mysterious corpse","a mysterious corpse"
X};
END_OF_FILE
if test 20910 -ne `wc -c <'oiinit.h'`; then
    echo shar: \"'oiinit.h'\" unpacked with wrong size!
fi
# end of 'oiinit.h'
fi
echo shar: End of archive 3 \(of 20\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 20 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