From aa34ed80c8e3bfe9f45951588293ca769bad3e1e Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 4 Dec 2018 02:37:10 +0100 Subject: [PATCH] crystal:: fiftyval set correctly -- Docks and Snake Nest work --- crystal.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/crystal.cpp b/crystal.cpp index f601e3e3..26272a4d 100644 --- a/crystal.cpp +++ b/crystal.cpp @@ -314,6 +314,47 @@ struct east_structure { int coordid; }; +int fiftyrule(coord c) { + int res[256] = { + 1,-1,32,-1,-1, 2,-1,35,32,-1, 1,-1,-1,35,-1, 2, + -1,-1,-1,-1, 4,-1,36,-1,-1,-1,-1,-1,36,-1, 4,-1, + 32,-1, 1,-1,-1,34,-1, 3, 1,-1,32,-1,-1, 3,-1,34, + -1,-1,-1,-1,36,-1, 4,-1,-1,-1,-1,-1, 4,-1,36,-1, + -1, 4,-1,36,-1,-1,-1,-1,-1,36,-1, 4,-1,-1,-1,-1, + 3,-1,35,-1,-1,-1,-1,-1,35,-1, 3,-1,-1,-1,-1,-1, + -1,36,-1, 4,-1,-1,-1,-1,-1, 4,-1,36,-1,-1,-1,-1, + 34,-1, 2,-1,-1,-1,-1,-1, 2,-1,34,-1,-1,-1,-1,-1, + 32,-1, 1,-1,-1,34,-1, 3, 1,-1,32,-1,-1, 3,-1,34, + -1,-1,-1,-1,36,-1, 4,-1,-1,-1,-1,-1, 4,-1,36,-1, + 1,-1,32,-1,-1, 2,-1,35,32,-1, 1,-1,-1,35,-1, 2, + -1,-1,-1,-1, 4,-1,36,-1,-1,-1,-1,-1,36,-1, 4,-1, + -1,36,-1, 4,-1,-1,-1,-1,-1, 4,-1,36,-1,-1,-1,-1, + 34,-1, 2,-1,-1,-1,-1,-1, 2,-1,34,-1,-1,-1,-1,-1, + -1, 4,-1,36,-1,-1,-1,-1,-1,36,-1, 4,-1,-1,-1,-1, + 3,-1,35,-1,-1,-1,-1,-1,35,-1, 3,-1,-1,-1,-1,-1, + }; + + int index = 0; + for(int i=0; i<4; i++) index += (c[i] & 3) << (2 * i); + + if(res[index] == -1) exit(1); + + return res[index]; + + /* + int res = 0; + int d = (c[0]&1) + 2 * (c[1]&1) + 4 * (c[2]&1) + 8 * (c[3]&1); + if(d == 0) res = 0; + else if(d == 3 || d == 12) res = 2; + else if(d == 6 || d == 9) res = 4; + else return -1; + bool odd = (c[0]^c[1]^c[2]^c[3])&2; + if(odd) + res ^= 32; + // the '1' bit set by hand + */ + } + struct hrmap_crystal : hrmap { heptagon *getOrigin() { return get_heptagon_at(c0, S7); } @@ -354,6 +395,8 @@ struct hrmap_crystal : hrmap { h->cdata = NULL; h->c7 = newCell(deg, h); h->distance = 0; + if(ginf[gCrystal].vertex == 3) + h->fiftyval = fiftyrule(c); for(int i=0; idistance += abs(c[i]); h->distance /= 2; hcoords[h] = c;