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