Mercurial > hg > early-roguelike
view rogue4/armor.c @ 262:c7c6c5a7d840
UltraRogue: fix a segfault related to restoring monsters.
The functions for restoring saved games failed to properly correct the
t_chasee pointer of monsters chasing the player. Such monsters would
attempt to chase NULL instead, with predictable results.
author | John "Elwin" Edwards |
---|---|
date | Tue, 14 Feb 2017 20:42:33 -0500 |
parents | 1b73a8641b37 |
children |
line wrap: on
line source
/* * This file contains misc functions for dealing with armor * @(#)armor.c 4.8 (Berkeley) 4/6/82 * * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include <curses.h> #include "rogue.h" /* * wear: * The player wants to wear something, so let him/her put it on. */ void wear(void) { register THING *obj; register char *sp; if (cur_armor != NULL) { addmsg("you are already wearing some"); if (!terse) addmsg(". You'll have to take it off first"); endmsg(); after = FALSE; return; } if ((obj = get_item("wear", ARMOR)) == NULL) return; if (obj->o_type != ARMOR) { msg("you can't wear that"); return; } waste_time(); obj->o_flags |= ISKNOW; sp = inv_name(obj, TRUE); cur_armor = obj; if (!terse) addmsg("you are now "); msg("wearing %s", sp); } /* * take_off: * Get the armor off of the players back */ void take_off(void) { register THING *obj; if ((obj = cur_armor) == NULL) { after = FALSE; if (terse) msg("not wearing armor"); else msg("you aren't wearing any armor"); return; } if (!dropcheck(cur_armor)) return; cur_armor = NULL; if (terse) addmsg("was"); else addmsg("you used to be "); msg(" wearing %c) %s", pack_char(obj), inv_name(obj, TRUE)); } /* * waste_time: * Do nothing but let other things happen */ void waste_time(void) { do_daemons(BEFORE); do_fuses(BEFORE); do_daemons(AFTER); do_fuses(AFTER); }