home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / HACKSRC.ZIP / WORN.C < prev    next >
C/C++ Source or Header  |  1985-10-16  |  1KB  |  66 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2. /* worn.c - version 1.0.2 */
  3.  
  4. #include "hack.h"
  5.  
  6. struct worn {
  7.     long w_mask;
  8.     struct obj **w_obj;
  9. } worn[] = {
  10.     { W_ARM, &uarm },
  11.     { W_ARM2, &uarm2 },
  12.     { W_ARMH, &uarmh },
  13.     { W_ARMS, &uarms },
  14.     { W_ARMG, &uarmg },
  15.     { W_RINGL, &uleft },
  16.     { W_RINGR, &uright },
  17.     { W_WEP, &uwep },
  18.     { W_BALL, &uball },
  19.     { W_CHAIN, &uchain },
  20.     { 0, 0 }
  21. };
  22.  
  23. setworn(obj, mask)
  24. register struct obj *obj;
  25. long mask;
  26. {
  27.     register struct worn *wp;
  28.     register struct obj *oobj;
  29.  
  30.     for(wp = worn; wp->w_mask; wp++) if(wp->w_mask & mask) {
  31.         oobj = *(wp->w_obj);
  32.         if(oobj && !(oobj->owornmask & wp->w_mask))
  33.             impossible("Setworn: mask = %ld.", wp->w_mask);
  34.         if(oobj) oobj->owornmask &= ~wp->w_mask;
  35.         if(obj && oobj && wp->w_mask == W_ARM){
  36.             if(uarm2) {
  37.                 impossible("Setworn: uarm2 set?");
  38.             } else
  39.                 setworn(uarm, W_ARM2);
  40.         }
  41.         *(wp->w_obj) = obj;
  42.         if(obj) obj->owornmask |= wp->w_mask;
  43.     }
  44.     if(uarm2 && !uarm) {
  45.         uarm = uarm2;
  46.         uarm2 = 0;
  47.         uarm->owornmask ^= (W_ARM | W_ARM2);
  48.     }
  49. }
  50.  
  51. /* called e.g. when obj is destroyed */
  52. setnotworn(obj) register struct obj *obj; {
  53.     register struct worn *wp;
  54.  
  55.     for(wp = worn; wp->w_mask; wp++)
  56.         if(obj == *(wp->w_obj)) {
  57.             *(wp->w_obj) = 0;
  58.             obj->owornmask &= ~wp->w_mask;
  59.         }
  60.     if(uarm2 && !uarm) {
  61.         uarm = uarm2;
  62.         uarm2 = 0;
  63.         uarm->owornmask ^= (W_ARM | W_ARM2);
  64.     }
  65. }
  66.