|
|
1.1 ! root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ ! 2: /* hack.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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.