diff srogue/disply.c @ 36:2128c7dc8a40

Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
author elwin
date Thu, 25 Nov 2010 12:21:41 +0000
parents
children 94a0d9dd5ce1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srogue/disply.c	Thu Nov 25 12:21:41 2010 +0000
@@ -0,0 +1,199 @@
+/*
+ * 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
+ */
+displevl()
+{
+	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);
+			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);
+			if (isalpha(mch))
+				ch = mch;
+			mvwaddch(cw, i, j, ch);
+		}
+	}
+	nochange = FALSE;	/* display status again */
+	draw(cw);
+}
+
+/*
+ * dispmons:
+ *	Show monsters for wizard and potion
+ */
+dispmons()
+{
+	reg int ch, 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
+ */
+winat(y, x)
+int x, y;
+{
+	reg char ch;
+
+	if (mvwinch(mw,y,x) == ' ')
+		ch = mvinch(y, x);			/* non-monsters */
+	else
+		ch = winch(mw);				/* monsters */
+	return ch;
+}
+
+/*
+ * cordok:
+ *	Returns TRUE if coordinate is on usable screen
+ */
+cordok(y, x)
+int y, 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
+ */
+pl_on(what)
+long what;
+{
+	return (player.t_flags & what);
+}
+
+
+/*
+ * pl_off:
+ *	Returns TRUE when player's flag is reset
+ */
+pl_off(what)
+long what;
+{
+	return (!(player.t_flags & what));
+}
+
+
+/*
+ * o_on:
+ *	Returns TRUE in the objects flag is set
+ */
+o_on(what,bit)
+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
+ */
+o_off(what,bit)
+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
+ */
+setoflg(what,bit)
+struct object *what;
+long bit;
+{
+	what->o_flags |= bit;
+}
+
+
+/*
+ * resoflg:
+ *	Reset the specified flag for the object
+ */
+resoflg(what,bit)
+struct object *what;
+long bit;
+{
+	what->o_flags &= ~bit;
+}