summaryrefslogtreecommitdiffstats
path: root/hack/hack.worn.c
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /hack/hack.worn.c
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'hack/hack.worn.c')
-rw-r--r--hack/hack.worn.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/hack/hack.worn.c b/hack/hack.worn.c
new file mode 100644
index 00000000..bfec47f2
--- /dev/null
+++ b/hack/hack.worn.c
@@ -0,0 +1,65 @@
+/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/* hack.worn.c - version 1.0.2 */
+
+#include "hack.h"
+
+struct worn {
+ long w_mask;
+ struct obj **w_obj;
+} worn[] = {
+ { W_ARM, &uarm },
+ { W_ARM2, &uarm2 },
+ { W_ARMH, &uarmh },
+ { W_ARMS, &uarms },
+ { W_ARMG, &uarmg },
+ { W_RINGL, &uleft },
+ { W_RINGR, &uright },
+ { W_WEP, &uwep },
+ { W_BALL, &uball },
+ { W_CHAIN, &uchain },
+ { 0, 0 }
+};
+
+setworn(obj, mask)
+register struct obj *obj;
+long mask;
+{
+ register struct worn *wp;
+ register struct obj *oobj;
+
+ for(wp = worn; wp->w_mask; wp++) if(wp->w_mask & mask) {
+ oobj = *(wp->w_obj);
+ if(oobj && !(oobj->owornmask & wp->w_mask))
+ impossible("Setworn: mask = %ld.", wp->w_mask);
+ if(oobj) oobj->owornmask &= ~wp->w_mask;
+ if(obj && oobj && wp->w_mask == W_ARM){
+ if(uarm2) {
+ impossible("Setworn: uarm2 set?");
+ } else
+ setworn(uarm, W_ARM2);
+ }
+ *(wp->w_obj) = obj;
+ if(obj) obj->owornmask |= wp->w_mask;
+ }
+ if(uarm2 && !uarm) {
+ uarm = uarm2;
+ uarm2 = 0;
+ uarm->owornmask ^= (W_ARM | W_ARM2);
+ }
+}
+
+/* called e.g. when obj is destroyed */
+setnotworn(obj) register struct obj *obj; {
+ register struct worn *wp;
+
+ for(wp = worn; wp->w_mask; wp++)
+ if(obj == *(wp->w_obj)) {
+ *(wp->w_obj) = 0;
+ obj->owornmask &= ~wp->w_mask;
+ }
+ if(uarm2 && !uarm) {
+ uarm = uarm2;
+ uarm2 = 0;
+ uarm->owornmask ^= (W_ARM | W_ARM2);
+ }
+}