zenorogue / hyperrogue

A SDL roguelike in a non-euclidean world
GNU General Public License v2.0
575 stars 72 forks source link

Issues in full 3d #80

Open michael-heerdegen opened 5 years ago

michael-heerdegen commented 5 years ago

Hi,

I have now started playing a standard game in full 3d (non-shmup). I think it has potential (look at the tunnels the running docs create in land of eternal motion to see that turn based mode can become even more chess like than in 2d). I'm fascinated, this is really very cool.

Here are some impressions/issues/bugs:

(1) One clear bug is that whenever I pick up an orb of safety all my golems don't follow, they just disappear.

(2) Monsters are hard to see. Most monsters most of the time appear as black 3d models without texture or only glowing eyes. Hard to discover even when you are adjacent to them.

(3) I increased sight range to 8 because, well, I want to see those tiles. It works quite well! I have to wait some time until most of the scene has been rendered. I don't care. The problem is the radar minimap. There are probably thousands of treasures in my near vicinity, and they are all displayed in the minimap. It's very hard to see the enemies! -> There should be a key to toggle what the minimap shows (show only monsters, everything, etc.)

(4) Sandworms in the desert just explode. I walk through the desert, didn't even pick up any spice, and boom, boom, every second move a sandworm explodes. I guess that shoundn't happen. Maybe depends on the chosen tessellation.

(5) Crossroads 4 (I started the game from there) look a bit different than I expected. Land borders are not planes. There are infinite parts of the borders that are plane, but from looking around in Crossroads 4, most borders look like squares with perpendicular planes starting from the sides. Also, borders between 2 different lands are ending in the crossroads in one dimension. I guess it's all by design so far, but in two dimension, no land borders of two lands end in crossroads, so it's not completely analogue.

(6) In the crossroads, probably anywhere, the chance to find an orb, say an orb of life, in your direct vicinity, is much larger than in 2d... you surely know. I currently need those orbs of life.

(7) While playing I wished there was a mean to toggle highlighting of enemies, similar to treasure. I also whished I could highlight the edges of my tile to see adjacent tiles better. I know about 6, but it isn't that helpful in practice. The visual effects of picked up orbs doesn't make things better...

The last points are not that important. Anyway, I enjoy playing and exploring very much, it feels like a completely different game - amazing!

Michael.

michael-heerdegen commented 5 years ago

Ok, I figured out some things:

(2) solved by chosing a different background color (5) is as expected when I change to a honeycomb tesselation.

michael-heerdegen commented 5 years ago

In the honeycomb I play now I have the feeling that it's harder to find orbs of life in crossroads 4, though they are also a bit harder to see since the curvature is larger. Orbs of safety are generated more often definitely. Oh, and I found that orbs appear in their native land before I have collected 10 treasures there. The sandworms are also exploding in the honeycomb deserts.

zenorogue commented 5 years ago

Thanks for the reports!

(2) Black monsters are a bug. They should look roughly like in this video: https://www.youtube.com/watch?v=twrn6CW-szo

Does this happen in all 3D geometries? Oneirical here https://www.reddit.com/r/roguelikes/comments/c2lzpt/hyperrogue_adds_3dimensions_mode_in_the_new_111/ says that it happens only in {4,3,5}, although they seem to be confused, as the video is clearly {4,4} on horospheres. Does choosing a different background color indeed solve the problem, or is it just a walkaround? Maybe changing the fullscreen settings (possibly before setting the 3D mode) could fix this?

(5) You mean crossroads look good in {4,3,5} and {5,3,4} honeycombs, but not in ones based on horospheres? The honeycombs based on horospheres do not really have "regular" planes, so HyperRogue uses an approximation which looks good in these honeycombs. The intersection of a half-space and a horosphere is a circle on that horosphere, and a circle in, say, the square grid would not look very good, so HyperRogue uses squares instead. Not sure what you mean by ending in crossroads.

zenorogue commented 5 years ago

Oh, and you can highlight the cell before you with: settings -> mouse -> highlight the cell forward

And the grid in general by pressing '6' or in the quick settings menu.

zenorogue commented 5 years ago

Version 11.1g fixes the sandworm problem and makes the range of the radar configurable, which should help with (3).

michael-heerdegen commented 5 years ago

Zeno Rogue notifications@github.com writes:

Thanks for the reports!

(2) Black monsters are a bug.

I remember that they were not always completely black. Sometimes they were partly colored, like glowing eyes or black desert men with white swords.

Does this happen in all 3D geometries? I can't reproduce currently, in neither geometry.

Does choosing a different background color indeed solve the problem, or is it just a walkaround?

That was just a workaround I think. I changed several settings in parallel, and the problem had gone. Apart from gargoyles maybe, AFAIR I still saw them appear as black shapes.

Maybe changing the fullscreen settings (possibly before setting the 3D mode) could fix this?

Yeah, that could be related, I had changed the fullscreen setting the same time when the problem had gone.

(5) Not sure what you mean by ending in crossroads.

Just that there are borders between lands that touch crossroads 4. These borders start as half planes perpendicular to crossroads 4. Lands meet at the crossroads. Yes, only in horosphere based tilings. Nothing wrong with it I guess.

Michael.

michael-heerdegen commented 5 years ago

Zeno Rogue notifications@github.com writes:

Oh, and you can highlight the cell before you with: settings -> mouse -> highlight the cell forward

And the grid in general by pressing '6' or in the quick settings menu.

Very helpful indeed, thanks for the tip!

michael-heerdegen commented 5 years ago

Michael Heerdegen michael_heerdegen@web.de writes:

That was just a workaround I think. I changed several settings in parallel, and the problem had gone. Apart from gargoyles maybe, AFAIR I still saw them appear as black shapes.

No, now they are greyish. Hmm, have to play a lot the next days... ;-)

michael-heerdegen commented 5 years ago

Playing now pure/{5,3,4}/none in 11.1g, says my .log.

In Crossroads 4 I sometimes see two other lands (half-spaces) touching in one point (tangential), i.e. in the discrete tesselation they share one tile side. No problem if it is intended.

But now I've got a real problem: I collected 60 treasures. As soon as this happens (tried multiple times), the game starts using up unlimited memory. The last time I managed to find an orb of safety so I could save. Now, as soon as I start the game, it begins to use up memory until I kill it. I don't need to move for that to happen, just generating the world uses up all of my memory. The last thing I had collected was a tasty jelly, but I guess it's the 60 total treasures that make the difference.

michael-heerdegen commented 5 years ago

Decreasing the 3D sight range seems to help a bit. Still: moving around generally uses not much more memory, and then I make a step that uses around additional 4GB, as if a certain land, generating or displaying, would need much more memory then the other lands.

michael-heerdegen commented 5 years ago

Decreasing the 3D sight range seems to help a bit. Still: moving around generally uses not much more memory, and then I make a step that uses around additional 4GB, as if a certain land, generating or displaying, would need much more memory then the other lands.

zenorogue commented 5 years ago

It seems that the land which required more memory was the Land of Storms. I have also disabled Warped Coast in full games (does not really work in this geometry), fixed a crash when generating Rose Garden, and disabled Camelot in full games (which is buggy and hard to get right). Please try 11.1h.

michael-heerdegen commented 5 years ago

Great, thanks! Will try.

Some more impressions, now with rectangles on horospheres (turn-based, pure tactics, still 11.1g):

michael-heerdegen commented 5 years ago

FWIW since I went to 11.1g the monsters-are-only-silhouettes problem has reappeared. AFAIR I didn't toggle fullscreen mode. Here is an example screenshot: one of the H^3 honeycombs with a snake in the desert:

Screenshot_2019-08-04_11-05-38

This is my current .ini:

radarsize size=250
radarrange=4
movement help3=yes
frame limit=300
xres=1954
yres=1127
font size=35
3D TC depth=0
3D TC camera=1
3D TC alpha=2
memory_saving_mode=yes
used model=19
color:background=1A1918
color:stdgrid=404040FF
mode-geometry=33
mode-variation=1
land for special modes=52
field-of-vision=140
sight-binary3=8
use configured keys=yes
key:27=1
key:46=24
key:102=1
key:104=1
joystick A-B1=19
joystick A-B3=18
joystick A-B6=27
joystick A-B7=24
joystick A axis 0=0
joystick A hat 0 U=20
joystick A hat 0 R=21
joystick A hat 0 D=22
joystick A hat 0 L=23

which shows the problem. I think all 3d geometries have that problem; I'll try to experiment a bit.

michael-heerdegen commented 5 years ago

No, the screenshot is still from 11.1f but in 1g it's not different.

michael-heerdegen commented 5 years ago

All hyperbolic 3d geometries had the problem. Toggling fullscreen didn't help.

Then I toggled opengl off and on again. The textures appeared, but when I left settings, only silhouettes again. I toggled opengl a second time off and on, and then everything was as expected. All monsters looking normal (colored) in all lands I visited.

michael-heerdegen commented 5 years ago

Btw, one more detail: in the 3d geometries, sometimes key input doesn't work or is hardly recognized. Moving by clicking left mouse key is ok most of the time, but pausing one move (AFAIR f is the default key, I made it so that it's on the . key), when I hit . often nothing happens, I have to retry several times, or hit the key for two seconds or so.

zenorogue commented 5 years ago

I think I have fixed the textures problem in 11.1m.

michael-heerdegen commented 5 years ago

Thanks. I didn't try it so far. Today I tried to build 11.1n - unfortunately it fails, with thousands of lines of output:

bash-5.0:micha:hyperrogue111n-src$ make
g++ -O2 -DLINUX -std=c++11 -march=native -W -Wall -Wextra -Wno-maybe-uninitialized -Wno-missing-field-initializers -Wno-unused-parameter -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:28:3: error: ‘string’ does not name a type; did you mean ‘stdin’?
 #endif
   ^~~~  
   stdin
hprint.cpp:29:3: error: ‘string’ does not name a type; did you mean ‘stdin’?

   ^     
   stdin
hprint.cpp:30:3: error: ‘string’ does not name a type; did you mean ‘stdin’?
 EX string its(int i) { char buf[64]; sprintf(buf, "%d", i); return buf; }
   ^~~~~~
   stdin
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:42:10: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline string ONOFF(bool b) { return XLAT(b ? "ON" : "OFF"); }
          ^~~~~~
          stdin
hprint.cpp:49:11: error: ‘color_t’ does not name a type; did you mean ‘error_t’?
   virtual color_t get_vernum() { return VERNUM_HEX; }
           ^~~~~~~
           error_t
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:63:41: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline void hwrite(hstream& hs, const string& s) { hs.write_char(isize(s)); for(char c: s) hs.write_char(c); }
                                         ^~~~~~
                                         stdin
hprint.cpp: In function ‘void hwrite(hstream&, const int&)’:
hprint.cpp:63:68: error: ‘isize’ was not declared in this scope
 inline void hwrite(hstream& hs, const string& s) { hs.write_char(isize(s)); for(char c: s) hs.write_char(c); }
                                                                    ^~~~~
hprint.cpp:63:68: note: suggested alternative:
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:367:23: note:   ‘hr::isize’
 template<class T> int isize(const T& x) {return x.size(); }
                       ^~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:63:91: error: ‘begin’ was not declared in this scope
 inline void hwrite(hstream& hs, const string& s) { hs.write_char(isize(s)); for(char c: s) hs.write_char(c); }
                                                                                           ^
hprint.cpp:63:91: note: suggested alternative:
In file included from /usr/include/c++/8/string:51,
                 from /usr/include/c++/8/stdexcept:39,
                 from /usr/include/c++/8/array:39,
                 from /usr/include/c++/8/tuple:39,
                 from /usr/include/c++/8/functional:54,
                 from sysconfig.h:400,
                 from compileunits.h:14,
                 from init.cpp:8,
                 from hyper.cpp:22:
/usr/include/c++/8/bits/range_access.h:87:5: note:   ‘std::begin’
     begin(_Tp (&__arr)[_Nm])
     ^~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:63:91: error: ‘end’ was not declared in this scope
 inline void hwrite(hstream& hs, const string& s) { hs.write_char(isize(s)); for(char c: s) hs.write_char(c); }
                                                                                           ^
hprint.cpp:63:91: note: suggested alternative:
In file included from /usr/include/c++/8/string:51,
                 from /usr/include/c++/8/stdexcept:39,
                 from /usr/include/c++/8/array:39,
                 from /usr/include/c++/8/tuple:39,
                 from /usr/include/c++/8/functional:54,
                 from sysconfig.h:400,
                 from compileunits.h:14,
                 from init.cpp:8,
                 from hyper.cpp:22:
/usr/include/c++/8/bits/range_access.h:97:5: note:   ‘std::end’
     end(_Tp (&__arr)[_Nm])
     ^~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp: At global scope:
hprint.cpp:64:34: error: ‘string’ has not been declared
 inline void hread(hstream& hs, string& s) { s = ""; int l = (unsigned char) hs.read_char(); for(int i=0; i<l; i++) s += hs.read_char(); }
                                  ^~~~~~
hprint.cpp: In function ‘void hread(hstream&, int&)’:
hprint.cpp:64:51: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
 inline void hread(hstream& hs, string& s) { s = ""; int l = (unsigned char) hs.read_char(); for(int i=0; i<l; i++) s += hs.read_char(); }
                                                   ^~
hprint.cpp: At global scope:
hprint.cpp:65:41: error: ‘ld’ does not name a type
 inline void hwrite(hstream& hs, const ld& h) { double d = h; hs.write_chars((char*) &d, sizeof(double)); }
                                         ^~
hprint.cpp:65:15: error: redefinition of ‘void hwrite(hstream&, const int&)’
 inline void hwrite(hstream& hs, const ld& h) { double d = h; hs.write_chars((char*) &d, sizeof(double)); }
               ^~~~~~
hprint.cpp:63:15: note: ‘void hwrite(hstream&, const int&)’ previously defined here
 inline void hwrite(hstream& hs, const string& s) { hs.write_char(isize(s)); for(char c: s) hs.write_char(c); }
               ^~~~~~
hprint.cpp:66:34: error: ‘ld’ has not been declared
 inline void hread(hstream& hs, ld& h) { double d; hs.read_chars((char*) &d, sizeof(double)); h = d; }
                                  ^~
hprint.cpp:66:15: error: redefinition of ‘void hread(hstream&, int&)’
 inline void hread(hstream& hs, ld& h) { double d; hs.read_chars((char*) &d, sizeof(double)); h = d; }
               ^~~~~
hprint.cpp:64:15: note: ‘void hread(hstream&, int&)’ previously defined here
 inline void hread(hstream& hs, string& s) { s = ""; int l = (unsigned char) hs.read_char(); for(int i=0; i<l; i++) s += hs.read_char(); }
               ^~~~~
hprint.cpp:68:62: error: ‘array’ does not name a type
 template<class T, size_t X> void hwrite(hstream& hs, const array<T, X>& a) { for(auto &ae: a) hwrite(hs, ae); }
                                                              ^~~~~
hprint.cpp:68:67: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, size_t X> void hwrite(hstream& hs, const array<T, X>& a) { for(auto &ae: a) hwrite(hs, ae); }
                                                                   ^
hprint.cpp: In function ‘void hwrite(hstream&, int)’:
hprint.cpp:68:94: error: ‘a’ was not declared in this scope
 emplate<class T, size_t X> void hwrite(hstream& hs, const array<T, X>& a) { for(auto &ae: a) hwrite(hs, ae); }
                                                                                             ^

hprint.cpp:68:94: note: suggested alternative: ‘ae’
 emplate<class T, size_t X> void hwrite(hstream& hs, const array<T, X>& a) { for(auto &ae: a) hwrite(hs, ae); }
                                                                                             ^
                                                                                             ae
hprint.cpp: At global scope:
hprint.cpp:69:55: error: ‘array’ has not been declared
 template<class T, size_t X> void hread(hstream& hs, array<T, X>& a) { for(auto &ae: a) hread(hs, ae); }
                                                       ^~~~~
hprint.cpp:69:60: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, size_t X> void hread(hstream& hs, array<T, X>& a) { for(auto &ae: a) hread(hs, ae); }
                                                            ^
hprint.cpp: In function ‘void hread(hstream&, int)’:
hprint.cpp:69:87: error: ‘a’ was not declared in this scope
 template<class T, size_t X> void hread(hstream& hs, array<T, X>& a) { for(auto &ae: a) hread(hs, ae); }
                                                                                       ^
hprint.cpp:69:87: note: suggested alternative: ‘ae’
 template<class T, size_t X> void hread(hstream& hs, array<T, X>& a) { for(auto &ae: a) hread(hs, ae); }
                                                                                       ^
                                                                                       ae
hprint.cpp: At global scope:
hprint.cpp:71:34: error: ‘hyperpoint’ has not been declared
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                  ^~~~~~~~~~
hprint.cpp:71:15: error: redefinition of ‘void hread(hstream&, int&)’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
               ^~~~~
hprint.cpp:64:15: note: ‘void hread(hstream&, int&)’ previously defined here
 inline void hread(hstream& hs, string& s) { s = ""; int l = (unsigned char) hs.read_char(); for(int i=0; i<l; i++) s += hs.read_char(); }
               ^~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp: In function ‘void hread(hstream&, int&)’:
hyper.h:122:18: error: ‘ginf’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:122:18: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:263:34: note:   ‘hr::ginf’
 extern std::vector<geometryinfo> ginf;
                                  ^~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:122:23: error: ‘geometry’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:122:23: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:260:18: note:   ‘hr::geometry’
 extern eGeometry geometry;
                  ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:127:26: error: ‘gcProduct’ was not declared in this scope
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:127:26: note: suggested alternative:
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:220:71: note:   ‘gcProduct’
 enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSol, gcNil, gcProduct };
                                                                       ^~~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:332:15: error: ‘vid’ was not declared in this scope
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:332:15: note: suggested alternative:
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:325:17: note:   ‘hr::vid’
 extern videopar vid;
                 ^~~
hyper.h:330:28: error: ‘gBinary3’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:28: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:207:3: note:   ‘gBinary3’
   gBinary3, gCubeTiling, gCell120, gECell120, gRhombic3, gBitrunc3,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:52: error: ‘gBinary4’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:52: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:216:3: note:   ‘gBinary4’
   gBinary4, gSol,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:76: error: ‘gKiteDart2’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:76: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:71:66: note: in expansion of macro ‘MDIM’
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:217:3: note:   ‘gKiteDart2’
   gKiteDart2, gKiteDart3, gNil, gProduct,
   ^~~~~~~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:71:90: error: invalid types ‘int[int]’ for array subscript
 inline void hread(hstream& hs, hyperpoint& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
                                                                                          ^
hprint.cpp: At global scope:
hprint.cpp:72:35: error: ‘hyperpoint’ has not been declared
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                   ^~~~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp: In function ‘void hwrite(hstream&, int)’:
hyper.h:122:18: error: ‘ginf’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:122:18: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:263:34: note:   ‘hr::ginf’
 extern std::vector<geometryinfo> ginf;
                                  ^~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:122:23: error: ‘geometry’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:122:23: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:260:18: note:   ‘hr::geometry’
 extern eGeometry geometry;
                  ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:127:26: error: ‘gcProduct’ was not declared in this scope
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:127:26: note: suggested alternative:
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:220:71: note:   ‘gcProduct’
 enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSol, gcNil, gcProduct };
                                                                       ^~~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:332:15: error: ‘vid’ was not declared in this scope
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:332:15: note: suggested alternative:
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:325:17: note:   ‘hr::vid’
 extern videopar vid;
                 ^~~
hyper.h:330:28: error: ‘gBinary3’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:28: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:207:3: note:   ‘gBinary3’
   gBinary3, gCubeTiling, gCell120, gECell120, gRhombic3, gBitrunc3,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:52: error: ‘gBinary4’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:52: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:216:3: note:   ‘gBinary4’
   gBinary4, gSol,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:76: error: ‘gKiteDart2’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
hyper.h:330:76: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:72:66: note: in expansion of macro ‘MDIM’
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:217:3: note:   ‘gKiteDart2’
   gKiteDart2, gKiteDart3, gNil, gProduct,
   ^~~~~~~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:72:91: error: invalid types ‘int[int]’ for array subscript
 inline void hwrite(hstream& hs, hyperpoint h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
                                                                                           ^
hprint.cpp: At global scope:
hprint.cpp:74:52: error: ‘vector’ does not name a type; did you mean ‘wctob’?
 template<class T> void hwrite(hstream& hs, const vector<T>& a) { hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae); }
                                                    ^~~~~~
                                                    wctob
hprint.cpp:74:58: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T> void hwrite(hstream& hs, const vector<T>& a) { hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae); }
                                                          ^
hprint.cpp: In function ‘void hwrite(hstream&, int)’:
hprint.cpp:74:90: error: ‘a’ was not declared in this scope
 template<class T> void hwrite(hstream& hs, const vector<T>& a) { hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae); }
                                                                                          ^
hprint.cpp:74:84: error: there are no arguments to ‘isize’ that depend on a template parameter, so a declaration of ‘isize’ must be available [-fpermissive]
 template<class T> void hwrite(hstream& hs, const vector<T>& a) { hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae); }
                                                                                    ^~~~~
hprint.cpp:74:84: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
hprint.cpp:74:109: error: range-based ‘for’ expression of type ‘auto’ has incomplete type
 > void hwrite(hstream& hs, const vector<T>& a) { hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae); }
                                                                                             ^

hprint.cpp: At global scope:
hprint.cpp:75:45: error: ‘vector’ has not been declared
 template<class T> void hread(hstream& hs, vector<T>& a) { a.resize(hs.get<int>()); for(auto &ae: a) hread(hs, ae); }
                                             ^~~~~~
hprint.cpp:75:51: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T> void hread(hstream& hs, vector<T>& a) { a.resize(hs.get<int>()); for(auto &ae: a) hread(hs, ae); }
                                                   ^
hprint.cpp: In function ‘void hread(hstream&, int)’:
hprint.cpp:75:61: error: ‘a’ was not declared in this scope
 template<class T> void hread(hstream& hs, vector<T>& a) { a.resize(hs.get<int>()); for(auto &ae: a) hread(hs, ae); }
                                                             ^
hprint.cpp:75:100: error: range-based ‘for’ expression of type ‘auto’ has incomplete type
 e<class T> void hread(hstream& hs, vector<T>& a) { a.resize(hs.get<int>()); for(auto &ae: a) hread(hs, ae); }
                                                                                             ^

hprint.cpp: At global scope:
hprint.cpp:77:61: error: ‘map’ does not name a type
 template<class T, class U> void hwrite(hstream& hs, const map<T,U>& a) {
                                                             ^~~
hprint.cpp:77:64: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, class U> void hwrite(hstream& hs, const map<T,U>& a) {
                                                                ^
hprint.cpp: In function ‘void hwrite(hstream&, int)’:
hprint.cpp:78:25: error: ‘a’ was not declared in this scope
   hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae.first, ae.second);
                         ^
hprint.cpp:78:19: error: there are no arguments to ‘isize’ that depend on a template parameter, so a declaration of ‘isize’ must be available [-fpermissive]
   hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae.first, ae.second);
                   ^~~~~
hprint.cpp:78:44: error: range-based ‘for’ expression of type ‘auto’ has incomplete type
   hwrite<int>(hs, isize(a)); for(auto &ae: a) hwrite(hs, ae.first, ae.second);
                                            ^
hprint.cpp: At global scope:
hprint.cpp:80:54: error: ‘map’ has not been declared
 template<class T, class U> void hread(hstream& hs, map<T,U>& a) {
                                                      ^~~
hprint.cpp:80:57: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, class U> void hread(hstream& hs, map<T,U>& a) {
                                                         ^
hprint.cpp: In function ‘void hread(hstream&, int)’:
hprint.cpp:81:3: error: ‘a’ was not declared in this scope
   a.clear();
   ^
hprint.cpp: At global scope:
hprint.cpp:92:43: error: expected class-name before ‘{’ token
 struct hstream_exception : hr_exception { hstream_exception() {} };
                                           ^
hprint.cpp:95:3: error: ‘color_t’ does not name a type; did you mean ‘error_t’?
   color_t vernum;
   ^~~~~~~
   error_t
hprint.cpp:96:11: error: ‘color_t’ does not name a type; did you mean ‘error_t’?
   virtual color_t get_vernum() override { return vernum; }
           ^~~~~~~
           error_t
hprint.cpp:103:18: error: ‘string’ does not name a type; did you mean ‘stdin’?
   fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); vernum = VERNUM_HEX; }
                  ^~~~~~
                  stdin
hprint.cpp: In constructor ‘fhstream::fhstream()’:
hprint.cpp:102:26: error: ‘vernum’ was not declared in this scope
   fhstream() { f = NULL; vernum = VERNUM_HEX; }
                          ^~~~~~
hprint.cpp:102:26: note: suggested alternative: ‘enum’
   fhstream() { f = NULL; vernum = VERNUM_HEX; }
                          ^~~~~~
                          enum
hprint.cpp: In constructor ‘fhstream::fhstream(int, const char*)’:
hprint.cpp:103:74: error: request for member ‘c_str’ in ‘pathname’, which is of non-class type ‘const int’
   fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); vernum = VERNUM_HEX; }
                                                                          ^~~~~
hprint.cpp:103:90: error: ‘vernum’ was not declared in this scope
   fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); vernum = VERNUM_HEX; }
                                                                                          ^~~~~~
hprint.cpp:103:90: note: suggested alternative: ‘enum’
   fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); vernum = VERNUM_HEX; }
                                                                                          ^~~~~~
                                                                                          enum
hprint.cpp: At global scope:
hprint.cpp:108:3: error: ‘string’ does not name a type; did you mean ‘stdin’?
   string s;
   ^~~~~~
   stdin
hprint.cpp: In member function ‘virtual void shstream::write_char(char)’:
hprint.cpp:111:37: error: ‘s’ was not declared in this scope
   virtual void write_char(char c) { s += c; }
                                     ^
hprint.cpp: In member function ‘virtual char shstream::read_char()’:
hprint.cpp:112:46: error: ‘s’ was not declared in this scope
   virtual char read_char() { if(pos == isize(s)) throw hstream_exception(); return s[pos++]; }
                                              ^
hprint.cpp:112:40: error: ‘isize’ was not declared in this scope
   virtual char read_char() { if(pos == isize(s)) throw hstream_exception(); return s[pos++]; }
                                        ^~~~~
hprint.cpp:112:40: note: suggested alternative:
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:367:23: note:   ‘hr::isize’
 template<class T> int isize(const T& x) {return x.size(); }
                       ^~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:112:84: error: ‘s’ was not declared in this scope
   virtual char read_char() { if(pos == isize(s)) throw hstream_exception(); return s[pos++]; }
                                                                                    ^
hprint.cpp: At global scope:
hprint.cpp:117:25: error: ‘string’ does not name a type; did you mean ‘stdin’?
 template<class... CS> string sprint(const CS&... cs) { shstream hs; print(hs, cs...); return hs.s; }
                         ^~~~~~
                         stdin
hprint.cpp:123:10: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline string spaced(int i) { return its(i); }
          ^~~~~~
          stdin
hprint.cpp:124:10: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline string spaced(color_t col) { return itsh8(col); }
          ^~~~~~
          stdin
hprint.cpp:125:10: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline string spaced(const string& s) { return s; }
          ^~~~~~
          stdin
hprint.cpp:126:10: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline string spaced(ld x) { return fts(x, 10); }
          ^~~~~~
          stdin
hprint.cpp:127:21: error: ‘string’ does not name a type; did you mean ‘stdin’?
 template<class T> string spaced_of(T a[], int q) { string s = spaced(a[0]); for(int i=1; i<q; i++) s += ' ', s += spaced(a[i]); return s; }
                     ^~~~~~
                     stdin
hprint.cpp:128:28: error: ‘string’ does not name a type; did you mean ‘stdin’?
 template<class T, int i> string spaced(const array<T,i>& a) { return spaced_of(&a[0], isize(a)); }
                            ^~~~~~
                            stdin
hprint.cpp:129:44: error: ‘string’ does not name a type; did you mean ‘stdin’?
 template<class C, class C1, class... CS> string spaced(const C& c, const C1& c1, const CS&... cs) { return spaced(c) + " " + spaced(c1, cs...); }
                                            ^~~~~~
                                            stdin
hprint.cpp:132:27: error: ‘ld’ has not been declared
 bool scan(fhstream& hs, ld&);
                           ^~
hprint.cpp:133:27: error: ‘string’ has not been declared
 bool scan(fhstream& hs, string&);
                           ^~~~~~
hprint.cpp:134:27: error: ‘color_t’ has not been declared
 bool scan(fhstream& hs, color_t& c);
                           ^~~~~~~
hprint.cpp:137:3: error: ‘string’ does not name a type; did you mean ‘stdin’?
 string scanline(fhstream& hs);
   ^~~~~~
   stdin
hprint.cpp:166:40: error: ‘string’ does not name a type; did you mean ‘stdin’?
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
                                        ^~~~~~
                                        stdin
hprint.cpp: In function ‘void print(hstream&, const int&)’:
hprint.cpp:166:70: error: request for member ‘c_str’ in ‘s’, which is of non-class type ‘const int’
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
                                                                      ^~~~~
hprint.cpp:166:79: error: ‘isize’ was not declared in this scope
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
                                                                               ^~~~~
hprint.cpp:166:79: note: suggested alternative:
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:367:23: note:   ‘hr::isize’
 template<class T> int isize(const T& x) {return x.size(); }
                       ^~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:167:53: error: ‘its’ was not declared in this scope
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
                                                     ^~~
hprint.cpp: At global scope:
hprint.cpp:168:34: error: ‘ld’ has not been declared
 inline void print(hstream& hs, ld x) { print(hs, fts(x, 6)); }
                                  ^~
hprint.cpp:168:15: error: redefinition of ‘void print(hstream&, int)’
 inline void print(hstream& hs, ld x) { print(hs, fts(x, 6)); }
               ^~~~~
hprint.cpp:167:15: note: ‘void print(hstream&, int)’ previously defined here
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:168:52: error: ‘fts’ was not declared in this scope
 inline void print(hstream& hs, ld x) { print(hs, fts(x, 6)); }
                                                    ^~~
hprint.cpp:168:52: note: suggested alternative: ‘ffs’
 inline void print(hstream& hs, ld x) { print(hs, fts(x, 6)); }
                                                    ^~~
                                                    ffs
hprint.cpp: At global scope:
hprint.cpp:169:34: error: ‘color_t’ has not been declared
 inline void print(hstream& hs, color_t col) { print(hs, itsh8(col)); }
                                  ^~~~~~~
hprint.cpp:169:15: error: redefinition of ‘void print(hstream&, int)’
 inline void print(hstream& hs, color_t col) { print(hs, itsh8(col)); }
               ^~~~~
hprint.cpp:167:15: note: ‘void print(hstream&, int)’ previously defined here
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:169:59: error: ‘itsh8’ was not declared in this scope
 inline void print(hstream& hs, color_t col) { print(hs, itsh8(col)); }
                                                           ^~~~~
hprint.cpp: At global scope:
hprint.cpp:171:51: error: ‘walker’ does not name a type
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                                                   ^~~~~~
hprint.cpp:171:57: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                                                         ^
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:171:82: error: ‘w’ was not declared in this scope
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                                                                                  ^
hprint.cpp: In member function ‘void comma_printer::operator()(const T&)’:
hprint.cpp:176:95: error: no matching function for call to ‘print(hstream&, const char [2])’
 template<class T> void operator() (const T& t) { if(first) first = false; else print(hs, ","); print(hs, t); }
                                                                                             ^

hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:176:95: note:   candidate expects at least 3 arguments, 2 provided
 template<class T> void operator() (const T& t) { if(first) first = false; else print(hs, ","); print(hs, t); }
                                                                                             ^

hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:176:95: note:   couldn't deduce template parameter ‘T’
 template<class T> void operator() (const T& t) { if(first) first = false; else print(hs, ","); print(hs, t); }
                                                                                             ^

hprint.cpp: At global scope:
hprint.cpp:180:61: error: ‘array’ does not name a type
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                             ^~~~~
hprint.cpp:180:66: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                  ^
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:180:92: error: no matching function for call to ‘print(hstream&, const char [2])’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                            ^
hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:180:92: note:   candidate expects at least 3 arguments, 2 provided
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                            ^
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:180:92: note:   couldn't deduce template parameter ‘T’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                            ^
hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:180:92: note:   couldn't deduce template parameter ‘T’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                            ^
hprint.cpp:180:132: error: ‘a’ was not declared in this scope
 hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                             ^

hprint.cpp:180:154: error: no matching function for call to ‘print(hstream&, const char [2])’
 onst array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                                     ^

hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:180:154: note:   candidate expects at least 3 arguments, 2 provided
 onst array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                                     ^

hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:180:154: note:   couldn't deduce template parameter ‘T’
 onst array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                                     ^

hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:180:154: note:   couldn't deduce template parameter ‘T’
 onst array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                                                                     ^

hprint.cpp: At global scope:
hprint.cpp:181:51: error: ‘vector’ does not name a type; did you mean ‘wctob’?
 template<class T> void print(hstream& hs, const vector<T>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                   ^~~~~~
                                                   wctob
hprint.cpp:181:57: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T> void print(hstream& hs, const vector<T>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                                         ^
hprint.cpp:181:26: error: redefinition of ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const vector<T>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                          ^~~~~
hprint.cpp:171:26: note: ‘template<class T> void print(hstream&, int)’ previously declared here
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:183:40: error: ‘hyperpoint’ does not name a type; did you mean ‘hyperbolic’?
 inline void print(hstream& hs, const hyperpoint h) { print(hs, (const array<ld, MAXMDIM>&)h); }
                                        ^~~~~~~~~~
                                        hyperbolic
hprint.cpp:183:15: error: redefinition of ‘void print(hstream&, int)’
 inline void print(hstream& hs, const hyperpoint h) { print(hs, (const array<ld, MAXMDIM>&)h); }
               ^~~~~
hprint.cpp:167:15: note: ‘void print(hstream&, int)’ previously defined here
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:183:73: error: ISO C++ forbids declaration of ‘type name’ with no type [-fpermissive]
 inline void print(hstream& hs, const hyperpoint h) { print(hs, (const array<ld, MAXMDIM>&)h); }
                                                                         ^~~~~
hprint.cpp:183:67: error: expected primary-expression before ‘const’
 inline void print(hstream& hs, const hyperpoint h) { print(hs, (const array<ld, MAXMDIM>&)h); }
                                                                   ^~~~~
hprint.cpp:183:67: error: expected ‘)’ before ‘const’
 inline void print(hstream& hs, const hyperpoint h) { print(hs, (const array<ld, MAXMDIM>&)h); }
                                                                  ~^~~~~
                                                                   )
hprint.cpp: At global scope:
hprint.cpp:184:40: error: ‘transmatrix’ does not name a type; did you mean ‘gmatrix’?
 inline void print(hstream& hs, const transmatrix T) {
                                        ^~~~~~~~~~~
                                        gmatrix
hprint.cpp:184:15: error: redefinition of ‘void print(hstream&, int)’
 inline void print(hstream& hs, const transmatrix T) {
               ^~~~~
hprint.cpp:167:15: note: ‘void print(hstream&, int)’ previously defined here
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:185:16: error: no matching function for call to ‘print(hstream&, const char [2])’
   print(hs, "("); comma_printer c(hs);
                ^
hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:185:16: note:   candidate expects at least 3 arguments, 2 provided
   print(hs, "("); comma_printer c(hs);
                ^
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:185:13: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
   print(hs, "("); comma_printer c(hs);
             ^~~
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:185:13: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
   print(hs, "("); comma_printer c(hs);
             ^~~
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:185:16: note:   couldn't deduce template parameter ‘T’
   print(hs, "("); comma_printer c(hs);
                ^
hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:185:16: note:   couldn't deduce template parameter ‘T’
   print(hs, "("); comma_printer c(hs);
                ^
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:122:18: error: ‘ginf’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:122:18: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                  ^~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:263:34: note:   ‘hr::ginf’
 extern std::vector<geometryinfo> ginf;
                                  ^~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:122:23: error: ‘geometry’ was not declared in this scope
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:122:23: note: suggested alternative:
 #define cgclass (ginf[geometry].cclass)
                       ^~~~~~~~
hyper.h:127:15: note: in expansion of macro ‘cgclass’
 #define prod (cgclass == gcProduct)
               ^~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:260:18: note:   ‘hr::geometry’
 extern eGeometry geometry;
                  ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:127:26: error: ‘gcProduct’ was not declared in this scope
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:127:26: note: suggested alternative:
 #define prod (cgclass == gcProduct)
                          ^~~~~~~~~
hyper.h:333:15: note: in expansion of macro ‘prod’
 #define MDIM (prod ? 3 : GDIM+1)
               ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:220:71: note:   ‘gcProduct’
 enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSol, gcNil, gcProduct };
                                                                       ^~~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:332:15: error: ‘vid’ was not declared in this scope
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:332:15: note: suggested alternative:
 #define GDIM (vid.always3 ? 3 : WDIM)
               ^~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:325:17: note:   ‘hr::vid’
 extern videopar vid;
                 ^~~
hyper.h:330:28: error: ‘gBinary3’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:330:28: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                            ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:207:3: note:   ‘gBinary3’
   gBinary3, gCubeTiling, gCell120, gECell120, gRhombic3, gBitrunc3,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:52: error: ‘gBinary4’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:330:52: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                    ^~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:216:3: note:   ‘gBinary4’
   gBinary4, gSol,
   ^~~~~~~~
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:330:76: error: ‘gKiteDart2’ was not declared in this scope
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
hyper.h:330:76: note: suggested alternative:
 #define WDIM ((geometry >= gBinary3 && geometry != gBinary4 && geometry != gKiteDart2) ? 3 : 2)
                                                                            ^~~~~~~~~~
hyper.h:332:33: note: in expansion of macro ‘WDIM’
 #define GDIM (vid.always3 ? 3 : WDIM)
                                 ^~~~
hyper.h:333:26: note: in expansion of macro ‘GDIM’
 #define MDIM (prod ? 3 : GDIM+1)
                          ^~~~
hprint.cpp:186:18: note: in expansion of macro ‘MDIM’
   for(int i=0; i<MDIM; i++)
                  ^~~~
In file included from compileunits.h:15,
                 from init.cpp:8,
                 from hyper.cpp:22:
classes.h:217:3: note:   ‘gKiteDart2’
   gKiteDart2, gKiteDart3, gNil, gProduct,
   ^~~~~~~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:187:34: error: invalid types ‘const int[int]’ for array subscript
   for(int j=0; j<MDIM; j++) c(T[i][j]);
                                  ^
hprint.cpp:188:16: error: no matching function for call to ‘print(hstream&, const char [2])’
   print(hs, ")"); }
                ^
hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:188:16: note:   candidate expects at least 3 arguments, 2 provided
   print(hs, ")"); }
                ^
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:188:13: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
   print(hs, ")"); }
             ^~~
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:188:13: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
   print(hs, ")"); }
             ^~~
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:188:16: note:   couldn't deduce template parameter ‘T’
   print(hs, ")"); }
                ^
hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:188:16: note:   couldn't deduce template parameter ‘T’
   print(hs, ")"); }
                ^
hprint.cpp: At global scope:
hprint.cpp:190:60: error: ‘pair’ does not name a type
 template<class T, class U> void print(hstream& hs, const pair<T, U> & t) { print(hs, "(", t.first, ",", t.second, ")"); }
                                                            ^~~~
hprint.cpp:190:64: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class T, class U> void print(hstream& hs, const pair<T, U> & t) { print(hs, "(", t.first, ",", t.second, ")"); }
                                                                ^
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:190:93: error: ‘t’ was not declared in this scope
 template<class T, class U> void print(hstream& hs, const pair<T, U> & t) { print(hs, "(", t.first, ",", t.second, ")"); }
                                                                                             ^
hprint.cpp: At global scope:
hprint.cpp:192:54: error: ‘tuple’ does not name a type
 template<class... T> void print(hstream& hs, const tuple<T...> & t) {
                                                      ^~~~~
hprint.cpp:192:59: error: expected ‘,’ or ‘...’ before ‘<’ token
 template<class... T> void print(hstream& hs, const tuple<T...> & t) {
                                                           ^
hprint.cpp: In function ‘void print(hstream&, int)’:
hprint.cpp:193:16: error: no matching function for call to ‘print(hstream&, const char [2])’
   print(hs, "(");
                ^
hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:193:16: note:   candidate expects at least 3 arguments, 2 provided
   print(hs, "(");
                ^
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:193:16: note:   couldn't deduce template parameter ‘T’
   print(hs, "(");
                ^
hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:193:16: note:   couldn't deduce template parameter ‘T’
   print(hs, "(");
                ^
hprint.cpp:190:35: note: candidate: ‘template<class T, class U> void print(hstream&, int)’
 template<class T, class U> void print(hstream& hs, const pair<T, U> & t) { print(hs, "(", t.first, ",", t.second, ")"); }
                                   ^~~~~
hprint.cpp:190:35: note:   template argument deduction/substitution failed:
hprint.cpp:193:16: note:   couldn't deduce template parameter ‘T’
   print(hs, "(");
                ^
hprint.cpp:192:29: note: candidate: ‘template<class ... T> void print(hstream&, int)’
 template<class... T> void print(hstream& hs, const tuple<T...> & t) {
                             ^~~~~
hprint.cpp:192:29: note:   template argument deduction/substitution failed:
hprint.cpp:193:13: note:   cannot convert ‘"("’ (type ‘const char [2]’) to type ‘int’
   print(hs, "(");
             ^~~
hprint.cpp:195:21: error: ‘t’ was not declared in this scope
   for_each_in_tuple(t, p);
                     ^
hprint.cpp:196:16: error: no matching function for call to ‘print(hstream&, const char [2])’
   print(hs, ")");
                ^
hprint.cpp:115:15: note: candidate: ‘void print(hstream&)’
 inline void print(hstream& hs) {}
               ^~~~~
hprint.cpp:115:15: note:   candidate expects 1 argument, 2 provided
hprint.cpp:119:49: note: candidate: ‘template<class C, class C1, class ... CS> void print(hstream&, const C&, const C1&, const CS& ...)’
 template<class C, class C1, class... CS> void print(hstream& hs, const C& c, const C1& c1, const CS&... cs) { print(hs, c); print(hs, c1, cs...); }
                                                 ^~~~~
hprint.cpp:119:49: note:   template argument deduction/substitution failed:
hprint.cpp:196:16: note:   candidate expects at least 3 arguments, 2 provided
   print(hs, ")");
                ^
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:196:16: note:   couldn't deduce template parameter ‘T’
   print(hs, ")");
                ^
hprint.cpp:180:36: note: candidate: ‘template<class T, long unsigned int X> void print(hstream&, int)’
 template<class T, size_t X> void print(hstream& hs, const array<T, X>& a) { print(hs, "("); comma_printer c(hs); for(const T& t: a) c(t); print(hs, ")"); }
                                    ^~~~~
hprint.cpp:180:36: note:   template argument deduction/substitution failed:
hprint.cpp:196:16: note:   couldn't deduce template parameter ‘T’
   print(hs, ")");
                ^
hprint.cpp:190:35: note: candidate: ‘template<class T, class U> void print(hstream&, int)’
 template<class T, class U> void print(hstream& hs, const pair<T, U> & t) { print(hs, "(", t.first, ",", t.second, ")"); }
                                   ^~~~~
hprint.cpp:190:35: note:   template argument deduction/substitution failed:
hprint.cpp:196:16: note:   couldn't deduce template parameter ‘T’
   print(hs, ")");
                ^
hprint.cpp:192:29: note: candidate: ‘template<class ... T> void print(hstream&, int)’
 template<class... T> void print(hstream& hs, const tuple<T...> & t) {
                             ^~~~~
hprint.cpp:192:29: note:   template argument deduction/substitution failed:
hprint.cpp:196:13: note:   cannot convert ‘")"’ (type ‘const char [2]’) to type ‘int’
   print(hs, ")");
             ^~~
hprint.cpp: In member function ‘virtual void logger::write_char(char)’:
hprint.cpp:212:6: error: ‘debugflags’ was not declared in this scope
     if(debugflags & DF_TIME) { int t = SDL_GetTicks(); if(t < 0) t = 999999; t %= 1000000; string s = its(t); while(isize(s) < 6) s = "0" + s; for(char c: s) special_log(c); special_log(' '); }
      ^~~~~~~~~~
hprint.cpp:212:6: note: suggested alternative:
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
goldberg.cpp:58:14: note:   ‘hr::debugflags’
       case 0: return make_pair(1, 0);
              ^~~~~~~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:212:90: error: ‘string’ was not declared in this scope
     if(debugflags & DF_TIME) { int t = SDL_GetTicks(); if(t < 0) t = 999999; t %= 1000000; string s = its(t); while(isize(s) < 6) s = "0" + s; for(char c: s) special_log(c); special_log(' '); }
                                                                                          ^~~~~~
hprint.cpp:212:90: note: suggested alternatives:
In file included from /usr/include/c++/8/string:39,
                 from /usr/include/c++/8/stdexcept:39,
                 from /usr/include/c++/8/array:39,
                 from /usr/include/c++/8/tuple:39,
                 from /usr/include/c++/8/functional:54,
                 from sysconfig.h:400,
                 from compileunits.h:14,
                 from init.cpp:8,
                 from hyper.cpp:22:
/usr/include/c++/8/bits/stringfwd.h:74:33: note:   ‘std::__cxx11::string’
   typedef basic_string<char>    string;
                                 ^~~~~~
/usr/include/c++/8/bits/stringfwd.h:74:33: note:   ‘std::__cxx11::string’
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:212:121: error: ‘s’ was not declared in this scope
  { int t = SDL_GetTicks(); if(t < 0) t = 999999; t %= 1000000; string s = its(t); while(isize(s) < 6) s = "0" + s; for(char c: s) special_log(c); special_log(' '); }
                                                                                             ^

hprint.cpp:212:115: error: ‘isize’ was not declared in this scope
 _TIME) { int t = SDL_GetTicks(); if(t < 0) t = 999999; t %= 1000000; string s = its(t); while(isize(s) < 6) s = "0" + s; for(char c: s) special_log(c); special_log(' '); }
                                                                                             ^~~~~

hprint.cpp:212:115: note: suggested alternative:
In file included from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hyper.h:367:23: note:   ‘hr::isize’
 template<class T> int isize(const T& x) {return x.size(); }
                       ^~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
hprint.cpp:212:154: error: ‘s’ was not declared in this scope
  0) t = 999999; t %= 1000000; string s = its(t); while(isize(s) < 6) s = "0" + s; for(char c: s) special_log(c); special_log(' '); }
                                                                                             ^

[...]

hprint.cpp:171:26: note: candidate: ‘template<class T> void print(hstream&, int)’
 template<class T> void print(hstream& hs, const walker<T>& w) { print(hs, "[", w.at, "/", w.spin, "/", w.mirrored, "]"); }
                          ^~~~~
hprint.cpp:171:26: note:   template argument deduction/substitution failed:
hprint.cpp:121:75: note:   couldn't deduce template parameter ‘T’
 template<class... CS> void println(hstream& hs, const CS&... cs) { print(hs, cs...); hs.write_char('\n'); }
                                                                      ~~~~~^~~~~~~~~~~
hprint.cpp:167:15: note: candidate: ‘void print(hstream&, int)’ <near match>
 inline void print(hstream& hs, int i) { print(hs, its(i)); }
               ^~~~~
hprint.cpp:167:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:121:75: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
 template<class... CS> void println(hstream& hs, const CS&... cs) { print(hs, cs...); hs.write_char('\n'); }
                                                                      ~~~~~^~~~~~~~~~~
hprint.cpp:166:15: note: candidate: ‘void print(hstream&, const int&)’ <near match>
 inline void print(hstream& hs, const string& s) { hs.write_chars(s.c_str(), isize(s)); }
               ^~~~~
hprint.cpp:166:15: note:   conversion of argument 2 would be ill-formed:
hprint.cpp:121:75: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
 template<class... CS> void println(hstream& hs, const CS&... cs) { print(hs, cs...); hs.write_char('\n'); }
                                                                      ~~~~~^~~~~~~~~~~
In file included from hyper.h:780,
                 from compileunits.h:16,
                 from init.cpp:8,
                 from hyper.cpp:22:
dialogs.cpp:41:25: warning: ‘dialog::identity’ defined but not used [-Wunused-variable]
   const static scaler identity = {identity_f, identity_f, false};
                         ^~~~~~~~
make: *** [Makefile:150: hyper.o] Error 1
zenorogue commented 5 years ago

Should be fixed.

michael-heerdegen commented 5 years ago

Zeno Rogue notifications@github.com writes:

Should be fixed.

Thanks, compilation succeeds now with 11.1o. Will test soon!

Michael.

michael-heerdegen commented 5 years ago

The "monsters with textures" bug seems to be fixed.

Some nitpick: I tried product space now, namely standard H^2 tiling x R. My current game setting was H^3 honeycomb. When I clicked on "standard hyperrogue map" I didn't get the standard map but the one consisting solely of heptagons. I switched to different tilings and back to "standard hyperrogue map" and then I got finally the standard map.

In my first game in H^2 x R, I took an orb of safety and saved. When I restarted hyperrogue the game was gone. Then I again switched to H^2 x R and just saved settings. Now restarting the game instantly crashes it. Greetings, Michael.

michael-heerdegen commented 5 years ago

BTW, here is the offending .ini:

radarsize size=250
radarrange=4
movement help3=yes
frame limit=300
xres=1954
yres=1127
font size=35
3D depth=1
3D TC depth=0
3D TC camera=1
3D TC alpha=2
memory_saving_mode=yes
used model=19
color:background=1A1918
color:stdgrid=404040FF
mode-geometry=54
land for special modes=52
field-of-vision=140
sight-binary3=8
sight-534=5.1125
wall-quality=4
use configured keys=yes
key:27=1
key:46=24
key:102=1
key:104=1
joystick A-B1=19
joystick A-B3=18
joystick A-B6=27
joystick A-B7=24
joystick A axis 0=0
joystick A hat 0 U=20
joystick A hat 0 R=21
joystick A hat 0 D=22
joystick A hat 0 L=23
michael-heerdegen commented 5 years ago

Some conclusions from my current H^3 rectangles on horocycles game (turn based):

The rest was...cool! I managed to get an orb of yendor without the dead orbs. One needs a strategy.