1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-25 01:20:37 +00:00

improved the Land of Storms in geometries

This commit is contained in:
Zeno Rogue 2017-11-03 21:51:08 +01:00
parent 1d2adc3a0a
commit 3504307cfb
3 changed files with 57 additions and 5 deletions

View File

@ -985,7 +985,11 @@ void giantLandSwitch(cell *c, int d, cell *from) {
case laStorms: case laStorms:
if(d == 9) { if(d == 9) {
if(torus) ; if(torus) {
int pid = decodeId(c->master);
if(pid == 381/3) c->wall = waCharged;
if(pid == 381*2/3) c->wall = waGrounded;
}
else if(euclid) { else if(euclid) {
eucoord x, y; eucoord x, y;
decodeMaster(c->master, x, y); decodeMaster(c->master, x, y);
@ -1005,17 +1009,44 @@ void giantLandSwitch(cell *c, int d, cell *from) {
} }
} }
else if(sphere) { else if(sphere) {
if(c->type != 6) { if(S7 == 5) {
if(ctof(c)) {
int id = c->master->fiftyval; int id = c->master->fiftyval;
if(id == 1) c->wall = waCharged; if(id == 1) c->wall = waCharged;
if(id == (elliptic && !nontruncated ? 3 : 9)) c->wall = waGrounded; if(id == (elliptic && !nontruncated ? 3 : 9)) c->wall = waGrounded;
} }
} }
else if(S7 == 4) {
if(ctof(c)) {
int id = c->master->fiftyval;
if(id == 1) c->wall = waCharged;
if(id == 3) c->wall = waGrounded;
}
}
else if(S7 == 3) {
if(ctof(c)) {
int id = c->master->fiftyval;
if(id == 1) c->wall = waCharged;
}
else {
c->wall = waGrounded;
forCellEx(c2, c) if(ctof(c2) && c2->master->fiftyval == 1)
c->wall = waNone;
}
}
}
else if(nontruncated) { else if(nontruncated) {
int i = zebra40(c); int i = zebra40(c);
if((i == 5 || i == 8) && hrand(100) < 20) c->wall = hrand(2) ? waCharged : waGrounded; if((i == 5 || i == 8) && hrand(100) < 20) c->wall = hrand(2) ? waCharged : waGrounded;
else if(i == 15) c->wall = waSandstone; else if(i == 15) c->wall = waSandstone;
} }
else if(S3 > 3) {
int z = zebra40(c);
int i = z;
int b = 0;
while(i) { if(i&1) b++; i>>=1; }
if(ctof(c) && (b&1) && hrand(100) < 20) c->wall = (z&2) ? waCharged : waGrounded;
}
else { else {
int i = zebra40(c); int i = zebra40(c);
if(c->wall); if(c->wall);

View File

@ -973,6 +973,17 @@ int isLandValid(eLand l) {
if(l == laStorms && quotient == 2) if(l == laStorms && quotient == 2)
return 0; return 0;
// pattern not implemented
if(l == laStorms && S7 == 8)
return 1;
// not enough space
if(l == laStorms && nontruncated && elliptic)
return 0;
if(l == laStorms && nontruncated && S3 == 3)
return 0;
// available only in weird geometries // available only in weird geometries
if(l == laMirrorOld && !geometry) if(l == laMirrorOld && !geometry)
return 0; return 0;
@ -1147,6 +1158,9 @@ int isLandValid(eLand l) {
if(l == laHalloween || l == laDual) if(l == laHalloween || l == laDual)
return 3; return 3;
if(l == laStorms && torus)
return 3;
return 2; return 2;
} }

View File

@ -321,6 +321,13 @@ void wandering() {
cell *c = dcal[i]; cell *c = dcal[i];
if(inmirror(c)) continue; if(inmirror(c)) continue;
if(specialland == laStorms) {
// place the sandstone wall completely randomly (but not on the player)
vector<cell*>& ac = currentmap->allcells();
c = ac[hrand(size(ac))];
if(isPlayerOn(c)) continue;
}
if(smallbounded && !c->item && hrand(5) == 0 && c->land != laHalloween) { if(smallbounded && !c->item && hrand(5) == 0 && c->land != laHalloween) {
if(passable(c, NULL, 0) || specialland == laKraken) { if(passable(c, NULL, 0) || specialland == laKraken) {
if(!haveOrbPower() && specialland != laHell) for(int it=0; it<1000 && !c->item; it++) if(!haveOrbPower() && specialland != laHell) for(int it=0; it<1000 && !c->item; it++)