1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-29 19:40:35 +00:00

Macbeath surface

This commit is contained in:
Zeno Rogue 2018-11-23 03:10:57 +01:00
parent a1225228d8
commit e697cb57cb
4 changed files with 98 additions and 14 deletions

View File

@ -698,6 +698,84 @@ struct hrmap_quotient : hrmap {
break;
}
case gMacbeath: {
connections = {
/* 000 */ 359, 498, 189, 215, 424, 381, 20,
/* 001 */ 366, 491, 217, 187, 431, 346, 27,
/* 002 */ 380, 484, 168, 208, 438, 360, 6,
/* 003 */ 345, 477, 196, 180, 445, 367, 13,
/* 004 */ 352, 470, 203, 173, 396, 388, 48,
/* 005 */ 373, 463, 175, 201, 403, 339, 55,
/* 006 */ 387, 456, 210, 194, 410, 353, 34,
/* 007 */ 338, 449, 182, 222, 417, 374, 41,
/* 008 */ 254, 459, 140, 138, 414, 248, 69,
/* 009 */ 247, 480, 112, 166, 435, 255, 62,
/* 010 */ 233, 452, 161, 117, 407, 269, 83,
/* 011 */ 268, 487, 133, 145, 442, 234, 76,
/* 012 */ 261, 473, 126, 152, 400, 241, 97,
/* 013 */ 240, 494, 154, 124, 421, 262, 90,
/* 014 */ 226, 466, 119, 159, 393, 276, 111,
/* 015 */ 275, 501, 147, 131, 428, 227, 104,
/* 016 */ 65, 479, 343, 355, 408, 73, 167,
/* 017 */ 100, 465, 371, 383, 422, 94, 160,
/* 018 */ 86, 472, 350, 348, 429, 108, 153,
/* 019 */ 79, 486, 378, 376, 415, 59, 146,
/* 020 */ 58, 458, 385, 369, 443, 80, 139,
/* 021 */ 107, 500, 357, 341, 401, 87, 132,
/* 022 */ 93, 493, 364, 390, 394, 101, 125,
/* 023 */ 72, 451, 336, 362, 436, 66, 118,
/* 024 */ 16, 483, 294, 313, 397, 31, 209,
/* 025 */ 37, 462, 322, 285, 446, 24, 202,
/* 026 */ 51, 448, 287, 334, 432, 10, 223,
/* 027 */ 2, 497, 315, 306, 411, 45, 216,
/* 028 */ 23, 476, 308, 299, 404, 38, 181,
/* 029 */ 30, 469, 280, 327, 439, 17, 174,
/* 030 */ 44, 455, 329, 292, 425, 3, 195,
/* 031 */ 9, 490, 301, 320, 418, 52, 188,
/* 032 */ 324, 467, 98, 110, 427, 332, 258,
/* 033 */ 289, 453, 70, 82, 441, 283, 265,
/* 034 */ 303, 495, 91, 89, 399, 297, 272,
/* 035 */ 310, 481, 63, 61, 413, 318, 279,
/* 036 */ 331, 460, 56, 68, 434, 325, 230,
/* 037 */ 282, 474, 84, 96, 420, 290, 237,
/* 038 */ 296, 488, 77, 75, 406, 304, 244,
/* 039 */ 317, 502, 105, 103, 392, 311, 251,
/* 040 */ 205, 475, 259, 236, 447, 178, 328,
/* 041 */ 184, 454, 231, 264, 426, 213, 335,
/* 042 */ 170, 489, 266, 243, 405, 199, 314,
/* 043 */ 219, 496, 238, 271, 412, 192, 321,
/* 044 */ 198, 482, 245, 278, 398, 171, 300,
/* 045 */ 191, 503, 273, 250, 419, 220, 307,
/* 046 */ 177, 468, 224, 257, 440, 206, 286,
/* 047 */ 212, 461, 252, 229, 433, 185, 293,
/* 048 */ 163, 450, 49, 40, 402, 150, 363,
/* 049 */ 114, 478, 21, 12, 430, 129, 356,
/* 050 */ 128, 471, 28, 47, 409, 115, 349,
/* 051 */ 149, 499, 0, 19, 437, 164, 342,
/* 052 */ 156, 492, 7, 26, 444, 143, 391,
/* 053 */ 121, 464, 35, 54, 416, 136, 384,
/* 054 */ 135, 485, 14, 5, 423, 122, 377,
/* 055 */ 142, 457, 42, 33, 395, 157, 370,
/* 056 */ 277, 102, 158, 389, 32, 172, 312,
/* 057 */ 242, 88, 151, 340, 39, 200, 298,
/* 058 */ 270, 74, 116, 354, 46, 193, 305,
/* 059 */ 249, 60, 137, 375, 53, 221, 319,
/* 060 */ 263, 95, 123, 382, 4, 214, 291,
/* 061 */ 228, 109, 130, 347, 11, 186, 333,
/* 062 */ 256, 67, 165, 361, 18, 207, 326,
/* 063 */ 235, 81, 144, 368, 25, 179, 284,
/* 064 */ 183, 50, 337, 162, 71, 232, 288,
/* 065 */ 211, 43, 386, 141, 57, 253, 330,
/* 066 */ 176, 36, 372, 120, 99, 225, 323,
/* 067 */ 204, 29, 351, 127, 85, 260, 281,
/* 068 */ 197, 22, 344, 113, 64, 246, 309,
/* 069 */ 169, 15, 379, 134, 78, 267, 295,
/* 070 */ 218, 8, 365, 155, 92, 239, 302,
/* 071 */ 190, 1, 358, 148, 106, 274, 316,
};
break;
}
default: break;
}
@ -735,7 +813,7 @@ struct hrmap_quotient : hrmap {
}
for(int i=0; i<TOT; i++) {
generateAlts(allh[i], geometry == gBolza2 ? 3 : S3-3, false);
generateAlts(allh[i], geometry == gMacbeath ? 5 : geometry == gBolza2 ? 3 : S3-3, false);
allh[i]->emeraldval = allh[i]->alt->emeraldval;
allh[i]->zebraval = allh[i]->alt->zebraval;
allh[i]->fiftyval = allh[i]->alt->fiftyval;

View File

@ -1681,7 +1681,8 @@ geometryinfo ginf[gGUARD] = {
{"Bolza Surface x2", "Bolza2", 8, 3, qSMALL | qDOCKS, gcHyperbolic, 0x18400, {{6, 4}}, eVariation::bitruncated},
{"minimal quotient", "minimal", 7, 3, qSMALL | qNONOR, gcHyperbolic, 0x18600, {{7, 5}}, eVariation::bitruncated},
{"binary tiling", "binary", 7, 3, 0, gcHyperbolic, 0, {{7, 5}}, eVariation::pure},
{"Archimedean", "A", 7, 3, 0, gcHyperbolic, 0, {{7, 5}}, eVariation::pure}
{"Archimedean", "A", 7, 3, 0, gcHyperbolic, 0, {{7, 5}}, eVariation::pure},
{"Macbeath surface", "Macbeath", 7, 3, qSMALL, gcHyperbolic, 0x18800, {{7, 5}}, eVariation::bitruncated},
};
#define X3(x) x, x, x

View File

@ -200,7 +200,7 @@ enum eLand { laNone, laBarrier, laCrossroads, laDesert, laIce, laCaves, laJungle
enum eGeometry {
gNormal, gEuclid, gSphere, gElliptic, gZebraQuotient, gFieldQuotient, gTorus, gOctagon, g45, g46, g47, gSmallSphere, gTinySphere, gEuclidSquare, gSmallElliptic,
gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean,
gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean, gMacbeath,
gGUARD};
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };

View File

@ -282,12 +282,22 @@ void showEuclideanMenu() {
dialog::addSelItem(XLAT("land"), XLAT1(linf[specialland].name), '5');
dialog::addBreak(50);
char letter = 'a';
for(int i=0; i<gGUARD; i++) {
bool on = geometry == i;
dynamicval<eGeometry> cg(geometry, eGeometry(i));
if(!!(quotient || elliptic || torus) != showquotients) continue;
dialog::addBoolItem(XLAT(ginf[i].name), on, 'a'+i);
dialog::addBoolItem(XLAT(ginf[i].name), on, letter++);
dialog::lastItem().value += validclasses[land_validity(specialland).quality_level];
dialog::add_action([i] {
eGeometry targetgeometry = eGeometry(i);
if(targetgeometry == gArchimedean)
pushScreen(arcm::show);
else {
set_geometry(targetgeometry);
start_game();
}
});
}
dialog::addBreak(50);
@ -330,6 +340,10 @@ void showEuclideanMenu() {
worldsize = 24 + 28 * gar;
break;
case gMacbeath:
worldsize = (12 + 14 * gar) * 6;
break;
case gBolza:
worldsize = 3 * (2*tv + ts * gar) / tv;
break;
@ -431,16 +445,7 @@ void showEuclideanMenu() {
keyhandler = [] (int sym, int uni) {
dialog::handleNavigation(sym, uni);
if(uni >= 'a' && uni < 'a'+gGUARD) {
eGeometry targetgeometry = eGeometry(uni - 'a');
if(targetgeometry == gArchimedean)
pushScreen(arcm::show);
else {
set_geometry(targetgeometry);
start_game();
}
}
else if(uni == 'z')
if(uni == 'z')
showquotients = !showquotients;
else if(uni == 'v') {
if(euclid6) ;