]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hack/hack.steal.c
avoid duplicating symbols in libterminfo.
[bsdgames-darwin.git] / hack / hack.steal.c
index f123d37f790bfa1cb911e557697b1cbab0a5b24e..cceb50086aa8a2874239c759e01ec305d5b6771b 100644 (file)
-/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
-/* hack.steal.c - version 1.0.3 */
+/*     $NetBSD: hack.steal.c,v 1.8 2011/08/06 20:29:37 dholland Exp $  */
 
+/*
+ * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
+ * Amsterdam
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the Stichting Centrum voor Wiskunde en
+ * Informatica, nor the names of its contributors may be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1982 Jay Fenlason <hack@gnu.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: hack.steal.c,v 1.8 2011/08/06 20:29:37 dholland Exp $");
+#endif                         /* not lint */
+
+#include <stdlib.h>
 #include "hack.h"
+#include "extern.h"
+
+static int stealarm(void);
 
-long           /* actually returns something that fits in an int */
-somegold(){
-       return( (u.ugold < 100) ? u.ugold :
-               (u.ugold > 10000) ? rnd(10000) : rnd((int) u.ugold) );
+/*
+ * actually returns something that fits in an int
+ */
+long
+somegold(void)
+{
+       return ((u.ugold < 100) ? u.ugold :
+               (u.ugold > 10000) ? rnd(10000) : rnd((int) u.ugold));
 }
 
-stealgold(mtmp)  register struct monst *mtmp; {
-register struct gold *gold = g_at(u.ux, u.uy);
-register long tmp;
-       if(gold && ( !u.ugold || gold->amount > u.ugold || !rn2(5))) {
+void
+stealgold(struct monst *mtmp)
+{
+       struct gold    *gold = g_at(u.ux, u.uy);
+       long            tmp;
+       if (gold && (!u.ugold || gold->amount > u.ugold || !rn2(5))) {
                mtmp->mgold += gold->amount;
                freegold(gold);
-               if(Invisible) newsym(u.ux, u.uy);
+               if (Invisible)
+                       newsym(u.ux, u.uy);
                pline("%s quickly snatches some gold from between your feet!",
-                       Monnam(mtmp));
-               if(!u.ugold || !rn2(5)) {
+                     Monnam(mtmp));
+               if (!u.ugold || !rn2(5)) {
                        rloc(mtmp);
                        mtmp->mflee = 1;
                }
-       } else if(u.ugold) {
+       } else if (u.ugold) {
                u.ugold -= (tmp = somegold());
                pline("Your purse feels lighter.");
                mtmp->mgold += tmp;
@@ -33,171 +109,173 @@ register long tmp;
 }
 
 /* steal armor after he finishes taking it off */
-unsigned stealoid;             /* object to be stolen */
-unsigned stealmid;             /* monster doing the stealing */
-stealarm(){
-       register struct monst *mtmp;
-       register struct obj *otmp;
-
-       for(otmp = invent; otmp; otmp = otmp->nobj)
-         if(otmp->o_id == stealoid) {
-           for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
-             if(mtmp->m_id == stealmid) {
-               if(dist(mtmp->mx,mtmp->my) < 3) {
-                 freeinv(otmp);
-                 pline("%s steals %s!", Monnam(mtmp), doname(otmp));
-                 mpickobj(mtmp,otmp);
-                 mtmp->mflee = 1;
-                 rloc(mtmp);
+static unsigned stealoid;      /* object to be stolen */
+static unsigned stealmid;      /* monster doing the stealing */
+static int
+stealarm(void)
+{
+       struct monst   *mtmp;
+       struct obj     *otmp;
+
+       for (otmp = invent; otmp; otmp = otmp->nobj)
+               if (otmp->o_id == stealoid) {
+                       for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
+                               if (mtmp->m_id == stealmid) {
+                                       if (dist(mtmp->mx, mtmp->my) < 3) {
+                                               freeinv(otmp);
+                                               pline("%s steals %s!", Monnam(mtmp), doname(otmp));
+                                               mpickobj(mtmp, otmp);
+                                               mtmp->mflee = 1;
+                                               rloc(mtmp);
+                                       }
+                                       break;
+                               }
+                       break;
                }
-               break;
-             }
-           break;
-         }
        stealoid = 0;
+       return 0;
 }
 
 /* returns 1 when something was stolen */
 /* (or at least, when N should flee now) */
 /* avoid stealing the object stealoid */
-steal(mtmp)
-struct monst *mtmp;
+int
+steal(struct monst *mtmp)
 {
-       register struct obj *otmp;
-       register tmp;
-       register named = 0;
-
-       if(!invent){
-           if(Blind)
-             pline("Somebody tries to rob you, but finds nothing to steal.");
-           else
-             pline("%s tries to rob you, but she finds nothing to steal!",
-               Monnam(mtmp));
-           return(1);  /* let her flee */
+       struct obj     *otmp;
+       int             tmp;
+       int             named = 0;
+
+       if (!invent) {
+               if (Blind)
+                       pline("Somebody tries to rob you, but finds nothing to steal.");
+               else
+                       pline("%s tries to rob you, but she finds nothing to steal!",
+                             Monnam(mtmp));
+               return (1);     /* let her flee */
        }
        tmp = 0;
-       for(otmp = invent; otmp; otmp = otmp->nobj) if(otmp != uarm2)
-               tmp += ((otmp->owornmask & (W_ARMOR | W_RING)) ? 5 : 1);
+       for (otmp = invent; otmp; otmp = otmp->nobj)
+               if (otmp != uarm2)
+                       tmp += ((otmp->owornmask & (W_ARMOR | W_RING)) ? 5 : 1);
        tmp = rn2(tmp);
-       for(otmp = invent; otmp; otmp = otmp->nobj) if(otmp != uarm2)
-               if((tmp -= ((otmp->owornmask & (W_ARMOR | W_RING)) ? 5 : 1))
-                       < 0) break;
-       if(!otmp) {
+       for (otmp = invent; otmp; otmp = otmp->nobj)
+               if (otmp != uarm2)
+                       if ((tmp -= ((otmp->owornmask & (W_ARMOR | W_RING)) ? 5 : 1))
+                           < 0)
+                               break;
+       if (!otmp) {
                impossible("Steal fails!");
-               return(0);
+               return (0);
        }
-       if(otmp->o_id == stealoid)
-               return(0);
-       if((otmp->owornmask & (W_ARMOR | W_RING))){
-               switch(otmp->olet) {
+       if (otmp->o_id == stealoid)
+               return (0);
+       if ((otmp->owornmask & (W_ARMOR | W_RING))) {
+               switch (otmp->olet) {
                case RING_SYM:
                        ringoff(otmp);
                        break;
                case ARMOR_SYM:
-                       if(multi < 0 || otmp == uarms){
-                         setworn((struct obj *) 0, otmp->owornmask & W_ARMOR);
-                         break;
+                       if (multi < 0 || otmp == uarms) {
+                               setworn((struct obj *) 0, otmp->owornmask & W_ARMOR);
+                               break;
+                       } {
+                               int             curssv = otmp->cursed;
+                               otmp->cursed = 0;
+                               stop_occupation();
+                               pline("%s seduces you and %s off your %s.",
+                                     Amonnam(mtmp, Blind ? "gentle" : "beautiful"),
+                                     otmp->cursed ? "helps you to take"
+                                     : "you start taking",
+                                     (otmp == uarmg) ? "gloves" :
+                                     (otmp == uarmh) ? "helmet" : "armor");
+                               named++;
+                               (void) armoroff(otmp);
+                               otmp->cursed = curssv;
+                               if (multi < 0) {
+                                       /*
+                                       multi = 0;
+                                       nomovemsg = 0;
+                                       afternmv = 0;
+                                       */
+                                       stealoid = otmp->o_id;
+                                       stealmid = mtmp->m_id;
+                                       afternmv = stealarm;
+                                       return (0);
+                               }
+                               break;
                        }
-               { int curssv = otmp->cursed;
-                       otmp->cursed = 0;
-                       stop_occupation();
-                       pline("%s seduces you and %s off your %s.",
-                               Amonnam(mtmp, Blind ? "gentle" : "beautiful"),
-                               otmp->cursed ? "helps you to take"
-                                           : "you start taking",
-                               (otmp == uarmg) ? "gloves" :
-                               (otmp == uarmh) ? "helmet" : "armor");
-                       named++;
-                       (void) armoroff(otmp);
-                       otmp->cursed = curssv;
-                       if(multi < 0){
-                               extern char *nomovemsg;
-                               extern int (*afternmv)();
-                               /*
-                               multi = 0;
-                               nomovemsg = 0;
-                               afternmv = 0;
-                               */
-                               stealoid = otmp->o_id;
-                               stealmid = mtmp->m_id;
-                               afternmv = stealarm;
-                               return(0);
-                       }
-                       break;
-               }
                default:
                        impossible("Tried to steal a strange worn thing.");
                }
-       }
-       else if(otmp == uwep)
+       } else if (otmp == uwep)
                setuwep((struct obj *) 0);
-       if(otmp->olet == CHAIN_SYM) {
+       if (otmp->olet == CHAIN_SYM) {
                impossible("How come you are carrying that chain?");
        }
-       if(Punished && otmp == uball){
+       if (Punished && otmp == uball) {
                Punished = 0;
                freeobj(uchain);
-               free((char *) uchain);
+               free(uchain);
                uchain = (struct obj *) 0;
                uball->spe = 0;
                uball = (struct obj *) 0;       /* superfluous */
        }
        freeinv(otmp);
        pline("%s stole %s.", named ? "She" : Monnam(mtmp), doname(otmp));
-       mpickobj(mtmp,otmp);
-       return((multi < 0) ? 0 : 1);
+       mpickobj(mtmp, otmp);
+       return ((multi < 0) ? 0 : 1);
 }
 
-mpickobj(mtmp,otmp)
-register struct monst *mtmp;
-register struct obj *otmp;
+void
+mpickobj(struct monst *mtmp, struct obj *otmp)
 {
        otmp->nobj = mtmp->minvent;
        mtmp->minvent = otmp;
 }
 
-stealamulet(mtmp)
-register struct monst *mtmp;
+int
+stealamulet(struct monst *mtmp)
 {
-       register struct obj *otmp;
-
-       for(otmp = invent; otmp; otmp = otmp->nobj) {
-           if(otmp->olet == AMULET_SYM) {
-               /* might be an imitation one */
-               if(otmp == uwep) setuwep((struct obj *) 0);
-               freeinv(otmp);
-               mpickobj(mtmp,otmp);
-               pline("%s stole %s!", Monnam(mtmp), doname(otmp));
-               return(1);
-           }
+       struct obj     *otmp;
+
+       for (otmp = invent; otmp; otmp = otmp->nobj) {
+               if (otmp->olet == AMULET_SYM) {
+                       /* might be an imitation one */
+                       if (otmp == uwep)
+                               setuwep((struct obj *) 0);
+                       freeinv(otmp);
+                       mpickobj(mtmp, otmp);
+                       pline("%s stole %s!", Monnam(mtmp), doname(otmp));
+                       return (1);
+               }
        }
-       return(0);
+       return (0);
 }
 
 /* release the objects the killed animal has stolen */
-relobj(mtmp,show)
-register struct monst *mtmp;
-register show;
+void
+relobj(struct monst *mtmp, int show)
 {
-       register struct obj *otmp, *otmp2;
+       struct obj     *otmp, *otmp2;
 
-       for(otmp = mtmp->minvent; otmp; otmp = otmp2){
+       for (otmp = mtmp->minvent; otmp; otmp = otmp2) {
                otmp->ox = mtmp->mx;
                otmp->oy = mtmp->my;
                otmp2 = otmp->nobj;
                otmp->nobj = fobj;
                fobj = otmp;
                stackobj(fobj);
-               if(show & cansee(mtmp->mx,mtmp->my))
-                       atl(otmp->ox,otmp->oy,otmp->olet);
+               if (show & cansee(mtmp->mx, mtmp->my))
+                       atl(otmp->ox, otmp->oy, otmp->olet);
        }
        mtmp->minvent = (struct obj *) 0;
-       if(mtmp->mgold || mtmp->data->mlet == 'L') {
-               register long tmp;
+       if (mtmp->mgold || mtmp->data->mlet == 'L') {
+               long            tmp;
 
                tmp = (mtmp->mgold > 10000) ? 10000 : mtmp->mgold;
-               mkgold((long)(tmp + d(dlevel,30)), mtmp->mx, mtmp->my);
-               if(show & cansee(mtmp->mx,mtmp->my))
-                       atl(mtmp->mx,mtmp->my,'$');
+               mkgold((long) (tmp + d(dlevel, 30)), mtmp->mx, mtmp->my);
+               if (show & cansee(mtmp->mx, mtmp->my))
+                       atl(mtmp->mx, mtmp->my, '$');
        }
 }