mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-07-04 18:52:51 +00:00
extra guards
This commit is contained in:
parent
76462aa1e7
commit
d64c5e338c
@ -89,8 +89,6 @@ struct archimedean_tiling {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CAP_ARCM
|
|
||||||
|
|
||||||
#if HDR
|
#if HDR
|
||||||
static const int sfPH = 1;
|
static const int sfPH = 1;
|
||||||
static const int sfLINE = 2;
|
static const int sfLINE = 2;
|
||||||
@ -99,6 +97,8 @@ static const int sfTHREE = 8;
|
|||||||
static const int sfSEMILINE = 16;
|
static const int sfSEMILINE = 16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
|
|
||||||
EX archimedean_tiling current;
|
EX archimedean_tiling current;
|
||||||
EX archimedean_tiling fake_current;
|
EX archimedean_tiling fake_current;
|
||||||
|
|
||||||
@ -1450,10 +1450,10 @@ EX int valence() {
|
|||||||
return total / isize(current.faces);
|
return total / isize(current.faces);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EX map<gp::loc, cdata>& get_cdata() { return ((arcm::hrmap_archimedean*) (currentmap))->eucdata; }
|
EX map<gp::loc, cdata>& get_cdata() { return ((arcm::hrmap_archimedean*) (currentmap))->eucdata; }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
EX }
|
EX }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,14 @@ int utfsize(char c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX int get_sightrange() { return getDistLimit() + sightrange_bonus; }
|
EX int get_sightrange() { return getDistLimit() + sightrange_bonus; }
|
||||||
EX int get_sightrange_ambush() { return max(get_sightrange(), ambush::distance); }
|
|
||||||
|
EX int get_sightrange_ambush() {
|
||||||
|
#if CAP_COMPLEX2
|
||||||
|
return max(get_sightrange(), ambush::distance);
|
||||||
|
#else
|
||||||
|
return get_sightrange();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool display_data::in_anaglyph() { return vid.stereo_mode == sAnaglyph; }
|
bool display_data::in_anaglyph() { return vid.stereo_mode == sAnaglyph; }
|
||||||
bool display_data::stereo_active() { return vid.stereo_mode != sOFF; }
|
bool display_data::stereo_active() { return vid.stereo_mode != sOFF; }
|
||||||
@ -603,7 +610,9 @@ EX void resetGL() {
|
|||||||
matched_programs.clear();
|
matched_programs.clear();
|
||||||
glhr::current_glprogram = nullptr;
|
glhr::current_glprogram = nullptr;
|
||||||
ray::reset_raycaster();
|
ray::reset_raycaster();
|
||||||
|
#if CAP_RUG
|
||||||
if(rug::glbuf) rug::close_glbuf();
|
if(rug::glbuf) rug::close_glbuf();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -1161,7 +1170,9 @@ EX void initgraph() {
|
|||||||
#if CAP_CONFIG
|
#if CAP_CONFIG
|
||||||
loadConfig();
|
loadConfig();
|
||||||
#endif
|
#endif
|
||||||
|
#if CAP_ARCM
|
||||||
arcm::current.parse();
|
arcm::current.parse();
|
||||||
|
#endif
|
||||||
if(hybri) geometry = hybrid::underlying;
|
if(hybri) geometry = hybrid::underlying;
|
||||||
|
|
||||||
#if CAP_COMMANDLINE
|
#if CAP_COMMANDLINE
|
||||||
|
@ -21,6 +21,7 @@ EX int newRoundTableRadius() {
|
|||||||
return 28 + 2 * items[itHolyGrail];
|
return 28 + 2 * items[itHolyGrail];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
EX int getAnthraxData(cell *c, bool b) {
|
EX int getAnthraxData(cell *c, bool b) {
|
||||||
int d = celldistAlt(c);
|
int d = celldistAlt(c);
|
||||||
int rad = 28 + 3 * camelot::anthraxBonus;
|
int rad = 28 + 3 * camelot::anthraxBonus;
|
||||||
@ -36,10 +37,13 @@ EX int getAnthraxData(cell *c, bool b) {
|
|||||||
if(b) return rad;
|
if(b) return rad;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
EX int roundTableRadius(cell *c) {
|
EX int roundTableRadius(cell *c) {
|
||||||
if(eubinary) return 28;
|
if(eubinary) return 28;
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(tactic::on) return getAnthraxData(c, true);
|
if(tactic::on) return getAnthraxData(c, true);
|
||||||
|
#endif
|
||||||
if(!c->master->alt) return 28;
|
if(!c->master->alt) return 28;
|
||||||
return c->master->alt->alt->emeraldval & GRAIL_RADIUS_MASK;
|
return c->master->alt->alt->emeraldval & GRAIL_RADIUS_MASK;
|
||||||
}
|
}
|
||||||
@ -55,7 +59,9 @@ EX int celldistAltRelative(cell *c) {
|
|||||||
if(sphere || quotient) {
|
if(sphere || quotient) {
|
||||||
return celldist(c) - 3;
|
return celldist(c) - 3;
|
||||||
}
|
}
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(tactic::on) return getAnthraxData(c, false);
|
if(tactic::on) return getAnthraxData(c, false);
|
||||||
|
#endif
|
||||||
return celldistAlt(c) - roundTableRadius(c);
|
return celldistAlt(c) - roundTableRadius(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1805,12 +1811,14 @@ EX void moreBigStuff(cell *c) {
|
|||||||
if(c->master->emeraldval % 2)
|
if(c->master->emeraldval % 2)
|
||||||
c->wall = waColumn;
|
c->wall = waColumn;
|
||||||
}
|
}
|
||||||
|
#if CAP_BT
|
||||||
else if(geometry == gHoroTris || geometry == gHoroRec) {
|
else if(geometry == gHoroTris || geometry == gHoroRec) {
|
||||||
if(c->c.spin(bt::updir()) != 0) c->wall = waColumn;
|
if(c->c.spin(bt::updir()) != 0) c->wall = waColumn;
|
||||||
}
|
}
|
||||||
else if(geometry == gKiteDart3) {
|
else if(geometry == gKiteDart3) {
|
||||||
if(kite::getshape(c->master) == kite::pKite) c->wall = waColumn;
|
if(kite::getshape(c->master) == kite::pKite) c->wall = waColumn;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else if(in_s2xe()) {
|
else if(in_s2xe()) {
|
||||||
auto d = hybrid::get_where(c);
|
auto d = hybrid::get_where(c);
|
||||||
if(!PIU(pseudohept(d.first))) c->wall = waColumn;
|
if(!PIU(pseudohept(d.first))) c->wall = waColumn;
|
||||||
|
@ -18,6 +18,10 @@ EX namespace bt {
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !CAP_BT
|
||||||
|
EX int updir() { return 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CAP_BT
|
#if CAP_BT
|
||||||
#if HDR
|
#if HDR
|
||||||
@ -1031,7 +1035,6 @@ EX int celldistance3(heptagon *c1, heptagon *c2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX int celldistance3(cell *c1, cell *c2) { return celldistance3(c1->master, c2->master); }
|
EX int celldistance3(cell *c1, cell *c2) { return celldistance3(c1->master, c2->master); }
|
||||||
#endif
|
|
||||||
|
|
||||||
EX hyperpoint get_horopoint(ld y, ld x) {
|
EX hyperpoint get_horopoint(ld y, ld x) {
|
||||||
return xpush(-y) * bt::parabolic(x) * C0;
|
return xpush(-y) * bt::parabolic(x) * C0;
|
||||||
@ -1091,6 +1094,7 @@ EX hyperpoint get_corner_horo_coordinates(cell *c, int i) {
|
|||||||
auto hooksw = addHook(hooks_swapdim, 100, [] {
|
auto hooksw = addHook(hooks_swapdim, 100, [] {
|
||||||
if(bt::in()) build_tmatrix();
|
if(bt::in()) build_tmatrix();
|
||||||
});
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
22
cell.cpp
22
cell.cpp
@ -179,8 +179,11 @@ EX heptagon* hyperbolic_origin() {
|
|||||||
h.cdata = NULL;
|
h.cdata = NULL;
|
||||||
h.alt = NULL;
|
h.alt = NULL;
|
||||||
h.distance = 0;
|
h.distance = 0;
|
||||||
|
#if CAP_IRR
|
||||||
if(IRREGULAR) irr::link_start(origin);
|
if(IRREGULAR) irr::link_start(origin);
|
||||||
else h.c7 = newCell(odegree, origin);
|
else
|
||||||
|
#endif
|
||||||
|
h.c7 = newCell(odegree, origin);
|
||||||
return origin;
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,7 +557,9 @@ EX int celldistAlt(cell *c) {
|
|||||||
|
|
||||||
/** direction upwards in the tree */
|
/** direction upwards in the tree */
|
||||||
EX int updir(heptagon *h) {
|
EX int updir(heptagon *h) {
|
||||||
|
#if CAP_BT
|
||||||
if(bt::in()) return bt::updir();
|
if(bt::in()) return bt::updir();
|
||||||
|
#endif
|
||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
if(WDIM == 3 && reg3::in_rule()) {
|
if(WDIM == 3 && reg3::in_rule()) {
|
||||||
for(int i=0; i<S7; i++) if(h->move(i) && h->move(i)->distance < h->distance)
|
for(int i=0; i<S7; i++) if(h->move(i) && h->move(i)->distance < h->distance)
|
||||||
@ -815,10 +820,12 @@ cdata *getHeptagonCdata(heptagon *h) {
|
|||||||
if(sphere || quotient) h = currentmap->gamestart()->master;
|
if(sphere || quotient) h = currentmap->gamestart()->master;
|
||||||
|
|
||||||
bool starting = h->s == hsOrigin;
|
bool starting = h->s == hsOrigin;
|
||||||
|
#if CAP_BT
|
||||||
if(bt::in()) {
|
if(bt::in()) {
|
||||||
if(bt::mapside(h) == 0) starting = true;
|
if(bt::mapside(h) == 0) starting = true;
|
||||||
for(int i=0; i<h->type; i++) if(bt::mapside(h->cmove(i)) == 0) starting = true;
|
for(int i=0; i<h->type; i++) if(bt::mapside(h->cmove(i)) == 0) starting = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(starting) {
|
if(starting) {
|
||||||
h->cdata = new cdata(orig_cdata);
|
h->cdata = new cdata(orig_cdata);
|
||||||
@ -866,7 +873,12 @@ cdata *getHeptagonCdata(heptagon *h) {
|
|||||||
cdata *getEuclidCdata(gp::loc h) {
|
cdata *getEuclidCdata(gp::loc h) {
|
||||||
|
|
||||||
int x = h.first, y = h.second;
|
int x = h.first, y = h.second;
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
auto& data = arcm::in() ? arcm::get_cdata() : euc::get_cdata();
|
auto& data = arcm::in() ? arcm::get_cdata() : euc::get_cdata();
|
||||||
|
#else
|
||||||
|
auto& data = euc::get_cdata();
|
||||||
|
#endif
|
||||||
|
|
||||||
// hrmap_euclidean* euc = dynamic_cast<hrmap_euclidean*> (currentmap);
|
// hrmap_euclidean* euc = dynamic_cast<hrmap_euclidean*> (currentmap);
|
||||||
if(data.count(h)) return &(data[h]);
|
if(data.count(h)) return &(data[h]);
|
||||||
@ -918,6 +930,7 @@ int ld_to_int(ld x) {
|
|||||||
return int(x + 1000000.5) - 1000000;
|
return int(x + 1000000.5) - 1000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
EX gp::loc pseudocoords(cell *c) {
|
EX gp::loc pseudocoords(cell *c) {
|
||||||
transmatrix T = arcm::archimedean_gmatrix[c->master].second;
|
transmatrix T = arcm::archimedean_gmatrix[c->master].second;
|
||||||
return {ld_to_int(T[0][LDIM]), ld_to_int((spin(60*degree) * T)[0][LDIM])};
|
return {ld_to_int(T[0][LDIM]), ld_to_int((spin(60*degree) * T)[0][LDIM])};
|
||||||
@ -935,6 +948,7 @@ EX cdata *arcmCdata(cell *c) {
|
|||||||
dynamicval<hrmap*> cm(currentmap, arcm::current_altmap);
|
dynamicval<hrmap*> cm(currentmap, arcm::current_altmap);
|
||||||
return getHeptagonCdata(h2);
|
return getHeptagonCdata(h2);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
EX int getCdata(cell *c, int j) {
|
EX int getCdata(cell *c, int j) {
|
||||||
if(fake::in()) return FPIU(getCdata(c, j));
|
if(fake::in()) return FPIU(getCdata(c, j));
|
||||||
@ -944,10 +958,12 @@ EX int getCdata(cell *c, int j) {
|
|||||||
return UIU(getCdata(c1, j));
|
return UIU(getCdata(c1, j));
|
||||||
}
|
}
|
||||||
else if(euc::in()) return getEuclidCdata(euc2_coordinates(c))->val[j];
|
else if(euc::in()) return getEuclidCdata(euc2_coordinates(c))->val[j];
|
||||||
|
#if CAP_ARCM
|
||||||
else if(arcm::in() && euclid)
|
else if(arcm::in() && euclid)
|
||||||
return getEuclidCdata(pseudocoords(c))->val[j];
|
return getEuclidCdata(pseudocoords(c))->val[j];
|
||||||
else if(arcm::in() && hyperbolic)
|
else if(arcm::in() && hyperbolic)
|
||||||
return arcmCdata(c)->val[j]*3;
|
return arcmCdata(c)->val[j]*3;
|
||||||
|
#endif
|
||||||
else if(!geometry_supports_cdata()) return 0;
|
else if(!geometry_supports_cdata()) return 0;
|
||||||
else if(ctof(c)) return getHeptagonCdata(c->master)->val[j]*3;
|
else if(ctof(c)) return getHeptagonCdata(c->master)->val[j]*3;
|
||||||
else {
|
else {
|
||||||
@ -967,10 +983,12 @@ EX int getBits(cell *c) {
|
|||||||
return UIU(getBits(c1));
|
return UIU(getBits(c1));
|
||||||
}
|
}
|
||||||
else if(euc::in()) return getEuclidCdata(euc2_coordinates(c))->bits;
|
else if(euc::in()) return getEuclidCdata(euc2_coordinates(c))->bits;
|
||||||
else if(arcm::in() && euclid)
|
#if CAP_ARCM
|
||||||
|
else if(arcm::in() && euclid)
|
||||||
return getEuclidCdata(pseudocoords(c))->bits;
|
return getEuclidCdata(pseudocoords(c))->bits;
|
||||||
else if(arcm::in() && (hyperbolic || sl2))
|
else if(arcm::in() && (hyperbolic || sl2))
|
||||||
return arcmCdata(c)->bits;
|
return arcmCdata(c)->bits;
|
||||||
|
#endif
|
||||||
else if(!geometry_supports_cdata()) return 0;
|
else if(!geometry_supports_cdata()) return 0;
|
||||||
else if(c == c->master->c7) return getHeptagonCdata(c->master)->bits;
|
else if(c == c->master->c7) return getHeptagonCdata(c->master)->bits;
|
||||||
else {
|
else {
|
||||||
|
@ -534,11 +534,13 @@ void celldrawer::setcolors() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case waMineUnknown: case waMineMine:
|
case waMineUnknown: case waMineMine:
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(mine::marked_safe(c))
|
if(mine::marked_safe(c))
|
||||||
fcol = wcol = gradient(wcol, 0x40FF40, 0, 0.2, 1);
|
fcol = wcol = gradient(wcol, 0x40FF40, 0, 0.2, 1);
|
||||||
else if(mine::marked_mine(c))
|
else if(mine::marked_mine(c))
|
||||||
fcol = wcol = gradient(wcol, 0xFF4040, -1, sintick(100), 1);
|
fcol = wcol = gradient(wcol, 0xFF4040, -1, sintick(100), 1);
|
||||||
// fallthrough
|
// fallthrough
|
||||||
|
#endif
|
||||||
|
|
||||||
case waMineOpen:
|
case waMineOpen:
|
||||||
if(wmblack || wmascii) {
|
if(wmblack || wmascii) {
|
||||||
@ -1352,7 +1354,9 @@ void celldrawer::draw_features() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case waTerraWarrior:
|
case waTerraWarrior:
|
||||||
|
#if CAP_COMPLEX2
|
||||||
drawTerraWarrior(V, terracotta::randterra ? (c->landparam & 7) : (5 - (c->landparam & 7)), 7, 0);
|
drawTerraWarrior(V, terracotta::randterra ? (c->landparam & 7) : (5 - (c->landparam & 7)), 7, 0);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case waBoat: case waStrandedBoat:
|
case waBoat: case waStrandedBoat:
|
||||||
|
@ -2800,12 +2800,18 @@ EX namespace sword {
|
|||||||
EX void determine_sword_angles() {
|
EX void determine_sword_angles() {
|
||||||
sword_angles = 2;
|
sword_angles = 2;
|
||||||
if(SWORDDIM == 3) sword_angles = 1;
|
if(SWORDDIM == 3) sword_angles = 1;
|
||||||
|
#if CAP_IRR
|
||||||
else if(IRREGULAR) sword_angles = 840;
|
else if(IRREGULAR) sword_angles = 840;
|
||||||
|
#endif
|
||||||
|
#if CAP_BT
|
||||||
else if(bt::in()) sword_angles = 42;
|
else if(bt::in()) sword_angles = 42;
|
||||||
|
#endif
|
||||||
|
#if CAP_ARCM
|
||||||
else if(arcm::in()) {
|
else if(arcm::in()) {
|
||||||
if(!PURE) possible_divisor((BITRUNCATED ? 2 : 1) * isize(arcm::current.faces));
|
if(!PURE) possible_divisor((BITRUNCATED ? 2 : 1) * isize(arcm::current.faces));
|
||||||
if(!DUAL) for(int f: arcm::current.faces) possible_divisor(f);
|
if(!DUAL) for(int f: arcm::current.faces) possible_divisor(f);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
possible_divisor(S7);
|
possible_divisor(S7);
|
||||||
if(BITRUNCATED) possible_divisor(S3);
|
if(BITRUNCATED) possible_divisor(S3);
|
||||||
|
@ -577,7 +577,9 @@ EX void initConfig() {
|
|||||||
addsaverenum(pconf.basic_model, "basic model");
|
addsaverenum(pconf.basic_model, "basic model");
|
||||||
addsaver(pconf.use_atan, "use_atan");
|
addsaver(pconf.use_atan, "use_atan");
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
addsaver(arcm::current.symbol, "arcm-symbol", "4^5");
|
addsaver(arcm::current.symbol, "arcm-symbol", "4^5");
|
||||||
|
#endif
|
||||||
addsaverenum(hybrid::underlying, "product-underlying");
|
addsaverenum(hybrid::underlying, "product-underlying");
|
||||||
|
|
||||||
for(int i=0; i<isize(ginf); i++) {
|
for(int i=0; i<isize(ginf); i++) {
|
||||||
|
@ -480,11 +480,13 @@ EX void handleKeyNormal(int sym, int uni) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(DEFAULTNOR(sym)) {
|
if(DEFAULTNOR(sym)) {
|
||||||
gmodekeys(sym, uni);
|
gmodekeys(sym, uni);
|
||||||
if(uni == 'm' && canmove && (centerover == cwt.at ? mouseover : centerover))
|
if(uni == 'm' && canmove && (centerover == cwt.at ? mouseover : centerover))
|
||||||
mine::performMarkCommand(mouseover);
|
mine::performMarkCommand(mouseover);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(DEFAULTCONTROL) {
|
if(DEFAULTCONTROL) {
|
||||||
if(sym == '.' || sym == 's') movepcto(-1, 1);
|
if(sym == '.' || sym == 's') movepcto(-1, 1);
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
namespace hr {
|
namespace hr {
|
||||||
|
|
||||||
EX namespace crystal {
|
EX namespace crystal {
|
||||||
#if CAP_CRYSTAL
|
|
||||||
|
|
||||||
#if HDR
|
#if HDR
|
||||||
static const int MAXDIM = 7;
|
static const int MAXDIM = 7;
|
||||||
@ -34,6 +33,8 @@ struct ldcoord : public array<ld, MAXDIM> {
|
|||||||
static const ldcoord ldc0 = {};
|
static const ldcoord ldc0 = {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CAP_CRYSTAL
|
||||||
|
|
||||||
/** Crystal can be bitruncated either by changing variation to bitruncated.
|
/** Crystal can be bitruncated either by changing variation to bitruncated.
|
||||||
* In case of the 4D Crystal, the standard HyperRogue bitruncation becomes
|
* In case of the 4D Crystal, the standard HyperRogue bitruncation becomes
|
||||||
* confused by having both the original and new vertices of degree 8.
|
* confused by having both the original and new vertices of degree 8.
|
||||||
|
@ -721,12 +721,14 @@ int read_cheat_args() {
|
|||||||
inv::compute();
|
inv::compute();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if CAP_COMPLEX2
|
||||||
else if(argis("-ambush")) {
|
else if(argis("-ambush")) {
|
||||||
// make all ambushes use the given number of dogs
|
// make all ambushes use the given number of dogs
|
||||||
// example: hyper -W Hunt -IP Shield 1 -ambush 60
|
// example: hyper -W Hunt -IP Shield 1 -ambush 60
|
||||||
PHASE(3) cheat();
|
PHASE(3) cheat();
|
||||||
shift(); ambush::fixed_size = argi();
|
shift(); ambush::fixed_size = argi();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else if(argis("-testdistances")) {
|
else if(argis("-testdistances")) {
|
||||||
PHASE(3); shift(); test_distances(argi());
|
PHASE(3); shift(); test_distances(argi());
|
||||||
}
|
}
|
||||||
|
@ -93,9 +93,11 @@ void launch(int seed, int elimit, int hlimit) {
|
|||||||
cl1 = cl.lst;
|
cl1 = cl.lst;
|
||||||
for(cell *c: cl.lst) {
|
for(cell *c: cl.lst) {
|
||||||
c->wall = waNone, c->land = laCanvas;
|
c->wall = waNone, c->land = laCanvas;
|
||||||
|
#if CAP_ARCM
|
||||||
int id = arcm::current.tilegroup[arcm::id_of(c->master)];
|
int id = arcm::current.tilegroup[arcm::id_of(c->master)];
|
||||||
color_t yellows[5] = { 0x80C080, 0x80C0C0, 0x8080C0, 0xC080C0, 0xC0C080 };
|
color_t yellows[5] = { 0x80C080, 0x80C0C0, 0x8080C0, 0xC080C0, 0xC0C080 };
|
||||||
c->landparam = yellows[id];
|
c->landparam = yellows[id];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
println(hlog, "c1 size = ", isize(cl.lst));
|
println(hlog, "c1 size = ", isize(cl.lst));
|
||||||
}
|
}
|
||||||
|
@ -150,11 +150,13 @@ EX namespace euc {
|
|||||||
tmatrix[i] = eumove(shifttable[i]);
|
tmatrix[i] = eumove(shifttable[i]);
|
||||||
camelot_center = NULL;
|
camelot_center = NULL;
|
||||||
build_torus3(geometry);
|
build_torus3(geometry);
|
||||||
|
#if CAP_IRR
|
||||||
if(!valid_irr_torus()) {
|
if(!valid_irr_torus()) {
|
||||||
addMessage(XLAT("Error: period mismatch"));
|
addMessage(XLAT("Error: period mismatch"));
|
||||||
eu_input = irr::base_config;
|
eu_input = irr::base_config;
|
||||||
build_torus3(geometry);
|
build_torus3(geometry);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
heptagon *getOrigin() override {
|
heptagon *getOrigin() override {
|
||||||
@ -168,6 +170,7 @@ EX namespace euc {
|
|||||||
auto h = tailored_alloc<heptagon> (S7);
|
auto h = tailored_alloc<heptagon> (S7);
|
||||||
if(!IRREGULAR)
|
if(!IRREGULAR)
|
||||||
h->c7 = newCell(S7, h);
|
h->c7 = newCell(S7, h);
|
||||||
|
#if CAP_IRR
|
||||||
else {
|
else {
|
||||||
coord m0 = shifttable[0];
|
coord m0 = shifttable[0];
|
||||||
transmatrix dummy;
|
transmatrix dummy;
|
||||||
@ -180,6 +183,7 @@ EX namespace euc {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
h->distance = 0;
|
h->distance = 0;
|
||||||
h->cdata = NULL;
|
h->cdata = NULL;
|
||||||
h->alt = NULL;
|
h->alt = NULL;
|
||||||
@ -534,6 +538,7 @@ EX namespace euc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX bool valid_irr_torus() {
|
EX bool valid_irr_torus() {
|
||||||
|
#if CAP_IRR
|
||||||
if(!IRREGULAR) return true;
|
if(!IRREGULAR) return true;
|
||||||
if(eu.twisted) return false;
|
if(eu.twisted) return false;
|
||||||
for(int i=0; i<2; i++) {
|
for(int i=0; i<2; i++) {
|
||||||
@ -547,6 +552,7 @@ EX namespace euc {
|
|||||||
eu.canonicalize(x0, dm0, dummy, mirr);
|
eu.canonicalize(x0, dm0, dummy, mirr);
|
||||||
if(x0 != euzero || dm0 != eutester) return false;
|
if(x0 != euzero || dm0 != eutester) return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
fake.cpp
10
fake.cpp
@ -81,7 +81,9 @@ EX namespace fake {
|
|||||||
transmatrix S1, S2;
|
transmatrix S1, S2;
|
||||||
ld dist;
|
ld dist;
|
||||||
in_underlying([c, d, &S1, &S2, &dist] {
|
in_underlying([c, d, &S1, &S2, &dist] {
|
||||||
|
#if CAP_ARCM
|
||||||
dynamicval<bool> u(arcm::use_gmatrix, false);
|
dynamicval<bool> u(arcm::use_gmatrix, false);
|
||||||
|
#endif
|
||||||
transmatrix T = currentmap->adj(c, d);
|
transmatrix T = currentmap->adj(c, d);
|
||||||
S1 = rspintox(tC0(T));
|
S1 = rspintox(tC0(T));
|
||||||
transmatrix T1 = spintox(tC0(T)) * T;
|
transmatrix T1 = spintox(tC0(T)) * T;
|
||||||
@ -89,12 +91,16 @@ EX namespace fake {
|
|||||||
S2 = xpush(-dist) * T1;
|
S2 = xpush(-dist) * T1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in()) {
|
if(arcm::in()) {
|
||||||
int t = arcm::id_of(c->master);
|
int t = arcm::id_of(c->master);
|
||||||
int t2 = arcm::id_of(c->move(d)->master);
|
int t2 = arcm::id_of(c->move(d)->master);
|
||||||
auto& cof = arcm::current_or_fake();
|
auto& cof = arcm::current_or_fake();
|
||||||
cgi.adjcheck = cof.inradius[t/2] + cof.inradius[t2/2];
|
cgi.adjcheck = cof.inradius[t/2] + cof.inradius[t2/2];
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if(0) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
else if(WDIM == 2) {
|
else if(WDIM == 2) {
|
||||||
|
|
||||||
@ -400,7 +406,9 @@ EX ld around;
|
|||||||
|
|
||||||
/** @brief the value of 'around' which makes the tiling Euclidean */
|
/** @brief the value of 'around' which makes the tiling Euclidean */
|
||||||
EX ld compute_euclidean() {
|
EX ld compute_euclidean() {
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in()) return arcm::current.N * 2 / arcm::current.euclidean_angle_sum;
|
if(arcm::in()) return arcm::current.N * 2 / arcm::current.euclidean_angle_sum;
|
||||||
|
#endif
|
||||||
if(WDIM == 2) return 4 / (S7-2.) + 2;
|
if(WDIM == 2) return 4 / (S7-2.) + 2;
|
||||||
|
|
||||||
if(underlying == gRhombic3) return 3;
|
if(underlying == gRhombic3) return 3;
|
||||||
@ -411,8 +419,10 @@ EX ld compute_euclidean() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX ld around_orig() {
|
EX ld around_orig() {
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in())
|
if(arcm::in())
|
||||||
return arcm::current.N;
|
return arcm::current.N;
|
||||||
|
#endif
|
||||||
if(WDIM == 2)
|
if(WDIM == 2)
|
||||||
return S3;
|
return S3;
|
||||||
if(underlying == gRhombic3)
|
if(underlying == gRhombic3)
|
||||||
|
@ -886,24 +886,30 @@ EX int shvid(cell *c) {
|
|||||||
}
|
}
|
||||||
else if(GOLDBERG_INV)
|
else if(GOLDBERG_INV)
|
||||||
return gp::get_plainshape_id(c);
|
return gp::get_plainshape_id(c);
|
||||||
|
#if CAP_IRR
|
||||||
else if(IRREGULAR)
|
else if(IRREGULAR)
|
||||||
return irr::cellindex[c];
|
return irr::cellindex[c];
|
||||||
|
#endif
|
||||||
|
#if CAP_ARCM
|
||||||
else if(arcm::in()) {
|
else if(arcm::in()) {
|
||||||
auto& ac = arcm::current;
|
auto& ac = arcm::current;
|
||||||
int id = arcm::id_of(c->master);
|
int id = arcm::id_of(c->master);
|
||||||
if(ac.regular && id>=2 && id < 2*ac.N) id &= 1;
|
if(ac.regular && id>=2 && id < 2*ac.N) id &= 1;
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else if(arb::in())
|
else if(arb::in())
|
||||||
return arb::id_of(c->master);
|
return arb::id_of(c->master);
|
||||||
else if(geosupport_football() == 2)
|
else if(geosupport_football() == 2)
|
||||||
return pseudohept(c);
|
return pseudohept(c);
|
||||||
|
#if CAP_BT
|
||||||
else if(geometry == gBinaryTiling)
|
else if(geometry == gBinaryTiling)
|
||||||
return c->type-6;
|
return c->type-6;
|
||||||
else if(kite::in())
|
else if(kite::in())
|
||||||
return kite::getshape(c->master);
|
return kite::getshape(c->master);
|
||||||
else if(geometry == gBinary4 || geometry == gTernary)
|
else if(geometry == gBinary4 || geometry == gTernary)
|
||||||
return c->master->zebraval;
|
return c->master->zebraval;
|
||||||
|
#endif
|
||||||
else if(inforder::mixed()) {
|
else if(inforder::mixed()) {
|
||||||
int t = c->type;
|
int t = c->type;
|
||||||
static vector<bool> computed;
|
static vector<bool> computed;
|
||||||
|
10
geom-exp.cpp
10
geom-exp.cpp
@ -300,6 +300,7 @@ void set_or_configure_geometry(eGeometry g) {
|
|||||||
addMessage(XLAT("Only works with (semi-)regular tilings"));
|
addMessage(XLAT("Only works with (semi-)regular tilings"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in()) {
|
if(arcm::in()) {
|
||||||
int steps, single_step;
|
int steps, single_step;
|
||||||
if(!arcm::current.get_step_values(steps, single_step)) {
|
if(!arcm::current.get_step_values(steps, single_step)) {
|
||||||
@ -307,6 +308,7 @@ void set_or_configure_geometry(eGeometry g) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dual::may_split_or_do([g] { set_geometry(g); });
|
dual::may_split_or_do([g] { set_geometry(g); });
|
||||||
@ -542,8 +544,10 @@ EX void select_quotient_screen() {
|
|||||||
}
|
}
|
||||||
else if(g == gFieldQuotient)
|
else if(g == gFieldQuotient)
|
||||||
pushScreen(showQuotientConfig);
|
pushScreen(showQuotientConfig);
|
||||||
|
#if CAP_CRYSTAL
|
||||||
else if(g == gCrystal)
|
else if(g == gCrystal)
|
||||||
pushScreen(crystal::show);
|
pushScreen(crystal::show);
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
dual::may_split_or_do([g] { set_geometry(g); });
|
dual::may_split_or_do([g] { set_geometry(g); });
|
||||||
start_game();
|
start_game();
|
||||||
@ -709,7 +713,9 @@ EX void showEuclideanMenu() {
|
|||||||
worldsize = euc::eu.det;
|
worldsize = euc::eu.det;
|
||||||
if(BITRUNCATED) worldsize *= (a4 ? 2 : 3);
|
if(BITRUNCATED) worldsize *= (a4 ? 2 : 3);
|
||||||
if(GOLDBERG) worldsize *= cgi.gpdata->area;
|
if(GOLDBERG) worldsize *= cgi.gpdata->area;
|
||||||
|
#if CAP_IRR
|
||||||
if(IRREGULAR) worldsize *= isize(irr::cells) / isize(irr::cells_of_heptagon);
|
if(IRREGULAR) worldsize *= isize(irr::cells) / isize(irr::cells_of_heptagon);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
worldsize = denom ? nom / denom : 0;
|
worldsize = denom ? nom / denom : 0;
|
||||||
@ -796,15 +802,19 @@ EX void showEuclideanMenu() {
|
|||||||
|
|
||||||
dialog::add_action(select_quotient);
|
dialog::add_action(select_quotient);
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in()) {
|
if(arcm::in()) {
|
||||||
dialog::addItem(XLAT("advanced parameters"), '4');
|
dialog::addItem(XLAT("advanced parameters"), '4');
|
||||||
dialog::add_action_push(arcm::show);
|
dialog::add_action_push(arcm::show);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CAP_CRYSTAL
|
||||||
if(cryst) {
|
if(cryst) {
|
||||||
dialog::addItem(XLAT("advanced parameters"), '4');
|
dialog::addItem(XLAT("advanced parameters"), '4');
|
||||||
dialog::add_action_push(crystal::show);
|
dialog::add_action_push(crystal::show);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(fake::available()) {
|
if(fake::available()) {
|
||||||
dialog::addItem(XLAT("fake curvature"), '4');
|
dialog::addItem(XLAT("fake curvature"), '4');
|
||||||
|
10
geometry.cpp
10
geometry.cpp
@ -673,8 +673,12 @@ void geometry_information::prepare_basics() {
|
|||||||
plevel = vid.plevel_factor * scalefactor;
|
plevel = vid.plevel_factor * scalefactor;
|
||||||
single_step = 1;
|
single_step = 1;
|
||||||
if(hybri && !prod) {
|
if(hybri && !prod) {
|
||||||
|
#if CAP_ARCM
|
||||||
if(hybrid::underlying == gArchimedean)
|
if(hybrid::underlying == gArchimedean)
|
||||||
arcm::current.get_step_values(psl_steps, single_step);
|
arcm::current.get_step_values(psl_steps, single_step);
|
||||||
|
#else
|
||||||
|
if(0) ;
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
single_step = S3 * S7 - 2 * S7 - 2 * S3;
|
single_step = S3 * S7 - 2 * S7 - 2 * S3;
|
||||||
psl_steps = 2 * S7;
|
psl_steps = 2 * S7;
|
||||||
@ -914,7 +918,7 @@ EX void apply_always3() {
|
|||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
EX void switch_always3() {
|
EX void switch_always3() {
|
||||||
if(dual::split(switch_always3)) return;
|
if(dual::split(switch_always3)) return;
|
||||||
#if CAP_GL
|
#if CAP_GL && CAP_RUG
|
||||||
if(rug::rugged) rug::close();
|
if(rug::rugged) rug::close();
|
||||||
#endif
|
#endif
|
||||||
vid.always3 = !vid.always3;
|
vid.always3 = !vid.always3;
|
||||||
@ -947,7 +951,7 @@ EX void switch_always3() {
|
|||||||
|
|
||||||
EX void switch_fpp() {
|
EX void switch_fpp() {
|
||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
#if CAP_GL
|
#if CAP_GL && CAP_RUG
|
||||||
if(rug::rugged) rug::close();
|
if(rug::rugged) rug::close();
|
||||||
#endif
|
#endif
|
||||||
if(dual::split(switch_fpp)) return;
|
if(dual::split(switch_fpp)) return;
|
||||||
@ -1027,7 +1031,9 @@ EX string cgi_string() {
|
|||||||
if(GOLDBERG_INV) V("GP", its(gp::param.first) + "," + its(gp::param.second));
|
if(GOLDBERG_INV) V("GP", its(gp::param.first) + "," + its(gp::param.second));
|
||||||
if(IRREGULAR) V("IRR", its(irr::irrid));
|
if(IRREGULAR) V("IRR", its(irr::irrid));
|
||||||
|
|
||||||
|
#if CAP_ARCM
|
||||||
if(arcm::in()) V("ARCM", arcm::current.symbol);
|
if(arcm::in()) V("ARCM", arcm::current.symbol);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(arb::in()) V("ARB", its(arb::current.order));
|
if(arb::in()) V("ARB", its(arb::current.order));
|
||||||
|
|
||||||
|
@ -398,6 +398,7 @@ ld hrmap_standard::spin_angle(cell *c, int d) {
|
|||||||
ld hexshift = 0;
|
ld hexshift = 0;
|
||||||
if(c == c->master->c7 && (S7 % 2 == 0) && BITRUNCATED) hexshift = cgi.hexshift + 2*M_PI/c->type;
|
if(c == c->master->c7 && (S7 % 2 == 0) && BITRUNCATED) hexshift = cgi.hexshift + 2*M_PI/c->type;
|
||||||
else if(cgi.hexshift && c == c->master->c7) hexshift = cgi.hexshift;
|
else if(cgi.hexshift && c == c->master->c7) hexshift = cgi.hexshift;
|
||||||
|
#if CAP_IRR
|
||||||
if(IRREGULAR) {
|
if(IRREGULAR) {
|
||||||
auto id = irr::cellindex[c];
|
auto id = irr::cellindex[c];
|
||||||
auto& vs = irr::cells[id];
|
auto& vs = irr::cells[id];
|
||||||
@ -405,8 +406,8 @@ ld hrmap_standard::spin_angle(cell *c, int d) {
|
|||||||
auto& p = vs.jpoints[vs.neid[d]];
|
auto& p = vs.jpoints[vs.neid[d]];
|
||||||
return -atan2(p[1], p[0]) - hexshift;
|
return -atan2(p[1], p[0]) - hexshift;
|
||||||
}
|
}
|
||||||
else
|
#endif
|
||||||
return M_PI - d * 2 * M_PI / c->type - hexshift;
|
return M_PI - d * 2 * M_PI / c->type - hexshift;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX transmatrix ddspin(cell *c, int d, ld bonus IS(0)) { return currentmap->spin_to(c, d, bonus); }
|
EX transmatrix ddspin(cell *c, int d, ld bonus IS(0)) { return currentmap->spin_to(c, d, bonus); }
|
||||||
|
@ -806,6 +806,7 @@ EX namespace gp {
|
|||||||
|
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
|
|
||||||
|
#if CAP_IRR
|
||||||
if(irr::supports(geometry)) {
|
if(irr::supports(geometry)) {
|
||||||
dialog::addBoolItem(XLAT("irregular"), IRREGULAR, 'i');
|
dialog::addBoolItem(XLAT("irregular"), IRREGULAR, 'i');
|
||||||
dialog::add_action(dialog::add_confirmation([=] () {
|
dialog::add_action(dialog::add_confirmation([=] () {
|
||||||
@ -817,6 +818,7 @@ EX namespace gp {
|
|||||||
if(!IRREGULAR) irr::visual_creator();
|
if(!IRREGULAR) irr::visual_creator();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
int style = 0;
|
int style = 0;
|
||||||
|
12
graph.cpp
12
graph.cpp
@ -1020,7 +1020,11 @@ EX void drawTerraWarrior(const shiftmatrix& V, int t, int hp, double footphase)
|
|||||||
|
|
||||||
EX void drawPlayer(eMonster m, cell *where, const shiftmatrix& V, color_t col, double footphase, bool stop IS(false)) {
|
EX void drawPlayer(eMonster m, cell *where, const shiftmatrix& V, color_t col, double footphase, bool stop IS(false)) {
|
||||||
charstyle& cs = getcs();
|
charstyle& cs = getcs();
|
||||||
|
#if CAP_COMPLEX2
|
||||||
auto& knighted = camelot::knighted;
|
auto& knighted = camelot::knighted;
|
||||||
|
#else
|
||||||
|
const bool knighted = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(mapeditor::drawplayer && !mapeditor::drawUserShape(V, mapeditor::sgPlayer, cs.charid, cs.skincolor, where)) {
|
if(mapeditor::drawplayer && !mapeditor::drawUserShape(V, mapeditor::sgPlayer, cs.charid, cs.skincolor, where)) {
|
||||||
|
|
||||||
@ -1264,8 +1268,10 @@ void drawMimic(eMonster m, cell *where, const shiftmatrix& V, color_t col, doubl
|
|||||||
else if(!where || shmup::curtime >= shmup::getPlayer()->nextshot)
|
else if(!where || shmup::curtime >= shmup::getPlayer()->nextshot)
|
||||||
queuepoly(VBODY * VBS, cgi.shPKnife, darkena(col, 0, 0XC0));
|
queuepoly(VBODY * VBS, cgi.shPKnife, darkena(col, 0, 0XC0));
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(camelot::knighted)
|
if(camelot::knighted)
|
||||||
queuepoly(VBODY3 * VBS, cgi.shKnightCloak, darkena(col, 1, 0xC0));
|
queuepoly(VBODY3 * VBS, cgi.shKnightCloak, darkena(col, 1, 0xC0));
|
||||||
|
#endif
|
||||||
|
|
||||||
queuepoly(VHEAD1, (cs.charid&1) ? cgi.shFemaleHair : cgi.shPHead, darkena(col, 1, 0XC0));
|
queuepoly(VHEAD1, (cs.charid&1) ? cgi.shFemaleHair : cgi.shPHead, darkena(col, 1, 0XC0));
|
||||||
queuepoly(VHEAD, cgi.shPFace, darkena(col, 0, 0XC0));
|
queuepoly(VHEAD, cgi.shPFace, darkena(col, 0, 0XC0));
|
||||||
@ -3410,7 +3416,11 @@ EX bool placeSidewall(cell *c, int i, int sidepar, const shiftmatrix& V, color_t
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool openorsafe(cell *c) {
|
bool openorsafe(cell *c) {
|
||||||
|
#if CAP_COMPLEX2
|
||||||
return c->wall == waMineOpen || mine::marked_safe(c);
|
return c->wall == waMineOpen || mine::marked_safe(c);
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define Dark(x) darkena(x,0,0xFF)
|
#define Dark(x) darkena(x,0,0xFF)
|
||||||
@ -3788,7 +3798,9 @@ EX void gridline(const shiftmatrix& V, const hyperpoint h1, const hyperpoint h2,
|
|||||||
|
|
||||||
EX int wall_offset(cell *c) {
|
EX int wall_offset(cell *c) {
|
||||||
if(hybri || WDIM == 2) return hybrid::wall_offset(c);
|
if(hybri || WDIM == 2) return hybrid::wall_offset(c);
|
||||||
|
#if CAP_BT
|
||||||
if(kite::in() && kite::getshape(c->master) == kite::pKite) return 10;
|
if(kite::in() && kite::getshape(c->master) == kite::pKite) return 10;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
help.cpp
10
help.cpp
@ -928,8 +928,12 @@ EX void describeMouseover() {
|
|||||||
if(isReptile(c->wall))
|
if(isReptile(c->wall))
|
||||||
out += " [" + turnstring((unsigned char) c->wparam) + "]";
|
out += " [" + turnstring((unsigned char) c->wparam) + "]";
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(c->monst == moKnight)
|
if(c->monst == moKnight)
|
||||||
out += XLAT(", %1 the Knight", camelot::knight_name(c));
|
out += XLAT(", %1 the Knight", camelot::knight_name(c));
|
||||||
|
#else
|
||||||
|
if(0) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
else if(c->monst) {
|
else if(c->monst) {
|
||||||
out += ", "; out += XLAT1(minf[c->monst].name);
|
out += ", "; out += XLAT1(minf[c->monst].name);
|
||||||
@ -950,10 +954,12 @@ EX void describeMouseover() {
|
|||||||
out += ", ";
|
out += ", ";
|
||||||
out += XLAT1(iinf[c->item].name);
|
out += XLAT1(iinf[c->item].name);
|
||||||
if(c->item == itBarrow) out += " (x" + its(c->landparam) + ")";
|
if(c->item == itBarrow) out += " (x" + its(c->landparam) + ")";
|
||||||
if(c->land == laHunting) {
|
#if CAP_COMPLEX2
|
||||||
|
if(c->land == laHunting) {
|
||||||
int i = ambush::size(c, c->item);
|
int i = ambush::size(c, c->item);
|
||||||
if(i) out += " (" + XLAT("ambush:") + " " + its(i) + ")";
|
if(i) out += " (" + XLAT("ambush:") + " " + its(i) + ")";
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(c->item == itBabyTortoise && tortoise::seek())
|
if(c->item == itBabyTortoise && tortoise::seek())
|
||||||
out += " " + tortoise::measure(tortoise::babymap[c]);
|
out += " " + tortoise::measure(tortoise::babymap[c]);
|
||||||
if(!c->monst) set_help_to(c->item);
|
if(!c->monst) set_help_to(c->item);
|
||||||
@ -1000,12 +1006,14 @@ EX void describeMouseover() {
|
|||||||
callhooks(hooks_mouseover, c);
|
callhooks(hooks_mouseover, c);
|
||||||
|
|
||||||
if(mousey < vid.fsize * 3/2 && getcstat == '-' && !instat) getcstat = SDLK_F1;
|
if(mousey < vid.fsize * 3/2 && getcstat == '-' && !instat) getcstat = SDLK_F1;
|
||||||
|
#if CAP_TOUR
|
||||||
if(tour::on && !tour::texts) {
|
if(tour::on && !tour::texts) {
|
||||||
if(tour::slides[tour::currentslide].flags & tour::NOTITLE)
|
if(tour::slides[tour::currentslide].flags & tour::NOTITLE)
|
||||||
mouseovers = "";
|
mouseovers = "";
|
||||||
else
|
else
|
||||||
mouseovers = XLAT(tour::slides[tour::currentslide].name);
|
mouseovers = XLAT(tour::slides[tour::currentslide].name);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EX void showHelp() {
|
EX void showHelp() {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#define SCU
|
#define SCU
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CAP_ROGUEVIZ
|
#if CAP_ROGUEVIZ || defined(MAXMDIM)
|
||||||
#define MAXMDIM 4
|
#define MAXMDIM 4
|
||||||
#else
|
#else
|
||||||
#define MAXMDIM 3
|
#define MAXMDIM 3
|
||||||
|
@ -2430,8 +2430,10 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case laBrownian:
|
case laBrownian:
|
||||||
|
#if CAP_COMPLEX2
|
||||||
brownian::build(c, d);
|
brownian::build(c, d);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case laMirrored:
|
case laMirrored:
|
||||||
@ -2807,6 +2809,7 @@ EX void setdist(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
if(d >= BARLEV) {
|
if(d >= BARLEV) {
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(bt::in() && WDIM == 3 && !c->land && !sn::in()) {
|
if(bt::in() && WDIM == 3 && !c->land && !sn::in()) {
|
||||||
ld z = vid.binary_width;
|
ld z = vid.binary_width;
|
||||||
cell *cseek = c;
|
cell *cseek = c;
|
||||||
@ -2816,6 +2819,7 @@ EX void setdist(cell *c, int d, cell *from) {
|
|||||||
while(z < 3.999 && step < 10) cseek = cseek->cmove(bt::updir()), z *= scale;
|
while(z < 3.999 && step < 10) cseek = cseek->cmove(bt::updir()), z *= scale;
|
||||||
if(cseek->master->emeraldval) setland(c, eLand(cseek->master->emeraldval));
|
if(cseek->master->emeraldval) setland(c, eLand(cseek->master->emeraldval));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!c->land && from && (WDIM == 3 || !among(from->land, laBarrier, laElementalWall, laHauntedWall, laOceanWall)) && !quotient && !(chaosmode > 1)) {
|
if(!c->land && from && (WDIM == 3 || !among(from->land, laBarrier, laElementalWall, laHauntedWall, laOceanWall)) && !quotient && !(chaosmode > 1)) {
|
||||||
if(!hasbardir(c)) setland(c, from->land);
|
if(!hasbardir(c)) setland(c, from->land);
|
||||||
|
@ -318,10 +318,12 @@ EX eItem wanderingTreasure(cell *c) {
|
|||||||
|
|
||||||
/** generate the wandering monsters */
|
/** generate the wandering monsters */
|
||||||
EX void wandering() {
|
EX void wandering() {
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(mine::in_minesweeper()) {
|
if(mine::in_minesweeper()) {
|
||||||
mine::count_status();
|
mine::count_status();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(!canmove) return;
|
if(!canmove) return;
|
||||||
if(!gen_wandering) return;
|
if(!gen_wandering) return;
|
||||||
if(racing::on) return;
|
if(racing::on) return;
|
||||||
|
@ -295,11 +295,17 @@ EX namespace dual {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
variation = eVariation::pure;
|
variation = eVariation::pure;
|
||||||
|
#if CAP_ARCM
|
||||||
geometry = s == 0 ? gEuclidSquare : gArchimedean;
|
geometry = s == 0 ? gEuclidSquare : gArchimedean;
|
||||||
|
#else
|
||||||
|
geometry = gEuclidSquare;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
firstland = specialland = laCrossroads4;
|
firstland = specialland = laCrossroads4;
|
||||||
|
#if CAP_ARCM
|
||||||
if(geometry == gArchimedean)
|
if(geometry == gArchimedean)
|
||||||
arcm::current.parse("4,4,4,4,4");
|
arcm::current.parse("4,4,4,4,4");
|
||||||
|
#endif
|
||||||
check_cgi();
|
check_cgi();
|
||||||
cgi.require_basics();
|
cgi.require_basics();
|
||||||
dgd[s].storegame();
|
dgd[s].storegame();
|
||||||
|
@ -1355,7 +1355,11 @@ EX namespace hybrid {
|
|||||||
gp::draw_li = WDIM == 2 ? gp::get_local_info(c1) : PIU(gp::get_local_info(c1));
|
gp::draw_li = WDIM == 2 ? gp::get_local_info(c1) : PIU(gp::get_local_info(c1));
|
||||||
}
|
}
|
||||||
auto ugeometry = hybri ? hybrid::underlying : geometry;
|
auto ugeometry = hybri ? hybrid::underlying : geometry;
|
||||||
|
#if CAP_ARCM
|
||||||
int id = ugeometry == gArchimedean ? arcm::id_of(c->master) + 20 * arcm::parent_index_of(c->master) : shvid(c);
|
int id = ugeometry == gArchimedean ? arcm::id_of(c->master) + 20 * arcm::parent_index_of(c->master) : shvid(c);
|
||||||
|
#else
|
||||||
|
int id = shvid(c);
|
||||||
|
#endif
|
||||||
if(isize(cgi.walloffsets) <= id) cgi.walloffsets.resize(id+1, {-1, nullptr});
|
if(isize(cgi.walloffsets) <= id) cgi.walloffsets.resize(id+1, {-1, nullptr});
|
||||||
auto &wop = cgi.walloffsets[id];
|
auto &wop = cgi.walloffsets[id];
|
||||||
int &wo = wop.first;
|
int &wo = wop.first;
|
||||||
@ -2067,8 +2071,13 @@ EX namespace rots {
|
|||||||
if(i == c1->type-1) return uzpush(-cgi.plevel) * spin(-2*cgi.plevel);
|
if(i == c1->type-1) return uzpush(-cgi.plevel) * spin(-2*cgi.plevel);
|
||||||
if(i == c1->type-2) return uzpush(+cgi.plevel) * spin(+2*cgi.plevel);
|
if(i == c1->type-2) return uzpush(+cgi.plevel) * spin(+2*cgi.plevel);
|
||||||
cell *c2 = c1->cmove(i);
|
cell *c2 = c1->cmove(i);
|
||||||
|
#if CAP_ARCM
|
||||||
int id1 = hybrid::underlying == gArchimedean ? arcm::id_of(c1->master) + 20 * arcm::parent_index_of(c1->master) : shvid(c1);
|
int id1 = hybrid::underlying == gArchimedean ? arcm::id_of(c1->master) + 20 * arcm::parent_index_of(c1->master) : shvid(c1);
|
||||||
int id2 = hybrid::underlying == gArchimedean ? arcm::id_of(c2->master) + 20 * arcm::parent_index_of(c2->master) : shvid(c2);
|
int id2 = hybrid::underlying == gArchimedean ? arcm::id_of(c2->master) + 20 * arcm::parent_index_of(c2->master) : shvid(c2);
|
||||||
|
#else
|
||||||
|
int id1 = shvid(c1);
|
||||||
|
int id2 = shvid(c2);
|
||||||
|
#endif
|
||||||
int j = c1->c.spin(i);
|
int j = c1->c.spin(i);
|
||||||
int id = id1 + (id2 << 10) + (i << 20) + (j << 26);
|
int id = id1 + (id2 << 10) + (i << 20) + (j << 26);
|
||||||
auto &M = saved_matrices_ray[id];
|
auto &M = saved_matrices_ray[id];
|
||||||
@ -2094,8 +2103,13 @@ EX namespace rots {
|
|||||||
if(i == c1->type-2) return uzpush(-cgi.plevel) * spin(-2*cgi.plevel);
|
if(i == c1->type-2) return uzpush(-cgi.plevel) * spin(-2*cgi.plevel);
|
||||||
if(i == c1->type-1) return uzpush(+cgi.plevel) * spin(+2*cgi.plevel);
|
if(i == c1->type-1) return uzpush(+cgi.plevel) * spin(+2*cgi.plevel);
|
||||||
cell *c2 = c1->cmove(i);
|
cell *c2 = c1->cmove(i);
|
||||||
|
#if CAP_ARCM
|
||||||
int id1 = hybrid::underlying == gArchimedean ? arcm::id_of(c1->master) + 20 * arcm::parent_index_of(c1->master) : shvid(c1);
|
int id1 = hybrid::underlying == gArchimedean ? arcm::id_of(c1->master) + 20 * arcm::parent_index_of(c1->master) : shvid(c1);
|
||||||
int id2 = hybrid::underlying == gArchimedean ? arcm::id_of(c2->master) + 20 * arcm::parent_index_of(c2->master) : shvid(c2);
|
int id2 = hybrid::underlying == gArchimedean ? arcm::id_of(c2->master) + 20 * arcm::parent_index_of(c2->master) : shvid(c2);
|
||||||
|
#else
|
||||||
|
int id1 = shvid(c1);
|
||||||
|
int id2 = shvid(c2);
|
||||||
|
#endif
|
||||||
int j = c1->c.spin(i);
|
int j = c1->c.spin(i);
|
||||||
int id = id1 + (id2 << 10) + (i << 20) + (j << 26);
|
int id = id1 + (id2 << 10) + (i << 20) + (j << 26);
|
||||||
auto &M = saved_matrices[id];
|
auto &M = saved_matrices[id];
|
||||||
|
4
orbs.cpp
4
orbs.cpp
@ -88,7 +88,9 @@ EX bool reduceOrbPower(eItem it, int cap) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(items[it] > cap && timerghost) items[it] = cap;
|
if(items[it] > cap && timerghost) items[it] = cap;
|
||||||
|
#if CAP_COMPLEX2
|
||||||
mine::auto_teleport_charges();
|
mine::auto_teleport_charges();
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -596,7 +598,9 @@ EX void teleportTo(cell *dest) {
|
|||||||
checkmoveO();
|
checkmoveO();
|
||||||
|
|
||||||
movecost(from, dest, 2);
|
movecost(from, dest, 2);
|
||||||
|
#if CAP_COMPLEX2
|
||||||
mine::auto_teleport_charges();
|
mine::auto_teleport_charges();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool jumpTo(orbAction a, cell *dest, eItem byWhat, int bonuskill IS(0), eMonster dashmon IS(moNone)) {
|
EX bool jumpTo(orbAction a, cell *dest, eItem byWhat, int bonuskill IS(0), eMonster dashmon IS(moNone)) {
|
||||||
|
@ -1682,11 +1682,13 @@ EX namespace patterns {
|
|||||||
ep.extra_params["ey"] = y;
|
ep.extra_params["ey"] = y;
|
||||||
if(S7 == 6) ep.extra_params["ez"] = -x-y;
|
if(S7 == 6) ep.extra_params["ez"] = -x-y;
|
||||||
}
|
}
|
||||||
|
#if CAP_CRYSTAL
|
||||||
if(cryst) {
|
if(cryst) {
|
||||||
crystal::ldcoord co = crystal::get_ldcoord(c);
|
crystal::ldcoord co = crystal::get_ldcoord(c);
|
||||||
for(int i=0; i<crystal::MAXDIM; i++)
|
for(int i=0; i<crystal::MAXDIM; i++)
|
||||||
ep.extra_params["x"+its(i)] = co[i];
|
ep.extra_params["x"+its(i)] = co[i];
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(asonov::in()) {
|
if(asonov::in()) {
|
||||||
auto co = asonov::get_coord(c->master);
|
auto co = asonov::get_coord(c->master);
|
||||||
ep.extra_params["ax"] = szgmod(co[0], asonov::period_xy);
|
ep.extra_params["ax"] = szgmod(co[0], asonov::period_xy);
|
||||||
|
31
polygons.cpp
31
polygons.cpp
@ -718,24 +718,26 @@ void geometry_information::procedural_shapes() {
|
|||||||
|
|
||||||
vector<ld> equal_weights(1000, 1);
|
vector<ld> equal_weights(1000, 1);
|
||||||
|
|
||||||
#if !(CAP_BT && MAXMDIM >= 4)
|
#if MAXMDIM < 4
|
||||||
void geometry_information::make_wall(int id, vector<hyperpoint> vertices, vector<ld> weights) { }
|
void geometry_information::make_wall(int id, vector<hyperpoint> vertices, vector<ld> weights) { }
|
||||||
void geometry_information::reserve_wall3d(int i) { }
|
void geometry_information::reserve_wall3d(int i) { }
|
||||||
void geometry_information::create_wall3d() { }
|
void geometry_information::create_wall3d() { }
|
||||||
void geometry_information::compute_cornerbonus() { }
|
void geometry_information::compute_cornerbonus() { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CAP_BT && MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
|
|
||||||
// Make a wall
|
// Make a wall
|
||||||
|
|
||||||
hyperpoint ray_kleinize(hyperpoint h, int id, ld pz) {
|
hyperpoint ray_kleinize(hyperpoint h, int id, ld pz) {
|
||||||
if(geometry == gNil && among(id, 2, 5)) h[2] = 0;
|
if(geometry == gNil && among(id, 2, 5)) h[2] = 0;
|
||||||
|
#if CAP_BT
|
||||||
if(hyperbolic && bt::in()) {
|
if(hyperbolic && bt::in()) {
|
||||||
// ld co = vid.binary_width / log(2) / 4;
|
// ld co = vid.binary_width / log(2) / 4;
|
||||||
// hyperpoint res = point31(h[2]*log(2)/2, h[0]*co, h[1]*co);
|
// hyperpoint res = point31(h[2]*log(2)/2, h[0]*co, h[1]*co);
|
||||||
return deparabolic10(bt::parabolic3(h[0], h[1]) * xpush0(log(2)/2*h[2]));
|
return deparabolic10(bt::parabolic3(h[0], h[1]) * xpush0(log(2)/2*h[2]));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(prod) {
|
if(prod) {
|
||||||
return point3(h[0]/h[2], h[1]/h[2], pz);
|
return point3(h[0]/h[2], h[1]/h[2], pz);
|
||||||
}
|
}
|
||||||
@ -756,7 +758,9 @@ void geometry_information::make_wall(int id, vector<hyperpoint> vertices, vector
|
|||||||
reverse(vertices.begin(), vertices.end()),
|
reverse(vertices.begin(), vertices.end()),
|
||||||
reverse(weights.begin(), weights.end());
|
reverse(weights.begin(), weights.end());
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
ld yy = log(2) / 2;
|
ld yy = log(2) / 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
bshape(shWall3D[id], PPR::WALL);
|
bshape(shWall3D[id], PPR::WALL);
|
||||||
last->flags |= POLY_TRIANGLES | POLY_PRINTABLE;
|
last->flags |= POLY_TRIANGLES | POLY_PRINTABLE;
|
||||||
@ -815,8 +819,13 @@ void geometry_information::make_wall(int id, vector<hyperpoint> vertices, vector
|
|||||||
hpcpush(h); return;
|
hpcpush(h); return;
|
||||||
}
|
}
|
||||||
if(sn::in() || !bt::in()) { hpcpush(ultra_normalize(h)); return; }
|
if(sn::in() || !bt::in()) { hpcpush(ultra_normalize(h)); return; }
|
||||||
hyperpoint res = bt::parabolic3(h[0], h[1]) * xpush0(yy*h[2]);
|
#if CAP_BT
|
||||||
hpcpush(res);
|
if(bt::in()) {
|
||||||
|
hyperpoint res = bt::parabolic3(h[0], h[1]) * xpush0(yy*h[2]);
|
||||||
|
hpcpush(res);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
hpcpush(h);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -833,8 +842,13 @@ void geometry_information::make_wall(int id, vector<hyperpoint> vertices, vector
|
|||||||
if(nil)
|
if(nil)
|
||||||
h = nilv::on_geodesic(vertices[a], vertices[(a+1)%n], y * 1. / STEP);
|
h = nilv::on_geodesic(vertices[a], vertices[(a+1)%n], y * 1. / STEP);
|
||||||
if(sn::in() || !bt::in()) { hpcpush(ultra_normalize(h)); continue; }
|
if(sn::in() || !bt::in()) { hpcpush(ultra_normalize(h)); continue; }
|
||||||
hyperpoint res = bt::parabolic3(h[0], h[1]) * xpush0(yy*h[2]);
|
#if CAP_BT
|
||||||
hpcpush(res);
|
if(bt::in()) {
|
||||||
|
hyperpoint res = bt::parabolic3(h[0], h[1]) * xpush0(yy*h[2]);
|
||||||
|
hpcpush(res);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
hpcpush(h);
|
||||||
}
|
}
|
||||||
hpcpush(hpc[last->s]);
|
hpcpush(hpc[last->s]);
|
||||||
}
|
}
|
||||||
@ -875,6 +889,8 @@ void geometry_information::reserve_wall3d(int i) {
|
|||||||
void geometry_information::create_wall3d() {
|
void geometry_information::create_wall3d() {
|
||||||
if(WDIM == 2) return;
|
if(WDIM == 2) return;
|
||||||
reserve_wall3d(kite::in() ? 22 : hybri ? 0 : S7);
|
reserve_wall3d(kite::in() ? 22 : hybri ? 0 : S7);
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(GDIM == 3 && bt::in() && geometry == gBinary3) {
|
if(GDIM == 3 && bt::in() && geometry == gBinary3) {
|
||||||
hyperpoint h00 = point3(-1,-1,-1);
|
hyperpoint h00 = point3(-1,-1,-1);
|
||||||
hyperpoint h01 = point3(-1,0,-1);
|
hyperpoint h01 = point3(-1,0,-1);
|
||||||
@ -970,6 +986,7 @@ void geometry_information::create_wall3d() {
|
|||||||
make_wall(12, {point3(3*h,r3,z), point3(0,2*r3,z), point3(-3*h,r3,z)});
|
make_wall(12, {point3(3*h,r3,z), point3(0,2*r3,z), point3(-3*h,r3,z)});
|
||||||
make_wall(13, {point3(3*h,r3,z), point3(3*h,-r3,z), point3(0,-2*r3,z), point3(-3*h,-r3,z), point3(-3*h,r3,z)});
|
make_wall(13, {point3(3*h,r3,z), point3(3*h,-r3,z), point3(0,-2*r3,z), point3(-3*h,-r3,z), point3(-3*h,r3,z)});
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(prod) {
|
if(prod) {
|
||||||
walloffsets.clear();
|
walloffsets.clear();
|
||||||
@ -1060,6 +1077,7 @@ void geometry_information::create_wall3d() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(kite::in()) {
|
if(kite::in()) {
|
||||||
auto kv = kite::make_walls();
|
auto kv = kite::make_walls();
|
||||||
for(auto& v: kv.first) for(auto& h: v) {
|
for(auto& v: kv.first) for(auto& h: v) {
|
||||||
@ -1068,6 +1086,7 @@ void geometry_information::create_wall3d() {
|
|||||||
}
|
}
|
||||||
for(int i=0; i<isize(kv.first); i++) make_wall(i, kv.first[i], kv.second[i]);
|
for(int i=0; i<isize(kv.first); i++) make_wall(i, kv.first[i], kv.second[i]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
wallstart.push_back(isize(raywall));
|
wallstart.push_back(isize(raywall));
|
||||||
compute_cornerbonus();
|
compute_cornerbonus();
|
||||||
|
8
quit.cpp
8
quit.cpp
@ -321,7 +321,11 @@ EX void showMission() {
|
|||||||
);
|
);
|
||||||
keyhandler = handleKeyQuit;
|
keyhandler = handleKeyQuit;
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
bool sweeper = mine::in_minesweeper();
|
bool sweeper = mine::in_minesweeper();
|
||||||
|
#else
|
||||||
|
const bool sweeper = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!peace::on && !racing::on && !sweeper)
|
if(!peace::on && !racing::on && !sweeper)
|
||||||
dialog::addInfo(XLAT("Your score: %1", its(gold())));
|
dialog::addInfo(XLAT("Your score: %1", its(gold())));
|
||||||
@ -335,6 +339,7 @@ EX void showMission() {
|
|||||||
dialog::addInfo(XLAT("Orbs of Yendor found: %1", its(items[itOrbYendor])), iinf[itOrbYendor].color);
|
dialog::addInfo(XLAT("Orbs of Yendor found: %1", its(items[itOrbYendor])), iinf[itOrbYendor].color);
|
||||||
dialog::addInfo(XLAT("CONGRATULATIONS!"), iinf[itOrbYendor].color);
|
dialog::addInfo(XLAT("CONGRATULATIONS!"), iinf[itOrbYendor].color);
|
||||||
}
|
}
|
||||||
|
#if CAP_COMPLEX2
|
||||||
else if(mine::in_minesweeper()) {
|
else if(mine::in_minesweeper()) {
|
||||||
int to_uncover = kills[moBomberbird];
|
int to_uncover = kills[moBomberbird];
|
||||||
if(to_uncover) {
|
if(to_uncover) {
|
||||||
@ -346,7 +351,8 @@ EX void showMission() {
|
|||||||
dialog::addInfo(XLAT("You won in %1", getgametime_s(mine::victory_time)));
|
dialog::addInfo(XLAT("You won in %1", getgametime_s(mine::victory_time)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
#endif
|
||||||
|
else {
|
||||||
if(0)
|
if(0)
|
||||||
;
|
;
|
||||||
#if CAP_TOUR
|
#if CAP_TOUR
|
||||||
|
@ -269,11 +269,13 @@ void enable_raycaster() {
|
|||||||
int flat1 = 0, flat2 = deg;
|
int flat1 = 0, flat2 = deg;
|
||||||
if(prod || rotspace) flat2 -= 2;
|
if(prod || rotspace) flat2 -= 2;
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(hyperbolic && bt::in()) {
|
if(hyperbolic && bt::in()) {
|
||||||
fsh += "uniform mediump float uBLevel;\n";
|
fsh += "uniform mediump float uBLevel;\n";
|
||||||
flat1 = bt::dirs_outer();
|
flat1 = bt::dirs_outer();
|
||||||
flat2 -= bt::dirs_inner();
|
flat2 -= bt::dirs_inner();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(hyperbolic) fsh +=
|
if(hyperbolic) fsh +=
|
||||||
|
|
||||||
@ -1533,8 +1535,11 @@ EX void cast() {
|
|||||||
}
|
}
|
||||||
if(o->uPLevel != -1)
|
if(o->uPLevel != -1)
|
||||||
glUniform1f(o->uPLevel, cgi.plevel / 2);
|
glUniform1f(o->uPLevel, cgi.plevel / 2);
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(o->uBLevel != -1)
|
if(o->uBLevel != -1)
|
||||||
glUniform1f(o->uBLevel, log(bt::expansion()) / 2);
|
glUniform1f(o->uBLevel, log(bt::expansion()) / 2);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(o->uLinearSightRange != -1)
|
if(o->uLinearSightRange != -1)
|
||||||
glUniform1f(o->uLinearSightRange, sightranges[geometry]);
|
glUniform1f(o->uLinearSightRange, sightranges[geometry]);
|
||||||
|
28
reg3.cpp
28
reg3.cpp
@ -13,13 +13,6 @@
|
|||||||
namespace hr {
|
namespace hr {
|
||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
|
|
||||||
namespace binary {
|
|
||||||
void build_tmatrix();
|
|
||||||
void virtualRebaseSimple(heptagon*& base, transmatrix& at);
|
|
||||||
int celldistance3(heptagon *c1, heptagon *c2);
|
|
||||||
hyperpoint deparabolic3(hyperpoint h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief regular three-dimensional tessellations */
|
/** \brief regular three-dimensional tessellations */
|
||||||
EX namespace reg3 {
|
EX namespace reg3 {
|
||||||
|
|
||||||
@ -641,10 +634,13 @@ EX namespace reg3 {
|
|||||||
quotient_map = nullptr;
|
quotient_map = nullptr;
|
||||||
|
|
||||||
#if CAP_FIELD
|
#if CAP_FIELD
|
||||||
|
#if CAP_CRYSTAL
|
||||||
if(geometry == gSpace344) {
|
if(geometry == gSpace344) {
|
||||||
quotient_map = new hrmap_from_crystal;
|
quotient_map = new hrmap_from_crystal;
|
||||||
}
|
}
|
||||||
else if(geometry == gSpace535) {
|
else
|
||||||
|
#endif
|
||||||
|
if(geometry == gSpace535) {
|
||||||
quotient_map = new seifert_weber::hrmap_seifert_cover;
|
quotient_map = new seifert_weber::hrmap_seifert_cover;
|
||||||
}
|
}
|
||||||
else if(hyperbolic) {
|
else if(hyperbolic) {
|
||||||
@ -653,6 +649,7 @@ EX namespace reg3 {
|
|||||||
#endif
|
#endif
|
||||||
h.zebraval = quotient_map ? quotient_map->allh[0]->zebraval : 0;
|
h.zebraval = quotient_map ? quotient_map->allh[0]->zebraval : 0;
|
||||||
|
|
||||||
|
#if CAP_BT
|
||||||
if(hyperbolic) {
|
if(hyperbolic) {
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
bt::build_tmatrix();
|
bt::build_tmatrix();
|
||||||
@ -667,6 +664,7 @@ EX namespace reg3 {
|
|||||||
binary_map = bt::new_alt_map(alt);
|
binary_map = bt::new_alt_map(alt);
|
||||||
T = xpush(.01241) * spin(1.4117) * xpush(0.1241) * cspin(0, 2, 1.1249) * xpush(0.07) * Id;
|
T = xpush(.01241) * spin(1.4117) * xpush(0.1241) * cspin(0, 2, 1.1249) * xpush(0.07) * Id;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
reg_gmatrix[origin] = make_pair(alt, T);
|
reg_gmatrix[origin] = make_pair(alt, T);
|
||||||
altmap[alt].emplace_back(origin, T);
|
altmap[alt].emplace_back(origin, T);
|
||||||
@ -730,12 +728,14 @@ EX namespace reg3 {
|
|||||||
println(hlog, "FAIL");
|
println(hlog, "FAIL");
|
||||||
exit(3);
|
exit(3);
|
||||||
}
|
}
|
||||||
|
#if CAP_BT
|
||||||
if(steps) {
|
if(steps) {
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
dynamicval<hrmap*> cm(currentmap, binary_map);
|
dynamicval<hrmap*> cm(currentmap, binary_map);
|
||||||
for(int i=0; i<alt->type; i++)
|
for(int i=0; i<alt->type; i++)
|
||||||
verify_neighbors(alt->cmove(i), steps-1, currentmap->iadj(alt, i) * hT);
|
verify_neighbors(alt->cmove(i), steps-1, currentmap->iadj(alt, i) * hT);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
heptagon *create_step(heptagon *parent, int d) override {
|
heptagon *create_step(heptagon *parent, int d) override {
|
||||||
@ -748,11 +748,13 @@ EX namespace reg3 {
|
|||||||
transmatrix T = p1.second * cgi.adjmoves[d];
|
transmatrix T = p1.second * cgi.adjmoves[d];
|
||||||
#endif
|
#endif
|
||||||
transmatrix T1 = T;
|
transmatrix T1 = T;
|
||||||
|
#if CAP_BT
|
||||||
if(hyperbolic) {
|
if(hyperbolic) {
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
dynamicval<hrmap*> cm(currentmap, binary_map);
|
dynamicval<hrmap*> cm(currentmap, binary_map);
|
||||||
binary_map->virtualRebase(alt, T);
|
binary_map->virtualRebase(alt, T);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
fixmatrix(T);
|
fixmatrix(T);
|
||||||
auto hT = tC0(T);
|
auto hT = tC0(T);
|
||||||
@ -852,10 +854,12 @@ EX namespace reg3 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
~hrmap_reg3() {
|
~hrmap_reg3() {
|
||||||
|
#if CAP_BT
|
||||||
if(binary_map) {
|
if(binary_map) {
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
delete binary_map;
|
delete binary_map;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(quotient_map) delete quotient_map;
|
if(quotient_map) delete quotient_map;
|
||||||
clearfrom(origin);
|
clearfrom(origin);
|
||||||
}
|
}
|
||||||
@ -901,12 +905,14 @@ EX namespace reg3 {
|
|||||||
auto p1 = reg_gmatrix[h1];
|
auto p1 = reg_gmatrix[h1];
|
||||||
auto p2 = reg_gmatrix[h2];
|
auto p2 = reg_gmatrix[h2];
|
||||||
transmatrix T = Id;
|
transmatrix T = Id;
|
||||||
|
#if CAP_BT
|
||||||
if(hyperbolic) {
|
if(hyperbolic) {
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
dynamicval<hrmap*> cm(currentmap, binary_map);
|
dynamicval<hrmap*> cm(currentmap, binary_map);
|
||||||
T = binary_map->relative_matrix(p2.first, p1.first, hint);
|
T = binary_map->relative_matrix(p2.first, p1.first, hint);
|
||||||
}
|
}
|
||||||
T = inverse(p1.second) * T * p2.second;
|
#endif
|
||||||
|
T = inverse(p1.second) * T * p2.second;
|
||||||
if(elliptic && T[LDIM][LDIM] < 0) T = centralsym * T;
|
if(elliptic && T[LDIM][LDIM] < 0) T = centralsym * T;
|
||||||
return T;
|
return T;
|
||||||
}
|
}
|
||||||
@ -1343,7 +1349,11 @@ EX int celldistance(cell *c1, cell *c2) {
|
|||||||
return clueless_celldistance(c1, c2);
|
return clueless_celldistance(c1, c2);
|
||||||
|
|
||||||
dynamicval<eGeometry> g(geometry, gBinary3);
|
dynamicval<eGeometry> g(geometry, gBinary3);
|
||||||
|
#if CAP_BT
|
||||||
return 20 + bt::celldistance3(r->reg_gmatrix[c1->master].first, r->reg_gmatrix[c2->master].first);
|
return 20 + bt::celldistance3(r->reg_gmatrix[c1->master].first, r->reg_gmatrix[c2->master].first);
|
||||||
|
#else
|
||||||
|
return 20;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool pseudohept(cell *c) {
|
EX bool pseudohept(cell *c) {
|
||||||
|
4
rug.cpp
4
rug.cpp
@ -1850,11 +1850,15 @@ EX namespace rug {
|
|||||||
EX bool rugged = false;
|
EX bool rugged = false;
|
||||||
EX bool renderonce = false;
|
EX bool renderonce = false;
|
||||||
EX bool rendernogl = true;
|
EX bool rendernogl = true;
|
||||||
|
EX bool mouse_control_rug = false;
|
||||||
EX int texturesize = 512;
|
EX int texturesize = 512;
|
||||||
EX ld scale = 1.0f;
|
EX ld scale = 1.0f;
|
||||||
EX bool rug_control() { return false; }
|
EX bool rug_control() { return false; }
|
||||||
EX bool in_crystal() { return false; }
|
EX bool in_crystal() { return false; }
|
||||||
EX void reset_view() { }
|
EX void reset_view() { }
|
||||||
|
#if HDR
|
||||||
|
struct using_rugview {};
|
||||||
|
#endif
|
||||||
EX }
|
EX }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1589,12 +1589,14 @@ EX void show() {
|
|||||||
animator(XLATN("Ocean"), env_ocean, 'o');
|
animator(XLATN("Ocean"), env_ocean, 'o');
|
||||||
animator(XLATN("Volcanic Wasteland"), env_volcano, 'v');
|
animator(XLATN("Volcanic Wasteland"), env_volcano, 'v');
|
||||||
if(shmup::on) dialog::addBoolItem_action(XLAT("shmup action"), env_shmup, 'T');
|
if(shmup::on) dialog::addBoolItem_action(XLAT("shmup action"), env_shmup, 'T');
|
||||||
|
#if CAP_FILES && CAP_SHOT
|
||||||
if(cheater) {
|
if(cheater) {
|
||||||
dialog::addSelItem(XLAT("monster turns"), its(numturns), 'n');
|
dialog::addSelItem(XLAT("monster turns"), its(numturns), 'n');
|
||||||
dialog::add_action([] {
|
dialog::add_action([] {
|
||||||
dialog::editNumber(numturns, 0, 100, 1, 0, XLAT("monster turns"), XLAT("Number of turns to pass. Useful when simulating butterflies or cellular automata."));
|
dialog::editNumber(numturns, 0, 100, 1, 0, XLAT("monster turns"), XLAT("Number of turns to pass. Useful when simulating butterflies or cellular automata."));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CAP_RUG
|
#if CAP_RUG
|
||||||
if(rug::rugged) {
|
if(rug::rugged) {
|
||||||
@ -1813,6 +1815,7 @@ void no_init() { }
|
|||||||
|
|
||||||
startanim null_animation { "", no_init, [] { gamescreen(2); }};
|
startanim null_animation { "", no_init, [] { gamescreen(2); }};
|
||||||
|
|
||||||
|
#if CAP_STARTANIM
|
||||||
startanim joukowsky { "Joukowsky transform", no_init, [] {
|
startanim joukowsky { "Joukowsky transform", no_init, [] {
|
||||||
dynamicval<eModel> dm(pmodel, mdJoukowskyInverted);
|
dynamicval<eModel> dm(pmodel, mdJoukowskyInverted);
|
||||||
dynamicval<ld> dt(pconf.model_orientation, ticks / 25.);
|
dynamicval<ld> dt(pconf.model_orientation, ticks / 25.);
|
||||||
@ -1872,6 +1875,7 @@ startanim spin_around { "spinning around", no_init, [] {
|
|||||||
dynamicval<transmatrix> dv(View, spin(-cos_auto(circle_radius)*alpha) * xpush(circle_radius) * spin(alpha) * View);
|
dynamicval<transmatrix> dv(View, spin(-cos_auto(circle_radius)*alpha) * xpush(circle_radius) * spin(alpha) * View);
|
||||||
gamescreen(2);
|
gamescreen(2);
|
||||||
}};
|
}};
|
||||||
|
#endif
|
||||||
|
|
||||||
reaction_t add_to_frame;
|
reaction_t add_to_frame;
|
||||||
|
|
||||||
|
@ -1167,8 +1167,10 @@ void movePlayer(monster *m, int delta) {
|
|||||||
|
|
||||||
cwt.at = c2; afterplayermoved();
|
cwt.at = c2; afterplayermoved();
|
||||||
if(c2->item && c2->land == laAlchemist) c2->wall = m->base->wall;
|
if(c2->item && c2->land == laAlchemist) c2->wall = m->base->wall;
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(m->base->wall == waRoundTable)
|
if(m->base->wall == waRoundTable)
|
||||||
camelot::roundTableMessage(c2);
|
camelot::roundTableMessage(c2);
|
||||||
|
#endif
|
||||||
if(c2->wall == waCloud || c2->wall == waMirror) {
|
if(c2->wall == waCloud || c2->wall == waMirror) {
|
||||||
visibleFor(500);
|
visibleFor(500);
|
||||||
cellwalker cw(c2, 0, false);
|
cellwalker cw(c2, 0, false);
|
||||||
@ -1189,7 +1191,9 @@ void movePlayer(monster *m, int delta) {
|
|||||||
items[itOrbLife] = 0;
|
items[itOrbLife] = 0;
|
||||||
m->dead = true;
|
m->dead = true;
|
||||||
}
|
}
|
||||||
|
#if CAP_COMPLEX2
|
||||||
mine::uncover_full(c2);
|
mine::uncover_full(c2);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(isWatery(c2) && isWatery(m->base) && m->inBoat)
|
if(isWatery(c2) && isWatery(m->base) && m->inBoat)
|
||||||
moveItem(m->base, c2, true);
|
moveItem(m->base, c2, true);
|
||||||
@ -2635,7 +2639,9 @@ EX void turn(int delta) {
|
|||||||
#if CAP_INV
|
#if CAP_INV
|
||||||
if(inv::on) inv::compute();
|
if(inv::on) inv::compute();
|
||||||
#endif
|
#endif
|
||||||
|
#if CAP_COMPLEX2
|
||||||
terracotta::check();
|
terracotta::check();
|
||||||
|
#endif
|
||||||
heat::processfires();
|
heat::processfires();
|
||||||
if(havewhat&HF_WHIRLPOOL) whirlpool::move();
|
if(havewhat&HF_WHIRLPOOL) whirlpool::move();
|
||||||
if(havewhat&HF_WHIRLWIND) whirlwind::move();
|
if(havewhat&HF_WHIRLWIND) whirlwind::move();
|
||||||
|
2
sky.cpp
2
sky.cpp
@ -238,6 +238,7 @@ void celldrawer::draw_ceiling() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case laVariant: {
|
case laVariant: {
|
||||||
|
#if CAP_COMPLEX2
|
||||||
int b = getBits(c);
|
int b = getBits(c);
|
||||||
col = 0x404040;
|
col = 0x404040;
|
||||||
for(int a=0; a<21; a++)
|
for(int a=0; a<21; a++)
|
||||||
@ -245,6 +246,7 @@ void celldrawer::draw_ceiling() {
|
|||||||
col += variant::features[a].color_change;
|
col += variant::features[a].color_change;
|
||||||
col = col & 0x00FF00;
|
col = col & 0x00FF00;
|
||||||
skycol = col;
|
skycol = col;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +161,9 @@ struct hrmap_spherical : hrmap_standard {
|
|||||||
|
|
||||||
transmatrix relative_matrix(cell *c2, cell *c1, const hyperpoint& hint) {
|
transmatrix relative_matrix(cell *c2, cell *c1, const hyperpoint& hint) {
|
||||||
if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) {
|
if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) {
|
||||||
|
#if !ISWEB
|
||||||
printf("building gmatrix0 (size=%d)\n", isize(gmatrix0));
|
printf("building gmatrix0 (size=%d)\n", isize(gmatrix0));
|
||||||
|
#endif
|
||||||
#if CAP_GP
|
#if CAP_GP
|
||||||
auto bak = gp::draw_li;
|
auto bak = gp::draw_li;
|
||||||
#endif
|
#endif
|
||||||
|
10
system.cpp
10
system.cpp
@ -194,7 +194,9 @@ EX void initgame() {
|
|||||||
cwt.at = currentmap->gamestart(); cwt.spin = 0; cwt.mirrored = false;
|
cwt.at = currentmap->gamestart(); cwt.spin = 0; cwt.mirrored = false;
|
||||||
cwt.at->land = firstland;
|
cwt.at->land = firstland;
|
||||||
|
|
||||||
|
#if CAP_COMPLEX2
|
||||||
if(firstland == laBrownian) brownian::init(cwt.at);
|
if(firstland == laBrownian) brownian::init(cwt.at);
|
||||||
|
#endif
|
||||||
|
|
||||||
chaosAchieved = false;
|
chaosAchieved = false;
|
||||||
|
|
||||||
@ -214,7 +216,9 @@ EX void initgame() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((tactic::on || yendor::on || peace::on) && isCyclic(firstland)) {
|
if((tactic::on || yendor::on || peace::on) && isCyclic(firstland)) {
|
||||||
|
#if CAP_COMPLEX2
|
||||||
camelot::anthraxBonus = items[itHolyGrail];
|
camelot::anthraxBonus = items[itHolyGrail];
|
||||||
|
#endif
|
||||||
cwt.at->move(0)->land = firstland;
|
cwt.at->move(0)->land = firstland;
|
||||||
if(firstland == laWhirlpool) cwt.at->move(0)->wall = waSea;
|
if(firstland == laWhirlpool) cwt.at->move(0)->wall = waSea;
|
||||||
|
|
||||||
@ -366,7 +370,9 @@ EX void initgame() {
|
|||||||
#if CAP_INV
|
#if CAP_INV
|
||||||
if(inv::on) inv::init();
|
if(inv::on) inv::init();
|
||||||
#endif
|
#endif
|
||||||
|
#if CAP_COMPLEX2
|
||||||
mine::auto_teleport_charges();
|
mine::auto_teleport_charges();
|
||||||
|
#endif
|
||||||
if(!use_special_land) {
|
if(!use_special_land) {
|
||||||
if(firstland != (princess::challenge ? laPalace : laIce)) cheater++;
|
if(firstland != (princess::challenge ? laPalace : laIce)) cheater++;
|
||||||
}
|
}
|
||||||
@ -1265,7 +1271,9 @@ EX void stop_game() {
|
|||||||
princess::reviveAt = 0;
|
princess::reviveAt = 0;
|
||||||
princess::forceVizier = false;
|
princess::forceVizier = false;
|
||||||
princess::forceMouse = false;
|
princess::forceMouse = false;
|
||||||
|
#if CAP_COMPLEX2
|
||||||
camelot::knighted = 0;
|
camelot::knighted = 0;
|
||||||
|
#endif
|
||||||
// items[itGreenStone] = 100;
|
// items[itGreenStone] = 100;
|
||||||
clearMemory();
|
clearMemory();
|
||||||
game_active = false;
|
game_active = false;
|
||||||
@ -1495,7 +1503,9 @@ EX void start_game() {
|
|||||||
ignored_memory_warning = false;
|
ignored_memory_warning = false;
|
||||||
check_cgi();
|
check_cgi();
|
||||||
cgi.require_basics();
|
cgi.require_basics();
|
||||||
|
#if CAP_ARCM
|
||||||
arcm::current.compute_geometry();
|
arcm::current.compute_geometry();
|
||||||
|
#endif
|
||||||
initcells();
|
initcells();
|
||||||
expansion.reset();
|
expansion.reset();
|
||||||
|
|
||||||
|
7
tour.cpp
7
tour.cpp
@ -7,6 +7,13 @@
|
|||||||
|
|
||||||
#include "hyper.h"
|
#include "hyper.h"
|
||||||
namespace hr {
|
namespace hr {
|
||||||
|
|
||||||
|
#if !CAP_TOUR
|
||||||
|
EX namespace tour {
|
||||||
|
EX always_false on;
|
||||||
|
EX }
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CAP_TOUR
|
#if CAP_TOUR
|
||||||
|
|
||||||
/** \brief Variables and function related to Guided Tour and other presentations. */
|
/** \brief Variables and function related to Guided Tour and other presentations. */
|
||||||
|
2
util.cpp
2
util.cpp
@ -263,6 +263,7 @@ cld exp_parser::parse(int prio) {
|
|||||||
force_eat(")");
|
force_eat(")");
|
||||||
res = edge_of_triangle_with_angles(M_PI/2, M_PI/a, M_PI/b);
|
res = edge_of_triangle_with_angles(M_PI/2, M_PI/a, M_PI/b);
|
||||||
}
|
}
|
||||||
|
#if CAP_ARCM
|
||||||
else if(eat("arcmedge(")) {
|
else if(eat("arcmedge(")) {
|
||||||
vector<int> vals;
|
vector<int> vals;
|
||||||
vals.push_back(iparse(0));
|
vals.push_back(iparse(0));
|
||||||
@ -280,6 +281,7 @@ cld exp_parser::parse(int prio) {
|
|||||||
if(extra_params.count("distunit"))
|
if(extra_params.count("distunit"))
|
||||||
res /= extra_params["distunit"];
|
res /= extra_params["distunit"];
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else if(eat("regangle(")) {
|
else if(eat("regangle(")) {
|
||||||
cld edgelen = parse(0);
|
cld edgelen = parse(0);
|
||||||
if(extra_params.count("distunit")) {
|
if(extra_params.count("distunit")) {
|
||||||
|
@ -1063,7 +1063,11 @@ void save_mode_data(hstream& f) {
|
|||||||
f.write<char>(chaosmode);
|
f.write<char>(chaosmode);
|
||||||
f.write<char>(shmup::on);
|
f.write<char>(shmup::on);
|
||||||
f.write<char>(inv::on);
|
f.write<char>(inv::on);
|
||||||
|
#if CAP_TOUR
|
||||||
f.write<char>(tour::on);
|
f.write<char>(tour::on);
|
||||||
|
#else
|
||||||
|
f.write<char>(false);
|
||||||
|
#endif
|
||||||
f.write<char>(peace::on);
|
f.write<char>(peace::on);
|
||||||
f.write<char>(peace::otherpuzzles);
|
f.write<char>(peace::otherpuzzles);
|
||||||
f.write<char>(peace::explore_other);
|
f.write<char>(peace::explore_other);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user