shallow water graphics and mechanics
This commit is contained in:
parent
87254a551e
commit
99e64d862d
|
@ -140,6 +140,9 @@ void celldrawer::setcolors() {
|
||||||
case laAlchemist:
|
case laAlchemist:
|
||||||
fcol = floorcolors[c->land]; break;
|
fcol = floorcolors[c->land]; break;
|
||||||
|
|
||||||
|
case laWet:
|
||||||
|
fcol = c->wall == waShallow ? 0x40C0C0 : 0x40FF40; break;
|
||||||
|
|
||||||
#if CAP_COMPLEX2
|
#if CAP_COMPLEX2
|
||||||
case laVariant: {
|
case laVariant: {
|
||||||
int b = getBits(c);
|
int b = getBits(c);
|
||||||
|
@ -1332,6 +1335,7 @@ void celldrawer::draw_features() {
|
||||||
|
|
||||||
case waFrozenLake: case waLake: case waCamelotMoat:
|
case waFrozenLake: case waLake: case waCamelotMoat:
|
||||||
case waSea: case waOpenGate: case waBubble: case waDock:
|
case waSea: case waOpenGate: case waBubble: case waDock:
|
||||||
|
case waDeepWater: case waShallow:
|
||||||
case waSulphur: case waMercury:
|
case waSulphur: case waMercury:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1984,8 +1988,11 @@ void celldrawer::draw_wall_full() {
|
||||||
else if(qfi.fshape == &cgi.shCaveFloor)
|
else if(qfi.fshape == &cgi.shCaveFloor)
|
||||||
set_floor(cgi.shCaveSeabed);
|
set_floor(cgi.shCaveSeabed);
|
||||||
|
|
||||||
|
int sid = SIDE_LTOB;
|
||||||
|
if(c->wall == waShallow) sid = SIDE_ASHA;
|
||||||
|
|
||||||
if(WDIM == 2 && GDIM == 3 && qfi.fshape)
|
if(WDIM == 2 && GDIM == 3 && qfi.fshape)
|
||||||
draw_shapevec(c, V, qfi.fshape->levels[SIDE_LTOB], col, PPR::LAKEBOTTOM);
|
draw_shapevec(c, V, qfi.fshape->levels[sid], col, PPR::LAKEBOTTOM);
|
||||||
else
|
else
|
||||||
draw_qfi(c, mscale(V, cgi.BOTTOM), col, PPR::LAKEBOTTOM);
|
draw_qfi(c, mscale(V, cgi.BOTTOM), col, PPR::LAKEBOTTOM);
|
||||||
|
|
||||||
|
@ -2096,11 +2103,17 @@ void celldrawer::draw_wall_full() {
|
||||||
#if CAP_SHAPES
|
#if CAP_SHAPES
|
||||||
int sha = shallow(c);
|
int sha = shallow(c);
|
||||||
|
|
||||||
if(wmspatial && sha && WDIM == 2) {
|
#define D(v) darkena(gradient(0, col, 0, v * (sphere ? spherity(V * currentmap->adj(c,i)) : 1), 1), fd, 0xFF)
|
||||||
|
if(wmspatial && c->wall == waShallow && WDIM == 2) {
|
||||||
|
color_t col = (highwall(c) || c->wall == waTower) ? wcol : fcol;
|
||||||
|
forCellIdEx(c2, i, c) if(chasmgraph(c2) && c2->wall != waShallow)
|
||||||
|
if(placeSidewall(c, i, SIDE_BSHA, V, D(.6))) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(wmspatial && sha && WDIM == 2) {
|
||||||
color_t col = (highwall(c) || c->wall == waTower) ? wcol : fcol;
|
color_t col = (highwall(c) || c->wall == waTower) ? wcol : fcol;
|
||||||
if(!chasmg) {
|
if(!chasmg) {
|
||||||
|
|
||||||
#define D(v) darkena(gradient(0, col, 0, v * (sphere ? spherity(V * currentmap->adj(c,i)) : 1), 1), fd, 0xFF)
|
|
||||||
// #define D(v) darkena(col, fd, 0xFF)
|
// #define D(v) darkena(col, fd, 0xFF)
|
||||||
|
|
||||||
if(sha & 1) {
|
if(sha & 1) {
|
||||||
|
@ -2108,8 +2121,11 @@ void celldrawer::draw_wall_full() {
|
||||||
if(placeSidewall(c, i, SIDE_LAKE, V, D(.8))) break;
|
if(placeSidewall(c, i, SIDE_LAKE, V, D(.8))) break;
|
||||||
}
|
}
|
||||||
if(sha & 2) {
|
if(sha & 2) {
|
||||||
forCellIdEx(c2, i, c) if(chasmgraph(c2))
|
forCellIdEx(c2, i, c) {
|
||||||
if(placeSidewall(c, i, SIDE_LTOB, V, D(.7))) break;
|
if(chasmgraph(c2)) {
|
||||||
|
if(placeSidewall(c, i, c2->wall == waShallow ? SIDE_ASHA : SIDE_LTOB, V, D(.7))) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(sha & 4) {
|
if(sha & 4) {
|
||||||
bool dbot = true;
|
bool dbot = true;
|
||||||
|
|
|
@ -1803,7 +1803,7 @@ EX void reverse_priority(PPR p) {
|
||||||
|
|
||||||
EX void reverse_side_priorities() {
|
EX void reverse_side_priorities() {
|
||||||
for(PPR p: {PPR::REDWALLs, PPR::REDWALLs2, PPR::REDWALLs3, PPR::WALL3s,
|
for(PPR p: {PPR::REDWALLs, PPR::REDWALLs2, PPR::REDWALLs3, PPR::WALL3s,
|
||||||
PPR::LAKEWALL, PPR::INLAKEWALL, PPR::BELOWBOTTOM})
|
PPR::LAKEWALL, PPR::INLAKEWALL, PPR::BELOWBOTTOM, PPR::BSHALLOW, PPR::ASHALLOW})
|
||||||
reverse_priority(p);
|
reverse_priority(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -630,7 +630,7 @@ EX void moverefresh(bool turn IS(true)) {
|
||||||
fallMonster(c, AF_FALL);
|
fallMonster(c, AF_FALL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!isWateryOrBoat(c)) {
|
else if(!isWateryOrBoat(c) && c->wall != waShallow) {
|
||||||
if(c->monst == moGreaterShark)
|
if(c->monst == moGreaterShark)
|
||||||
c->monst = moGreaterM;
|
c->monst = moGreaterM;
|
||||||
else if(c->monst == moShark || c->monst == moCShark) {
|
else if(c->monst == moShark || c->monst == moCShark) {
|
||||||
|
|
|
@ -333,6 +333,7 @@ EX int chasmgraph(cell *c) {
|
||||||
if(c->wall == waChasm || c->wall == waInvisibleFloor) return 2;
|
if(c->wall == waChasm || c->wall == waInvisibleFloor) return 2;
|
||||||
if(isChasmy(c)) return 1;
|
if(isChasmy(c)) return 1;
|
||||||
if(isWateryOrBoat(c)) return 1;
|
if(isWateryOrBoat(c)) return 1;
|
||||||
|
if(c->wall == waShallow) return 1;
|
||||||
if(wmescher && c->wall == waBarrier && c->land == laOceanWall) return 1;
|
if(wmescher && c->wall == waBarrier && c->land == laOceanWall) return 1;
|
||||||
if(c->wall == waReptileBridge) return 1;
|
if(c->wall == waReptileBridge) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -46,7 +46,9 @@ struct hpcshape {
|
||||||
#define SIDE_SKY 8
|
#define SIDE_SKY 8
|
||||||
#define SIDE_HIGH 9
|
#define SIDE_HIGH 9
|
||||||
#define SIDE_HIGH2 10
|
#define SIDE_HIGH2 10
|
||||||
#define SIDEPARS 11
|
#define SIDE_ASHA 11
|
||||||
|
#define SIDE_BSHA 12
|
||||||
|
#define SIDEPARS 13
|
||||||
|
|
||||||
#define BADMODEL 0
|
#define BADMODEL 0
|
||||||
|
|
||||||
|
@ -140,7 +142,8 @@ struct geometry_information {
|
||||||
LEG0, LEG1, LEG, LEG3, GROIN, GROIN1, GHOST,
|
LEG0, LEG1, LEG, LEG3, GROIN, GROIN1, GHOST,
|
||||||
BODY, BODY1, BODY2, BODY3,
|
BODY, BODY1, BODY2, BODY3,
|
||||||
NECK1, NECK, NECK3, HEAD, HEAD1, HEAD2, HEAD3,
|
NECK1, NECK, NECK3, HEAD, HEAD1, HEAD2, HEAD3,
|
||||||
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY, HIGH, HIGH2;
|
ALEG0, ALEG, ABODY, AHEAD, BIRD, LOWSKY, SKY, HIGH, HIGH2,
|
||||||
|
SHALLOW;
|
||||||
ld human_height, slev;
|
ld human_height, slev;
|
||||||
|
|
||||||
ld eyelevel_familiar, eyelevel_human, eyelevel_dog;
|
ld eyelevel_familiar, eyelevel_human, eyelevel_dog;
|
||||||
|
@ -767,6 +770,7 @@ EX namespace geom3 {
|
||||||
for(int s=0; s<=3; s++)
|
for(int s=0; s<=3; s++)
|
||||||
SLEV[s] = lev_to_factor(vid.rock_wall_ratio * wh * s/3);
|
SLEV[s] = lev_to_factor(vid.rock_wall_ratio * wh * s/3);
|
||||||
LAKE = lev_to_factor(-vid.lake_top);
|
LAKE = lev_to_factor(-vid.lake_top);
|
||||||
|
SHALLOW = lev_to_factor(-.4);
|
||||||
HELLSPIKE = lev_to_factor(-(vid.lake_top+vid.lake_bottom)/2);
|
HELLSPIKE = lev_to_factor(-(vid.lake_top+vid.lake_bottom)/2);
|
||||||
BOTTOM = lev_to_factor(-vid.lake_bottom);
|
BOTTOM = lev_to_factor(-vid.lake_bottom);
|
||||||
LOWSKY = lev_to_factor(2 * wh);
|
LOWSKY = lev_to_factor(2 * wh);
|
||||||
|
|
|
@ -3245,6 +3245,8 @@ EX bool placeSidewall(cell *c, int i, int sidepar, const transmatrix& V, color_t
|
||||||
else if(sidepar == SIDE_LAKE) prio = PPR::LAKEWALL;
|
else if(sidepar == SIDE_LAKE) prio = PPR::LAKEWALL;
|
||||||
else if(sidepar == SIDE_LTOB) prio = PPR::INLAKEWALL;
|
else if(sidepar == SIDE_LTOB) prio = PPR::INLAKEWALL;
|
||||||
else if(sidepar == SIDE_BTOI) prio = PPR::BELOWBOTTOM;
|
else if(sidepar == SIDE_BTOI) prio = PPR::BELOWBOTTOM;
|
||||||
|
else if(sidepar == SIDE_ASHA) prio = PPR::ASHALLOW;
|
||||||
|
else if(sidepar == SIDE_BSHA) prio = PPR::BSHALLOW;
|
||||||
else prio = PPR::REDWALL-2+4*(sidepar-SIDE_SLEV);
|
else prio = PPR::REDWALL-2+4*(sidepar-SIDE_SLEV);
|
||||||
|
|
||||||
dynamicval<bool> ncor(approx_nearcorner, true);
|
dynamicval<bool> ncor(approx_nearcorner, true);
|
||||||
|
|
1
hyper.h
1
hyper.h
|
@ -546,6 +546,7 @@ enum class PPR {
|
||||||
LAKEBOTTOM, HELLSPIKE,
|
LAKEBOTTOM, HELLSPIKE,
|
||||||
INLAKEWALLm, INLAKEWALL, INLAKEWALLp,
|
INLAKEWALLm, INLAKEWALL, INLAKEWALLp,
|
||||||
INLAKEWALL_FALLANIM,
|
INLAKEWALL_FALLANIM,
|
||||||
|
BSHALLOW, SHALLOW, ASHALLOW,
|
||||||
SUBLAKELEV, LAKELEV, BOATLEV, BOATLEV2, BOATLEV3,
|
SUBLAKELEV, LAKELEV, BOATLEV, BOATLEV2, BOATLEV3,
|
||||||
LAKEWALLm, LAKEWALL, LAKEWALLp,
|
LAKEWALLm, LAKEWALL, LAKEWALLp,
|
||||||
LAKEWALL_FALLANIM,
|
LAKEWALL_FALLANIM,
|
||||||
|
|
|
@ -386,7 +386,7 @@ bool sharkpassable(cell *w, cell *c) {
|
||||||
if(w == c || !c) return true;
|
if(w == c || !c) return true;
|
||||||
if(nonAdjacent(w,c)) return false;
|
if(nonAdjacent(w,c)) return false;
|
||||||
if(isPlayerOn(w)) return true;
|
if(isPlayerOn(w)) return true;
|
||||||
if(!isWatery(w)) return false;
|
if(!isWatery(w) && w->wall != waShallow) return false;
|
||||||
if(sword::at(w, 0)) return false;
|
if(sword::at(w, 0)) return false;
|
||||||
|
|
||||||
// don't go against the current
|
// don't go against the current
|
||||||
|
|
|
@ -307,6 +307,7 @@ void geometry_information::make_sidewalls() {
|
||||||
dfloor_table[SIDE_HIGH] = HIGH;
|
dfloor_table[SIDE_HIGH] = HIGH;
|
||||||
dfloor_table[SIDE_HIGH2] = HIGH2;
|
dfloor_table[SIDE_HIGH2] = HIGH2;
|
||||||
dfloor_table[SIDE_SKY ] = SKY;
|
dfloor_table[SIDE_SKY ] = SKY;
|
||||||
|
dfloor_table[SIDE_ASHA] = SHALLOW;
|
||||||
|
|
||||||
// sidewall parameters for the 3D mode
|
// sidewall parameters for the 3D mode
|
||||||
for(int k=0; k<SIDEPARS; k++) {
|
for(int k=0; k<SIDEPARS; k++) {
|
||||||
|
@ -319,6 +320,8 @@ void geometry_information::make_sidewalls() {
|
||||||
else if(k==SIDE_HIGH) dlow = WALL, dhi = HIGH;
|
else if(k==SIDE_HIGH) dlow = WALL, dhi = HIGH;
|
||||||
else if(k==SIDE_HIGH2) dlow = HIGH, dhi = HIGH2;
|
else if(k==SIDE_HIGH2) dlow = HIGH, dhi = HIGH2;
|
||||||
else if(k==SIDE_SKY) dlow = HIGH2, dhi = SKY;
|
else if(k==SIDE_SKY) dlow = HIGH2, dhi = SKY;
|
||||||
|
else if(k==SIDE_BSHA) dlow = BOTTOM, dhi = SHALLOW;
|
||||||
|
else if(k==SIDE_ASHA) dlow = SHALLOW, dhi = LAKE;
|
||||||
else dlow = SLEV[k-SIDE_SLEV], dhi = SLEV[k-SIDE_SLEV+1];
|
else dlow = SLEV[k-SIDE_SLEV], dhi = SLEV[k-SIDE_SLEV+1];
|
||||||
dlow_table[k] = dlow;
|
dlow_table[k] = dlow;
|
||||||
dhi_table[k] = dhi;
|
dhi_table[k] = dhi;
|
||||||
|
|
Loading…
Reference in New Issue