diff --git a/classes.cpp b/classes.cpp index 4e1fb86e..01f377f3 100644 --- a/classes.cpp +++ b/classes.cpp @@ -276,7 +276,7 @@ const char *blizzarddesc = const char *crystaldesc = "Yes, this is definitely a crystal. A very regular crystalline structure.\n\n" - "This land has been designed to test various geometries, and it does not appear during a normal gameplay."; + "This land has been designed as a tool to play with various geometries, and it does not appear during a normal gameplay."; const char *NODESC = "No description yet."; const char *NODESCYET = "No description yet."; diff --git a/langen.cpp b/langen.cpp index 0c7d775a..8c67acd8 100644 --- a/langen.cpp +++ b/langen.cpp @@ -215,6 +215,7 @@ int main() { plural.insert("Kraken Depths"); allchars.insert("ᵈ"); allchars.insert("δ"); + allchars.insert("∞"); langPL(); langCZ(); langRU(); langTR(); langDE(); langPT(); diff --git a/language-pl.cpp b/language-pl.cpp index 9ccdc1b1..f5c9ec12 100644 --- a/language-pl.cpp +++ b/language-pl.cpp @@ -6167,8 +6167,123 @@ S("When your plan has clearly failed, it is better to abandon it and go to a saf S("The Hunting Dogs give up.", "Myśliwskie psy się poddały."); +// missing from previous versions: + S("\n\nThis orb also allows you to collect items encased in ice.", "\n\nTa sfera pozwala Ci również zbierać rzeczy zamrożone w lodowej ścianie.") + +// vampire attack +S("%The1 drains your powers!", "%The1 wysysa Twoje moce!") + +// additions +S(" This tutorial will not advance on its own -- you have to press Enter (not while reading help text).", + " Ten podręcznik nie idzie do przodu sam z siebie -- musisz nacisnąć Enter (nie podczas czytania tekstu pomocy)." + ) + +S("Hint: hold Alt to highlights enemies and other important features.", + "Wskazówka: trzymaj Alt by podświetlać przeciwników i inne istotne elementy.") + +// Crystal World +N("Crystal World", GEN_O, "Kryształowy Świat", "Kryształowe Światy", "Kryształowy Świat", "w Kryształowym Świecie") +N("Glowing Crystal", GEN_O, "Świecący Kryształ", "Świecące Kryształy", "Świecący Kryształ", "Świecącym Kryształem") + +S("Yes, this is definitely a crystal. A very regular crystalline structure.\n\n" + "This land has been designed as a tool to play with various geometries, and it does not appear during a normal gameplay.", + "Tak, to na pewno kryształ. Bardzo regularna struktura krystaliczna.\n\n" + "Ta kraina została zaprojektowana do zabawy różnymi geometriami, i nie pojawia się podczas normalnej gry.") + +S("You cannot move there!", "Nie możesz tam iść!"); + +// geometry stuff + +S("experiment with geometry", "eksperymenty z geometrią") + +S( + "If you want to know how much the gameplay is affected by the " + "hyperbolic geometry in HyperRogue, this mode is for you!\n\n" + + "You can try many different geometries here. We start by gluing " + "n-gons in such a way that k of them meet in every vertex. " + "Depending on n and k, this either folds into a sphere, unfolds into a plane, " + "or requires a hyperbolic space. The result may be then 'truncated' by " + "replacing each vertex by a 2k-gon. Furthermore, you can play " + "with quotient geometries. For example, the elliptic geometry is " + "obtained from the sphere by making the antipodes be the same point, " + "so you return to the same spot (but as a mirror image) after going there. " + "Have fun experimenting! " + "Achievements and leaderboards do not work in geometry experiments, " + "except some specific ones.\n\n" + "In standard geometry (truncated or not), you can play the full game, but in other geometries " + "you select a particular land. Lands are unlocked by visiting them in this " + "session, or permanently by collecting 25 treasure. Try Crossroads in Euclidean " + "or chaos mode in non-standard non-quotient hyperbolic to visit many lands. " + "Highlights:\n" + "* Crystal World and Warped Coast can be understood as extra geometries.\n" + "* Halloween is specially designed for spherical geometry.\n" + "* To see the difference, try Hunting Grounds in Euclidean -- it is impossible.\n", + + "Chcesz wiedzieć, jak geometria wpływa na grę HyperRogue? Ten tryb jest dla Ciebie!\n\n" + "Możesz tu wypróbować wiele różnych geometrii. Zaczynamy od sklejania n-kątów tak, " + "by k z nich spotykało się w 1 wierzchołku. Zależnie od n i k, to się zwija w kulkę, " + "rozwija w płaszczyznę, albo wymaga przestrzeni hiperbolicznej. Wynik może być " + "następnie 'przycięty' poprzez zastąpienie każdego wierzchołka 2k-kątem. Można " + "też eksperymentować z przestrzeniami ilorazowymi. Na przykład, geometria eliptyczna " + "jest otrzymana w ten sposób, że antypody traktujemy jako ten sam punkt, także " + "po przejściu na antypody wracasz w to samo miejsce (ale odbit%y0 lustrzanie). " + "Miłej zabawy! Osiągnięcia nie działają w eksperymentach geometrycznych, oprócz " + "niektórych specjalnych.\n\n" + "W standardowej geometrii (przyciętej lub nie) grasz całą grę, w innych geometriach " + "wybierasz krainę. Krainy są odblokowane poprzez odwiedzenie ich w tej sesji, lub " + "permanentnie przez zebranie 25 skarbów. By odwiedzić wiele krain, wypróbuj " + "Skrzyżowanie w geometrii euklidesowej, lub Chaos w niestandardowej nieilorazowej " + "geometrii.\n" + "Godne uwagi:\n" + "* Kryształowy Świat i Zakrzywiony Brzeg to w pewnym sensie dodatkowe geometrie.\n" + "* Halloween to kraina zaprojektowana dla geometrii sferycznej.\n" + "* Wypróbuj Krainę Wiecznych Łowów w geometrii euklidesowej -- staje się " + "niemożliwa do przejścia." + ) + +// new geometries available: +S("standard", "standard") // renamed from 'hyperbolic' + +S("octagons", "ośmiokąty") +S("four pentagons", "cztery pięciokąty") +S("four hexagons", "cztery sześciokąty") +S("four heptagons", "cztery siedmiokąty") +S("cube", "sześcian") +S("tetrahedron (buggy)", "czworościan (bugi)") +S("tetrahedron", "czworościan") // in case if it gets better + +S("land", "kraina") +S("truncated", "przycięte") +S("does not matter", "bez znaczenia") +S("sides per face", "boki ścian") +S("faces per vertex", "wierzchołki") +S("none", "brak") +S("zebra", "zebra") +S("field", "ciało") +S("quotient space", "przestrzeń ilorazowa") +S("size of the world", "wielkość świata") +S("flat", "płaska") + +// truncated or not truncated +S(" (t)", " (p)") +S(" (n)", " (n)") + +S("(locked)", "(blok)") + +S("stereographic/orthogonal", "rzut stereo/orto") +S("Poincaré/Klein", "Poincaré/Klein") + +// Paper Model Creator +S("Useless in Euclidean geometry.", "Bezużyteczne w geometrii euklidesowej."); +S("Not implemented for spherical geometry. Please tell me if you really want this.", + "Nie zaimplementowane dla geometrii sferycznej. Jeśli bardzo tego chcesz, powiedz.") + +// Hypersian Rug +S("This makes sense only in hyperbolic geometry.", "To ma sens tylko w geometrii hiperbolicznej.") + #undef Orb diff --git a/menus.cpp b/menus.cpp index f974f678..22709d8b 100644 --- a/menus.cpp +++ b/menus.cpp @@ -347,7 +347,7 @@ void showDisplayMode() { dialog::addBoolItem(XLAT("paper model creator"), (false), 'n'); #endif dialog::addBoolItem(XLAT("conformal/history mode"), (conformal::on), 'a'); - dialog::addBoolItem(XLAT("expansion"), viewdists, 'x'); +// dialog::addBoolItem(XLAT("expansion"), viewdists, 'x'); showAllConfig(); dialog::display(); @@ -613,7 +613,7 @@ string euchelp = "except some specific ones.\n\n" "In standard geometry (truncated or not), you can play the full game, but in other geometries " "you select a particular land. Lands are unlocked by visiting them in this " - "game, or permanently by collecting 25 treasure. Try Crossroads in Euclidean " + "session, or permanently by collecting 25 treasure. Try Crossroads in Euclidean " "or chaos mode in non-standard non-quotient hyperbolic to visit many lands. " "Highlights:\n" "* Crystal World and Warped Coast can be understood as extra geometries.\n" @@ -659,9 +659,9 @@ void showEuclideanMenu() { dialog::addBreak(50); if(ts == 6 && tv == 3) - dialog::addSelItem("truncated", "does not matter", 't'); + dialog::addSelItem(XLAT("truncated"), XLAT("does not matter"), 't'); else - dialog::addBoolItem("truncated", !nontruncated, 't'); + dialog::addBoolItem(XLAT("truncated"), !nontruncated, 't'); dialog::addBreak(50); @@ -673,8 +673,8 @@ void showEuclideanMenu() { if(!nontruncated) worldsize = ((ts+tv)*worldsize) / tv; } - dialog::addSelItem("sides per face", its(ts), 0); - dialog::addSelItem("faces per vertex", its(tv), 0); + dialog::addSelItem(XLAT("sides per face"), its(ts), 0); + dialog::addSelItem(XLAT("faces per vertex"), its(tv), 0); string qstring = "none"; if(tq & qZEBRA) qstring = "zebra"; @@ -685,26 +685,25 @@ void showEuclideanMenu() { else if(tq & qTORUS) qstring = "torus"; - dialog::addSelItem("quotient space", qstring, 0); + dialog::addSelItem(XLAT("quotient space"), XLAT(qstring), 0); - dialog::addSelItem("size of the world", - XLAT( - worldsize == 0 ? "infinite" : - worldsize > 0 ? "finite (%1)" : - "exponentially infinite (%1)", its(worldsize)), - 0); + dialog::addSelItem(XLAT("size of the world"), + worldsize < 0 ? "exp(∞)*" + (nom%denom ? its(nom)+"/"+its(-denom) : its(-worldsize)): + worldsize == 0 ? "∞" : + its(worldsize), + '3'); switch(ginf[geometry].cclass) { case 0: - dialog::addSelItem("curvature", curvenames[getDistLimit()], 0); + dialog::addSelItem(XLAT("Curvature"), XLAT("hyperbolic"), 0); break; case 1: - dialog::addSelItem("curvature", "flat", 0); + dialog::addSelItem(XLAT("Curvature"), XLAT("flat"), 0); break; case 2: - dialog::addSelItem("curvature", "spherical", 0); + dialog::addSelItem(XLAT("Curvature"), XLAT("spherical"), 0); break; } @@ -713,7 +712,7 @@ void showEuclideanMenu() { else dialog::addBoolItem(XLAT("Poincaré/Klein"), vid.alpha>.5, '1'); dialog::addItem(XLAT("help"), SDLK_F1); - dialog::addItem(XLAT("done"), '0'); + dialog::addItem(XLAT("back"), '0'); dialog::display(); keyhandler = [] (int sym, int uni) { @@ -730,6 +729,7 @@ void showEuclideanMenu() { } } else if(uni == '2' || sym == SDLK_F1) gotoHelp(euchelp); + else if(uni == '3') { viewdists = !viewdists; if(viewdists) popScreenAll(); } else if(uni == '1' && !euclid) { if(sphere) { if(vid.alpha < 10) { vid.alpha = 999; vid.scale = 998; } @@ -747,10 +747,10 @@ void showEuclideanMenu() { }; } else { - dialog::init(XLAT("use this where?")); + dialog::init(XLAT("experiment with geometry")); string truncatenames[2] = {" (t)", " (n)"}; - dialog::addSelItem(XLAT("geometry"), XLAT(ginf[geometry].name) + truncatenames[nontruncated], '5'); + dialog::addSelItem(XLAT("geometry"), XLAT(ginf[geometry].name) + XLAT(truncatenames[nontruncated]), '5'); dialog::addBreak(50); for(int i=0; i