Wizmode wishing for undiggable/unphaseable walls
This commit is contained in:
+19
-1
@@ -48,6 +48,7 @@ staticfn boolean badman(const char *, boolean);
|
|||||||
staticfn boolean wishymatch(const char *, const char *, boolean);
|
staticfn boolean wishymatch(const char *, const char *, boolean);
|
||||||
staticfn short rnd_otyp_by_wpnskill(schar);
|
staticfn short rnd_otyp_by_wpnskill(schar);
|
||||||
staticfn short rnd_otyp_by_namedesc(const char *, char, int);
|
staticfn short rnd_otyp_by_namedesc(const char *, char, int);
|
||||||
|
staticfn void set_wallprop_from_str(char *) NONNULLARG1;
|
||||||
staticfn struct obj *wizterrainwish(struct _readobjnam_data *);
|
staticfn struct obj *wizterrainwish(struct _readobjnam_data *);
|
||||||
staticfn void dbterrainmesg(const char *, coordxy, coordxy) NONNULLARG1;
|
staticfn void dbterrainmesg(const char *, coordxy, coordxy) NONNULLARG1;
|
||||||
staticfn void readobjnam_init(char *, struct _readobjnam_data *);
|
staticfn void readobjnam_init(char *, struct _readobjnam_data *);
|
||||||
@@ -3479,6 +3480,20 @@ shiny_obj(char oclass)
|
|||||||
return (int) rnd_otyp_by_namedesc("shiny", oclass, 0);
|
return (int) rnd_otyp_by_namedesc("shiny", oclass, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set wall under hero undiggable/unphaseable from string */
|
||||||
|
staticfn void
|
||||||
|
set_wallprop_from_str(char *bp)
|
||||||
|
{
|
||||||
|
int wall_prop = 0;
|
||||||
|
|
||||||
|
if (strstr(bp, "undiggable ") || strstr(bp, "nondiggable "))
|
||||||
|
wall_prop |= W_NONDIGGABLE;
|
||||||
|
if (strstr(bp, "unphaseable ") || strstr(bp, "nonpasswall "))
|
||||||
|
wall_prop |= W_NONPASSWALL;
|
||||||
|
if (wall_prop)
|
||||||
|
levl[u.ux][u.uy].wall_info = wall_prop;
|
||||||
|
}
|
||||||
|
|
||||||
/* in wizard mode, readobjnam() can accept wishes for traps and terrain */
|
/* in wizard mode, readobjnam() can accept wishes for traps and terrain */
|
||||||
staticfn struct obj *
|
staticfn struct obj *
|
||||||
wizterrainwish(struct _readobjnam_data *d)
|
wizterrainwish(struct _readobjnam_data *d)
|
||||||
@@ -3649,11 +3664,13 @@ wizterrainwish(struct _readobjnam_data *d)
|
|||||||
} else if (!BSTRCMPI(bp, p - 4, "tree")) {
|
} else if (!BSTRCMPI(bp, p - 4, "tree")) {
|
||||||
lev->typ = TREE;
|
lev->typ = TREE;
|
||||||
lev->looted = d->looted ? (TREE_LOOTED | TREE_SWARM) : 0;
|
lev->looted = d->looted ? (TREE_LOOTED | TREE_SWARM) : 0;
|
||||||
|
set_wallprop_from_str(bp);
|
||||||
pline("A tree.");
|
pline("A tree.");
|
||||||
madeterrain = TRUE;
|
madeterrain = TRUE;
|
||||||
} else if (!BSTRCMPI(bp, p - 4, "bars")) {
|
} else if (!BSTRCMPI(bp, p - 4, "bars")) {
|
||||||
lev->typ = IRONBARS;
|
lev->typ = IRONBARS;
|
||||||
lev->flags = 0;
|
lev->flags = 0;
|
||||||
|
set_wallprop_from_str(bp);
|
||||||
/* [FIXME: if this isn't a wall or door location where 'horizontal'
|
/* [FIXME: if this isn't a wall or door location where 'horizontal'
|
||||||
is already set up, that should be calculated for this spot.
|
is already set up, that should be calculated for this spot.
|
||||||
Unfortunately, it can be tricky; placing one in open space
|
Unfortunately, it can be tricky; placing one in open space
|
||||||
@@ -3750,7 +3767,7 @@ wizterrainwish(struct _readobjnam_data *d)
|
|||||||
badterrain = TRUE;
|
badterrain = TRUE;
|
||||||
}
|
}
|
||||||
} else if (!BSTRCMPI(bp, p - 4, "wall")
|
} else if (!BSTRCMPI(bp, p - 4, "wall")
|
||||||
&& (bp == p - 4 || p[-4] == ' ')) {
|
&& (bp == p - 4 || p[-5] == ' ')) {
|
||||||
schar wall = HWALL;
|
schar wall = HWALL;
|
||||||
|
|
||||||
if ((isok(u.ux, u.uy-1) && IS_WALL(levl[u.ux][u.uy-1].typ))
|
if ((isok(u.ux, u.uy-1) && IS_WALL(levl[u.ux][u.uy-1].typ))
|
||||||
@@ -3758,6 +3775,7 @@ wizterrainwish(struct _readobjnam_data *d)
|
|||||||
wall = VWALL;
|
wall = VWALL;
|
||||||
madeterrain = TRUE;
|
madeterrain = TRUE;
|
||||||
lev->typ = wall;
|
lev->typ = wall;
|
||||||
|
set_wallprop_from_str(bp);
|
||||||
fix_wall_spines(max(0,u.ux-1), max(0,u.uy-1),
|
fix_wall_spines(max(0,u.ux-1), max(0,u.uy-1),
|
||||||
min(COLNO,u.ux+1), min(ROWNO,u.uy+1));
|
min(COLNO,u.ux+1), min(ROWNO,u.uy+1));
|
||||||
pline("A wall.");
|
pline("A wall.");
|
||||||
|
|||||||
Reference in New Issue
Block a user