diff --git a/crystal.cpp b/crystal.cpp index 07a7f1fe..09d63526 100644 --- a/crystal.cpp +++ b/crystal.cpp @@ -375,6 +375,7 @@ int readArgs() { geometry = gCrystal; variation = eVariation::pure; shift(); int N = argi(); ginf[gCrystal].sides = N; + ginf[gCrystal].vertex = 4; if(N < MAX_EDGE) ginf[gCrystal].distlimit = distlimit_table[N]; add_bitruncation = false; @@ -383,6 +384,8 @@ int readArgs() { stop_game(); geometry = gCrystal; variation = eVariation::bitruncated; ginf[gCrystal].sides = 8; + ginf[gCrystal].vertex = 3; + ginf[gCrystal].distlimit = {7, 5}; add_bitruncation = true; } else if(argis("-cview")) { diff --git a/hyper.h b/hyper.h index a50820f0..76846734 100644 --- a/hyper.h +++ b/hyper.h @@ -4136,6 +4136,7 @@ namespace arcm { } namespace crystal { + extern bool add_bitruncation; color_t colorize(cell *c); int distance(cell *c1, cell *c2); hrmap *new_map(); diff --git a/system.cpp b/system.cpp index 8546a62a..0882ce4b 100644 --- a/system.cpp +++ b/system.cpp @@ -1158,6 +1158,11 @@ void set_variation(eVariation target) { if(variation != target) { stop_game(); if(euclid6 || binarytiling) geometry = gNormal; + if(target == eVariation::bitruncated && geometry == gCrystal && ginf[gCrystal].sides == 8 && !crystal::add_bitruncation) { + crystal::add_bitruncation = true; + ginf[gCrystal].vertex = 3; + target = eVariation::pure; + } variation = target; need_reset_geometry = true; }