diff --git a/bigstuff.cpp b/bigstuff.cpp index 520cac22..9d04fc2e 100644 --- a/bigstuff.cpp +++ b/bigstuff.cpp @@ -138,7 +138,9 @@ EX int default_levs() { return 1; if(S3 >= OINF) return 1; + #if MAXMDIM >= 4 if(reg3::in_rule()) return 0; + #endif return S3-3; } @@ -152,7 +154,10 @@ void hrmap::generateAlts(heptagon *h, int levs, bool link_cdata) { for(int i=0; itype; i++) createStep(h->alt, i)->alt = h->alt->alt; int relspin = -4; // for horocycles it must go the other way - if(quotient || reg3::in_rule()) relspin = 0; + if(quotient) relspin = 0; + #if MAXMDIM >= 4 + else if(reg3::in_rule()) relspin = 0; + #endif else { for(int j=0; jtype; j++) for(int i=0; itype; i++) { createStep(h, i); @@ -194,11 +199,13 @@ void hrmap::generateAlts(heptagon *h, int levs, bool link_cdata) { } } +#if MAXMDIM >= 4 EX int hrandom_adjacent(int d) { vector choices = {d}; for(int a=0; atype; i++) { + #if MAXMDIM >= 4 if(!reg3::in_rule()) { + #else + if(true) { + #endif if(c->move(i) && c->move(i)->mpdist < c->mpdist) gdir = i; } else { @@ -283,10 +294,12 @@ EX heptagon *createAlternateMap(cell *c, int rad, hstate firststate, int special if(hybri) alt->fieldval = hybrid::get_where(centerover).second; alt->c7 = NULL; alt->alt = alt; + #if MAXMDIM >= 4 if(reg3::in_rule()) { reg3::link_structures(h, alt, firststate); if(alt->fiftyval == -1) return nullptr; /* unlinked */ } + #endif h->alt = alt; alt->cdata = (cdata*) h; currentmap->link_alt(bf); @@ -1499,7 +1512,10 @@ EX void buildBigStuff(cell *c, cell *from) { buildBarrier4(c, bd, 0, getNewLand(c->land), c->land); */ } - if((!chaosmode) && bearsCamelot(c->land) && is_master(c) && !bt::in() && !(hyperbolic && WDIM == 3 && !reg3::in_rule()) && + if((!chaosmode) && bearsCamelot(c->land) && is_master(c) && !bt::in() && + #if MAXMDIM >= 4 + !(hyperbolic && WDIM == 3 && !reg3::in_rule()) && + #endif (quickfind(laCamelot) || peace::on || (hrand(I2000) < (c->land == laCrossroads4 ? 800 : 200) && horo_ok() && items[itEmerald] >= U5 && !tactic::on && !racing::on))) { int rtr = newRoundTableRadius(); diff --git a/cell.cpp b/cell.cpp index c805d3bb..283756b6 100644 --- a/cell.cpp +++ b/cell.cpp @@ -148,8 +148,10 @@ EX hrmap *currentmap; EX vector allmaps; EX hrmap *newAltMap(heptagon *o) { + #if MAXMDIM >= 4 if(reg3::in_rule()) return reg3::new_alt_map(o); + #endif return new hrmap_hyperbolic(o); } // --- hyperbolic geometry --- @@ -524,11 +526,13 @@ EX int celldistAlt(cell *c) { /** direction upwards in the tree */ EX int updir(heptagon *h) { if(bt::in()) return bt::updir(); + #if MAXMDIM >= 4 if(WDIM == 3 && reg3::in_rule()) { for(int i=0; imove(i) && h->move(i)->distance < h->distance) return i; return -1; } + #endif if(h->distance == 0) return -1; return 0; } @@ -536,11 +540,13 @@ EX int updir(heptagon *h) { /** direction upwards in the alt-tree */ EX int updir_alt(heptagon *h) { if(euclid || !h->alt) return -1; + #if MAXMDIM >= 4 if(WDIM == 3 && reg3::in_rule()) { for(int i=0; imove(i) && h->move(i)->alt && h->move(i)->alt->distance < h->alt->distance) return i; return -1; } + #endif for(int i=0; imove(i) && h->move(i)->alt == h->alt->move(0)) return i; diff --git a/celldrawer.cpp b/celldrawer.cpp index b20bf06e..1aa1cd73 100644 --- a/celldrawer.cpp +++ b/celldrawer.cpp @@ -872,10 +872,12 @@ void celldrawer::draw_halfvine() { queuepolyat(GDIM == 2 ? Vdepth : V2, cgi.shSemiFloor[0], darkena(vcol, fd, 0xFF), PPR::WALL3A); {dynamicval p(poly_outline, OUTLINE_TRANS); queuepolyat(V2 * spin(M_PI*2/3), cgi.shSemiFloorShadow, SHADOW_WALL, GDIM == 2 ? PPR::WALLSHADOW : PPR::TRANSPARENT_SHADOW); } auto& side = queuepolyat(V2, cgi.shSemiFloorSide[SIDE_WALL], darkena(vcol, fd, 0xFF), PPR::WALL3A-2+away(V2)); + #if MAXMDIM >= 4 if(GDIM == 3 && qfi.fshape) { side.tinf = &floor_texture_vertices[shar.id]; ensure_vertex_number(*side.tinf, side.cnt); } + #endif if(cgi.validsidepar[SIDE_WALL]) forCellIdEx(c2, j, c) { int dis = i-j; @@ -1529,6 +1531,7 @@ void celldrawer::draw_features() { } void celldrawer::draw_features_and_walls_3d() { +#if MAXMDIM >= 4 color_t dummy; int ofs = wall_offset(c); if(isWall3(c, wcol)) { @@ -1645,6 +1648,7 @@ void celldrawer::draw_features_and_walls_3d() { queuepoly(face_the_player(V), cgi.shLoveRing, darkena(0x804060, 0, 0xFF)); if(rd == 2) queuepoly(face_the_player(V), cgi.shLoveRing, darkena(0x402030, 0, 0xFF)); +#endif } #if HDR diff --git a/fieldpattern.cpp b/fieldpattern.cpp index edca935f..ffe70c18 100644 --- a/fieldpattern.cpp +++ b/fieldpattern.cpp @@ -299,6 +299,9 @@ struct fpattern { unsigned compute_hash(); + void set_field(int p, int sq); + + #if MAXMDIM >= 4 // general 4D vector fullv; @@ -308,12 +311,10 @@ struct fpattern { int solve3(); bool generate_all3(); - void set_field(int p, int sq); - // transmatrix full_R, full_P, full_X; - #if CAP_THREAD struct discovery *dis; #endif + #endif }; #if CAP_THREAD @@ -377,6 +378,7 @@ vector fpattern::generate_isometries() { return res; } +#if MAXMDIM >= 4 vector fpattern::generate_isometries3() { matrix T = Id; @@ -454,6 +456,7 @@ void fpattern::add1(const matrix& M, const transmatrix& Full) { matcode[M] = i, matrices.push_back(M), fullv.push_back(Full); } } +#endif map hash_found; @@ -469,6 +472,7 @@ unsigned fpattern::compute_hash() { return hashv; } +#if MAXMDIM >= 4 bool fpattern::generate_all3() { reg3::generate_fulls(); @@ -554,6 +558,7 @@ int fpattern::solve3() { return cmb; } +#endif void fpattern::set_field(int p, int sq) { Prime = p; @@ -586,6 +591,7 @@ int fpattern::solve() { } } else wsquare = 0; + #if MAXMDIM >= 4 if(WDIM == 3) { if(dual == 0 && (Prime <= limitsq || pw == 1)) { int s = solve3(); @@ -593,6 +599,7 @@ int fpattern::solve() { } continue; } + #endif if(dual == 2) { if(Field <= 10) { @@ -1325,7 +1332,9 @@ EX void hread_fpattern(hstream& hs, fieldpattern::fpattern& fp) { hread(hs, fp.R); hread(hs, fp.X); fp.set_field(fp.Prime, fp.wsquare); + #if MAXMDIM >= 4 fp.generate_all3(); + #endif } EX void hwrite_fpattern(hstream& hs, fieldpattern::fpattern& fp) { diff --git a/graph.cpp b/graph.cpp index f07eef40..c9a11061 100644 --- a/graph.cpp +++ b/graph.cpp @@ -3603,12 +3603,14 @@ EX bool fat_edges = false; EX void gridline(const transmatrix& V1, const hyperpoint h1, const transmatrix& V2, const hyperpoint h2, color_t col, int prec) { ld d = hdist(V1*h1, V2*h2); + #if MAXMDIM >= 4 if(WDIM == 3 && fat_edges) { transmatrix T = V1 * rgpushxto0(h1); transmatrix S = rspintox(inverse(T) * V2 * h2); queuepoly(T * S, cgi.generate_pipe(d, vid.linewidth), col); return; } + #endif while(d > precise_width && d < 100 && grid_depth < 10) { if(!eqmatrix(V1, V2, 1e-6)) { gridline(V1, h1, V1, inverse(V1) * V2 * h2, col, prec); return; } diff --git a/landgen.cpp b/landgen.cpp index 25b42243..20c2bbcc 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -667,6 +667,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { #endif else if(arb::in() && arb::current.have_line) c->wall = arb::linespattern(c) ? waTrapdoor : waNone; + #if MAXMDIM >= 4 else if(reg3::in_rule()) switch(geometry) { case gSpace534: { if(c->master->fieldval == 0) c->wall = waTrapdoor; @@ -690,6 +691,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { } default: ; } + #endif else if(euclid && !arcm::in()) { auto co = euc2_coordinates(c); int y = co.second;