Mercurial > hg > early-roguelike
view srogue/armor.c @ 306:057c5114e244
Super-Rogue: fix some out-of-range constants.
Constants K_ARROW etc., for causes of death other than monsters, are in
the 240-255 range. They were often passed to functions taking char,
which is usually signed, making the values out of range.
The function declarations have been changed to unsigned char, which is
also the type used by the scoreboard code.
author | John "Elwin" Edwards |
---|---|
date | Sat, 17 Apr 2021 15:41:12 -0400 |
parents | e52a8a7ad4c5 |
children |
line wrap: on
line source
/* * This file contains misc functions for dealing with armor * * @(#)armor.c 9.0 (rdk) 7/17/84 * * Super-Rogue * Copyright (C) 1984 Robert D. Kindelberger * All rights reserved. * * Based on "Rogue: Exploring the Dungeons of Doom" * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include "rogue.h" #include "rogue.ext" /* * wear: * The player wants to wear something, so let the hero try */ void wear(void) { reg struct linked_list *item; reg struct object *obj; if (cur_armor != NULL) { msg("You are already wearing some."); after = FALSE; return; } if ((item = get_item("wear", ARMOR)) == NULL) return; obj = OBJPTR(item); if (obj->o_type != ARMOR) { msg("You can't wear that."); return; } waste_time(); msg("Wearing %s.", a_magic[obj->o_which].mi_name); cur_armor = obj; setoflg(obj,ISKNOW); nochange = FALSE; } /* * take_off: * Get the armor off of the players back */ void take_off(void) { reg struct object *obj; if ((obj = cur_armor) == NULL) { msg("Not wearing any armor."); return; } if (!dropcheck(cur_armor)) return; cur_armor = NULL; msg("Was wearing %c) %s",pack_char(obj),inv_name(obj,TRUE)); nochange = FALSE; } /* * initarmor: * Initialize some armor. */ void initarmor(struct object *obj, int what) { struct init_armor *iwa; obj->o_type = ARMOR; obj->o_which = what; iwa = &armors[what]; obj->o_vol = iwa->a_vol; obj->o_ac = iwa->a_class; obj->o_weight = iwa->a_wght; obj->o_typname = things[TYP_ARMOR].mi_name; } /* * hurt_armor: * Returns TRUE if armor is damaged */ bool hurt_armor(struct object *obj) { reg int type, ac; if (obj != NULL) { if (o_on(obj, ISPROT) || (o_on(obj, ISBLESS) && rnd(100) < 10)) return FALSE; ac = obj->o_ac; type = obj->o_which; if (type != PADDED && type != LEATHER) if ((type == STUDDED && ac < 8) || (type != STUDDED && ac < 9)) return TRUE; } return FALSE; }