mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-25 16:37:00 +00:00
tour:: better explained mode changes
This commit is contained in:
parent
d751e84a54
commit
2e2bb03edd
1
hyper.h
1
hyper.h
@ -1761,6 +1761,7 @@ namespace tour {
|
|||||||
static const int FINALSLIDE=16;
|
static const int FINALSLIDE=16;
|
||||||
static const int QUICKGEO=32;
|
static const int QUICKGEO=32;
|
||||||
static const int SIDESCREEN = 64;
|
static const int SIDESCREEN = 64;
|
||||||
|
static const int USE_SLIDE_NAME = 128;
|
||||||
|
|
||||||
extern slide slideHypersian;
|
extern slide slideHypersian;
|
||||||
extern slide slideExpansion;
|
extern slide slideExpansion;
|
||||||
|
16
quit.cpp
16
quit.cpp
@ -411,9 +411,19 @@ void showMission() {
|
|||||||
if(intour) {
|
if(intour) {
|
||||||
#if CAP_TOUR
|
#if CAP_TOUR
|
||||||
if(canmove) {
|
if(canmove) {
|
||||||
dialog::addItem(XLAT("spherical geometry"), '1');
|
if(sphere) {
|
||||||
dialog::addItem(XLAT("Euclidean geometry"), '2');
|
dialog::addItem(XLAT("return to your game"), '1');
|
||||||
dialog::addItem(XLAT("more curved hyperbolic geometry"), '3');
|
dialog::addItem(XLAT(vid.alpha < 2 ? "orthogonal projection" : "stereographic projection"), '3');
|
||||||
|
}
|
||||||
|
else if(euclid) {
|
||||||
|
dialog::addItem(XLAT("return to your game"), '2');
|
||||||
|
dialog::addBreak(100);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dialog::addItem(XLAT("spherical geometry"), '1');
|
||||||
|
dialog::addItem(XLAT("Euclidean geometry"), '2');
|
||||||
|
}
|
||||||
|
// dialog::addItem(XLAT("more curved hyperbolic geometry"), '3');
|
||||||
}
|
}
|
||||||
if(!items[itOrbTeleport])
|
if(!items[itOrbTeleport])
|
||||||
dialog::addItem(XLAT("teleport away"), '4');
|
dialog::addItem(XLAT("teleport away"), '4');
|
||||||
|
65
tour.cpp
65
tour.cpp
@ -72,6 +72,13 @@ void slidehelp() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void return_geometry() {
|
||||||
|
popGame();
|
||||||
|
vid.scale = 1; vid.alpha = 1;
|
||||||
|
presentation(pmGeometryReset);
|
||||||
|
addMessage(XLAT("Returned to your game."));
|
||||||
|
}
|
||||||
|
|
||||||
bool handleKeyTour(int sym, int uni) {
|
bool handleKeyTour(int sym, int uni) {
|
||||||
if(!tour::on) return false;
|
if(!tour::on) return false;
|
||||||
if(!(cmode & sm::DOTOUR)) return false;
|
if(!(cmode & sm::DOTOUR)) return false;
|
||||||
@ -80,7 +87,7 @@ bool handleKeyTour(int sym, int uni) {
|
|||||||
if((sym == SDLK_RETURN || sym == SDLK_KP_ENTER) && (!inhelp || (flags & QUICKSKIP))) {
|
if((sym == SDLK_RETURN || sym == SDLK_KP_ENTER) && (!inhelp || (flags & QUICKSKIP))) {
|
||||||
popScreenAll();
|
popScreenAll();
|
||||||
if(geometry || nonbitrunc) {
|
if(geometry || nonbitrunc) {
|
||||||
popGame();
|
return_geometry();
|
||||||
if(!(flags & QUICKGEO)) return true;
|
if(!(flags & QUICKGEO)) return true;
|
||||||
}
|
}
|
||||||
if(flags & FINALSLIDE) return true;
|
if(flags & FINALSLIDE) return true;
|
||||||
@ -103,10 +110,10 @@ bool handleKeyTour(int sym, int uni) {
|
|||||||
if(inhelp) slidehelp();
|
if(inhelp) slidehelp();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(sym == '1' || sym == '2' || sym == '3') {
|
if(sym == '1' || sym == '2') { // || sym == '3') {
|
||||||
int legal = slides[currentslide].flags & 7;
|
int legal = slides[currentslide].flags & 7;
|
||||||
|
|
||||||
if(legal == LEGAL_NONE) {
|
if(legal == LEGAL_NONE || legal == LEGAL_HYPERBOLIC) {
|
||||||
addMessage(XLAT("You cannot change geometry in this slide."));
|
addMessage(XLAT("You cannot change geometry in this slide."));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -140,18 +147,36 @@ bool handleKeyTour(int sym, int uni) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(geometry || nonbitrunc) {
|
if(geometry || nonbitrunc) {
|
||||||
popGame();
|
return_geometry();
|
||||||
presentation(pmGeometryReset);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
presentation(pmGeometry);
|
presentation(pmGeometry);
|
||||||
|
|
||||||
if(sym == '1') targetgeometry = gSphere;
|
if(sym == '1') targetgeometry = gSphere, vid.alpha = 1, vid.scale = .5;
|
||||||
if(sym == '2') targetgeometry = gEuclid;
|
if(sym == '2') targetgeometry = gEuclid, vid.alpha = 1, vid.scale = .5;
|
||||||
|
|
||||||
firstland = specialland = cwt.c->land;
|
firstland = specialland = cwt.c->land;
|
||||||
restartGame(sym == '3' ? rg::bitrunc : rg::geometry, true);
|
restartGame(sym == '3' ? rg::bitrunc : rg::geometry, true);
|
||||||
presentation(pmGeometryStart);
|
presentation(pmGeometryStart);
|
||||||
|
string x;
|
||||||
|
if(slides[currentslide].flags & USE_SLIDE_NAME) {
|
||||||
|
if(sym == '1') x = XLAT("Spherical version of %the1. ", s0 + "'" + slides[currentslide].name + "'");
|
||||||
|
if(sym == '2') x = XLAT("Euclidean version of %the1. ", s0 + "'" + slides[currentslide].name + "'");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(sym == '1') x = XLAT("Spherical version of %the1. ", cwt.c->land);
|
||||||
|
if(sym == '2') x = XLAT("Euclidean version of %the1. ", cwt.c->land);
|
||||||
|
}
|
||||||
|
if(mousing)
|
||||||
|
addMessage(x + XLAT("Click again to go back to your game."));
|
||||||
|
else
|
||||||
|
addMessage(x + XLAT("Press %1 again to go back to your game.", dialog::keyname(sym)));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(sym == '3' && sphere) {
|
||||||
|
if(vid.alpha < 2) vid.scale = 400, vid.alpha = 400; else vid.scale = .5, vid.alpha = 1;
|
||||||
|
addMessage(XLAT("Changed the projection."));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(sym == '4') {
|
if(sym == '4') {
|
||||||
@ -301,7 +326,7 @@ void start() {
|
|||||||
|
|
||||||
slide default_slides[] = {
|
slide default_slides[] = {
|
||||||
#if ISMOBILE
|
#if ISMOBILE
|
||||||
{"Note for mobiles", 10, LEGAL_HYPERBOLIC | QUICKSKIP,
|
{"Note for mobiles", 10, LEGAL_NONE | QUICKSKIP,
|
||||||
"This tutorial is designed for computers, "
|
"This tutorial is designed for computers, "
|
||||||
"and keys are given for all actions. It will "
|
"and keys are given for all actions. It will "
|
||||||
"work without a keyboard though, although less "
|
"work without a keyboard though, although less "
|
||||||
@ -319,7 +344,7 @@ slide default_slides[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{"Introduction", 10, LEGAL_HYPERBOLIC | QUICKSKIP,
|
{"Introduction", 10, LEGAL_NONE | QUICKSKIP,
|
||||||
"This tutorial is mostly aimed to show what is "
|
"This tutorial is mostly aimed to show what is "
|
||||||
"special about the geometry used by HyperRogue. "
|
"special about the geometry used by HyperRogue. "
|
||||||
"It also shows the basics of gameplay, and "
|
"It also shows the basics of gameplay, and "
|
||||||
@ -351,7 +376,7 @@ slide default_slides[] = {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Basics of gameplay", 11, LEGAL_HYPERBOLIC,
|
{"Basics of gameplay", 11, LEGAL_ANY,
|
||||||
"The game starts in the Icy Lands. Collect the Ice Diamonds "
|
"The game starts in the Icy Lands. Collect the Ice Diamonds "
|
||||||
"(press F1 if you do not know how to move). "
|
"(press F1 if you do not know how to move). "
|
||||||
"After you collect many of them, monsters will start to pose a challenge.\n"
|
"After you collect many of them, monsters will start to pose a challenge.\n"
|
||||||
@ -408,7 +433,7 @@ slide default_slides[] = {
|
|||||||
SHOWLAND( l == laIce );
|
SHOWLAND( l == laIce );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Expansion", 22, LEGAL_ANY,
|
{"Expansion", 22, LEGAL_ANY | USE_SLIDE_NAME,
|
||||||
"The next slide shows the number of cells in distance 1, 2, 3, ... from you. "
|
"The next slide shows the number of cells in distance 1, 2, 3, ... from you. "
|
||||||
"It grows exponentially: there are more than 10^100 cells "
|
"It grows exponentially: there are more than 10^100 cells "
|
||||||
"in radius 1000 around you, and you will move further away during the game!\n\n"
|
"in radius 1000 around you, and you will move further away during the game!\n\n"
|
||||||
@ -428,7 +453,7 @@ slide default_slides[] = {
|
|||||||
SHOWLAND( l == laIce );
|
SHOWLAND( l == laIce );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Tiling and Tactics", 23, LEGAL_ANY,
|
{"Tiling and Tactics", 23, LEGAL_ANY | USE_SLIDE_NAME,
|
||||||
"The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, "
|
"The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, "
|
||||||
"might appear shallow, but hyperbolic geometry is essential even there. "
|
"might appear shallow, but hyperbolic geometry is essential even there. "
|
||||||
"In the next slide, you are attacked by two monsters at once. "
|
"In the next slide, you are attacked by two monsters at once. "
|
||||||
@ -589,7 +614,7 @@ slide default_slides[] = {
|
|||||||
SHOWLAND ( l == laCrossroads || l == laBurial );
|
SHOWLAND ( l == laCrossroads || l == laBurial );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Periodic patterns", 30, LEGAL_UNLIMITED,
|
{"Periodic patterns", 30, LEGAL_UNLIMITED | USE_SLIDE_NAME,
|
||||||
"Hyperbolic geometry yields much more interesting periodic patterns "
|
"Hyperbolic geometry yields much more interesting periodic patterns "
|
||||||
"than Euclidean.",
|
"than Euclidean.",
|
||||||
[] (presmode mode) {
|
[] (presmode mode) {
|
||||||
@ -623,7 +648,7 @@ slide default_slides[] = {
|
|||||||
l == laEmerald || l == laWineyard || l == laPower );
|
l == laEmerald || l == laWineyard || l == laPower );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Fractal landscapes", 32, LEGAL_UNLIMITED,
|
{"Fractal landscapes", 32, LEGAL_UNLIMITED | USE_SLIDE_NAME,
|
||||||
"On the following slide, the colors change smoothly in the whole infinite world. "
|
"On the following slide, the colors change smoothly in the whole infinite world. "
|
||||||
"Again, this works better than in Euclidean geometry.",
|
"Again, this works better than in Euclidean geometry.",
|
||||||
[] (presmode mode) {
|
[] (presmode mode) {
|
||||||
@ -682,24 +707,24 @@ slide default_slides[] = {
|
|||||||
if(mode == 3) pmodel = mdDisk;
|
if(mode == 3) pmodel = mdDisk;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Beltrami-Klein model", 43, LEGAL_ANY,
|
{"Beltrami-Klein model", 43, LEGAL_ANY | USE_SLIDE_NAME,
|
||||||
"This model renders straight lines as straight, but it distorts angles.",
|
"This model renders straight lines as straight, but it distorts angles.",
|
||||||
[] (presmode mode) {
|
[] (presmode mode) {
|
||||||
if(mode == 1) vid.alpha = 0;
|
if(mode == 1 || mode == pmGeometryReset || mode == pmGeometry) vid.alpha = 0;
|
||||||
if(mode == 3) vid.alpha = 1;
|
if(mode == 3) vid.alpha = 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Gans model", 44, LEGAL_ANY,
|
{"Gans model", 44, LEGAL_ANY | USE_SLIDE_NAME,
|
||||||
"Yet another model, which corresponds to orthographic projection of the "
|
"Yet another model, which corresponds to orthographic projection of the "
|
||||||
"sphere. Poincaré disk model, Beltrami-Klein model, and the Gans "
|
"sphere. Poincaré disk model, Beltrami-Klein model, and the Gans "
|
||||||
"model are all obtained by looking at either the hyperboloid model or an "
|
"model are all obtained by looking at either the hyperboloid model or an "
|
||||||
"equidistant surface from various distances.",
|
"equidistant surface from various distances.",
|
||||||
[] (presmode mode) {
|
[] (presmode mode) {
|
||||||
if(mode == 1) vid.alpha = 400, vid.scale = 150;
|
if(mode == 1 || mode == pmGeometryReset || mode == pmGeometry) vid.alpha = 400, vid.scale = 150;
|
||||||
if(mode == 3) vid.alpha = vid.scale = 1;
|
if(mode == 3) vid.alpha = vid.scale = 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{"Band model", 45, LEGAL_NONEUC,
|
{"Band model", 45, LEGAL_NONEUC | USE_SLIDE_NAME,
|
||||||
"The band model is the hyperbolic analog of the Mercator projection of the sphere: "
|
"The band model is the hyperbolic analog of the Mercator projection of the sphere: "
|
||||||
"a given straight line is rendered as a straight line, and the rest of the "
|
"a given straight line is rendered as a straight line, and the rest of the "
|
||||||
"world is mapped conformally, that is, angles are not distorted. "
|
"world is mapped conformally, that is, angles are not distorted. "
|
||||||
@ -733,7 +758,7 @@ slide default_slides[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
#if !ISWEB
|
#if !ISWEB
|
||||||
{"Shoot'em up mode", 52, LEGAL_NONE,
|
{"Shoot'em up mode", 52, LEGAL_NONE | USE_SLIDE_NAME,
|
||||||
"In the shoot'em up mode, space and time is continuous. "
|
"In the shoot'em up mode, space and time is continuous. "
|
||||||
"You attack by throwing knives. "
|
"You attack by throwing knives. "
|
||||||
"Very fun with two players!\n\n"
|
"Very fun with two players!\n\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user