2D3D:: higher ceilings in the Palace

This commit is contained in:
Zeno Rogue 2019-05-25 01:36:49 +02:00
parent 67f3bd6a3c
commit 599d5d63e8
4 changed files with 40 additions and 3 deletions

View File

@ -268,7 +268,7 @@ namespace geom3 {
LEG0, LEG1, LEG, LEG3, GROIN, GROIN1, GHOST,
BODY, BODY1, BODY2, BODY3,
NECK1, NECK, NECK3, HEAD, HEAD1, HEAD2, HEAD3,
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY;
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY, HIGH, HIGH2;
string invalid;
@ -382,6 +382,8 @@ namespace geom3 {
HELLSPIKE = lev_to_factor(-(lake_top+lake_bottom)/2);
BOTTOM = lev_to_factor(-lake_bottom);
LOWSKY = lev_to_factor((1 + rock_wall_ratio) * wh);
HIGH = LOWSKY;
HIGH2 = lev_to_factor((2 + rock_wall_ratio) * wh);
SKY = LOWSKY - 5;
}
}

View File

@ -4560,7 +4560,6 @@ int ceiling_category(cell *c) {
case laHive:
case laCamelot:
case laTemple:
case laPalace:
case laPrincessQuest:
case laIvoryTower:
case laEFire:
@ -4580,6 +4579,7 @@ int ceiling_category(cell *c) {
case laVariant:
return 3;
case laPalace:
default:
return 4;
}
@ -4661,6 +4661,35 @@ void draw_ceiling(cell *c, const transmatrix& V, int fd, color_t& fcol, color_t&
}
return;
}
case 4: {
auto ispal = [&] (cell *c0) { return c0->land == laPalace && among(c0->wall, waPalace, waClosedGate, waOpenGate); };
color_t wcol2 = 0xFFD500;
if(ispal(c)) {
forCellIdEx(c2, i, c) if(!ispal(c2))
placeSidewall(c, i, SIDE_HIGH, V, darkena(wcol2, fd, 0xFF));
}
else {
bool window = false;
forCellIdEx(c2, i, c) if(c2->wall == waPalace && ispal(c->modmove(i+1)) && ispal(c->modmove(i-1))) window = true;
if(!window) draw_shapevec(c, V, qfi.fshape->levels[SIDE_HIGH], darkena(fcol, fd, 0xFF), PPR::WALL);
if(window)
forCellIdEx(c2, i, c)
placeSidewall(c, i, SIDE_HIGH2, V, darkena(wcol2, fd, 0xFF));
}
if(among(c->wall, waClosedGate, waOpenGate)) draw_shapevec(c, V, qfi.fshape->levels[SIDE_WALL], 0x202020FF, PPR::WALL);
if(true) {
auto &star = queuepolyat(V * zpush(geom3::SKY+0.5), shNightStar, 0xFFFFFFFF, PPR::SKY);
star.tinf = NULL;
star.flags |= POLY_INTENSE;
}
int sk = get_skybrightness();
if(sk > 0) {
auto sky = draw_shapevec(c, V, shFullFloor.levels[SIDE_SKY], 0x000000FF + 0x100 * (sk/17), PPR::SKY);
if(sky) sky->tinf = NULL, sky->flags |= POLY_INTENSE;
}
}
}
}

View File

@ -4254,7 +4254,9 @@ void set_blizzard_frame(cell *c, int frameid);
#define SIDE_LTOB 6
#define SIDE_BTOI 7
#define SIDE_SKY 8
#define SIDEPARS 9
#define SIDE_HIGH 9
#define SIDE_HIGH2 10
#define SIDEPARS 11
#if CAP_SHAPES
struct floorshape {

View File

@ -2060,6 +2060,8 @@ void make_sidewalls() {
dfloor_table[SIDE_LAKE] = geom3::LAKE;
dfloor_table[SIDE_LTOB] = geom3::BOTTOM;
dfloor_table[SIDE_BTOI] = geom3::INFDEEP;
dfloor_table[SIDE_HIGH] = geom3::HIGH;
dfloor_table[SIDE_HIGH2] = geom3::HIGH2;
dfloor_table[SIDE_SKY ] = geom3::SKY;
// sidewall parameters for the 3D mode
@ -2070,6 +2072,8 @@ void make_sidewalls() {
else if(k==SIDE_LTOB) dlow = geom3::BOTTOM, dhi = geom3::LAKE;
else if(k==SIDE_BTOI) dlow = geom3::INFDEEP, dhi = geom3::BOTTOM;
else if(k==SIDE_WTS3) dlow = geom3::SLEV[3], dhi = geom3::WALL;
else if(k==SIDE_HIGH) dlow = geom3::WALL, dhi = geom3::HIGH;
else if(k==SIDE_HIGH2) dlow = geom3::HIGH, dhi = geom3::HIGH2;
else if(k==SIDE_SKY) dlow = geom3::WALL, dhi = geom3::LOWSKY;
else dlow = geom3::SLEV[k-SIDE_SLEV], dhi = geom3::SLEV[k-SIDE_SLEV+1];
dlow_table[k] = dlow;