cleanup: help. Also rug help displayed when rug is on

This commit is contained in:
Zeno Rogue 2018-02-26 13:15:33 +01:00
parent 283c6bba39
commit 9a1093fc6c
7 changed files with 167 additions and 140 deletions

191
help.cpp
View File

@ -5,34 +5,71 @@ string help;
function<void()> help_delegate; function<void()> help_delegate;
string buildHelpText() { struct help_extension {
char key;
string text;
reaction_t action;
};
vector<help_extension> help_extensions;
vector<string> extra_keys = {
"1 = orthogonal/Gans model",
"2 = small Poincare model/stereographic projection",
"3 = big Poincare model/stereographic projection",
"4 = Klein model/gnomonic projection",
"5 = change wall display mode",
"6 = change grid",
"7 = change heptagon marking",
"8 = change background color",
"9 = hyperboloid model",
"qweasdzxc, hjklyubn, numpad = move/skip turn",
"arrows = panning",
"o = world overview",
"v = menu",
"F1 = help",
"F5 = restart game",
"F10 = quit game",
"Esc = quest status",
"Alt+Enter = full screen",
"Alt = highlight interesting stuff",
"t = use a ranged Orb (target center of the screen)",
"g = drop a Dead Orb",
"click left mouse button = move/skip",
"shift+click left mouse button = use ranged Orb",
"click right mouse button = context help",
"mousewheel up = panning",
"hold middle mouse button = panning",
"mousewheel down = move/skip",
"shift + mousewheel = change projection",
"ctrl + mousewheel = change zoom",
"ctrl + shift + mousewheel = change both projection and zoom",
"ctrl + hold middle button = move the screen",
"shift + middle button = reset position"
};
void buildHelpText() {
DEBB(DF_GRAPH, (debugfile,"buildHelpText\n")); DEBB(DF_GRAPH, (debugfile,"buildHelpText\n"));
#if CAP_ROGUEVIZ help = XLAT("Welcome to HyperRogue");
if(rogueviz::on) return rogueviz::makehelp();
#endif
string h;
h += XLAT("Welcome to HyperRogue");
#if ISANDROID #if ISANDROID
h += XLAT(" for Android"); help += XLAT(" for Android");
#endif #endif
#if ISIOS #if ISIOS
h += XLAT(" for iOS"); help += XLAT(" for iOS");
#endif #endif
h += XLAT("! (version %1)\n\n", VER); help += XLAT("! (version %1)\n\n", VER);
h += XLAT( help += XLAT(
"You have been trapped in a strange, non-Euclidean world. Collect as much treasure as possible " "You have been trapped in a strange, non-Euclidean world. Collect as much treasure as possible "
"before being caught by monsters. The more treasure you collect, the more " "before being caught by monsters. The more treasure you collect, the more "
"monsters come to hunt you, as long as you are in the same land type. The " "monsters come to hunt you, as long as you are in the same land type. The "
"Orbs of Yendor are the ultimate treasure; get at least one of them to win the game!" "Orbs of Yendor are the ultimate treasure; get at least one of them to win the game!"
); );
h += XLAT(" (press ESC for some hints about it)."); help += XLAT(" (press ESC for some hints about it).");
h += "\n\n"; help += "\n\n";
if(!shmup::on && !hardcore) if(!shmup::on && !hardcore)
h += XLAT( help += XLAT(
"You can fight most monsters by moving into their location. " "You can fight most monsters by moving into their location. "
"The monster could also kill you by moving into your location, but the game " "The monster could also kill you by moving into your location, but the game "
"automatically cancels all moves which result in that.\n\n" "automatically cancels all moves which result in that.\n\n"
@ -40,22 +77,22 @@ string buildHelpText() {
#if CAP_INV #if CAP_INV
if(inv::on) if(inv::on)
h += XLAT( help += XLAT(
inv::helptext inv::helptext
); );
else else
#endif #endif
h += XLAT( help += XLAT(
"There are many lands in HyperRogue. Collect 10 treasure " "There are many lands in HyperRogue. Collect 10 treasure "
"in the given land type to complete it; this enables you to " "in the given land type to complete it; this enables you to "
"find the magical Orbs of this land, and in some cases " "find the magical Orbs of this land, and in some cases "
"get access to new lands. At 25 treasures " "get access to new lands. At 25 treasures "
"this type of Orbs starts appearing in other lands as well. Press 'o' to " "this type of Orbs starts appearing in other lands as well. Press 'o' to "
"get the details of all the Lands.\n\n"); "get the details of all the Lands.\n\n");
h += "\n\n"; help += "\n\n";
#if ISMOBILE #if ISMOBILE
h += XLAT( help += XLAT(
"Usually, you move by touching somewhere on the map; you can also touch one " "Usually, you move by touching somewhere on the map; you can also touch one "
"of the four buttons on the map corners to change this (to scroll the map " "of the four buttons on the map corners to change this (to scroll the map "
"or get information about map objects). You can also touch the " "or get information about map objects). You can also touch the "
@ -63,57 +100,64 @@ string buildHelpText() {
); );
#else #else
if(DEFAULTCONTROL) if(DEFAULTCONTROL)
h += XLAT( help += XLAT(
"Move with mouse, num pad, qweadzxc, or hjklyubn. Wait by pressing 's' or '.'. Spin the world with arrows, PageUp/Down, and Home/Space. " "Move with mouse, num pad, qweadzxc, or hjklyubn. Wait by pressing 's' or '.'. Spin the world with arrows, PageUp/Down, and Home/Space. "
"To save the game you need an Orb of Safety. Press 'v' for the main menu (configuration, special modes, etc.), ESC for the quest status.\n\n" "To save the game you need an Orb of Safety. Press 'v' for the main menu (configuration, special modes, etc.), ESC for the quest status.\n\n"
); );
h += XLAT( help += XLAT(
"You can right click any element to get more information about it.\n\n" "You can right click any element to get more information about it.\n\n"
); );
#if ISMAC #if ISMAC
h += XLAT("(You can also use right Shift)\n\n"); help += XLAT("(You can also use right Shift)\n\n");
#endif #endif
#endif #endif
h += XLAT("See more on the website: ") help += XLAT("See more on the website: ")
+ "http//roguetemple.com/z/hyper/\n\n"; + "http//roguetemple.com/z/hyper/\n\n";
#if CAP_TOUR #if CAP_TOUR
h += XLAT("Try the Tutorial to help with understanding the " help += XLAT("Try the Tutorial to help with understanding the "
"geometry of HyperRogue (menu -> special modes).\n\n"); "geometry of HyperRogue (menu -> special modes).\n\n");
#endif #endif
h += XLAT("Still confused? Read the FAQ on the HyperRogue website!\n\n"); help += XLAT("Still confused? Read the FAQ on the HyperRogue website!\n\n");
return h; help_extensions.clear();
help_extensions.push_back(help_extension{'c', XLAT("credits"), [] () { buildCredits(); }});
#if ISMOBILE == 0
help_extensions.push_back(help_extension{'k', XLAT("advanced keyboard shortcuts"), [] () {
help = "";
for(string s: extra_keys) help += s, help += "\n\n";
}});
#endif
} }
string buildCredits() { void buildCredits() {
string h; help = "";
h += XLAT("game design, programming, texts and graphics by Zeno Rogue <zeno@attnam.com>\n\n"); help += XLAT("game design, programming, texts and graphics by Zeno Rogue <zeno@attnam.com>\n\n");
if(lang() != 0) if(lang() != 0)
h += XLAT("add credits for your translation here"); help += XLAT("add credits for your translation here");
#ifndef NOLICENSE #ifndef NOLICENSE
h += XLAT( help += XLAT(
"released under GNU General Public License version 2 and thus " "released under GNU General Public License version 2 and thus "
"comes with absolutely no warranty; see COPYING for details\n\n" "comes with absolutely no warranty; see COPYING for details\n\n"
); );
#endif #endif
h += XLAT( help += XLAT(
"special thanks to the following people for their bug reports, feature requests, porting, and other help:\n\n%1\n\n", "special thanks to the following people for their bug reports, feature requests, porting, and other help:\n\n%1\n\n",
"Konstantin Stupnik, ortoslon, chrysn, Adam Borowski, Damyan Ivanov, Ryan Farnsley, mcobit, Darren Grey, tricosahedron, Maciej Chojecki, Marek Čtrnáct, " "Konstantin Stupnik, ortoslon, chrysn, Adam Borowski, Damyan Ivanov, Ryan Farnsley, mcobit, Darren Grey, tricosahedron, Maciej Chojecki, Marek Čtrnáct, "
"wonderfullizardofoz, Piotr Migdał, tehora, Michael Heerdegen, Sprite Guard, zelda0x181e, Vipul, snowyowl0, Patashu, phenomist, Alan Malloy, Tom Fryers, Sinquetica, _monad, CtrlAltDestroy, jruderman, " "wonderfullizardofoz, Piotr Migdał, tehora, Michael Heerdegen, Sprite Guard, zelda0x181e, Vipul, snowyowl0, Patashu, phenomist, Alan Malloy, Tom Fryers, Sinquetica, _monad, CtrlAltDestroy, jruderman, "
"Kojiguchi Kazuki, baconcow, Alan, SurelyYouJest, hotdogPi" "Kojiguchi Kazuki, baconcow, Alan, SurelyYouJest, hotdogPi"
); );
#ifdef EXTRALICENSE #ifdef EXTRALICENSE
h += EXTRALICENSE; help += EXTRALICENSE;
#endif #endif
#if !ISMOBILE #if !ISMOBILE
h += XLAT( help += XLAT(
"\n\nSee sounds/credits.txt for credits for sound effects" "\n\nSee sounds/credits.txt for credits for sound effects"
); );
#endif #endif
if(musiclicense != "") h += musiclicense; if(musiclicense != "") help += musiclicense;
return h;
} }
string pushtext(stringpar p) { string pushtext(stringpar p) {
@ -805,13 +849,6 @@ void describeMouseover() {
if(mousey < vid.fsize * 3/2) getcstat = SDLK_F1; if(mousey < vid.fsize * 3/2) getcstat = SDLK_F1;
} }
struct help_extension {
char key;
string text;
reaction_t action;
};
vector<help_extension> help_extensions;
void showHelp() { void showHelp() {
gamescreen(2); gamescreen(2);
cmode = sm::HELP | sm::DOTOUR; cmode = sm::HELP | sm::DOTOUR;
@ -821,8 +858,6 @@ void showHelp() {
return; return;
} }
if(help == "@") help = buildHelpText();
string help2; string help2;
if(help[0] == '@') { if(help[0] == '@') {
int iv = help.find("\t"); int iv = help.find("\t");
@ -852,60 +887,40 @@ void showHelp() {
act(); act();
return; return;
} }
if(sym == SDLK_F1 && help != "@") if(sym == SDLK_F1) {
help = "@"; auto i = help;
buildHelpText();
if(help == i) popScreen();
}
else if(doexiton(sym, uni)) else if(doexiton(sym, uni))
popScreen(); popScreen();
}; };
} }
vector<string> extra_keys = {
"1 = orthogonal/Gans model",
"2 = small Poincare model/stereographic projection",
"3 = big Poincare model/stereographic projection",
"4 = Klein model/gnomonic projection",
"5 = change wall display mode",
"6 = change grid",
"7 = change heptagon marking",
"8 = change background color",
"9 = hyperboloid model",
"qweasdzxc, hjklyubn, numpad = move/skip turn",
"arrows = panning",
"o = world overview",
"v = menu",
"F1 = help",
"F5 = restart game",
"F10 = quit game",
"Esc = quest status",
"Alt+Enter = full screen",
"Alt = highlight interesting stuff",
"t = use a ranged Orb (target center of the screen)",
"g = drop a Dead Orb",
"click left mouse button = move/skip",
"shift+click left mouse button = use ranged Orb",
"click right mouse button = context help",
"mousewheel up = panning",
"hold middle mouse button = panning",
"mousewheel down = move/skip",
"shift + mousewheel = change projection",
"ctrl + mousewheel = change zoom",
"ctrl + shift + mousewheel = change both projection and zoom",
"ctrl + hold middle button = move the screen",
"shift + middle button = reset position"
};
void gotoHelp(const string& h) { void gotoHelp(const string& h) {
help = h; help = h;
help_extensions.clear(); help_extensions.clear();
pushScreen(showHelp); pushScreen(showHelp);
if(help == "@" || help == buildHelpText()) { if(help == "@") {
help_extensions.push_back(help_extension{'c', XLAT("credits"), [] () { help = buildCredits(); }});
#if ISMOBILE == 0 #if CAP_ROGUEVIZ
help_extensions.push_back(help_extension{'k', XLAT("advanced keyboard shortcuts"), [] () { if(rogueviz::on) {
help = ""; help = rogueviz::makehelp();
for(string s: extra_keys) help += s, help += "\n\n"; help_extensions.push_back(help_extension{'u', XLAT("RogueViz menu"), [] () { popScreen(); pushScreen(rogueviz::showMenu); }});
}}); return;
}
#endif #endif
#if CAP_RUG
if(rug::rugged) {
help = rug::makehelp();
help_extensions.push_back(help_extension{'m', XLAT("Hypersian Rug menu"), [] () { popScreen(); rug::select(); }});
help_extensions.push_back(help_extension{'h', XLAT("HyperRogue help"), [] () { buildHelpText(); }});
return;
}
#endif
buildHelpText();
} }
if(help == "HELPGEN") helpgenerator(); if(help == "HELPGEN") helpgenerator();
} }

View File

@ -769,6 +769,7 @@ namespace rug {
void drawRugScene(); void drawRugScene();
void push_all_points(int coord, ld val); void push_all_points(int coord, ld val);
void apply_rotation(const transmatrix& t); void apply_rotation(const transmatrix& t);
string makehelp();
#endif #endif
} }
@ -1781,8 +1782,8 @@ extern int lightat, safetyat;
int watercolor(int phase); int watercolor(int phase);
bool doHighlight(); bool doHighlight();
string buildHelpText(); void buildHelpText();
string buildCredits(); void buildCredits();
void setAppropriateOverview(); void setAppropriateOverview();
bool quitsaves(); bool quitsaves();
extern bool sidescreen; extern bool sidescreen;

View File

@ -3363,21 +3363,21 @@ S("\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing pl
S("hypersian rug mode", "mód hyperského koberce") S("hypersian rug mode", "mód hyperského koberce")
S( S("In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, " "similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n",
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n" "V tomto módu můžete hrát HyperRogue na 3D modelu části hyperbolické roviny "
"This requires some OpenGL extensions and may crash or not work correctly -- enabling " "podobném tomu, co vytváří generátor papírových modelů nebo hyperbolické háčkování.\n\n")
S("This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option " "the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so " "will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n" "you won't be able to play a game on it.\n\n",
"Use arrow keys to rotate, Page Up/Down to zoom.",
"V tomto módu můžete hrát HyperRogue na 3D modelu části hyperbolické roviny "
"podobném tomu, co vytváří generátor papírových modelů nebo hyperbolické háčkování.\n\n"
"Je k tomu zapotřebí OpenGL a je možné, že v tomto módu hra spadne nebo nepoběží " "Je k tomu zapotřebí OpenGL a je možné, že v tomto módu hra spadne nebo nepoběží "
"správně -- v takovém případě může pomoci zapnout možnost 'renderuj textury bez OpenGL'. " "správně -- v takovém případě může pomoci zapnout možnost 'renderuj textury bez OpenGL'. "
"Kromě toho je možné renderování urychlit volbou 'renderuj jednou', ale v takovém případě " "Kromě toho je možné renderování urychlit volbou 'renderuj jednou', ale v takovém případě "
"bude povrch vygenerován pouze jednou, takže na něm není možné hrát.\n\n" "bude povrch vygenerován pouze jednou, takže na něm není možné hrát.\n\n")
S("Use arrow keys to rotate, Page Up/Down to zoom.",
"Model se otáčí šipkami a lze ho zoomovat klávesami Page Up/Down.") "Model se otáčí šipkami a lze ho zoomovat klávesami Page Up/Down.")
S("what's this?", "co to je?") S("what's this?", "co to je?")

View File

@ -3151,20 +3151,21 @@ S("\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing pl
S("hypersian rug mode", "Hypersischer-Teppich-Modus") S("hypersian rug mode", "Hypersischer-Teppich-Modus")
S("In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, " S("In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n" "similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n",
"This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n"
"Use arrow keys to rotate, Page Up/Down to zoom.",
"In diesem Modus wird HyperRogue auf einem 3D-Modell eines Teils einer hyperbolischen Ebene " "In diesem Modus wird HyperRogue auf einem 3D-Modell eines Teils einer hyperbolischen Ebene "
"gespielt, ähnlich zu dem was man beim 'Papiermodell-Schöpfer' oder beim hyperbolischen Häkeln " "gespielt, ähnlich zu dem was man beim 'Papiermodell-Schöpfer' oder beim hyperbolischen Häkeln "
"erhält.\n\n" "erhält.\n\n")
S("This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n",
"Dieser Modus erfordert einige OpenGL-Erweiterungen und kann abstürzen oder fehlerhaft funktionieren " "Dieser Modus erfordert einige OpenGL-Erweiterungen und kann abstürzen oder fehlerhaft funktionieren "
"-- das Einschalten der Option 'Rendere Textur ohne OpenGL' kann hilfreich sein. " "-- das Einschalten der Option 'Rendere Textur ohne OpenGL' kann hilfreich sein. "
"Auch die Option 'Rendere die Textur nur einmal' beschleunigt das Rendern, aber die Oberfläche " "Auch die Option 'Rendere die Textur nur einmal' beschleunigt das Rendern, aber die Oberfläche "
"wird nur einmal gerendert und du kannst darauf nicht spielen.\n\n" "wird nur einmal gerendert und du kannst darauf nicht spielen.\n\n")
S("Use arrow keys to rotate, Page Up/Down to zoom.",
"Verwende die Pfeiltasten zum Rotieren, Bild auf/ab zum Zoomen.") "Verwende die Pfeiltasten zum Rotieren, Bild auf/ab zum Zoomen.")
S("what's this?", "Was ist das?") S("what's this?", "Was ist das?")

View File

@ -3297,21 +3297,23 @@ S("hypersian rug mode", "tryb hiperskiego dywanu")
S( S(
"In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, " "In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n" "similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n",
"This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n"
"Use arrow keys to rotate, Page Up/Down to zoom.",
"W tym trybie można grać w HyperRogue na trójwymiarowym modelu części płaszczyzny " "W tym trybie można grać w HyperRogue na trójwymiarowym modelu części płaszczyzny "
"hiperbolicznej, podobnym do tego, który można otrzymać w kreatorze modeli " "hiperbolicznej, podobnym do tego, który można otrzymać w kreatorze modeli "
"papierowych albo poprzez hiperboliczne szydełkowanie.\n\n" "papierowych albo poprzez hiperboliczne szydełkowanie.\n\n")
S("This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n",
"Działanie wymaga pewnych rozszerzeń OpenGL i może działać nieprawidłowo lub " "Działanie wymaga pewnych rozszerzeń OpenGL i może działać nieprawidłowo lub "
"powodować zatrzymanie gry -- w takim przypadku może być przydatne włączenie opcji " "powodować zatrzymanie gry -- w takim przypadku może być przydatne włączenie opcji "
"'renderuj bez OpenGL'. Opcja 'renderuj raz' spowoduje, że animacja będzie szybsza, " "'renderuj bez OpenGL'. Opcja 'renderuj raz' spowoduje, że animacja będzie szybsza, "
"ale tekstura powierzchni zostanie narysowana tylko raz, zatem nie będzie możliwe " "ale tekstura powierzchni zostanie narysowana tylko raz, zatem nie będzie możliwe "
"granie na niej na żywo.\n\nMożesz obracać model strzałkami, a przybliżać i oddalać go " "granie na niej na żywo.\n\n")
S("Use arrow keys to rotate, Page Up/Down to zoom.", "Możesz obracać model strzałkami, a przybliżać i oddalać go "
"klawiszami Page Up/Down.") "klawiszami Page Up/Down.")
S("what's this?", "co to jest?") S("what's this?", "co to jest?")

View File

@ -3386,21 +3386,23 @@ S("\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing pl
S("hypersian rug mode", "режим гиперсидского ковра") S("hypersian rug mode", "режим гиперсидского ковра")
S( S("In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, " "similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n",
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n"
"This requires some OpenGL extensions and may crash or not work correctly -- enabling " "В этом режиме Вы играете в HyperRogue на трёхмерной модели гиперболической "
"плоскости, похожей на те, что можно получить в 'создателе бумажных моделей'.\n\n"
)
S("This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option " "the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so " "will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n" "you won't be able to play a game on it.\n\n",
"Use arrow keys to rotate, Page Up/Down to zoom.",
"В этом режиме Вы играете в HyperRogue на трёхмерной модели гиперболической "
"плоскости, похожей на те, что можно получить в 'создателе бумажных моделей'\n\n"
"Это требует некоторых расширений OpenGL, может работать некорректно или вызывать " "Это требует некоторых расширений OpenGL, может работать некорректно или вызывать "
"падение игры -- включение опции 'не использовать OpenGL' может помочь. " "падение игры -- включение опции 'не использовать OpenGL' может помочь. "
"Опция 'отрисовать один раз' ускоряет отрисовку, " "Опция 'отрисовать один раз' ускоряет отрисовку, "
"но играть в таком режиме невозможно.\n\n" "но играть в таком режиме невозможно.\n\n")
S("Use arrow keys to rotate, Page Up/Down to zoom.",
"Используйте стрелки для вращения, Page Up/Down для изменения масштаба.") "Используйте стрелки для вращения, Page Up/Down для изменения масштаба.")
S("what's this?", "что это?") S("what's this?", "что это?")

30
rug.cpp
View File

@ -1513,6 +1513,23 @@ hyperpoint gethyper(ld x, ld y) {
return h; return h;
} }
string makehelp() {
return
XLAT(
"In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n")
/*
"This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n" */
#if !ISMOBILE
+ XLAT("Use arrow keys to rotate, Page Up/Down to zoom.")
+ "\n\n" +
XLAT("In the perspective projection, you can use arrows to rotate the camera, Page Up/Down to go forward/backward, Shift+arrows to strafe, and Ctrl+arrows to rotate the model.");
#endif
}
void show() { void show() {
cmode = sm::SIDE; cmode = sm::SIDE;
gamescreen(0); gamescreen(0);
@ -1558,18 +1575,7 @@ void show() {
keyhandler = [] (int sym, int uni) { keyhandler = [] (int sym, int uni) {
dialog::handleNavigation(sym, uni); dialog::handleNavigation(sym, uni);
if(uni == 'h') gotoHelp( if(uni == 'h') gotoHelp(makehelp());
XLAT(
"In this mode, HyperRogue is played on a 3D model of a part of the hyperbolic plane, "
"similar to one you get from the 'paper model creator' or by hyperbolic crocheting.\n\n"
"This requires some OpenGL extensions and may crash or not work correctly -- enabling "
"the 'render texture without OpenGL' options may be helpful in this case. Also the 'render once' option "
"will make the rendering faster, but the surface will be rendered only once, so "
"you won't be able to play a game on it.\n\n"
"Use arrow keys to rotate, Page Up/Down to zoom.")
+ "\n\n" +
XLAT("In the perspective projection, you can use arrows to rotate the camera, Page Up/Down to go forward/backward, Shift+arrows to strafe, and Ctrl+arrows to rotate the model.")
);
else if(uni == 'u') { else if(uni == 'u') {
if(rug::rugged) rug::close(); if(rug::rugged) rug::close();
else rug::init(); else rug::init();