]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hack/hack.wizard.c
caesar: WARNS=6, strict bool mode
[bsdgames-darwin.git] / hack / hack.wizard.c
index caec93f72e3a162f54a183764e907899cabd4fd3..0cd00c7f0ad5240ea7cfe3cc928604cf9f725755 100644 (file)
+/*     $NetBSD: hack.wizard.c,v 1.10 2011/08/07 06:03:45 dholland Exp $        */
+
 /*
- * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985.
+ * 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
-static char rcsid[] = "$Id: hack.wizard.c,v 1.2 1993/08/02 17:19:39 mycroft Exp $";
-#endif /* not lint */
+__RCSID("$NetBSD: hack.wizard.c,v 1.10 2011/08/07 06:03:45 dholland Exp $");
+#endif                         /* not lint */
 
 /* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */
 
 #include "hack.h"
-extern struct permonst pm_wizard;
-extern struct monst *makemon();
+#include "extern.h"
+
+#define        WIZSHOT     6           /* one chance in WIZSHOT that wizard will try
+                                * magic */
+#define        BOLT_LIM    8           /* from this distance D and 1 will try to hit
+                                * you */
 
-#define        WIZSHOT     6   /* one chance in WIZSHOT that wizard will try magic */
-#define        BOLT_LIM    8   /* from this distance D and 1 will try to hit you */
+static const char wizapp[] = "@DNPTUVXcemntx";
+
+static void aggravate(void);
+static void clonewiz(struct monst *);
 
-char wizapp[] = "@DNPTUVXcemntx";
 
 /* If he has found the Amulet, make the wizard appear after some time */
-amulet(){
-       register struct obj *otmp;
-       register struct monst *mtmp;
+void
+amulet(void)
+{
+       struct obj     *otmp;
+       struct monst   *mtmp;
 
-       if(!flags.made_amulet || !flags.no_of_wizards)
+       if (!flags.made_amulet || !flags.no_of_wizards)
                return;
        /* find wizard, and wake him if necessary */
-       for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
-           if(mtmp->data->mlet == '1' && mtmp->msleep && !rn2(40))
-               for(otmp = invent; otmp; otmp = otmp->nobj)
-                   if(otmp->olet == AMULET_SYM && !otmp->spe) {
-                       mtmp->msleep = 0;
-                       if(dist(mtmp->mx,mtmp->my) > 2)
-                           pline(
-    "You get the creepy feeling that somebody noticed your taking the Amulet."
-                           );
-                       return;
-                   }
+       for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
+               if (mtmp->data->mlet == '1' && mtmp->msleep && !rn2(40))
+                       for (otmp = invent; otmp; otmp = otmp->nobj)
+                               if (otmp->olet == AMULET_SYM && !otmp->spe) {
+                                       mtmp->msleep = 0;
+                                       if (dist(mtmp->mx, mtmp->my) > 2)
+                                               pline(
+                                                     "You get the creepy feeling that somebody noticed your taking the Amulet."
+                                                       );
+                                       return;
+                               }
 }
 
-wiz_hit(mtmp)
-register struct monst *mtmp;
+int
+wiz_hit(struct monst *mtmp)
 {
        /* if we have stolen or found the amulet, we disappear */
-       if(mtmp->minvent && mtmp->minvent->olet == AMULET_SYM &&
+       if (mtmp->minvent && mtmp->minvent->olet == AMULET_SYM &&
            mtmp->minvent->spe == 0) {
                /* vanish -- very primitive */
                fall_down(mtmp);
-               return(1);
+               return (1);
        }
-
        /* if it is lying around someplace, we teleport to it */
-       if(!carrying(AMULET_OF_YENDOR)) {
-           register struct obj *otmp;
-
-           for(otmp = fobj; otmp; otmp = otmp->nobj)
-               if(otmp->olet == AMULET_SYM && !otmp->spe) {
-                   if((u.ux != otmp->ox || u.uy != otmp->oy) &&
-                      !m_at(otmp->ox, otmp->oy)) {
-
-                       /* teleport to it and pick it up */
-                       mtmp->mx = otmp->ox;
-                       mtmp->my = otmp->oy;
-                       freeobj(otmp);
-                       mpickobj(mtmp, otmp);
-                       pmon(mtmp);
-                       return(0);
-                   }
-                   goto hithim;
-               }
-           return(0);                          /* we don't know where it is */
+       if (!carrying(AMULET_OF_YENDOR)) {
+               struct obj     *otmp;
+
+               for (otmp = fobj; otmp; otmp = otmp->nobj)
+                       if (otmp->olet == AMULET_SYM && !otmp->spe) {
+                               if ((u.ux != otmp->ox || u.uy != otmp->oy) &&
+                                   !m_at(otmp->ox, otmp->oy)) {
+
+                                       /* teleport to it and pick it up */
+                                       mtmp->mx = otmp->ox;
+                                       mtmp->my = otmp->oy;
+                                       freeobj(otmp);
+                                       mpickobj(mtmp, otmp);
+                                       pmon(mtmp);
+                                       return (0);
+                               }
+                               goto hithim;
+                       }
+               return (0);     /* we don't know where it is */
        }
 hithim:
-       if(rn2(2)) {                            /* hit - perhaps steal */
+       if (rn2(2)) {           /* hit - perhaps steal */
 
-           /* if hit 1/20 chance of stealing amulet & vanish
-               - amulet is on level 26 again. */
-           if(hitu(mtmp, d(mtmp->data->damn,mtmp->data->damd))
-               && !rn2(20) && stealamulet(mtmp))
-               ;
-       }
-       else
-           inrange(mtmp);                      /* try magic */
-       return(0);
+               /*
+                * if hit 1/20 chance of stealing amulet & vanish - amulet is
+                * on level 26 again.
+                */
+               if (hitu(mtmp, d(mtmp->data->damn, mtmp->data->damd))
+                   && !rn2(20) && stealamulet(mtmp)) {
+                       /* nothing */
+               }
+       } else
+               inrange(mtmp);  /* try magic */
+       return (0);
 }
 
-inrange(mtmp)
-register struct monst *mtmp;
+void
+inrange(struct monst *mtmp)
 {
-       register schar tx,ty;
+       schar           tx, ty;
 
        /* do nothing if cancelled (but make '1' say something) */
-       if(mtmp->data->mlet != '1' && mtmp->mcan)
+       if (mtmp->data->mlet != '1' && mtmp->mcan)
                return;
 
        /* spit fire only when both in a room or both in a corridor */
-       if(inroom(u.ux,u.uy) != inroom(mtmp->mx,mtmp->my)) return;
+       if (inroom(u.ux, u.uy) != inroom(mtmp->mx, mtmp->my))
+               return;
        tx = u.ux - mtmp->mx;
        ty = u.uy - mtmp->my;
-       if((!tx && abs(ty) < BOLT_LIM) || (!ty && abs(tx) < BOLT_LIM)
-           || (abs(tx) == abs(ty) && abs(tx) < BOLT_LIM)){
-           switch(mtmp->data->mlet) {
-           case 'D':
-               /* spit fire in the direction of @ (not nec. hitting) */
-               buzz(-1,mtmp->mx,mtmp->my,sgn(tx),sgn(ty));
-               break;
-           case '1':
-               if(rn2(WIZSHOT)) break;
-               /* if you zapped wizard with wand of cancellation,
-               he has to shake off the effects before he can throw
-               spells successfully.  1/2 the time they fail anyway */
-               if(mtmp->mcan || rn2(2)) {
-                   if(canseemon(mtmp))
-                       pline("%s makes a gesture, then curses.",
-                           Monnam(mtmp));
-                   else
-                       pline("You hear mumbled cursing.");
-                   if(!rn2(3)) {
-                       mtmp->mspeed = 0;
-                       mtmp->minvis = 0;
-                   }
-                   if(!rn2(3))
-                       mtmp->mcan = 0;
-               } else {
-                   if(canseemon(mtmp)){
-                       if(!rn2(6) && !Invis) {
-                           pline("%s hypnotizes you.", Monnam(mtmp));
-                           nomul(rn2(3) + 3);
-                           break;
-                       } else
-                           pline("%s chants an incantation.",
-                               Monnam(mtmp));
-                   } else
-                           pline("You hear a mumbled incantation.");
-                   switch(rn2(Invis ? 5 : 6)) {
-                   case 0:
-                       /* create a nasty monster from a deep level */
-                       /* (for the moment, 'nasty' is not implemented) */
-                       (void) makemon((struct permonst *)0, u.ux, u.uy);
-                       break;
-                   case 1:
-                       pline("\"Destroy the thief, my pets!\"");
-                       aggravate();    /* aggravate all the monsters */
-                       /* fall into next case */
-                   case 2:
-                       if (flags.no_of_wizards == 1 && rnd(5) == 0)
-                           /* if only 1 wizard, clone himself */
-                           clonewiz(mtmp);
-                       break;
-                   case 3:
-                       if(mtmp->mspeed == MSLOW)
-                               mtmp->mspeed = 0;
-                       else
-                               mtmp->mspeed = MFAST;
-                       break;
-                   case 4:
-                       mtmp->minvis = 1;
-                       break;
-                   case 5:
-                       /* Only if not Invisible */
-                       pline("You hear a clap of thunder!");
-                       /* shoot a bolt of fire or cold, or a sleep ray */
-                       buzz(-rnd(3),mtmp->mx,mtmp->my,sgn(tx),sgn(ty));
+       if ((!tx && abs(ty) < BOLT_LIM) || (!ty && abs(tx) < BOLT_LIM)
+           || (abs(tx) == abs(ty) && abs(tx) < BOLT_LIM)) {
+               switch (mtmp->data->mlet) {
+               case 'D':
+                       /* spit fire in the direction of @ (not nec. hitting) */
+                       buzz(-1, mtmp->mx, mtmp->my, sgn(tx), sgn(ty));
                        break;
-                   }
+               case '1':
+                       if (rn2(WIZSHOT))
+                               break;
+                       /*
+                        * if you zapped wizard with wand of cancellation, he
+                        * has to shake off the effects before he can throw
+                        * spells successfully.  1/2 the time they fail
+                        * anyway
+                        */
+                       if (mtmp->mcan || rn2(2)) {
+                               if (canseemon(mtmp))
+                                       pline("%s makes a gesture, then curses.",
+                                             Monnam(mtmp));
+                               else
+                                       pline("You hear mumbled cursing.");
+                               if (!rn2(3)) {
+                                       mtmp->mspeed = 0;
+                                       mtmp->minvis = 0;
+                               }
+                               if (!rn2(3))
+                                       mtmp->mcan = 0;
+                       } else {
+                               if (canseemon(mtmp)) {
+                                       if (!rn2(6) && !Invis) {
+                                               pline("%s hypnotizes you.", Monnam(mtmp));
+                                               nomul(rn2(3) + 3);
+                                               break;
+                                       } else
+                                               pline("%s chants an incantation.",
+                                                     Monnam(mtmp));
+                               } else
+                                       pline("You hear a mumbled incantation.");
+                               switch (rn2(Invis ? 5 : 6)) {
+                               case 0:
+                                       /*
+                                        * create a nasty monster from a deep
+                                        * level
+                                        */
+                                       /*
+                                        * (for the moment, 'nasty' is not
+                                        * implemented)
+                                        */
+                                       (void) makemon((struct permonst *) 0, u.ux, u.uy);
+                                       break;
+                               case 1:
+                                       pline("\"Destroy the thief, my pets!\"");
+                                       aggravate();    /* aggravate all the
+                                                        * monsters */
+                                       /* FALLTHROUGH */
+                               case 2:
+                                       if (flags.no_of_wizards == 1 && rnd(5) == 0)
+                                               /*
+                                                * if only 1 wizard, clone
+                                                * himself
+                                                */
+                                               clonewiz(mtmp);
+                                       break;
+                               case 3:
+                                       if (mtmp->mspeed == MSLOW)
+                                               mtmp->mspeed = 0;
+                                       else
+                                               mtmp->mspeed = MFAST;
+                                       break;
+                               case 4:
+                                       mtmp->minvis = 1;
+                                       break;
+                               case 5:
+                                       /* Only if not Invisible */
+                                       pline("You hear a clap of thunder!");
+                                       /*
+                                        * shoot a bolt of fire or cold, or a
+                                        * sleep ray
+                                        */
+                                       buzz(-rnd(3), mtmp->mx, mtmp->my, sgn(tx), sgn(ty));
+                                       break;
+                               }
+                       }
                }
-           }
-           if(u.uhp < 1) done_in_by(mtmp);
+               if (u.uhp < 1)
+                       done_in_by(mtmp);
        }
 }
 
-aggravate()
+void
+aggravate(void)
 {
-       register struct monst *mtmp;
+       struct monst   *mtmp;
 
-       for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+       for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
                mtmp->msleep = 0;
-               if(mtmp->mfroz && !rn2(5))
+               if (mtmp->mfroz && !rn2(5))
                        mtmp->mfroz = 0;
        }
 }
 
-clonewiz(mtmp)
-register struct monst *mtmp;
+void
+clonewiz(struct monst *mtmp)
 {
-       register struct monst *mtmp2;
+       struct monst   *mtmp2;
 
-       if(mtmp2 = makemon(PM_WIZARD, mtmp->mx, mtmp->my)) {
+       if ((mtmp2 = makemon(PM_WIZARD, mtmp->mx, mtmp->my)) != NULL) {
                flags.no_of_wizards = 2;
                unpmon(mtmp2);
-               mtmp2->mappearance = wizapp[rn2(sizeof(wizapp)-1)];
+               mtmp2->mappearance = wizapp[rn2(sizeof(wizapp) - 1)];
                pmon(mtmp);
        }
 }