mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-09-04 11:37:55 +00:00
ls:: Prairie in Horodisk
This commit is contained in:
@@ -366,11 +366,12 @@ void celldrawer::setcolors() {
|
|||||||
#if CAP_FIELD
|
#if CAP_FIELD
|
||||||
case laPrairie:
|
case laPrairie:
|
||||||
if(prairie::isriver(c)) {
|
if(prairie::isriver(c)) {
|
||||||
fcol = flip_dark(c->LHU.fi.rval, 0x402000, 0x503000);
|
fcol = flip_dark(prairie::get_val(c), 0x402000, 0x503000);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fcol = 0x004000 + 0x001000 * c->LHU.fi.walldist;
|
fcol = 0x004000 + 0x001000 * c->LHU.fi.walldist;
|
||||||
fcol += 0x10000 * (255 - 511 / (1 + max((int) c->LHU.fi.flowerdist, 1)));
|
fcol += 0x10000 * (255 - 511 / (1 + max((int) c->LHU.fi.flowerdist, 1)));
|
||||||
|
if(ls::hv_structure()) fcol = prairie::nearriver(c) ? 0x40FF00 : 0x40D000;
|
||||||
// fcol += 0x1 * (511 / (1 + max((int) c->LHU.fi.walldist2, 1)));
|
// fcol += 0x1 * (511 / (1 + max((int) c->LHU.fi.walldist2, 1)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
59
complex.cpp
59
complex.cpp
@@ -3183,48 +3183,62 @@ EX namespace prairie {
|
|||||||
#define RLOW (sphere?(PURE?7:6):PURE?4:2)
|
#define RLOW (sphere?(PURE?7:6):PURE?4:2)
|
||||||
#define RHIGH (sphere?(PURE?8:9):PURE?11:13)
|
#define RHIGH (sphere?(PURE?8:9):PURE?11:13)
|
||||||
|
|
||||||
|
EX int get_val(cell *c) {
|
||||||
|
if(ls::hv_structure()) {
|
||||||
|
int a = celldistAlt(c);
|
||||||
|
if(a >= 2) a = 2;
|
||||||
|
a = gmod(18 - a, 20);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return c->LHU.fi.rval;
|
||||||
|
}
|
||||||
|
|
||||||
EX bool no_worms(cell *c) {
|
EX bool no_worms(cell *c) {
|
||||||
if(c->land != laPrairie) return false;
|
if(c->land != laPrairie) return false;
|
||||||
int rv = c->LHU.fi.rval;
|
int rv = get_val(c);
|
||||||
return rv > RLOW+1 && rv < RHIGH-1;
|
return rv > RLOW+1 && rv < RHIGH-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool isriver(cell *c) {
|
EX bool isriver(cell *c) {
|
||||||
return c->land == laPrairie && c->LHU.fi.rval <= RHIGH && c->LHU.fi.rval >= RLOW;
|
int rv = get_val(c);
|
||||||
|
return c->land == laPrairie && rv <= RHIGH && rv >= RLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mainriver(cell *c) {
|
bool mainriver(cell *c) {
|
||||||
return c->LHU.fi.rval <= 8 && c->LHU.fi.rval >= 7;
|
int rv = get_val(c);
|
||||||
|
return rv <= 8 && rv >= 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool nearriver(cell *c) {
|
EX bool nearriver(cell *c) {
|
||||||
return c->LHU.fi.rval == RHIGH+1 || c->LHU.fi.rval == RLOW-1;
|
int rv = get_val(c);
|
||||||
|
return rv == RHIGH+1 || rv == RLOW-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell *enter;
|
cell *enter;
|
||||||
|
|
||||||
bool opposite(cell *c) {
|
bool opposite(cell *c) {
|
||||||
return (c->LHU.fi.rval ^ enter->LHU.fi.rval) & 8;
|
return (get_val(c) ^ get_val(enter)) & 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isleft(cell *c) {
|
bool isleft(cell *c) {
|
||||||
return c->LHU.fi.rval & 8;
|
return get_val(c) & 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
int towerleft(cell *c) {
|
int towerleft(cell *c) {
|
||||||
return c->LHU.fi.rval;
|
return get_val(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
int towerright(cell *c) {
|
int towerright(cell *c) {
|
||||||
return 15^c->LHU.fi.rval;
|
return 15^get_val(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX cell *next(cell *c, int pv IS(1)) {
|
EX cell *next(cell *c, int pv IS(1)) {
|
||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
cell *c1 = createMov(c, i);
|
cell *c1 = createMov(c, i);
|
||||||
cell *c2 = createMov(c, (i+pv+c->type)%c->type);
|
cell *c2 = createMov(c, (i+pv+c->type)%c->type);
|
||||||
if(c1 && c1->LHU.fi.rval == c->LHU.fi.rval)
|
int rv = get_val(c);
|
||||||
if(c2 && c2->LHU.fi.rval == c->LHU.fi.rval+1)
|
if(c1 && get_val(c1) == rv)
|
||||||
|
if(c2 && get_val(c2) == rv+1)
|
||||||
if(isNeighbor(c1,c2))
|
if(isNeighbor(c1,c2))
|
||||||
return c1;
|
return c1;
|
||||||
}
|
}
|
||||||
@@ -3328,9 +3342,7 @@ EX namespace prairie {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void generateTreasure(cell *c) {
|
EX void generateTreasure_here(cell *c) {
|
||||||
// if(nearriver(c) && op
|
|
||||||
if(enter && nearriver(c) && opposite(c) && thisriver(c)) {
|
|
||||||
int hr = hrand(100);
|
int hr = hrand(100);
|
||||||
if(hr == 0 && items[itGreenGrass] >= 10 && !inv::on) {
|
if(hr == 0 && items[itGreenGrass] >= 10 && !inv::on) {
|
||||||
c->item = itOrbBull;
|
c->item = itOrbBull;
|
||||||
@@ -3340,8 +3352,27 @@ EX namespace prairie {
|
|||||||
placePrizeOrb(c);
|
placePrizeOrb(c);
|
||||||
// if(c->item) orbs.push_back(c);
|
// if(c->item) orbs.push_back(c);
|
||||||
}
|
}
|
||||||
else tchoices.push_back(c);
|
else if(!ls::hv_structure())
|
||||||
|
tchoices.push_back(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void generateTreasure(cell *c) {
|
||||||
|
// if(nearriver(c) && op
|
||||||
|
if(ls::hv_structure()) {
|
||||||
|
if(get_val(c) == RHIGH + 1) {
|
||||||
|
int cd = celldist(c);
|
||||||
|
int min_cd = cd;
|
||||||
|
cell *c1;
|
||||||
|
c1 = c; for(int a=0; a<3; a++) { forCellEx(c2, c1) setdist(c2, 9, nullptr); c1 = next(c1); if(!c1) return; min_cd = min(min_cd, celldist(c1)); }
|
||||||
|
c1 = c; for(int a=0; a<3; a++) { forCellEx(c2, c1) setdist(c2, 9, nullptr); c1 = prev(c1); if(!c1) return; min_cd = min(min_cd, celldist(c1)); }
|
||||||
|
if(min_cd >= cd-1) forCellEx(c1, c) if(isriver(c1) && celldist(c1) < cd)
|
||||||
|
c->item = itGreenGrass;
|
||||||
|
}
|
||||||
|
if(get_val(c) == 18 && hrand(100) < 50) c->item = itOrbSafety;
|
||||||
|
if(get_val(c) == 17) generateTreasure_here(c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(enter && nearriver(c) && opposite(c) && thisriver(c)) generateTreasure_here(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void treasures() {
|
EX void treasures() {
|
||||||
|
@@ -877,8 +877,8 @@ EX land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laMirrorOld && !shmup::on) return not_implemented;
|
if(l == laMirrorOld && !shmup::on) return not_implemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ls::hv_structure() && among(l, laPrairie, laDungeon, laEndorian, laBrownian, laPrincessQuest)) return not_in_hv;
|
if(ls::hv_structure() && among(l, laDungeon, laEndorian, laBrownian, laPrincessQuest)) return not_in_hv;
|
||||||
if(ls::voronoi_structure() && among(l, laCamelot, laWhirlpool, laClearing)) return not_in_hv;
|
if(ls::voronoi_structure() && among(l, laPrairie, laCamelot, laWhirlpool, laClearing)) return not_in_hv;
|
||||||
if(ls::horodisk_structure() && l != laCrossroads && isCrossroads(l)) return not_in_hv;
|
if(ls::horodisk_structure() && l != laCrossroads && isCrossroads(l)) return not_in_hv;
|
||||||
|
|
||||||
if(l == laBrownian) {
|
if(l == laBrownian) {
|
||||||
|
Reference in New Issue
Block a user