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