diff --git a/classes.cpp b/classes.cpp index db60c51a..3b83d1f1 100644 --- a/classes.cpp +++ b/classes.cpp @@ -600,6 +600,7 @@ static constexpr flagtype WF_TIMEOUT = Flag(18); static constexpr flagtype WF_CISLAND = Flag(19); static constexpr flagtype WF_SULPHURIC = Flag(20); static constexpr flagtype WF_HALFVINE = Flag(21); +static constexpr flagtype WF_NONBLOCK = Flag(22); struct walltype { char glyph; diff --git a/content.cpp b/content.cpp index eae65d14..54e83014 100644 --- a/content.cpp +++ b/content.cpp @@ -891,10 +891,10 @@ WALL( '^', 0x8D694F, "Thumper", waThumperOff, WF_WALL | WF_ACTIVABLE | WF_THUMPE WALL( '^', 0x804000, "Fire", waFire, WF_FIRE | WF_TIMEOUT, RESERVED, 0, sgNone, "This cell is on fire. Most beings and items cannot survive." ) -WALL( '+', 0xC0C0C0, "ancient grave", waAncientGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE, RESERVED, 0, sgNone, +WALL( '+', 0xC0C0C0, "ancient grave", waAncientGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE | WF_NONBLOCK, RESERVED, 0, sgNone, "An ancient grave." ) -WALL( '+', 0xD0D080, "fresh grave", waFreshGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE, RESERVED, 0, sgNone, +WALL( '+', 0xD0D080, "fresh grave", waFreshGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE | WF_NONBLOCK, RESERVED, 0, sgNone, "A fresh grave. Necromancers like those." ) WALL( '#', 0x00FFFF, "column", waColumn, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, @@ -932,7 +932,7 @@ WALL( '#', 0x8080C0, "crystal cabinet", waGlass, WF_WALL, RESERVED, 0, sgNone, "using an Orb of Aether, your Aether power will be completely drained." ) WALL( '#', 0xC0C0C0, "wall of Camelot", waCamelot, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, camelothelp ) -WALL( '+', 0xA06000, "Round Table", waRoundTable, WF_WALL, RESERVED, 1, sgNone, camelothelp ) +WALL( '+', 0xA06000, "Round Table", waRoundTable, WF_WALL | WF_NONBLOCK, RESERVED, 1, sgNone, camelothelp ) WALL( '=', 0x0000A0, "moat of Camelot", waCamelotMoat, WF_WATER, RESERVED, 0, sgWater, camelothelp) WALL( '+', 0x606060, "big statue of Cthulhu", waBigStatue, WF_WALL, RESERVED, 0, sgNone, "These statues of Cthulhu are too large to carry, and they don't look too " diff --git a/crossbow.cpp b/crossbow.cpp index c3775dde..71b0447d 100644 --- a/crossbow.cpp +++ b/crossbow.cpp @@ -67,7 +67,8 @@ EX int loading_time() { } EX bool blocks(cell *c) { - if(isWall(c) && !among(c->wall, waMirrorWall, waMirror, waCloud)) return true; + if(items[itOrbAether]) return false; + if(isWall(c) && !among(c->wall, waMirrorWall, waMirror, waCloud) && !isNonblock(c->wall)) return true; // if(c->monst && isMultitile(c->monst)) return true; return false; } @@ -97,7 +98,7 @@ EX int create_path() { auto cw2 = ocw2; if(inmirror(c)) cw2 = mirror::reflect(cw2); if(blocks(cw2.peek())) continue; - + if(thruVine(cw2.at, cw2.peek())) continue; if(cw2.at->monst) { flagtype attackflags = AF_NORMAL; diff --git a/flags.cpp b/flags.cpp index 83506d51..72c4c028 100644 --- a/flags.cpp +++ b/flags.cpp @@ -37,6 +37,7 @@ WALLFLAGCHECK(isAlch, flag & WF_ALCHEMY) WALLFLAGCHECK(isAlchAny, flag & WF_ALCHEMY) WALLFLAGCHECK(realred, flag & WF_RED) WALLFLAGCHECK(isWall, flag & WF_WALL) +WALLFLAGCHECK(isNonblock, flag & WF_NONBLOCK) WALLFLAGCHECK(isPushable, flag & WF_PUSHABLE) WALLFLAGCHECK(conegraphtype, flag & WF_CONE) WALLFLAGCHECK(isStandardTree, flag & WF_STDTREE) diff --git a/passable.cpp b/passable.cpp index a5f8f910..94fbb4d6 100644 --- a/passable.cpp +++ b/passable.cpp @@ -204,8 +204,7 @@ EX bool passable(cell *w, cell *from, flagtype flags) { if(F(P_BULLET)) { if(isFire(w) || w->wall == waBonfireOff || cellHalfvine(w) || - w->wall == waMagma || - w->wall == waAncientGrave || w->wall == waFreshGrave || w->wall == waRoundTable) + w->wall == waMagma || isNonblock(w->wall)) return true; }