statue patch (trunk only)
Pat wrote: > <Someone> has a patch (we've added a couple of > his earlier ones) which changes the statue display from a single > one size fits all "`" to a gray monster symbol instead. > But I think the idea is a good one, and along with the > bouldersym option could make the fairly hard to > distinguish back-tick character go away. Sources tagged before applying NETHACK_PRE_STATUE, and afterwards with NETHACK_POST_STATUE for easy rollback.
This commit is contained in:
@@ -256,8 +256,18 @@ map_object(obj, show)
|
||||
register int x = obj->ox, y = obj->oy;
|
||||
register int glyph = obj_to_glyph(obj);
|
||||
|
||||
if (level.flags.hero_memory)
|
||||
if (level.flags.hero_memory) {
|
||||
|
||||
/* MRKR: While hallucinating, statues are seen as random monsters */
|
||||
/* but remembered as random objects. */
|
||||
|
||||
if (Hallucination && obj->otyp == STATUE) {
|
||||
levl[x][y].glyph = random_obj_to_glyph();
|
||||
}
|
||||
else {
|
||||
levl[x][y].glyph = glyph;
|
||||
}
|
||||
}
|
||||
if (show) show_glyph(x, y, glyph);
|
||||
}
|
||||
|
||||
@@ -1250,7 +1260,8 @@ show_glyph(x,y,glyph)
|
||||
* the definition.
|
||||
*/
|
||||
|
||||
if (glyph >= GLYPH_WARNING_OFF) { /* a warning */
|
||||
if (glyph >= GLYPH_WARNING_OFF
|
||||
&& glyph < GLYPH_STATUE_OFF) { /* a warning */
|
||||
text = "warning"; offset = glyph - GLYPH_WARNING_OFF;
|
||||
} else if (glyph >= GLYPH_SWALLOW_OFF) { /* swallow border */
|
||||
text = "swallow border"; offset = glyph - GLYPH_SWALLOW_OFF;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)mapglyph.c 3.5 2006/09/17 */
|
||||
/* SCCS Id: @(#)mapglyph.c 3.5 2006/10/01 */
|
||||
/* Copyright (c) David Cohrs, 1991 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -82,7 +82,16 @@ unsigned *ospecial;
|
||||
* Warning: For speed, this makes an assumption on the order of
|
||||
* offsets. The order is set in display.h.
|
||||
*/
|
||||
if ((offset = (glyph - GLYPH_WARNING_OFF)) >= 0) { /* a warning flash */
|
||||
if ((offset = (glyph - GLYPH_STATUE_OFF)) >= 0) { /* a statue */
|
||||
idx = mons[offset].mlet + SYM_OFF_M;
|
||||
# ifdef ROGUE_COLOR
|
||||
if (has_rogue_color)
|
||||
color = CLR_RED;
|
||||
else
|
||||
# endif
|
||||
obj_color(STATUE);
|
||||
special |= MG_STATUE;
|
||||
} else if ((offset = (glyph - GLYPH_WARNING_OFF)) >= 0) { /* a warning flash */
|
||||
idx = offset + SYM_OFF_W;
|
||||
# ifdef ROGUE_COLOR
|
||||
if (has_rogue_color)
|
||||
|
||||
@@ -545,6 +545,8 @@ do_look(mode, click_cc)
|
||||
sym = showsyms[glyph_to_cmap(glyph)];
|
||||
} else if (glyph_is_trap(glyph)) {
|
||||
sym = showsyms[trap_to_defsym(glyph_to_trap(glyph))];
|
||||
} else if (glyph_is_statue(glyph)) {
|
||||
sym = showsyms[(int)mons[glyph_to_mon(glyph)].mlet + SYM_OFF_M];
|
||||
} else if (glyph_is_object(glyph)) {
|
||||
sym = showsyms[(int)objects[glyph_to_obj(glyph)].oc_class + SYM_OFF_O];
|
||||
if (sym == '`' && iflags.bouldersym && (int)glyph_to_obj(glyph) == BOULDER)
|
||||
|
||||
@@ -89,6 +89,8 @@ void FDECL( amii_setpens, (int) ); /* use colors from save file */
|
||||
extern int amii_numcolors;
|
||||
#endif
|
||||
|
||||
#include "display.h"
|
||||
|
||||
boolean restoring = FALSE;
|
||||
static NEARDATA struct fruit *oldfruit;
|
||||
static NEARDATA long omoves;
|
||||
@@ -124,6 +126,15 @@ find_lev_obj()
|
||||
fobjtmp = otmp->nobj;
|
||||
place_object(otmp, otmp->ox, otmp->oy);
|
||||
}
|
||||
|
||||
/* statue patch: imagine we're loading a vanilla nh file */
|
||||
for(x=0; x<COLNO; x++)
|
||||
for(y=0; y<ROWNO; y++)
|
||||
if ( level.objects[x][y] != 0 &&
|
||||
level.objects[x][y]->otyp == STATUE &&
|
||||
glyph_is_statue_vanilla(levl[x][y].glyph)) {
|
||||
levl[x][y].glyph = obj_to_glyph(level.objects[x][y]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Things that were marked "in_use" when the game was saved (ex. via the
|
||||
|
||||
20
src/save.c
20
src/save.c
@@ -85,6 +85,23 @@ static long nulls[10];
|
||||
#define HUP
|
||||
#endif
|
||||
|
||||
|
||||
/* compute object glyphs for vanilla nethack -- statue patch */
|
||||
void
|
||||
make_glyphs_vanilla(lev)
|
||||
xchar lev;
|
||||
{
|
||||
int x,y;
|
||||
|
||||
for (x = 0; x < COLNO; x++)
|
||||
for (y = 0; y < ROWNO; y++)
|
||||
if ( level.objects[x][y] != 0 &&
|
||||
level.objects[x][y]->otyp == STATUE &&
|
||||
glyph_is_statue(levl[x][y].glyph))
|
||||
levl[x][y].glyph = obj_to_glyph_vanilla(level.objects[x][y]);
|
||||
}
|
||||
|
||||
|
||||
/* need to preserve these during save to avoid accessing freed memory */
|
||||
static unsigned ustuck_id = 0, usteed_id = 0;
|
||||
|
||||
@@ -511,6 +528,9 @@ int mode;
|
||||
short tlev;
|
||||
#endif
|
||||
|
||||
/* make remembered glyphs correct fo rloading into vanilla nh */
|
||||
make_glyphs_vanilla(lev);
|
||||
|
||||
/* if we're tearing down the current level without saving anything
|
||||
(which happens upon entrance to the endgame or after an aborted
|
||||
restore attempt) then we don't want to do any actual I/O */
|
||||
|
||||
17
src/sounds.c
17
src/sounds.c
@@ -959,6 +959,23 @@ dochat()
|
||||
tx = u.ux+u.dx; ty = u.uy+u.dy;
|
||||
mtmp = m_at(tx, ty);
|
||||
|
||||
if ((!mtmp || mtmp->mundetected) &&
|
||||
(otmp = vobj_at(tx, ty)) && otmp->otyp == STATUE) {
|
||||
|
||||
/* Talking to a statue */
|
||||
|
||||
if (!Blind) {
|
||||
if (Hallucination) {
|
||||
/* if you're hallucinating, you can't tell it's a statue */
|
||||
pline_The("%s seems not to notice you.", rndmonnam());
|
||||
}
|
||||
else {
|
||||
pline_The("statue seems not to notice you.");
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (!mtmp || mtmp->mundetected ||
|
||||
mtmp->m_ap_type == M_AP_FURNITURE ||
|
||||
mtmp->m_ap_type == M_AP_OBJECT)
|
||||
|
||||
@@ -508,6 +508,8 @@ int *fail_reason;
|
||||
(mon != shkp || carried(statue))) ? xname(statue) :
|
||||
"statue");
|
||||
pline("%s %s!", upstart(statuename), comes_to_life);
|
||||
} else if (Hallucination) { /* They don't know it's a statue */
|
||||
pline_The("%s suddenly seems more animated.", rndmonnam());
|
||||
} else if (cause == ANIMATE_SHATTER) {
|
||||
if (cansee(x, y))
|
||||
Sprintf(statuename, "%s%s", shk_your(tmpbuf, statue),
|
||||
|
||||
20
src/zap.c
20
src/zap.c
@@ -1633,9 +1633,23 @@ struct obj *obj, *otmp;
|
||||
(the sound could be implicit) */
|
||||
maybelearnit = cansee(obj->ox, obj->oy) || !Deaf;
|
||||
if (obj->otyp == BOULDER) {
|
||||
fracture_rock(obj);
|
||||
} else if (obj->otyp == STATUE) {
|
||||
(void) break_statue(obj);
|
||||
if (cansee(obj->ox, obj->oy))
|
||||
pline_The("boulder falls apart.");
|
||||
else if (!Deaf)
|
||||
You_hear("a crumbling sound.");
|
||||
fracture_rock(obj);
|
||||
}
|
||||
else if (obj->otyp == STATUE) {
|
||||
if (break_statue(obj)) {
|
||||
if (cansee(obj->ox, obj->oy)) {
|
||||
if (Hallucination)
|
||||
pline_The("%s shatters.", rndmonnam());
|
||||
else
|
||||
pline_The("statue shatters.");
|
||||
} else if (!Deaf) {
|
||||
You_hear("a crumbling sound.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (context.mon_moving ?
|
||||
!breaks(obj, obj->ox, obj->oy) :
|
||||
|
||||
Reference in New Issue
Block a user