diff --git a/celldrawer.cpp b/celldrawer.cpp index df7c96ca..2f340dae 100644 --- a/celldrawer.cpp +++ b/celldrawer.cpp @@ -43,6 +43,7 @@ struct celldrawer { void bookkeeping(); void draw_cellstat(); void draw_wall_full(); + void draw_wallshadow(); void draw_item_full(); void draw_monster_full(); void add_map_effects(); @@ -661,6 +662,13 @@ int celldrawer::getSnakelevColor(int i, int last) { return darkena(col, fd, 0xFF); } +void celldrawer::draw_wallshadow() { + if(!noshadow) { + dynamicval p(poly_outline, OUTLINE_TRANS); + draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + } + } + void celldrawer::draw_wall() { if(no_wall_rendering) return; @@ -669,8 +677,7 @@ void celldrawer::draw_wall() { if(!qfi.fshape) qfi.fshape = &cgi.shFullFloor; if(conegraph(c)) { draw_shapevec(c, V, qfi.fshape->cone[0], darkena(wcol, 0, 0xFF), PPR::WALL); - dynamicval p(poly_outline, OUTLINE_TRANS); - draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + draw_wallshadow(); return; } if(c->wall == waClosedGate) { @@ -687,8 +694,7 @@ void celldrawer::draw_wall() { if(!highwall(c2) || conegraph(c2) || c2->wall == waClosedGate || fake::split()) placeSidewall(c, i, SIDE_WALL, V, darkena(wcol2, fd, 255)); - dynamicval p(poly_outline, OUTLINE_TRANS); - draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + draw_wallshadow(); return; } @@ -948,7 +954,10 @@ void celldrawer::draw_halfvine() { shiftmatrix Vdepth = mscale(V2, cgi.WALL); queuepolyat(GDIM == 2 ? Vdepth : V2, cgi.shSemiFloor[0], darkena(vcol, fd, 0xFF), PPR::WALL3A); - {dynamicval p(poly_outline, OUTLINE_TRANS); queuepolyat(V2 * spin(M_PI*2/3), cgi.shSemiFloorShadow, SHADOW_WALL, GDIM == 2 ? PPR::WALLSHADOW : PPR::TRANSPARENT_SHADOW); } + if(!noshadow) { + dynamicval p(poly_outline, OUTLINE_TRANS); + queuepolyat(V2 * spin(M_PI*2/3), cgi.shSemiFloorShadow, SHADOW_WALL, GDIM == 2 ? PPR::WALLSHADOW : PPR::TRANSPARENT_SHADOW); + } #if MAXMDIM >= 4 if(GDIM == 3 && qfi.fshape) { auto& side = queuepolyat(V2, cgi.shSemiFloorSide[SIDE_WALL], darkena(vcol, fd, 0xFF), PPR::WALL3A-2+away(V2.T)); @@ -1525,8 +1534,7 @@ void celldrawer::draw_features() { if(c->land == laOceanWall && wmescher && wmspatial) { if(GDIM == 3 && qfi.fshape) { draw_shapevec(c, V, qfi.fshape->cone[1], darkena(wcol, 0, 0xFF), PPR::WALL); - dynamicval p(poly_outline, OUTLINE_TRANS); - draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + draw_wallshadow(); break; } const int layers = 2 << detaillevel; @@ -1617,8 +1625,7 @@ void celldrawer::draw_features() { else if(c->wall == waExplosiveBarrel) { if(GDIM == 3 && qfi.fshape) { draw_shapevec(c, V, qfi.fshape->cone[1], 0xD00000FF, PPR::REDWALL); - dynamicval p(poly_outline, OUTLINE_TRANS); - draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + draw_wallshadow(); break; } const int layers = 2 << detaillevel; @@ -1643,8 +1650,7 @@ void celldrawer::draw_features() { if(hasTimeout(c)) V2 = V2 * spintick(c->land == laPower ? 5000 : 500); if(GDIM == 3 && qfi.fshape) { draw_shapevec(c, V2, qfi.fshape->cone[1], darkena(wcol, 0, 0xF0), PPR::WALL); - dynamicval p(poly_outline, OUTLINE_TRANS); - draw_shapevec(c, V, qfi.fshape->shadow, SHADOW_WALL, PPR::WALLSHADOW); + draw_wallshadow(); } else queuepoly(V2, cgi.shStar, darkena(wcol, 0, 0xF0)); if(isFire(c) && rand() % 300 < ticks - lastt)