diff --git a/geometry.cpp b/geometry.cpp index 41dd9f83..68f83bec 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -423,7 +423,7 @@ void geometry_information::prepare_basics() { ld fmin, fmax; - if(archimedean) + if(archimedean && !prod) ginf[gArchimedean].cclass = gcHyperbolic; if(euclid) { diff --git a/mapeditor.cpp b/mapeditor.cpp index 63849b9f..6a174d03 100644 --- a/mapeditor.cpp +++ b/mapeditor.cpp @@ -262,7 +262,7 @@ namespace mapstream { if(hybri && VERNUM_HEX >= 0xA80C) { auto g = geometry; load_geometry(f); - hybrid::configure(g); + set_geometry(g); } if(binarytiling && VERNUM_HEX >= 0xA80C) f.read(vid.binary_width); @@ -293,7 +293,7 @@ namespace mapstream { for(int k=0; kgamestart() : cwt.at->master->c7); + addToQueue((bounded || euclid || prod || archimedean) ? currentmap->gamestart() : cwt.at->master->c7); for(int i=0; i= isize(cellbyid)) break; int dir = f.read_char(); cell *c2 = cellbyid[parent]; - dir = fixspin(dir, relspin[parent], c2->type, f.vernum); + dir = fixspin(relspin[parent], dir, c2->type - sub, f.vernum); c = createMov(c2, dir); // printf("%p:%d,%d -> %p\n", c2, relspin[parent], dir, c); // spinval becomes xspinval - rspin = (c2->c.spin(dir) - f.read_char() + MODFIXER) % c->type; - if(GDIM == 3 && rspin) { + rspin = (c2->c.spin(dir) - f.read_char() + MODFIXER) % (c->type - sub); + if(GDIM == 3 && rspin && !hybri) { println(hlog, "rspin in 3D"); throw hstream_exception(); } @@ -449,7 +450,7 @@ namespace mapstream { cellbyid.push_back(c); relspin.push_back(rspin); c->land = (eLand) f.read_char(); - c->mondir = fixspin(rspin, f.read_char(), c->type, f.vernum); + c->mondir = fixspin(rspin, f.read_char(), c->type - sub, f.vernum); c->monst = (eMonster) f.read_char(); if(c->monst == moTortoise && f.vernum >= 11001) f.read(tortoise::emap[c]);