home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume5 / omega2 / part08 / oitem.c < prev   
C/C++ Source or Header  |  1988-07-25  |  23KB  |  765 lines

  1. /* omega copyright (C) 1987,1988 by Laurence Raphael Brothers */
  2. /* oitem.c */
  3.  
  4. #include "oglob.h"
  5.  
  6. /* make a random new object, returning pointer */
  7. /* may return NULL. */
  8. pob create_object(itemlevel)
  9. int itemlevel;
  10. {
  11.   pob new;
  12.   int  r; 
  13.   int ok = FALSE;
  14.  
  15.   while (! ok) {
  16.     new = ((pob) malloc(sizeof(objtype)));
  17.     r= random_range(135);
  18.     if (r < 20) make_thing(new,-1);
  19.     else if (r < 40) make_food(new,-1);
  20.     else if (r < 50) make_scroll(new,-1);
  21.     else if (r < 60) make_potion(new,-1);
  22.     else if (r < 70) make_weapon(new,-1);
  23.     else if (r < 80) make_armor(new,-1);
  24.     else if (r < 90) make_shield(new,-1);
  25.     else if (r < 100) make_stick(new,-1);
  26.     else if (r < 110) make_boots(new,-1);
  27.     else if (r < 120) make_cloak(new,-1);
  28.     else if (r < 130) make_ring(new,-1);
  29.     else make_artifact(new,-1);
  30.     /* not ok if object is too good for level, or if unique and already made */
  31.     /* 1/100 chance of finding object if too good for level */
  32.     ok = ((new->uniqueness != UNIQUE_MADE) &&
  33.       ((new->level < itemlevel+random_range(3))
  34.        || (random_range(100)==23)));
  35.     if (!ok) free((char *) new);
  36.   }
  37.   if (new->uniqueness == UNIQUE_UNMADE) 
  38.     Objects[new->id].uniqueness=UNIQUE_MADE;
  39.   return(new);
  40. }
  41.  
  42. void make_cash(new,level)
  43. pob new;
  44. int level;
  45. {
  46.   *new = Objects[CASHID];
  47.   new->basevalue = random_range(level*level+10)+1; /* aux is AU value */
  48.   new->objstr = salloc(cashstr());
  49.   new->cursestr = new->truename = new->objstr;
  50. }
  51.  
  52. void make_food(new,id)
  53. pob new;
  54. int id;
  55. {
  56.   if (id == -1) id = random_range(NUMFOODS);
  57.   *new = Objects[FOODID+id];
  58. }
  59.  
  60.  
  61. void make_corpse(new,m)
  62. pob new;
  63. struct monster *m;
  64. {
  65.   *new = Objects[CORPSEID];
  66.   new->charge = m->id;
  67.   new->weight = m->corpseweight;
  68.   new->basevalue = m->corpsevalue;
  69.   new->known = 2;
  70.   new->objstr = salloc(m->corpsestr);
  71.   new->truename = new->cursestr = new->objstr;
  72.   if (m->monchar == '@')
  73.     new->usef = I_CANNIBAL;
  74.   else if (m_statusp(m,EDIBLE)) {
  75.     new->usef = I_FOOD;
  76.     new->aux = 6;
  77.   }
  78.   else if (m_statusp(m,POISONOUS))
  79.     new->usef = I_POISON_FOOD;
  80.   /* Special corpse-eating effects */
  81.   else switch(m->id) {
  82.   case ML1+1: /*tse tse fly */
  83.   case ML4+9: /*torpor beast */
  84.     new->usef = I_SLEEP_SELF;
  85.     break;
  86.   case ML2+5:
  87.     new->usef = I_INVISIBLE;
  88.     break;
  89.   case ML1+5: /* blipper */
  90.     new->usef = I_TELEPORT;
  91.     break;
  92.   case ML2+3: /* floating eye -- it's traditional.... */
  93.     new->usef = I_CLAIRVOYANCE;
  94.     break;
  95.   case ML4+11: /*astral fuzzy */
  96.     new->usef = I_DISPLACE;
  97.     break;
  98.   case ML4+12: /*s o law */
  99.     new->usef = I_CHAOS;
  100.     break;
  101.   case ML4+13: /*s o chaos */
  102.     new->usef = I_LAW;
  103.     break;
  104.   case ML5+9: /* astral vampire */
  105.     new->usef = I_ENCHANT;
  106.     break;
  107.   case ML5+11: /* manaburst */
  108.     new->usef = I_SPELLS;
  109.     break;
  110.   case ML6+9: /* rakshasa */
  111.     new->usef = I_TRUESIGHT;
  112.     break;
  113.   case ML7+0: /* behemoth */
  114.     new->usef = I_HEAL;
  115.     break;
  116.   case ML7+2: /* unicorn */
  117.     new->usef = I_NEUTRALIZE_POISON;
  118.     break;
  119.   case ML8+10: /*coma beast */
  120.     new->usef = I_ALERT;
  121.     break;
  122.   default:
  123.     new->usef = I_INEDIBLE; 
  124.     break;
  125.   }
  126. }
  127.  
  128.  
  129.  
  130.  
  131. void make_ring(new,id)
  132. pob new;
  133. int id;
  134. {
  135.   if (id == -1) id = random_range(NUMRINGS);
  136.   *new = Objects[RINGID+id];
  137.   if (new->blessing == 0) new->blessing = itemblessing();
  138.   if (new->plus == 0) new->plus = itemplus()+1;
  139.   if (new->blessing < 0) new->plus = -1 - abs(new->plus);
  140. }
  141.  
  142. void make_thing(new,id)
  143. pob new;
  144. int id;
  145. {
  146.   if (id == -1) id = random_range(NUMTHINGS);
  147.   *new = Objects[THINGID+id];
  148.   if (strcmp(new->objstr,"grot") == 0) {
  149.     new->objstr = salloc(grotname());
  150.     new->truename = new->cursestr = new->objstr;
  151.   }
  152. }
  153.  
  154.  
  155. void make_scroll(new,id)
  156. pob new;
  157. int id;
  158. {
  159.   if (id == -1) id = random_range(NUMSCROLLS);
  160.   *new = Objects[SCROLLID+id];
  161.   /* if a scroll of spells, aux is the spell id in Spells */
  162.   if (new->id == SCROLLID+1) {
  163.     new->aux = random_range(NUMSPELLS);
  164.   }
  165. }
  166.  
  167. void make_potion(new,id)
  168. pob new;
  169. int id;
  170. {
  171.   if (id == -1) id = random_range(NUMPOTIONS);
  172.   *new = Objects[POTIONID+id];
  173.   if (new->plus == 0) new->plus = itemplus();
  174. }
  175.  
  176. void make_weapon(new,id)
  177. pob new;
  178. int id;
  179. {
  180.   if (id == -1) id = random_range(NUMWEAPONS);
  181.   *new = Objects[WEAPONID+id];
  182.   if ((id == 28) || (id == 29)) /* bolt or arrow */
  183.     new->number = random_range(20)+1;
  184.   if (new->blessing == 0) new->blessing = itemblessing();
  185.   if (new->plus == 0) {
  186.     new->plus = itemplus();
  187.     if (new->blessing < 0)
  188.       new->plus = -1 - abs(new->plus);
  189.     else if (new->blessing > 0)
  190.       new->plus = 1 + abs(new->plus);
  191.   }
  192. }
  193.  
  194. void make_shield(new,id)
  195. pob new;
  196. int id;
  197. {
  198.   if (id == -1) id = random_range(NUMSHIELDS);
  199.   *new = Objects[SHIELDID+id];
  200.   if (new->plus == 0)
  201.     new->plus = itemplus();
  202.   if (new->blessing == 0) new->blessing = itemblessing();
  203.   if (new->blessing < 0)
  204.     new->plus = -1 - abs(new->plus);
  205.   else if (new->blessing > 0)
  206.     new->plus = 1 + abs(new->plus);
  207. }
  208.  
  209. void make_armor(new,id)
  210. pob new;
  211. int id;
  212. {
  213.   if (id == -1) id = random_range(NUMARMOR);
  214.   *new = Objects[ARMORID+id];
  215.   if (new->plus == 0) new->plus = itemplus();
  216.   if (new->blessing == 0) new->blessing = itemblessing();
  217.   if (new->blessing < 0)
  218.     new->plus = -1 - abs(new->plus);
  219.   else if (new->blessing > 0)
  220.     new->plus = 1 + abs(new->plus);  
  221. }
  222.  
  223. void make_cloak(new,id)
  224. pob new;
  225. int id;
  226. {
  227.   if (id == -1) id = random_range(NUMCLOAKS);
  228.   Objects[CLOAKID+4].plus = 2;
  229.   *new = Objects[CLOAKID+id];
  230.   if (new->blessing == 0) new->blessing = itemblessing();
  231. }
  232.  
  233. void make_boots(new,id)
  234. pob new;
  235. int id;
  236. {
  237.   if (id == -1) id = random_range(NUMBOOTS);
  238.   *new = Objects[BOOTID+id];
  239.   if (new->blessing == 0) new->blessing = itemblessing();
  240. }
  241.  
  242. void make_stick(new,id)
  243. pob new;
  244. int id;
  245. {
  246.   if (id == -1) id = random_range(NUMSTICKS);
  247.   *new = Objects[STICKID+id];
  248.   new->charge = itemcharge();
  249.   if (new->blessing == 0) new->blessing = itemblessing();
  250. }
  251.  
  252. void make_artifact(new,id)
  253. pob new;
  254. {
  255.   if (id == -1) id = random_range(NUMARTIFACTS);
  256.   *new = Objects[ARTIFACTID+id];
  257. }
  258.  
  259.  
  260.  
  261.  
  262. /* item name functions */
  263.  
  264. char *scrollname(reset,id)
  265. int reset,id;
  266.  
  267. {
  268.   static int ids[30];
  269.   int i,j,k;
  270.  
  271.   if (reset) {
  272.     for(i=0;i<30;i++)
  273.       ids[i]=i;
  274.     for(i=0;i<500;i++) {
  275.       j = random_range(30);
  276.       k = ids[i % 30];
  277.       ids[i % 30]=ids[j];
  278.       ids[j]=k;
  279.     }
  280.   }
  281.   else {
  282.     switch(ids[id]) {
  283.       case 0: strcpy(Str4,"scroll-GRISTOGRUE"); break;
  284.       case 1: strcpy(Str4,"scroll-Kho Reck Tighp"); break;
  285.       case 2: strcpy(Str4,"scroll-E Z"); break;
  286.       case 3: strcpy(Str4,"scroll-Kevitz"); break;
  287.       case 4: strcpy(Str4,"scroll-Arcanum Prime"); break;
  288.       case 5: strcpy(Str4,"scroll-NYARLATHOTEP"); break;
  289.       case 6: strcpy(Str4,"scroll-Gilthoniel"); break;
  290.       case 7: strcpy(Str4,"scroll-Zarathustra"); break;
  291.       case 8: strcpy(Str4,"scroll-Ancient Lore"); break;
  292.       case 9: strcpy(Str4,"scroll-Eyes Only"); break;
  293.       case 10: strcpy(Str4,"scroll-Ambogar Empheltz"); break;
  294.       case 11: strcpy(Str4,"scroll-Isengard"); break;
  295.       case 12: strcpy(Str4,"scroll-Deosil Widdershins"); break;
  296.       case 13: strcpy(Str4,"scroll-Magister Paracelsus"); break;
  297.       case 14: strcpy(Str4,"scroll-Qlipphotic Summons"); break;
  298.       case 15: strcpy(Str4,"scroll-Aratron Samael"); break;
  299.       case 16: strcpy(Str4,"scroll-De Wormiis Mysterius"); break;
  300.       case 17: strcpy(Str4,"scroll-Necronomicon"); break;
  301.       case 18: strcpy(Str4,"scroll-Pnakotic Manuscript"); break;
  302.       case 19: strcpy(Str4,"scroll-Codex of Xalimar"); break;
  303.       case 20: strcpy(Str4,"scroll-The Mabinogion"); break;
  304.       case 21: strcpy(Str4,"scroll-Ginseng Shiatsu"); break;
  305.       case 22: strcpy(Str4,"scroll-Tome of Tromax"); break;
  306.       case 23: strcpy(Str4,"scroll-Book of the Dead "); break;
  307.       case 24: strcpy(Str4,"scroll-The Flame Tongue"); break;
  308.       case 25: strcpy(Str4,"scroll-Karst Khogar"); break;
  309.       case 26: strcpy(Str4,"scroll-The Yellow Sign"); break;
  310.       case 27: strcpy(Str4,"scroll-The Kevillist Manifesto"); break;
  311.       case 28: strcpy(Str4,"scroll-Goshtar Script"); break;
  312.       case 29: strcpy(Str4,"scroll-Pendragon Encryption"); break;
  313.       }
  314.   }
  315.   return(Str4);
  316. }
  317.  
  318.  
  319. char *grotname()
  320. {
  321.   switch(random_range(20)) {
  322.     case 0: strcpy(Str4,"pot lid"); break;
  323.     case 1: strcpy(Str4,"mound of offal"); break;
  324.     case 2: strcpy(Str4,"sword that was broken"); break;
  325.     case 3: strcpy(Str4,"salted snail"); break;
  326.     case 4: strcpy(Str4,"key"); break;
  327.     case 5: strcpy(Str4,"toadstool"); break;
  328.     case 6: strcpy(Str4,"greenish spindle"); break;
  329.     case 7: strcpy(Str4,"tin soldier"); break;
  330.     case 8: strcpy(Str4,"broken yo-yo"); break;
  331.     case 9: strcpy(Str4,"NYC subway map"); break;
  332.     case 10: strcpy(Str4,"Nixon's the One! button"); break;
  333.     case 11: strcpy(Str4,"beer can (empty)"); break;
  334.     case 12: strcpy(Str4,"golden bejewelled falcon"); break;
  335.     case 13: strcpy(Str4,"hamster cage"); break;
  336.     case 14: strcpy(Str4,"wooden nickel"); break;
  337.     case 15: strcpy(Str4,"three-dollar bill"); break;
  338.     case 16: strcpy(Str4,"rosebud"); break;
  339.     case 17: strcpy(Str4,"water pistol"); break;
  340.     case 18: strcpy(Str4,"shattered skull"); break;
  341.     case 19: strcpy(Str4,"jawbone of an ass"); break;
  342.   }
  343.   return(Str4);
  344. }
  345.  
  346.  
  347.  
  348.  
  349. char *potionname(reset,id)
  350. int reset,id;
  351. {
  352.   static int ids[20];
  353.   int i,j,k;
  354.  
  355.   if (reset) {
  356.     for(i=0;i<20;i++)
  357.       ids[i]=i;
  358.     for(i=0;i<500;i++) {
  359.       j = random_range(20);
  360.       k = ids[i % 20];
  361.       ids[i % 20]=ids[j];
  362.       ids[j]=k;
  363.     }
  364.   }
  365.   else {
  366.     switch (ids[id]) {
  367.       case 0: strcpy(Str4,"vial of dewy liquid"); break;
  368.       case 1: strcpy(Str4,"jug of tarry black substance"); break;
  369.       case 2: strcpy(Str4,"flask of cold smoking froth"); break;
  370.       case 3: strcpy(Str4,"phial of glowing fluid"); break;
  371.       case 4: strcpy(Str4,"bottle of sickening slime"); break;
  372.       case 5: strcpy(Str4,"sac of greenish gel"); break;
  373.       case 6: strcpy(Str4,"wineskin of odorous goo"); break;
  374.       case 7: strcpy(Str4,"canteen of sweet sap"); break;
  375.       case 8: strcpy(Str4,"urn of clear fluid"); break;
  376.       case 9: strcpy(Str4,"clotted grey ooze"); break;
  377.       case 10: strcpy(Str4,"keg of bubbly golden fluid"); break;
  378.       case 11: strcpy(Str4,"tube of minty paste"); break;
  379.       case 12: strcpy(Str4,"pitcher of aromatic liquid"); break;
  380.       case 13: strcpy(Str4,"pot of rancid grease"); break;
  381.       case 14: strcpy(Str4,"thermos of hot black liquid"); break;
  382.       case 15: strcpy(Str4,"magnum of deep red liquid"); break;
  383.       case 16: strcpy(Str4,"vase full of ichor"); break;
  384.       case 17: strcpy(Str4,"container of white cream"); break;
  385.       case 18: strcpy(Str4,"syringe of clear fluid"); break;
  386.       case 19: strcpy(Str4,"can of volatile essence"); break;
  387.       }      
  388.     return(Str4);
  389.   }
  390. }
  391.  
  392.  
  393. char *stickname(reset,id)
  394. int reset,id;
  395. {
  396.   static int ids[20];
  397.   int i,j,k;
  398.  
  399.   if (reset) {
  400.     for(i=0;i<20;i++)
  401.       ids[i]=i;
  402.     for(i=0;i<500;i++) {
  403.       j = random_range(20);
  404.       k = ids[i % 20];
  405.       ids[i % 20]=ids[j];
  406.       ids[j]=k;
  407.     }
  408.   }
  409.   else {
  410.     switch (ids[id]) {
  411.       case 0: strcpy(Str4,"oaken staff"); break;
  412.       case 1: strcpy(Str4,"heavy metal rod"); break;
  413.       case 2: strcpy(Str4,"shaft of congealed light"); break;
  414.       case 3: strcpy(Str4,"slender ceramic wand"); break;
  415.       case 4: strcpy(Str4,"rune-inscribed bone wand"); break;
  416.       case 5: strcpy(Str4,"knurly staff"); break;
  417.       case 6: strcpy(Str4,"steel knobbed rod");  break;
  418.       case 7: strcpy(Str4,"lucite wand"); break;
  419.       case 8: strcpy(Str4,"sturdy alpenstock"); break;
  420.       case 9: strcpy(Str4,"gem-studded ebony staff"); break;
  421.       case 10: strcpy(Str4,"chromed sequinned staff"); break;
  422.       case 11: strcpy(Str4,"old peeling stick"); break;
  423.       case 12: strcpy(Str4,"jointed metal rod"); break;
  424.       case 13: strcpy(Str4,"wand with lead ferrules"); break;
  425.       case 14: strcpy(Str4,"forked wooden stick"); break;
  426.       case 15: strcpy(Str4,"cane with gold eagle handle"); break;
  427.       case 16: strcpy(Str4,"crystalline wand");  break;
  428.       case 17: strcpy(Str4,"metal stick with trigger"); break;
  429.       case 18: strcpy(Str4,"leather-handled stone rod"); break;
  430.       case 19: strcpy(Str4,"tiny mithril wand"); break;
  431.       }      
  432.     return(Str4);
  433.   }
  434. }
  435.  
  436. char *ringname(reset,id)
  437. int reset,id;
  438. {
  439.   static int ids[20];
  440.   int i,j,k;
  441.  
  442.   if (reset) {
  443.     for(i=0;i<20;i++)
  444.       ids[i]=i;
  445.     for(i=0;i<500;i++) {
  446.       j = random_range(20);
  447.       k = ids[i % 20];
  448.       ids[i % 20]=ids[j];
  449.       ids[j]=k;
  450.     }
  451.   }
  452.   else {
  453.     switch (ids[id]) {
  454.       case 0: strcpy(Str4,"gold ring with a blue gem"); break;
  455.       case 1: strcpy(Str4,"brass ring"); break;
  456.       case 2: strcpy(Str4,"mithril ring with a red gem"); break;
  457.       case 3: strcpy(Str4,"platinum ring");  break;
  458.       case 4: strcpy(Str4,"gold dragon's head ring"); break;
  459.       case 5: strcpy(Str4,"bronze ring"); break;
  460.       case 6: strcpy(Str4,"aardvark seal ring"); break;
  461.       case 7: strcpy(Str4,"grey metal ring"); break;
  462.       case 8: strcpy(Str4,"silver skull ring"); break;
  463.       case 9: strcpy(Str4,"onyx ring"); break;
  464.       case 10: strcpy(Str4,"Collegium Magii class ring"); break;
  465.       case 11: strcpy(Str4,"worn stone ring"); break;
  466.       case 12: strcpy(Str4,"diorite ring"); break;
  467.       case 13: strcpy(Str4,"ancient scarab ring");  break;
  468.       case 14: strcpy(Str4,"plastic charm ring"); break;
  469.       case 15: strcpy(Str4,"soapy gypsum ring"); break;
  470.       case 16: strcpy(Str4,"glass ring"); break;
  471.       case 17: strcpy(Str4,"glowing bluestone ring"); break;
  472.       case 18: strcpy(Str4,"ring with eye sigil"); break;
  473.       case 19: strcpy(Str4,"zirconium ring"); break;
  474.       }      
  475.     return(Str4);
  476.   }
  477. }
  478.  
  479.  
  480. char *cloakname(reset,id)
  481. int reset,id;
  482. {
  483.   static int ids[20];
  484.   int i,j,k;
  485.  
  486.   if (reset) {
  487.     for(i=0;i<20;i++)
  488.       ids[i]=i;
  489.     for(i=0;i<500;i++) {
  490.       j = random_range(20);
  491.       k = ids[i % 20];
  492.       ids[i % 20]=ids[j];
  493.       ids[j]=k;
  494.     }
  495.   }
  496.   else {
  497.     switch (ids[id]) {
  498.       case 0: strcpy(Str4,"tattered piece of cloth"); break;
  499.       case 1: strcpy(Str4,"fuligin cloak"); break;
  500.       case 2: strcpy(Str4,"chintz cloak"); break;
  501.       case 3: strcpy(Str4,"diaphanous cape");  break;
  502.       case 4: strcpy(Str4,"red half-cloak"); break;
  503.       case 5: strcpy(Str4,"mouse-hide cloak"); break;
  504.       case 6: strcpy(Str4,"kelly green cloak"); break;
  505.       case 7: strcpy(Str4,"cloth-of-gold cloak"); break;
  506.       case 8: strcpy(Str4,"dirty old cloak"); break;
  507.       case 9: strcpy(Str4,"weightless cloak"); break;
  508.       case 10: strcpy(Str4,"boat cloak"); break;
  509.       case 11: strcpy(Str4,"greasy tarpaulin"); break;
  510.       case 12: strcpy(Str4,"sable cloak"); break;
  511.       case 13: strcpy(Str4,"soft velvet cloak");  break;
  512.       case 14: strcpy(Str4,"opera cape"); break;
  513.       case 15: strcpy(Str4,"elegant brocade cloak"); break;
  514.       case 16: strcpy(Str4,"cloak of many colors"); break;
  515.       case 17: strcpy(Str4,"grey-green rag"); break;
  516.       case 18: strcpy(Str4,"puce and chartreuse cloak"); break;
  517.       case 19: strcpy(Str4,"smoky cloak"); break;
  518.       }      
  519.     return(Str4);
  520.   }
  521. }
  522.  
  523. char *bootname(reset,id)
  524. int reset,id;
  525. {
  526.   static int ids[20];
  527.   int i,j,k;
  528.  
  529.   if (reset) {
  530.     for(i=0;i<20;i++)
  531.       ids[i]=i;
  532.     for(i=0;i<500;i++) {
  533.       j = random_range(20);
  534.       k = ids[i % 20];
  535.       ids[i % 20]=ids[j];
  536.       ids[j]=k;
  537.     }
  538.   }
  539.   else {
  540.     switch (ids[id]) {
  541.       case 0: strcpy(Str4,"sturdy leather boots"); break;
  542.       case 1: strcpy(Str4,"calf-length moccasins"); break;
  543.       case 2: strcpy(Str4,"dark-colored tabi"); break;
  544.       case 3: strcpy(Str4,"patent-leather shoes");  break;
  545.       case 4: strcpy(Str4,"beaten-up gumshoes"); break;
  546.       case 5: strcpy(Str4,"alligator-hide boots"); break;
  547.       case 6: strcpy(Str4,"comfortable sandals"); break;
  548.       case 7: strcpy(Str4,"roller skates"); break;
  549.       case 8: strcpy(Str4,"purple suede gaiters"); break;
  550.       case 9: strcpy(Str4,"mirror-plated wingtips"); break;
  551.       case 10: strcpy(Str4,"heavy workboots"); break;
  552.       case 11: strcpy(Str4,"polyurethane-soled sneakers"); break;
  553.       case 12: strcpy(Str4,"clodhoppers"); break;
  554.       case 13: strcpy(Str4,"wooden shoes");  break;
  555.       case 14: strcpy(Str4,"ski boots"); break;
  556.       case 15: strcpy(Str4,"hob-nailed boots"); break;
  557.       case 16: strcpy(Str4,"elven boots"); break;
  558.       case 17: strcpy(Str4,"cowboy boots"); break;
  559.       case 18: strcpy(Str4,"flipflop slippers"); break;
  560.       case 19: strcpy(Str4,"riding boots"); break;
  561.     }      
  562.     return(Str4);
  563.   }
  564. }
  565.  
  566.  
  567.  
  568. int itemplus()
  569. {
  570.   int p = 0;
  571.  
  572.   while (random_range(2) == 0)
  573.     p++;
  574.   return(p);
  575. }
  576.  
  577.  
  578.  
  579. int itemcharge()
  580. {
  581.   return(random_range(20)+1);
  582. }
  583.  
  584.  
  585.  
  586. int itemblessing()
  587. {
  588.   switch(random_range(10)) {
  589.     case 0:
  590.     case 1:return(-1-random_range(10)); break;
  591.     case 8:
  592.     case 9:return(1+random_range(10)); break;
  593.     default: return(0);       
  594.   }
  595. }
  596.  
  597.     
  598. int twohandedp(id)
  599. int id;
  600. {
  601.   switch(id) {
  602.   case WEAPONID+5:
  603.   case WEAPONID+12:
  604.   case WEAPONID+18:
  605.   case WEAPONID+20:
  606.   case WEAPONID+26:
  607.   case WEAPONID+27:
  608.   case WEAPONID+32:
  609.   case WEAPONID+36:
  610.   case WEAPONID+38:
  611.   case WEAPONID+39:
  612.     return(TRUE); break;
  613.   default: return(FALSE); break;
  614.   }
  615. }
  616.  
  617.  
  618. void item_use(o)
  619. struct object *o;
  620. {
  621.   clearmsg();
  622.   switch(o->usef) {
  623.     case -1:i_no_op(o); break;
  624.     case 0:i_nothing(o); break;
  625.  
  626.     /* scrolls */        
  627.     case I_SPELLS: i_spells(o); break;
  628.     case I_BLESS: i_bless(o); break;
  629.     case I_ACQUIRE: i_acquire(o); break;
  630.     case I_ENCHANT: i_enchant(o); break;
  631.     case I_TELEPORT: i_teleport(o); break;
  632.     case I_WISH: i_wish(o); break;
  633.     case I_CLAIRVOYANCE: i_clairvoyance(o); break;
  634.     case I_DISPLACE: i_displace(o); break;
  635.     case I_ID: i_id(o); break;
  636.     case I_JANE_T: i_jane_t(o); break;
  637.     case I_FLUX: i_flux(o); break;
  638.     case I_WARP: i_warp(o); break;
  639.     case I_ALERT: i_alert(o); break;
  640.     case I_CHARGE: i_charge(o); break;
  641.     case I_KNOWLEDGE: i_knowledge(o); break;
  642.     case I_LAW: i_law(o); break;
  643.     case I_HINT: hint(); break;
  644.     case I_HERO: i_hero(o); break;
  645.     case I_TRUESIGHT: i_truesight(o); break;
  646.     case I_ILLUMINATE: i_illuminate(o); break;
  647.     case I_DEFLECT: i_deflect(o); break;
  648.  
  649.     /* potion functions */
  650.     case I_HEAL: i_heal(o); break;
  651.     case I_OBJDET: i_objdet(o); break;
  652.     case I_MONDET: i_mondet(o); break;
  653.     case I_SLEEP_SELF: i_sleep_self(o); break;
  654.     case I_NEUTRALIZE_POISON: i_neutralize_poison(o); break;
  655.     case I_RESTORE: i_restore(o); break;
  656.     case I_AZOTH: i_azoth(o); break;
  657.     case I_AUGMENT: i_augment(o); break;
  658.     case I_REGENERATE: i_regenerate(o); break;
  659.     case I_INVISIBLE: i_invisible(o); break;
  660.     case I_BREATHING: i_breathing(o); break;
  661.     case I_FEAR_RESIST: i_fear_resist(o); break;
  662.     case I_CHAOS: i_chaos(o); break;
  663.     case I_ACCURACY: i_accuracy(o); break;
  664.     case I_LEVITATION: i_levitate(o); break;
  665.     case I_CURE: i_cure(o); break;
  666.         
  667.     /* stick functions */
  668.     case I_FIREBOLT: i_firebolt(o); break;
  669.     case I_LBOLT: i_lbolt(o); break;
  670.     case I_MISSILE: i_missile(o); break;
  671.     case I_SLEEP_OTHER: i_sleep_other(o); break;
  672.     case I_FIREBALL: i_fireball(o); break;
  673.     case I_LBALL: i_lball(o); break;    
  674.     case I_SNOWBALL: i_snowball(o); break;
  675.     case I_SUMMON: i_summon(o); break;
  676.     case I_HIDE: i_hide(o); break;
  677.     case I_DISRUPT: i_disrupt(o); break;
  678.     case I_DISINTEGRATE: i_disintegrate(o); break;
  679.     case I_APPORT: i_apport(o); break;
  680.     case I_DISPEL: i_dispel(o); break;
  681.     case I_POLYMORPH: i_polymorph(o); break;
  682.     case I_FEAR:i_fear(o); break;
  683.  
  684.     /* food functions */
  685.     case I_FOOD: i_food(o); break;
  686.     case I_LEMBAS: i_lembas(o); break;
  687.     case I_STIM: i_stim(o); break;
  688.     case I_POW: i_pow(o); break;
  689.     case I_IMMUNE: i_immune(o); break;
  690.     case I_POISON_FOOD: i_poison_food(o); break;
  691.     case I_PEPPER_FOOD: i_pepper_food(o); break;
  692.     case I_CORPSE: i_corpse(o); break;
  693.  
  694.     /* boots functions */
  695.     case I_PERM_SPEED: i_perm_speed(o); break;
  696.     case I_PERM_HERO: i_perm_hero(o); break;
  697.     case I_PERM_LEVITATE: i_perm_levitate(o); break;
  698.     case I_PERM_AGILITY: i_perm_agility(o); break;
  699.       
  700.     /* artifact functions */
  701.     case I_SCEPTRE:i_sceptre(o);break;
  702.     case I_PLANES:i_planes(o);break;
  703.     case I_STARGEM:i_stargem(o);break;
  704.     case I_SYMBOL:i_symbol(o); break;
  705.     case I_ORBMASTERY: i_orbmastery(o); break;
  706.     case I_ORBFIRE: i_orbfire(o); break;
  707.     case I_ORBWATER: i_orbwater(o); break;
  708.     case I_ORBEARTH: i_orbearth(o); break;
  709.     case I_ORBAIR: i_orbair(o); break;
  710.     case I_ORBDEAD: i_orbdead(o); break;
  711.     case I_CRYSTAL: i_crystal(o); break;
  712.     case I_LIFE: i_life(o); break;
  713.     case I_DEATH: i_death(o); break;
  714.     case I_ANTIOCH: i_antioch(o); break;
  715.     case I_HELM: i_helm(o); break;
  716.     case I_KOLWYNIA: i_kolwynia(o); break;
  717.     case I_ENCHANTMENT: i_enchantment(o); break;
  718.     case I_JUGGERNAUT: i_juggernaut(o); break;
  719.  
  720.     /* cloak functions */
  721.     case I_PERM_DISPLACE: i_perm_displace(o); break;
  722.     case I_PERM_NEGIMMUNE: i_perm_negimmune(o); break;
  723.     case I_PERM_INVISIBLE: i_perm_invisible(o); break;
  724.     case I_PERM_PROTECTION: i_perm_protection(o);break;
  725.     case I_PERM_ACCURACY: i_perm_accuracy(o);break;
  726.     case I_PERM_TRUESIGHT: i_perm_truesight(o); break;
  727.  
  728.     /* ring functions */
  729.     case I_PERM_BURDEN: i_perm_burden(o); break;
  730.     case I_PERM_STRENGTH: i_perm_strength(o); break;
  731.     case I_PERM_GAZE_IMMUNE: i_perm_gaze_immune(o); break;
  732.     case I_PERM_FIRE_RESIST: i_perm_fire_resist(o); break;
  733.     case I_PERM_POISON_RESIST: i_perm_poison_resist(o); break;
  734.     case I_PERM_REGENERATE: i_perm_regenerate(o); break;
  735.     case I_PERM_KNOWLEDGE: i_perm_knowledge(o); break;
  736.  
  737.     /* armor functions */
  738.     case I_NORMAL_ARMOR: i_normal_armor(o); break;
  739.     case I_PERM_FEAR_RESIST: i_perm_fear_resist(o); break;
  740.     case I_PERM_ENERGY_RESIST: i_perm_energy_resist(o); break;
  741.     case I_PERM_BREATHING: i_perm_breathing(o); break;
  742.  
  743.     /* weapons functions */
  744.     case I_NORMAL_WEAPON: i_normal_weapon(o); break;
  745.     case I_LIGHTSABRE: i_lightsabre(o); break;
  746.     case I_DEMONBLADE: i_demonblade(o); break;
  747.     case I_DESECRATE: i_desecrate(o); break;
  748.     case I_MACE_DISRUPT: i_mace_disrupt(o); break;
  749.     case I_DEFEND: i_defend(o); break;
  750.     case I_VICTRIX: i_victrix(o); break;
  751.  
  752.     /* thing functions */        
  753.     case I_PICK: i_pick(o); break;
  754.     case I_KEY: i_key(o); break;
  755.     case I_PERM_ILLUMINATE: i_perm_illuminate(o); break;
  756.     case I_TRAP: i_trap(o); break;
  757.     case I_RAISE_PORTCULLIS:i_raise_portcullis(o); break;
  758.  
  759.     /* shield functions */
  760.     case I_NORMAL_SHIELD: i_normal_shield(o); break;
  761.     case I_PERM_DEFLECT: i_perm_deflect(o); break;
  762.   }
  763. }
  764.  
  765.