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