1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-23 21:07:17 +00:00
This commit is contained in:
Zeno Rogue 2021-07-04 09:49:34 +02:00
commit 43fed4adac
30 changed files with 155 additions and 140 deletions

View File

@ -51,18 +51,28 @@ OK, now lots of the above can be changed. You can change the geometry and topolo
various in-game quests, and even try some other game genres in non-Euclidean spaces (roguelite aka shmup, racing, peaceful puzzles). Or use the engine for non-Euclidean computations various in-game quests, and even try some other game genres in non-Euclidean spaces (roguelite aka shmup, racing, peaceful puzzles). Or use the engine for non-Euclidean computations
and visualizations (see [RogueViz](http://roguetemple.com/z/hyper/rogueviz.php)). Have fun! and visualizations (see [RogueViz](http://roguetemple.com/z/hyper/rogueviz.php)). Have fun!
## Technical information ## ## Development ##
You should be able to compile on Linux, OSX, or MinGW with something like this (you need SDL, SDL_ttf, and SDL_gfx): ### Build prerequisites ###
On Linux with apt-get:
```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev```
On macOS with Homebrew:
```brew install sdl sdl_ttf sdl_gfx sdl_mixer glew```
macOS users might also have to edit /usr/local/include/SDL/SDL_gfxPrimitives.h at line 38 to use quote include.
### Building HyperRogue from source ###
``` ```
sudo apt-get install gcc libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev
git clone https://github.com/zenorogue/hyperrogue.git hyperrogue git clone https://github.com/zenorogue/hyperrogue.git hyperrogue
cd hyperrogue cd hyperrogue
make make
``` ```
The `mymake` program builds HyperRogue in parts. It takes longer than the method shown above, but when you change something, `mymake` will only recompile the changed file. The `mymake` program builds HyperRogue in parts. It takes longer than the method shown above, but it uses significantly less memory during compilation, and when you change something, `mymake` will only recompile the changed file.
Additionally, it can be easily configured, e.g., to produce an optimized build, or to include addons (see `mymake.cpp` for some example invocations, and `devmods` for some example addons). Additionally, it can be easily configured, e.g., to produce an optimized build, or to include addons (see `mymake.cpp` for some example invocations, and `devmods` for some example addons).
``` ```

View File

@ -1099,6 +1099,7 @@ EX bool flashWouldKill(cell *c, flagtype extra) {
for(int u=0; u<c2->type; u++) { for(int u=0; u<c2->type; u++) {
cell *c3 = c2->move(u); cell *c3 = c2->move(u);
if(isWorm(c3)) continue; // immune to Flash if(isWorm(c3)) continue; // immune to Flash
if(isFriendly(c3)) continue; // player's allies and mounts don't count
if(c3->monst == moEvilGolem) continue; // evil golems don't count if(c3->monst == moEvilGolem) continue; // evil golems don't count
if(c3 != c && (c3->monst || isPlayerOn(c3))) { if(c3 != c && (c3->monst || isPlayerOn(c3))) {
bool b = canAttack(NULL, moWitchFlash, c3, c3->monst, AF_MAGIC | extra); bool b = canAttack(NULL, moWitchFlash, c3, c3->monst, AF_MAGIC | extra);

View File

@ -16,7 +16,7 @@ extern int default_levs();
struct hrmap { struct hrmap {
virtual heptagon *getOrigin() { return NULL; } virtual heptagon *getOrigin() { return NULL; }
virtual cell *gamestart() { return getOrigin()->c7; } virtual cell *gamestart() { return getOrigin()->c7; }
virtual ~hrmap() { }; virtual ~hrmap() { }
virtual vector<cell*>& allcells(); virtual vector<cell*>& allcells();
virtual void verify() { } virtual void verify() { }
virtual void on_dim_change() { } virtual void on_dim_change() { }

View File

@ -411,7 +411,7 @@ const char *twdesc = "This structure will disappear after some time.";
const char *jellydesc = const char *jellydesc =
"Some of the Slime Beasts have decided to revolt against the color rules in the " "Some of the Slime Beasts have decided to revolt against the color rules in the "
"Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n" "Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n"
"Jellies switch between being a wall and being a monster after every treasure you pick."; "Jellies switch between being a wall and being a monster after every treasure you collect.";
const char *ruindesc = const char *ruindesc =
"Once a beautiful city... but now overrun by the mighty Raiders of unknown origin.\n\n" "Once a beautiful city... but now overrun by the mighty Raiders of unknown origin.\n\n"

View File

@ -27,7 +27,7 @@ struct supersaver {
virtual void load(const string& s) = 0; virtual void load(const string& s) = 0;
virtual bool dosave() = 0; virtual bool dosave() = 0;
virtual void reset() = 0; virtual void reset() = 0;
virtual ~supersaver() {}; virtual ~supersaver() {}
virtual bool affects(void* v) { return false; } virtual bool affects(void* v) { return false; }
virtual void set_default() = 0; virtual void set_default() = 0;
}; };

View File

@ -107,7 +107,7 @@ MONSTER( 'N', 0x404040, "Necromancer", moNecromancer, CF_FACE_UP | CF_HIGH_THREA
"Necromancers can raise ghosts and zombies from fresh graves." "Necromancers can raise ghosts and zombies from fresh graves."
) )
MONSTER( 'S', 0x404040, "Shadow", moShadow, CF_FACE_UP | CF_NOBLOW | CF_NONLIVING | CF_SPAM, RESERVED, moNone, MONSTER( 'S', 0x404040, "Shadow", moShadow, CF_FACE_UP | CF_NOBLOW | CF_NONLIVING | CF_SPAM, RESERVED, moNone,
"A creepy monster who follows you everywhere in the Graveyard." "A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon."
) )
MONSTER( 'T', 0x40E040, "Tentacle", moTentacle, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes ) MONSTER( 'T', 0x40E040, "Tentacle", moTentacle, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes )
MONSTER( 't', 0x008000, "Tentacle Tail", moTentacletail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE | CF_SPAM, RESERVED, moNone, tentdes ) MONSTER( 't', 0x008000, "Tentacle Tail", moTentacletail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE | CF_SPAM, RESERVED, moNone, tentdes )
@ -1523,7 +1523,7 @@ LAND( 0x804000, "Brown Island", laBrownian, ZERO | LF_PURESEA, itBrownian, RESER
REQAS(laOcean,) REQAS(laOcean,)
LAND( 0x211F6F, "Free Fall", laWestWall, ZERO | LF_GRAVITY | LF_EQUI, itWest, RESERVED, LAND( 0x211F6F, "Free Fall", laWestWall, ZERO | LF_GRAVITY | LF_EQUI, itWest, RESERVED,
"What on one side looks to be a normal (well, infinite) horizontal wall, on to the other side turns out to be the vertical wall" "What on one side looks to be a normal (well, infinite) horizontal wall, on the other side turns out to be the vertical wall"
" of an infinitely high tower. Jump from the window, and let the magical gravity carry you..." " of an infinitely high tower. Jump from the window, and let the magical gravity carry you..."
) )
NATIVE(among(m, moWestHawk, moFallingDog) ? 2 : 0) NATIVE(among(m, moWestHawk, moFallingDog) ? 2 : 0)

View File

@ -30,7 +30,7 @@ namespace util {
template <std::size_t I, typename T> struct nth { template <std::size_t I, typename T> struct nth {
inline static typename std::tuple_element<I, T>::type inline static typename std::tuple_element<I, T>::type
get(const T& t) { return std::get<I>(t); }; get(const T& t) { return std::get<I>(t); }
}; };
} }

View File

@ -20,7 +20,7 @@ string euchelp =
"You can try many different geometries here. We start by gluing " "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. " "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, " "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 'bitrunc' by " "or requires a hyperbolic space. The result may be then 'bitruncated' by "
"replacing each vertex by a 2k-gon. Furthermore, you can play " "replacing each vertex by a 2k-gon. Furthermore, you can play "
"with quotient geometries. For example, the elliptic geometry is " "with quotient geometries. For example, the elliptic geometry is "
"obtained from the sphere by making the antipodes be the same point, " "obtained from the sphere by making the antipodes be the same point, "
@ -28,7 +28,7 @@ string euchelp =
"Have fun experimenting! " "Have fun experimenting! "
"Achievements and leaderboards do not work in geometry experiments, " "Achievements and leaderboards do not work in geometry experiments, "
"except some specific ones.\n\n" "except some specific ones.\n\n"
"In standard geometry (bitrunc or not), you can play the full game, but in other geometries " "In standard geometry (bitruncated 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 " "you select a particular land. Lands are unlocked by visiting them in this "
"session, 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. " "or chaos mode in non-standard non-quotient hyperbolic to visit many lands. "

View File

@ -495,11 +495,13 @@ EX string generateHelpForItem(eItem it) {
for(auto& oi: orbinfos) { for(auto& oi: orbinfos) {
if(treasureType(oi.l) == it) { if(treasureType(oi.l) == it) {
if(oi.gchance > 0) { if(oi.gchance > 0) {
help += "\n\n";
help += XLAT("\n\nOrb unlocked: %1", oi.orb); help += XLAT("\n\nOrb unlocked: %1", oi.orb);
describeOrb(help, oi); describeOrb(help, oi);
} }
else if(oi.l == cwt.at->land || inv::on) { else if(oi.l == cwt.at->land || inv::on) {
help += XLAT("\n\nSecondary orb: %1", oi.orb); help += "\n\n";
help += XLAT("Secondary orb: %1", oi.orb);
describeOrb(help, oi); describeOrb(help, oi);
} }
} }
@ -1177,8 +1179,12 @@ EX void gotoHelpFor(eLand l) {
else listbeasts(); else listbeasts();
if(l == laTortoise) if(l == laTortoise)
help_extensions.push_back(help_extension{'t', XLAT("Galápagos shading"), [] () { help_extensions.push_back(help_extension{'s', XLAT("Galápagos shading"), [] () {
tortoise::shading_enabled = !tortoise::shading_enabled; tortoise::shading_enabled = !tortoise::shading_enabled;
}}); }});
help_extensions.push_back(help_extension{'w', XLAT("wiki"), [l] () {
open_wiki(linf[l].name);
}});
} }
} }

View File

@ -173,10 +173,10 @@ int glyphflags(int gid) {
return f; return f;
} }
EX bool graphglyph() { EX bool graphglyph(bool isMonster) {
// if(GDIM == 3) return false; // if(GDIM == 3) return false;
if(vrhr::active()) return false; if(vrhr::active()) return false;
return vid.graphglyph == 2 || (vid.graphglyph == 1 && vid.monmode); return vid.graphglyph == 2 || (vid.graphglyph == 1 && (isMonster ? mmmon : mmitem));
} }
bool displayglyph(int cx, int cy, int buttonsize, char glyph, color_t color, int qty, int flags, int id) { bool displayglyph(int cx, int cy, int buttonsize, char glyph, color_t color, int qty, int flags, int id) {
@ -190,10 +190,11 @@ bool displayglyph(int cx, int cy, int buttonsize, char glyph, color_t color, int
int d = ticks - glasttime[id]; int d = ticks - glasttime[id];
double zoom = (d <= 250 && d >= 0) ? 1.25 - .001 * d : 1; double zoom = (d <= 250 && d >= 0) ? 1.25 - .001 * d : 1;
glsize = int(glsize * zoom); glsize = int(glsize * zoom);
bool isMonster = (id >= ittypes);
if(graphglyph()) { if(graphglyph(isMonster)) {
initquickqueue(); initquickqueue();
if(id >= ittypes) { if(isMonster) {
eMonster m = eMonster(id - ittypes); eMonster m = eMonster(id - ittypes);
double bsize = buttonsize * 2/3; double bsize = buttonsize * 2/3;
if(m == moKrakenH) bsize /= 3; if(m == moKrakenH) bsize /= 3;

View File

@ -26,8 +26,8 @@ namespace hr {
/** \brief A helper structure that acts as a boolean which is always false. Helpful when disabling stuff with compiler flags. */ /** \brief A helper structure that acts as a boolean which is always false. Helpful when disabling stuff with compiler flags. */
struct always_false { struct always_false {
operator bool() const { return false; }; operator bool() const { return false; }
bool operator = (bool b) const { return b; }; bool operator = (bool b) const { return b; }
}; };
/** \brief placate GCC's overzealous -Wunused-result */ /** \brief placate GCC's overzealous -Wunused-result */

View File

@ -534,7 +534,7 @@ EX namespace inv {
ld py = current_display->ycenter + pos.second * rad3; ld py = current_display->ycenter + pos.second * rad3;
int icol = iinf[o].color; int icol = iinf[o].color;
if(!remaining[i]) icol = gradient(icol, 0, 0, .5, 1); if(!remaining[i]) icol = gradient(icol, 0, 0, .5, 1);
bool gg = graphglyph(); bool gg = graphglyph(false);
if(!hiliteclick) { if(!hiliteclick) {
if(gg) { if(gg) {

View File

@ -106,7 +106,7 @@ EX bool collectItem(cell *c2, bool telekinesis IS(false)) {
string s0 = ""; string s0 = "";
if(c2->item == itPalace && items[c2->item] == 12) if(c2->item == itPalace && items[c2->item] == 12)
princess::forceVizier = true; changes.value_set(princess::forceVizier, true);
if(!cantGetGrimoire(c2, false)) collectMessage(c2, c2->item); if(!cantGetGrimoire(c2, false)) collectMessage(c2, c2->item);
if(c2->item == itDodeca && peace::on) peace::simon::extend(); if(c2->item == itDodeca && peace::on) peace::simon::extend();

View File

@ -2192,11 +2192,11 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
case laMountain: case laMountain:
if(d == 7) { if(d == 7) {
if(hrand_monster(50000) < 100) if(hrand_monster(50000) < 100 && !safety)
buildIvy(c, 0, 3); buildIvy(c, 0, 3);
else if(hrand_monster(125000) < 100 - celldistAlt(c)) else if(hrand_monster(125000) < 100 - celldistAlt(c) && !safety)
c->monst = moMonkey; c->monst = moMonkey;
else if(hrand_monster(200000) < min(100, -10*celldistAlt(c)) - celldistAlt(c)) else if(hrand_monster(200000) < min(100, -10*celldistAlt(c)) - celldistAlt(c) && !safety)
c->monst = moEagle; c->monst = moEagle;
else if(hrand(100) < 5) else if(hrand(100) < 5)
c->wall = waPlatform; c->wall = waPlatform;
@ -2333,7 +2333,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
c->wall = waRuinWall, c->landparam = 1; c->wall = waRuinWall, c->landparam = 1;
} }
} }
if(hrand_monster(40000) < kf && !c->monst && !c->wall && !shmup::on) { if(hrand_monster(40000) < kf && !c->monst && !c->wall && !shmup::on && !safety) {
cell *c1 = c; cell *c1 = c;
cell *c2 = createMov(c1, hrand(c1->type)); cell *c2 = createMov(c1, hrand(c1->type));
if(c2->monst || c2->wall) return; if(c2->monst || c2->wall) return;
@ -2758,7 +2758,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
} }
} }
if(d == 7) { if(d == 7 && !safety) {
if(c->wall == waNone) { if(c->wall == waNone) {
if(hrand_monster(2000) < ((cwt.at->land == laFrog || items[itFrog]) ? 20 : 0) + (items[itFrog] + yendor::hardness())) if(hrand_monster(2000) < ((cwt.at->land == laFrog || items[itFrog]) ? 20 : 0) + (items[itFrog] + yendor::hardness()))
c->monst = pick(moFrog, moPhaser, moVaulter); c->monst = pick(moFrog, moPhaser, moVaulter);

View File

@ -715,8 +715,8 @@ S("A typical monster from the Graveyard, who moves through walls.\n\n"
S("Necromancers can raise ghosts and zombies from fresh graves.", S("Necromancers can raise ghosts and zombies from fresh graves.",
"Nekromanceři dokážou probouzet duchy a zombie z čerstvých hrobů.") "Nekromanceři dokážou probouzet duchy a zombie z čerstvých hrobů.")
S("A creepy monster who follows you everywhere in the Graveyard.", S("A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Děsivý netvor, který tě sleduje po celém Hřbitově.") "Děsivý netvor, který tě sleduje po celém Hřbitově.") //TODO UPDATE
S("People worshipping Cthulhu. They are very dangerous.", S("People worshipping Cthulhu. They are very dangerous.",
"Lidé uctívající Cthulhua. Jsou velmi nebezpeční.") "Lidé uctívající Cthulhua. Jsou velmi nebezpeční.")
@ -3440,9 +3440,6 @@ S( "This Orb makes you stunningly beautiful. "
S( "A big, beautiful, magical flower.", "Velká, krásná, magická květina.") S( "A big, beautiful, magical flower.", "Velká, krásná, magická květina.")
S("Don't be fooled by beauty, or you will be stabbed if you come too close!",
"Nenech se oklamat krásou -- když se moc přiblížíš, můžeš dostat ránu nožem!")
S("You just cannot stand in place, those roses smell too nicely.", S("You just cannot stand in place, those roses smell too nicely.",
"Nemůžeš zůstat na místě, ty růže příliš krásně voní.") "Nemůžeš zůstat na místě, ty růže příliš krásně voní.")
S("Those roses smell too nicely. You have to come towards them.", S("Those roses smell too nicely. You have to come towards them.",
@ -5758,9 +5755,8 @@ S("see how it ended", "podívej se, jak to skonèilo")
// other missing/new things // other missing/new things
// ------------------------ // ------------------------
S("\n\nOrb unlocked: %1", "\n\nByla odemèena Sféra: %1")
S("Orb unlocked: %1", "Byla odemèena Sféra: %1") S("Orb unlocked: %1", "Byla odemèena Sféra: %1")
S("\n\nSecondary orb: %1", "\n\nSekundární Sféra: %1") S("Secondary orb: %1", "Sekundární Sféra: %1")
S(" to submerge", " do ponoøení") S(" to submerge", " do ponoøení")
S(" to surface", " do vynoøení") S(" to surface", " do vynoøení")
S("%The1 says, \"not this place, it looks even worse...\"", S("%The1 says, \"not this place, it looks even worse...\"",
@ -6727,7 +6723,7 @@ N("Jelly Kingdom", GEN_N, "Království rosolu", "Království rosolu", "Králov
S("Some of the Slime Beasts have decided to revolt against the color rules in the " S("Some of the Slime Beasts have decided to revolt against the color rules in the "
"Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n" "Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n"
"Jellies switch between being a wall and being a monster after every treasure you pick.", "Jellies switch between being a wall and being a monster after every treasure you collect.",
"Nìkteøí Slizoví netvoøi se rozhodli vzbouøit proti barevným pravidlùm v Alchymistické laboratoøi. Zmìnili svùj tvar a konzistencim vyhlásili nezávislost a založili si své vlastní Království.\n\n" "Nìkteøí Slizoví netvoøi se rozhodli vzbouøit proti barevným pravidlùm v Alchymistické laboratoøi. Zmìnili svùj tvar a konzistencim vyhlásili nezávislost a založili si své vlastní Království.\n\n"
"Kdykoli sebereš nìjaký poklad, rosoly se zmìní ze zdí na netvory a opaènì." "Kdykoli sebereš nìjaký poklad, rosoly se zmìní ze zdí na netvory a opaènì."
@ -7488,15 +7484,11 @@ S("animate parameters", "animace parametrù")
S( S(
"Most parameters can be animated simply by using '..' in their editing dialog. " "Most parameters can be animated simply by using '..' in their editing dialog. "
"For example, the value of a parameter set to 0..1 will grow linearly from 0 to 1. " "For example, the value of a parameter set to 0..1 will grow linearly from 0 to 1. "
"You can also use functions (e.g. cos(0..2*pi)) and refer to other parameters; " "You can also use functions (e.g. cos(0..2*pi)) and refer to other parameters.",
"parameters 'a' and 'b' exist for this purpose. "
"See the list below for parameters which are currently animated (or changed).",
"Vìtšinu parametrù lze animovat jen tím, že v jejich editaèním dialogu napíšeš '..'. " "Vìtšinu parametrù lze animovat jen tím, že v jejich editaèním dialogu napíšeš '..'. "
"Tak napøíklad hodnota parametru nastaveného na 0..1 poroste lineárnì od 0 do 1. " "Tak napøíklad hodnota parametru nastaveného na 0..1 poroste lineárnì od 0 do 1. "
"Lze také použít funkce (napø. cos(0..2*pi) a odkazovat na jiné parametry; " "Lze také použít funkce (napø. cos(0..2*pi) a odkazovat na jiné parametry.")
"za tímto úèelem existují parametry 'a' a 'b'. "
"Viz níže uvedený seznam parametrù, které jsou v souèasné dobì animovány (nebo zmìnìny).")
// color edit dialog // color edit dialog
@ -7700,7 +7692,7 @@ S("Did you know that it is possible to break a magical sphere into finitely many
N("Free Fall", GEN_O, "Volný pád", "Volné pády", "Volný pád", "ve Volném pádu") N("Free Fall", GEN_O, "Volný pád", "Volné pády", "Volný pád", "ve Volném pádu")
S("What on one side looks to be a normal (well, infinite) horizontal wall, on to the other side turns out to be the vertical wall" S("What on one side looks to be a normal (well, infinite) horizontal wall, on the other side turns out to be the vertical wall"
" of an infinitely high tower. Jump from the window, and let the magical gravity carry you...", " of an infinitely high tower. Jump from the window, and let the magical gravity carry you...",
"To, co na jedné straně vypadá jako normální (no, nekonečná) vodorovná " "To, co na jedné straně vypadá jako normální (no, nekonečná) vodorovná "
@ -8160,7 +8152,6 @@ S(
S("use the full 3D models", "používej úplné 3D modely") S("use the full 3D models", "používej úplné 3D modely")
S("Z shift", "Z-posuv") S("Z shift", "Z-posuv")
S("Eye level", "úroveň očí")
S("fixed Y/Z rotation", "stálá Y/Z rotace") S("fixed Y/Z rotation", "stálá Y/Z rotace")
S("configure FPP automatically", "automatická konfigurace FPP") S("configure FPP automatically", "automatická konfigurace FPP")
@ -8948,7 +8939,7 @@ S(
"If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. " "If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. "
"This is used in situations where the controller is used as a 3D mouse, e.g., " "This is used in situations where the controller is used as a 3D mouse, e.g., "
"the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, " "the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, "
"this is not relevant (the pointer is as long as needed to hit the surface.)", "this is not relevant (the pointer is as long as needed to hit the surface).",
"Pokud je délka ukazatele 0,5 m, je objekt, na který ukazuje, 0,5 metru od ovladače. " "Pokud je délka ukazatele 0,5 m, je objekt, na který ukazuje, 0,5 metru od ovladače. "
"To se používá v situacích, kdy se ovladač používá jako 3D myš, např. " "To se používá v situacích, kdy se ovladač používá jako 3D myš, např. "
@ -9050,11 +9041,7 @@ S(
"x, y, z (hyperboloid/sphere/plane coordinates in non-crystal geometries)\n" "x, y, z (hyperboloid/sphere/plane coordinates in non-crystal geometries)\n"
"ex, ey, ez (in Euclidean geometries)\n" "ex, ey, ez (in Euclidean geometries)\n"
"x0, x1, x2... (crystal geometry only)\n" "x0, x1, x2... (crystal geometry only)\n"
"0 is black, 1 is white, rgb(1,0,0) is red, ifp(p-2,1,0) is blue (p=1 for red, 2 for green, 3 for blue)." "0 is black, 1 is white, rgb(1,0,0) is red, ifp(p-2,1,0) is blue (p=1 for red, 2 for green, 3 for blue).",
"w (fourth coordinate)\n"
"wallif(condition, color)\n"
,
"Zde můžeš specifikovat barevný vzor jako funkci políčka. " "Zde můžeš specifikovat barevný vzor jako funkci políčka. "
"Dostupné parametry:\n\n" "Dostupné parametry:\n\n"
@ -9062,6 +9049,12 @@ S(
"ex, ey, ez (v eukleidovských geometriích)\n" "ex, ey, ez (v eukleidovských geometriích)\n"
"x0, x1, x2... (pouze v krystalové geometrii)\n" "x0, x1, x2... (pouze v krystalové geometrii)\n"
"0 je černá, 1 bílá, rbg(1,0,0) červená, ifp(p-2,1,0) modrá (p=1 pro červenou, 2 pro zelenou, 3 pro modrou)." "0 je černá, 1 bílá, rbg(1,0,0) červená, ifp(p-2,1,0) modrá (p=1 pro červenou, 2 pro zelenou, 3 pro modrou)."
)
S(
"w (fourth coordinate)\n"
"wallif(condition, color)\n",
"w (čtvrtá souřadnice)\n" "w (čtvrtá souřadnice)\n"
"wallif(podmínka, barva)\n" "wallif(podmínka, barva)\n"
) )

View File

@ -680,8 +680,8 @@ S("A typical monster from the Graveyard, who moves through walls.\n\n"
S("Necromancers can raise ghosts and zombies from fresh graves.", S("Necromancers can raise ghosts and zombies from fresh graves.",
"Totenbeschwörer können Geister und Zombies aus frischen Gräbern auferwecken.") "Totenbeschwörer können Geister und Zombies aus frischen Gräbern auferwecken.")
S("A creepy monster who follows you everywhere in the Graveyard.", S("A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Ein gruseliges Monster das dir über den ganzen Friedhof folgt!") "Ein gruseliges Monster das dir über den ganzen Friedhof folgt!") //TODO UPDATE
S("People worshipping Cthulhu. They are very dangerous.", S("People worshipping Cthulhu. They are very dangerous.",
"Verehrer Cthulhus. Sie sind sehr gefährlich.") "Verehrer Cthulhus. Sie sind sehr gefährlich.")
@ -2407,7 +2407,7 @@ S("Variants of %the1 are available in the Random Pattern Mode after "
S(" kills: %1", " Kills: %1") S(" kills: %1", " Kills: %1")
S(" $$$: %1", " $$$: %1") S(" $$$: %1", " $$$: %1")
S(" Hyperstone: %1/%2", " Hypersteine: %1/%2") S(" Hyperstone: %1/%2", " Hypersteine: %1/%2")
S(" Hell: %1/9", " Hölle: %1/9") S(" Hell: %1/%2", " Hölle: %1/%2")
// improved editor // improved editor
// --------------- // ---------------
@ -3228,9 +3228,6 @@ S("This Orb makes you stunningly beautiful. "
S("A big, beautiful, magical flower.", "Eine große, schöne, magische Blume.") S("A big, beautiful, magical flower.", "Eine große, schöne, magische Blume.")
S("Don't be fooled by beauty, or you will be stabbed if you come too close!",
"Lass dich von Schönheit nicht täuschen - oder du wirst erstochen, wenn du zu nah kommst!")
S("Each eight turns, each rosebush at distance at most 5 from you will " S("Each eight turns, each rosebush at distance at most 5 from you will "
"release a wave of alluring scent. Creatures on the frontwave " "release a wave of alluring scent. Creatures on the frontwave "
"will move towards where the scent came from. Even if it causes them " "will move towards where the scent came from. Even if it causes them "

View File

@ -340,7 +340,7 @@ S("Your score: %1", "Twój wynik: %1")
S("Enemies killed: %1", "Potwory pokonane: %1") S("Enemies killed: %1", "Potwory pokonane: %1")
S("Orbs of Yendor found: %1", "Znalezione Sfery Yendoru: %1") S("Orbs of Yendor found: %1", "Znalezione Sfery Yendoru: %1")
S("Collect %1 $$$ to access more worlds", "Znajdź %1 $$$, by iść do nowych krain") S("Collect %1 $$$ to access more worlds", "Znajdź %1 $$$, by iść do nowych krain")
S("Collect at least %1 treasures in each of 9 types to access Hell", "Znajdź po %1 skarbów w %2 typach, by się dostać do Piekła") S("Collect at least %1 treasures in each of %2 types to access Hell", "Znajdź po %1 skarbów w %2 typach, by się dostać do Piekła")
S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "Znajdź %1 Czarciego Ziela, by znaleźć Sfery Yendoru") S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "Znajdź %1 Czarciego Ziela, by znaleźć Sfery Yendoru")
S("Hyperstone Quest: collect at least %3 %1 in %the2", "Misja alternatywna: znajdź co najmniej %3 skarbów %abl2") S("Hyperstone Quest: collect at least %3 %1 in %the2", "Misja alternatywna: znajdź co najmniej %3 skarbów %abl2")
S("Hyperstone Quest completed!", "Misja alternatywna zakończona!") S("Hyperstone Quest completed!", "Misja alternatywna zakończona!")
@ -693,8 +693,8 @@ S("A typical monster from the Graveyard, who moves through walls.\n\n"
S("Necromancers can raise ghosts and zombies from fresh graves.", S("Necromancers can raise ghosts and zombies from fresh graves.",
"Nekromanci wzbudzają duchy i zombie ze świeżych grobów.") "Nekromanci wzbudzają duchy i zombie ze świeżych grobów.")
S("A creepy monster who follows you everywhere in the Graveyard.", S("A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Ten odrażający potwór chodzi za Tobą po cmentarzu!") "Ten odrażający potwór chodzi za Tobą po cmentarzu!") //TODO UPDATE
S("People worshipping Cthulhu. They are very dangerous.", S("People worshipping Cthulhu. They are very dangerous.",
"Wyznawcy Cthulhu, bardzo niebiezpieczni.") "Wyznawcy Cthulhu, bardzo niebiezpieczni.")
@ -1693,7 +1693,7 @@ S("Hell has these lakes everywhere... They are shaped like evil stars, and fille
S("hardcore mode", "tryb hardcore") S("hardcore mode", "tryb hardcore")
S("One wrong move, and it is game over!", "Jeden fałszywy ruch i koniec gry!") S("One wrong move and it is game over!", "Jeden fałszywy ruch i koniec gry!")
S("Not so hardcore?", "Hardkor to nie to?") S("Not so hardcore?", "Hardkor to nie to?")
// Shoot'em up Mode // Shoot'em up Mode
@ -3376,10 +3376,6 @@ S( "This Orb makes you stunningly beautiful. "
S( "A big, beautiful, magical flower.", "Duży, piękny, magiczny kwiat.") S( "A big, beautiful, magical flower.", "Duży, piękny, magiczny kwiat.")
S("Don't be fooled by beauty, or you will be stabbed if you come too close!",
"Nie daj się zwieść urodzie, bo jak się za bardzo zbliżysz, możesz zostać ugodzon%y0 nożem!")
S( S(
"Each eight turns, each rosebush at distance at most 5 from you will " "Each eight turns, each rosebush at distance at most 5 from you will "
"release a wave of alluring scent. Creatures on the frontwave " "release a wave of alluring scent. Creatures on the frontwave "
@ -5694,9 +5690,8 @@ S(" (%1 more digits)", " (jeszcze cyfr: %1)")
S("see how it ended", "jak się skończyło") S("see how it ended", "jak się skończyło")
// other missing/new things // other missing/new things
S("\n\nOrb unlocked: %1", "\n\nOdblokowana Sfera: %1")
S("Orb unlocked: %1", "Odblokowana Sfera: %1") S("Orb unlocked: %1", "Odblokowana Sfera: %1")
S("\n\nSecondary orb: %1", "\n\nDodatkowa Sfera: %1") S("Secondary orb: %1", "Dodatkowa Sfera: %1")
S(" to submerge", " do zanurzenia") S(" to submerge", " do zanurzenia")
S(" to surface", " do wynurzenia") S(" to surface", " do wynurzenia")
S("%The1 says, \"not this place, it looks even worse...\"", S("%The1 says, \"not this place, it looks even worse...\"",
@ -6566,7 +6561,7 @@ N("Jelly Kingdom", GEN_N, "Królestwo Galarety", "Królestwa Galarety", "Króles
S("Some of the Slime Beasts have decided to revolt against the color rules in the " S("Some of the Slime Beasts have decided to revolt against the color rules in the "
"Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n" "Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n"
"Jellies switch between being a wall and being a monster after every treasure you pick.", "Jellies switch between being a wall and being a monster after every treasure you collect.",
"Część Mazistych Stworów z Laboratorium postanowiło zbuntować się przeciwko regułom koloru w " "Część Mazistych Stworów z Laboratorium postanowiło zbuntować się przeciwko regułom koloru w "
"Laboratorium. Zmieniły kształt i konsystencję, ogłosiły niepodległość i stworzyły własne Królestwo.\n\n" "Laboratorium. Zmieniły kształt i konsystencję, ogłosiły niepodległość i stworzyły własne Królestwo.\n\n"
@ -7237,15 +7232,11 @@ S("animate parameters", "animacja parametrów")
S( S(
"Most parameters can be animated simply by using '..' in their editing dialog. " "Most parameters can be animated simply by using '..' in their editing dialog. "
"For example, the value of a parameter set to 0..1 will grow linearly from 0 to 1. " "For example, the value of a parameter set to 0..1 will grow linearly from 0 to 1. "
"You can also use functions (e.g. cos(0..2*pi)) and refer to other parameters; " "You can also use functions (e.g. cos(0..2*pi)) and refer to other parameters.",
"parameters 'a' and 'b' exist for this purpose. "
"See the list below for parameters which are currently animated (or changed).",
"Większość parametrów może być animowana w prosty sposób, przez wpisanie '..' w ich pole edycji. " "Większość parametrów może być animowana w prosty sposób, przez wpisanie '..' w ich pole edycji. "
"Przykładowo, wartość parametru ustawiona na 0..1 będzie rosła liniowa od 0 do 1. " "Przykładowo, wartość parametru ustawiona na 0..1 będzie rosła liniowa od 0 do 1. "
"Możesz też używać funkcji (np. cos(0..2*pi)) lub odnosić się do innych parametrów; " "Możesz też używać funkcji (np. cos(0..2*pi)) lub odnosić się do innych parametrów.")
"parametry 'a' i 'b' istnieją w tym celu. Poniżej lista parametrów obecnie "
"animowanych (lub zmienionych).")
// color edit dialog // color edit dialog
@ -7443,7 +7434,7 @@ S("Did you know that it is possible to break a magical sphere into finitely many
N("Free Fall", GEN_O, "Swobodny Spadek", "Swobodne Spadki", "Swobodny Spadek", "w Swobodnym Spadku") N("Free Fall", GEN_O, "Swobodny Spadek", "Swobodne Spadki", "Swobodny Spadek", "w Swobodnym Spadku")
S("What on one side looks to be a normal (well, infinite) horizontal wall, on to the other side turns out to be the vertical wall" S("What on one side looks to be a normal (well, infinite) horizontal wall, on the other side turns out to be the vertical wall"
" of an infinitely high tower. Jump from the window, and let the magical gravity carry you...", " of an infinitely high tower. Jump from the window, and let the magical gravity carry you...",
"Co wygląda z jednej strony na zwykłą (nieskończoną) poziomą ścianę, z drugiej strony okazuje się być pionową ścianą nieskończenie " "Co wygląda z jednej strony na zwykłą (nieskończoną) poziomą ścianę, z drugiej strony okazuje się być pionową ścianą nieskończenie "
@ -7878,7 +7869,6 @@ S(
S("use the full 3D models", "użyj pełnych modeli 3D") S("use the full 3D models", "użyj pełnych modeli 3D")
S("Z shift", "przesunięcie Z") S("Z shift", "przesunięcie Z")
S("Eye level", "poziom oka")
S("fixed Y/Z rotation", "ustalona rotacja Y/Z") S("fixed Y/Z rotation", "ustalona rotacja Y/Z")
S("configure FPP automatically", "automatycznie skonfiguruj FPP") S("configure FPP automatically", "automatycznie skonfiguruj FPP")
@ -8667,7 +8657,7 @@ S(
"If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. " "If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. "
"This is used in situations where the controller is used as a 3D mouse, e.g., " "This is used in situations where the controller is used as a 3D mouse, e.g., "
"the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, " "the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, "
"this is not relevant (the pointer is as long as needed to hit the surface.).", "this is not relevant (the pointer is as long as needed to hit the surface).",
"Jeśli długość wskaźnika to 0.5m, wskazywany punkt jest 0.5 metra od kontrolera. " "Jeśli długość wskaźnika to 0.5m, wskazywany punkt jest 0.5 metra od kontrolera. "
"Ma to znaczenie, gdy kontroler jest używany jako mysz 3D, np. narzędzie do rysowania w " "Ma to znaczenie, gdy kontroler jest używany jako mysz 3D, np. narzędzie do rysowania w "
@ -8781,8 +8771,7 @@ S(
S( S(
"w (fourth coordinate)\n" "w (fourth coordinate)\n"
"wallif(condition, color)\n" "wallif(condition, color)\n",
,
"w (czwarta współrzędna)\n" "w (czwarta współrzędna)\n"
"wallif(warunek, kolor)\n" "wallif(warunek, kolor)\n"

View File

@ -343,8 +343,8 @@ S("Your score: %1", "Sua pontuação: %1")
S("Enemies killed: %1", "Inimigos mortos: %1") S("Enemies killed: %1", "Inimigos mortos: %1")
S("Orbs of Yendor found: %1", "Orbes de Yendor encontrados: %1") S("Orbs of Yendor found: %1", "Orbes de Yendor encontrados: %1")
S("Collect %1 $$$ to access more worlds", "Colete %1 $$$, para acessar novos mundos") S("Collect %1 $$$ to access more worlds", "Colete %1 $$$, para acessar novos mundos")
S("Collect at least %1 treasures in each of 9 types to access Hell", "Colete pelo menos %1 tesouros de cada um dos 9 tipos para acessar o Inferno") S("Collect at least %1 treasures in each of %2 types to access Hell", "Colete pelo menos %1 tesouros de cada um dos %2 tipos para acessar o Inferno")
S("Collect at least 10 Demon Daisies to find the Orbs of Yendor", "Colete pelo menos 10 Margaridas Demônio para encontrar os Orbes de Yendor") S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "Colete pelo menos %1 Margaridas Demônio para encontrar os Orbes de Yendor")
S("Hyperstone Quest: collect at least %3 %1 in %the2", "Missão da Pedra do Ímpeto: colete pelo menos %3 %1 no-a %abl1") S("Hyperstone Quest: collect at least %3 %1 in %the2", "Missão da Pedra do Ímpeto: colete pelo menos %3 %1 no-a %abl1")
S("Hyperstone Quest completed!", "Missão da Pedra do Ímpeto completa!") S("Hyperstone Quest completed!", "Missão da Pedra do Ímpeto completa!")
S("Look for the Orbs of Yendor in Hell or in the Crossroads!", "Procure pelos Orbes de Yendor no Inferno e nas Encruzilhadas!") S("Look for the Orbs of Yendor in Hell or in the Crossroads!", "Procure pelos Orbes de Yendor no Inferno e nas Encruzilhadas!")
@ -483,10 +483,10 @@ S(
"números mostrados para saber seus significados.\n") "números mostrados para saber seus significados.\n")
S( S(
"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 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",
"Mova-se com o mouse, teclado numérico, qweadzxc, ou hjklyubn. Espere apertando 's' ou '.'. Gire o mundo com as setas, PageUp/Down, ou Home/Espaço." "Mova-se com o mouse, teclado numérico, qweadzxc, ou hjklyubn. Espere apertando 's' ou '.'. Gire o mundo com as setas, PageUp/Down, ou Espaço."
"Para salvar o jogo você precisa de um Orbe da Segurança. Pressione 'v' para ir ao menu principal (configurações, modos especiais, etc.), ESC para o estado da missão.\n\n") "Para salvar o jogo você precisa de um Orbe da Segurança. Pressione 'v' para ir ao menu principal (configurações, modos especiais, etc.), ESC para o estado da missão.\n\n")
S("See more on the website: ", "Veja mais no site: ") S("See more on the website: ", "Veja mais no site: ")
@ -721,8 +721,8 @@ S(
"Nekromanci wzbudzają duchy i zombie ze świeżych grobów.") "Nekromanci wzbudzają duchy i zombie ze świeżych grobów.")
S( S(
"A creepy monster who follows you everywhere in the Graveyard.", "A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Ten odrażający potwór chodzi za Tobą po cmentarzu!") "Ten odrażający potwór chodzi za Tobą po cmentarzu!") //TODO UPDATE
S( S(
"People worshipping Cthulhu. They are very dangerous.", "People worshipping Cthulhu. They are very dangerous.",
@ -2610,7 +2610,7 @@ S("Variants of %the1 are available in the Random Pattern Mode after "
S(" kills: %1", " zabicia: %1") S(" kills: %1", " zabicia: %1")
S(" $$$: %1", " $$$: %1") S(" $$$: %1", " $$$: %1")
S(" Hyperstone: %1/%2", " Hiperkamienie: %1/%2") S(" Hyperstone: %1/%2", " Hiperkamienie: %1/%2")
S(" Hell: %1/9", " Piekło: %1/9") S(" Hell: %1/%2", " Piekło: %1/%2")
// improved editor // improved editor
@ -3465,10 +3465,6 @@ S( "This Orb makes you stunningly beautiful. "
S( "A big, beautiful, magical flower.", "Duży, piękny, magiczny kwiat.") S( "A big, beautiful, magical flower.", "Duży, piękny, magiczny kwiat.")
S("Don't be fooled by beauty, or you will be stabbed if you come too close!",
"Nie daj się zwieść urodzie, bo jak się za bardzo zbliżysz, możesz zostać ugodzon%y0 nożem!")
S( S(
"Each eight turns, each rosebush at distance at most 5 from you will " "Each eight turns, each rosebush at distance at most 5 from you will "
"release a wave of alluring scent. Creatures on the frontwave " "release a wave of alluring scent. Creatures on the frontwave "
@ -5779,9 +5775,8 @@ S(" (%1 more digits)", " (jeszcze cyfr: %1)")
S("see how it ended", "jak się skończyło") S("see how it ended", "jak się skończyło")
// other missing/new things // other missing/new things
S("\n\nOrb unlocked: %1", "\n\nOdblokowana Sfera: %1")
S("Orb unlocked: %1", "Odblokowana Sfera: %1") S("Orb unlocked: %1", "Odblokowana Sfera: %1")
S("\n\nSecondary orb: %1", "\n\nDodatkowa Sfera: %1") S("Secondary orb: %1", "Dodatkowa Sfera: %1")
S(" to submerge", " do zanurzenia") S(" to submerge", " do zanurzenia")
S(" to surface", " do wynurzenia") S(" to surface", " do wynurzenia")
S("%The1 says, \"not this place, it looks even worse...\"", S("%The1 says, \"not this place, it looks even worse...\"",

View File

@ -342,7 +342,7 @@ S("Your score: %1", "Ваш счёт: %1")
S("Enemies killed: %1", "Врагов убито: %1") S("Enemies killed: %1", "Врагов убито: %1")
S("Orbs of Yendor found: %1", "Собрано сфер Йендора: %1") S("Orbs of Yendor found: %1", "Собрано сфер Йендора: %1")
S("Collect %1 $$$ to access more worlds", "Соберите %1 $$$, чтобы открыть новые земли") S("Collect %1 $$$ to access more worlds", "Соберите %1 $$$, чтобы открыть новые земли")
S("Collect at least %1 treasures in each of 9 types to access Hell", "Соберите хотя бы по %1 сокровищ %2 разных типов, чтобы попасть в Ад") S("Collect at least %1 treasures in each of %2 types to access Hell", "Соберите хотя бы по %1 сокровищ %2 разных типов, чтобы попасть в Ад")
S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "Соберите %1 адских ромашек, чтобы найти сферу Йендора") S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "Соберите %1 адских ромашек, чтобы найти сферу Йендора")
S("Hyperstone Quest: collect at least %3 %1 in %the2", "Миссия Гиперкамня: соберите %3 драгоценностей в %abl2") S("Hyperstone Quest: collect at least %3 %1 in %the2", "Миссия Гиперкамня: соберите %3 драгоценностей в %abl2")
S("Hyperstone Quest completed!", "Миссия Гиперкамня закончена!") S("Hyperstone Quest completed!", "Миссия Гиперкамня закончена!")
@ -688,8 +688,8 @@ S("A typical monster from the Graveyard, who moves through walls.\n\n"
S("Necromancers can raise ghosts and zombies from fresh graves.", S("Necromancers can raise ghosts and zombies from fresh graves.",
"Некромант может призывать призраков и зомби из свежих могил.") "Некромант может призывать призраков и зомби из свежих могил.")
S("A creepy monster who follows you everywhere in the Graveyard.", S("A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Пугающий монстр, вечно преследующий Вас на Кладбище.") "Пугающий монстр, вечно преследующий Вас на Кладбище.") //TODO UPDATE
S("People worshipping Cthulhu. They are very dangerous.", S("People worshipping Cthulhu. They are very dangerous.",
"Люди, поклоняющиеся Ктулху. Они довольно опасны.") "Люди, поклоняющиеся Ктулху. Они довольно опасны.")
@ -1263,7 +1263,7 @@ S("You trick %the1.", "Вы победили %a1.")
S( "A Witch with a Flash spell. Very dangerous!\n\nLuckily, she never uses the spell if it " S( "A Witch with a Flash spell. Very dangerous!\n\nLuckily, she never uses the spell if it "
"would kill her friends. She could destroy an Evil Golem, though.", "would kill her friends. She could destroy an Evil Golem, though.",
"Ведьма с заклинанием вспышки. Очень опасна!\n\nК счастью, она никогда не использует " "Ведьма с заклинанием вспышки. Очень опасна!\n\nК счастью, она никогда не использует "
"заклинание, ели оно убьёт других ведьм. Но големов она может и уничтожить.") "заклинание, если оно убьёт других ведьм. Но големов она может и уничтожить.")
S("Your Aether powers are drained by %the1!", "Твоя эфирная сила была уменьшена %abl1!") S("Your Aether powers are drained by %the1!", "Твоя эфирная сила была уменьшена %abl1!")
S("As you leave, your powers are drained!", "Покидая землю силы, Вы теряете магию сфер!") S("As you leave, your powers are drained!", "Покидая землю силы, Вы теряете магию сфер!")
@ -1355,7 +1355,7 @@ S("The Grimoires contain many secrets of the Great Old Ones. "
"You hope to read them when you return home, and to learn many things. " "You hope to read them when you return home, and to learn many things. "
"The knowledge is valuable to you, but it is rather pointless to try to get " "The knowledge is valuable to you, but it is rather pointless to try to get "
"several copies of the same Grimoire...", "several copies of the same Grimoire...",
"Гримуары содержат много секретов Великих предков Каждый новый круг Храма Ктулху содержит " "Гримуары содержат много секретов Великих предков. Каждый новый круг Храма Ктулху содержит "
"новые тома с новыми секретами. Вы можете принести их домой, прочитать и узнать много вещей." "новые тома с новыми секретами. Вы можете принести их домой, прочитать и узнать много вещей."
"Знание ценно для Вас, но Вам не нужны копии одного Гримуара... " "Знание ценно для Вас, но Вам не нужны копии одного Гримуара... "
) )
@ -1420,12 +1420,6 @@ S("Cannot teleport on a monster!", "Нельзя телепортировать
S("Cannot teleport on an item!", "Нельзя телепортироваться на предмет!") S("Cannot teleport on an item!", "Нельзя телепортироваться на предмет!")
S("Cannot teleport here!", "Нельзя телепортироваться сюда!") S("Cannot teleport here!", "Нельзя телепортироваться сюда!")
//S("You cannot teleport that far away!", "Вы не можететелепортироваться так далеко!") //S("You cannot teleport that far away!", "Вы не можететелепортироваться так далеко!")
S("You cannot target that far away!", "Nie możesz celować tak daleko!")
S("You cannot target that close!", "Nie możesz celować tak blisko!")
S("Cannot cast illusion on an item!", "Nie możesz rzucić iluzji na przedmiot!")
S("Cannot cast illusion here!", "Nie możesz rzucić ilzuji tutaj!")
S("Cannot cast illusion on a monster!", "Nie możesz rzucić ilzuji na potwora!")
S("Cannot throw fire there!", "Nie możesz tego podpalić!")
Orb("the Dragon", "Дракона") Orb("the Dragon", "Дракона")
@ -1542,7 +1536,7 @@ S(
"The forests of Caribbean are too dense to be traversed by humans, " "The forests of Caribbean are too dense to be traversed by humans, "
"and they are hard to burn. Many colorful parrots can be found there.", "and they are hard to burn. Many colorful parrots can be found there.",
"Карибские леса слишком плотны, чтобы сквозь них мог пройти человек, " "Карибские леса слишком плотны, чтобы сквозь них мог пройти человек, "
"и их трудно поджечь. Много разноуветных попугаев живёт здесь.") "и их трудно поджечь. Много разноцветных попугаев живёт здесь.")
S("Ye wonder where did th' Pirates find all these riches...", S("Ye wonder where did th' Pirates find all these riches...",
"Интересно, где Пираты нашли эти богатства...") "Интересно, где Пираты нашли эти богатства...")
@ -1813,14 +1807,14 @@ S(
"Perhaps there used to be a forest here?", "Perhaps there used to be a forest here?",
"Во время отлива на гиперболических берегах можно найти прекрасный Янтарь. " "Во время отлива на гиперболических берегах можно найти прекрасный Янтарь. "
"Може, здесь когда-то был лес?" "Может, здесь когда-то был лес?"
) )
Orb("Air", "Воздуха") Orb("Air", "Воздуха")
S("This Orb allows you to blow your enemies away.\n\n" S("This Orb allows you to blow your enemies away.\n\n"
"Click a monster to blow it one cell away. It cannot be used against mimics, ghosts, sharks and other monsters restricted to a specific terrain, and multi-tile monsters.", "Click a monster to blow it one cell away. It cannot be used against mimics, ghosts, sharks and other monsters restricted to a specific terrain, and multi-tile monsters.",
"Эта сфера позволяет Вам сдуват врагов вдаль.\n\n" "Эта сфера позволяет Вам сдувать врагов вдаль.\n\n"
"Нажми на монстра, чтобы сдуть его на 1 клетку. Невозможно сдуть мимиков, духов, акул и других монстров, живущих на определённой территории, и монстров из нескольких частей." "Нажми на монстра, чтобы сдуть его на 1 клетку. Невозможно сдуть мимиков, духов, акул и других монстров, живущих на определённой территории, и монстров из нескольких частей."
) )
@ -2097,13 +2091,13 @@ S("Wherever this powerful being goes, the living fjord "
N("Garnet", GEN_O, "Гранат", "Гранаты", "Гранат", "Гранатом") N("Garnet", GEN_O, "Гранат", "Гранаты", "Гранат", "Гранатом")
S("Vikings believe that garnets improve their strength.", S("Vikings believe that garnets improve their strength.",
"Викинги верятЮ что гранаты дают им силу.") "Викинги верят, что гранаты дают им силу.")
Orb("the Fish", "Рыбы") Orb("the Fish", "Рыбы")
S("This Orb lets you dive into the water. While diving, you are able to see and collect underwater treasures, " S("This Orb lets you dive into the water. While diving, you are able to see and collect underwater treasures, "
"while being invisible to monsters yourself. You are afraid of jumping into the water straight from a boat, so usually you won't do it.", "while being invisible to monsters yourself. You are afraid of jumping into the water straight from a boat, so usually you won't do it.",
"Эта сфера позволяет нырять. Когда Вы ныряете, Вы видите и можете собирать подводные ценности, " "Эта сфера позволяет нырять. Когда Вы ныряете, Вы видите и можете собирать подводные ценности, "
"а враги Вас не видят. Но Вы боитесь прягать из лодки прямо в воду.") "а враги Вас не видят. Но Вы боитесь прыгать из лодки прямо в воду.")
S("%The1 is washed away!", "%a1 смыло водой!") S("%The1 is washed away!", "%a1 смыло водой!")
S("%The1 is extinguished!", "%1 гаснет!") S("%The1 is extinguished!", "%1 гаснет!")
@ -2396,7 +2390,7 @@ S("This is the biggest Hypersian Rug you have ever seen! "
N("Prince", GEN_M, "Принц", "Принцы", "Принца", "Принцем") N("Prince", GEN_M, "Принц", "Принцы", "Принца", "Принцем")
N("Princess", GEN_F, "Принцесса", "Принцессы", "Принцессу", "Принцессой") N("Princess", GEN_F, "Принцесса", "Принцессы", "Принцессу", "Принцессой")
S("%1 takes %his1 revenge on %the2!", "%1 будет мстить!") S("%The1 takes %his1 revenge on %the2!", "%1 будет мстить!")
S("\"That should teach you to take me seriously!\"", S("\"That should teach you to take me seriously!\"",
"\"Относись ко мне серьёзно! Будет тебе наука!\"") "\"Относись ко мне серьёзно! Будет тебе наука!\"")
@ -2651,7 +2645,7 @@ S(
"эксперименты в покое и уединении. Они изменили направление силы тяжести, " "эксперименты в покое и уединении. Они изменили направление силы тяжести, "
"чтобы сделать попадание сюда труднее.\n\n" "чтобы сделать попадание сюда труднее.\n\n"
"Гравитация работает так: клетка нестабильна, если она пуста, и " "Гравитация работает так: клетка нестабильна, если она пуста, и "
"поле под ним не содердит стены. Нельзя перейти с одного нестабильного поля " "поле под ним не содержит стены. Нельзя перейти с одного нестабильного поля "
"на другое, иначе как вниз." "на другое, иначе как вниз."
) )
@ -3465,10 +3459,6 @@ S( "This Orb makes you stunningly beautiful. "
S( "A big, beautiful, magical flower.", "Большой прекрасный магический цветок.") S( "A big, beautiful, magical flower.", "Большой прекрасный магический цветок.")
S("Don't be fooled by beauty, or you will be stabbed if you come too close!",
"Не будьте обмануты красотой, если не хотите получить удар в спину!")
S( S(
"Each eight turns, each rosebush at distance at most 5 from you will " "Each eight turns, each rosebush at distance at most 5 from you will "
"release a wave of alluring scent. Creatures on the frontwave " "release a wave of alluring scent. Creatures on the frontwave "
@ -3481,7 +3471,7 @@ S(
"волну манящего аромата. Все монстры на пути двигаются к кусту, даже если " "волну манящего аромата. Все монстры на пути двигаются к кусту, даже если "
"им приходится атаковать союзника или прекрасное существо, пойти в воду, огонь, пропасть " "им приходится атаковать союзника или прекрасное существо, пойти в воду, огонь, пропасть "
"или в шипы куста. Это не действует на призраков, плющи, каменных змей и " "или в шипы куста. Это не действует на призраков, плющи, каменных змей и "
"и монстров, ограниченных своей землёй.") "монстров, ограниченных своей землёй.")
S( S(
"This land is filled with beautiful, but dangerous, creatures and plants.", "This land is filled with beautiful, but dangerous, creatures and plants.",
@ -3555,7 +3545,7 @@ S("\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the s
S("You cannot attack diagonally!", "Вы не можете атаковать по-диагонали!") S("You cannot attack diagonally!", "Вы не можете атаковать по-диагонали!")
Orb("Energy", "Energii") Orb("Energy", "Энергии")
S( "This Orb halves the power usage of orbs which cost some " S( "This Orb halves the power usage of orbs which cost some "
"charges with each activation. It even affects the " "charges with each activation. It even affects the "
@ -3606,7 +3596,7 @@ S("key Orb power", "клавиша для силы сферы")
S("Orb power (target: mouse)", "активировать сферу") S("Orb power (target: mouse)", "активировать сферу")
S("Orb power (target: facing)", "клавиша для силы сферы") S("Orb power (target: facing)", "клавиша для силы сферы")
S("You cannot go against the wind!", "Nie możesz iść pod wiatr!") S("You cannot go against the wind!", "Нельзя ходить против ветра!")
N("warp gate", GEN_F, "врата искривления", "врата искривления", "врата искривления", "вратами искривления") N("warp gate", GEN_F, "врата искривления", "врата искривления", "врата искривления", "вратами искривления")
@ -3741,7 +3731,7 @@ S("Branches here could bear your weight easily.",
N("weak branch", GEN_F, "тонкая ветка", "тонкие ветки", "тонкую ветку", "тонкой веткой") N("weak branch", GEN_F, "тонкая ветка", "тонкие ветки", "тонкую ветку", "тонкой веткой")
S("Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break.", S("Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break.",
"Эти ветви выдерживают ваш вес, но если из использовать, чтобы пойти (не упасть) на что-то неустойчивое, они сломаются.") "Эти ветви выдерживают ваш вес, но если их использовать, чтобы пойти (не упасть) на что-то неустойчивое, они сломаются.")
N("canopy", GEN_F, "листва", "листва", "листву", "листвой") N("canopy", GEN_F, "листва", "листва", "листву", "листвой")
@ -5844,9 +5834,8 @@ S(" (%1 more digits)", " (ещё цифр: %1)")
S("see how it ended", "смотри, как всё закончилось") S("see how it ended", "смотри, как всё закончилось")
// other missing/new things // other missing/new things
S("\n\nOrb unlocked: %1", "\n\nОткрыта сфера: %1")
S("Orb unlocked: %1", "Открыта сфера: %1") S("Orb unlocked: %1", "Открыта сфера: %1")
S("\n\nSecondary orb: %1", "\n\nДополнительная сфера: %1") S("Secondary orb: %1", "Дополнительная сфера: %1")
S(" to submerge", " на погружение") S(" to submerge", " на погружение")
S(" to surface", " на поверхность") S(" to surface", " на поверхность")
S("%The1 says, \"not this place, it looks even worse...\"", S("%The1 says, \"not this place, it looks even worse...\"",
@ -6793,7 +6782,7 @@ N("Jelly Kingdom", GEN_N, "Желейное Королевство", "Желей
S("Some of the Slime Beasts have decided to revolt against the color rules in the " S("Some of the Slime Beasts have decided to revolt against the color rules in the "
"Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n" "Alchemist Lab. They have changed their shape and consistency, declared independence, and established their own Kingdom.\n\n"
"Jellies switch between being a wall and being a monster after every treasure you pick.", "Jellies switch between being a wall and being a monster after every treasure you collect.",
"Часть Живой Слизи выступила против правил цветов в Лаборатории. " "Часть Живой Слизи выступила против правил цветов в Лаборатории. "
"Они изменили свою форму и густоту, провозгласили независимость и образовали свое Королевство.\n\n" "Они изменили свою форму и густоту, провозгласили независимость и образовали свое Королевство.\n\n"

View File

@ -322,7 +322,7 @@ S("Enemies killed: %1", "Öldürülen Düşmanlar: %1")
S("Orbs of Yendor found: %1", "Bulunan Yendor Küresi sayısı: %1") S("Orbs of Yendor found: %1", "Bulunan Yendor Küresi sayısı: %1")
S("Collect %1 $$$ to access more worlds", "%1 $$$ toplayarak başka dünyalara eriş") S("Collect %1 $$$ to access more worlds", "%1 $$$ toplayarak başka dünyalara eriş")
// S("Collect %1 $$$ to access R'Lyeh and Dry Forest", "60 $$$ toplayarak R'Lyeh ve Kara Ormana eriş.") // S("Collect %1 $$$ to access R'Lyeh and Dry Forest", "60 $$$ toplayarak R'Lyeh ve Kara Ormana eriş.")
S("Collect at least %1 treasures in each of 9 types to access Hell", "%2 hazine çeşidinin hepsinden %1'ar tane toplayarak Cehenneme erişebilirsin.") S("Collect at least %1 treasures in each of %2 types to access Hell", "%2 hazine çeşidinin hepsinden %1'ar tane toplayarak Cehenneme erişebilirsin.")
S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "%1 Şeytan Papatyası toplayarak Yendorun Kürelerini bulabilirsin.") S("Collect at least %1 Demon Daisies to find the Orbs of Yendor", "%1 Şeytan Papatyası toplayarak Yendorun Kürelerini bulabilirsin.")
S("Hyperstone Quest: collect at least %3 %1 in %the2", "Aşkıntaş Görevi: %2'de en az %3 hazine topla.") S("Hyperstone Quest: collect at least %3 %1 in %the2", "Aşkıntaş Görevi: %2'de en az %3 hazine topla.")
S("Hyperstone Quest completed!", "Aşkıntaş görevi tamamlandı.") S("Hyperstone Quest completed!", "Aşkıntaş görevi tamamlandı.")
@ -645,8 +645,8 @@ S("A typical monster from the Graveyard, who moves through walls.\n\n"
S("Necromancers can raise ghosts and zombies from fresh graves.", S("Necromancers can raise ghosts and zombies from fresh graves.",
"Ölüçağıranlar mezarlardan hayaletler ve hortlaklar çağırabilirler.") "Ölüçağıranlar mezarlardan hayaletler ve hortlaklar çağırabilirler.")
S("A creepy monster who follows you everywhere in the Graveyard.", S("A creepy monster who follows you everywhere in the Graveyard and the Cursed Canyon.",
"Seni Mezarlık boyunca takip eden ürpertici bir canavar.") "Seni Mezarlık boyunca takip eden ürpertici bir canavar.") //TODO UPDATE
S("People worshipping Cthulhu. They are very dangerous.", S("People worshipping Cthulhu. They are very dangerous.",
"Cthulhu'ya tapan insanlar. Çok tehlikeliler.") "Cthulhu'ya tapan insanlar. Çok tehlikeliler.")

View File

@ -186,6 +186,7 @@ EX void showOverview() {
else checkmove(); else checkmove();
cheater++; cheater++;
}; };
dialog::bound_low(0);
} }
} }
else if(udiv == 3 && umod < walltypes) gotoHelp(generateHelpForWall(eWall(umod))); else if(udiv == 3 && umod < walltypes) gotoHelp(generateHelpForWall(eWall(umod)));
@ -398,7 +399,7 @@ EX void switchHardcore() {
else if(hardcore && canmove) { hardcore = false; } else if(hardcore && canmove) { hardcore = false; }
else { hardcore = true; canmove = true; hardcoreAt = turncount; } else { hardcore = true; canmove = true; hardcoreAt = turncount; }
if(hardcore) if(hardcore)
addMessage(XLAT("One wrong move, and it is game over!")); addMessage(XLAT("One wrong move and it is game over!"));
else else
addMessage(XLAT("Not so hardcore?")); addMessage(XLAT("Not so hardcore?"));
if(pureHardcore()) popScreenAll(); if(pureHardcore()) popScreenAll();

View File

@ -593,8 +593,12 @@ EX void wandering() {
else if(c->land == laDragon && (items[itDragon] >= 8 || items[itOrbYendor]) && wchance(items[itDragon], 20)) else if(c->land == laDragon && (items[itDragon] >= 8 || items[itOrbYendor]) && wchance(items[itDragon], 20))
c->monst = moFireElemental; c->monst = moFireElemental;
else if(c->land == laRedRock && wchance(items[itRedGem], 10)) else if(c->land == laRedRock && wchance(items[itRedGem], 10)) {
c->monst = (hrand(10) || peace::on) ? moRedTroll : moHexSnake; if (hrand(10) || peace::on)
c->monst = moRedTroll;
else if (!pseudohept(c))
c->monst = moHexSnake;
}
else if(c->land == laCaves && wchance(items[itGold], 5)) else if(c->land == laCaves && wchance(items[itGold], 5))
c->monst = hrand(3) ? moTroll : moGoblin; c->monst = hrand(3) ? moTroll : moGoblin;

View File

@ -116,7 +116,7 @@ EX vector<orbinfo> orbinfos = {
{orbgenflags::S_NAT_NT, laElementalWall, 1500, 4000, itOrbSummon}, {orbgenflags::S_NAT_NT, laElementalWall, 1500, 4000, itOrbSummon},
{orbgenflags::S_NATIVE, laStorms, 1000, 2500, itOrbStunning}, {orbgenflags::S_NATIVE, laStorms, 1000, 2500, itOrbStunning},
{orbgenflags::S_NATIVE, laOvergrown, 1000, 800, itOrbWoods}, {orbgenflags::S_NATIVE, laOvergrown, 1000, 800, itOrbWoods},
{orbgenflags::S_GUEST, laOvergrown, 1000, 800, itOrbLuck}, {orbgenflags::S_GUEST, laOvergrown, 1000, 0, itOrbLuck},
{orbgenflags::S_NATIVE, laWhirlwind, 1250, 3000, itOrbAir}, {orbgenflags::S_NATIVE, laWhirlwind, 1250, 3000, itOrbAir},
{orbgenflags::S_NATIVE, laHaunted, 1000, 5000, itOrbUndeath}, {orbgenflags::S_NATIVE, laHaunted, 1000, 5000, itOrbUndeath},
{orbgenflags::S_NATIVE, laClearing, 5000, 5000, itOrbFreedom}, {orbgenflags::S_NATIVE, laClearing, 5000, 5000, itOrbFreedom},
@ -240,11 +240,6 @@ EX eOrbLandRelation getOLR(eItem it, eLand l) {
if(it == itOrbDigging && l == laKraken) return olrUseless; if(it == itOrbDigging && l == laKraken) return olrUseless;
if(it == itOrbIllusion && l == laKraken) return olrUseless; if(it == itOrbIllusion && l == laKraken) return olrUseless;
if(it == itOrbSlaying && !among(l,
laMirror, laHell, laEmerald, laDryForest, laCamelot, laPalace, laStorms, laRose, laTortoise, laBurial, laDungeon, laReptile,
laPrairie, laBull, laVolcano, laTerracotta, laRuins, laVariant, laEclectic, laBrownian))
return olrUseless;
if(it == itOrbYendor && among(l, laWhirlwind, laWestWall)) return olrUseless; if(it == itOrbYendor && among(l, laWhirlwind, laWestWall)) return olrUseless;
if(it == itOrbLife && (l == laKraken)) return olrUseless; if(it == itOrbLife && (l == laKraken)) return olrUseless;
@ -276,6 +271,8 @@ EX eOrbLandRelation getOLR(eItem it, eLand l) {
return olrUseless; return olrUseless;
if(it == itOrbLuck && l == laMountain) if(it == itOrbLuck && l == laMountain)
return olrUseless; return olrUseless;
if(it == itOrbLuck && l == laWestWall)
return olrUseless;
if(it == itOrbLuck && l == laCamelot) if(it == itOrbLuck && l == laCamelot)
return olrUseless; return olrUseless;
if(it == itOrbLuck && l == laHaunted) if(it == itOrbLuck && l == laHaunted)
@ -297,6 +294,11 @@ EX eOrbLandRelation getOLR(eItem it, eLand l) {
return olrMonster; return olrMonster;
if(isCrossroads(l) || l == laOcean) if(isCrossroads(l) || l == laOcean)
return olrHub; return olrHub;
if(it == itOrbSlaying && !among(l,
laMirror, laHell, laEmerald, laDryForest, laCamelot, laPalace, laStorms, laRose, laTortoise, laBurial, laDungeon, laReptile,
laPrairie, laBull, laVolcano, laTerracotta, laRuins, laVariant, laEclectic, laBrownian))
return olrUseless;
if(l == laCocytus) if(l == laCocytus)
if(it == itOrbDragon || it == itOrbFire || it == itOrbFlash || it == itOrbLightning) if(it == itOrbDragon || it == itOrbFire || it == itOrbFlash || it == itOrbLightning)
@ -325,6 +327,14 @@ EX eOrbLandRelation getOLR(eItem it, eLand l) {
return olrPrize25; return olrPrize25;
return olrUseless; return olrUseless;
} }
if(it == itOrbWoods && (l == laWarpSea || l == laWarpCoast))
return olrDangerous;
if(it == itOrbWoods && !among(l,
laDryForest, laWineyard, laCaribbean, laOvergrown, laHaunted, laHauntedWall, laHauntedBorder, laTortoise, laFrog, laEclectic,
laVariant))
return olrUseless;
if(it == itShard) { if(it == itShard) {
if(l == laDesert || l == laIce || l == laJungle || l == laGraveyard || if(l == laDesert || l == laIce || l == laJungle || l == laGraveyard ||
@ -394,6 +404,9 @@ EX eOrbLandRelation getOLR(eItem it, eLand l) {
it == itOrbAether || it == itOrbSummon || it == itOrbStone) it == itOrbAether || it == itOrbSummon || it == itOrbStone)
return olrForbidden; return olrForbidden;
} }
if(l == laTerracotta && it == itOrbFriend)
return olrDangerous;
return olrPrize25; return olrPrize25;
} }

View File

@ -1039,10 +1039,10 @@ void poly_attack(cell *dest) {
eMonster orig = dest->monst; eMonster orig = dest->monst;
auto polymonsters = { auto polymonsters = {
moYeti, moRunDog, moRanger, moYeti, moRunDog, moRanger,
moDesertman, moMonkey, moCultist, moMonkey, moCultist,
moFallingDog, moVariantWarrior, moFamiliar, moOrangeDog, moFallingDog, moVariantWarrior, moFamiliar, moOrangeDog,
moRedFox, moFalsePrincess, moResearcher, moRedFox, moFalsePrincess, moResearcher,
moNarciss, moJiangshi, moNarciss,
}; };
int ssf = 0; int ssf = 0;
eMonster target = *(polymonsters.begin() + hrand(isize(polymonsters))); eMonster target = *(polymonsters.begin() + hrand(isize(polymonsters)));
@ -1189,7 +1189,7 @@ EX int check_phase(cell *cf, cell *ct, flagtype flags, cell*& jumpthru) {
forCellCM(c2, cf) { forCellCM(c2, cf) {
if(isNeighbor(c2, ct) && !nonAdjacent(cf, c2) && !nonAdjacent(c2, ct)) { if(isNeighbor(c2, ct) && !nonAdjacent(cf, c2) && !nonAdjacent(c2, ct)) {
jumpthru = c2; jumpthru = c2;
if(passable(ct, cf, P_ISPLAYER | P_PHASE)) { if(passable(ct, cf, flags | P_PHASE)) {
partial = 2; partial = 2;
if(c2->monst || (isWall(c2) && c2->wall != waShrub)) { if(c2->monst || (isWall(c2) && c2->wall != waShrub)) {
return 3; return 3;
@ -1246,7 +1246,7 @@ EX eItem targetRangedOrb(cell *c, orbAction a) {
if(rosedist(cwt.at) == 1) { if(rosedist(cwt.at) == 1) {
int r = rosemap[cwt.at]; int r = rosemap[cwt.at];
int r2 = rosemap[c]; int r2 = rosemap[c];
if(r2 <= r) { if(r2 <= r && !markOrb(itOrbBeauty)) {
if(a == roKeyboard || a == roMouseForce ) if(a == roKeyboard || a == roMouseForce )
addMessage(XLAT("Those roses smell too nicely. You can only target cells closer to them!")); addMessage(XLAT("Those roses smell too nicely. You can only target cells closer to them!"));
return itNone; return itNone;
@ -1574,7 +1574,6 @@ EX int orbcharges(eItem it) {
return inv::on ? 150 : 50; return inv::on ? 150 : 50;
case itOrbWinter: // "pickup-winter" case itOrbWinter: // "pickup-winter"
return inv::on ? 45 : 30; return inv::on ? 45 : 30;
break;
case itOrbBeauty: case itOrbBeauty:
case itOrbEmpathy: case itOrbEmpathy:
case itOrbFreedom: case itOrbFreedom:

View File

@ -1744,7 +1744,7 @@ EX namespace patterns {
try { try {
return ep.parse(); return ep.parse();
} }
catch(hr_parse_exception& ex) { catch(hr_parse_exception&) {
return 0; return 0;
} }
} }

View File

@ -1497,7 +1497,8 @@ EX void swordAttackStatic() {
EX int plague_kills; EX int plague_kills;
EX void spread_plague(cell *mf, cell *mt, int dir, eMonster who) { EX void spread_plague(cell *mf, cell *mt, int dir, eMonster who) {
if(!(who == moPlayer ? markOrb(itOrbPlague) : markEmpathy(itOrbPlague))) return; if(!items[itOrbPlague]) return;
if(who != moPlayer && !items[itOrbEmpathy]) return;
forCellEx(mx, mt) if(celldistance(mx, mf) > celldistance(mx, mf->modmove(dir)) && celldistance(mx, mf) <= 4) { forCellEx(mx, mt) if(celldistance(mx, mf) > celldistance(mx, mf->modmove(dir)) && celldistance(mx, mf) <= 4) {
sideAttackAt(mf, dir, mx, who, itOrbPlague, mt); sideAttackAt(mf, dir, mx, who, itOrbPlague, mt);
} }

View File

@ -183,6 +183,7 @@ EX void initgame() {
if(firstland == laOceanWall) firstland = laOcean; if(firstland == laOceanWall) firstland = laOcean;
if(firstland == laHauntedWall) firstland = laGraveyard; if(firstland == laHauntedWall) firstland = laGraveyard;
if(firstland == laHaunted && !tactic::on) firstland = laGraveyard;
if(firstland == laMercuryRiver) firstland = laTerracotta; if(firstland == laMercuryRiver) firstland = laTerracotta;
if(firstland == laMountain && !tactic::on) firstland = laJungle; if(firstland == laMountain && !tactic::on) firstland = laJungle;
if(firstland == laPrincessQuest) firstland = laPalace; if(firstland == laPrincessQuest) firstland = laPalace;

View File

@ -840,7 +840,7 @@ EX slide default_slides[] = {
QUICKFIND { QUICKFIND {
return (l == laBurial && !items[itOrbSword]); return (l == laBurial && !items[itOrbSword]);
}; };
SHOWLAND ( l == laCrossroads || l == laBurial ); SHOWLAND ( l == laRlyeh || l == laCrossroads || l == laBurial );
} }
}, },
{pcg+"Periodic patterns", 30, LEGAL::UNLIMITED | USE_SLIDE_NAME, {pcg+"Periodic patterns", 30, LEGAL::UNLIMITED | USE_SLIDE_NAME,

View File

@ -724,4 +724,19 @@ EX void open_url(string s) {
#endif #endif
} }
const char *urlhex = "0123456789ABCDEF";
EX void open_wiki(const char *title) {
string url = "https://hyperrogue.miraheze.org/wiki/";
unsigned char c;
for (size_t i = 0; (c = title[i]); ++i) {
if (('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_' || c == '-')
url += c;
else if (c == ' ')
url += "_";
else
url += string("%") + urlhex[c/16] + urlhex[c%16];
}
open_url(url);
}
} }

2
vr.cpp
View File

@ -1336,7 +1336,7 @@ EX void show_vr_settings() {
"If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. " "If the pointer length is 0.5m, the object pointed to is 0.5 meter from the controller. "
"This is used in situations where the controller is used as a 3D mouse, e.g., " "This is used in situations where the controller is used as a 3D mouse, e.g., "
"the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, " "the drawing tool in three-dimensional geometries. When pointing at two-dimensional surfaces, "
"this is not relevant (the pointer is as long as needed to hit the surface.)." "this is not relevant (the pointer is as long as needed to hit the surface)."
)); ));
}); });