1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-06-07 13:22:11 +00:00

expansion, ctrl+E cheat, fix with distance calculation

This commit is contained in:
Zeno Rogue
2017-04-04 11:13:15 +02:00
parent 0d7d2cf825
commit 645a64e8c9
15 changed files with 684 additions and 442 deletions
+88 -20
View File
@@ -2821,7 +2821,12 @@ bool bugsNearby(cell *c, int dist = 2) {
int minecolors[8] = {
0xFFFFFF, 0xF0, 0xF060, 0xF00000,
0x60, 0x600000, 0x00C0C0, 0
0x60, 0x600000, 0x00C0C0, 0x000000
};
int distcolors[8] = {
0xFFFFFF, 0xF0, 0xF060, 0xF00000,
0xA0A000, 0xA000A0, 0x00A0A0, 0xFFD500
};
const char* minetexts[8] = {
@@ -3012,6 +3017,8 @@ transmatrix pushone() { return euclid ? eupush(1, 0) : xpush(sphere?.5 : 1); }
void drawMovementArrows(cell *c, transmatrix V) {
if(viewdists) return;
for(int d=0; d<8; d++) {
movedir md = vectodir(spin(-d * M_PI/4) * tC0(pushone()));
@@ -3725,7 +3732,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
ivoryz = isGravityLand(c->land);
transmatrix& gm = gmatrix[c];
bool orig = (gm[2][2] == 0 || fabs(gm[2][2]-1) >= fabs(V[2][2]-1)) - 1e-8;
bool orig = (gm[2][2] == 0 || fabs(gm[2][2]-1) >= fabs(V[2][2]-1) - 1e-8);
if(sphere && vid.alpha > 1) {
long double d = V[2][2];
@@ -3735,7 +3742,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
if(sphere && vid.alpha <= 1) {
if(V[2][2] < -.8) return;
}
if(orig) gm = V;
ld dist0 = hdist0(tC0(V)) - 1e-6;
@@ -3859,6 +3866,19 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
int wcol, fcol, asciicol;
setcolors(c, wcol, fcol);
if(viewdists) {
int cd = celldistance(c, cwt.c);
string label = its(cd);
// string label = its(fieldpattern::getriverdistleft(c)) + its(fieldpattern::getriverdistright(c));
int dc = distcolors[cd&7];
wcol = gradient(wcol, dc, 0, .4, 1);
fcol = gradient(fcol, dc, 0, .4, 1);
/* queuepolyat(V, shFloor[ct6], darkena(gradient(0, distcolors[cd&7], 0, .25, 1), fd, 0xC0),
PPR_TEXT); */
queuestr(V, (cd > 9 ? .6 : 1) * .2, label, 0xFF000000 + distcolors[cd&7], 1);
}
asciicol = wcol;
if(c->land == laNone && c->wall == waNone)
@@ -4316,12 +4336,6 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
#ifndef NOEDIT
if(viewdists) {
string label = its(celldistance(c, cwt.c));
// string label = its(fieldpattern::getriverdistleft(c)) + its(fieldpattern::getriverdistright(c));
queuestr(V, .5, label, 0xFFFFFFFF);
}
if(cmode == emMapEditor && mapeditor::displaycodes) {
int labeli = mapeditor::displaycodes == 1 ? mapeditor::realpattern(c) : mapeditor::subpattern(c);
@@ -4353,7 +4367,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
queuestr(V, .6, buf, col);
#endif
}
if(realred(c->wall) && !wmspatial) {
int s = snakelevel(c);
if(s >= 1)
@@ -5859,6 +5873,8 @@ void describeMouseover() {
if(webdisplay & 8) {
out += " LP:" + itsh(c->landparam)+"/"+its(turncount);
out += " CD:" + its(celldist(c));
out += " D:" + its(c->mpdist);
@@ -6375,6 +6391,8 @@ void centerpc(ld aspd) {
void drawmovestar(double dx, double dy) {
if(viewdists) return;
DEBB(DF_GRAPH, (debugfile,"draw movestar\n"));
if(!playerfound) return;
@@ -6574,6 +6592,8 @@ void checkpanjoy(double t) {
int realradius;
bool sidescreen;
void calcparam() {
DEBB(DF_GRAPH, (debugfile,"calc param\n"));
vid.xcenter = vid.xres / 2;
@@ -6585,10 +6605,18 @@ void calcparam() {
realradius = min(realradius, vid.radius);
sidescreen = false;
if(vid.xres < vid.yres) {
vid.radius = int(vid.scale * vid.xcenter) - (ISIOS ? 10 : 2);
vid.ycenter = vid.yres - realradius - vid.fsize - (ISIOS ? 10 : 0);
}
else {
if(vid.xres >= vid.yres * 4/3 && dialog::sidedialog && cmode == emNumber)
sidescreen = true;
if(viewdists && cmode == emNormal && vid.xres >= vid.yres * 4/3) sidescreen = true;
if(sidescreen) vid.xcenter = vid.yres/2;
}
ld eye = vid.eye; if(pmodel || rug::rugged) eye = 0;
vid.beta = 1 + vid.alpha + eye;
@@ -7069,6 +7097,42 @@ void drawStats() {
#ifdef ROGUEVIZ
if(rogueviz::on) return;
#endif
if(viewdists && sidescreen) {
dialog::init("");
int qty[64];
vector<cell*>& ac = currentmap->allcells();
for(int i=0; i<64; i++) qty[i] = 0;
for(int i=0; i<size(ac); i++) {
int d = celldistance(ac[i], cwt.c);
if(d >= 0 && d < 64) qty[d]++;
}
if(geometry == gNormal)
for(int i=purehepta?6:8; i<=15; i++)
qty[i] =
purehepta ?
3*qty[i-1] - qty[i-2]
: qty[i-1] + qty[i-2] + qty[i-3] - qty[i-4];
if(geometry == gEuclid)
for(int i=8; i<=15; i++) qty[i] = 6*i;
for(int i=0; i<64; i++) if(qty[i])
dialog::addInfo(its(qty[i]), distcolors[i&7]);
if(geometry == gNormal && !purehepta) {
dialog::addBreak(200);
dialog::addInfo("a(d+4) = a(d+3) + a(d+2) + a(d+1) - a(d)", 0xFFFFFF);
dialog::addInfo("a(d) ~ 1.72208^d", 0xFFFFFF);
}
if(geometry == gNormal && purehepta) {
dialog::addBreak(200);
dialog::addInfo("a(d+2) = 3a(d+1) - a(d+2)", 0xFFFFFF);
dialog::addInfo("a(d) ~ 2.61803^d", 0xFFFFFF);
}
if(geometry == gEuclid) {
dialog::addBreak(300);
dialog::addInfo("a(n) = 6n", 0xFFFFFF);
}
dialog::display();
}
if(sidescreen) return;
instat = false;
bool portrait = vid.xres < vid.yres;
int colspace = portrait ? (vid.yres - vid.xres - vid.fsize*3) : (vid.xres - vid.yres - 16) / 2;
@@ -7402,7 +7466,8 @@ void drawscreen() {
if(cmode != emNormal && cmode != emDraw && cmode != emCustomizeChar) darken = 2;
if(cmode == emQuit && !canmove) darken = 0;
if(cmode == emOverview) darken = 16;
if(cmode == emNumber && dialog::lastmode == em3D) darken = 0;
if(sidescreen) darken = 0;
#ifndef NOEDIT
if(cmode == emMapEditor && !mapeditor::subscreen && !mapeditor::choosefile) darken = 0;
@@ -7581,17 +7646,20 @@ void setvideomode() {
void restartGraph() {
DEBB(DF_INIT, (debugfile,"restartGraph\n"));
if(euclid) {
centerover = euclideanAtCreate(0,0);
}
else {
viewctr.h = &origin;
viewctr.spin = 0;
viewctr.mirrored = false;
}
View = Id;
webdisplay = 0;
if(sphere) View = spin(-M_PI/2);
if(currentmap) {
if(euclid) {
centerover = euclideanAtCreate(0,0);
}
else {
viewctr.h = currentmap->getOrigin();
viewctr.spin = 0;
viewctr.mirrored = false;
}
if(sphere) View = spin(-M_PI/2);
}
}
void resetview() {