]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - rogue/throw.c
caesar: WARNS=6, strict bool mode
[bsdgames-darwin.git] / rogue / throw.c
index a5cf0dadfb83a3f9b9b8bb13621c417e78c68f10..93c88c5a2f8a3d4af51fe68381bc86acbb44df51 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: throw.c,v 1.3 1995/04/22 10:28:32 cgd Exp $    */
+/*     $NetBSD: throw.c,v 1.12 2011/05/23 23:01:17 joerg Exp $ */
 
 /*
  * Copyright (c) 1988, 1993
  * 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. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)throw.c    8.1 (Berkeley) 5/31/93";
 #else
-static char rcsid[] = "$NetBSD: throw.c,v 1.3 1995/04/22 10:28:32 cgd Exp $";
+__RCSID("$NetBSD: throw.c,v 1.12 2011/05/23 23:01:17 joerg Exp $");
 #endif
 #endif /* not lint */
 
@@ -58,11 +55,12 @@ static char rcsid[] = "$NetBSD: throw.c,v 1.3 1995/04/22 10:28:32 cgd Exp $";
 
 #include "rogue.h"
 
-extern short cur_room;
-extern char *curse_message;
-extern char hit_message[];
+static void flop_weapon(object *, short, short);
+static object *get_thrown_at_monster(object *, short, short *, short *);
+static boolean throw_at_monster(object *, object *);
 
-throw()
+void
+throw(void)
 {
        short wch, d;
        boolean first_miss = 1;
@@ -73,7 +71,7 @@ throw()
        while (!is_direction(dir = rgetchar(), &d)) {
                sound_bell();
                if (first_miss) {
-                       message("direction? ", 0);
+                       messagef(0, "direction? ");
                        first_miss = 0;
                }
        }
@@ -87,11 +85,11 @@ throw()
        check_message();
 
        if (!(weapon = get_letter_object(wch))) {
-               message("no such item.", 0);
+               messagef(0, "no such item.");
                return;
        }
        if ((weapon->in_use_flags & BEING_USED) && weapon->is_cursed) {
-               message(curse_message, 0);
+               messagef(0, "%s", curse_message);
                return;
        }
        row = rogue.row; col = rogue.col;
@@ -125,8 +123,8 @@ throw()
        vanish(weapon, 1, &rogue.pack);
 }
 
-throw_at_monster(monster, weapon)
-object *monster, *weapon;
+boolean
+throw_at_monster(object *monster, object *weapon)
 {
        short damage, hit_chance;
        short t;
@@ -147,24 +145,21 @@ object *monster, *weapon;
        }
        t = weapon->quantity;
        weapon->quantity = 1;
-       sprintf(hit_message, "the %s", name_of(weapon));
+       snprintf(hit_message, HIT_MESSAGE_SIZE, "the %s", name_of(weapon));
        weapon->quantity = t;
 
        if (!rand_percent(hit_chance)) {
-               (void) strcat(hit_message, "misses  ");
+               (void)strlcat(hit_message, "misses  ", HIT_MESSAGE_SIZE);
                return(0);
        }
        s_con_mon(monster);
-       (void) strcat(hit_message, "hit  ");
-       (void) mon_damage(monster, damage);
+       (void)strlcat(hit_message, "hit  ", HIT_MESSAGE_SIZE);
+       (void)mon_damage(monster, damage);
        return(1);
 }
 
 object *
-get_thrown_at_monster(obj, dir, row, col)
-object *obj;
-short dir;
-short *row, *col;
+get_thrown_at_monster(object *obj, short dir, short *row, short *col)
 {
        short orow, ocol;
        short i, ch;
@@ -205,17 +200,18 @@ short *row, *col;
        return(0);
 }
 
-flop_weapon(weapon, row, col)
-object *weapon;
-short row, col;
+void
+flop_weapon(object *weapon, short row, short col)
 {
        object *new_weapon, *monster;
        short i = 0;
-       char msg[80];
        boolean found = 0;
        short mch, dch;
        unsigned short mon;
 
+       if ((row < 0) || (row >= DROWS) || (col < 0) || (col >= DCOLS))
+               clean_up("flop_weapon:  weapon landed outside of dungeon");
+
        while ((i < 9) && dungeon[row][col] & ~(FLOOR | TUNNEL | DOOR | MONSTER)) {
                rand_around(i++, &row, &col);
                if ((row > (DROWS-2)) || (row < MIN_ROW) ||
@@ -241,7 +237,8 @@ short row, col;
                        dch = get_dungeon_char(row, col);
                        if (mon) {
                                mch = mvinch(row, col);
-                               if (monster = object_at(&level_monsters, row, col)) {
+                               if ((monster = object_at(&level_monsters,
+                                   row, col)) != NULL) {
                                        monster->trail_char = dch;
                                }
                                if ((mch < 'A') || (mch > 'Z')) {
@@ -257,17 +254,16 @@ short row, col;
 
                t = weapon->quantity;
                weapon->quantity = 1;
-               sprintf(msg, "the %svanishes as it hits the ground",
-               name_of(weapon));
+               messagef(0, "the %svanishes as it hits the ground",
+                       name_of(weapon));
                weapon->quantity = t;
-               message(msg, 0);
        }
 }
 
-rand_around(i, r, c)
-short i, *r, *c;
+void
+rand_around(short i, short *r, short *c)
 {
-       static char* pos = "\010\007\001\003\004\005\002\006\0";
+       static char pos[] = "\010\007\001\003\004\005\002\006\0";
        static short row, col;
        short j;