// Hyperbolic Rogue -- items, monsters, walls, lands, descriptions, etc. // Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details /** \file classes.h * \brief header file for content */ namespace hr { typedef unsigned color_t; typedef unsigned long long flagtype; #define Flag(i) (flagtype(1ull< distlimit; // bitrunc, non-bitrunc eVariation default_variation; }; static const flagtype qBOUNDED = 1; static const flagtype qANYQ = 2; static const flagtype qNONORIENTABLE = 4; static const flagtype qSMALL = 8; static const flagtype qFIELD = 16; static const flagtype qDOCKS = 32; static const flagtype qZEBRA = 64; static const flagtype qELLIPTIC = 128; static const flagtype qBINARY = 256; static const flagtype qPENROSE = 512; static const flagtype qREGULAR = 1024; /* not set! */ static const flagtype qARCHI = 2048; static const flagtype qHYBRID = 4096; static const flagtype qCRYSTAL = 8192; static const flagtype qEXPERIMENTAL = 32768; // note: dnext assumes that x&7 equals 7 static const int SEE_ALL = 50; static const int FORBIDDEN = -1; extern eGeometry geometry; extern eVariation variation; extern std::vector ginf; extern monstertype minf[motypes]; extern itemtype iinf[ittypes]; extern const landtype linf[landtypes]; extern color_t floorcolors[landtypes]; extern walltype winf[walltypes]; enum cpatterntype { cpFootball, cpThree, cpChess, cpSingle, cpSingleSym, cpOddEven, cpLarge, cpZebra, cpUnknown }; struct landtacinfo { eLand l; int tries, multiplier; }; enum eModel { mdDisk, mdHalfplane, mdBand, mdPolygonal, mdFormula, // 5..8. mdEquidistant, mdEquiarea, mdBall, mdHyperboloid, // 9..13 mdHemisphere, mdBandEquidistant, mdBandEquiarea, mdSinusoidal, mdTwoPoint, // 14..16 mdFisheye, mdJoukowsky, mdJoukowskyInverted, // 17..19 mdRotatedHyperboles, mdSpiral, mdPerspective, // 20..24 mdEquivolume, mdCentralInversion, mdSimulatedPerspective, mdTwoHybrid, mdGeodesic, // 25 mdMollweide, mdCentralCyl, mdCollignon, // 26.. mdGUARD, mdUnchanged, mdHyperboloidFlat, mdPolynomial, mdRug, mdFlatten }; typedef unsigned long long flagtype; namespace mf { static const flagtype azimuthal = 1; static const flagtype cylindrical = 2; static const flagtype equiarea = 4; static const flagtype equidistant = 8; static const flagtype conformal = 16; static const flagtype euc_boring = 32; static const flagtype space = 64; static const flagtype hyper_only = 128; static const flagtype hyper_or_torus = 256; static const flagtype pseudocylindrical = 512; /* includes cylindrical */ static const flagtype equivolume = 1024; static const flagtype twopoint = 2048; static const flagtype uses_bandshift = 4096; static const flagtype band = (cylindrical | pseudocylindrical | uses_bandshift); static const flagtype pseudoband = (pseudocylindrical | uses_bandshift); }; struct modelinfo { const char *name_hyperbolic; const char *name_euclidean; const char *name_spherical; flagtype flags; int is_azimuthal; int is_band; int is_equiarea; int is_equidistant; int is_conformal; const char* name; }; extern const modelinfo mdinf[int(mdPolynomial)+1]; }