mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 09:00:34 +00:00
instead of nonbitrunc, gp::on and irr::on, there is one variable, variation
This commit is contained in:
parent
1af2c04407
commit
6de0f0a8aa
@ -77,11 +77,11 @@ vector<string> achievementsReceived;
|
|||||||
bool wrongMode(char flags) {
|
bool wrongMode(char flags) {
|
||||||
if(cheater) return true;
|
if(cheater) return true;
|
||||||
if(flags == rg::global) return false;
|
if(flags == rg::global) return false;
|
||||||
if(nonbitrunc != (flags == rg::bitrunc)) return true;
|
if(CHANGED_VARIATION != (flags == rg::special_variation)) return true;
|
||||||
if(gp::on) return true;
|
if(GOLDBERG) return true;
|
||||||
if(irr::on) return true;
|
if(IRREGULAR) return true;
|
||||||
|
|
||||||
if((geometry != gNormal) != (flags == rg::geometry)) return true;
|
if((geometry != gNormal) != (flags == rg::special_geometry)) return true;
|
||||||
|
|
||||||
if(shmup::on != (flags == rg::shmup)) return true;
|
if(shmup::on != (flags == rg::shmup)) return true;
|
||||||
#if CAP_DAILY
|
#if CAP_DAILY
|
||||||
@ -146,10 +146,10 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
|
|||||||
int q = items[it];
|
int q = items[it];
|
||||||
|
|
||||||
if(it == itTreat && q == 50 && (geometry == gSphere || geometry == gElliptic))
|
if(it == itTreat && q == 50 && (geometry == gSphere || geometry == gElliptic))
|
||||||
achievement_gain("HALLOWEEN1", rg::geometry);
|
achievement_gain("HALLOWEEN1", rg::special_geometry);
|
||||||
|
|
||||||
if(it == itTreat && q == 100 && (geometry == gSphere || geometry == gElliptic))
|
if(it == itTreat && q == 100 && (geometry == gSphere || geometry == gElliptic))
|
||||||
achievement_gain("HALLOWEEN2", rg::geometry);
|
achievement_gain("HALLOWEEN2", rg::special_geometry);
|
||||||
|
|
||||||
if(q == 1) {
|
if(q == 1) {
|
||||||
if(it == itDiamond) achievement_gain("DIAMOND1");
|
if(it == itDiamond) achievement_gain("DIAMOND1");
|
||||||
@ -217,7 +217,7 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
|
|||||||
|
|
||||||
// 32
|
// 32
|
||||||
if(it == itHolyGrail) {
|
if(it == itHolyGrail) {
|
||||||
if(q == 1) achievement_gain("GRAIL2"), achievement_gain("GRAILH", rg::bitrunc);
|
if(q == 1) achievement_gain("GRAIL2"), achievement_gain("GRAILH", rg::special_variation);
|
||||||
if(q == 3) achievement_gain("GRAIL3");
|
if(q == 3) achievement_gain("GRAIL3");
|
||||||
if(q == 8) achievement_gain("GRAIL4");
|
if(q == 8) achievement_gain("GRAIL4");
|
||||||
}
|
}
|
||||||
@ -459,7 +459,7 @@ void achievement_count(const string& s, int current, int prev) {
|
|||||||
if(s == "LIGHTNING" && current-prev >= 10)
|
if(s == "LIGHTNING" && current-prev >= 10)
|
||||||
achievement_gain("LIGHTNING3");
|
achievement_gain("LIGHTNING3");
|
||||||
if(s == "MIRAGE" && current >= 35 && geometry == gEuclid)
|
if(s == "MIRAGE" && current >= 35 && geometry == gEuclid)
|
||||||
achievement_gain("MIRAGE", rg::geometry);
|
achievement_gain("MIRAGE", rg::special_geometry);
|
||||||
if(s == "ORB" && current >= 10)
|
if(s == "ORB" && current >= 10)
|
||||||
achievement_gain("ORB3");
|
achievement_gain("ORB3");
|
||||||
if(s == "BUG" && current >= 1000)
|
if(s == "BUG" && current >= 1000)
|
||||||
@ -493,7 +493,7 @@ void achievement_score(int cat, int number) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(geometry) return;
|
else if(geometry) return;
|
||||||
if(nonbitrunc) return;
|
if(CHANGED_VARIATION) return;
|
||||||
if(randomPatternsMode) return;
|
if(randomPatternsMode) return;
|
||||||
if(shmup::on && cat != LB_PURE_TACTICS_SHMUP && cat != LB_PURE_TACTICS_COOP) return;
|
if(shmup::on && cat != LB_PURE_TACTICS_SHMUP && cat != LB_PURE_TACTICS_COOP) return;
|
||||||
if(yendor::on && cat != LB_YENDOR_CHALLENGE) return;
|
if(yendor::on && cat != LB_YENDOR_CHALLENGE) return;
|
||||||
@ -597,7 +597,7 @@ void achievement_final(bool really_final) {
|
|||||||
int specialcode = 0;
|
int specialcode = 0;
|
||||||
if(shmup::on) specialcode++;
|
if(shmup::on) specialcode++;
|
||||||
if(chaosmode) specialcode+=2;
|
if(chaosmode) specialcode+=2;
|
||||||
if(nonbitrunc) specialcode+=4;
|
if(PURE) specialcode+=4;
|
||||||
if(numplayers() > 1) specialcode+=8;
|
if(numplayers() > 1) specialcode+=8;
|
||||||
if(inv::on) specialcode+=16;
|
if(inv::on) specialcode+=16;
|
||||||
|
|
||||||
@ -608,8 +608,7 @@ void achievement_final(bool really_final) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(geometry) return;
|
if(geometry) return;
|
||||||
if(gp::on) return;
|
if(NONSTDVAR) return;
|
||||||
if(irr::on) return;
|
|
||||||
|
|
||||||
// determine the correct leaderboard ID for 'total score'
|
// determine the correct leaderboard ID for 'total score'
|
||||||
// or return if no leaderboard for the current mode
|
// or return if no leaderboard for the current mode
|
||||||
@ -684,7 +683,7 @@ void achievement_victory(bool hyper) {
|
|||||||
#ifdef HAVE_ACHIEVEMENTS
|
#ifdef HAVE_ACHIEVEMENTS
|
||||||
if(cheater) return;
|
if(cheater) return;
|
||||||
if(geometry) return;
|
if(geometry) return;
|
||||||
if(nonbitrunc) return;
|
if(CHANGED_VARIATION) return;
|
||||||
if(randomPatternsMode) return;
|
if(randomPatternsMode) return;
|
||||||
if(hyper && shmup::on) return;
|
if(hyper && shmup::on) return;
|
||||||
if(yendor::on) return;
|
if(yendor::on) return;
|
||||||
|
@ -673,14 +673,14 @@ void draw() {
|
|||||||
int id = id_of(h);
|
int id = id_of(h);
|
||||||
int S = isize(current.triangles[id]);
|
int S = isize(current.triangles[id]);
|
||||||
|
|
||||||
if(!nonbitrunc || id < 2*current.N) {
|
if(BITRUNCATED || id < 2*current.N) {
|
||||||
if(!dodrawcell(h->c7)) continue;
|
if(!dodrawcell(h->c7)) continue;
|
||||||
drawcell(h->c7, V, 0, false);
|
drawcell(h->c7, V, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i=0; i<S; i++) {
|
for(int i=0; i<S; i++) {
|
||||||
h->cmove(i);
|
h->cmove(i);
|
||||||
if(nonbitrunc && id >= 2*current.N && h->move(i) && id_of(h->move(i)) >= 2*current.N) continue;
|
if(PURE && id >= 2*current.N && h->move(i) && id_of(h->move(i)) >= 2*current.N) continue;
|
||||||
enqueue(h->move(i), V * adjcell_matrix(h, i));
|
enqueue(h->move(i), V * adjcell_matrix(h, i));
|
||||||
}
|
}
|
||||||
idx++;
|
idx++;
|
||||||
@ -786,9 +786,7 @@ int readArgs() {
|
|||||||
printf("error: %s\n", at.errormsg.c_str());
|
printf("error: %s\n", at.errormsg.c_str());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
targetgeometry = gArchimedean;
|
set_geometry(gArchimedean);
|
||||||
if(targetgeometry != geometry)
|
|
||||||
stop_game_and_switch_mode(rg::geometry);
|
|
||||||
current = at;
|
current = at;
|
||||||
showstartmenu = false;
|
showstartmenu = false;
|
||||||
}
|
}
|
||||||
@ -805,16 +803,13 @@ auto hook =
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int archimedean_tiling::support_threecolor() {
|
int archimedean_tiling::support_threecolor() {
|
||||||
// if(nonbitrunc)
|
|
||||||
return (isize(faces) == 3 && invert[0] && invert[1] && invert[2] && faces[0] % 2 == 0 && faces[1] % 2 == 0 && faces[2] % 2 == 0) ? 2 :
|
return (isize(faces) == 3 && invert[0] && invert[1] && invert[2] && faces[0] % 2 == 0 && faces[1] % 2 == 0 && faces[2] % 2 == 0) ? 2 :
|
||||||
tilegroup[N*2] > 1 ? 1 :
|
tilegroup[N*2] > 1 ? 1 :
|
||||||
0;
|
0;
|
||||||
// for(int i: faces) if(faces[i] % 2) return tilegroup[N*2] > 1 ? 1 : 0;
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int archimedean_tiling::support_football() {
|
int archimedean_tiling::support_football() {
|
||||||
// if(!nonbitrunc) return 2;
|
|
||||||
return
|
return
|
||||||
have_ph ? 1 :
|
have_ph ? 1 :
|
||||||
(isize(faces) == 3 && invert[0] && invert[1] && invert[2] && faces[1] % 2 == 0 && faces[2] % 2 == 0) ? 2 :
|
(isize(faces) == 3 && invert[0] && invert[1] && invert[2] && faces[1] % 2 == 0 && faces[2] % 2 == 0) ? 2 :
|
||||||
@ -840,7 +835,7 @@ bool linespattern(cell *c) {
|
|||||||
int threecolor(int id) {
|
int threecolor(int id) {
|
||||||
if(current.have_ph)
|
if(current.have_ph)
|
||||||
return !pseudohept(id);
|
return !pseudohept(id);
|
||||||
else if(nonbitrunc)
|
else if(PURE)
|
||||||
return current.tilegroup[id];
|
return current.tilegroup[id];
|
||||||
else {
|
else {
|
||||||
if(current.support_threecolor() == 2) return id < current.N * 2 ? (id&1) : 2;
|
if(current.support_threecolor() == 2) return id < current.N * 2 ? (id&1) : 2;
|
||||||
@ -961,8 +956,8 @@ bool symbol_editing;
|
|||||||
|
|
||||||
void enable(archimedean_tiling& arct) {
|
void enable(archimedean_tiling& arct) {
|
||||||
stop_game();
|
stop_game();
|
||||||
if(geometry != gArchimedean) targetgeometry = gArchimedean, stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gArchimedean);
|
||||||
nonbitrunc = true; need_reset_geometry = true; gp::on = false; irr::on = false;
|
set_variation(eVariation::pure);
|
||||||
patterns::whichPattern = patterns::PAT_NONE;
|
patterns::whichPattern = patterns::PAT_NONE;
|
||||||
#if CAP_TEXTURE
|
#if CAP_TEXTURE
|
||||||
if(texture::config.tstate == texture::tsActive && texture::cgroup == cpThree)
|
if(texture::config.tstate == texture::tsActive && texture::cgroup == cpThree)
|
||||||
|
78
barriers.cpp
78
barriers.cpp
@ -12,19 +12,19 @@ bool checkBarriersFront(cellwalker bb, int q, bool cross) {
|
|||||||
if(bb.at->mpdist < BARLEV) return false;
|
if(bb.at->mpdist < BARLEV) return false;
|
||||||
if(bb.at->mpdist == BUGLEV) return false;
|
if(bb.at->mpdist == BUGLEV) return false;
|
||||||
if(bb.at->bardir != NODIR) return false;
|
if(bb.at->bardir != NODIR) return false;
|
||||||
if(bb.spin == (nonbitrunc ? 3 : 0)) {q--; if(!q) return true; }
|
if(bb.spin == (PURE ? 3 : 0)) {q--; if(!q) return true; }
|
||||||
|
|
||||||
if(!cross) for(int i=0; i<7; i++) {
|
if(!cross) for(int i=0; i<7; i++) {
|
||||||
cellwalker bb2 = bb + i + wstep;
|
cellwalker bb2 = bb + i + wstep;
|
||||||
if(bb2.at->bardir != NODIR) return false;
|
if(bb2.at->bardir != NODIR) return false;
|
||||||
if(!nonbitrunc) {
|
if(!PURE) {
|
||||||
bb2 = bb2 + 4 + wstep;
|
bb2 = bb2 + 4 + wstep;
|
||||||
if(bb2.at->bardir != NODIR) return false;
|
if(bb2.at->bardir != NODIR) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bb += wstep;
|
bb += wstep;
|
||||||
if(!nonbitrunc) { bb = bb + 3 + wstep + 3 + wstep; }
|
if(!PURE) { bb = bb + 3 + wstep + 3 + wstep; }
|
||||||
return checkBarriersBack(bb, q);
|
return checkBarriersBack(bb, q);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,19 +50,19 @@ bool checkBarriersBack(cellwalker bb, int q, bool cross) {
|
|||||||
if(!cross) for(int i=0; i<7; i++) {
|
if(!cross) for(int i=0; i<7; i++) {
|
||||||
cellwalker bb2 = bb + i + wstep;
|
cellwalker bb2 = bb + i + wstep;
|
||||||
if(bb2.at->bardir != NODIR) return false;
|
if(bb2.at->bardir != NODIR) return false;
|
||||||
if(!nonbitrunc) {
|
if(!PURE) {
|
||||||
bb2 = bb2 + 4 + wstep;
|
bb2 = bb2 + 4 + wstep;
|
||||||
if(bb2.at->bardir != NODIR) return false;
|
if(bb2.at->bardir != NODIR) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bb = bb + 3 + wstep + (nonbitrunc ? 5 : 4) + wstep + 3;
|
bb = bb + 3 + wstep + (PURE ? 5 : 4) + wstep + 3;
|
||||||
return checkBarriersFront(bb, q);
|
return checkBarriersFront(bb, q);
|
||||||
}
|
}
|
||||||
|
|
||||||
// warp coasts use a different algorithm when has_nice_dual() is on
|
// warp coasts use a different algorithm when has_nice_dual() is on
|
||||||
bool warped_version(eLand l1, eLand l2) {
|
bool warped_version(eLand l1, eLand l2) {
|
||||||
return (has_nice_dual() && (l1 == laWarpCoast || l1 == laWarpSea || l2 == laWarpSea || l2 == laWarpCoast)) || ((AS3==4) && !nonbitrunc);
|
return (has_nice_dual() && (l1 == laWarpCoast || l1 == laWarpSea || l2 == laWarpSea || l2 == laWarpCoast)) || (VALENCE == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool checkBarriersNowall(cellwalker bb, int q, int dir, eLand l1=laNone, eLand l2=laNone) {
|
bool checkBarriersNowall(cellwalker bb, int q, int dir, eLand l1=laNone, eLand l2=laNone) {
|
||||||
@ -94,7 +94,7 @@ bool checkBarriersNowall(cellwalker bb, int q, int dir, eLand l1=laNone, eLand l
|
|||||||
if(warped_version(l1, l2)) {
|
if(warped_version(l1, l2)) {
|
||||||
bb = bb + wstep + (2*dir) + wstep + dir;
|
bb = bb + wstep + (2*dir) + wstep + dir;
|
||||||
}
|
}
|
||||||
else if(AS3==4) {
|
else if(VALENCE > 3) {
|
||||||
bb = bb + dir + wstep + dir;
|
bb = bb + dir + wstep + dir;
|
||||||
dir = -dir;
|
dir = -dir;
|
||||||
swap(l1, l2);
|
swap(l1, l2);
|
||||||
@ -155,7 +155,7 @@ void setland(cell *c, eLand l) {
|
|||||||
|
|
||||||
void extendcheck(cell *c) {
|
void extendcheck(cell *c) {
|
||||||
return;
|
return;
|
||||||
if(!nonbitrunc && c->landparam == 0 && c->barleft != NOWALLSEP) {
|
if(BITRUNCATED && c->landparam == 0 && c->barleft != NOWALLSEP) {
|
||||||
raiseBuggyGeneration(c, "extend error");
|
raiseBuggyGeneration(c, "extend error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ void extendBarrierFront(cell *c) {
|
|||||||
cellwalker bb(c, c->bardir); setbarrier(bb.at);
|
cellwalker bb(c, c->bardir); setbarrier(bb.at);
|
||||||
bb += wstep;
|
bb += wstep;
|
||||||
|
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
bb.at->barleft = c->barleft;
|
bb.at->barleft = c->barleft;
|
||||||
bb.at->barright = c->barright;
|
bb.at->barright = c->barright;
|
||||||
setbarrier(bb.at);
|
setbarrier(bb.at);
|
||||||
@ -209,7 +209,7 @@ void extendBarrierFront(cell *c) {
|
|||||||
extendBarrier(bb.at);
|
extendBarrier(bb.at);
|
||||||
|
|
||||||
for(int a=-3; a<=3; a++) if(a) {
|
for(int a=-3; a<=3; a++) if(a) {
|
||||||
bb.at = c; bb.spin = c->bardir; bb += (nonbitrunc?-a:a); bb += wstep;
|
bb.at = c; bb.spin = c->bardir; bb += (PURE?-a:a); bb += wstep;
|
||||||
setland(bb.at, a > 0 ? c->barright : c->barleft);
|
setland(bb.at, a > 0 ? c->barright : c->barleft);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -221,8 +221,8 @@ void extendBarrierBack(cell *c) {
|
|||||||
extendcheck(c);
|
extendcheck(c);
|
||||||
|
|
||||||
cellwalker bb(c, c->bardir); setbarrier(bb.at);
|
cellwalker bb(c, c->bardir); setbarrier(bb.at);
|
||||||
bb = bb + 3 + wstep + (nonbitrunc?5:4);
|
bb = bb + 3 + wstep + (PURE?5:4);
|
||||||
setland(bb.at, nonbitrunc ? c->barleft : c->barright);
|
setland(bb.at, PURE ? c->barleft : c->barright);
|
||||||
bb = bb + wstep + 3;
|
bb = bb + wstep + 3;
|
||||||
bb.at->bardir = bb.spin;
|
bb.at->bardir = bb.spin;
|
||||||
bb.at->barleft = c->barright;
|
bb.at->barleft = c->barright;
|
||||||
@ -233,7 +233,7 @@ void extendBarrierBack(cell *c) {
|
|||||||
//printf("[D heat %d]\n", (ht^11));
|
//printf("[D heat %d]\n", (ht^11));
|
||||||
|
|
||||||
// needed for CR2 to work
|
// needed for CR2 to work
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
auto bb2 = bb + wstep;
|
auto bb2 = bb + wstep;
|
||||||
bb2.at->barleft = c->barright;
|
bb2.at->barleft = c->barright;
|
||||||
bb2.at->barright = c->barleft;
|
bb2.at->barright = c->barleft;
|
||||||
@ -257,7 +257,7 @@ void extendNowall(cell *c) {
|
|||||||
cw += wstep;
|
cw += wstep;
|
||||||
setland(cw.at, c->barright);
|
setland(cw.at, c->barright);
|
||||||
}
|
}
|
||||||
else if(AS3 == 4) {
|
else if(VALENCE > 3) {
|
||||||
auto cw2 = cw + wstep;
|
auto cw2 = cw + wstep;
|
||||||
setland(cw2.at, c->barright);
|
setland(cw2.at, c->barright);
|
||||||
cw2.at->barleft = NOWALLSEP_USED;
|
cw2.at->barleft = NOWALLSEP_USED;
|
||||||
@ -270,7 +270,7 @@ void extendNowall(cell *c) {
|
|||||||
if(warpv) {
|
if(warpv) {
|
||||||
cw0 = cw + (2*i) + wstep;
|
cw0 = cw + (2*i) + wstep;
|
||||||
}
|
}
|
||||||
else if(AS3==4) {
|
else if(VALENCE > 3) {
|
||||||
cw0 = cw + i + wstep + i;
|
cw0 = cw + i + wstep + i;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -279,7 +279,7 @@ void extendNowall(cell *c) {
|
|||||||
}
|
}
|
||||||
if(cw0.at->barleft != NOWALLSEP_USED) {
|
if(cw0.at->barleft != NOWALLSEP_USED) {
|
||||||
cw0.at->barleft = NOWALLSEP;
|
cw0.at->barleft = NOWALLSEP;
|
||||||
if(AS3 == 4 && nonbitrunc) {
|
if(VALENCE > 3) {
|
||||||
cw0.at->barright = c->barright;
|
cw0.at->barright = c->barright;
|
||||||
cw0.at->bardir = cw0.spin;
|
cw0.at->bardir = cw0.spin;
|
||||||
setland(cw0.at, c->land);
|
setland(cw0.at, c->land);
|
||||||
@ -304,7 +304,7 @@ void extendNowall(cell *c) {
|
|||||||
bool gotit = false;
|
bool gotit = false;
|
||||||
|
|
||||||
void extendCR5(cell *c) {
|
void extendCR5(cell *c) {
|
||||||
if(nonbitrunc) return;
|
if(!BITRUNCATED) return;
|
||||||
// if(c->barright == laCrossroads5) extendCR5(c);
|
// if(c->barright == laCrossroads5) extendCR5(c);
|
||||||
eLand forbidden = c->barleft;
|
eLand forbidden = c->barleft;
|
||||||
eLand forbidden2 = laNone;
|
eLand forbidden2 = laNone;
|
||||||
@ -366,14 +366,14 @@ void extendBarrier(cell *c) {
|
|||||||
|
|
||||||
if(firstmirror && c->barleft == laMirror && hrand(100) < 60) {
|
if(firstmirror && c->barleft == laMirror && hrand(100) < 60) {
|
||||||
cellwalker cw(c, c->bardir);
|
cellwalker cw(c, c->bardir);
|
||||||
if(!nonbitrunc) cw += wstep;
|
if(BITRUNCATED) cw += wstep;
|
||||||
if(cw.at->land != laMirrorWall)
|
if(cw.at->land != laMirrorWall)
|
||||||
if(buildBarrier6(cw, 1)) return;
|
if(buildBarrier6(cw, 1)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(firstmirror && (nonbitrunc?c->barleft == laMirror : c->barright == laMirror) && hrand(100) < 60) {
|
if(firstmirror && (PURE?c->barleft == laMirror : c->barright == laMirror) && hrand(100) < 60) {
|
||||||
cellwalker cw(c, c->bardir);
|
cellwalker cw(c, c->bardir);
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
cw = cw - 3 + wstep - 3;
|
cw = cw - 3 + wstep - 3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -388,7 +388,7 @@ void extendBarrier(cell *c) {
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
cellwalker cw(c, c->bardir);
|
cellwalker cw(c, c->bardir);
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
cw += wstep;
|
cw += wstep;
|
||||||
if(isbar4(cw.at)) {
|
if(isbar4(cw.at)) {
|
||||||
cw = cw + wstep + 3 + wstep - 1 + wstep;
|
cw = cw + wstep + 3 + wstep - 1 + wstep;
|
||||||
@ -451,7 +451,7 @@ bool buildBarrier6(cellwalker cw, int type) {
|
|||||||
|
|
||||||
if(buggyGeneration) return true;
|
if(buggyGeneration) return true;
|
||||||
|
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
b[0] = cw + wstep;
|
b[0] = cw + wstep;
|
||||||
b[1] = cw + 1 + wstep + 3 + wstep;
|
b[1] = cw + 1 + wstep + 3 + wstep;
|
||||||
b[2] = cw + 4 + wstep;
|
b[2] = cw + 4 + wstep;
|
||||||
@ -481,18 +481,18 @@ bool buildBarrier6(cellwalker cw, int type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(type == 1) {
|
if(type == 1) {
|
||||||
if(!(nonbitrunc?checkBarriersFront:checkBarriersBack)(b[1], 6, true)) return false;
|
if(!(PURE?checkBarriersFront:checkBarriersBack)(b[1], 6, true)) return false;
|
||||||
if(!(nonbitrunc?checkBarriersFront:checkBarriersBack)(b[2], 6, true)) return false;
|
if(!(PURE?checkBarriersFront:checkBarriersBack)(b[2], 6, true)) return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(!(nonbitrunc?checkBarriersFront:checkBarriersBack)(b[0], 6, true)) return false;
|
if(!(PURE?checkBarriersFront:checkBarriersBack)(b[0], 6, true)) return false;
|
||||||
if(!(nonbitrunc?checkBarriersFront:checkBarriersBack)(b[3], 6, true)) return false;
|
if(!(PURE?checkBarriersFront:checkBarriersBack)(b[3], 6, true)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int d=0; d<4; d++) {
|
for(int d=0; d<4; d++) {
|
||||||
b[d].at->bardir = b[d].spin;
|
b[d].at->bardir = b[d].spin;
|
||||||
|
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
b[0].at->barleft = laMirrored, b[0].at->barright = laMirrored2;
|
b[0].at->barleft = laMirrored, b[0].at->barright = laMirrored2;
|
||||||
b[1].at->barleft = laMirror, b[1].at->barright = laMirrored;
|
b[1].at->barleft = laMirror, b[1].at->barright = laMirrored;
|
||||||
b[2].at->barleft = laMirrored2, b[2].at->barright = laMirrored;
|
b[2].at->barleft = laMirrored2, b[2].at->barright = laMirrored;
|
||||||
@ -505,17 +505,17 @@ bool buildBarrier6(cellwalker cw, int type) {
|
|||||||
b[3].at->barleft = laMirrored2, b[3].at->barright = laMirrored;
|
b[3].at->barleft = laMirrored2, b[3].at->barright = laMirrored;
|
||||||
}
|
}
|
||||||
|
|
||||||
(nonbitrunc?extendBarrierFront:extendBarrierBack)(b[d].at);
|
(PURE?extendBarrierFront:extendBarrierBack)(b[d].at);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nonbitrunc && false) {
|
if(PURE && false) {
|
||||||
for(int z=0; z<4; z++)
|
for(int z=0; z<4; z++)
|
||||||
b[z].at->item = eItem(1+z+4*type);
|
b[z].at->item = eItem(1+z+4*type);
|
||||||
for(int a=0; a<4; a++)
|
for(int a=0; a<4; a++)
|
||||||
extendBarrierBack((b[a]+wstep).at);
|
extendBarrierBack((b[a]+wstep).at);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
setland((cw+1).cpeek(), laMirrorWall);
|
setland((cw+1).cpeek(), laMirrorWall);
|
||||||
setland((cw+2).cpeek(), laMirrored);
|
setland((cw+2).cpeek(), laMirrored);
|
||||||
setland((cw+3).cpeek(), laMirrorWall2);
|
setland((cw+3).cpeek(), laMirrorWall2);
|
||||||
@ -565,9 +565,9 @@ bool buildBarrier4(cell *c, int d, int mode, eLand ll, eLand lr) {
|
|||||||
cellwalker cd(c, d);
|
cellwalker cd(c, d);
|
||||||
|
|
||||||
cellwalker b1 = cd;
|
cellwalker b1 = cd;
|
||||||
cellwalker b2 = nonbitrunc ? cd + wstep : cd + wstep + 3 + wstep + 3 + wstep;
|
cellwalker b2 = PURE ? cd + wstep : cd + wstep + 3 + wstep + 3 + wstep;
|
||||||
cellwalker b3 = nonbitrunc ? cd - 1 + wstep + 3 : cd + wstep + 4 + wstep + 4;
|
cellwalker b3 = PURE ? cd - 1 + wstep + 3 : cd + wstep + 4 + wstep + 4;
|
||||||
cellwalker b4 = nonbitrunc ? cd + 1 + wstep - 3 : cd + wstep - 4 + wstep - 4;
|
cellwalker b4 = PURE ? cd + 1 + wstep - 3 : cd + wstep - 4 + wstep - 4;
|
||||||
|
|
||||||
if(mode == 0) {
|
if(mode == 0) {
|
||||||
if(!((checkBarriersBack(b1) && checkBarriersBack(b2)))) return false;
|
if(!((checkBarriersBack(b1) && checkBarriersBack(b2)))) return false;
|
||||||
@ -598,16 +598,16 @@ bool buildBarrier4(cell *c, int d, int mode, eLand ll, eLand lr) {
|
|||||||
c= b4.at; d=b4.spin;
|
c= b4.at; d=b4.spin;
|
||||||
c->bardir = d, c->barleft = ll, c->barright = xr; extendBarrierFront(c);
|
c->bardir = d, c->barleft = ll, c->barright = xr; extendBarrierFront(c);
|
||||||
|
|
||||||
if(!nonbitrunc) for(int a=-3; a<=3; a++) if(a) {
|
if(BITRUNCATED) for(int a=-3; a<=3; a++) if(a) {
|
||||||
setland((b1+a).cpeek(), a > 0 ? lr : ll);
|
setland((b1+a).cpeek(), a > 0 ? lr : ll);
|
||||||
setland((b2+a).cpeek(), a > 0 ? xr : xl);
|
setland((b2+a).cpeek(), a > 0 ? xr : xl);
|
||||||
setland((b3+a).cpeek(), a > 0 ? lr : xl);
|
setland((b3+a).cpeek(), a > 0 ? lr : xl);
|
||||||
setland((b4+a).cpeek(), a > 0 ? xr : ll);
|
setland((b4+a).cpeek(), a > 0 ? xr : ll);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nonbitrunc) setbarrier(b1.at), setbarrier(b2.at), setbarrier(b3.at), setbarrier(b4.at);
|
if(PURE) setbarrier(b1.at), setbarrier(b2.at), setbarrier(b3.at), setbarrier(b4.at);
|
||||||
|
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
cell *cp;
|
cell *cp;
|
||||||
cp = (b1+wstep).at;
|
cp = (b1+wstep).at;
|
||||||
cp->barleft = ll; cp->barright = lr; setbarrier(cp);
|
cp->barleft = ll; cp->barright = lr; setbarrier(cp);
|
||||||
@ -746,11 +746,11 @@ bool buildBarrierNowall(cell *c, eLand l2, int forced_dir) {
|
|||||||
for(int j=0; j<c->type; j++) swap(ds[j], ds[hrand(j+1)]);
|
for(int j=0; j<c->type; j++) swap(ds[j], ds[hrand(j+1)]);
|
||||||
|
|
||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
int d = forced_dir != NODIR ? forced_dir : (AS3>3 && nonbitrunc && !gp::on) ? (2+(i&1)) : ds[i];
|
int d = forced_dir != NODIR ? forced_dir : (VALENCE>3) ? (2+(i&1)) : ds[i];
|
||||||
/* if(warpv && gp::on) {
|
/* if(warpv && GOLDBERG) {
|
||||||
d = hrand(c->type); */
|
d = hrand(c->type); */
|
||||||
if(warpv && c->move(d) && c->move(d)->mpdist < c->mpdist) continue;
|
if(warpv && c->move(d) && c->move(d)->mpdist < c->mpdist) continue;
|
||||||
if(gp::on && a4 && c->move(d) && c->move(d)->mpdist <= c->mpdist) continue;
|
if(GOLDBERG && a4 && c->move(d) && c->move(d)->mpdist <= c->mpdist) continue;
|
||||||
/* }
|
/* }
|
||||||
else
|
else
|
||||||
d = (S3>3 && !warpv) ? (2+(i&1)) : dtab[i]; */
|
d = (S3>3 && !warpv) ? (2+(i&1)) : dtab[i]; */
|
||||||
|
36
bigstuff.cpp
36
bigstuff.cpp
@ -47,7 +47,7 @@ int euclidAlt(short x, short y) {
|
|||||||
if(specialland == laTemple || specialland == laClearing) {
|
if(specialland == laTemple || specialland == laClearing) {
|
||||||
if(euclid6)
|
if(euclid6)
|
||||||
return max(int(x), x+y);
|
return max(int(x), x+y);
|
||||||
else if(nonbitrunc)
|
else if(PURE)
|
||||||
return x + abs(y);
|
return x + abs(y);
|
||||||
else
|
else
|
||||||
return max(x, y);
|
return max(x, y);
|
||||||
@ -60,7 +60,7 @@ int euclidAlt(short x, short y) {
|
|||||||
max(int(x+y), int(y)) + 3),
|
max(int(x+y), int(y)) + 3),
|
||||||
max(int(x), int(-y)) + 3
|
max(int(x), int(-y)) + 3
|
||||||
);
|
);
|
||||||
else if(nonbitrunc)
|
else if(PURE)
|
||||||
return 3 - min(abs(x-y), abs(x+y));
|
return 3 - min(abs(x-y), abs(x+y));
|
||||||
else
|
else
|
||||||
return 3 - min(abs(x), abs(y));
|
return 3 - min(abs(x), abs(y));
|
||||||
@ -107,7 +107,7 @@ void generateAlts(heptagon *h, int levs, bool link_cdata) {
|
|||||||
if(!h->alt) return;
|
if(!h->alt) return;
|
||||||
preventbarriers(h->c7);
|
preventbarriers(h->c7);
|
||||||
for(int i=0; i<S7; i++) preventbarriers(h->c7->move(i));
|
for(int i=0; i<S7; i++) preventbarriers(h->c7->move(i));
|
||||||
if(gp::on)
|
if(GOLDBERG)
|
||||||
for(int i=0; i<S7; i++) preventbarriers(createStep(h, i)->c7);
|
for(int i=0; i<S7; i++) preventbarriers(createStep(h, i)->c7);
|
||||||
for(int i=0; i<S7; i++)
|
for(int i=0; i<S7; i++)
|
||||||
createStep(h->alt, i)->alt = h->alt->alt;
|
createStep(h->alt, i)->alt = h->alt->alt;
|
||||||
@ -165,7 +165,7 @@ heptagon *createAlternateMap(cell *c, int rad, hstate firststate, int special) {
|
|||||||
if(weirdhyperbolic) {
|
if(weirdhyperbolic) {
|
||||||
if(c->bardir == NOBARRIERS) return NULL;
|
if(c->bardir == NOBARRIERS) return NULL;
|
||||||
forCellEx(c1, c) if(c1->bardir == NOBARRIERS) return NULL;
|
forCellEx(c1, c) if(c1->bardir == NOBARRIERS) return NULL;
|
||||||
if(irr::on)
|
if(IRREGULAR)
|
||||||
for(int i=0; i<S7; i++)
|
for(int i=0; i<S7; i++)
|
||||||
if(createStep(c->master, i)->c7->bardir != NODIR)
|
if(createStep(c->master, i)->c7->bardir != NODIR)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -623,7 +623,7 @@ void buildEquidistant(cell *c) {
|
|||||||
if(c->landparam > 30 && b == laOcean && !generatingEquidistant && hrand(10) < 5 && chance)
|
if(c->landparam > 30 && b == laOcean && !generatingEquidistant && hrand(10) < 5 && chance)
|
||||||
buildAnotherEquidistant(c);
|
buildAnotherEquidistant(c);
|
||||||
|
|
||||||
if(c->landparam > HAUNTED_RADIUS+5 && b == laGraveyard && !generatingEquidistant && hrand(100) < (nonbitrunc?25:5) && items[itBone] >= 10 && chance)
|
if(c->landparam > HAUNTED_RADIUS+5 && b == laGraveyard && !generatingEquidistant && hrand(100) < (PURE?25:5) && items[itBone] >= 10 && chance)
|
||||||
buildAnotherEquidistant(c);
|
buildAnotherEquidistant(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -755,7 +755,7 @@ void setLandSphere(cell *c) {
|
|||||||
c->land = laElementalWall, c->barleft = laEEarth, c->barright = laEFire;
|
c->land = laElementalWall, c->barleft = laEEarth, c->barright = laEFire;
|
||||||
else if(y < 0)
|
else if(y < 0)
|
||||||
c->land = laElementalWall, c->barleft = laEAir, c->barright = laEWater;
|
c->land = laElementalWall, c->barleft = laEAir, c->barright = laEWater;
|
||||||
if(c->land == laElementalWall && (c->type != 6 || gp::on))
|
if(c->land == laElementalWall && (c->type != 6 || GOLDBERG))
|
||||||
c->wall = getElementalWall(hrand(2) ? c->barleft : c->barright);
|
c->wall = getElementalWall(hrand(2) ? c->barleft : c->barright);
|
||||||
}
|
}
|
||||||
if(!torus)
|
if(!torus)
|
||||||
@ -766,7 +766,7 @@ void setLandSphere(cell *c) {
|
|||||||
else if(x == 0 || (specialland == laCrossroads3 && getHemisphere(c, 2) == 0))
|
else if(x == 0 || (specialland == laCrossroads3 && getHemisphere(c, 2) == 0))
|
||||||
setland(c, laBarrier), c->wall = waBarrier;
|
setland(c, laBarrier), c->wall = waBarrier;
|
||||||
else setland(c, specialland);
|
else setland(c, specialland);
|
||||||
if(specialland == laCrossroads3 && c->type != 6 && c->master->fiftyval == 1 && !gp::on)
|
if(specialland == laCrossroads3 && c->type != 6 && c->master->fiftyval == 1 && !GOLDBERG)
|
||||||
c->wall = waBigTree;
|
c->wall = waBigTree;
|
||||||
}
|
}
|
||||||
if(specialland == laIvoryTower || specialland == laEndorian || specialland == laDungeon || specialland == laOcean || specialland == laMountain) {
|
if(specialland == laIvoryTower || specialland == laEndorian || specialland == laDungeon || specialland == laOcean || specialland == laMountain) {
|
||||||
@ -970,7 +970,7 @@ int wallchance(cell *c, bool deepOcean) {
|
|||||||
l == laHaunted ? 0 :
|
l == laHaunted ? 0 :
|
||||||
(l == laGraveyard && !deepOcean) ? 0 :
|
(l == laGraveyard && !deepOcean) ? 0 :
|
||||||
// (l == laGraveyard && items[itBone] >= 10) ? 120 :
|
// (l == laGraveyard && items[itBone] >= 10) ? 120 :
|
||||||
l == laOcean ? (deepOcean ? (nonbitrunc ? 250 : 2000) : 0) :
|
l == laOcean ? (deepOcean ? (PURE ? 250 : 2000) : 0) :
|
||||||
l == laDragon ? 120 :
|
l == laDragon ? 120 :
|
||||||
50;
|
50;
|
||||||
}
|
}
|
||||||
@ -981,8 +981,8 @@ bool horo_ok() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool gp_wall_test() {
|
bool gp_wall_test() {
|
||||||
if(gp::on) return hrand(gp::dist_3()) == 0;
|
if(GOLDBERG) return hrand(gp::dist_3()) == 0;
|
||||||
if(irr::on) return hrand(irr::cellcount * 3) < isize(irr::cells_of_heptagon);
|
if(IRREGULAR) return hrand(irr::cellcount * 3) < isize(irr::cells_of_heptagon);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1018,7 +1018,7 @@ void buildBigStuff(cell *c, cell *from) {
|
|||||||
|
|
||||||
// buildgreatwalls
|
// buildgreatwalls
|
||||||
|
|
||||||
if(celldist(c) < 3 && !gp::on) {
|
if(celldist(c) < 3 && !GOLDBERG) {
|
||||||
if(top_land && c == cwt.at->master->move(3)->c7) {
|
if(top_land && c == cwt.at->master->move(3)->c7) {
|
||||||
buildBarrierStrong(c, 6, true, top_land);
|
buildBarrierStrong(c, 6, true, top_land);
|
||||||
}
|
}
|
||||||
@ -1059,7 +1059,7 @@ void buildBigStuff(cell *c, cell *from) {
|
|||||||
|
|
||||||
else if(weirdhyperbolic) ; // non-Nowall barriers not implemented yet in weird hyperbolic
|
else if(weirdhyperbolic) ; // non-Nowall barriers not implemented yet in weird hyperbolic
|
||||||
|
|
||||||
else if(c->land == laCrossroads2 && !nonbitrunc)
|
else if(c->land == laCrossroads2 && BITRUNCATED)
|
||||||
buildCrossroads2(c);
|
buildCrossroads2(c);
|
||||||
|
|
||||||
else if(c->land == laPrairie && c->LHU.fi.walldist == 0 && !euclid) {
|
else if(c->land == laPrairie && c->LHU.fi.walldist == 0 && !euclid) {
|
||||||
@ -1119,16 +1119,14 @@ void buildBigStuff(cell *c, cell *from) {
|
|||||||
if(h) clearing::bpdata[h].root = NULL;
|
if(h) clearing::bpdata[h].root = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool alts_okay = (S3 == 3 || (nonbitrunc && !gp::on));
|
if(stdhyperbolic && c->land == laStorms && ctof(c) && hrand(2000) < 1000 && horo_ok() && !randomPatternsMode) {
|
||||||
|
|
||||||
if(alts_okay && c->land == laStorms && ctof(c) && hrand(2000) < 1000 && horo_ok() && !randomPatternsMode) {
|
|
||||||
heptagon *h = createAlternateMap(c, 2, hsA);
|
heptagon *h = createAlternateMap(c, 2, hsA);
|
||||||
if(h) h->alt->emeraldval = hrand(2);
|
if(h) h->alt->emeraldval = hrand(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c->land == laOcean && ctof(c) && deepOcean && !generatingEquidistant && !peace::on && horo_ok() &&
|
if(c->land == laOcean && ctof(c) && deepOcean && !generatingEquidistant && !peace::on && horo_ok() &&
|
||||||
(quickfind(laWhirlpool) || (
|
(quickfind(laWhirlpool) || (
|
||||||
hrand(2000) < (nonbitrunc ? 500 : 1000) && !tactic::on && !yendor::on)))
|
hrand(2000) < (PURE ? 500 : 1000) && !tactic::on && !yendor::on)))
|
||||||
createAlternateMap(c, 2, hsA);
|
createAlternateMap(c, 2, hsA);
|
||||||
|
|
||||||
if(c->land == laCaribbean && horo_ok() && ctof(c) && !c->master->alt)
|
if(c->land == laCaribbean && horo_ok() && ctof(c) && !c->master->alt)
|
||||||
@ -1235,7 +1233,7 @@ void moreBigStuff(cell *c) {
|
|||||||
}
|
}
|
||||||
if(q == 1) buildCamelotWall(c);
|
if(q == 1) buildCamelotWall(c);
|
||||||
// towers of Camelot
|
// towers of Camelot
|
||||||
if(q == 0 && !nonbitrunc) {
|
if(q == 0 && BITRUNCATED) {
|
||||||
c->monst = moKnight;
|
c->monst = moKnight;
|
||||||
c->wall = waTower;
|
c->wall = waTower;
|
||||||
forCellEx(c2, c) {
|
forCellEx(c2, c) {
|
||||||
@ -1260,7 +1258,7 @@ void moreBigStuff(cell *c) {
|
|||||||
}
|
}
|
||||||
if(d == 1) {
|
if(d == 1) {
|
||||||
// roughly as many knights as table cells
|
// roughly as many knights as table cells
|
||||||
if(hrand(nonbitrunc ? 2618 : 1720) < 1000)
|
if(hrand(PURE ? 2618 : 1720) < 1000)
|
||||||
c->monst = moKnight;
|
c->monst = moKnight;
|
||||||
if(!eubinary) for(int i=0; i<S7; i++) generateAlts(c->master->move(i));
|
if(!eubinary) for(int i=0; i<S7; i++) generateAlts(c->master->move(i));
|
||||||
for(int i=0; i<c->type; i++)
|
for(int i=0; i<c->type; i++)
|
||||||
@ -1294,7 +1292,7 @@ void moreBigStuff(cell *c) {
|
|||||||
c->land = laTemple, c->wall = waNone, c->monst = moNone, c->item = itNone;
|
c->land = laTemple, c->wall = waNone, c->monst = moNone, c->item = itNone;
|
||||||
}
|
}
|
||||||
if(d % TEMPLE_EACH==0) {
|
if(d % TEMPLE_EACH==0) {
|
||||||
if(weirdhyperbolic && nonbitrunc) {
|
if(weirdhyperbolic && !BITRUNCATED) {
|
||||||
if(hrand(100) < 50) c->wall = waColumn;
|
if(hrand(100) < 50) c->wall = waColumn;
|
||||||
}
|
}
|
||||||
else if(pseudohept(c))
|
else if(pseudohept(c))
|
||||||
|
56
cell.cpp
56
cell.cpp
@ -62,7 +62,7 @@ hrmap_hyperbolic::hrmap_hyperbolic() {
|
|||||||
h.cdata = NULL;
|
h.cdata = NULL;
|
||||||
h.alt = NULL;
|
h.alt = NULL;
|
||||||
h.distance = 0;
|
h.distance = 0;
|
||||||
isnonbitrunc = nonbitrunc;
|
mvar = variation;
|
||||||
if(binarytiling) {
|
if(binarytiling) {
|
||||||
#if DEBUG_BINARY_TILING
|
#if DEBUG_BINARY_TILING
|
||||||
binary::xcode.clear();
|
binary::xcode.clear();
|
||||||
@ -73,7 +73,7 @@ hrmap_hyperbolic::hrmap_hyperbolic() {
|
|||||||
h.zebraval = 0,
|
h.zebraval = 0,
|
||||||
h.c7 = newCell(6, origin);
|
h.c7 = newCell(6, origin);
|
||||||
}
|
}
|
||||||
else if(irr::on)
|
else if(IRREGULAR)
|
||||||
irr::link_start(origin);
|
irr::link_start(origin);
|
||||||
else
|
else
|
||||||
h.c7 = newCell(S7, origin);
|
h.c7 = newCell(S7, origin);
|
||||||
@ -94,10 +94,10 @@ vector<int> siblings;
|
|||||||
|
|
||||||
struct hrmap_spherical : hrmap {
|
struct hrmap_spherical : hrmap {
|
||||||
heptagon *dodecahedron[12];
|
heptagon *dodecahedron[12];
|
||||||
bool isnonbitrunc;
|
eVariation mvar;
|
||||||
|
|
||||||
hrmap_spherical() {
|
hrmap_spherical() {
|
||||||
isnonbitrunc = nonbitrunc;
|
mvar = variation;
|
||||||
for(int i=0; i<spherecells(); i++) {
|
for(int i=0; i<spherecells(); i++) {
|
||||||
heptagon& h = *(dodecahedron[i] = new heptagon);
|
heptagon& h = *(dodecahedron[i] = new heptagon);
|
||||||
h.s = hsOrigin;
|
h.s = hsOrigin;
|
||||||
@ -109,7 +109,7 @@ struct hrmap_spherical : hrmap {
|
|||||||
h.cdata = NULL;
|
h.cdata = NULL;
|
||||||
h.c.fullclear();
|
h.c.fullclear();
|
||||||
h.fieldval = i;
|
h.fieldval = i;
|
||||||
if(!irr::on) h.c7 = newCell(S7, &h);
|
if(!IRREGULAR) h.c7 = newCell(S7, &h);
|
||||||
}
|
}
|
||||||
if(S7 == 5)
|
if(S7 == 5)
|
||||||
siblings = {1, 0, 10, 4, 3, 8, 9, 11, 5, 6, 2, 7};
|
siblings = {1, 0, 10, 4, 3, 8, 9, 11, 5, 6, 2, 7};
|
||||||
@ -177,7 +177,7 @@ struct hrmap_spherical : hrmap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
irr::link_start(dodecahedron[0]);
|
irr::link_start(dodecahedron[0]);
|
||||||
for(int i=0; i<spherecells(); i++)
|
for(int i=0; i<spherecells(); i++)
|
||||||
for(int j=0; j<S7; j++)
|
for(int j=0; j<S7; j++)
|
||||||
@ -188,7 +188,7 @@ struct hrmap_spherical : hrmap {
|
|||||||
heptagon *getOrigin() { return dodecahedron[0]; }
|
heptagon *getOrigin() { return dodecahedron[0]; }
|
||||||
|
|
||||||
~hrmap_spherical() {
|
~hrmap_spherical() {
|
||||||
dynamicval<bool> ph(nonbitrunc, isnonbitrunc);
|
dynamicval<eVariation> ph(variation, mvar);
|
||||||
for(int i=0; i<spherecells(); i++) clearHexes(dodecahedron[i]);
|
for(int i=0; i<spherecells(); i++) clearHexes(dodecahedron[i]);
|
||||||
for(int i=0; i<spherecells(); i++) delete dodecahedron[i];
|
for(int i=0; i<spherecells(); i++) delete dodecahedron[i];
|
||||||
}
|
}
|
||||||
@ -353,10 +353,10 @@ int euclid_getvec(int dx, int dy) {
|
|||||||
template<class T> void build_euclidean_moves(cell *c, int vec, const T& builder) {
|
template<class T> void build_euclidean_moves(cell *c, int vec, const T& builder) {
|
||||||
int x, y;
|
int x, y;
|
||||||
tie(x,y) = vec_to_pair(vec);
|
tie(x,y) = vec_to_pair(vec);
|
||||||
c->type = a4 ? (nonbitrunc || ((x^y^1) & 1) ? 4 : 8) : 6;
|
c->type = a4 ? (PURE || ((x^y^1) & 1) ? 4 : 8) : 6;
|
||||||
|
|
||||||
if(c->type == 4) {
|
if(c->type == 4) {
|
||||||
int m = nonbitrunc ? 1 : 2;
|
int m = PURE ? 1 : 2;
|
||||||
builder(euclid_getvec(+1,+0), 0, 2 * m);
|
builder(euclid_getvec(+1,+0), 0, 2 * m);
|
||||||
builder(euclid_getvec(+0,+1), 1, 3 * m);
|
builder(euclid_getvec(+0,+1), 1, 3 * m);
|
||||||
builder(euclid_getvec(-1,+0), 2, 0 * m);
|
builder(euclid_getvec(-1,+0), 2, 0 * m);
|
||||||
@ -723,7 +723,7 @@ struct hrmap_quotient : hrmap {
|
|||||||
h->fieldval = S7*i;
|
h->fieldval = S7*i;
|
||||||
h->rval0 = h->rval1 = 0; h->cdata = NULL;
|
h->rval0 = h->rval1 = 0; h->cdata = NULL;
|
||||||
h->distance = 0;
|
h->distance = 0;
|
||||||
if(!irr::on) h->c7 = newCell(S7, h);
|
if(!IRREGULAR) h->c7 = newCell(S7, h);
|
||||||
}
|
}
|
||||||
for(int j=0; j<S7; j++) {
|
for(int j=0; j<S7; j++) {
|
||||||
int co = connections[i*S7+j];
|
int co = connections[i*S7+j];
|
||||||
@ -744,7 +744,7 @@ struct hrmap_quotient : hrmap {
|
|||||||
allh[i]->move[j]->alt = createStep(allh[i]->alt, j); */
|
allh[i]->move[j]->alt = createStep(allh[i]->alt, j); */
|
||||||
}
|
}
|
||||||
|
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
irr::link_start(allh[0]);
|
irr::link_start(allh[0]);
|
||||||
for(int i=0; i<TOT; i++)
|
for(int i=0; i<TOT; i++)
|
||||||
for(int j=0; j<S7; j++)
|
for(int j=0; j<S7; j++)
|
||||||
@ -786,24 +786,24 @@ cell *createMov(cell *c, int d) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(c->move(d)) return c->move(d);
|
if(c->move(d)) return c->move(d);
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
irr::link_cell(c, d);
|
irr::link_cell(c, d);
|
||||||
}
|
}
|
||||||
else if(nonbitrunc && gp::on) {
|
else if(GOLDBERG) {
|
||||||
gp::extend_map(c, d);
|
gp::extend_map(c, d);
|
||||||
if(!c->move(d)) {
|
if(!c->move(d)) {
|
||||||
printf("extend failed to create for %p/%d\n", c, d);
|
printf("extend failed to create for %p/%d\n", c, d);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(nonbitrunc && archimedean) {
|
else if(PURE && archimedean) {
|
||||||
if(arcm::id_of(c->master) <= arcm::current.N * 2) {
|
if(arcm::id_of(c->master) <= arcm::current.N * 2) {
|
||||||
heptspin hs = heptspin(c->master, d) + wstep + 2 + wstep + 1;
|
heptspin hs = heptspin(c->master, d) + wstep + 2 + wstep + 1;
|
||||||
c->c.connect(d, hs.at->c7, hs.spin, hs.mirrored);
|
c->c.connect(d, hs.at->c7, hs.spin, hs.mirrored);
|
||||||
}
|
}
|
||||||
else c->c.connect(d, c, d, false);
|
else c->c.connect(d, c, d, false);
|
||||||
}
|
}
|
||||||
else if(nonbitrunc || archimedean) {
|
else if(PURE || archimedean) {
|
||||||
heptagon *h2 = createStep(c->master, d);
|
heptagon *h2 = createStep(c->master, d);
|
||||||
c->c.connect(d, h2->c7,c->master->c.spin(d),false);
|
c->c.connect(d, h2->c7,c->master->c.spin(d),false);
|
||||||
}
|
}
|
||||||
@ -906,12 +906,12 @@ void clearcell(cell *c) {
|
|||||||
heptagon deletion_marker;
|
heptagon deletion_marker;
|
||||||
|
|
||||||
template<class T> void subcell(cell *c, const T& t) {
|
template<class T> void subcell(cell *c, const T& t) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
forCellEx(c2, c) if(c2->move(0) == c && c2 != c2->master->c7) {
|
forCellEx(c2, c) if(c2->move(0) == c && c2 != c2->master->c7) {
|
||||||
subcell(c2, t);
|
subcell(c2, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!nonbitrunc && !archimedean && !binarytiling)
|
else if(BITRUNCATED && !archimedean && !binarytiling)
|
||||||
forCellEx(c2, c) t(c2);
|
forCellEx(c2, c) t(c2);
|
||||||
t(c);
|
t(c);
|
||||||
}
|
}
|
||||||
@ -921,7 +921,7 @@ void clearHexes(heptagon *at) {
|
|||||||
delete at->cdata;
|
delete at->cdata;
|
||||||
at->cdata = NULL;
|
at->cdata = NULL;
|
||||||
}
|
}
|
||||||
if(irr::on) irr::clear_links(at);
|
if(IRREGULAR) irr::clear_links(at);
|
||||||
else if(at->c7) subcell(at->c7, clearcell);
|
else if(at->c7) subcell(at->c7, clearcell);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -980,7 +980,7 @@ void verifycell(cell *c) {
|
|||||||
for(int i=0; i<t; i++) {
|
for(int i=0; i<t; i++) {
|
||||||
cell *c2 = c->move(i);
|
cell *c2 = c->move(i);
|
||||||
if(c2) {
|
if(c2) {
|
||||||
if(!masterless && !nonbitrunc && c == c->master->c7) verifycell(c2);
|
if(!masterless && BITRUNCATED && c == c->master->c7) verifycell(c2);
|
||||||
if(c2->move(c->c.spin(i)) && c2->move(c->c.spin(i)) != c) {
|
if(c2->move(c->c.spin(i)) && c2->move(c->c.spin(i)) != c) {
|
||||||
printf("cell error %p:%d [%d] %p:%d [%d]\n", c, i, c->type, c2, c->c.spin(i), c2->type);
|
printf("cell error %p:%d [%d] %p:%d [%d]\n", c, i, c->type, c2, c->c.spin(i), c2->type);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -990,7 +990,7 @@ void verifycell(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void verifycells(heptagon *at) {
|
void verifycells(heptagon *at) {
|
||||||
if(gp::on || irr::on || archimedean) return;
|
if(GOLDBERG || IRREGULAR || archimedean) return;
|
||||||
for(int i=0; i<S7; i++) if(at->move(i) && at->move(i)->move(at->c.spin(i)) && at->move(i)->move(at->c.spin(i)) != at) {
|
for(int i=0; i<S7; i++) if(at->move(i) && at->move(i)->move(at->c.spin(i)) && at->move(i)->move(at->c.spin(i)) != at) {
|
||||||
printf("hexmix error %p [%d s=%d] %p %p\n", at, i, at->c.spin(i), at->move(i), at->move(i)->move(at->c.spin(i)));
|
printf("hexmix error %p [%d s=%d] %p %p\n", at, i, at->c.spin(i), at->move(i), at->move(i)->move(at->c.spin(i)));
|
||||||
}
|
}
|
||||||
@ -1036,9 +1036,9 @@ int celldist(cell *c) {
|
|||||||
if(masterless)
|
if(masterless)
|
||||||
return eudist(decodeId(c->master));
|
return eudist(decodeId(c->master));
|
||||||
if(sphere) return celldistance(c, currentmap->gamestart());
|
if(sphere) return celldistance(c, currentmap->gamestart());
|
||||||
if(irr::on) return irr::celldist(c, false);
|
if(IRREGULAR) return irr::celldist(c, false);
|
||||||
if(binarytiling || archimedean || ctof(c)) return c->master->distance;
|
if(binarytiling || archimedean || ctof(c)) return c->master->distance;
|
||||||
if(gp::on) return gp::compute_dist(c, celldist);
|
if(GOLDBERG) return gp::compute_dist(c, celldist);
|
||||||
int dx[MAX_S3];
|
int dx[MAX_S3];
|
||||||
for(int u=0; u<S3; u++)
|
for(int u=0; u<S3; u++)
|
||||||
dx[u] = createMov(c, u+u)->master->distance;
|
dx[u] = createMov(c, u+u)->master->distance;
|
||||||
@ -1065,9 +1065,9 @@ int celldistAlt(cell *c) {
|
|||||||
return celldist(c) - 3;
|
return celldist(c) - 3;
|
||||||
}
|
}
|
||||||
if(!c->master->alt) return 0;
|
if(!c->master->alt) return 0;
|
||||||
if(irr::on) return irr::celldist(c, true);
|
if(IRREGULAR) return irr::celldist(c, true);
|
||||||
if(ctof(c)) return c->master->alt->distance;
|
if(ctof(c)) return c->master->alt->distance;
|
||||||
if(gp::on) return gp::compute_dist(c, celldistAlt);
|
if(GOLDBERG) return gp::compute_dist(c, celldistAlt);
|
||||||
int dx[MAX_S3]; dx[0] = 0;
|
int dx[MAX_S3]; dx[0] = 0;
|
||||||
for(int u=0; u<S3; u++) if(createMov(c, u+u)->master->alt == NULL)
|
for(int u=0; u<S3; u++) if(createMov(c, u+u)->master->alt == NULL)
|
||||||
return ALTDIST_UNKNOWN;
|
return ALTDIST_UNKNOWN;
|
||||||
@ -1425,14 +1425,14 @@ map<pair<cell*, cell*>, int> saved_distances;
|
|||||||
int celldistance(cell *c1, cell *c2) {
|
int celldistance(cell *c1, cell *c2) {
|
||||||
int d = 0;
|
int d = 0;
|
||||||
|
|
||||||
if((masterless) && (euclid6 || (euclid4 && nonbitrunc))) {
|
if((masterless) && (euclid6 || (euclid4 && PURE))) {
|
||||||
if(!torus)
|
if(!torus)
|
||||||
return eudist(decodeId(c1->master) - decodeId(c2->master));
|
return eudist(decodeId(c1->master) - decodeId(c2->master));
|
||||||
else if(torus && torusconfig::torus_mode == 0)
|
else if(torus && torusconfig::torus_mode == 0)
|
||||||
return torusmap()->dists[torusconfig::vec_to_id(decodeId(c1->master)-decodeId(c2->master))];
|
return torusmap()->dists[torusconfig::vec_to_id(decodeId(c1->master)-decodeId(c2->master))];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(geometry == gFieldQuotient && !gp::on)
|
if(geometry == gFieldQuotient && !GOLDBERG)
|
||||||
return currfp.getdist(fieldpattern::fieldval(c1), fieldpattern::fieldval(c2));
|
return currfp.getdist(fieldpattern::fieldval(c1), fieldpattern::fieldval(c2));
|
||||||
|
|
||||||
if(sphere || quotient || torus) {
|
if(sphere || quotient || torus) {
|
||||||
@ -1450,7 +1450,7 @@ int celldistance(cell *c1, cell *c2) {
|
|||||||
return 64;
|
return 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gp::on || masterless || irr::on || archimedean || binarytiling) {
|
if(NONSTDVAR || masterless || archimedean || binarytiling) {
|
||||||
|
|
||||||
if(saved_distances.count(make_pair(c1,c2)))
|
if(saved_distances.count(make_pair(c1,c2)))
|
||||||
return saved_distances[make_pair(c1,c2)];
|
return saved_distances[make_pair(c1,c2)];
|
||||||
@ -1495,7 +1495,7 @@ int celldistance(cell *c1, cell *c2) {
|
|||||||
if(ac == xtgt) return d;
|
if(ac == xtgt) return d;
|
||||||
ac = chosenDown(ac, 1, 1, celldist);
|
ac = chosenDown(ac, 1, 1, celldist);
|
||||||
if(ac == tgt) return d+2;
|
if(ac == tgt) return d+2;
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
ac = chosenDown(ac, 1, 1, celldist);
|
ac = chosenDown(ac, 1, 1, celldist);
|
||||||
if(ac == tgt) {
|
if(ac == tgt) {
|
||||||
if(chosenDown(ac0, 1, 0, celldist) ==
|
if(chosenDown(ac0, 1, 0, celldist) ==
|
||||||
|
@ -203,6 +203,8 @@ enum eGeometry {
|
|||||||
|
|
||||||
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };
|
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };
|
||||||
|
|
||||||
|
enum class eVariation { bitruncated, pure, goldberg, irregular, dual };
|
||||||
|
|
||||||
struct geometryinfo {
|
struct geometryinfo {
|
||||||
const char* name;
|
const char* name;
|
||||||
const char* shortname;
|
const char* shortname;
|
||||||
@ -226,6 +228,7 @@ static const int SEE_ALL = 50;
|
|||||||
static const int FORBIDDEN = -1;
|
static const int FORBIDDEN = -1;
|
||||||
|
|
||||||
extern eGeometry geometry;
|
extern eGeometry geometry;
|
||||||
|
extern eVariation variation;
|
||||||
|
|
||||||
extern geometryinfo ginf[gGUARD];
|
extern geometryinfo ginf[gGUARD];
|
||||||
|
|
||||||
|
48
complex.cpp
48
complex.cpp
@ -767,7 +767,7 @@ namespace clearing {
|
|||||||
}
|
}
|
||||||
int d = celldistAlt(c);
|
int d = celldistAlt(c);
|
||||||
|
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
for(int i=0; i<S7; i++) {
|
for(int i=0; i<S7; i++) {
|
||||||
cell *c2 = createMov(c, i);
|
cell *c2 = createMov(c, i);
|
||||||
if(!pseudohept(c2) && celldistAlt(c2) == d-1)
|
if(!pseudohept(c2) && celldistAlt(c2) == d-1)
|
||||||
@ -821,7 +821,7 @@ namespace clearing {
|
|||||||
void generate(cell *c) {
|
void generate(cell *c) {
|
||||||
if(buggyplant) return;
|
if(buggyplant) return;
|
||||||
if(sphere) return;
|
if(sphere) return;
|
||||||
if(gp::on || irr::on) return;
|
if(NONSTDVAR) return;
|
||||||
if(quotient) return;
|
if(quotient) return;
|
||||||
|
|
||||||
if(euclid) {
|
if(euclid) {
|
||||||
@ -1057,7 +1057,7 @@ namespace whirlpool {
|
|||||||
namespace mirror {
|
namespace mirror {
|
||||||
|
|
||||||
bool build(cell *c) {
|
bool build(cell *c) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
if(c == c->master->c7) {
|
if(c == c->master->c7) {
|
||||||
c->wall = ((gp::param.second == 0 || gp::param.first == gp::param.second) && hrand(2)) ? waMirror : waCloud;
|
c->wall = ((gp::param.second == 0 || gp::param.first == gp::param.second) && hrand(2)) ? waMirror : waCloud;
|
||||||
return true;
|
return true;
|
||||||
@ -1068,7 +1068,7 @@ namespace mirror {
|
|||||||
c->wall = hrand(2) ? waMirror : waCloud;
|
c->wall = hrand(2) ? waMirror : waCloud;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(binarytiling || irr::on) {
|
if(binarytiling || IRREGULAR) {
|
||||||
// mirrors not supported
|
// mirrors not supported
|
||||||
if(is_mirrorland(c)) {
|
if(is_mirrorland(c)) {
|
||||||
c->item = itShard;
|
c->item = itShard;
|
||||||
@ -1076,7 +1076,7 @@ namespace mirror {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(nonbitrunc?pseudohept(c):!ishept(c)) {
|
if(PURE?pseudohept(c):!ishept(c)) {
|
||||||
c->wall = hrand(2) ? waMirror : waCloud;
|
c->wall = hrand(2) ? waMirror : waCloud;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1183,7 +1183,7 @@ namespace mirror {
|
|||||||
cw.mirrored = !cw.mirrored;
|
cw.mirrored = !cw.mirrored;
|
||||||
cell *c = cw.at;
|
cell *c = cw.at;
|
||||||
|
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
for(int i=0; i<cw.at->type; i++) {
|
for(int i=0; i<cw.at->type; i++) {
|
||||||
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
||||||
hs = hs + i + wstep + i - (gp::param.first == gp::param.second ? 1 : 0);
|
hs = hs + i + wstep + i - (gp::param.first == gp::param.second ? 1 : 0);
|
||||||
@ -1204,7 +1204,7 @@ namespace mirror {
|
|||||||
create_archimedean(cw, cpid, false);
|
create_archimedean(cw, cpid, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(gp::on && !(S7 & 1)) {
|
if(GOLDBERG && !(S7 & 1)) {
|
||||||
for(int i=0; i<cw.at->type; i++) {
|
for(int i=0; i<cw.at->type; i++) {
|
||||||
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
||||||
hs = hs + i + wstep + 1 + wstep + 1 + (S7/2) - i + 1;
|
hs = hs + i + wstep + 1 + wstep + 1 + (S7/2) - i + 1;
|
||||||
@ -1212,7 +1212,7 @@ namespace mirror {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(gp::on && (S7 & 1)) {
|
if(GOLDBERG && (S7 & 1)) {
|
||||||
for(int i=0; i<cw.at->type; i++) {
|
for(int i=0; i<cw.at->type; i++) {
|
||||||
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
heptspin hs(cw.at->master, cw.spin, cw.mirrored);
|
||||||
hs = hs + i + wstep + (S7/2) + wstep - 2 + wstep + (S7/2) - i;
|
hs = hs + i + wstep + (S7/2) + wstep - 2 + wstep + (S7/2) - i;
|
||||||
@ -1220,17 +1220,17 @@ namespace mirror {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(nonbitrunc && !(S7 & 1)) {
|
if(PURE && !(S7 & 1)) {
|
||||||
for(int i=0; i<cw.at->type; i++)
|
for(int i=0; i<cw.at->type; i++)
|
||||||
createMirror(cw + i + wstep + 1 + wstep + 1 + (S7/2) - i, cpid);
|
createMirror(cw + i + wstep + 1 + wstep + 1 + (S7/2) - i, cpid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(nonbitrunc && (S7 & 1) && (S3 == 4)) {
|
if(PURE && (S7 & 1) && (S3 == 4)) {
|
||||||
for(int i=0; i<cw.at->type; i++)
|
for(int i=0; i<cw.at->type; i++)
|
||||||
createMirror(cw + i + wstep + 1 + wstep - (S7/2) + wstep - (S7/2) - i, cpid);
|
createMirror(cw + i + wstep + 1 + wstep - (S7/2) + wstep - (S7/2) - i, cpid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(nonbitrunc && (S7 & 1)) {
|
if(PURE && (S7 & 1)) {
|
||||||
for(int i=0; i<cw.at->type; i++)
|
for(int i=0; i<cw.at->type; i++)
|
||||||
createMirror(cw + i + wstep + (S7/2) + wstep - 2 + wstep + (S7/2) - i, cpid);
|
createMirror(cw + i + wstep + (S7/2) + wstep - 2 + wstep + (S7/2) - i, cpid);
|
||||||
return;
|
return;
|
||||||
@ -1416,9 +1416,9 @@ namespace mirror {
|
|||||||
v.push_back(1);
|
v.push_back(1);
|
||||||
stepcount++; if(stepcount > 10000) { printf("failhep\n"); return cw; }
|
stepcount++; if(stepcount > 10000) { printf("failhep\n"); return cw; }
|
||||||
}
|
}
|
||||||
if(nonbitrunc && (cw+wstep).at == cwcopy.at)
|
if(PURE && (cw+wstep).at == cwcopy.at)
|
||||||
v.pop_back();
|
v.pop_back();
|
||||||
if(nonbitrunc && (cw+3+wstep).at->land == laMirrored && (cw+2+wstep).at->land == laMirrorWall) {
|
if(PURE && (cw+3+wstep).at->land == laMirrored && (cw+2+wstep).at->land == laMirrorWall) {
|
||||||
cw += wmirror;
|
cw += wmirror;
|
||||||
auto p = traceback(v, cw);
|
auto p = traceback(v, cw);
|
||||||
if(p.first) return p.second;
|
if(p.first) return p.second;
|
||||||
@ -1921,7 +1921,7 @@ namespace heat {
|
|||||||
cell *c = playerpos(i);
|
cell *c = playerpos(i);
|
||||||
if(!c) continue;
|
if(!c) continue;
|
||||||
double xrate = (c->land == laCocytus && shmup::on) ? rate/3 : rate;
|
double xrate = (c->land == laCocytus && shmup::on) ? rate/3 : rate;
|
||||||
if(nonbitrunc) xrate *= 1.7;
|
if(PURE) xrate *= 1.7; // todo-variation
|
||||||
if(!shmup::on) xrate /= FIX94;
|
if(!shmup::on) xrate /= FIX94;
|
||||||
if(isIcyLand(c))
|
if(isIcyLand(c))
|
||||||
HEAT(c) += (markOrb(itOrbWinter) ? -1.2 : 1.2) * xrate;
|
HEAT(c) += (markOrb(itOrbWinter) ? -1.2 : 1.2) * xrate;
|
||||||
@ -1936,7 +1936,7 @@ namespace heat {
|
|||||||
for(int i=0; i<dcs; i++) {
|
for(int i=0; i<dcs; i++) {
|
||||||
cell *c = allcells[i];
|
cell *c = allcells[i];
|
||||||
double xrate = (c->land == laCocytus && shmup::on) ? 1/3. : 1;
|
double xrate = (c->land == laCocytus && shmup::on) ? 1/3. : 1;
|
||||||
if(nonbitrunc) xrate *= 1.7;
|
if(PURE) xrate *= 1.7; // todo-variation
|
||||||
if(!shmup::on) xrate /= FIX94;
|
if(!shmup::on) xrate /= FIX94;
|
||||||
if(c->cpdist > gr && !doall) break;
|
if(c->cpdist > gr && !doall) break;
|
||||||
|
|
||||||
@ -2623,7 +2623,7 @@ namespace sword {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void shuffle(int i) {
|
void shuffle(int i) {
|
||||||
sword::angle[i] = euclid ? S7*hrand(6) : nonbitrunc ? 3*hrand(S14)+1 : hrand(S42);
|
sword::angle[i] = euclid ? S7*hrand(6) : PURE ? 3*hrand(S14)+1 : hrand(S42);
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
@ -2808,7 +2808,7 @@ namespace prairie {
|
|||||||
c->LHU.fi.rval = (y&15);
|
c->LHU.fi.rval = (y&15);
|
||||||
}
|
}
|
||||||
else if(sphere) {
|
else if(sphere) {
|
||||||
c->LHU.fi.rval = celldistance(c, cwt.at) + 8 - (nonbitrunc ? 2 : 3);
|
c->LHU.fi.rval = celldistance(c, cwt.at) + 8 - (PURE ? 2 : 3);
|
||||||
}
|
}
|
||||||
else if(weirdhyperbolic) {
|
else if(weirdhyperbolic) {
|
||||||
c->LHU.fi.rval = max(celldist(c), 15);
|
c->LHU.fi.rval = max(celldist(c), 15);
|
||||||
@ -2870,8 +2870,8 @@ namespace prairie {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RLOW (sphere?(nonbitrunc?7:6):nonbitrunc?4:2)
|
#define RLOW (sphere?(PURE?7:6):PURE?4:2)
|
||||||
#define RHIGH (sphere?(nonbitrunc?8:9):nonbitrunc?11:13)
|
#define RHIGH (sphere?(PURE?8:9):PURE?11:13)
|
||||||
|
|
||||||
bool no_worms(cell *c) {
|
bool no_worms(cell *c) {
|
||||||
int rv = c->LHU.fi.rval;
|
int rv = c->LHU.fi.rval;
|
||||||
@ -3036,7 +3036,7 @@ namespace prairie {
|
|||||||
else if(!enter && isriver(cwt.at)) enter = cwt.at;
|
else if(!enter && isriver(cwt.at)) enter = cwt.at;
|
||||||
if(isize(tchoices)) {
|
if(isize(tchoices)) {
|
||||||
if(lasttreasure && lasttreasure->item == itGreenGrass) {
|
if(lasttreasure && lasttreasure->item == itGreenGrass) {
|
||||||
if(celldistance(lasttreasure, cwt.at) >= (nonbitrunc ? 7 : 10)) {
|
if(celldistance(lasttreasure, cwt.at) >= (PURE ? 7 : 10)) {
|
||||||
lasttreasure->item = itNone;
|
lasttreasure->item = itNone;
|
||||||
forCellEx(c2, lasttreasure) if(c2->item == itGreenGrass) c2->item = itNone;
|
forCellEx(c2, lasttreasure) if(c2->item == itGreenGrass) c2->item = itNone;
|
||||||
}
|
}
|
||||||
@ -3199,14 +3199,14 @@ namespace windmap {
|
|||||||
// cw.spin = 0;
|
// cw.spin = 0;
|
||||||
neighbors.emplace_back();
|
neighbors.emplace_back();
|
||||||
auto &v = neighbors.back();
|
auto &v = neighbors.back();
|
||||||
if((gp::on || irr::on) && !sphere)
|
if(sphere && STDVAR)
|
||||||
|
for(int l=0; l<cw.at->type; l++) v.push_back(getId(cw+l+wstep));
|
||||||
|
else
|
||||||
for(int l=0; l<S7; l++) {
|
for(int l=0; l<S7; l++) {
|
||||||
heptspin hs(cw.at->master, cw.spin);
|
heptspin hs(cw.at->master, cw.spin);
|
||||||
hs = hs + l + wstep;
|
hs = hs + l + wstep;
|
||||||
v.push_back(getId(cellwalker(hs.at->c7, hs.spin)));
|
v.push_back(getId(cellwalker(hs.at->c7, hs.spin)));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
for(int l=0; l<cw.at->type; l++) v.push_back(getId(cw+l+wstep));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int N = isize(samples);
|
int N = isize(samples);
|
||||||
@ -3463,7 +3463,7 @@ namespace halloween {
|
|||||||
else if(CHANCE(5) && itr >= 60) {
|
else if(CHANCE(5) && itr >= 60) {
|
||||||
dragoncount++;
|
dragoncount++;
|
||||||
}
|
}
|
||||||
else if(dragoncount && !nonbitrunc && !mcount) {
|
else if(dragoncount && BITRUNCATED && !mcount) {
|
||||||
bool fill = false;
|
bool fill = false;
|
||||||
for(int i=0; i<4; i++)
|
for(int i=0; i<4; i++)
|
||||||
if(!dragoncells[i] || dragoncells[i]->monst)
|
if(!dragoncells[i] || dragoncells[i]->monst)
|
||||||
|
22
config.cpp
22
config.cpp
@ -239,7 +239,7 @@ void initConfig() {
|
|||||||
addsaver(hardcore, "mode-hardcore", false);
|
addsaver(hardcore, "mode-hardcore", false);
|
||||||
addsaver(chaosmode, "mode-chaos");
|
addsaver(chaosmode, "mode-chaos");
|
||||||
addsaver(inv::on, "mode-Orb Strategy");
|
addsaver(inv::on, "mode-Orb Strategy");
|
||||||
addsaver(nonbitrunc, "mode-heptagonal", false);
|
addsaverenum(variation, "mode-variation", eVariation::bitruncated);
|
||||||
addsaver(peace::on, "mode-peace");
|
addsaver(peace::on, "mode-peace");
|
||||||
addsaver(peace::otherpuzzles, "mode-peace-submode");
|
addsaver(peace::otherpuzzles, "mode-peace-submode");
|
||||||
addsaverenum(specialland, "land for special modes");
|
addsaverenum(specialland, "land for special modes");
|
||||||
@ -257,14 +257,12 @@ void initConfig() {
|
|||||||
addsaver(vid.stretch, "stretch", 1);
|
addsaver(vid.stretch, "stretch", 1);
|
||||||
addsaver(vid.binary_width, "binary-tiling-width", 1);
|
addsaver(vid.binary_width, "binary-tiling-width", 1);
|
||||||
|
|
||||||
addsaver(gp::on, "goldberg", false);
|
|
||||||
addsaver(gp::param.first, "goldberg-x", gp::param.first);
|
addsaver(gp::param.first, "goldberg-x", gp::param.first);
|
||||||
addsaver(gp::param.second, "goldberg-y", gp::param.second);
|
addsaver(gp::param.second, "goldberg-y", gp::param.second);
|
||||||
|
|
||||||
addsaver(nohud, "no-hud", false);
|
addsaver(nohud, "no-hud", false);
|
||||||
addsaver(nofps, "no-fps", false);
|
addsaver(nofps, "no-fps", false);
|
||||||
|
|
||||||
addsaver(irr::on, "irregular", false);
|
|
||||||
addsaver(irr::density, "irregular-density", 2);
|
addsaver(irr::density, "irregular-density", 2);
|
||||||
addsaver(irr::cellcount, "irregular-cellcount", 150);
|
addsaver(irr::cellcount, "irregular-cellcount", 150);
|
||||||
addsaver(irr::quality, "irregular-quality", .2);
|
addsaver(irr::quality, "irregular-quality", .2);
|
||||||
@ -288,7 +286,7 @@ void initConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool inSpecialMode() {
|
bool inSpecialMode() {
|
||||||
return chaosmode || nonbitrunc || peace::on ||
|
return chaosmode || !BITRUNCATED || peace::on ||
|
||||||
#if CAP_TOUR
|
#if CAP_TOUR
|
||||||
tour::on ||
|
tour::on ||
|
||||||
#endif
|
#endif
|
||||||
@ -306,7 +304,7 @@ bool have_current_settings() {
|
|||||||
if(tour::on) modecount += 10;
|
if(tour::on) modecount += 10;
|
||||||
#endif
|
#endif
|
||||||
if(chaosmode) modecount += 10;
|
if(chaosmode) modecount += 10;
|
||||||
if(nonbitrunc) modecount += 10;
|
if(!BITRUNCATED) modecount += 10;
|
||||||
if(peace::on) modecount += 10;
|
if(peace::on) modecount += 10;
|
||||||
if(yendor::on) modecount += 10;
|
if(yendor::on) modecount += 10;
|
||||||
if(tactic::on) modecount += 10;
|
if(tactic::on) modecount += 10;
|
||||||
@ -329,8 +327,7 @@ void resetModes(char leave) {
|
|||||||
if(shmup::on != (leave == rg::shmup)) stop_game_and_switch_mode(rg::shmup);
|
if(shmup::on != (leave == rg::shmup)) stop_game_and_switch_mode(rg::shmup);
|
||||||
if(inv::on != (leave == rg::inv)) stop_game_and_switch_mode(rg::inv);
|
if(inv::on != (leave == rg::inv)) stop_game_and_switch_mode(rg::inv);
|
||||||
if(chaosmode != (leave == rg::chaos)) stop_game_and_switch_mode(rg::chaos);
|
if(chaosmode != (leave == rg::chaos)) stop_game_and_switch_mode(rg::chaos);
|
||||||
if(gp::on != (leave == rg::gp)) stop_game_and_switch_mode(rg::gp);
|
|
||||||
if(nonbitrunc != (leave == rg::bitrunc)) stop_game_and_switch_mode(rg::bitrunc);
|
|
||||||
if(peace::on != (leave == rg::peace)) stop_game_and_switch_mode(rg::peace);
|
if(peace::on != (leave == rg::peace)) stop_game_and_switch_mode(rg::peace);
|
||||||
#if CAP_TOUR
|
#if CAP_TOUR
|
||||||
if(tour::on != (leave == rg::tour)) stop_game_and_switch_mode(rg::tour);
|
if(tour::on != (leave == rg::tour)) stop_game_and_switch_mode(rg::tour);
|
||||||
@ -346,10 +343,8 @@ void resetModes(char leave) {
|
|||||||
firstland = laIce; specialland = laIce; stop_game_and_switch_mode();
|
firstland = laIce; specialland = laIce; stop_game_and_switch_mode();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(geometry != gNormal && leave != rg::geometry) {
|
set_geometry(gNormal);
|
||||||
targetgeometry = gNormal;
|
set_variation(eVariation::bitruncated);
|
||||||
stop_game_and_switch_mode(rg::geometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
pmodel = mdDisk; vid.alpha = 1; vid.scale = 1;
|
pmodel = mdDisk; vid.alpha = 1; vid.scale = 1;
|
||||||
vid.xposition = vid.yposition = 0;
|
vid.xposition = vid.yposition = 0;
|
||||||
@ -443,7 +438,7 @@ void loadOldConfig(FILE *f) {
|
|||||||
|
|
||||||
shmup::loadConfig(f);
|
shmup::loadConfig(f);
|
||||||
|
|
||||||
aa = rug::renderonce; bb = rug::rendernogl; cc = nonbitrunc; dd = chaosmode;
|
aa = rug::renderonce; bb = rug::rendernogl; dd = chaosmode;
|
||||||
int ee = vid.steamscore;
|
int ee = vid.steamscore;
|
||||||
#if CAP_RUG
|
#if CAP_RUG
|
||||||
double rs = 2/rug::model_distance;
|
double rs = 2/rug::model_distance;
|
||||||
@ -451,7 +446,8 @@ void loadOldConfig(FILE *f) {
|
|||||||
double rs = 0;
|
double rs = 0;
|
||||||
#endif
|
#endif
|
||||||
err=fscanf(f, "%d%d%d%d%lf%d%d", &aa, &bb, &rug::texturesize, &cc, &rs, &ee, &dd);
|
err=fscanf(f, "%d%d%d%d%lf%d%d", &aa, &bb, &rug::texturesize, &cc, &rs, &ee, &dd);
|
||||||
rug::renderonce = aa; rug::rendernogl = bb; nonbitrunc = cc; chaosmode = dd; vid.steamscore = ee;
|
rug::renderonce = aa; rug::rendernogl = bb;
|
||||||
|
chaosmode = dd; vid.steamscore = ee;
|
||||||
#if CAP_RUG
|
#if CAP_RUG
|
||||||
rug::model_distance = 2/rs;
|
rug::model_distance = 2/rs;
|
||||||
#endif
|
#endif
|
||||||
|
@ -978,7 +978,7 @@ void show() {
|
|||||||
|
|
||||||
dialog::addItem(XLAT("spherical VR"), 'v');
|
dialog::addItem(XLAT("spherical VR"), 'v');
|
||||||
dialog::add_action([] () {
|
dialog::add_action([] () {
|
||||||
if(!sphere) { targetgeometry = gSphere; restart_game(rg::geometry); }
|
if(!sphere) set_geometry(gSphere);
|
||||||
mode = 0; fullcenter();
|
mode = 0; fullcenter();
|
||||||
mode = 2; sensitivity = 1;
|
mode = 2; sensitivity = 1;
|
||||||
stereo::mode = stereo::sLR; stereo::ipd = 0.2;
|
stereo::mode = stereo::sLR; stereo::ipd = 0.2;
|
||||||
|
@ -334,7 +334,7 @@ void debugScreen() {
|
|||||||
dialog::addSelItem("pathdist", its(mouseover->pathdist), 0);
|
dialog::addSelItem("pathdist", its(mouseover->pathdist), 0);
|
||||||
dialog::addSelItem("celldistAlt", mouseover->master->alt ? its(celldistAlt(mouseover)) : "--", 0);
|
dialog::addSelItem("celldistAlt", mouseover->master->alt ? its(celldistAlt(mouseover)) : "--", 0);
|
||||||
dialog::addSelItem("temporary", its(mouseover->listindex), 0);
|
dialog::addSelItem("temporary", its(mouseover->listindex), 0);
|
||||||
if(gp::on)
|
if(GOLDBERG)
|
||||||
dialog::addSelItem("whirl", gp::disp(gp::get_local_info(mouseover).relative), 0);
|
dialog::addSelItem("whirl", gp::disp(gp::get_local_info(mouseover).relative), 0);
|
||||||
if(archimedean)
|
if(archimedean)
|
||||||
dialog::addSelItem("ID", its(arcm::id_of(mouseover->master)), 0);
|
dialog::addSelItem("ID", its(arcm::id_of(mouseover->master)), 0);
|
||||||
|
@ -386,7 +386,7 @@ struct fpattern {
|
|||||||
dists[at] = i;
|
dists[at] = i;
|
||||||
for(int q=0; q<S7; q++) {
|
for(int q=0; q<S7; q++) {
|
||||||
dists[at] = i;
|
dists[at] = i;
|
||||||
if(nonbitrunc)
|
if(PURE) // todo-variation: PURE here?
|
||||||
indist[i+1].push_back(connections[at]);
|
indist[i+1].push_back(connections[at]);
|
||||||
else {
|
else {
|
||||||
indist[i+2].push_back(connections[at]);
|
indist[i+2].push_back(connections[at]);
|
||||||
@ -400,7 +400,7 @@ struct fpattern {
|
|||||||
|
|
||||||
void analyze() {
|
void analyze() {
|
||||||
|
|
||||||
DEBB(DF_FIELD, (debugfile, "nonbitrunc = %d\n", nonbitrunc));
|
DEBB(DF_FIELD, (debugfile, "variation = %d\n", int(variation)));
|
||||||
int N = connections.size();
|
int N = connections.size();
|
||||||
|
|
||||||
markers.resize(N);
|
markers.resize(N);
|
||||||
@ -515,7 +515,7 @@ struct fpattern {
|
|||||||
W = mmul(Wall, W);
|
W = mmul(Wall, W);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dijkstra(nonbitrunc ? distriver : distflower, indist);
|
dijkstra(PURE ? distriver : distflower, indist);
|
||||||
|
|
||||||
W = matrices[riverid];
|
W = matrices[riverid];
|
||||||
for(int i=0; i<wallorder; i++) {
|
for(int i=0; i<wallorder; i++) {
|
||||||
@ -537,7 +537,7 @@ struct fpattern {
|
|||||||
SETDIST(W, 1, itGold)
|
SETDIST(W, 1, itGold)
|
||||||
W = mmul(W, Wall);
|
W = mmul(W, Wall);
|
||||||
}
|
}
|
||||||
int riverdist = dijkstra(nonbitrunc ? distflower : distriver, indist);
|
int riverdist = dijkstra(PURE ? distflower : distriver, indist);
|
||||||
DEBB(DF_FIELD, (debugfile, "river dist = %d\n", riverdist));
|
DEBB(DF_FIELD, (debugfile, "river dist = %d\n", riverdist));
|
||||||
|
|
||||||
for(int i=0; i<isize(currfp.matrices); i++)
|
for(int i=0; i<isize(currfp.matrices); i++)
|
||||||
@ -546,7 +546,7 @@ struct fpattern {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!nonbitrunc) {
|
if(!PURE) {
|
||||||
W = matrices[riverid];
|
W = matrices[riverid];
|
||||||
for(int i=0; i<wallorder; i++) {
|
for(int i=0; i<wallorder; i++) {
|
||||||
SETDIST(W, 0, itStatue)
|
SETDIST(W, 0, itStatue)
|
||||||
|
@ -106,7 +106,7 @@ int nsym0;
|
|||||||
void generate_matrices_scale(ld scale, int noft) {
|
void generate_matrices_scale(ld scale, int noft) {
|
||||||
mesher ohex = msh(gNormal, 6, 0.329036, 0.566256, 0.620672, 0, 1);
|
mesher ohex = msh(gNormal, 6, 0.329036, 0.566256, 0.620672, 0, 1);
|
||||||
mesher ohept = msh(gNormal, 7, hexf7, hcrossf7, hcrossf7, M_PI/7, 1);
|
mesher ohept = msh(gNormal, 7, hexf7, hcrossf7, hcrossf7, M_PI/7, 1);
|
||||||
if(nonbitrunc) {
|
if(!BITRUNCATED) {
|
||||||
mesher nall = msh(geometry, S7, rhexf, tessf, tessf, -M_PI, scale);
|
mesher nall = msh(geometry, S7, rhexf, tessf, tessf, -M_PI, scale);
|
||||||
bool use = geosupport_football() < 2;
|
bool use = geosupport_football() < 2;
|
||||||
if(use && noft == 1) {
|
if(use && noft == 1) {
|
||||||
@ -281,23 +281,23 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
for(auto pfsh: all_plain_floorshapes) {
|
for(auto pfsh: all_plain_floorshapes) {
|
||||||
auto& fsh = *pfsh;
|
auto& fsh = *pfsh;
|
||||||
|
|
||||||
if(!gp::on && !irr::on && !archimedean) {
|
if(STDVAR && !archimedean) {
|
||||||
|
|
||||||
// standard and binary
|
// standard and binary
|
||||||
ld hexside = fsh.rad0, heptside = fsh.rad1;
|
ld hexside = fsh.rad0, heptside = fsh.rad1;
|
||||||
|
|
||||||
for(int k=0; k<SIDEPARS; k++) sizeto(fsh.side[k], id);
|
for(int k=0; k<SIDEPARS; k++) sizeto(fsh.side[k], id);
|
||||||
|
|
||||||
int td = ((nonbitrunc || euclid) && !(S7&1)) ? S42+S6 : 0;
|
int td = ((PURE || euclid) && !(S7&1)) ? S42+S6 : 0;
|
||||||
if(&fsh == &shBigHepta) td += S6;
|
if(&fsh == &shBigHepta) td += S6;
|
||||||
|
|
||||||
int b = 0;
|
int b = 0;
|
||||||
if(S3 == 4 && !nonbitrunc) b += S14;
|
if(S3 == 4 && BITRUNCATED) b += S14;
|
||||||
|
|
||||||
if(id == 1)
|
if(id == 1)
|
||||||
bshape_regular(fsh, 1, S7, td, heptside);
|
bshape_regular(fsh, 1, S7, td, heptside);
|
||||||
|
|
||||||
else if(nonbitrunc) {
|
else if(PURE) {
|
||||||
if(&fsh == &shTriheptaFloor)
|
if(&fsh == &shTriheptaFloor)
|
||||||
bshape_regular(fsh, 0, S7/2, 0, hexside);
|
bshape_regular(fsh, 0, S7/2, 0, hexside);
|
||||||
else if(&fsh == &shBigTriangle)
|
else if(&fsh == &shBigTriangle)
|
||||||
@ -407,9 +407,9 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
sizeto(fsh.b, id);
|
sizeto(fsh.b, id);
|
||||||
sizeto(fsh.shadow, id);
|
sizeto(fsh.shadow, id);
|
||||||
|
|
||||||
if(!gp::on && !irr::on && !binarytiling && !archimedean) {
|
if(STDVAR && !binarytiling && !archimedean) {
|
||||||
generate_matrices_scale(fsh.scale, fsh.noftype);
|
generate_matrices_scale(fsh.scale, fsh.noftype);
|
||||||
if(nonbitrunc && geosupport_football() < 2 && fsh.shapeid2) {
|
if(PURE && geosupport_football() < 2 && fsh.shapeid2) {
|
||||||
if(id == 0) bshape2(fsh.b[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
if(id == 0) bshape2(fsh.b[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
||||||
if(id == 1) bshape2(fsh.b[1], fsh.prio, fsh.shapeid2, hept_matrices);
|
if(id == 1) bshape2(fsh.b[1], fsh.prio, fsh.shapeid2, hept_matrices);
|
||||||
}
|
}
|
||||||
@ -418,7 +418,7 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
if(id == 1) bshape2(fsh.b[1], fsh.prio, fsh.shapeid1, hept_matrices);
|
if(id == 1) bshape2(fsh.b[1], fsh.prio, fsh.shapeid1, hept_matrices);
|
||||||
}
|
}
|
||||||
generate_matrices_scale(fsh.scale * SHADMUL, fsh.noftype);
|
generate_matrices_scale(fsh.scale * SHADMUL, fsh.noftype);
|
||||||
if(nonbitrunc && geosupport_football() < 2 && fsh.shapeid2) {
|
if(PURE && geosupport_football() < 2 && fsh.shapeid2) {
|
||||||
if(id == 0) bshape2(fsh.shadow[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
if(id == 0) bshape2(fsh.shadow[0], fsh.prio, fsh.shapeid2, hept_matrices);
|
||||||
if(id == 1) bshape2(fsh.shadow[1], fsh.prio, fsh.shapeid2, hept_matrices);
|
if(id == 1) bshape2(fsh.shadow[1], fsh.prio, fsh.shapeid2, hept_matrices);
|
||||||
}
|
}
|
||||||
@ -470,7 +470,7 @@ void generate_floorshapes_for(int id, cell *c, int siid, int sidir) {
|
|||||||
|
|
||||||
void generate_floorshapes() {
|
void generate_floorshapes() {
|
||||||
|
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
printf("generating irregular floorshapes...\n");
|
printf("generating irregular floorshapes...\n");
|
||||||
cell model;
|
cell model;
|
||||||
|
|
||||||
@ -489,7 +489,7 @@ void generate_floorshapes() {
|
|||||||
printf("done\n");
|
printf("done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(gp::on) { /* will be generated on the fly */ }
|
else if(GOLDBERG) { /* will be generated on the fly */ }
|
||||||
|
|
||||||
else if(archimedean) {
|
else if(archimedean) {
|
||||||
heptagon master;
|
heptagon master;
|
||||||
@ -497,7 +497,7 @@ void generate_floorshapes() {
|
|||||||
model.master = &master;
|
model.master = &master;
|
||||||
arcm::parent_index_of(&master) = 0;
|
arcm::parent_index_of(&master) = 0;
|
||||||
auto &ac = arcm::current;
|
auto &ac = arcm::current;
|
||||||
for(int i=0; i<2*ac.N + (nonbitrunc ? 0 : 2); i++) {
|
for(int i=0; i<2*ac.N + (PURE ? 0 : 2); i++) {
|
||||||
arcm::id_of(&master) = i;
|
arcm::id_of(&master) = i;
|
||||||
model.type = isize(ac.triangles[i]);
|
model.type = isize(ac.triangles[i]);
|
||||||
if(geosupport_football() == 2)
|
if(geosupport_football() == 2)
|
||||||
@ -606,11 +606,11 @@ void set_floor(const transmatrix& spin, hpcshape& sh) {
|
|||||||
|
|
||||||
void draw_shapevec(cell *c, const transmatrix& V, const vector<hpcshape> &shv, int col, PPR prio = PPR::DEFAULT) {
|
void draw_shapevec(cell *c, const transmatrix& V, const vector<hpcshape> &shv, int col, PPR prio = PPR::DEFAULT) {
|
||||||
if(!c) queuepolyat(V, shv[0], col, prio);
|
if(!c) queuepolyat(V, shv[0], col, prio);
|
||||||
else if(gp::on) {
|
else if(GOLDBERG) {
|
||||||
int id = gp::get_plainshape_id(c);
|
int id = gp::get_plainshape_id(c);
|
||||||
queuepolyat(V, shv[id], col, prio);
|
queuepolyat(V, shv[id], col, prio);
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
int id = irr::cellindex[c];
|
int id = irr::cellindex[c];
|
||||||
if(id < 0 || id >= isize(shv)) {
|
if(id < 0 || id >= isize(shv)) {
|
||||||
return;
|
return;
|
||||||
@ -620,9 +620,9 @@ void draw_shapevec(cell *c, const transmatrix& V, const vector<hpcshape> &shv, i
|
|||||||
else if(archimedean) {
|
else if(archimedean) {
|
||||||
queuepolyat(V, shv[arcm::id_of(c->master)], col, prio);
|
queuepolyat(V, shv[arcm::id_of(c->master)], col, prio);
|
||||||
}
|
}
|
||||||
else if((euclid || gp::on) && ishex1(c))
|
else if((euclid || GOLDBERG) && ishex1(c))
|
||||||
queuepolyat(V * pispin, shv[0], col, prio);
|
queuepolyat(V * pispin, shv[0], col, prio);
|
||||||
else if(!(S7&1) && nonbitrunc) {
|
else if(!(S7&1) && PURE) {
|
||||||
auto si = patterns::getpatterninfo(c, patterns::PAT_COLORING, 0);
|
auto si = patterns::getpatterninfo(c, patterns::PAT_COLORING, 0);
|
||||||
if(si.id == 8) si.dir++;
|
if(si.id == 8) si.dir++;
|
||||||
transmatrix D = applyPatterndir(c, si);
|
transmatrix D = applyPatterndir(c, si);
|
||||||
|
14
game.cpp
14
game.cpp
@ -2183,7 +2183,7 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
cell *c2 = c->move(i);
|
cell *c2 = c->move(i);
|
||||||
if(c2 && c2->item == itCompass) toomany = true;
|
if(c2 && c2->item == itCompass) toomany = true;
|
||||||
if(c2 && !nonbitrunc) for(int j=0; j<c2->type; j++)
|
if(c2 && BITRUNCATED) for(int j=0; j<c2->type; j++)
|
||||||
if(c2->move(j) && c2->move(j)->item == itCompass)
|
if(c2->move(j) && c2->move(j)->item == itCompass)
|
||||||
toomany = true;
|
toomany = true;
|
||||||
}
|
}
|
||||||
@ -3187,10 +3187,10 @@ void toggleGates(cell *c, eWall type, int rad) {
|
|||||||
void toggleGates(cell *ct, eWall type) {
|
void toggleGates(cell *ct, eWall type) {
|
||||||
playSound(ct, "click");
|
playSound(ct, "click");
|
||||||
numgates = 0;
|
numgates = 0;
|
||||||
if(type == waClosePlate && nonbitrunc && !gp::on)
|
if(type == waClosePlate && PURE)
|
||||||
toggleGates(ct, type, 2);
|
toggleGates(ct, type, 2);
|
||||||
else
|
else
|
||||||
toggleGates(ct, type, (gp::on && !sphere && !a4) ? gp::dist_3() : 3);
|
toggleGates(ct, type, (GOLDBERG && !sphere && !a4) ? gp::dist_3() : 3);
|
||||||
if(numgates && type == waClosePlate)
|
if(numgates && type == waClosePlate)
|
||||||
playSound(ct, "closegate");
|
playSound(ct, "closegate");
|
||||||
if(numgates && type == waOpenPlate)
|
if(numgates && type == waOpenPlate)
|
||||||
@ -4300,7 +4300,7 @@ void moveWorm(cell *c) {
|
|||||||
addMessage(XLAT("The sandworm explodes!"));
|
addMessage(XLAT("The sandworm explodes!"));
|
||||||
playSound(NULL, "explosion");
|
playSound(NULL, "explosion");
|
||||||
if(geometry == gZebraQuotient)
|
if(geometry == gZebraQuotient)
|
||||||
achievement_gain("ZEBRAWORM", rg::geometry);
|
achievement_gain("ZEBRAWORM", rg::special_geometry);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -6936,11 +6936,11 @@ ld circlesizeD[10000];
|
|||||||
int lastsize;
|
int lastsize;
|
||||||
|
|
||||||
bool sizes_known() {
|
bool sizes_known() {
|
||||||
return euclid || (geometry == gNormal && !gp::on && !irr::on);
|
return euclid || (geometry == gNormal && STDVAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void computeSizes() {
|
void computeSizes() {
|
||||||
lastsize = nonbitrunc ? 44 : 76;
|
lastsize = PURE ? 44 : 76;
|
||||||
|
|
||||||
circlesize[0] = 1;
|
circlesize[0] = 1;
|
||||||
|
|
||||||
@ -6948,7 +6948,7 @@ void computeSizes() {
|
|||||||
for(int i=1; i<100; i++) circlesize[i] = 6 * i;
|
for(int i=1; i<100; i++) circlesize[i] = 6 * i;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(!nonbitrunc) {
|
else if(BITRUNCATED) {
|
||||||
circlesize[1] = 1*7;
|
circlesize[1] = 1*7;
|
||||||
circlesize[2] = 2*7;
|
circlesize[2] = 2*7;
|
||||||
circlesize[3] = 4*7;
|
circlesize[3] = 4*7;
|
||||||
|
65
geom-exp.cpp
65
geom-exp.cpp
@ -73,15 +73,15 @@ void showQuotientConfig() {
|
|||||||
else if(uni == 'p')
|
else if(uni == 'p')
|
||||||
nextPrime(gxcur);
|
nextPrime(gxcur);
|
||||||
else if(uni == 'x' || uni == '\n') {
|
else if(uni == 'x' || uni == '\n') {
|
||||||
targetgeometry = gxcur.base; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gxcur.base);
|
||||||
enableFieldChange();
|
enableFieldChange();
|
||||||
targetgeometry = gFieldQuotient; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gFieldQuotient);
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
else if(uni == 'c') {
|
else if(uni == 'c') {
|
||||||
targetgeometry = gEuclid; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gEuclid);
|
||||||
fieldpattern::quotient_field_changed = false;
|
fieldpattern::quotient_field_changed = false;
|
||||||
targetgeometry = gFieldQuotient; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gFieldQuotient);
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
else if(doexiton(sym, uni))
|
else if(doexiton(sym, uni))
|
||||||
@ -188,23 +188,23 @@ void showTorusConfig() {
|
|||||||
else if(uni == 't')
|
else if(uni == 't')
|
||||||
torus_bitrunc = !torus_bitrunc;
|
torus_bitrunc = !torus_bitrunc;
|
||||||
else if((uni == 'a' || uni == '\n') && torusconfig::newqty >= 3 && valid) {
|
else if((uni == 'a' || uni == '\n') && torusconfig::newqty >= 3 && valid) {
|
||||||
targetgeometry = gNormal; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gNormal);
|
||||||
torusconfig::torus_mode = torusconfig::newmode;
|
torusconfig::torus_mode = torusconfig::newmode;
|
||||||
torusconfig::qty = torusconfig::newqty;
|
torusconfig::qty = torusconfig::newqty;
|
||||||
torusconfig::dy = torusconfig::newdy;
|
torusconfig::dy = torusconfig::newdy;
|
||||||
torusconfig::sdx = torusconfig::newsdx;
|
torusconfig::sdx = torusconfig::newsdx;
|
||||||
torusconfig::sdy = torusconfig::newsdy;
|
torusconfig::sdy = torusconfig::newsdy;
|
||||||
torusconfig::activate();
|
torusconfig::activate();
|
||||||
if((square && torus_bitrunc) != nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);
|
set_geometry(gTorus);
|
||||||
targetgeometry = gTorus; stop_game_and_switch_mode(rg::geometry);
|
set_variation((torus_bitrunc || !square) ? eVariation::bitruncated : eVariation::pure);
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
else if(uni == 'c') {
|
else if(uni == 'c') {
|
||||||
targetgeometry = gEuclid; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gEuclid);
|
||||||
torusconfig::torus_mode = torusconfig::tmSingle;
|
torusconfig::torus_mode = torusconfig::tmSingle;
|
||||||
torusconfig::qty = torusconfig::def_qty;
|
torusconfig::qty = torusconfig::def_qty;
|
||||||
torusconfig::dy = torusconfig::def_dy;
|
torusconfig::dy = torusconfig::def_dy;
|
||||||
targetgeometry = gTorus; stop_game_and_switch_mode(rg::geometry);
|
set_geometry(gTorus);
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
else if(uni == 'z') editScale();
|
else if(uni == 'z') editScale();
|
||||||
@ -218,7 +218,7 @@ void showTorusConfig() {
|
|||||||
dialog::display();
|
dialog::display();
|
||||||
}
|
}
|
||||||
|
|
||||||
string bitruncnames[2] = {" (b)", " (n)"};
|
string bitruncnames[5] = {" (b)", " (n)", " (g)", " (i)", " (d)"};
|
||||||
|
|
||||||
void validity_info() {
|
void validity_info() {
|
||||||
int vccolors[4] = {0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00};
|
int vccolors[4] = {0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00};
|
||||||
@ -260,10 +260,10 @@ void showEuclideanMenu() {
|
|||||||
int ts = ginf[geometry].sides;
|
int ts = ginf[geometry].sides;
|
||||||
int tv = ginf[geometry].vertex;
|
int tv = ginf[geometry].vertex;
|
||||||
int tq = ginf[geometry].quotientstyle;
|
int tq = ginf[geometry].quotientstyle;
|
||||||
int nom = (nonbitrunc ? tv : tv+ts) * ((tq & qNONORIENTABLE) ? 2 : 4);
|
int nom = (BITRUNCATED ? tv+ts : tv) * ((tq & qNONORIENTABLE) ? 2 : 4);
|
||||||
int denom = (2*ts + 2*tv - ts * tv);
|
int denom = (2*ts + 2*tv - ts * tv);
|
||||||
|
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
denom *= 2;
|
denom *= 2;
|
||||||
nom = nom / tv * (2*tv + ts * (gp::area-1));
|
nom = nom / tv * (2*tv + ts * (gp::area-1));
|
||||||
if(nom % 2 == 0) nom /= 2, denom /= 2;
|
if(nom % 2 == 0) nom /= 2, denom /= 2;
|
||||||
@ -290,11 +290,8 @@ void showEuclideanMenu() {
|
|||||||
dialog::addSelItem(XLAT("width"), fts(vid.binary_width), 'v');
|
dialog::addSelItem(XLAT("width"), fts(vid.binary_width), 'v');
|
||||||
else if(archimedean)
|
else if(archimedean)
|
||||||
dialog::addSelItem(XLAT("variations"), XLAT("Not implemented."), 'v');
|
dialog::addSelItem(XLAT("variations"), XLAT("Not implemented."), 'v');
|
||||||
else {
|
else
|
||||||
dialog::addBoolItem(XLAT("variations"), nonbitrunc, 'v');
|
dialog::addSelItem(XLAT("variations"), gp::operation_name(), 'v');
|
||||||
dialog::lastItem().value = gp::operation_name();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
dialog::addBreak(25);
|
dialog::addBreak(25);
|
||||||
validity_info();
|
validity_info();
|
||||||
@ -303,8 +300,8 @@ void showEuclideanMenu() {
|
|||||||
int worldsize;
|
int worldsize;
|
||||||
|
|
||||||
int gar =
|
int gar =
|
||||||
gp::on ? gp::area - 1 :
|
GOLDBERG ? gp::area - 1 :
|
||||||
nonbitrunc ? 0 :
|
PURE ? 0 :
|
||||||
2;
|
2;
|
||||||
|
|
||||||
switch(geometry) {
|
switch(geometry) {
|
||||||
@ -389,11 +386,11 @@ void showEuclideanMenu() {
|
|||||||
keyhandler = [] (int sym, int uni) {
|
keyhandler = [] (int sym, int uni) {
|
||||||
dialog::handleNavigation(sym, uni);
|
dialog::handleNavigation(sym, uni);
|
||||||
if(uni >= 'a' && uni < 'a'+gGUARD) {
|
if(uni >= 'a' && uni < 'a'+gGUARD) {
|
||||||
targetgeometry = eGeometry(uni - 'a');
|
eGeometry targetgeometry = eGeometry(uni - 'a');
|
||||||
if(targetgeometry == gArchimedean)
|
if(targetgeometry == gArchimedean)
|
||||||
pushScreen(arcm::show);
|
pushScreen(arcm::show);
|
||||||
else {
|
else {
|
||||||
stop_game_and_switch_mode(geometry == targetgeometry ? rg::nothing : rg::geometry);
|
set_geometry(targetgeometry);
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -410,12 +407,12 @@ void showEuclideanMenu() {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if(euclid4) {
|
||||||
|
set_variation(PURE ? eVariation::bitruncated : eVariation::pure);
|
||||||
|
start_game();
|
||||||
|
}
|
||||||
else // if(S3 == 3)
|
else // if(S3 == 3)
|
||||||
gp::configure();
|
gp::configure();
|
||||||
/* else {
|
|
||||||
stop_game_and_switch_mode(rg::bitrunc);
|
|
||||||
start_game();
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
else if(uni == '2' || sym == SDLK_F1) gotoHelp(euchelp);
|
else if(uni == '2' || sym == SDLK_F1) gotoHelp(euchelp);
|
||||||
else if(uni == '3') { viewdists = !viewdists; if(viewdists) popScreenAll(); }
|
else if(uni == '3') { viewdists = !viewdists; if(viewdists) popScreenAll(); }
|
||||||
@ -438,7 +435,7 @@ void showEuclideanMenu() {
|
|||||||
torusconfig::newsdx = torusconfig::sdx,
|
torusconfig::newsdx = torusconfig::sdx,
|
||||||
torusconfig::newsdy = torusconfig::sdy,
|
torusconfig::newsdy = torusconfig::sdy,
|
||||||
torusconfig::newmode = torusconfig::torus_mode,
|
torusconfig::newmode = torusconfig::torus_mode,
|
||||||
torus_bitrunc = nonbitrunc,
|
torus_bitrunc = PURE,
|
||||||
pushScreen(showTorusConfig);
|
pushScreen(showTorusConfig);
|
||||||
else if(geometry == gFieldQuotient)
|
else if(geometry == gFieldQuotient)
|
||||||
pushScreen(showQuotientConfig);
|
pushScreen(showQuotientConfig);
|
||||||
@ -450,7 +447,7 @@ void showEuclideanMenu() {
|
|||||||
else {
|
else {
|
||||||
dialog::init(XLAT("experiment with geometry"));
|
dialog::init(XLAT("experiment with geometry"));
|
||||||
|
|
||||||
dialog::addSelItem(XLAT("geometry"), XLAT(ginf[geometry].name) + XLAT(bitruncnames[nonbitrunc]), '5');
|
dialog::addSelItem(XLAT("geometry"), XLAT(ginf[geometry].name) + XLAT(bitruncnames[int(variation)]), '5');
|
||||||
dialog::addBreak(50);
|
dialog::addBreak(50);
|
||||||
|
|
||||||
generateLandList([] (eLand l) { return land_validity(l).flags & lv::appears_in_geom_exp; });
|
generateLandList([] (eLand l) { return land_validity(l).flags & lv::appears_in_geom_exp; });
|
||||||
@ -552,9 +549,7 @@ int read_geom_args() {
|
|||||||
|
|
||||||
fgeomextras[current_extra].current_prime_id = b;
|
fgeomextras[current_extra].current_prime_id = b;
|
||||||
enableFieldChange();
|
enableFieldChange();
|
||||||
if(geometry != gFieldQuotient) {
|
set_geometry(gFieldQuotient);
|
||||||
targetgeometry = gFieldQuotient; stop_game_and_switch_mode(rg::geometry);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if(argis("-cs")) {
|
else if(argis("-cs")) {
|
||||||
shift(); cheat();
|
shift(); cheat();
|
||||||
@ -586,19 +581,17 @@ int read_geom_args() {
|
|||||||
torusconfig::dy = torusconfig::sdy;
|
torusconfig::dy = torusconfig::sdy;
|
||||||
torusconfig::activate();
|
torusconfig::activate();
|
||||||
}
|
}
|
||||||
TOGGLE('7', nonbitrunc, stop_game_and_switch_mode(rg::bitrunc))
|
TOGGLE('7', PURE, set_variation(PURE ? eVariation::bitruncated : eVariation::pure))
|
||||||
else if(argis("-geo")) {
|
else if(argis("-geo")) {
|
||||||
PHASEFROM(2);
|
PHASEFROM(2);
|
||||||
shift(); targetgeometry = (eGeometry) argi();
|
shift();
|
||||||
if(targetgeometry != geometry)
|
set_geometry((eGeometry) argi());
|
||||||
stop_game_and_switch_mode(rg::geometry);
|
|
||||||
}
|
}
|
||||||
else if(argis("-gp")) {
|
else if(argis("-gp")) {
|
||||||
PHASEFROM(2);
|
PHASEFROM(2);
|
||||||
stop_game_and_switch_mode(rg::nothing);
|
|
||||||
shift(); gp::param.first = argi();
|
shift(); gp::param.first = argi();
|
||||||
shift(); gp::param.second = argi();
|
shift(); gp::param.second = argi();
|
||||||
stop_game_and_switch_mode(rg::gp);
|
set_variation(eVariation::goldberg);
|
||||||
}
|
}
|
||||||
else if(argis("-fi")) {
|
else if(argis("-fi")) {
|
||||||
fieldpattern::info();
|
fieldpattern::info();
|
||||||
|
14
geometry.cpp
14
geometry.cpp
@ -52,7 +52,7 @@ void precalc() {
|
|||||||
// dynamicval<eGeometry> g(geometry, gNormal);
|
// dynamicval<eGeometry> g(geometry, gNormal);
|
||||||
// precalc(); }
|
// precalc(); }
|
||||||
// for(int i=0; i<S84; i++) spinmatrix[i] = spin(i * M_PI / S42);
|
// for(int i=0; i<S84; i++) spinmatrix[i] = spin(i * M_PI / S42);
|
||||||
if(a4 && nonbitrunc) {
|
if(a4 && !BITRUNCATED) {
|
||||||
crossf = .5;
|
crossf = .5;
|
||||||
hexf = .5;
|
hexf = .5;
|
||||||
hcrossf = crossf * sqrt(2) / 2;
|
hcrossf = crossf * sqrt(2) / 2;
|
||||||
@ -62,7 +62,7 @@ void precalc() {
|
|||||||
rhexf = crossf * sqrt(2) / 2;
|
rhexf = crossf * sqrt(2) / 2;
|
||||||
tessf = crossf;
|
tessf = crossf;
|
||||||
}
|
}
|
||||||
else if(a4) {
|
else if(a4 && BITRUNCATED) {
|
||||||
ld s2 = sqrt(2);
|
ld s2 = sqrt(2);
|
||||||
ld xx = 1 - s2 / 2;
|
ld xx = 1 - s2 / 2;
|
||||||
crossf = .5;
|
crossf = .5;
|
||||||
@ -121,7 +121,7 @@ void precalc() {
|
|||||||
else {
|
else {
|
||||||
hcrossf = hdist(xpush0(tessf), xspinpush0(2*M_PI/S7, tessf)) / 2;
|
hcrossf = hdist(xpush0(tessf), xspinpush0(2*M_PI/S7, tessf)) / 2;
|
||||||
}
|
}
|
||||||
crossf = nonbitrunc ? tessf : hcrossf;
|
crossf = BITRUNCATED ? hcrossf : tessf;
|
||||||
|
|
||||||
fmin = 0, fmax = tessf;
|
fmin = 0, fmax = tessf;
|
||||||
for(int p=0; p<100; p++) {
|
for(int p=0; p<100; p++) {
|
||||||
@ -134,9 +134,9 @@ void precalc() {
|
|||||||
}
|
}
|
||||||
hexf = fmin;
|
hexf = fmin;
|
||||||
|
|
||||||
rhexf = nonbitrunc ? hcrossf : hexf;
|
rhexf = BITRUNCATED ? hexf : hcrossf;
|
||||||
|
|
||||||
if(!euclid && !nonbitrunc && !(S7&1))
|
if(!euclid && BITRUNCATED && !(S7&1))
|
||||||
hexshift = ALPHA/2 + ALPHA * ((S7-1)/2) + M_PI;
|
hexshift = ALPHA/2 + ALPHA * ((S7-1)/2) + M_PI;
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
@ -160,7 +160,7 @@ void precalc() {
|
|||||||
printf("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,
|
printf("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,
|
||||||
hexhexdist, hexvdist);
|
hexhexdist, hexvdist);
|
||||||
|
|
||||||
base_distlimit = ginf[geometry].distlimit[nonbitrunc];
|
base_distlimit = ginf[geometry].distlimit[!BITRUNCATED];
|
||||||
|
|
||||||
gp::compute_geometry();
|
gp::compute_geometry();
|
||||||
irr::compute_geometry();
|
irr::compute_geometry();
|
||||||
@ -242,7 +242,7 @@ namespace geom3 {
|
|||||||
string invalid;
|
string invalid;
|
||||||
|
|
||||||
ld actual_wall_height() {
|
ld actual_wall_height() {
|
||||||
if(gp::on && gp_autoscale_heights)
|
if(GOLDBERG && gp_autoscale_heights)
|
||||||
return wall_height * min<ld>(4 * gp::scale, 1);
|
return wall_height * min<ld>(4 * gp::scale, 1);
|
||||||
return wall_height;
|
return wall_height;
|
||||||
}
|
}
|
||||||
|
@ -20,12 +20,12 @@ void fixelliptic(hyperpoint& h) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
transmatrix master_relative(cell *c, bool get_inverse) {
|
transmatrix master_relative(cell *c, bool get_inverse) {
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
int id = irr::cellindex[c];
|
int id = irr::cellindex[c];
|
||||||
ld alpha = 2 * M_PI / S7 * irr::periodmap[c->master].base.spin;
|
ld alpha = 2 * M_PI / S7 * irr::periodmap[c->master].base.spin;
|
||||||
return get_inverse ? irr::cells[id].rpusher * spin(-alpha-master_to_c7_angle()): spin(alpha + master_to_c7_angle()) * irr::cells[id].pusher;
|
return get_inverse ? irr::cells[id].rpusher * spin(-alpha-master_to_c7_angle()): spin(alpha + master_to_c7_angle()) * irr::cells[id].pusher;
|
||||||
}
|
}
|
||||||
else if(gp::on) {
|
else if(GOLDBERG) {
|
||||||
if(c == c->master->c7) {
|
if(c == c->master->c7) {
|
||||||
return spin((get_inverse?-1:1) * master_to_c7_angle());
|
return spin((get_inverse?-1:1) * master_to_c7_angle());
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ transmatrix master_relative(cell *c, bool get_inverse) {
|
|||||||
return T;
|
return T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!nonbitrunc && !euclid) {
|
else if(BITRUNCATED && !euclid) {
|
||||||
for(int d=0; d<S7; d++) if(c->master->c7->move(d) == c)
|
for(int d=0; d<S7; d++) if(c->master->c7->move(d) == c)
|
||||||
return (get_inverse?invhexmove:hexmove)[d];
|
return (get_inverse?invhexmove:hexmove)[d];
|
||||||
return Id;
|
return Id;
|
||||||
@ -196,11 +196,11 @@ transmatrix calc_relative_matrix_help(cell *c, heptagon *h1) {
|
|||||||
transmatrix gm = Id;
|
transmatrix gm = Id;
|
||||||
heptagon *h2 = c->master;
|
heptagon *h2 = c->master;
|
||||||
transmatrix where = Id;
|
transmatrix where = Id;
|
||||||
if(gp::on && c != c->master->c7) {
|
if(GOLDBERG && c != c->master->c7) {
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
where = gp::Tf[li.last_dir][li.relative.first&31][li.relative.second&31][fix6(li.total_dir)];
|
where = gp::Tf[li.last_dir][li.relative.first&31][li.relative.second&31][fix6(li.total_dir)];
|
||||||
}
|
}
|
||||||
else if(!nonbitrunc) for(int d=0; d<S7; d++) if(h2->c7->move(d) == c)
|
else if(BITRUNCATED) for(int d=0; d<S7; d++) if(h2->c7->move(d) == c)
|
||||||
where = hexmove[d];
|
where = hexmove[d];
|
||||||
// always add to last!
|
// always add to last!
|
||||||
while(h1 != h2) {
|
while(h1 != h2) {
|
||||||
@ -278,7 +278,7 @@ void virtualRebase(cell*& base, T& at, bool tohex, const U& check) {
|
|||||||
at = bestV * at;
|
at = bestV * at;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(tohex && !nonbitrunc) for(int d=0; d<S7; d++) {
|
if(tohex && BITRUNCATED) for(int d=0; d<S7; d++) {
|
||||||
cell *c = createMov(base, d);
|
cell *c = createMov(base, d);
|
||||||
transmatrix V2 = spin(-base->c.spin(d)*2*M_PI/S6) * invhexmove[d];
|
transmatrix V2 = spin(-base->c.spin(d)*2*M_PI/S6) * invhexmove[d];
|
||||||
double newz = check(V2 *at) [2];
|
double newz = check(V2 *at) [2];
|
||||||
@ -343,12 +343,12 @@ void virtualRebaseSimple(heptagon*& base, transmatrix& at) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double cellgfxdist(cell *c, int i) {
|
double cellgfxdist(cell *c, int i) {
|
||||||
if(gp::on || irr::on) return hdist0(tC0(calc_relative_matrix(c->move(i), c, i)));
|
if(NONSTDVAR) return hdist0(tC0(calc_relative_matrix(c->move(i), c, i)));
|
||||||
return nonbitrunc ? tessf * gp::scale : (c->type == 6 && (i&1)) ? hexhexdist : crossf;
|
return !BITRUNCATED ? tessf * gp::scale : (c->type == 6 && (i&1)) ? hexhexdist : crossf;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix cellrelmatrix(cell *c, int i) {
|
transmatrix cellrelmatrix(cell *c, int i) {
|
||||||
if(gp::on) return calc_relative_matrix(c->move(i), c, i);
|
if(NONSTDVAR) return calc_relative_matrix(c->move(i), c, i);
|
||||||
double d = cellgfxdist(c, i);
|
double d = cellgfxdist(c, i);
|
||||||
return ddspin(c, i) * xpush(d) * iddspin(c->move(i), c->c.spin(i), euclid ? 0 : M_PI);
|
return ddspin(c, i) * xpush(d) * iddspin(c->move(i), c->c.spin(i), euclid ? 0 : M_PI);
|
||||||
}
|
}
|
||||||
@ -356,7 +356,7 @@ transmatrix cellrelmatrix(cell *c, int i) {
|
|||||||
double randd() { return (rand() + .5) / (RAND_MAX + 1.); }
|
double randd() { return (rand() + .5) / (RAND_MAX + 1.); }
|
||||||
|
|
||||||
hyperpoint randomPointIn(int t) {
|
hyperpoint randomPointIn(int t) {
|
||||||
if(irr::on || gp::on || archimedean) {
|
if(NONSTDVAR || archimedean) {
|
||||||
// Let these geometries be less confusing.
|
// Let these geometries be less confusing.
|
||||||
// Also easier to implement ;)
|
// Also easier to implement ;)
|
||||||
return xspinpush0(2 * M_PI * randd(), asinh(randd() / 20));
|
return xspinpush0(2 * M_PI * randd(), asinh(randd() / 20));
|
||||||
@ -364,7 +364,7 @@ hyperpoint randomPointIn(int t) {
|
|||||||
while(true) {
|
while(true) {
|
||||||
hyperpoint h = xspinpush0(2*M_PI*(randd()-.5)/t, asinh(randd()));
|
hyperpoint h = xspinpush0(2*M_PI*(randd()-.5)/t, asinh(randd()));
|
||||||
double d =
|
double d =
|
||||||
nonbitrunc ? tessf : t == 6 ? hexhexdist : crossf;
|
PURE ? tessf : t == 6 ? hexhexdist : crossf;
|
||||||
if(hdist0(h) < hdist0(xpush(-d) * h))
|
if(hdist0(h) < hdist0(xpush(-d) * h))
|
||||||
return spin(2*M_PI/t * (rand() % t)) * h;
|
return spin(2*M_PI/t * (rand() % t)) * h;
|
||||||
}
|
}
|
||||||
@ -375,8 +375,8 @@ hyperpoint get_horopoint(ld y, ld x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
||||||
if(gp::on) return gp::get_corner_position(c, cid, cf);
|
if(GOLDBERG) return gp::get_corner_position(c, cid, cf);
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
auto& vs = irr::cells[irr::cellindex[c]];
|
auto& vs = irr::cells[irr::cellindex[c]];
|
||||||
return mid_at_actual(vs.vertices[cid], 3/cf);
|
return mid_at_actual(vs.vertices[cid], 3/cf);
|
||||||
}
|
}
|
||||||
@ -400,10 +400,10 @@ hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
|||||||
auto& t = ac.get_triangle(c->master, cid-1);
|
auto& t = ac.get_triangle(c->master, cid-1);
|
||||||
return xspinpush0(-t.first, t.second * 3 / cf * (ac.real_faces == 0 ? 0.999 : 1));
|
return xspinpush0(-t.first, t.second * 3 / cf * (ac.real_faces == 0 ? 0.999 : 1));
|
||||||
}
|
}
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
return ddspin(c,cid,M_PI/S7) * xpush0(hcrossf * 3 / cf);
|
return ddspin(c,cid,M_PI/S7) * xpush0(hcrossf * 3 / cf);
|
||||||
}
|
}
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
if(!ishept(c))
|
if(!ishept(c))
|
||||||
return ddspin(c,cid,M_PI/S6) * xpush0(hexvdist * 3 / cf);
|
return ddspin(c,cid,M_PI/S6) * xpush0(hexvdist * 3 / cf);
|
||||||
else
|
else
|
||||||
@ -413,14 +413,14 @@ hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint nearcorner(cell *c, int i) {
|
hyperpoint nearcorner(cell *c, int i) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
cellwalker cw(c, i);
|
cellwalker cw(c, i);
|
||||||
cw += wstep;
|
cw += wstep;
|
||||||
transmatrix cwm = calc_relative_matrix(cw.at, c, i);
|
transmatrix cwm = calc_relative_matrix(cw.at, c, i);
|
||||||
if(elliptic && cwm[2][2] < 0) cwm = centralsym * cwm;
|
if(elliptic && cwm[2][2] < 0) cwm = centralsym * cwm;
|
||||||
return cwm * C0;
|
return cwm * C0;
|
||||||
}
|
}
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
auto& vs = irr::cells[irr::cellindex[c]];
|
auto& vs = irr::cells[irr::cellindex[c]];
|
||||||
hyperpoint nc = vs.jpoints[vs.neid[i]];
|
hyperpoint nc = vs.jpoints[vs.neid[i]];
|
||||||
return mid_at(C0, nc, .94);
|
return mid_at(C0, nc, .94);
|
||||||
@ -454,7 +454,7 @@ hyperpoint nearcorner(cell *c, int i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint farcorner(cell *c, int i, int which) {
|
hyperpoint farcorner(cell *c, int i, int which) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
cellwalker cw(c, i);
|
cellwalker cw(c, i);
|
||||||
int hint = cw.spin;
|
int hint = cw.spin;
|
||||||
cw += wstep;
|
cw += wstep;
|
||||||
@ -467,7 +467,7 @@ hyperpoint farcorner(cell *c, int i, int which) {
|
|||||||
if(which == 1)
|
if(which == 1)
|
||||||
return cwm * get_corner_position(li1, (cw-1).spin);
|
return cwm * get_corner_position(li1, (cw-1).spin);
|
||||||
}
|
}
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
auto& vs = irr::cells[irr::cellindex[c]];
|
auto& vs = irr::cells[irr::cellindex[c]];
|
||||||
int neid = vs.neid[i];
|
int neid = vs.neid[i];
|
||||||
int spin = vs.spin[i];
|
int spin = vs.spin[i];
|
||||||
@ -500,8 +500,8 @@ hyperpoint midcorner(cell *c, int i, ld v) {
|
|||||||
|
|
||||||
hyperpoint get_warp_corner(cell *c, int cid) {
|
hyperpoint get_warp_corner(cell *c, int cid) {
|
||||||
// midcorner(c, cid, .5) but sometimes easier versions exist
|
// midcorner(c, cid, .5) but sometimes easier versions exist
|
||||||
if(gp::on) return gp::get_corner_position(c, cid, 2);
|
if(GOLDBERG) return gp::get_corner_position(c, cid, 2);
|
||||||
if(irr::on || archimedean) return midcorner(c, cid, .5);
|
if(IRREGULAR || archimedean) return midcorner(c, cid, .5);
|
||||||
return ddspin(c,cid,M_PI/S7) * xpush0(tessf/2);
|
return ddspin(c,cid,M_PI/S7) * xpush0(tessf/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
54
goldberg.cpp
54
goldberg.cpp
@ -1,5 +1,4 @@
|
|||||||
namespace hr { namespace gp {
|
namespace hr { namespace gp {
|
||||||
bool on;
|
|
||||||
loc param(1, 0);
|
loc param(1, 0);
|
||||||
|
|
||||||
hyperpoint next;
|
hyperpoint next;
|
||||||
@ -578,7 +577,7 @@ namespace hr { namespace gp {
|
|||||||
|
|
||||||
void compute_geometry() {
|
void compute_geometry() {
|
||||||
center_locs.clear();
|
center_locs.clear();
|
||||||
if(on) {
|
if(GOLDBERG) {
|
||||||
int x = param.first;
|
int x = param.first;
|
||||||
int y = param.second;
|
int y = param.second;
|
||||||
area = ((2*x+y) * (2*x+y) + y*y*3) / 4;
|
area = ((2*x+y) * (2*x+y) + y*y*3) / 4;
|
||||||
@ -626,11 +625,12 @@ namespace hr { namespace gp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
string operation_name() {
|
string operation_name() {
|
||||||
if(!gp::on) {
|
if(IRREGULAR)
|
||||||
if(irr::on) return XLAT("irregular");
|
return XLAT("irregular");
|
||||||
else if(nonbitrunc) return XLAT("OFF");
|
else if(PURE)
|
||||||
else return XLAT("bitruncated");
|
return XLAT("OFF");
|
||||||
}
|
else if(BITRUNCATED)
|
||||||
|
return XLAT("bitruncated");
|
||||||
else if(param == loc(1, 0))
|
else if(param == loc(1, 0))
|
||||||
return XLAT("OFF");
|
return XLAT("OFF");
|
||||||
else if(param == loc(1, 1) && S3 == 3)
|
else if(param == loc(1, 1) && S3 == 3)
|
||||||
@ -657,18 +657,15 @@ namespace hr { namespace gp {
|
|||||||
auto g = screens;
|
auto g = screens;
|
||||||
if(xy.first == 0 && xy.second == 0) xy.first = 1;
|
if(xy.first == 0 && xy.second == 0) xy.first = 1;
|
||||||
if(xy.first == 1 && xy.second == 0) {
|
if(xy.first == 1 && xy.second == 0) {
|
||||||
if(irr::on) stop_game_and_switch_mode(rg::bitrunc);
|
stop_game(); set_variation(eVariation::pure);
|
||||||
if(gp::on) stop_game_and_switch_mode(rg::bitrunc);
|
|
||||||
if(!nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);
|
|
||||||
}
|
}
|
||||||
else if(xy.first == 1 && xy.second == 1 && S3 == 3) {
|
else if(xy.first == 1 && xy.second == 1 && S3 == 3) {
|
||||||
if(gp::on) stop_game_and_switch_mode(rg::bitrunc);
|
stop_game(); set_variation(eVariation::bitruncated);
|
||||||
if(nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);
|
if(param != xy) need_reset_geometry = true;
|
||||||
param = xy;
|
param = xy;
|
||||||
stop_game_and_switch_mode(rg::gp);
|
stop_game(); set_variation(eVariation::goldberg);
|
||||||
}
|
}
|
||||||
start_game();
|
start_game();
|
||||||
screens = g;
|
screens = g;
|
||||||
@ -702,13 +699,13 @@ namespace hr { namespace gp {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(min_quality == 0 && min_quality_chess == 0) {
|
if(min_quality == 0 && min_quality_chess == 0) {
|
||||||
dialog::addBoolItem(XLAT("OFF"), param == loc(1,0) && !irr::on, 'a');
|
dialog::addBoolItem(XLAT("OFF"), param == loc(1,0) && !IRREGULAR, 'a');
|
||||||
dialog::lastItem().value = "GP(1,0)";
|
dialog::lastItem().value = "GP(1,0)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(min_quality_chess == 0)
|
if(min_quality_chess == 0)
|
||||||
dialog::addBoolItem(XLAT("bitruncated"), param == loc(1,1) && !nonbitrunc, 'b');
|
dialog::addBoolItem(XLAT("bitruncated"), param == loc(1,1) && BITRUNCATED, 'b');
|
||||||
dialog::lastItem().value = S3 == 3 ? "GP(1,1)" : XLAT(nonbitrunc ? "OFF" : "ON");
|
dialog::lastItem().value = S3 == 3 ? "GP(1,1)" : XLAT(BITRUNCATED ? "ON" : "OFF");
|
||||||
|
|
||||||
if(min_quality == 0 || min_quality_chess) {
|
if(min_quality == 0 || min_quality_chess) {
|
||||||
dialog::addBoolItem(XLAT(S3 == 3 ? "chamfered" : "expanded"), param == loc(2,0), 'c');
|
dialog::addBoolItem(XLAT(S3 == 3 ? "chamfered" : "expanded"), param == loc(2,0), 'c');
|
||||||
@ -720,7 +717,7 @@ namespace hr { namespace gp {
|
|||||||
dialog::lastItem().value = "GP(3,0)";
|
dialog::lastItem().value = "GP(3,0)";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dialog::addBoolItem(XLAT("rectified"), param == loc(1,1) && nonbitrunc, 'd');
|
dialog::addBoolItem(XLAT("rectified"), param == loc(1,1) && GOLDBERG, 'd');
|
||||||
dialog::lastItem().value = "GP(1,1)";
|
dialog::lastItem().value = "GP(1,1)";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -736,13 +733,13 @@ namespace hr { namespace gp {
|
|||||||
else if((config.first-config.second)%2 && min_quality_chess)
|
else if((config.first-config.second)%2 && min_quality_chess)
|
||||||
dialog::addInfo(XLAT("This pattern needs x-y divisible by 2"));
|
dialog::addInfo(XLAT("This pattern needs x-y divisible by 2"));
|
||||||
else
|
else
|
||||||
dialog::addBoolItem(XLAT("select"), param == internal_representation(config) && !irr::on, 'f');
|
dialog::addBoolItem(XLAT("select"), param == internal_representation(config) && !IRREGULAR, 'f');
|
||||||
|
|
||||||
if(irr::supports(geometry)) {
|
if(irr::supports(geometry)) {
|
||||||
dialog::addBoolItem(XLAT("irregular"), irr::on, 'i');
|
dialog::addBoolItem(XLAT("irregular"), IRREGULAR, 'i');
|
||||||
dialog::add_action([=] () {
|
dialog::add_action([=] () {
|
||||||
if(min_quality && !irr::bitruncations_requested) irr::bitruncations_requested++;
|
if(min_quality && !irr::bitruncations_requested) irr::bitruncations_requested++;
|
||||||
if(!irr::on) irr::visual_creator();
|
if(!IRREGULAR) irr::visual_creator();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -757,8 +754,11 @@ namespace hr { namespace gp {
|
|||||||
whirl_set(loc(1, 0));
|
whirl_set(loc(1, 0));
|
||||||
else if(uni == 'b') {
|
else if(uni == 'b') {
|
||||||
if(S3 == 4) {
|
if(S3 == 4) {
|
||||||
if(nonbitrunc || gp::on)
|
if(!BITRUNCATED) {
|
||||||
restart_game(rg::bitrunc);
|
stop_game();
|
||||||
|
set_variation(eVariation::bitruncated);
|
||||||
|
start_game();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
whirl_set(loc(1, 1));
|
whirl_set(loc(1, 1));
|
||||||
@ -783,8 +783,8 @@ namespace hr { namespace gp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loc univ_param() {
|
loc univ_param() {
|
||||||
if(on) return param;
|
if(GOLDBERG) return param;
|
||||||
else if(nonbitrunc) return loc(1,0);
|
else if(PURE) return loc(1,0);
|
||||||
else return loc(1,1);
|
else return loc(1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,14 +864,14 @@ namespace hr { namespace gp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
array<heptagon*, 3> get_masters(cell *c) {
|
array<heptagon*, 3> get_masters(cell *c) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
auto li = get_local_info(c);
|
auto li = get_local_info(c);
|
||||||
be_in_triangle(li);
|
be_in_triangle(li);
|
||||||
auto cm = c->master;
|
auto cm = c->master;
|
||||||
int i = li.last_dir;
|
int i = li.last_dir;
|
||||||
return make_array(cm, createStep(cm, i), createStep(cm, fix7(i+1)));
|
return make_array(cm, createStep(cm, i), createStep(cm, fix7(i+1)));
|
||||||
}
|
}
|
||||||
else if(irr::on)
|
else if(IRREGULAR)
|
||||||
return irr::get_masters(c);
|
return irr::get_masters(c);
|
||||||
else
|
else
|
||||||
return make_array(c->move(0)->master, c->move(2)->master, c->move(4)->master);
|
return make_array(c->move(0)->master, c->move(2)->master, c->move(4)->master);
|
||||||
|
60
graph.cpp
60
graph.cpp
@ -158,8 +158,8 @@ void drawSpeed(const transmatrix& V) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ctof(cell *c) {
|
int ctof(cell *c) {
|
||||||
if(irr::on) return irr::ctof(c);
|
if(IRREGULAR) return irr::ctof(c);
|
||||||
if(nonbitrunc && !gp::on) return 1;
|
if(PURE) return 1;
|
||||||
// if(euclid) return 0;
|
// if(euclid) return 0;
|
||||||
if(!c) return 1;
|
if(!c) return 1;
|
||||||
if(binarytiling) return c->type == 7;
|
if(binarytiling) return c->type == 7;
|
||||||
@ -239,7 +239,7 @@ ld displayspin(cell *c, int d) {
|
|||||||
auto& t1 = arcm::current.get_triangle(c->master, d-1);
|
auto& t1 = arcm::current.get_triangle(c->master, d-1);
|
||||||
return -(t1.first + M_PI / c->type);
|
return -(t1.first + M_PI / c->type);
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
auto id = irr::cellindex[c];
|
auto id = irr::cellindex[c];
|
||||||
auto& vs = irr::cells[id];
|
auto& vs = irr::cells[id];
|
||||||
if(d < 0 || d >= c->type) return 0;
|
if(d < 0 || d >= c->type) return 0;
|
||||||
@ -259,8 +259,8 @@ ld displayspin(cell *c, int d) {
|
|||||||
|
|
||||||
double hexshiftat(cell *c) {
|
double hexshiftat(cell *c) {
|
||||||
if(binarytiling) return 0;
|
if(binarytiling) return 0;
|
||||||
if(ctof(c) && S7==6 && S3 == 4 && !nonbitrunc) return hexshift + 2*M_PI/S7;
|
if(ctof(c) && S7==6 && S3 == 4 && BITRUNCATED) return hexshift + 2*M_PI/S7;
|
||||||
if(ctof(c) && (S7==8 || S7 == 4) && S3 == 3 && !nonbitrunc) return hexshift + 2*M_PI/S7;
|
if(ctof(c) && (S7==8 || S7 == 4) && S3 == 3 && BITRUNCATED) return hexshift + 2*M_PI/S7;
|
||||||
if(hexshift && ctof(c)) return hexshift;
|
if(hexshift && ctof(c)) return hexshift;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -299,17 +299,17 @@ void drawPlayerEffects(const transmatrix& V, cell *c, bool onplayer) {
|
|||||||
int& ang = angle[multi::cpid];
|
int& ang = angle[multi::cpid];
|
||||||
ang %= S42;
|
ang %= S42;
|
||||||
|
|
||||||
transmatrix Vnow = gmatrix[c] * rgpushxto0(inverse(gmatrix[c]) * tC0(V)) * (irr::on ? ddspin(c,0,M_PI) : spin(-hexshiftat(c)));
|
transmatrix Vnow = gmatrix[c] * rgpushxto0(inverse(gmatrix[c]) * tC0(V)) * (IRREGULAR ? ddspin(c,0,M_PI) : spin(-hexshiftat(c)));
|
||||||
|
|
||||||
#if CAP_QUEUE
|
#if CAP_QUEUE
|
||||||
if(!masterless) for(int a=0; a<S42; a++) {
|
if(!masterless) for(int a=0; a<S42; a++) {
|
||||||
int dda = S42 + (-1-2*a);
|
int dda = S42 + (-1-2*a);
|
||||||
if(a == ang && items[itOrbSword]) continue;
|
if(a == ang && items[itOrbSword]) continue;
|
||||||
if(nonbitrunc && !gp::on && !irr::on && a%3 != ang%3) continue;
|
if(PURE && a%3 != ang%3) continue;
|
||||||
if((a+S21)%S42 == ang && items[itOrbSword2]) continue;
|
if((a+S21)%S42 == ang && items[itOrbSword2]) continue;
|
||||||
bool longer = sword::pos(cwt.at, a-1) != sword::pos(cwt.at, a+1);
|
bool longer = sword::pos(cwt.at, a-1) != sword::pos(cwt.at, a+1);
|
||||||
int col = darkena(0xC0C0C0, 0, 0xFF);
|
int col = darkena(0xC0C0C0, 0, 0xFF);
|
||||||
queueline(Vnow*xspinpush0(dda * M_PI / S42, nonbitrunc ? 0.6 * gp::scale : longer ? 0.36 : 0.4), Vnow*xspinpush0(dda * M_PI/S42, nonbitrunc ? 0.7 * gp::scale : longer ? 0.44 : 0.42), col, 1);
|
queueline(Vnow*xspinpush0(dda * M_PI / S42, (!BITRUNCATED) ? 0.6 * gp::scale : longer ? 0.36 : 0.4), Vnow*xspinpush0(dda * M_PI/S42, (!BITRUNCATED) ? 0.7 * gp::scale : longer ? 0.44 : 0.42), col, 1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2111,7 +2111,7 @@ bool drawMonster(const transmatrix& Vparam, int ct, cell *c, int col) {
|
|||||||
Vb = Vb * pispin;
|
Vb = Vb * pispin;
|
||||||
Vb = Vb * xpush(tentacle_length - cellgfxdist(c, c->mondir));
|
Vb = Vb * xpush(tentacle_length - cellgfxdist(c, c->mondir));
|
||||||
}
|
}
|
||||||
else if(gp::on || irr::on) {
|
else if(NONSTDVAR) {
|
||||||
transmatrix T = calc_relative_matrix(c->move(c->mondir), c, c->mondir);
|
transmatrix T = calc_relative_matrix(c->move(c->mondir), c, c->mondir);
|
||||||
Vb = Vb * T * rspintox(tC0(inverse(T))) * xpush(tentacle_length);
|
Vb = Vb * T * rspintox(tC0(inverse(T))) * xpush(tentacle_length);
|
||||||
}
|
}
|
||||||
@ -2121,7 +2121,7 @@ bool drawMonster(const transmatrix& Vparam, int ct, cell *c, int col) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if(ctof(c) && !masterless) Vb = Vb * xpush(hexhexdist - hcrossf);
|
// if(ctof(c) && !masterless) Vb = Vb * xpush(hexhexdist - hcrossf);
|
||||||
// return nonbitrunc ? tessf * gp::scale : (c->type == 6 && (i&1)) ? hexhexdist : crossf;
|
// return (!BITRUNCATED) ? tessf * gp::scale : (c->type == 6 && (i&1)) ? hexhexdist : crossf;
|
||||||
return drawMonsterTypeDH(m, c, Vb, col, darkhistory, footphase);
|
return drawMonsterTypeDH(m, c, Vb, col, darkhistory, footphase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2392,7 +2392,7 @@ int countMinesAround(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
transmatrix applyPatterndir(cell *c, const patterns::patterninfo& si) {
|
transmatrix applyPatterndir(cell *c, const patterns::patterninfo& si) {
|
||||||
if(gp::on || irr::on || binarytiling) return Id;
|
if(NONSTDVAR || binarytiling) return Id;
|
||||||
transmatrix V = ddspin(c, si.dir, M_PI);
|
transmatrix V = ddspin(c, si.dir, M_PI);
|
||||||
if(si.reflect) V = V * Mirror;
|
if(si.reflect) V = V * Mirror;
|
||||||
return V * iddspin(c, 0, M_PI);
|
return V * iddspin(c, 0, M_PI);
|
||||||
@ -2419,7 +2419,7 @@ void set_towerfloor(cell *c, cellfunction *cf = coastvalEdge) {
|
|||||||
if(i == 9) j = 4;
|
if(i == 9) j = 4;
|
||||||
if(i == 10) j = 5;
|
if(i == 10) j = 5;
|
||||||
if(i == 13) j = 6;
|
if(i == 13) j = 6;
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
if(i == 7) j = 7;
|
if(i == 7) j = 7;
|
||||||
if(i == 11) j = 8;
|
if(i == 11) j = 8;
|
||||||
if(i == 15) j = 9;
|
if(i == 15) j = 9;
|
||||||
@ -2442,7 +2442,7 @@ void set_zebrafloor(cell *c) {
|
|||||||
auto si = patterns::getpatterninfo(c, patterns::PAT_ZEBRA, patterns::SPF_SYM0123);
|
auto si = patterns::getpatterninfo(c, patterns::PAT_ZEBRA, patterns::SPF_SYM0123);
|
||||||
|
|
||||||
int j;
|
int j;
|
||||||
if(nonbitrunc) j = 4;
|
if(PURE) j = 4;
|
||||||
else if(si.id >=4 && si.id < 16) j = 2;
|
else if(si.id >=4 && si.id < 16) j = 2;
|
||||||
else if(si.id >= 16 && si.id < 28) j = 1;
|
else if(si.id >= 16 && si.id < 28) j = 1;
|
||||||
else if(si.id >= 28 && si.id < 40) j = 3;
|
else if(si.id >= 28 && si.id < 40) j = 3;
|
||||||
@ -2464,7 +2464,7 @@ void set_reptile_floor(cell *c, const transmatrix& V, int col, bool nodetails =
|
|||||||
int j;
|
int j;
|
||||||
|
|
||||||
if(!wmescher) j = 4;
|
if(!wmescher) j = 4;
|
||||||
else if(nonbitrunc) j = 0;
|
else if(!BITRUNCATED) j = 0;
|
||||||
else if(si.id < 4) j = 0;
|
else if(si.id < 4) j = 0;
|
||||||
else if(si.id >=4 && si.id < 16) j = 1;
|
else if(si.id >=4 && si.id < 16) j = 1;
|
||||||
else if(si.id >= 16 && si.id < 28) j = 2;
|
else if(si.id >= 16 && si.id < 28) j = 2;
|
||||||
@ -2523,7 +2523,7 @@ void draw_reptile(cell *c, const transmatrix &V, int col) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void set_emeraldfloor(cell *c) {
|
void set_emeraldfloor(cell *c) {
|
||||||
if(!masterless && !nonbitrunc) {
|
if(!masterless && BITRUNCATED) {
|
||||||
auto si = patterns::getpatterninfo(c, patterns::PAT_EMERALD, patterns::SPF_SYM0123);
|
auto si = patterns::getpatterninfo(c, patterns::PAT_EMERALD, patterns::SPF_SYM0123);
|
||||||
|
|
||||||
int j = -1;
|
int j = -1;
|
||||||
@ -3096,13 +3096,13 @@ bool noAdjacentChasms(cell *c) {
|
|||||||
|
|
||||||
// does the current geometry allow nice duals
|
// does the current geometry allow nice duals
|
||||||
bool has_nice_dual() {
|
bool has_nice_dual() {
|
||||||
if(irr::on) return irr::bitruncations_performed > 0;
|
if(IRREGULAR) return irr::bitruncations_performed > 0;
|
||||||
if(archimedean) return geosupport_football() >= 2;
|
if(archimedean) return geosupport_football() >= 2;
|
||||||
if(binarytiling) return false;
|
if(binarytiling) return false;
|
||||||
if(!nonbitrunc) return true;
|
if(BITRUNCATED) return true;
|
||||||
if((S7 & 1) == 0) return true;
|
|
||||||
if(!gp::on) return false;
|
|
||||||
if(a4) return false;
|
if(a4) return false;
|
||||||
|
if((S7 & 1) == 0) return true;
|
||||||
|
if(PURE) return false;
|
||||||
return (gp::param.first + gp::param.second * 2) % 3 == 0;
|
return (gp::param.first + gp::param.second * 2) % 3 == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3112,7 +3112,7 @@ bool is_nice_dual(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool use_swapped_duals() {
|
bool use_swapped_duals() {
|
||||||
return (masterless && !a4) || gp::on;
|
return (masterless && !a4) || GOLDBERG;
|
||||||
}
|
}
|
||||||
|
|
||||||
void floorShadow(cell *c, const transmatrix& V, int col) {
|
void floorShadow(cell *c, const transmatrix& V, int col) {
|
||||||
@ -3199,7 +3199,7 @@ bool placeSidewall(cell *c, int i, int sidepar, const transmatrix& V, int col) {
|
|||||||
|
|
||||||
transmatrix V2 = V * ddspin(c, i);
|
transmatrix V2 = V * ddspin(c, i);
|
||||||
|
|
||||||
if(gp::on || irr::on || binarytiling || archimedean) {
|
if(binarytiling || archimedean || NONSTDVAR) {
|
||||||
draw_shapevec(c, V2, qfi.fshape->gpside[sidepar][i], col, prio);
|
draw_shapevec(c, V2, qfi.fshape->gpside[sidepar][i], col, prio);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -3785,7 +3785,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
auto si = patterns::getpatterninfo0(c);
|
auto si = patterns::getpatterninfo0(c);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool eoh = euclid || nonbitrunc;
|
bool eoh = euclid || !BITRUNCATED;
|
||||||
|
|
||||||
if(drawing_usershape_on(c, mapeditor::sgFloor))
|
if(drawing_usershape_on(c, mapeditor::sgFloor))
|
||||||
mapeditor::drawtrans = V * applyPatterndir(c, si);
|
mapeditor::drawtrans = V * applyPatterndir(c, si);
|
||||||
@ -3834,7 +3834,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
onleft = !onleft;
|
onleft = !onleft;
|
||||||
if(c->type == 6 && d != -1 && c->move(d)->barleft == laMirror)
|
if(c->type == 6 && d != -1 && c->move(d)->barleft == laMirror)
|
||||||
onleft = !onleft;
|
onleft = !onleft;
|
||||||
if(nonbitrunc) onleft = !onleft;
|
if(PURE) onleft = !onleft;
|
||||||
|
|
||||||
if(d == -1) {
|
if(d == -1) {
|
||||||
for(d=0; d<c->type; d++)
|
for(d=0; d<c->type; d++)
|
||||||
@ -4061,7 +4061,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
|
|
||||||
case laSwitch:
|
case laSwitch:
|
||||||
set_floor(shSwitchFloor);
|
set_floor(shSwitchFloor);
|
||||||
if(ctof(c) && !gp::on && !irr::on && !archimedean && !binarytiling) for(int i=0; i<c->type; i++)
|
if(ctof(c) && STDVAR && !archimedean && !binarytiling) for(int i=0; i<c->type; i++)
|
||||||
queuepoly(Vf * ddspin(c, i, M_PI/S7) * xpush(rhexf), shSwitchDisk, darkena(minf[active_switch()].color, fd, 0xFF));
|
queuepoly(Vf * ddspin(c, i, M_PI/S7) * xpush(rhexf), shSwitchDisk, darkena(minf[active_switch()].color, fd, 0xFF));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4252,7 +4252,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
if(pseudohept(c) && (
|
if(pseudohept(c) && (
|
||||||
c->land == laRedRock ||
|
c->land == laRedRock ||
|
||||||
vid.darkhepta ||
|
vid.darkhepta ||
|
||||||
(c->land == laClearing && nonbitrunc))) {
|
(c->land == laClearing && !BITRUNCATED))) {
|
||||||
queuepoly((*Vdp), shHeptaMarker, wmblack ? 0x80808080 : 0x00000080);
|
queuepoly((*Vdp), shHeptaMarker, wmblack ? 0x80808080 : 0x00000080);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4673,7 +4673,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
calcAirdir(c2); // printf("airdir = %d\n", airdir);
|
calcAirdir(c2); // printf("airdir = %d\n", airdir);
|
||||||
transmatrix V0 = ddspin(c, i, M_PI);
|
transmatrix V0 = ddspin(c, i, M_PI);
|
||||||
|
|
||||||
double ph = ticks / (nonbitrunc?150:75.0) + airdir * M_PI / (S21+.0);
|
double ph = ticks / (PURE?150:75.0) + airdir * M_PI / (S21+.0);
|
||||||
|
|
||||||
int aircol = 0x8080FF00 | int(32 + 32 * -cos(ph));
|
int aircol = 0x8080FF00 | int(32 + 32 * -cos(ph));
|
||||||
|
|
||||||
@ -4718,7 +4718,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
|
|
||||||
transmatrix V0 = spin(hdir);
|
transmatrix V0 = spin(hdir);
|
||||||
|
|
||||||
double ldist = nonbitrunc ? crossf : c->type == 6 ? .2840 : 0.3399;
|
double ldist = PURE ? crossf : c->type == 6 ? .2840 : 0.3399;
|
||||||
|
|
||||||
poly_outline = OUTLINE_TRANS;
|
poly_outline = OUTLINE_TRANS;
|
||||||
queuepoly((*Vdp)*V0*xpush(ldist*(2*ph1-1)), shDisk, aircol);
|
queuepoly((*Vdp)*V0*xpush(ldist*(2*ph1-1)), shDisk, aircol);
|
||||||
@ -4734,7 +4734,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
if(vid.grid) {
|
if(vid.grid) {
|
||||||
dynamicval<ld> lw(vid.linewidth, vid.linewidth);
|
dynamicval<ld> lw(vid.linewidth, vid.linewidth);
|
||||||
|
|
||||||
if(gp::on) vid.linewidth *= gp::scale * 2;
|
if(GOLDBERG) vid.linewidth *= gp::scale * 2;
|
||||||
|
|
||||||
// sphere: 0.3948
|
// sphere: 0.3948
|
||||||
// sphere heptagonal: 0.5739
|
// sphere heptagonal: 0.5739
|
||||||
@ -5082,7 +5082,7 @@ void drawFlashes() {
|
|||||||
kill = tim > 300;
|
kill = tim > 300;
|
||||||
int partcol = darkena(f.color, 0, max(255 - tim*255/300, 0));
|
int partcol = darkena(f.color, 0, max(255 - tim*255/300, 0));
|
||||||
poly_outline = OUTLINE_DEFAULT;
|
poly_outline = OUTLINE_DEFAULT;
|
||||||
ld gps = gp::on ? gp::scale * 1.6 : 1;
|
ld gps = GOLDBERG ? gp::scale * 1.6 : 1;
|
||||||
queuepoly(V * spin(f.angle) * xpush(f.spd * tim * gps / 50000.), shParticle[f.size], partcol);
|
queuepoly(V * spin(f.angle) * xpush(f.spd * tim * gps / 50000.), shParticle[f.size], partcol);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5206,7 +5206,7 @@ void drawthemap() {
|
|||||||
mmspatial = vid.monmode == 4 || vid.monmode == 5;
|
mmspatial = vid.monmode == 4 || vid.monmode == 5;
|
||||||
|
|
||||||
DEBB(DF_GRAPH, (debugfile,"draw the map\n"));
|
DEBB(DF_GRAPH, (debugfile,"draw the map\n"));
|
||||||
fanframe = ticks / (nonbitrunc ? 1000. : 500. ); // (nonbitrunc ? 300 : 150.0) / M_PI;
|
fanframe = ticks / (PURE ? 1000. : 500. );
|
||||||
|
|
||||||
for(int m=0; m<motypes; m++) if(isPrincess(eMonster(m)))
|
for(int m=0; m<motypes; m++) if(isPrincess(eMonster(m)))
|
||||||
minf[m].name = princessgender() ? "Princess" : "Prince";
|
minf[m].name = princessgender() ? "Princess" : "Prince";
|
||||||
|
12
help.cpp
12
help.cpp
@ -226,7 +226,7 @@ string other_land() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
string other_geometry_land() {
|
string other_geometry_land() {
|
||||||
if(gp::on || S7 != 7 || nonbitrunc) return other_geometry();
|
if(S7 != 7 || !BITRUNCATED) return other_geometry();
|
||||||
else return other_land();
|
else return other_land();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,10 +394,10 @@ string generateHelpForItem(eItem it) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(it == itOrb37 && (gp::on || S7 != 7 || nonbitrunc))
|
if(it == itOrb37 && (S7 != 7 || !BITRUNCATED))
|
||||||
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
||||||
|
|
||||||
if(it == itOrbLava && (gp::on || S7 != 7 || nonbitrunc))
|
if(it == itOrbLava && (S7 != 7 || !BITRUNCATED))
|
||||||
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
||||||
|
|
||||||
if(among(it, itOrbSide2, itOrbSide3) && !among(S7, 6, 7))
|
if(among(it, itOrbSide2, itOrbSide3) && !among(S7, 6, 7))
|
||||||
@ -441,7 +441,7 @@ string generateHelpForWall(eWall w) {
|
|||||||
if(w == waMineMine || w == waMineUnknown || w == waMineOpen)
|
if(w == waMineMine || w == waMineUnknown || w == waMineOpen)
|
||||||
addMinefieldExplanation(s);
|
addMinefieldExplanation(s);
|
||||||
if(isThumper(w)) s += pushtext(w);
|
if(isThumper(w)) s += pushtext(w);
|
||||||
if((w == waClosePlate || w == waOpenPlate) && nonbitrunc)
|
if((w == waClosePlate || w == waOpenPlate) && PURE)
|
||||||
s += "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)";
|
s += "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)";
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -523,7 +523,7 @@ string generateHelpForMonster(eMonster m) {
|
|||||||
if(among(m, moHexDemon, moHexSnake, moHexSnakeTail))
|
if(among(m, moHexDemon, moHexSnake, moHexSnakeTail))
|
||||||
s += "\n\n" + other_geometry_land() + forbidden_marked();
|
s += "\n\n" + other_geometry_land() + forbidden_marked();
|
||||||
|
|
||||||
if(among(m, moKrakenT, moKrakenH) && (gp::on || S7 != 7 || nonbitrunc))
|
if(among(m, moKrakenT, moKrakenH) && (S7 != 7 || !BITRUNCATED))
|
||||||
s += "\n\n" + other_geometry() + XLAT("Forbidden cells are marked with a different color.");
|
s += "\n\n" + other_geometry() + XLAT("Forbidden cells are marked with a different color.");
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
@ -897,7 +897,7 @@ void describeMouseover() {
|
|||||||
if(isWarped(c)) {
|
if(isWarped(c)) {
|
||||||
appendHelp(string("\n\n") + XLAT(warpdesc));
|
appendHelp(string("\n\n") + XLAT(warpdesc));
|
||||||
|
|
||||||
if(gp::on || S7 != 7 || nonbitrunc) if(c->item != itOrb37)
|
if(S7 != 7 || !BITRUNCATED) if(c->item != itOrb37)
|
||||||
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
help += "\n\n" + other_geometry() + forbidden_unmarked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
heptagon.cpp
16
heptagon.cpp
@ -78,7 +78,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
heptagon *h = buildHeptagon1(tailored_alloc<heptagon> (S7), parent, d, s, pard, fixdistance);
|
heptagon *h = buildHeptagon1(tailored_alloc<heptagon> (S7), parent, d, s, pard, fixdistance);
|
||||||
if(binarytiling || archimedean) return h;
|
if(binarytiling || archimedean) return h;
|
||||||
if(parent->c7) {
|
if(parent->c7) {
|
||||||
if(irr::on)
|
if(IRREGULAR)
|
||||||
irr::link_next(parent, d);
|
irr::link_next(parent, d);
|
||||||
else
|
else
|
||||||
h->c7 = newCell(S7, h);
|
h->c7 = newCell(S7, h);
|
||||||
@ -104,7 +104,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
if(pard == 0) {
|
if(pard == 0) {
|
||||||
h->dm4 = parent->dm4+1;
|
h->dm4 = parent->dm4+1;
|
||||||
if(fixdistance != COMPUTE) h->distance = fixdistance;
|
if(fixdistance != COMPUTE) h->distance = fixdistance;
|
||||||
else if(S3 == 4 && !nonbitrunc) {
|
else if(S3 == 4 && BITRUNCATED) {
|
||||||
h->distance = parent->distance + 2;
|
h->distance = parent->distance + 2;
|
||||||
if(h->c.spin(0) == 2 || (h->c.spin(0) == 3 && S7 <= 5))
|
if(h->c.spin(0) == 2 || (h->c.spin(0) == 3 && S7 <= 5))
|
||||||
h->distance = min<short>(h->distance, createStep(h->move(0), 0)->distance + 3);
|
h->distance = min<short>(h->distance, createStep(h->move(0), 0)->distance + 3);
|
||||||
@ -128,7 +128,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if(parent->s == hsOrigin) h->distance = parent->distance + gp::dist_2();
|
else if(parent->s == hsOrigin) h->distance = parent->distance + gp::dist_2();
|
||||||
else if(S3 == 4 && gp::on && h->c.spin(0) == S7-2 && h->move(0)->c.spin(0) >= S7-2 && h->move(0)->move(0)->s != hsOrigin) {
|
else if(S3 == 4 && GOLDBERG && h->c.spin(0) == S7-2 && h->move(0)->c.spin(0) >= S7-2 && h->move(0)->move(0)->s != hsOrigin) {
|
||||||
heptspin hs(h, 0);
|
heptspin hs(h, 0);
|
||||||
hs += wstep;
|
hs += wstep;
|
||||||
int d1 = hs.at->distance;
|
int d1 = hs.at->distance;
|
||||||
@ -138,7 +138,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
int d0 = hs.at->distance;
|
int d0 = hs.at->distance;
|
||||||
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(-1,1)));
|
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(-1,1)));
|
||||||
}
|
}
|
||||||
else if(S3 == 4 && gp::on && h->c.spin(0) == S7-1 && among(h->move(0)->c.spin(0), S7-2, S7-3) && h->move(0)->move(0)->s != hsOrigin) {
|
else if(S3 == 4 && GOLDBERG && h->c.spin(0) == S7-1 && among(h->move(0)->c.spin(0), S7-2, S7-3) && h->move(0)->move(0)->s != hsOrigin) {
|
||||||
heptspin hs(h, 0);
|
heptspin hs(h, 0);
|
||||||
hs += wstep;
|
hs += wstep;
|
||||||
int d0 = hs.at->distance;
|
int d0 = hs.at->distance;
|
||||||
@ -148,11 +148,11 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
int d1 = hs.at->distance;
|
int d1 = hs.at->distance;
|
||||||
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
|
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
|
||||||
}
|
}
|
||||||
else if(S3 == 4 && gp::on && h->c.spin(0) >= 2 && h->c.spin(0) <= S7-2) {
|
else if(S3 == 4 && GOLDBERG && h->c.spin(0) >= 2 && h->c.spin(0) <= S7-2) {
|
||||||
h->distance = parent->distance + gp::dist_2();
|
h->distance = parent->distance + gp::dist_2();
|
||||||
}
|
}
|
||||||
else if(h->c.spin(0) == S7-2) {
|
else if(h->c.spin(0) == S7-2) {
|
||||||
if(!gp::on)
|
if(!GOLDBERG)
|
||||||
h->distance = parent->distance + gp::dist_1();
|
h->distance = parent->distance + gp::dist_1();
|
||||||
else {
|
else {
|
||||||
int d0 = parent->distance;
|
int d0 = parent->distance;
|
||||||
@ -162,7 +162,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(h->c.spin(0) == S7-3 && h->move(0)->s == hsB) {
|
else if(h->c.spin(0) == S7-3 && h->move(0)->s == hsB) {
|
||||||
if(!gp::on) {
|
if(!GOLDBERG) {
|
||||||
h->distance = createStep(h->move(0), (h->c.spin(0)+2)%S7)->distance + gp::dist_3();
|
h->distance = createStep(h->move(0), (h->c.spin(0)+2)%S7)->distance + gp::dist_3();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -172,7 +172,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
|
|||||||
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
|
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(h->c.spin(0) == S7-1 && S3 == 4 && gp::on) {
|
else if(h->c.spin(0) == S7-1 && S3 == 4 && GOLDBERG) {
|
||||||
h->distance = parent->distance + gp::dist_1();
|
h->distance = parent->distance + gp::dist_1();
|
||||||
}
|
}
|
||||||
else h->distance = parent->distance + gp::dist_2();
|
else h->distance = parent->distance + gp::dist_2();
|
||||||
|
20
hud.cpp
20
hud.cpp
@ -356,22 +356,26 @@ void drawStats() {
|
|||||||
int d = celldistance(ac[i], cwt.at);
|
int d = celldistance(ac[i], cwt.at);
|
||||||
if(d >= 0 && d < 64) qty[d]++;
|
if(d >= 0 && d < 64) qty[d]++;
|
||||||
}
|
}
|
||||||
if(geometry == gNormal && !gp::on)
|
|
||||||
for(int i=nonbitrunc?6:8; i<=15; i++)
|
if(geometry == gNormal && BITRUNCATED)
|
||||||
qty[i] =
|
for(int i=8; i<=15; i++)
|
||||||
nonbitrunc ?
|
qty[i] = qty[i-1] + qty[i-2] + qty[i-3] - qty[i-4];
|
||||||
3*qty[i-1] - qty[i-2]
|
|
||||||
: qty[i-1] + qty[i-2] + qty[i-3] - qty[i-4];
|
if(geometry == gNormal && PURE)
|
||||||
|
for(int i=6; i<=15; i++)
|
||||||
|
qty[i] = 3*qty[i-1] - qty[i-2];
|
||||||
|
|
||||||
if(geometry == gEuclid)
|
if(geometry == gEuclid)
|
||||||
for(int i=8; i<=15; i++) qty[i] = 6*i;
|
for(int i=8; i<=15; i++) qty[i] = 6*i;
|
||||||
for(int i=0; i<64; i++) if(qty[i])
|
for(int i=0; i<64; i++) if(qty[i])
|
||||||
dialog::addInfo(its(qty[i]), distcolors[i&7]);
|
dialog::addInfo(its(qty[i]), distcolors[i&7]);
|
||||||
if(geometry == gNormal && !nonbitrunc) {
|
|
||||||
|
if(geometry == gNormal && BITRUNCATED) {
|
||||||
dialog::addBreak(200);
|
dialog::addBreak(200);
|
||||||
dialog::addHelp("a(d+4) = a(d+3) + a(d+2) + a(d+1) - a(d)");
|
dialog::addHelp("a(d+4) = a(d+3) + a(d+2) + a(d+1) - a(d)");
|
||||||
dialog::addInfo("a(d) ~ 1.72208ᵈ", forecolor);
|
dialog::addInfo("a(d) ~ 1.72208ᵈ", forecolor);
|
||||||
}
|
}
|
||||||
if(geometry == gNormal && nonbitrunc && !gp::on) {
|
if(geometry == gNormal && PURE) {
|
||||||
dialog::addBreak(200);
|
dialog::addBreak(200);
|
||||||
dialog::addHelp("a(d+2) = 3a(d+1) - a(d+2)");
|
dialog::addHelp("a(d+2) = 3a(d+1) - a(d+2)");
|
||||||
dialog::addInfo("a(d) ~ 2.61803ᵈ", forecolor);
|
dialog::addInfo("a(d) ~ 2.61803ᵈ", forecolor);
|
||||||
|
44
hyper.h
44
hyper.h
@ -84,8 +84,8 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
#define S3 ginf[geometry].vertex
|
#define S3 ginf[geometry].vertex
|
||||||
#define hyperbolic_37 (S7 == 7 && S3 == 3 && !binarytiling)
|
#define hyperbolic_37 (S7 == 7 && S3 == 3 && !binarytiling)
|
||||||
#define hyperbolic_not37 ((S7 > 7 || S3 > 3 || binarytiling) && hyperbolic)
|
#define hyperbolic_not37 ((S7 > 7 || S3 > 3 || binarytiling) && hyperbolic)
|
||||||
#define weirdhyperbolic ((S7 > 7 || S3 > 3 || gp::on || irr::on || binarytiling || archimedean) && hyperbolic)
|
#define weirdhyperbolic ((S7 > 7 || S3 > 3 || !STDVAR || binarytiling || archimedean) && hyperbolic)
|
||||||
#define stdhyperbolic (S7 == 7 && S3 == 3 && !gp::on && !irr::on && !binarytiling && !archimedean)
|
#define stdhyperbolic (S7 == 7 && S3 == 3 && STDVAR && !binarytiling && !archimedean)
|
||||||
|
|
||||||
#define binarytiling (geometry == gBinaryTiling)
|
#define binarytiling (geometry == gBinaryTiling)
|
||||||
#define archimedean (geometry == gArchimedean)
|
#define archimedean (geometry == gArchimedean)
|
||||||
@ -119,7 +119,6 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
#define stdeuc (geometry == gNormal || geometry == gEuclid || geometry == gEuclidSquare)
|
#define stdeuc (geometry == gNormal || geometry == gEuclid || geometry == gEuclidSquare)
|
||||||
#define smallsphere (S7 < 5)
|
#define smallsphere (S7 < 5)
|
||||||
#define bigsphere (S7 == 5)
|
#define bigsphere (S7 == 5)
|
||||||
#define ap4 (a4 && nonbitrunc)
|
|
||||||
#define euclid4 (masterless && a4)
|
#define euclid4 (masterless && a4)
|
||||||
#define euclid6 (masterless && !a4)
|
#define euclid6 (masterless && !a4)
|
||||||
|
|
||||||
@ -134,6 +133,18 @@ void addMessage(string s, char spamtype = 0);
|
|||||||
#define MAX_S3 4
|
#define MAX_S3 4
|
||||||
#define MAX_S84 240
|
#define MAX_S84 240
|
||||||
|
|
||||||
|
#define GOLDBERG (variation == eVariation::goldberg)
|
||||||
|
#define IRREGULAR (variation == eVariation::irregular)
|
||||||
|
#define PURE (variation == eVariation::pure)
|
||||||
|
#define BITRUNCATED (variation == eVariation::bitruncated)
|
||||||
|
|
||||||
|
#define CHANGED_VARIATION (!BITRUNCATED)
|
||||||
|
|
||||||
|
#define STDVAR (PURE || BITRUNCATED)
|
||||||
|
#define NONSTDVAR (!STDVAR)
|
||||||
|
|
||||||
|
#define VALENCE (BITRUNCATED ? 3 : AS3)
|
||||||
|
|
||||||
#define NUMWITCH 7
|
#define NUMWITCH 7
|
||||||
|
|
||||||
// achievements
|
// achievements
|
||||||
@ -620,9 +631,6 @@ namespace rg {
|
|||||||
static const char chaos = 'C';
|
static const char chaos = 'C';
|
||||||
static const char tactic = 't';
|
static const char tactic = 't';
|
||||||
static const char tour = 'T';
|
static const char tour = 'T';
|
||||||
static const char geometry = 'g'; // change targetgeometry first
|
|
||||||
static const char bitrunc = '7';
|
|
||||||
static const char gp = 'w'; // change gp::param first
|
|
||||||
static const char yendor = 'y';
|
static const char yendor = 'y';
|
||||||
static const char shmup = 's';
|
static const char shmup = 's';
|
||||||
static const char randpattern = 'r';
|
static const char randpattern = 'r';
|
||||||
@ -634,6 +642,10 @@ namespace rg {
|
|||||||
static const char global = 'x';
|
static const char global = 'x';
|
||||||
// wrongmode only -- change vid.scfg.players then restart_game(rg::nothing) instead
|
// wrongmode only -- change vid.scfg.players then restart_game(rg::nothing) instead
|
||||||
static const char multi = 'm';
|
static const char multi = 'm';
|
||||||
|
// wrongmode only -- mark achievements for special geometries
|
||||||
|
static const char special_geometry = 'g';
|
||||||
|
// wrongmode only -- mark achievements for special variations
|
||||||
|
static const char special_variation = '7';
|
||||||
}
|
}
|
||||||
|
|
||||||
int landMultiplier(eLand l);
|
int landMultiplier(eLand l);
|
||||||
@ -1721,7 +1733,6 @@ void checkStunKill(cell *dest);
|
|||||||
void clearMessages();
|
void clearMessages();
|
||||||
|
|
||||||
void resetGeometry();
|
void resetGeometry();
|
||||||
extern bool nonbitrunc;
|
|
||||||
|
|
||||||
namespace svg {
|
namespace svg {
|
||||||
void circle(int x, int y, int size, int col);
|
void circle(int x, int y, int size, int col);
|
||||||
@ -2718,20 +2729,19 @@ struct hrmap {
|
|||||||
|
|
||||||
struct hrmap_hyperbolic : hrmap {
|
struct hrmap_hyperbolic : hrmap {
|
||||||
heptagon *origin;
|
heptagon *origin;
|
||||||
bool isnonbitrunc;
|
eVariation mvar;
|
||||||
hrmap_hyperbolic();
|
hrmap_hyperbolic();
|
||||||
heptagon *getOrigin() { return origin; }
|
heptagon *getOrigin() { return origin; }
|
||||||
~hrmap_hyperbolic() {
|
~hrmap_hyperbolic() {
|
||||||
DEBMEM ( verifycells(origin); )
|
DEBMEM ( verifycells(origin); )
|
||||||
// printf("Deleting hyperbolic map: %p\n", this);
|
// printf("Deleting hyperbolic map: %p\n", this);
|
||||||
dynamicval<bool> ph(nonbitrunc, isnonbitrunc);
|
dynamicval<eVariation> ph(variation, mvar);
|
||||||
clearfrom(origin);
|
clearfrom(origin);
|
||||||
}
|
}
|
||||||
void verify() { verifycells(origin); }
|
void verify() { verifycells(origin); }
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace irr {
|
namespace irr {
|
||||||
extern bool on;
|
|
||||||
extern ld density;
|
extern ld density;
|
||||||
extern ld quality;
|
extern ld quality;
|
||||||
extern int cellcount;
|
extern int cellcount;
|
||||||
@ -2988,7 +2998,7 @@ namespace texture {
|
|||||||
|
|
||||||
int recolor(int col);
|
int recolor(int col);
|
||||||
|
|
||||||
typedef tuple<eGeometry, bool, char, int, eModel, ld, ld> texture_parameters;
|
typedef tuple<eGeometry, eVariation, char, int, eModel, ld, ld> texture_parameters;
|
||||||
texture_parameters orig_texture_parameters;
|
texture_parameters orig_texture_parameters;
|
||||||
|
|
||||||
map<int, textureinfo> texture_map, texture_map_orig;
|
map<int, textureinfo> texture_map, texture_map_orig;
|
||||||
@ -3082,7 +3092,7 @@ transmatrix actualV(const heptspin& hs, const transmatrix& V);
|
|||||||
transmatrix applyspin(const heptspin& hs, const transmatrix& V);
|
transmatrix applyspin(const heptspin& hs, const transmatrix& V);
|
||||||
transmatrix cview();
|
transmatrix cview();
|
||||||
|
|
||||||
extern string bitruncnames[2];
|
extern string bitruncnames[5];
|
||||||
extern bool need_mouseh;
|
extern bool need_mouseh;
|
||||||
|
|
||||||
extern int whateveri, whateveri2;
|
extern int whateveri, whateveri2;
|
||||||
@ -3220,7 +3230,6 @@ extern int sagephase;
|
|||||||
extern int lastsize;
|
extern int lastsize;
|
||||||
extern int noiseuntil;
|
extern int noiseuntil;
|
||||||
hyperpoint xpush0(ld x);
|
hyperpoint xpush0(ld x);
|
||||||
extern eGeometry targetgeometry;
|
|
||||||
transmatrix xspinpush(ld alpha, ld x);
|
transmatrix xspinpush(ld alpha, ld x);
|
||||||
hyperpoint xspinpush0(ld alpha, ld x);
|
hyperpoint xspinpush0(ld alpha, ld x);
|
||||||
|
|
||||||
@ -3320,7 +3329,6 @@ string XLAT(string x, stringpar p1, stringpar p2, stringpar p3, stringpar p4, st
|
|||||||
|
|
||||||
namespace gp {
|
namespace gp {
|
||||||
typedef pair<int, int> loc;
|
typedef pair<int, int> loc;
|
||||||
extern bool on;
|
|
||||||
void compute_geometry();
|
void compute_geometry();
|
||||||
void extend_map(cell *c, int d);
|
void extend_map(cell *c, int d);
|
||||||
extern ld scale;
|
extern ld scale;
|
||||||
@ -3421,7 +3429,7 @@ template<class T> struct saverenum : supersaver {
|
|||||||
bool dosave() { return val != dft; }
|
bool dosave() { return val != dft; }
|
||||||
void reset() { val = dft; }
|
void reset() { val = dft; }
|
||||||
saverenum<T>(T& v) : val(v) { }
|
saverenum<T>(T& v) : val(v) { }
|
||||||
string save() { return its(val); }
|
string save() { return its(int(val)); }
|
||||||
void load(const string& s) { val = (T) atoi(s.c_str()); }
|
void load(const string& s) { val = (T) atoi(s.c_str()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3736,6 +3744,10 @@ void switch_game_mode(char switchWhat);
|
|||||||
void stop_game_and_switch_mode(char switchWhat = rg::nothing); // stop_game + switch_game_mode
|
void stop_game_and_switch_mode(char switchWhat = rg::nothing); // stop_game + switch_game_mode
|
||||||
void restart_game(char switchWhat = rg::nothing); // popAllScreens + popAllGames + stop_game + switch_game_mode + start_game
|
void restart_game(char switchWhat = rg::nothing); // popAllScreens + popAllGames + stop_game + switch_game_mode + start_game
|
||||||
|
|
||||||
|
// these work as stop_game_and_switch_mode
|
||||||
|
void set_variation(eVariation);
|
||||||
|
void set_geometry(eGeometry);
|
||||||
|
|
||||||
void generate_floorshapes();
|
void generate_floorshapes();
|
||||||
void drawArrowTraps();
|
void drawArrowTraps();
|
||||||
void drawBlizzards();
|
void drawBlizzards();
|
||||||
@ -3872,7 +3884,7 @@ extern void switchHardcore();
|
|||||||
|
|
||||||
extern bool using_perspective;
|
extern bool using_perspective;
|
||||||
|
|
||||||
void generateAlts(heptagon *h, int levs = irr::on ? 1 : S3-3, bool link_cdata = true);
|
void generateAlts(heptagon *h, int levs = IRREGULAR ? 1 : S3-3, bool link_cdata = true);
|
||||||
|
|
||||||
namespace ors {
|
namespace ors {
|
||||||
extern int mode;
|
extern int mode;
|
||||||
|
@ -4,10 +4,8 @@
|
|||||||
|
|
||||||
namespace hr {
|
namespace hr {
|
||||||
|
|
||||||
eGeometry geometry, targetgeometry;
|
eGeometry geometry;
|
||||||
|
eVariation variation;
|
||||||
// for the pure heptagonal grid
|
|
||||||
bool nonbitrunc = false;
|
|
||||||
|
|
||||||
// hyperbolic points and matrices
|
// hyperbolic points and matrices
|
||||||
|
|
||||||
|
12
hypgraph.cpp
12
hypgraph.cpp
@ -499,15 +499,15 @@ bool confusingGeometry() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ld master_to_c7_angle() {
|
ld master_to_c7_angle() {
|
||||||
return (nonbitrunc && !binarytiling && !archimedean) ? M_PI + gp::alpha : 0;
|
return (!BITRUNCATED && !binarytiling && !archimedean) ? M_PI + gp::alpha : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
||||||
if(irr::on)
|
if(IRREGULAR)
|
||||||
return V * spin(M_PI + 2 * M_PI / S7 * (hs.spin + irr::periodmap[hs.at].base.spin));
|
return V * spin(M_PI + 2 * M_PI / S7 * (hs.spin + irr::periodmap[hs.at].base.spin));
|
||||||
if(archimedean) return V * spin(-arcm::current.triangles[arcm::id_of(hs.at)][hs.spin].first);
|
if(archimedean) return V * spin(-arcm::current.triangles[arcm::id_of(hs.at)][hs.spin].first);
|
||||||
if(binarytiling) return V;
|
if(binarytiling) return V;
|
||||||
return (hs.spin || nonbitrunc) ? V * spin(hs.spin*2*M_PI/S7 + master_to_c7_angle()) : V;
|
return (hs.spin || !BITRUNCATED) ? V * spin(hs.spin*2*M_PI/S7 + master_to_c7_angle()) : V;
|
||||||
}
|
}
|
||||||
|
|
||||||
transmatrix applyspin(const heptspin& hs, const transmatrix& V) {
|
transmatrix applyspin(const heptspin& hs, const transmatrix& V) {
|
||||||
@ -589,11 +589,11 @@ void drawrec(const heptspin& hs, hstate s, const transmatrix& V) {
|
|||||||
|
|
||||||
bool draw = c->pathdist < PINFD;
|
bool draw = c->pathdist < PINFD;
|
||||||
|
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
gp::drawrec(c, actualV(hs, V1));
|
gp::drawrec(c, actualV(hs, V1));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
auto& hi = irr::periodmap[hs.at];
|
auto& hi = irr::periodmap[hs.at];
|
||||||
transmatrix V0 = actualV(hs, V1);
|
transmatrix V0 = actualV(hs, V1);
|
||||||
auto& vc = irr::cells_of_heptagon[hi.base.at];
|
auto& vc = irr::cells_of_heptagon[hi.base.at];
|
||||||
@ -609,7 +609,7 @@ void drawrec(const heptspin& hs, hstate s, const transmatrix& V) {
|
|||||||
drawcell(c, V2, 0, hs.mirrored);
|
drawcell(c, V2, 0, hs.mirrored);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!nonbitrunc) for(int d=0; d<S7; d++) {
|
if(BITRUNCATED) for(int d=0; d<S7; d++) {
|
||||||
int ds = hs.at->c.fix(hs.spin + d);
|
int ds = hs.at->c.fix(hs.spin + d);
|
||||||
// createMov(c, ds);
|
// createMov(c, ds);
|
||||||
if(c->move(ds) && c->c.spin(ds) == 0 && dodrawcell(c->move(ds))) {
|
if(c->move(ds) && c->c.spin(ds) == 0 && dodrawcell(c->move(ds))) {
|
||||||
|
2
init.cpp
2
init.cpp
@ -39,7 +39,7 @@ void initAll() {
|
|||||||
initgraph();
|
initgraph();
|
||||||
#if CAP_SAVE
|
#if CAP_SAVE
|
||||||
loadsave();
|
loadsave();
|
||||||
if(irr::on) irr::auto_creator();
|
if(IRREGULAR) irr::auto_creator();
|
||||||
#endif
|
#endif
|
||||||
start_game();
|
start_game();
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
namespace hr { namespace irr {
|
namespace hr { namespace irr {
|
||||||
|
|
||||||
bool on;
|
|
||||||
|
|
||||||
ld density = 2;
|
ld density = 2;
|
||||||
ld quality = .2;
|
ld quality = .2;
|
||||||
int place_attempts = 10;
|
int place_attempts = 10;
|
||||||
@ -511,7 +509,7 @@ bool step(int delta) {
|
|||||||
ld scale;
|
ld scale;
|
||||||
|
|
||||||
void compute_geometry() {
|
void compute_geometry() {
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
scale = sqrt(isize(cells_of_heptagon) * 1. / isize(cells));
|
scale = sqrt(isize(cells_of_heptagon) * 1. / isize(cells));
|
||||||
crossf *= scale;
|
crossf *= scale;
|
||||||
hepvdist *= scale;
|
hepvdist *= scale;
|
||||||
@ -805,9 +803,7 @@ void start_game_on_created_map() {
|
|||||||
for(hrmap *& hm : allmaps) if(hm == base) hm = NULL;
|
for(hrmap *& hm : allmaps) if(hm == base) hm = NULL;
|
||||||
stop_game();
|
stop_game();
|
||||||
geometry = orig_geometry;
|
geometry = orig_geometry;
|
||||||
irr::on = true;
|
variation = eVariation::irregular;
|
||||||
nonbitrunc = true;
|
|
||||||
gp::on = false;
|
|
||||||
need_reset_geometry = true;
|
need_reset_geometry = true;
|
||||||
gridmaking = false;
|
gridmaking = false;
|
||||||
start_game();
|
start_game();
|
||||||
@ -981,8 +977,7 @@ void visual_creator() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
nonbitrunc = true;
|
variation = eVariation::pure;
|
||||||
gp::on = false;
|
|
||||||
need_reset_geometry = true;
|
need_reset_geometry = true;
|
||||||
start_game();
|
start_game();
|
||||||
if(base) delete base;
|
if(base) delete base;
|
||||||
@ -995,7 +990,7 @@ void visual_creator() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void auto_creator() {
|
void auto_creator() {
|
||||||
irr::on = false;
|
variation = eVariation::pure;
|
||||||
int cc = cellcount;
|
int cc = cellcount;
|
||||||
bitruncations_requested = bitruncations_performed;
|
bitruncations_requested = bitruncations_performed;
|
||||||
visual_creator();
|
visual_creator();
|
||||||
|
60
landgen.cpp
60
landgen.cpp
@ -210,14 +210,14 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
else {
|
else {
|
||||||
|
|
||||||
if(d == 9) {
|
if(d == 9) {
|
||||||
cell *c2 = (gp::on || irr::on) ? c->master->c7 : c;
|
cell *c2 = (GOLDBERG || IRREGULAR) ? c->master->c7 : c;
|
||||||
if(cdist50(c2) == 3 && polarb50(c2) == 1)
|
if(cdist50(c2) == 3 && polarb50(c2) == 1)
|
||||||
c->wall = waPalace;
|
c->wall = waPalace;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d == 8 && sphere) {
|
if(d == 8 && sphere) {
|
||||||
int gs = getHemisphere(c,0);
|
int gs = getHemisphere(c,0);
|
||||||
if(gp::on || irr::on) {
|
if(NONSTDVAR) {
|
||||||
int v = 1;
|
int v = 1;
|
||||||
forCellEx(c2, c) if(getHemisphere(c2, 0) != gs)
|
forCellEx(c2, c) if(getHemisphere(c2, 0) != gs)
|
||||||
v = 2;
|
v = 2;
|
||||||
@ -230,7 +230,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
if(gs == 1)
|
if(gs == 1)
|
||||||
c->wall = waPalace;
|
c->wall = waPalace;
|
||||||
if(gs == 3)
|
if(gs == 3)
|
||||||
c->wall = nonbitrunc ? waOpenGate : waClosedGate;
|
c->wall = PURE ? waOpenGate : waClosedGate;
|
||||||
if(gs == 4 && hrand(100) < 40)
|
if(gs == 4 && hrand(100) < 40)
|
||||||
c->wall = waClosePlate;
|
c->wall = waClosePlate;
|
||||||
if(gs == 6)
|
if(gs == 6)
|
||||||
@ -247,10 +247,10 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
bool lookingForPrincess = !euclid && c->master->alt && !princess::challenge;
|
bool lookingForPrincess = !euclid && c->master->alt && !princess::challenge;
|
||||||
|
|
||||||
bool pgate = false;
|
bool pgate = false;
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
int i = fiftyval049(c->master->c7);
|
int i = fiftyval049(c->master->c7);
|
||||||
if(i >= 8 && i <= 14 && !polarb50(c->master->c7)) pgate = true;
|
if(i >= 8 && i <= 14 && !polarb50(c->master->c7)) pgate = true;
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
bool good = false;
|
bool good = false;
|
||||||
forCellEx(c2, c) {
|
forCellEx(c2, c) {
|
||||||
int i2 = fiftyval049(c2->master->c7);
|
int i2 = fiftyval049(c2->master->c7);
|
||||||
@ -273,7 +273,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(cdist50(c) == 3 && polarb50(c) == 1 && !ishept(c)) {
|
else if(cdist50(c) == 3 && polarb50(c) == 1 && !ishept(c)) {
|
||||||
if(gp::on) ;
|
if(GOLDBERG) ;
|
||||||
else {
|
else {
|
||||||
int q = 0, s = 0;
|
int q = 0, s = 0;
|
||||||
if(!ishept(c)) for(int i=0; i<c->type; i++)
|
if(!ishept(c)) for(int i=0; i<c->type; i++)
|
||||||
@ -294,9 +294,9 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(c->wall == waPalace) ;
|
else if(c->wall == waPalace) ;
|
||||||
else if((hrand(100) < (lookingForPrincess ? (nonbitrunc ? 11 : 7) : 5) && cdist50(c)) ||
|
else if((hrand(100) < (lookingForPrincess ? (PURE ? 11 : 7) : 5) && cdist50(c)) ||
|
||||||
(cdist50(c) == 0 && polarb50(c) && hrand(100) < 60)) {
|
(cdist50(c) == 0 && polarb50(c) && hrand(100) < 60)) {
|
||||||
c->wall = hrand(100) < (lookingForPrincess ? (nonbitrunc ? 25 : 30):50) ? waClosePlate : waOpenPlate;
|
c->wall = hrand(100) < (lookingForPrincess ? (PURE ? 25 : 30):50) ? waClosePlate : waOpenPlate;
|
||||||
}
|
}
|
||||||
else if(hrand(100) < (lookingForPrincess ? 3 : 5))
|
else if(hrand(100) < (lookingForPrincess ? 3 : 5))
|
||||||
c->wall = waTrapdoor;
|
c->wall = waTrapdoor;
|
||||||
@ -311,9 +311,9 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
if(princess::generating) {
|
if(princess::generating) {
|
||||||
// no Opening Plates nearby
|
// no Opening Plates nearby
|
||||||
if(d <= 7 && c->wall == waOpenPlate && !nonbitrunc)
|
if(d <= 7 && c->wall == waOpenPlate && BITRUNCATED)
|
||||||
c->wall = waNone;
|
c->wall = waNone;
|
||||||
if(d <= 7 && c->wall == waClosePlate && nonbitrunc)
|
if(d <= 7 && c->wall == waClosePlate && PURE)
|
||||||
c->wall = waOpenPlate;
|
c->wall = waOpenPlate;
|
||||||
// no monsters nearby
|
// no monsters nearby
|
||||||
if(d>0) c->monst = moNone;
|
if(d>0) c->monst = moNone;
|
||||||
@ -407,7 +407,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
else if(a4)
|
else if(a4)
|
||||||
c->wall = hrand(100) < 50 ? waCavefloor : waCavewall;
|
c->wall = hrand(100) < 50 ? waCavefloor : waCavewall;
|
||||||
else if(nonbitrunc) {
|
else if(!BITRUNCATED) {
|
||||||
if(polarb50(c))
|
if(polarb50(c))
|
||||||
c->wall = waCavewall;
|
c->wall = waCavewall;
|
||||||
else c->wall = waCavefloor;
|
else c->wall = waCavefloor;
|
||||||
@ -426,7 +426,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
c->monst = moSeep;
|
c->monst = moSeep;
|
||||||
|
|
||||||
ONEMPTY {
|
ONEMPTY {
|
||||||
if(hrand(nonbitrunc?400:1000) < PT(100 + 2 * (kills[moMiner] + kills[moLancer] + kills[moFlailer]), 200) && notDippingFor(itEmerald)) {
|
if(hrand(PURE?400:1000) < PT(100 + 2 * (kills[moMiner] + kills[moLancer] + kills[moFlailer]), 200) && notDippingFor(itEmerald)) {
|
||||||
// do not destroy walls!
|
// do not destroy walls!
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
for(int i=0; i<c->type; i++) if(c->move(i)->wall == waCavewall) ok = false;
|
for(int i=0; i<c->type; i++) if(c->move(i)->wall == waCavewall) ok = false;
|
||||||
@ -469,7 +469,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
v = RANDPAT ? 24 : 1;
|
v = RANDPAT ? 24 : 1;
|
||||||
else if(sphere) {
|
else if(sphere) {
|
||||||
int gs = getHemisphere(c, 0);
|
int gs = getHemisphere(c, 0);
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
v = 6;
|
v = 6;
|
||||||
if(gs == 0) v = 24;
|
if(gs == 0) v = 24;
|
||||||
forCellEx(c2, c) if(getHemisphere(c2, 0) * gs < 0)
|
forCellEx(c2, c) if(getHemisphere(c2, 0) * gs < 0)
|
||||||
@ -588,7 +588,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
else if(v == 25 || v == 59 || v == 27 || v == 57)
|
else if(v == 25 || v == 59 || v == 27 || v == 57)
|
||||||
c->wall = waVineHalfB;
|
c->wall = waVineHalfB;
|
||||||
else c->wall = waNone;
|
else c->wall = waNone;
|
||||||
if((gp::on || irr::on) && cellHalfvine(c)) {
|
if(NONSTDVAR && cellHalfvine(c)) {
|
||||||
c->wall = waNone;
|
c->wall = waNone;
|
||||||
forCellCM(c2, c) if(emeraldval(c2) == (v^1))
|
forCellCM(c2, c) if(emeraldval(c2) == (v^1))
|
||||||
c->wall = waVinePlant;
|
c->wall = waVinePlant;
|
||||||
@ -1060,14 +1060,14 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
case laHalloween:
|
case laHalloween:
|
||||||
if(d == 9) {
|
if(d == 9) {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
int fv = c->master->fiftyval;
|
int fv = c->master->fiftyval;
|
||||||
if(fv == 1 || fv == 4 || fv == 10)
|
if(fv == 1 || fv == 4 || fv == 10)
|
||||||
c->wall = waChasm;
|
c->wall = waChasm;
|
||||||
if(c == c->master->c7 && fv == 3)
|
if(c == c->master->c7 && fv == 3)
|
||||||
c->item = itTreat;
|
c->item = itTreat;
|
||||||
}
|
}
|
||||||
else if(nonbitrunc && !euclid) {
|
else if(!BITRUNCATED && !euclid) {
|
||||||
int fv = c->master->fiftyval;
|
int fv = c->master->fiftyval;
|
||||||
if(fv == 1 || fv == 4 || fv == 2)
|
if(fv == 1 || fv == 4 || fv == 2)
|
||||||
c->wall = waChasm;
|
c->wall = waChasm;
|
||||||
@ -1146,7 +1146,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case laStorms: {
|
case laStorms: {
|
||||||
bool randstorm = hyperbolic_not37 || gp::on || irr::on || (quotient && geometry != gZebraQuotient);
|
bool randstorm = hyperbolic_not37 || NONSTDVAR || (quotient && geometry != gZebraQuotient);
|
||||||
if(d == 9) {
|
if(d == 9) {
|
||||||
|
|
||||||
if(torus) {
|
if(torus) {
|
||||||
@ -1177,7 +1177,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
if(ctof(c)) {
|
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 && !nonbitrunc ? 3 : 9)) c->wall = waGrounded;
|
if(id == (elliptic && BITRUNCATED ? 3 : 9)) c->wall = waGrounded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(S7 == 4) {
|
else if(S7 == 4) {
|
||||||
@ -1200,7 +1200,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(randstorm) ;
|
else if(randstorm) ;
|
||||||
else if(nonbitrunc) {
|
else if(PURE) {
|
||||||
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;
|
||||||
@ -1359,7 +1359,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
case laHell:
|
case laHell:
|
||||||
if(d == 9) {
|
if(d == 9) {
|
||||||
if(hrand(1000) < (nonbitrunc ? 16 : 36) && celldist(c) >= 3) {
|
if(hrand(1000) < (PURE ? 16 : 36) && celldist(c) >= 3) {
|
||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
cell *c2 = createMov(c, i);
|
cell *c2 = createMov(c, i);
|
||||||
setdist(c2, d+1, c);
|
setdist(c2, d+1, c);
|
||||||
@ -1411,7 +1411,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
case laHive:
|
case laHive:
|
||||||
if(d == 9) {
|
if(d == 9) {
|
||||||
if(hrand(2000) < (chaosmode ? 1000 : (nonbitrunc && !gp::on) ?200:2) && !safety)
|
if(hrand(2000) < (chaosmode ? 1000 : PURE ?200:2) && !safety)
|
||||||
hive::createBugArmy(c);
|
hive::createBugArmy(c);
|
||||||
if(hrand(2000) < 100 && !c->wall && !c->item && !c->monst) {
|
if(hrand(2000) < 100 && !c->wall && !c->item && !c->monst) {
|
||||||
int nww = 0;
|
int nww = 0;
|
||||||
@ -1631,14 +1631,14 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
if(d == 7 && c->wall == waNone)
|
if(d == 7 && c->wall == waNone)
|
||||||
buildPrizeMirror(c, 1000);
|
buildPrizeMirror(c, 1000);
|
||||||
ONEMPTY {
|
ONEMPTY {
|
||||||
if(hrand((doCross && celldist(c) <= 5) ?450:16000) < 30+items[itRedGem]+yendor::hardness() && !pseudohept(c) && !c->monst && !c->wall && !(nonbitrunc && S3==4)) {
|
if(hrand((doCross && celldist(c) <= 5) ?450:16000) < 30+items[itRedGem]+yendor::hardness() && !pseudohept(c) && !c->monst && !c->wall && !(!BITRUNCATED && S3==4)) {
|
||||||
int i = -1;
|
int i = -1;
|
||||||
for(int t=0; t<c->type; t++) if(c->move(t)->mpdist > c->mpdist && !pseudohept(c->move(t)))
|
for(int t=0; t<c->type; t++) if(c->move(t)->mpdist > c->mpdist && !pseudohept(c->move(t)))
|
||||||
i = t;
|
i = t;
|
||||||
if(i != -1 && !peace::on)
|
if(i != -1 && !peace::on)
|
||||||
generateSnake(c, i, 1);
|
generateSnake(c, i, 1);
|
||||||
}
|
}
|
||||||
else if(hrand(16000) < 50+items[itRedGem]+yendor::hardness() && (nonbitrunc?hrand(10)<3:!ishept(c)) && !c->monst)
|
else if(hrand(16000) < 50+items[itRedGem]+yendor::hardness() && (PURE?hrand(10)<3:!ishept(c)) && !c->monst)
|
||||||
c->monst = moRedTroll,
|
c->monst = moRedTroll,
|
||||||
c->mondir = NODIR;
|
c->mondir = NODIR;
|
||||||
}
|
}
|
||||||
@ -1674,7 +1674,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
if(hrand(1000) < 150 && celldist(c) >= 3 && !pseudohept(c))
|
if(hrand(1000) < 150 && celldist(c) >= 3 && !pseudohept(c))
|
||||||
c->wall = waSmallTree;
|
c->wall = waSmallTree;
|
||||||
int q = 0;
|
int q = 0;
|
||||||
if(!nonbitrunc && !chaosmode && !weirdhyperbolic) for(int i=0; i<c->type; i++)
|
if(BITRUNCATED && !chaosmode && !weirdhyperbolic) for(int i=0; i<c->type; i++)
|
||||||
if(c->move(i) && !isWarped(c->move(i)->land) && c->move(i)->land != laCrossroads4)
|
if(c->move(i) && !isWarped(c->move(i)->land) && c->move(i)->land != laCrossroads4)
|
||||||
q++;
|
q++;
|
||||||
if(q == 1) c->wall = waWarpGate;
|
if(q == 1) c->wall = waWarpGate;
|
||||||
@ -1683,7 +1683,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
if(c->land == laWarpSea) {
|
if(c->land == laWarpSea) {
|
||||||
c->wall = waSea;
|
c->wall = waSea;
|
||||||
int q = 0;
|
int q = 0;
|
||||||
if(!nonbitrunc && !chaosmode) for(int i=0; i<c->type; i++)
|
if(BITRUNCATED && !chaosmode) for(int i=0; i<c->type; i++)
|
||||||
if(c->move(i) && !isWarped(c->move(i)->land)) q++;
|
if(c->move(i) && !isWarped(c->move(i)->land)) q++;
|
||||||
if(q == 1) c->wall = waWarpGate;
|
if(q == 1) c->wall = waWarpGate;
|
||||||
}
|
}
|
||||||
@ -1809,7 +1809,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
else if(items[itHunting] < 10) {
|
else if(items[itHunting] < 10) {
|
||||||
vector<cell*> next;
|
vector<cell*> next;
|
||||||
forCellEx(c2, c) if(c2->mpdist > 7 && (nonbitrunc || !ctof(c2))) next.push_back(c2);
|
forCellEx(c2, c) if(c2->mpdist > 7 && (!BITRUNCATED || !ctof(c2))) next.push_back(c2);
|
||||||
if(isize(next)) {
|
if(isize(next)) {
|
||||||
c->item = itHunting;
|
c->item = itHunting;
|
||||||
cell *c3 = next[hrand(isize(next))];
|
cell *c3 = next[hrand(isize(next))];
|
||||||
@ -1855,7 +1855,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
forCellEx(c2, c)
|
forCellEx(c2, c)
|
||||||
if(c2->landparam % TEMPLE_EACH == 0 && !pseudohept(c2)) q++;
|
if(c2->landparam % TEMPLE_EACH == 0 && !pseudohept(c2)) q++;
|
||||||
placecolumn = q == 2;
|
placecolumn = q == 2;
|
||||||
if(placecolumn && weirdhyperbolic && nonbitrunc && hrand(100) >= 50)
|
if(placecolumn && weirdhyperbolic && !BITRUNCATED && hrand(100) >= 50)
|
||||||
placecolumn = false;
|
placecolumn = false;
|
||||||
if(placecolumn) {
|
if(placecolumn) {
|
||||||
placecolumn = false;
|
placecolumn = false;
|
||||||
@ -2118,7 +2118,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
else
|
else
|
||||||
si.id = (zebra40(c)&2) ? 0 : zebra40(c) == 4 ? 8 : 1;
|
si.id = (zebra40(c)&2) ? 0 : zebra40(c) == 4 ? 8 : 1;
|
||||||
c->wall = waSea;
|
c->wall = waSea;
|
||||||
if(among(si.id, 0, 4, 16, nonbitrunc ? -1 : 24))
|
if(among(si.id, 0, 4, 16, PURE ? -1 : 24))
|
||||||
c->wall = waDock;
|
c->wall = waDock;
|
||||||
if(si.id == 8 && hrand(100) < 75) {
|
if(si.id == 8 && hrand(100) < 75) {
|
||||||
c->wall = waBoat;
|
c->wall = waBoat;
|
||||||
@ -2200,7 +2200,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
case laCrossroads5:
|
case laCrossroads5:
|
||||||
if(c->wall == waTower) c->land = laCamelot;
|
if(c->wall == waTower) c->land = laCamelot;
|
||||||
ONEMPTY {
|
ONEMPTY {
|
||||||
if(nonbitrunc && c->land == laCrossroads5 && hrand(100) < 60)
|
if(!BITRUNCATED && c->land == laCrossroads5 && hrand(100) < 60)
|
||||||
c->wall = waBarrier;
|
c->wall = waBarrier;
|
||||||
else if(!inv::on && items[itShard] >= 10 && hrand(8000) < 120*orbcrossfun(items[itShard]) && mirror::build(c)) ;
|
else if(!inv::on && items[itShard] >= 10 && hrand(8000) < 120*orbcrossfun(items[itShard]) && mirror::build(c)) ;
|
||||||
else if(hyperstonesUnlocked() && hrand(8000) < 100 && mirror::build(c)) ;
|
else if(hyperstonesUnlocked() && hrand(8000) < 100 && mirror::build(c)) ;
|
||||||
@ -2482,7 +2482,7 @@ void setdist(cell *c, int d, cell *from) {
|
|||||||
placeLocalOrbs(c);
|
placeLocalOrbs(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nonbitrunc && c->wall == waMirrorWall && c->land == laMirror)
|
if(PURE && c->wall == waMirrorWall && c->land == laMirror)
|
||||||
c->land = laMirrorWall; // , c->item = itPirate; // not really a proper bugfix
|
c->land = laMirrorWall; // , c->item = itPirate; // not really a proper bugfix
|
||||||
|
|
||||||
if(d == 7) playSeenSound(c);
|
if(d == 7) playSeenSound(c);
|
||||||
|
50
landlock.cpp
50
landlock.cpp
@ -664,7 +664,7 @@ bool rlyehComplete() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool lchance(eLand l) {
|
bool lchance(eLand l) {
|
||||||
if(tactic::on || yendor::on || ((geometry || gp::on) && specialland == laElementalWall)) return true;
|
if(tactic::on || yendor::on || ((geometry || GOLDBERG) && specialland == laElementalWall)) return true;
|
||||||
if(chaosmode) return hrand(100) < 25;
|
if(chaosmode) return hrand(100) < 25;
|
||||||
return hrand(100) >= 40 * kills[elementalOf(l)] / (elementalKills()+1);
|
return hrand(100) >= 40 * kills[elementalOf(l)] / (elementalKills()+1);
|
||||||
}
|
}
|
||||||
@ -1118,7 +1118,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(weirdhyperbolic)
|
if(weirdhyperbolic)
|
||||||
return simplified_walls;
|
return simplified_walls;
|
||||||
// works nice on a big non-tetrahedron-based sphere
|
// works nice on a big non-tetrahedron-based sphere
|
||||||
if(sphere && S3 != 3 && gp::on)
|
if(sphere && S3 != 3 && GOLDBERG)
|
||||||
return special_geo3;
|
return special_geo3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1131,14 +1131,14 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
return pattern_not_implemented_random;
|
return pattern_not_implemented_random;
|
||||||
|
|
||||||
// not enough space
|
// not enough space
|
||||||
if(l == laStorms && nonbitrunc && elliptic)
|
if(l == laStorms && (old_daily_id < 35 ? !BITRUNCATED : PURE) && elliptic)
|
||||||
return not_enough_space;
|
return not_enough_space;
|
||||||
|
|
||||||
if(l == laStorms && S7 == 3)
|
if(l == laStorms && S7 == 3)
|
||||||
return not_enough_space;
|
return not_enough_space;
|
||||||
|
|
||||||
// mirrors do not work in gp
|
// mirrors do not work in gp
|
||||||
if(among(l, laMirror, laMirrorOld) && (gp::on && old_daily_id < 33))
|
if(among(l, laMirror, laMirrorOld) && (GOLDBERG && old_daily_id < 33))
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
if(binarytiling && among(l, laMirror, laMirrorOld))
|
if(binarytiling && among(l, laMirror, laMirrorOld))
|
||||||
@ -1148,11 +1148,11 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
return pattern_incompatibility;
|
return pattern_incompatibility;
|
||||||
|
|
||||||
// available only in non-standard geometries
|
// available only in non-standard geometries
|
||||||
if(l == laMirrorOld && !geometry && !gp::on && !irr::on)
|
if(l == laMirrorOld && !geometry && STDVAR)
|
||||||
return better_version_exists;
|
return better_version_exists;
|
||||||
|
|
||||||
// available only in standard geometry
|
// available only in standard geometry
|
||||||
if(l == laMirror && (geometry || gp::on || irr::on))
|
if(l == laMirror && (geometry || NONSTDVAR))
|
||||||
return not_implemented;
|
return not_implemented;
|
||||||
|
|
||||||
// Halloween needs bounded world (can be big bounded)
|
// Halloween needs bounded world (can be big bounded)
|
||||||
@ -1181,16 +1181,16 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laWhirlpool && a4)
|
if(l == laWhirlpool && a4)
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
if(isWarped(l) && a4 && gp::on)
|
if(isWarped(l) && a4 && GOLDBERG)
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
if((isWarped(l) || l == laDual) && irr::on && !irr::bitruncations_performed)
|
if((isWarped(l) || l == laDual) && IRREGULAR && !irr::bitruncations_performed)
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
if(irr::on && among(l, laPrairie, laMirror, laMirrorOld))
|
if(IRREGULAR && among(l, laPrairie, laMirror, laMirrorOld))
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
if(irr::on && among(laBlizzard, laVolcano) && !sphere)
|
if(IRREGULAR && among(laBlizzard, laVolcano) && !sphere)
|
||||||
return dont_work;
|
return dont_work;
|
||||||
|
|
||||||
// equidistant-based lands
|
// equidistant-based lands
|
||||||
@ -1218,7 +1218,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laPrincessQuest && tactic::on)
|
if(l == laPrincessQuest && tactic::on)
|
||||||
return not_in_ptm;
|
return not_in_ptm;
|
||||||
|
|
||||||
if(l == laPrincessQuest && (!stdeuc || gp::on))
|
if(l == laPrincessQuest && (!stdeuc || NONSTDVAR))
|
||||||
return not_implemented;
|
return not_implemented;
|
||||||
|
|
||||||
// works correctly only in some geometries
|
// works correctly only in some geometries
|
||||||
@ -1226,12 +1226,12 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
return not_in_chaos;
|
return not_in_chaos;
|
||||||
|
|
||||||
if(l == laClearing)
|
if(l == laClearing)
|
||||||
if(!(stdeuc || a38 || (a45 && !nonbitrunc) || (a47 && !nonbitrunc)) || gp::on || irr::on)
|
if(!(stdeuc || a38 || (a45 && BITRUNCATED) || (a47 && BITRUNCATED)) || NONSTDVAR)
|
||||||
if(!bounded)
|
if(!bounded)
|
||||||
return not_implemented;
|
return not_implemented;
|
||||||
|
|
||||||
// does not work in non-bitrunc a4
|
// does not work in non-bitrunc a4
|
||||||
if(l == laOvergrown && a4 && nonbitrunc)
|
if(l == laOvergrown && a4 && !BITRUNCATED)
|
||||||
return some0;
|
return some0;
|
||||||
|
|
||||||
// does not work in bounded either
|
// does not work in bounded either
|
||||||
@ -1256,7 +1256,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
return not_enough_space;
|
return not_enough_space;
|
||||||
|
|
||||||
// ... and it works in gp only partially
|
// ... and it works in gp only partially
|
||||||
if((l == laBlizzard || l == laVolcano) && gp::on && (old_daily_id < 33 || !sphere))
|
if((l == laBlizzard || l == laVolcano) && GOLDBERG && (old_daily_id < 33 || !sphere))
|
||||||
return partially_implemented;
|
return partially_implemented;
|
||||||
|
|
||||||
// Kraken does not really work on odd-sided cells;
|
// Kraken does not really work on odd-sided cells;
|
||||||
@ -1271,8 +1271,8 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(geometry == gZebraQuotient)
|
if(geometry == gZebraQuotient)
|
||||||
return pattern_compatibility;
|
return pattern_compatibility;
|
||||||
if(stdeuc) ;
|
if(stdeuc) ;
|
||||||
else if(S7 == 4 && !nonbitrunc) return special_geo;
|
else if(S7 == 4 && BITRUNCATED) return special_geo;
|
||||||
else if(bigsphere && nonbitrunc && !elliptic) return special_geo;
|
else if(bigsphere && !BITRUNCATED && !elliptic) return special_geo;
|
||||||
else return dont_work;
|
else return dont_work;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1322,11 +1322,11 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
else if(quotient) return pattern_incompatibility;
|
else if(quotient) return pattern_incompatibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(among(l, laEmerald, laCamelot, laDryForest) && (AS3 != 3) && nonbitrunc)
|
if(among(l, laEmerald, laCamelot, laDryForest) && VALENCE != 3)
|
||||||
return hedgehogs;
|
return hedgehogs;
|
||||||
|
|
||||||
// ... wineyard pattern is GOOD only in the standard geometry or Euclidean
|
// ... wineyard pattern is GOOD only in the standard geometry or Euclidean
|
||||||
if(l == laWineyard && (gp::on || sphere) && !randomPatternsMode)
|
if(l == laWineyard && (NONSTDVAR || sphere) && !randomPatternsMode)
|
||||||
return pattern_not_implemented_random;
|
return pattern_not_implemented_random;
|
||||||
|
|
||||||
if(l == laTrollheim && quotient == qFIELD)
|
if(l == laTrollheim && quotient == qFIELD)
|
||||||
@ -1338,7 +1338,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laTrollheim && !stdeuc && !bounded)
|
if(l == laTrollheim && !stdeuc && !bounded)
|
||||||
return some1;
|
return some1;
|
||||||
|
|
||||||
if(l == laReptile && (a38 || a4 || sphere || nonbitrunc || gp::on || irr::on || (quotient && geometry != gZebraQuotient)))
|
if(l == laReptile && (a38 || a4 || sphere || !BITRUNCATED || (quotient && geometry != gZebraQuotient)))
|
||||||
return bad_graphics;
|
return bad_graphics;
|
||||||
|
|
||||||
if((l == laDragon || l == laReptile) && !stdeuc && !smallbounded && !randomPatternsMode)
|
if((l == laDragon || l == laReptile) && !stdeuc && !smallbounded && !randomPatternsMode)
|
||||||
@ -1364,15 +1364,15 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laZebra && quotient && geometry != gZebraQuotient && !randomPatternsMode)
|
if(l == laZebra && quotient && geometry != gZebraQuotient && !randomPatternsMode)
|
||||||
return pattern_incompatibility;
|
return pattern_incompatibility;
|
||||||
|
|
||||||
if(l == laZebra && !(stdeuc || (a4 && nonbitrunc) || a46) && !randomPatternsMode)
|
if(l == laZebra && !(stdeuc || (a4 && !BITRUNCATED) || a46) && !randomPatternsMode)
|
||||||
return pattern_not_implemented_weird;
|
return pattern_not_implemented_weird;
|
||||||
|
|
||||||
if(l == laCrossroads3 && euclid)
|
if(l == laCrossroads3 && euclid)
|
||||||
return inaccurate; // because it is not accurate
|
return inaccurate; // because it is not accurate
|
||||||
|
|
||||||
if(l == laPrairie) {
|
if(l == laPrairie) {
|
||||||
if(gp::on) return not_implemented;
|
if(GOLDBERG) return not_implemented;
|
||||||
else if(stdeuc || (bigsphere && !nonbitrunc && !elliptic) || (geometry == gFieldQuotient)) ;
|
else if(stdeuc || (bigsphere && BITRUNCATED && !elliptic) || (geometry == gFieldQuotient)) ;
|
||||||
else if(!bounded) return not_implemented;
|
else if(!bounded) return not_implemented;
|
||||||
else return unbounded_only;
|
else return unbounded_only;
|
||||||
}
|
}
|
||||||
@ -1403,7 +1403,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laDual && geosupport_threecolor() == 2)
|
if(l == laDual && geosupport_threecolor() == 2)
|
||||||
return specially_designed;
|
return specially_designed;
|
||||||
|
|
||||||
if(l == laDual && !geometry && !gp::on)
|
if(l == laDual && !geometry && !GOLDBERG)
|
||||||
return hyperbolic_37 ? not_in_full_game3 : not_in_full_game;
|
return hyperbolic_37 ? not_in_full_game3 : not_in_full_game;
|
||||||
|
|
||||||
if(l == laSnakeNest) {
|
if(l == laSnakeNest) {
|
||||||
@ -1413,7 +1413,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(l == laDocks && !randomPatternsMode) {
|
if(l == laDocks && !randomPatternsMode) {
|
||||||
if(a38 && !gp::on) return specially_designed;
|
if(a38 && !GOLDBERG) return specially_designed;
|
||||||
if(a38) return pattern_not_implemented_weird;
|
if(a38) return pattern_not_implemented_weird;
|
||||||
return pattern_not_implemented_exclude;
|
return pattern_not_implemented_exclude;
|
||||||
}
|
}
|
||||||
@ -1431,7 +1431,7 @@ land_validity_t& land_validity(eLand l) {
|
|||||||
if(l == laWildWest && !randomPatternsMode)
|
if(l == laWildWest && !randomPatternsMode)
|
||||||
return out_of_theme;
|
return out_of_theme;
|
||||||
|
|
||||||
if(l == laIce && !gp::on && !irr::on && hyperbolic_37 && !quotient && !archimedean && !binarytiling)
|
if(l == laIce && STDVAR && hyperbolic_37 && !quotient && !archimedean && !binarytiling)
|
||||||
return full_game;
|
return full_game;
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -112,10 +112,9 @@ namespace mapstream {
|
|||||||
int32_t i = VERNUM; save(i);
|
int32_t i = VERNUM; save(i);
|
||||||
save(patterns::whichPattern);
|
save(patterns::whichPattern);
|
||||||
save(geometry);
|
save(geometry);
|
||||||
char nbtype = nonbitrunc;
|
char nbtype = char(variation);
|
||||||
if(gp::on) nbtype = 2;
|
|
||||||
save(nbtype);
|
save(nbtype);
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
save(gp::param.first);
|
save(gp::param.first);
|
||||||
save(gp::param.second);
|
save(gp::param.second);
|
||||||
}
|
}
|
||||||
@ -211,9 +210,8 @@ namespace mapstream {
|
|||||||
load(geometry);
|
load(geometry);
|
||||||
char nbtype;
|
char nbtype;
|
||||||
load(nbtype);
|
load(nbtype);
|
||||||
nonbitrunc = !!nbtype;
|
variation = eVariation(nbtype);
|
||||||
gp::on = nbtype == 2;
|
if(GOLDBERG) {
|
||||||
if(gp::on) {
|
|
||||||
load(gp::param.first);
|
load(gp::param.first);
|
||||||
load(gp::param.second);
|
load(gp::param.second);
|
||||||
}
|
}
|
||||||
@ -690,7 +688,7 @@ namespace mapeditor {
|
|||||||
if(painttype == 4 && radius) {
|
if(painttype == 4 && radius) {
|
||||||
if(where.at->type != copysource.at->type) return;
|
if(where.at->type != copysource.at->type) return;
|
||||||
if(where.spin<0) where.spin=0;
|
if(where.spin<0) where.spin=0;
|
||||||
if(!nonbitrunc && !ctof(mouseover) && ((where.spin&1) != (copysource.spin&1)))
|
if(BITRUNCATED && !ctof(mouseover) && ((where.spin&1) != (copysource.spin&1)))
|
||||||
where += 1;
|
where += 1;
|
||||||
}
|
}
|
||||||
if(painttype != 4) copysource.at = NULL;
|
if(painttype != 4) copysource.at = NULL;
|
||||||
@ -1376,8 +1374,8 @@ namespace mapeditor {
|
|||||||
int nt;
|
int nt;
|
||||||
hr::ignore(fscanf(f, "%d%d%d%d\n", &tg, &nt, &wp, &patterns::subpattern_flags));
|
hr::ignore(fscanf(f, "%d%d%d%d\n", &tg, &nt, &wp, &patterns::subpattern_flags));
|
||||||
patterns::whichPattern = patterns::ePattern(wp);
|
patterns::whichPattern = patterns::ePattern(wp);
|
||||||
if(tg != geometry) { targetgeometry = eGeometry(tg); stop_game_and_switch_mode(rg::geometry); }
|
set_geometry(eGeometry(tg));
|
||||||
if(bool(nt) != nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);
|
set_variation(eVariation(nt));
|
||||||
start_game();
|
start_game();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1422,7 +1420,7 @@ namespace mapeditor {
|
|||||||
fprintf(f, "HyperRogue saved picture\n");
|
fprintf(f, "HyperRogue saved picture\n");
|
||||||
fprintf(f, "%x\n", VERNUM_HEX);
|
fprintf(f, "%x\n", VERNUM_HEX);
|
||||||
if(VERNUM_HEX >= 0xA0A0)
|
if(VERNUM_HEX >= 0xA0A0)
|
||||||
fprintf(f, "%d %d %d %d\n", geometry, nonbitrunc, patterns::whichPattern, patterns::subpattern_flags);
|
fprintf(f, "%d %d %d %d\n", geometry, int(variation), patterns::whichPattern, patterns::subpattern_flags);
|
||||||
for(int i=0; i<USERSHAPEGROUPS; i++) for(auto usp: usershapes[i]) {
|
for(int i=0; i<USERSHAPEGROUPS; i++) for(auto usp: usershapes[i]) {
|
||||||
usershape *us = usp.second;
|
usershape *us = usp.second;
|
||||||
if(!us) continue;
|
if(!us) continue;
|
||||||
|
@ -441,7 +441,7 @@ void showChangeMode() {
|
|||||||
dialog::addBoolItem(XLAT("Tutorial"), tour::on, 'T');
|
dialog::addBoolItem(XLAT("Tutorial"), tour::on, 'T');
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dialog::addBoolItem(XLAT("experiment with geometry"), geometry || nonbitrunc || viewdists, 'e');
|
dialog::addBoolItem(XLAT("experiment with geometry"), geometry || CHANGED_VARIATION || viewdists, 'e');
|
||||||
dialog::addBoolItem(XLAT(SHMUPTITLE), (shmup::on || multi::players > 1), 's');
|
dialog::addBoolItem(XLAT(SHMUPTITLE), (shmup::on || multi::players > 1), 's');
|
||||||
if(!shmup::on) dialog::addSelItem(XLAT("hardcore mode"),
|
if(!shmup::on) dialog::addSelItem(XLAT("hardcore mode"),
|
||||||
hardcore && !pureHardcore() ? XLAT("PARTIAL") : ONOFF(hardcore), 'h');
|
hardcore && !pureHardcore() ? XLAT("PARTIAL") : ONOFF(hardcore), 'h');
|
||||||
@ -771,8 +771,7 @@ void showStartMenu() {
|
|||||||
if(!sphere) {
|
if(!sphere) {
|
||||||
stop_game();
|
stop_game();
|
||||||
specialland = laHalloween;
|
specialland = laHalloween;
|
||||||
targetgeometry = gSphere;
|
set_geometry(gSphere);
|
||||||
restart_game(rg::geometry);
|
|
||||||
vid.alpha = 999;
|
vid.alpha = 999;
|
||||||
vid.scale = 998;
|
vid.scale = 998;
|
||||||
}
|
}
|
||||||
@ -826,7 +825,7 @@ void setAppropriateOverview() {
|
|||||||
pushScreen(yendor::showMenu);
|
pushScreen(yendor::showMenu);
|
||||||
else if(peace::on)
|
else if(peace::on)
|
||||||
pushScreen(peace::showMenu);
|
pushScreen(peace::showMenu);
|
||||||
else if((geometry != gNormal || gp::on || irr::on) && !chaosmode && !(geometry == gEuclid && isCrossroads(specialland)) && !(weirdhyperbolic && specialland == laCrossroads4)) {
|
else if((geometry != gNormal || NONSTDVAR) && !chaosmode && !(geometry == gEuclid && isCrossroads(specialland)) && !(weirdhyperbolic && specialland == laCrossroads4)) {
|
||||||
runGeometryExperiments();
|
runGeometryExperiments();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -679,7 +679,7 @@ void generateSnake(cell *c, int i, int color) {
|
|||||||
c->hitpoints = color;
|
c->hitpoints = color;
|
||||||
int cpair = (1<<pattern_threecolor(c)) | (1<<pattern_threecolor(c->move(i)));
|
int cpair = (1<<pattern_threecolor(c)) | (1<<pattern_threecolor(c->move(i)));
|
||||||
preventbarriers(c);
|
preventbarriers(c);
|
||||||
int len = nonbitrunc ? 2 : ROCKSNAKELENGTH;
|
int len = BITRUNCATED ? ROCKSNAKELENGTH : 2;
|
||||||
cell *c2 = c;
|
cell *c2 = c;
|
||||||
vector<cell*> rocksnake;
|
vector<cell*> rocksnake;
|
||||||
while(--len) {
|
while(--len) {
|
||||||
@ -703,7 +703,7 @@ void generateSnake(cell *c, int i, int color) {
|
|||||||
i = goodsteps[hrand(isize(goodsteps))];
|
i = goodsteps[hrand(isize(goodsteps))];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(isize(rocksnake) < ROCKSNAKELENGTH/2 && !nonbitrunc) {
|
if(isize(rocksnake) < ROCKSNAKELENGTH/2 && BITRUNCATED) {
|
||||||
for(int i=0; i<isize(rocksnake); i++)
|
for(int i=0; i<isize(rocksnake); i++)
|
||||||
rocksnake[i]->monst = moNone;
|
rocksnake[i]->monst = moNone;
|
||||||
}
|
}
|
||||||
|
297
pattern2.cpp
297
pattern2.cpp
@ -5,7 +5,7 @@
|
|||||||
namespace hr {
|
namespace hr {
|
||||||
|
|
||||||
int gp_threecolor() {
|
int gp_threecolor() {
|
||||||
if(!gp::on) return 0;
|
if(!GOLDBERG) return 0;
|
||||||
if(S3 == 3 && (gp::param.first - gp::param.second) % 3 == 0) return 2;
|
if(S3 == 3 && (gp::param.first - gp::param.second) % 3 == 0) return 2;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -38,14 +38,14 @@ bool ishept(cell *c) {
|
|||||||
bool ishex1(cell *c) {
|
bool ishex1(cell *c) {
|
||||||
// EUCLIDEAN
|
// EUCLIDEAN
|
||||||
if(euclid) return eupattern(c) == 1;
|
if(euclid) return eupattern(c) == 1;
|
||||||
else if(gp::on) return c->master->c7 != c && !pseudohept(c->move(0));
|
else if(GOLDBERG) return c->master->c7 != c && !pseudohept(c->move(0));
|
||||||
else return c->type != S6;
|
else return c->type != S6;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ishex2(cell *c) {
|
bool ishex2(cell *c) {
|
||||||
// EUCLIDEAN
|
// EUCLIDEAN
|
||||||
if(euclid) return eupattern(c) == 1;
|
if(euclid) return eupattern(c) == 1;
|
||||||
else if(gp::on) return c->master->c7 != c && gp::pseudohept_val(c) == 1;
|
else if(GOLDBERG) return c->master->c7 != c && gp::pseudohept_val(c) == 1;
|
||||||
else return c->type != S6;
|
else return c->type != S6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ int land50(cell *c) {
|
|||||||
|
|
||||||
int polara50(cell *c) {
|
int polara50(cell *c) {
|
||||||
if(sphere || euclid || S7>7 || S6>6) return 0;
|
if(sphere || euclid || S7>7 || S6>6) return 0;
|
||||||
else if(gp::on || irr::on) return polara50(fiftyval(c->master->c7));
|
else if(NONSTDVAR) return polara50(fiftyval(c->master->c7));
|
||||||
else if(ctof(c)) return polara50(fiftyval(c));
|
else if(ctof(c)) return polara50(fiftyval(c));
|
||||||
else {
|
else {
|
||||||
auto ar = gp::get_masters(c);
|
auto ar = gp::get_masters(c);
|
||||||
@ -153,7 +153,7 @@ int polara50(cell *c) {
|
|||||||
int polarb50(cell *c) {
|
int polarb50(cell *c) {
|
||||||
if(euclid) return true;
|
if(euclid) return true;
|
||||||
if(sphere || euclid || S7>7 || S6>6) return true;
|
if(sphere || euclid || S7>7 || S6>6) return true;
|
||||||
else if(gp::on || irr::on) return polarb50(fiftyval(c->master->c7));
|
else if(NONSTDVAR) return polarb50(fiftyval(c->master->c7));
|
||||||
else if(ctof(c)) return polarb50(fiftyval(c));
|
else if(ctof(c)) return polarb50(fiftyval(c));
|
||||||
else {
|
else {
|
||||||
auto ar = gp::get_masters(c);
|
auto ar = gp::get_masters(c);
|
||||||
@ -238,7 +238,7 @@ int fiftyval200(cell *c) {
|
|||||||
// zebraval
|
// zebraval
|
||||||
|
|
||||||
int dir_bitrunc457(cell *c) {
|
int dir_bitrunc457(cell *c) {
|
||||||
if(gp::on) return c->master->zebraval / 10;
|
if(GOLDBERG) return c->master->zebraval / 10;
|
||||||
int wset = 0;
|
int wset = 0;
|
||||||
int has1 = 0;
|
int has1 = 0;
|
||||||
for(int i=0; i<4; i++) {
|
for(int i=0; i<4; i++) {
|
||||||
@ -259,7 +259,7 @@ int val46(cell *c);
|
|||||||
|
|
||||||
int zebra40(cell *c) {
|
int zebra40(cell *c) {
|
||||||
if(euclid) return eupattern(c);
|
if(euclid) return eupattern(c);
|
||||||
else if(irr::on) return c->master->zebraval/10;
|
else if(IRREGULAR) return c->master->zebraval/10;
|
||||||
else if(a46) {
|
else if(a46) {
|
||||||
int v = val46(c);
|
int v = val46(c);
|
||||||
if(v<4) return v;
|
if(v<4) return v;
|
||||||
@ -267,7 +267,7 @@ int zebra40(cell *c) {
|
|||||||
}
|
}
|
||||||
else if(ctof(c)) return (c->master->zebraval/10);
|
else if(ctof(c)) return (c->master->zebraval/10);
|
||||||
else if(a4) {
|
else if(a4) {
|
||||||
if(gp::on) return zebra40(c->master->c7);
|
if(GOLDBERG) return zebra40(c->master->c7);
|
||||||
int ws = dir_bitrunc457(c);
|
int ws = dir_bitrunc457(c);
|
||||||
if(ws < 0) return -ws;
|
if(ws < 0) return -ws;
|
||||||
int tot = 0;
|
int tot = 0;
|
||||||
@ -341,8 +341,8 @@ pair<int, bool> fieldval(cell *c) {
|
|||||||
int fieldval_uniq(cell *c) {
|
int fieldval_uniq(cell *c) {
|
||||||
if(sphere) {
|
if(sphere) {
|
||||||
if(archimedean) return c->master->fiftyval;
|
if(archimedean) return c->master->fiftyval;
|
||||||
else if(irr::on) return irr::cellindex[c];
|
else if(IRREGULAR) return irr::cellindex[c];
|
||||||
else if(gp::on) return (get_code(gp::get_local_info(c)) << 8) | (c->master->fieldval / S7);
|
else if(GOLDBERG) return (get_code(gp::get_local_info(c)) << 8) | (c->master->fieldval / S7);
|
||||||
if(ctof(c)) return c->master->fieldval;
|
if(ctof(c)) return c->master->fieldval;
|
||||||
else return createMov(c, 0)->master->fieldval + 256 * createMov(c,2)->master->fieldval + (1<<16) * createMov(c,4)->master->fieldval;
|
else return createMov(c, 0)->master->fieldval + 256 * createMov(c,2)->master->fieldval + (1<<16) * createMov(c,4)->master->fieldval;
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ int fieldval_uniq(cell *c) {
|
|||||||
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
return gmod(p.first * torusconfig::dx + p.second * torusconfig::dy, torusconfig::qty);
|
||||||
}
|
}
|
||||||
else if(binarytiling || archimedean) return 0;
|
else if(binarytiling || archimedean) return 0;
|
||||||
else if(ctof(c) || gp::on || irr::on) return c->master->fieldval/S7;
|
else if(ctof(c) || NONSTDVAR) return c->master->fieldval/S7;
|
||||||
else {
|
else {
|
||||||
int z = 0;
|
int z = 0;
|
||||||
for(int u=0; u<S6; u+=2)
|
for(int u=0; u<S6; u+=2)
|
||||||
@ -364,7 +364,7 @@ int fieldval_uniq(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int fieldval_uniq_rand(cell *c, int randval) {
|
int fieldval_uniq_rand(cell *c, int randval) {
|
||||||
if(sphere || torus || euclid || gp::on || irr::on)
|
if(sphere || torus || euclid || NONSTDVAR)
|
||||||
// we do not care in these cases
|
// we do not care in these cases
|
||||||
return fieldval_uniq(c);
|
return fieldval_uniq(c);
|
||||||
if(ctof(c)) return currfp.gmul(c->master->fieldval, randval)/7;
|
if(ctof(c)) return currfp.gmul(c->master->fieldval, randval)/7;
|
||||||
@ -433,7 +433,7 @@ int getHemisphere(heptagon *h, int which) {
|
|||||||
|
|
||||||
int getHemisphere(cell *c, int which) {
|
int getHemisphere(cell *c, int which) {
|
||||||
if(torus) return 0;
|
if(torus) return 0;
|
||||||
if(which == 0 && gp::on && has_nice_dual()) {
|
if(which == 0 && GOLDBERG && has_nice_dual()) {
|
||||||
set<cell*> visited;
|
set<cell*> visited;
|
||||||
vector<cell*> q;
|
vector<cell*> q;
|
||||||
vector<int> type;
|
vector<int> type;
|
||||||
@ -465,7 +465,7 @@ int getHemisphere(cell *c, int which) {
|
|||||||
return getHemisphere(c->master, which);
|
return getHemisphere(c->master, which);
|
||||||
else {
|
else {
|
||||||
int score = 0;
|
int score = 0;
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
gp::be_in_triangle(li);
|
gp::be_in_triangle(li);
|
||||||
auto corner = gp::corners * gp::loctoh_ort(li.relative);
|
auto corner = gp::corners * gp::loctoh_ort(li.relative);
|
||||||
@ -479,7 +479,7 @@ int getHemisphere(cell *c, int which) {
|
|||||||
if(score == 0 && error < -.001) score--;
|
if(score == 0 && error < -.001) score--;
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
auto m = irr::get_masters(c);
|
auto m = irr::get_masters(c);
|
||||||
for(int i=0; i<3; i++)
|
for(int i=0; i<3; i++)
|
||||||
score += getHemisphere(m[i], which);
|
score += getHemisphere(m[i], which);
|
||||||
@ -635,11 +635,11 @@ namespace patterns {
|
|||||||
si.id = (c->master->fiftyval >> 1) & 3;
|
si.id = (c->master->fiftyval >> 1) & 3;
|
||||||
else
|
else
|
||||||
si.id = 0;
|
si.id = 0;
|
||||||
if(nonbitrunc && gp_threecolor() != 2)
|
if(!BITRUNCATED && gp_threecolor() != 2)
|
||||||
si.id *= 4;
|
si.id *= 4;
|
||||||
else
|
else
|
||||||
si.id += 4;
|
si.id += 4;
|
||||||
si.dir = (pat == PAT_COLORING && !nonbitrunc ? 1 : 0) + (c->master->fiftyval | (c->master->fiftyval & 8 ? 0 : 2));
|
si.dir = (pat == PAT_COLORING && BITRUNCATED ? 1 : 0) + (c->master->fiftyval | (c->master->fiftyval & 8 ? 0 : 2));
|
||||||
si.symmetries = 2;
|
si.symmetries = 2;
|
||||||
si.id += 8;
|
si.id += 8;
|
||||||
si.id %= 12;
|
si.id %= 12;
|
||||||
@ -649,14 +649,14 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int sp = c->c.spin(0);
|
int sp = c->c.spin(0);
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
sp = gp::last_dir(c);
|
sp = gp::last_dir(c);
|
||||||
sp ^= int(ishex2(c));
|
sp ^= int(ishex2(c));
|
||||||
}
|
}
|
||||||
if(geometry == gBolza2 && (!gp::on || gp_threecolor() == 2)) {
|
if(geometry == gBolza2 && (!GOLDBERG || gp_threecolor() == 2)) {
|
||||||
patterninfo si0;
|
patterninfo si0;
|
||||||
patterninfo si1;
|
patterninfo si1;
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
val38(c->master->c7, si0, 0, PAT_COLORING);
|
val38(c->master->c7, si0, 0, PAT_COLORING);
|
||||||
val38(c->master->move(li.last_dir)->c7, si1, 0, PAT_COLORING);
|
val38(c->master->move(li.last_dir)->c7, si1, 0, PAT_COLORING);
|
||||||
@ -672,7 +672,7 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
si.id = 8 * ((c->master->fiftyval & 1) ^ (sp & 1));
|
si.id = 8 * ((c->master->fiftyval & 1) ^ (sp & 1));
|
||||||
if(gp::on && pseudohept(c)) si.id = 4;
|
if(GOLDBERG && pseudohept(c)) si.id = 4;
|
||||||
bool dock = false;
|
bool dock = false;
|
||||||
for(int i=0; i<c->type; i+=2) {
|
for(int i=0; i<c->type; i+=2) {
|
||||||
int fiv = createMov(c, i)->master->fiftyval;
|
int fiv = createMov(c, i)->master->fiftyval;
|
||||||
@ -685,13 +685,13 @@ namespace patterns {
|
|||||||
if(symRotation) si.symmetries = 2;
|
if(symRotation) si.symmetries = 2;
|
||||||
si.id += 8;
|
si.id += 8;
|
||||||
si.id %= 12;
|
si.id %= 12;
|
||||||
if(gp::on && pat == PAT_COLORING)
|
if(GOLDBERG && pat == PAT_COLORING)
|
||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
cell *c2 = createMov(c, i);
|
cell *c2 = createMov(c, i);
|
||||||
int id2 = 4;
|
int id2 = 4;
|
||||||
if(!pseudohept(c2)) {
|
if(!pseudohept(c2)) {
|
||||||
int sp2 = c2->c.spin(0);
|
int sp2 = c2->c.spin(0);
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
sp2 = gp::last_dir(c2);
|
sp2 = gp::last_dir(c2);
|
||||||
sp2 ^= int(ishex2(c2));
|
sp2 ^= int(ishex2(c2));
|
||||||
}
|
}
|
||||||
@ -733,7 +733,7 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void val_all(cell *c, patterninfo &si, int sub, int pat) {
|
void val_all(cell *c, patterninfo &si, int sub, int pat) {
|
||||||
if(irr::on || archimedean || binarytiling) si.symmetries = 1;
|
if(IRREGULAR || archimedean || binarytiling) si.symmetries = 1;
|
||||||
else if(a46) val46(c, si, sub, pat);
|
else if(a46) val46(c, si, sub, pat);
|
||||||
else if(a38) val38(c, si, sub, pat);
|
else if(a38) val38(c, si, sub, pat);
|
||||||
else if(sphere) valSibling(c, si, sub, pat);
|
else if(sphere) valSibling(c, si, sub, pat);
|
||||||
@ -745,7 +745,7 @@ namespace patterns {
|
|||||||
|
|
||||||
void val_warped(cell *c, patterninfo& si) {
|
void val_warped(cell *c, patterninfo& si) {
|
||||||
int u = ishept(c)?1:0;
|
int u = ishept(c)?1:0;
|
||||||
if(S3 != 3 || S7 != 7 || gp::on || irr::on) {
|
if(S3 != 3 || S7 != 7 || NONSTDVAR) {
|
||||||
si.id = u;
|
si.id = u;
|
||||||
si.dir = 1;
|
si.dir = 1;
|
||||||
return;
|
return;
|
||||||
@ -815,7 +815,7 @@ namespace patterns {
|
|||||||
val_all(c, si, 0, 0);
|
val_all(c, si, 0, 0);
|
||||||
|
|
||||||
// get id:
|
// get id:
|
||||||
if((gp::on? (S3==3) : !weirdhyperbolic) && isWarped(c))
|
if((GOLDBERG? (S3==3) : !weirdhyperbolic) && isWarped(c))
|
||||||
val_warped(c, si);
|
val_warped(c, si);
|
||||||
else {
|
else {
|
||||||
si.id = pseudohept(c) ? 1 : 0;
|
si.id = pseudohept(c) ? 1 : 0;
|
||||||
@ -827,13 +827,13 @@ namespace patterns {
|
|||||||
if(subpattern_flags & SPF_FULLSYM)
|
if(subpattern_flags & SPF_FULLSYM)
|
||||||
si.symmetries = 1;
|
si.symmetries = 1;
|
||||||
}
|
}
|
||||||
if(sphere && !(nonbitrunc) && !(S7 == 3))
|
if(sphere && BITRUNCATED && !(S7 == 3))
|
||||||
si.symmetries = ctof(c) ? 1 : 2;
|
si.symmetries = ctof(c) ? 1 : 2;
|
||||||
if(sphere && (sub & SPF_EXTRASYM)) {
|
if(sphere && (sub & SPF_EXTRASYM)) {
|
||||||
si.symmetries = ctof(c) ? 1 : 2;
|
si.symmetries = ctof(c) ? 1 : 2;
|
||||||
}
|
}
|
||||||
if(a38)
|
if(a38)
|
||||||
si.symmetries = (ctof(c) && !nonbitrunc) ? 1 : 2;
|
si.symmetries = (ctof(c) && BITRUNCATED) ? 1 : 2;
|
||||||
if(a457) {
|
if(a457) {
|
||||||
si.symmetries = ctof(c) ? 1 : 2;
|
si.symmetries = ctof(c) ? 1 : 2;
|
||||||
if(!ctof(c)) si.dir = 0;
|
if(!ctof(c)) si.dir = 0;
|
||||||
@ -843,7 +843,7 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gp::on && has_nice_dual() && !ishept(c) && ishex1(c)) si.dir = fix6(si.dir+3);
|
if(GOLDBERG && has_nice_dual() && !ishept(c) && ishex1(c)) si.dir = fix6(si.dir+3);
|
||||||
}
|
}
|
||||||
|
|
||||||
ePattern whichPattern = PAT_NONE;
|
ePattern whichPattern = PAT_NONE;
|
||||||
@ -917,7 +917,7 @@ namespace patterns {
|
|||||||
si.id = zebra40(c); // 4 to 43
|
si.id = zebra40(c); // 4 to 43
|
||||||
int t4 = si.id>>2, tcdir = 0;
|
int t4 = si.id>>2, tcdir = 0;
|
||||||
|
|
||||||
if(nonbitrunc) tcdir = si.id^1;
|
if(PURE) tcdir = si.id^1;
|
||||||
|
|
||||||
else if(t4 == 10) tcdir = si.id-20;
|
else if(t4 == 10) tcdir = si.id-20;
|
||||||
else if(t4 >= 4 && t4 < 7) tcdir = 40 + (si.id&3);
|
else if(t4 >= 4 && t4 < 7) tcdir = 40 + (si.id&3);
|
||||||
@ -972,11 +972,11 @@ namespace patterns {
|
|||||||
int look_for = -1;
|
int look_for = -1;
|
||||||
int shft = 0;
|
int shft = 0;
|
||||||
if(inr(si.id, 0, 4)) {
|
if(inr(si.id, 0, 4)) {
|
||||||
look_for = si.id + (nonbitrunc ? 4 : 60);
|
look_for = si.id + (PURE ? 4 : 60);
|
||||||
if(symRotation) si.symmetries = 1;
|
if(symRotation) si.symmetries = 1;
|
||||||
}
|
}
|
||||||
else if(inr(si.id, 4, 32)) look_for = si.id + (nonbitrunc ? 28 : 168);
|
else if(inr(si.id, 4, 32)) look_for = si.id + (PURE ? 28 : 168);
|
||||||
else if(inr(si.id, 32, 60)) look_for = si.id + (nonbitrunc ? -28 : 112);
|
else if(inr(si.id, 32, 60)) look_for = si.id + (PURE ? -28 : 112);
|
||||||
else if(inr(si.id, 60, 88)) look_for = si.id - 56, shft = si.reflect ? 1 : 5;
|
else if(inr(si.id, 60, 88)) look_for = si.id - 56, shft = si.reflect ? 1 : 5;
|
||||||
else if(inr(si.id, 88, 116)) look_for = si.id - 84, shft = 3;
|
else if(inr(si.id, 88, 116)) look_for = si.id - 84, shft = 3;
|
||||||
else if(inr(si.id, 116, 144)) look_for = si.id + 56;
|
else if(inr(si.id, 116, 144)) look_for = si.id + 56;
|
||||||
@ -1020,7 +1020,7 @@ namespace patterns {
|
|||||||
if(euclid)
|
if(euclid)
|
||||||
// use the torus ID
|
// use the torus ID
|
||||||
si.id = fieldpattern::fieldval_uniq(c);
|
si.id = fieldpattern::fieldval_uniq(c);
|
||||||
else if(nonbitrunc && !archimedean && !gp::on && !irr::on)
|
else if(PURE && !archimedean)
|
||||||
// use the actual field codes
|
// use the actual field codes
|
||||||
si.id = fieldpattern::fieldval(c).first;
|
si.id = fieldpattern::fieldval(c).first;
|
||||||
else
|
else
|
||||||
@ -1037,7 +1037,7 @@ namespace patterns {
|
|||||||
val_all(c, si, sub, pat);
|
val_all(c, si, sub, pat);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(gp::on) {
|
else if(GOLDBERG) {
|
||||||
bool football = (pat == PAT_COLORING && (sub & SPF_FOOTBALL)) || pat == 0;
|
bool football = (pat == PAT_COLORING && (sub & SPF_FOOTBALL)) || pat == 0;
|
||||||
if(football) val_nopattern(c, si, sub);
|
if(football) val_nopattern(c, si, sub);
|
||||||
else val_threecolors(c, si, sub);
|
else val_threecolors(c, si, sub);
|
||||||
@ -1065,18 +1065,18 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool geosupport_chessboard() {
|
bool geosupport_chessboard() {
|
||||||
return archimedean ? arcm::current.support_chessboard() : (nonbitrunc && S3 == 4);
|
return archimedean ? arcm::current.support_chessboard() : (VALENCE % 2 == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int geosupport_threecolor() {
|
int geosupport_threecolor() {
|
||||||
if(irr::on) return 0;
|
if(IRREGULAR) return 0;
|
||||||
if(!nonbitrunc && S3 == 3) {
|
if(BITRUNCATED && S3 == 3) {
|
||||||
if(S7 % 2) return 1;
|
if(S7 % 2) return 1;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
if((S7 % 2 == 0) && (S3 == 3))
|
if((S7 % 2 == 0) && (S3 == 3))
|
||||||
return 2;
|
return 2;
|
||||||
if(a46 && nonbitrunc)
|
if(a46 && PURE)
|
||||||
return 1;
|
return 1;
|
||||||
if(archimedean) return arcm::current.support_threecolor();
|
if(archimedean) return arcm::current.support_threecolor();
|
||||||
return 0;
|
return 0;
|
||||||
@ -1084,11 +1084,11 @@ int geosupport_threecolor() {
|
|||||||
|
|
||||||
int geosupport_football() {
|
int geosupport_football() {
|
||||||
// always works in bitrunc geometries
|
// always works in bitrunc geometries
|
||||||
if(!nonbitrunc) return 2;
|
if(BITRUNCATED) return 2;
|
||||||
|
|
||||||
if(archimedean) return arcm::current.support_football();
|
if(archimedean) return arcm::current.support_football();
|
||||||
|
|
||||||
if(irr::on) return irr::bitruncations_performed ? 2 : 1;
|
if(IRREGULAR) return irr::bitruncations_performed ? 2 : 1;
|
||||||
|
|
||||||
// always works in patterns supporting three-color
|
// always works in patterns supporting three-color
|
||||||
int tc = max(geosupport_threecolor(), gp_threecolor());
|
int tc = max(geosupport_threecolor(), gp_threecolor());
|
||||||
@ -1097,13 +1097,13 @@ int geosupport_football() {
|
|||||||
if(S3 == 3 && S7 == 7) return 1;
|
if(S3 == 3 && S7 == 7) return 1;
|
||||||
// nice chessboard pattern, but not the actual Graveyard
|
// nice chessboard pattern, but not the actual Graveyard
|
||||||
if(S3 == 4 && !(S7&1)) return 1;
|
if(S3 == 4 && !(S7&1)) return 1;
|
||||||
if(S3 == 4 && gp::on) return 1;
|
if(S3 == 4 && GOLDBERG) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pattern_threecolor(cell *c) {
|
int pattern_threecolor(cell *c) {
|
||||||
if(archimedean) return arcm::threecolor(arcm::id_of(c->master));
|
if(archimedean) return arcm::threecolor(arcm::id_of(c->master));
|
||||||
if(irr::on || binarytiling) return !pseudohept(c);
|
if(IRREGULAR || binarytiling) return !pseudohept(c);
|
||||||
if(S3 == 3 && !(S7&1) && gp_threecolor() == 1 && c->master->c7 != c) {
|
if(S3 == 3 && !(S7&1) && gp_threecolor() == 1 && c->master->c7 != c) {
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
int rel = (li.relative.first - li.relative.second + MODFIXER) % 3;
|
int rel = (li.relative.first - li.relative.second + MODFIXER) % 3;
|
||||||
@ -1116,12 +1116,12 @@ int pattern_threecolor(cell *c) {
|
|||||||
return pattern_threecolor(createStep(c->master, fix7(li.last_dir+1))->c7);
|
return pattern_threecolor(createStep(c->master, fix7(li.last_dir+1))->c7);
|
||||||
}
|
}
|
||||||
if(a38) {
|
if(a38) {
|
||||||
// if(gp::on && gp_threecolor() == 2 && gp::pseudohept_val(c) == 0) return 0;
|
// if(GOLDBERG && gp_threecolor() == 2 && gp::pseudohept_val(c) == 0) return 0;
|
||||||
patterns::patterninfo si;
|
patterns::patterninfo si;
|
||||||
patterns::val38(c, si, nonbitrunc ? 0 : patterns::SPF_ROT, patterns::PAT_COLORING);
|
patterns::val38(c, si, !BITRUNCATED ? 0 : patterns::SPF_ROT, patterns::PAT_COLORING);
|
||||||
return si.id >> 2;
|
return si.id >> 2;
|
||||||
}
|
}
|
||||||
if(a4 && gp::on) {
|
if(a4 && GOLDBERG) {
|
||||||
patterns::patterninfo si;
|
patterns::patterninfo si;
|
||||||
auto li = gp::get_local_info(c);
|
auto li = gp::get_local_info(c);
|
||||||
if(S7 & 1) return (li.relative.first&1) + (li.relative.second&1)*2;
|
if(S7 & 1) return (li.relative.first&1) + (li.relative.second&1)*2;
|
||||||
@ -1137,14 +1137,14 @@ int pattern_threecolor(cell *c) {
|
|||||||
if(li.relative.second & 1) i ^= i2;
|
if(li.relative.second & 1) i ^= i2;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
if(a46 && !nonbitrunc) {
|
if(a46 && BITRUNCATED) {
|
||||||
patterns::patterninfo si;
|
patterns::patterninfo si;
|
||||||
patterns::val46(c, si, 0, patterns::PAT_COLORING);
|
patterns::val46(c, si, 0, patterns::PAT_COLORING);
|
||||||
int i = si.id;
|
int i = si.id;
|
||||||
return i >> 2;
|
return i >> 2;
|
||||||
}
|
}
|
||||||
if(euclid) {
|
if(euclid) {
|
||||||
if(a4 && nonbitrunc) return eupattern4(c);
|
if(a4 && PURE) return eupattern4(c);
|
||||||
return eupattern(c) % 3;
|
return eupattern(c) % 3;
|
||||||
}
|
}
|
||||||
if(S7 == 4 && S3 == 3) {
|
if(S7 == 4 && S3 == 3) {
|
||||||
@ -1160,7 +1160,7 @@ int pattern_threecolor(cell *c) {
|
|||||||
}
|
}
|
||||||
return sp;
|
return sp;
|
||||||
}
|
}
|
||||||
if(nonbitrunc)
|
if(PURE)
|
||||||
return codesN[c->master->fiftyval];
|
return codesN[c->master->fiftyval];
|
||||||
if(ctof(c))
|
if(ctof(c))
|
||||||
return 0;
|
return 0;
|
||||||
@ -1172,7 +1172,7 @@ int pattern_threecolor(cell *c) {
|
|||||||
return 2 - (c->c.spin(i)&1);
|
return 2 - (c->c.spin(i)&1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(stdhyperbolic && nonbitrunc) {
|
if(stdhyperbolic && PURE) {
|
||||||
int z = zebra40(c);
|
int z = zebra40(c);
|
||||||
if(z == 5 || z == 8 || z == 15) return 0;
|
if(z == 5 || z == 8 || z == 15) return 0;
|
||||||
if(c->land == laSnakeNest) {
|
if(c->land == laSnakeNest) {
|
||||||
@ -1182,16 +1182,16 @@ int pattern_threecolor(cell *c) {
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(a46 && nonbitrunc) {
|
if(a46 && !BITRUNCATED) {
|
||||||
patterns::patterninfo si;
|
patterns::patterninfo si;
|
||||||
patterns::val46(c, si, 0, patterns::PAT_COLORING);
|
patterns::val46(c, si, 0, patterns::PAT_COLORING);
|
||||||
return si.id;
|
return si.id;
|
||||||
}
|
}
|
||||||
if(S7 == 5 && nonbitrunc && S3 == 3) {
|
if(S7 == 5 && PURE && S3 == 3) {
|
||||||
const int codes[12] = {1, 2, 0, 3, 2, 0, 0, 1, 3, 1, 2, 3};
|
const int codes[12] = {1, 2, 0, 3, 2, 0, 0, 1, 3, 1, 2, 3};
|
||||||
return codes[c->master->fiftyval];
|
return codes[c->master->fiftyval];
|
||||||
}
|
}
|
||||||
if(S7 == 3 && nonbitrunc)
|
if(S7 == 3 && PURE)
|
||||||
return c->master->fiftyval;
|
return c->master->fiftyval;
|
||||||
if(gp_threecolor() && (S7&1))
|
if(gp_threecolor() && (S7&1))
|
||||||
return gp::pseudohept_val(c) > 0;
|
return gp::pseudohept_val(c) > 0;
|
||||||
@ -1202,12 +1202,12 @@ int pattern_threecolor(cell *c) {
|
|||||||
// in the 'pure heptagonal' tiling, returns true for a set of cells
|
// in the 'pure heptagonal' tiling, returns true for a set of cells
|
||||||
// which roughly corresponds to the heptagons in the normal tiling
|
// which roughly corresponds to the heptagons in the normal tiling
|
||||||
bool pseudohept(cell *c) {
|
bool pseudohept(cell *c) {
|
||||||
if(irr::on) return irr::pseudohept(c);
|
if(IRREGULAR) return irr::pseudohept(c);
|
||||||
if(binarytiling) return c->type & c->master->distance & 1;
|
if(binarytiling) return c->type & c->master->distance & 1;
|
||||||
if(archimedean) return arcm::pseudohept(arcm::id_of(c->master));
|
if(archimedean) return arcm::pseudohept(arcm::id_of(c->master));
|
||||||
if(gp::on && gp_threecolor() == 2)
|
if(GOLDBERG && gp_threecolor() == 2)
|
||||||
return gp::pseudohept_val(c) == 0;
|
return gp::pseudohept_val(c) == 0;
|
||||||
if(gp::on && gp_threecolor() == 1 && (S7&1) && (S3 == 3))
|
if(GOLDBERG && gp_threecolor() == 1 && (S7&1) && (S3 == 3))
|
||||||
return gp::pseudohept_val(c) == 0;
|
return gp::pseudohept_val(c) == 0;
|
||||||
return pattern_threecolor(c) == 0;
|
return pattern_threecolor(c) == 0;
|
||||||
}
|
}
|
||||||
@ -1215,9 +1215,9 @@ bool pseudohept(cell *c) {
|
|||||||
// while Krakens movement is usually restricted to non-pseudohept cells,
|
// while Krakens movement is usually restricted to non-pseudohept cells,
|
||||||
// there is one special case when this does not work (because non-pseudohept cells have varying degrees)
|
// there is one special case when this does not work (because non-pseudohept cells have varying degrees)
|
||||||
bool kraken_pseudohept(cell *c) {
|
bool kraken_pseudohept(cell *c) {
|
||||||
if(!euclid && S3 == 4 && gp::on && (gp::param.first % 2 || gp::param.second % 2 || S7 % 2))
|
if(!euclid && S3 == 4 && GOLDBERG && (gp::param.first % 2 || gp::param.second % 2 || S7 % 2))
|
||||||
return ishept(c);
|
return ishept(c);
|
||||||
else if(irr::on)
|
else if(IRREGULAR)
|
||||||
return c->type != 6;
|
return c->type != 6;
|
||||||
else if(archimedean)
|
else if(archimedean)
|
||||||
return c->type == isize(arcm::current.triangles[0]);
|
return c->type == isize(arcm::current.triangles[0]);
|
||||||
@ -1230,7 +1230,7 @@ bool kraken_pseudohept(cell *c) {
|
|||||||
bool warptype(cell *c) {
|
bool warptype(cell *c) {
|
||||||
if(geosupport_chessboard())
|
if(geosupport_chessboard())
|
||||||
return chessvalue(c);
|
return chessvalue(c);
|
||||||
else if(gp::on || irr::on)
|
else if(NONSTDVAR)
|
||||||
return pseudohept(c);
|
return pseudohept(c);
|
||||||
else
|
else
|
||||||
return pattern_threecolor(c) == 0;
|
return pattern_threecolor(c) == 0;
|
||||||
@ -1549,7 +1549,7 @@ namespace patterns {
|
|||||||
|
|
||||||
if((euclid && whichPattern == PAT_COLORING) ||
|
if((euclid && whichPattern == PAT_COLORING) ||
|
||||||
(a38 && whichPattern == PAT_COLORING) ||
|
(a38 && whichPattern == PAT_COLORING) ||
|
||||||
(a4 && nonbitrunc && whichPattern == PAT_COLORING && !a46))
|
(a4 && !BITRUNCATED && whichPattern == PAT_COLORING && !a46))
|
||||||
dialog::addBoolItem(XLAT("edit all three colors"), subpattern_flags & SPF_ROT, '0');
|
dialog::addBoolItem(XLAT("edit all three colors"), subpattern_flags & SPF_ROT, '0');
|
||||||
|
|
||||||
if(euclid && whichPattern == PAT_COLORING)
|
if(euclid && whichPattern == PAT_COLORING)
|
||||||
@ -1558,7 +1558,7 @@ namespace patterns {
|
|||||||
if(a46 && whichPattern == PAT_COLORING)
|
if(a46 && whichPattern == PAT_COLORING)
|
||||||
dialog::addBoolItem(XLAT("rotate the color groups"), subpattern_flags & SPF_CHANGEROT, '4');
|
dialog::addBoolItem(XLAT("rotate the color groups"), subpattern_flags & SPF_CHANGEROT, '4');
|
||||||
|
|
||||||
if(a46 && whichPattern == PAT_COLORING && !nonbitrunc)
|
if(a46 && whichPattern == PAT_COLORING && BITRUNCATED)
|
||||||
dialog::addBoolItem(XLAT("edit both bitrunc colors"), subpattern_flags & SPF_TWOCOL, '5');
|
dialog::addBoolItem(XLAT("edit both bitrunc colors"), subpattern_flags & SPF_TWOCOL, '5');
|
||||||
|
|
||||||
if(
|
if(
|
||||||
@ -1572,10 +1572,10 @@ namespace patterns {
|
|||||||
dialog::addBoolItem(XLAT("symmetry 0-2"), subpattern_flags & SPF_SYM02, '2');
|
dialog::addBoolItem(XLAT("symmetry 0-2"), subpattern_flags & SPF_SYM02, '2');
|
||||||
dialog::addBoolItem(XLAT("symmetry 0-3"), subpattern_flags & SPF_SYM03, '3');
|
dialog::addBoolItem(XLAT("symmetry 0-3"), subpattern_flags & SPF_SYM03, '3');
|
||||||
}
|
}
|
||||||
if(euclid && among(whichPattern, PAT_COLORING, 0) && !archimedean)
|
if(euclid && among(whichPattern, PAT_COLORING, PAT_TYPES) && !archimedean)
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
|
|
||||||
if(archimedean && arcm::current.have_symmetry && whichPattern == 0)
|
if(archimedean && arcm::current.have_symmetry && whichPattern == PAT_TYPES)
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
|
|
||||||
if(whichPattern == PAT_SINGLETYPE) {
|
if(whichPattern == PAT_SINGLETYPE) {
|
||||||
@ -1586,15 +1586,15 @@ namespace patterns {
|
|||||||
if(euclid && among(whichPattern, PAT_COLORING, 0))
|
if(euclid && among(whichPattern, PAT_COLORING, 0))
|
||||||
dialog::addBoolItem(XLAT("full symmetry"), subpattern_flags & SPF_FULLSYM, '!');
|
dialog::addBoolItem(XLAT("full symmetry"), subpattern_flags & SPF_FULLSYM, '!');
|
||||||
|
|
||||||
if(a38 && nonbitrunc && whichPattern == 0) {
|
if(a38 && PURE && whichPattern == PAT_TYPES) {
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(a46 && nonbitrunc && whichPattern == PAT_COLORING) {
|
if(a46 && PURE && whichPattern == PAT_COLORING) {
|
||||||
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
dialog::addBoolItem(XLAT("extra symmetries"), subpattern_flags & SPF_EXTRASYM, '=');
|
||||||
}
|
}
|
||||||
|
|
||||||
if((whichPattern == PAT_COLORING) || (whichPattern == 0 && archimedean)) {
|
if((whichPattern == PAT_COLORING) || (whichPattern == PAT_TYPES && archimedean)) {
|
||||||
dialog::addBoolItem(XLAT("alternate coloring"), subpattern_flags & SPF_ALTERNATE, '\'');
|
dialog::addBoolItem(XLAT("alternate coloring"), subpattern_flags & SPF_ALTERNATE, '\'');
|
||||||
dialog::addBoolItem(XLAT("football pattern"), subpattern_flags & SPF_FOOTBALL, '*');
|
dialog::addBoolItem(XLAT("football pattern"), subpattern_flags & SPF_FOOTBALL, '*');
|
||||||
}
|
}
|
||||||
@ -1692,7 +1692,7 @@ namespace patterns {
|
|||||||
|
|
||||||
struct changeable_pattern_geometry {
|
struct changeable_pattern_geometry {
|
||||||
eGeometry geo;
|
eGeometry geo;
|
||||||
bool nonbitru;
|
eVariation var;
|
||||||
ePattern whichPattern;
|
ePattern whichPattern;
|
||||||
int subpattern_flags;
|
int subpattern_flags;
|
||||||
};
|
};
|
||||||
@ -1704,85 +1704,85 @@ namespace patterns {
|
|||||||
|
|
||||||
vector<changeable_pattern> cpatterns = {
|
vector<changeable_pattern> cpatterns = {
|
||||||
{"football", {
|
{"football", {
|
||||||
{gNormal, false, PAT_TYPES, 0},
|
{gNormal, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{gSphere, false, PAT_TYPES, 0},
|
{gSphere, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{gEuclid, false, PAT_TYPES, SPF_EXTRASYM},
|
{gEuclid, eVariation::bitruncated, PAT_TYPES, SPF_EXTRASYM},
|
||||||
{gOctagon, false, PAT_TYPES, 0},
|
{gOctagon, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{gOctagon, true, PAT_COLORING, SPF_FOOTBALL | SPF_EXTRASYM},
|
{gOctagon, eVariation::pure, PAT_COLORING, SPF_FOOTBALL | SPF_EXTRASYM},
|
||||||
{g45, false, PAT_TYPES, 0},
|
{g45, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{g46, false, PAT_TYPES, SPF_EXTRASYM},
|
{g46, eVariation::bitruncated, PAT_TYPES, SPF_EXTRASYM},
|
||||||
{g47, false, PAT_TYPES, 0},
|
{g47, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{gSmallSphere, false, PAT_TYPES, 0},
|
{gSmallSphere, eVariation::bitruncated, PAT_TYPES, 0},
|
||||||
{gSmallSphere, true, PAT_COLORING, SPF_FOOTBALL | SPF_EXTRASYM},
|
{gSmallSphere, eVariation::pure, PAT_COLORING, SPF_FOOTBALL | SPF_EXTRASYM},
|
||||||
{gTinySphere, false, PAT_TYPES, SPF_EXTRASYM},
|
{gTinySphere, eVariation::bitruncated, PAT_TYPES, SPF_EXTRASYM},
|
||||||
{gEuclidSquare, false, PAT_TYPES, SPF_EXTRASYM},
|
{gEuclidSquare, eVariation::bitruncated, PAT_TYPES, SPF_EXTRASYM},
|
||||||
}},
|
}},
|
||||||
{"three colors", {
|
{"three colors", {
|
||||||
{gEuclid, false, PAT_COLORING, SPF_SYM0123 | SPF_EXTRASYM},
|
{gEuclid, eVariation::bitruncated, PAT_COLORING, SPF_SYM0123 | SPF_EXTRASYM},
|
||||||
{gSmallSphere, false, PAT_COLORING, 0},
|
{gSmallSphere, eVariation::bitruncated, PAT_COLORING, 0},
|
||||||
{gSmallSphere, false, PAT_COLORING, SPF_ALTERNATE},
|
{gSmallSphere, eVariation::bitruncated, PAT_COLORING, SPF_ALTERNATE},
|
||||||
{gSmallSphere, true, PAT_COLORING, 0},
|
{gSmallSphere, eVariation::pure, PAT_COLORING, 0},
|
||||||
{gOctagon, false, PAT_COLORING, SPF_ROT | SPF_EXTRASYM},
|
{gOctagon, eVariation::bitruncated, PAT_COLORING, SPF_ROT | SPF_EXTRASYM},
|
||||||
{gOctagon, false, PAT_COLORING, SPF_ROT | SPF_EXTRASYM | SPF_ALTERNATE},
|
{gOctagon, eVariation::bitruncated, PAT_COLORING, SPF_ROT | SPF_EXTRASYM | SPF_ALTERNATE},
|
||||||
{gOctagon, true, PAT_COLORING, 0},
|
{gOctagon, eVariation::pure, PAT_COLORING, 0},
|
||||||
{gEuclidSquare, false, PAT_COLORING, SPF_SYM03 | SPF_EXTRASYM},
|
{gEuclidSquare, eVariation::bitruncated, PAT_COLORING, SPF_SYM03 | SPF_EXTRASYM},
|
||||||
{gEuclidSquare, false, PAT_COLORING, SPF_SYM03 | SPF_EXTRASYM | SPF_ALTERNATE},
|
{gEuclidSquare, eVariation::bitruncated, PAT_COLORING, SPF_SYM03 | SPF_EXTRASYM | SPF_ALTERNATE},
|
||||||
{g46, false, PAT_COLORING, SPF_SYM0123},
|
{g46, eVariation::bitruncated, PAT_COLORING, SPF_SYM0123},
|
||||||
{g46, false, PAT_COLORING, SPF_SYM0123 | SPF_EXTRASYM | SPF_ALTERNATE}
|
{g46, eVariation::bitruncated, PAT_COLORING, SPF_SYM0123 | SPF_EXTRASYM | SPF_ALTERNATE}
|
||||||
}},
|
}},
|
||||||
{"chessboard", {
|
{"chessboard", {
|
||||||
{gEuclidSquare, true, PAT_CHESS, SPF_EXTRASYM},
|
{gEuclidSquare, eVariation::pure, PAT_CHESS, SPF_EXTRASYM},
|
||||||
{g45, true, PAT_CHESS, 0},
|
{g45, eVariation::pure, PAT_CHESS, 0},
|
||||||
{g46, true, PAT_CHESS, 0},
|
{g46, eVariation::pure, PAT_CHESS, 0},
|
||||||
{g47, true, PAT_CHESS, 0}
|
{g47, eVariation::pure, PAT_CHESS, 0}
|
||||||
}},
|
}},
|
||||||
{"single type", {
|
{"single type", {
|
||||||
{gNormal, true, PAT_SINGLETYPE, 0},
|
{gNormal, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{gSphere, true, PAT_SINGLETYPE, 0},
|
{gSphere, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{gEuclid, false, PAT_SINGLETYPE, 0},
|
{gEuclid, eVariation::bitruncated, PAT_SINGLETYPE, 0},
|
||||||
{gOctagon, true, PAT_SINGLETYPE, 0},
|
{gOctagon, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{g45, true, PAT_SINGLETYPE, 0},
|
{g45, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{g46, true, PAT_SINGLETYPE, 0},
|
{g46, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{g47, true, PAT_SINGLETYPE, 0},
|
{g47, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{gSmallSphere, true, PAT_SINGLETYPE, 0},
|
{gSmallSphere, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{gTinySphere, true, PAT_SINGLETYPE, 0},
|
{gTinySphere, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
{gEuclidSquare, true, PAT_SINGLETYPE, 0},
|
{gEuclidSquare, eVariation::pure, PAT_SINGLETYPE, 0},
|
||||||
}},
|
}},
|
||||||
{"single type+symmetry", {
|
{"single type+symmetry", {
|
||||||
{gNormal, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gNormal, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gSphere, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gSphere, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gEuclid, false, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gEuclid, eVariation::bitruncated, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gOctagon, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gOctagon, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{g45, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{g45, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{g46, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{g46, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{g47, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{g47, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gSmallSphere, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gSmallSphere, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gTinySphere, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gTinySphere, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
{gEuclidSquare, true, PAT_SINGLETYPE, SPF_EXTRASYM},
|
{gEuclidSquare, eVariation::pure, PAT_SINGLETYPE, SPF_EXTRASYM},
|
||||||
}},
|
}},
|
||||||
{"odd/even", {
|
{"odd/even", {
|
||||||
{gNormal, false, PAT_SINGLETYPE, SPF_TWOCOL},
|
{gNormal, eVariation::bitruncated, PAT_SINGLETYPE, SPF_TWOCOL},
|
||||||
{gSphere, false, PAT_SINGLETYPE, SPF_TWOCOL},
|
{gSphere, eVariation::bitruncated, PAT_SINGLETYPE, SPF_TWOCOL},
|
||||||
{g45, true, PAT_SINGLETYPE, SPF_TWOCOL},
|
{g45, eVariation::pure, PAT_SINGLETYPE, SPF_TWOCOL},
|
||||||
{g47, true, PAT_SINGLETYPE, SPF_TWOCOL}
|
{g47, eVariation::pure, PAT_SINGLETYPE, SPF_TWOCOL}
|
||||||
}},
|
}},
|
||||||
{"large picture", {
|
{"large picture", {
|
||||||
{gNormal, false, PAT_PALACE, SPF_SYM0123},
|
{gNormal, eVariation::bitruncated, PAT_PALACE, SPF_SYM0123},
|
||||||
{gNormal, true, PAT_PALACE, SPF_SYM0123},
|
{gNormal, eVariation::pure, PAT_PALACE, SPF_SYM0123},
|
||||||
{gSphere, false, PAT_FIELD, 0},
|
{gSphere, eVariation::bitruncated, PAT_FIELD, 0},
|
||||||
{gSphere, true, PAT_FIELD, 0},
|
{gSphere, eVariation::pure, PAT_FIELD, 0},
|
||||||
{gElliptic, false, PAT_FIELD, 0},
|
{gElliptic, eVariation::bitruncated, PAT_FIELD, 0},
|
||||||
{gElliptic, true, PAT_FIELD, 0},
|
{gElliptic, eVariation::pure, PAT_FIELD, 0},
|
||||||
{gEuclid, false, PAT_PALACE, 0}
|
{gEuclid, eVariation::bitruncated, PAT_PALACE, 0}
|
||||||
}},
|
}},
|
||||||
{"periodic patterns", {
|
{"periodic patterns", {
|
||||||
{gNormal, false, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
{gNormal, eVariation::bitruncated, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
||||||
{gNormal, false, PAT_PALACE, SPF_SYM0123 | SPF_ROT},
|
{gNormal, eVariation::bitruncated, PAT_PALACE, SPF_SYM0123 | SPF_ROT},
|
||||||
{gNormal, false, PAT_EMERALD, SPF_SYM0123 | SPF_ROT},
|
{gNormal, eVariation::bitruncated, PAT_EMERALD, SPF_SYM0123 | SPF_ROT},
|
||||||
{g46, true, PAT_COLORING, SPF_SYM0123 | SPF_CHANGEROT},
|
{g46, eVariation::pure, PAT_COLORING, SPF_SYM0123 | SPF_CHANGEROT},
|
||||||
{g45, true, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
{g45, eVariation::pure, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
||||||
{g47, true, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
{g47, eVariation::pure, PAT_ZEBRA, SPF_SYM0123 | SPF_ROT},
|
||||||
{gOctagon, true, PAT_COLORING, SPF_DOCKS},
|
{gOctagon, eVariation::pure, PAT_COLORING, SPF_DOCKS},
|
||||||
}}
|
}}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1807,7 +1807,7 @@ namespace patterns {
|
|||||||
for(int j=0; j<isize(cpatterns[cgroup].geometries); j++) {
|
for(int j=0; j<isize(cpatterns[cgroup].geometries); j++) {
|
||||||
auto &g = cpatterns[cgroup].geometries[j];
|
auto &g = cpatterns[cgroup].geometries[j];
|
||||||
string s = XLAT(ginf[g.geo].name);
|
string s = XLAT(ginf[g.geo].name);
|
||||||
s += bitruncnames[g.nonbitru];
|
s += bitruncnames[int(g.var)];
|
||||||
if(g.subpattern_flags & SPF_ALTERNATE) s += " (alt)";
|
if(g.subpattern_flags & SPF_ALTERNATE) s += " (alt)";
|
||||||
if(g.subpattern_flags & SPF_DOCKS) s += " (Docks)";
|
if(g.subpattern_flags & SPF_DOCKS) s += " (Docks)";
|
||||||
if(cgroup == cpZebra) {
|
if(cgroup == cpZebra) {
|
||||||
@ -1815,17 +1815,17 @@ namespace patterns {
|
|||||||
else if(g.whichPattern == PAT_EMERALD) s += " (Emerald)";
|
else if(g.whichPattern == PAT_EMERALD) s += " (Emerald)";
|
||||||
else s += " (Zebra)";
|
else s += " (Zebra)";
|
||||||
}
|
}
|
||||||
dialog::addBoolItem(s, geometry == g.geo && nonbitrunc == g.nonbitru && whichPattern == g.whichPattern && subpattern_flags == g.subpattern_flags, 'a'+j);
|
dialog::addBoolItem(s, geometry == g.geo && variation == g.var && whichPattern == g.whichPattern && subpattern_flags == g.subpattern_flags, 'a'+j);
|
||||||
}
|
}
|
||||||
bool have_goldberg = (S3 == 3 && among(cgroup, cpFootball, cpThree) && !euclid);
|
bool have_goldberg = (S3 == 3 && among(cgroup, cpFootball, cpThree) && !euclid);
|
||||||
bool have_variations = (among(cgroup, cpSingle, cpSingleSym) && !euclid);
|
bool have_variations = (among(cgroup, cpSingle, cpSingleSym) && !euclid);
|
||||||
if(!(S7&1) && !nonbitrunc) have_goldberg = false; // always start from non-bitruncated
|
if(!(S7&1) && BITRUNCATED) have_goldberg = false; // always start from pure
|
||||||
if(have_goldberg) {
|
if(have_goldberg) {
|
||||||
dialog::addBoolItem(XLAT("Goldberg"), gp::on, 'G');
|
dialog::addBoolItem(XLAT("Goldberg"), GOLDBERG, 'G');
|
||||||
dialog::lastItem().value = gp::operation_name();
|
dialog::lastItem().value = gp::operation_name();
|
||||||
}
|
}
|
||||||
if(have_variations) {
|
if(have_variations) {
|
||||||
dialog::addBoolItem(XLAT("variations"), gp::on, 'G');
|
dialog::addBoolItem(XLAT("variations"), GOLDBERG, 'G');
|
||||||
dialog::lastItem().value = gp::operation_name();
|
dialog::lastItem().value = gp::operation_name();
|
||||||
}
|
}
|
||||||
else dialog::addBreak(100);
|
else dialog::addBreak(100);
|
||||||
@ -1840,9 +1840,8 @@ namespace patterns {
|
|||||||
cgroup = cpatterntype(uni - '0');
|
cgroup = cpatterntype(uni - '0');
|
||||||
else if(cgroup != cpUnknown && uni >= 'a' && uni < 'a' + isize(cpatterns[cgroup].geometries)) {
|
else if(cgroup != cpUnknown && uni >= 'a' && uni < 'a' + isize(cpatterns[cgroup].geometries)) {
|
||||||
auto &g = cpatterns[cgroup].geometries[uni - 'a'];
|
auto &g = cpatterns[cgroup].geometries[uni - 'a'];
|
||||||
if(g.geo != geometry) { targetgeometry = g.geo; stop_game_and_switch_mode(rg::geometry); }
|
if(g.geo != geometry) set_geometry(g.geo);
|
||||||
if(gp::on) stop_game_and_switch_mode(rg::gp);
|
if(g.var != variation) set_variation(g.var);
|
||||||
if(g.nonbitru != nonbitrunc) stop_game_and_switch_mode(rg::bitrunc);;
|
|
||||||
whichPattern = g.whichPattern;
|
whichPattern = g.whichPattern;
|
||||||
subpattern_flags = g.subpattern_flags;
|
subpattern_flags = g.subpattern_flags;
|
||||||
bool not_restarted = game_active;
|
bool not_restarted = game_active;
|
||||||
@ -1874,8 +1873,9 @@ namespace patterns {
|
|||||||
for(int i=0; i<isize(cpatterns); i++)
|
for(int i=0; i<isize(cpatterns); i++)
|
||||||
for(int j=0; j<isize(cpatterns[i].geometries); j++) {
|
for(int j=0; j<isize(cpatterns[i].geometries); j++) {
|
||||||
auto &g = cpatterns[i].geometries[j];
|
auto &g = cpatterns[i].geometries[j];
|
||||||
bool xnonbitrunc = gp::on ? gp_threecolor() : nonbitrunc;
|
eVariation xvar = variation;
|
||||||
if(geometry == g.geo && xnonbitrunc == g.nonbitru && whichPattern == g.whichPattern && subpattern_flags == g.subpattern_flags)
|
if(GOLDBERG && gp_threecolor()) xvar = eVariation::pure;
|
||||||
|
if(geometry == g.geo && xvar == g.var && whichPattern == g.whichPattern && subpattern_flags == g.subpattern_flags)
|
||||||
cgroup = cpatterntype(i);
|
cgroup = cpatterntype(i);
|
||||||
}
|
}
|
||||||
old_cgroup = cgroup;
|
old_cgroup = cgroup;
|
||||||
@ -1887,11 +1887,11 @@ namespace patterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int subcode(cell *c, const patterninfo& si) {
|
int subcode(cell *c, const patterninfo& si) {
|
||||||
if(irr::on)
|
if(IRREGULAR)
|
||||||
return irr::cellindex[c] << 8;
|
return irr::cellindex[c] << 8;
|
||||||
else if(archimedean)
|
else if(archimedean)
|
||||||
return arcm::id_of(c->master) << 8;
|
return arcm::id_of(c->master) << 8;
|
||||||
else if(!gp::on) return 0;
|
else if(!GOLDBERG) return 0;
|
||||||
else if(c == c->master->c7) return (fixdir(si.dir, c) << 8);
|
else if(c == c->master->c7) return (fixdir(si.dir, c) << 8);
|
||||||
else return (get_code(gp::get_local_info(c)) << 16) | (fixdir(si.dir, c) << 8);
|
else return (get_code(gp::get_local_info(c)) << 16) | (fixdir(si.dir, c) << 8);
|
||||||
}
|
}
|
||||||
@ -2089,7 +2089,6 @@ namespace linepatterns {
|
|||||||
if(is_master(c) && !euclid) for(int i=0; i<S7; i++)
|
if(is_master(c) && !euclid) for(int i=0; i<S7; i++)
|
||||||
if(c->master->move(i) && c->master->move(i) < c->master && c->master->move(i)->dm4 == c->master->dm4)
|
if(c->master->move(i) && c->master->move(i) < c->master && c->master->move(i)->dm4 == c->master->dm4)
|
||||||
queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2 + vid.linequality);
|
queuelinef(tC0(V), V*xspinpush0(-2*M_PI*i/S7 - master_to_c7_angle(), tessf), col, 2 + vid.linequality);
|
||||||
// V*xspinpush0((nonbitrunc?M_PI:0) -2*M_PI*i/S7
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2121,13 +2120,13 @@ namespace linepatterns {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case patVine: {
|
case patVine: {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
if(c->master->c7 != c) if(gmatrix.count(c->move(0)))
|
if(c->master->c7 != c) if(gmatrix.count(c->move(0)))
|
||||||
queuelinef(tC0(V), gmatrix[c->move(0)]*C0,
|
queuelinef(tC0(V), gmatrix[c->move(0)]*C0,
|
||||||
darkena(backcolor ^ 0xFFFFFF, 0, col),
|
darkena(backcolor ^ 0xFFFFFF, 0, col),
|
||||||
2 + vid.linequality);
|
2 + vid.linequality);
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(IRREGULAR) {
|
||||||
if(c->master->c7 != c) if(gmatrix.count(c->master->c7))
|
if(c->master->c7 != c) if(gmatrix.count(c->master->c7))
|
||||||
queuelinef(tC0(V), gmatrix[c->master->c7]*C0,
|
queuelinef(tC0(V), gmatrix[c->master->c7]*C0,
|
||||||
darkena(backcolor ^ 0xFFFFFF, 0, col),
|
darkena(backcolor ^ 0xFFFFFF, 0, col),
|
||||||
@ -2146,7 +2145,7 @@ namespace linepatterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case patPower: {
|
case patPower: {
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
for(int i=0; i<S7; i++) if(c->move(i) && c->move(i)->master != c->master && gmatrix.count(c->move(i)))
|
for(int i=0; i<S7; i++) if(c->move(i) && c->move(i)->master != c->master && gmatrix.count(c->move(i)))
|
||||||
queuelinef(tC0(V), gmatrix[c->move(i)]*C0,
|
queuelinef(tC0(V), gmatrix[c->move(i)]*C0,
|
||||||
col,
|
col,
|
||||||
@ -2200,7 +2199,7 @@ namespace linepatterns {
|
|||||||
dialog::init(XLAT("line patterns"));
|
dialog::init(XLAT("line patterns"));
|
||||||
|
|
||||||
for(numpat=0; patterns[numpat].lpname; numpat++)
|
for(numpat=0; patterns[numpat].lpname; numpat++)
|
||||||
dialog::addColorItem(among(patterns[numpat].id, patVine, patPower) && gp::on ? XLAT("Goldberg") + (patterns[numpat].id == patVine ? " " : ""): XLAT(patterns[numpat].lpname), patterns[numpat].color, 'a'+numpat);
|
dialog::addColorItem(among(patterns[numpat].id, patVine, patPower) && GOLDBERG ? XLAT("Goldberg") + (patterns[numpat].id == patVine ? " " : ""): XLAT(patterns[numpat].lpname), patterns[numpat].color, 'a'+numpat);
|
||||||
|
|
||||||
dialog::addBreak(50);
|
dialog::addBreak(50);
|
||||||
dialog::addBack();
|
dialog::addBack();
|
||||||
|
70
polygons.cpp
70
polygons.cpp
@ -93,7 +93,7 @@ bool ptdsort(const polytodraw& p1, const polytodraw& p2) {
|
|||||||
|
|
||||||
void hpcpush(hyperpoint h) {
|
void hpcpush(hyperpoint h) {
|
||||||
if(sphere) h = mid(h,h);
|
if(sphere) h = mid(h,h);
|
||||||
ld threshold = (sphere ? (ISMOBWEB || gp::on || irr::on ? .04 : .001) : 0.1) * pow(.25, vid.linequality);
|
ld threshold = (sphere ? (ISMOBWEB || NONSTDVAR ? .04 : .001) : 0.1) * pow(.25, vid.linequality);
|
||||||
if(/*vid.usingGL && */!first && intval(hpc.back(), h) > threshold) {
|
if(/*vid.usingGL && */!first && intval(hpc.back(), h) > threshold) {
|
||||||
hyperpoint md = mid(hpc.back(), h);
|
hyperpoint md = mid(hpc.back(), h);
|
||||||
hpcpush(md);
|
hpcpush(md);
|
||||||
@ -1402,12 +1402,12 @@ hyperpoint hpxd(ld d, ld x, ld y, ld z) {
|
|||||||
double scalef;
|
double scalef;
|
||||||
|
|
||||||
hyperpoint hpxyzsc(double x, double y, double z) {
|
hyperpoint hpxyzsc(double x, double y, double z) {
|
||||||
if(nonbitrunc) return hpxd(scalef, x, y, z);
|
if(!BITRUNCATED) return hpxd(scalef, x, y, z);
|
||||||
else return hpxyz(x,y,z);
|
else return hpxyz(x,y,z);
|
||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint turtlevertex(int u, double x, double y, double z) {
|
hyperpoint turtlevertex(int u, double x, double y, double z) {
|
||||||
ld scale = nonbitrunc ? scalef : 1;
|
ld scale = BITRUNCATED ? 1 : scalef;
|
||||||
if(u) scale /= 2;
|
if(u) scale /= 2;
|
||||||
return hpxd(scale, x, y, z);
|
return hpxd(scale, x, y, z);
|
||||||
}
|
}
|
||||||
@ -1488,7 +1488,7 @@ void bshape(hpcshape& sh, PPR prio, double shzoom, int shapeid, double bonus = 0
|
|||||||
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
|
||||||
double shzoomx = shzoom;
|
double shzoomx = shzoom;
|
||||||
double shzoomy = shzoom;
|
double shzoomy = shzoom;
|
||||||
if(shzoom == WOLF) shzoomx = 1.5 * (nonbitrunc && !archimedean ? crossf / hcrossf : 1), shzoomy = 1.6 * (nonbitrunc && !archimedean ? crossf / hcrossf : 1);
|
if(shzoom == WOLF) shzoomx = 1.5 * (!BITRUNCATED && !archimedean ? crossf / hcrossf : 1), shzoomy = 1.6 * (!BITRUNCATED && !archimedean ? crossf / hcrossf : 1);
|
||||||
int rots2 = rots;
|
int rots2 = rots;
|
||||||
// shapes 368..370 are specially designed
|
// shapes 368..370 are specially designed
|
||||||
if(!(shapeid >= 368 && shapeid <= 370)) {
|
if(!(shapeid >= 368 && shapeid <= 370)) {
|
||||||
@ -1618,7 +1618,7 @@ void buildpolys() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scales
|
// scales
|
||||||
scalef = nonbitrunc ? crossf / hcrossf7 : hcrossf / hcrossf7;
|
scalef = BITRUNCATED ? hcrossf / hcrossf7 : crossf / hcrossf7;
|
||||||
|
|
||||||
ld xcrossf = crossf;
|
ld xcrossf = crossf;
|
||||||
|
|
||||||
@ -1627,10 +1627,10 @@ void buildpolys() {
|
|||||||
double spzoom6 = sphere ? 1.2375 : 1;
|
double spzoom6 = sphere ? 1.2375 : 1;
|
||||||
double spzoom7 = sphere ? .8 : 1;
|
double spzoom7 = sphere ? .8 : 1;
|
||||||
|
|
||||||
double spzoomd7 = (nonbitrunc && sphere) ? 1 : spzoom7;
|
double spzoomd7 = (!BITRUNCATED && sphere) ? 1 : spzoom7;
|
||||||
|
|
||||||
double fac80 = a45 ? 1.4 : a46 ? 1.2 : (a38) ? .7 : .8;
|
double fac80 = a45 ? 1.4 : a46 ? 1.2 : (a38) ? .7 : .8;
|
||||||
double fac94 = euclid ? .8 : a4 ? (nonbitrunc ? 1.1 : .9) : .94;
|
double fac94 = euclid ? .8 : a4 ? (BITRUNCATED ? .9 : 1.1) : .94;
|
||||||
|
|
||||||
if(euclid) fac80 = fac94 = .9;
|
if(euclid) fac80 = fac94 = .9;
|
||||||
|
|
||||||
@ -1641,11 +1641,11 @@ void buildpolys() {
|
|||||||
fac80 *= 1.2, fac94 *= .94;
|
fac80 *= 1.2, fac94 *= .94;
|
||||||
|
|
||||||
// procedural floors
|
// procedural floors
|
||||||
double zhexf = nonbitrunc ? crossf* .55 : hexf;
|
double zhexf = BITRUNCATED ? hexf : crossf* .55;
|
||||||
|
|
||||||
double p = -.006;
|
double p = -.006;
|
||||||
|
|
||||||
int td = ((nonbitrunc || euclid) && !(S7&1)) ? S42+S6 : 0;
|
int td = ((!BITRUNCATED || euclid) && !(S7&1)) ? S42+S6 : 0;
|
||||||
|
|
||||||
double trihepta0 = scalef*spzoom6*(.2776+p) * gsca(a4, 1.3, a46, .975, a47, .85, a38, .9) * bscale6;
|
double trihepta0 = scalef*spzoom6*(.2776+p) * gsca(a4, 1.3, a46, .975, a47, .85, a38, .9) * bscale6;
|
||||||
double trihepta1 = (sphere ? .54 : scalef*spzoom6*(.5273-2*p)) * gsca(a4, .8, a46, 1.075, sphere4, 1.3) * bscale7;
|
double trihepta1 = (sphere ? .54 : scalef*spzoom6*(.5273-2*p)) * gsca(a4, .8, a46, 1.075, sphere4, 1.3) * bscale7;
|
||||||
@ -1658,7 +1658,7 @@ void buildpolys() {
|
|||||||
|
|
||||||
if(sphere&&S7==3) trihepta0 *= 1.3, trihepta1 *= 1.6;
|
if(sphere&&S7==3) trihepta0 *= 1.3, trihepta1 *= 1.6;
|
||||||
|
|
||||||
if(nonbitrunc) {
|
if(!BITRUNCATED) {
|
||||||
ld hedge = hdist(xspinpush0(M_PI/S7, rhexf), xspinpush0(-M_PI/S7, rhexf));
|
ld hedge = hdist(xspinpush0(M_PI/S7, rhexf), xspinpush0(-M_PI/S7, rhexf));
|
||||||
|
|
||||||
trihepta1 = hdist0(xpush(tessf) * xspinpush0(2*M_PI*2/S7, tessf)) / 2 * .98;
|
trihepta1 = hdist0(xpush(tessf) * xspinpush0(2*M_PI*2/S7, tessf)) / 2 * .98;
|
||||||
@ -1671,16 +1671,16 @@ void buildpolys() {
|
|||||||
double floorrad1 = rhexf / gp::scale *0.94;
|
double floorrad1 = rhexf / gp::scale *0.94;
|
||||||
|
|
||||||
ld goldbf = 1;
|
ld goldbf = 1;
|
||||||
if(gp::on) goldbf = gp::scale * 1.6;
|
if(GOLDBERG) goldbf = gp::scale * 1.6;
|
||||||
if(irr::on) goldbf = irr::scale * 1.6;
|
if(IRREGULAR) goldbf = irr::scale * 1.6;
|
||||||
if(gp::on) floorrad1 /= 1.6;
|
if(GOLDBERG) floorrad1 /= 1.6;
|
||||||
|
|
||||||
double triangleside = hcrossf*.94;
|
double triangleside = hcrossf*.94;
|
||||||
if(nonbitrunc)
|
if(!BITRUNCATED)
|
||||||
triangleside = tessf * .94;
|
triangleside = tessf * .94;
|
||||||
|
|
||||||
if(euclid4) {
|
if(euclid4) {
|
||||||
if(nonbitrunc)
|
if(!BITRUNCATED)
|
||||||
floorrad0 = floorrad1 = rhexf * .94;
|
floorrad0 = floorrad1 = rhexf * .94;
|
||||||
else
|
else
|
||||||
floorrad0 = hexvdist * .9,
|
floorrad0 = hexvdist * .9,
|
||||||
@ -1768,7 +1768,7 @@ void buildpolys() {
|
|||||||
hpcpush(ddi(0, -zhexf*2.4) * C0);
|
hpcpush(ddi(0, -zhexf*2.4) * C0);
|
||||||
|
|
||||||
bshape(shMirror, PPR::WALL);
|
bshape(shMirror, PPR::WALL);
|
||||||
if(nonbitrunc) {
|
if(PURE) {
|
||||||
for(int t=0; t<=S7; t++) hpcpush(ddi(t*12, floorrad1*7/8 * gp::scale) * C0);
|
for(int t=0; t<=S7; t++) hpcpush(ddi(t*12, floorrad1*7/8 * gp::scale) * C0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1843,11 +1843,11 @@ void buildpolys() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double disksize = xcrossf;
|
double disksize = xcrossf;
|
||||||
if(nonbitrunc && a38) disksize *= 2;
|
if(PURE && a38) disksize *= 2;
|
||||||
else if(a38) disksize *= 1.5;
|
else if(a38) disksize *= 1.5;
|
||||||
else if(nonbitrunc && S6 == 8) disksize *= 1.5;
|
else if(!BITRUNCATED && S6 == 8) disksize *= 1.5;
|
||||||
|
|
||||||
if(a38 && gp::on) disksize /= 2;
|
if(a38 && GOLDBERG) disksize /= 2;
|
||||||
|
|
||||||
bshape(shDisk, PPR::ITEM);
|
bshape(shDisk, PPR::ITEM);
|
||||||
for(int i=0; i<=S84; i+=S3)
|
for(int i=0; i<=S84; i+=S3)
|
||||||
@ -2045,9 +2045,9 @@ void buildpolys() {
|
|||||||
|
|
||||||
if(a38) spzoom6 *= .9;
|
if(a38) spzoom6 *= .9;
|
||||||
|
|
||||||
if(a4 && !nonbitrunc) spzoom6 *= 1.9, spzoom7 *= .9, spzoomd7 *= .9;
|
if(a4 && BITRUNCATED) spzoom6 *= 1.9, spzoom7 *= .9, spzoomd7 *= .9;
|
||||||
if(a46 && !nonbitrunc) spzoom6 *= .9;
|
if(a46 && BITRUNCATED) spzoom6 *= .9;
|
||||||
if(a47 && !nonbitrunc) spzoom6 *= .85;
|
if(a47 && BITRUNCATED) spzoom6 *= .85;
|
||||||
|
|
||||||
if(archimedean)
|
if(archimedean)
|
||||||
shFullFloor.configure(arcm::current.scale()/2, arcm::current.scale()/2);
|
shFullFloor.configure(arcm::current.scale()/2, arcm::current.scale()/2);
|
||||||
@ -2059,7 +2059,7 @@ void buildpolys() {
|
|||||||
shMFloor3.configure(floorrad0*5/8, floorrad1*5/8);
|
shMFloor3.configure(floorrad0*5/8, floorrad1*5/8);
|
||||||
shMFloor4.configure(floorrad0*4/8, floorrad1*4/8);
|
shMFloor4.configure(floorrad0*4/8, floorrad1*4/8);
|
||||||
shBigTriangle.configure(triangleside, 0); shBigTriangle.prio = PPR::FLOOR_TOWER;
|
shBigTriangle.configure(triangleside, 0); shBigTriangle.prio = PPR::FLOOR_TOWER;
|
||||||
shBigHepta.configure(0, (nonbitrunc ? tessf : xcrossf) * .97);
|
shBigHepta.configure(0, (!BITRUNCATED ? tessf : xcrossf) * .97);
|
||||||
shTriheptaFloor.configure(trihepta0, trihepta1);
|
shTriheptaFloor.configure(trihepta0, trihepta1);
|
||||||
shDragonFloor.prio = PPR::FLOOR_DRAGON;
|
shDragonFloor.prio = PPR::FLOOR_DRAGON;
|
||||||
shPowerFloor.prio = PPR::FLOOR_DRAGON;
|
shPowerFloor.prio = PPR::FLOOR_DRAGON;
|
||||||
@ -2101,7 +2101,7 @@ void buildpolys() {
|
|||||||
bshape(shZebra[1], PPR::FLOOR, scalef, 163);
|
bshape(shZebra[1], PPR::FLOOR, scalef, 163);
|
||||||
bshape(shZebra[2], PPR::FLOOR, scalef, 164);
|
bshape(shZebra[2], PPR::FLOOR, scalef, 164);
|
||||||
bshape(shZebra[3], PPR::FLOOR, scalef, 165);
|
bshape(shZebra[3], PPR::FLOOR, scalef, 165);
|
||||||
bshape(shZebra[4], PPR::FLOOR, 1, 166); // for nonbitrunc
|
bshape(shZebra[4], PPR::FLOOR, 1, 166); // for pure
|
||||||
bshape(shEmeraldFloor[0], PPR::FLOOR, scalef, 167); // 4
|
bshape(shEmeraldFloor[0], PPR::FLOOR, scalef, 167); // 4
|
||||||
bshape(shEmeraldFloor[1], PPR::FLOOR, scalef, 168); // 12
|
bshape(shEmeraldFloor[1], PPR::FLOOR, scalef, 168); // 12
|
||||||
bshape(shEmeraldFloor[2], PPR::FLOOR, scalef, 169); // 16
|
bshape(shEmeraldFloor[2], PPR::FLOOR, scalef, 169); // 16
|
||||||
@ -2115,9 +2115,9 @@ void buildpolys() {
|
|||||||
bshape(shTower[4], PPR::FLOOR_TOWER, scalef, 200); // 9
|
bshape(shTower[4], PPR::FLOOR_TOWER, scalef, 200); // 9
|
||||||
bshape(shTower[5], PPR::FLOOR_TOWER, scalef, 201); // 10
|
bshape(shTower[5], PPR::FLOOR_TOWER, scalef, 201); // 10
|
||||||
bshape(shTower[6], PPR::FLOOR_TOWER, scalef, 202); // 10
|
bshape(shTower[6], PPR::FLOOR_TOWER, scalef, 202); // 10
|
||||||
bshape(shTower[7], PPR::FLOOR_TOWER, 1, 203); // nonbitrunc 7
|
bshape(shTower[7], PPR::FLOOR_TOWER, 1, 203); // pure 7
|
||||||
bshape(shTower[8], PPR::FLOOR_TOWER, 1, 204); // nonbitrunc 11
|
bshape(shTower[8], PPR::FLOOR_TOWER, 1, 204); // pure 11
|
||||||
bshape(shTower[9], PPR::FLOOR_TOWER, 1, 205); // nonbitrunc 15
|
bshape(shTower[9], PPR::FLOOR_TOWER, 1, 205); // pure 15
|
||||||
bshape(shTower[10], PPR::FLOOR_TOWER, scalef, 206); // Euclidean
|
bshape(shTower[10], PPR::FLOOR_TOWER, scalef, 206); // Euclidean
|
||||||
|
|
||||||
// structures & walls
|
// structures & walls
|
||||||
@ -2160,11 +2160,11 @@ void buildpolys() {
|
|||||||
bshape(shWormTail, PPR::TENTACLE1, scalef, 383);
|
bshape(shWormTail, PPR::TENTACLE1, scalef, 383);
|
||||||
bshape(shSmallWormTail, PPR::TENTACLE1, scalef, 384);
|
bshape(shSmallWormTail, PPR::TENTACLE1, scalef, 384);
|
||||||
|
|
||||||
if(nonbitrunc) bshape(shDragonSegment, PPR::TENTACLE1, gp::scale * irr::scale, 233);
|
if(!BITRUNCATED) bshape(shDragonSegment, PPR::TENTACLE1, gp::scale * irr::scale, 233);
|
||||||
else bshape(shDragonSegment, PPR::TENTACLE1, scalef, 234);
|
else bshape(shDragonSegment, PPR::TENTACLE1, scalef, 234);
|
||||||
bshape(shDragonWings, PPR::ONTENTACLE, scalef, 237);
|
bshape(shDragonWings, PPR::ONTENTACLE, scalef, 237);
|
||||||
bshape(shDragonLegs, PPR::TENTACLE0, scalef, 238);
|
bshape(shDragonLegs, PPR::TENTACLE0, scalef, 238);
|
||||||
if(nonbitrunc) bshape(shDragonTail, PPR::TENTACLE1, gp::scale * irr::scale, 239);
|
if(!BITRUNCATED) bshape(shDragonTail, PPR::TENTACLE1, gp::scale * irr::scale, 239);
|
||||||
else bshape(shDragonTail, PPR::TENTACLE1, scalef, 240);
|
else bshape(shDragonTail, PPR::TENTACLE1, scalef, 240);
|
||||||
bshape(shDragonNostril, PPR::ONTENTACLE_EYES, scalef, 241);
|
bshape(shDragonNostril, PPR::ONTENTACLE_EYES, scalef, 241);
|
||||||
bshape(shDragonHead, PPR::ONTENTACLE, scalef, 242);
|
bshape(shDragonHead, PPR::ONTENTACLE, scalef, 242);
|
||||||
@ -2173,11 +2173,11 @@ void buildpolys() {
|
|||||||
if(sphere) krsc *= 1.4;
|
if(sphere) krsc *= 1.4;
|
||||||
if(S7 ==8) krsc *= 1.3;
|
if(S7 ==8) krsc *= 1.3;
|
||||||
|
|
||||||
if(nonbitrunc && !gp::on && !irr::on && !euclid4) {
|
if(PURE && !euclid4) {
|
||||||
tentacle_length = 1.52;
|
tentacle_length = 1.52;
|
||||||
bshape(shSeaTentacle, PPR::TENTACLE1, 1, 245);
|
bshape(shSeaTentacle, PPR::TENTACLE1, 1, 245);
|
||||||
}
|
}
|
||||||
else if(gp::on || irr::on) {
|
else if(NONSTDVAR) {
|
||||||
tentacle_length = 0.566256 * 1.6 * gp::scale * irr::scale * krsc;
|
tentacle_length = 0.566256 * 1.6 * gp::scale * irr::scale * krsc;
|
||||||
bshape(shSeaTentacle, PPR::TENTACLE1, 1.6 * gp::scale * irr::scale * krsc, 246);
|
bshape(shSeaTentacle, PPR::TENTACLE1, 1.6 * gp::scale * irr::scale * krsc, 246);
|
||||||
}
|
}
|
||||||
@ -2185,8 +2185,8 @@ void buildpolys() {
|
|||||||
tentacle_length = 0.566256 * gp::scale * irr::scale;
|
tentacle_length = 0.566256 * gp::scale * irr::scale;
|
||||||
bshape(shSeaTentacle, PPR::TENTACLE1, gp::scale * irr::scale, 246);
|
bshape(shSeaTentacle, PPR::TENTACLE1, gp::scale * irr::scale, 246);
|
||||||
}
|
}
|
||||||
ld ksc = (nonbitrunc ? 1.8 : 1.5) * gp::scale * irr::scale * krsc;
|
ld ksc = (!BITRUNCATED ? 1.8 : 1.5) * gp::scale * irr::scale * krsc;
|
||||||
if(euclid4 && nonbitrunc) ksc *= .5;
|
if(euclid4 && PURE) ksc *= .5;
|
||||||
bshape(shKrakenHead, PPR::ONTENTACLE, ksc, 247);
|
bshape(shKrakenHead, PPR::ONTENTACLE, ksc, 247);
|
||||||
bshape(shKrakenEye, PPR::ONTENTACLE_EYES, ksc, 248);
|
bshape(shKrakenEye, PPR::ONTENTACLE_EYES, ksc, 248);
|
||||||
bshape(shKrakenEye2, PPR::ONTENTACLE_EYES2, ksc, 249);
|
bshape(shKrakenEye2, PPR::ONTENTACLE_EYES2, ksc, 249);
|
||||||
@ -2420,10 +2420,10 @@ void buildpolys() {
|
|||||||
for(int v=0; v<13; v++) for(int z=0; z<2; z++)
|
for(int v=0; v<13; v++) for(int z=0; z<2; z++)
|
||||||
copyshape(shTortoise[v][4+z], shTortoise[v][2+z], PPR(shTortoise[v][2+z].prio + (PPR::CARRIED-PPR::ITEM)));
|
copyshape(shTortoise[v][4+z], shTortoise[v][2+z], PPR(shTortoise[v][2+z].prio + (PPR::CARRIED-PPR::ITEM)));
|
||||||
|
|
||||||
if(nonbitrunc) bshape(shMagicSword, PPR::MAGICSWORD, euclid4 ? gp::scale * irr::scale / 2 : gp::scale * irr::scale, 243);
|
if(!BITRUNCATED) bshape(shMagicSword, PPR::MAGICSWORD, euclid4 ? gp::scale * irr::scale / 2 : gp::scale * irr::scale, 243);
|
||||||
else bshape(shMagicSword, PPR::MAGICSWORD, 1, 244);
|
else bshape(shMagicSword, PPR::MAGICSWORD, 1, 244);
|
||||||
|
|
||||||
if(nonbitrunc) bshape(shMagicShovel, PPR::MAGICSWORD, euclid4 ? gp::scale * irr::scale / 2 : gp::scale * irr::scale, 333);
|
if(!BITRUNCATED) bshape(shMagicShovel, PPR::MAGICSWORD, euclid4 ? gp::scale * irr::scale / 2 : gp::scale * irr::scale, 333);
|
||||||
else bshape(shMagicShovel, PPR::MAGICSWORD, 1, 333);
|
else bshape(shMagicShovel, PPR::MAGICSWORD, 1, 333);
|
||||||
|
|
||||||
bshape(shBead0, PPR(20), 1, 250);
|
bshape(shBead0, PPR(20), 1, 250);
|
||||||
|
3
quit.cpp
3
quit.cpp
@ -275,8 +275,7 @@ hint hints[] = {
|
|||||||
resetModes();
|
resetModes();
|
||||||
stop_game();
|
stop_game();
|
||||||
specialland = laHalloween;
|
specialland = laHalloween;
|
||||||
targetgeometry = gSphere;
|
set_geometry(gSphere);
|
||||||
restart_game(rg::geometry);
|
|
||||||
vid.alpha = 999;
|
vid.alpha = 999;
|
||||||
vid.scale = 998;
|
vid.scale = 998;
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,7 @@ pair<int, int> get_cellcrawler_id(cell *c) {
|
|||||||
if(torus && (torusconfig::tmflags() & torusconfig::TF_KLEIN))
|
if(torus && (torusconfig::tmflags() & torusconfig::TF_KLEIN))
|
||||||
return make_pair(cell_to_pair(c).second * 2 + ctof(c), 0);
|
return make_pair(cell_to_pair(c).second * 2 + ctof(c), 0);
|
||||||
int id = 0, dir = 0;
|
int id = 0, dir = 0;
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
gp::local_info li = gp::get_local_info(c);
|
gp::local_info li = gp::get_local_info(c);
|
||||||
id = (li.relative.first & 15) + (li.relative.second & 15) * 16 + fix6(li.total_dir) * 256;
|
id = (li.relative.first & 15) + (li.relative.second & 15) * 16 + fix6(li.total_dir) * 256;
|
||||||
// ld = li.last_dir;
|
// ld = li.last_dir;
|
||||||
|
@ -1231,7 +1231,7 @@ bool drawVertex(const transmatrix &V, cell *c, shmup::monster *m) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint h = tC0(V * m->at);
|
hyperpoint h = tC0(V * m->at);
|
||||||
transmatrix V2 = rgpushxto0(h) * ypush(nonbitrunc ? .3 : .2);
|
transmatrix V2 = rgpushxto0(h) * ypush(PURE ? .3 : .2); // todo-variation
|
||||||
if(doshow && !behindsphere(V2)) {
|
if(doshow && !behindsphere(V2)) {
|
||||||
if(vd.info) queuelink(vd.info, PPR::TEXT);
|
if(vd.info) queuelink(vd.info, PPR::TEXT);
|
||||||
queuestr(V2, (svg::in ? .28 : .2) * crossf / hcrossf, vd.name, backcolor ? 0x000000 : 0xFFFF00, svg::in ? 0 : 1);
|
queuestr(V2, (svg::in ? .28 : .2) * crossf / hcrossf, vd.name, backcolor ? 0x000000 : 0xFFFF00, svg::in ? 0 : 1);
|
||||||
@ -1800,7 +1800,7 @@ using namespace tour;
|
|||||||
|
|
||||||
string cname() {
|
string cname() {
|
||||||
if(euclid) return "coord-6.txt";
|
if(euclid) return "coord-6.txt";
|
||||||
if(nonbitrunc) return "coord-7.txt";
|
if(PURE) return "coord-7.txt";
|
||||||
return "coord-67.txt";
|
return "coord-67.txt";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ void slow_delete_cell(cell *c) {
|
|||||||
|
|
||||||
void delete_heptagon(heptagon *h2) {
|
void delete_heptagon(heptagon *h2) {
|
||||||
cell *c = h2->c7;
|
cell *c = h2->c7;
|
||||||
if(!nonbitrunc) {
|
if(BITRUNCATED) {
|
||||||
for(int i=0; i<c->type; i++)
|
for(int i=0; i<c->type; i++)
|
||||||
if(c->move(i))
|
if(c->move(i))
|
||||||
slow_delete_cell(c->move(i));
|
slow_delete_cell(c->move(i));
|
||||||
@ -84,7 +84,7 @@ bool unsafeLand(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void save_memory() {
|
void save_memory() {
|
||||||
if(quotient || !hyperbolic) return;
|
if(quotient || !hyperbolic || NONSTDVAR) return;
|
||||||
if(!memory_saving_mode) return;
|
if(!memory_saving_mode) return;
|
||||||
if(unsafeLand(cwt.at)) return;
|
if(unsafeLand(cwt.at)) return;
|
||||||
int d = celldist(cwt.at);
|
int d = celldist(cwt.at);
|
||||||
|
11
scores.cpp
11
scores.cpp
@ -36,9 +36,14 @@ int modediff(score *S) {
|
|||||||
if(S->box[238]) g = gSphere;
|
if(S->box[238]) g = gSphere;
|
||||||
if(S->box[239]) g = gElliptic;
|
if(S->box[239]) g = gElliptic;
|
||||||
if(max(S->box[197], 1) != multi::players) diff += 8;
|
if(max(S->box[197], 1) != multi::players) diff += 8;
|
||||||
if(S->box[186] != nonbitrunc || S->box[341] != gp::on)
|
|
||||||
diff += 16;
|
eVariation savevar =
|
||||||
if(S->box[341] && gp::on && (S->box[342] != gp::param.first || S->box[343] != gp::param.second))
|
S->box[341] ? eVariation::goldberg :
|
||||||
|
S->box[344] ? eVariation::irregular :
|
||||||
|
eVariation(S->box[186]);
|
||||||
|
|
||||||
|
if(variation != savevar) diff += 16;
|
||||||
|
if(GOLDBERG && savevar == eVariation::goldberg && (S->box[342] != gp::param.first || S->box[343] != gp::param.second))
|
||||||
diff += 16;
|
diff += 16;
|
||||||
if(S->box[196] != chaosmode) diff += 32;
|
if(S->box[196] != chaosmode) diff += 32;
|
||||||
if(S->box[119] != shmup::on) diff += 64;
|
if(S->box[119] != shmup::on) diff += 64;
|
||||||
|
@ -3305,12 +3305,12 @@ void destroyBoats(cell *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
transmatrix master_relative(cell *c, bool get_inverse) {
|
transmatrix master_relative(cell *c, bool get_inverse) {
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
int id = irr::cellindex[c];
|
int id = irr::cellindex[c];
|
||||||
ld alpha = 2 * M_PI / S7 * irr::periodmap[c->master].base.spin;
|
ld alpha = 2 * M_PI / S7 * irr::periodmap[c->master].base.spin;
|
||||||
return get_inverse ? irr::cells[id].rpusher * spin(-alpha-master_to_c7_angle()): spin(alpha + master_to_c7_angle()) * irr::cells[id].pusher;
|
return get_inverse ? irr::cells[id].rpusher * spin(-alpha-master_to_c7_angle()): spin(alpha + master_to_c7_angle()) * irr::cells[id].pusher;
|
||||||
}
|
}
|
||||||
else if(gp::on) {
|
else if(GOLDBERG) {
|
||||||
if(c == c->master->c7) {
|
if(c == c->master->c7) {
|
||||||
return spin((get_inverse?-1:1) * master_to_c7_angle());
|
return spin((get_inverse?-1:1) * master_to_c7_angle());
|
||||||
}
|
}
|
||||||
@ -3321,7 +3321,7 @@ transmatrix master_relative(cell *c, bool get_inverse) {
|
|||||||
return T;
|
return T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!nonbitrunc && !euclid) {
|
else if(BITRUNCATED && !euclid) {
|
||||||
for(int d=0; d<S7; d++) if(c->master->c7->move(d) == c)
|
for(int d=0; d<S7; d++) if(c->master->c7->move(d) == c)
|
||||||
return (get_inverse?invhexmove:hexmove)[d];
|
return (get_inverse?invhexmove:hexmove)[d];
|
||||||
return Id;
|
return Id;
|
||||||
|
86
system.cpp
86
system.cpp
@ -35,7 +35,7 @@ bool verless(string v, string cmp) {
|
|||||||
bool do_use_special_land() {
|
bool do_use_special_land() {
|
||||||
return
|
return
|
||||||
!safety &&
|
!safety &&
|
||||||
(peace::on || tactic::on || geometry || gp::on || irr::on || randomPatternsMode || yendor::on);
|
(peace::on || tactic::on || geometry || NONSTDVAR || randomPatternsMode || yendor::on);
|
||||||
}
|
}
|
||||||
|
|
||||||
hookset<bool()> *hooks_welcome_message;
|
hookset<bool()> *hooks_welcome_message;
|
||||||
@ -569,7 +569,10 @@ void applyBoxes() {
|
|||||||
applyBoxBool(survivalist);
|
applyBoxBool(survivalist);
|
||||||
if(loadingHi) applyBoxI(itLotus);
|
if(loadingHi) applyBoxI(itLotus);
|
||||||
else applyBoxNum(truelotus, "lotus/escape");
|
else applyBoxNum(truelotus, "lotus/escape");
|
||||||
applyBoxBool(nonbitrunc, "heptagons only");
|
|
||||||
|
int v = int(variation);
|
||||||
|
applyBoxNum(v, "variation");
|
||||||
|
variation = eVariation(v);
|
||||||
applyBoxI(itRose);
|
applyBoxI(itRose);
|
||||||
applyBoxOrb(itOrbBeauty);
|
applyBoxOrb(itOrbBeauty);
|
||||||
applyBoxI(itCoral);
|
applyBoxI(itCoral);
|
||||||
@ -690,11 +693,12 @@ void applyBoxes() {
|
|||||||
applyBoxM(moCrusher);
|
applyBoxM(moCrusher);
|
||||||
applyBoxM(moMonk);
|
applyBoxM(moMonk);
|
||||||
|
|
||||||
applyBoxBool(gp::on);
|
bool v2 = false;
|
||||||
|
applyBoxBool(v2); if(loading && v2) variation = eVariation::goldberg;
|
||||||
applyBox(gp::param.first);
|
applyBox(gp::param.first);
|
||||||
applyBox(gp::param.second);
|
applyBox(gp::param.second);
|
||||||
|
|
||||||
applyBoxBool(irr::on);
|
v2 = false; applyBoxBool(v2); if(loading && v2) variation = eVariation::irregular;
|
||||||
applyBox(irr::cellcount);
|
applyBox(irr::cellcount);
|
||||||
|
|
||||||
list_invorb();
|
list_invorb();
|
||||||
@ -719,13 +723,14 @@ void loadBoxHigh() {
|
|||||||
dynamicval<eGeometry> sp2(geometry, (eGeometry) savebox[116]);
|
dynamicval<eGeometry> sp2(geometry, (eGeometry) savebox[116]);
|
||||||
dynamicval<bool> sp3(shmup::on, savebox[119]);
|
dynamicval<bool> sp3(shmup::on, savebox[119]);
|
||||||
dynamicval<bool> sp4(chaosmode, savebox[196]);
|
dynamicval<bool> sp4(chaosmode, savebox[196]);
|
||||||
dynamicval<bool> sp5(nonbitrunc, savebox[186]);
|
dynamicval<eVariation> sp5(variation, (eVariation) savebox[186]);
|
||||||
dynamicval<bool> sp6(gp::on, savebox[341]);
|
|
||||||
dynamicval<int> sp7(gp::param.first, savebox[342]);
|
dynamicval<int> sp7(gp::param.first, savebox[342]);
|
||||||
dynamicval<int> sp8(gp::param.second, savebox[343]);
|
dynamicval<int> sp8(gp::param.second, savebox[343]);
|
||||||
|
|
||||||
if(savebox[238]) geometry = gSphere;
|
if(savebox[238]) geometry = gSphere;
|
||||||
if(savebox[239]) geometry = gElliptic;
|
if(savebox[239]) geometry = gElliptic;
|
||||||
|
if(savebox[341]) variation = eVariation::goldberg;
|
||||||
|
if(savebox[344]) variation = eVariation::irregular;
|
||||||
|
|
||||||
if(multi::players < 1 || multi::players > MAXPLAYER)
|
if(multi::players < 1 || multi::players > MAXPLAYER)
|
||||||
multi::players = 1;
|
multi::players = 1;
|
||||||
@ -857,8 +862,8 @@ void saveStats(bool emergency = false) {
|
|||||||
fprintf(f, "Total enemies killed: %d\n", tkills());
|
fprintf(f, "Total enemies killed: %d\n", tkills());
|
||||||
fprintf(f, "cells generated: %d\n", cellcount);
|
fprintf(f, "cells generated: %d\n", cellcount);
|
||||||
if(pureHardcore()) fprintf(f, "Pure hardcore mode\n");
|
if(pureHardcore()) fprintf(f, "Pure hardcore mode\n");
|
||||||
if(nonbitrunc) fprintf(f, "Heptagons only mode\n");
|
|
||||||
if(geometry) fprintf(f, "Geometry: %s\n", ginf[geometry].name);
|
if(geometry) fprintf(f, "Geometry: %s\n", ginf[geometry].name);
|
||||||
|
if(CHANGED_VARIATION) fprintf(f, "Variation: %s\n", gp::operation_name().c_str());
|
||||||
if(chaosmode) fprintf(f, "Chaos mode\n");
|
if(chaosmode) fprintf(f, "Chaos mode\n");
|
||||||
if(shmup::on) fprintf(f, "Shoot-em up mode\n");
|
if(shmup::on) fprintf(f, "Shoot-em up mode\n");
|
||||||
if(inv::on) fprintf(f, "Inventory mode\n");
|
if(inv::on) fprintf(f, "Inventory mode\n");
|
||||||
@ -1028,8 +1033,8 @@ namespace gamestack {
|
|||||||
heptspin viewctr;
|
heptspin viewctr;
|
||||||
transmatrix View;
|
transmatrix View;
|
||||||
eGeometry geometry;
|
eGeometry geometry;
|
||||||
|
eVariation variation;
|
||||||
bool shmup;
|
bool shmup;
|
||||||
bool hepta;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
vector<gamedata> gd;
|
vector<gamedata> gd;
|
||||||
@ -1048,7 +1053,7 @@ namespace gamestack {
|
|||||||
gdn.View = View;
|
gdn.View = View;
|
||||||
gdn.geometry = geometry;
|
gdn.geometry = geometry;
|
||||||
gdn.shmup = shmup::on;
|
gdn.shmup = shmup::on;
|
||||||
gdn.hepta = nonbitrunc;
|
gdn.variation = variation;
|
||||||
gdn.ctover = centerover;
|
gdn.ctover = centerover;
|
||||||
gd.push_back(gdn);
|
gd.push_back(gdn);
|
||||||
}
|
}
|
||||||
@ -1060,7 +1065,7 @@ namespace gamestack {
|
|||||||
viewctr = gdn.viewctr;
|
viewctr = gdn.viewctr;
|
||||||
View = gdn.View;
|
View = gdn.View;
|
||||||
geometry = gdn.geometry;
|
geometry = gdn.geometry;
|
||||||
nonbitrunc = gdn.hepta;
|
variation = gdn.variation;
|
||||||
if(shmup::on) shmup::clearMonsters();
|
if(shmup::on) shmup::clearMonsters();
|
||||||
shmup::on = gdn.shmup;
|
shmup::on = gdn.shmup;
|
||||||
resetGeometry();
|
resetGeometry();
|
||||||
@ -1127,6 +1132,37 @@ void push_game() {
|
|||||||
game_active = false;
|
game_active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_geometry(eGeometry target) {
|
||||||
|
if(geometry != target) {
|
||||||
|
stop_game();
|
||||||
|
ors::reset();
|
||||||
|
geometry = target;
|
||||||
|
|
||||||
|
if(chaosmode && (euclid || sphere || quotient)) chaosmode = false;
|
||||||
|
if(euclid6) variation = eVariation::bitruncated;
|
||||||
|
if(IRREGULAR) variation = eVariation::bitruncated;
|
||||||
|
if(GOLDBERG && gp::param == gp::loc(1,1) && S3 == 3) {
|
||||||
|
variation = eVariation::bitruncated;
|
||||||
|
}
|
||||||
|
if(GOLDBERG && nonorientable) {
|
||||||
|
if(gp::param.second && gp::param.second != gp::param.first)
|
||||||
|
gp::param.second = 0;
|
||||||
|
}
|
||||||
|
if(geometry == gBinaryTiling) variation = eVariation::pure;
|
||||||
|
|
||||||
|
need_reset_geometry = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_variation(eVariation target) {
|
||||||
|
if(variation != target) {
|
||||||
|
stop_game();
|
||||||
|
if(euclid6 || binarytiling) geometry = gNormal;
|
||||||
|
variation = target;
|
||||||
|
need_reset_geometry = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void switch_game_mode(char switchWhat) {
|
void switch_game_mode(char switchWhat) {
|
||||||
DEBB(DF_INIT, (debugfile,"switch_game_mode\n"));
|
DEBB(DF_INIT, (debugfile,"switch_game_mode\n"));
|
||||||
switch(switchWhat) {
|
switch(switchWhat) {
|
||||||
@ -1156,7 +1192,8 @@ void switch_game_mode(char switchWhat) {
|
|||||||
case rg::tour:
|
case rg::tour:
|
||||||
geometry = gNormal;
|
geometry = gNormal;
|
||||||
yendor::on = tactic::on = princess::challenge = peace::on = inv::on = false;
|
yendor::on = tactic::on = princess::challenge = peace::on = inv::on = false;
|
||||||
chaosmode = nonbitrunc = randomPatternsMode = irr::on = gp::on = false;
|
chaosmode = randomPatternsMode = false;
|
||||||
|
variation = eVariation::bitruncated;
|
||||||
gp::param = gp::loc(1, 1);
|
gp::param = gp::loc(1, 1);
|
||||||
shmup::on = false;
|
shmup::on = false;
|
||||||
need_reset_geometry = true;
|
need_reset_geometry = true;
|
||||||
@ -1164,33 +1201,6 @@ void switch_game_mode(char switchWhat) {
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case rg::bitrunc:
|
|
||||||
case rg::gp:
|
|
||||||
if(euclid6 || binarytiling) geometry = gNormal;
|
|
||||||
nonbitrunc = !nonbitrunc; irr::on = false;
|
|
||||||
gp::on = (switchWhat == rg::gp && !gp::on);
|
|
||||||
need_reset_geometry = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case rg::geometry:
|
|
||||||
ors::reset();
|
|
||||||
if(geometry == targetgeometry) geometry = gNormal;
|
|
||||||
else geometry = targetgeometry;
|
|
||||||
if(chaosmode && (euclid || sphere || quotient)) chaosmode = false;
|
|
||||||
if(nonbitrunc && euclid6) nonbitrunc = false;
|
|
||||||
if(irr::on) irr::on = false;
|
|
||||||
if(gp::on && gp::param == gp::loc(1,1) && S3 == 3) {
|
|
||||||
gp::on = false; nonbitrunc = false;
|
|
||||||
}
|
|
||||||
if(gp::on && nonorientable) {
|
|
||||||
if(gp::param.second && gp::param.second != gp::param.first)
|
|
||||||
gp::param.second = 0;
|
|
||||||
}
|
|
||||||
if(geometry == gBinaryTiling) nonbitrunc = true, gp::on = irr::on = false;
|
|
||||||
|
|
||||||
need_reset_geometry = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case rg::yendor:
|
case rg::yendor:
|
||||||
yendor::on = !yendor::on;
|
yendor::on = !yendor::on;
|
||||||
tactic::on = false;
|
tactic::on = false;
|
||||||
|
17
textures.cpp
17
textures.cpp
@ -389,7 +389,7 @@ void texture_config::mark_triangles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const auto current_texture_parameters = tie(geometry, nonbitrunc, patterns::whichPattern, patterns::subpattern_flags, pmodel, vid.scale, vid.alpha);
|
static const auto current_texture_parameters = tie(geometry, variation, patterns::whichPattern, patterns::subpattern_flags, pmodel, vid.scale, vid.alpha);
|
||||||
|
|
||||||
void texture_config::clear_texture_map() {
|
void texture_config::clear_texture_map() {
|
||||||
texture_map.clear();
|
texture_map.clear();
|
||||||
@ -773,7 +773,8 @@ patterns::patterninfo si_save;
|
|||||||
|
|
||||||
saverlist texturesavers;
|
saverlist texturesavers;
|
||||||
|
|
||||||
bool target_nonbitru;
|
eVariation targetvariation;
|
||||||
|
eGeometry targetgeometry;
|
||||||
|
|
||||||
string csymbol;
|
string csymbol;
|
||||||
|
|
||||||
@ -794,7 +795,7 @@ void init_textureconfig() {
|
|||||||
addsaver(vid.yposition, "Y position", 0);
|
addsaver(vid.yposition, "Y position", 0);
|
||||||
addsaver(vid.xposition, "X position", 0);
|
addsaver(vid.xposition, "X position", 0);
|
||||||
addsaver(vid.camera_angle, "camera angle", 0);
|
addsaver(vid.camera_angle, "camera angle", 0);
|
||||||
addsaverenum(target_nonbitru, "bitruncated", false);
|
addsaverenum(targetvariation, "bitruncated", eVariation::bitruncated);
|
||||||
// ... geometry parameters
|
// ... geometry parameters
|
||||||
|
|
||||||
addsaverenum(patterns::whichPattern, "pattern", patterns::PAT_TYPES);
|
addsaverenum(patterns::whichPattern, "pattern", patterns::PAT_TYPES);
|
||||||
@ -843,7 +844,7 @@ bool texture_config::save() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
targetgeometry = geometry;
|
targetgeometry = geometry;
|
||||||
target_nonbitru = nonbitrunc;
|
targetvariation = variation;
|
||||||
|
|
||||||
cell *ctr = euclid ? centerover.at : viewctr.at->c7;
|
cell *ctr = euclid ? centerover.at : viewctr.at->c7;
|
||||||
si_save = patterns::getpatterninfo0(ctr);
|
si_save = patterns::getpatterninfo0(ctr);
|
||||||
@ -887,13 +888,13 @@ bool texture_config::load() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stop_game_and_switch_mode(rg::geometry);
|
set_geometry(targetgeometry);
|
||||||
start_game();
|
start_game();
|
||||||
return config.load();
|
return config.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nonbitrunc != target_nonbitru) {
|
if(variation != targetvariation) {
|
||||||
stop_game_and_switch_mode(rg::bitrunc);
|
set_variation(targetvariation);
|
||||||
start_game();
|
start_game();
|
||||||
return config.load();
|
return config.load();
|
||||||
}
|
}
|
||||||
@ -1472,7 +1473,7 @@ void texture_config::true_remap() {
|
|||||||
|
|
||||||
auto& mi2 = texture_map[si.id];
|
auto& mi2 = texture_map[si.id];
|
||||||
mi2 = mi;
|
mi2 = mi;
|
||||||
if(gp::on || irr::on) pshift += si.dir;
|
if(GOLDBERG || IRREGULAR) pshift += si.dir;
|
||||||
mapTexture(c, mi2, si, ggmatrix(c), pshift);
|
mapTexture(c, mi2, si, ggmatrix(c), pshift);
|
||||||
mapTexture2(mi2);
|
mapTexture2(mi2);
|
||||||
mi2.tvertices = move(new_tvertices);
|
mi2.tvertices = move(new_tvertices);
|
||||||
|
21
tour.cpp
21
tour.cpp
@ -150,19 +150,28 @@ bool handleKeyTour(int sym, int uni) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(geometry || nonbitrunc) {
|
if(geometry || CHANGED_VARIATION) {
|
||||||
return_geometry();
|
return_geometry();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
presentation(pmGeometry);
|
presentation(pmGeometry);
|
||||||
|
|
||||||
if(sym == '1') targetgeometry = gSphere, vid.alpha = 1, vid.scale = .5;
|
|
||||||
if(sym == '2') targetgeometry = gEuclid, vid.alpha = 1, vid.scale = .5;
|
|
||||||
|
|
||||||
firstland = specialland = cwt.at->land;
|
firstland = specialland = cwt.at->land;
|
||||||
push_game();
|
push_game();
|
||||||
switch_game_mode(sym == '3' ? rg::bitrunc : rg::geometry);
|
switch(sym) {
|
||||||
|
case '3':
|
||||||
|
set_variation(eVariation::pure);
|
||||||
|
break;
|
||||||
|
case '1':
|
||||||
|
set_geometry(gSphere);
|
||||||
|
vid.alpha = 1, vid.scale = .5;
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
set_geometry(gEuclid);
|
||||||
|
vid.alpha = 1, vid.scale = .5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
start_game();
|
start_game();
|
||||||
presentation(pmGeometryStart);
|
presentation(pmGeometryStart);
|
||||||
string x;
|
string x;
|
||||||
@ -284,7 +293,7 @@ namespace ss {
|
|||||||
dialog::display();
|
dialog::display();
|
||||||
keyhandler = [] (int sym, int uni) {
|
keyhandler = [] (int sym, int uni) {
|
||||||
if(uni >= 'a' && uni < 'a' + sssize) {
|
if(uni >= 'a' && uni < 'a' + sssize) {
|
||||||
if(geometry || nonbitrunc) {
|
if(geometry || CHANGED_VARIATION) {
|
||||||
pop_game();
|
pop_game();
|
||||||
presentation(pmGeometryReset);
|
presentation(pmGeometryReset);
|
||||||
}
|
}
|
||||||
|
@ -864,7 +864,7 @@ int modecode() {
|
|||||||
else if(pureHardcore()) xcode ++;
|
else if(pureHardcore()) xcode ++;
|
||||||
|
|
||||||
if(euclid) xcode += 6;
|
if(euclid) xcode += 6;
|
||||||
else if(nonbitrunc) xcode += 3;
|
else if(!BITRUNCATED) xcode += 3;
|
||||||
|
|
||||||
if(sphere) {
|
if(sphere) {
|
||||||
xcode += 9;
|
xcode += 9;
|
||||||
@ -894,14 +894,14 @@ int modecode() {
|
|||||||
// randompattern never records its scores
|
// randompattern never records its scores
|
||||||
// no specifics of the advanced configuration of torus/fieldquotient currently recorded
|
// no specifics of the advanced configuration of torus/fieldquotient currently recorded
|
||||||
|
|
||||||
if(gp::on) {
|
if(GOLDBERG) {
|
||||||
mct += (1 << 19);
|
mct += (1 << 19);
|
||||||
auto loc = gp::human_representation(gp::param);
|
auto loc = gp::human_representation(gp::param);
|
||||||
mct += loc.first << 21; // 4 bits
|
mct += loc.first << 21; // 4 bits
|
||||||
mct += loc.second << 25; // 4 bits
|
mct += loc.second << 25; // 4 bits
|
||||||
}
|
}
|
||||||
|
|
||||||
if(irr::on) {
|
if(IRREGULAR) {
|
||||||
mct += (1 << 20);
|
mct += (1 << 20);
|
||||||
mct += irr::density_code() << 21; // 8 bits
|
mct += irr::density_code() << 21; // 8 bits
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user