Mercurial > hg > early-roguelike
view srogue/disply.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
/* * various display routines and flag checking functions * * @(#)disply.c 9.0 (rdk) 7/17/84 * * Super-Rogue * Copyright (C) 1984 Robert D. Kindelberger * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include "rogue.h" #include <ctype.h> #include "rogue.ext" /* * displevl: * Display detailed level for wizard and scroll */ void displevl(void) { reg char ch, mch; reg int i,j; reg struct room *rp; for (rp = rooms; rp < &rooms[MAXROOMS]; rp++) rp->r_flags &= ~ISDARK; for (i = 0; i < LINES - 2; i++) { for (j = 0; j < COLS - 1; j++) { ch = mvinch(i,j) & A_CHARTEXT; if (isatrap(ch)) { struct trap *what; what = trap_at(i, j); if (what != NULL) what->tr_flags |= ISFOUND; } else if (ch == SECRETDOOR) { ch = DOOR; mvaddch(i, j, ch); } else if (illeg_ch(ch)) { ch = FLOOR; mvaddch(i, j, ch); } if (mvwinch(mw, i, j) != ' ') { struct linked_list *what; struct thing *it; what = find_mons(i, j); if (what == NULL) { ch = FLOOR; mvaddch(i, j, ch); } else { it = THINGPTR(what); it->t_oldch = ch; } } mch = mvwinch(cw, i, j) & A_CHARTEXT; if (isalpha(mch)) ch = mch; mvwaddch(cw, i, j, ch); } } nochange = FALSE; /* display status again */ draw(cw); } /* * dispmons: * Show monsters for wizard and potion */ void dispmons(void) { reg int y, x; reg struct thing *it; reg struct linked_list *item; for (item = mlist; item != NULL; item = next(item)) { it = THINGPTR(item); y = it->t_pos.y; x = it->t_pos.x; mvwaddch(cw, y, x, it->t_type); it->t_flags |= ISFOUND; if (it->t_type == 'M') /* if a mimic */ it->t_disguise = 'M'; /* give it away */ } draw(cw); } /* * winat: * Get whatever character is at a location on the screen */ char winat(int y, int x) { reg char ch; if (mvwinch(mw,y,x) == ' ') ch = mvinch(y, x) & A_CHARTEXT; /* non-monsters */ else ch = winch(mw); /* monsters */ return ch; } /* * cordok: * Returns TRUE if coordinate is on usable screen */ bool cordok(int y, int x) { if (x < 0 || y < 0 || x >= COLS || y >= LINES - 1) return FALSE; return TRUE; } /* * pl_on: * Returns TRUE if the player's flag is set */ bool pl_on(long what) { return (player.t_flags & what); } /* * pl_off: * Returns TRUE when player's flag is reset */ bool pl_off(long what) { return (!(player.t_flags & what)); } /* * o_on: * Returns TRUE in the objects flag is set */ bool o_on(struct object *what, long bit) { reg int flag; flag = FALSE; if (what != NULL) flag = (what->o_flags & bit); return flag; } /* * o_off: * Returns TRUE is the objects flag is reset */ bool o_off(struct object *what, long bit) { reg int flag; flag = FALSE; if (what != NULL) flag = !(what->o_flags & bit); return flag; } /* * setoflg: * Set the specified flag for the object */ void setoflg(struct object *what, long bit) { what->o_flags |= bit; } /* * resoflg: * Reset the specified flag for the object */ void resoflg(struct object *what, long bit) { what->o_flags &= ~bit; }