From 069f7b0cafa00b223709e36975102d5dff74c6de Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 10 Jul 2017 20:47:38 +0200 Subject: [PATCH] Major refactoring, multisampling --- basegraph.cpp | 1147 ++++ cell.cpp | 12 +- complex.cpp | 14 + config.cpp | 1008 ++++ conformal.cpp | 39 +- control.cpp | 778 +++ dialogs.cpp | 289 +- game.cpp | 6 +- graph.cpp | 4761 +-------------- help.cpp | 816 +++ hud.cpp | 460 ++ hyper.cpp | 28 +- hyper.h | 227 +- hyperpoint.cpp | 2 + hypgraph.cpp | 561 ++ init.cpp | 97 +- kohonen.cpp | 4 +- landgen.cpp | 24 +- language-data.cpp | 14103 ++++++++++++++++++++++++++++++++++++++++++++ mapeditor.cpp | 700 ++- menus.cpp | 1745 ++---- netgen.cpp | 68 +- rogueviz.cpp | 72 +- rug.cpp | 61 +- scores.cpp | 288 + shmup.cpp | 52 +- sound.cpp | 6 +- system.cpp | 59 +- tour.cpp | 91 +- util.cpp | 1 + yendor.cpp | 209 +- 31 files changed, 20872 insertions(+), 6856 deletions(-) create mode 100644 basegraph.cpp create mode 100644 config.cpp create mode 100644 control.cpp create mode 100644 help.cpp create mode 100644 hud.cpp create mode 100644 hypgraph.cpp create mode 100644 language-data.cpp create mode 100644 scores.cpp diff --git a/basegraph.cpp b/basegraph.cpp new file mode 100644 index 00000000..42c8d341 --- /dev/null +++ b/basegraph.cpp @@ -0,0 +1,1147 @@ +int backcolor = 0; +int bordcolor = 0; +int forecolor = 0xFFFFFF; + +#ifndef NOSDL +SDL_Surface *s; + +#ifndef NOTTF +TTF_Font *font[256]; +#endif +#endif + +#ifndef NOSDL +int ZZ; + +int& qpixel(SDL_Surface *surf, int x, int y) { + if(x<0 || y<0 || x >= surf->w || y >= surf->h) return ZZ; + char *p = (char*) surf->pixels; + p += y * surf->pitch; + int *pi = (int*) (p); + return pi[x]; + } + +int qpixel3(SDL_Surface *surf, int x, int y) { + if(x<0 || y<0 || x >= surf->w || y >= surf->h) return ZZ; + char *p = (char*) surf->pixels; + p += y * surf->pitch; + p += x; + int *pi = (int*) (p); + return pi[0]; + } +#endif + +#ifndef EXTERNALFONT +#ifndef NOTTF +void loadfont(int siz) { + if(!font[siz]) { +#ifdef WEB + font[siz] = TTF_OpenFont("sans-serif", siz); +#else + font[siz] = TTF_OpenFont(HYPERPATH "DejaVuSans-Bold.ttf", siz); +#endif + // Destination set by ./configure (in the GitHub repository) + #ifdef FONTDESTDIR + if (font[siz] == NULL) { + font[siz] = TTF_OpenFont(FONTDESTDIR, siz); + } + #endif + if (font[siz] == NULL) { + printf("error: Font file not found\n"); + exit(1); + } + } + } +#endif + +int gl_width(int size, const char *s); + +int textwidth(int siz, const string &str) { + if(size(str) == 0) return 0; + +#ifdef NOTTF +#ifdef GL + return gl_width(siz, str.c_str()); +#else + return 0; +#endif + +#else + + loadfont(siz); + + int w, h; + TTF_SizeUTF8(font[siz], str.c_str(), &w, &h); + // printf("width = %d [%d]\n", w, size(str)); + return w; +#endif + } +#endif + +int textwidth(int siz, const string &str); + +#ifdef IOS + +int textwidth(int siz, const string &str) { + return mainfont->getSize(str, siz / 36.0).width; + } + +#endif + +int gradient(int c0, int c1, ld v0, ld v, ld v1); + +int darkenedby(int c, int lev) { + for(int i=0; i> 1); + return c; + } + +int darkened(int c) { +#ifdef EXTRA_FADEOUT + c = gradient(backcolor, c, 0, extra::fadeout, 1); +#endif + for(int i=0; i> 1) + ((backcolor & 0xFEFEFE) >> 1); + return c; + } + +int darkena(int c, int lev, int a) { + return (darkenedby(c, lev) << 8) + a; + } + +#ifndef GL +void setcameraangle(bool b) { } +#endif + +#ifdef GL + +bool cameraangle_on; + +void setcameraangle(bool b) { + if(cameraangle_on != b) { + glMatrixMode(GL_PROJECTION); + cameraangle_on = b; + ld cam = vid.camera_angle * M_PI / 180; + + GLfloat cc = cos(cam); + GLfloat ss = sin(cam * (b?1:-1)); + + GLfloat yzspin[16] = { + 1, 0, 0, 0, + 0, cc, ss, 0, + 0, -ss, cc, 0, + 0, 0, 0, 1 + }; + + glMultMatrixf(yzspin); + } + } + +void selectEyeGL(int ed) { + DEBB(DF_GRAPH, (debugfile,"selectEyeGL\n")); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glTranslatef((vid.xcenter*2.)/vid.xres - 1, 1 - (vid.ycenter*2.)/vid.yres, 0); + + if(pmodel) { + vid.scrdist = 4 * vid.radius; + + // simulate glOrtho + GLfloat ortho[16] = { + GLfloat(2. / vid.xres), 0, 0, 0, + 0, GLfloat(-2. / vid.yres), 0, 0, + 0, 0, GLfloat(.4 / vid.scrdist), 0, + 0, 0, 0, 1}; + + vid.scrdist = -vid.scrdist; + glMultMatrixf(ortho); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + } + else { + float ve = ed*vid.eye; + ve *= 2; // vid.xres; ve /= vid.radius; + if(ve) + glTranslatef(-(ve * vid.radius) * (vid.alpha - (vid.radius*1./vid.xres) * vid.eye) / vid.xres, 0, 0); + + float lowdepth = .1; + float hidepth = 1e9; + + // simulate glFrustum + GLfloat frustum[16] = { + GLfloat(vid.yres * 1./vid.xres), 0, 0, 0, + 0, 1, 0, 0, + 0, 0, -(hidepth+lowdepth)/(hidepth-lowdepth), -1, + 0, 0, -2*lowdepth*hidepth/(hidepth-lowdepth), 0}; + + glMultMatrixf(frustum); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + GLfloat sc = vid.radius / (vid.yres/2.); + GLfloat mat[16] = {sc,0,0,0, 0,-sc,0,0, 0,0,-1,0, 0,0, 0,1}; + glMultMatrixf(mat); + + if(ve) glTranslatef(ve, 0, vid.eye); + vid.scrdist = vid.yres * sc / 2; + } + + cameraangle_on = false; + } + +void selectEyeMask(int ed) { + if(ed == 0) { + glColorMask( GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE ); + } + else if(ed == 1) { + glColorMask( GL_TRUE,GL_FALSE,GL_FALSE,GL_TRUE ); + } + else if(ed == -1) { + glColorMask( GL_FALSE,GL_TRUE,GL_TRUE,GL_TRUE ); + } + } + +void setGLProjection() { + DEBB(DF_GRAPH, (debugfile,"setGLProjection\n")); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + unsigned char *c = (unsigned char*) (&backcolor); + glClearColor(c[2] / 255.0, c[1] / 255.0, c[0]/255.0, 1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glEnable(GL_BLEND); + if(vid.antialias & AA_LINES) { + glEnable(GL_LINE_SMOOTH); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + } + else glDisable(GL_LINE_SMOOTH); + glLineWidth(vid.linewidth); + + if(vid.antialias & AA_POLY) { + glEnable(GL_POLYGON_SMOOTH); + glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); + } + else glDisable(GL_POLYGON_SMOOTH); + + //glLineWidth(1.0f); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + if(pmodel == mdBall || pmodel == mdHyperboloid) { +#ifdef GL_ES + glClearDepthf(1.0f); +#else + glClearDepth(1.0f); +#endif + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + } + else + glDisable(GL_DEPTH_TEST); + + selectEyeGL(0); + } + +#ifdef MOBILE +#define EXTERNALFONT +#endif + +#ifndef EXTERNALFONT + +struct glfont_t { + GLuint * textures; // Holds The Texture Id's +//GLuint list_base; // Holds The First Display List ID + int widths[128+NUMEXTRA]; + int heights[128+NUMEXTRA]; + float tx[128+NUMEXTRA]; + float ty[128+NUMEXTRA]; + }; + +glfont_t *glfont[256]; + +inline int next_p2 (int a ) +{ + int rval=1; + // rval<<=1 Is A Prettier Way Of Writing rval*=2; + while(rvalw; + int otheight = txt->h; +#endif + + int twidth = next_p2( otwidth ); + int theight = next_p2( otheight ); + +#ifdef NOTTF + int expanded_data[twidth * theight]; +#else + Uint16 expanded_data[twidth * theight]; +#endif + + for(int j=0; j =otwidth || j>=otheight) ? 0 : tpix[tpixindex++]; +#else + expanded_data[(i+j*twidth)] = + ((i>=txt->w || j>=txt->h) ? 0 : ((qpixel(txt, i, j)>>24)&0xFF) * 0x100) | 0x00FF; +#endif + } + + f.widths[ch] = otwidth; + f.heights[ch] = otheight; + + glBindTexture( GL_TEXTURE_2D, f.textures[ch]); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, twidth, theight, 0, +#ifdef NOTTF + GL_RGBA, GL_UNSIGNED_BYTE, +#else + GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, +#endif + expanded_data ); + + float x=(float)otwidth / (float)twidth; + float y=(float)otheight / (float)theight; + f.tx[ch] = x; + f.ty[ch] = y; + } + +void init_glfont(int size) { + if(glfont[size]) return; + DEBB(DF_INIT, (debugfile,"init GL font: %d\n", size)); + + glfont[size] = new glfont_t; + + glfont_t& f(*(glfont[size])); + + f.textures = new GLuint[128+NUMEXTRA]; +//f.list_base = glGenLists(128); + glGenTextures( 128+NUMEXTRA, f.textures ); + if(0) for(int i=0; i<128+NUMEXTRA; i++) + printf("texture %d = %d\n", i, f.textures[i]); + +#ifndef NOTTF + loadfont(size); + if(!font[size]) return; + + char str[2]; str[1] = 0; + + SDL_Color white; + white.r = white.g = white.b = 255; +#endif + +// glListBase(0); + + for(int ch=1;ch<128+NUMEXTRA;ch++) { + + if(ch<32) continue; + +#ifdef NOTTF + sdltogl(NULL, f, ch); + +#else + SDL_Surface *txt; + if(ch < 128) { + str[0] = ch; + txt = TTF_RenderText_Blended(font[size], str, white); + } + else { + txt = TTF_RenderUTF8_Blended(font[size], natchars[ch-128], white); + } + if(txt == NULL) continue; +#ifdef CREATEFONT + generateFont(ch, txt); +#endif + sdltogl(txt, f, ch); +#endif + +#ifndef NOTTF + SDL_FreeSurface(txt); +#endif + } + +//printf("init size=%d ok\n", size); + GLERR("initfont"); + } + +int utfsize(char c) { + unsigned char cu = c; + if(cu < 128) return 1; + if(cu < 224) return 2; + if(cu < 0xF0) return 3; + return 4; + } + +bool eqs(const char* x, const char* y) { + return *y? *x==*y?eqs(x+1,y+1):false:true; + } + +int getnext(const char* s, int& i) { + + int siz = utfsize(s[i]); +// if(fontdeb) printf("s=%s i=%d siz=%d\n", s, i, siz); + if(siz == 1) return s[i++]; + for(int k=0; k vid.fsize || size > 72) gsiz = 72; + +#ifdef FIXEDSIZE + gsiz = 36; +#endif + + init_glfont(gsiz); + +#ifndef NOTTF + if(!font[gsiz]) return 0; +#endif + + glfont_t& f(*glfont[gsiz]); + + int x = 0; + for(int i=0; s[i];) { + int tabid = getnext(s,i); + x += f.widths[tabid] * size/gsiz; + } + + return x; + } + +bool gl_print(int x, int y, int shift, int size, const char *s, int color, int align) { + + int gsiz = size; + if(size > vid.fsize || size > 72) gsiz = 72; + +#ifdef FIXEDSIZE + gsiz = 36; +#endif + + init_glfont(gsiz); + +#ifndef NOTTF + if(!font[gsiz]) return false; +#endif + + glfont_t& f(*glfont[gsiz]); + + glDisable(GL_LIGHTING); + + glEnable(GL_TEXTURE_2D); + + glMatrixMode(GL_MODELVIEW); + + glcolor2((color << 8) | 0xFF); + + int tsize = 0; + + for(int i=0; s[i];) { + tsize += f.widths[getnext(s,i)] * size/gsiz; + } + x -= tsize * align / 16; + y += f.heights[32] * size / (gsiz*2); + + int ysiz = f.heights[32] * size / gsiz; + + bool clicked = (mousex >= x && mousey <= y && mousex <= x+tsize && mousey >= y-ysiz); + + /* extern bool markcorner; + if(clicked && markcorner) { + markcorner = false; + int w = tsize, h = -ysiz; + displaystr(x, y, 1, 10, "X", 0xFFFFFF, 8); + displaystr(x+w, y, 1, 10, "X", 0xFFFFFF, 8); + displaystr(x, y+h, 1, 10, "X", 0xFFFFFF, 8); + displaystr(x+w, y+h, 1, 10, "X", 0xFFFFFF, 8); + markcorner = true; + } */ + + for(int i=0; s[i];) { + + // glListBase(f.list_base); + // glCallList(s[i]); // s[i]); + + int tabid = getnext(s,i); + float fx=f.tx[tabid]; + float fy=f.ty[tabid]; + int wi = f.widths[tabid] * size/gsiz; + int hi = f.heights[tabid] * size/gsiz; + + GLERR("pre-print"); + + for(int ed = (vid.goteyes && shift)?-1:0; ed<2; ed+=2) { + glPushMatrix(); + glTranslatef(x-ed*shift-vid.xcenter,y-vid.ycenter, vid.scrdist); + selectEyeMask(ed); + glBindTexture(GL_TEXTURE_2D, f.textures[tabid]); + +#if 1 + tver[1] = tver[10] = -hi; + tver[6] = tver[9] = wi; + tver[12+4] = tver[12+7] = fy; + tver[12+6] = tver[12+9] = fx; + activateVertexArray(tver, 8); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(3, GL_FLOAT, 0, &tver[12]); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); +#else + glBegin(GL_QUADS); + glTexCoord2d(0,0); glVertex2f(0, -hi); + glTexCoord2d(0,fy); glVertex2f(0, 0); + glTexCoord2d(fx,fy); glVertex2f(wi, 0); + glTexCoord2d(fx,0); glVertex2f(wi, -hi); + glEnd(); +#endif + glPopMatrix(); + } + + if(vid.goteyes) selectEyeMask(0); + + GLERR("print"); + + // int tabid = s[i]; + x += wi; + +/* + printf("point %d,%d\n", x, y); + glBegin(GL_POINTS); + glVertex3f(rand() % 100 - rand() % 100, rand() % 100 - rand() % 100, 100); + glEnd(); */ + + } + + glDisable(GL_TEXTURE_2D); + + return clicked; + } +#endif + +purehookset hooks_resetGL; + +void resetGL() { + DEBB(DF_INIT, (debugfile,"reset GL\n")); + callhooks(hooks_resetGL); +#ifndef EXTERNALFONT + for(int i=0; i<128; i++) if(glfont[i]) { + delete glfont[i]; + glfont[i] = NULL; + } +#endif + buildpolys(); + } + +#endif + +#ifndef MOBILE +bool displaystr(int x, int y, int shift, int size, const char *str, int color, int align) { + + if(strlen(str) == 0) return false; + + if(size < 4 || size > 255) { + return false; + } + +#ifdef GL + if(vid.usingGL) return gl_print(x, y, shift, size, str, color, align); +#endif + +#ifdef NOTTF + static bool towarn = true; + if(towarn) towarn = false, printf("WARNING: NOTTF works only with OpenGL!\n"); + return false; +#else + + SDL_Color col; + col.r = (color >> 16) & 255; + col.g = (color >> 8 ) & 255; + col.b = (color >> 0 ) & 255; + + col.r >>= darken; col.g >>= darken; col.b >>= darken; + + loadfont(size); + + SDL_Surface *txt = ((vid.antialias & AA_FONT)?TTF_RenderUTF8_Blended:TTF_RenderUTF8_Solid)(font[size], str, col); + + if(txt == NULL) return false; + + SDL_Rect rect; + + rect.w = txt->w; + rect.h = txt->h; + + rect.x = x - rect.w * align / 16; + rect.y = y - rect.h/2; + + bool clicked = (mousex >= rect.x && mousey >= rect.y && mousex <= rect.x+rect.w && mousey <= rect.y+rect.h); + + if(shift) { + SDL_Surface* txt2 = SDL_DisplayFormat(txt); + SDL_LockSurface(txt2); + SDL_LockSurface(s); + int c0 = qpixel(txt2, 0, 0); + for(int yy=0; yy= 2) { + int b1 = b-1; + displaystr(x-b1, y-b1, 0, size, s, p, align); + displaystr(x-b1, y+b1, 0, size, s, p, align); + displaystr(x+b1, y-b1, 0, size, s, p, align); + displaystr(x+b1, y+b1, 0, size, s, p, align); + } + return displaystr(x, y, 0, size, s, color, align); + } + +bool displayfr(int x, int y, int b, int size, const string &s, int color, int align) { + return displayfrSP(x, y, 0, b, size, s, color, align, poly_outline>>8); + } + +bool displaychr(int x, int y, int shift, int size, char chr, int col) { + + char buf[2]; + buf[0] = chr; buf[1] = 0; + return displaystr(x, y, shift, size, buf, col, 8); + } + +#else + +vector graphdata; + +void gdpush(int t) { + graphdata.push_back(t); + } + +bool displaychr(int x, int y, int shift, int size, char chr, int col) { + gdpush(2); gdpush(x); gdpush(y); gdpush(8); + gdpush(col); gdpush(size); gdpush(0); + gdpush(1); gdpush(chr); + return false; + } + +void gdpush_utf8(const string& s) { + int g = (int) graphdata.size(), q = 0; + gdpush((int) s.size()); for(int i=0; i= 192 && uch < 224) { + int u = ((s[i] - 192)&31) << 6; + i++; + u += (s[i] - 128) & 63; + gdpush(u); q++; + } + else +#endif + { + gdpush(s[i]); q++; + } + } + graphdata[g] = q; + } + +bool displayfr(int x, int y, int b, int size, const string &s, int color, int align) { + gdpush(2); gdpush(x); gdpush(y); gdpush(align); + gdpush(color); gdpush(size); gdpush(b); + gdpush_utf8(s); + int mx = mousex - x; + int my = mousey - y; + int len = textwidth(size, s); + return + mx >= -len*align/32 && mx <= +len*(16-align)/32 && + my >= -size*3/4 && my <= +size*3/4; + } + +bool displaystr(int x, int y, int shift, int size, const string &s, int color, int align) { + return displayfr(x,y,0,size,s,color,align); + } + +bool displaystr(int x, int y, int shift, int size, char const *s, int color, int align) { + return displayfr(x,y,0,size,s,color,align); + } + +#endif + +bool displaynum(int x, int y, int shift, int size, int col, int val, string title) { + char buf[64]; + sprintf(buf, "%d", val); + bool b1 = displayfr(x-8, y, 1, size, buf, col, 16); + bool b2 = displayfr(x, y, 1, size, title, col, 0); + if((b1 || b2) && gtouched) { + col ^= 0x00FFFF; + displayfr(x-8, y, 1, size, buf, col, 16); + displayfr(x, y, 1, size, title, col, 0); + } + return b1 || b2; + } + +vector msgs; + +vector gamelog; + +void flashMessages() { + for(int i=0; i& log) { + + if(size(log) != 0) { + msginfo& last = log[size(log)-1]; + if(last.msg == m.msg) { + int q = m.quantity + last.quantity; + last = m; last.quantity = q; + return; + } + } + if(size(log) < 200) + log.push_back(m); + else { + for(int i=0; i 1) s += " (x" + its(msgs[j].quantity) + ")"; + poly_outline = gradient(bordcolor, backcolor, 0, age, 256*vid.flashtime) << 8; + displayfr(x, y, 1, vid.fsize, s, gradient(forecolor, backcolor, 0, age, 256*vid.flashtime), 8); + msgs[i++] = msgs[j]; + } + } + msgs.resize(i); + } + +int gradient(int c0, int c1, ld v0, ld v, ld v1) { + int vv = int(256 * ((v-v0) / (v1-v0))); + int c = 0; + for(int a=0; a<3; a++) { + int p0 = (c0 >> (8*a)) & 255; + int p1 = (c1 >> (8*a)) & 255; + int p = (p0*(256-vv) + p1*vv + 127) >> 8; + c |= p << (8*a); + } + return c; + } + +void drawCircle(int x, int y, int size, int color) { + if(size < 0) size = -size; + #ifdef GL + if(vid.usingGL) { + qglcoords = 0; + glcolor2(color); + x -= vid.xcenter; y -= vid.ycenter; + int pts = size * 4; + if(pts > 1500) pts = 1500; + if(ISMOBILE && pts > 72) pts = 72; + for(int r=0; r 1500) pts = 1500; + for(int r=0; r v3(sightrange, (cheater && sightrange < 10) ? 10 : sightrange); + + if(cheater) doOvergenerate(); + + time_t timer; + timer = time(NULL); + + dynamicval v(vid, vid); + dynamicval v2(inHighQual, true); + dynamicval v4(cheater, 0); + dynamicval v6(auraNOGL, fname ? true : false); + + vid.xres = vid.yres = pngres; + if(pngformat == 1) vid.xres = vid.yres * 4/3; + if(pngformat == 2) vid.xres = vid.yres * 16/9; + if(pngformat == 3) { + vid.xres = vid.yres * 22/16; + while(vid.xres & 15) vid.xres++; + } + printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); + + vid.usingGL = false; + // if(vid.pmodel == 0) vid.scale = 0.99; + calcparam(); + #ifdef ROGUEVIZ + rogueviz::fixparam(); + #endif + + printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); + + dynamicval v5(s, SDL_CreateRGBSurface(SDL_SWSURFACE,vid.xres,vid.yres,32,0,0,0,0)); + + darken = 0; + + int numi = (fname?1:2); + + for(int i=0; i vid.xscr) vid.xres = vid.xscr * 9/10, setfsize = true; + if(vid.yres > vid.yscr) vid.yres = vid.yscr * 9/10, setfsize = true; + } + + if(setfsize) vid.fsize = min(vid.yres / 32, vid.xres / 48), setfsize = false; + + int flags = 0; + +#ifdef GL + if(vid.usingGL) { + flags = SDL_OPENGL | SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER; + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); + + if(vid.antialias && AA_MULTI) { + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 16); + glEnable(GL_MULTISAMPLE); + } + else + glDisable(GL_MULTISAMPLE); + } +#endif + + int sizeflag = (vid.full ? SDL_FULLSCREEN : SDL_RESIZABLE); + + s= SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | sizeflag); + + if(vid.full && !s) { + vid.xres = vid.xscr; + vid.yres = vid.yscr; + vid.fsize = min(vid.yres / 32, vid.xres / 48); + s = SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | SDL_FULLSCREEN); + } + + if(!s) { + addMessage("Failed to set the graphical mode: "+its(vid.xres)+"x"+its(vid.yres)+(vid.full ? " fullscreen" : " windowed")); + vid.xres = 640; + vid.yres = 480; + s = SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | SDL_RESIZABLE); + } + +#ifdef GL + if(vid.usingGL) { + glViewport(0, 0, vid.xres, vid.yres); + resetGL(); + } +#endif + } +#endif + +bool noGUI = false; + +void initgraph() { + + DEBB(DF_INIT, (debugfile,"initgraph\n")); + + initConfig(); + joyx = joyy = 0; joydir.d = -1; + + restartGraph(); + + initgeo(); + + buildpolys(); + + if(noGUI) { +#ifdef USE_COMMANDLINE + arg::read(2); +#endif + return; + } + + #ifndef NOSDL + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1) + { + printf("Failed to initialize video.\n"); + exit(2); + } + +#ifdef WEB + vid.xscr = vid.xres = 1200; + vid.yscr = vid.yres = 900; +#else + const SDL_VideoInfo *inf = SDL_GetVideoInfo(); + vid.xscr = vid.xres = inf->current_w; + vid.yscr = vid.yres = inf->current_h; +#endif + + SDL_WM_SetCaption("HyperRogue " VER, "HyperRogue " VER); + #endif + + preparesort(); +#ifndef NOCONFIG + loadConfig(); +#endif + +#ifdef USE_COMMANDLINE + arg::read(2); +#endif + + #ifndef NOSDL + setvideomode(); + if(!s) { + printf("Failed to initialize graphics.\n"); + exit(2); + } + + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableUNICODE(1); + +#ifndef NOTTF + if(TTF_Init() != 0) { + printf("Failed to initialize TTF.\n"); + exit(2); + } +#endif + + initJoysticks(); + + #ifdef SDLAUDIO + initAudio(); + #endif + + #endif + } + +void cleargraph() { + DEBB(DF_INIT, (debugfile,"clear graph\n")); +#ifndef NOTTF + for(int i=0; i<256; i++) if(font[i]) TTF_CloseFont(font[i]); +#endif +#ifndef EXTERNALFONT +#ifdef GL + for(int i=0; i<128; i++) if(glfont[i]) delete glfont[i]; +#endif +#endif +#ifndef NOSDL +#ifndef SIMULATE_JOYSTICK + closeJoysticks(); +#endif + SDL_Quit(); +#endif + } + +int calcfps() { + #define CFPS 30 + static int last[CFPS], lidx = 0; + int ct = ticks; + int ret = ct - last[lidx]; + last[lidx] = ct; + lidx++; lidx %= CFPS; + if(ret == 0) return 0; + return (1000 * CFPS) / ret; + } + diff --git a/cell.cpp b/cell.cpp index c5fcfb87..cea000b1 100644 --- a/cell.cpp +++ b/cell.cpp @@ -1501,17 +1501,7 @@ void clearCellMemory() { allmaps.clear(); } -void clearMemory() { - extern void clearGameMemory(); - clearGameMemory(); - shmup::clearMemory(); - cleargraphmemory(); -#ifndef NOEDIT - mapeditor::clearModelCells(); -#endif - clearCellMemory(); - DEBMEM ( printf("ok\n"); ) - } +auto cellhooks = addHook(clearmemory, 500, clearCellMemory); int getHemisphere(cell *c, int which) { if(torus) return 0; diff --git a/complex.cpp b/complex.cpp index 60f5143b..c777d3ce 100644 --- a/complex.cpp +++ b/complex.cpp @@ -2761,3 +2761,17 @@ namespace ca { } } } + +auto ccm = addHook(clearmemory, 0, [] () { + offscreen.clear(); + princess::clear(); + mirrors.clear(); + clearing::bpdata.clear(); + tortoise::emap.clear(); + tortoise::babymap.clear(); + prairie::lasttreasure = NULL; + prairie::enter = NULL; + prairie::tchoices.clear(); + prairie::beaststogen.clear(); + }); + diff --git a/config.cpp b/config.cpp new file mode 100644 index 00000000..c541dd2d --- /dev/null +++ b/config.cpp @@ -0,0 +1,1008 @@ +videopar vid; + +charstyle& getcs() { + if(multi::players>1 && multi::cpid >= 0 && multi::cpid < multi::players) + return multi::scs[multi::cpid]; + else + return vid.cs; + } + +string csnameid(int id) { + if(id == 0) return XLAT("male"); + if(id == 1) return XLAT("female"); + if(id == 2) return XLAT("Prince"); + if(id == 3) return XLAT("Princess"); + if(id == 4 || id == 5) return XLAT("cat"); + if(id == 6 || id == 7) return XLAT("dog"); + if(id == 8 || id == 9) return XLATN("Familiar"); + return XLAT("none"); + } + +string csname(charstyle& cs) { + return csnameid(cs.charid); + } + +int playergender() { + return (getcs().charid&1) ? GEN_F : GEN_M; + } +int princessgender() { + int g = playergender(); + if(vid.samegender) return g; + return g == GEN_M ? GEN_F : GEN_M; + } + +int default_language; + +int lang() { + if(vid.language >= 0) + return vid.language; + return default_language; + } + +// Hyperbolic Rogue -- configuration + +// Copyright (C) 2017- Zeno Rogue, see 'hyper.cpp' for details + +bool autojoy = true; + +/*struct saver { + string name; + virtual string save(); + virtual void load(string& s); + }; + +struct intsaver : saver { + int& val; + int dft; + void intsaver() { val = dft; } + string save() { return its(val); } + void load(string& s) { val = atoi(s.c_str()); } + }; + +struct hexsaver : saver { + int& val; + int dft; + void intsaver() { val = dft; } + string save() { return itsh(val); } + void load(string& s) { val = strtol(s.c_str(), 16); } + }; + +struct ldsaver : saver { + ld& val; + ld dft; + void intsaver() { val = dft; } + string save() { return ffts(val); } + void load(string& s) { val = atof(s.c_str()); } + }; + +vector> savers; + +void initConfig0() { + savers.push_back(make_shared ({"cs.charid", cs.charid, 0})); + } +*/ + +// R:239, G:208, B:207 + +unsigned int skincolors[] = { 7, 0xD0D0D0FF, 0xEFD0C9FF, 0xC77A58FF, 0xA58869FF, 0x602010FF, 0xFFDCB1FF, 0xEDE4C8FF }; +unsigned int haircolors[] = { 8, 0x686868FF, 0x8C684AFF, 0xF2E1AEFF, 0xB55239FF, 0xFFFFFFFF, 0x804000FF, 0x502810FF, 0x301800FF }; +unsigned int dresscolors[] = { 6, 0xC00000FF, 0x00C000FF, 0x0000C0FF, 0xC0C000FF, 0xC0C0C0FF, 0x202020FF }; +unsigned int dresscolors2[] = { 7, 0x8080FFC0, 0x80FF80C0, 0xFF8080C0, 0xFFFF80C0, 0xFF80FFC0, 0x80FFFFC0, 0xFFFFFF80 }; +unsigned int swordcolors[] = { 6, 0xC0C0C0FF, 0xFFFFFFFF, 0xFFC0C0FF, 0xC0C0FFFF, 0x808080FF, 0x202020FF }; +unsigned int eyecolors[] = { 4, 0x00C000FF, 0x0000C0FF, 0xC00000FF, 0xC0C000FF }; + + +void initcs(charstyle &cs) { + cs.charid = 0; + cs.skincolor = 0xD0D0D0FF; + cs.haircolor = 0x686868FF; + cs.dresscolor = 0xC00000FF; + cs.swordcolor = 0xD0D0D0FF; + cs.dresscolor2= 0x8080FFC0; + cs.uicolor = 0xFF0000FF; + } + +#ifndef NOCONFIG +void savecs(FILE *f, charstyle& cs, int xvernum) { + int gflags = cs.charid; + if(vid.samegender) gflags |= 16; + + fprintf(f, "%d %d %08x %08x %08x %08x", + gflags, vid.language, cs.skincolor, cs.haircolor, cs.swordcolor, cs.dresscolor); + if(cs.charid == 3) fprintf(f, " %08x", cs.dresscolor2); + if(xvernum >= 8990) fprintf(f, " %x", cs.uicolor); + fprintf(f, "\n"); + } + +void loadcs(FILE *f, charstyle& cs, int xvernum) { + int gflags, err = + fscanf(f, "%d%d%x%x%x%x", &gflags, &vid.language, &cs.skincolor, &cs.haircolor, &cs.swordcolor, &cs.dresscolor); + + if(err) cs.charid = gflags & 15; + if(err) vid.samegender = (gflags & 16) ? true : false; + if(cs.charid == 3) if(fscanf(f, "%x", &cs.dresscolor2)) + ; + if(xvernum >= 8990) if(fscanf(f, "%x", &cs.uicolor)) + ; + } + +void initConfig() { + vid.usingGL = true; + vid.antialias = AA_NOGL | AA_FONT | AA_LINES | AA_LINEWIDTH | AA_VERSION; + vid.linewidth = 1; + vid.flashtime = 8; + vid.scale = 1; + vid.alpha = 1; + vid.sspeed = 0; + vid.mspeed = 1; + vid.eye = 0; + vid.full = false; + vid.ballangle = 20; + vid.yshift = 0; + vid.camera_angle = 0; + vid.ballproj = 1; + vid.aurastr = 128; + vid.aurasmoothen = 5; + vid.graphglyph = 1; + +#ifdef ANDROID + vid.monmode = 2; + vid.wallmode = 3; +#else +#ifdef PANDORA + vid.monmode = 2; + vid.wallmode = 3; +#else + vid.monmode = 4; + vid.wallmode = 5; +#endif +#endif + + vid.particles = 1; + vid.mobilecompasssize = 30; + + vid.joyvalue = 4800; + vid.joyvalue2 = 5600; + vid.joypanthreshold = 2500; +#ifdef PANDORA + vid.joypanspeed = 0.0001; +#else + vid.joypanspeed = 0; +#endif + + vid.framelimit = 75; + vid.axes = 1; + vid.shifttarget = 2; + vid.steamscore = 1; + + initcs(vid.cs); + + vid.killreduction = 0; + + vid.samegender = false; + vid.language = -1; + + vid.drawmousecircle = false; + vid.revcontrol = false; +#ifdef MOBILE + vid.drawmousecircle = true; +#endif +#ifdef PANDORA + vid.drawmousecircle = true; +#endif + + shmup::initConfig(); + } + +void saveConfig() { + DEBB(DF_INIT, (debugfile,"save config\n")); + FILE *f = fopen(conffile, "wt"); + if(!f) { + addMessage(s0 + "Could not open the config file: " + conffile); + return; + } + fprintf(f, "%d %d %d %d\n", vid.xres, vid.yres, vid.full, vid.fsize); + fprintf(f, "%f %f %f %f\n", float(vid.scale), float(vid.eye), float(vid.alpha), float(vid.sspeed)); + fprintf(f, "%d %d %d %d %d %d %d\n", vid.wallmode, vid.monmode, vid.axes, musicvolume, vid.framelimit, vid.usingGL, vid.antialias); + fprintf(f, "%d %d %d %f %d %d\n", vid.joyvalue, vid.joyvalue2, vid.joypanthreshold, float(vid.joypanspeed), autojoy, vid.flashtime); + + savecs(f, vid.cs, 0); + + fprintf(f, "%d %d\n", vid.darkhepta, vid.shifttarget); + + fprintf(f, "%d %d %d %d\n", euclid, euclidland, shmup::on, hardcore); + + shmup::saveConfig(f); + + fprintf(f, "%d %d %d %d %f %d %d\n", rug::renderonce, rug::rendernogl, rug::texturesize, purehepta, rug::scale, vid.steamscore, chaosmode); + + fprintf(f, "%d %d %f %d %d %f\n", + pmodel, polygonal::SI, float(polygonal::STAR), polygonal::deg, + conformal::includeHistory, float(conformal::lvspeed)); + + fprintf(f, "%d %d %d %d %d %d\n", + conformal::bandhalf, conformal::bandsegment, + conformal::rotation, conformal::autoband, conformal::autobandhistory, + conformal::dospiral); + + fprintf(f, "%d", polygonal::maxcoef); + for(int i=0; i<=polygonal::maxcoef; i++) fprintf(f, " %lf %lf", + (double) real(polygonal::coef[i]), (double) imag(polygonal::coef[i])); + + fprintf(f, "\n%d %d %d %f %d %d\n", + vid.revcontrol, vid.drawmousecircle, sightrange, float(vid.mspeed), effvolume, vid.particles); + + { + int pt_depth = 0, pt_camera = 0, pt_alpha = 0; + using namespace geom3; + if(tc_depth > tc_camera) pt_depth++; + if(tc_depth < tc_camera) pt_camera++; + if(tc_depth > tc_alpha ) pt_depth++; + if(tc_depth < tc_alpha ) pt_alpha ++; + if(tc_alpha > tc_camera) pt_alpha++; + if(tc_alpha < tc_camera) pt_camera++; + + fprintf(f, "%f %f %f %f %f %f %f %d %d %d %f %f %d\n", + float(geom3::depth), float(geom3::camera), float(geom3::wall_height), + float(geom3::rock_wall_ratio), + float(geom3::human_wall_ratio), + float(geom3::lake_top), + float(geom3::lake_bottom), + pt_depth, pt_camera, pt_alpha, + float(geom3::highdetail), float(geom3::middetail), + glyphsortorder); + + fprintf(f, "%f %f %f %f\n", + float(vid.yshift), float(vid.camera_angle), + float(vid.ballangle), float(vid.ballproj) + ); + + fprintf(f, "%d %d %d %d %f\n", vid.mobilecompasssize, vid.aurastr, vid.aurasmoothen, vid.graphglyph, float(vid.linewidth)); + } + + fprintf(f, "\n\nThis is a configuration file for HyperRogue (version " VER ")\n"); + fprintf(f, "\n\nThe numbers are:\n"); + fprintf(f, "screen width & height, fullscreen mode (0=windowed, 1=fullscreen), font size\n"); + fprintf(f, "scale, eye distance, parameter, scrolling speed\n"); + fprintf(f, "wallmode, monster mode, cross mode, music volume, framerate limit, usingGL, antialiasing flags\n"); + fprintf(f, "calibrate first joystick (threshold A, threshold B), calibrate second joystick (pan threshold, pan speed), joy mode\n"); + fprintf(f, "gender (1=female, 16=same gender prince), language, skin color, hair color, sword color, dress color\n"); + fprintf(f, "darken hepta, shift target\n"); + fprintf(f, "euclid, euclid land, shmup, hardcore\n"); + fprintf(f, "version number, shmup players, alwaysuse, shmup keyboard/joystick config\n"); + fprintf(f, "hypersian rug config: renderonce, rendernogl, texturesize; purehepta; rug scale; share score; chaosmode\n"); + fprintf(f, "conformal: model, sides, star, degree, includeHistory, speed\n"); + fprintf(f, "conformal: bandwidth, segment, rotation, autoband, autohistory, dospiral\n"); + fprintf(f, "conformal: degree, (degree+1) times {real, imag}\n"); + fprintf(f, "vid.revcontrol, drawmousecircle, sight range, movement animation speed, sound effect volume, particle effects\n"); + fprintf(f, "3D parameters, sort order\n"); + fprintf(f, "yhsift, camera angle, ball angle, ball projection\n"); + fprintf(f, "compass size, aura strength, aura smoothen factor, graphical glyphs\n"); + + fclose(f); +#ifndef MOBILE + addMessage(s0 + "Configuration saved to: " + conffile); +#else + addMessage(s0 + "Configuration saved"); +#endif + } + +void readf(FILE *f, ld& x) { + double fl = x; + if(fscanf(f, "%lf", &fl)) + ; + x = fl; + } + +void loadConfig() { + + DEBB(DF_INIT, (debugfile,"load config\n")); + vid.xres = 9999; vid.yres = 9999; vid.framelimit = 300; + FILE *f = fopen(conffile, "rt"); + if(f) { + int fs, gl=1, aa=1, bb=1, cc, dd, ee; + int err; + err=fscanf(f, "%d%d%d%d", &vid.xres, &vid.yres, &fs, &vid.fsize); + vid.full = fs; + float a, b, c, d; + err=fscanf(f, "%f%f%f%f\n", &a, &b, &c, &d); + if(err == 4) { + vid.scale = a; vid.eye = b; vid.alpha = c; vid.sspeed = d; + } + err=fscanf(f, "%d%d%d%d%d%d%d", &vid.wallmode, &vid.monmode, &vid.axes, &musicvolume, &vid.framelimit, &gl, &vid.antialias); + vid.usingGL = gl; + if(vid.antialias == 0) vid.antialias = AA_VERSION | AA_LINES | AA_LINEWIDTH; + if(vid.antialias == 1) vid.antialias = AA_NOGL | AA_VERSION | AA_LINES | AA_LINEWIDTH | AA_FONT; + double jps = vid.joypanspeed; + err=fscanf(f, "%d%d%d%lf%d%d", &vid.joyvalue, &vid.joyvalue2, &vid.joypanthreshold, &jps, &aa, &vid.flashtime); + vid.joypanspeed = jps; + autojoy = aa; aa = 0; + + loadcs(f, vid.cs, 0); + + aa=0; bb=0; + err=fscanf(f, "%d%d", &aa, &bb); + vid.darkhepta = aa; vid.shifttarget = bb; + + aa = geometry; bb = euclidland; cc = shmup::on; dd = hardcore; + err=fscanf(f, "%d%d%d%d", &aa, &bb, &cc, &dd); + geometry = eGeometry(aa); euclidland = eLand(bb); shmup::on = cc; hardcore = dd; + + shmup::loadConfig(f); + + aa = rug::renderonce; bb = rug::rendernogl; cc = purehepta; dd = chaosmode; ee = vid.steamscore; + double rs = rug::scale; + err=fscanf(f, "%d%d%d%d%lf%d%d", &aa, &bb, &rug::texturesize, &cc, &rs, &ee, &dd); + rug::renderonce = aa; rug::rendernogl = bb; purehepta = cc; chaosmode = dd; vid.steamscore = ee; + rug::scale = rs; + + aa=conformal::includeHistory; + double ps = polygonal::STAR, lv = conformal::lvspeed; + int pmb = pmodel; + err=fscanf(f, "%d%d%lf%d%d%lf", + &pmb, &polygonal::SI, &ps, &polygonal::deg, + &aa, &lv); + pmodel = eModel(pmb); + conformal::includeHistory = aa; polygonal::STAR = ps; conformal::lvspeed = lv; + + aa=conformal::autoband; bb=conformal::autobandhistory; cc=conformal::dospiral; + err=fscanf(f, "%d%d%d%d%d%d", + &conformal::bandhalf, &conformal::bandsegment, &conformal::rotation, + &aa, &bb, &cc); + conformal::autoband = aa; conformal::autobandhistory = bb; conformal::dospiral = cc; + + err=fscanf(f, "%d", &polygonal::maxcoef); + if(polygonal::maxcoef < 0) polygonal::maxcoef = 0; + if(polygonal::maxcoef > polygonal::MSI) polygonal::maxcoef = polygonal::MSI; + for(int i=0; i<=polygonal::maxcoef; i++) { + double re=0, im=0; + err=fscanf(f, "%lf%lf", &re, &im); + polygonal::coef[i] = cld(re, im); + } + + aa=vid.revcontrol; bb=vid.drawmousecircle; + d = vid.mspeed; + err=fscanf(f, "%d%d%d%f%d%d", &aa, &bb, &sightrange, &d, &effvolume, &vid.particles); + vid.mspeed = d; + if(sightrange < 4) sightrange = 4; + if(sightrange > 7) sightrange = 7; + vid.revcontrol = aa; vid.drawmousecircle = bb; + + readf(f, geom3::depth); readf(f, geom3::camera); readf(f, geom3::wall_height); + readf(f, geom3::rock_wall_ratio); readf(f, geom3::human_wall_ratio); + readf(f, geom3::lake_top); readf(f, geom3::lake_bottom); + + err=fscanf(f, "%d %d %d", &geom3::tc_depth, &geom3::tc_camera, &geom3::tc_alpha); + + readf(f, geom3::highdetail); + geom3::middetail = 200; readf(f, geom3::middetail); + if(geom3::middetail == 200) { + if(ISMOBILE) + geom3::highdetail = 0, geom3::middetail = 3; + else + geom3::highdetail = geom3::middetail = 5; + } + + int gso = glyphsortorder; err=fscanf(f, "%d", &gso); glyphsortorder = eGlyphsortorder(gso); + + readf(f, vid.yshift); readf(f, vid.camera_angle); readf(f, vid.ballangle); readf(f, vid.ballproj); + + jps = vid.linewidth; + err=fscanf(f, "%d%d%d%d%lf\n", &vid.mobilecompasssize, &vid.aurastr, &vid.aurasmoothen, &vid.graphglyph, &jps); + vid.linewidth = jps; + + fclose(f); + DEBB(DF_INIT, (debugfile,"Loaded configuration: %s\n", conffile)); + + if(err) + ; + } + + precalc(); + } +#endif + +void showAllConfig() { + dialog::addBreak(50); + dialog::addItem(XLAT("exit configuration"), 'v'); +#ifndef NOCONFIG + dialog::addItem(XLAT("save the current config"), 's'); +#endif + } + +void handleAllConfig(int sym, int uni) { + if(sym == SDLK_F1 || uni == 'h') gotoHelp(help); + + else if(uni == 'v') popScreen(); + else if(sym == SDLK_ESCAPE) popScreen(); +#ifndef NOCONFIG + else if(uni == 's') saveConfig(); +#endif + } + +void showGraphConfig() { + gamescreen(3); + + dialog::init(XLAT("graphics configuration")); + + #ifndef ONEGRAPH + #ifdef GL + dialog::addBoolItem(XLAT("openGL mode"), vid.usingGL, 'o'); + #endif + #endif + + if(!vid.usingGL) + dialog::addBoolItem(XLAT("anti-aliasing"), vid.antialias & AA_NOGL, 'O'); + + if(vid.usingGL) + dialog::addSelItem(XLAT("anti-aliasing"), + (vid.antialias & AA_POLY) ? "polygons" : + (vid.antialias & AA_LINES) ? "lines" : + (vid.antialias & AA_MULTI) ? "multisampling" : + "NO", 'O'); + + if(vid.usingGL) { + dialog::addSelItem(XLAT("line width"), fts(vid.linewidth), 'w'); +// dialog::addBoolItem(XLAT("finer lines at the boundary"), vid.antialias & AA_LINEWIDTH, 'b'); + } + + #ifndef MOBWEB + dialog::addSelItem(XLAT("framerate limit"), its(vid.framelimit), 'l'); + #endif + +#ifndef IOS + dialog::addBoolItem(XLAT("fullscreen mode"), (vid.full), 'f'); +#endif + + dialog::addSelItem(XLAT("scrolling speed"), fts(vid.sspeed), 'a'); + dialog::addSelItem(XLAT("movement animation speed"), fts(vid.mspeed), 'm'); + + dialog::addBoolItem(XLAT("extra graphical effects"), (vid.particles), 'u'); + +#ifdef WHATEVER + dialog::addSelItem(XLAT("whatever"), fts(whatever), 'j'); +#endif + + const char *glyphsortnames[6] = { + "first on top", "first on bottom", + "last on top", "last on bottom", + "by land", "by number" + }; + + const char *glyphmodenames[3] = {"letters", "auto", "images"}; + dialog::addSelItem(XLAT("inventory/kill sorting"), XLAT(glyphsortnames[glyphsortorder]), 'k'); + + dialog::addSelItem(XLAT("inventory/kill mode"), XLAT(glyphmodenames[vid.graphglyph]), 'd'); + +#ifdef MOBILE + dialog::addSelItem(XLAT("font scale"), its(fontscale), 'b'); +#endif + + dialog::addSelItem(XLAT("sight range"), its(sightrange), 'r'); + +#ifdef MOBILE + dialog::addSelItem(XLAT("compass size"), its(vid.mobilecompasssize), 'c'); +#endif + + dialog::addSelItem(XLAT("aura brightness"), its(vid.aurastr), 'z'); + dialog::addSelItem(XLAT("aura smoothening factor"), its(vid.aurasmoothen), 'x'); + + showAllConfig(); + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + + if(uni == 'O') uni = 'o', shiftmul = -1; + + char xuni = uni | 96; + + if(xuni == 'u') vid.particles = !vid.particles; + if(xuni == 'd') vid.graphglyph = (1+vid.graphglyph)%3; + + if(xuni == 'j') { + dialog::editNumber(whatever, -10, 10, 1, 0, XLAT("whatever"), + XLAT("Whatever.")); + dialog::sidedialog = true; + } + + if(xuni == 'a') dialog::editNumber(vid.sspeed, -5, 5, 1, 0, + XLAT("scrolling speed"), + XLAT("+5 = center instantly, -5 = do not center the map")); + + if(xuni == 'm') dialog::editNumber(vid.mspeed, -5, 5, 1, 0, + XLAT("movement animation speed"), + XLAT("+5 = move instantly")); + + if(xuni == 'r') { + dialog::editNumber(sightrange, 4, cheater ? 10 : 7, 1, 7, XLAT("sight range"), + XLAT("Roughly 42% cells are on the edge of your sight range. Reducing " + "the sight range makes HyperRogue work faster, but also makes " + "the game effectively harder.")); + dialog::sidedialog = true; + } + + if(xuni == 'k') { + glyphsortorder = eGlyphsortorder((glyphsortorder+6+(shiftmul>0?1:-1)) % gsoMAX); + } + + if(xuni == 'f') switchFullscreen(); + + #ifndef ONEGRAPH + if(xuni == 'o' && shiftmul > 0) switchGL(); + #endif + + if(xuni == 'o' && shiftmul < 0) { + if(!vid.usingGL) + vid.antialias ^= AA_NOGL | AA_FONT; + else if(vid.antialias & AA_MULTI) + vid.antialias ^= AA_MULTI; + else if(vid.antialias & AA_POLY) + vid.antialias ^= AA_POLY | AA_LINES | AA_MULTI; + else if(vid.antialias & AA_LINES) + vid.antialias |= AA_POLY; + else + vid.antialias |= AA_LINES; + setvideomode(); + } + + // if(xuni == 'b') vid.antialias ^= AA_LINEWIDTH; + + if(xuni == 'w' && vid.usingGL) + dialog::editNumber(vid.linewidth, 0, 10, 0.1, 1, XLAT("line width"), ""); + + if(xuni == 'c') + dialog::editNumber(vid.mobilecompasssize, 0, 100, 10, 20, XLAT("compass size"), ""); + + if(xuni == 'l') + dialog::editNumber(vid.framelimit, 5, 300, 10, 300, XLAT("framerate limit"), ""); + + #ifdef MOBILE + if(xuni =='b') + dialog::editNumber(fontscale, 0, 400, 10, 100, XLAT("font scale"), ""); + #endif + + if(xuni =='z') + dialog::editNumber(vid.aurastr, 0, 256, 10, 128, XLAT("aura brightness"), ""); + else if(xuni =='x') + dialog::editNumber(vid.aurasmoothen, 1, 180, 1, 5, XLAT("aura smoothening factor"), ""); + + handleAllConfig(sym, xuni); + }; + } + +void switchFullscreen() { + vid.full = !vid.full; +#ifdef ANDROID + addMessage(XLAT("Reenter HyperRogue to apply this setting")); + settingsChanged = true; +#endif +#ifndef NOSDL + if(true) { + vid.xres = vid.full ? vid.xscr : 9999; + vid.yres = vid.full ? vid.yscr : 9999; + extern bool setfsize; + setfsize = true; + } + setvideomode(); +#endif + } + +void switchGL() { + vid.usingGL = !vid.usingGL; + if(vid.usingGL) addMessage(XLAT("openGL mode enabled")); + if(!vid.usingGL) addMessage(XLAT("openGL mode disabled")); +#ifndef ANDROID + if(!vid.usingGL) addMessage(XLAT("shift+O to switch anti-aliasing")); +#endif +#ifdef ANDROID + settingsChanged = true; +#else +#ifndef NOSDL + setvideomode(); +#endif +#endif + } + +void showBasicConfig() { + gamescreen(3); + const char *axmodes[5] = {"OFF", "auto", "light", "heavy", "arrows"}; + dialog::init(XLAT("basic configuration")); + +#ifndef NOTRANS + dialog::addSelItem(XLAT("language"), XLAT("EN"), 'l'); +#endif + dialog::addSelItem(XLAT("player character"), numplayers() > 1 ? "" : csname(vid.cs), 'g'); + +#ifndef NOAUDIO + dialog::addSelItem(XLAT("background music volume"), its(musicvolume), 'b'); + dialog::addSelItem(XLAT("sound effects volume"), its(effvolume), 'e'); +#endif + +// input: + dialog::addSelItem(XLAT("help for keyboard users"), XLAT(axmodes[vid.axes]), 'c'); + + dialog::addBoolItem(XLAT("reverse pointer control"), (vid.revcontrol), 'r'); + dialog::addBoolItem(XLAT("draw circle around the target"), (vid.drawmousecircle), 'd'); + + dialog::addSelItem(XLAT("message flash time"), its(vid.flashtime), 't'); +#ifdef MOBILE + dialog::addBoolItem(XLAT("targetting ranged Orbs long-click only"), (vid.shifttarget&2), 'i'); +#else + dialog::addBoolItem(XLAT("targetting ranged Orbs Shift+click only"), (vid.shifttarget&1), 'i'); +#endif +#ifdef STEAM + dialog::addBoolItem(XLAT("send scores to Steam leaderboards"), (vid.steamscore&1), 'l'); +#endif + +#ifndef MOBILE + dialog::addSelItem(XLAT("configure keys/joysticks"), "", 'p'); +#endif + + showAllConfig(); + + if(lang() != 0) { + string tw = ""; + string s = XLAT("TRANSLATIONWARNING"); + if(s != "" && s != "TRANSLATIONWARNING") tw += s; + s = XLAT("TRANSLATIONWARNING2"); + if(s != "" && s != "TRANSLATIONWARNING2") { if(tw != "") tw += " "; tw += s; } + if(tw != "") { + dialog::addBreak(50); + dialog::addHelp(tw); + dialog::lastItem().color = 0xFF0000; + } + } + + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + + char xuni = uni | 96; + + if(uni >= 32 && uni < 64) xuni = uni; + + if(xuni == 'c') { vid.axes += 60 + (shiftmul > 0 ? 1 : -1); vid.axes %= 5; } + #ifndef NOAUDIO + if(xuni == 'b') { + dialog::editNumber(musicvolume, 0, 128, 10, 60, XLAT("background music volume"), ""); + } + if(xuni == 'e') { + dialog::editNumber(effvolume, 0, 128, 10, 60, XLAT("sound effects volume"), ""); + } + #endif + + #ifndef NOTRANS + if(xuni == 'l') { + vid.language += (shiftmul>0?1:-1); + vid.language %= NUMLAN; + if(vid.language < 0) vid.language += NUMLAN; + #ifdef ANDROID + settingsChanged = true; + #endif + } + #endif + + if(xuni == 'g') pushScreen(showCustomizeChar); + + #ifndef MOBILE + if(xuni == 'p') { + pushScreen(shmup::showShmupConfig); + multi::shmupcfg = shmup::on; + } + #endif + + if(xuni == 'r') vid.revcontrol = !vid.revcontrol; + if(xuni == 'd') vid.drawmousecircle = !vid.drawmousecircle; + + #ifdef STEAM + if(xuni == 'l') vid.steamscore = vid.steamscore^1; + #endif + if(xuni == 't') + dialog::editNumber(vid.flashtime, 0, 64, 1, 8, XLAT("message flash time"), + XLAT("How long should the messages stay on the screen.")); + + if(xuni == 'i') { vid.shifttarget = vid.shifttarget^3; } + + handleAllConfig(sym, xuni); + }; + } + +void showJoyConfig() { + gamescreen(4); + + dialog::init(XLAT("joystick configuration")); + + dialog::addSelItem(XLAT("first joystick position (movement)"), its(joyx)+","+its(joyy), 0); + dialog::addSelItem(XLAT("second joystick position (panning)"), its(panjoyx)+","+its(panjoyy), 0); + +#ifndef MOBWEB + dialog::addSelItem(XLAT("joystick mode"), XLAT(autojoy ? "automatic" : "manual"), 'p'); + + dialog::addSelItem(XLAT("first joystick: movement threshold"), its(vid.joyvalue), 'a'); + dialog::addSelItem(XLAT("first joystick: execute movement threshold"), its(vid.joyvalue2), 'b'); + dialog::addSelItem(XLAT("second joystick: pan threshold"), its(vid.joypanthreshold), 'c'); + dialog::addSelItem(XLAT("second joystick: panning speed"), fts(vid.joypanspeed * 1000), 'd'); +#endif + + dialog::addItem(XLAT("back"), 'v'); + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + char xuni = uni | 96; + if(xuni == 'p') autojoy = !autojoy; + else if(xuni == 'a') + dialog::editNumber(vid.joyvalue, 0, 32768, 100, 4800, XLAT("first joystick: movement threshold"), ""); + else if(xuni == 'b') + dialog::editNumber(vid.joyvalue2, 0, 32768, 100, 5600, XLAT("first joystick: execute movement threshold"), ""); + else if(xuni == 'c') + dialog::editNumber(vid.joypanthreshold, 0, 32768, 100, 2500, XLAT("second joystick: pan threshold"), ""); + else if(xuni == 'd') + dialog::editNumber(vid.joypanspeed, 0, 1e-2, 1e-5, 1e-4, XLAT("second joystick: panning speed"), ""); + + else if(doexiton(sym, uni)) popScreen(); + }; + } + +void projectionDialog() { + geom3::tc_alpha = ticks; + dialog::editNumber(vid.alpha, -5, 5, .1, 1, + XLAT("projection"), + XLAT("HyperRogue uses the Minkowski hyperboloid model internally. " + "Klein and Poincar‚ models can be obtained by perspective, " + "and the Gans model is obtained by orthogonal projection. " +// "This parameter specifies the distance from the hyperboloid center " +// "to the eye. " + "See also the conformal mode (in the special modes menu) " + "for more models.")); + dialog::sidedialog = true; + } + +string explain3D(ld *param) { + using namespace geom3; + if(param == &highdetail || param == &middetail) + return + XLAT( + "Objects at distance less than %1 absolute units " + "from the center will be displayed with high " + "detail, and at distance at least %2 with low detail.", + fts3(highdetail), fts3(middetail) + ); + + if(param == &camera) + return + XLAT( + "Camera is placed %1 absolute units above a plane P in a three-dimensional " + "world. Ground level is actually an equidistant surface, %2 absolute units " + "below the plane P. The plane P (as well as the ground level or any " + "other equidistant surface below it) is viewed at an angle of %3 " + "(the tangent of the angle between the point in " + "the center of your vision and a faraway location is 1/cosh(c) = %4).", + fts3(camera), + fts3(depth), + fts3(atan(1/cosh(camera))*2*180/M_PI), + fts3(1/cosh(camera))); + if(param == &depth) + return + XLAT( + "Ground level is actually an equidistant surface, " + "%1 absolute units below the plane P. " + "Theoretically, this value affects the world -- " + "for example, eagles could fly %2 times faster by " + "flying above the ground level, on the plane P -- " + "but the actual game mechanics are not affected. " + "(Distances reported by the vector graphics editor " + "are not about points on the ground level, but " + "about the matching points on the plane P -- " + "divide them by the factor above to get actual " + "distances.)" + + , + fts3(depth), fts3(cosh(depth))); + // mention absolute units + + if(param == &vid.alpha) + return + XLAT( + "If we are viewing an equidistant g absolute units below a plane, " + "from a point c absolute units above the plane, this corresponds " + "to viewing a Minkowski hyperboloid from a point " + "tanh(g)/tanh(c) units below the center. This in turn corresponds to " + "the Poincaré model for g=c, and Klein-Beltrami model for g=0."); + + if(param == &wall_height) + return + XLAT( + "The height of walls, in absolute units. For the current values of g and c, " + "wall height of %1 absolute units corresponds to projection value of %2.", + fts3(wall_height), fts3(factor_to_projection(geom3::WALL))); + + if(param == &rock_wall_ratio) + return + XLAT( + "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. " + "Length of paths on the Rock III level is %3 of the corresponding length on the " + "ground level.", + fts3(rock_wall_ratio), fts3(wall_height * rock_wall_ratio), + fts3(cosh(depth - wall_height * rock_wall_ratio) / cosh(depth))); + + if(param == &human_wall_ratio) + return + XLAT( + "Humans are %1 " + "absolute units high. Your head travels %2 times the distance travelled by your " + "feet.", + fts3(wall_height * human_wall_ratio), + fts3(cosh(depth - wall_height * human_wall_ratio) / cosh(depth))); + + return ""; + } + +void show3D() { + gamescreen(4); + using namespace geom3; + dialog::init(XLAT("3D configuration")); + + dialog::addSelItem(XLAT("High detail range"), fts(highdetail), 'n'); + dialog::addSelItem(XLAT("Mid detail range"), fts(middetail), 'm'); + + dialog::addBreak(50); + dialog::addSelItem(XLAT("Camera level above the plane"), fts3(camera), 'c'); + dialog::addSelItem(XLAT("Ground level below the plane"), fts3(depth), 'g'); + + dialog::addSelItem(XLAT("Projection at the ground level"), fts3(vid.alpha), 'a'); + dialog::addBreak(50); + dialog::addSelItem(XLAT("Height of walls"), fts3(wall_height), 'w'); + + dialog::addSelItem(XLAT("Rock-III to wall ratio"), fts3(rock_wall_ratio), 'r'); + dialog::addSelItem(XLAT("Human to wall ratio"), fts3(human_wall_ratio), 'h'); + dialog::addSelItem(XLAT("Level of water surface"), fts3(lake_top), 'l'); + dialog::addSelItem(XLAT("Level of water bottom"), fts3(lake_bottom), 'k'); + + dialog::addBreak(50); + dialog::addSelItem(XLAT("Y shift"), fts3(vid.yshift), 'y'); + dialog::addSelItem(XLAT("camera rotation"), fts3(vid.camera_angle), 's'); + dialog::addSelItem(XLAT("distance between eyes"), fts3(vid.eye), 'e'); + dialog::addBreak(50); + dialog::addBoolItem(XLAT("ball model"), pmodel == mdBall, 'B'); + dialog::addBoolItem(XLAT("hyperboloid model"), pmodel == mdHyperboloid, 'M'); + dialog::addSelItem(XLAT("camera rotation in ball model"), fts3(vid.ballangle), 'b'); + dialog::addSelItem(XLAT("projection in ball model"), fts3(vid.ballproj), 'x'); + + dialog::addBreak(50); + if(!(wmspatial || mmspatial)) + dialog::addInfo(XLAT("set 3D monsters or walls in basic config first")); + else if(invalid != "") + dialog::addInfo(XLAT("error: "+invalid)); + else + dialog::addInfo(XLAT("parameters set correctly")); + dialog::addBreak(50); + dialog::addItem(XLAT("exit 3D configuration"), 'v'); + dialog::display(); + + keyhandler = [] (int sym, int uni) { + using namespace geom3; + dialog::handleNavigation(sym, uni); + + if(uni == 'n') + dialog::editNumber(geom3::highdetail, 0, 5, .5, 7, XLAT("High detail range"), ""); + else if(uni == 'm') + dialog::editNumber(geom3::middetail, 0, 5, .5, 7, XLAT("Mid detail range"), ""); + else if(uni == 'c') + tc_camera = ticks, + dialog::editNumber(geom3::camera, 0, 5, .1, 1, XLAT("Camera level above the plane"), ""); + else if(uni == 'g') + tc_depth = ticks, + dialog::editNumber(geom3::depth, 0, 5, .1, 1, XLAT("Ground level below the plane"), ""); + else if(uni == 'a') + projectionDialog(); + else if(uni == 'w') + dialog::editNumber(geom3::wall_height, 0, 1, .1, .3, XLAT("Height of walls"), ""); + else if(uni == 'l') + dialog::editNumber(geom3::lake_top, 0, 1, .1, .25, XLAT("Level of water surface"), ""); + else if(uni == 'k') + dialog::editNumber(geom3::lake_bottom, 0, 1, .1, .9, XLAT("Level of water bottom"), ""); + else if(uni == 'r') + dialog::editNumber(geom3::rock_wall_ratio, 0, 1, .1, .9, XLAT("Rock-III to wall ratio"), ""); + else if(uni == 'h') + dialog::editNumber(geom3::human_wall_ratio, 0, 1, .1, .7, XLAT("Human to wall ratio"), ""); + + else if(uni == 'e') { + dialog::editNumber(vid.eye, -10, 10, 0.01, 0, XLAT("distance between eyes"), + XLAT("Watch the Minkowski hyperboloid or the hypersian rug mode with the " + "red/cyan 3D glasses.")); + dialog::sidedialog = true; + } + + else if(uni == 'y') + dialog::editNumber(vid.yshift, 0, 1, .1, 0, XLAT("Y shift"), + "Don't center on the player character." + ); + else if(uni == 's') + dialog::editNumber(vid.camera_angle, -180, 180, 5, 0, XLAT("camera rotation"), + "Rotate the camera. Can be used to obtain a first person perspective, " + "or third person perspective when combined with Y shift." + ); + else if(uni == 'b') + dialog::editNumber(vid.ballangle, 0, 90, 5, 0, XLAT("camera rotation in ball model"), + "Rotate the camera in ball/hyperboloid model."); + else if(uni == 'x') + dialog::editNumber(vid.ballproj, 0, 100, .1, 0, XLAT("projection in ball model"), + "This parameter affects the ball model the same way as the projection parameter affects the disk model."); + else if(uni == 'B') + pmodel = (pmodel == mdBall ? mdDisk : mdBall); + else if(uni == 'M') + pmodel = (pmodel == mdHyperboloid ? mdDisk : mdHyperboloid); + + else if(doexiton(sym, uni)) popScreen(); + + if(cmode2 == smNumber) dialog::sidedialog = true; + }; + } + +void switchcolor(int& c, unsigned int* cs) { + dialog::openColorDialog(c, cs); + } + +void showCustomizeChar() { + gamescreen(4); + dialog::init(XLAT("Customize character")); + + if(shmup::on || multi::players) shmup::cpid = shmup::cpid_edit % shmup::players; + charstyle& cs = getcs(); + + dialog::addSelItem(XLAT("character"), csname(cs), 'g'); + dialog::addColorItem(XLAT("skin color"), cs.skincolor, 's'); + dialog::addColorItem(XLAT("weapon color"), cs.swordcolor, 'w'); + dialog::addColorItem(XLAT("hair color"), cs.haircolor, 'h'); + + if(cs.charid >= 1) dialog::addColorItem(XLAT("dress color"), cs.dresscolor, 'd'); + else dialog::addBreak(100); + if(cs.charid == 3) dialog::addColorItem(XLAT("dress color II"), cs.dresscolor2, 'f'); + else dialog::addBreak(100); + + dialog::addColorItem(XLAT("movement color"), cs.uicolor, 'u'); + + if(!shmup::on && multi::players == 1) dialog::addSelItem(XLAT("save whom"), XLAT1(minf[moPrincess].name), 'p'); + + if(numplayers() > 1) dialog::addSelItem(XLAT("player"), its(shmup::cpid+1), 'a'); + + dialog::addBreak(50); + dialog::addItem(XLAT("return to the game"), 'v'); + dialog::display(); + + int firsty = dialog::items[0].position / 2; + + initquickqueue(); + transmatrix V = atscreenpos(vid.xres/2, firsty, firsty - 2 * vid.fsize); + + double alpha = atan2(mousex - vid.xres/2, mousey - firsty) - M_PI/2; + drawMonsterType(moPlayer, NULL, V * spin(alpha), 0, 0); + quickqueue(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + char xuni = uni | 96; + + if(shmup::on || multi::players) shmup::cpid = shmup::cpid_edit % shmup::players; + charstyle& cs = getcs(); + if(xuni == 'a') { shmup::cpid_edit++; shmup::cpid_edit %= 60; } + if(xuni == 'g') { + cs.charid++; + if(cs.charid == 2 && !princess::everSaved) cs.charid = 4; + cs.charid %= 10; + } + if(xuni == 'p') vid.samegender = !vid.samegender; + bool cat = cs.charid >= 4; + if(xuni == 's') switchcolor(cs.skincolor, cat ? haircolors : skincolors); + if(xuni == 'h') switchcolor(cs.haircolor, haircolors); + if(xuni == 'w') switchcolor(cs.swordcolor, cat ? eyecolors : swordcolors); + if(xuni == 'd') switchcolor(cs.dresscolor, cat ? haircolors : dresscolors); + if(xuni == 'f') switchcolor(cs.dresscolor2, dresscolors2); + if(xuni == 'u') switchcolor(cs.uicolor, eyecolors); + if(xuni == 'v' || sym == SDLK_ESCAPE) popScreen(); + }; + } + diff --git a/conformal.cpp b/conformal.cpp index 16609a2f..d7aba7d2 100644 --- a/conformal.cpp +++ b/conformal.cpp @@ -1,6 +1,5 @@ // Hyperbolic Rogue -- the conformal/history mode // Copyright (C) 2011-2016 Zeno Rogue, see 'hyper.cpp' for details -#include namespace polygonal { @@ -11,8 +10,6 @@ namespace polygonal { int deg = 20; - #define MSI 120 - ld matrix[MSI][MSI]; ld ans[MSI]; @@ -227,7 +224,14 @@ bool isbad(ld z) { return !isfinite(z) || fabs(z) > 1e6; } namespace conformal { + void handleKeyC(int sym, int uni); + int lastprogress; + + void progress_screen() { + gamescreen(0); + mouseovers = ""; + } void progress(string str) { #ifndef NOSDL @@ -429,9 +433,9 @@ namespace conformal { int siz = size(v); for(int j=1; jbase->master; viewctr.spin = 0; @@ -462,6 +465,8 @@ namespace conformal { int bwidth = x-bandhalf; + popScreen(); + drawsegment: for(int cy=0; cy 0 ? 1:3); else if(sym == 'a') dialog::editNumber(lvspeed, -5, 5, .1, 1, XLAT("animation speed"), ""); @@ -654,7 +661,6 @@ namespace conformal { #ifndef NOSDL else if(uni == 'f' && pmodel == mdBand && on) createImage(dospiral); #endif - else if(sym == 'q' || sym == SDLK_ESCAPE || sym == '0') { cmode = emNormal; } else if(sym == 'i') { if(canmove && !cheater) { addMessage("Enable cheat mode or GAME OVER to use this"); @@ -666,6 +672,7 @@ namespace conformal { else if(sym == 'j') { autobandhistory = !autobandhistory; } + else if(doexiton(sym, uni)) popScreen(); } void restore() { @@ -718,5 +725,15 @@ namespace conformal { pmodel = spm; includeHistory = ih; #endif - } + } + + auto hooks = addHook(clearmemory, 0, [] () { + conformal::renderAutoband(); + conformal::on = false; + conformal::killhistory.clear(); + conformal::findhistory.clear(); + conformal::movehistory.clear(); + conformal::includeHistory = false; + }); + } diff --git a/control.cpp b/control.cpp new file mode 100644 index 00000000..eee79b9a --- /dev/null +++ b/control.cpp @@ -0,0 +1,778 @@ +int frames; +bool outoffocus = false; + +int mousex, mousey, joyx, joyy, panjoyx, panjoyy; +hyperpoint mouseh, mouseoh; + +bool leftclick, rightclick, targetclick, hiliteclick, anyshiftclick, wheelclick, + forcetarget, lshiftclick, lctrlclick; +bool gtouched; + +int getcstat, lgetcstat; ld getcshift; bool inslider; + +int andmode = 0; + +// is the player using mouse? (used for auto-cross) +bool mousing = true; + +// is the mouse button pressed? +bool mousepressed = false; +bool mousemoved = false; +bool actonrelease = false; + +ld shiftmul = 1; + +cell *mouseover, *mouseover2, *lmouseover, *centerover; +ld modist, modist2, centdist; +movedir mousedest, joydir; + +int lastt; + +#ifdef WEB +Uint8 *SDL_GetKeyState(void *v) { static Uint8 tab[1024]; return tab; } +#endif + +bool quitsaves() { return (items[itOrbSafety] && havesave); } + +bool needConfirmation() { + return canmove && (gold() >= 30 || tkills() >= 50) && !cheater && !quitsaves(); + } + +bool mouseout() { + if((getcstat != '-' && getcstat) || (lgetcstat && lgetcstat != '-')) return true; + return outofmap(mouseh); + } + +bool mouseout2() { + if((getcstat && getcstat != '-') || (lgetcstat && lgetcstat != '-')) return true; + return outofmap(mouseh) || outofmap(mouseoh); + } + +movedir vectodir(const hyperpoint& P) { + + hyperpoint H = sphereflip * tC0(cwtV); + ld R = sqrt(H[0] * H[0] + H[1] * H[1]); + transmatrix Centered = sphereflip * cwtV; + if(!euclid) + Centered = gpushxto0(H) * Centered; + else if(R > 1e-9) + Centered = eupush(-H[0], -H[1]) * Centered; + ld binv = 99; + + ld dirdist[7]; + for(int i=0; itype; i++) { + dirdist[i] = intval(Centered * xspinpush0(-i * 2 * M_PI /cwt.c->type, .5), P); + } + + movedir res; + res.d = -1; + + for(int i=0; itype; i++) { + if(dirdist[i] < binv) { + binv = dirdist[i]; + res.d = i; + res.subdir = dirdist[(i+1)%cwt.c->type] < dirdist[(i+cwt.c->type-1)%cwt.c->type] ? 1 : -1; + if(sphere) res.subdir = -res.subdir; + } + } + + // if(euclid) bdir = (bdir + 3) % 6; + return res; + } + +void movepckeydir(int d) { + DEBB(DF_GRAPH, (debugfile,"movepckeydir\n")); + // EUCLIDEAN + + movedir md = + vectodir(spin(-d * M_PI/4) * tC0(pushone())); + + movepcto(md); + } + +void calcMousedest() { + if(mouseout()) return; + if(vid.revcontrol == true) { mouseh[0] = -mouseh[0]; mouseh[1] = -mouseh[1]; } + ld mousedist = intval(mouseh, tC0(shmup::ggmatrix(cwt.c))); + mousedest.d = -1; + + cellwalker bcwt = cwt; + + ld dists[7]; + + for(int i=0; itype; i++) + dists[i] = intval(mouseh, tC0(shmup::ggmatrix(cwt.c->mov[i]))); + + /* printf("curcell = %Lf\n", mousedist); + for(int i=0; itype; i++) + printf("d%d = %Lf\n", i, dists[i]); */ + + for(int i=0; itype; i++) if(dists[i] < mousedist) { + mousedist = dists[i]; + mousedest.d = fixdir(i - cwt.spin, cwt.c); + + mousedest.subdir = + dists[(i+1)%cwt.c->type] < dists[(i+cwt.c->type-1)%cwt.c->type] ? 1 : -1; + + if(cwt.mirrored) + mousedest.d = fixdir(-mousedest.d, cwt.c), + mousedest.subdir = -mousedest.subdir; + + if(sphere) mousedest.subdir = -mousedest.subdir; + } + + if(vid.revcontrol == true) { mouseh[0] = -mouseh[0]; mouseh[1] = -mouseh[1]; } + cwt = bcwt; + } + +void mousemovement() { + calcMousedest(); + movepcto(mousedest); + lmouseover = NULL; + } + +#ifndef NOSDL +SDL_Joystick* sticks[8]; +int numsticks; + +void initJoysticks() { + DEBB(DF_INIT, (debugfile,"init joysticks\n")); + numsticks = SDL_NumJoysticks(); + if(numsticks > 8) numsticks = 8; + for(int i=0; i= 0) movepcto(joydir); joydir.d = -1; return; } + if(sq < joyvalue2 && joydir.d == -1) return; + } + else { + if(sq < joyvalue1) { joydir.d = -1; return; } + } + + joydir = vectodir(hpxy(jx, jy)); + } + +void checkpanjoy(double t) { + + if(shmup::on) return; + + if(vid.joypanspeed < 1e-7) return; + + if(sqr(panjoyx) + sqr(panjoyy) < sqr(vid.joypanthreshold)) + return; + + ld jx = panjoyx * t * vid.joypanspeed; + ld jy = panjoyy * t * vid.joypanspeed; + + playermoved = false; + View = gpushxto0(hpxy(jx, jy)) * View; + } + +#endif + +bool quitmainloop = false; + +bool doexiton(int sym, int uni) { + if(sym == SDLK_ESCAPE) return true; + if(sym == SDLK_F10) return true; + if(uni != 0) return true; + return false; + } + +void handleKeyQuit(int sym, int uni) { + dialog::handleNavigation(sym, uni); + // ignore the camera movement keys + +#ifndef NORUG + if(rug::rugged && (sym == SDLK_UP || sym == SDLK_DOWN || sym == SDLK_PAGEUP || sym == SDLK_PAGEDOWN || + sym == SDLK_RIGHT || sym == SDLK_LEFT)) + sym = 0; +#endif + + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == SDLK_F10) quitmainloop = true; + else if(uni == 'r' || sym == SDLK_F5) { + restartGame(), popScreen(); + msgs.clear(); + } + else if(sym == SDLK_UP || sym == SDLK_KP8 || sym == PSEUDOKEY_WHEELUP) msgscroll++; + else if(sym == SDLK_DOWN || sym == SDLK_KP2 || sym == PSEUDOKEY_WHEELDOWN) msgscroll--; + else if(sym == SDLK_PAGEUP || sym == SDLK_KP9) msgscroll+=5; + else if(sym == SDLK_PAGEDOWN || sym == SDLK_KP3) msgscroll-=5; + else if(uni == 'v') popScreenAll(), pushScreen(showMainMenu); + else if(sym == SDLK_F3 || (sym == ' ' || sym == SDLK_HOME)) + fullcenter(); + else if(uni == 'o' && DEFAULTNOR(sym)) setAppropriateOverview(); +#ifdef INV + else if(uni == 'i' && DEFAULTNOR(sym) && inv::on) + pushScreen(inv::show); +#endif +#ifndef NOSAVE + else if(uni == 't') { + if(!canmove) restartGame(); + loadScores(); + msgs.clear(); + } + #endif + + else if(doexiton(sym, uni) && !didsomething) { + popScreen(); + msgscroll = 0; + msgs.clear(); + if(!canmove) { + addMessage(XLAT("GAME OVER")); + addMessage(timeline()); + } + } + } + +bool didsomething; + +#ifdef MOBILE +typedef int eventtype; +#else +typedef SDL_Event eventtype; +#endif + +void handlePanning(int sym, int uni) { + if(rug::rugged) return; + +#ifndef PANDORA + if(sym == SDLK_RIGHT) { + if(conformal::on) + conformal::lvspeed += 0.1 * shiftmul; + else + View = xpush(-0.2*shiftmul) * View, playermoved = false, didsomething = true; + } + if(sym == SDLK_LEFT) { + if(conformal::on) + conformal::lvspeed -= 0.1 * shiftmul; + else + View = xpush(+0.2*shiftmul) * View, playermoved = false, didsomething = true; + } + if(sym == SDLK_UP) { + if(conformal::on) + conformal::lvspeed += 0.1 * shiftmul; + else + View = ypush(+0.2*shiftmul) * View, playermoved = false, didsomething = true; + } + if(sym == SDLK_DOWN) { + if(conformal::on) + conformal::lvspeed -= 0.1 * shiftmul; + else + View = ypush(-0.2*shiftmul) * View, playermoved = false, didsomething = true; + } +#endif + if(sym == SDLK_PAGEUP) { + if(conformal::on) + conformal::rotation++; + else + View = spin(M_PI/S21*shiftmul) * View, didsomething = true; + } + if(sym == SDLK_PAGEDOWN) { + if(conformal::on) + conformal::rotation++; + else + View = spin(-M_PI/S21*shiftmul) * View, didsomething = true; + } + + if(sym == SDLK_PAGEUP || sym == SDLK_PAGEDOWN) + if(isGravityLand(cwt.c->land)) playermoved = false; + + if(sym == PSEUDOKEY_WHEELUP) { + ld jx = (mousex - vid.xcenter - .0) / vid.radius / 10; + ld jy = (mousey - vid.ycenter - .0) / vid.radius / 10; + playermoved = false; + View = gpushxto0(hpxy(jx, jy)) * View; + sym = 1; + } + } + +void handleKeyNormal(int sym, int uni) { + + if(cheater) { + if(applyCheat(uni, mouseover)) + sym = 0; + } + + if(DEFAULTNOR(sym)) handlePanning(sym, uni); + + if(!(uni >= 'A' && uni <= 'Z') && DEFAULTCONTROL) { + if(sym == 'l' || sym == 'd' || sym == SDLK_KP6) movepckeydir(0); + if(sym == 'n' || sym == 'c' || sym == SDLK_KP3) movepckeydir(1); + if(sym == 'j' || sym == 'x' || sym == SDLK_KP2) movepckeydir(2); + if(sym == 'b' || sym == 'z' || sym == SDLK_KP1) movepckeydir(3); + if(sym == 'h' || sym == 'a' || sym == SDLK_KP4) movepckeydir(4); + if(sym == 'y' || sym == 'q' || sym == SDLK_KP7) movepckeydir(5); + if(sym == 'k' || sym == 'w' || sym == SDLK_KP8) movepckeydir(6); + if(sym == 'u' || sym == 'e' || sym == SDLK_KP9) movepckeydir(7); + } + +#ifdef PANDORA + if(DEFAULTCONTROL) { + if(sym == SDLK_RIGHT) movepckeydir(0); + if(sym == SDLK_LEFT) movepckeydir(4); + if(sym == SDLK_DOWN) movepckeydir(2 + (leftclick?1:0) - (rightclick?1:0)); + if(sym == SDLK_UP) movepckeydir(6 - (leftclick?1:0) + (rightclick?1:0)); + } +#endif + + if(uni == sym && DEFAULTNOR(sym)) { + gmodekeys(sym, uni); + if(sym == '8') { + backcolor = backcolor ^ 0xFFFFFF; + bordcolor = bordcolor ^ 0xFFFFFF; + forecolor = forecolor ^ 0xFFFFFF; + printf("back = %x\n", backcolor); + } + if(sym == '9') { + pmodel = eModel(8 - pmodel); + // vid.yshift = 1 - vid.yshift; + // vid.drawmousecircle = true; + } + if(sym == 'm' && canmove && cmode2 == smNormal && (centerover == cwt.c ? mouseover : centerover)) + performMarkCommand(mouseover); + } + + if(DEFAULTCONTROL) { + if(sym == '.' || sym == 's') movepcto(-1, 1); + if((sym == SDLK_DELETE || sym == SDLK_KP_PERIOD || sym == 'g') && uni != 'G' && uni != 'G'-64) + movepcto(MD_DROP, 1); + if(sym == 't' && uni != 'T' && uni != 'T'-64 && canmove && cmode2 == smNormal) { + if(playermoved && items[itStrongWind]) { + cell *c = whirlwind::jumpDestination(cwt.c); + if(c) centerover = c; + } + targetRangedOrb(centerover, roKeyboard); + sym = 0; uni = 0; + } + } + + if(sym == SDLK_KP5 && DEFAULTCONTROL) movepcto(-1, 1); + + // if(sym == SDLK_F4) restartGameSwitchEuclid(); + + if(sym == SDLK_F5) { + if(needConfirmation()) + pushScreen(showMission); + else restartGame(); + } + + if(sym == SDLK_ESCAPE) + showMissionScreen(); + + if(sym == SDLK_F10) { + if(needConfirmation()) pushScreen(showMission); + else quitmainloop = true; + } + + if(!canmove) { + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER) quitmainloop = true; + else if(uni == 'r') restartGame(); +#ifndef NOSAVE + else if(uni == 't') { + restartGame(); + loadScores(); + } +#endif +#ifndef NORUG + else if(rug::rugged) ; +#endif + else if(sym == SDLK_UP || sym == SDLK_KP8) msgscroll++; + else if(sym == SDLK_DOWN || sym == SDLK_KP2) msgscroll--; + else if(sym == SDLK_PAGEUP || sym == SDLK_KP9) msgscroll+=5; + else if(sym == SDLK_PAGEDOWN || sym == SDLK_KP3) msgscroll-=5; + } + + if(uni == 'o' && DEFAULTNOR(sym)) setAppropriateOverview(); +#ifdef INV + if(uni == 'i' && DEFAULTNOR(sym) && inv::on) + pushScreen(inv::show); +#endif + + if((sym == SDLK_HOME || sym == SDLK_F3 || sym == ' ') && DEFAULTNOR(sym)) + fullcenter(); + + if(sym == 'v' && DEFAULTNOR(sym)) + pushScreen(showMainMenu); + + if(sym == '-' || sym == PSEUDOKEY_WHEELDOWN) { + actonrelease = false; + + shmup::cpid = 0; + if(mouseover && + targetclick && (!shmup::on || numplayers() == 1) && targetRangedOrb(mouseover, forcetarget ? roMouseForce : roMouse)) { + } + else if(forcetarget) + ; + else if(!DEFAULTCONTROL) { + if(!shmup::on) + multi::mousemovement(mouseover); + } + else mousemovement(); + } + + if(sym == SDLK_F1) gotoHelp(help); + +#ifdef ROGUEVIZ + rogueviz::processKey(sym, uni); +#endif + } + +void handlekey(int sym, int uni) { + + if(callhandlers(false, hooks_handleKey, sym, uni)) return; + + keyhandler(sym, uni); + } + +#ifdef NOSDL +void mainloopiter() { printf("(compiled without SDL -- no action)\n"); quitmainloop = true; } +#else + +// Warning: a very long function! todo: refactor + +int cframelimit = 1000; + +void mainloopiter() { + + DEBB(DF_GRAPH, (debugfile,"main loop\n")); + + #ifndef GFX + #ifndef GL + vid.wallmode = 0; + vid.monmode = 0; + #endif + #endif + + optimizeview(); + + if(conformal::on) conformal::apply(); + + ticks = SDL_GetTicks(); + + int timetowait = lastt + 1000 / cframelimit - ticks; + + cframelimit = vid.framelimit; + if(outoffocus && cframelimit > 10) cframelimit = 10; + + if(DOSHMUP && cmode2 == smNormal) + timetowait = 0, shmup::turn(ticks - lastt); + + if(!DOSHMUP && (multi::alwaysuse || multi::players > 1) && cmode2 == smNormal) + timetowait = 0, multi::handleMulti(ticks - lastt); + + if(vid.sspeed >= 5 && gmatrix.count(cwt.c) && !elliptic) { + cwtV = gmatrix[cwt.c] * ddspin(cwt.c, cwt.spin); + if(cwt.mirrored) playerV = playerV * Mirror; + } + +#ifdef WEB + if(playermoved && vid.sspeed > -4.99 && !outoffocus) { + centerpc((ticks - lastt) / 1000.0 * exp(vid.sspeed)); + } + if(!outoffocus) drawscreen(); +#else + if(timetowait > 0) + SDL_Delay(timetowait); + else { + if(cmode2 == smNormal) { + if(playermoved && vid.sspeed > -4.99 && !outoffocus) + centerpc((ticks - lastt) / 1000.0 * exp(vid.sspeed)); + if(panjoyx || panjoyy) + checkpanjoy((ticks - lastt) / 1000.0); + } + tortoise::updateVals(ticks - lastt); + frames++; + if(!outoffocus) { + drawscreen(); + } + lastt = ticks; + } +#endif + + Uint8 *keystate = SDL_GetKeyState(NULL); + rightclick = keystate[SDLK_RCTRL]; + leftclick = keystate[SDLK_RSHIFT]; + lctrlclick = keystate[SDLK_LCTRL]; + lshiftclick = keystate[SDLK_LSHIFT]; + forcetarget = (keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]); + hiliteclick = keystate[SDLK_LALT] | keystate[SDLK_RALT]; + anyshiftclick = keystate[SDLK_LSHIFT] | keystate[SDLK_RSHIFT]; + wheelclick = false; + + getcshift = 1; + if(keystate[SDLK_LSHIFT] || keystate[SDLK_RSHIFT]) getcshift = -1; + if(keystate[SDLK_LCTRL] || keystate[SDLK_RCTRL]) getcshift /= 10; + if(keystate[SDLK_LALT] || keystate[SDLK_RALT]) getcshift *= 10; + + didsomething = false; + + if(vid.shifttarget&1) { + leftclick = false; + targetclick = keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]; + } + else { + leftclick = keystate[SDLK_RSHIFT]; + targetclick = true; + } + +#ifdef SDLAUDIO + if(audio) handlemusic(); +#endif + SDL_Event ev; + DEBB(DF_GRAPH, (debugfile,"polling for events\n")); + + achievement_pump(); + while(SDL_PollEvent(&ev)) { + DEBB(DF_GRAPH, (debugfile,"got event type #%d\n", ev.type)); + int sym = 0; + int uni = 0; + shiftmul = 1; + +/* if(ev.type == SDL_JOYDEVICEADDED || ev.type == SDL_JOYDEVICEREMOVED) { + joyx = joyy = 0; + panjoyx = panjoyy = 0; + closeJoysticks(); + initJoysticks(); + }*/ + + if(ev.type == SDL_ACTIVEEVENT) { + if(ev.active.state & SDL_APPINPUTFOCUS) { + if(ev.active.gain) { + outoffocus = false; + } + else { + outoffocus = true; + } + } + } + + if(ev.type == SDL_VIDEORESIZE) { + vid.xres = ev.resize.w; + vid.yres = ev.resize.h; + vid.killreduction = 0; + extern bool setfsize; + setfsize = true; + setvideomode(); +#ifdef GL + if(vid.usingGL) glViewport(0, 0, vid.xres, vid.yres); +#endif + } + + if(ev.type == SDL_VIDEOEXPOSE) { + drawscreen(); + } + + if(ev.type == SDL_JOYAXISMOTION) { + if(ev.jaxis.which == 0) { + if(ev.jaxis.axis == 0) + joyx = ev.jaxis.value; + else if(ev.jaxis.axis == 1) + joyy = ev.jaxis.value; + else if(ev.jaxis.axis == 3) + panjoyx = ev.jaxis.value; + else if(ev.jaxis.axis == 4) + panjoyy = ev.jaxis.value; + checkjoy(); + // printf("panjoy = %d,%d\n", panjoyx, panjoyy); + } + else { + if(ev.jaxis.axis == 0) + panjoyx = ev.jaxis.value; + else + panjoyy = ev.jaxis.value; + } + } + + if(ev.type == SDL_JOYBUTTONDOWN && cmode2 == smShmupConfig && vid.scfg.setwhat) { + int joyid = ev.jbutton.which; + int button = ev.jbutton.button; + if(joyid < 8 && button < 32) + vid.scfg.joyaction[joyid][button] = vid.scfg.setwhat; + vid.scfg.setwhat = 0; + } + + else if(ev.type == SDL_JOYHATMOTION && cmode2 == smShmupConfig && vid.scfg.setwhat) { + int joyid = ev.jhat.which; + int hat = ev.jhat.hat; + int dir = 4; + if(ev.jhat.value == SDL_HAT_UP) dir = 0; + if(ev.jhat.value == SDL_HAT_RIGHT) dir = 1; + if(ev.jhat.value == SDL_HAT_DOWN) dir = 2; + if(ev.jhat.value == SDL_HAT_LEFT) dir = 3; + if(joyid < 8 && hat < 4 && dir < 4) { + vid.scfg.hataction[joyid][hat][dir] = vid.scfg.setwhat; + vid.scfg.setwhat = 0; + } + } + + else if(ev.type == SDL_JOYBUTTONDOWN && DEFAULTCONTROL) { + flashMessages(); + movepcto(joydir); + checkjoy(); + } + + if(ev.type == SDL_KEYDOWN) { + flashMessages(); + mousing = false; + sym = ev.key.keysym.sym; + uni = ev.key.keysym.unicode; + if(ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) shiftmul = -1; + if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) shiftmul /= 10; + if(sym == SDLK_RETURN && (ev.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) { + sym = 0; uni = 0; + switchFullscreen(); + } + } + + dialog::handleZooming(ev); + + if(sym == SDLK_F1 && cmode2 == smNormal && playermoved) + help = "@"; + + bool rollchange = + cmode2 == smOverview && getcstat >= 2000 && cheater; + + if(ev.type == SDL_MOUSEBUTTONDOWN) { + flashMessages(); + mousepressed = true; + mousing = true; + actonrelease = true; + + if(ev.button.button==SDL_BUTTON_WHEELDOWN) { + sym = uni = PSEUDOKEY_WHEELDOWN; + } + if(ev.button.button==SDL_BUTTON_WHEELUP) { + sym = uni = PSEUDOKEY_WHEELUP; + } + else if(ev.button.button == SDL_BUTTON_RIGHT) { + sym = 1; didsomething = true; + } + else if(ev.button.button == SDL_BUTTON_MIDDLE) { + sym = 2; didsomething = true; + } + } + + if(ev.type == SDL_MOUSEBUTTONUP) { + mousepressed = false; + mousing = true; + if(ev.button.button==SDL_BUTTON_RIGHT || leftclick) + sym = SDLK_F1; + else if(ev.button.button==SDL_BUTTON_MIDDLE || rightclick) + sym = 1, didsomething = true; + else if(ev.button.button == SDL_BUTTON_LEFT && actonrelease) { + sym = getcstat, uni = getcstat, shiftmul = getcshift; + } + else if(ev.button.button == SDL_BUTTON_WHEELUP && rollchange) { + sym = getcstat, uni = getcstat, shiftmul = getcshift, wheelclick = true; + } + else if(ev.button.button == SDL_BUTTON_WHEELDOWN && rollchange) { + sym = getcstat, uni = getcstat, shiftmul = -getcshift, wheelclick = true; + } + } + + if(ev.type == SDL_MOUSEMOTION) { + mouseoh = mouseh; + + mousing = true; + mousemoved = true; + mousex = ev.motion.x; + mousey = ev.motion.y; + +#ifndef NORUG + if(rug::rugged) + mouseh = rug::gethyper(mousex, mousey); + else +#endif + mouseh = gethyper(mousex, mousey); + + if((rightclick || (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_MMASK)) && !mouseout2() && + mouseh[2] < 50 && mouseoh[2] < 50) { + panning(mouseoh, mouseh); + } + +#ifdef SIMULATE_JOYSTICK + // pretend that both joysticks are present + stick = panstick = (SDL_Joystick*) (&vid); + panjoyx = 20 * (mousex - vid.xcenter); + panjoyy = 20 * (mousey - vid.ycenter); + checkjoy(); +#endif + + if(mousepressed && inslider) { + sym = getcstat, uni = getcstat, shiftmul = getcshift; + } + } + + if(ev.type == SDL_QUIT) { + if(needConfirmation() && cmode2 != smMission) showMissionScreen(); + else quitmainloop = true; + } + + handlekey(sym, uni); + } + } +#endif + +void mainloop() { + lastt = 0; +#ifdef WEB + initweb(); + emscripten_set_main_loop(mainloopiter, 0, true); +#else + while(!quitmainloop) mainloopiter(); +#endif + } + +#ifdef MOBILE +void displayabutton(int px, int py, string s, int col) { + // TMP + int siz = vid.yres > vid.xres ? vid.fsize*2 : vid.fsize * 3/2; + int vrx = min(vid.radius, vid.xres/2 - 40); + int vry = min(vid.radius, min(vid.ycenter, vid.yres - vid.ycenter) - 20); + int x = vid.xcenter + px * vrx; + int y = vid.ycenter + py * (vry - siz/2); + int vrr = int(hypot(vrx, vry) * sqrt(2.)); + if(gtouched && !mouseover + && abs(mousex - vid.xcenter) < vrr + && abs(mousey - vid.ycenter) < vrr + && hypot(mousex-vid.xcenter, mousey-vid.ycenter) > vrr + && px == (mousex > vid.xcenter ? 1 : -1) + && py == (mousey > vid.ycenter ? 1 : -1) + ) col = 0xFF0000; + if(displayfr(x, y, 0, siz, s, col, 8+8*px)) + buttonclicked = true; + } +#endif + diff --git a/dialogs.cpp b/dialogs.cpp index 96f9d981..248e5aee 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -386,7 +386,53 @@ namespace dialog { int colorp = 0; - void drawColorDialog(int color) { + int *colorPointer; + + bool handleKeyColor(int sym, int uni) { + int& color = *colorPointer; + + if(uni >= 'A' && uni <= 'D') { + int x = (mousex - vid.xres/4) * 510 / vid.xres; + if(x < 0) x = 0; + if(x > 255) x = 255; + unsigned char* pts = (unsigned char*) &color; + pts[uni - 'A'] = x; + } + else if(uni == ' ') { + bool inHistory = false; + for(int i=0; i<10; i++) if(colorhistory[i] == (unsigned) color) + inHistory = true; + if(!inHistory) { colorhistory[lch] = color; lch++; lch %= 10; } + popScreen(); + } + else if(uni >= '0' && uni <= '9') { + color = colorhistory[uni - '0']; + } + else if(palette && uni >= 'a' && uni < 'a'+(int) palette[0]) { + color = palette[1 + uni - 'a']; + } + else if(sym == SDLK_DOWN || sym == SDLK_KP2) { + colorp = (colorp-1) & 3; + } + else if(sym == SDLK_UP || sym == SDLK_KP8) { + colorp = (colorp+1) & 3; + } + else if(sym == SDLK_LEFT || sym == SDLK_KP4) { + unsigned char* pts = (unsigned char*) &color; + pts[colorp] -= abs(shiftmul) < .6 ? 1 : 17; + } + else if(sym == SDLK_RIGHT || sym == SDLK_KP6) { + unsigned char* pts = (unsigned char*) &color; + pts[colorp] += abs(shiftmul) < .6 ? 1 : 17; + } + else if(doexiton(sym, uni)) + popScreen(); + return false; + } + + void drawColorDialog() { + int color = *colorPointer; + int ash = 8; for(int j=0; j<10; j++) { @@ -427,60 +473,13 @@ namespace dialog { } displayColorButton(vid.xres/2, vid.yres/2+vid.fsize * 6, XLAT("select this color") + " : " + itsh(color), ' ', 8, 0, color >> ash); + + keyhandler = handleKeyColor; } - // 0: nothing happened, 1: color accepted, 2: break - int handleKeyColor(int sym, int uni, int& color) { - - if(uni >= 'A' && uni <= 'D') { - int x = (mousex - vid.xres/4) * 510 / vid.xres; - if(x < 0) x = 0; - if(x > 255) x = 255; - unsigned char* pts = (unsigned char*) &color; - pts[uni - 'A'] = x; - } - else if(uni == ' ') { - bool inHistory = false; - for(int i=0; i<10; i++) if(colorhistory[i] == (unsigned) color) - inHistory = true; - if(!inHistory) { colorhistory[lch] = color; lch++; lch %= 10; } - return 1; - } - else if(uni >= '0' && uni <= '9') { - color = colorhistory[uni - '0']; - } - else if(palette && uni >= 'a' && uni < 'a'+(int) palette[0]) { - color = palette[1 + uni - 'a']; - } - else if(sym == SDLK_DOWN || sym == SDLK_KP2) { - colorp = (colorp-1) & 3; - } - else if(sym == SDLK_UP || sym == SDLK_KP8) { - colorp = (colorp+1) & 3; - } - else if(sym == SDLK_LEFT || sym == SDLK_KP4) { - unsigned char* pts = (unsigned char*) &color; - pts[colorp] -= abs(shiftmul) < .6 ? 1 : 17; - } - else if(sym == SDLK_RIGHT || sym == SDLK_KP6) { - unsigned char* pts = (unsigned char*) &color; - pts[colorp] += abs(shiftmul) < .6 ? 1 : 17; - } - else if(uni || sym == SDLK_F10) return 2; - return 0; - } - - int *colorPointer; - emtype lastmode; - void openColorDialog(int& col, unsigned int *pal) { colorPointer = &col; palette = pal; - lastmode = cmode; cmode = emColor; - } - - void handleColor(int sym, int uni) { - int ret = handleKeyColor(sym, uni, *colorPointer); - if(ret) cmode = lastmode; + pushScreen(drawColorDialog); } struct numberEditor { @@ -511,28 +510,6 @@ namespace dialog { ne.positive = true; } - void editNumber(ld& x, ld vmin, ld vmax, ld step, ld dft, string title, string help) { - ne.editwhat = &x; - ne.s = fts(x); - ne.vmin = vmin; - ne.vmax = vmax; - ne.step = step; - ne.dft = dft; - ne.title = title; - ne.help = help; - lastmode = cmode; cmode = emNumber; - ne.scale = ne.inverse_scale = identity; - ne.intval = NULL; - ne.positive = false; - sidedialog = false; - } - - void editNumber(int& x, int vmin, int vmax, int step, int dft, string title, string help) { - editNumber(ne.intbuf, vmin, vmax, step, dft, title, help); - ne.intbuf = x; ne.intval = &x; ne.s = its(x); - sidedialog = true; - } - string disp(ld x) { if(ne.intval) return its((int) (x+.5)); else return fts(x); } void affect(char kind) { @@ -603,14 +580,14 @@ namespace dialog { if(ne.intval == &polygonal::coefid && polygonal::coefid < 0) *ne.editwhat = *ne.intval = 0, affect('v'); - if(ne.intval == &polygonal::coefid && polygonal::coefid >= MSI) - *ne.editwhat = *ne.intval = MSI-1, affect('v'); + if(ne.intval == &polygonal::coefid && polygonal::coefid >= polygonal::MSI) + *ne.editwhat = *ne.intval = polygonal::MSI-1, affect('v'); if(ne.intval == &polygonal::deg && polygonal::deg < 0) - *ne.editwhat = *ne.intval = MSI-1, affect('v'); + *ne.editwhat = *ne.intval = polygonal::MSI-1, affect('v'); - if(ne.intval == &polygonal::deg && polygonal::deg >= MSI) - *ne.editwhat = *ne.intval = MSI-1, affect('v'); + if(ne.intval == &polygonal::deg && polygonal::deg >= polygonal::MSI) + *ne.editwhat = *ne.intval = polygonal::MSI-1, affect('v'); if(ne.intval == &polygonal::SI) polygonal::solve(); if(ne.editwhat == &polygonal::STAR) polygonal::solve(); @@ -623,13 +600,15 @@ namespace dialog { if(ne.editwhat == &geom3::middetail && geom3::highdetail > geom3::middetail) geom3::highdetail = geom3::middetail; - if(lastmode == em3D) buildpolys(); + buildpolys(); #ifdef GL - if(lastmode == em3D) resetGL(); + resetGL(); #endif } void drawNumberDialog() { + gamescreen(sidedialog ? 0 : 2); + cmode2 = smNumber; init(ne.title); addInfo(ne.s); addSlider(ne.scale(ne.vmin), ne.scale(*ne.editwhat), ne.scale(ne.vmax), 500); @@ -644,7 +623,7 @@ namespace dialog { addBreak(100); - if(lastmode == em3D) ne.help = explain3D(ne.editwhat); + ne.help = explain3D(ne.editwhat); if(ne.help != "") { addHelp(ne.help); @@ -671,70 +650,68 @@ namespace dialog { addBoolItem("finer lines at the boundary", vid.antialias & AA_LINEWIDTH, 'o'); display(); - } - - void handleNumber(int sym, int uni) { - handleNavigation(sym, uni); - if((uni >= '0' && uni <= '9') || (uni == '.' && !ne.intval) || (uni == '-' && !ne.positive)) { - ne.s += uni; - affect('s'); - } - else if(uni == '\b' || uni == '\t') { - ne.s = ne.s. substr(0, size(ne.s)-1); - sscanf(ne.s.c_str(), LDF, ne.editwhat); - affect('s'); - } -#ifndef MOBILE - else if(sym == SDLK_RIGHT || sym == SDLK_KP6) { - if(ne.intval && abs(shiftmul) < .6) - (*ne.editwhat)++; - else - *ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) + shiftmul * ne.step); - affect('v'); - } - else if(sym == SDLK_LEFT || sym == SDLK_KP4) { - if(ne.intval && abs(shiftmul) < .6) - (*ne.editwhat)--; - else - *ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) - shiftmul * ne.step); - affect('v'); - } -#endif - else if(sym == SDLK_HOME) { - *ne.editwhat = ne.dft; - affect('v'); - } - else if(uni == 500) { - int sl, sr; - if(sidescreen) - sl = vid.yres + vid.fsize*2, sr = vid.xres - vid.fsize*2; - else - sl = vid.xres/4, sr = vid.xres*3/4; - ld d = (mousex - sl + .0) / (sr-sl); - *ne.editwhat = - ne.inverse_scale(d * (ne.scale(ne.vmax) - ne.scale(ne.vmin)) + ne.scale(ne.vmin)); - affect('v'); - } - else if(uni == 'o' && ne.editwhat == &ne.intbuf && ne.intval == &sightrange && cheater) - overgenerate = !overgenerate; - else if(uni == 'o' && ne.editwhat == &vid.linewidth) - vid.antialias ^= AA_LINEWIDTH; - else if(uni == 'p' && ne.editwhat == &vid.alpha) { - *ne.editwhat = 1; vid.scale = 1; ne.s = "1"; - } - else if(uni == 'k' && ne.editwhat == &vid.alpha) { - *ne.editwhat = 0; vid.scale = 1; ne.s = "0"; - } - else if((uni == 'i' || uni == 'I' || uni == 'o' || uni == 'O') && ne.editwhat == &vid.alpha) { - double d = exp(shiftmul/10); - vid.alpha *= d; - vid.scale *= d; - ne.s = fts(vid.alpha); - } - else if(doexiton(sym, uni)) { - cmode = lastmode; - } - } + + keyhandler = [] (int sym, int uni) { + handleNavigation(sym, uni); + if((uni >= '0' && uni <= '9') || (uni == '.' && !ne.intval) || (uni == '-' && !ne.positive)) { + ne.s += uni; + affect('s'); + } + else if(uni == '\b' || uni == '\t') { + ne.s = ne.s. substr(0, size(ne.s)-1); + sscanf(ne.s.c_str(), LDF, ne.editwhat); + affect('s'); + } + #ifndef MOBILE + else if(sym == SDLK_RIGHT || sym == SDLK_KP6) { + if(ne.intval && abs(shiftmul) < .6) + (*ne.editwhat)++; + else + *ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) + shiftmul * ne.step); + affect('v'); + } + else if(sym == SDLK_LEFT || sym == SDLK_KP4) { + if(ne.intval && abs(shiftmul) < .6) + (*ne.editwhat)--; + else + *ne.editwhat = ne.inverse_scale(ne.scale(*ne.editwhat) - shiftmul * ne.step); + affect('v'); + } + #endif + else if(sym == SDLK_HOME) { + *ne.editwhat = ne.dft; + affect('v'); + } + else if(uni == 500) { + int sl, sr; + if(sidescreen) + sl = vid.yres + vid.fsize*2, sr = vid.xres - vid.fsize*2; + else + sl = vid.xres/4, sr = vid.xres*3/4; + ld d = (mousex - sl + .0) / (sr-sl); + *ne.editwhat = + ne.inverse_scale(d * (ne.scale(ne.vmax) - ne.scale(ne.vmin)) + ne.scale(ne.vmin)); + affect('v'); + } + else if(uni == 'o' && ne.editwhat == &ne.intbuf && ne.intval == &sightrange && cheater) + overgenerate = !overgenerate; + else if(uni == 'o' && ne.editwhat == &vid.linewidth) + vid.antialias ^= AA_LINEWIDTH; + else if(uni == 'p' && ne.editwhat == &vid.alpha) { + *ne.editwhat = 1; vid.scale = 1; ne.s = "1"; + } + else if(uni == 'k' && ne.editwhat == &vid.alpha) { + *ne.editwhat = 0; vid.scale = 1; ne.s = "0"; + } + else if((uni == 'i' || uni == 'I' || uni == 'o' || uni == 'O') && ne.editwhat == &vid.alpha) { + double d = exp(shiftmul/10); + vid.alpha *= d; + vid.scale *= d; + ne.s = fts(vid.alpha); + } + else if(doexiton(sym, uni)) popScreen(); + }; + } int nlpage = 1; int wheelshift = 0; @@ -785,4 +762,26 @@ namespace dialog { return true; } + void editNumber(ld& x, ld vmin, ld vmax, ld step, ld dft, string title, string help) { + ne.editwhat = &x; + ne.s = fts(x); + ne.vmin = vmin; + ne.vmax = vmax; + ne.step = step; + ne.dft = dft; + ne.title = title; + ne.help = help; + ne.scale = ne.inverse_scale = identity; + ne.intval = NULL; + ne.positive = false; + sidedialog = false; + pushScreen(drawNumberDialog); + } + + void editNumber(int& x, int vmin, int vmax, int step, int dft, string title, string help) { + editNumber(ne.intbuf, vmin, vmax, step, dft, title, help); + ne.intbuf = x; ne.intval = &x; ne.s = its(x); + sidedialog = true; + } + }; diff --git a/game.cpp b/game.cpp index afdffc5a..8f96e5ff 100644 --- a/game.cpp +++ b/game.cpp @@ -5415,8 +5415,12 @@ void checkmove() { if(movepcto(1, 1, true)) canmove = legalmoves[cwt.spin] = true; if(kills[moPlayer]) canmove = false; - if(!canmove) + + if(!canmove) { achievement_final(true); + if(cmode2 == smNormal) showMissionScreen(); + } + if(canmove && timerstopped) { timerstart = time(NULL); timerstopped = false; diff --git a/graph.cpp b/graph.cpp index 5a4c6931..f1753f39 100644 --- a/graph.cpp +++ b/graph.cpp @@ -4,137 +4,45 @@ // basic graphics: -bool quitsaves() { return (items[itOrbSafety] && havesave); } - bool wmspatial, wmescher, wmplain, wmblack, wmascii; bool mmspatial, mmhigh, mmmon, mmitem; int maxreclevel, reclevel; -int lastt; - -int backcolor = 0; -int bordcolor = 0; -int forecolor = 0xFFFFFF; - int detaillevel = 0; +hookset *hooks_handleKey; +hookset *hooks_drawcell; +purehookset hooks_frame; + #define WOLNIEJ 1 #define BTOFF 0x404040 #define BTON 0xC0C000 #define K(c) (c->type==6?0:1) -#ifdef ROGUEVIZ -#define DOSHMUP (shmup::on || rogueviz::on) -#else -#define DOSHMUP shmup::on -#endif - // #define PANDORA int colorbar; -#define COLORBAR "###" - -#ifndef NOSDL -SDL_Surface *s; -SDL_Joystick* sticks[8]; -int numsticks; - -#ifndef NOTTF -TTF_Font *font[256]; -#endif -#endif - -ld shiftmul = 1; bool inHighQual; // taking high quality screenshot bool auraNOGL; // aura without GL -// R:239, G:208, B:207 - -unsigned int skincolors[] = { 7, 0xD0D0D0FF, 0xEFD0C9FF, 0xC77A58FF, 0xA58869FF, 0x602010FF, 0xFFDCB1FF, 0xEDE4C8FF }; -unsigned int haircolors[] = { 8, 0x686868FF, 0x8C684AFF, 0xF2E1AEFF, 0xB55239FF, 0xFFFFFFFF, 0x804000FF, 0x502810FF, 0x301800FF }; -unsigned int dresscolors[] = { 6, 0xC00000FF, 0x00C000FF, 0x0000C0FF, 0xC0C000FF, 0xC0C0C0FF, 0x202020FF }; -unsigned int dresscolors2[] = { 7, 0x8080FFC0, 0x80FF80C0, 0xFF8080C0, 0xFFFF80C0, 0xFF80FFC0, 0x80FFFFC0, 0xFFFFFF80 }; -unsigned int swordcolors[] = { 6, 0xC0C0C0FF, 0xFFFFFFFF, 0xFFC0C0FF, 0xC0C0FFFF, 0x808080FF, 0x202020FF }; -unsigned int eyecolors[] = { 4, 0x00C000FF, 0x0000C0FF, 0xC00000FF, 0xC0C000FF }; - -// is the player using mouse? (used for auto-cross) -bool mousing = true; - -// is the mouse button pressed? -bool mousepressed = false; -bool mousemoved = false; -bool actonrelease = false; - -emtype cmode = emNormal, lastmode = emNormal; // last mode in Help - // int axestate; int ticks; int frameid; -videopar vid; -int default_language; - -charstyle& getcs() { - if(multi::players>1 && multi::cpid >= 0 && multi::cpid < multi::players) - return multi::scs[multi::cpid]; - else - return vid.cs; - } - bool camelotcheat; -int playergender() { - return (getcs().charid&1) ? GEN_F : GEN_M; - } -int princessgender() { - int g = playergender(); - if(vid.samegender) return g; - return g == GEN_M ? GEN_F : GEN_M; - } - -int lang() { - if(vid.language >= 0) - return vid.language; - return default_language; - } - eItem orbToTarget; eMonster monsterToSummon; int sightrange = 7; bool overgenerate = false; // generate a bigger area with high sightrange -cell *mouseover, *mouseover2, *lmouseover, *centerover; -ld modist, modist2, centdist; string mouseovers; -movedir mousedest, joydir; - -int mousex, mousey, joyx, joyy, panjoyx, panjoyy; -bool autojoy = true; -hyperpoint mouseh, mouseoh; - -bool leftclick, rightclick, targetclick, hiliteclick, anyshiftclick, wheelclick, - forcetarget, lshiftclick, lctrlclick; -bool gtouched; -bool revcontrol; - -int getcstat, lgetcstat; ld getcshift; bool inslider; - -int ZZ; - -string help; - -#ifndef NOLAMBDAS -function help_delegate; -#endif - -int andmode = 0; - int darken = 0; struct fallanim { @@ -150,1067 +58,14 @@ bool doHighlight() { return (hiliteclick && darken < 2) ? !mmhigh : mmhigh; } -#ifndef NOSDL -int& qpixel(SDL_Surface *surf, int x, int y) { - if(x<0 || y<0 || x >= surf->w || y >= surf->h) return ZZ; - char *p = (char*) surf->pixels; - p += y * surf->pitch; - int *pi = (int*) (p); - return pi[x]; - } - -int qpixel3(SDL_Surface *surf, int x, int y) { - if(x<0 || y<0 || x >= surf->w || y >= surf->h) return ZZ; - char *p = (char*) surf->pixels; - p += y * surf->pitch; - p += x; - int *pi = (int*) (p); - return pi[0]; - } -#endif - -#ifndef EXTERNALFONT -#ifndef NOTTF -void loadfont(int siz) { - if(!font[siz]) { -#ifdef WEB - font[siz] = TTF_OpenFont("sans-serif", siz); -#else - font[siz] = TTF_OpenFont(HYPERPATH "DejaVuSans-Bold.ttf", siz); -#endif - // Destination set by ./configure (in the GitHub repository) - #ifdef FONTDESTDIR - if (font[siz] == NULL) { - font[siz] = TTF_OpenFont(FONTDESTDIR, siz); - } - #endif - if (font[siz] == NULL) { - printf("error: Font file not found\n"); - exit(1); - } - } - } -#endif - -int gl_width(int size, const char *s); - -int textwidth(int siz, const string &str) { - if(size(str) == 0) return 0; - -#ifdef NOTTF -#ifdef GL - return gl_width(siz, str.c_str()); -#else - return 0; -#endif - -#else - - loadfont(siz); - - int w, h; - TTF_SizeUTF8(font[siz], str.c_str(), &w, &h); - // printf("width = %d [%d]\n", w, size(str)); - return w; -#endif - } -#endif - -int textwidth(int siz, const string &str); - -#ifdef IOS - -int textwidth(int siz, const string &str) { - return mainfont->getSize(str, siz / 36.0).width; - } - -#endif - -int gradient(int c0, int c1, ld v0, ld v, ld v1); - -int darkenedby(int c, int lev) { - for(int i=0; i> 1); - return c; - } - -int darkened(int c) { -#ifdef EXTRA_FADEOUT - c = gradient(backcolor, c, 0, extra::fadeout, 1); -#endif - for(int i=0; i> 1) + ((backcolor & 0xFEFEFE) >> 1); - return c; - } - -int darkena(int c, int lev, int a) { - return (darkenedby(c, lev) << 8) + a; - } - -#ifndef GL -void setcameraangle(bool b) { } -#endif - -#ifdef GL - -bool cameraangle_on; - -void setcameraangle(bool b) { - if(cameraangle_on != b) { - glMatrixMode(GL_PROJECTION); - cameraangle_on = b; - ld cam = vid.camera_angle * M_PI / 180; - - GLfloat cc = cos(cam); - GLfloat ss = sin(cam * (b?1:-1)); - - GLfloat yzspin[16] = { - 1, 0, 0, 0, - 0, cc, ss, 0, - 0, -ss, cc, 0, - 0, 0, 0, 1 - }; - - glMultMatrixf(yzspin); - } - } - -void selectEyeGL(int ed) { - DEBB(DF_GRAPH, (debugfile,"selectEyeGL\n")); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - glTranslatef((vid.xcenter*2.)/vid.xres - 1, 1 - (vid.ycenter*2.)/vid.yres, 0); - - if(pmodel) { - vid.scrdist = 4 * vid.radius; - - // simulate glOrtho - GLfloat ortho[16] = { - GLfloat(2. / vid.xres), 0, 0, 0, - 0, GLfloat(-2. / vid.yres), 0, 0, - 0, 0, GLfloat(.4 / vid.scrdist), 0, - 0, 0, 0, 1}; - - vid.scrdist = -vid.scrdist; - glMultMatrixf(ortho); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - } - else { - float ve = ed*vid.eye; - ve *= 2; // vid.xres; ve /= vid.radius; - if(ve) - glTranslatef(-(ve * vid.radius) * (vid.alpha - (vid.radius*1./vid.xres) * vid.eye) / vid.xres, 0, 0); - - float lowdepth = .1; - float hidepth = 1e9; - - // simulate glFrustum - GLfloat frustum[16] = { - GLfloat(vid.yres * 1./vid.xres), 0, 0, 0, - 0, 1, 0, 0, - 0, 0, -(hidepth+lowdepth)/(hidepth-lowdepth), -1, - 0, 0, -2*lowdepth*hidepth/(hidepth-lowdepth), 0}; - - glMultMatrixf(frustum); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - GLfloat sc = vid.radius / (vid.yres/2.); - GLfloat mat[16] = {sc,0,0,0, 0,-sc,0,0, 0,0,-1,0, 0,0, 0,1}; - glMultMatrixf(mat); - - if(ve) glTranslatef(ve, 0, vid.eye); - vid.scrdist = vid.yres * sc / 2; - } - - cameraangle_on = false; - } - -void selectEyeMask(int ed) { - if(ed == 0) { - glColorMask( GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE ); - } - else if(ed == 1) { - glColorMask( GL_TRUE,GL_FALSE,GL_FALSE,GL_TRUE ); - } - else if(ed == -1) { - glColorMask( GL_FALSE,GL_TRUE,GL_TRUE,GL_TRUE ); - } - } - -void setGLProjection() { - DEBB(DF_GRAPH, (debugfile,"setGLProjection\n")); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - unsigned char *c = (unsigned char*) (&backcolor); - glClearColor(c[2] / 255.0, c[1] / 255.0, c[0]/255.0, 1); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glEnable(GL_BLEND); - if(vid.antialias & AA_LINES) { - glEnable(GL_LINE_SMOOTH); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - } - else glDisable(GL_LINE_SMOOTH); - glLineWidth(vid.linewidth); - - if(vid.antialias & AA_POLY) { - glEnable(GL_POLYGON_SMOOTH); - glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); - } - else glDisable(GL_POLYGON_SMOOTH); - - //glLineWidth(1.0f); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - if(pmodel == mdBall || pmodel == mdHyperboloid) { -#ifdef GL_ES - glClearDepthf(1.0f); -#else - glClearDepth(1.0f); -#endif - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - } - else - glDisable(GL_DEPTH_TEST); - - selectEyeGL(0); - } - -void buildpolys(); - -#ifdef MOBILE -#define EXTERNALFONT -#endif - -#ifndef EXTERNALFONT - -struct glfont_t { - GLuint * textures; // Holds The Texture Id's -//GLuint list_base; // Holds The First Display List ID - int widths[128+NUMEXTRA]; - int heights[128+NUMEXTRA]; - float tx[128+NUMEXTRA]; - float ty[128+NUMEXTRA]; - }; - -glfont_t *glfont[256]; - -inline int next_p2 (int a ) -{ - int rval=1; - // rval<<=1 Is A Prettier Way Of Writing rval*=2; - while(rvalw; - int otheight = txt->h; -#endif - - int twidth = next_p2( otwidth ); - int theight = next_p2( otheight ); - -#ifdef NOTTF - int expanded_data[twidth * theight]; -#else - Uint16 expanded_data[twidth * theight]; -#endif - - for(int j=0; j =otwidth || j>=otheight) ? 0 : tpix[tpixindex++]; -#else - expanded_data[(i+j*twidth)] = - ((i>=txt->w || j>=txt->h) ? 0 : ((qpixel(txt, i, j)>>24)&0xFF) * 0x100) | 0x00FF; -#endif - } - - f.widths[ch] = otwidth; - f.heights[ch] = otheight; - - glBindTexture( GL_TEXTURE_2D, f.textures[ch]); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - - glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, twidth, theight, 0, -#ifdef NOTTF - GL_RGBA, GL_UNSIGNED_BYTE, -#else - GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, -#endif - expanded_data ); - - float x=(float)otwidth / (float)twidth; - float y=(float)otheight / (float)theight; - f.tx[ch] = x; - f.ty[ch] = y; - } - -void init_glfont(int size) { - if(glfont[size]) return; - DEBB(DF_INIT, (debugfile,"init GL font: %d\n", size)); - - glfont[size] = new glfont_t; - - glfont_t& f(*(glfont[size])); - - f.textures = new GLuint[128+NUMEXTRA]; -//f.list_base = glGenLists(128); - glGenTextures( 128+NUMEXTRA, f.textures ); - -#ifndef NOTTF - loadfont(size); - if(!font[size]) return; - - char str[2]; str[1] = 0; - - SDL_Color white; - white.r = white.g = white.b = 255; -#endif - -// glListBase(0); - - for(int ch=1;ch<128+NUMEXTRA;ch++) { - - if(ch<32) continue; - -#ifdef NOTTF - sdltogl(NULL, f, ch); - -#else - SDL_Surface *txt; - if(ch < 128) { - str[0] = ch; - txt = TTF_RenderText_Blended(font[size], str, white); - } - else { - txt = TTF_RenderUTF8_Blended(font[size], natchars[ch-128], white); - } - if(txt == NULL) continue; -#ifdef CREATEFONT - generateFont(ch, txt); -#endif - sdltogl(txt, f, ch); -#endif - -#ifndef NOTTF - SDL_FreeSurface(txt); -#endif - } - -//printf("init size=%d ok\n", size); - GLERR("initfont"); - } - -int utfsize(char c) { - unsigned char cu = c; - if(cu < 128) return 1; - if(cu < 224) return 2; - if(cu < 0xE0) return 3; - return 4; - } - -bool eqs(const char* x, const char* y) { - return *y? *x==*y?eqs(x+1,y+1):false:true; - } - -int getnext(const char* s, int& i) { - int siz = utfsize(s[i]); - if(siz == 1) return s[i++]; - for(int k=0; k vid.fsize || size > 72) gsiz = 72; - -#ifdef FIXEDSIZE - gsiz = 36; -#endif - - init_glfont(gsiz); - -#ifndef NOTTF - if(!font[gsiz]) return 0; -#endif - - glfont_t& f(*glfont[gsiz]); - - int x = 0; - for(int i=0; s[i];) { - int tabid = getnext(s,i); - x += f.widths[tabid] * size/gsiz; - } - - return x; - } - -bool gl_print(int x, int y, int shift, int size, const char *s, int color, int align) { - - int gsiz = size; - if(size > vid.fsize || size > 72) gsiz = 72; - -#ifdef FIXEDSIZE - gsiz = 36; -#endif - - init_glfont(gsiz); - -#ifndef NOTTF - if(!font[gsiz]) return false; -#endif - - glfont_t& f(*glfont[gsiz]); - - glDisable(GL_LIGHTING); - - glEnable(GL_TEXTURE_2D); - - glMatrixMode(GL_MODELVIEW); - - glcolor2((color << 8) | 0xFF); - - int tsize = 0; - for(int i=0; s[i];) tsize += f.widths[getnext(s,i)] * size/gsiz; - x -= tsize * align / 16; - y += f.heights[32] * size / (gsiz*2); - - int ysiz = f.heights[32] * size / gsiz; - - bool clicked = (mousex >= x && mousey <= y && mousex <= x+tsize && mousey >= y-ysiz); - - /* extern bool markcorner; - if(clicked && markcorner) { - markcorner = false; - int w = tsize, h = -ysiz; - displaystr(x, y, 1, 10, "X", 0xFFFFFF, 8); - displaystr(x+w, y, 1, 10, "X", 0xFFFFFF, 8); - displaystr(x, y+h, 1, 10, "X", 0xFFFFFF, 8); - displaystr(x+w, y+h, 1, 10, "X", 0xFFFFFF, 8); - markcorner = true; - } */ - - for(int i=0; s[i];) { - - // glListBase(f.list_base); - // glCallList(s[i]); // s[i]); - - int tabid = getnext(s,i); - float fx=f.tx[tabid]; - float fy=f.ty[tabid]; - int wi = f.widths[tabid] * size/gsiz; - int hi = f.heights[tabid] * size/gsiz; - - GLERR("pre-print"); - - for(int ed = (vid.goteyes && shift)?-1:0; ed<2; ed+=2) { - glPushMatrix(); - glTranslatef(x-ed*shift-vid.xcenter,y-vid.ycenter, vid.scrdist); - selectEyeMask(ed); - glBindTexture(GL_TEXTURE_2D, f.textures[tabid]); - -#if 1 - tver[1] = tver[10] = -hi; - tver[6] = tver[9] = wi; - tver[12+4] = tver[12+7] = fy; - tver[12+6] = tver[12+9] = fx; - activateVertexArray(tver, 8); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(3, GL_FLOAT, 0, &tver[12]); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); -#else - glBegin(GL_QUADS); - glTexCoord2d(0,0); glVertex2f(0, -hi); - glTexCoord2d(0,fy); glVertex2f(0, 0); - glTexCoord2d(fx,fy); glVertex2f(wi, 0); - glTexCoord2d(fx,0); glVertex2f(wi, -hi); - glEnd(); -#endif - glPopMatrix(); - } - - if(vid.goteyes) selectEyeMask(0); - - GLERR("print"); - - // int tabid = s[i]; - x += wi; - -/* - printf("point %d,%d\n", x, y); - glBegin(GL_POINTS); - glVertex3f(rand() % 100 - rand() % 100, rand() % 100 - rand() % 100, 100); - glEnd(); */ - - } - - glDisable(GL_TEXTURE_2D); - - return clicked; - } -#endif - -void resetGL() { - DEBB(DF_INIT, (debugfile,"reset GL\n")); -#ifndef EXTERNALFONT - for(int i=0; i<128; i++) if(glfont[i]) { - delete glfont[i]; - glfont[i] = NULL; - } -#endif - buildpolys(); - } - -#endif - -#ifndef MOBILE -bool displaystr(int x, int y, int shift, int size, const char *str, int color, int align) { - - if(strlen(str) == 0) return false; - - if(size < 4 || size > 255) { - return false; - } - -#ifdef GL - if(vid.usingGL) return gl_print(x, y, shift, size, str, color, align); -#endif - -#ifdef NOTTF - static bool towarn = true; - if(towarn) towarn = false, printf("WARNING: NOTTF works only with OpenGL!\n"); - return false; -#else - - SDL_Color col; - col.r = (color >> 16) & 255; - col.g = (color >> 8 ) & 255; - col.b = (color >> 0 ) & 255; - - col.r >>= darken; col.g >>= darken; col.b >>= darken; - - loadfont(size); - - SDL_Surface *txt = ((vid.antialias & AA_FONT)?TTF_RenderUTF8_Blended:TTF_RenderUTF8_Solid)(font[size], str, col); - - if(txt == NULL) return false; - - SDL_Rect rect; - - rect.w = txt->w; - rect.h = txt->h; - - rect.x = x - rect.w * align / 16; - rect.y = y - rect.h/2; - - bool clicked = (mousex >= rect.x && mousey >= rect.y && mousex <= rect.x+rect.w && mousey <= rect.y+rect.h); - - if(shift) { - SDL_Surface* txt2 = SDL_DisplayFormat(txt); - SDL_LockSurface(txt2); - SDL_LockSurface(s); - int c0 = qpixel(txt2, 0, 0); - for(int yy=0; yy= 2) { - int b1 = b-1; - displaystr(x-b1, y-b1, 0, size, s, p, align); - displaystr(x-b1, y+b1, 0, size, s, p, align); - displaystr(x+b1, y-b1, 0, size, s, p, align); - displaystr(x+b1, y+b1, 0, size, s, p, align); - } - return displaystr(x, y, 0, size, s, color, align); - } - -bool displayfr(int x, int y, int b, int size, const string &s, int color, int align) { - return displayfrSP(x, y, 0, b, size, s, color, align, poly_outline>>8); - } - -bool displaychr(int x, int y, int shift, int size, char chr, int col) { - - char buf[2]; - buf[0] = chr; buf[1] = 0; - return displaystr(x, y, shift, size, buf, col, 8); - } - -#else - -vector graphdata; - -void gdpush(int t) { - graphdata.push_back(t); - } - -bool displaychr(int x, int y, int shift, int size, char chr, int col) { - gdpush(2); gdpush(x); gdpush(y); gdpush(8); - gdpush(col); gdpush(size); gdpush(0); - gdpush(1); gdpush(chr); - return false; - } - -void gdpush_utf8(const string& s) { - int g = (int) graphdata.size(), q = 0; - gdpush((int) s.size()); for(int i=0; i= 192 && uch < 224) { - int u = ((s[i] - 192)&31) << 6; - i++; - u += (s[i] - 128) & 63; - gdpush(u); q++; - } - else -#endif - { - gdpush(s[i]); q++; - } - } - graphdata[g] = q; - } - -bool displayfr(int x, int y, int b, int size, const string &s, int color, int align) { - gdpush(2); gdpush(x); gdpush(y); gdpush(align); - gdpush(color); gdpush(size); gdpush(b); - gdpush_utf8(s); - int mx = mousex - x; - int my = mousey - y; - int len = textwidth(size, s); - return - mx >= -len*align/32 && mx <= +len*(16-align)/32 && - my >= -size*3/4 && my <= +size*3/4; - } - -bool displaystr(int x, int y, int shift, int size, const string &s, int color, int align) { - return displayfr(x,y,0,size,s,color,align); - } - -bool displaystr(int x, int y, int shift, int size, char const *s, int color, int align) { - return displayfr(x,y,0,size,s,color,align); - } - -#endif - -bool displaynum(int x, int y, int shift, int size, int col, int val, string title) { - char buf[64]; - sprintf(buf, "%d", val); - bool b1 = displayfr(x-8, y, 1, size, buf, col, 16); - bool b2 = displayfr(x, y, 1, size, title, col, 0); - if((b1 || b2) && gtouched) { - col ^= 0x00FFFF; - displayfr(x-8, y, 1, size, buf, col, 16); - displayfr(x, y, 1, size, title, col, 0); - } - return b1 || b2; - } - -struct msginfo { - int stamp; - char flashout; - char spamtype; - int quantity; - string msg; - }; - -vector msgs; - -vector gamelog; - -void flashMessages() { - for(int i=0; i& log) { - - if(size(log) != 0) { - msginfo& last = log[size(log)-1]; - if(last.msg == m.msg) { - int q = m.quantity + last.quantity; - last = m; last.quantity = q; - return; - } - } - if(size(log) < 200) - log.push_back(m); - else { - for(int i=0; i 1) s += " (x" + its(msgs[j].quantity) + ")"; - poly_outline = gradient(bordcolor, backcolor, 0, age, 256*vid.flashtime) << 8; - displayfr(x, y, 1, vid.fsize, s, gradient(forecolor, backcolor, 0, age, 256*vid.flashtime), 8); - msgs[i++] = msgs[j]; - } - } - msgs.resize(i); - } - eModel pmodel = mdDisk; -ld ghx, ghy, ghgx, ghgy; -hyperpoint ghpm = C0; - -void ghcheck(hyperpoint &ret, const hyperpoint &H) { - if(hypot(ret[0]-ghx, ret[1]-ghy) < hypot(ghgx-ghx, ghgy-ghy)) { - ghpm = H; ghgx = ret[0]; ghgy = ret[1]; - } - } - -void camrotate(ld& hx, ld& hy) { - ld cam = vid.camera_angle * M_PI / 180; - GLfloat cc = cos(cam); - GLfloat ss = sin(cam); - ld ux = hx, uy = hy * cc + ss, uz = cc - ss * hy; - hx = ux / uz, hy = uy / uz; - } - -hyperpoint gethyper(ld x, ld y) { - - ld hx = (x - vid.xcenter) / vid.radius; - ld hy = (y - vid.ycenter) / vid.radius; - - if(pmodel) { - ghx = hx, ghy = hy; - return ghpm; - } - - if(euclid) - return hpxy(hx * (EUCSCALE + vid.alphax), hy * (EUCSCALE + vid.alphax)); - - if(vid.camera_angle) camrotate(hx, hy); - - ld hr = hx*hx+hy*hy; - - if(hr > .9999 && !sphere) return Hypc; - - // hz*hz-(hx/(hz+alpha))^2 - (hy/(hz+alpha))^2 = - - // hz*hz-hr*(hz+alpha)^2 == 1 - // hz*hz - hr*hr*hz*Hz - - - ld A, B, C; - - ld curv = sphere ? 1 : -1; - - A = 1+curv*hr; - B = 2*hr*vid.alphax*-curv; - C = 1 - curv*hr*vid.alphax*vid.alphax; - - // Az^2 - Bz = C - B /= A; C /= A; - - // z^2 - Bz = C - // z^2 - Bz + (B^2/4) = C + (B^2/4) - // z = (B/2) + sqrt(C + B^2/4) - - ld rootsign = 1; - if(sphere && vid.alphax > 1) rootsign = -1; - - ld hz = B / 2 + rootsign * sqrt(C + B*B/4); - - hyperpoint H; - H[0] = hx * (hz+vid.alphax); - H[1] = hy * (hz+vid.alphax); - H[2] = hz; - - return H; - } - -void ballmodel(hyperpoint& ret, double alpha, double d, double zl) { - hyperpoint H = ypush(geom3::camera) * xpush(d) * ypush(zl) * C0; - ld tzh = vid.ballproj + H[2]; - ld ax = H[0] / tzh; - ld ay = H[1] / tzh; - ld ball = vid.ballangle * M_PI / 180; - - ld ca = cos(alpha), sa = sin(alpha); - ld cb = cos(ball), sb = sin(ball); - - ret[0] = ax * ca; - ret[1] = ay * cb + ax * sa * sb; - ret[2] = - ax * sa * cb - ay * sb; - } - -void applymodel(hyperpoint H, hyperpoint& ret) { - - ld tz = euclid ? (EUCSCALE+vid.alphax) : vid.alphax+H[2]; - if(tz < 1e-3 && tz > -1e-3) tz = 1000; - - if(pmodel == mdUnchanged) { - for(int i=0; i<3; i++) ret[i] = H[i] / vid.radius; - return; - } - - if(pmodel == mdBall) { - ld zlev = zlevel(H); - using namespace hyperpoint_vec; - H = H / zlev; - - ld zl = geom3::depth-geom3::factor_to_lev(zlev); - double alpha = atan2(H[1], H[0]); - double d = hdist0(H); - - ballmodel(ret, alpha, d, zl); - ghcheck(ret,H); - - return; - } - - if(pmodel == mdHyperboloid) { - - ld ball = vid.ballangle * M_PI / 180; - ld cb = cos(ball), sb = sin(ball); - - ret[0] = H[0] / 3; - ret[1] = (1 - H[2]) / 3 * cb + H[1] / 3 * sb; - ret[2] = H[1] / 3 * cb - (1 - H[2]) / 3 * sb; - - ghcheck(ret,H); - return; - } - - if(pmodel == mdDisk) { - - if(!vid.camera_angle) { - ret[0] = H[0] / tz; - ret[1] = H[1] / tz; - ret[2] = (1 - vid.beta / tz); - } - else { - ld tx = H[0]; - ld ty = H[1]; - ld cam = vid.camera_angle * M_PI / 180; - GLfloat cc = cos(cam); - GLfloat ss = sin(cam); - ld ux = tx, uy = ty * cc - ss * tz, uz = tz * cc + ss * ty; - ret[0] = ux / uz; - ret[1] = uy / uz; - ret[2] = 1 - vid.beta / uz; - } - return; - } - - ld zlev = 1; - - if(wmspatial || mmspatial) { - zlev = zlevel(H); - using namespace hyperpoint_vec; - H = H / zlev; - } - - if(pmodel == mdEquidistant || pmodel == mdEquiarea) { - ld rad = sqrt(H[0] * H[0] + H[1] * H[1]); - ld d = hdist0(H); - if(pmodel == 6 && sphere) - d = sqrt(2*(1 - cos(d))) * 1.25; // /1.5 to make it fit on the screen better - else if(pmodel == 6) - d = sqrt(2*(cosh(d) - 1)) / 1.5; - ret[0] = d * H[0] / rad / 4; - ret[1] = d * H[1] / rad / 4; - ret[2] = 0; - if(zlev != 1 && vid.goteyes) - ret[2] = geom3::factor_to_lev(zlev); - ghcheck(ret,H); - return; - } - - tz = H[2]+vid.alphax; - - if(pmodel == mdPolygonal || pmodel == mdPolynomial) { - pair p = polygonal::compute(H[0]/tz, H[1]/tz); - ret[0] = p.first; - ret[1] = p.second; - ret[2] = 0; - ghcheck(ret,H); - return; - } - - // Poincare to half-plane - - ld x0, y0; - x0 = H[0] / tz; - y0 = H[1] / tz; - y0 += 1; - double rad = x0*x0 + y0*y0; - y0 /= rad; - x0 /= rad; - y0 -= .5; - - if(pmodel == mdHalfplane) { - ret[0] = x0; - if(wmspatial || mmspatial) y0 *= zlev; - ret[1] = 1 - y0; - ret[2] = 0; - if(zlev != 1 && vid.goteyes) - ret[2] = y0 * geom3::factor_to_lev(zlev); - ghcheck(ret,H); - return; - } - - // center - x0 *= 2; y0 *= 2; - - // half-plane to band - double tau = (log((x0+1)*(x0+1) + y0*y0) - log((x0-1)*(x0-1) + y0*y0)) / 2; - double u=(1-x0*x0-y0*y0); - u = (1 - x0*x0 - y0*y0 + sqrt(u*u+4*y0*y0)); - double yv = 2*y0 / u; - double sigma = 2 * atan(yv * zlev) - M_PI/2; - - x0 = tau; y0 = sigma; - - /* if(zlev != 1) { - double alp = (y0 * y0) / (1-y0*y0); - double gx = alp + sqrt(alp*alp-1); - double gy = y0 * (gx+1); - double yr = zlev * gy / (zlev * gx + 1); - printf("zlev = %10.5lf y0 = %20.10lf yr = %20.10lf\n", double(zlev), (double)y0, yr); - y0 = yr; - } */ - - ret[0] = x0/M_PI*2; - ret[1] = -y0/M_PI*2; - ret[2] = 0; - - if(zlev != 1 && vid.goteyes) - ret[2] = geom3::factor_to_lev(zlev) / (1 + yv * yv); - - ghcheck(ret,H); - } - int dlit; -// game-related graphics - -transmatrix View; // current rotation, relative to viewctr -transmatrix cwtV; // player-relative view -transmatrix sphereflip; // on the sphere, flip -heptspin viewctr; // heptagon and rotation where the view is centered at -bool playerfound; // has player been found in the last drawing? - ld spina(cell *c, int dir) { return 2 * M_PI * dir / c->type; } -int gradient(int c0, int c1, ld v0, ld v, ld v1) { - int vv = int(256 * ((v-v0) / (v1-v0))); - int c = 0; - for(int a=0; a<3; a++) { - int p0 = (c0 >> (8*a)) & 255; - int p1 = (c1 >> (8*a)) & 255; - int p = (p0*(256-vv) + p1*vv + 127) >> 8; - c |= p << (8*a); - } - return c; - } - // cloak color int cloakcolor(int rtr) { rtr -= 28; @@ -1273,28 +128,6 @@ int lightat, safetyat; void drawLightning() { lightat = ticks; } void drawSafety() { safetyat = ticks; } -double eurad = 0.52; -double q3 = sqrt(double(3)); - -bool outofmap(hyperpoint h) { - if(euclid) - return false; // h[0] * h[0] + h[1] * h[1] > 15 * eurad; - else if(sphere) - return h[2] < .1 && h[2] > -.1 && h[1] > -.1 && h[1] < .1 && h[0] > -.1 && h[0] < .1; - else - return h[2] < .5; - } - -bool mouseout() { - if((getcstat != '-' && getcstat) || (lgetcstat && lgetcstat != '-')) return true; - return outofmap(mouseh); - } - -bool mouseout2() { - if((getcstat && getcstat != '-') || (lgetcstat && lgetcstat != '-')) return true; - return outofmap(mouseh) || outofmap(mouseoh); - } - void drawShield(const transmatrix& V, eItem it) { float ds = ticks / 300.; int col = iinf[it].color; @@ -1384,14 +217,6 @@ transmatrix ddspin(cell *c, int d, int bonus) { return getspinmatrix(hdir); } -#ifdef WEB -Uint8 *SDL_GetKeyState(void *v) { static Uint8 tab[1024]; return tab; } -#endif - -#include "shmup.cpp" -#include "conformal.cpp" -#include "rug.cpp" - void drawPlayerEffects(const transmatrix& V, cell *c, bool onplayer) { if(!onplayer && !items[itOrbEmpathy]) return; if(items[itOrbShield] > (shmup::on ? 0 : ORBBASE)) drawShield(V, itOrbShield); @@ -1468,26 +293,6 @@ void drawStunStars(const transmatrix& V, int t) { } } -hyperpoint mirrorif(const hyperpoint& V, bool b) { - if(b) return Mirror*V; - else return V; - } - -string csnameid(int id) { - if(id == 0) return XLAT("male"); - if(id == 1) return XLAT("female"); - if(id == 2) return XLAT("Prince"); - if(id == 3) return XLAT("Princess"); - if(id == 4 || id == 5) return XLAT("cat"); - if(id == 6 || id == 7) return XLAT("dog"); - if(id == 8 || id == 9) return XLATN("Familiar"); - return XLAT("none"); - } - -string csname(charstyle& cs) { - return csnameid(cs.charid); - } - namespace tortoise { // small is 0 or 2 @@ -1850,13 +655,13 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou if(mapeditor::drawplayer && !havus) { if(cs.charid >= 8) { - queuepoly(VABODY, shWolfBody, fc(0, cs.skincolor, 0)); if(!mmspatial && !footphase) queuepoly(VALEGS, shWolfLegs, fc(150, cs.dresscolor, 4)); else { ShadowV(V, shWolfBody); animallegs(VALEGS, moWolf, fc(500, cs.dresscolor, 4), footphase); } + queuepoly(VABODY, shWolfBody, fc(0, cs.skincolor, 0)); queuepoly(VAHEAD, shFamiliarHead, fc(500, cs.haircolor, 2)); if(!shmup::on || shmup::curtime >= shmup::getPlayer()->nextshot) { int col = items[itOrbDiscord] ? watercolor(0) : fc(314, cs.swordcolor, 3); @@ -1869,8 +674,8 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou queuepoly(VABODY, shDogBody, fc(0, cs.skincolor, 0)); else { ShadowV(V, shDogTorso); - queuepoly(VABODY, shDogTorso, fc(0, cs.skincolor, 0)); animallegs(VALEGS, moRunDog, fc(500, cs.dresscolor, 4), footphase); + queuepoly(VABODY, shDogTorso, fc(0, cs.skincolor, 0)); } queuepoly(VAHEAD, shDogHead, fc(150, cs.haircolor, 2)); @@ -1882,14 +687,14 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou } } else if(cs.charid >= 4) { - queuepoly(VABODY, shCatBody, fc(0, cs.skincolor, 0)); - queuepoly(VAHEAD, shCatHead, fc(150, cs.haircolor, 2)); if(!mmspatial && !footphase) queuepoly(VALEGS, shCatLegs, fc(500, cs.dresscolor, 4)); else { ShadowV(V, shCatBody); animallegs(VALEGS, moRunDog, fc(500, cs.dresscolor, 4), footphase); } + queuepoly(VABODY, shCatBody, fc(0, cs.skincolor, 0)); + queuepoly(VAHEAD, shCatHead, fc(150, cs.haircolor, 2)); if(!shmup::on || shmup::curtime >= shmup::getPlayer()->nextshot) { int col = items[itOrbDiscord] ? watercolor(0) : fc(314, cs.swordcolor, 3); queuepoly(VAHEAD * xpush(.04), shWolf1, col); @@ -1904,6 +709,14 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou ShadowV(V, (cs.charid&1) ? shFemaleBody : shPBody); + if(cs.charid&1) + queuepoly(VBODY, shFemaleDress, fc(500, cs.dresscolor, 4)); + + if(cs.charid == 2) + queuepoly(VBODY, shPrinceDress, fc(400, cs.dresscolor, 5)); + if(cs.charid == 3) + queuepoly(VBODY, shPrincessDress, fc(400, cs.dresscolor2, 5)); + if(items[itOrbHorns]) { queuepoly(VBODY, shBullHead, items[itOrbDiscord] ? watercolor(0) : 0xFF000030); queuepoly(VBODY, shBullHorn, items[itOrbDiscord] ? watercolor(0) : 0xFF000040); @@ -1940,15 +753,7 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou else { queuepoly(VHEAD, shPFace, fc(500, cs.skincolor, 1)); queuepoly(VHEAD, (cs.charid&1) ? shFemaleHair : shPHead, fc(150, cs.haircolor, 2)); - } - if(cs.charid&1) - queuepoly(VBODY, shFemaleDress, fc(500, cs.dresscolor, 4)); - - if(cs.charid == 2) - queuepoly(VBODY, shPrinceDress, fc(400, cs.dresscolor, 5)); - if(cs.charid == 3) - queuepoly(VBODY, shPrincessDress, fc(400, cs.dresscolor2, 5)); - + } } if(knighted) @@ -3097,47 +1902,7 @@ void drawaura() { #endif } -void drawCircle(int x, int y, int size, int color) { - if(size < 0) size = -size; - #ifdef GL - if(vid.usingGL) { - qglcoords = 0; - glcolor2(color); - x -= vid.xcenter; y -= vid.ycenter; - int pts = size * 4; - if(pts > 1500) pts = 1500; - if(ISMOBILE && pts > 72) pts = 72; - for(int r=0; r 1500) pts = 1500; - for(int r=0; rtype != 6 && (isStunnable(c->monst) || c->wall == waThumperOn)) { - transmatrix Centered = rgpushxto0(tC0(cwtV)); - int sd = md.subdir; - if(sphere) sd = -sd; - queuepoly(inverse(Centered) * rgpushxto0(Centered * tC0(V)) * rspintox(Centered*tC0(V)) * spin(-sd * M_PI/S7) * xpush(0.2), shArrow, col); - } - else break; - } */ + queuepoly(screenpos(dx, dy) * spin(-alpha) * m2, shArrow, col); } int celldistAltPlus(cell *c) { return 1000000 + celldistAlt(c); } @@ -3450,7 +2194,7 @@ ld wavefun(ld x) { else return 0; */ } -void setcolors(cell *c, int& wcol, int &fcol) { +void setcolors(cell *c, int& wcol, int &fcol) { wcol = fcol = winf[c->wall].color; @@ -3765,7 +2509,7 @@ void setcolors(cell *c, int& wcol, int &fcol) { if(c->wall == waAncientGrave || c->wall == waFreshGrave || c->wall == waThumperOn || c->wall == waThumperOff || c->wall == waBonfireOff) fcol = wcol; - if(c->land == laMinefield && c->wall == waMineMine && (cmode == emMapEditor || !canmove)) + if(c->land == laMinefield && c->wall == waMineMine && (cmode2 == smMap || !canmove)) fcol = wcol = 0xFF4040; if(mightBeMine(c) && mineMarkedSafe(c)) @@ -3809,11 +2553,6 @@ bool noAdjacentChasms(cell *c) { return true; } -// -1 if away, 0 if not away -int away(const transmatrix& V2) { - return intval(C0, V2 * xpush0(1)) > intval(C0, tC0(V2)); - } - void floorShadow(cell *c, const transmatrix& V, int col, bool warp) { if(pmodel == mdHyperboloid || pmodel == mdBall) return; // shadows break the depth testing @@ -3885,18 +2624,6 @@ void warpfloor(cell *c, const transmatrix& V, int col, int prio, bool warp) { escherSidewall(a,c,d,g); Break; break; } \ else placeSidewall(a,b,c,d,e,f,g); } -/* double zgrad(double f1, double f2, int nom, int den) { - using namespace geom3; - ld fo1 = factor_to_lev(f1); - ld fo2 = factor_to_lev(f2); - return lev_to_factor(fo1 + (fo2-fo1) * nom / den); - } */ - -double zgrad0(double l1, double l2, int nom, int den) { - using namespace geom3; - return lev_to_factor(l1 + (l2-l1) * nom / den); - } - void escherSidewall(cell *c, int sidepar, const transmatrix& V, int col) { if(sidepar >= SIDE_SLEV && sidepar <= SIDE_SLEV+2) { int sl = sidepar - SIDE_SLEV; @@ -3955,7 +2682,7 @@ bool openorsafe(cell *c) { #define Dark(x) darkena(x,0,0xFF) int gridcolor(cell *c1, cell *c2) { - if(cmode == emDraw) return Dark(forecolor); + if(cmode2 == smDraw) return Dark(forecolor); if(!c2) return 0x202020 >> darken; int rd1 = rosedist(c1), rd2 = rosedist(c2); @@ -4060,24 +2787,6 @@ bool allemptynear(cell *c) { return true; } -bool behindsphere(const hyperpoint& h) { - if(!sphere) return false; - - if(vid.alpha > 1) { - if(h[2] > -1/vid.alpha) return true; - } - - if(vid.alpha <= 1) { - if(h[2] < -.8) return true; - } - - return false; - } - -bool behindsphere(const transmatrix& V) { - return behindsphere(tC0(V)); - } - void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { qfi.shape = NULL; qfi.special = false; @@ -4094,9 +2803,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { if(behindsphere(V)) return; -#ifdef EXTRA_DRAWCELL - extra::drawcell(c, V); -#endif + callhooks(hooks_drawcell, c, V); ld dist0 = hdist0(tC0(V)) - 1e-6; if(dist0 < geom3::highdetail) detaillevel = 2; @@ -4189,7 +2896,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { if(!buggyGeneration && c->mpdist > 8 && !cheater) return; // not yet generated - if(c->land == laNone && cmode == emMapEditor) { + if(c->land == laNone && cmode2 == smMap) { queuepoly(V, shTriangle, 0xFF0000FF); } @@ -4254,7 +2961,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { hiddens = false; } - if(hiddens && cmode != emMapEditor) + if(hiddens && cmode2 != smMap) it = itNone; int icol = 0, moncol = 0xFF00FF; @@ -4381,7 +3088,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { #ifndef NOEDIT if(mapeditor::drawUserShape(Vpdir, mapeditor::cellShapeGroup(), mapeditor::realpatternsh(c), - darkena(fcol, fd, cmode == emDraw ? 0xC0 : 0xFF), c)); + darkena(fcol, fd, cmode2 == smDraw ? 0xC0 : 0xFF), c)); else if(mapeditor::whichShape == '7') { if(ishept(c)) @@ -4690,7 +3397,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { } #endif - if(cmode == emNumber && (dialog::editingDetail())) { + if(cmode2 == smNumber && (dialog::editingDetail())) { int col = dist0 < geom3::highdetail ? 0xFF80FF80 : dist0 >= geom3::middetail ? 0xFFFF8080 : @@ -5288,7 +3995,7 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { if(!inHighQual) { #ifndef NOEDIT - if(cmode == emMapEditor && !mapeditor::subscreen && lmouseover && darken == 0 && + if(cmode2 == smMap && lmouseover && darken == 0 && !mouseout() && (mapeditor::whichPattern ? mapeditor::subpattern(c) == mapeditor::subpattern(lmouseover) : c == lmouseover)) { queuecircle(V, .78, 0x00FFFFFF); @@ -5313,10 +4020,6 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { } } -bool confusingGeometry() { - return elliptic || quotient == 1 || torus; - } - struct flashdata { int t; int size; @@ -5394,7 +4097,7 @@ void queuecircleat(cell *c, double rad, int col) { void drawMarkers() { - if(darken || cmode == emNumber) return; + if(darken || cmode2 == smNumber) return; if(!inHighQual) { @@ -5485,7 +4188,7 @@ void drawMarkers() { monsterToSummon = moNone; orbToTarget = itNone; - if(mouseover && targetclick && cmode == emNormal) { + if(mouseover && targetclick && cmode2 == smNormal) { shmup::cpid = 0; orbToTarget = targetRangedOrb(mouseover, roCheck); if(orbToTarget == itOrbSummon) { @@ -5562,925 +4265,6 @@ void drawFlashes() { } } -string buildCredits(); - -string buildHelpText() { - DEBB(DF_GRAPH, (debugfile,"buildHelpText\n")); - -#ifdef ROGUEVIZ - if(rogueviz::on) return rogueviz::help(); -#endif - - string h; - h += XLAT("Welcome to HyperRogue"); -#ifdef ANDROID - h += XLAT(" for Android"); -#endif -#ifdef IOS - h += XLAT(" for iOS"); -#endif - h += XLAT("! (version %1)\n\n", VER); - - h += XLAT( - "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 " - "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!" - ); - h += XLAT(" (press ESC for some hints about it)."); - h += "\n\n"; - - h += XLAT( - "You can fight most monsters by moving into their location. " - "The monster could also kill you by moving into your location, but the game " - "automatically cancels all moves which result in that.\n\n" - ); - - h += XLAT( - "There are many lands in HyperRogue. Collect 10 treasure " - "in the given land type to complete it; this enables you to " - "find the magical Orbs of this land, and in some cases " - "get access to new lands. At 25 treasures " - "this type of Orbs starts appearing in other lands as well. Press 'o' to " - "get the details of all the Lands.\n\n"); - h += "\n\n"; - -#ifdef MOBILE - h += XLAT( - "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 " - "or get information about map objects). You can also touch the " - "numbers displayed to get their meanings.\n" - ); -#else - h += XLAT( - "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" - ); - h += XLAT( - "You can right click any element to get more information about it.\n\n" - ); - h += XLAT("(You can also use right Shift)\n\n"); -#endif - h += XLAT("See more on the website: ") - + "http//roguetemple.com/z/hyper/\n\n"; - -#ifdef TOUR - h += XLAT("Try the Tutorial to help with understanding the " - "geometry of HyperRogue (menu -> special modes).\n\n"); -#endif - - h += XLAT("Still confused? Read the FAQ on the HyperRogue website!\n\n"); - - return h; - } - -string buildCredits() { - string h; - h += XLAT("game design, programming, texts and graphics by Zeno Rogue \n\n"); - if(lang() != 0) - h += XLAT("add credits for your translation here"); -#ifndef NOLICENSE - h += XLAT( - "released under GNU General Public License version 2 and thus " - "comes with absolutely no warranty; see COPYING for details\n\n" - ); -#endif - h += XLAT( - "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, " - "wonderfullizardofoz, Piotr MigdaĹ‚, tehora, Michael Heerdegen, Sprite Guard, zelda0x181e, Vipul, snowyowl0, Patashu, phenomist, Alan Malloy, Tom Fryers, Sinquetica, _monad, CtrlAltDestroy, jruderman" - ); -#ifdef EXTRALICENSE - h += EXTRALICENSE; -#endif -#ifndef MOBILE - h += XLAT( - "\n\nSee sounds/credits.txt for credits for sound effects" - ); - #endif - if(musiclicense != "") h += musiclicense; - return h; - } - -string pushtext(stringpar p) { - string s = XLAT( - "\n\nNote: when pushing %the1 off a heptagonal cell, you can control the pushing direction " - "by clicking left or right half of the heptagon.", p); -#ifndef MOBILE - s += XLAT(" With the keyboard, you can rotate the view for a similar effect (Page Up/Down)."); -#endif - return s; - } - -string princedesc() { - if(princessgender() == GEN_M) - return XLAT("Apparently a prince is kept locked somewhere, but you won't ever find him in this hyperbolic palace. "); - else - return XLAT("Apparently a princess is kept locked somewhere, but you won't ever find her in this hyperbolic palace. "); - } - -string helptitle(string s, int col) { - return "@" + its(col) + "\t" + s + "\n"; - } - -string princessReviveHelp() { - string h = "\n\n" + - XLAT("Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$.", moPrincess); - if(princess::reviveAt) - h += "\n\n" + - XLAT("%The1 will be revivable at %2 $$$", moPrincess, its(princess::reviveAt)); - return h; - } - -void describeOrb(string& help, const orbinfo& oi) { - eOrbLandRelation olr = getOLR(oi.orb, cwt.c->land); - eItem tr = treasureType(oi.l); - help += "\n\n" + XLAT(olrDescriptions[olr], cwt.c->land, tr, treasureType(cwt.c->land)); - int t = items[tr] * landMultiplier(oi.l); - if(t >= 25) - if(olr == olrPrize25 || olr == olrPrize3 || olr == olrGuest || olr == olrMonster || olr == olrAlways) { - help += XLAT("\nSpawn rate (as prize Orb): %1%/%2\n", - its(int(.5 + 100 * orbprizefun(t))), - its(oi.gchance)); - } - if(t >= 10) - if(olr == olrHub) { - help += XLAT("\nSpawn rate (in Hubs): %1%/%2\n", - its(int(.5 + 100 * orbcrossfun(t))), - its(oi.gchance)); - } - } - -string generateHelpForItem(eItem it) { - - string help = helptitle(XLATN(iinf[it].name), iinf[it].color); - - help += XLAT(iinf[it].help); - - if(it == itSavedPrincess || it == itOrbLove) - help += princessReviveHelp(); - - if(it == itTrollEgg) - help += XLAT("\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen.", it); - - if(it == itIvory || it == itAmethyst || it == itLotus || it == itMutant) { - help += XLAT( - "\n\nEasy %1 might disappear when you collect more of its kind.", it); - if(it != itMutant) help += XLAT( - " You need to go deep to collect lots of them."); - } - -#ifdef MOBILE - if(it == itOrbSafety) - help += XLAT("This might be very useful for devices with limited memory."); -#else - if(it == itOrbSafety) - help += XLAT("Thus, it is potentially useful for extremely long games, which would eat all the memory on your system otherwise.\n"); -#endif - - if(isRangedOrb(it)) { - help += XLAT("\nThis is a ranged Orb. "); -#ifdef ISMOBILE - if(vid.shifttarget&2) - help += XLAT("\nRanged Orbs can be targeted by long touching the desired location."); - else - help += XLAT("\nRanged Orbs can be targeted by touching the desired location."); -#else - if(vid.shifttarget&1) - help += XLAT("\nRanged Orbs can be targeted by shift-clicking the desired location. " - else - help += XLAT("\nRanged Orbs can be targeted by clicking the desired location. "); - help += "You can also scroll to the desired location and then press 't'."); -#endif - help += XLAT("\nYou can never target cells which are adjacent to the player character, or ones out of the sight range."); - } - -#ifdef MOBILE - if(it == itGreenStone) - help += XLAT("You can touch the Dead Orb in your inventory to drop it."); -#else - if(it == itGreenStone) - help += XLAT("You can press 'g' or click them in the list to drop a Dead Orb."); -#endif - if(it == itOrbLightning || it == itOrbFlash) - help += XLAT("\n\nThis Orb is triggered on your first attack or illegal move."); - if(it == itOrbShield) - help += XLAT("\n\nThis Orb protects you from attacks, scents, and insulates you " - "from electricity. It does not let you go through deadly terrain, but " - "if you are attacked with fire, it lets you stay in place in it."); - if(it == itOrbEmpathy) { - int cnt = 0; - for(int i=0; i 0) { - help += XLAT("\n\nOrb unlocked: %1", oi.orb); - describeOrb(help, oi); - } - else if(oi.l == cwt.c->land) { - help += XLAT("\n\nSecondary orb: %1", oi.orb); - describeOrb(help, oi); - } - } - } - } - - return help; - } - -void addMinefieldExplanation(string& s) { - - s += XLAT( - "\n\nOnce you collect 10 Bomberbird Eggs, " - "stepping on a cell with no adjacent mines also reveals the adjacent cells. " - "Collecting even more Eggs will increase the radius. Additionally, collecting " - "25 Bomberbird Eggs will reveal adjacent cells even in your future games." - ); - - s += "\n\n"; -#ifdef MOBILE - s += XLAT("Known mines may be marked by pressing 'm'. Your allies won't step on marked mines."); -#else - s += XLAT("Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines."); -#endif - } - -string generateHelpForWall(eWall w) { - - string s = helptitle(XLATN(winf[w].name), winf[w].color); - - s += XLAT(winf[w].help); - if(w == waMineMine || w == waMineUnknown || w == waMineOpen) - addMinefieldExplanation(s); - if(isThumper(w)) s += pushtext(w); - if((w == waClosePlate || w == waOpenPlate) && purehepta) - s += "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)"; - return s; - } - -void buteol(string& s, int current, int req) { - int siz = size(s); - if(s[siz-1] == '\n') s.resize(siz-1); - char buf[100]; sprintf(buf, " (%d/%d)", current, req); - s += buf; s += "\n"; - } - -string generateHelpForMonster(eMonster m) { - string s = helptitle(XLATN(minf[m].name), minf[m].color); - - if(m == moPlayer) { -#ifdef TOUR - if(tour::on) - return s+XLAT( - "A tourist from another world. They mutter something about the 'tutorial', " - "and claim that they are here just to learn, and to leave without any treasures. " - "Do not kill them!" - ); -#endif - s += XLAT( - "This monster has come from another world, presumably to steal our treasures. " - "Not as fast as an Eagle, not as resilient as the guards from the Palace, " - "and not as huge as the Mutant Ivy from the Clearing; however, " - "they are very dangerous because of their intelligence, " - "and access to magical powers.\n\n"); - - if(cheater) - s += XLAT("Actually, their powers appear god-like...\n\n"); - - else if(!hardcore) - s += XLAT( - "Rogues will never make moves which result in their immediate death. " - "Even when cornered, they are able to instantly teleport back to their " - "home world at any moment, taking the treasures forever... but " - "at least they will not steal anything further!\n\n" - ); - - if(!euclid) - s += XLAT( - "Despite this intelligence, Rogues appear extremely surprised " - "by the most basic facts about geometry. They must come from " - "some really strange world.\n\n" - ); - - if(shmup::on) - s += XLAT("In the Shoot'em Up mode, you are armed with thrown Knives."); - - return s; - } - - s += XLAT(minf[m].help); - if(m == moPalace || m == moSkeleton) - s += pushtext(m); - if(m == moTroll) s += XLAT(trollhelp2); - - if(isMonsterPart(m)) - s += XLAT("\n\nThis is a part of a monster. It does not count for your total kills.", m); - - if(isFriendly(m)) - s += XLAT("\n\nThis is a friendly being. It does not count for your total kills.", m); - - if(m == moTortoise) - s += XLAT("\n\nTortoises are not monsters! They are just annoyed. They do not count for your total kills.", m); - - if(isGhost(m)) - s += XLAT("\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the same kind.", m); - - if(m == moBat || m == moEagle) - s += XLAT("\n\nFast flying creatures may attack or go against gravity only in their first move.", m); - - return s; - } - -string generateHelpForLand(eLand l) { - string s = helptitle(XLATN(linf[l].name), linf[l].color); - - if(l == laPalace) s += princedesc(); - - s += XLAT(linf[l].help); - - if(l == laMinefield) addMinefieldExplanation(s); - - s += "\n\n"; - if(l == laIce || l == laCaves || l == laDesert || l == laMotion || l == laJungle || - l == laCrossroads || l == laAlchemist) - s += XLAT("Always available.\n"); - - #define ACCONLY(z) s += XLAT("Accessible only from %the1.\n", z); - #define ACCONLY2(z,x) s += XLAT("Accessible only from %the1 or %the2.\n", z, x); - #define ACCONLYF(z) s += XLAT("Accessible only from %the1 (until finished).\n", z); - #define TREQ(z) { s += XLAT("Treasure required: %1 $$$.\n", its(z)); buteol(s, gold(), z); } - #define TREQ2(z,x) { s += XLAT("Treasure required: %1 x %2.\n", its(z), x); buteol(s, items[x], z); } - - if(l == laMirror || l == laMinefield || l == laPalace || - l == laOcean || l == laLivefjord || l == laZebra || l == laWarpCoast || l == laWarpSea || - l == laReptile || l == laIvoryTower) - TREQ(R30) - - - if(isCoastal(l)) - s += XLAT("Coastal region -- connects inland and aquatic regions.\n"); - - if(isPureSealand(l)) - s += XLAT("Aquatic region -- accessible only from coastal regions and other aquatic regions.\n"); - - if(l == laWhirlpool) ACCONLY(laOcean) - if(l == laRlyeh) ACCONLYF(laOcean) - if(l == laTemple) ACCONLY(laRlyeh) - if(l == laClearing) ACCONLY(laOvergrown) - if(l == laHaunted) ACCONLY(laGraveyard) - if(l == laPrincessQuest) ACCONLY(laPalace) - if(l == laMountain) ACCONLY(laJungle) - if(l == laCamelot) ACCONLY2(laCrossroads, laCrossroads3) - - if(l == laDryForest || l == laWineyard || l == laDeadCaves || l == laHive || l == laRedRock || - l == laOvergrown || l == laStorms || l == laWhirlwind || l == laRose || - l == laCrossroads2 || l == laRlyeh) - TREQ(R60) - - if(l == laReptile) TREQ2(U10, itElixir) - if(l == laEndorian) TREQ2(U10, itIvory) - if(l == laKraken) TREQ2(U10, itFjord) - if(l == laBurial) TREQ2(U10, itKraken) - - if(l == laDungeon) TREQ2(U5, itIvory) - if(l == laDungeon) TREQ2(U5, itPalace) - if(l == laMountain) TREQ2(U5, itIvory) - if(l == laMountain) TREQ2(U5, itRuby) - - if(l == laPrairie) TREQ(R90) - if(l == laBull) TREQ(R90) - if(l == laCrossroads4) TREQ(R200) - if(l == laCrossroads5) TREQ(R300) - - if(l == laGraveyard || l == laHive) { - s += XLAT("Kills required: %1.\n", "100"); - buteol(s, tkills(), R100); - } - - if(l == laDragon) { - s += XLAT("Different kills required: %1.\n", "20"); - buteol(s, killtypes(), R20); - } - - if(l == laTortoise) ACCONLY(laDragon) - if(l == laTortoise) s += XLAT("Find a %1 in %the2.", itBabyTortoise, laDragon); - - if(l == laHell || l == laCrossroads3) { - s += XLAT("Finished lands required: %1 (collect %2 treasure)\n", "9", its(R10)); - buteol(s, orbsUnlocked(), 9); - } - - if(l == laCocytus || l == laPower) TREQ2(U10, itHell) - if(l == laRedRock) TREQ2(U10, itSpice) - if(l == laOvergrown) TREQ2(U10, itRuby) - if(l == laClearing) TREQ2(U5, itMutant) - if(l == laCocytus) TREQ2(U10, itDiamond) - if(l == laDeadCaves) TREQ2(U10, itGold) - if(l == laTemple) TREQ2(U5, itStatue) - if(l == laHaunted) TREQ2(U10, itBone) - if(l == laCamelot) TREQ2(U5, itEmerald) - if(l == laEmerald) { - TREQ2(5, itFernFlower) TREQ2(5, itGold) - s += XLAT("Alternatively: kill a %1 in %the2.\n", moVizier, laPalace); - buteol(s, kills[moVizier], 1); - } - -#define KILLREQ(who, where) { s += XLAT("Kills required: %1 (%2).\n", who, where); buteol(s, kills[who], 1); } - - if(l == laPrincessQuest) - KILLREQ(moVizier, laPalace); - - if(l == laElementalWall) { - KILLREQ(moFireElemental, laDragon); - KILLREQ(moEarthElemental, laDeadCaves); - KILLREQ(moWaterElemental, laLivefjord); - KILLREQ(moAirElemental, laWhirlwind); - } - - if(l == laTrollheim) { - KILLREQ(moTroll, laCaves); - KILLREQ(moFjordTroll, laLivefjord); - KILLREQ(moDarkTroll, laDeadCaves); - KILLREQ(moStormTroll, laStorms); - KILLREQ(moForestTroll, laOvergrown); - KILLREQ(moRedTroll, laRedRock); - } - - if(l == laZebra) TREQ2(U10, itFeather) - - if(l == laCamelot || l == laPrincessQuest) - s += XLAT("Completing the quest in this land is not necessary for the Hyperstone Quest."); - - int rl = isRandland(l); - if(rl == 2) - s += XLAT("Variants of %the1 are always available in the Random Pattern Mode.", l); - else if(rl == 1) - s += XLAT( - "Variants of %the1 are available in the Random Pattern Mode after " - "getting a highscore of at least 10 %2.", l, treasureType(l)); - - if(l == laPrincessQuest) { - s += XLAT("Unavailable in the shmup mode.\n"); - s += XLAT("Unavailable in the multiplayer mode.\n"); - } - - if(noChaos(l)) - s += XLAT("Unavailable in the Chaos mode.\n"); - - if(l == laWildWest) - s += XLAT("Bonus land, available only in some special modes.\n"); - - if(l == laWhirlpool) - s += XLAT("Orbs of Safety always appear here, and may be used to escape.\n"); - - /* if(isHaunted(l) || l == laDungeon) - s += XLAT("You may be unable to leave %the1 if you are not careful!\n", l); */ - - if(l == laStorms) { - if(elec::lightningfast == 0) s += XLAT("\nSpecial conduct (still valid)\n"); - else s += XLAT("\nSpecial conduct failed:\n"); - - s += XLAT( - "Avoid escaping from a discharge (\"That was close\")."); - } - - if(isHaunted(l)) { - if(survivalist) s += XLAT("\nSpecial conduct (still valid)\n"); - else s += XLAT("\nSpecial conduct failed:\n"); - - s += XLAT( - "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods." - ); - } - -#ifndef ISMOBILE - if(l == laCA) - s += XLAT("\n\nHint: use 'm' to toggle cells quickly"); -#endif - - return s; - } - -bool instat; - -string turnstring(int i) { - if(i == 1) return XLAT("1 turn"); - else return XLAT("%1 turns", its(i)); - } - -void describeMouseover() { - DEBB(DF_GRAPH, (debugfile,"describeMouseover\n")); - - cell *c = mousing ? mouseover : playermoved ? NULL : centerover; - string out = mouseovers; - if(!c || instat || getcstat) { } - else if(cmode == emNormal || cmode == emQuit || cmode == emMapEditor) { - out = XLAT1(linf[c->land].name); - help = generateHelpForLand(c->land); - - // Celsius - - // if(c->land == laIce) out = "Icy Lands (" + fts(60 * (c->heat - .4)) + " C)"; - - if(c->land == laIce || c->land == laCocytus) - out += " (" + fts(heat::celsius(c)) + " °C)"; - if(c->land == laDryForest && c->landparam) - out += " (" + its(c->landparam)+"/10)"; - if(c->land == laOcean && chaosmode) - out += " (" + its(c->CHAOSPARAM)+"S"+its(c->SEADIST)+"L"+its(c->LANDDIST)+")"; - else if(c->land == laOcean && c->landparam <= 25) { - if(shmup::on) - out += " (" + its(c->landparam)+")"; - else { - bool b = c->landparam >= tide[(turncount-1) % tidalsize]; - int t = 1; - for(; t < 1000 && b == (c->landparam >= tide[(turncount+t-1) % tidalsize]); t++) ; - if(b) - out += " (" + turnstring(t) + XLAT(" to surface") + ")"; - else - out += " (" + turnstring(t) + XLAT(" to submerge") + ")"; - } - } - - if(c->land == laTortoise && tortoise::seek()) out += " " + tortoise::measure(getBits(c)); - - /* if(c->land == laGraveyard || c->land == laHauntedBorder || c->land == laHaunted) - out += " (" + its(c->landparam)+")"; */ - - if(buggyGeneration) { - char buf[20]; sprintf(buf, " H=%d M=%d", c->landparam, c->mpdist); out += buf; - } - -// if(c->land == laBarrier) -// out += "(" + string(linf[c->barleft].name) + " / " + string(linf[c->barright].name) + ")"; - - // out += "(" + its(c->bardir) + ":" + string(linf[c->barleft].name) + " / " + string(linf[c->barright].name) + ")"; - - // out += " MD"+its(c->mpdist); - - // out += " WP:" + its(c->wparam); - // out += " rose:" + its(rosemap[c]/4) + "." + its(rosemap[c]%4); - // out += " MP:" + its(c->mpdist); - // out += " cda:" + its(celldistAlt(c)); - - /* out += " DP=" + its(celldistance(c, cwt.c)); - out += " DO=" + its(celldist(c)); - out += " PD=" + its(c->pathdist); */ - - if(false) { - - out += " LP:" + itsh(c->landparam)+"/"+its(turncount); - - out += " CD:" + its(celldist(c)); - - out += " D:" + its(c->mpdist); - - char zz[64]; sprintf(zz, " P%p", c); out += zz; - // out += " rv" + its(rosedist(c)); - // if(rosemap.count(c)) - // out += " rv " + its(rosemap[c]/8) + "." + its(rosemap[c]%8); - // out += " ai" + its(c->aitmp); - if(euclid) { - for(int i=0; i<4; i++) out += " " + its(getEuclidCdata(c->master)->val[i]); - out += " " + itsh(getBits(c)); - } - else { - for(int i=0; i<4; i++) out += " " + its(getHeptagonCdata(c->master)->val[i]); - // out += " " + itsh(getHeptagonCdata(c->master)->bits); - out += " " + fts(tortoise::getScent(getBits(c))); - } - // itsh(getHeptagonCdata(c->master)->bits); - // out += " barleft: " + s0 + dnameof(c->barleft); - // out += " barright: " + s0 + dnameof(c->barright); - } - - // char zz[64]; sprintf(zz, " P%p", c); out += zz; - - /* whirlwind::calcdirs(c); - for(int i=0; iland); - - if(euclid && cheater) { - if(torus) { - out += " ("+its(decodeId(c->master))+")"; - } - else { - eucoord x, y; - decodeMaster(c->master, x, y); - out += " ("+its(short(x))+","+its(short(y))+")"; - } - } - - // char zz[64]; sprintf(zz, " P%d", princess::dist(c)); out += zz; - // out += " MD"+its(c->mpdist); - // out += " H "+its(c->heat); - // if(c->type != 6) out += " Z"+its(c->master->zebraval); - // out += " H"+its(c->heat); - -/* // Hive debug - if(c->land == laHive) { - out += " [" + its(c->tmp) + " H" + its(int(c->heat)); - if(c->tmp >= 0 && c->tmp < size(buginfo) && buginfo[c->tmp].where == c) { - buginfo_t b(buginfo[c->tmp]); - for(int k=0; k<3; k++) out += ":" + its(b.dist[k]); - for(int k=0; k<3; k++) - for(int i=0; itmp) - out += " B"+its(k)+":"+its(i); - } - out += "]"; - } */ - - if(c->wall && - !((c->wall == waFloorA || c->wall == waFloorB || c->wall == waFloorC || c->wall == waFloorD) && c->item)) { - out += ", "; out += XLAT1(winf[c->wall].name); - - if(c->wall == waRose) out += " (" + its(7-rosephase) + ")"; - - if((c->wall == waBigTree || c->wall == waSmallTree) && c->land != laDryForest) - help = - "Trees in this forest can be chopped down. Big trees take two turns to chop down."; - else if(c->wall != waSea && c->wall != waPalace) - if(!((c->wall == waCavefloor || c->wall == waCavewall) && c->land == laEmerald)) - help = generateHelpForWall(c->wall); - } - - if(isActivable(c)) out += XLAT(" (touch to activate)"); - - if(hasTimeout(c)) out += " [" + turnstring(c->wparam) + "]"; - - if(isReptile(c->wall)) - out += " [" + turnstring((unsigned char) c->wparam) + "]"; - - if(c->monst) { - out += ", "; out += XLAT1(minf[c->monst].name); - if(hasHitpoints(c->monst)) - out += " (" + its(c->hitpoints)+" HP)"; - if(isMutantIvy(c)) - out += " (" + its((c->stuntime - mutantphase) & 15) + "*)"; - else if(c->stuntime) - out += " (" + its(c->stuntime) + "*)"; - - if(c->monst == moTortoise && tortoise::seek()) - out += " " + tortoise::measure(tortoise::getb(c)); - - help = generateHelpForMonster(c->monst); - } - - if(c->item && !itemHiddenFromSight(c)) { - out += ", "; - out += XLAT1(iinf[c->item].name); - if(c->item == itBarrow) out += " (x" + its(c->landparam) + ")"; - if(c->item == itBabyTortoise && tortoise::seek()) - out += " " + tortoise::measure(tortoise::babymap[c]); - if(!c->monst) help = generateHelpForItem(c->item); - } - - if(isPlayerOn(c) && !shmup::on) out += XLAT(", you"), help = generateHelpForMonster(moPlayer); - - if(shmup::mousetarget && intval(mouseh, tC0(shmup::mousetarget->pat)) < .1) { - out += ", "; -#ifdef ROGUEVIZ - if(shmup::mousetarget->type == moRogueviz) { - help = XLAT(minf[shmup::mousetarget->type].help); - out += rogueviz::describe(shmup::mousetarget); - } - else -#endif - { - out += XLAT1(minf[shmup::mousetarget->type].name); - help = generateHelpForMonster(shmup::mousetarget->type); - } -/* char buf[64]; - sprintf(buf, "%Lf", intval(mouseh, shmup::mousetarget->pat*C0)); - mouseovers = mouseovers + " D: " + buf; - printf("ms = %s\n", mouseovers.c_str());*/ - } - - if(rosedist(c) == 1) - out += ", wave of scent (front)"; - - if(rosedist(c) == 2) - out += ", wave of scent (back)"; - - if(sword::at(c)) out += ", Energy Sword"; - - if(rosedist(c) || c->land == laRose || c->wall == waRose) - help += s0 + "\n\n" + rosedesc; - - if(isWarped(c) && !isWarped(c->land)) - out += ", warped"; - - if(isWarped(c)) - help += s0 + "\n\n" + warpdesc; - } - else if(cmode == emGraphConfig) { - if(getcstat == 'a' && vid.sspeed > -4.99) - out = XLAT("+5 = center instantly, -5 = do not center the map"); - else if(getcstat == 'a') - out = XLAT("press Space or Home to center on the PC"); - else if(getcstat == 'w') - out = XLAT("also hold Alt during the game to toggle high contrast"); - else if(getcstat == 'f') - out = XLAT("Reduce the framerate limit to conserve CPU energy"); - } - else if(cmode == emBasicConfig) { - /* else if(getcstat == 'f') { - out = XLAT("[+] keep the window size, [-] use the screen resolution"); - } */ - if(getcstat == 'c') - out = XLAT("The axes help with keyboard movement"); - else if(getcstat == 'g') - out = XLAT("Affects looks and grammar"); -#ifndef MOBILE - else if(getcstat == 's') - out = XLAT("Config file: %1", conffile); -#endif - else out = ""; - } - else if(cmode == emDisplayMode) { - if(getcstat == 'p') { - if(autojoy) - out = XLAT("joystick mode: automatic (release the joystick to move)"); - if(!autojoy) - out = XLAT("joystick mode: manual (press a button to move)"); - } - } - else if(cmode == emChangeMode) { - if(getcstat == 'h') - out = XLAT("One wrong move and it is game over!"); - } - - mouseovers = out; - -#ifdef ROGUEVIZ - rogueviz::describe(c); -#endif - - int col = linf[cwt.c->land].color; - if(cwt.c->land == laRedRock) col = 0xC00000; - -#ifndef MOBILE - displayfr(vid.xres/2, vid.fsize, 2, vid.fsize, out, col, 8); -#endif - - if(mousey < vid.fsize * 3/2) getcstat = SDLK_F1; - - if(false && shmup::mousetarget) { - char buf[64]; - sprintf(buf, "%Lf", (long double) intval(mouseh, tC0(shmup::mousetarget->pat))); - mouseovers = mouseovers + " D: " + buf; - return; - } - } - -void drawrec(const heptspin& hs, int lev, hstate s, const transmatrix& V) { - - // shmup::calc_relative_matrix(cwt.c, hs.h); - - cell *c = hs.h->c7; - - transmatrix V10; - const transmatrix& V1 = hs.mirrored ? (V10 = V * Mirror) : V; - - if(dodrawcell(c)) { - reclevel = maxreclevel - lev; - drawcell(c, (hs.spin || purehepta) ? V1 * spin(hs.spin*2*M_PI/S7 + (purehepta ? M_PI:0)) : V1, hs.spin, - hs.mirrored); - } - - if(lev <= 0) return; - - if(!purehepta) for(int d=0; dmov[ds] && c->spn(ds) == 0 && dodrawcell(c->mov[ds])) { - drawcell(c->mov[ds], V1 * hexmove[d], 0, hs.mirrored ^ c->mirror(ds)); - } - } - - if(lev <= 1) return; - - for(int d=0; d= 16384 * eurad) Mat[0][2] -= 32768 * eurad; - while(Mat[1][2] <= -16384 * q3 * eurad) Mat[1][2] += 32768 * q3 * eurad; - while(Mat[1][2] >= 16384 * q3 * eurad) Mat[1][2] -= 32768 * q3 * eurad; - return Mat; - } - -transmatrix eumovedir(int d) { - d = fix6(d); - switch(d) { - case 0: return eumove(1,0); - case 1: return eumove(0,1); - case 2: return eumove(-1,1); - case 3: return eumove(-1,0); - case 4: return eumove(0,-1); - case 5: return eumove(1,-1); - } - return eumove(0,0); - } - -void drawEuclidean() { - DEBB(DF_GRAPH, (debugfile,"drawEuclidean\n")); - eucoord px=0, py=0; - if(!centerover) centerover = cwt.c; - // printf("centerover = %p player = %p [%d,%d]-[%d,%d]\n", lcenterover, cwt.c, - // mindx, mindy, maxdx, maxdy); - int pid; - const bool b = torus; - if(b) - pid = decodeId(centerover->master); - else - decodeMaster(centerover->master, px, py); - - int minsx = mindx-1, maxsx=maxdx+1, minsy=mindy-1, maxsy=maxdy+1; - mindx=maxdx=mindy=maxdy=0; - - for(int dx=minsx; dx<=maxsx; dx++) - for(int dy=minsy; dy<=maxsy; dy++) { - reclevel = eudist(dx, dy); - cell *c; - transmatrix Mat; - if(b) { - reclevel = eudist(dx, dy); - c = getTorusId(pid+torusconfig::dx*dx+torusconfig::dy*dy); - Mat = eumove(dx,dy); - } - else { - eucoord x = dx+px; - eucoord y = dy+py; - c = euclideanAt(x,y); - Mat = eumove(x, y); - } - if(!c) continue; - Mat = View * Mat; - - // Mat[0][0] = -1; - // Mat[1][1] = -1; - - // Mat[2][0] = x*x/10; - // Mat[2][1] = y*y/10; - // Mat = Mat * xpush(x-30) * ypush(y-30); - - int cx, cy, shift; - getcoord0(tC0(Mat), cx, cy, shift); - if(cx >= 0 && cy >= 0 && cx < vid.xres && cy < vid.yres) { - if(dx < mindx) mindx = dx; - if(dy < mindy) mindy = dy; - if(dx > maxdx) maxdx = dx; - if(dy > maxdy) maxdy = dy; - } - - if(dodrawcell(c)) { - drawcell(c, Mat, 0, false); - } - } - } - void drawthemap() { frameid++; @@ -6586,17 +4370,7 @@ void drawthemap() { linepatterns::drawAll(); - #ifdef ROGUEVIZ - rogueviz::drawExtra(); - #endif - -#ifdef EXTRA_FRAME - extra::frame(); -#endif - - #ifdef TOUR - if(tour::on) tour::presentation(tour::pmFrame); - #endif + callhooks(hooks_frame); profile_stop(1); profile_start(4); @@ -6640,7 +4414,7 @@ void drawthemap() { Uint8 *keystate = SDL_GetKeyState(NULL); lmouseover = mouseover; bool useRangedOrb = (!(vid.shifttarget & 1) && haveRangedOrb() && lmouseover && lmouseover->cpdist > 1) || (keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]); - if(!useRangedOrb && cmode != emMapEditor && DEFAULTCONTROL && !mouseout()) { + if(!useRangedOrb && cmode2 != smMap && DEFAULTCONTROL && !mouseout()) { void calcMousedest(); calcMousedest(); cellwalker cw = cwt; bool f = flipplayer; @@ -6659,50 +4433,6 @@ void drawthemap() { profile_stop(0); } -void spinEdge(ld aspd) { - if(downspin > aspd) downspin = aspd; - if(downspin < -aspd) downspin = -aspd; - View = spin(downspin) * View; - } - -void centerpc(ld aspd) { - if(vid.sspeed >= 4.99) aspd = 1000; - DEBB(DF_GRAPH, (debugfile,"center pc\n")); - hyperpoint H = ypush(-vid.yshift) * sphereflip * tC0(cwtV); - if(H[0] == 0 && H[1] == 0) return; // either already centered or direction unknown - ld R = hdist0(H); // = sqrt(H[0] * H[0] + H[1] * H[1]); - if(R < 1e-9) { - /* if(playerfoundL && playerfoundR) { - - } */ - spinEdge(aspd); - fixmatrix(View); - return; - } - - if(euclid) { - // Euclidean - aspd *= (2+3*R*R); - if(aspd > R) aspd = R; - - View[0][2] -= cwtV[0][2] * aspd / R; - View[1][2] -= cwtV[1][2] * aspd / R; - } - - else { - aspd *= (1+R+(shmup::on?1:0)); - - if(R < aspd) { - View = gpushxto0(H) * View; - } - else - View = rspintox(H) * xpush(-aspd) * spintox(H) * View; - - fixmatrix(View); - spinEdge(aspd); - } - } - void drawmovestar(double dx, double dy) { if(viewdists) return; @@ -6752,158 +4482,8 @@ void drawmovestar(double dx, double dy) { } } -void optimizeview() { - - DEBB(DF_GRAPH, (debugfile,"optimize view\n")); - int turn = 0; - ld best = INF; - - transmatrix TB = Id; - - for(int i=-1; i= 0) { - View = View * TB; - fixmatrix(View); - viewctr = hsspin(viewctr, turn); - viewctr = hsstep(viewctr, 0); - } - } - -movedir vectodir(const hyperpoint& P) { - - hyperpoint H = sphereflip * tC0(cwtV); - ld R = sqrt(H[0] * H[0] + H[1] * H[1]); - transmatrix Centered = sphereflip * cwtV; - if(!euclid) - Centered = gpushxto0(H) * Centered; - else if(R > 1e-9) - Centered = eupush(-H[0], -H[1]) * Centered; - ld binv = 99; - - ld dirdist[7]; - for(int i=0; itype; i++) { - dirdist[i] = intval(Centered * xspinpush0(-i * 2 * M_PI /cwt.c->type, .5), P); - } - - movedir res; - res.d = -1; - - for(int i=0; itype; i++) { - if(dirdist[i] < binv) { - binv = dirdist[i]; - res.d = i; - res.subdir = dirdist[(i+1)%cwt.c->type] < dirdist[(i+cwt.c->type-1)%cwt.c->type] ? 1 : -1; - if(sphere) res.subdir = -res.subdir; - } - } - - // if(euclid) bdir = (bdir + 3) % 6; - return res; - } - -void movepckeydir(int d) { - DEBB(DF_GRAPH, (debugfile,"movepckeydir\n")); - // EUCLIDEAN - - movedir md = - vectodir(spin(-d * M_PI/4) * tC0(pushone())); - - movepcto(md); - } - -void calcMousedest() { - if(mouseout()) return; - if(revcontrol == true) { mouseh[0] = -mouseh[0]; mouseh[1] = -mouseh[1]; } - ld mousedist = intval(mouseh, tC0(shmup::ggmatrix(cwt.c))); - mousedest.d = -1; - - cellwalker bcwt = cwt; - - ld dists[7]; - - for(int i=0; itype; i++) - dists[i] = intval(mouseh, tC0(shmup::ggmatrix(cwt.c->mov[i]))); - - /* printf("curcell = %Lf\n", mousedist); - for(int i=0; itype; i++) - printf("d%d = %Lf\n", i, dists[i]); */ - - for(int i=0; itype; i++) if(dists[i] < mousedist) { - mousedist = dists[i]; - mousedest.d = fixdir(i - cwt.spin, cwt.c); - - mousedest.subdir = - dists[(i+1)%cwt.c->type] < dists[(i+cwt.c->type-1)%cwt.c->type] ? 1 : -1; - - if(cwt.mirrored) - mousedest.d = fixdir(-mousedest.d, cwt.c), - mousedest.subdir = -mousedest.subdir; - - if(sphere) mousedest.subdir = -mousedest.subdir; - } - - if(revcontrol == true) { mouseh[0] = -mouseh[0]; mouseh[1] = -mouseh[1]; } - cwt = bcwt; - } - -void mousemovement() { - calcMousedest(); - movepcto(mousedest); - lmouseover = NULL; - } - -long double sqr(long double x) { return x*x; } - // old style joystick control -void checkjoy() { - DEBB(DF_GRAPH, (debugfile,"check joy\n")); - if(!DEFAULTCONTROL) return; - ld joyvalue1 = sqr(vid.joyvalue); - ld joyvalue2 = sqr(vid.joyvalue2); - - ld jx = joyx; - ld jy = joyy; - ld sq = jx*jx+jy*jy; - - static int laststate = 0; - int curstate = sq < joyvalue1 ? 0 : sq < joyvalue2 ? 1 : 2; - if(curstate != laststate) flashMessages(), laststate = curstate; - - if(autojoy) { - if(sq < joyvalue1) { if(joydir.d >= 0) movepcto(joydir); joydir.d = -1; return; } - if(sq < joyvalue2 && joydir.d == -1) return; - } - else { - if(sq < joyvalue1) { joydir.d = -1; return; } - } - - joydir = vectodir(hpxy(jx, jy)); - } - -void checkpanjoy(double t) { - - if(shmup::on) return; - - if(vid.joypanspeed < 1e-7) return; - - if(sqr(panjoyx) + sqr(panjoyy) < sqr(vid.joypanthreshold)) - return; - - ld jx = panjoyx * t * vid.joypanspeed; - ld jy = panjoyy * t * vid.joypanspeed; - - playermoved = false; - View = gpushxto0(hpxy(jx, jy)) * View; - } - int realradius; bool sidescreen; @@ -6928,9 +4508,9 @@ void calcparam() { vid.ycenter = vid.yres - realradius - vid.fsize - (ISIOS ? 10 : 0); } else { - if(vid.xres >= vid.yres * 5/4-16 && dialog::sidedialog && cmode == emNumber) + if(vid.xres >= vid.yres * 5/4-16 && dialog::sidedialog && cmode2 == smNumber) sidescreen = true; - if(viewdists && cmode == emNormal && vid.xres > vid.yres) sidescreen = true; + if(viewdists && cmode2 == smNormal && vid.xres > vid.yres) sidescreen = true; #ifdef TOUR if(tour::on && (tour::slides[tour::currentslide].flags & tour::SIDESCREEN)) sidescreen = true; @@ -6949,948 +4529,6 @@ void calcparam() { vid.scrdist = vid.radius; } -void displayButton(int x, int y, const string& name, int key, int align, int rad) { - if(displayfr(x, y, rad, vid.fsize, name, 0x808080, align)) { - displayfr(x, y, rad, vid.fsize, name, 0xFFFF00, align); - getcstat = key; - } - } - -char mousekey = 'n'; -char newmousekey; - -void displaymm(char c, int x, int y, int rad, int size, const string& title, int align) { - if(displayfr(x, y, rad, size, title, c == mousekey ? 0xFF8000 : 0xC0C0C0, align)) { - displayfr(x, y, rad, size, title, 0xFFFF00, align); - getcstat = SETMOUSEKEY, newmousekey = c; - } - } - -bool displayButtonS(int x, int y, const string& name, int col, int align, int size) { - if(displaystr(x, y, 0, size, name, col, align)) { - displaystr(x, y, 0, size, name, 0xFFFF00, align); - return true; - } - else return false; - } - -void displayColorButton(int x, int y, const string& name, int key, int align, int rad, int color, int color2) { - if(displayfr(x, y, rad, vid.fsize, name, color, align)) { - if(color2) displayfr(x, y, rad, vid.fsize, name, color2, align); - getcstat = key; - } - } - -#ifndef MOBILE -void quitOrAgain() { - int y = vid.yres * (618) / 1000; - displayButton(vid.xres/2, y + vid.fsize*1/2, - (items[itOrbSafety] && havesave) ? - XLAT("Press Enter or F10 to save") : - XLAT("Press Enter or F10 to quit"), - SDLK_RETURN, 8, 2); - displayButton(vid.xres/2, y + vid.fsize*2, XLAT("or 'r' or F5 to restart"), 'r', 8, 2); - displayButton(vid.xres/2, y + vid.fsize*7/2, XLAT("or 't' to see the top scores"), 't', 8, 2); - displayButton(vid.xres/2, y + vid.fsize*10/2, XLAT("or 'v' to see the main menu"), 'v', 8, 2); - displayButton(vid.xres/2, y + vid.fsize*13/2, XLAT("or 'o' to see the world overview"), 'o', 8, 2); - } -#endif - -int calcfps() { - #define CFPS 30 - static int last[CFPS], lidx = 0; - int ct = ticks; - int ret = ct - last[lidx]; - last[lidx] = ct; - lidx++; lidx %= CFPS; - if(ret == 0) return 0; - return (1000 * CFPS) / ret; - } - -int msgscroll = 0; - -string timeline() { - int timespent = (int) (savetime + (timerstopped ? 0 : (time(NULL) - timerstart))); - char buf[20]; - sprintf(buf, "%d:%02d", timespent/60, timespent % 60); - return - shmup::on ? - XLAT("%1 knives (%2)", its(turncount), buf) - : - XLAT("%1 turns (%2)", its(turncount), buf); - } - -void showGameover() { - - dialog::init( -#ifdef TOUR - tour::on ? (canmove ? XLAT("Tutorial") : XLAT("GAME OVER")) : -#endif - cheater ? XLAT("It is a shame to cheat!") : - showoff ? XLAT("Showoff mode") : - canmove && princess::challenge ? XLAT("%1 Challenge", moPrincess) : - canmove ? XLAT("Quest status") : - XLAT("GAME OVER"), - 0xC00000, 200, 100 - ); - dialog::addInfo(XLAT("Your score: %1", its(gold()))); - dialog::addInfo(XLAT("Enemies killed: %1", its(tkills()))); - -#ifdef TOUR - if(tour::on) ; else -#endif - if(items[itOrbYendor]) { - dialog::addInfo(XLAT("Orbs of Yendor found: %1", its(items[itOrbYendor])), iinf[itOrbYendor].color); - dialog::addInfo(XLAT("CONGRATULATIONS!"), iinf[itOrbYendor].color); - } - else { - if(princess::challenge) - dialog::addInfo(XLAT("Follow the Mouse and escape with %the1!", moPrincess)); - else if(gold() < R30) - dialog::addInfo(XLAT("Collect %1 $$$ to access more worlds", its(R30))); - else if(gold() < R60) - dialog::addInfo(XLAT("Collect %1 $$$ to access even more lands", its(R60))); - else if(!hellUnlocked()) - dialog::addInfo(XLAT("Collect at least %1 treasures in each of 9 types to access Hell", its(R10))); - else if(items[itHell] < R10) - dialog::addInfo(XLAT("Collect at least %1 Demon Daisies to find the Orbs of Yendor", its(R10))); - else if(size(yendor::yi) == 0) - dialog::addInfo(XLAT("Look for the Orbs of Yendor in Hell or in the Crossroads!")); - else - dialog::addInfo(XLAT("Unlock the Orb of Yendor!")); - } - - if(!timerstopped && !canmove) { - savetime += time(NULL) - timerstart; - timerstopped = true; - } - if(canmove && !timerstart) - timerstart = time(NULL); - - if(princess::challenge) ; -#ifdef TOUR - else if(tour::on) ; -#endif - else if(tkills() < R100) - dialog::addInfo(XLAT("Defeat %1 enemies to access the Graveyard", its(R100))); - else if(kills[moVizier] == 0 && (items[itFernFlower] < U5 || items[itGold] < U5)) - dialog::addInfo(XLAT("Kill a Vizier in the Palace to access Emerald Mine")); - else if(items[itEmerald] < U5) - dialog::addInfo(XLAT("Collect 5 Emeralds to access Camelot")); - else if(hellUnlocked() && !chaosmode) { - bool b = true; - for(int i=0; i=0) { - msginfo m; - m.spamtype = 0; - m.flashout = true; - m.stamp = ticks-128*vid.flashtime-128*(gls-i); - m.msg = gamelog[i].msg; - m.quantity = gamelog[i].quantity; - mnum++, - msgs.push_back(m); - } - - dialog::addBreak(100); - - bool intour = false; - -#ifdef TOUR - intour = tour::on; -#endif - - if(intour) { -#ifdef TOUR - if(canmove) { - dialog::addItem(XLAT("spherical geometry"), '1'); - dialog::addItem(XLAT("Euclidean geometry"), '2'); - dialog::addItem(XLAT("more curved hyperbolic geometry"), '3'); - } - if(!items[itOrbTeleport]) - dialog::addItem(XLAT("teleport away"), '4'); - else if(!items[itOrbAether]) - dialog::addItem(XLAT("move through walls"), '4'); - else - dialog::addItem(XLAT("flash"), '4'); - if(canmove) { - if(tour::slidecommand != "") - dialog::addItem(tour::slidecommand, '5'); - dialog::addItem(XLAT("static mode"), '6'); - dialog::addItem(XLAT("enable/disable texts"), '7'); - dialog::addItem(XLAT("next slide"), SDLK_RETURN); - dialog::addItem(XLAT("previous slide"), SDLK_BACKSPACE); - dialog::addItem(XLAT("list of slides"), '9'); - } - else - dialog::addBreak(200); - dialog::addItem(XLAT("main menu"), 'v'); -#endif - } - else { - dialog::addItem(XLAT(canmove ? "continue" : "see how it ended"), SDLK_ESCAPE); - dialog::addItem(XLAT("main menu"), 'v'); - dialog::addItem(XLAT("restart"), SDLK_F5); - #ifndef MOBILE - dialog::addItem(XLAT(quitsaves() ? "save" : "quit"), SDLK_F10); - #endif - #ifdef ANDROIDSHARE - dialog::addItem(XLAT("SHARE"), 's'-96); - #endif - } - - dialog::display(); - - if(mnum) - displayfr(vid.xres/2, vid.yres-vid.fsize*(mnum+1), 2, vid.fsize/2, XLAT("last messages:"), 0xC0C0C0, 8); - } - -#ifdef MOBILE -void displayabutton(int px, int py, string s, int col) { - // TMP - int siz = vid.yres > vid.xres ? vid.fsize*2 : vid.fsize * 3/2; - int vrx = min(vid.radius, vid.xres/2 - 40); - int vry = min(vid.radius, min(vid.ycenter, vid.yres - vid.ycenter) - 20); - int x = vid.xcenter + px * vrx; - int y = vid.ycenter + py * (vry - siz/2); - int vrr = int(hypot(vrx, vry) * sqrt(2.)); - if(gtouched && !mouseover - && abs(mousex - vid.xcenter) < vrr - && abs(mousey - vid.ycenter) < vrr - && hypot(mousex-vid.xcenter, mousey-vid.ycenter) > vrr - && px == (mousex > vid.xcenter ? 1 : -1) - && py == (mousey > vid.ycenter ? 1 : -1) - ) col = 0xFF0000; - if(displayfr(x, y, 0, siz, s, col, 8+8*px)) - buttonclicked = true; - } -#endif - -#ifndef NOSAVE -vector scores; - -int scoresort = 2; -int scoredisplay = 1; -int scorefrom = 0; -int scoremode = 0; -bool scorerev = false; - -bool scorecompare(const score& s1, const score &s2) { - return s1.box[scoresort] > s2.box[scoresort]; - } - -bool fakescore() { - return fakebox[scoredisplay]; - } - -string displayfor(score* S) { - // printf("S=%p, scoredisplay = %d\n", S, scoredisplay); - if(S == NULL) { - return XLATN(boxname[scoredisplay]); - } - if(scoredisplay == 0) { - char buf[10]; - snprintf(buf, 10, "%d:%02d", S->box[0]/60, S->box[0]%60); - return buf; - } - if(scoredisplay == 1) { - time_t tim = S->box[1]; - char buf[128]; strftime(buf, 128, "%c", localtime(&tim)); - return buf; - } - return its(S->box[scoredisplay]); - } - -void loadScores() { - scores.clear(); - FILE *f = fopen(scorefile, "rt"); - if(!f) { - printf("Could not open the score file '%s'!\n", scorefile); - addMessage(s0 + "Could not open the score file: " + scorefile); - return; - } - while(!feof(f)) { - char buf[120]; - if(fgets(buf, 120, f) == NULL) break; - if(buf[0] == 'H' && buf[1] == 'y') { - score sc; bool ok = true; - {if(fscanf(f, "%s", buf) <= 0) break;} sc.ver = buf; - - for(int i=0; i= "4.4") { - sc.box[0] = sc.box[65]; - // the first executable on Steam included a corruption - if(sc.box[65] > 1420000000 && sc.box[65] < 1430000000) { - sc.box[0] = sc.box[65] - sc.box[1]; - sc.box[65] = sc.box[0]; - } - // do not include saves - if(sc.box[65 + 4 + itOrbSafety - itOrbLightning]) ok = false; - } - else - sc.box[0] = sc.box[1] - sc.box[0]; // could not save then - if(ok && boxid > 20) scores.push_back(sc); - } - } - fclose(f); - addMessage(its(size(scores))+" games have been recorded in "+scorefile); - cmode = emScores; - boxid = 0; applyBoxes(); - scoresort = 2; reverse(scores.begin(), scores.end()); - scoremode = 0; - if(shmup::on) scoremode = 1; - else if(hardcore) scoremode = 2; - scorefrom = 0; - stable_sort(scores.begin(), scores.end(), scorecompare); - #ifdef MOBILE - extern int andmode; - andmode = 2; - #endif - } - -vector > pickscore_options; - -bool notgl = false; -#endif - -void setAppropriateOverview() { - clearMessages(); - if(tactic::on) - cmode = emTactic; - else if(yendor::on) - cmode = emYendor; - else if(peace::on) - cmode = emPeace; - else if(geometry != gNormal) - cmode = emPickEuclidean; - else - cmode = emOverview; - } - -ld textscale() { - return vid.fsize / (vid.radius * crossf) * (1+vid.alphax) * 2; - } - -transmatrix xymatrix(int x, int y, ld scale) { - transmatrix V; - {for(int i=0; i<3; i++) for(int j=0; j<3; j++) V[i][j] = i==j ? 1 : 0; } - V[0][2] = (x - vid.xcenter + .0) / vid.radius * (1+vid.alphax); - V[1][2] = (y - vid.ycenter + .0) / vid.radius * (1+vid.alphax); - V[0][0] = scale; - V[1][1] = scale; - V[2][2] = 0; - return V; - } - -int monsterclass(eMonster m) { - if(isFriendly(m) || m == moTortoise) return 1; - else if(isMonsterPart(m)) return 2; - else return 0; - } - -int glyphclass(int i) { - if(i < ittypes) { - eItem it = eItem(i); - return itemclass(it) == IC_TREASURE ? 0 : 1; - } - else { - eMonster m = eMonster(i-ittypes); - return monsterclass(m) == 0 ? 2 : 3; - } - } - -int subclass(int i) { - if(i < ittypes) - return itemclass(eItem(i)); - else - return monsterclass(eMonster(i-ittypes)); - } - -#define GLYPH_MARKTODO 1 -#define GLYPH_MARKOVER 2 -#define GLYPH_LOCAL 4 -#define GLYPH_IMPORTANT 8 -#define GLYPH_NONUMBER 16 -#define GLYPH_DEMON 32 -#define GLYPH_RUNOUT 64 -#define GLYPH_INPORTRAIT 128 -#define GLYPH_LOCAL2 256 -#define GLYPH_TARGET 512 -#define GLYPH_INSQUARE 1024 - -eGlyphsortorder glyphsortorder; - -int zero = 0; - -int& ikmerge(int i) { - if(i < ittypes) return items[i]; - else if(i == ittypes) return zero; - else return kills[i-ittypes]; - } - -const int glyphs = ittypes + motypes; - -int gfirsttime[glyphs], glasttime[glyphs], gcopy[glyphs], ikland[glyphs]; -int glyphorder[glyphs]; - -void updatesort() { - for(int i=0; i gfirsttime[j]; - if(glyphsortorder == gsoLastTop) - return glasttime[i] > glasttime[j]; - if(glyphsortorder == gsoLastBottom) - return glasttime[i] < glasttime[j]; - if(glyphsortorder == gsoValue) - return ikmerge(i) > ikmerge(j); - if(glyphsortorder == gsoLand) - return ikland[i] < ikland[j]; - return 0; - } - -int glyphflags(int gid) { - int f = 0; - if(gid < ittypes) { - eItem i = eItem(gid); - if(itemclass(i) == IC_NAI) f |= GLYPH_NONUMBER; - if(isElementalShard(i)) { - f |= GLYPH_LOCAL | GLYPH_INSQUARE; - if(i == localshardof(cwt.c->land)) f |= GLYPH_LOCAL2; - } - if(i == treasureType(cwt.c->land)) - f |= GLYPH_LOCAL | GLYPH_LOCAL2 | GLYPH_IMPORTANT | GLYPH_INSQUARE; - if(i == itHolyGrail) { - if(items[i] >= 3) f |= GLYPH_MARKOVER; - } - else if(itemclass(i) == IC_TREASURE) { - if(items[i] >= 25 && items[i] < 100) f |= GLYPH_MARKOVER; - else if(items[i] < 10) f |= GLYPH_MARKTODO; - } - else { - f |= GLYPH_IMPORTANT | GLYPH_INSQUARE; - if(itemclass(i) == IC_ORB && items[i] < 10) f |= GLYPH_RUNOUT; - } - if(i == orbToTarget) f |= GLYPH_TARGET; - f |= GLYPH_INPORTRAIT; - } - else { - eMonster m = eMonster(gid-ittypes); - if(m == moLesser) f |= GLYPH_IMPORTANT | GLYPH_DEMON | GLYPH_INPORTRAIT | GLYPH_INSQUARE; - int isnat = isNative(cwt.c->land, m); - if(isnat) f |= GLYPH_LOCAL | GLYPH_IMPORTANT | GLYPH_INPORTRAIT | GLYPH_INSQUARE; - if(isnat == 2) f |= GLYPH_LOCAL2; - if(m == monsterToSummon) f |= GLYPH_TARGET; - } - return f; - } - -transmatrix atscreenpos(ld x, ld y, ld size) { - transmatrix V = Id; - - // V[0][2] += (x - vid.xcenter) / vid.radius * (1+vid.alphax); - // V[1][2] += (y - vid.ycenter) / vid.radius * (1+vid.alphax); - // V[2][2] = size / vid.radius * 5; - - V[0][2] += (x - vid.xcenter); - V[1][2] += (y - vid.ycenter); - V[0][0] = size * 2 * hcrossf / crossf; - V[1][1] = size * 2 * hcrossf / crossf; - V[2][2] = vid.scrdist; - if(euclid) V[2][2] /= EUCSCALE; - - return V; - } - -bool graphglyph() { - return vid.graphglyph == 2 || (vid.graphglyph == 1 && vid.monmode); - } - -bool displayglyph(int cx, int cy, int buttonsize, char glyph, int color, int qty, int flags, int id) { - - bool b = - mousex >= cx && mousex < cx+buttonsize && mousey >= cy-buttonsize/2 && mousey <= cy-buttonsize/2+buttonsize; - - int glsize = buttonsize; - if(glyph == '%' || glyph == 'M' || glyph == 'W') glsize = glsize*4/5; - - if(graphglyph()) { - initquickqueue(); - if(id >= ittypes) { - eMonster m = eMonster(id - ittypes); - int bsize = buttonsize; - if(m == moKrakenH) bsize /= 3; - if(m == moKrakenT || m == moDragonTail) bsize /= 2; - if(m == moSlime) bsize = (2*bsize+1)/3; - transmatrix V = atscreenpos(cx+buttonsize/2, cy, bsize); - int mcol = color; - mcol -= (color & 0xFCFCFC) >> 2; - drawMonsterType(m, NULL, V, mcol, 0); - } - else { - eItem it = eItem(id); - int bsize = buttonsize; - if(glyph =='*') bsize *= 2; - if(glyph == '$') bsize = (bsize*5+2)/3; - if(glyph == 'o') bsize = (bsize*3+1)/2; - if(glyph == 't') bsize = bsize*5/2; - if(it == itWarning) bsize *= 2; - if(it == itBombEgg || it == itTrollEgg || it == itDodeca) bsize = bsize*3/2; - transmatrix V = atscreenpos(cx+buttonsize/2, cy, bsize); - int icol = color; - icol -= (color & 0xFCFCFC) >> 2; - int ic = itemclass(it); - drawItemType(it, NULL, V, icol, (ic == IC_ORB || ic == IC_NAI) ? ticks*2 : ((glyph == 't' && qty%5) || it == itOrbYendor) ? ticks/2 : 0, false); - } - quickqueue(); - } - else if(glyph == '*') - displaychr(cx + buttonsize/2, cy+buttonsize/4, 0, glsize*3/2, glyph, darkenedby(color, b?0:1)); - else - displaychr(cx + buttonsize/2, cy, 0, glsize, glyph, darkenedby(color, b?0:1)); - - string fl = ""; - string str = its(qty); - - if(flags & GLYPH_TARGET) fl += "!"; - if(flags & GLYPH_LOCAL2) fl += "+"; - else if(flags & GLYPH_LOCAL) fl += "-"; - if(flags & GLYPH_DEMON) fl += "X"; - if(flags & GLYPH_MARKOVER) str += "!"; - - if(fl != "") - displaystr(cx + buttonsize, cy-buttonsize/2 + buttonsize/4, 0, buttonsize/2, fl, darkenedby(color, 0), 16); - - if(flags & GLYPH_NONUMBER) str = ""; - - int bsize = - (qty < 10 && (flags & (GLYPH_MARKTODO | GLYPH_RUNOUT))) ? buttonsize*3/4 : - qty < 100 ? buttonsize / 2 : - buttonsize / 3; - if(str != "") - displayfr(cx + buttonsize, cy + buttonsize/2 - bsize/2, 1, bsize, str, color, 16); - - return b; - } - -void displayglyph2(int cx, int cy, int buttonsize, int i) { - - char glyph = i < ittypes ? iinf[i].glyph : minf[i-ittypes].glyph; - int color = i < ittypes ? iinf[i].color : minf[i-ittypes].color; - int imp = glyphflags(i); - - if(displayglyph(cx, cy, buttonsize, glyph, color, ikmerge(i), imp, i)) { - instat = true; - getcstat = SDLK_F1; - if(i < ittypes) { - eItem it = eItem(i); - int t = itemclass(it); - if(t == IC_TREASURE) - mouseovers = XLAT("treasure collected: %1", it); - if(t == IC_OTHER) - mouseovers = XLAT("objects found: %1", it); - if(t == IC_NAI) - mouseovers = XLAT("%1", it); - if(t == IC_ORB) - mouseovers = XLAT("orb power: %1", eItem(i)); - if(it == itGreenStone) { - mouseovers += XLAT(" (click to drop)"); - getcstat = 'g'; - } - if(imp & GLYPH_LOCAL) mouseovers += XLAT(" (local treasure)"); - help = generateHelpForItem(it); - } - else { - eMonster m = eMonster(i-ittypes); - if(isMonsterPart(m)) - mouseovers = s0 + XLAT("parts destroyed: %1", m); - else if(isFriendly(m) && isNonliving(m)) - mouseovers = s0 + XLAT("friends destroyed: %1", m); - else if(isFriendly(m)) - mouseovers = s0 + XLAT("friends killed: %1", m); - else if(isNonliving(m)) - mouseovers = s0 + XLAT("monsters destroyed: %1", m); - else if(m == moTortoise) - mouseovers = s0 + XLAT("animals killed: %1", m); - else - mouseovers = s0 + XLAT("monsters killed: %1", m); - if(imp & GLYPH_LOCAL2) mouseovers += XLAT(" (killing increases treasure spawn)"); - else if(imp & GLYPH_LOCAL) mouseovers += XLAT(" (appears here)"); - help = generateHelpForMonster(m); - } - } - } - -bool nohud, nomenukey; - -void drawStats() { -#ifdef ROGUEVIZ - if(rogueviz::on || nohud) return; -#endif - if(viewdists && sidescreen) { - distcolors[0] = forecolor; - dialog::init(""); - int qty[64]; - vector& ac = currentmap->allcells(); - for(int i=0; i<64; i++) qty[i] = 0; - for(int i=0; i= 0 && d < 64) qty[d]++; - } - if(geometry == gNormal) - for(int i=purehepta?6:8; i<=15; i++) - qty[i] = - purehepta ? - 3*qty[i-1] - qty[i-2] - : qty[i-1] + qty[i-2] + qty[i-3] - qty[i-4]; - if(geometry == gEuclid) - for(int i=8; i<=15; i++) qty[i] = 6*i; - for(int i=0; i<64; i++) if(qty[i]) - dialog::addInfo(its(qty[i]), distcolors[i&7]); - if(geometry == gNormal && !purehepta) { - dialog::addBreak(200); - dialog::addHelp("a(d+4) = a(d+3) + a(d+2) + a(d+1) - a(d)"); - dialog::addInfo("a(d) ~ 1.72208áµ", forecolor); - } - if(geometry == gNormal && purehepta) { - dialog::addBreak(200); - dialog::addHelp("a(d+2) = 3a(d+1) - a(d+2)"); - dialog::addInfo("a(d) ~ 2.61803áµ", forecolor); - } - if(geometry == gEuclid) { - dialog::addBreak(300); - dialog::addInfo("a(d) = 6d", forecolor); - } - dialog::display(); - } - if(sidescreen) return; - - if(vid.xres > vid.yres * 85/100 && vid.yres > vid.xres * 85/100) { - int bycorner[4]; - for(int u=0; u<4; u++) bycorner[u] = 0; - for(int i=0; i rad) { - spots++; - } - if(spots >= bycorner[cor] && spots >= 3) { - int next = 0; - vector glyphstoshow; - for(int i=0; i rad) { - if(next >= size(glyphstoshow)) break; - - int cx = u; - int cy = v + s/2; - if(cor&1) cx = vid.xres-1-s-cx; - if(cor&2) cy = vid.yres-1-cy; - - displayglyph2(cx, cy, s, glyphstoshow[next++]); - } - break; - } - } - } - return; - } - - instat = false; - bool portrait = vid.xres < vid.yres; - int colspace = portrait ? (vid.yres - vid.xres - vid.fsize*3) : (vid.xres - vid.yres - 16) / 2; - int rowspace = portrait ? vid.xres - 16 : vid.yres - vid.fsize * 4; - int colid[4], rowid[4]; - int maxbyclass[4]; - for(int z=0; z<4; z++) maxbyclass[z] = 0; - for(int i=0; i columns) { vid.killreduction++; continue; } - coltaken = 0; - } - colid[z] = coltaken, rowid[z] = 0, - coltaken += (maxbyclass[z] + rows-1) / rows; - } - if(coltaken > columns) { vid.killreduction++; continue; } - break; - } - - if(buttonsize <= vid.fsize*3/4) { - imponly = true; buttonsize = minsize; - rows = rowspace / buttonsize; if(!rows) return; - colid[0] = 0; colid[2] = portrait ? 1 : 0; - } - - updatesort(); - stable_sort(glyphorder, glyphorder+glyphs, glyphsort); - - for(int i0=0; i0= rows) rowid[z] = 0, colid[z]++; - - displayglyph2(cx, cy, buttonsize, i); - } - - string s0; - if(displayButtonS(vid.xres - 8, vid.fsize, "score: " + its(gold()), forecolor, 16, vid.fsize)) { - mouseovers = XLAT("Your total wealth"), - instat = true, - getcstat = SDLK_F1, - help = helptitle(XLAT("Your total wealth"), 0xFFD500) + - XLAT( - "The total value of the treasure you have collected.\n\n" - "Every world type contains a specific type of treasure, worth 1 $$$; " - "your goal is to collect as much treasure as possible, but every treasure you find " - "causes more enemies to hunt you in its native land.\n\n" - "Orbs of Yendor are worth 50 $$$ each.\n\n" - ); - } - if(displayButtonS(8, vid.fsize, "kills: " + its(tkills()), forecolor, 0, vid.fsize)) { - instat = true, - getcstat = SDLK_F1, - mouseovers = XLAT("Your total kills")+": " + its(tkills()), - help = helptitle(XLAT("Your total kills") + ": " + its(tkills()), 0x404040) + - XLAT( - "In most lands, more treasures are generated with each enemy native to this land you kill. " - "Moreover, 100 kills is a requirement to enter the Graveyard and the Hive.\n\n" - "Friendly creatures and parts of monsters (such as the Ivy) do appear in the list, " - "but are not counted in the total kill count."); - } - if(displayButtonS(4, vid.yres - 4 - vid.fsize/2, s0+VER+ " fps: " + its(calcfps()), 0x202020, 0, vid.fsize/2)) { - mouseovers = XLAT("frames per second"), - getcstat = SDLK_F1, - instat = true, - help = - helptitle(XLAT("frames per second"), 0xFF4040) + - XLAT( - "The higher the number, the smoother the animations in the game. " - "If you find that animations are not smooth enough, you can try " - "to change the options " - ) + -#ifdef IOS -XLAT( - "(in the MENU). You can reduce the sight range, this should make " - "the animations smoother."); -#else -XLAT( - "(press v) and change the wall/monster mode to ASCII, or change " - "the resolution."); -#endif - } - - achievement_display(); -#ifdef EXTRA_STATS - extra::stats(); -#endif - } - -int pngres = 2000; -int pngformat = 0; - -#ifndef NOSDL - -#ifndef NOPNG -void IMAGESAVE(SDL_Surface *s, const char *fname) { - SDL_Surface *s2 = SDL_PNGFormatAlpha(s); - SDL_SavePNG(s2, fname); - SDL_FreeSurface(s2); - } -#endif - -void saveHighQualityShot(const char *fname, const char *caption, int fade) { - -#ifndef SDLGFX - addMessage(XLAT("High quality shots not available on this platform")); - return; -#endif - - dynamicval v3(sightrange, (cheater && sightrange < 10) ? 10 : sightrange); - - if(cheater) doOvergenerate(); - - time_t timer; - timer = time(NULL); - - dynamicval v(vid, vid); - dynamicval v2(inHighQual, true); - dynamicval v4(cheater, 0); - dynamicval v6(auraNOGL, fname ? true : false); - - vid.xres = vid.yres = pngres; - if(pngformat == 1) vid.xres = vid.yres * 4/3; - if(pngformat == 2) vid.xres = vid.yres * 16/9; - if(pngformat == 3) { - vid.xres = vid.yres * 22/16; - while(vid.xres & 15) vid.xres++; - } - printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); - - vid.usingGL = false; - // if(vid.pmodel == 0) vid.scale = 0.99; - calcparam(); - #ifdef ROGUEVIZ - rogueviz::fixparam(); - #endif - - printf("format = %d, %d x %d\n", pngformat, vid.xres, vid.yres); - - dynamicval v5(s, SDL_CreateRGBSurface(SDL_SWSURFACE,vid.xres,vid.yres,32,0,0,0,0)); - - darken = 0; - - int numi = (fname?1:2); - - for(int i=0; i=-10; d-=.2) - addball(0, d, 0); - for(double d=-10; d<=10; d+=.2) - addball(0, d, geom3::depth); - addball(0, 0, -geom3::camera); - addball(0, 0, geom3::depth); - addball(0, 0, -geom3::camera); - addball(0, -10, 0); - addball(0, 0, -geom3::camera); - queuecurve(darkena(0xFF, 0, 0x80), 0, PPR_CIRCLE); - queuereset(pmodel, PPR_CIRCLE); - } - int ringcolor = darkena(0xFF, 0, 0xFF); void drawfullmap() { @@ -7939,7 +4577,7 @@ void drawfullmap() { drawthemap(); #ifndef NORUG if(!inHighQual) { - if(cmode == emNormal && !rug::rugged) { + if(cmode2 == smNormal && !rug::rugged) { if(multi::players > 1) { transmatrix bcwtV = cwtV; for(int i=0; ipixels; - // int n = vid.xres * vid.yres * 4; - // while(n) *b >>= 1, b++, n--; - // memset(s->pixels, 0, vid.xres * vid.yres * 4); - if(!vid.usingGL) SDL_FillRect(s, NULL, backcolor); - #endif - - if(!canmove) darken = 1; - if(cmode != emNormal && cmode != emDraw && cmode != emCustomizeChar) darken = 2; - if(cmode == emQuit && !canmove) darken = 0; - if(cmode == emOverview) darken = 16; - if(cmode == emOverview && !vid.monmode && !hiliteclick) darken = 4; - - if(sidescreen) darken = 0; + if(conformal::includeHistory) conformal::restore(); -#ifndef NOEDIT - if(cmode == emMapEditor && !mapeditor::subscreen && !mapeditor::choosefile) darken = 0; - if(cmode == emDraw && mapeditor::choosefile) darken = 2; -#endif - if(hiliteclick && darken == 0 && mmmon) darken = 1; - if(cmode == emProgress) darken = 0; - - if(conformal::includeHistory && cmode != emProgress) conformal::restore(); - - if(darken >= 8) ; #ifndef NORUG - else if(rug::rugged) { + if(rug::rugged) { rug::actDraw(); } #endif else drawfullmap(); - if(conformal::includeHistory && cmode != emProgress) conformal::restoreBack(); + if(conformal::includeHistory) conformal::restoreBack(); poly_outline = OUTLINE_DEFAULT; - lgetcstat = getcstat; - getcstat = 0; inslider = false; - - if(cmode == emNormal || cmode == emQuit) drawStats(); - #ifdef MOBILE buttonclicked = false; - if(cmode == (canmove ? emNormal : emQuit)) { + if(cmode == smNormal) { if(andmode == 0 && shmup::on) { using namespace shmupballs; calc(); @@ -8043,23 +4637,67 @@ void drawscreen() { } #endif - - // displaynum(vx,100, 0, 24, 0xc0c0c0, celldist(cwt.c), ":"); - + darken = 0; + } + +void normalscreen() { + help = "@"; + if(!outofmap(mouseh)) getcstat = '-'; + cmode2 = smNormal; + gamescreen(hiliteclick && mmmon ? 1 : 0); drawStats(); + if(nomenukey) + ; +#ifdef TOUR + else if(tour::on) + displayButton(vid.xres-8, vid.yres-vid.fsize, XLAT("(ESC) tour menu"), SDLK_ESCAPE, 16); + else +#endif + displayButton(vid.xres-8, vid.yres-vid.fsize, XLAT("(v) menu"), 'v', 16); + keyhandler = handleKeyNormal; + } + +vector< function > screens = { normalscreen }; + +screenmode cmode2; + +void drawscreen() { + + if(vid.xres == 0 || vid.yres == 0) return; + + DEBB(DF_GRAPH, (debugfile,"drawscreen\n")); + + calcparam(); + #ifdef ROGUEVIZ + rogueviz::fixparam(); + #endif +#ifdef GL + if(vid.usingGL) setGLProjection(); +#endif + + #ifndef NOSDL + // SDL_LockSurface(s); + // unsigned char *b = (unsigned char*) s->pixels; + // int n = vid.xres * vid.yres * 4; + // while(n) *b >>= 1, b++, n--; + // memset(s->pixels, 0, vid.xres * vid.yres * 4); + if(!vid.usingGL) SDL_FillRect(s, NULL, backcolor); + #endif + + // displaynum(vx,100, 0, 24, 0xc0c0c0, celldist(cwt.c), ":"); + + lgetcstat = getcstat; + getcstat = 0; inslider = false; + + cmode2 = smMenu; + keyhandler = [] (int sym, int uni) { return false; }; + screens.back()(); + drawmessages(); - if(cmode == emNormal) { - if(!canmove) showGameover(); - } - - if(cmode == emProgress) mouseovers = ""; - - displayMenus(); - describeMouseover(); - if((havewhat&HF_BUG) && darken == 0 && (cmode == emNormal || cmode == emQuit)) for(int k=0; k<3; k++) + if((havewhat&HF_BUG) && darken == 0 && cmode2 == smNormal) for(int k=0; k<3; k++) displayfr(vid.xres/2 + vid.fsize * 5 * (k-1), vid.fsize*2, 2, vid.fsize, its(hive::bugcount[k]), minf[moBug0+k].color, 8); @@ -8079,7 +4717,7 @@ void drawscreen() { } } - if((minefieldNearby || tmines) && canmove && !items[itOrbAether] && darken == 0 && cmode == emNormal) { + if((minefieldNearby || tmines) && !items[itOrbAether] && darken == 0 && cmode2 == smNormal) { string s; if(tmines > 7) tmines = 7; int col = minecolors[tmines]; @@ -8100,23 +4738,6 @@ void drawscreen() { } } - #ifndef MOBILE - if(cmode == emNormal || cmode == emBasicConfig || cmode == emGraphConfig || cmode == emDisplayMode || cmode == emChangeMode ) { - if(nomenukey) - ; -#ifdef TOUR - else if(tour::on) - displayButton(vid.xres-8, vid.yres-vid.fsize, XLAT("(ESC) tour menu"), SDLK_ESCAPE, 16); - else -#endif - displayButton(vid.xres-8, vid.yres-vid.fsize, XLAT("(v) menu"), 'v', 16); - } - #endif - - if(cmode == emQuit) { - if(canmove) showGameover(); - } - // SDL_UnlockSurface(s); DEBT("swapbuffers"); @@ -8130,56 +4751,6 @@ void drawscreen() { //printf("\ec"); } -#ifndef NOSDL -bool setfsize = true; - -void setvideomode() { - - DEBB(DF_INIT, (debugfile,"setvideomode\n")); - - if(!vid.full) { - if(vid.xres > vid.xscr) vid.xres = vid.xscr * 9/10, setfsize = true; - if(vid.yres > vid.yscr) vid.yres = vid.yscr * 9/10, setfsize = true; - } - - if(setfsize) vid.fsize = min(vid.yres / 32, vid.xres / 48), setfsize = false; - - int flags = 0; - -#ifdef GL - if(vid.usingGL) { - flags = SDL_OPENGL | SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER; - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); - } -#endif - - int sizeflag = (vid.full ? SDL_FULLSCREEN : SDL_RESIZABLE); - - s= SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | sizeflag); - - if(vid.full && !s) { - vid.xres = vid.xscr; - vid.yres = vid.yscr; - vid.fsize = min(vid.yres / 32, vid.xres / 48); - s = SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | SDL_FULLSCREEN); - } - - if(!s) { - addMessage("Failed to set the graphical mode: "+its(vid.xres)+"x"+its(vid.yres)+(vid.full ? " fullscreen" : " windowed")); - vid.xres = 640; - vid.yres = 480; - s = SDL_SetVideoMode(vid.xres, vid.yres, 32, flags | SDL_RESIZABLE); - } - -#ifdef GL - if(vid.usingGL) { - glViewport(0, 0, vid.xres, vid.yres); - resetGL(); - } -#endif - } -#endif - void restartGraph() { DEBB(DF_INIT, (debugfile,"restartGraph\n")); @@ -8198,1141 +4769,12 @@ void restartGraph() { } } -void resetview() { - DEBB(DF_GRAPH, (debugfile,"reset view\n")); - View = Id; - // EUCLIDEAN - if(!euclid) - viewctr.h = cwt.c->master, - viewctr.spin = cwt.spin; - else centerover = cwt.c; - // SDL_LockSurface(s); - // SDL_UnlockSurface(s); - } - - -void initcs(charstyle &cs) { - cs.charid = 0; - cs.skincolor = 0xD0D0D0FF; - cs.haircolor = 0x686868FF; - cs.dresscolor = 0xC00000FF; - cs.swordcolor = 0xD0D0D0FF; - cs.dresscolor2= 0x8080FFC0; - cs.uicolor = 0xFF0000FF; - } - -#ifndef NOCONFIG -void savecs(FILE *f, charstyle& cs, int xvernum) { - int gflags = cs.charid; - if(vid.samegender) gflags |= 16; - - fprintf(f, "%d %d %08x %08x %08x %08x", - gflags, vid.language, cs.skincolor, cs.haircolor, cs.swordcolor, cs.dresscolor); - if(cs.charid == 3) fprintf(f, " %08x", cs.dresscolor2); - if(xvernum >= 8990) fprintf(f, " %x", cs.uicolor); - fprintf(f, "\n"); - } - -void loadcs(FILE *f, charstyle& cs, int xvernum) { - int gflags, err = - fscanf(f, "%d%d%x%x%x%x", &gflags, &vid.language, &cs.skincolor, &cs.haircolor, &cs.swordcolor, &cs.dresscolor); - - if(err) cs.charid = gflags & 15; - if(err) vid.samegender = (gflags & 16) ? true : false; - if(cs.charid == 3) if(fscanf(f, "%x", &cs.dresscolor2)) - ; - if(xvernum >= 8990) if(fscanf(f, "%x", &cs.uicolor)) - ; - } - -void saveConfig() { - DEBB(DF_INIT, (debugfile,"save config\n")); - FILE *f = fopen(conffile, "wt"); - if(!f) { - addMessage(s0 + "Could not open the config file: " + conffile); - return; - } - fprintf(f, "%d %d %d %d\n", vid.xres, vid.yres, vid.full, vid.fsize); - fprintf(f, "%f %f %f %f\n", float(vid.scale), float(vid.eye), float(vid.alpha), float(vid.sspeed)); - fprintf(f, "%d %d %d %d %d %d %d\n", vid.wallmode, vid.monmode, vid.axes, musicvolume, vid.framelimit, vid.usingGL, vid.antialias); - fprintf(f, "%d %d %d %f %d %d\n", vid.joyvalue, vid.joyvalue2, vid.joypanthreshold, float(vid.joypanspeed), autojoy, vid.flashtime); - - savecs(f, vid.cs, 0); - - fprintf(f, "%d %d\n", vid.darkhepta, vid.shifttarget); - - fprintf(f, "%d %d %d %d\n", euclid, euclidland, shmup::on, hardcore); - - shmup::saveConfig(f); - - fprintf(f, "%d %d %d %d %f %d %d\n", rug::renderonce, rug::rendernogl, rug::texturesize, purehepta, rug::scale, vid.steamscore, chaosmode); - - fprintf(f, "%d %d %f %d %d %f\n", - pmodel, polygonal::SI, float(polygonal::STAR), polygonal::deg, - conformal::includeHistory, float(conformal::lvspeed)); - - fprintf(f, "%d %d %d %d %d %d\n", - conformal::bandhalf, conformal::bandsegment, - conformal::rotation, conformal::autoband, conformal::autobandhistory, - conformal::dospiral); - - fprintf(f, "%d", polygonal::maxcoef); - for(int i=0; i<=polygonal::maxcoef; i++) fprintf(f, " %lf %lf", - (double) real(polygonal::coef[i]), (double) imag(polygonal::coef[i])); - - fprintf(f, "\n%d %d %d %f %d %d\n", - revcontrol, vid.drawmousecircle, sightrange, float(vid.mspeed), effvolume, vid.particles); - - { - int pt_depth = 0, pt_camera = 0, pt_alpha = 0; - using namespace geom3; - if(tc_depth > tc_camera) pt_depth++; - if(tc_depth < tc_camera) pt_camera++; - if(tc_depth > tc_alpha ) pt_depth++; - if(tc_depth < tc_alpha ) pt_alpha ++; - if(tc_alpha > tc_camera) pt_alpha++; - if(tc_alpha < tc_camera) pt_camera++; - - fprintf(f, "%f %f %f %f %f %f %f %d %d %d %f %f %d\n", - float(geom3::depth), float(geom3::camera), float(geom3::wall_height), - float(geom3::rock_wall_ratio), - float(geom3::human_wall_ratio), - float(geom3::lake_top), - float(geom3::lake_bottom), - pt_depth, pt_camera, pt_alpha, - float(geom3::highdetail), float(geom3::middetail), - glyphsortorder); - - fprintf(f, "%f %f %f %f\n", - float(vid.yshift), float(vid.camera_angle), - float(vid.ballangle), float(vid.ballproj) - ); - - fprintf(f, "%d %d %d %d %f\n", vid.mobilecompasssize, vid.aurastr, vid.aurasmoothen, vid.graphglyph, float(vid.linewidth)); - } - - fprintf(f, "\n\nThis is a configuration file for HyperRogue (version " VER ")\n"); - fprintf(f, "\n\nThe numbers are:\n"); - fprintf(f, "screen width & height, fullscreen mode (0=windowed, 1=fullscreen), font size\n"); - fprintf(f, "scale, eye distance, parameter, scrolling speed\n"); - fprintf(f, "wallmode, monster mode, cross mode, music volume, framerate limit, usingGL, antialiasing flags\n"); - fprintf(f, "calibrate first joystick (threshold A, threshold B), calibrate second joystick (pan threshold, pan speed), joy mode\n"); - fprintf(f, "gender (1=female, 16=same gender prince), language, skin color, hair color, sword color, dress color\n"); - fprintf(f, "darken hepta, shift target\n"); - fprintf(f, "euclid, euclid land, shmup, hardcore\n"); - fprintf(f, "version number, shmup players, alwaysuse, shmup keyboard/joystick config\n"); - fprintf(f, "hypersian rug config: renderonce, rendernogl, texturesize; purehepta; rug scale; share score; chaosmode\n"); - fprintf(f, "conformal: model, sides, star, degree, includeHistory, speed\n"); - fprintf(f, "conformal: bandwidth, segment, rotation, autoband, autohistory, dospiral\n"); - fprintf(f, "conformal: degree, (degree+1) times {real, imag}\n"); - fprintf(f, "revcontrol, drawmousecircle, sight range, movement animation speed, sound effect volume, particle effects\n"); - fprintf(f, "3D parameters, sort order\n"); - fprintf(f, "yhsift, camera angle, ball angle, ball projection\n"); - fprintf(f, "compass size, aura strength, aura smoothen factor, graphical glyphs\n"); - - fclose(f); -#ifndef MOBILE - addMessage(s0 + "Configuration saved to: " + conffile); -#else - addMessage(s0 + "Configuration saved"); -#endif - } - -void readf(FILE *f, ld& x) { - double fl = x; - if(fscanf(f, "%lf", &fl)) - ; - x = fl; - } - -void loadConfig() { - - DEBB(DF_INIT, (debugfile,"load config\n")); - vid.xres = 9999; vid.yres = 9999; vid.framelimit = 300; - FILE *f = fopen(conffile, "rt"); - if(f) { - int fs, gl=1, aa=1, bb=1, cc, dd, ee; - int err; - err=fscanf(f, "%d%d%d%d", &vid.xres, &vid.yres, &fs, &vid.fsize); - vid.full = fs; - float a, b, c, d; - err=fscanf(f, "%f%f%f%f\n", &a, &b, &c, &d); - if(err == 4) { - vid.scale = a; vid.eye = b; vid.alpha = c; vid.sspeed = d; - } - err=fscanf(f, "%d%d%d%d%d%d%d", &vid.wallmode, &vid.monmode, &vid.axes, &musicvolume, &vid.framelimit, &gl, &vid.antialias); - vid.usingGL = gl; - if(vid.antialias == 0) vid.antialias = AA_VERSION | AA_LINES | AA_LINEWIDTH; - if(vid.antialias == 1) vid.antialias = AA_NOGL | AA_VERSION | AA_LINES | AA_LINEWIDTH | AA_FONT; - double jps = vid.joypanspeed; - err=fscanf(f, "%d%d%d%lf%d%d", &vid.joyvalue, &vid.joyvalue2, &vid.joypanthreshold, &jps, &aa, &vid.flashtime); - vid.joypanspeed = jps; - autojoy = aa; aa = 0; - - loadcs(f, vid.cs, 0); - - aa=0; bb=0; - err=fscanf(f, "%d%d", &aa, &bb); - vid.darkhepta = aa; vid.shifttarget = bb; - - aa = geometry; bb = euclidland; cc = shmup::on; dd = hardcore; - err=fscanf(f, "%d%d%d%d", &aa, &bb, &cc, &dd); - geometry = eGeometry(aa); euclidland = eLand(bb); shmup::on = cc; hardcore = dd; - - shmup::loadConfig(f); - - aa = rug::renderonce; bb = rug::rendernogl; cc = purehepta; dd = chaosmode; ee = vid.steamscore; - double rs = rug::scale; - err=fscanf(f, "%d%d%d%d%lf%d%d", &aa, &bb, &rug::texturesize, &cc, &rs, &ee, &dd); - rug::renderonce = aa; rug::rendernogl = bb; purehepta = cc; chaosmode = dd; vid.steamscore = ee; - rug::scale = rs; - - aa=conformal::includeHistory; - double ps = polygonal::STAR, lv = conformal::lvspeed; - int pmb = pmodel; - err=fscanf(f, "%d%d%lf%d%d%lf", - &pmb, &polygonal::SI, &ps, &polygonal::deg, - &aa, &lv); - pmodel = eModel(pmb); - conformal::includeHistory = aa; polygonal::STAR = ps; conformal::lvspeed = lv; - - aa=conformal::autoband; bb=conformal::autobandhistory; cc=conformal::dospiral; - err=fscanf(f, "%d%d%d%d%d%d", - &conformal::bandhalf, &conformal::bandsegment, &conformal::rotation, - &aa, &bb, &cc); - conformal::autoband = aa; conformal::autobandhistory = bb; conformal::dospiral = cc; - - err=fscanf(f, "%d", &polygonal::maxcoef); - if(polygonal::maxcoef < 0) polygonal::maxcoef = 0; - if(polygonal::maxcoef > MSI) polygonal::maxcoef = MSI; - for(int i=0; i<=polygonal::maxcoef; i++) { - double re=0, im=0; - err=fscanf(f, "%lf%lf", &re, &im); - polygonal::coef[i] = polygonal::cld(re, im); - } - - aa=revcontrol; bb=vid.drawmousecircle; - d = vid.mspeed; - err=fscanf(f, "%d%d%d%f%d%d", &aa, &bb, &sightrange, &d, &effvolume, &vid.particles); - vid.mspeed = d; - if(sightrange < 4) sightrange = 4; - if(sightrange > 7) sightrange = 7; - revcontrol = aa; vid.drawmousecircle = bb; - - readf(f, geom3::depth); readf(f, geom3::camera); readf(f, geom3::wall_height); - readf(f, geom3::rock_wall_ratio); readf(f, geom3::human_wall_ratio); - readf(f, geom3::lake_top); readf(f, geom3::lake_bottom); - - err=fscanf(f, "%d %d %d", &geom3::tc_depth, &geom3::tc_camera, &geom3::tc_alpha); - - readf(f, geom3::highdetail); - geom3::middetail = 200; readf(f, geom3::middetail); - if(geom3::middetail == 200) { - if(ISMOBILE) - geom3::highdetail = 0, geom3::middetail = 3; - else - geom3::highdetail = geom3::middetail = 5; - } - - int gso = glyphsortorder; err=fscanf(f, "%d", &gso); glyphsortorder = eGlyphsortorder(gso); - - readf(f, vid.yshift); readf(f, vid.camera_angle); readf(f, vid.ballangle); readf(f, vid.ballproj); - - jps = vid.linewidth; - err=fscanf(f, "%d%d%d%d%lf\n", &vid.mobilecompasssize, &vid.aurastr, &vid.aurasmoothen, &vid.graphglyph, &jps); - vid.linewidth = jps; - - fclose(f); - DEBB(DF_INIT, (debugfile,"Loaded configuration: %s\n", conffile)); - - if(err) - ; - } - - precalc(); - } -#endif - -#ifndef NOSDL -void initJoysticks() { - DEBB(DF_INIT, (debugfile,"init joysticks\n")); - numsticks = SDL_NumJoysticks(); - if(numsticks > 8) numsticks = 8; - for(int i=0; icurrent_w; - vid.yscr = vid.yres = inf->current_h; -#endif - - SDL_WM_SetCaption("HyperRogue " VER, "HyperRogue " VER); - #endif - - preparesort(); -#ifndef NOCONFIG - loadConfig(); -#endif - -#ifdef USE_COMMANDLINE - arg::read(2); -#endif - - #ifndef NOSDL - setvideomode(); - if(!s) { - printf("Failed to initialize graphics.\n"); - exit(2); - } - - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); - SDL_EnableUNICODE(1); - -#ifndef NOTTF - if(TTF_Init() != 0) { - printf("Failed to initialize TTF.\n"); - exit(2); - } -#endif - - initJoysticks(); - - #ifdef SDLAUDIO - initAudio(); - #endif - - #endif - } - -int frames; -bool outoffocus = false; - -void panning(hyperpoint hf, hyperpoint ht) { - View = - rgpushxto0(hf) * rgpushxto0(gpushxto0(hf) * ht) * gpushxto0(hf) * View; - playermoved = false; - } - -bool needConfirmation() { - return canmove && (gold() >= 30 || tkills() >= 50) && !cheater && !quitsaves(); - } - -void fullcenter() { - if(playerfound && false) centerpc(INF); - else { - bfs(); - resetview(); - drawthemap(); - centerpc(INF); - } - playermoved = true; - } - -bool didsomething; - -bool quitmainloop = false; - -bool doexiton(int sym, int uni) { - if(sym == SDLK_ESCAPE) return true; - if(sym == SDLK_F10) return true; - if(uni != 0) return true; - return false; - } - -void handleKeyQuit(int sym, int uni) { - dialog::handleNavigation(sym, uni); - // ignore the camera movement keys - -#ifndef NORUG - if(rug::rugged && (sym == SDLK_UP || sym == SDLK_DOWN || sym == SDLK_PAGEUP || sym == SDLK_PAGEDOWN || - sym == SDLK_RIGHT || sym == SDLK_LEFT)) - sym = 0; -#endif - - if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == SDLK_F10) quitmainloop = true; - else if(uni == 'r' || sym == SDLK_F5) { - restartGame(), cmode = emNormal; - msgs.clear(); - } - else if(sym == SDLK_UP || sym == SDLK_KP8) msgscroll++; - else if(sym == SDLK_DOWN || sym == SDLK_KP2) msgscroll--; - else if(sym == SDLK_PAGEUP || sym == SDLK_KP9) msgscroll+=5; - else if(sym == SDLK_PAGEDOWN || sym == SDLK_KP3) msgscroll-=5; - else if(uni == 'v') cmode = emMenu; - else if(sym == SDLK_F3 || (sym == ' ' || sym == SDLK_HOME)) - fullcenter(); - else if(uni == 'o' && DEFAULTNOR(sym)) setAppropriateOverview(); - else if(uni == 'i' && DEFAULTNOR(sym) && inv::on) cmode = emInventory; -#ifndef NOSAVE - else if(uni == 't') { - if(!canmove) restartGame(); - loadScores(); - msgs.clear(); - } - #endif - - else if(doexiton(sym, uni) && !didsomething) { - cmode = emNormal; - msgscroll = 0; - msgs.clear(); - } - } - -#ifdef MOBILE -typedef int eventtype; -#else -typedef SDL_Event eventtype; -#endif - -void handleKeyNormal(int sym, int uni, eventtype& ev) { - - if(cheater) { - if(applyCheat(uni, mouseover)) - sym = 0; - } - - if(!(uni >= 'A' && uni <= 'Z') && DEFAULTCONTROL) { - if(sym == 'l' || sym == 'd' || sym == SDLK_KP6) movepckeydir(0); - if(sym == 'n' || sym == 'c' || sym == SDLK_KP3) movepckeydir(1); - if(sym == 'j' || sym == 'x' || sym == SDLK_KP2) movepckeydir(2); - if(sym == 'b' || sym == 'z' || sym == SDLK_KP1) movepckeydir(3); - if(sym == 'h' || sym == 'a' || sym == SDLK_KP4) movepckeydir(4); - if(sym == 'y' || sym == 'q' || sym == SDLK_KP7) movepckeydir(5); - if(sym == 'k' || sym == 'w' || sym == SDLK_KP8) movepckeydir(6); - if(sym == 'u' || sym == 'e' || sym == SDLK_KP9) movepckeydir(7); - } - -#ifdef PANDORA - if(DEFAULTCONTROL) { - if(sym == SDLK_RIGHT) movepckeydir(0); - if(sym == SDLK_LEFT) movepckeydir(4); - if(sym == SDLK_DOWN) movepckeydir(2 + (leftclick?1:0) - (rightclick?1:0)); - if(sym == SDLK_UP) movepckeydir(6 - (leftclick?1:0) + (rightclick?1:0)); - } -#endif - - if(uni == sym && DEFAULTNOR(sym)) { - gmodekeys(sym, uni); - if(sym == '8') { - backcolor = backcolor ^ 0xFFFFFF; - bordcolor = bordcolor ^ 0xFFFFFF; - forecolor = forecolor ^ 0xFFFFFF; - printf("back = %x\n", backcolor); - } - if(sym == '9') { - pmodel = eModel(8 - pmodel); - // vid.yshift = 1 - vid.yshift; - // vid.drawmousecircle = true; - } - if(sym == 'm' && canmove && cmode == emNormal && (centerover == cwt.c ? mouseover : centerover)) - performMarkCommand(mouseover); - } - - if(DEFAULTCONTROL) { - if(sym == '.' || sym == 's') movepcto(-1, 1); - if((sym == SDLK_DELETE || sym == SDLK_KP_PERIOD || sym == 'g') && uni != 'G' && uni != 'G'-64) - movepcto(MD_DROP, 1); - if(sym == 't' && uni != 'T' && uni != 'T'-64 && canmove && cmode == emNormal) { - if(playermoved && items[itStrongWind]) { - cell *c = whirlwind::jumpDestination(cwt.c); - if(c) centerover = c; - } - targetRangedOrb(centerover, roKeyboard); - sym = 0; uni = 0; - } - } - - if(sym == SDLK_KP5 && DEFAULTCONTROL) movepcto(-1, 1); - - // if(sym == SDLK_F4) restartGameSwitchEuclid(); - - if(sym == SDLK_F5) { - if(needConfirmation()) cmode = emQuit; - else restartGame(); - } - - if(sym == SDLK_ESCAPE) { - cmode = emQuit; - achievement_final(false); - if(!canmove) { - addMessage(XLAT("GAME OVER")); - addMessage(timeline()); - } - msgscroll = 0; - } - if(sym == SDLK_F10) { - if(needConfirmation()) cmode = emQuit; - else quitmainloop = true; - } - - if(!canmove) { - if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER) quitmainloop = true; - else if(uni == 'r') restartGame(); -#ifndef NOSAVE - else if(uni == 't') { - restartGame(); - loadScores(); - } -#endif -#ifndef NORUG - else if(rug::rugged) ; -#endif - else if(sym == SDLK_UP || sym == SDLK_KP8) msgscroll++; - else if(sym == SDLK_DOWN || sym == SDLK_KP2) msgscroll--; - else if(sym == SDLK_PAGEUP || sym == SDLK_KP9) msgscroll+=5; - else if(sym == SDLK_PAGEDOWN || sym == SDLK_KP3) msgscroll-=5; - } - - if(uni == 'o' && DEFAULTNOR(sym)) setAppropriateOverview(); - if(uni == 'i' && DEFAULTNOR(sym) && inv::on) cmode = emInventory; - - if((sym == SDLK_HOME || sym == SDLK_F3 || sym == ' ') && DEFAULTNOR(sym)) - fullcenter(); - -/* if(sym == SDLK_F6) { - View = spin(M_PI/2) * inverse(cwtV) * View; - if(flipplayer) View = pispin * View; - cmode = emDraw; - } */ - - if(sym == 'v' && DEFAULTNOR(sym)) { - cmode = emMenu; - } - -#ifndef NOSDL -#ifdef PANDORA - if(ev.type == SDL_MOUSEBUTTONUP && sym == 0 && !rightclick) -#else - if(ev.type == SDL_MOUSEBUTTONDOWN && sym == 0 && !rightclick) -#endif - if(canmove && getcstat != 'v' && getcstat != 'g' && getcstat != SDLK_F1) - { - actonrelease = false; - - shmup::cpid = 0; - if(mouseover && - targetclick && (!shmup::on || numplayers() == 1) && targetRangedOrb(mouseover, forcetarget ? roMouseForce : roMouse)) { - } - else if(forcetarget) - ; - else if(!DEFAULTCONTROL) { - if(!shmup::on) - multi::mousemovement(mouseover); - } - else mousemovement(); - } -#endif - - if(sym == SDLK_F1) { - lastmode = cmode; - cmode = emHelp; - } - -#ifdef ROGUEVIZ - rogueviz::processKey(sym, uni); -#endif - } - -void handlekey(int sym, int uni, eventtype& ev) { - -#ifdef EXTRA_HANDLEKEY - if(extra::handleKey(sym, uni)) return; -#endif - -#ifdef TOUR - if(tour::on && tour::handleKeyTour(sym, uni)) return; -#endif - - if(((cmode == emNormal && canmove) || (cmode == emQuit && !canmove) || cmode == emDraw || (cmode == emMapEditor && !mapeditor::subscreen)) && DEFAULTNOR(sym) && !rug::rugged) { -#ifndef PANDORA - if(sym == SDLK_RIGHT) { - if(conformal::on) - conformal::lvspeed += 0.1 * shiftmul; - else - View = xpush(-0.2*shiftmul) * View, playermoved = false, didsomething = true; - } - if(sym == SDLK_LEFT) { - if(conformal::on) - conformal::lvspeed -= 0.1 * shiftmul; - else - View = xpush(+0.2*shiftmul) * View, playermoved = false, didsomething = true; - } - if(sym == SDLK_UP) { - if(conformal::on) - conformal::lvspeed += 0.1 * shiftmul; - else - View = ypush(+0.2*shiftmul) * View, playermoved = false, didsomething = true; - } - if(sym == SDLK_DOWN) { - if(conformal::on) - conformal::lvspeed -= 0.1 * shiftmul; - else - View = ypush(-0.2*shiftmul) * View, playermoved = false, didsomething = true; - } -#endif - if(sym == SDLK_PAGEUP) { - if(conformal::on) - conformal::rotation++; - else - View = spin(M_PI/S21*shiftmul) * View, didsomething = true; - } - if(sym == SDLK_PAGEDOWN) { - if(conformal::on) - conformal::rotation++; - else - View = spin(-M_PI/S21*shiftmul) * View, didsomething = true; - } - - if(sym == SDLK_PAGEUP || sym == SDLK_PAGEDOWN) - if(isGravityLand(cwt.c->land)) playermoved = false; - } - -#ifndef NOSDL - if(sym == SDLK_F7 && !vid.usingGL) { - - time_t timer; - timer = time(NULL); - char buf[128]; strftime(buf, 128, "shot-%y%m%d-%H%M%S" IMAGEEXT, localtime(&timer)); - - IMAGESAVE(s, buf); - addMessage(XLAT("Screenshot saved to %1", buf)); - } -#endif - - #ifdef DEMO - if(cmode == emOverview || cmode == emMenu) handleDemoKey(sym, uni); else - #endif - - if(cmode == emNormal) handleKeyNormal(sym, uni, ev); - else if(cmode == emMenu) handleMenuKey(sym, uni); - else if(cmode == emCheatMenu) handleCheatMenu(sym, uni); - else if(cmode == emBasicConfig) handleBasicConfig(sym, uni); - else if(cmode == emGraphConfig) handleGraphConfig(sym, uni); - else if(cmode == emJoyConfig) handleJoystickConfig(sym, uni); - else if(cmode == emCustomizeChar) handleCustomizeChar(sym, uni); - else if(cmode == emDisplayMode) handleDisplayMode(sym, uni); - else if(cmode == emChangeMode) handleChangeMode(sym, uni); - else if(cmode == emShmupConfig) shmup::handleConfig(sym, uni); -#ifndef NOMODEL - else if(cmode == emNetgen) netgen::handleKey(sym, uni); -#endif -#ifndef NORUG - else if(cmode == emRugConfig) rug::handleKey(sym, uni); -#endif -#ifndef NOEDIT - else if(cmode == emMapEditor) mapeditor::handleKey(sym, uni); - else if(cmode == emDraw) mapeditor::drawHandleKey(sym, uni); -#endif -#ifndef NOSAVE -#ifndef MOBILE - else if(cmode == emScores) handleScoreKeys(sym, uni); -#endif - else if(cmode == emPickScores) handlePickScoreKeys(sym, uni); -#endif - else if(cmode == emConformal) conformal::handleKey(sym, uni); - else if(cmode == emYendor) yendor::handleKey(sym, uni); - else if(cmode == emPeace) peace::handleKey(sym, uni); -#ifdef INV - else if(cmode == emInventory) inv::handleKey(sym, uni); -#endif - else if(cmode == emSlideshows) tour::ss::handleKey(sym, uni); - else if(cmode == emTactic) tactic::handleKey(sym, uni); - else if(cmode == emOverview) handleOverview(sym, uni); - else if(cmode == emPickEuclidean) handleEuclidean(sym, uni); -#ifdef MOBILE -#ifdef HAVE_ACHIEVEMENTS - else if(cmode == emLeader) leader::handleKey(sym, uni); -#endif -#endif - else if(cmode == emColor) dialog::handleColor(sym, uni); - else if(cmode == emNumber) dialog::handleNumber(sym, uni); - else if(cmode == emHelp) handleHelp(sym, uni); - else if(cmode == em3D) handle3D(sym, uni); - else if(cmode == emQuit) handleKeyQuit(sym, uni); -#ifdef ROGUEVIZ - else if(cmode == emRogueviz) rogueviz::handleMenu(sym, uni); -#endif - else if(cmode == emLinepattern) linepatterns::handleMenu(sym, uni); - } - -#ifdef NOSDL -void mainloopiter() { printf("(compiled without SDL -- no action)\n"); quitmainloop = true; } -#else - -// Warning: a very long function! todo: refactor - - -void mainloopiter() { - - DEBB(DF_GRAPH, (debugfile,"main loop\n")); - - #ifndef GFX - #ifndef GL - vid.wallmode = 0; - vid.monmode = 0; - #endif - #endif - - optimizeview(); - - if(conformal::on) conformal::apply(); - - ticks = SDL_GetTicks(); - - int cframelimit = vid.framelimit; - if((cmode == emBasicConfig || cmode == emGraphConfig || cmode == emDisplayMode || cmode == emHelp || cmode == emQuit || - cmode == emCustomizeChar || cmode == emMenu || cmode == emPickEuclidean || - cmode == emScores || cmode == emPickScores) && cframelimit > 15) - cframelimit = 15; - if(outoffocus && cframelimit > 10) cframelimit = 10; - - int timetowait = lastt + 1000 / cframelimit - ticks; - - if(DOSHMUP && cmode == emNormal) - timetowait = 0, shmup::turn(ticks - lastt); - - if(!DOSHMUP && (multi::alwaysuse || multi::players > 1) && cmode == emNormal) - timetowait = 0, multi::handleMulti(ticks - lastt); - - if(vid.sspeed >= 5 && gmatrix.count(cwt.c) && !elliptic) { - cwtV = gmatrix[cwt.c] * ddspin(cwt.c, cwt.spin); - if(cwt.mirrored) playerV = playerV * Mirror; - } - -#ifdef WEB - if(playermoved && vid.sspeed > -4.99 && !outoffocus) { - centerpc((ticks - lastt) / 1000.0 * exp(vid.sspeed)); - } - if(!outoffocus) drawscreen(); -#else - if(timetowait > 0) - SDL_Delay(timetowait); - else { - if(cmode != emOverview) { - if(playermoved && vid.sspeed > -4.99 && !outoffocus) - centerpc((ticks - lastt) / 1000.0 * exp(vid.sspeed)); - if(panjoyx || panjoyy) - checkpanjoy((ticks - lastt) / 1000.0); - } - tortoise::updateVals(ticks - lastt); - frames++; - if(!outoffocus) { - drawscreen(); - } - lastt = ticks; - } -#endif - - Uint8 *keystate = SDL_GetKeyState(NULL); - rightclick = keystate[SDLK_RCTRL]; - leftclick = keystate[SDLK_RSHIFT]; - lctrlclick = keystate[SDLK_LCTRL]; - lshiftclick = keystate[SDLK_LSHIFT]; - forcetarget = (keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]); - hiliteclick = keystate[SDLK_LALT] | keystate[SDLK_RALT]; - anyshiftclick = keystate[SDLK_LSHIFT] | keystate[SDLK_RSHIFT]; - wheelclick = false; - - getcshift = 1; - if(keystate[SDLK_LSHIFT] || keystate[SDLK_RSHIFT]) getcshift = -1; - if(keystate[SDLK_LCTRL] || keystate[SDLK_RCTRL]) getcshift /= 10; - if(keystate[SDLK_LALT] || keystate[SDLK_RALT]) getcshift *= 10; - - didsomething = false; - - if(vid.shifttarget&1) { - leftclick = false; - targetclick = keystate[SDLK_RSHIFT] | keystate[SDLK_LSHIFT]; - } - else { - leftclick = keystate[SDLK_RSHIFT]; - targetclick = true; - } - -#ifdef SDLAUDIO - if(audio) handlemusic(); -#endif - SDL_Event ev; - DEBB(DF_GRAPH, (debugfile,"polling for events\n")); - - achievement_pump(); - while(SDL_PollEvent(&ev)) { - DEBB(DF_GRAPH, (debugfile,"got event type #%d\n", ev.type)); - int sym = 0; - int uni = 0; - shiftmul = 1; - -/* if(ev.type == SDL_JOYDEVICEADDED || ev.type == SDL_JOYDEVICEREMOVED) { - joyx = joyy = 0; - panjoyx = panjoyy = 0; - closeJoysticks(); - initJoysticks(); - }*/ - - if(ev.type == SDL_ACTIVEEVENT) { - if(ev.active.state & SDL_APPINPUTFOCUS) { - if(ev.active.gain) { - outoffocus = false; - } - else { - outoffocus = true; - } - } - } - - if(ev.type == SDL_VIDEORESIZE) { - vid.xres = ev.resize.w; - vid.yres = ev.resize.h; - vid.killreduction = 0; - extern bool setfsize; - setfsize = true; - setvideomode(); -#ifdef GL - if(vid.usingGL) glViewport(0, 0, vid.xres, vid.yres); -#endif - } - - if(ev.type == SDL_VIDEOEXPOSE) { - drawscreen(); - } - - if(ev.type == SDL_JOYAXISMOTION) { - if(ev.jaxis.which == 0) { - if(ev.jaxis.axis == 0) - joyx = ev.jaxis.value; - else if(ev.jaxis.axis == 1) - joyy = ev.jaxis.value; - else if(ev.jaxis.axis == 3) - panjoyx = ev.jaxis.value; - else if(ev.jaxis.axis == 4) - panjoyy = ev.jaxis.value; - checkjoy(); - // printf("panjoy = %d,%d\n", panjoyx, panjoyy); - } - else { - if(ev.jaxis.axis == 0) - panjoyx = ev.jaxis.value; - else - panjoyy = ev.jaxis.value; - } - } - - if(ev.type == SDL_JOYBUTTONDOWN && cmode == emShmupConfig && vid.scfg.setwhat) { - int joyid = ev.jbutton.which; - int button = ev.jbutton.button; - if(joyid < 8 && button < 32) - vid.scfg.joyaction[joyid][button] = vid.scfg.setwhat; - vid.scfg.setwhat = 0; - } - - else if(ev.type == SDL_JOYHATMOTION && cmode == emShmupConfig && vid.scfg.setwhat) { - int joyid = ev.jhat.which; - int hat = ev.jhat.hat; - int dir = 4; - if(ev.jhat.value == SDL_HAT_UP) dir = 0; - if(ev.jhat.value == SDL_HAT_RIGHT) dir = 1; - if(ev.jhat.value == SDL_HAT_DOWN) dir = 2; - if(ev.jhat.value == SDL_HAT_LEFT) dir = 3; - if(joyid < 8 && hat < 4 && dir < 4) { - vid.scfg.hataction[joyid][hat][dir] = vid.scfg.setwhat; - vid.scfg.setwhat = 0; - } - } - - else if(ev.type == SDL_JOYBUTTONDOWN && DEFAULTCONTROL) { - flashMessages(); - movepcto(joydir); - checkjoy(); - } - - if(ev.type == SDL_KEYDOWN) { - flashMessages(); - mousing = false; - sym = ev.key.keysym.sym; - uni = ev.key.keysym.unicode; - if(ev.key.keysym.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) shiftmul = -1; - if(ev.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) shiftmul /= 10; - if(sym == SDLK_RETURN && (ev.key.keysym.mod & (KMOD_LALT | KMOD_RALT))) { - sym = 0; uni = 0; - switchFullscreen(); - } - } - - dialog::handleZooming(ev); - - if(sym == SDLK_F1 && cmode == emNormal && playermoved) - help = "@"; - - bool rollchange = - cmode == emOverview && getcstat >= 2000 && cheater; - - if(ev.type == SDL_MOUSEBUTTONDOWN) { - flashMessages(); - mousepressed = true; - mousing = true; - actonrelease = true; - if(ev.button.button==SDL_BUTTON_WHEELUP && ((cmode == emQuit) ^ !canmove)) { - } - else if(ev.button.button==SDL_BUTTON_WHEELDOWN) { - if(cmode == (canmove ? emQuit : emNormal)) { - sym = 1; msgscroll--; didsomething = true; - } - else - if(cmode == emTactic || cmode == emYendor || cmode == emPickEuclidean || - cmode == emLeader || cmode == emScores || cmode == emOverview) - if(!rollchange) - sym = uni = PSEUDOKEY_WHEELDOWN; - } - if(ev.button.button==SDL_BUTTON_WHEELUP) { - if(cmode == (canmove ? emQuit : emNormal)) { - sym = 1; msgscroll++; didsomething = true; - } - else if(cmode == (canmove ? emNormal : emQuit) || cmode == emMapEditor || cmode == emDraw) { - ld jx = (mousex - vid.xcenter - .0) / vid.radius / 10; - ld jy = (mousey - vid.ycenter - .0) / vid.radius / 10; - playermoved = false; - View = gpushxto0(hpxy(jx, jy)) * View; - sym = 1; - } - else - if(cmode == emTactic || cmode == emYendor || cmode == emPickEuclidean || - cmode == emLeader || cmode == emScores || cmode == emOverview) - if(getcstat < 2000 || !cheater) - sym = uni = PSEUDOKEY_WHEELUP; - } - else if(ev.button.button == SDL_BUTTON_RIGHT) { - sym = 1; didsomething = true; - } - else if(ev.button.button == SDL_BUTTON_MIDDLE) { - sym = 2; didsomething = true; - } - } - - if(ev.type == SDL_MOUSEBUTTONUP) { - mousepressed = false; - mousing = true; - if(ev.button.button==SDL_BUTTON_RIGHT || leftclick) - sym = SDLK_F1; - else if(ev.button.button==SDL_BUTTON_MIDDLE || rightclick) - sym = 1, didsomething = true; - else if(ev.button.button == SDL_BUTTON_LEFT && actonrelease) { - sym = getcstat, uni = getcstat, shiftmul = getcshift; - } - else if(ev.button.button == SDL_BUTTON_WHEELUP && rollchange) { - sym = getcstat, uni = getcstat, shiftmul = getcshift, wheelclick = true; - } - else if(ev.button.button == SDL_BUTTON_WHEELDOWN && rollchange) { - sym = getcstat, uni = getcstat, shiftmul = -getcshift, wheelclick = true; - } - } - - if(ev.type == SDL_MOUSEMOTION) { - mouseoh = mouseh; - - mousing = true; - mousemoved = true; - mousex = ev.motion.x; - mousey = ev.motion.y; - -#ifndef NORUG - if(rug::rugged) - mouseh = rug::gethyper(mousex, mousey); - else -#endif - mouseh = gethyper(mousex, mousey); - - if((rightclick || (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_MMASK)) && !mouseout2() && - mouseh[2] < 50 && mouseoh[2] < 50) { - panning(mouseoh, mouseh); - } - -#ifdef SIMULATE_JOYSTICK - // pretend that both joysticks are present - stick = panstick = (SDL_Joystick*) (&vid); - panjoyx = 20 * (mousex - vid.xcenter); - panjoyy = 20 * (mousey - vid.ycenter); - checkjoy(); -#endif - - if(mousepressed && inslider) { - sym = getcstat, uni = getcstat, shiftmul = getcshift; - } - } - - handlekey(sym, uni, ev); - - if(ev.type == SDL_QUIT) { - if(needConfirmation() && cmode !=emQuit) cmode = emQuit; - else quitmainloop = true; - } - - } - } -#endif - -void mainloop() { - lastt = 0; -#ifdef WEB - initweb(); - emscripten_set_main_loop(mainloopiter, 0, true); -#else - while(!quitmainloop) mainloopiter(); -#endif - } - -void cleargraph() { - DEBB(DF_INIT, (debugfile,"clear graph\n")); -#ifndef NOTTF - for(int i=0; i<256; i++) if(font[i]) TTF_CloseFont(font[i]); -#endif -#ifndef EXTERNALFONT -#ifdef GL - for(int i=0; i<128; i++) if(glfont[i]) delete glfont[i]; -#endif -#endif -#ifndef NOSDL -#ifndef SIMULATE_JOYSTICK - closeJoysticks(); -#endif - SDL_Quit(); -#endif - } - -void cleargraphmemory() { +auto graphcm = addHook(clearmemory, 0, [] () { DEBB(DF_INIT, (debugfile,"clear graph memory\n")); mouseover = centerover = lmouseover = NULL; -#ifndef NOEDIT - if(mapeditor::painttype == 4) - mapeditor::painttype = 0, mapeditor::paintwhat = 0, - mapeditor::paintwhat_str = "clear monster"; - mapeditor::copywhat = NULL; - mapeditor::undo.clear(); - if(!cheater) mapeditor::displaycodes = 0; - if(!cheater) mapeditor::whichShape = 0; -#endif for(int i=0; i animations[ANIMLAYERS]; diff --git a/help.cpp b/help.cpp new file mode 100644 index 00000000..82484861 --- /dev/null +++ b/help.cpp @@ -0,0 +1,816 @@ +string help; + +#ifndef NOLAMBDAS +function help_delegate; +#endif + +string buildHelpText() { + DEBB(DF_GRAPH, (debugfile,"buildHelpText\n")); + +#ifdef ROGUEVIZ + if(rogueviz::on) return rogueviz::makehelp(); +#endif + + string h; + h += XLAT("Welcome to HyperRogue"); +#ifdef ANDROID + h += XLAT(" for Android"); +#endif +#ifdef IOS + h += XLAT(" for iOS"); +#endif + h += XLAT("! (version %1)\n\n", VER); + + h += XLAT( + "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 " + "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!" + ); + h += XLAT(" (press ESC for some hints about it)."); + h += "\n\n"; + + h += XLAT( + "You can fight most monsters by moving into their location. " + "The monster could also kill you by moving into your location, but the game " + "automatically cancels all moves which result in that.\n\n" + ); + + h += XLAT( + "There are many lands in HyperRogue. Collect 10 treasure " + "in the given land type to complete it; this enables you to " + "find the magical Orbs of this land, and in some cases " + "get access to new lands. At 25 treasures " + "this type of Orbs starts appearing in other lands as well. Press 'o' to " + "get the details of all the Lands.\n\n"); + h += "\n\n"; + +#ifdef MOBILE + h += XLAT( + "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 " + "or get information about map objects). You can also touch the " + "numbers displayed to get their meanings.\n" + ); +#else + h += XLAT( + "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" + ); + h += XLAT( + "You can right click any element to get more information about it.\n\n" + ); + h += XLAT("(You can also use right Shift)\n\n"); +#endif + h += XLAT("See more on the website: ") + + "http//roguetemple.com/z/hyper/\n\n"; + +#ifdef TOUR + h += XLAT("Try the Tutorial to help with understanding the " + "geometry of HyperRogue (menu -> special modes).\n\n"); +#endif + + h += XLAT("Still confused? Read the FAQ on the HyperRogue website!\n\n"); + + return h; + } + +string buildCredits() { + string h; + h += XLAT("game design, programming, texts and graphics by Zeno Rogue \n\n"); + if(lang() != 0) + h += XLAT("add credits for your translation here"); +#ifndef NOLICENSE + h += XLAT( + "released under GNU General Public License version 2 and thus " + "comes with absolutely no warranty; see COPYING for details\n\n" + ); +#endif + h += XLAT( + "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, " + "wonderfullizardofoz, Piotr MigdaĹ‚, tehora, Michael Heerdegen, Sprite Guard, zelda0x181e, Vipul, snowyowl0, Patashu, phenomist, Alan Malloy, Tom Fryers, Sinquetica, _monad, CtrlAltDestroy, jruderman" + ); +#ifdef EXTRALICENSE + h += EXTRALICENSE; +#endif +#ifndef MOBILE + h += XLAT( + "\n\nSee sounds/credits.txt for credits for sound effects" + ); + #endif + if(musiclicense != "") h += musiclicense; + return h; + } + +string pushtext(stringpar p) { + string s = XLAT( + "\n\nNote: when pushing %the1 off a heptagonal cell, you can control the pushing direction " + "by clicking left or right half of the heptagon.", p); +#ifndef MOBILE + s += XLAT(" With the keyboard, you can rotate the view for a similar effect (Page Up/Down)."); +#endif + return s; + } + +string princedesc() { + if(princessgender() == GEN_M) + return XLAT("Apparently a prince is kept locked somewhere, but you won't ever find him in this hyperbolic palace. "); + else + return XLAT("Apparently a princess is kept locked somewhere, but you won't ever find her in this hyperbolic palace. "); + } + +string helptitle(string s, int col) { + return "@" + its(col) + "\t" + s + "\n"; + } + +string princessReviveHelp() { + string h = "\n\n" + + XLAT("Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$.", moPrincess); + if(princess::reviveAt) + h += "\n\n" + + XLAT("%The1 will be revivable at %2 $$$", moPrincess, its(princess::reviveAt)); + return h; + } + +void describeOrb(string& help, const orbinfo& oi) { + eOrbLandRelation olr = getOLR(oi.orb, cwt.c->land); + eItem tr = treasureType(oi.l); + help += "\n\n" + XLAT(olrDescriptions[olr], cwt.c->land, tr, treasureType(cwt.c->land)); + int t = items[tr] * landMultiplier(oi.l); + if(t >= 25) + if(olr == olrPrize25 || olr == olrPrize3 || olr == olrGuest || olr == olrMonster || olr == olrAlways) { + help += XLAT("\nSpawn rate (as prize Orb): %1%/%2\n", + its(int(.5 + 100 * orbprizefun(t))), + its(oi.gchance)); + } + if(t >= 10) + if(olr == olrHub) { + help += XLAT("\nSpawn rate (in Hubs): %1%/%2\n", + its(int(.5 + 100 * orbcrossfun(t))), + its(oi.gchance)); + } + } + +string generateHelpForItem(eItem it) { + + string help = helptitle(XLATN(iinf[it].name), iinf[it].color); + + help += XLAT(iinf[it].help); + + if(it == itSavedPrincess || it == itOrbLove) + help += princessReviveHelp(); + + if(it == itTrollEgg) + help += XLAT("\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen.", it); + + if(it == itIvory || it == itAmethyst || it == itLotus || it == itMutant) { + help += XLAT( + "\n\nEasy %1 might disappear when you collect more of its kind.", it); + if(it != itMutant) help += XLAT( + " You need to go deep to collect lots of them."); + } + +#ifdef MOBILE + if(it == itOrbSafety) + help += XLAT("This might be very useful for devices with limited memory."); +#else + if(it == itOrbSafety) + help += XLAT("Thus, it is potentially useful for extremely long games, which would eat all the memory on your system otherwise.\n"); +#endif + + if(isRangedOrb(it)) { + help += XLAT("\nThis is a ranged Orb. "); +#ifdef ISMOBILE + if(vid.shifttarget&2) + help += XLAT("\nRanged Orbs can be targeted by long touching the desired location."); + else + help += XLAT("\nRanged Orbs can be targeted by touching the desired location."); +#else + if(vid.shifttarget&1) + help += XLAT("\nRanged Orbs can be targeted by shift-clicking the desired location. " + else + help += XLAT("\nRanged Orbs can be targeted by clicking the desired location. "); + help += "You can also scroll to the desired location and then press 't'."); +#endif + help += XLAT("\nYou can never target cells which are adjacent to the player character, or ones out of the sight range."); + } + +#ifdef MOBILE + if(it == itGreenStone) + help += XLAT("You can touch the Dead Orb in your inventory to drop it."); +#else + if(it == itGreenStone) + help += XLAT("You can press 'g' or click them in the list to drop a Dead Orb."); +#endif + if(it == itOrbLightning || it == itOrbFlash) + help += XLAT("\n\nThis Orb is triggered on your first attack or illegal move."); + if(it == itOrbShield) + help += XLAT("\n\nThis Orb protects you from attacks, scents, and insulates you " + "from electricity. It does not let you go through deadly terrain, but " + "if you are attacked with fire, it lets you stay in place in it."); + if(it == itOrbEmpathy) { + int cnt = 0; + for(int i=0; i 0) { + help += XLAT("\n\nOrb unlocked: %1", oi.orb); + describeOrb(help, oi); + } + else if(oi.l == cwt.c->land) { + help += XLAT("\n\nSecondary orb: %1", oi.orb); + describeOrb(help, oi); + } + } + } + } + + return help; + } + +void addMinefieldExplanation(string& s) { + + s += XLAT( + "\n\nOnce you collect 10 Bomberbird Eggs, " + "stepping on a cell with no adjacent mines also reveals the adjacent cells. " + "Collecting even more Eggs will increase the radius. Additionally, collecting " + "25 Bomberbird Eggs will reveal adjacent cells even in your future games." + ); + + s += "\n\n"; +#ifdef MOBILE + s += XLAT("Known mines may be marked by pressing 'm'. Your allies won't step on marked mines."); +#else + s += XLAT("Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines."); +#endif + } + +string generateHelpForWall(eWall w) { + + string s = helptitle(XLATN(winf[w].name), winf[w].color); + + s += XLAT(winf[w].help); + if(w == waMineMine || w == waMineUnknown || w == waMineOpen) + addMinefieldExplanation(s); + if(isThumper(w)) s += pushtext(w); + if((w == waClosePlate || w == waOpenPlate) && purehepta) + s += "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)"; + return s; + } + +void buteol(string& s, int current, int req) { + int siz = size(s); + if(s[siz-1] == '\n') s.resize(siz-1); + char buf[100]; sprintf(buf, " (%d/%d)", current, req); + s += buf; s += "\n"; + } + +string generateHelpForMonster(eMonster m) { + string s = helptitle(XLATN(minf[m].name), minf[m].color); + + if(m == moPlayer) { +#ifdef TOUR + if(tour::on) + return s+XLAT( + "A tourist from another world. They mutter something about the 'tutorial', " + "and claim that they are here just to learn, and to leave without any treasures. " + "Do not kill them!" + ); +#endif + s += XLAT( + "This monster has come from another world, presumably to steal our treasures. " + "Not as fast as an Eagle, not as resilient as the guards from the Palace, " + "and not as huge as the Mutant Ivy from the Clearing; however, " + "they are very dangerous because of their intelligence, " + "and access to magical powers.\n\n"); + + if(cheater) + s += XLAT("Actually, their powers appear god-like...\n\n"); + + else if(!hardcore) + s += XLAT( + "Rogues will never make moves which result in their immediate death. " + "Even when cornered, they are able to instantly teleport back to their " + "home world at any moment, taking the treasures forever... but " + "at least they will not steal anything further!\n\n" + ); + + if(!euclid) + s += XLAT( + "Despite this intelligence, Rogues appear extremely surprised " + "by the most basic facts about geometry. They must come from " + "some really strange world.\n\n" + ); + + if(shmup::on) + s += XLAT("In the Shoot'em Up mode, you are armed with thrown Knives."); + + return s; + } + + s += XLAT(minf[m].help); + if(m == moPalace || m == moSkeleton) + s += pushtext(m); + if(m == moTroll) s += XLAT(trollhelp2); + + if(isMonsterPart(m)) + s += XLAT("\n\nThis is a part of a monster. It does not count for your total kills.", m); + + if(isFriendly(m)) + s += XLAT("\n\nThis is a friendly being. It does not count for your total kills.", m); + + if(m == moTortoise) + s += XLAT("\n\nTortoises are not monsters! They are just annoyed. They do not count for your total kills.", m); + + if(isGhost(m)) + s += XLAT("\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the same kind.", m); + + if(m == moBat || m == moEagle) + s += XLAT("\n\nFast flying creatures may attack or go against gravity only in their first move.", m); + + return s; + } + +string generateHelpForLand(eLand l) { + string s = helptitle(XLATN(linf[l].name), linf[l].color); + + if(l == laPalace) s += princedesc(); + + s += XLAT(linf[l].help); + + if(l == laMinefield) addMinefieldExplanation(s); + + s += "\n\n"; + if(l == laIce || l == laCaves || l == laDesert || l == laMotion || l == laJungle || + l == laCrossroads || l == laAlchemist) + s += XLAT("Always available.\n"); + + #define ACCONLY(z) s += XLAT("Accessible only from %the1.\n", z); + #define ACCONLY2(z,x) s += XLAT("Accessible only from %the1 or %the2.\n", z, x); + #define ACCONLYF(z) s += XLAT("Accessible only from %the1 (until finished).\n", z); + #define TREQ(z) { s += XLAT("Treasure required: %1 $$$.\n", its(z)); buteol(s, gold(), z); } + #define TREQ2(z,x) { s += XLAT("Treasure required: %1 x %2.\n", its(z), x); buteol(s, items[x], z); } + + if(l == laMirror || l == laMinefield || l == laPalace || + l == laOcean || l == laLivefjord || l == laZebra || l == laWarpCoast || l == laWarpSea || + l == laReptile || l == laIvoryTower) + TREQ(R30) + + + if(isCoastal(l)) + s += XLAT("Coastal region -- connects inland and aquatic regions.\n"); + + if(isPureSealand(l)) + s += XLAT("Aquatic region -- accessible only from coastal regions and other aquatic regions.\n"); + + if(l == laWhirlpool) ACCONLY(laOcean) + if(l == laRlyeh) ACCONLYF(laOcean) + if(l == laTemple) ACCONLY(laRlyeh) + if(l == laClearing) ACCONLY(laOvergrown) + if(l == laHaunted) ACCONLY(laGraveyard) + if(l == laPrincessQuest) ACCONLY(laPalace) + if(l == laMountain) ACCONLY(laJungle) + if(l == laCamelot) ACCONLY2(laCrossroads, laCrossroads3) + + if(l == laDryForest || l == laWineyard || l == laDeadCaves || l == laHive || l == laRedRock || + l == laOvergrown || l == laStorms || l == laWhirlwind || l == laRose || + l == laCrossroads2 || l == laRlyeh) + TREQ(R60) + + if(l == laReptile) TREQ2(U10, itElixir) + if(l == laEndorian) TREQ2(U10, itIvory) + if(l == laKraken) TREQ2(U10, itFjord) + if(l == laBurial) TREQ2(U10, itKraken) + + if(l == laDungeon) TREQ2(U5, itIvory) + if(l == laDungeon) TREQ2(U5, itPalace) + if(l == laMountain) TREQ2(U5, itIvory) + if(l == laMountain) TREQ2(U5, itRuby) + + if(l == laPrairie) TREQ(R90) + if(l == laBull) TREQ(R90) + if(l == laCrossroads4) TREQ(R200) + if(l == laCrossroads5) TREQ(R300) + + if(l == laGraveyard || l == laHive) { + s += XLAT("Kills required: %1.\n", "100"); + buteol(s, tkills(), R100); + } + + if(l == laDragon) { + s += XLAT("Different kills required: %1.\n", "20"); + buteol(s, killtypes(), R20); + } + + if(l == laTortoise) ACCONLY(laDragon) + if(l == laTortoise) s += XLAT("Find a %1 in %the2.", itBabyTortoise, laDragon); + + if(l == laHell || l == laCrossroads3) { + s += XLAT("Finished lands required: %1 (collect %2 treasure)\n", "9", its(R10)); + buteol(s, orbsUnlocked(), 9); + } + + if(l == laCocytus || l == laPower) TREQ2(U10, itHell) + if(l == laRedRock) TREQ2(U10, itSpice) + if(l == laOvergrown) TREQ2(U10, itRuby) + if(l == laClearing) TREQ2(U5, itMutant) + if(l == laCocytus) TREQ2(U10, itDiamond) + if(l == laDeadCaves) TREQ2(U10, itGold) + if(l == laTemple) TREQ2(U5, itStatue) + if(l == laHaunted) TREQ2(U10, itBone) + if(l == laCamelot) TREQ2(U5, itEmerald) + if(l == laEmerald) { + TREQ2(5, itFernFlower) TREQ2(5, itGold) + s += XLAT("Alternatively: kill a %1 in %the2.\n", moVizier, laPalace); + buteol(s, kills[moVizier], 1); + } + +#define KILLREQ(who, where) { s += XLAT("Kills required: %1 (%2).\n", who, where); buteol(s, kills[who], 1); } + + if(l == laPrincessQuest) + KILLREQ(moVizier, laPalace); + + if(l == laElementalWall) { + KILLREQ(moFireElemental, laDragon); + KILLREQ(moEarthElemental, laDeadCaves); + KILLREQ(moWaterElemental, laLivefjord); + KILLREQ(moAirElemental, laWhirlwind); + } + + if(l == laTrollheim) { + KILLREQ(moTroll, laCaves); + KILLREQ(moFjordTroll, laLivefjord); + KILLREQ(moDarkTroll, laDeadCaves); + KILLREQ(moStormTroll, laStorms); + KILLREQ(moForestTroll, laOvergrown); + KILLREQ(moRedTroll, laRedRock); + } + + if(l == laZebra) TREQ2(U10, itFeather) + + if(l == laCamelot || l == laPrincessQuest) + s += XLAT("Completing the quest in this land is not necessary for the Hyperstone Quest."); + + int rl = isRandland(l); + if(rl == 2) + s += XLAT("Variants of %the1 are always available in the Random Pattern Mode.", l); + else if(rl == 1) + s += XLAT( + "Variants of %the1 are available in the Random Pattern Mode after " + "getting a highscore of at least 10 %2.", l, treasureType(l)); + + if(l == laPrincessQuest) { + s += XLAT("Unavailable in the shmup mode.\n"); + s += XLAT("Unavailable in the multiplayer mode.\n"); + } + + if(noChaos(l)) + s += XLAT("Unavailable in the Chaos mode.\n"); + + if(l == laWildWest) + s += XLAT("Bonus land, available only in some special modes.\n"); + + if(l == laWhirlpool) + s += XLAT("Orbs of Safety always appear here, and may be used to escape.\n"); + + /* if(isHaunted(l) || l == laDungeon) + s += XLAT("You may be unable to leave %the1 if you are not careful!\n", l); */ + + if(l == laStorms) { + if(elec::lightningfast == 0) s += XLAT("\nSpecial conduct (still valid)\n"); + else s += XLAT("\nSpecial conduct failed:\n"); + + s += XLAT( + "Avoid escaping from a discharge (\"That was close\")."); + } + + if(isHaunted(l)) { + if(survivalist) s += XLAT("\nSpecial conduct (still valid)\n"); + else s += XLAT("\nSpecial conduct failed:\n"); + + s += XLAT( + "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods." + ); + } + +#ifndef ISMOBILE + if(l == laCA) + s += XLAT("\n\nHint: use 'm' to toggle cells quickly"); +#endif + + return s; + } + +bool instat; + +string turnstring(int i) { + if(i == 1) return XLAT("1 turn"); + else return XLAT("%1 turns", its(i)); + } + +void describeMouseover() { + DEBB(DF_GRAPH, (debugfile,"describeMouseover\n")); + + cell *c = mousing ? mouseover : playermoved ? NULL : centerover; + string out = mouseovers; + if(!c || instat || getcstat) { } + else if(c->wall != waInvisibleFloor) { + out = XLAT1(linf[c->land].name); + help = generateHelpForLand(c->land); + + // Celsius + + // if(c->land == laIce) out = "Icy Lands (" + fts(60 * (c->heat - .4)) + " C)"; + + if(c->land == laIce || c->land == laCocytus) + out += " (" + fts(heat::celsius(c)) + " °C)"; + if(c->land == laDryForest && c->landparam) + out += " (" + its(c->landparam)+"/10)"; + if(c->land == laOcean && chaosmode) + out += " (" + its(c->CHAOSPARAM)+"S"+its(c->SEADIST)+"L"+its(c->LANDDIST)+")"; + else if(c->land == laOcean && c->landparam <= 25) { + if(shmup::on) + out += " (" + its(c->landparam)+")"; + else { + bool b = c->landparam >= tide[(turncount-1) % tidalsize]; + int t = 1; + for(; t < 1000 && b == (c->landparam >= tide[(turncount+t-1) % tidalsize]); t++) ; + if(b) + out += " (" + turnstring(t) + XLAT(" to surface") + ")"; + else + out += " (" + turnstring(t) + XLAT(" to submerge") + ")"; + } + } + + if(c->land == laTortoise && tortoise::seek()) out += " " + tortoise::measure(getBits(c)); + + /* if(c->land == laGraveyard || c->land == laHauntedBorder || c->land == laHaunted) + out += " (" + its(c->landparam)+")"; */ + + if(buggyGeneration) { + char buf[20]; sprintf(buf, " H=%d M=%d", c->landparam, c->mpdist); out += buf; + } + +// if(c->land == laBarrier) +// out += "(" + string(linf[c->barleft].name) + " / " + string(linf[c->barright].name) + ")"; + + // out += "(" + its(c->bardir) + ":" + string(linf[c->barleft].name) + " / " + string(linf[c->barright].name) + ")"; + + // out += " MD"+its(c->mpdist); + + // out += " WP:" + its(c->wparam); + // out += " rose:" + its(rosemap[c]/4) + "." + its(rosemap[c]%4); + // out += " MP:" + its(c->mpdist); + // out += " cda:" + its(celldistAlt(c)); + + /* out += " DP=" + its(celldistance(c, cwt.c)); + out += " DO=" + its(celldist(c)); + out += " PD=" + its(c->pathdist); */ + + if(false) { + + out += " LP:" + itsh(c->landparam)+"/"+its(turncount); + + out += " CD:" + its(celldist(c)); + + out += " D:" + its(c->mpdist); + + char zz[64]; sprintf(zz, " P%p", c); out += zz; + // out += " rv" + its(rosedist(c)); + // if(rosemap.count(c)) + // out += " rv " + its(rosemap[c]/8) + "." + its(rosemap[c]%8); + // out += " ai" + its(c->aitmp); + if(euclid) { + for(int i=0; i<4; i++) out += " " + its(getEuclidCdata(c->master)->val[i]); + out += " " + itsh(getBits(c)); + } + else { + for(int i=0; i<4; i++) out += " " + its(getHeptagonCdata(c->master)->val[i]); + // out += " " + itsh(getHeptagonCdata(c->master)->bits); + out += " " + fts(tortoise::getScent(getBits(c))); + } + // itsh(getHeptagonCdata(c->master)->bits); + // out += " barleft: " + s0 + dnameof(c->barleft); + // out += " barright: " + s0 + dnameof(c->barright); + } + + // char zz[64]; sprintf(zz, " P%p", c); out += zz; + + /* whirlwind::calcdirs(c); + for(int i=0; iland); + + if(euclid && cheater) { + if(torus) { + out += " ("+its(decodeId(c->master))+")"; + } + else { + eucoord x, y; + decodeMaster(c->master, x, y); + out += " ("+its(short(x))+","+its(short(y))+")"; + } + } + + // char zz[64]; sprintf(zz, " P%d", princess::dist(c)); out += zz; + // out += " MD"+its(c->mpdist); + // out += " H "+its(c->heat); + // if(c->type != 6) out += " Z"+its(c->master->zebraval); + // out += " H"+its(c->heat); + +/* // Hive debug + if(c->land == laHive) { + out += " [" + its(c->tmp) + " H" + its(int(c->heat)); + if(c->tmp >= 0 && c->tmp < size(buginfo) && buginfo[c->tmp].where == c) { + buginfo_t b(buginfo[c->tmp]); + for(int k=0; k<3; k++) out += ":" + its(b.dist[k]); + for(int k=0; k<3; k++) + for(int i=0; itmp) + out += " B"+its(k)+":"+its(i); + } + out += "]"; + } */ + + if(c->wall && + !((c->wall == waFloorA || c->wall == waFloorB || c->wall == waFloorC || c->wall == waFloorD) && c->item)) { + out += ", "; out += XLAT1(winf[c->wall].name); + + if(c->wall == waRose) out += " (" + its(7-rosephase) + ")"; + + if((c->wall == waBigTree || c->wall == waSmallTree) && c->land != laDryForest) + help = + "Trees in this forest can be chopped down. Big trees take two turns to chop down."; + else if(c->wall != waSea && c->wall != waPalace) + if(!((c->wall == waCavefloor || c->wall == waCavewall) && c->land == laEmerald)) + help = generateHelpForWall(c->wall); + } + + if(isActivable(c)) out += XLAT(" (touch to activate)"); + + if(hasTimeout(c)) out += " [" + turnstring(c->wparam) + "]"; + + if(isReptile(c->wall)) + out += " [" + turnstring((unsigned char) c->wparam) + "]"; + + if(c->monst) { + out += ", "; out += XLAT1(minf[c->monst].name); + if(hasHitpoints(c->monst)) + out += " (" + its(c->hitpoints)+" HP)"; + if(isMutantIvy(c)) + out += " (" + its((c->stuntime - mutantphase) & 15) + "*)"; + else if(c->stuntime) + out += " (" + its(c->stuntime) + "*)"; + + if(c->monst == moTortoise && tortoise::seek()) + out += " " + tortoise::measure(tortoise::getb(c)); + + help = generateHelpForMonster(c->monst); + } + + if(c->item && !itemHiddenFromSight(c)) { + out += ", "; + out += XLAT1(iinf[c->item].name); + if(c->item == itBarrow) out += " (x" + its(c->landparam) + ")"; + if(c->item == itBabyTortoise && tortoise::seek()) + out += " " + tortoise::measure(tortoise::babymap[c]); + if(!c->monst) help = generateHelpForItem(c->item); + } + + if(isPlayerOn(c) && !shmup::on) out += XLAT(", you"), help = generateHelpForMonster(moPlayer); + + shmup::addShmupHelp(out); + + if(rosedist(c) == 1) + out += ", wave of scent (front)"; + + if(rosedist(c) == 2) + out += ", wave of scent (back)"; + + if(sword::at(c)) out += ", Energy Sword"; + + if(rosedist(c) || c->land == laRose || c->wall == waRose) + help += s0 + "\n\n" + rosedesc; + + if(isWarped(c) && !isWarped(c->land)) + out += ", warped"; + + if(isWarped(c)) + help += s0 + "\n\n" + warpdesc; + } +/* + else if(cmode == emGraphConfig) { + if(getcstat == 'a' && vid.sspeed > -4.99) + out = XLAT("+5 = center instantly, -5 = do not center the map"); + else if(getcstat == 'a') + out = XLAT("press Space or Home to center on the PC"); + else if(getcstat == 'w') + out = XLAT("also hold Alt during the game to toggle high contrast"); + else if(getcstat == 'f') + out = XLAT("Reduce the framerate limit to conserve CPU energy"); + } + else if(cmode == emBasicConfig) { + if(getcstat == 'c') + out = XLAT("The axes help with keyboard movement"); + else if(getcstat == 'g') + out = XLAT("Affects looks and grammar"); +#ifndef MOBILE + else if(getcstat == 's') + out = XLAT("Config file: %1", conffile); +#endif + else out = ""; + } + else if(cmode == emDisplayMode) { + if(getcstat == 'p') { + if(autojoy) + out = XLAT("joystick mode: automatic (release the joystick to move)"); + if(!autojoy) + out = XLAT("joystick mode: manual (press a button to move)"); + } + } + else if(cmode == emChangeMode) { + if(getcstat == 'h') + out = XLAT("One wrong move and it is game over!"); + } +*/ + + mouseovers = out; + +#ifdef ROGUEVIZ + rogueviz::describe(c); +#endif + + int col = linf[cwt.c->land].color; + if(cwt.c->land == laRedRock) col = 0xC00000; + +#ifndef MOBILE + displayfr(vid.xres/2, vid.fsize, 2, vid.fsize, out, col, 8); +#endif + + if(mousey < vid.fsize * 3/2) getcstat = SDLK_F1; + } + +void showHelp() { + cmode2 = smHelp; + getcstat = SDLK_ESCAPE; + if(help == "HELPFUN") { + help_delegate(); + return; + } + + if(help == "@") help = buildHelpText(); + + string help2; + if(help[0] == '@') { + int iv = help.find("\t"); + int id = help.find("\n"); + dialog::init(help.substr(iv+1, id-iv-1), atoi(help.c_str()+1), 120, 100); + dialog::addHelp(help.substr(id+1)); + } + else { + dialog::init("help", forecolor, 120, 100); + dialog::addHelp(help); + } + + if(help == buildHelpText()) dialog::addItem("credits", 'c'); + + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(sym == SDLK_F1 && help != "@") + help = "@"; + else if(uni == 'c') + help = buildCredits(); + else if(doexiton(sym, uni)) + popScreen(); + }; + } + +void gotoHelp(const string& h) { + help = h; + pushScreen(showHelp); + } diff --git a/hud.cpp b/hud.cpp new file mode 100644 index 00000000..833906f3 --- /dev/null +++ b/hud.cpp @@ -0,0 +1,460 @@ +purehookset hooks_stats; + +int monsterclass(eMonster m) { + if(isFriendly(m) || m == moTortoise) return 1; + else if(isMonsterPart(m)) return 2; + else return 0; + } + +int glyphclass(int i) { + if(i < ittypes) { + eItem it = eItem(i); + return itemclass(it) == IC_TREASURE ? 0 : 1; + } + else { + eMonster m = eMonster(i-ittypes); + return monsterclass(m) == 0 ? 2 : 3; + } + } + +int subclass(int i) { + if(i < ittypes) + return itemclass(eItem(i)); + else + return monsterclass(eMonster(i-ittypes)); + } + +#define GLYPH_MARKTODO 1 +#define GLYPH_MARKOVER 2 +#define GLYPH_LOCAL 4 +#define GLYPH_IMPORTANT 8 +#define GLYPH_NONUMBER 16 +#define GLYPH_DEMON 32 +#define GLYPH_RUNOUT 64 +#define GLYPH_INPORTRAIT 128 +#define GLYPH_LOCAL2 256 +#define GLYPH_TARGET 512 +#define GLYPH_INSQUARE 1024 + +eGlyphsortorder glyphsortorder; + +int zero = 0; + +int& ikmerge(int i) { + if(i < ittypes) return items[i]; + else if(i == ittypes) return zero; + else return kills[i-ittypes]; + } + +const int glyphs = ittypes + motypes; + +int gfirsttime[glyphs], glasttime[glyphs], gcopy[glyphs], ikland[glyphs]; +int glyphorder[glyphs]; + +void updatesort() { + for(int i=0; i gfirsttime[j]; + if(glyphsortorder == gsoLastTop) + return glasttime[i] > glasttime[j]; + if(glyphsortorder == gsoLastBottom) + return glasttime[i] < glasttime[j]; + if(glyphsortorder == gsoValue) + return ikmerge(i) > ikmerge(j); + if(glyphsortorder == gsoLand) + return ikland[i] < ikland[j]; + return 0; + } + +int glyphflags(int gid) { + int f = 0; + if(gid < ittypes) { + eItem i = eItem(gid); + if(itemclass(i) == IC_NAI) f |= GLYPH_NONUMBER; + if(isElementalShard(i)) { + f |= GLYPH_LOCAL | GLYPH_INSQUARE; + if(i == localshardof(cwt.c->land)) f |= GLYPH_LOCAL2; + } + if(i == treasureType(cwt.c->land)) + f |= GLYPH_LOCAL | GLYPH_LOCAL2 | GLYPH_IMPORTANT | GLYPH_INSQUARE; + if(i == itHolyGrail) { + if(items[i] >= 3) f |= GLYPH_MARKOVER; + } + else if(itemclass(i) == IC_TREASURE) { + if(items[i] >= 25 && items[i] < 100) f |= GLYPH_MARKOVER; + else if(items[i] < 10) f |= GLYPH_MARKTODO; + } + else { + f |= GLYPH_IMPORTANT | GLYPH_INSQUARE; + if(itemclass(i) == IC_ORB && items[i] < 10) f |= GLYPH_RUNOUT; + } + if(i == orbToTarget) f |= GLYPH_TARGET; + f |= GLYPH_INPORTRAIT; + } + else { + eMonster m = eMonster(gid-ittypes); + if(m == moLesser) f |= GLYPH_IMPORTANT | GLYPH_DEMON | GLYPH_INPORTRAIT | GLYPH_INSQUARE; + int isnat = isNative(cwt.c->land, m); + if(isnat) f |= GLYPH_LOCAL | GLYPH_IMPORTANT | GLYPH_INPORTRAIT | GLYPH_INSQUARE; + if(isnat == 2) f |= GLYPH_LOCAL2; + if(m == monsterToSummon) f |= GLYPH_TARGET; + } + return f; + } + +bool graphglyph() { + return vid.graphglyph == 2 || (vid.graphglyph == 1 && vid.monmode); + } + +bool displayglyph(int cx, int cy, int buttonsize, char glyph, int color, int qty, int flags, int id) { + + bool b = + mousex >= cx && mousex < cx+buttonsize && mousey >= cy-buttonsize/2 && mousey <= cy-buttonsize/2+buttonsize; + + int glsize = buttonsize; + if(glyph == '%' || glyph == 'M' || glyph == 'W') glsize = glsize*4/5; + + if(graphglyph()) { + initquickqueue(); + if(id >= ittypes) { + eMonster m = eMonster(id - ittypes); + int bsize = buttonsize; + if(m == moKrakenH) bsize /= 3; + if(m == moKrakenT || m == moDragonTail) bsize /= 2; + if(m == moSlime) bsize = (2*bsize+1)/3; + transmatrix V = atscreenpos(cx+buttonsize/2, cy, bsize); + int mcol = color; + mcol -= (color & 0xFCFCFC) >> 2; + drawMonsterType(m, NULL, V, mcol, 0); + } + else { + eItem it = eItem(id); + int bsize = buttonsize; + if(glyph =='*') bsize *= 2; + if(glyph == '$') bsize = (bsize*5+2)/3; + if(glyph == 'o') bsize = (bsize*3+1)/2; + if(glyph == 't') bsize = bsize*5/2; + if(it == itWarning) bsize *= 2; + if(it == itBombEgg || it == itTrollEgg || it == itDodeca) bsize = bsize*3/2; + transmatrix V = atscreenpos(cx+buttonsize/2, cy, bsize); + int icol = color; + icol -= (color & 0xFCFCFC) >> 2; + int ic = itemclass(it); + drawItemType(it, NULL, V, icol, (ic == IC_ORB || ic == IC_NAI) ? ticks*2 : ((glyph == 't' && qty%5) || it == itOrbYendor) ? ticks/2 : 0, false); + } + quickqueue(); + } + else if(glyph == '*') + displaychr(cx + buttonsize/2, cy+buttonsize/4, 0, glsize*3/2, glyph, darkenedby(color, b?0:1)); + else + displaychr(cx + buttonsize/2, cy, 0, glsize, glyph, darkenedby(color, b?0:1)); + + string fl = ""; + string str = its(qty); + + if(flags & GLYPH_TARGET) fl += "!"; + if(flags & GLYPH_LOCAL2) fl += "+"; + else if(flags & GLYPH_LOCAL) fl += "-"; + if(flags & GLYPH_DEMON) fl += "X"; + if(flags & GLYPH_MARKOVER) str += "!"; + + if(fl != "") + displaystr(cx + buttonsize, cy-buttonsize/2 + buttonsize/4, 0, buttonsize/2, fl, darkenedby(color, 0), 16); + + if(flags & GLYPH_NONUMBER) str = ""; + + int bsize = + (qty < 10 && (flags & (GLYPH_MARKTODO | GLYPH_RUNOUT))) ? buttonsize*3/4 : + qty < 100 ? buttonsize / 2 : + buttonsize / 3; + if(str != "") + displayfr(cx + buttonsize, cy + buttonsize/2 - bsize/2, 1, bsize, str, color, 16); + + return b; + } + +void displayglyph2(int cx, int cy, int buttonsize, int i) { + + char glyph = i < ittypes ? iinf[i].glyph : minf[i-ittypes].glyph; + int color = i < ittypes ? iinf[i].color : minf[i-ittypes].color; + int imp = glyphflags(i); + + if(displayglyph(cx, cy, buttonsize, glyph, color, ikmerge(i), imp, i)) { + instat = true; + getcstat = SDLK_F1; + if(i < ittypes) { + eItem it = eItem(i); + int t = itemclass(it); + if(t == IC_TREASURE) + mouseovers = XLAT("treasure collected: %1", it); + if(t == IC_OTHER) + mouseovers = XLAT("objects found: %1", it); + if(t == IC_NAI) + mouseovers = XLAT("%1", it); + if(t == IC_ORB) + mouseovers = XLAT("orb power: %1", eItem(i)); + if(it == itGreenStone) { + mouseovers += XLAT(" (click to drop)"); + getcstat = 'g'; + } + if(imp & GLYPH_LOCAL) mouseovers += XLAT(" (local treasure)"); + help = generateHelpForItem(it); + } + else { + eMonster m = eMonster(i-ittypes); + if(isMonsterPart(m)) + mouseovers = s0 + XLAT("parts destroyed: %1", m); + else if(isFriendly(m) && isNonliving(m)) + mouseovers = s0 + XLAT("friends destroyed: %1", m); + else if(isFriendly(m)) + mouseovers = s0 + XLAT("friends killed: %1", m); + else if(isNonliving(m)) + mouseovers = s0 + XLAT("monsters destroyed: %1", m); + else if(m == moTortoise) + mouseovers = s0 + XLAT("animals killed: %1", m); + else + mouseovers = s0 + XLAT("monsters killed: %1", m); + if(imp & GLYPH_LOCAL2) mouseovers += XLAT(" (killing increases treasure spawn)"); + else if(imp & GLYPH_LOCAL) mouseovers += XLAT(" (appears here)"); + help = generateHelpForMonster(m); + } + } + } + +bool nohud, nomenukey; + +hookset *hooks_prestats; + +void drawStats() { + callhandlers(false, hooks_prestats); +#ifdef ROGUEVIZ + if(rogueviz::on || nohud) return; +#endif + if(viewdists && sidescreen) { + distcolors[0] = forecolor; + dialog::init(""); + int qty[64]; + vector& ac = currentmap->allcells(); + for(int i=0; i<64; i++) qty[i] = 0; + for(int i=0; i= 0 && d < 64) qty[d]++; + } + if(geometry == gNormal) + for(int i=purehepta?6:8; i<=15; i++) + qty[i] = + purehepta ? + 3*qty[i-1] - qty[i-2] + : qty[i-1] + qty[i-2] + qty[i-3] - qty[i-4]; + if(geometry == gEuclid) + for(int i=8; i<=15; i++) qty[i] = 6*i; + for(int i=0; i<64; i++) if(qty[i]) + dialog::addInfo(its(qty[i]), distcolors[i&7]); + if(geometry == gNormal && !purehepta) { + dialog::addBreak(200); + dialog::addHelp("a(d+4) = a(d+3) + a(d+2) + a(d+1) - a(d)"); + dialog::addInfo("a(d) ~ 1.72208áµÂ", forecolor); + } + if(geometry == gNormal && purehepta) { + dialog::addBreak(200); + dialog::addHelp("a(d+2) = 3a(d+1) - a(d+2)"); + dialog::addInfo("a(d) ~ 2.61803áµÂ", forecolor); + } + if(geometry == gEuclid) { + dialog::addBreak(300); + dialog::addInfo("a(d) = 6d", forecolor); + } + dialog::display(); + } + if(sidescreen) return; + + if(vid.xres > vid.yres * 85/100 && vid.yres > vid.xres * 85/100) { + int bycorner[4]; + for(int u=0; u<4; u++) bycorner[u] = 0; + for(int i=0; i rad) { + spots++; + } + if(spots >= bycorner[cor] && spots >= 3) { + int next = 0; + vector glyphstoshow; + for(int i=0; i rad) { + if(next >= size(glyphstoshow)) break; + + int cx = u; + int cy = v + s/2; + if(cor&1) cx = vid.xres-1-s-cx; + if(cor&2) cy = vid.yres-1-cy; + + displayglyph2(cx, cy, s, glyphstoshow[next++]); + } + break; + } + } + } + return; + } + + instat = false; + bool portrait = vid.xres < vid.yres; + int colspace = portrait ? (vid.yres - vid.xres - vid.fsize*3) : (vid.xres - vid.yres - 16) / 2; + int rowspace = portrait ? vid.xres - 16 : vid.yres - vid.fsize * 4; + int colid[4], rowid[4]; + int maxbyclass[4]; + for(int z=0; z<4; z++) maxbyclass[z] = 0; + for(int i=0; i columns) { vid.killreduction++; continue; } + coltaken = 0; + } + colid[z] = coltaken, rowid[z] = 0, + coltaken += (maxbyclass[z] + rows-1) / rows; + } + if(coltaken > columns) { vid.killreduction++; continue; } + break; + } + + if(buttonsize <= vid.fsize*3/4) { + imponly = true; buttonsize = minsize; + rows = rowspace / buttonsize; if(!rows) return; + colid[0] = 0; colid[2] = portrait ? 1 : 0; + } + + updatesort(); + stable_sort(glyphorder, glyphorder+glyphs, glyphsort); + + for(int i0=0; i0= rows) rowid[z] = 0, colid[z]++; + + displayglyph2(cx, cy, buttonsize, i); + } + + string s0; + if(displayButtonS(vid.xres - 8, vid.fsize, "score: " + its(gold()), forecolor, 16, vid.fsize)) { + mouseovers = XLAT("Your total wealth"), + instat = true, + getcstat = SDLK_F1, + help = helptitle(XLAT("Your total wealth"), 0xFFD500) + + XLAT( + "The total value of the treasure you have collected.\n\n" + "Every world type contains a specific type of treasure, worth 1 $$$; " + "your goal is to collect as much treasure as possible, but every treasure you find " + "causes more enemies to hunt you in its native land.\n\n" + "Orbs of Yendor are worth 50 $$$ each.\n\n" + ); + } + if(displayButtonS(8, vid.fsize, "kills: " + its(tkills()), forecolor, 0, vid.fsize)) { + instat = true, + getcstat = SDLK_F1, + mouseovers = XLAT("Your total kills")+": " + its(tkills()), + help = helptitle(XLAT("Your total kills") + ": " + its(tkills()), 0x404040) + + XLAT( + "In most lands, more treasures are generated with each enemy native to this land you kill. " + "Moreover, 100 kills is a requirement to enter the Graveyard and the Hive.\n\n" + "Friendly creatures and parts of monsters (such as the Ivy) do appear in the list, " + "but are not counted in the total kill count."); + } + if(displayButtonS(4, vid.yres - 4 - vid.fsize/2, s0+VER+ " fps: " + its(calcfps()), 0x202020, 0, vid.fsize/2)) { + mouseovers = XLAT("frames per second"), + getcstat = SDLK_F1, + instat = true, + help = + helptitle(XLAT("frames per second"), 0xFF4040) + + XLAT( + "The higher the number, the smoother the animations in the game. " + "If you find that animations are not smooth enough, you can try " + "to change the options " + ) + +#ifdef IOS +XLAT( + "(in the MENU). You can reduce the sight range, this should make " + "the animations smoother."); +#else +XLAT( + "(press v) and change the wall/monster mode to ASCII, or change " + "the resolution."); +#endif + } + + achievement_display(); + + callhooks(hooks_stats); + } + diff --git a/hyper.cpp b/hyper.cpp index efb7727e..9559d1ac 100644 --- a/hyper.cpp +++ b/hyper.cpp @@ -387,11 +387,11 @@ else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { if(curphase == return 0; } +hookset *hooks_main; + #ifndef NOMAIN int main(int argc, char **argv) { -#ifdef EXTRA_MAIN - if(extra::main(argc, argv)) return 0; -#endif + if(callhandlers(false, hooks_main, argc, argv)) return 0; #ifndef WEB #ifdef LINUX moreStack(); @@ -409,25 +409,25 @@ int main(int argc, char **argv) { #endif #ifdef USE_COMMANDLINE +purehookset hooks_config; + +hookset *hooks_args; + namespace arg { int argc; char **argv; + + auto ah = addHook(hooks_args, 0, readCommon); void read(int phase) { curphase = phase; -#ifdef EXTRA_CONFIG - extra::config(); -#endif + callhooks(hooks_config); while(argc) { - int r; - r = readCommon(); if(r == 2) return; if(r == 0) { lshift(); continue; } -#ifdef EXTRA_ARG - r = extra::arg(); if(r == 2) return; if(r == 0) { lshift(); continue; } -#endif -#ifdef ROGUEVIZ - r = rogueviz::readArgs(); if(r == 2) return; if(r == 0) { lshift(); continue; } -#endif + for(auto& h: *hooks_args) { + int r = h.second(); if(r == 2) return; if(r == 0) { lshift(); goto cont; } + } printf("Unknown option: %s\n", args()); exit(3); + cont: ; } } } diff --git a/hyper.h b/hyper.h index 19c6162f..742032e1 100644 --- a/hyper.h +++ b/hyper.h @@ -151,6 +151,7 @@ void loadcs(FILE *f, charstyle& cs, int vernum); namespace multi { + extern bool shmupcfg; void recall(); extern cell *origpos[MAXPLAYER], *origtarget[MAXPLAYER]; extern int players; @@ -178,7 +179,11 @@ namespace multi { char hataction[MAXJOY][MAXHAT][4]; int deadzoneval[MAXJOY][MAXAXE]; }; - + + void saveConfig(FILE *f); + void loadConfig(FILE *f); + void initConfig(); + charstyle scs[MAXPLAYER]; bool playerActive(int p); @@ -186,9 +191,11 @@ namespace multi { cell *multiPlayerTarget(int i); void checklastmove(); void leaveGame(int i); + void showShmupConfig(); } namespace shmup { + using namespace multi; void recall(); extern bool on; extern bool safety; @@ -217,6 +224,7 @@ namespace shmup { void virtualRebase(cell*& base, transmatrix& at, bool tohex); void virtualRebase(shmup::monster *m, bool tohex); void fixStorage(); + void addShmupHelp(string& out); } // graph @@ -228,8 +236,6 @@ void showMissionScreen(); void restartGraph(); void resetmusic(); -void cleargraphmemory(); - void drawFlash(cell* c); void drawBigFlash(cell* c); void drawParticle(cell *c, int col, int maxspeed = 100); @@ -319,6 +325,7 @@ struct videopar { int flashtime; int wallmode, monmode, axes; + bool revcontrol; // for OpenGL float scrdist; @@ -331,6 +338,7 @@ struct videopar { #define AA_POLY 8 #define AA_LINEWIDTH 16 #define AA_FONT 32 + #define AA_MULTI 64 ld linewidth; int joyvalue, joyvalue2, joypanthreshold; @@ -351,30 +359,11 @@ struct videopar { extern videopar vid; -enum emtype {emNormal, emHelp, - emMenu, - emBasicConfig, emGraphConfig, emDisplayMode, - emChangeMode, emCustomizeChar, - emQuit, emDraw, emScores, emPickEuclidean, - emPickScores, - emShmupConfig, - emMapEditor, - emPatternPicker, - emOverview, - emNetgen, - emYendor, emTactic, emRugConfig, - emConformal, - emProgress, - emCheatMenu, emLeader, - emJoyConfig, - emColor, emNumber, - em3D, emRogueviz, - emLinepattern, - emPeace, emInventory, - emSlideshows - }; - -extern emtype cmode, lastmode; +extern vector< function > screens; + +template void pushScreen(T& x) { screens.push_back(x); } +inline void popScreen() { screens.pop_back(); } +inline void popScreenAll() { while(size(screens)>1) popScreen(); } extern transmatrix View; // current rotation, relative to viewctr extern transmatrix cwtV; // player-relative view @@ -390,26 +379,36 @@ namespace mapeditor { extern char whichCanvas; extern int displaycodes; int generateCanvas(cell *c); - void clearModelCells(); void applyModelcell(cell *c); int realpattern(cell *c); int patterndir(cell *c, char w = whichPattern); int subpattern(cell *c); extern cell *drawcell; void initdraw(cell *c); + void showMapEditor(); + void showDrawEditor(); } #ifndef NORUG namespace rug { extern bool rugged; + extern bool renderonce; + extern bool rendernogl; + extern int texturesize; + extern double scale; + void show(); void init(); void close(); void actDraw(); + void select(); void buildVertexInfo(cell *c, transmatrix V); } #endif #define HASLINEVIEW +#include +typedef complex cld; + namespace conformal { extern bool on; extern vector > killhistory; @@ -417,10 +416,15 @@ namespace conformal { extern vector movehistory; extern bool includeHistory; extern int rotation; + extern bool autoband; + extern bool autobandhistory; + extern bool dospiral; + extern ld lvspeed; + extern int bandsegment; + extern int bandhalf; void create(); void clear(); - void handleKey(); void show(); void apply(); void movetophase(); @@ -428,11 +432,16 @@ namespace conformal { extern vector v; extern double phase; + void applyIB(); } namespace polygonal { + static const int MSI = 120; extern int SI; extern ld STAR; + extern int deg; + extern complex coef[MSI]; + extern int maxcoef, coefid; void solve(); pair compute(ld x, ld y); } @@ -805,12 +814,15 @@ namespace dialog { int position; }; + extern vector items; + item& lastItem(); + extern unsigned int *palette; void addSelItem(string body, string value, int key); void addBoolItem(string body, bool value, int key); void addColorItem(string body, int value, int key); - void openColorDialog(int& col, unsigned int *pal); + void openColorDialog(int& col, unsigned int *pal = palette); void addHelp(string body); void addInfo(string body, int color = 0xC0C0C0); void addItem(string body, int key); @@ -821,9 +833,6 @@ namespace dialog { void init(string title, int color = 0xE8E8E8, int scale = 150, int brk = 60); void display(); - void drawColorDialog(int color); - int handleKeyColor(int sym, int uni, int& color); - void editNumber(ld& x, ld vmin, ld vmax, ld step, ld dft, string title, string help); void editNumber(int& x, int vmin, int vmax, int step, int dft, string title, string help); void scaleLog(); @@ -1002,6 +1011,7 @@ extern eGlyphsortorder glyphsortorder; namespace rogueviz { extern bool on; string describe(shmup::monster *m); + void describe(cell *c); void activate(shmup::monster *m); void drawVertex(const transmatrix &V, cell *c, shmup::monster *m); bool virt(shmup::monster *m); @@ -1011,6 +1021,8 @@ namespace rogueviz { int readArgs(); void close(); void mark(cell *c); + void showMenu(); + string makehelp(); } #endif @@ -1149,11 +1161,10 @@ namespace tour { extern string slidecommand; extern int currentslide; - bool handleKeyTour(int sym, int uni); - enum presmode { pmStartAll = 0, pmStart = 1, pmFrame = 2, pmStop = 3, pmKey = 4, pmRestart = 5, + pmAfterFrame = 6, pmGeometry = 11, pmGeometryReset = 13, pmGeometryStart = 15 }; @@ -1192,7 +1203,6 @@ namespace tour { namespace ss { void showMenu(); - void handleKey(int sym, int uni); void list(slide*); } @@ -1218,6 +1228,8 @@ extern bool dronemode; extern ld whatever; +enum screenmode { smMenu, smNormal, smMission, smHelp, smMap, smDraw, smNumber, smShmupConfig, smOverview }; + namespace linepatterns { enum ePattern { @@ -1242,6 +1254,7 @@ namespace linepatterns { void clearAll(); void setColor(ePattern id, int col); void drawAll(); + void showMenu(); }; transmatrix ddspin(cell *c, int d, int bonus = 0); @@ -1290,3 +1303,145 @@ bool graphglyph(); extern bool hiliteclick; extern int antialiaslines; extern int ringcolor; + +#include + +template class hookset : public map> {}; +typedef hookset *purehookset; + +template int addHook(hookset*& m, int prio, const U& hook) { + if(!m) m = new hookset (); + (*m)[prio] = hook; + return 0; + } + +extern purehookset hooks_frame, hooks_stats, clearmemory; + +template void callhooks(hookset *h, U... args) { + if(h) for(auto& p: *h) p.second(args...); + } + +template V callhandlers(V zero, hookset *h, U... args) { + if(h) for(auto& p: *h) { + auto z = p.second(args...); + if(z != zero) return z; + } + return zero; + } + +extern hookset *hooks_handleKey; +extern hookset *hooks_drawcell; +extern hookset *hooks_main; +extern hookset *hooks_args; +extern hookset *hooks_nextland; + +// hooks to extend HyperRogue with an external program +// start compilation from another file which defines EXTRA_..., includes +// hyper.cpp, then defines the necessary functions + +extern ld shiftmul; +void initcs(charstyle &cs); +charstyle& getcs(); + +struct msginfo { + int stamp; + char flashout; + char spamtype; + int quantity; + string msg; + }; + +extern vector msgs; +void flashMessages(); + +extern int lightat, safetyat; + +int watercolor(int phase); +bool doHighlight(); +string buildHelpText(); +string buildCredits(); +void setAppropriateOverview(); +bool quitsaves(); +extern bool sidescreen; + +static const char* COLORBAR = "###"; +int textwidth(int siz, const string &str); +#define GLERR(call) glError(call, __FILE__, __LINE__) + +extern bool gtouched, mousepressed, mousemoved, actonrelease; +extern bool inslider; + +#ifdef ROGUEVIZ +#define DOSHMUP (shmup::on || rogueviz::on) +#else +#define DOSHMUP shmup::on +#endif + +extern bool outoffocus; +extern int frames; +extern transmatrix playerV; +extern bool didsomething; +extern void drawStats(); +extern int calcfps(); +extern int distcolors[8]; + +extern eItem orbToTarget; +extern eMonster monsterToSummon; + +void panning(hyperpoint hf, hyperpoint ht); +extern transmatrix sphereflip; + +void initConfig(); +void loadConfig(); + +extern bool auraNOGL; + +#ifndef NOSDL +extern void initJoysticks(); +extern int joyx, joyy, panjoyx, panjoyy; +extern bool autojoy; +extern movedir joydir; +extern SDL_Joystick* sticks[8]; +extern int numsticks; +void closeJoysticks(); +#endif + +void preparesort(); + +#ifdef MOBILE +#define SHMUPTITLE "shoot'em up mode" +#else +#define SHMUPTITLE "shoot'em up and multiplayer" +#endif + +bool dodrawcell(cell *c); +void drawcell(cell *c, transmatrix V, int spinv, bool mirrored); +extern double downspin; + +extern int frameid; +extern bool leftclick; +void clearMemory(); + +extern function keyhandler; +void gmodekeys(int sym, int uni); + +void switchGL(); +void switchFullscreen(); +extern screenmode cmode2; + +void gotoHelp(const string& h); +void showCustomizeChar(); +void showScores(); +void showPickScores(); +void showCheatMenu(); +void showDisplayMode(); +void showChangeMode(); +void showEuclideanMenu(); +void show3D(); +void gameoverscreen(); +void showJoyConfig(); + +void gamescreen(int darken); +void showMission(); +void handleKeyQuit(int sym, int uni); +void handlePanning(int sym, int uni); diff --git a/hyperpoint.cpp b/hyperpoint.cpp index 171d890f..eb30d027 100644 --- a/hyperpoint.cpp +++ b/hyperpoint.cpp @@ -474,3 +474,5 @@ transmatrix mzscale(const transmatrix& t, double fac) { return res; } +transmatrix pushone() { return euclid ? eupush(1, 0) : xpush(sphere?.5 : 1); } + diff --git a/hypgraph.cpp b/hypgraph.cpp new file mode 100644 index 00000000..011affe5 --- /dev/null +++ b/hypgraph.cpp @@ -0,0 +1,561 @@ +ld ghx, ghy, ghgx, ghgy; +hyperpoint ghpm = C0; + +void ghcheck(hyperpoint &ret, const hyperpoint &H) { + if(hypot(ret[0]-ghx, ret[1]-ghy) < hypot(ghgx-ghx, ghgy-ghy)) { + ghpm = H; ghgx = ret[0]; ghgy = ret[1]; + } + } + +void camrotate(ld& hx, ld& hy) { + ld cam = vid.camera_angle * M_PI / 180; + GLfloat cc = cos(cam); + GLfloat ss = sin(cam); + ld ux = hx, uy = hy * cc + ss, uz = cc - ss * hy; + hx = ux / uz, hy = uy / uz; + } + +hyperpoint gethyper(ld x, ld y) { + + ld hx = (x - vid.xcenter) / vid.radius; + ld hy = (y - vid.ycenter) / vid.radius; + + if(pmodel) { + ghx = hx, ghy = hy; + return ghpm; + } + + if(euclid) + return hpxy(hx * (EUCSCALE + vid.alphax), hy * (EUCSCALE + vid.alphax)); + + if(vid.camera_angle) camrotate(hx, hy); + + ld hr = hx*hx+hy*hy; + + if(hr > .9999 && !sphere) return Hypc; + + // hz*hz-(hx/(hz+alpha))^2 - (hy/(hz+alpha))^2 = + + // hz*hz-hr*(hz+alpha)^2 == 1 + // hz*hz - hr*hr*hz*Hz + + + ld A, B, C; + + ld curv = sphere ? 1 : -1; + + A = 1+curv*hr; + B = 2*hr*vid.alphax*-curv; + C = 1 - curv*hr*vid.alphax*vid.alphax; + + // Az^2 - Bz = C + B /= A; C /= A; + + // z^2 - Bz = C + // z^2 - Bz + (B^2/4) = C + (B^2/4) + // z = (B/2) + sqrt(C + B^2/4) + + ld rootsign = 1; + if(sphere && vid.alphax > 1) rootsign = -1; + + ld hz = B / 2 + rootsign * sqrt(C + B*B/4); + + hyperpoint H; + H[0] = hx * (hz+vid.alphax); + H[1] = hy * (hz+vid.alphax); + H[2] = hz; + + return H; + } + +void ballmodel(hyperpoint& ret, double alpha, double d, double zl) { + hyperpoint H = ypush(geom3::camera) * xpush(d) * ypush(zl) * C0; + ld tzh = vid.ballproj + H[2]; + ld ax = H[0] / tzh; + ld ay = H[1] / tzh; + ld ball = vid.ballangle * M_PI / 180; + + ld ca = cos(alpha), sa = sin(alpha); + ld cb = cos(ball), sb = sin(ball); + + ret[0] = ax * ca; + ret[1] = ay * cb + ax * sa * sb; + ret[2] = - ax * sa * cb - ay * sb; + } + +void applymodel(hyperpoint H, hyperpoint& ret) { + + ld tz = euclid ? (EUCSCALE+vid.alphax) : vid.alphax+H[2]; + if(tz < 1e-3 && tz > -1e-3) tz = 1000; + + if(pmodel == mdUnchanged) { + for(int i=0; i<3; i++) ret[i] = H[i] / vid.radius; + return; + } + + if(pmodel == mdBall) { + ld zlev = zlevel(H); + using namespace hyperpoint_vec; + H = H / zlev; + + ld zl = geom3::depth-geom3::factor_to_lev(zlev); + double alpha = atan2(H[1], H[0]); + double d = hdist0(H); + + ballmodel(ret, alpha, d, zl); + ghcheck(ret,H); + + return; + } + + if(pmodel == mdHyperboloid) { + + ld ball = vid.ballangle * M_PI / 180; + ld cb = cos(ball), sb = sin(ball); + + ret[0] = H[0] / 3; + ret[1] = (1 - H[2]) / 3 * cb + H[1] / 3 * sb; + ret[2] = H[1] / 3 * cb - (1 - H[2]) / 3 * sb; + + ghcheck(ret,H); + return; + } + + if(pmodel == mdDisk) { + + if(!vid.camera_angle) { + ret[0] = H[0] / tz; + ret[1] = H[1] / tz; + ret[2] = (1 - vid.beta / tz); + } + else { + ld tx = H[0]; + ld ty = H[1]; + ld cam = vid.camera_angle * M_PI / 180; + GLfloat cc = cos(cam); + GLfloat ss = sin(cam); + ld ux = tx, uy = ty * cc - ss * tz, uz = tz * cc + ss * ty; + ret[0] = ux / uz; + ret[1] = uy / uz; + ret[2] = 1 - vid.beta / uz; + } + return; + } + + ld zlev = 1; + + if(wmspatial || mmspatial) { + zlev = zlevel(H); + using namespace hyperpoint_vec; + H = H / zlev; + } + + if(pmodel == mdEquidistant || pmodel == mdEquiarea) { + ld rad = sqrt(H[0] * H[0] + H[1] * H[1]); + ld d = hdist0(H); + if(pmodel == 6 && sphere) + d = sqrt(2*(1 - cos(d))) * 1.25; // /1.5 to make it fit on the screen better + else if(pmodel == 6) + d = sqrt(2*(cosh(d) - 1)) / 1.5; + ret[0] = d * H[0] / rad / 4; + ret[1] = d * H[1] / rad / 4; + ret[2] = 0; + if(zlev != 1 && vid.goteyes) + ret[2] = geom3::factor_to_lev(zlev); + ghcheck(ret,H); + return; + } + + tz = H[2]+vid.alphax; + + if(pmodel == mdPolygonal || pmodel == mdPolynomial) { + pair p = polygonal::compute(H[0]/tz, H[1]/tz); + ret[0] = p.first; + ret[1] = p.second; + ret[2] = 0; + ghcheck(ret,H); + return; + } + + // Poincare to half-plane + + ld x0, y0; + x0 = H[0] / tz; + y0 = H[1] / tz; + y0 += 1; + double rad = x0*x0 + y0*y0; + y0 /= rad; + x0 /= rad; + y0 -= .5; + + if(pmodel == mdHalfplane) { + ret[0] = x0; + if(wmspatial || mmspatial) y0 *= zlev; + ret[1] = 1 - y0; + ret[2] = 0; + if(zlev != 1 && vid.goteyes) + ret[2] = y0 * geom3::factor_to_lev(zlev); + ghcheck(ret,H); + return; + } + + // center + x0 *= 2; y0 *= 2; + + // half-plane to band + double tau = (log((x0+1)*(x0+1) + y0*y0) - log((x0-1)*(x0-1) + y0*y0)) / 2; + double u=(1-x0*x0-y0*y0); + u = (1 - x0*x0 - y0*y0 + sqrt(u*u+4*y0*y0)); + double yv = 2*y0 / u; + double sigma = 2 * atan(yv * zlev) - M_PI/2; + + x0 = tau; y0 = sigma; + + /* if(zlev != 1) { + double alp = (y0 * y0) / (1-y0*y0); + double gx = alp + sqrt(alp*alp-1); + double gy = y0 * (gx+1); + double yr = zlev * gy / (zlev * gx + 1); + printf("zlev = %10.5lf y0 = %20.10lf yr = %20.10lf\n", double(zlev), (double)y0, yr); + y0 = yr; + } */ + + ret[0] = x0/M_PI*2; + ret[1] = -y0/M_PI*2; + ret[2] = 0; + + if(zlev != 1 && vid.goteyes) + ret[2] = geom3::factor_to_lev(zlev) / (1 + yv * yv); + + ghcheck(ret,H); + } + +// game-related graphics + +transmatrix View; // current rotation, relative to viewctr +transmatrix cwtV; // player-relative view +transmatrix sphereflip; // on the sphere, flip +heptspin viewctr; // heptagon and rotation where the view is centered at +bool playerfound; // has player been found in the last drawing? + +double eurad = 0.52; +double q3 = sqrt(double(3)); + +bool outofmap(hyperpoint h) { + if(euclid) + return false; // h[0] * h[0] + h[1] * h[1] > 15 * eurad; + else if(sphere) + return h[2] < .1 && h[2] > -.1 && h[1] > -.1 && h[1] < .1 && h[0] > -.1 && h[0] < .1; + else + return h[2] < .5; + } + +hyperpoint mirrorif(const hyperpoint& V, bool b) { + if(b) return Mirror*V; + else return V; + } + +// -1 if away, 0 if not away +int away(const transmatrix& V2) { + return intval(C0, V2 * xpush0(1)) > intval(C0, tC0(V2)); + } + +/* double zgrad(double f1, double f2, int nom, int den) { + using namespace geom3; + ld fo1 = factor_to_lev(f1); + ld fo2 = factor_to_lev(f2); + return lev_to_factor(fo1 + (fo2-fo1) * nom / den); + } */ + +double zgrad0(double l1, double l2, int nom, int den) { + using namespace geom3; + return lev_to_factor(l1 + (l2-l1) * nom / den); + } + +bool behindsphere(const hyperpoint& h) { + if(!sphere) return false; + + if(vid.alpha > 1) { + if(h[2] > -1/vid.alpha) return true; + } + + if(vid.alpha <= 1) { + if(h[2] < -.8) return true; + } + + return false; + } + +bool behindsphere(const transmatrix& V) { + return behindsphere(tC0(V)); + } + +bool confusingGeometry() { + return elliptic || quotient == 1 || torus; + } + +void drawrec(const heptspin& hs, int lev, hstate s, const transmatrix& V) { + + // shmup::calc_relative_matrix(cwt.c, hs.h); + + cell *c = hs.h->c7; + + transmatrix V10; + const transmatrix& V1 = hs.mirrored ? (V10 = V * Mirror) : V; + + if(dodrawcell(c)) { + reclevel = maxreclevel - lev; + drawcell(c, (hs.spin || purehepta) ? V1 * spin(hs.spin*2*M_PI/S7 + (purehepta ? M_PI:0)) : V1, hs.spin, + hs.mirrored); + } + + if(lev <= 0) return; + + if(!purehepta) for(int d=0; dmov[ds] && c->spn(ds) == 0 && dodrawcell(c->mov[ds])) { + drawcell(c->mov[ds], V1 * hexmove[d], 0, hs.mirrored ^ c->mirror(ds)); + } + } + + if(lev <= 1) return; + + for(int d=0; d= 16384 * eurad) Mat[0][2] -= 32768 * eurad; + while(Mat[1][2] <= -16384 * q3 * eurad) Mat[1][2] += 32768 * q3 * eurad; + while(Mat[1][2] >= 16384 * q3 * eurad) Mat[1][2] -= 32768 * q3 * eurad; + return Mat; + } + +transmatrix eumovedir(int d) { + d = fix6(d); + switch(d) { + case 0: return eumove(1,0); + case 1: return eumove(0,1); + case 2: return eumove(-1,1); + case 3: return eumove(-1,0); + case 4: return eumove(0,-1); + case 5: return eumove(1,-1); + } + return eumove(0,0); + } + +void drawEuclidean() { + DEBB(DF_GRAPH, (debugfile,"drawEuclidean\n")); + eucoord px=0, py=0; + if(!centerover) centerover = cwt.c; + // printf("centerover = %p player = %p [%d,%d]-[%d,%d]\n", lcenterover, cwt.c, + // mindx, mindy, maxdx, maxdy); + int pid; + const bool b = torus; + if(b) + pid = decodeId(centerover->master); + else + decodeMaster(centerover->master, px, py); + + int minsx = mindx-1, maxsx=maxdx+1, minsy=mindy-1, maxsy=maxdy+1; + mindx=maxdx=mindy=maxdy=0; + + for(int dx=minsx; dx<=maxsx; dx++) + for(int dy=minsy; dy<=maxsy; dy++) { + reclevel = eudist(dx, dy); + cell *c; + transmatrix Mat; + if(b) { + reclevel = eudist(dx, dy); + c = getTorusId(pid+torusconfig::dx*dx+torusconfig::dy*dy); + Mat = eumove(dx,dy); + } + else { + eucoord x = dx+px; + eucoord y = dy+py; + c = euclideanAt(x,y); + Mat = eumove(x, y); + } + if(!c) continue; + Mat = View * Mat; + + // Mat[0][0] = -1; + // Mat[1][1] = -1; + + // Mat[2][0] = x*x/10; + // Mat[2][1] = y*y/10; + // Mat = Mat * xpush(x-30) * ypush(y-30); + + int cx, cy, shift; + getcoord0(tC0(Mat), cx, cy, shift); + if(cx >= 0 && cy >= 0 && cx < vid.xres && cy < vid.yres) { + if(dx < mindx) mindx = dx; + if(dy < mindy) mindy = dy; + if(dx > maxdx) maxdx = dx; + if(dy > maxdy) maxdy = dy; + } + + if(dodrawcell(c)) { + drawcell(c, Mat, 0, false); + } + } + } + +void spinEdge(ld aspd) { + if(downspin > aspd) downspin = aspd; + if(downspin < -aspd) downspin = -aspd; + View = spin(downspin) * View; + } + +void centerpc(ld aspd) { + if(vid.sspeed >= 4.99) aspd = 1000; + DEBB(DF_GRAPH, (debugfile,"center pc\n")); + hyperpoint H = ypush(-vid.yshift) * sphereflip * tC0(cwtV); + if(H[0] == 0 && H[1] == 0) return; // either already centered or direction unknown + ld R = hdist0(H); // = sqrt(H[0] * H[0] + H[1] * H[1]); + if(R < 1e-9) { + /* if(playerfoundL && playerfoundR) { + + } */ + spinEdge(aspd); + fixmatrix(View); + return; + } + + if(euclid) { + // Euclidean + aspd *= (2+3*R*R); + if(aspd > R) aspd = R; + + View[0][2] -= cwtV[0][2] * aspd / R; + View[1][2] -= cwtV[1][2] * aspd / R; + } + + else { + aspd *= (1+R+(shmup::on?1:0)); + + if(R < aspd) { + View = gpushxto0(H) * View; + } + else + View = rspintox(H) * xpush(-aspd) * spintox(H) * View; + + fixmatrix(View); + spinEdge(aspd); + } + } + +void optimizeview() { + + DEBB(DF_GRAPH, (debugfile,"optimize view\n")); + int turn = 0; + ld best = INF; + + transmatrix TB = Id; + + for(int i=-1; i= 0) { + View = View * TB; + fixmatrix(View); + viewctr = hsspin(viewctr, turn); + viewctr = hsstep(viewctr, 0); + } + } + +void addball(ld a, ld b, ld c) { + hyperpoint h; + ballmodel(h, a, b, c); + for(int i=0; i<3; i++) h[i] *= vid.radius; + curvepoint(h); + } + +void ballgeometry() { + queuereset(vid.usingGL ? mdDisk : mdUnchanged, PPR_CIRCLE); + for(int i=0; i<60; i++) + addball(i * M_PI/30, 10, 0); + for(double d=10; d>=-10; d-=.2) + addball(0, d, 0); + for(double d=-10; d<=10; d+=.2) + addball(0, d, geom3::depth); + addball(0, 0, -geom3::camera); + addball(0, 0, geom3::depth); + addball(0, 0, -geom3::camera); + addball(0, -10, 0); + addball(0, 0, -geom3::camera); + queuecurve(darkena(0xFF, 0, 0x80), 0, PPR_CIRCLE); + queuereset(pmodel, PPR_CIRCLE); + } + +void resetview() { + DEBB(DF_GRAPH, (debugfile,"reset view\n")); + View = Id; + // EUCLIDEAN + if(!euclid) + viewctr.h = cwt.c->master, + viewctr.spin = cwt.spin; + else centerover = cwt.c; + // SDL_LockSurface(s); + // SDL_UnlockSurface(s); + } + + +void panning(hyperpoint hf, hyperpoint ht) { + View = + rgpushxto0(hf) * rgpushxto0(gpushxto0(hf) * ht) * gpushxto0(hf) * View; + playermoved = false; + } + +void fullcenter() { + if(playerfound && false) centerpc(INF); + else { + bfs(); + resetview(); + drawthemap(); + centerpc(INF); + } + playermoved = true; + } + +transmatrix screenpos(ld x, ld y) { + transmatrix V = Id; + V[0][2] += (x - vid.xcenter) / vid.radius * (1+vid.alphax); + V[1][2] += (y - vid.ycenter) / vid.radius * (1+vid.alphax); + return V; + } + +transmatrix atscreenpos(ld x, ld y, ld size) { + transmatrix V = Id; + + V[0][2] += (x - vid.xcenter); + V[1][2] += (y - vid.ycenter); + V[0][0] = size * 2 * hcrossf / crossf; + V[1][1] = size * 2 * hcrossf / crossf; + V[2][2] = vid.scrdist; + if(euclid) V[2][2] /= EUCSCALE; + + return V; + } + diff --git a/init.cpp b/init.cpp index 60040dfd..5402e750 100644 --- a/init.cpp +++ b/init.cpp @@ -1,6 +1,6 @@ -#define VER "9.4n1" -#define VERNUM 9415 -#define VERNUM_HEX 0x9415 +#define VER "9.4n2" +#define VERNUM 9416 +#define VERNUM_HEX 0x9416 #define GEN_M 0 #define GEN_F 1 @@ -276,6 +276,23 @@ const char *loadlevel = NULL; #ifdef EXTRA #include "extra/extra.cpp" #endif +#include "basegraph.cpp" +#include "help.cpp" +#include "config.cpp" +#include "scores.cpp" +#include "menus.cpp" +#ifdef FIXEDSIZE +#include "nofont.cpp" +#endif +#include "shmup.cpp" +#ifdef ROGUEVIZ +#include "rogueviz.cpp" +#endif +#include "conformal.cpp" +#include "rug.cpp" +#include "control.cpp" +#include "hud.cpp" +#include "hypgraph.cpp" #include "graph.cpp" #include "sound.cpp" #include "achievement.cpp" @@ -299,7 +316,6 @@ void initAll() { eLand f = firstland; // initlanguage(); - cmode = emNormal; initgraph(); #ifndef NOSAVE loadsave(); @@ -396,7 +412,7 @@ bool useRangedOrb; void handleclick(MOBPAR_FORMAL) { - if(!shmup::on && andmode == 0 && cmode == emNormal && canmove && !useRangedOrb && vid.mobilecompasssize > 0) { + if(!shmup::on && andmode == 0 && size(screens) == 1 && canmove && !useRangedOrb && vid.mobilecompasssize > 0) { using namespace shmupballs; int dx = mousex - xmove; int dy = mousey - yb; @@ -404,7 +420,7 @@ void handleclick(MOBPAR_FORMAL) { if(h < rad) { if(h < rad*SKIPFAC) movepcto(MD_WAIT); else { - double d = revcontrol ? -1 : 1; + double d = vid.revcontrol ? -1 : 1; mouseh = hpxy(dx * d / rad, dy * d / rad); mousemovement(); } @@ -415,7 +431,7 @@ void handleclick(MOBPAR_FORMAL) { if(buttonclicked || mouseout()) { - if(andmode == 0 && getcstat == 'g' && !shmup::on && (cmode == emNormal || cmode == emQuit)) { + if(andmode == 0 && getcstat == 'g' && !shmup::on && size(screens) == 1) { movepcto(MD_DROP); getcstat = 0; } @@ -424,7 +440,7 @@ void handleclick(MOBPAR_FORMAL) { int px = mousex < vid.xcenter ? 0 : 1; int py = mousey < vid.ycenter ? 0 : 1; - if(cmode == (canmove ? emNormal : emQuit)) { + if(size(screens) == 1) { if(px == 0 && py == 1) { if(andmode == 0 && shmup::on) ; else andmode = 10; @@ -456,7 +472,7 @@ void handleclick(MOBPAR_FORMAL) { } } - if(andmode == 0 && cmode == (canmove ? emNormal : emQuit) && !mouseout()) { + if(andmode == 0 && size(screens) == 1 && !mouseout()) { bool forcetarget = longclick; @@ -499,7 +515,7 @@ void mobile_draw(MOBPAR_FORMAL) { if(playermoved && vid.sspeed > -4.99) centerpc(tdiff / 1000.0 * exp(vid.sspeed)); - if(shmup::on && (andmode == 0 || andmode == 10) && cmode == emNormal) + if(shmup::on && (andmode == 0 || andmode == 10) && size(screens) == 1) shmup::turn(tdiff); safety = false; @@ -520,7 +536,7 @@ void mobile_draw(MOBPAR_FORMAL) { if(hypot(mousex - xmove, mousey - yb) < rad) targetclick = false; } - if(cmode == emNormal) { + if(size(screens) == 1) { lmouseover = (gtouched && lclicked) ? mouseover : NULL; if(!shmup::on && !useRangedOrb && vid.mobilecompasssize) { using namespace shmupballs; @@ -530,7 +546,7 @@ void mobile_draw(MOBPAR_FORMAL) { if(h < rad) { if(h < rad*SKIPFAC) { lmouseover = cwt.c; mousedest.d = -1; } else { - double d = revcontrol ? -1 : 1; + double d = vid.revcontrol ? -1 : 1; mouseh = hpxy(dx * d / rad, dy * d / rad); calcMousedest(); } @@ -556,6 +572,8 @@ void mobile_draw(MOBPAR_FORMAL) { shiftmul = getcshift; calcMousedest(); + inmenu = size(screens) > 1; + if(lclicked && !clicked && !inmenu) handleclick(MOBPAR_ACTUAL); if(inmenu && !clicked && !lclicked) inmenu = false; @@ -581,29 +599,20 @@ void mobile_draw(MOBPAR_FORMAL) { #ifdef ANDROIDSHARE if(getcstat == 's'-96 && keyreact) { - cmode = canmove ? emQuit : emNormal; + popScreenAll(). shareScore(MOBPAR_ACTUAL); - cmode = emNormal; } #endif - if(andmode == 2 && cmode != emNormal) andmode = 12; + if(andmode == 2 && size(screens) != 1) andmode = 12; if((cmode == emQuit && !canmove && keyreact && lclicked && !clicked) && !buttonclicked) { - cmode = emNormal; printf("back to quit\n"); + popScreenAll(); printf("back to quit\n"); } else if(cmode == emScores) handleScoreKeys(0, 0); else if(getcstat && keyreact) { - - if(cmode == (canmove ? emQuit : emNormal)) - handleQuit(getcstat, getcstat); - - else { - if(cmode != emNormal && cmode != emQuit) inmenu = true; - if(cmode == emMenu && getcstat == 'q') openURL(); - else { extra ex; handlekey(getcstat, getcstat, ex); } - } - + if(cmode == emMenu && getcstat == 'q') openURL(); + else { extra ex; handlekey(getcstat, getcstat, ex); } } #ifdef IOS @@ -621,7 +630,7 @@ void mobile_draw(MOBPAR_FORMAL) { if(andmode == 1 && lclicked && !clicked && !inmenu && mouseover) performMarkCommand(mouseover); - if(clicked && andmode == 2 && (mouseover != lmouseover || mouseovers != lmouseovers) && cmode == emNormal) { + if(clicked && andmode == 2 && (mouseover != lmouseover || mouseovers != lmouseovers) && !inmenu) { addMessage(mouseovers); lmouseovers = mouseovers; } @@ -630,7 +639,7 @@ void mobile_draw(MOBPAR_FORMAL) { if(andmode == 20 && clicked != lclicked) andmode = 10; if(andmode == 2 && lclicked && !clicked) { - if(cmode == emNormal) + if(!inmenu) showHelp(MOBPAR_ACTUAL, help); else if(cmode != emScores && cmode != emPickScores) cmode = emNormal; @@ -664,35 +673,3 @@ void mobile_draw(MOBPAR_FORMAL) { #ifdef NOAUDIO void playSound(cell*, const string &s, int vol) { printf("play sound: %s vol %d\n", s.c_str(), vol); } #endif - -// optional hooks -// you may include hyper.cpp from another file and define EXTRA_... to change some things -namespace extra { - - // on drawing cells - void drawcell(cell *c, const transmatrix& V); - - // on each frame - void frame(); - - // on stats drawing - void stats(); - - // return true if key is handled - bool handleKey(int sym, int uni); - - // return true to exit immediately - bool main(int argc, char **argv); - - // extra configuration, called together with reading arguments - void config(); - - // read command line arguments - int arg(); - - // change land distribution - eLand getNext(eLand old); - - // change musics - bool changeMusic(eLand id); - } diff --git a/kohonen.cpp b/kohonen.cpp index 6b8d8694..c7bbce43 100644 --- a/kohonen.cpp +++ b/kohonen.cpp @@ -68,9 +68,9 @@ void loadsamples(const char *fname) { while(true) { sample s; alloc(s.val); - for(int i=0; i *hooks_nextland; + eLand getNewLand(eLand old) { -#ifdef EXTRA_NEWLAND - if(true) { - eLand l = extra::getNext(old); - if(l) return l; - } -#endif - - #ifdef TOUR - if(tour::on) { - eLand l = tour::getNext(old); - if(l) return l; - } - - if(peace::on) { - eLand l = peace::getNext(old); - if(l) return l; - } - #endif - + eLand l = callhandlers(laNone, hooks_nextland, old); + if(l) return l; + if(cheatdest != old) if(!isCyclic(cheatdest) && !isTechnicalLand(cheatdest)) return cheatdest; if(old == laTortoise) return laDragon; diff --git a/language-data.cpp b/language-data.cpp new file mode 100644 index 00000000..8418d2d4 --- /dev/null +++ b/language-data.cpp @@ -0,0 +1,14103 @@ +// #warning Missing [TR]: "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)" +// #warning Missing [TR]: "\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the same kind." +// #warning Missing [TRDE]: "\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen." +// #warning Missing [TRDE]: "\n\nEasy %1 might disappear when you collect more of its kind." +// #warning Missing [TRDE]: "\n\nFast flying creatures may attack or go against gravity only in their first move." +// #warning Missing [TR]: "\n\nOnce you collect 10 Bomberbird Eggs, stepping on a cell with no adjacent mines also reveals the adjacent cells. Collecting even more Eggs will increase the radius. Additionally, collecting 25 Bomberbird Eggs will reveal adjacent cells even in your future games." +// #warning Missing [TRDE]: "\n\nSee sounds/credits.txt for credits for sound effects" +// #warning Missing [TR]: "\n\nThis Orb is triggered on your first attack or illegal move." +// #warning Missing [TR]: "\n\nThis Orb protects you from attacks, scents, and insulates you from electricity. It does not let you go through deadly terrain, but if you are attacked with fire, it lets you stay in place in it." +// #warning Missing [TR]: "\n\nThis is a friendly being. It does not count for your total kills." +// #warning Missing [TR]: "\n\nThis is a part of a monster. It does not count for your total kills." +// #warning Missing [TR]: "\n\nTortoises are not monsters! They are just annoyed. They do not count for your total kills." +// #warning Missing [TR]: "\nRanged Orbs can be targeted by clicking the desired location. " +// #warning Missing [TR]: "\nRanged Orbs can be targeted by long touching the desired location." +// #warning Missing [TR]: "\nRanged Orbs can be targeted by shift-clicking the desired location. " +// #warning Missing [TR]: "\nRanged Orbs can be targeted by touching the desired location." +// #warning Missing [TRDE]: "\nSpawn rate (as prize Orb): %1%/%2\n" +// #warning Missing [TRDE]: "\nSpawn rate (in Hubs): %1%/%2\n" +// #warning Missing [TRDE]: "\nSpecial conduct (still valid)\n" +// #warning Missing [TRDE]: "\nSpecial conduct failed:\n" +// #warning Missing [TR]: "\nThis is a ranged Orb. " +// #warning Missing [TR]: "\nYou can never target cells which are adjacent to the player character, or ones out of the sight range." +// #warning Missing [TR]: " %1" +// #warning Missing [TRDE]: " (appears here)" +// #warning Missing [TRDE]: " (increases treasure spawn)" +// #warning Missing [TRDE]: " (local treasure)" +// #warning Missing [TRDE]: " You need to go deep to collect lots of them." +// #warning Missing [TR]: " kills: %1/%2" +// #warning Missing [TR]: "\"Be careful in the Rose Garden! It is beautiful, but very dangerous!\"" +// #warning Missing [TRDE]: "\"It is not possession but the act of getting there, " +// #warning Missing [TR]: "\"Thank you very much for talking, and have a great rest of your day!\"" +// #warning Missing [TRDE]: "\"There is no branch of mathematics, however abstract, " +// #warning Missing [TRDE]: "\"There is no royal road to geometry.\"" +// #warning Missing [TRDE]: "\"We live in a beautiful and orderly world, " +// #warning Missing [TRDE]: "%1 turns" +// #warning Missing [TR]: "%The1 attacks your shell!" +// #warning Missing [TR]: "%The1 breathes fire at %the2!" +// #warning Missing [TR]: "%The1 breathes fire at you!" +// #warning Missing [TR]: "%The1 breathes fire!" +// #warning Missing [TRDE]: "%The1 crashes into %the2!" +// #warning Missing [TR]: "%The1 destroys your boat!" +// #warning Missing [TR]: "%The1 hits %the2." +// #warning Missing [TR]: "%The1 is destroyed by the Flash." +// #warning Missing [TRDE]: "%The1 is destroyed!" +// #warning Missing [TRDE]: "%The1 is filled!" +// #warning Missing [TR]: "%The1 is killed by thorns!" +// #warning Missing [TRDE]: "%The1 is protected from this kind of magic!" +// #warning Missing [TRDE]: "%The1 says, \"I die, but my clan in Trollheim will avenge me!\"" +// #warning Missing [TR]: "%The1 scares %the2 a bit!" +// #warning Missing [TR]: "%The1 suffocates!" +// #warning Missing [TR]: "%The1 throws fire at %the2!" +// #warning Missing [TR]: "%The1 tries to dismount you!" +// #warning Missing [TRDE]: "%The1 wakes up %the2." +// #warning Missing [TRDE]: "%The1 will be revivable at %2 $$$" +// #warning Missing [TRDE]: "(ESC) tour menu" +// #warning Missing [TRDE]: "(You can also use right Shift)\n\n" +// #warning Missing [TR]: "(includes co-op)" +// #warning Missing [TRDE]: "+5 = move instantly" +// #warning Missing [TR]: ", %1" +// #warning Missing [TR]: "-- use the Android menu instead" +// #warning Missing [TRDE]: "0 - return" +// #warning Missing [TRDE]: "1 turn" +// #warning Missing [TRDE]: "3D" +// #warning Missing [TRDE]: "3D configuration" +// #warning Missing [TRDE]: "A beatiful purple gem from the Lost Mountain." +// #warning Missing [TR]: "A big, beautiful, magical flower." +// #warning Missing [TR]: "A bird who hunts in the treetops of the Yendorian Forest." +// #warning Missing [TR]: "A clearing in the Overgrown Woods. Obviously, this gives the Mutant Ivies an infinite space to grow...\n\nMutant Fruits rot if they are not adjacent to a Mutant Ivy." +// #warning Missing [TR]: "A dark forest filled with ghosts and graves. But there is also treasure hidden deep within... But don't let greed make you stray from your path, as you can get lost!\n\nThe Haunted Woods are bounded by a single equidistant curve. It is not a circle or horocycle.\n\n" +// #warning Missing [TR]: "A fruit from the Yendorian Forest." +// #warning Missing [TRDE]: "A land for people wanting to experiment with cellular automata in the HyperRogue grid. Rules can be given on the command line; the default rules are:\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(-c0 or -c1 can be given if the same rule is to be used for hexagonal and heptagonal cells)." +// #warning Missing [TR]: "A large bird who likes strong winds. Just as you, it can fly quickly in the wind." +// #warning Missing [TR]: "A long time ago, this was a trade route. But then, Krakens have risen out of the depths. Many trading ships sank here. Legend says that you can uncover the secret of a magical weapon spell somewhere in the depths...\n\nYou can find Sunken Treasures here, but they won't appear until you have killed a Kraken. You will also need Orb of the Fish to get the treasures, luckily you can steal one from the Viking treasure hunters." +// #warning Missing [TRDE]: "A magical energy sword. Don't waste its power!" +// #warning Missing [TR]: "A petrified creature." +// #warning Missing [TRDE]: "A tourist from another world. They mutter something about the 'tutorial', and claim that they are here just to learn, and to leave without any treasures. Do not kill them!" +// #warning Missing [TRDE]: "A very interesting species of slime mold." +// #warning Missing [TRDE]: "Actually, their powers appear god-like...\n\n" +// #warning Missing [TRDE]: "Aethereal powers let you go through the holes." +// #warning Missing [TRDE]: "After killing %the1, you feel able to reach the Elemental Planes!" +// #warning Missing [TRDE]: "After you move while having this Orb, you immediately attack the next cell in the straight line (or two cells, when moving on a heptagon). This attack is slightly stronger than your normal attack: it can stun some of the monsters which cannot be killed or stunned normally." +// #warning Missing [TR]: "Alternatively: kill a %1 in %the2.\n" +// #warning Missing [TRDE]: "An alternate layout of the Crossroads, without walls." +// #warning Missing [TR]: "An alternative version of Orb of the Sword. If you have both of them, you have two energy swords, facing in opposite directions." +// #warning Missing [TR]: "Ancient Viking heroes were buried here. Their graves have barrows raised over them, and are guarded by Draugar, animated corpses who are immune to mundane weapons. You will need to use a magical weapon spell to defeat them, and to rob the ancient jewelry buried in the graves." +// #warning Missing [TR]: "Animated corpses of ancient Viking warriors. They are immune to mundane weapons, but they can be destroyed by your Orb of the Sword." +// #warning Missing [TRDE]: "Annoying insects. They can awaken Sleeping Bulls." +// #warning Missing [TRDE]: "Another energy sword!" +// #warning Missing [TRDE]: "Aquatic region -- accessible only from coastal regions and other aquatic regions.\n" +// #warning Missing [TRDE]: "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods." +// #warning Missing [TRDE]: "Avoid escaping from a discharge (\"That was close\")." +// #warning Missing [TR]: "Aww, poor %1... where is your family?" +// #warning Missing [TRDE]: "Band model" +// #warning Missing [TRDE]: "Basics of gameplay" +// #warning Missing [TRDE]: "Beltrami-Klein model" +// #warning Missing [TR]: "Better not to let your greed make you stray from your path." +// #warning Missing [TR]: "Bonus land, available only in some special modes.\n" +// #warning Missing [TR]: "Branches here could bear your weight easily." +// #warning Missing [TR]: "Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break." +// #warning Missing [TRDE]: "Butterflies don't pursue you -- unless you get next to them, they just spin around the obstacles. They cannot be killed conventionally, but you get treasure when a Raging Bull crashes into a Butterfly. " +// #warning Missing [TRDE]: "Camera level above the plane" +// #warning Missing [TR]: "Cannot move into the current location of another player!" +// #warning Missing [TR]: "Cannot push into another player!" +// #warning Missing [TR]: "Cannot push into the same location!" +// #warning Missing [TR]: "Cannot slash another player!" +// #warning Missing [TRDE]: "Cannot use %the1 here!" +// #warning Missing [TR]: "Cargo of a ship which was once destroyed by a Kraken." +// #warning Missing [TR]: "Chaos mode" +// #warning Missing [TRDE]: "Circles" +// #warning Missing [TRDE]: "Circles are strange in hyperbolic geometry too. Look for the Castle of Camelot in the Crossroads; the Round Table inside is a circle of radius 28. Finding its center is a difficult challenge.\n\nPress '5' to cheat by seeing the smaller circles too.\n\nNote: Camelot and some other lands are unlocked earlier in the Tutorial than in a real game." +// #warning Missing [TRDE]: "Click a location to teleport there." +// #warning Missing [TRDE]: "Coastal region -- connects inland and aquatic regions.\n" +// #warning Missing [TR]: "Collect four different Elemental Shards!" +// #warning Missing [TRDE]: "Commanded %the1!" +// #warning Missing [TR]: "Completing the quest in this land is not necessary for the Hyperstone Quest." +// #warning Missing [TRDE]: "Conformal square model" +// #warning Missing [TR]: "Corals have a somewhat hyperbolic structure even in your home world, but natural corals from the Warped Sea have truly beautiful shapes. Ratlings know the value of corals, and thus keep them in boats for safety." +// #warning Missing [TR]: "Could not create an image of that size." +// #warning Missing [TRDE]: "Cultists throw fire at you from distance!" +// #warning Missing [TRDE]: "Curvature" +// #warning Missing [TRDE]: "Defeat Flail Guards by moving away from them." +// #warning Missing [TRDE]: "Demons are slow, but you'll need the experience against stronger ones..." +// #warning Missing [TRDE]: "Despite this intelligence, Rogues appear extremely surprised by the most basic facts about geometry. They must come from some really strange world.\n\n" +// #warning Missing [TR]: "Different kills required: %1.\n" +// #warning Missing [TR]: "Don't be fooled by beauty, or you will be stabbed if you come too close!" +// #warning Missing [TR]: "Don't be fooled by this red-haired boy, or you will be stabbed if you come too close!" +// #warning Missing [TR]: "Don't be fooled by this red-haired girl, or you will be stabbed if you come too close!" +// #warning Missing [TRDE]: "Don't center on the player character." +// #warning Missing [TR]: "Dragon Scales are a prized material for armors. They are also prized by collectors, who would like to boast about how they have killed a Dragon.\n\nDragon Scales disappear after 500 turns." +// #warning Missing [TR]: "Dragons are powerful monsters. They are slow, but evil, and love to pick on creatures who are even slower than them. They must be stopped!\n\nA Dragon moves each two turns. It may attack with all its segments, or move its whole body forwards or backwards, it may also move a frontal part backwards. To kill a Dragon, you need to hit each of its segments. The head will regenerate on the turns the Dragon is not moving, so you will usually have to hit it with your last attack; otherwise, if the head is healthy, it may breathe fire (at range 3), losing the hitpoint. Killing the Dragon while still in the Dragon Chasms gives you treasure." +// #warning Missing [TR]: "Each eight turns, each rosebush at distance at most 5 from you will release a wave of alluring scent. Creatures on the frontwave will move towards where the scent came from. Even if it causes them to attack their friends or beautiful creatures, or move into water, fire, chasm, or thorns of the rosebush. Ivies, Ghosts, Rock Snakes, Rose Ladies and Lords, and monsters restricted to a specific terrain are immune to scents." +// #warning Missing [TR]: "Enable cheat mode or GAME OVER to use this" +// #warning Missing [TR]: "Enemies killed: %1 (%2 types)" +// #warning Missing [TRDE]: "Equidistants" +// #warning Missing [TRDE]: "Equidistants are curves which are at some fixed distance from a straight line. Some lands in HyperRogue are based on equidistants; you should see them after wandering a bit more.\n\nThis tutorial gives you freedom to go wherever you choose, but we do not recommend going deep into the Dungeon or the Ocean -- getting back might be difficult." +// #warning Missing [TRDE]: "Escher/3D" +// #warning Missing [TRDE]: "Euclidean" +// #warning Missing [TRDE]: "Euclidean geometry" +// #warning Missing [TRDE]: "Euclidean/elliptic mode" +// #warning Missing [TRDE]: "Expansion" +// #warning Missing [TRDE]: "Extremely narrow Crossroads layout.\n" +// #warning Missing [TRDE]: "F1 - help" +// #warning Missing [TRDE]: "F8 = SVG shot" +// #warning Missing [TR]: "Find a %1 in %the2." +// #warning Missing [TRDE]: "Fire is extinguished!" +// #warning Missing [TRDE]: "For some reason... cannot attack!" +// #warning Missing [TRDE]: "Fractal landscapes" +// #warning Missing [TRDE]: "Fractal landscapes: application" +// #warning Missing [TR]: "Friendly ghosts are friendly beings who can go through any obstacles. However, unlike most friends, they tend to fly away from you." +// #warning Missing [TR]: "Galápagos is the land of Tortoises. They are very slow, which allows the Dragons to pick on them by stealing and eating their young. Bring the Baby Tortoises back, but, there is a catch: the Tortoises come in many varieties, depending on the part of Galápagos they live in -- there are 21 binary environmental factors, and thus 2097152 varieties. You'll have to find a Tortoise which matches the baby exactly!\n\nTortoises move each 3 turns, and attacks only stun them.\n\nBringing back a Baby Tortoise counts as 5 $$$. The more factors agree in the given location of Galápagos, the brighter it is shown on your screen." +// #warning Missing [TRDE]: "Gans model" +// #warning Missing [TRDE]: "Ghosts can move through chasms!" +// #warning Missing [TRDE]: "Good luck in the elliptic plane!" +// #warning Missing [TRDE]: "Gravitational anomalies in the Jungle create mountains overgrown with ivies and bushes. Will you dare to climb the ivies to get the amethysts hidden above?\n\nCells adjacent to Ivies count as stable (but Ivies cannot climb themselves or other Ivies)." +// #warning Missing [TRDE]: "Ground level below the plane" +// #warning Missing [TRDE]: "Ground level is actually an equidistant surface, %1 absolute units below the plane P. Theoretically, this value affects the world -- for example, eagles could fly %2 times faster by flying above the ground level, on the plane P -- but the actual game mechanics are not affected. (Distances reported by the vector graphics editor are not about points on the ground level, but about the matching points on the plane P -- divide them by the factor above to get actual distances." +// #warning Missing [TRDE]: "Half-plane model" +// #warning Missing [TRDE]: "Halloween is a special land, that is available only in the spherical or elliptic geometry (press 'o' to switch). You play on the surface of a jack-o'-lantern, and have to collect as many Treats as possible. Each Treat you collect brings new monsters to fight, and new magical powers for you. You have to fight the monsters while effectively managing your limited resources." +// #warning Missing [TRDE]: "Halloween mini-game" +// #warning Missing [TRDE]: "Height of walls" +// #warning Missing [TRDE]: "Help texts disabled." +// #warning Missing [TRDE]: "Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them." +// #warning Missing [TRDE]: "High detail range" +// #warning Missing [TRDE]: "Hint: magical powers from Treats expire after a number of uses." +// #warning Missing [TRDE]: "Hint: press 1 2 3 4 to change the projection." +// #warning Missing [TRDE]: "Hint: use arrow keys to scroll." +// #warning Missing [TRDE]: "Horocycles" +// #warning Missing [TRDE]: "Horocycles are similar to circles, but you cannot reach their center at all -- they can be understood as limit circles of infinite radius centered in some point in infinity (also called an ideal point).\n\nGo to R'Lyeh, and you should quickly find a Temple of Cthulhu there. Each circle of columns is actually a horocycle. Horocycles in a given temple are concentric, and there is an infinite number of them." +// #warning Missing [TRDE]: "How long should the messages stay on the screen." +// #warning Missing [TRDE]: "Human to wall ratio" +// #warning Missing [TRDE]: "Humans are %1 absolute units high. Your head travels %2 times the distance travelled by your feet." +// #warning Missing [TRDE]: "HyperRogue uses the Minkowski hyperboloid model internally. Klein and PoincarĂ© models can be obtained by perspective, and the Gans model is obtained by orthogonal projection. See also the conformal mode (in the special modes menu) for more models." +// #warning Missing [TRDE]: "Hyperbolic geometry has been discovered by the 19th century mathematicians who wondered about the nature of paralellness. Take a line L and a point A. Can a world exist where there is more than one line passing through A which does not cross L?\n\nThe Icy Land will be very dangerous if you have lots of Ice Diamonds -- lots of Yetis and Ice Wolves hunting you! But the other lands, where you have no treasures yet, will still be (relatively) safe.\n\nWander further, and you should find Crossroads quickly -- the Great Walls are straight lines, and indeed, they work differently than in Euclidean. On the other side of Great Walls, you see other lands -- there are about 50 lands in HyperRogue, based on different mechanics and aspects of hyperbolic geometry." +// #warning Missing [TRDE]: "Hyperbolic geometry yields much more interesting periodic patterns than Euclidean." +// #warning Missing [TRDE]: "Hyperboloid model" +// #warning Missing [TRDE]: "Hypersian Rug model" +// #warning Missing [TR]: "Hyperstone Quest: collect at least %3 points in %the2" +// #warning Missing [TRDE]: "If we are viewing an equidistant g absolute units below a plane, from a point c absolute units above the plane, this corresponds to viewing a Minkowski hyperboloid from a point tanh(g)/tanh(c) units below the center. This in turn corresponds to the PoincarĂ© model for g=c, and Klein-Beltrami model for g=0." +// #warning Missing [TR]: "In the Chaos mode, lands change very often, and there are no walls between them. Some lands are incompatible with this.\n\nYou need to reach Crossroads IV to unlock the Chaos mode." +// #warning Missing [TR]: "In the Windy Plains, you can let the wind carry you, causing you to move two cells with the wind in a single turn. This cannot be done if you are standing at distance at most 2 from the Air Elemental, or if any of the three cells on the way has two wind directions.\n\nPress 't' or click the destination to activate." +// #warning Missing [TRDE]: "In the shoot'em up mode, space and time is continuous. You attack by throwing knives. Very fun with two players!\n\nThere are other special modes too which change the gameplay or focus on a particular challenge." +// #warning Missing [TR]: "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\nThis 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\nUse arrow keys to rotate, Page Up/Down to zoom." +// #warning Missing [TRDE]: "Introduction" +// #warning Missing [TRDE]: "Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$." +// #warning Missing [TR]: "Kills required: %1 (%2).\n" +// #warning Missing [TRDE]: "Klein model" +// #warning Missing [TRDE]: "Known mines may be marked by pressing 'm'. Your allies won't step on marked mines." +// #warning Missing [TRDE]: "Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines." +// #warning Missing [TR]: "Left the game." +// #warning Missing [TRDE]: "Let's see more models of the hyperbolic plane. This model uses a hyperboloid in the Minkowski geometry; it is used internally by HyperRogue." +// #warning Missing [TRDE]: "Level of water bottom" +// #warning Missing [TRDE]: "Level of water surface" +// #warning Missing [TR]: "Many clans of Trolls spend their lives in this kingdom. You can find many statues of Trolls here. You suppose that they are not actually statues, but simply elderly Trolls, who have petrified upon death. Or maybe you have killed these Trolls yourself?" +// #warning Missing [TRDE]: "Many lands in HyperRogue are based around periodic patterns. For example, both Zebra and Windy Plains are based on the pattern shown in the previous slide. Such lands often have tree-like nature." +// #warning Missing [TRDE]: "Mid detail range" +// #warning Missing [TR]: "Monsters slain by you in melee are turned into friendly ghosts. Does not affect plants and friends." +// #warning Missing [PLTRCZRU]: "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 config, ESC for the quest status and menu.\n\n" +// #warning Missing [DE]: "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" +// #warning Missing [TR]: "Multiplayer: Play cooperatively (locally); treasures, kills, and deaths are calculated for each player too, for more competitive play. Orbs and treasures are shared, orbs drain faster, knives recharge slower, and player characters are not allowed to separate.\n\n" +// #warning Missing [TRDE]: "New players think that the action of HyperRogue takes place on a sphere. This is not true -- the next slide will show the surface HyperRogue actually takes place on.\n\nUse arrow keys to rotate the model, and Page Up/Down to zoom.\n\nIf you do not see anything, press '5' to try a safer renderer." +// #warning Missing [TR]: "Note: currently scores are saved only in the normal mode on Android" +// #warning Missing [TR]: "Note: you can play, but scores won't be saved on Android" +// #warning Missing [TRDE]: "Now, go to the Burial Grounds and find an Orb of the Sword. The Sword appears to always be facing in the same direction whatever you do, and it appears that you have to rotate the sword to excavate the treasures; yet, it is possible to excavate them! You migth have already noticed that the world rotates after you move around a loop and return to an old place.\n\nThis is related to the fact that the world of HyperRogue is curved, and the sum of angles in a triangle is not equal to 180 degrees." +// #warning Missing [TRDE]: "Objects at distance less than %1 absolute units from the center will be displayed with high detail, and at distance at least %2 with low detail." +// #warning Missing [TRDE]: "On the following slide, the colors change smoothly in the whole infinite world. Again, this works better than in Euclidean geometry." +// #warning Missing [TR]: "Only thin twigs and leaves here. They may bear fruits, but for you, these cells count as unstable." +// #warning Missing [TR]: "Orb power (target: facing)" +// #warning Missing [TR]: "Orb power (target: mouse)" +// #warning Missing [TRDE]: "Orbs of Safety always appear here, and may be used to escape.\n" +// #warning Missing [TRDE]: "PICK" +// #warning Missing [TRDE]: "Periodic patterns" +// #warning Missing [TRDE]: "Periodic patterns: application" +// #warning Missing [TR]: "Players cannot get that far away!" +// #warning Missing [TRDE]: "PoincarĂ© Ball model" +// #warning Missing [TRDE]: "PoincarĂ© model" +// #warning Missing [TR]: "Precious belongings of ancient Viking heroes. Your Orb of the Sword can be used to dig these treasures out of the barrows." +// #warning Missing [TR]: "Preparing the line (%1/1000)..." +// #warning Missing [TRDE]: "Press F1 or right-click things for help." +// #warning Missing [TRDE]: "Press F1 or right-shift-click things for help." +// #warning Missing [TR]: "Prince" +// #warning Missing [TR]: "Princess" +// #warning Missing [TRDE]: "Projection at the ground level" +// #warning Missing [TRDE]: "Push Skeletons into the holes!" +// #warning Missing [TRDE]: "Quite tough, for your first fight." +// #warning Missing [TRDE]: "Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, they choose one closer to your current location. In the case of a tie, the cell where more neighbors is closer to your current location is chosen; if still a tie, past locations are considered. They can attack you in any direction, and monsters on their way are attacked even if friendly. When they crash into something, the obstacle is usually destroyed, and they are stunned for three turns, after which they charge at you again (in any direction). Raging Bulls cannot be killed or stunned conventionally." +// #warning Missing [TRDE]: "Reenter HyperRogue to apply this setting" +// #warning Missing [TR]: "Return to the normal game" +// #warning Missing [TR]: "Revived!" +// #warning Missing [TRDE]: "Rock-III to wall ratio" +// #warning Missing [TRDE]: "Rogues will never make moves which result in their immediate death. Even when cornered, they are able to instantly teleport back to their home world at any moment, taking the treasures forever... but at least they will not steal anything further!\n\n" +// #warning Missing [TRDE]: "Rotate the camera in ball/hyperboloid model." +// #warning Missing [TRDE]: "Rotate the camera. Can be used to obtain a first person perspective, or third person perspective when combined with Y shift." +// #warning Missing [TRDE]: "Roughly 42% cells are on the edge of your sight range. Reducing the sight range makes HyperRogue work faster, but also makes the game effectively harder." +// #warning Missing [TRDE]: "Running Dogs" +// #warning Missing [TRDE]: "Saved the SVG shot to %1 (sightrange %2)" +// #warning Missing [TR]: "Saved the band image as: " +// #warning Missing [TRDE]: "Scale the displayed model." +// #warning Missing [TR]: "She has flowers in her long fair hair. You could not bring yourself to attack such a beautiful woman." +// #warning Missing [TRDE]: "Shift-click a location to teleport there." +// #warning Missing [TR]: "Shmup (shoot'em up) mode: You can play a hyperbolic shoot'em up game. The game is based on the usual turn-based grid-based HyperRogue, but there are some changes. You fight by throwing knives, and you have three extra lives. There are no allies, so all Orbs related to allies give you extra lives instead (up to 5). Some other rules have been adapted too.\n\n" +// #warning Missing [TRDE]: "Shoot'em up mode" +// #warning Missing [TRDE]: "Sleeping bulls wake up when you get into distance of two cells from them." +// #warning Missing [TR]: "So, you have killed a Ratling on the unwarped sea? You will be punished for this! Luckily, if you run away from the Warped Sea quickly, the Ratling Avengers will lose track of you." +// #warning Missing [TR]: "Someone has put air fans in these plains, causing strong winds everywhere. You think that the purpose is to harness the magical power of Air Elementals, but you are not sure.\n\nAll cells except fans are grouped into three colors according to a pattern. Wind blows counterclockwise around each group of cells of a single color. Cells which are blocked by walls, or at distance at most 2 from an Air Elemental, do not count for this.\n\nIt is illegal to move in a direction which is closer to incoming wind than to outcoming wind. However, you can move two cells with the wind in a single turn, and so can the birds." +// #warning Missing [TRDE]: "Someone has told you that one can get battle experience safely by killing tons of essentially harmless creatures, such as Bats. But does this make any sense?...\n\nIt does not. Bats cannot hurt you, but may block your movement, or toggle switches if they fall on them." +// #warning Missing [TRDE]: "Static mode disabled." +// #warning Missing [TRDE]: "Static mode enabled." +// #warning Missing [TRDE]: "Straight Lines" +// #warning Missing [TRDE]: "THE END" +// #warning Missing [DE]: "TRANSLATIONWARNING" +// #warning Missing [DE]: "TRANSLATIONWARNING2" +// #warning Missing [TR]: "Tall, strong, and holding a flower in his hand. You could not bring yourself to attack such a handsome man." +// #warning Missing [TRDE]: "The PoincarĂ© disk model is a model of a hyperbolic *plane* -- you might wonder why are the walls rendered in 3D then.\n\nHyperRogue actually assumes that the floor level is an equidistant surface in a three-dimensional hyperbolic world, and the camera is placed above the plane that the surface is equidistant to (which boils down to showing the floor level in PoincarĂ© disk model).\n\nThis is shown on the next slide, in the PoincarĂ© ball model, which is the 3D analog of the PoincarĂ© disk model." +// #warning Missing [TRDE]: "The band model is the hyperbolic analog of the Mercator projection of the sphere: a given straight line is rendered as a straight line, and the rest of the world is mapped conformally, that is, angles are not distorted. Here, we take the straight line connecting your starting point and your current position -- usually the path taken by the player is surprisingly close to a straight line. Press '8' to see this path.\n\nIf you want, press '5' to see it rendered as a spiral, although it takes lots of time and memory." +// #warning Missing [TRDE]: "The game is normally displayed in the so called PoincarĂ© disk model, which is a kind of a map of the infinite hyperbolic world. There are many projections of Earth, but since Earth is curved, all of them have to distort distances or angles in some way -- the same is true in hyperbolic geometry. The next slide shows another model, called the PoincarĂ© upper half-plane model. In this model, horocycles centered at one specific ideal point are drawn as straight lines." +// #warning Missing [TRDE]: "The game starts in the Icy Lands. Collect the Ice Diamonds (press F1 if you do not know how to move). After you collect many of them, monsters will start to pose a challenge.\nAs is typical in roguelikes and other games based on tactical skill rather than story, if you lose, you have to start a new one from the start. However, in this tutorial, you can simply press '4' to teleport away from a bad situation.In general, the tutorial is rigged to show you what it wants -- for example, in this slide, you can press '5' to get lots of Ice Diamonds quickly." +// #warning Missing [TRDE]: "The height of walls, in absolute units. For the current values of g and c, wall height of %1 absolute units corresponds to projection value of %2." +// #warning Missing [TR]: "The ivy attacks %the1!" +// #warning Missing [TRDE]: "The next slide shows the number of cells in distance 1, 2, 3, ... from you. It grows exponentially: there are more than 10^100 cells in radius 1000 around you, and you will move further away during the game!\n\nThis is extremely important in the design of HyperRogue. HyperRogue has many navigational puzzles -- what would be simple in Euclidean world is extremely tricky in hyperbolic geometry (you want to reach a specific location 20 cells away, which of the thousands of possible directions should you take?); however, other things virtually impossible in Euclidean world become easy in HyperRogue. HyperRogue had to be specially designed so that it is impossible to grind the infinite world. There are almost no permanent upgrades; collecting treasures brings you benefits, but trying to get too many of the same kind is extremely dangerous." +// #warning Missing [TRDE]: "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. Length of paths on the Rock III level is %3 of the corresponding length on the ground level." +// #warning Missing [TRDE]: "The result of a collaboration of the Great Vizier and the Wizard of the Ivory Tower." +// #warning Missing [TRDE]: "The rug depicts a man in a deep dungeon, unable to leave." +// #warning Missing [TR]: "The skeleton of a tree." +// #warning Missing [TRDE]: "The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, might appear shallow, but hyperbolic geometry is essential even there. In the next slide, you are attacked by two monsters at once. You can make them line up simply by running away in a straight line. Press '2' to try the same in the Euclidean world -- it is impossible." +// #warning Missing [TRDE]: "The tasty treat increases your protection." +// #warning Missing [TRDE]: "The world can be mapped conformally to a square too." +// #warning Missing [TR]: "There are Krakens in your homeland too... huge sea monsters which could easily destroy ships. The geometry of this strange world prevents quick movement of huge objects, so there are no large ships, only small boats, and hyperbolic Krakens are relatively small too. Still, you suppose they might be the widest creatures which could still move at considerable speed...\n\nKraken heads can move only on hexagons. You need to attack all the tentacles to kill the Kraken. A tentacle cannot attack if it has been attacked on the same turn. When a Kraken attacks you while you are in a boat, it destroys the boat, but does not kill you." +// #warning Missing [TRDE]: "There are many lands in HyperRogue. Collect 10 treasure in the given land type to complete it; this enables you to find the magical Orbs of this land, and in some cases get access to new lands. At 25 treasures this type of Orbs starts appearing in other lands as well. Press 'o' to get the details of all the Lands.\n\n" +// #warning Missing [TRDE]: "These dodecahedra made of a mysterious material are the Reptiles' favorite toy." +// #warning Missing [TR]: "These people study gravity and infinite trees. They have no special features, other than wearing a strange hat." +// #warning Missing [TRDE]: "These reptiles are quite strange creatures. They spend most of their lives sleeping as floors that other creatures can walk on. Sometimes they wake up to hunt their prey, but they will happily go back to sleep if they happen to move into a hole on their way. Your attacks do not kill the Reptiles, but you can push and stun them." +// #warning Missing [TR]: "These warped humanoids are skilled warriors and sailors, and they feel at home at the Warped Coast. Their battle experience has taught them that enemies who wait without moving or attacking anything are the most deadly. If they see such an enemy, they become extremely suspicious, and they also wait." +// #warning Missing [TRDE]: "This Orb allows you to grow like an Ivy. The Ivy is always rooted in your current location; moving among the Ivy cells will move the root. Moving to a new location will cause the Ivy to grow , if an Ivy could make that movement (otherwise it breaks). You can also target one of the cells adjacent to your ivy (not to you) to grow or attack there." +// #warning Missing [TRDE]: "This Orb allows you to jump over an adjacent monster, killing or stunning it. You can only vault in a roughly straight line. Target a cell on the other side to use it." +// #warning Missing [TR]: "This Orb creates a warped zone of radius 5 around you, and also allows you to move diagonally in warped zones." +// #warning Missing [TR]: "This Orb gives you a weapon made of pure magical energy. You do not hold it, it simply floats in the air next to you. When you go, the energy sword moves with you, pointing at the same relative angle it pointed before -- you cannot move or rotate it otherwise. Most monsters can be killed by moving the sword into them, and won't move into the spot with the sword." +// #warning Missing [TR]: "This Orb halves the power usage of orbs which cost some charges with each activation. It even affects the one-shot orbs such as Flash or Teleport. If such an activation normally costs x charges, it costs only x/2 (rounded up) if you have an Orb of Energy." +// #warning Missing [TR]: "This Orb lets you ride Dragons and other worm-like creatures. Simply move onto such a creature to ride them; while riding, you are protected from dangerous terrains and partially from attacks (they cause you to lose half of your Domination power), but you cannot collect items. When only one charge is left, you have to dismount this turn -- be very careful to make this possible, as your mount could attack you immediately!\n\nWhile riding, click on a location to order your mount to move or attack there." +// #warning Missing [TR]: "This Orb lets your allies to share your Orb powers.\n\nThe following Orbs are affected:" +// #warning Missing [TR]: "This Orb makes you stunningly beautiful. Monsters which come next to you will be stunned for one turn. Multi-tile monsters are not affected. Additionally, it makes you immune to beauty." +// #warning Missing [TR]: "This Orb protects you from physical attacks. It lasts for more turns than the Orb of Shielding, but 10 charges are lost whenever you are attacked. It also does not protect you from fires, scents, and being eaten." +// #warning Missing [TR]: "This beautiful flower is greatly prized by wizards, as it allows them to cast powerful magical spells without preparation.\n" +// #warning Missing [TR]: "This false prince is immune to the alluring scent of roses." +// #warning Missing [TR]: "This false princess is immune to the alluring scent of roses." +// #warning Missing [TR]: "This feather is truly beautiful and strong." +// #warning Missing [TR]: "This forest was planted by one of the wizards from the Ivory Tower to conduct experiments with gravity." +// #warning Missing [TR]: "This gate separates the warped area from the normal land." +// #warning Missing [TRDE]: "This is applied in HyperRogue to create landscapes, such as the chasms in the land of Reptiles or the Dragon Chasms, which you should find quickly. Also in the Dragon Chasms, you can find a Baby Tortoise, and try to find a matching adult tortoise in the Galápagos. There are over two millions of species, but since there is so much space in hyperbolic geometry, finding a matching tortoise is possible. The brighter the color in Galápagos is, the more aspects of the tortoises in the given area are matching." +// #warning Missing [TR]: "This land is filled with beautiful, but dangerous, creatures and plants." +// #warning Missing [TR]: "This land is warped. Ironically, the coast is completely straight..." +// #warning Missing [TR]: "This menu can be also used to configure keys.\n\n" +// #warning Missing [TR]: "This might be very useful for devices with limited memory." +// #warning Missing [TRDE]: "This model renders straight lines as straight, but it distorts angles." +// #warning Missing [TRDE]: "This monster has come from another world, presumably to steal our treasures. Not as fast as an Eagle, not as resilient as the guards from the Palace, and not as huge as the Mutant Ivy from the Clearing; however, they are very dangerous because of their intelligence, and access to magical powers.\n\n" +// #warning Missing [TR]: "This move appears dangerous -- are you sure?" +// #warning Missing [TR]: "This orb is activated if you are unable to escape (radius 4) without making illegal moves or going through cells which are currently adjacent to enemy monsters. Most game over situations are covered by this, but generally, this orb is oversensitive...\n\nWhen activated, it creates a Flash effect of radius 5." +// #warning Missing [TRDE]: "This parameter affects the ball model the same way as the projection parameter affects the disk model." +// #warning Missing [TR]: "This part of the world is warped, restricting the movement somewhat. \"Diagonal\" movement and attacking between triangular cells is not allowed. Flash, Storms, and Freedom spells ignore this, and Ghosts can move, attack, and be attacked diagonally." +// #warning Missing [TRDE]: "This tour shows just a small part of what you can see in the world of HyperRogue. For example, hyperbolic mazes are much nicer than their Euclidean counterparts. Have fun exploring!\n\nPress '5' to leave the tutorial mode." +// #warning Missing [TRDE]: "This tutorial is different than most other game tutorials -- you are not forced to do anything, and you can go wherever you want.\n\nHowever, %the1 is not what we are talking about now. We will not explain this land at the moment, and you could ponentially get lost there.\n\nRemember that you can get to the next slide by pressing Enter." +// #warning Missing [TRDE]: "This tutorial is mostly aimed to show what is special about the geometry used by HyperRogue. It also shows the basics of gameplay, and how is it affected by geometry.\n\nYou decide when you want to stop playing with the current \"slide\" and go to the next one, by pressing Enter. You can also press ESC to see a menu with other options." +// #warning Missing [TR]: "This wall is quite strong. You will need another way in." +// #warning Missing [TR]: "Those roses smell too nicely. You can only target cells closer to them!" +// #warning Missing [TR]: "Those roses smell too nicely. You have to come towards them." +// #warning Missing [TRDE]: "Tiling and Tactics" +// #warning Missing [TRDE]: "To learn more about straight lines, wander further, and you should find the Land of Eternal Motion. Try to run in a straight line, with a Running Dog next to you. Even though the Running Dog runs at the same speed as you, it will appear to go slower -- this is because you are running in a straight line, and the Running Dog has to run in a curve called an equidistant.\n\nRemember that you can right click on anything to get more information." +// #warning Missing [TR]: "Trolls of Trollheim are descendants of a bridge Troll, who collected payments from people crossing the bridge. One of them paid with golden eggs. The bridge Troll found the eggs beautiful, but he quickly lost them. Golden eggs are still revered by Trolls, and you can find them in their caves." +// #warning Missing [TR]: "Trolls turn into stone walls when they die. When you have this Orb, this happens to every monster you defeat. Statues created from this Orb have slightly different properties than Trolls who petrify naturally." +// #warning Missing [TRDE]: "Try the Tutorial to help with understanding the geometry of HyperRogue (menu -> special modes).\n\n" +// #warning Missing [TR]: "Turn-based multiplayer: Turns are executed in parallel. A player can leave the game by pressing a designated key (useful when about to get killed or lost). The following Orbs work to bring such players back: " +// #warning Missing [TRDE]: "Tutorial" +// #warning Missing [TR]: "Two players cannot move/attack the same location!" +// #warning Missing [TR]: "Unavailable in the Chaos mode.\n" +// #warning Missing [TR]: "Unavailable in the multiplayer mode.\n" +// #warning Missing [TR]: "Unavailable in the shmup mode.\n" +// #warning Missing [TR]: "Unbalanced shards in your inventory are dangerous." +// #warning Missing [TRDE]: "Vampire Bats don't attack normally, but they drain your magical powers if they are at distance at most 2 from you." +// #warning Missing [TRDE]: "Vampire Bats drain your magical powers!" +// #warning Missing [TR]: "Warnings are issued when you try to do something that appears dangerous, like stepping on a known mine, or getting your boat destroyed by a Kraken without having Orb of the Fish. In some cases the action might actually be safe -- so you can ignore the warning and do it anyway, simply by repeating the action." +// #warning Missing [TRDE]: "Watch the Minkowski hyperboloid or the hypersian rug mode with the red/cyan 3D glasses." +// #warning Missing [TRDE]: "Welcome to Halloween!" +// #warning Missing [TRDE]: "Welcome to HyperRogue!" +// #warning Missing [TRDE]: "Welcome to Spherogue!" +// #warning Missing [TRDE]: "Welcome to the Euclidean mode!" +// #warning Missing [TRDE]: "Welcome to the HyperRogue tutorial!" +// #warning Missing [TRDE]: "Welcome to the Random Pattern mode!" +// #warning Missing [TRDE]: "Welcome to the Yendor Challenge %1!" +// #warning Missing [TR]: "What is freedom for you? A situation when you can walk wherever you want? Or a situation when you do not have to work, since you have as much tasty food as you want?\n\nWell, this creature has chosen the second option. It won't be happy if you destroy its prison.\n" +// #warning Missing [TRDE]: "When the charges on this Orb expire, you will be automatically returned to the place where you have found it. Extra Orbs of Recall delay this without changing the recall location. Pick up an Orb of Safety causes an immediate recall." +// #warning Missing [TR]: "Wow! That was close." +// #warning Missing [TRDE]: "Y shift" +// #warning Missing [TRDE]: "Yet another model, which corresponds to orthographic projection of the sphere. PoincarĂ© disk model, Beltrami-Klein model, and the Gans model are all obtained by looking at either the hyperboloid model or an equidistant surface from various distances." +// #warning Missing [TR]: "You are now a tortoise hero!" +// #warning Missing [TR]: "You are now a tortoise heroine!" +// #warning Missing [TRDE]: "You are playing %the1 in the Pure Tactics mode." +// #warning Missing [TRDE]: "You are recalled!" +// #warning Missing [TR]: "You become a bit nervous..." +// #warning Missing [TRDE]: "You can find safety in some places in the Prairie, but if you want treasures, they can be found only on the other side of a giant herd of bulls." +// #warning Missing [TRDE]: "You can hold this bush to climb the Lost Mountain, but it is not very strong -- it will get destroyed if you climb from it into an unstable location. Bushes block the movement of birds." +// #warning Missing [TRDE]: "You can hold this bush to climb the Lost Mountain. Bushes block the movement of birds." +// #warning Missing [TRDE]: "You cannot attack %the1!" +// #warning Missing [TR]: "You cannot attack diagonally!" +// #warning Missing [TR]: "You cannot go against the wind!" +// #warning Missing [TR]: "You cannot move between the cells without dots here!" +// #warning Missing [TR]: "You cannot move between the triangular cells here!" +// #warning Missing [TR]: "You chop down %the1." +// #warning Missing [TR]: "You collect %the1. (%2)" +// #warning Missing [TR]: "You command %the1!" +// #warning Missing [TR]: "You construct some Elemental Gems!" +// #warning Missing [TR]: "You damage %the1 with a mental blast!" +// #warning Missing [TRDE]: "You feel attuned to gravity, ready to face mountains and dungeons." +// #warning Missing [TRDE]: "You feel even more attuned to the magic of this land!" +// #warning Missing [TRDE]: "You feel something strange about gravity here..." +// #warning Missing [TRDE]: "You feel that a magical weapon is waiting for you..." +// #warning Missing [TRDE]: "You gain a protective Shell!" +// #warning Missing [TRDE]: "You gain your protective Shell back!" +// #warning Missing [TRDE]: "You get the powers of Shield, Horns, and Thorns after you move two moves in a straight line with this Orb." +// #warning Missing [TRDE]: "You got Thorns! Stab monsters by moving around them." +// #warning Missing [TRDE]: "You have enough treasure now to revive %the1!" +// #warning Missing [TR]: "You hear a distant roar!" +// #warning Missing [TR]: "You just cannot stand in place, those roses smell too nicely." +// #warning Missing [TRDE]: "You leave %the1." +// #warning Missing [TRDE]: "You may be unable to leave %the1 if you are not careful!\n" +// #warning Missing [TR]: "You need to dismount %the1!" +// #warning Missing [TR]: "You need to move to give space to %the1!" +// #warning Missing [TRDE]: "You pierce %the1." +// #warning Missing [TR]: "You slash %the1." +// #warning Missing [TRDE]: "You vault over %the1!" +// #warning Missing [TRDE]: "You will need more experience to defeat the Greater Demon!" +// #warning Missing [TRDE]: "You'll need your magical sword against the Draugar!" +// #warning Missing [TR]: "Your %1 activates!" +// #warning Missing [TRDE]: "Your Orb of Recall is blocked by something big!" +// #warning Missing [TR]: "Your Orb of the Sword can be used to dig here." +// #warning Missing [TRDE]: "Your energy swords get stronger!" +// #warning Missing [TR]: "Your mundane weapon cannot hurt %the1!" +// #warning Missing [TR]: "Your power is drained by %the1!" +// #warning Missing [TRCZRUDE]: "Zebra quotient" +// #warning Missing [TRDE]: "all" +// #warning Missing [TRDE]: "always available" +// #warning Missing [TRDE]: "and not in a chaos without norms.\"" +// #warning Missing [TR]: "animals killed: %1" +// #warning Missing [TR]: "azimuthal equi-area" +// #warning Missing [TR]: "azimuthal equidistant" +// #warning Missing [TR]: "background music" +// #warning Missing [TRDE]: "ball model" +// #warning Missing [TR]: "band" +// #warning Missing [TR]: "band width" +// #warning Missing [TRDE]: "big triangular grid" +// #warning Missing [TRDE]: "by land" +// #warning Missing [TRDE]: "by number" +// #warning Missing [TRDE]: "camera rotation" +// #warning Missing [TRDE]: "camera rotation in ball model" +// #warning Missing [TRDE]: "cancel move" +// #warning Missing [TR]: "cat" +// #warning Missing [TRDE]: "change the alpha parameter to show the lines" +// #warning Missing [TRCZDE]: "cheats" +// #warning Missing [TRDE]: "circle/horocycle tree" +// #warning Missing [TR]: "clockwise" +// #warning Missing [TR]: "coefficient" +// #warning Missing [TRDE]: "coefficient (imaginary)" +// #warning Missing [TRRUDE]: "compass size" +// #warning Missing [TRDE]: "config" +// #warning Missing [TRDE]: "configure input" +// #warning Missing [TR]: "configure keys" +// #warning Missing [TR]: "configure player 3" +// #warning Missing [TR]: "configure player 4" +// #warning Missing [TRRU]: "configure player 5" +// #warning Missing [TRRU]: "configure player 6" +// #warning Missing [TRRU]: "configure player 7" +// #warning Missing [TR]: "conformal/history mode" +// #warning Missing [TR]: "connected to Google Games" +// #warning Missing [TRDE]: "continue" +// #warning Missing [TR]: "counterclockwise" +// #warning Missing [TRDE]: "create a baby tortoise" +// #warning Missing [TRDE]: "default" +// #warning Missing [TR]: "degree of the approximation" +// #warning Missing [TR]: "disk" +// #warning Missing [TR]: "display the triheptagonal grid" +// #warning Missing [TR]: "dog" +// #warning Missing [TR]: "down" +// #warning Missing [TRDE]: "draw circle around the target" +// #warning Missing [TRDE]: "draw the grid" +// #warning Missing [TR]: "dress color II" +// #warning Missing [TRDE]: "drop Dead Orb (up + down)" +// #warning Missing [TRDE]: "edit all three colors" +// #warning Missing [TRDE]: "elliptic" +// #warning Missing [TR]: "enable the Hypersian Rug mode" +// #warning Missing [TRDE]: "enable/disable texts" +// #warning Missing [TRDE]: "exit 3D configuration" +// #warning Missing [TRDE]: "exit menu" +// #warning Missing [TR]: "exit this menu" +// #warning Missing [TRDE]: "expansion" +// #warning Missing [TRDE]: "extra graphical effects" +// #warning Missing [TRCZRUDE]: "field quotient" +// #warning Missing [TRDE]: "firewall lines" +// #warning Missing [TRDE]: "firewall lines: Palace" +// #warning Missing [TRDE]: "firewall lines: Power" +// #warning Missing [TRDE]: "first joystick position (movement)" +// #warning Missing [TRDE]: "first on bottom" +// #warning Missing [TRDE]: "first on top" +// #warning Missing [TR]: "five players" +// #warning Missing [TRDE]: "flash" +// #warning Missing [TR]: "four players" +// #warning Missing [TR]: "friends destroyed: %1" +// #warning Missing [TR]: "friends killed: %1" +// #warning Missing [TRDE]: "gain Ice Diamonds" +// #warning Missing [TR]: "gain Orb of Yendor" +// #warning Missing [TRDE]: "gain Orb of the Sword" +// #warning Missing [TRDE]: "geometry" +// #warning Missing [TRDE]: "gnomonic projection" +// #warning Missing [TR]: "half-plane" +// #warning Missing [TRCZDE]: "help for keyboard users" +// #warning Missing [TRDE]: "heptagonal grid" +// #warning Missing [TR]: "heptagonal mode" +// #warning Missing [TR]: "hexagonal #1" +// #warning Missing [TRDE]: "hyperboloid model" +// #warning Missing [TR]: "hypersian rug mode" +// #warning Missing [TRDE]: "images" +// #warning Missing [TR]: "include history" +// #warning Missing [TRDE]: "input" +// #warning Missing [TRDE]: "inventory/kill mode" +// #warning Missing [TRDE]: "inventory/kill sorting" +// #warning Missing [TRDE]: "joystick configuration" +// #warning Missing [TR]: "key Orb power" +// #warning Missing [TRDE]: "last on bottom" +// #warning Missing [TRDE]: "last on top" +// #warning Missing [TR]: "leaderboards/achievements" +// #warning Missing [TRDE]: "leave the Tutorial" +// #warning Missing [TRDE]: "leave the game" +// #warning Missing [TR]: "left" +// #warning Missing [TR]: "left to right" +// #warning Missing [TR]: "length of a segment" +// #warning Missing [TRDE]: "letters" +// #warning Missing [TRDE]: "line patterns" +// #warning Missing [TRDE]: "main menu" +// #warning Missing [TRCZDE]: "mark heptagons" +// #warning Missing [TR]: "model used" +// #warning Missing [TR]: "model used (not conformal!)" +// #warning Missing [TR]: "monsters destroyed: %1" +// #warning Missing [TRDE]: "more curved hyperbolic geometry" +// #warning Missing [TRDE]: "move down-left" +// #warning Missing [TRDE]: "move down-right" +// #warning Missing [TRDE]: "move through walls" +// #warning Missing [TRDE]: "move up-left" +// #warning Missing [TRDE]: "move up-right" +// #warning Missing [TRDE]: "movement animation speed" +// #warning Missing [TR]: "movement color" +// #warning Missing [TR]: "next page" +// #warning Missing [TRDE]: "next slide" +// #warning Missing [TRDE]: "normal tesselation" +// #warning Missing [TRDE]: "old style joystick configuration" +// #warning Missing [TRDE]: "page" +// #warning Missing [TRDE]: "parameters set correctly" +// #warning Missing [TR]: "parts destroyed: %1" +// #warning Missing [TRDE]: "plain/3D" +// #warning Missing [TR]: "player" +// #warning Missing [TR]: "player 3 X" +// #warning Missing [TR]: "player 3 Y" +// #warning Missing [TR]: "player 3 go" +// #warning Missing [TR]: "player 3 spin" +// #warning Missing [TR]: "player 4 X" +// #warning Missing [TR]: "player 4 Y" +// #warning Missing [TR]: "player 4 go" +// #warning Missing [TR]: "player 4 spin" +// #warning Missing [TR]: "player 5 X" +// #warning Missing [TR]: "player 5 Y" +// #warning Missing [TR]: "player 5 go" +// #warning Missing [TR]: "player 5 spin" +// #warning Missing [TR]: "player 6 X" +// #warning Missing [TR]: "player 6 Y" +// #warning Missing [TR]: "player 6 go" +// #warning Missing [TR]: "player 6 spin" +// #warning Missing [TR]: "player 7 X" +// #warning Missing [TR]: "player 7 Y" +// #warning Missing [TR]: "player 7 go" +// #warning Missing [TR]: "player 7 spin" +// #warning Missing [TR]: "polygon sides" +// #warning Missing [TR]: "polygonal" +// #warning Missing [TR]: "polynomial" +// #warning Missing [TR]: "prepare the line animation" +// #warning Missing [TRDE]: "previous slide" +// #warning Missing [TRRUDE]: "projection" +// #warning Missing [TRDE]: "projection in ball model" +// #warning Missing [TRDE]: "quit" +// #warning Missing [TRDE]: "rainbow landscape" +// #warning Missing [TR]: "render bands automatically" +// #warning Missing [TR]: "render now (length: %1)" +// #warning Missing [TRDE]: "render spiral" +// #warning Missing [TR]: "render texture without OpenGL" +// #warning Missing [TR]: "render the texture only once" +// #warning Missing [TRDE]: "reset per-player statistics" +// #warning Missing [TRDE]: "restart" +// #warning Missing [TRDE]: "return" +// #warning Missing [TRDE]: "reverse pointer control" +// #warning Missing [TRDE]: "rhombic tesselation" +// #warning Missing [TR]: "right" +// #warning Missing [TR]: "right to left" +// #warning Missing [TR]: "rotation" +// #warning Missing [TRDE]: "scrolling speed" +// #warning Missing [TRDE]: "second joystick position (panning)" +// #warning Missing [TR]: "see http://www.roguetemple.com/z/hyper/conformal.php" +// #warning Missing [TRDE]: "select this color" +// #warning Missing [TRDE]: "set 3D monsters or walls in basic config first" +// #warning Missing [TR]: "settings set here won't be saved" +// #warning Missing [TR]: "seven players" +// #warning Missing [TRDE]: "shift+O to switch anti-aliasing" +// #warning Missing [TR]: "shoot'em up and multiplayer" +// #warning Missing [TRDE]: "sight range" +// #warning Missing [TR]: "six players" +// #warning Missing [TRDE]: "sound effects volume" +// #warning Missing [TRDE]: "spherical" +// #warning Missing [TRDE]: "spherical geometry" +// #warning Missing [TR]: "spin down" +// #warning Missing [TR]: "spin up" +// #warning Missing [TR]: "spiral on rendering" +// #warning Missing [TR]: "star factor" +// #warning Missing [TR]: "start a new game" +// #warning Missing [TRDE]: "static mode" +// #warning Missing [TRDE]: "stay in place (left + right)" +// #warning Missing [TRDE]: "stereographic projection" +// #warning Missing [TR]: "switch ghost timer" +// #warning Missing [TR]: "switch web display" +// #warning Missing [TR]: "take me back" +// #warning Missing [TRDE]: "teleport away" +// #warning Missing [TR]: "texture size" +// #warning Missing [TRDE]: "three colors" +// #warning Missing [TRDE]: "three colors rotated" +// #warning Missing [TR]: "three players" +// #warning Missing [TRDE]: "towards Gans model" +// #warning Missing [TRDE]: "towards orthographic" +// #warning Missing [TRDE]: "triangle grid: not rings" +// #warning Missing [TRDE]: "triangle grid: rings" +// #warning Missing [TRDE]: "triheptagonal tesselation" +// #warning Missing [TR]: "turn count = %1 last exploration = %2 ghost timer = %3" +// #warning Missing [TR]: "turn-based mode" +// #warning Missing [TRDE]: "underlying tree" +// #warning Missing [TR]: "up" +// #warning Missing [TR]: "use default keys" +// #warning Missing [TR]: "view your achievements" +// #warning Missing [TRDE]: "vineyard pattern" +// #warning Missing [TR]: "visit the website" +// #warning Missing [TR]: "what's this?" +// #warning Missing [TR]: "which coefficient" +// #warning Missing [TRDE]: "which grants the greatest enjoyment.\"" +// #warning Missing [TRDE]: "which may not some day be applied to phenomena of the real world.\"" +// #warning Missing [TRDE]: "zebra lines" +// #warning Missing [TRDE]: "zebra triangles" +// #warning Missing [TR]: "zoom in" +// #warning Missing [TR]: "zoom out" +// #warning Missing [TRDE]: "Amethyst" +// #warning Missing [TR]: "Ancient Jewelry" +// #warning Missing [TR]: "Apple" +// #warning Missing [TR]: "Baby Tortoise" +// #warning Missing [TRDE]: "Bat" +// #warning Missing [TR]: "Black Lotus" +// #warning Missing [TRDE]: "Bull Dash" +// #warning Missing [TR]: "Burial Grounds" +// #warning Missing [TRDE]: "Butterfly" +// #warning Missing [TRDE]: "Cellular Automaton" +// #warning Missing [TR]: "Clearing" +// #warning Missing [TR]: "Coral" +// #warning Missing [TR]: "Crossroads IV" +// #warning Missing [TRDE]: "Crossroads V" +// #warning Missing [TRDE]: "Dodecahedron" +// #warning Missing [TR]: "Dragon" +// #warning Missing [TR]: "Dragon Chasms" +// #warning Missing [TR]: "Dragon Scale" +// #warning Missing [TR]: "Draugr" +// #warning Missing [TRDE]: "Dungeon" +// #warning Missing [TR]: "False Prince" +// #warning Missing [TR]: "False Princess" +// #warning Missing [TRDE]: "Familiar" +// #warning Missing [TR]: "Friendly Ghost" +// #warning Missing [TRDE]: "Friendly Ivy" +// #warning Missing [TR]: "Fulgurite" +// #warning Missing [TRDE]: "Gadfly" +// #warning Missing [TR]: "Galápagos" +// #warning Missing [TR]: "Giant Fox" +// #warning Missing [TR]: "Golden Egg" +// #warning Missing [TRDE]: "Green Grass" +// #warning Missing [TRDE]: "Halloween" +// #warning Missing [TR]: "Handsome Gardener" +// #warning Missing [TR]: "Haunted Woods" +// #warning Missing [TRDE]: "Herd Bull" +// #warning Missing [TR]: "Kraken Depths" +// #warning Missing [TRDE]: "Lost Mountain" +// #warning Missing [TR]: "Mutant Fruit" +// #warning Missing [TR]: "Orb of Beauty" +// #warning Missing [TR]: "Orb of Domination" +// #warning Missing [TR]: "Orb of Empathy" +// #warning Missing [TR]: "Orb of Energy" +// #warning Missing [TR]: "Orb of Freedom" +// #warning Missing [TRDE]: "Orb of Horns" +// #warning Missing [TRDE]: "Orb of Nature" +// #warning Missing [TRDE]: "Orb of Recall" +// #warning Missing [TR]: "Orb of Undeath" +// #warning Missing [TRDE]: "Orb of Vaulting" +// #warning Missing [TRDE]: "Orb of the Bull" +// #warning Missing [TR]: "Orb of the Shell" +// #warning Missing [TR]: "Orb of the Stone" +// #warning Missing [TR]: "Orb of the Sword" +// #warning Missing [TR]: "Orb of the Sword II" +// #warning Missing [TR]: "Orb of the Warp" +// #warning Missing [DE]: "Platform" +// #warning Missing [TRDE]: "Prairie" +// #warning Missing [TRDE]: "Raging Bull" +// #warning Missing [TR]: "Ratling" +// #warning Missing [TR]: "Ratling Avenger" +// #warning Missing [TRDE]: "Reptile" +// #warning Missing [TRDE]: "Reptile bridge" +// #warning Missing [TRDE]: "Reptile floor" +// #warning Missing [TRDE]: "Reptiles" +// #warning Missing [TR]: "Rose Beauty" +// #warning Missing [TR]: "Rose Garden" +// #warning Missing [TR]: "Rose Lady" +// #warning Missing [TR]: "Rose Lord" +// #warning Missing [TRDE]: "Sleeping Bull" +// #warning Missing [TRDE]: "Slime Mold" +// #warning Missing [TR]: "Sparrowhawk" +// #warning Missing [TRDE]: "Spinel" +// #warning Missing [TR]: "Sunken Treasure" +// #warning Missing [TR]: "Thornless Rose" +// #warning Missing [TRDE]: "Tortoise" +// #warning Missing [TRDE]: "Treat" +// #warning Missing [TR]: "Trollheim" +// #warning Missing [TRDE]: "Vampire Bat" +// #warning Missing [TR]: "Warped Coast" +// #warning Missing [TR]: "Warped Sea" +// #warning Missing [TR]: "White Dove Feather" +// #warning Missing [TR]: "Wind Crow" +// #warning Missing [TR]: "Windy Plains" +// #warning Missing [TR]: "Yendorian Forest" +// #warning Missing [TR]: "Yendorian Researcher" +// #warning Missing [TR]: "barrow" +// #warning Missing [TR]: "barrow wall" +// #warning Missing [TRDE]: "big bush" +// #warning Missing [TR]: "canopy" +// #warning Missing [TR]: "fan" +// #warning Missing [TR]: "no item" +// #warning Missing [TR]: "no monster" +// #warning Missing [TR]: "no wall" +// #warning Missing [TR]: "platform" +// #warning Missing [TR]: "rosebush" +// #warning Missing [TRDE]: "small bush" +// #warning Missing [TR]: "solid branch" +// #warning Missing [TR]: "stone statue" +// #warning Missing [TR]: "strong wind" +// #warning Missing [TR]: "trunk" +// #warning Missing [TR]: "warp gate" +// #warning Missing [TR]: "weak branch" +// DO NOT EDIT -- this file is generated automatically with langen + +#define NUMEXTRA 129 +const char* natchars[NUMEXTRA] = {"°","´","Ă","Ă„","Ç","É","ĂŤ","ĂŽ","Ă–","Ăš","Ăś","Ăź","á","â","ä","ç","è","Ă©","ì","Ă­","Ă®","Ăł","ö","ø","Ăą","Ăş","ĂĽ","Ă˝","Ä…","ć","ÄŚ","ÄŤ","ÄŽ","ÄŹ","Ä","Ä™","Äš","Ä›","Äź","Ä°","ı","Ĺ","Ĺ‚","Ĺ„","Ĺ","Ĺ","Ĺ™","Ĺš","Ĺ›","Ĺž","Ĺź","Ĺ ","š","ĹĄ","ĹŻ","Ĺą","Ĺş","Ĺ»","ĹĽ","Ĺ˝","Ĺľ","δ","Ď•","Đ","Đ","Đ‘","Đ’","Đ“","Đ”","Đ•","Đ–","Đ—","Đ","Đ™","Đš","Đ›","Đś","Đť","Đž","Đź","Đ ","С","Т","ĐŁ","Ф","ĐĄ","Ц","Ч","Ш","Đ©","Đ«","Ь","Đ­","Đ®","ĐŻ","Đ°","б","в","Đł","Đ´","е","ж","Đ·","и","Đą","Đş","Đ»","ĐĽ","Đ˝","Đľ","Đż","Ń€","Ń","Ń‚","Ń","Ń„","Ń…","ц","ч","Ń","щ","ŃŠ","Ń‹","ŃŚ","ŃŤ","ŃŽ","ŃŹ","Ń‘","áµ",}; +//javastring = "°´ĂÄÇÉÍÎÖÚÜßáâäçèéìíîóöøùúüýąćČčĎďÄęĚěğİıĹĹ‚Ĺ„ĹĹřŚśŞşŠšťůŹźŻżŽžδϕĐĐБВГДЕЖЗĐЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзийклмнопрŃŃ‚ŃфхцчŃщъыьэюяёáµ"; + +//statistics +// total: 377 nouns, 1536 sentences +// EN: 15844B nouns, 96056B sentences +// PL: 19583B nouns, 99510B sentences +// TR: 15423B nouns, 57798B sentences +// CZ: 20008B nouns, 107461B sentences +// RU: 34570B nouns, 160721B sentences +// DE: 17001B nouns, 81507B sentences +// check hash: 6b8b4567 +hashcode hashval = 0x6b8b4567; + +sentence all_sentences[1536] = { +/*MISSING*/ {0x0, { // "" +/*MISSING*/ "", +/*MISSING*/ "", +/*MISSING*/ "", +/*MISSING*/ "", +/*MISSING*/ "", + }}, + {0x314db7, { // "You cannot go against the wind!" + "Nie moĹĽesz iść pod wiatr!", +/*MISSING*/ "You cannot go against the wind!", + "NemĹŻĹľeš jĂ­t proti vÄ›tru!", + "Nie moĹĽesz iść pod wiatr!", + "Du kannst nicht gegen den Wind laufen!", + }}, + {0xbe8a00, { // "No summoning possible here!" + "PrzywoĹ‚anie niemoĹĽliwe!", + "Çağırmak burada mĂĽmkĂĽn deÄźil!", + "Sem se nic vyvolat nedá!", + "Призыв невозможен!", + "Beschwören hier nicht möglich!", + }}, + {0xdae76d, { // "A creepy monster who follows you everywhere in the Graveyard." + "Ten odraĹĽajÄ…cy potwĂłr chodzi za TobÄ… po cmentarzu!", + "Seni Mezarlık boyunca takip eden ĂĽrpertici bir canavar.", + "DÄ›sivĂ˝ netvor, kterĂ˝ tÄ› sleduje po celĂ©m HĹ™bitovÄ›.", + "ĐźŃгающий монŃŃ‚Ń€, вечно преŃледŃющий Đ’Đ°Ń Đ˝Đ° Кладбище.", + "Ein gruseliges Monster das dir ĂĽber den ganzen Friedhof folgt!", + }}, + {0xe9a6b0, { // "local highscores" + "lokalne wyniki", + "yerel yĂĽksek skorlar", + "lokálnĂ­ hi-score", + "локальные рекорды", + "Lokale Highscores", + }}, + {0x134fcc9, { // "Are there any magical orbs in %the1?..." + "Czy %abl1 sÄ… jakieĹ› magiczne sfery?", + "%abl1 baĹźka sihirli kĂĽre var mı?", + "Jsou %abl1 nÄ›jakĂ© magickĂ© sfĂ©ry?", + "Đ•ŃŃ‚ŃŚ ли какие-нибŃĐ´ŃŚ Ńферы %abl1?", + "Gibt es irgendwelche Orbs in %dem1 %d1?", + }}, + {0x1988dec, { // "ESC = return to the game" + "ESC = powrĂłt do gry", + "ESC = oyuna geri dön", + "ESC = návrat do hry", + "ESC = вернŃŃ‚ŃŚŃŃŹ в игрŃ", + "ESC = ZurĂĽck zum Spiel", + }}, + {0x231516d, { // "%The1 tricks %the2." + "%1 pokona%Ĺ‚1 %a2.", + "%1 %a2 kandırdı.", + "%1 pĹ™elsti%l1 %a2.", + "%1 победил%E1 %a2.", + "%Der1 %1 ĂĽberlistet %den2 %a2.", + }}, + {0x28f16c6, { // "SORT" + "SORT", + "SIRALA", + "TĹĂŤDIT", + "СОРТĐĐ ĐŁĐ™", + "SORT", + }}, + {0x2a95fec, { // "save the game" + "zapisz i zakoĹ„cz", + "oyunu kaydet", + "uloĹľit a ukonÄŤit hru", + "Ńохранить игрŃ", + "Speichern", + }}, + {0x2fc1d77, { // "This forest was planted by one of the wizards from the Ivory Tower to conduct experiments with gravity." + "Ten las zostaĹ‚ zasadzony przez jednego z czarodziejĂłw z WieĹĽy z KoĹ›ci SĹ‚oniowej, by przeprowadzać eksperymenty z grawitacjÄ….", +/*MISSING*/ "This forest was planted by one of the wizards from the Ivory Tower to conduct experiments with gravity.", + "Tento les vysadil jeden z ÄŤarodÄ›jĹŻ z Věže ze slonovĂ© kosti, aby tu provádÄ›l pokusy s gravitacĂ­.", + "Этот Đ»ĐµŃ Đ±Ń‹Đ» Ńоздан одним из магов Đ‘Đ°Ńни из Слоновой КоŃти для продолжения ŃŤĐşŃпериментов Ń ĐłŃ€Đ°Đ˛Đ¸Ń‚Đ°Ń†Đ¸ĐµĐą.", + "Dieser Wald wurde von einem der Zauberer des Elfenbeinturmes gepflanzt, um Experimente mit der Graviation durchzufĂĽhren.", + }}, + {0x35292aa, { // "\nSpawn rate (in Hubs): %1%/%2\n" + "\nCzÄ™stość wystÄ™powania (w centrach): %1%/%2\n", +/*MISSING*/ "\nSpawn rate (in Hubs): %1%/%2\n", + "\nFrekvence (v centrálnĂ­ch krajĂ­ch): %1%/%2\n", + "\nЧаŃтота появления (в Центрах): %1%/%2\n", +/*MISSING*/ "\nSpawn rate (in Hubs): %1%/%2\n", + }}, + {0x3762af5, { // "This Orb allows you to grow like an Ivy. The Ivy is always rooted in your current location; moving among the Ivy cells will move the root. Moving to a new location will cause the Ivy to grow , if an Ivy could make that movement (otherwise it breaks). You can also target one of the cells adjacent to your ivy (not to you) to grow or attack there." + "Ta Sfera pozwala Ci rosnąć jak bluszcz. Bluszcz jest zawsze ukorzeniony na Twojej pozycji; ruch w obrÄ™bie komĂłrek bluszcza powoduje przemieszczenie korzenia. Bluszcz roĹ›nie gdy ruszasz siÄ™ na nowÄ… komĂłrkÄ™ (o ile bluszcz mĂłgĹ‚by tam urosnąć, w przeciwnym przypadku bluszcz siÄ™ Ĺ‚amie). MoĹĽesz rĂłwnieĹĽ wycelować w jednÄ… z komĂłrek sÄ…siadujÄ…cych z Twoim bluszczem (nie z TobÄ…), by tam urosnąć lub zaatakować.", +/*MISSING*/ "This Orb allows you to grow like an Ivy. The Ivy is always rooted in your current location; moving among the Ivy cells will move the root. Moving to a new location will cause the Ivy to grow , if an Ivy could make that movement (otherwise it breaks). You can also target one of the cells adjacent to your ivy (not to you) to grow or attack there.", + "Tato SfĂ©ra ti umoĹľĹuje rĹŻst, jako bys byl BĹ™eÄŤĹĄan. KoĹ™en BĹ™eÄŤĹĄanu je vĹľdy na polĂ­ÄŤku, kde se právÄ› nacházíš; pohybem mezi polĂ­ÄŤky BĹ™eÄŤĹĄanu se tento koĹ™en pĹ™esune. Pokud se pohneš na novĂ© mĂ­sto, BĹ™eÄŤĹĄan tam vyroste, ale jen pokud by normálnĂ­ BĹ™eÄŤĹĄan mohl provĂ©st takovĂ˝ tah (jinak se pĹ™etrhne). MĹŻĹľeš takĂ© zacĂ­lovat jedno z polĂ­ÄŤek, kterĂ© sousedĂ­ se tvĂ˝m BĹ™eÄŤĹĄanem (ale ne s tebou), a rozrĹŻst se tam nebo tam zaĂştoÄŤit.", + "Đ­Ń‚Đ° Ńфера позволяет тебе раŃти как плющ. Корень плюща находитŃŃŹ в твоей позиции; движение по клеткам плюща меняет корень. При движении в новŃŃŽ ĐşĐ»ĐµŃ‚ĐşŃ ĐżĐ»ŃŽŃ‰ раŃŃ‚Ń‘Ń‚, еŃли может, иначе рвётŃŃŹ. Также вы можете выбрать ĐşĐ»ĐµŃ‚ĐşŃ Ń€ŃŹĐ´ĐľĐĽ ŃĐľ Ńвоим плющом, чтобы раŃти или атаковать Ń‚ŃĐ´Đ°.", +/*MISSING*/ "This Orb allows you to grow like an Ivy. The Ivy is always rooted in your current location; moving among the Ivy cells will move the root. Moving to a new location will cause the Ivy to grow , if an Ivy could make that movement (otherwise it breaks). You can also target one of the cells adjacent to your ivy (not to you) to grow or attack there.", + }}, + {0x38a34b8, { // "connected to Google Games" + "poĹ‚Ä…czenie z Google Games", +/*MISSING*/ "connected to Google Games", + "pĹ™ipojeno ke Google Games", + "подключено Đş Google Games", + "verbunden mit Google Games", + }}, + {0x3c8943c, { // "%The1 sinks!" + "%1 uton%Ä…Ĺ‚1!", + "%1 battı!", + "%1 zmize%l1 pod vodou!", + "%1 ŃтонŃĐ»%E1!", + "%Der1 %1 sinkt!", + }}, + {0x3f4b7d5, { // "A predator native to the Zebra." + "DrapieĹĽnik ĹĽyjÄ…cy w krainie Zebry.", + "Zebra'da yaĹźayan bir vahĹźi hayvan.", + "Predátor pocházejĂ­cĂ­ ze Zebry.", + "Типичный хищник этой земли.", + "Ein Raubtier das im Zebra heimisch ist.", + }}, + {0x42913a9, { // "This orb can be used to invoke the lightning spell, which causes lightning bolts to shoot from you in all directions." + "Ta sfera pozwala rzucić czar BĹ‚yskawica, ktĂłry powoduje wystrzelenie bĹ‚yskawicy w kaĹĽdym kierunku.", + "Bu kĂĽre ĹźimĹźek bĂĽyĂĽsĂĽnĂĽ kullanmaya yarar, senden her yöne doÄźru kıvılcımlar saçılır.", + "Tuto sfĂ©ru mĹŻĹľeš použít k seslánĂ­ kouzla Blesk, kterĂ© zpĹŻsobĂ­, Ĺľe z tebe do všech smÄ›rĹŻ vyletĂ­ blesky.", + "Đ­Ń‚Đ° Ńфера может иŃпользоватьŃŃŹ для заклинания Молнии, которое бьёт молниями во вŃех направлениях.", + "Du kannst diesen Orb verwenden um einen Blitzzauber zu wirken, der Blitze von deiner Position aus in sämtliche Richtungen schieĂźt.", + }}, + {0x43fda2b, { // "distance: %1\n" + "odlegĹ‚ość: %1\n", + "uzaklık: %1\n", + "vzdálenost: %1\n", + "раŃŃтояние: %1\n", + "Distanz: %1\n", + }}, + {0x4b05b05, { // "polygonal" + "wielokÄ…t", +/*MISSING*/ "polygonal", + "polygonálnĂ­", + "многоŃгольник", + "polygonal", + }}, + {0x50900d1, { // "Level of water bottom" + "Poziom dna wody", +/*MISSING*/ "Level of water bottom", + "ĂšroveĹ dna", + "Уровень дна водоёма", +/*MISSING*/ "Level of water bottom", + }}, + {0x50fa0ab, { // "The floor has collapsed! RUN!" + "Ziemia siÄ™ zapadĹ‚a! UCIEKAJ!", + "Zemin çöktĂĽ! KAÇ!", + "Podlaha se propadla! UTĂŤKEJ!", + "Пол Ń€ŃŃ…Đ˝ŃĐ»! Đ‘Đ•Đ“ĐТЕ!", + "Der Boden bricht zusammen - RENN!", + }}, + {0x51bd008, { // "d = delete v" + "d = skasuj v", + "d = sil v", + "d = vymaĹľ v", + "d = Ńдалить v", + "d = entfernen v", + }}, + {0x58fe401, { // "Help texts disabled." + "Teksty pomocy wyĹ‚Ä…czone.", +/*MISSING*/ "Help texts disabled.", + "Texty nápovÄ›dy vypnuty.", + "ТекŃŃ‚Ń‹ помощи выключены.", +/*MISSING*/ "Help texts disabled.", + }}, + {0x5a29c04, { // "reverse pointer control" + "odwrotne sterowanie", +/*MISSING*/ "reverse pointer control", + "obrácenĂ© ovládánĂ­ ukazatele", + "обратить Ńправление", +/*MISSING*/ "reverse pointer control", + }}, + {0x5e2554f, { // "Orb power gained!" + "Zdobyta moc!", + "KĂĽre gĂĽcĂĽ kazandın!", + "ZĂ­ska%l0 jsi moc sfĂ©ry!", + "Сила Ńферы полŃчена!", + "Orb Kraft erhalten!", + }}, + {0x5ee6b22, { // "dress color" + "kolor sukienki", + "kıyafet rengi", + "barva šatĹŻ", + "цвет одежды", + "Kleidungsfarbe", + }}, + {0x62ece6d, { // "select this color" + "wybierz ten kolor", +/*MISSING*/ "select this color", + "vyber tuto barvu", + "выбрать этот цвет", +/*MISSING*/ "select this color", + }}, + {0x633ab9b, { // "which may not some day be applied to phenomena of the real world.\"" + "zastosować do zjawisk w Ĺ›wiecie rzeczywistym.\"", +/*MISSING*/ "which may not some day be applied to phenomena of the real world.\"", + "kterĂ© by jednoho dne nemohlo bĂ˝t moĹľnĂ© aplikovat na jevy ve skuteÄŤnĂ©m svÄ›tÄ›.\"", + "которая когда-нибŃĐ´ŃŚ не окажетŃŃŹ применимой Đş явлениям дейŃтвительного мира.\"", +/*MISSING*/ "which may not some day be applied to phenomena of the real world.\"", + }}, + {0x64978a2, { // "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." + "Lasy na Karaibach sÄ… zbyt gÄ™ste, by mĂłgĹ‚ przez nie przejść czĹ‚owiek i trudno jest je spalić. Mieszka w nich duĹĽo kolorowych papug.", + "Karayip Ormanları insanlar tarafından gezilmek için fazla yoÄźun, ve yanmaya da dirençli. Buralarda bir sĂĽrĂĽ, renkli papaÄźana rastlayabilirsin.", + "KaribskĂ© lesy jsou příliš hustĂ© na to, aby jimi mohl projĂ­t ÄŤlovÄ›k, a špatnÄ› hoří. Lze v nich najĂ­t mnoho barevnĂ˝ch papouškĹŻ.", + "КарибŃкие леŃĐ° ŃлиŃком плотны, чтобы Ńквозь них мог пройти человек, и их Ń‚Ń€Ńдно поджечь. Много разноŃветных попŃгаев живёт здеŃŃŚ.", + "Die karibischen Wälder sind zu dicht um von Menschen durchquert zu werden, und brennen nur schwerlich. Es gibt hier aber viele, farbenfrohe Papageien.", + }}, + {0x6a23894, { // "You chop down the tree." + "Ĺšci%Ä…Ĺ‚eĹ›0 drzewo.", + "AÄźacı kestin.", + "Pokáce%l0 jsi strom.", + "Đ’Ń‹ ŃŃ€Ńбили дерево.", + "Du fällst den Baum.", + }}, + {0x6bdb7af, { // "This has been recorded in the Google Leaderboards." + "To zostaĹ‚o zapisane w Rankingach Google.", + "Bu Google Listelerine kaydedildi.", + "Bylo zaznamenáno na Ĺľebříčky Googleu.", + "Đ­Ń‚Đľ было запиŃано в рейтинг Google.", + "Dies wurde in die Google Leaderboards aufgenommen.", + }}, + {0x6fdb6be, { // "texture size" + "rozmiar tekstury", +/*MISSING*/ "texture size", + "rozmÄ›r textury", + "размер текŃŃ‚ŃŃ€", + "Texturgröße", + }}, + {0x701c698, { // " [%1 turns]" + " [kolejek: %1]", + " [Tur: %1]", + " [poÄŤet kol: %1]", + " [ходов: %1]", + " [%1 ZĂĽge]", + }}, + {0x7066813, { // "band width" + "szerokość wstÄ™gi", +/*MISSING*/ "band width", + "šířka pásu", + "Ńирина ленты", + "Bandbreite", + }}, + {0x73c4cb8, { // "Cannot throw fire there!" + "Nie moĹĽesz tego podpalić!", + "Oraya ateĹź atamazsın!", + "Sem nemĹŻĹľeš vrhnout oheĹ!", + "Đ’Ń‹ не можете кинŃŃ‚ŃŚ огонь ŃŃŽĐ´Đ°!", + "Du kannst dort kein Feuer hinwerfen!", + }}, + {0x758dc55, { // "\nThis is a ranged Orb. " + "\nDziaĹ‚anie tej Sfery celujesz w konkretne miejsce.", +/*MISSING*/ "\nThis is a ranged Orb. ", + "\nToto je sfĂ©ra, kterou je tĹ™eba zacĂ­lit na urÄŤitĂ© polĂ­ÄŤko.", + "\nДейŃтвие этой Ńферы направляетŃŃŹ на определённŃŃŽ клеткŃ.", + "\nDies ist ein Distanzorb.", + }}, + {0x7bd70e6, { // "%The1 kisses you, and thanks you for saving %him1." + "%1 CiÄ™ pocaĹ‚owa%Ĺ‚1 i podziÄ™kowa%Ĺ‚1 za uratowanie %go1.", + "%1 seni öptĂĽ ve %go1 kurtardığın için sana teĹźekkĂĽr etti.", + "%1 tÄ› polĂ­bi%l1 a dÄ›kuje ti, Ĺľe jsi %ho1 zachránil.", + "%1 поцеловал%E1 тебя и поблагодарил%E1 Đ·Đ° ŃпаŃение.", + "%Der1 %1 kĂĽsst dich und dankt dir fĂĽr die Rettung.", + }}, + {0x7c046df, { // "exit this menu" + "wyjdĹş", +/*MISSING*/ "exit this menu", + "ven z menu", + "выход", + "MenĂĽ verlassen", + }}, + {0x7d42ba2, { // "The Vineyard is filled with vines. A very dense pattern of straight lines here...\n\nVine Beasts and Vine Spirits change vine cells to grass, and vice versa." + "Winnica jest wypeĹ‚niona winoroĹ›lami. Bardzo gÄ™sta siatka linii prostych...\n\nWinne Bestie i Duszki zmieniajÄ… winoroĹ›le w trawÄ™ i z powrotem.", + "Ĺžaraplık Ĺźaraplarla dolu. Burada çok sık dĂĽz çizgiler var ...\n\nşŞarap Canavarları ve Ĺžarap Ă–zleri Ĺźarap hĂĽcrelerini çimene ve tam tersine çevirir.", + "Vinice je plná rĂ©vy. Je tu velmi hustĂ˝ vzor rovnĂ˝ch ÄŤar...\n\nRĂ©vovĂ­ netvoĹ™i a RĂ©vovĂ­ duchovĂ© mÄ›nĂ­ polĂ­ÄŤka s rĂ©vou na trávu a obrácenÄ›.", + "Виноградник полон виноградными лозами. Они образŃŃŽŃ‚ очень плотный Ńзор из прямых...\n\nВинные звери и Đ´Ńхи превращают Ń‚Ń€Đ°Đ˛Ń Đ˛ вино и наоборот.", + "Der Weingarten ist voller Reben. Ein sehr dichtes Netz aus Geraden...\n\nRebenbestien und Rebenseelen verwandeln Zellen von Gras in Reben und umgekehrt.", + }}, + {0x7e94a1b, { // "automatic" + "automatyczny", + "otomatik", + "automatickĂ˝", + "авто", + "automatisch", + }}, + {0x7f6534d, { // "A spirit living in the vines!\n\nVine Spirits destroy the vines when they die." + "Duch ĹĽyjÄ…cy w winoroĹ›lach!\n\nWinne Duszki niszczÄ… winoroĹ›le, gdy ginÄ….", + "Ĺžarabın içinde yaĹźayan bir ruh!\n\nĹžarap ruhları öldĂĽklerinde etraflarındaki Ĺźarabı yok eder.", + "Duch ĹľijĂ­cĂ­ v rĂ©vÄ›!\n\nRĂ©vovĂ­ duchovĂ© niÄŤĂ­ rĂ©vu, v nĂ­Ĺľ se nacházejĂ­, kdyĹľ zemĹ™ou.", + "Đ”ŃŃ…, живŃщий в лозе\n\nВинный Đ´ŃŃ… Ńничтожает Đ»ĐľĐ·Ń ĐżŃ€Đ¸ гибели.", + "Eine Seele die in den Reben lebt!\n\nRebenseelen zerstören Reben, wenn sie sterben.", + }}, + {0x854657d, { // "vector graphics editor" + "edytor grafiki wektorowej", + "vektör grafiÄźi editörĂĽ", + "editor vektorovĂ© grafiky", + "векторный графичеŃкий редактор", + "Vektoren-Grafiken-Editor", + }}, + {0x88bb835, { // "o = zoom out" + "o = oddalenie", + "o = uzaklaĹź", + "o = oddálenĂ­", + "o = отдалить", + "o = rauszoomen", + }}, + {0x8cf4e7b, { // "%The1 attacks %the2!" + "%1 atakuje %a2!", + "%1 %2 tarafına saldırdı!", + "%1 ĂştoÄŤĂ­ na %a2!", + "%1 атаковал%E1 %a2!", + "%Der1 %1 greift %den2 %a2 an!", + }}, + {0x8dad708, { // "Hyperboloid model" + "Model hiperboloidy", +/*MISSING*/ "Hyperboloid model", + "HyperboloidovĂ˝ model", + "Модель гиперболоида", +/*MISSING*/ "Hyperboloid model", + }}, + {0x90a2e13, { // "A monster who is able to live inside the living cave wall." + "SÄ…czaki ĹĽyjÄ… w Ĺ›ciane Ĺ»ywej Jaskini.", + "YaĹźayan maÄźara duvarlarında yaĹźayabilen bir canavar.", + "Netvor, kterĂ˝ dokáže žít ve zdech Ĺ˝ivoucĂ­ jeskynÄ›.", + "Этот монŃŃ‚Ń€ может жить внŃтри Ńтен пещеры.", + "Ein Monster, das innerhalb der lebenden Wände leben kann.", + }}, + {0x9104223, { // " (won at level %1!)" + " (wygrane na poziomie %1!)", + " (%1. seviyede kazandın!)", + " (vĂ­tÄ›zstvĂ­ -- ĂşroveĹ %1!)", + " (победа на Ńровне %1!)", + " (Mit Level %1 gewonnen!)", + }}, + {0x912bb24, { // "Tall, strong, and holding a flower in his hand. You could not bring yourself to attack such a handsome man." + "Wysoki, silny, z kwiatem w dĹ‚oni. Nie jesteĹ› w stanie zaatakować tak przystojnego mężczyzny.", +/*MISSING*/ "Tall, strong, and holding a flower in his hand. You could not bring yourself to attack such a handsome man.", + "VysokĂ˝, silnĂ˝ a s kvÄ›tinou v ruce. Na tak pohlednĂ©ho muĹľe se nemĹŻĹľeš pĹ™imÄ›t zaĂştoÄŤit.", + "Đ’Ń‹Ńокий, Ńильный, Ń ĐżŃ€ĐµĐşŃ€Đ°Ńным цветком в Ń€Ńках. Đ’Ń‹ не можете Ńдарить этого краŃавца.", + "GroĂź, kräftig und mit einer Blume in der Hand. Du kannst dich nicht dazu ĂĽberwinden so einen hĂĽbschen Mann anzugreifen. ", + }}, + {0x9384dee, { // "Collect treasure to access more different lands..." + "Zbieraj skarby, by znaleźć nowe krainy...", + "BaĹźka diyarlara ulaĹźmak için hazine topla...", + "SbĂ­rej poklady, abys zĂ­skal přístup do dalších, odlišnĂ˝ch krajĹŻ...", + "Собирайте Ńокровища, чтобы найти новые земли...", + "Sammle Schätze um andere Länder zu erreichen...", + }}, + {0x943ad99, { // "And the Orbs of Yendor await!" + "I sfery Yendoru czekajÄ…!", + "Yendorun KĂĽresi seni bekliyor!", + "A YendorskĂ© sfĂ©ry ÄŤekajĂ­!", + "Шары Йендора ждŃŃ‚!", + "Und die Orbs von Yendor erwarten dich!", + }}, + {0x9582b5f, { // "Ye wonder where did th' Pirates find all these riches..." + "Zastanawiasz siÄ™, gdzie Piraci znaleĹşli te bogactwa...", + "Korsanların bu kadar serveti nereden bulduÄźunu merak ediyorsun...", + "ĹĂ­káš si, kde asi ti piráti našli všechno tohle bohatstvĂ­...", + "ĐнтереŃно, где Пираты наŃли эти богатŃтва...", + "Du fragst dich, woher die Piraten all diese Schätze haben...", + }}, + {0x9a8ca13, { // "You feel even more attuned to the magic of this land!" + "JesteĹ› lepiej dostrojony do magii tego Ĺ›wiata!", +/*MISSING*/ "You feel even more attuned to the magic of this land!", + "CĂ­tíš se ještÄ› vĂ­ce pĹ™izpĹŻsobenĂ˝ magii tohoto kraje!", + "Đ’Ń‹ Ńтали Đ»ŃчŃе чŃвŃтвовать магию этой земли!", +/*MISSING*/ "You feel even more attuned to the magic of this land!", + }}, + {0x9abc85a, { // "player 7 spin" + "gracz 7 obrĂłt", +/*MISSING*/ "player 7 spin", + "hráč 7 otáčenĂ­", + "игрок 7 вертит", + "Spieler 7 drehen", + }}, + {0x9ad48c4, { // "polynomial" + "wielomian", +/*MISSING*/ "polynomial", + "polynomiálnĂ­", + "многочлен", + "polynomisch", + }}, + {0x9deb9ae, { // "%The1 is immune to wind!" + "%1 jest odporn%ya1 na wiatr!", + "%1 rĂĽzgârdan etkilenmiyor!", + "%1 je imunnĂ­ proti vÄ›tru!", + "%1 защищён от ветра!", + "%Der1 %1 ist immun gegen Wind!", + }}, + {0xa089fbe, { // "Not so hardcore?" + "Hardkor to nie to?", + "O kadar da aĹźmış deÄźil?", + "Ĺ˝e bys nebyl zas aĹľ tak hardcore?", + "не Ń‚Đ°Đş хардкорно?", + "Doch nicht so hardcore?", + }}, + {0xa3a7b67, { // "black" + "czarny", + "siyah", + "ÄŤernĂ˝", + "чёрный", + "schwarz", + }}, + {0xa6a987f, { // "background music volume" + "gĹ‚oĹ›ność muzyki tĹ‚a", + "mĂĽzik seviyesi", + "hlasitost hudby", + "громкоŃŃ‚ŃŚ фоновой ĐĽŃзыки", + "Hintergrundmusik", + }}, + {0xa7b9017, { // "3D configuration" + "konfiguracja 3D", +/*MISSING*/ "3D configuration", + "3D konfigurace", + "конфигŃрация 3D", +/*MISSING*/ "3D configuration", + }}, + {0xaadf0e6, { // "Viziers are neither pushed away nor stunned. However, you attack them automatically when escaping from them." + "Wezyrowie ani nie sÄ… ogĹ‚uszani, ani odpychani, ale automatycznie ich atakujesz, gdy od nich uciekasz.", + "Vezirler sersemlemez ve geriye itilmez, onlardan kaçarken otomatik olarak onlara saldırmış olursun.", + "VezĂ­ry nemĹŻĹľeš odstrÄŤit ani omráčit, ale automaticky na nÄ› Ăştočíš, kdyĹľ od nich utĂ­káš.", + "Визиря нельзя ни оглŃŃить, ни оттолкнŃŃ‚ŃŚ. Đ’Ń‹ Đ°Ń‚Đ°ĐşŃете его каждый раз, когда Ńбегаете от него.", + "Wesire kannst du weder zurĂĽckstoĂźen noch betäuben. Jedoch greifst du sie automatisch an wenn du von ihnen fliehst.", + }}, + {0xab0d18e, { // "%The1 shows you two fingers." + "%1 pokaza%Ĺ‚1 Ci dwa palce.", + "%1 sana iki parmağını gösterdi.", + "%1 ti ukáza%l1 dva prsty.", + "%1 показал%E1 Đ’Đ°ĐĽ два пальца.", + "%Der1 %1 zeigt dir zwei Finger.", + }}, + {0xae95569, { // "A typical monster from the Graveyard, who moves through walls.\n\nThere are also wandering Ghosts. They will appear if you do not explore any new places for a long time (about 100 turns). They can appear anywhere in the game." + "Typowy cmentarny stwĂłr. MoĹĽe przechodzić przez Ĺ›ciany.\n\nSÄ… teĹĽ bĹ‚Ä…dzÄ…ce Duchy, ktĂłre pojawiajÄ… siÄ™, gdy nie zwiedzasz nowych miejsc przez dĹ‚ugi czas (okoĹ‚o 100 kolejek). Duchy te mogÄ… pojawić siÄ™ w dowolnym miejscu w grze.", + "Mezarlıkta sık rastlanan bir canavar. Duvarlardan geçebilir.\n\nAyrıca amaçsızca gezinen hayaletler var. Uzunca bir sĂĽre (100 tur kadar) yeni diyarlar keĹźfetmediÄźinde karşına çıkarlar. Oyundaki herhangi bir yerde karşına çıkabilirler.", + "TypickĂ˝ hĹ™bitovnĂ­ netvor, kterĂ˝ dokáže procházet zdmi.\n\nExistujĂ­ takĂ© bludnĂ­ DuchovĂ©, kteří se objevĂ­, pokud dlouho (pĹ™ibliĹľnÄ› 100 kol) neprozkoumáš žádnĂ© novĂ© mĂ­sto. Ti se mohou objevit kdekoli ve hĹ™e.", + "Типичный для Кладбища монŃŃ‚Ń€, Ńмеющий проходить Ńквозь Ńтены.\n\nТакже ŃŃщеŃтвŃŃŽŃ‚ блŃждающие призраки. Они появляютŃŃŹ, еŃли Đ’Ń‹ не иŃŃледŃете новые меŃŃ‚Đ° в течение больŃого времени (примерно 100 ходов). Они могŃŃ‚ появитьŃŃŹ в любом меŃте в игре", + "Ein Monster das vom Friedhof stammt und sich durch Wände bewegen kann.\n\nEs gibt auch umherirrende Geister. Diese erscheinen, wenn du dich lange (um die 100 ZĂĽge) am selben Ort aufhältst. Sie können ĂĽberall im Spiel auftauchen.", + }}, + {0xaeacc22, { // "This Orb allows you to blow your enemies away.\n\nClick 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." + "Ta Sfera pozwala Ci zdmuchnąć Twoich przeciwnikĂłw.\n\nKliknij potwora, by go zdmuchnąć o jedno pole. Nie moĹĽna uĹĽywać przeciwko mimikom, duchom i potworom zajmujÄ…cym wiele pĂłl.", + "Bu KĂĽre dĂĽĹźmanları rĂĽzgârla uzaÄźa ittirmene yarar.\n\nBir canavara tıklayarak onu rĂĽzgârla bir hĂĽcre ittirebilirsin. Bu özellik, taklitçilere, hayaletlere, köpekbalıklarına, çok hĂĽcreli canavarlara ve belli bir araziye özgĂĽ canavarlara karşı kullanılamaz.", + "Tato sfĂ©ra ti umoĹľĹuje odfouknout nepřátele daleko od tebe.\n\nKliknutĂ­m na netvora ho mĹŻĹľeš odfouknout o jedno pole od sebe. Tuto schopnost nelze použít na mimiky, duchy, Ĺľraloky a jinĂ© netvory, kteří jsou omezenĂ­ pouze na specifickĂ˝ terĂ©n nebo zabĂ­rajĂ­ vĂ­ce neĹľ jedno pole.", + "Đ­Ń‚Đ° Ńфера позволяет Đ’Đ°ĐĽ ŃĐ´Ńват врагов вдаль.\n\nНажми на монŃтра, чтобы ŃĐ´ŃŃ‚ŃŚ его на 1 клеткŃ. Невозможно ŃĐ´ŃŃ‚ŃŚ мимиков, Đ´Ńхов, Đ°ĐşŃĐ» и Đ´Ń€Ńгих монŃтров, живŃщих на определённой территории, и монŃтров из неŃкольких чаŃтей.", + "Dieser Orb erlaubt es dir, deine Feinde wegzuwehen.\n\nKlicke auf ein Monster, um es eine Zelle wegzuwehen. Der Orb ist wirkungslos gegenĂĽber Mimiken, Geistern, Haien, und anderen Monstern, die nur auf bestimmtem Terrain leben können. Monster, die größer als eine Zelle sind, sind auch immun.", + }}, + {0xaf55625, { // "m = move v" + "m = przenieĹ› v", + "m = taşı v", + "m = pĹ™esuĹ v", + "m = передвинŃŃ‚ŃŚ v", + "m = bewegen v", + }}, + {0xb885cbb, { // "Make him hit himself by walking away from him." + "OdejdĹş od niego, by sam siÄ™ zaatakowaĹ‚.", + "Ondan uzaklaĹźarak kendisine vurmasını saÄźla.", + "KdyĹľ se pohneš smÄ›rem od nÄ›j, zasáhne sám sebe.", + "Đ—Đ°Ńтавьте его Ńдарить Ńамого Ńебя, проŃŃ‚Đľ подойдя Đş немŃ.", + "Bringe ihn dazu sich selbst zu treffen, indem du dich von ihm entfernst.", + }}, + {0xb8ac8d0, { // "You get the powers of Shield, Horns, and Thorns after you move two moves in a straight line with this Orb." + "Gdy ruszysz siÄ™ 2 pola w linii prostej z tÄ… SferÄ…, dostajesz moce Tarczy, RogĂłw i Cierni.", +/*MISSING*/ "You get the powers of Shield, Horns, and Thorns after you move two moves in a straight line with this Orb.", + "Kdykoli se pohneš o dvÄ› polĂ­ÄŤka rovnÄ›, zĂ­skáš schopnosti Ĺ tĂ­tu, RohĹŻ a TrnĹŻ.", + "Đ’Ń‹ полŃчаете Ńилы Щита, Рогов и Шипов, еŃли ŃоверŃаете два хода в одном направлении.", +/*MISSING*/ "You get the powers of Shield, Horns, and Thorns after you move two moves in a straight line with this Orb.", + }}, + {0xbcc46d4, { // "1 turn" + "1 kolejka", +/*MISSING*/ "1 turn", + "1 kolo", + "1 ход", +/*MISSING*/ "1 turn", + }}, + {0xbe22143, { // "This orb allows you to instantly kill a non-adjacent enemy by clicking it. Each use drains 30 charges." + "Ta sfera pozwala natychmiastowo zabić niesÄ…siadujÄ…cego przeciwnika (klikajÄ…c go). KaĹĽde uĹĽycie zmniejsza poziom naĹ‚adowania o 30 jednostek.", + "Bu kĂĽre yakında olmayan herhangi bir dĂĽĹźmana tıklayarak onu öldĂĽrebilmene izin verir. Her kullanım 30 Ĺźarj götĂĽrĂĽr.", + "Tato sfĂ©ra ti umoĹľĹuje zabĂ­t kliknutĂ­m libovolnĂ©ho nepřítele, kterĂ˝ nenĂ­ na sousednĂ­m polĂ­ÄŤku. KaĹľdĂ© pouĹľitĂ­ sníží náboj sfĂ©ry o 30.", + "Đ­Ń‚Đ° Ńфера позволит Đ’Đ°ĐĽ Ńбить любого врага, не Ńтоящего рядом Ń Đ’Đ°ĐĽĐ¸, проŃŃ‚Đľ кликнŃв по немŃ. Đ­Ń‚Đľ дейŃтвие тратит 30 зарядов.", + "Dieser Orb erlaubt es dir, einen nicht angrenzenden Feind augenblicklich zu töten, indem du auf ihn klickst. Jede Verwendung verbraucht 30 Ladungen.", + }}, + {0xbf7cd91, { // "Cheat-changed the display." + "Zmieniam tryb wyĹ›wietlania.", + "Cheat-changed the display.", + "Cheat-changed the display.", + "Отображение иŃпользованных читов.", + "Anzeige durch Cheats geändert.", + }}, + {0xc09f69c, { // "no axes" + "bez osi", + "eksen yok", + "bez os", + "без ĐľŃей", + "keine Achsen", + }}, + {0xc3296b1, { // "map editor" + "edytor map", + "harita editörĂĽ", + "mapovĂ˝ editor", + "редактор карт", + "Map Editor", + }}, + {0xc51a284, { // "\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the same kind." + "\n\nDuch nigdy nie wchodzi na pole sÄ…siadujÄ…ce z innym Duchem tego samego typu.", +/*MISSING*/ "\n\nA Ghost never moves to a cell which is adjacent to another Ghost of the same kind.", + "\n\nDuch nikdy nevstoupĂ­ na polĂ­ÄŤko sousedĂ­cĂ­ s jinĂ˝m Duchem stejnĂ©ho typu.", + "\n\nПризрак не может ходить на ĐşĐ»ĐµŃ‚ĐşŃ Ń€ŃŹĐ´ĐľĐĽ Ń Đ´Ń€Ńгим таким же призраком.", + "\n\nEin Geist bewegt sich niemals zu einer Zelle direkt neben einem anderen Geist derselben Art.", + }}, + {0xc9b8ae4, { // "%The1 breathes fire!" + "%1 zionÄ…Ĺ‚ ogniem!", +/*MISSING*/ "%The1 breathes fire!", + "%1 chrlĂ­ oheĹ!", + "%1 Đ´Ń‹Ńит огнём!", + "%Der1 %1 speit Feuer!", + }}, + {0xcd8ab74, { // "Each eight turns, each rosebush at distance at most 5 from you will release a wave of alluring scent. Creatures on the frontwave will move towards where the scent came from. Even if it causes them to attack their friends or beautiful creatures, or move into water, fire, chasm, or thorns of the rosebush. Ivies, Ghosts, Rock Snakes, Rose Ladies and Lords, and monsters restricted to a specific terrain are immune to scents." + "Co 8 kolejek kaĹĽdy krzak róży w promieniu 5 od Ciebie wysyĹ‚a falÄ™ uwodzicielskiego zapachu. Stworzenia na czole fali wykonajÄ… ruch w kierunku ĹşrĂłdĹ‚a zapachu, nawet jeĹĽeli by to spowodowaĹ‚o, ĹĽe zaatakujÄ… swoich przyjaciół lub piÄ™kne istoty, wejdÄ… w wodÄ™, ogieĹ„, przepaść, czy wpadnÄ… na kolce róży. Bluszcz, duchy, skalne węże, Różane Damy i Panowie, a takĹĽe potwory ĹĽyjÄ…ce w konkretnym terenie sÄ… odporne na zapachy.", +/*MISSING*/ "Each eight turns, each rosebush at distance at most 5 from you will release a wave of alluring scent. Creatures on the frontwave will move towards where the scent came from. Even if it causes them to attack their friends or beautiful creatures, or move into water, fire, chasm, or thorns of the rosebush. Ivies, Ghosts, Rock Snakes, Rose Ladies and Lords, and monsters restricted to a specific terrain are immune to scents.", + "KaĹľdĂ˝ rĹŻĹľovĂ˝ keřík ve vzdálenosti 5 nebo mĂ©nÄ› od tebe vypustĂ­ kaĹľdĂ˝ch 8 kol vlnu vábivĂ© vĹŻnÄ›. KaĹľdĂ˝ tvor zasaĹľenĂ˝ touto vĹŻnĂ­ se musĂ­ pohybovat smÄ›rem k jejĂ­mu zdroji. A to i tehdy, pokud by dĂ­ky tomu musel zaĂştoÄŤit na svĂ© kamarády nebo krásnĂ© tvory nebo musel vstoupit do vody, do ohnÄ›, do propasti nebo na trny rĹŻĹľovĂ©ho keříku. BĹ™eÄŤĹĄan, KamennĂ­ hadi, RĹŻĹľovĂ© dámy a pánovĂ© a netvoĹ™i omezenĂ­ na urÄŤitĂ˝ terĂ©n jsou vĹŻÄŤi vĹŻni imunnĂ­.", + "Каждые 8 ходов каждый розовый ĐşŃŃŃ‚ на раŃŃтоянии не более 5 от Đ’Đ°Ń Đ˛Ń‹ĐżŃŃкает Đ˛ĐľĐ»Đ˝Ń ĐĽĐ°Đ˝ŃŹŃ‰ĐµĐłĐľ аромата. Đ’Ńе монŃтры на ĐżŃти двигаютŃŃŹ Đş ĐşŃŃŃ‚Ń, даже еŃли им приходитŃŃŹ атаковать Ńоюзника или прекраŃное ŃŃщеŃтво, пойти в водŃ, огонь, пропаŃŃ‚ŃŚ или в Ńипы ĐşŃŃŃ‚Đ°. Đ­Ń‚Đľ не дейŃтвŃет на призраков, плющи, каменных змей и и монŃтров, ограниченных Ńвоей землёй.", + "Alle acht ZĂĽge versprĂĽht jeder Rosenbusch in einer Entfernung von maximal 5 Zellen von dir eine Wolke verfĂĽhrerischen Dufts. Wesen an der Wellenfront werden sich dorthin bewegen, wo der Duft herkommt. Auch wenn das sie dazu bringt, ihre Freunde oder schöne Wesen anzugreifen, oder sich in Wasser, Feuer, AbgrĂĽnde oder Dornen der RosenbĂĽsche zu begeben. Efeue, Geister, Felsenschlangen, Rosendamen und -herren und Monster, die auf ein bestimmtes Gelände beschränkt sind, sind immun gegenĂĽber dem Duft.", + }}, + {0xcef9d5c, { // "You hear a distant roar!" + "SĹ‚yszysz odlegĹ‚y ryk!", +/*MISSING*/ "You hear a distant roar!", + "Zaslechl jsi vzdálenĂ© zaĹ™vánĂ­!", + "Đ’Ń‹ ŃлыŃите далёкий рёв!", + "Du hörst ein entferntes BrĂĽllen!", + }}, + {0xd0aa269, { // "Press F1 or right-click things for help." + "F1 lub klikaj prawym na elementach gry, by uzyskać pomoc.", +/*MISSING*/ "Press F1 or right-click things for help.", + "NápovÄ›du mĹŻĹľeš zobrazit stiskem F1 nebo pravĂ˝m kliknutĂ­m na rĹŻznĂ© vÄ›ci.", + "Нажмите F1 или иŃпользŃйте правŃŃŽ ĐşĐ˝ĐľĐżĐşŃ ĐĽŃ‹Ńи, чтобы открыть помощь.", +/*MISSING*/ "Press F1 or right-click things for help.", + }}, + {0xd10afc8, { // "\"The Knights of the Horocyclic Table salute you!\"" + "\"Rycerze Horocyklicznego StoĹ‚u CiÄ™ pozdrawiajÄ…!\"", + "\"Horosikıl Masa Şövalyeleri seni selamlıyor!\"", + "\"RytĂ­Ĺ™i HorocyklickĂ©ho stolu tÄ› zdravĂ­!\"", + "\"Рыцари ОрицикличеŃкого Стола поздравляют Đ’Đ°Ń!\"", + "\"Die Ritter der Horozyklischen Tafel salutieren!\"", + }}, + {0xd16bdfe, { // "the second page [Space]" + "druga strona [Space]", + "ikinci sayfa [Space]", + "druhá stránka [mezernĂ­k]", + "вторая Ńтраница [Пробел]", + "Zweite Seite [LEER]", + }}, + {0xd1a5607, { // "Butterflies don't pursue you -- unless you get next to them, they just spin around the obstacles. They cannot be killed conventionally, but you get treasure when a Raging Bull crashes into a Butterfly. " + "Motylki nie goniÄ… CiÄ™ -- krÄ™cÄ… siÄ™ wokół przeszkĂłd, chyba ĹĽe jesteĹ› na sÄ…siednim polu. Nie moĹĽna ich zabić zwykĹ‚Ä… broniÄ…, ale zdobywasz skarb, gdy WĹ›ciekĹ‚y Byk zderzy siÄ™ z Motylkiem.", +/*MISSING*/ "Butterflies don't pursue you -- unless you get next to them, they just spin around the obstacles. They cannot be killed conventionally, but you get treasure when a Raging Bull crashes into a Butterfly. ", + "MotĂ˝lci tÄ› nepronásledujĂ­ -- pokud se nedostaneš tÄ›snÄ› vedle nich, budou prostÄ› jen poletovat kolem pĹ™ekážek. MotĂ˝lky nelze zabĂ­t běžnĂ˝m zpĹŻsobem, ale kdyĹľ do nich vrazĂ­ VzteklĂ˝ bĂ˝k, dostaneš poklad.", + "Бабочки Đ˛Đ°Ń Đ˝Đµ трогают, пока вы не подойдёте прямо Đş ним, они проŃŃ‚Đľ вертятŃŃŹ вокрŃĐł препятŃтвий. ĐŃ… нельзя Ńбить обычным образом, но вы полŃчите Ńокровище, когда БеŃеный бык врежетŃŃŹ в БабочкŃ.", +/*MISSING*/ "Butterflies don't pursue you -- unless you get next to them, they just spin around the obstacles. They cannot be killed conventionally, but you get treasure when a Raging Bull crashes into a Butterfly. ", + }}, + {0xd32734e, { // "Orbs of Yendor found: %1" + "Znalezione Sfery Yendoru: %1", + "Bulunan Yendor KĂĽresi sayısı: %1", + "NalezenĂ˝ch YendorskĂ˝ch sfĂ©r: %1", + "Собрано Ńфер Йендора: %1", + "Orbs von Yendor gefunden: %1", + }}, + {0xd5882d0, { // "Cold blue gems, found in the Cocytus." + "Zimne niebieskie kamienie, znajdowane na zamarzniÄ™tym Kocycie.", + "Mavi soÄźuk mĂĽcevherler sadece Kokitos'ta bulunabilir.", + "ChladnĂ© modrĂ© drahokamy, kterĂ© se nacházejĂ­ v Cocytu.", + "Холодные голŃбые камни, найденные в Коците.", + "Kalte, blaue Edelsteine aus dem Kokytos.", + }}, + {0xd70069e, { // "An impassable lake in Cocytus." + "Nie moĹĽesz przejść przez Jezioro Kocyt.", + "Kokitos'ta, ĂĽzerinden geçilemeyen bir göl.", + "NeprostupnĂ© jezero v Cocytu.", + "Непроходимое озеро в Коците.", + "Ein undurchquerbarer See im Kokytos.", + }}, + {0xdf22139, { // "You overheard Hedgehog Warriors talking about emeralds..." + "PodsĹ‚ucha%Ĺ‚eĹ›0 WojownikĂłw-JeĹĽy rozmawiajÄ…cych o szmaragdach...", + "Kirpi Savaşçıların zĂĽmrĂĽtler hakkında konuĹźtuÄźunu duydun...", + "Zaslechl jsi Ježčí váleÄŤnĂ­ky, jak mluvĂ­ o smaragdech...", + "Đ’Ń‹ ŃлыŃите ежей-воинов, говорящих об изŃĐĽŃ€ŃĐ´Đ°Ń…...", + "Du hörst Igelkrieger ĂĽber Smaragde sprechen...", + }}, + {0xe38d258, { // "friends destroyed: %1" + "przyjaciele zniszczeni: %1", +/*MISSING*/ "friends destroyed: %1", + "zniÄŤenĂ­ kamarádi: %1", + "Ńоюзников Ńничтожено: %1", + "zerstörte Freunde: %1", + }}, + {0xe3f1e5c, { // "You activate the Flash spell!" + "Aktywowa%Ĺ‚eĹ›0 czar BĹ‚ysk!", + "Işık bĂĽyĂĽsĂĽnĂĽ etkinleĹźtirdin!", + "Aktivova%l0 jsi kouzlo Záblesk!", + "Đ’Ń‹ активировали заклинание вŃпыŃки!", + "Du aktivierst den Blitz Zauber!", + }}, + {0xea35811, { // "This Orb allows you to target monsters to stun them. 10 charges are used to stun for 5 turns. Does not work against multi-tile monsters." + "Ta sfera pozwala ogĹ‚uszać potwory na odlegĹ‚ość. 10 Ĺ‚adunkĂłw = ogĹ‚uszenie na 5 tur. Nie dziaĹ‚a przeciwko potworom zajmujÄ…cym wiele pĂłl.", + "Bu KĂĽre canavarları hedefleyerek sersemletmeni saÄźlar. 5 tur sersemletmek için 10 güç kullanır. ÇokluhĂĽcre canavarlara karşı çalışmaz.", + "Tato SfĂ©ra ti umoĹľĹuje zacĂ­lit a omráčit netvory. KaĹľdĂ© omráčenĂ­ trvá 5 kol a stojĂ­ 10 nábojĹŻ. Tato SfĂ©ra nepĹŻsobĂ­ na netvory, kteří zabĂ­rajĂ­ vĂ­ce neĹľ jedno polĂ­ÄŤko.", + "Đ­Ń‚Đ° Ńфера позволяет оглŃŃĐ°Ń‚ŃŚ монŃтров. 10 зарядов = оглŃŃения на 5 ходов. Не дейŃтвŃет на \"многоклеточных\" монŃтров.", + "Dieser Orb erlaubt es dir Monster zu betäuben. 10 Ladungen betäuben fĂĽr 5 ZĂĽge. Dies funktioniert nicht gegen groĂźe Monster die mehrere Felder bedecken.", + }}, + {0xee5743a, { // "Gravity does not allow this!" + "Grawitacja nie pozwala!", + "Yerçekimi buna izin vermiyor!", + "Tohle ti gravitace nedovolĂ­!", + "Гравитация не позволяет!", + "Die Gravitation erlaubt das nicht!", + }}, + {0xefb46c9, { // "Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, they choose one closer to your current location. In the case of a tie, the cell where more neighbors is closer to your current location is chosen; if still a tie, past locations are considered. They can attack you in any direction, and monsters on their way are attacked even if friendly. When they crash into something, the obstacle is usually destroyed, and they are stunned for three turns, after which they charge at you again (in any direction). Raging Bulls cannot be killed or stunned conventionally." + "WĹ›ciekĹ‚e Byki szarĹĽujÄ… w linii prostej: na siedmiokÄ…tach, gdy mogÄ… wybrać jeden z dwĂłch kierunkĂłw, wybierajÄ… pole bliĹĽsze Twojej obecnej pozycji. W przypadku remisu pole z wiÄ™kszÄ… liczbÄ… sÄ…siadĂłw bliĹĽej Ciebie jest wybierane. W przypadku dalszego remisu, rozwaĹĽane sÄ… Twoje wczeĹ›niejsze pozycje. Byki mogÄ… atakować w dowolnym kierunku; potwory na ich drodze sÄ… atakowane nawet jak sÄ… przyjazne. Gdy Byk siÄ™ z czymĹ› zderzy, przeszkoda jest niszczona, i Byk jest ogĹ‚uszony na 3 kolejki, po czym szarĹĽuje ponownie (w dowolnym kierunku). WĹ›ciekĹ‚ego Byka nie moĹĽna zabić ani ogĹ‚uszyć zwykĹ‚Ä… broniÄ….", +/*MISSING*/ "Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, they choose one closer to your current location. In the case of a tie, the cell where more neighbors is closer to your current location is chosen; if still a tie, past locations are considered. They can attack you in any direction, and monsters on their way are attacked even if friendly. When they crash into something, the obstacle is usually destroyed, and they are stunned for three turns, after which they charge at you again (in any direction). Raging Bulls cannot be killed or stunned conventionally.", + "VzteklĂ­ BĂ˝ci ĂştoÄŤĂ­ po přímce: na sedmiĂşhelnĂ­ku, kde si mohou vybrat jeden ze dvou smÄ›rĹŻ, si vĹľdy zvolĂ­ ten, kterĂ˝ je blĂ­Ĺľ k tobÄ›. Pokud je to nastejno, vyberou si polĂ­ÄŤko s vÄ›tším poÄŤtem sousedĹŻ bližších ke tvĂ© pozici, a pokud je to stále nerozhodnÄ›, vezmou v Ăşvahu minulĂ© lokace. BĂ˝ci mohou ĂştoÄŤit ve všech smÄ›rech a na netvory, kteří jim stojĂ­ v cestÄ›, ĂştoÄŤĂ­ i tehdy, kdyĹľ jsou přátelštĂ­. KdyĹľ BĂ˝k do něčeho narazĂ­, obvykle tĂ­m pĹ™ekážku zniÄŤĂ­ a bude na tĹ™i kola omráčenĂ˝; potom opÄ›t vyrazĂ­ proti tobÄ› (v libovolnĂ©m smÄ›ru). VzteklĂ©ho BĂ˝ka nelze zabĂ­t ani omráčit běžnĂ˝mi prostĹ™edky.", + "БеŃеные быки бегŃŃ‚ по прямой: на ŃемиŃгольниках, где еŃŃ‚ŃŚ выбор из двŃŃ… направлений, они выбирают Ń‚Đľ, которое ближе Đş вам. Đ’ ŃĐ»Ńчае равенŃтва выбираетŃŃŹ клетка, Ń ĐşĐľŃ‚ĐľŃ€ĐľĐą больŃе ŃĐľŃедей ближе Đş вам. Đ•Ńли и здеŃŃŚ равенŃтво, раŃŃматриваютŃŃŹ ваŃи предыдŃщие положения. Быки могŃŃ‚ атаковать в любŃŃŽ ŃторонŃ, и они Đ°Ń‚Đ°ĐşŃŃŽŃ‚ вŃех на Ńвоём ĐżŃти, даже Đ´Ń€ŃжеŃтвенных ŃŃщеŃтв. Когда бык врезаетŃŃŹ в препятŃтвие, оно обычно разрŃŃаетŃŃŹ, и бык оглŃŃаетŃŃŹ на три хода, поŃле чего Ńнова направляетŃŃŹ на Đ˛Đ°Ń (в любŃŃŽ ŃторонŃ). БеŃеного быка нельзя Ńбить или оглŃŃить обычным ŃпоŃобом.", +/*MISSING*/ "Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, they choose one closer to your current location. In the case of a tie, the cell where more neighbors is closer to your current location is chosen; if still a tie, past locations are considered. They can attack you in any direction, and monsters on their way are attacked even if friendly. When they crash into something, the obstacle is usually destroyed, and they are stunned for three turns, after which they charge at you again (in any direction). Raging Bulls cannot be killed or stunned conventionally.", + }}, + {0xf0f9157, { // "Quite tough, for your first fight." + "Jak na pierwszÄ… walkÄ™ -- caĹ‚kiem trudny przeciwnik.", +/*MISSING*/ "Quite tough, for your first fight.", + "Na prvnĂ­ bitku docela obtĂ­ĹľnĂ˝ soupeĹ™.", + "Довольно Ńложно для первого боя.", +/*MISSING*/ "Quite tough, for your first fight.", + }}, + {0xf3f7810, { // "Score: " + "Wynik: ", + "Puan: ", + "SkĂłre: ", + "Очки: ", + "Punkte: ", + }}, + {0xf582c14, { // " You need to go deep to collect lots of them." + "By zebrać ich duĹĽo, musisz gĹ‚Ä™boko wejść w krainÄ™.", +/*MISSING*/ " You need to go deep to collect lots of them.", + "Abys jich zĂ­ska%l0 hodnÄ›, musíš jĂ­t hluboko do tohoto kraje.", + "Đ’Đ°ĐĽ Đ˝Ńжно забратьŃŃŹ глŃбже, чтобы Ńобрать побольŃе их.", +/*MISSING*/ " You need to go deep to collect lots of them.", + }}, + {0xf764393, { // "Halloween is a special land, that is available only in the spherical or elliptic geometry (press 'o' to switch). You play on the surface of a jack-o'-lantern, and have to collect as many Treats as possible. Each Treat you collect brings new monsters to fight, and new magical powers for you. You have to fight the monsters while effectively managing your limited resources." + "Halloween to specjalna kraina, dostÄ™pna jedynie w geometrii sferycznej lub eliptycznej ('o' by zmienić). Grasz na powierzchni wydrÄ…ĹĽonej dyni, i musisz zdobyć jak najwiÄ™cej CukierkĂłw. KaĹĽdy Cukierek przynosi nowe potwory do walki, i nowe magiczne moce. Walcz z potworami, efektywnie zarzÄ…dzajÄ…c swoimi ograniczonymi zasobami.", +/*MISSING*/ "Halloween is a special land, that is available only in the spherical or elliptic geometry (press 'o' to switch). You play on the surface of a jack-o'-lantern, and have to collect as many Treats as possible. Each Treat you collect brings new monsters to fight, and new magical powers for you. You have to fight the monsters while effectively managing your limited resources.", + "Halloween je zvláštnĂ­ kraj, kterĂ˝ je k dispozici pouze ve sfĂ©rickĂ© nebo eliptickĂ© geometrii (pro pĹ™epnutĂ­ pouĹľijte klávesu 'o'). Hraje se v nÄ›m na povrchu dĂ˝ĹovĂ© lucerny, kde musíš posbĂ­rat co nejvĂ­ce Pochoutek. KaĹľdá Pochoutka, kterou sebereš, vyvolá novĂ© netvory, se kterĂ˝mi musíš bojovat, a dá ti novĂ© magickĂ© schopnosti. Musíš bojovat s netvory a pĹ™itom efektivnÄ› spravovat svĂ© omezenĂ© zdroje.", + "ХэллоŃин -- Ńпециальная земля, Đ´ĐľŃŃ‚Ńпная только в ŃферичеŃкой и эллиптичеŃкой геометрии (нажмите 'o', чтобы переключить). Đ’Ń‹ играете на поверхноŃти хэллоŃинŃкой тыквы и Ńобираете конфеты. Каждая конфета призывает новых монŃтров и Đ´Đ°Ń‘Ń‚ Đ’Đ°ĐĽ новые Ńилы. СражайтеŃŃŚ Ń ĐĽĐľĐ˝Ńтрами, грамотно раŃпоряжаяŃŃŚ ограниченными реŃŃŃ€Ńами.", +/*MISSING*/ "Halloween is a special land, that is available only in the spherical or elliptic geometry (press 'o' to switch). You play on the surface of a jack-o'-lantern, and have to collect as many Treats as possible. Each Treat you collect brings new monsters to fight, and new magical powers for you. You have to fight the monsters while effectively managing your limited resources.", + }}, + {0xf87773a, { // "player 5 go" + "gracz 5 idĹş", +/*MISSING*/ "player 5 go", + "hráč 5 pohyb", + "игрок 5 идёт", + "Spieler 5 los", + }}, + {0xf90bfdd, { // "You have improved your total high score on Steam. Congratulations!" + "Poprawi%Ĺ‚eĹ›0 swĂłj ogĂłlny najlepszy wynik na Steam. Gratulacje!", + "Steam'deki toplam yĂĽksek puanını artırdın. Tebrikler!", + "Zlepši%l0 jsi svĂ© celkovĂ© nejvyšší skĂłre na Steamu. Gratulujeme!", + "Đ’Ń‹ Ńвеличили Ńвой общий Ńчёт в Steam. Поздравляем!", + "Du hast deinen Gesamthighscore auf Steam verbessert! GlĂĽckwunsch!", + }}, + {0xfb6fe2c, { // "hepta floor" + "podĹ‚oga hepta", + "heptazemin", + "hepta-podlaha", + "ŃемиŃгольный пол", + "Heptagonaler Boden", + }}, + {0xfc1035b, { // "%The1 melts away!" + "%1 siÄ™ stopi%Ĺ‚1!", + "%1 eridi!", + "%1 roztá%l1!", + "%1 тает!", + "%Der1 %1 schmilzt!", + }}, + {0x10344404, { // "towards Gans model" + "w stronÄ™ modelu Gansa", +/*MISSING*/ "towards Gans model", + "smÄ›r ke Gansovu modelu", + "в ŃŃ‚ĐľŃ€ĐľĐ˝Ń ĐĽĐľĐ´ĐµĐ»Đ¸ Đ“Đ°Đ˝ŃĐ°", +/*MISSING*/ "towards Gans model", + }}, + {0x106bda07, { // "Human to wall ratio" + "Stosunek czĹ‚owieka do Ĺ›cian", +/*MISSING*/ "Human to wall ratio", + "PomÄ›r ÄŤlovÄ›ka a zdi", + "ОтноŃение выŃот человека и Ńтены", +/*MISSING*/ "Human to wall ratio", + }}, + {0x10960669, { // "Fjord Trolls leave a wall when they die, causing the living fjord to rise around it. Contrary to Rock Trolls, items around are not destroyed." + "Fjordtrolle zostawiajÄ… Ĺ›cianÄ™ po zabiciu, co powoduje, ĹĽe ĹĽywy fiord w okolicy siÄ™ podnosi. W przeciwieĹ„stwie do Skalnych Trolli Fjordtrolle nie niszczÄ… przedmiotĂłw wokół.", + "Fiyort Trolleri öldĂĽklerinde geriye bir duvar bırakıp cesetlerinin etrafına yaĹźayan fiyortun yĂĽkselmesine sebep olurlar. Kaya Trollerinin aksine etraflarındaki eĹźyalar yok olmaz.", + "FjordtrollovĂ© se po smrti promÄ›nĂ­ v zeÄŹ, kolem kterĂ© se zvedajĂ­ vody Ĺ˝ivoucĂ­ho fjordu. FjordtrollovĂ© na rozdĂ­l od Ĺ utrollĹŻ neniÄŤĂ­ pĹ™edmÄ›ty kolem sebe.", + "Тролли фьорда превращаютŃŃŹ в ŃŃ‚ĐµĐ˝Ń ĐżŃ€Đ¸ Ńмерти, вызывая роŃŃ‚ живых фьордов вокрŃĐł. Đ’ отличие от горных троллей они не Ńничтожают предметы.", + "Fjordtrolle hinterlassen eine Wand wenn sie sterben, was den lebenden Fjord dazu bringt um sie herum anzusteigen. Im Gegensatz zu Stein Trollen werden Items nicht zerstört.", + }}, + {0x10c5d1d4, { // "openGL & antialiasing mode" + "openGL i antialiasing", + "openGL & antialiasing", + "openGL & antialiasing", + "openGL и режим Ńглаживания", + "OpenGL & Anti-Aliasing", + }}, + {0x10fa192b, { // "A big, beautiful, magical flower." + "DuĹĽy, piÄ™kny, magiczny kwiat.", +/*MISSING*/ "A big, beautiful, magical flower.", + "Velká, krásná, magická kvÄ›tina.", + "БольŃой прекраŃный магичеŃкий цветок.", + "Eine groĂźe, schöne, magische Blume.", + }}, + {0x110781c5, { // "This structure will disappear after some time." + "Ta konstrukcja zniknie za jakiĹ› czas.", + "Bu yapı bir sĂĽre sonra yok olacak.", + "Tato struktura za nÄ›jakĂ˝ ÄŤas zmizĂ­.", + "Đ­Ń‚Đ° конŃŃ‚Ń€Ńкция пропадёт через некоторое время.", + "Diese Struktur wird nach einiger Zeit verschwinden.", + }}, + {0x1109d82c, { // "This Orb protects you from physical attacks. It lasts for more turns than the Orb of Shielding, but 10 charges are lost whenever you are attacked. It also does not protect you from fires, scents, and being eaten." + "Ta Sfera chroni CiÄ™ przed fizycznymi atakami. DziaĹ‚a dĹ‚uĹĽej niĹĽ Sfera Tarczy, ale kaĹĽdy atak zabiera 10 Ĺ‚adunkĂłw. Nie chroni przed ogniem, zapachami i byciem zjedzonym.", +/*MISSING*/ "This Orb protects you from physical attacks. It lasts for more turns than the Orb of Shielding, but 10 charges are lost whenever you are attacked. It also does not protect you from fires, scents, and being eaten.", + "Tato SfĂ©ra tÄ› chránĂ­ pĹ™ed fyzickĂ˝mi Ăştoky. Vydrží dĂ©le neĹľ SfĂ©ra Ĺ tĂ­tu, ale kaĹľdĂ˝ Ăştok ti ubere 10 nábojĹŻ. NechránĂ­ proti ohni, pachu a seĹľránĂ­.", + "Đ­Ń‚Đ° Ńфера защищает Đ˛Đ°Ń ĐľŃ‚ физичеŃких Đ°Ń‚Đ°Đş. Она дейŃтвŃет дольŃе, чем Ńфера Щита, но теряет10 зарядов при каждой атаке. Не защищает от огня, запаха и Ńъедения.", + "Dieser Orb schĂĽtzt dich vor physischen Angriffen. Es hält mehr ZĂĽge als der Orb der Abschirmung , aber immer wenn du angegriffen wirst, verlierst er 10 Ladungen. Er schĂĽtzt dich nicht vor Feuer und DĂĽften oder davor gefressen zu werden.", + }}, + {0x11cfbf44, { // "People worshipping Cthulhu. This one is especially dangerous, as he is armed with a weapon which launches fire from afar." + "Wyznawcy Cthulhu. Ten jest szczegĂłlnie niebezpieczny, bo moĹĽe z odlegĹ‚oĹ›ci rozpalić ogieĹ„ w Twojej okolicy.", + "Cthulhu'ya tapan insanlar. Bu özellikle tehlikeli ve uzaktan ateĹź atabilmesini saÄźlayan bir silahı var.", + "LidĂ© uctĂ­vajĂ­cĂ­ Cthulhua. Tenhle je zvlášť nebezpeÄŤnĂ˝, protoĹľe je vybavenĂ˝ zbranĂ­, která dokáže metat oheĹ na dálku.", + "Люди, поклоняющиеŃŃŹ КтŃлхŃ. Этот ĐľŃобо опаŃен, Ń‚Đ°Đş как он может кинŃŃ‚ŃŚ в Đ’Đ°Ń ĐľĐłĐľĐ˝ŃŚ.", + "Verehrer Cthulhus. Dieser ist besonders gefährlich, er besitzt eine Waffe, die aus der Ferne Feuer schleudern kann.", + }}, + {0x122fca68, { // "Not enough power for telekinesis!" + "Za maĹ‚o mocy do telekinezy!", + "Telekinezi için yeterince güç yok!", + "Nemáš dost sĂ­ly na telekinezi!", + "Мало Ńилы для телекинеза!", + "Nicht genĂĽgend Kraft fĂĽr Telekinese!", + }}, + {0x1276d6f4, { // "use default keys" + "klawisze domyĹ›lne", +/*MISSING*/ "use default keys", + "standardnĂ­ klávesy", + "иŃпользовать клавиŃи по Ńмолчанию", + "Standard-Tastenbelegung nutzen", + }}, + {0x12d4c0f9, { // "Game statistics saved to %1" + "Statystyki gry zapisane do %1", + "Ä°statistikler %1 konumuna kaydedildi.", + "HernĂ­ statistika uloĹľena do %1", + "СтатиŃтика игры запиŃана в %1", + "Statistiken nach %1 gespeichert", + }}, + {0x12dc77a0, { // "Powerful wizards claimed this part of the world, to perform their magical experiments in peace and solitude. They have changed the direction of gravity, to make it even harder for intruders to reach them.\n\nGravity works as follows: cells are unstable if they are empty, and there is no cell immediately below them which contains a wall. It is impossible to move from one unstable cell to another, except if moving down." + "Część Ĺ›wiata zajÄ™ta przez potężnych czarodziejĂłw, w celu prowadzenia magicznych eksperymentĂłw w spokoju i samotnoĹ›ci. Zmienili oni kierunek grawitacji, by intruzom byĹ‚o jeszcze trudniej siÄ™ do nich dostać.\n\nGrawitacja dziaĹ‚a w sposĂłb nastÄ™pujÄ…cy: pole jest niestabilne, jeĹ›li jest puste i ĹĽadne pole bezpoĹ›rednio pod nim nie zawiera Ĺ›ciany. Nie moĹĽna przejść z jednego niestabilnego pola na inne, chyba ĹĽe w dół.", + "GüçlĂĽ bĂĽyĂĽcĂĽler, dĂĽnyanın bu kısmını, bĂĽyĂĽsel deneylerini sessiz sakin uygulayabilecekleri yer olarak seçtiler. Davetsiz misafirlerin, onlara ulaĹźabilmesini daha zor kılmak için yerçekiminin yönĂĽnĂĽ deÄźiĹźtirdiler.\n\nYerçekimi Ĺźu Ĺźekilde çalışır: HĂĽcreler eÄźer boĹźlar ise dengesiz haldedirler ve hĂĽcrelerin hemen altında bulunan bir duvar yoktur. Bir dengesiz hĂĽcreden diÄźerine ilerlemek imkansızdır, aĹźağı doÄźru ilerlemek hariç.\n\n", + "Tuto část svÄ›ta si pro sebe zabrali mocnĂ­ mágovĂ©, aby zde mohli v klidu a osamÄ›nĂ­ provádÄ›t svĂ© magickĂ© experimenty. ZmÄ›nili smÄ›r gravitace, aby bylo pro vetĹ™elce ještÄ› obtĂ­ĹľnÄ›jší se k nim dostat.\n\nGravitace funguje následovnÄ›: prázdnĂ© polĂ­ÄŤko, pod kterĂ˝m nenĂ­ žádnĂ© polĂ­ÄŤko se zdĂ­, je 'nestabilnĂ­'. NenĂ­ dovoleno pohybovat se z jednoho nestabilnĂ­ho polĂ­ÄŤka do druhĂ©ho, leda smÄ›rem dolĹŻ.", + "Мощные колдŃны Ńоздавали ŃŤŃ‚Ń Đ·ĐµĐĽĐ»ŃŽ, чтобы проводить магичеŃкие ŃŤĐşŃперименты в покое и Ńединении. Они изменили направление Ńилы тяжеŃти, чтобы Ńделать попадание ŃŃŽĐ´Đ° Ń‚Ń€Ńднее.\n\nГравитация работает Ń‚Đ°Đş: клетка неŃтабильна, еŃли она ĐżŃŃŃ‚Đ°, и поле под ним не Ńодердит Ńтены. Нельзя перейти Ń ĐľĐ´Đ˝ĐľĐłĐľ неŃтабильного поля на Đ´Ń€Ńгое, иначе как вниз.", + "Mächtige Zauberer haben diesen Teil der Welt fĂĽr sich beansprucht um in Ruhe und Frieden ihre magischen Experimente durchfĂĽhren zu können. Sie haben die Gravitation in diesem Land manipuliert um es Eindringlingen zu erschweren sie zu erreichen.\n\nDie Gravitation funktioniert wie folgt: Zellen sind instabil wenn sie leer sind und sich direkt unter ihnen keine Zelle mit Wand befindet. Es ist unmöglich sich von einer instabilen Zelle zu einer anderen zu bewegen auĂźer wenn man sich nach unten bewegt.", + }}, + {0x13116152, { // "A very interesting species of slime mold." + "Bardzo ciekawy gatunek Ĺ›luzowca.", +/*MISSING*/ "A very interesting species of slime mold.", + "Velice zajĂ­mavĂ˝ druh hlenky.", + "Очень интереŃная разновидноŃŃ‚ŃŚ Ńлизня.", +/*MISSING*/ "A very interesting species of slime mold.", + }}, + {0x132b8912, { // "Objects at distance less than %1 absolute units from the center will be displayed with high detail, and at distance at least %2 with low detail." + "Obiekty w odlegĹ‚oĹ›ci bliĹĽszej niĹĽ %1 od Ĺ›rodka bÄ™dÄ… rysowane z wieloma szczegółami, a dalszej niĹĽ %2 z niewieloma.", +/*MISSING*/ "Objects at distance less than %1 absolute units from the center will be displayed with high detail, and at distance at least %2 with low detail.", + "Objekty ve vzdálenosti mĂ©nÄ› neĹľ %1 od stĹ™edu budou zobrazovány s vysokĂ˝mi detaily, a objekty ve vzdálenosti mĂ©nÄ› neĹľ %2 se stĹ™ednĂ­mi detaily.", + "Объекты на раŃŃтоянии меньŃе %1 единиц от центра изображены Ń Đ±ĐľĐ»ŃŚŃой детализацией, Đ° дальŃе %2 -- Ń Đ˝Đ¸Đ·ĐşĐľĐą.", +/*MISSING*/ "Objects at distance less than %1 absolute units from the center will be displayed with high detail, and at distance at least %2 with low detail.", + }}, + {0x13552e54, { // "%The1 breathes fire at you!" + "%1 zionÄ…Ĺ‚ ogniem na Ciebie!", +/*MISSING*/ "%The1 breathes fire at you!", + "%1 na tebe chrlĂ­ oheĹ!", + "%1 Đ´Ń‹Ńит огнём на ваŃ!", + "%Der1 %1 speit Feuer auf dich!", + }}, + {0x13b5fb7d, { // "distance between eyes" + "odlegĹ‚ość miÄ™dzy oczami", + "gözler arası uzaklık", + "vzdálenost oÄŤĂ­ od sebe", + "раŃŃтояние ĐĽĐµĐ¶Đ´Ń ĐłĐ»Đ°Đ·Đ°ĐĽĐ¸", + "Augenabstand", + }}, + {0x13c016ae, { // "special features [Space]" + "opcje specjalne [Space]", + "özel seçenekler [Space]", + "zvláštnĂ­ moĹľnosti [mezernĂ­k]", + "Ńпециальные опции [Пробел]", + "Spezielle Features [LEER]", + }}, + {0x13d3efe5, { // "render now (length: %1)" + "rysuj teraz (dĹ‚ugość: %1)", +/*MISSING*/ "render now (length: %1)", + "renderovat hned (dĂ©lka: %1)", + "риŃŃетŃŃŹ ŃĐµĐąŃ‡Đ°Ń (длина: %1)", + "rendere jetzt (Länge: %1)", + }}, + {0x13ef5280, { // "cheats" + "oszustwa", +/*MISSING*/ "cheats", +/*MISSING*/ "cheats", + "Читы", +/*MISSING*/ "cheats", + }}, + {0x14452571, { // "You destroy %the1 with a mental blast!" + "Zniszczy%Ĺ‚eĹ›0 %a1 mocÄ… psychicznÄ…!", + "%a1 bir zihin patlamasıyla yok ettin!", + "ZniÄŤi%l0 jsi %a1 mentálnĂ­m Ăşderem!", + "Đ’Ń‹ Ńничтожили %a1 Ńилой ĐĽŃ‹Ńли!", + "Du zerstörst %den1 %a1 mit einem mentalen StoĂź!", + }}, + {0x15528312, { // "A tourist from another world. They mutter something about the 'tutorial', and claim that they are here just to learn, and to leave without any treasures. Do not kill them!" + "Turyst%aka0 z innego Ĺ›wiata. CoĹ› mamrocze o 'podrÄ™czniku', i ĹĽe siÄ™ tylko uczy, ĹĽe nie jest tu po skarby. Nie zabijać!", +/*MISSING*/ "A tourist from another world. They mutter something about the 'tutorial', and claim that they are here just to learn, and to leave without any treasures. Do not kill them!", + "Turista z jinĂ©ho svÄ›ta. Mumlá nÄ›co o 'tutoriálu' a tvrdĂ­, Ĺľe se jenom uÄŤĂ­ a odejde bez pokladĹŻ. NezabĂ­jet!", + "ТŃриŃŃ‚ из Đ´Ń€Ńгого мира. Они бормочŃŃ‚ что-Ń‚Đľ про 'Ń€ŃководŃтво', и говорят, что хотят наŃчить, Đ° не забрать Ńокровища. Не Ńбивай их!", +/*MISSING*/ "A tourist from another world. They mutter something about the 'tutorial', and claim that they are here just to learn, and to leave without any treasures. Do not kill them!", + }}, + {0x15671397, { // "You feel great, like a true treasure hunter." + "Czujesz siÄ™ Ĺ›wietnie, jak prawdziwy Ĺ‚owca skarbĂłw.", + "Ĺžahane hissediyorsun. Sanki gerçek bir hazine avcısı gibi.", + "CĂ­tíš se skvÄ›le, jako pravĂ˝ lovec pokladĹŻ.", + "Đ’Ń‹ чŃвŃтвŃете Ńебя как прекраŃный охотник Đ·Đ° Ńокровищами.", + "Du fĂĽhlst dich groĂźartig, wie ein echter Schatzjäger.", + }}, + {0x158937e3, { // "Fat guards are too heavy to be pushed away by your hits." + "Grubi StraĹĽnicy sÄ… zbyt ciężcy, by daĹ‚o siÄ™ ich odepchnąć atakiem.", + "ĹžiĹźman Muhafızlar vuruĹźlarınla geriye itilmek için fazla ağır.", + "TlustĂ­ strážci jsou příliš těžcĂ­ na to, aby je tvĂ© zásahy dokázaly odstrÄŤit.", + "ТŃчный Ńтражник ŃлиŃком тяжёл, чтобы отлетать от Đ’Đ°Ńих Ńдаров.", + "Dicke Wachen sind zu schwer um zurĂĽck gestoĂźen zu werden.", + }}, + {0x1589a9c4, { // "turn count" + "liczba kolejek", + "tur sayacı", + "poÄŤet kol", + "ходов потрачено", + "Anzahl der ZĂĽge", + }}, + {0x15a845e9, { // "F1 = help" + "F1 = pomoc", + "F1 = yardım", + "F1 = nápovÄ›da", + "F1 = помощь", + "F1 = Hilfe", + }}, + {0x15ec3b67, { // "monster display mode" + "tryb pokazywania potworĂłw", + "canavar görĂĽnĂĽmĂĽ", + "mĂłd zobrazovánĂ­ netvorĹŻ", + "режим показа монŃтров", + "Anzeigemodus (Monster)", + }}, + {0x165d8a21, { // "what's this?" + "co to jest?", +/*MISSING*/ "what's this?", + "co to je?", + "что ŃŤŃ‚Đľ?", + "Was ist das?", + }}, + {0x1697e08a, { // "Rotate the camera in ball/hyperboloid model." + "Obróć kamerÄ™ w modelu kuli/hiperboloidy.", +/*MISSING*/ "Rotate the camera in ball/hyperboloid model.", + "Rotace kamery v modelu koule/hyperboloidu.", + "Поворачивает ĐşĐ°ĐĽĐµŃ€Ń Đ˛ модели Ńферы/гиперболоида.", +/*MISSING*/ "Rotate the camera in ball/hyperboloid model.", + }}, + {0x16e1d6d8, { // "A magical energy sword. Don't waste its power!" + "Miecz energii. Nie zmarnuj jego mocy!", +/*MISSING*/ "A magical energy sword. Don't waste its power!", + "KouzelnĂ˝ energetickĂ˝ meÄŤ. Nepromarni jeho sĂ­lu!", + "МагичеŃкий меч энергии. Не тратьте его мощь зря!", +/*MISSING*/ "A magical energy sword. Don't waste its power!", + }}, + {0x17160297, { // "Vikings believe that garnets improve their strength." + "Wikingowie wierzÄ…, ĹĽe granaty dajÄ… im siĹ‚Ä™.", + "Vikingler nartaĹźlarının güçlerini artırdığını düşünĂĽr.", + "VikingovĂ© věří, Ĺľe granáty zvyšujĂ­ jejich sĂ­lu.", + "Викинги верятЮ что гранаты Đ´Đ°ŃŽŃ‚ им ŃилŃ.", + "Wikinger glauben das Granat sie stärker macht.", + }}, + {0x17272102, { // "%The1 claws %the2!" + "%1 zaatakowa%Ĺ‚1 %a2!", + "%1 %a2 pençeledi!", + "%1 sek%l1 %a2!", + "%1 атаковал%E1 %a2!", + "%Der1 %1 zerkratzt %den2 %a2!", + }}, + {0x179cd5f0, { // "Bomberbird eggs are big and tasty, and thus valuable. They can hatch when left alone for some time (but this will never happen if you are watching)." + "Jaja BombardierĂłw sÄ… wartoĹ›ciowe, bo sÄ… duĹĽe i smaczne. MogÄ… siÄ™ wykluć, gdy dasz im czas (ale nie stanie siÄ™ to, jeĹĽeli patrzysz).", + "BombacıkuĹź yumurtaları bĂĽyĂĽk ve lezzetlidir, bu sebeple deÄźerlidir. EÄźer yalnız bırakılırlarsa çatlayabilirler. (Ama bu sen izlerken olmaz.)", + "Vejce BombarďákĹŻ jsou velká a chutná -- a tudĂ­Ĺľ i cenná. Mohou se vylĂ­hnout, kdyĹľ je necháš nÄ›jakĂ˝ ÄŤas na pokoji (ale to se nikdy nestane, kdyĹľ se na nÄ› dĂ­váš).", + "Яйца бомбардиров больŃие и вкŃŃные, и ĐżĐľŃ‚ĐľĐĽŃ Ń†ĐµĐ˝Đ˝Ń‹Đµ. Đ•Ńли ĐľŃтавть их в покое, может вылŃпитьŃŃŹ бомбардир (но этого не ŃĐ»ŃчитŃŃŹ, пока Đ’Ń‹ на них Ńмотрите).", + "Bombenvogeleier sind groĂź und schmackhaft, daher wertvoll. Sie können nach einiger Zeit schlĂĽpfen (aber machen dies nie, wenn du zusiehst).", + }}, + {0x18dffecc, { // "Collect 5 Emeralds to access Camelot" + "Zbierz 5 SzmaragdĂłw, by dostać siÄ™ do Camelot", + "Kamelot'a ulaĹźmak için 5 ZĂĽmrĂĽt topla.", + "ZĂ­skej 5 SmaragdĹŻ a dostaneš se do Camelotu", + "Собери 5 изŃĐĽŃ€Ńдов, чтобы открыть Камелот.", + "Sammle 5 Smaragde um Zugang zu Camelot zu erhalten", + }}, + {0x18e20dc9, { // "You stun %the1!" + "OgĹ‚uszy%Ĺ‚eĹ›0 %a1!", + "%a1! sersemlettin!", + "Omráči%l0 jsi %a1!", + "Đ’Ń‹ оглŃŃили %a1!", + "Du betäubst %den1 %a1!", + }}, + {0x18e20dd6, { // "You stun %the1." + "OgĹ‚uszy%Ĺ‚eĹ›0 %a1.", + "%a1 sersemlettin.", + "Omráčil jsi %a1.", + "Đ’Ń‹ оглŃŃили %a1.", + "Du betäubst %den1 %a1.", + }}, + {0x18f803da, { // "items and monsters" + "przedmioty i potwory", + "eĹźyalar ve canavarlar", + "pĹ™edmÄ›ty i netvoĹ™i", + "предметы и монŃтры", + "Items und Monster", + }}, + {0x1923e5ca, { // "back to HyperRogue" + "powrĂłt do HyperRogue", + "HyperRogue'a geri dön", + "zpÄ›t do HyperRogue", + "вернŃŃ‚ŃŚŃŃŹ в игрŃ", + "ZurĂĽck zu HyperRogue", + }}, + {0x193dd995, { // "Cannot summon on a monster!" + "Nie moĹĽna przywoĹ‚ać na potworze!", + "Bir canavarın ĂĽstĂĽne çağıramazsın!", + "Na polĂ­ÄŤko s netvorem nelze nic vyvolat!", + "Нельзя призвать монŃтра на занятŃŃŽ клеткŃ!", + "Kann nicht auf einem Monster beschworen werden!", + }}, + {0x1957aac2, { // "This Orb lets your allies to share your Orb powers.\n\nThe following Orbs are affected:" + "Ta sfera pozwala Ci dzielić siÄ™ mocami Sfer z przyjaciółmi.\n\nNastÄ™pujÄ…ce Sfery sÄ… dzielone:", +/*MISSING*/ "This Orb lets your allies to share your Orb powers.\n\nThe following Orbs are affected:", + "Tato SfĂ©ra ti umoĹľĹuje dÄ›lit se o moc tvĂ˝ch SfĂ©r s kamarády.\n\nOvlivĹuje následujĂ­cĂ­ SfĂ©ry:", + "Đ­Ń‚Đ° Ńфера позволяет Đ’Đ°Ńим Ńоюзникам иŃпользовать Ńилы Đ’Đ°Ńих Ńфер.\n\nДейŃтвŃет на ŃледŃющие Ńферы:", + "Dieser Orb erlaubt es deinen VerbĂĽndeten deine Orbkräfte zu nutzen.\n\nDie folgenden Orbs sind betroffen:", + }}, + {0x19a232a3, { // "A very cold land, full of ice walls. Your mere presence will cause these ice walls to melt, even if you don't want it." + "Bardzo zimna kraina, peĹ‚na lodowych Ĺ›cian. Wystarczy Twoja obecność, by te Ĺ›ciany siÄ™ roztopiĹ‚y. Nawet, jak tego nie chcesz.", + "Buz duvarlarıyla dolu çok soÄźuk bir diyar. Sen istemesen de sadece varlığın bile duvarların erimesine sebep oluyor.", + "Velmi chladnĂ˝ kraj plnĂ˝ ledovĂ˝ch zdĂ­. Tyto ledovĂ© zdi tajĂ­ uĹľ tvou pouhou přítomnostĂ­, aĹĄ uĹľ si to pĹ™eješ nebo ne.", + "Очень холодная земля, полная ледяных Ńтен. Они бŃĐ´ŃŃ‚ Ń‚Đ°ŃŹŃ‚ŃŚ от Đ’Đ°Ńего приŃŃŃ‚Ńтвия, даже еŃли Đ’Ń‹ этого не хотите.", + "Ein ziemlich kaltes Land - voller Eiswände. Deine Gegenwart allein wird sie allerdings zum Schmelzen bringen, ob du willst oder nicht.", + }}, + {0x19c78e5c, { // "gain kills" + "zdobÄ…dĹş zabicia", + "leĹźler kazan.", + "zĂ­skej zabitĂ© netvory", + "полŃчить ŃбийŃтва", + "erhalte Tötungen", + }}, + {0x19d3eb38, { // "No room to push %the1." + "Brak miejsca, by popchnąć %a1.", + "%a1 itmek için yeterince yer yok.", + "%a1 nenĂ­ kam zatlaÄŤit.", + "Нет меŃŃ‚Đ°, чтобы толкать %a1.", + "Kein Platz um %den1 %a1 zu schieben.", + }}, + {0x1a0f587d, { // "The Air Elemental blows you away!" + "Powietrzny Ĺ»ywioĹ‚ak CiÄ™ zdmuchnie!", + "Hava Unsuru seni uzaÄźa uçuruyor!", + "Elementál Vzduchu tÄ› odfoukl!", + "ВоздŃŃный элементаль ŃĐ´ŃĐ» Đ’Đ°Ń!", + "Der Luftelementar weht dich weg!", + }}, + {0x1a161360, { // "This dangerous predator has killed many people, and has been sent to Cocytus." + "Ten niebezpieczny drapieĹĽnik zabiĹ‚ wielu ludzi i zostaĹ‚ zesĹ‚any do Kocytu.", + "Bu tehlikeli yırtıcı çok kiĹźiyi öldĂĽrdĂĽ ve Kokitos'a gönderildi.", + "Tento nebezpeÄŤnĂ˝ predátor zabil spoustu lidĂ­, a tak byl poslán do Cocytu.", + "Этот опаŃный хищник Ńбил немало людей и был отправлен в Коцит.", + "Dieser gefĂĽrchtete Jäger hat schon viele das Leben gekostet und wurde nach Kokytos geschickt.", + }}, + {0x1a16ff81, { // "drop Dead Orb (up + down)" + "połóż MartwÄ… SferÄ™ (gĂłra+dół)", +/*MISSING*/ "drop Dead Orb (up + down)", + "poloĹľ Mrtvou sfĂ©ru (nahoru + dolĹŻ)", + "положить МёртвŃŃŽ ŃŃ„ĐµŃ€Ń (вверх + вниз)", +/*MISSING*/ "drop Dead Orb (up + down)", + }}, + {0x1a8dced2, { // "0 = Klein model, 1 = PoincarĂ© model" + "0 = model Kleina, 1 = model PoincarĂ©", + "0 = Klein modeli, 1 = PoincarĂ© modeli", + "0 = KleinĹŻv model, 1 = PoincarĂ©ho model", + "0 = модель Клейна, 1 = модель ĐźŃанкаре", + "0 = Klein Modell, 1 = PoincarĂ© Modell", + }}, + {0x1a8ded1b, { // "Horocycles are similar to circles, but you cannot reach their center at all -- they can be understood as limit circles of infinite radius centered in some point in infinity (also called an ideal point).\n\nGo to R'Lyeh, and you should quickly find a Temple of Cthulhu there. Each circle of columns is actually a horocycle. Horocycles in a given temple are concentric, and there is an infinite number of them." + "Horocykle sÄ… podobne do okrÄ™gĂłw, ale nie moĹĽesz dotrzeć do ich Ĺ›rodka -- sÄ… to graniczne okrÄ™gi o nieskoĹ„czonym promieniu, ktĂłrych Ĺ›rodek jest w nieskoĹ„czonoĹ›ci (takie punkty nazywamy punktami idealnymi).\n\nIdĹş do R'Lyeh, i szybko znajdziesz ĹšwiÄ…tyniÄ™ Cthulhu. KaĹĽdy krÄ…g kolumn jest horocyklem. Horocykle w danej Ĺ›wiÄ…tyni sÄ… współśrodkowe, i jest ich nieskoĹ„czenie wiele.", +/*MISSING*/ "Horocycles are similar to circles, but you cannot reach their center at all -- they can be understood as limit circles of infinite radius centered in some point in infinity (also called an ideal point).\n\nGo to R'Lyeh, and you should quickly find a Temple of Cthulhu there. Each circle of columns is actually a horocycle. Horocycles in a given temple are concentric, and there is an infinite number of them.", + "Horocykly se podobajĂ­ kruĹľnicĂ­m, ale jejich stĹ™edu vĹŻbec nelze dosáhnout -- mĹŻĹľeš si je pĹ™edstavit jako limitnĂ­ kruĹľnice s nekoneÄŤnĂ˝m polomÄ›rem, jejichĹľ stĹ™ed je v nÄ›jakĂ©m bodÄ› v nekoneÄŤnu (takzvanĂ©m ideálnĂ­m bodÄ›).\n\nBěž do R'Lyeh. MÄ›l bys tam rychle najĂ­t CthulhuĹŻv chrám. KaĹľdĂ˝ kruh ze sloupĹŻ je ve skuteÄŤnosti horocyklus. Horocykly v kaĹľdĂ©m chrámu jsou soustĹ™ednĂ© a je jich nekoneÄŤnÄ› mnoho.", + "Орициклы похожи на крŃги, но Đ´ĐľŃтичь их центра невозможно -- их можно понимать как предельные крŃги беŃконечного радиŃŃĐ° Ń Ń†ĐµĐ˝Ń‚Ń€ĐľĐĽ в точке на беŃконечноŃти (такие точки называютŃŃŹ идеальными).\n\nĐди в Đ 'Льех и найди Храм КтŃлхŃ. Каждый крŃĐł колонн на Ńамом деле орицикл. Орициклы в храме концентричны, и их чиŃло беŃконечно.", +/*MISSING*/ "Horocycles are similar to circles, but you cannot reach their center at all -- they can be understood as limit circles of infinite radius centered in some point in infinity (also called an ideal point).\n\nGo to R'Lyeh, and you should quickly find a Temple of Cthulhu there. Each circle of columns is actually a horocycle. Horocycles in a given temple are concentric, and there is an infinite number of them.", + }}, + {0x1a9e2e11, { // "You need special glasses to view the game in 3D" + "Potrzebujesz specjalnych okularĂłw, by oglÄ…dać grÄ™ w 3D", + "Oyunu 3D'de görĂĽntĂĽlemek için özel gözlĂĽklere ihtiyacın var.", + "Abys moh%l0 hru sledovat ve 3D, potĹ™ebuješ speciálnĂ­ brĂ˝le", + "Đ’Đ°ĐĽ Đ˝Ńжны Ńпециальные очки, чтобы видеть Đ¸ĐłŃ€Ń Đ˛ 3D", + "Du benötigst eine 3D Brille fĂĽr den 3D Modus", + }}, + {0x1ac03d40, { // "Good to know that your fighting skills serve you well in this strange world." + "Dobrze wiedzieć, ĹĽe Twoje zdolnoĹ›ci walki przydajÄ… siÄ™ w tym Ĺ›wiecie.", + "DövĂĽĹź yeteneklerinin bu garip dĂĽnyada hâlâ iĹźe yaradığını bilmek gĂĽzel.", + "Je dobrĂ© vÄ›dÄ›t, Ĺľe tvĂ© bojovĂ© dovednosti ti v tomto podivnĂ©m svÄ›tÄ› slouží dobĹ™e.", + "Полезно знать, что Đ’Đ°Ńи боевые навыки неплохо работают в этом Ńтранном мире.", + "Gut zu wissen, dass deine KampfkĂĽnste dir in dieser ungewöhnlichen Welt helfen.", + }}, + {0x1b09e182, { // "Hell has these lakes everywhere... They are shaped like evil stars, and filled with burning sulphur." + "PiekĹ‚o jest peĹ‚ne tych jezior peĹ‚nych pĹ‚onÄ…cej siarki, w ksztaĹ‚cie zĹ‚ych gwiazd...", + "Cehennemde her yerde bunun gibi göller var. Ĺžeytani star Ĺźeklinde ve yanan sĂĽlfĂĽrle dolu...", + "Tato jezera se nacházejĂ­ po celĂ©m Pekle... MajĂ­ tvar zlĂ˝ch hvÄ›zd a jsou naplnÄ›na hořícĂ­ sĂ­rou.", + "Đ’ ĐĐ´Ń ŃŤŃ‚Đ¸ озёра повŃŃŽĐ´Ń. Они похожи на звёзды и наполнны кипящей Ńерой.", + "Diese Seen sind ĂĽberall in der Hölle... Sie sehen aus wie böse Sterne, und sind voll mit brennendem Schwefel.", + }}, + {0x1b607333, { // "animation speed" + "prÄ™dkość animacji", + "animasyon hızı", + "rychlost animace", + "ŃкороŃŃ‚ŃŚ анимации", + "Animationsgeschwindigkeit", + }}, + {0x1b9d6e68, { // "ball model" + "model kuli", +/*MISSING*/ "ball model", + "model koule", + "модель Ńферы", +/*MISSING*/ "ball model", + }}, + {0x1bf59600, { // "WARNING: you are entering a minefield!" + "UWAGA: wchodzisz na pole minowe!", + "UYARI: bir mayıntarlasına giriyorsun!", + "VAROVĂNĂŤ: vstupuješ do minovĂ©ho pole!", + "Đ’ĐťĐĐśĐĐťĐĐ•: вы воŃли на минное поле!", + "ACHTUNG: Du betrittst ein Minenfeld!", + }}, + {0x1c7e60fd, { // "That's all you need to unlock the Orb of Yendor! Well... as long as you are able to return to the Orb that this key unlocks...\n\nEach key unlocks only the Orb of Yendor which led you to it." + "To jest to, czego potrzebujesz, by otworzyć SferÄ™ Yendoru! O ile umiesz do niej trafić...\nKaĹĽdy klucz otwiera tylko jednÄ… SferÄ™, ktĂłra CiÄ™ do niego doprowadziĹ‚a.", + "Yendorun KĂĽresinin kilidini açmak için ihtiyacınız olan her Ĺźeyi tamamladın. Tabi... Ă–nce KĂĽreyr dönmen gerekiyor...\nHer anahtar seni ona yönlendiren yendorun kĂĽresini açacaktır.", + "To je všechno, co potĹ™ebuješ k odemÄŤenĂ­ YendorskĂ© sfĂ©ry! No... pokud se tedy dokážeš vrátit ke sfĂ©Ĺ™e, kterou tenhle klĂ­ÄŤ odemyká...\nKaĹľdĂ˝ klĂ­ÄŤ odemyká pouze tu Yendorskou sfĂ©ru, která tÄ› k nÄ›mu zavedla.", + "Đ­Ń‚Đľ вŃŃ‘, что Đ’Đ°ĐĽ Đ˝Ńжно, чтобы открыть ĐˇŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°! ĐťŃ, еŃли Đ’Ń‹ Ńможете Đş ней вернŃŃ‚ŃŚŃŃŹ...\nКаждый ключ открывает лиŃŃŚ Ń‚Ń ŃферŃ, которая на него Ńказывает.", + "Das ist alles, was du brauchst, um den Orb von Yendor zu öffnen! ...solange du es schaffst, zu dem Orb zurĂĽckzufinden, zu dem dieser SchlĂĽssel passt...\nJeder SchlĂĽssel entsperrt nur den Orb von Yendor, der dich zu ihm gefĂĽhrt hat.", + }}, + {0x1c8904a7, { // "weapon color" + "kolor broni", + "silah rengi", + "barva zbranÄ›", + "цвет орŃжия", + "Waffenfarbe", + }}, + {0x1c893324, { // "Your energy swords get stronger!" + "Twoje ostrza energii staĹ‚y siÄ™ silniejsze!", +/*MISSING*/ "Your energy swords get stronger!", + "TvĂ© energetickĂ© meÄŤe sĂ­lĂ­!", + "Твои энергетичеŃкие мечи Ńтали Ńильнее!", +/*MISSING*/ "Your energy swords get stronger!", + }}, + {0x1c8ff97a, { // "Hint: magical powers from Treats expire after a number of uses." + "WskazĂłwka: magiczne moce CukierkĂłw wyczerpujÄ… siÄ™ po kilku uĹĽyciach.", +/*MISSING*/ "Hint: magical powers from Treats expire after a number of uses.", + "NápovÄ›da: magickĂ© schopnosti zĂ­skanĂ© z Pochoutek zmizĂ­ po urÄŤitĂ©m poÄŤtu pouĹľitĂ­.", + "ПодŃказка: магичеŃкие Ńилы конфет пропадают поŃле некоторого чиŃла иŃпользований.", +/*MISSING*/ "Hint: magical powers from Treats expire after a number of uses.", + }}, + {0x1c93c602, { // "Hyperbolic geometry has been discovered by the 19th century mathematicians who wondered about the nature of paralellness. Take a line L and a point A. Can a world exist where there is more than one line passing through A which does not cross L?\n\nThe Icy Land will be very dangerous if you have lots of Ice Diamonds -- lots of Yetis and Ice Wolves hunting you! But the other lands, where you have no treasures yet, will still be (relatively) safe.\n\nWander further, and you should find Crossroads quickly -- the Great Walls are straight lines, and indeed, they work differently than in Euclidean. On the other side of Great Walls, you see other lands -- there are about 50 lands in HyperRogue, based on different mechanics and aspects of hyperbolic geometry." + "Geometria hiperboliczna zostaĹ‚a odkryta przez dziewiÄ™tnastowiecznych matematykĂłw zainteresowanych naturÄ… rĂłwnolegĹ‚oĹ›ci. WeĹş liniÄ™ prostÄ… L i punkt A. Czy moĹĽe istnieć Ĺ›wiat, w ktĂłrym jest wiÄ™cej niĹĽ jedna linia prosta przechodzÄ…ca przez A, ale nie przecinajÄ…ca L?\n\nKraina Lodu jest bardzo niebezpieczna, gdy masz mnĂłstwo DiamentĂłw. Ale inne krainy, w ktĂłrych jeszcze nie masz skarbĂłw, sÄ… w miarÄ™ bezpieczne.\n\nZwiedzaj dalej, a szybko znajdziesz SkrzyĹĽowanie -- jego Ĺ›ciany sÄ… liniami prostymi, i dziaĹ‚ajÄ… inaczej niĹĽ w geometrii euklidesowej. Po drugiej stronie Wielkich Ĺšcian widzisz inne krainy -- jest ich okoĹ‚o 50, opartych na rĂłznych aspektach geometrii hiperbolicznej.", +/*MISSING*/ "Hyperbolic geometry has been discovered by the 19th century mathematicians who wondered about the nature of paralellness. Take a line L and a point A. Can a world exist where there is more than one line passing through A which does not cross L?\n\nThe Icy Land will be very dangerous if you have lots of Ice Diamonds -- lots of Yetis and Ice Wolves hunting you! But the other lands, where you have no treasures yet, will still be (relatively) safe.\n\nWander further, and you should find Crossroads quickly -- the Great Walls are straight lines, and indeed, they work differently than in Euclidean. On the other side of Great Walls, you see other lands -- there are about 50 lands in HyperRogue, based on different mechanics and aspects of hyperbolic geometry.", + "Hyperbolickou geometrii objevili matematikovĂ© z 19. stoletĂ­, kteří pĹ™emýšleli o povaze rovnoběžnosti. Máš-li přímku p a bod A, mĹŻĹľe existovat svÄ›t, ve kterĂ©m bodem A procházĂ­ vĂ­ce neĹľ jedna přímka, která neprotĂ­ná p?\n\nLedovĂ˝ kraj bude velmi nebezpeÄŤnĂ˝, pokud máte hodnÄ› LedovĂ˝ch diamantĹŻ -- potom tÄ› bude honit spousta YetiĹŻ a LedovĂ˝ch vlkĹŻ! Ale ostatnĂ­ kraje, ve kterĂ˝ch ještÄ› žádnĂ© poklady nemáš, budou stále bezpeÄŤnĂ© (relativnÄ›).\n\nPĹŻjdeš-li dál, mÄ›l bys rychle narazit na KĹ™iĹľovatku -- VelkĂ© zdi jsou přímky a skuteÄŤnÄ› fungujĂ­ jinak neĹľ v eukleidovskĂ© geometrii. Na druhĂ© stranÄ› VelkĂ˝ch zdĂ­ uvidíš jinĂ© kraje -- HyperRogue obsahuje zhruba 50 krajĹŻ zaloĹľenĂ˝ch na rĹŻznĂ˝ch mechanikách a aspektech hyperbolickĂ© geometrie.", + "ГиперболичеŃкая геометрия была открыта в 19 веке математиками, которые интереŃовалиŃŃŚ природой параллельноŃти. Возьмём прямŃŃŽ L и Ń‚ĐľŃ‡ĐşŃ A. Может ли ŃŃщеŃтвовать мир, в котором еŃŃ‚ŃŚ более чем одна прямая, проходящая через A и не переŃекающая L?\n\nЛедяная земля ŃтановитŃŃŹ очень опаŃной, когда Ń Ń‚ĐµĐ±ŃŹ много Ледяных алмазов -- много Йети и Ледяных волков охотятŃŃŹ на тебя! Но Đ´Ń€Ńгие земли, где Ń Ń‚ĐµĐ±ŃŹ нет Ńокровищ, вŃŃ‘ ещё (отноŃительно) безопаŃны.\n\nĐŃŃледŃĐą дальŃе, и Ń‚Ń‹ Ńкоро найдёŃŃŚ ПерекрёŃток -- Великие Ńтены являютŃŃŹ прямыми, и они ведŃŃ‚ Ńебя не Ń‚Đ°Đş, как в евклидовой геометрии. По Đ´Ń€ŃĐłŃŃŽ ŃŃ‚ĐľŃ€ĐľĐ˝Ń ĐľŃ‚ Великих Ńтен Ń‚Ń‹ видиŃŃŚ Đ´Ń€Ńгие земли -- их около 50, ĐľŃнованных на разных ĐľŃобенноŃŃ‚ŃŹŃ… гиперболичеŃкой геометрии.", +/*MISSING*/ "Hyperbolic geometry has been discovered by the 19th century mathematicians who wondered about the nature of paralellness. Take a line L and a point A. Can a world exist where there is more than one line passing through A which does not cross L?\n\nThe Icy Land will be very dangerous if you have lots of Ice Diamonds -- lots of Yetis and Ice Wolves hunting you! But the other lands, where you have no treasures yet, will still be (relatively) safe.\n\nWander further, and you should find Crossroads quickly -- the Great Walls are straight lines, and indeed, they work differently than in Euclidean. On the other side of Great Walls, you see other lands -- there are about 50 lands in HyperRogue, based on different mechanics and aspects of hyperbolic geometry.", + }}, + {0x1cba92db, { // "summon orbs" + "przwoĹ‚aj sfery", + "kĂĽre çıkar", + "vyvolej sfĂ©ry", + "призвать Ńферы", + "rufe Orbs herbei", + }}, + {0x1cc14d8a, { // "A long time ago, this was a trade route. But then, Krakens have risen out of the depths. Many trading ships sank here. Legend says that you can uncover the secret of a magical weapon spell somewhere in the depths...\n\nYou can find Sunken Treasures here, but they won't appear until you have killed a Kraken. You will also need Orb of the Fish to get the treasures, luckily you can steal one from the Viking treasure hunters." + "Dawno, dawno temu, to byĹ‚ szlak handlowy, ale Krakeny wypĹ‚ynęły z gĹ‚Ä™bin. Wiele statkĂłw handlowych zatonęła. WedĹ‚ug legendy, gdzieĹ› w gĹ‚Ä™binach ukryty jest sekret magicznej broni...\n\nMoĹĽesz tu znaleźć Zatopione Skarby, ale nie bÄ™dÄ… siÄ™ one pojawiać, aĹĽ pokonasz Krakena. By wyĹ‚owić skarby, potrzebna jest Sfera Ryby. Na szczęście moĹĽna ukraść jÄ… od wikiĹ„skich Ĺ‚owcĂłw skarbĂłw.", +/*MISSING*/ "A long time ago, this was a trade route. But then, Krakens have risen out of the depths. Many trading ships sank here. Legend says that you can uncover the secret of a magical weapon spell somewhere in the depths...\n\nYou can find Sunken Treasures here, but they won't appear until you have killed a Kraken. You will also need Orb of the Fish to get the treasures, luckily you can steal one from the Viking treasure hunters.", + "Tohle byla kdysi dávno obchodnĂ­ trasa. JenomĹľe potom se z hlubin vynoĹ™ili Krakeni. Mnoho obchodnĂ­ch lodĂ­ se tu potopilo. Legenda pravĂ­, Ĺľe kdesi v hlubinách mĹŻĹľete najĂ­t tajemstvĂ­ kouzla, kterĂ© vytváří magickou zbraĹ...\n\nV Hlubinách lze najĂ­t PotopenĂ© poklady, ale ty se objevĂ­ teprve potĂ©, co zabiješ alespoĹ jednoho Krakena. K zĂ­skánĂ­ pokladĹŻ budeš takĂ© potĹ™ebovat SfĂ©ru Ryby, ale ty se naštÄ›stĂ­ dajĂ­ ukrást vikingskĂ˝m lovcĹŻm pokladĹŻ.", + "Когда-Ń‚Đľ давно здеŃŃŚ были торговые ĐżŃти. Но потом Кракены появилиŃŃŚ из глŃбин. Много торговых кораблей затонŃло здеŃŃŚ. Легенды глаŃŃŹŃ‚, что где-Ń‚Đľ здеŃŃŚ можно найти тайны магичеŃкого орŃжия...\n\nЗдеŃŃŚ можно найти затонŃвŃие Ńокровища, но их нельзя найти, пока не ŃбьёŃŃŚ одного Кракена. Кроме того, чтобы Đ´Đľ них добратьŃŃŹ Đ˝Ńжна Сфера Рыбы. Đš ŃчаŃŃ‚ŃŚŃŽ, её можно ŃкраŃŃ‚ŃŚ Ń Đ’Đ¸ĐşĐ¸Đ˝ĐłĐľĐ˛, охотников Đ·Đ° Ńокровищами.", + "Vor langer Zeit war dies eine Handelsroute. Dann aber stiegen Kraken aus den Tiefen empor. Viele Handelsschiffe versanken hier. Legenden behaupten, dass man das Geheimnis eines Zaubers fĂĽr eine magische Waffe irgendwo in den Tiefen enthĂĽllen kann...\n\nHier kannst du versunkene Schätze finden, aber erst nachdem du einen Kraken getötet hast. Du wirst auch den Orb des Fischs brauchen, um zu den Schätzen zu gelangen. GlĂĽcklicherweise kannst du einen von den Wikinger-Schatzjägern stehlen.", + }}, + {0x1cf38c60, { // "Running Dogs" + "BiegnÄ…ce Psy", +/*MISSING*/ "Running Dogs", + "BěžícĂ­ psi", + "БегŃщие Ńобаки", +/*MISSING*/ "Running Dogs", + }}, + {0x1cfc7dd3, { // "hexagonal #1" + "szeĹ›ciokÄ…t #1", +/*MISSING*/ "hexagonal #1", + "šestiĂşhelnĂ­kovĂ˝ #1", + "ŃеŃтиŃгольник #1", + "hexagonal #1", + }}, + {0x1cfcaab2, { // "These orbs can be found in the Graveyard. You think that they were once powerful magical orbs, but by now, their power is long gone. No way to use them, you could as well simply drop them...\n\n" + "Na cmentarzu jest mnĂłstwo tych sfer. Chyba byĹ‚y to kiedyĹ› potężne magiczne kule, ale ich moc dawno przeminęła. Nie ma jak ich uĹĽyć, takĹĽe moĹĽe lepiej je po prostu zostawić...\n\n", + "Bu kĂĽreler Mezarlıkta bulunabilir. Eskiden kudretli sihrili kĂĽrelerdi, ama Ĺźimdi güçleri bitti. Onları kullanmanın bir yolu yok, bırakın gitsin...\n\n", + "Tyto sfĂ©ry mĹŻĹľeš najĂ­t na HĹ™bitovÄ›. Máš dojem, Ĺľe to kdysi byly mocnĂ© magickĂ© sfĂ©ry, ale jejich moc uĹľ je dávno pryÄŤ. NedajĂ­ se nijak použít, mĹŻĹľeš je rovnou zase poloĹľit...\n\n", + "Đ­Ń‚Ń ŃŃ„ĐµŃ€Ń ĐĽĐľĐ¶Đ˝Đľ найти на Кладбище. Когда-Ń‚Đľ она обладала могŃщеŃтвенной магией, но теперь её Ńила иŃŃякла. Нет ŃпоŃоба её иŃпользовать. Разве что проŃŃ‚Đľ броŃить её...\n\n", + "Diese Orbs kannst du auf dem Friedhof finden. Du glaubst, dass sie einst mächtige magische Orbs waren, aber inzwischen ist ihre Kraft längst erloschen. Sie sind fĂĽr dich nutzlos; du könntest sie auch einfach ablegen...\n\n", + }}, + {0x1d1d9ed1, { // "field quotient" + "przestrzeĹ„ ilorazowa ciaĹ‚a", +/*MISSING*/ "field quotient", +/*MISSING*/ "field quotient", +/*MISSING*/ "field quotient", +/*MISSING*/ "field quotient", + }}, + {0x1d35548f, { // "Level of water surface" + "Poziom powierzchni wody", +/*MISSING*/ "Level of water surface", + "ĂšroveĹ vodnĂ­ hladiny", + "Уровень поверхноŃти воды", +/*MISSING*/ "Level of water surface", + }}, + {0x1d412462, { // " (touch to activate)" + " (dotknij, by aktywować)", + " (etkinleĹźtirmek için dokun)", + " (aktivuj dotekem)", + " (коŃнитеŃŃŚ, чтобы активировать)", + " (Zum Aktivieren tippen)", + }}, + {0x1dd141d2, { // "A mine is next to you!" + "Jedna mina koĹ‚o Ciebie!", + "Yakınında bir mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházĂ­ jedna mina!", + "Одна мина рядом Ń Đ’Đ°ĐĽĐ¸!", + "1 Mine um dich!", + }}, + {0x1dd6b361, { // "PARTIAL" + "CZÄĹšCIOWO", + "KISMĂŽ", + "CZÄĹšCIOWO", + "ЧĐСТĐЧНО", + "TEILWEISE", + }}, + {0x1debe9ec, { // "(Menu button) and select the ASCII mode, which runs much faster. Depending on your device, turning the OpenGL mode on or off might make it faster, slower, or cause glitches." + "(Menu), tryb ASCII dziaĹ‚a duĹĽo szybciej. Tryb OpenGL rĂłwnieĹĽ wpĹ‚ywa na jakość grafiki.", + "(MenĂĽ), ve ASCII modunu seçebilirsin. Bu mod daha hızlı çalışır. Aygıtınıza baÄźlı olarak OpenGL'yi açmak oyununuzu hızlandırabilir, yavaĹźlatabilir veya hatalara sebep olabilir.", + "(tlaÄŤĂ­tko 'Menu') a zvolit ASCII mĂłd, kterĂ˝ je mnohem rychlejší. ZapnutĂ­ ÄŤi vypnutĂ­ mĂłdu OpenGL mĹŻĹľe, v závislosti na tvĂ©m zařízenĂ­, hru zrychlit, zpomalit, nebo vyvolat grafickĂ© chyby.", + "(Меню), выберите ASCII режим, который работает быŃтрее. Đ’ завиŃимоŃти от Đ’Đ°Ńего ŃŃтройŃтва включите или выключите OpenGL. Он может быть как быŃтрее, Ń‚Đ°Đş и медленнее. ", + "(Im MenĂĽ) Versuche den ASCII-Modus zu aktivieren - der läuft viel schneller! Je nach Gerät kann der OpenGL-Modus das Spiel beschleunigen, verlangsamen, oder Bildfehler hervorrufen.", + }}, + {0x1df00010, { // "openGL mode disabled" + "wyĹ‚Ä…czono tryb OpenGL", + "OpenGL modu devredışı", + "mĂłd openGL vypnut", + "режим OpenGL выключен", + "OpenGL deaktiviert", + }}, + {0x1df9745d, { // "This guard of the Emerald Mine is wielding a huge flail. You cannot attack him directly, as the flail would still hit you then. Luckily, you have learned a trick: if you step away from him, he will hit himself with the flail!" + "Ten straĹĽnik Kopalni SzmaragdĂłw jest uzbrojony w wielki cep bojowy. Nie moĹĽesz go zaatakować bezpoĹ›rednio, bo cep by CiÄ™ uderzyĹ‚. Na szczęście, znasz sztuczkÄ™: jak siÄ™ od niego odsuniesz, straĹĽnik uderzy cepem samego siebie!", + "ZĂĽmrĂĽt Madeninin bu muhafızı kocaman bır topuz tutuyor. Ona doÄźrudan saldıramazsın, çünkĂĽ topuz sana yine de vurur. Çok şükĂĽr bir hile öğrendin: EÄźer geriye doÄźru bir adım atarsan, muhafız topuzuyla kendisine vuracak!", + "Tento strážce SmaragdovĂ©ho dolu je vyzbrojen obrovskĂ˝m Ĺ™emdihem. NemĹŻĹľeš na nÄ›j ĂştoÄŤit přímo, protoĹľe by tÄ› Ĺ™emdih i tak zasáhl. NaštÄ›stĂ­ ses nauÄŤil jeden trik: pokud se pohneš smÄ›rem od nÄ›j, zasáhne Ĺ™emdihem sám sebe!", + "Этот Ńтраж изŃĐĽŃ€Ńдных ŃĐ°Ń…Ń‚ воорŃжён огромным цепом. Đ’Ń‹ не можете атаковать его обычным ĐżŃŃ‚Ń‘ĐĽ, ĐżĐľŃ‚ĐľĐĽŃ Ń‡Ń‚Đľ тогда цеп Ńбьёт Đ’Đ°Ń. Đš ŃчаŃŃ‚ŃŚŃŽ, Đ’Ń‹ знаете трюк: Đ´ĐľŃтаточно отойти от него, когда он замахиваетŃŃŹ, и он Ńбьёт ŃĐ°ĐĽ Ńебя!", + "Dieser Wächter der Smaragdmine hat einen riesigen Morgenstern. Ihn direkt anzugreifen wĂĽrde nichts bringen da der Morgenstern dich treffen wĂĽrde. GlĂĽcklicherweise kennst du einen Trick: Wenn du dich von ihm entfernst, trifft er sich selbst!", + }}, + {0x1e3e87b7, { // "The Knights wish you luck!" + "Rycerze ĹĽyczÄ… powodzenia!", + "Şövalyeler sana Ĺźans diliyor!", + "RytĂ­Ĺ™i ti pĹ™ejĂ­ hodnÄ› štÄ›stĂ­!", + "Рыцари желают Đ’Đ°ĐĽ Ńдачи!", + "Die Ritter wĂĽnschen dir GlĂĽck!", + }}, + {0x1e46fe41, { // "Wherever this powerful being goes, the living fjord sinks below water, non-magical boats are destroyed, and fires are extinguished.\n\nAs a special case, you can attack the Water Elemental from the water, without drowning immediately." + "Gdziekolwiek przejdzie ta potężna istota, ĹĽywy fiord tonie, niemagiczne Ĺ‚Ăłdki sÄ… niszczone, a ogieĹ„ gaĹ›nie.\n\nJako szczegĂłlny przypadek, moĹĽesz atakować Wodnego Ĺ»ywioĹ‚aka z wody, nie topiÄ…c siÄ™.", + "Bu güçlĂĽ yaratığın geçtiÄźi her yerde YaĹźayan Fiyort su altına gömĂĽlĂĽr, sihirli olmayan kayıklar yok olur ve ateĹźler söner. \n\n Ä°stisna bir durum olarak Su Unsuruna suyun içerisinden anında boÄźulmadan vurursan onu öldĂĽrebilirsin. ", + "Kamkoli se vydá tato mocná bytost, tam se Ĺ˝ivoucĂ­ fjord potápĂ­ pod vodu, všechny ÄŤluny kromÄ› magickĂ˝ch jsou zniÄŤeny a veškerĂ˝ oheĹ je uhašen.\n\nNa Elementála Vody mĹŻĹľeš zaĂştoÄŤit z vody, aniĹľ by ses okamĹľitÄ› utopil; to je speciálnĂ­ případ.", + "Где бы ни Ńло ŃŤŃ‚Đľ могŃщеŃтвенное ŃŃщеŃтво, фьорды раŃŃŃ‚ŃпаютŃŃŹ перед ним, обычные лодки ŃничтожаютŃŃŹ, огонь гаŃнет.\n\nОднако, еŃли Đ’Ń‹ Đ°Ń‚Đ°ĐşŃете его, находяŃŃ‚ в воде, Đ’Đ°Ń Đ˝Đµ затянет ŃŃ€Đ°Đ·Ń Đ˛ водŃ.", + "Wohin auch immer sich dieses Wesen bewegt sinkt der lebende Fjord. Dadurch werden nicht magische Boote zerstört und Feuer gelöscht.\n\nDie Besonderheit ist: du kannst den Wasserelementar vom Wasser aus angreifen ohne sofort zu ertrinken.", + }}, + {0x1e8e4977, { // "restart" + "nowa gra", +/*MISSING*/ "restart", + "nová hra", + "новая игра", +/*MISSING*/ "restart", + }}, + {0x1e9407e4, { // "Failed to load the file 'papermodeldata.txt'" + "Nie udaĹ‚o siÄ™ wczytać papermodeldata.txt", + "papermodeldata.txt dosyası yĂĽklenemedi", + "Soubor 'papermodeldata.txt' se nepodaĹ™ilo nahrát", + "Невозможно загрŃзить файл papermodeldata.txt", + "papermodeldata.txt konnte nicht geladen werden.", + }}, + {0x1ebefc13, { // "This Orb lets you jump to a place which is two cell away from you, in a single turn. You can jump over water, chasms and fire, but not over walls." + "Ta Sfera pozwala na skok do miejsca odlegĹ‚ego od Ciebie o dwa pola, w jednej kolejce. MoĹĽesz przeskoczyć wodÄ™, przepaść i ogieĹ„, ale nie Ĺ›cianÄ™.", + "Bu KĂĽre tek tur içinde senden iki hĂĽcre uzaÄźa zıplamanı saÄźlar.", + "Tato SfĂ©ra ti umoĹľĹuje skoÄŤit v jednom kole dvÄ› pole daleko. MĹŻĹľeš skákat pĹ™es vodu, propasti a oheĹ, ale ne pĹ™es zdi.", + "Đ­Ń‚Đ° Ńфера позволяет прыгать на 2 клетки Đ·Đ° один ход. Đ’Ń‹ можете прыгать через водŃ, огонь или пропаŃŃ‚ŃŚ, но не через Ńтены.", + "Dieser Orb lässt dich in einem Zug an einen Ort springen der 2 Zellen entfernt ist. Du kannst ĂĽber Wasser, Feuer und Spalten springen aber nicht ĂĽber Wände.", + }}, + {0x1ec2ea5e, { // "This orb lets you go through living walls. It also has powers in some of the other lands." + "Ta sfera pozwala Ci przechodzić przez ĹĽywÄ… Ĺ›cianÄ™. Ma teĹĽ moce w niektĂłrych z pozostaĹ‚ych krain.", + "Bu kĂĽre yaĹźayan duvarların içinden geçebilmeni saÄźlar. Bazı baĹźka diyarlarda da baĹźka güçleri olabilir.", + "Tato sfĂ©ra ti umoĹľĹuje procházet ĹľivoucĂ­mi zdmi. Má takĂ© urÄŤitĂ© schopnosti v nÄ›kterĂ˝ch jinĂ˝ch krajĂ­ch.", + "Đ­Ń‚Đ° Ńфера позволяет проходить Ńквозь живые Ńтены. Она имеет ŃĐ¸Đ»Ń Đ¸ в некоторых Đ´Ń€Ńгих землях.", + "Dieser Orb erlaubt es dir, dich durch lebende Wände zu bewegen und er besitzt auch einige Kräfte in anderen Ländern.", + }}, + {0x1edbcc1a, { // "After you move while having this Orb, you immediately attack the next cell in the straight line (or two cells, when moving on a heptagon). This attack is slightly stronger than your normal attack: it can stun some of the monsters which cannot be killed or stunned normally." + "Po kaĹĽdym ruchu z tÄ… SferÄ…, natychmiast atakujesz kolejne pole w linii prostej (albo dwa pola, gdy jesteĹ› na siedmiokÄ…cie). Ten atak jest trochÄ™ silniejszy od Twojego zwykĹ‚ego ataku: niektĂłre potwory niewraĹĽliwe na zwykĹ‚y atak moĹĽna w ten sposĂłb ogĹ‚uszyć.", +/*MISSING*/ "After you move while having this Orb, you immediately attack the next cell in the straight line (or two cells, when moving on a heptagon). This attack is slightly stronger than your normal attack: it can stun some of the monsters which cannot be killed or stunned normally.", + "Kdykoli se pohneš s touto SfĂ©rou, okamĹľitÄ› zaĂştočíš na další polĂ­ÄŤko v Ĺ™adÄ› (nebo na dvÄ›, pokud se pohneš na sedmiĂşhelnĂ­k). Tento Ăştok je o nÄ›co silnÄ›jší neĹľ tvĹŻj běžnĂ˝ Ăştok: dokáže omráčit nÄ›kterĂ© netvory, kterĂ© nelze zabĂ­t ani omráčit běžnĂ˝m zpĹŻsobem.", + "ПоŃле хода Ń ŃŤŃ‚ĐľĐą Ńферой вы ŃŃ€Đ°Đ·Ń Đ¶Đµ Đ°Ń‚Đ°ĐşŃете ŃледŃющŃŃŽ ĐşĐ»ĐµŃ‚ĐşŃ ĐżŃ€ŃŹĐĽĐľĐą (или две клетки, еŃли ходите на ŃемиŃгольник). Đ­Ń‚Đ° атака немного Ńильнее обычной: она оглŃŃает некоторых ŃŃщеŃтв, которых нельзя Ńбить или оглŃŃить обычным Ńдаром.", +/*MISSING*/ "After you move while having this Orb, you immediately attack the next cell in the straight line (or two cells, when moving on a heptagon). This attack is slightly stronger than your normal attack: it can stun some of the monsters which cannot be killed or stunned normally.", + }}, + {0x1f3db1c6, { // "%The1 squeaks gratefully!" + "%1 pisn%Ä…Ĺ‚1 w podziÄ™kowaniu!", + "%1 minnetle ciyaklıyor.", + "%1 vděčnÄ› pištĂ­!", + "%1 пищит Ń Đ±Đ»Đ°ĐłĐľĐ´Đ°Ń€Đ˝ĐľŃŃ‚ŃŚŃŽ!", + "%Die1 %1 piepst dankbar!", + }}, + {0x1f4c620a, { // "Introduction" + "WstÄ™p", +/*MISSING*/ "Introduction", + "Ăšvod", + "Введение", +/*MISSING*/ "Introduction", + }}, + {0x1f6d96e3, { // "This orb lets you instantly move to another location on the map. Just click a location which is not next to you to teleport there. " + "Ta sfera pozwala Ci natychmiast przenieść siÄ™ do innego miejsca na mapie. Wystarczy kliknąć pole, ktĂłre nie jest obok Ciebie.", + "Bu kĂĽre haritadaki balĹźka bir noktaya anında ışınlanmanızı saÄźlayacak. Işınlanmak için sadece yanında olmayan bir yere tıkla.", + "Tato sfĂ©ra ti umoĹľĹuje se okamĹľitÄ› pĹ™emĂ­stit na jinĂ© mĂ­sto na mapÄ›. StaÄŤĂ­, abys klikl na libovolnĂ© nesousednĂ­ polĂ­ÄŤko.", + "Đ­Ń‚Đ° Ńфера позволяет перемещатьŃŃŹ в произвольное меŃŃ‚Đľ. ПроŃŃ‚Đľ кликните по не ŃĐľŃедней Ń Đ’Đ°ĐĽĐ¸ клетке, чтобы телепортироватьŃŃŹ Ń‚ŃĐ´Đ°.", + "Dieser Orb versetzt dich an einen anderen Ort auf der Karte. Klicke einfach einen Ort an, der sich nicht neben dir befindet, um dorthin zu teleportieren.", + }}, + {0x1f8ebbbf, { // "An ancient sunken city which can be reached only when the stars are right.\n\nYou can find Temples of Cthulhu in R'Lyeh once you collect five Statues of Cthulhu." + "Prastare zatopione miasto, do ktĂłrego moĹĽna dostać siÄ™ tylko, gdy gwiazdy sÄ… na swoich miejscach.\n\nPo znalezieniu 5 Statuetek Cthulhu moĹĽesz w R'Lyeh trafić na ĹšwiÄ…tynie Cthulhu.", + "Sadece yıldızlar burayı iĹźaret ettiÄźinde ulaşılabilecek batık bir antik Ĺźehir.\n\nCthulhu'nun tapınaklarını 5 Cthulhu heykeli topladıktan sonra bulabilirsin.", + "PrastarĂ© potopenĂ© mÄ›sto, kam se lze dostat pouze pĹ™i správnĂ©m postavenĂ­ hvÄ›zd.\n\nPo znalezieniu 5 Statuetek Cthulhu moĹĽesz w R'Lyeh trafić na ĹšwiÄ…tynie Cthulhu.", + "Этот древний затопленный город можно найти лиŃŃŚ тогда, когда на него ŃкажŃŃ‚ звёзды.\n\nĐ’Ń‹ Ńможете найти храмы КтŃлхŃ, как только Ńоберёте 5 ŃŃ‚Đ°Ń‚ŃĐą КтŃлхŃ.", + "Eine antike, versunkene Stadt, die du nur erreichen kannst, wenn die Sterne gĂĽnstig stehen.\n\nDer Tempel des Cthulhu befindet sich in R'Lyeh. Sobald du fĂĽnf Statuen von Cthulhu gesammelt hast, kannst du ihn finden.", + }}, + {0x1f9a904e, { // "native to %the1 (collect 1 %2)" + "rodzima %abl1 (1x %2)", + "%abl1 bulunuyor (1 tane %2)", + "standardnĂ­ %abl1 (zĂ­skej 1x %2)", + "родная %abl1 (1x %2)", + "heimisch in %der1 (1x %2)", + }}, + {0x1fe99f69, { // "video resolution" + "rozdzielczość obrazu", + "çözĂĽnĂĽrlĂĽk", + "rozlišenĂ­", + "видео разреŃение", + "Videoauflösung", + }}, + {0x1ff2a5f5, { // "Corals have a somewhat hyperbolic structure even in your home world, but natural corals from the Warped Sea have truly beautiful shapes. Ratlings know the value of corals, and thus keep them in boats for safety." + "Korale majÄ… hiperbolicznÄ… strukturÄ™ nawet w Ĺ›wiecie, z ktĂłrego pochodzisz, ale naturalne korale z Zakrzywionego Morza majÄ… prawdziwie piÄ™kne ksztaĹ‚ty. Szczuraki znajÄ… wartość korali i dla bezpieczeĹ„stwa trzymajÄ… je na Ĺ‚Ăłdkach.", +/*MISSING*/ "Corals have a somewhat hyperbolic structure even in your home world, but natural corals from the Warped Sea have truly beautiful shapes. Ratlings know the value of corals, and thus keep them in boats for safety.", + "Korály majĂ­ do jistĂ© mĂ­ry hyperbolickou strukturu i ve tvĂ©m domovskĂ©m svÄ›tÄ›, ale tvary přírodnĂ­ch korálĹŻ z PokĹ™ivenĂ©ho moĹ™e jsou skuteÄŤnÄ› nádhernĂ©. Krysáci znajĂ­ hodnotu korálĹŻ, a kvĹŻli bezpeÄŤnosti je pĹ™echovávajĂ­ ve ÄŤlunech.", + "Кораллы имеют ŃŃ‚Ń€ŃктŃŃ€Ń, похожŃŃŽ на гиперболичеŃĐşŃŃŽ, даже в Đ’Đ°Ńем обычном мире, но наŃтоящие кораллы из ĐŃкривлённого моря имеют дейŃтвительно краŃивые формы. КрыŃолюды знают Ń†ĐµĐ˝Ń ĐşĐľŃ€Đ°Đ»Đ»Đ°ĐĽ и на вŃякий ŃĐ»Ńчай хранят из в лодках.", + "Korallen haben auch in deiner Welt eine etwas hyperbolische Struktur. Aber natĂĽrliche Korallen der Verzerrten See haben besonders schöne Formen. Rattenmenschen kennen den Wert der Korallen und bewahren sie daher zur Sicherheit in Booten auf.", + }}, + {0x200536cf, { // "heptagonal game board" + "plansza do gry z siedmiokÄ…tĂłw", + "yedigensel tahta", + "sedmiĂşhelnĂ­ková hernĂ­ deska", + "ŃемиŃгольная игровая Đ´ĐľŃка", + "Heptagonales Spielbrett", + }}, + {0x204ae3f4, { // "\n\nThis is a friendly being. It does not count for your total kills." + "\n\nTo jest przyjazne stworzenie. Nie liczy siÄ™ do Ĺ‚Ä…cznych zabić.", +/*MISSING*/ "\n\nThis is a friendly being. It does not count for your total kills.", + "\n\nToto je přátelská bytost. NepoÄŤĂ­tá se do celkovĂ©ho poÄŤtu zabitĂ˝ch netvorĹŻ.", + "\n\nĐ­Ń‚Đľ Đ’Đ°Ń Ńоюзник. Не ŃчитываетŃŃŹ в количеŃтве ŃбийŃтв.", + "\n\nDas ist ein freundliches Wesen. Es wird der Gesamtzahl deiner Tötungen nicht eingerechnet.", + }}, + {0x207af4ad, { // "The inscriptions on the Statue of Cthulhu point you toward your destiny..." + "Inskrypcje na Statui Cthulhu wskazujÄ… Ci Twoje Przeznaczenie...", + "Cthulhu'nun heykeli ĂĽzerindeki yazıt sana kaderinin nasıl çizileceÄźini gösteriyor...", + "Nápis na CthulhuovÄ› sošce tÄ› smÄ›ruje ke tvĂ©mu osudu...", + "НадпиŃи на ŃŃ‚Đ°Ń‚Ńе КтŃĐ»Ń…Ń ĐżĐľĐşĐ°Đ·Ń‹Đ˛Đ°ŃŽŃ‚ Đ’Đ°ĐĽ Đ’Đ°ŃŃ ŃŃдьбŃ...", + "Die Inschrift auf Cthulhus Statue zeigt dir den Weg zu deinem Schicksal...", + }}, + {0x207f072a, { // "projection in ball model" + "projekcja w modelu kuli", +/*MISSING*/ "projection in ball model", + "projekce v modelu koule", + "проекция в модели Ńферы", +/*MISSING*/ "projection in ball model", + }}, + {0x20861ec3, { // "Save %the1 first to unlock this challenge!" + "Uratuj %a1, by mieć dostÄ™p do tej misji!", + "Bu görevi açmak için önce %a1 kurtar!", + "Pro aktivaci tĂ©to mise musíš nejprve zachránit %a1!", + "СпаŃи %a1, прежде чем разблокировать миŃŃию!", + "Rette zuerst %den1 %a1 um diese Herausforderung freizuschalten!", + }}, + {0x20c33eab, { // "You cannot attack Sandworms directly!" + "Nie moĹĽesz atakować Czerwi wprost!", + "Kumkurduna doÄźrudan saldıramazsınız!", + "Na PĂ­seÄŤnĂ© ÄŤervy nemĹŻĹľeš ĂştoÄŤit přímo!", + "Đ’Ń‹ не можете атаковать пеŃчаных червей!", + "Du kannst SandwĂĽrmer nicht direkt angreifen!", + }}, + {0x20cd7f3a, { // "%The1 would get you!" + "Dopad%Ĺ‚1by CiÄ™ %1!", + "%1 seni kapar!", + "To by tÄ› dosta%l1 %1!", + "%1 Ńничтожит Đ˛Đ°Ń Đ·Đ´ĐµŃŃŚ!", + "%Der1 %1 wĂĽrde dich fangen!", + }}, + {0x20eeb3db, { // "You blow %the1 away!" + "Zdmuchn%Ä…Ĺ‚eĹ›0 %a1!", + "%a1! rĂĽzgârla ittirdin!", + "Odfoukl jsi %a1!", + "Đ’Ń‹ ŃĐ´Ńли %a1!", + "Du wehst %den1 %a1 weg!", + }}, + {0x20efa355, { // "male" + "mężczyzna", + "erkek", + "muĹľ", + "ĐĽŃжŃкой", + "männlich", + }}, + {0x20f3fe95, { // "A device that attracts sandworms and other enemies. You need to activate it." + "To urzÄ…dzenie przyciÄ…ga czerwie i innych przeciwnikĂłw. Musisz je aktywować.", + "Kumkurtlarını ve diÄźer dĂĽĹźmanları çağıracak bir aygıt. Sadece etkinleĹźtirmen gerekiyor.", + "ZařízenĂ­, kterĂ© pĹ™itahuje pĂ­seÄŤnĂ© ÄŤervy a jinĂ© nepřátele. Aby zaÄŤalo pracovat, musíš ho aktivovat.", + "Этот аппарат привлекает пеŃчаных червей и Đ´Ń€Ńгих врагов. Đ’Đ°ĐĽ Đ˝Ńжно активировать его.", + "Ein Gerät, das SandwĂĽrmer und andere Feinde anlockt. Es muss aktiviert werden.", + }}, + {0x211b3e1f, { // "Another energy sword!" + "Jeszcze jeden miecz energii!", +/*MISSING*/ "Another energy sword!", + "Další energetickĂ˝ meÄŤ!", + "Ещё один магичеŃкий меч!", +/*MISSING*/ "Another energy sword!", + }}, + {0x21278f73, { // " Additionally, all items around the killed Troll will be destroyed." + " Dodatkowo, wszystkie przedmioty wokół zabitego Trolla ulegajÄ… zniszczeniu.", + " Ayrıca, TrolĂĽn etrafındaki bĂĽtĂĽn eĹźyalar yok olur.", + " ZabitĂ­m Ĺ utrolla se navĂ­c zniÄŤĂ­ všechny pĹ™edmÄ›ty kolem nÄ›j.", + " Đ’Ńе предметы рядом Ń ŃмерŃим троллем также ŃничтожаютŃŃŹ.", + " Des weiteren werden alle Items um den getöteten Troll zerstört.", + }}, + {0x21391810, { // "You glance at your great treasures." + "Patrzysz na swoje wspaniaĹ‚e skarby.", + "MĂĽthiĹź hazinelerine göz gezdirdin.", + "DĂ­váš se na svĂ© velkĂ© poklady.", + "Đ’Ń‹ Ńмотрите на ваŃи громадные Ńокровища.", + "Du betrachtest deine kostbaren Schätze.", + }}, + {0x213e2e9a, { // "Hmm, he has been training in the Emerald Mine. Interesting..." + "Ciekawe... trenowaĹ‚ w Kopalni SzmaragdĂłw.", + "Çok garip... ZĂĽmrĂĽt Madeninde alıştırma yapıyormuĹź.", + "Hmm, tak on trĂ©noval ve SmaragdovĂ©m dole. ZajĂ­mavĂ©...", + "Он тренировалŃŃŹ в ĐĐ·ŃĐĽŃ€Ńдной Ńахте. ĐĄĐĽ, интереŃно...", + "Er hat in der Smaragdmine trainiert. Interessant...", + }}, + {0x2175c728, { // "hyperboloid model" + "model hiperboloidy", +/*MISSING*/ "hyperboloid model", + "model hyperboloidu", + "модель гиперболоида", +/*MISSING*/ "hyperboloid model", + }}, + {0x21c93b56, { // "After killing %the1, you feel able to reach the Elemental Planes!" + "Po pokonaniu %a1 czujesz, ĹĽe masz dostÄ™p do Strefy Ĺ»ywioĹ‚Ăłw!", +/*MISSING*/ "After killing %the1, you feel able to reach the Elemental Planes!", + "Po zabitĂ­ %a1 cĂ­tíš, Ĺľe jsi schopen dosáhnout ElementálnĂ­ch rovin!", + "Победив %a1, Ń‚Ń‹ чŃвŃтвŃеŃŃŚ, что можеŃŃŚ попаŃŃ‚ŃŚ в ПлоŃкоŃŃ‚ŃŚ Ńтихий!", +/*MISSING*/ "After killing %the1, you feel able to reach the Elemental Planes!", + }}, + {0x21d7b5ef, { // "(v) config" + "(v) ust.", + "(v) ayarlar", + "(v) nast.", + "(v) наŃŃ‚Ń€.", + "(v) Konfig.", + }}, + {0x2231398b, { // "Hyperstone Quest" + "Misja HiperkamieĹ„", + "AĹźkıntaĹź Görevi", + "hyperkamovĂ˝ Ăşkol", + "МиŃŃия Гиперкамней", + "Hyperstone-Herausforderung", + }}, + {0x226c89da, { // "\nSpecial conduct (still valid)\n" + "\nDodatkowe wyzwanie (wciÄ…ĹĽ speĹ‚nione):", +/*MISSING*/ "\nSpecial conduct (still valid)\n", + "\nZvláštnĂ­ vĂ˝zva (stále platná):", + "\nДополнительное ŃŃловие (выполняетŃŃŹ):", +/*MISSING*/ "\nSpecial conduct (still valid)\n", + }}, + {0x22843718, { // "A nasty predator from the Icy Land. Contrary to other monsters, it tracks its prey by their heat." + "Niebezpieczny drapieĹĽnik z Krainy Lodu. W przeciwieĹ„stwie do innych stworĂłw, Ĺ›ledzi ofiarÄ™ po jej cieple.", + "Buz Diyarlarında yaĹźayan hınzır bir yırtıcı. DiÄźer canavarların aksine, avını ısısıyla takip ediyor.", + "OšklivĂ˝ predátor z LedovĂ©ho kraje. Na rozdĂ­l od jinĂ˝ch netvorĹŻ sleduje koĹ™ist pomocĂ­ tepla, kterĂ© vydává.", + "Мерзкий хищник из Ледяной земли. Đ’ отличие от ĐľŃтальных монŃтров он ищет Ńвою Đ¶ĐµŃ€Ń‚Đ˛Ń ĐżĐľ её теплŃ.", + "Ein scheuĂźlicher Jäger des Eisigen Landes. Anders als andere Monster findet er seine Beute durch deren Wärme.", + }}, + {0x22923e9b, { // "Cannot slash another player!" + "Nie moĹĽesz ciąć innego gracza!", +/*MISSING*/ "Cannot slash another player!", + "NemĹŻĹľeš seknout jinĂ©ho hráče!", + "Нельзя разрŃбить Đ´Ń€Ńгого игрока!", + "Kann keinen anderen Spieler schlagen!", + }}, + {0x229f917c, { // "You are recalled!" + "Wracasz!", +/*MISSING*/ "You are recalled!", + "Vracíš se!", + "Đ’Ń‹ вернŃлиŃŃŚ!", +/*MISSING*/ "You are recalled!", + }}, + {0x22ccbba4, { // "throw a knife" + "rzut noĹĽem", + "bıçak at", + "házenĂ­ noĹľe", + "кинŃŃ‚ŃŚ нож", + "Messer werfen", + }}, + {0x22ea7326, { // "Ice below you is melting! RUN!" + "LĂłd pod TobÄ… siÄ™ topi! UCIEKAJ!", + "Altındaki buz eriyor! KAÇ!", + "Led pod tebou taje! UTĂŤKEJ!", + "Лёд под Вами тает! Đ‘Đ•Đ“ĐТЕ!", + "Das Eis unter dir schmilz! RENN!", + }}, + {0x22fd147c, { // "A natural terrain feature of the Desert." + "Naturalny teren z Pustyni.", + "ÇölĂĽn içinde doÄźal bir kum oluĹźumu.", + "PřírodnĂ­ terĂ©nnĂ­ prvek v Poušti.", + "НатŃральный ландŃĐ°Ń„Ń‚ ĐżŃŃтыни.", + "Ein natĂĽrliches Landschaftsmerkmal der WĂĽste.", + }}, + {0x23234993, { // "Use arrow keys to choose the teleport location." + "UĹĽyj strzaĹ‚ek, by wybrać cel teleportacji.", + "Işınlanacağın yeri seçmek için okları kullan.", + "Vyber cĂ­l teleportace pomocĂ­ šipek.", + "С помощью Ńтрелок выберите меŃŃ‚Đľ для телепортации.", + "Benutze die Pfeiltasten um dein Teleportations Ziel zu wählen.", + }}, + {0x23a89ce4, { // "Rotate the camera. Can be used to obtain a first person perspective, or third person perspective when combined with Y shift." + "Obróć kamerÄ™. MoĹĽna uĹĽyć do uzyskania perspektywy z pierwszej osoby, lub z trzeciej osoby po poĹ‚Ä…czeniu z przesuniÄ™ciem Y.", +/*MISSING*/ "Rotate the camera. Can be used to obtain a first person perspective, or third person perspective when combined with Y shift.", + "Rotace kamery. Lze ji použít k zĂ­skánĂ­ perspektivy prvnĂ­ osoby, nebo (v kombinaci s Y posuvem) tĹ™etĂ­ osoby.", + "Поворачивает камерŃ. Можно иŃпользовать, чтобы полŃчить вид от первого лица или от третьего лица в Ńочетании ŃĐľ Ńдвигом по Y.", +/*MISSING*/ "Rotate the camera. Can be used to obtain a first person perspective, or third person perspective when combined with Y shift.", + }}, + {0x23c92250, { // "Cannot push into the same location!" + "Nie moĹĽna pchać w to samo miejsce!", +/*MISSING*/ "Cannot push into the same location!", + "NemĹŻĹľeš tlaÄŤit na stejnĂ© mĂ­sto!", + "Нельзя толкать в оно и Ń‚Đľ же меŃŃ‚Đľ!", + "Kann nicht auf dasselbe Feld ziehen!", + }}, + {0x23e7d6ba, { // "You feel that %the2 become%s2 more dangerous." + "Masz wraĹĽenie, ĹĽe %P2 staje siÄ™ bardziej niebezpieczn%ya2.", + "Topladığın her %abl1, ...", + "CĂ­tíš, Ĺľe %2 zaÄŤĂ­ná bĂ˝t nebezpeÄŤnÄ›jší.", + "Đ’Ń‹ чŃвŃтвŃете, что находитьŃŃŹ %abl2 вŃŃ‘ опаŃнее.", + "Du spĂĽrst, dass %der2 %2 gefährlicher wird,", + }}, + {0x2406632a, { // "player 1 X" + "gracz 1 X", + "oyuncu 1, yatay", + "hráč 1 X", + "игрок 1 X", + "Spieler 1 X", + }}, + {0x2406632b, { // "player 1 Y" + "gracz 1 Y", + "oyuncu 1, dikey", + "hráč 1 Y", + "игрок 1 Y", + "Spieler 1 Y", + }}, + {0x246929eb, { // "Many lost boats are spinning in this whirlpool. Some of them contain treasures and Pirates.\n\nUnmanned boats will go one cell clockwise in each turn. Sharks and manned boats are only allowed to go with the current, that is, towards the center, or clockwise." + "DuĹĽo statkĂłw zagubiĹ‚o siÄ™ w tym wirze. Na niektĂłrych z nich sÄ… skarby i Piraci.\n\nStatki bez zaĹ‚ogi poruszajÄ… siÄ™ o 1 pole w kaĹĽdej kolejce, zgodnie z ruchem wskazĂłwek zegara. Rekiny i statki z zaĹ‚ogÄ… mogÄ… poruszać siÄ™ tylko z prÄ…dem, czyli w kierunku Ĺ›rodka wiru albo zgodnie z ruchem wskazĂłwek zegara.", + "Bu tayfunda pek çok kayıp kayık geziniyor. Bır kısmında hazineler yahut korsanlar var.\n\nÄ°nsansız kayıklar her tur saat yönĂĽnde bir hĂĽcre hareket eder. Köpekbalıkları ve içinde insan olan kayıklar sadece akıntıyla -yani merkeze doÄźru- ya da saat yönĂĽnde hareket edebilir.", + "V tomto vĂ­ru se toÄŤĂ­ mnoho ztracenĂ˝ch ÄŤlunĹŻ. Na nÄ›kterĂ˝ch z nich se nacházĂ­ poklad nebo piráti.\n\nÄŚluny bez posádky se v kaĹľdĂ©m kole posunou o jedno pole po smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek. Ĺ˝raloci a ÄŤluny s posádkou se smÄ›jĂ­ pohybovat pouze po proudu, tedy do stĹ™edu nebo po smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek ", + "Много лодок погибло в этом водовороте. Đ’ некоторых из них были ценноŃти и Пираты.\n\nĐźŃŃтые лодки движŃŃ‚ŃŃŹ на ĐľĐ´Đ˝Ń ĐşĐ»ĐµŃ‚ĐşŃ ĐżĐľ чаŃовой Ńтрелке каждые ход. ĐĐşŃлы и лодки Ń Đ»ŃŽĐ´ŃŚĐĽĐ¸ движŃŃ‚ŃŃŹ по течению, Ń‚Đľ еŃŃ‚ŃŚ Đş Ń†ĐµĐ˝Ń‚Ń€Ń Đ¸Đ»Đ¸ по чаŃовой Ńтрелке.", + "Viele verlorene Boote wirbeln in diesem Strudel... manche enthalten Schätze oder Piraten.\n\nUnbemannte Boote bewegen sich jeden Zug eine Zelle im Uhrzeigersinn. Haie und bemannte Boote dĂĽrfen nur mit der Strömung schwimmen (das heiĂźt, zur Mitte oder im Uhrzeigersinn).", + }}, + {0x2500ca82, { // "HyperRogue game board" + "plansza do gry HyperRogue", + "HyperRogue tahta", + "hernĂ­ deska HyperRogue", + "игровая Đ´ĐľŃка HyperRogue", + "HyperRogue-Spielbrett", + }}, + {0x254cf8b2, { // "You activate your terraforming powers!" + "Uaktywni%Ĺ‚eĹ›0 swoje moce edycji!", + "YerdĂĽzenleyici güçlerini harekete geçirdin!", + "Aktivova%l0 jsi svĂ© terramorfickĂ© schopnosti!", + "Đ’Ń‹ активировали ŃĐ¸Đ»Ń Ń€ĐµĐ´Đ°ĐşŃ‚Đ¸Ń€ĐľĐ˛Đ°Đ˝Đ¸ŃŹ!", + "Du aktivierst deine terraforming Kräfte!", + }}, + {0x254f162a, { // "see http://www.roguetemple.com/z/hyper/conformal.php" + "patrz http://www.roguetemple.com/z/hyper/conformal.php (po angielsku)", +/*MISSING*/ "see http://www.roguetemple.com/z/hyper/conformal.php", + "viz http://www.roguetemple.com/z/hyper/conformal.php (anglicky)", + "Ńмотри http://www.roguetemple.com/z/hyper/conformal.php (по-английŃки))", + "siehe http://www.roguetemple.com/z/hyper/conformal.php (in Englisch)", + }}, + {0x25615d28, { // "high contrast" + "wysoki kontrast", + "yĂĽksek kontrast", + "vysokĂ˝ kontrast", + "выŃокий контраŃŃ‚", + "Hoher Kontrast", + }}, + {0x25839844, { // "Congratulations!" + "Gratulacje!", + "Tebrikler!", + "Gratulujeme!", + "Поздравляем!", + "GlĂĽckwunsch!", + }}, + {0x2586ff41, { // "A mouse squeaks at you. It seems that it wants you to go somewhere. That's interesting, what could you find here?\n\nNote: in the part of the Palace that you are exploring during this quest, the distribution of monsters, pressure plates, and items has been changed somewhat, to make it a bit more suitable for less experienced players. The number of monsters does not depend on the number of Hypersian Rugs you have collected, and there are more opening plates.\n\nHowever, even with the normal distribution, it appears that it should be always possible to reach your goal. If you want this challenge, select it from the special game modes menu." + "Myszka piszczy na Ciebie. Wydaje siÄ™, ĹĽe chce CiÄ™ gdzieĹ› zaprowadzić. Ciekawe, co tam moĹĽe być?\n\nW części PaĹ‚acu, ktĂłrÄ… zwiedzasz podczas tej misji, rozkĹ‚ad potworĂłw, pĹ‚yt i przedmiotĂłw zostaĹ‚ trochÄ™ zmieniony, by misja byĹ‚a bardziej odpowiednia dla mniej doĹ›wiadczonych graczy. W szczegĂłlnoĹ›ci, liczba potworĂłw nie zaleĹĽy od liczby zebranych Hiperskich DywanĂłw i jest wiÄ™cej pĹ‚yt otwierajÄ…cych.\n\nJednak nawet przy normalnym rozkĹ‚adzie wydaje siÄ™, ĹĽe zawsze powinno być moĹĽliwe dotarcie do celu. JeĹ›li chcesz takiego wyzwania, wybierz je z menu specjalnych trybĂłw gry.", + "Bir fare sana ciyakladı. Galiba senin bir yere gitmeni istiyor.Gerçekten ilginç, burada ne bulabilirsin ki?\n\nW części PaĹ‚acu, ktĂłrÄ… zwiedzasz podczas tej misji, Not: Sarayın bu görev için hazırlanmış kısmında, canavarların dağılımı, baskı levhaları, ve eĹźyalar daha az deneyimli oyuncular düşünĂĽlerek bir nebze deÄźiĹźtirildi.Canavar sayısı topladığın AĹźkınlı Kilim sayısına baÄźlı deÄźil ve burada daha çok açma levhası var. \n\nYine de, normal dağılımla bile, bu görev her zaman tamamlanabilir. EÄźer o görevi istiyorsan, özel oyun modları menĂĽsĂĽnden onu seçebilirsin.", + "VykvĂ­kla na tebe myška. Zdá se, Ĺľe chce, aby ses nÄ›kam vyda%l0. To je zajĂ­mavĂ©, copak tam asi najdeš?\n\nPoznámka: V části Paláce, kterou budeš procházet pĹ™i plnÄ›nĂ­ tĂ©to mise, je ponÄ›kud upravenĂ© rozdÄ›lenĂ­ netvorĹŻ, desek a pĹ™edmÄ›tĹŻ, aby byla mise o nÄ›co vhodnÄ›jší i pro mĂ©nÄ› zkušenĂ© hráče. PoÄŤet netvorĹŻ nebude záviset na poÄŤtu zĂ­skanĂ˝ch HyperskĂ˝ch kobercĹŻ a bude tu vĂ­ce otvĂ­racĂ­ch desek.\n\nNicmĂ©nÄ›, dosaĹľenĂ­ cĂ­le by mÄ›lo bĂ˝t vĹľdy moĹľnĂ© i pĹ™i normálnĂ­m rozdÄ›lenĂ­. Pokud si chceš tuto obtĂ­ĹľnÄ›jší misi vyzkoušet, vyber ji z menu speciálnĂ­ch hernĂ­ch mĂłdĹŻ.\n\n", + "МыŃка пищит на Đ’Đ°Ń. Как бŃĐ´Ń‚Đľ она хочет, чтобы Đ’Ń‹ поŃли ĐşŃĐ´Đ°-Ń‚Đľ. ĐнтереŃно, что же Ń‚Đ°ĐĽ может быть?\n\nĐ’ той чаŃти Дворца, которая бŃдет Đ´ĐľŃŃ‚Ńпна в КвеŃте, раŃпределение монŃтров, плит и предметов немного изменено, чтобы подходить для не очень опытных игроков. КоличеŃтво монŃтров не завиŃит от количеŃтва Ńобранных Ńокровищ, и открывающих плит здеŃŃŚ больŃе.\n\nНо и при нормальном раŃпределении КвеŃŃ‚ можно пройти. Đ•Ńли Đ’Ń‹ хотите ŃŤŃ‚Đľ Ńделать, выберите Ńпециальный режим в меню.", + "Eine Maus piepst dich an. Es scheint als wolle sie das du dich irgendwo hin begibst. Interessant, was du dort wohl findest?\n\nIn dem Teil des Palastes den du während dieser Quest erkundest wurde die Verteilung von Monstern, Druckplatten und Items etwas geändert um es nicht so erfahrenen Spielern zu vereinfachen. Die Anzahl der Monster basiert nicht auf der Anzahl der Hypersischen Teppiche in deinem Besitzt und es gibt mehr Ă–ffnungsmechanismen.\n\nSelbst mit der normalen Monsterverteilung sollte es allerdings möglich sein immer das Ziel zu erreichen. Dieser Modus kann im MenĂĽ ausgewählt werden.", + }}, + {0x25871fa3, { // "Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines." + "Znane miny moĹĽna oznaczać dotykajÄ…c ich w trybie przeciÄ…gania. Twoi przyjaciele nie bÄ™dÄ… stawać na oznaczonych minach.", +/*MISSING*/ "Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines.", + "PolĂ­ÄŤka, která obsahujĂ­ miny, je moĹľnĂ© oznaÄŤit dotekem v mĂłdu taĹľenĂ­. Vaši spojenci na oznaÄŤenĂ© miny nevstoupĂ­.", + "ĐзвеŃтные мины можно помечать, кликая на них в режиме проŃмотра. Твои Ńоюзники не бŃĐ´ŃŃ‚ на них наŃŃ‚Ńпать.", +/*MISSING*/ "Known mines may be marked by touching while in drag mode. Your allies won't step on marked mines.", + }}, + {0x25903a7a, { // "or 't' to see the top scores" + "lub 't' by zobaczyć najlepsze wyniki", + "'t' ile yĂĽksek puanları gör", + "'t': tabulka nejvyšších skĂłre", + "либо 't', чтобы поŃмотреть резŃльтаты", + "oder 't' fĂĽr die Highscore Liste", + }}, + {0x25bb71f1, { // "This orb allows you to summon monsters. Usually, they are either Elementals or native creatures. While the monsters do not like being summoned, and will attack you once they recover from summoning sickness, such summoning often has its uses." + "Ta sfera pozwala Ci przywoĹ‚ywać potwory. Zwykle sÄ… to Ĺ»ywioĹ‚aki albo stworzenia pochodzÄ…ce z danej krainy. Stwory nie lubiÄ… być przywoĹ‚ywane i bÄ™dÄ… atakować po wyjĹ›ciu ze zmieszania wywoĹ‚anego przywoĹ‚aniem. Ale jednak takie przywoĹ‚ywanie ma pewne zastosowania.", + "Bu kĂĽre canavar çağırabilmeni saÄźlar. Genelde Ă–zĂĽtler veya yerel canavarlar çaÄźrılır.Canavarlar çaÄźrılmaktan hoĹźlanmasalar ve çaÄźrılma hastalıkları biter bitmez sana saldıracak olsalar da, yine de çağırmanın iĹźe yaradığı yerler olabilir.", + "Tato SfĂ©ra ti umoĹľĹuje vyvolávat netvory. Obvykle se jedná buÄŹ o Elementály nebo o domorodĂ© obyvatele kraje, kde ji pouĹľiješ. NetvoĹ™i nejsou vyvolánĂ­m nijak nadšeni a potĂ©, co se zorientujĂ­, na tebe zaĂştoÄŤĂ­, ale i tak má vyvolávánĂ­ ÄŤasto svĂ© vyuĹľitĂ­.", + "Đ­Ń‚Đ° Ńфера позволяет призывать монŃтров. Обычно ŃŤŃ‚Đľ Элементали или родные для земли ŃŃщеŃтва. СŃщеŃтва не нравитŃŃŹ быть вызванным, и как только оно оправитŃŃŹ от вызова, бŃдет Đ’Đ°Ń Đ°Ń‚Đ°ĐşĐľĐ˛Đ°Ń‚ŃŚ.", + "Dieser Orb erlaubt es dir Monster zu beschwören. Diese sind meist Elementare, oder einheimische Monster. Auch wenn Monster nicht gerne beschworen werden und sie dich angreifen sobald die BeschwörungsĂĽbelkeit vorĂĽber ist haben Beschwörungen oft einen Nutzen.", + }}, + {0x2657f9d0, { // "three players" + "trzech graczy", +/*MISSING*/ "three players", + "tĹ™i hráči", + "три игрока", + "drei Spieler", + }}, + {0x2660b640, { // "Ground level is actually an equidistant surface, %1 absolute units below the plane P. Theoretically, this value affects the world -- for example, eagles could fly %2 times faster by flying above the ground level, on the plane P -- but the actual game mechanics are not affected. (Distances reported by the vector graphics editor are not about points on the ground level, but about the matching points on the plane P -- divide them by the factor above to get actual distances." + "Poziom podĹ‚oĹĽa jest w rzeczywistoĹ›ci ekwidystantnÄ… powierzchniÄ… %1 jednostek pod pĹ‚aszczyznÄ… P. Teoretycznie, ta wartość wpĹ‚ywa na Ĺ›wiat -- przykĹ‚adowo, orĹ‚y mogĹ‚yby latać %2 razy szybciej latajÄ…c powyĹĽej poziomu podĹ‚oĹĽa, na wysokoĹ›ci pĹ‚aszczyzny P -- ale nie wpĹ‚ywa to na mechanikÄ™ gry w ĹĽaden sposĂłb. (OdlegĹ‚oĹ›ci wyĹ›wietlane przez edytor grafiki dotyczÄ… odlegĹ‚oĹ›ci miÄ™dzy odpowiednimi punktami na pĹ‚aszczyĹşnie P.", +/*MISSING*/ "Ground level is actually an equidistant surface, %1 absolute units below the plane P. Theoretically, this value affects the world -- for example, eagles could fly %2 times faster by flying above the ground level, on the plane P -- but the actual game mechanics are not affected. (Distances reported by the vector graphics editor are not about points on the ground level, but about the matching points on the plane P -- divide them by the factor above to get actual distances.", + "ĂšroveĹ zemÄ› je ve skuteÄŤnosti ekvidistantnĂ­ plocha, která se nacházĂ­ %1 absolutnĂ­ch jednotek pod rovinou P. Tato hodnota teoreticky ovlivĹuje svÄ›t -- orli by například mohli lĂ©tat %2-krát rychleji, kdyby lĂ©tali nad ĂşrovnĂ­ zemÄ› v rovinÄ› P -- ale hernĂ­ mechaniky jako takovĂ© tĂ­m ovlivnÄ›ny nejsou. (Vzdálenosti v editoru vektorovĂ© grafiky nejsou vzdálenosti bodĹŻ na Ăşrovni zemÄ›, ale odpovĂ­dajĂ­cĂ­ch bodĹŻ v rovinÄ› P -- skuteÄŤnĂ© vzdálenosti zĂ­skáte jejich vydÄ›lenĂ­m výše zmĂ­nÄ›nĂ˝m faktorem.", + "ПоверхноŃŃ‚ŃŚ земли являетŃŃŹ эквидиŃтантой на глŃбине %1 ĐµĐ´Đ¸Đ˝Đ¸Ń†Ń Đ˝Đ¸Đ¶Đµ плоŃкоŃти P. ТеоретичеŃки, ŃŤŃ‚Đľ значение могло бы влиять на мир. Например, орлы могли бы летать в %2 раз быŃтрее, летая над Ńровнем земли, на плоŃкоŃти P -- но механика игры не меняетŃŃŹ. (Đ Đ°ŃŃтояния в редакторе векторной графики отноŃŃŹŃ‚Ńяне Đş точкам на поверхноŃти, Đ° Đş их проекциям на плоŃкоŃŃ‚ŃŚ P.)", +/*MISSING*/ "Ground level is actually an equidistant surface, %1 absolute units below the plane P. Theoretically, this value affects the world -- for example, eagles could fly %2 times faster by flying above the ground level, on the plane P -- but the actual game mechanics are not affected. (Distances reported by the vector graphics editor are not about points on the ground level, but about the matching points on the plane P -- divide them by the factor above to get actual distances.", + }}, + {0x2679cb12, { // "move up-left" + "ruch w gĂłrÄ™-lewo", +/*MISSING*/ "move up-left", + "pohyb doleva nahoru", + "ход вверх-влево", +/*MISSING*/ "move up-left", + }}, + {0x26a6b883, { // "up" + "gĂłra", +/*MISSING*/ "up", + "nahoru", + "вверх", + "hoch", + }}, + {0x26dfda10, { // " (increases treasure spawn)" + " (wiÄ™cej skarbĂłw)", +/*MISSING*/ " (increases treasure spawn)", + " (zvyšuje vĂ˝skyt pokladĹŻ)", + " (Ńвеличивает генерацию Ńокровищ)", +/*MISSING*/ " (increases treasure spawn)", + }}, + {0x272520b2, { // "You feel attuned to gravity, ready to face mountains and dungeons." + "JesteĹ› dostrojon%ya1 do grawitacji, gotow%ya1 na gĂłry i lochy.", +/*MISSING*/ "You feel attuned to gravity, ready to face mountains and dungeons.", + "CĂ­tíš se pĹ™izpĹŻsoben%Ă˝1 gravitaci, pĹ™ipraven%Ă˝1 ÄŤelit horám a Ĺľalářům.", + "Đ’Ń‹ привыкли Đş гравитации и готовы покорять горы и подземелья.", +/*MISSING*/ "You feel attuned to gravity, ready to face mountains and dungeons.", + }}, + {0x27440e71, { // "Cannot cast illusion on an item!" + "Nie moĹĽesz rzucić iluzji na przedmiot!", + "Bir eĹźyanın ĂĽzerinde ilĂĽzyon oluĹźturamazsın!", + "NemĹŻĹľeš seslat iluzi na pĹ™edmÄ›t!", + "Нельзя Ńоздать иллюзию на предмете!", + "Du kannst Illusion nicht auf Gegenständen erschaffen!", + }}, + {0x276480b2, { // "You cannot move through %the1!" + "Nie moĹĽesz przejść przez %a1!", + "%1 hĂĽcresinden geçemezsin!", + "NemĹŻĹľeš pĹ™ekonat %a1!", + "Đ’Ń‹ не можете пройти через %a1!", + "Du kannst nicht durch %den1 %a1 gehen!", + }}, + {0x27bfdd2a, { // "zoom in" + "zbliĹĽenie", +/*MISSING*/ "zoom in", + "pĹ™iblĂ­ĹľenĂ­", + "приблизить", + "hereinzoomen", + }}, + {0x2826d66d, { // "Tiling and Tactics" + "Posadzka i taktyka", +/*MISSING*/ "Tiling and Tactics", + "HyperbolickĂ© dÄ›lenĂ­ a taktika", + "Геометрия и тактика", +/*MISSING*/ "Tiling and Tactics", + }}, + {0x2839a534, { // "include history" + "uwzglÄ™dnij historiÄ™", +/*MISSING*/ "include history", + "vÄŤetnÄ› historie", + "включить иŃторию", + "inklusive Vergangenheit", + }}, + {0x28698d2f, { // "For some reason... cannot attack!" + "Z jakiegoĹ› powodu... nie moĹĽesz atakować!", +/*MISSING*/ "For some reason... cannot attack!", + "Z nÄ›jakĂ©ho dĹŻvodu... nemĹŻĹľeš ĂştoÄŤit!", + "По какой-Ń‚Đľ причине... невозможно атаковать!", +/*MISSING*/ "For some reason... cannot attack!", + }}, + {0x28af7500, { // "Hyperbolic geometry yields much more interesting periodic patterns than Euclidean." + "W geometrii hiperbolicznej sÄ… duĹĽo bardziej ciekawe regularne wzory niĹĽ w euklidesowej.", +/*MISSING*/ "Hyperbolic geometry yields much more interesting periodic patterns than Euclidean.", + "V hyperbolickĂ© geometrii lze najĂ­t mnohem zajĂ­mavÄ›jší periodickĂ© vzory neĹľ v eukleidovskĂ©.", + "ГиперболичеŃкая геометрия Đ´Đ°Ń‘Ń‚ больŃе интереŃных периодичеŃких Ńаблонов, чем евклидова.", +/*MISSING*/ "Hyperbolic geometry yields much more interesting periodic patterns than Euclidean.", + }}, + {0x28bfdd84, { // "You are now a tortoise heroine!" + "JesteĹ› żółwiÄ… bohaterkÄ…!", +/*MISSING*/ "You are now a tortoise heroine!", + "NynĂ­ jsi ĹľelvĂ­ hrdinka!", + "Теперь вы -- черепаŃŃŚŃŹ героиня!", + "Du bist jetzt ein Held der Schildkröten!", + }}, + {0x28d62052, { // "%1 turns (%2)" + "kolejek: %1 (%2)", + "tur sayısı: %1 (%2)", + "poÄŤet kol: %1 (%2)", + "ходов: %1 (%2)", + "%1 ZĂĽge (%2)", + }}, + {0x2908ed86, { // "Cannot cast illusion here!" + "Nie moĹĽesz rzucić iluzji tutaj!", + "Burada ilĂĽzyon oluĹźturamazsın!", + "Sem nemĹŻĹľeš seslat iluzi!", + "Нельзя Ńоздать иллюзию здеŃŃŚ!", + "Du kannst hier keine Illusion erschaffen!", + }}, + {0x291ece52, { // "Wine grown under hyperbolic sun would be extremely prized in your home location." + "Wino uprawiane pod hiperbolicznym sĹ‚oĹ„cem, byĹ‚oby bardzo cenne w Twoim Ĺ›wiecie.", + "Hiperbolik gĂĽneĹźin altında oluĹźan Ĺźarap geldiÄźin yerde epey deÄźerli olsa gerek.", + "VĂ­no vypÄ›stovanĂ© pod hyperbolickĂ˝m sluncem by mÄ›lo ve tvĂ© domovinÄ› velkou cenu.", + "Вино, ŃозревŃее под гиперболичеŃким Ńолнцем, очень ценитŃŃŹ на Đ’Đ°Ńей родине.", + "Wein, der unter hyperbolischer Sonne wächst, wĂĽrde in deiner Heimat ziemlich viel wert sein.", + }}, + {0x291fabc9, { // " Hell: %1/9" + " PiekĹ‚o: %1/9", + " Cehennem: %1/9", + " Peklo: %1/9", + " ĐĐ´: %1/9", + " Hölle: %1/9", + }}, + {0x292a6966, { // "HyperRogue for Android" + "HyperRogue dla Android", + "Android için HyperRogue", + "HyperRogue pro Android", + "HyperRogue для Android", + "HyperRogue fĂĽr Android", + }}, + {0x293fb452, { // "start playing in the shmup mode" + "zacznij grÄ™ w trybie strzelanki", + "SEMUP modunda oyun baĹźlat", + "zaÄŤni hrát v mĂłdu stříleÄŤky", + "начать Đ¸ĐłŃ€Ń Đ˛ режиме Ńтрельбы", + "shmup Modus starten", + }}, + {0x29475e6e, { // "Some monsters have long tongues, which allow them to attack enemies in nearby cells." + "NiektĂłre potwory majÄ… dĹ‚ugie jÄ™zyki, dziÄ™ki ktĂłrym mogÄ… atakować sÄ…siednie pola.", + "Bazı canavarlar uzun dillere sahip, böylece yakındaki hĂĽcrelere saldırabiliyorlar.", + "NÄ›kteří netvoĹ™i majĂ­ dlouhĂ© jazyky, kterĂ© jim umoĹľĹujĂ­ ĂştoÄŤit na sousednĂ­ pole.", + "Некоторые ŃŃщеŃтва имеют длинные языки, которые позволяют им атаковать врагов на ŃĐľŃедних клетках.", + "Manche Monster haben lange Zungen, mit denen sie Feinde in nahen Zellen angreifen können.", + }}, + {0x297b0403, { // "Shift-click a location to teleport there." + "Shift-kliknij pole, by tam siÄ™ teleportować.", +/*MISSING*/ "Shift-click a location to teleport there.", + "Shift-klikni na polĂ­ÄŤko, kam se chceš teleportovat.", + "Shift-клик на поле, чтобы телепортироватьŃŃŹ Ń‚ŃĐ´Đ°.", +/*MISSING*/ "Shift-click a location to teleport there.", + }}, + {0x29ef900a, { // "Commanded %the1!" + "%1 dosta%Ĺ‚1 rozkaz!", +/*MISSING*/ "Commanded %the1!", + "%1 dosta%l1 rozkaz!", + "Прикажите %1!", +/*MISSING*/ "Commanded %the1!", + }}, + {0x2a0c0556, { // "plain/3D" + "prosty/3D", +/*MISSING*/ "plain/3D", + "obyèejnĂ©/3D", + "проŃтой/3D", +/*MISSING*/ "plain/3D", + }}, + {0x2a0d1a68, { // "You need to find the right Key to unlock this Orb of Yendor!" + "Potrzebujesz prawidĹ‚owego Klucza, by otworzyć SferÄ™ Yendoru!", + "Bu Yendorun KĂĽresinin kilidini açmak için bir anahtara ihtiyacın var!", + "Abys moh%l0 odemknout tuto Yendorskou sfĂ©ru, musíš najĂ­t správnĂ˝ klĂ­ÄŤ!", + "Đ’Đ°ĐĽ Đ˝Ńжен ключ, чтобы открыть ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°!", + "Du musst den richtigen SchlĂĽssel finden, um den Orb von Yendor zu öffnen!", + }}, + {0x2a16fdee, { // "Reenter HyperRogue to apply this setting" + "WyjdĹş i wróć do HyperRogue, by zastosować", +/*MISSING*/ "Reenter HyperRogue to apply this setting", + "Toto nastavenĂ­ se aplikuje po návratu do HyperRogue", + "Перезайдите в HyperRogue, чтобы применить эти наŃтройки", +/*MISSING*/ "Reenter HyperRogue to apply this setting", + }}, + {0x2a3a4971, { // "gender" + "pĹ‚eć", + "cinsiyet", + "pohlavĂ­", + "пол", + "Geschlecht", + }}, + {0x2a4bea57, { // "wall display mode" + "tryb pokazywania Ĺ›cian", + "duvar görĂĽnĂĽmĂĽ", + "mĂłd zobrazovánĂ­ zdĂ­", + "режим показа Ńтен", + "Anzeigemodus (Wände)", + }}, + {0x2a587bc7, { // "you have cheated %1 times" + "liczba oszustw: %1", + "Ĺźimdiye kadar %1 kez hile yaptın.", + "poÄŤet cheatĹŻ: %1", + "количеŃтво читов: %1", + "Du hast %1 mal Cheats benutzt", + }}, + {0x2a8ecaf0, { // "This white dog is able to run all the time. It is the only creature able to survive and breed in the Land of Eternal Motion." + "Ten biaĹ‚y piesek jest w stanie biegać przez caĹ‚e swoje ĹĽycie. Jest to jedyne stworzenie, ktĂłre jest w stanie przeĹĽyć w Krainie Wiecznego Ruchu.", + "Bu beyaz köpek hiç durmadan koĹźabilir. Sonsuz hareket diyarında yaĹźayabilen ve çoÄźalabilen tek canlıdır.", + "Tento bĂ­lĂ˝ pes dokáže neustále běžet. Je to jedinĂ˝ tvor, kterĂ˝ dokáže pĹ™ežít a rozmnoĹľovat se v Kraji věčnĂ©ho pohybu.", + "Đ­Ń‚Đ° белая Ńобака ŃпоŃобна вŃŃ‘ время бежать. Đ­Ń‚Đľ единŃтвенное ŃŃщеŃтво, ŃпоŃобное жить и размножатьŃŃŹ в Земле вечного движения.", + "Dieser weiĂźe Hund kann unablässig rennen. Er ist die einzige Kreatur, die im Land der ewigen Bewegung ĂĽberleben und sich vermehren kann.", + }}, + {0x2b02a473, { // "Kills: " + "Zabicia: ", + "LeĹźler: ", + "ZabitĂ˝ch netvorĹŻ: ", + "УбийŃтва: ", + "Kills: ", + }}, + {0x2b0733af, { // "first joystick: execute movement threshold" + "dĹĽojstik 1: prĂłg wykonania ruchu", + "birinci oyun kolu: hareket algılama eĹźiÄźi", + "joystick 1: práh provedenĂ­ pohybu", + "джойŃтик 1: порог выполнения движения", + "Joystick 1: AusgefĂĽhrte Bewegungsgrenze", + }}, + {0x2b4a42ed, { // "scale factor" + "współczynnik skali", + "ölçek faktörĂĽ", + "měřítko", + "ĐĽĐ°ŃŃтаб", + "Skalierungsfaktor", + }}, + {0x2b7df8b3, { // "Saved the SVG shot to %1 (sightrange %2)" + "Zapisano zrzut SVG do %1 (zasiÄ™g %2)", +/*MISSING*/ "Saved the SVG shot to %1 (sightrange %2)", + "SnĂ­mek SVG uloĹľen do %1 (viditelnost %2)", + "SVG Ńнимок Ńохранён в %1 (радиŃŃ %2)", +/*MISSING*/ "Saved the SVG shot to %1 (sightrange %2)", + }}, + {0x2b9a4732, { // "%The1 stabs %the2." + "%1 dĹşgn%Ä…Ĺ‚1 %a2.", + "%1 %2 bıçakladı.", + "%1 probod%l1 %a2.", + "%1 заколол%E1 %a2.", + "%Der1 %1 ersticht %den2 %a2.", + }}, + {0x2baa0061, { // "Unavailable in the Chaos mode.\n" + "NiedostÄ™pne w trybie Chaosu.\n", +/*MISSING*/ "Unavailable in the Chaos mode.\n", + "NedostupnĂ© v chaotickĂ©m mĂłdu.\n", + "НедоŃŃ‚Ńпно в режиме ĐĄĐ°ĐľŃĐ°.\n", + "Nicht im Chaos-Modus verfĂĽgbar.\n", + }}, + {0x2bce410a, { // "press Space or Home to center on the PC" + "naciĹ›nij Space lub Home, by wycentrować na postaci", + "Space veya Home'a basarak PC'ye odakla.", + "na PC mĹŻĹľeš vycentrovat obraz stisknutĂ­m mezernĂ­ku nebo klávesy Home", + "Нажмите Пробел или Home, чтобы отцентрировать экран на перŃонаже.", + "DrĂĽcke LEER oder Pos1 um den Spieler zu fokussieren", + }}, + {0x2bd13413, { // "Hyperstone Quest completed!" + "Misja alternatywna zakoĹ„czona!", + "AĹźkıntaĹź görevi tamamlandı.", + "HyperkamovĂ˝ Ăşkol splnÄ›n!", + "МиŃŃия Гиперкамня закончена!", + "Hyperstein-Herausforderung abgeschlossen!", + }}, + {0x2bf52a07, { // "You feel that %the1 slowly become%s1 dangerous..." + "Masz wraĹĽenie, ĹĽe %P1 powoli staje siÄ™ niebezpieczn%ya1...", + "%1 yavaşça daha tehlikeli bir hâl alıyor...", + "Máš pocit, Ĺľe %1 pomalu zaÄŤĂ­ná bĂ˝t nebezpeÄŤn%Ă˝...", + "Đ’Ń‹ чŃвŃтвŃете, что %1 ŃтановитŃŃŹ вŃŃ‘ опаŃнее...", + "Du spĂĽrst wie %der1 %1 langsam gefährlich wird...", + }}, + {0x2c6dc4f3, { // "You leave %the1." + "Zostawiasz %a1.", +/*MISSING*/ "You leave %the1.", + "PoloĹľi%l0 jsi %a1.", + "Đ’Ń‹ покинŃли %a1.", +/*MISSING*/ "You leave %the1.", + }}, + {0x2c6ef3ab, { // "These fairies would rather burn the forest, than let you get some Fern Flowers. The forest is infinite, after all...\n\nFire Fairies transform into fires when they die." + "WiĹ‚y wolÄ… spalić las, niĹĽ pozwolić Ci zdobyć Kwiaty Paproci. W koĹ„cu las jest nieskoĹ„czony...\n\nWiĹ‚y zamieniajÄ… siÄ™ w ogieĹ„, gdy ginÄ….", + "Bu periler ormanı yakma pahasına, kimsenin EÄźreltiotu Çiçeklerine dokunmasına izin vermezler.Sonuçta orman sonsuza kadar uzanıyor...\n\nAteĹź perileri öldĂĽklerinde ateĹźe dönüşürler.", + "Tito mužíčkovĂ© by radÄ›ji spálili celĂ˝ hvozd, neĹľ aby tÄ› nechali sebrat nÄ›jakĂ© KapradinovĂ© kvÄ›ty. KoneÄŤnÄ›, hvozd je pĹ™ece nekoneÄŤnĂ˝...\n\nOhnivĂ­ mužíčkovĂ© se promÄ›nĂ­ v oheĹ, kdyĹľ zemĹ™ou.", + "Эти феи Ńкорее ŃожгŃŃ‚ леŃ, чем позволят Đ’Đ°ĐĽ Ńобрать цветок папоротника. Đ’ конце концов, Đ»ĐµŃ Đ±ĐµŃконечный...\n\nОни превращаютŃŃŹ в огонь, когда Ńмирают.", + "Diese Feen wĂĽrden eher den ganzen Wald niederbrennen als dich FarnblĂĽten sammeln zu lassen. Der Wald ist schlieĂźlich grenzenlos...\n\nWenn Feuerfeen sterben, werden sie selbst zu Feuer.", + }}, + {0x2c99ab74, { // "Press F1 or right-shift-click things for help." + "F1 lub klikaj z prawym shiftem na elementach gry, by uzyskać pomoc.", +/*MISSING*/ "Press F1 or right-shift-click things for help.", + "NápovÄ›du mĹŻĹľeš zobrazit stiskem F1 nebo kliknutĂ­m na vÄ›ci s pravĂ˝m shiftem.", + "FНажмите F1 или иŃпользŃйте правŃŃŽ ĐşĐ˝ĐľĐżĐşŃ ĐĽŃ‹Ńи Ń Shift'ом, чтобы открыть помощь..", +/*MISSING*/ "Press F1 or right-shift-click things for help.", + }}, + {0x2cdaf58c, { // "Fire is extinguished!" + "OgieĹ„ zgasĹ‚!", +/*MISSING*/ "Fire is extinguished!", + "OheĹ je uhašen!", + "Огонь погаŃ!", +/*MISSING*/ "Fire is extinguished!", + }}, + {0x2d4b9753, { // "\"I like collecting ambers at the beach.\"" + "\"LubiÄ™ zbierać bursztyny na plaĹĽy.\"", + "\"Sahilde Kehribarlar toplamayı seviyorum.\"", + "\"Rád sbĂ­rám Jantar na pláži.\"", + "\"Люблю Ńобирать янтарь на берегŃ.\"", + "\"Ich sammle gerne Bernstein am Strand.\"", + }}, + {0x2d55026b, { // "saved in the Euclidean mode!" + "zapamiÄ™tywane w tym trybie!", + "modunda kaydedilmeyecek!", + "neukládajĂ­ skĂłre a achievementy!", + "ŃохраняютŃŃŹ в евклидовом режиме!", + "Punkte und Errungenschaften nicht gespeichert!", + }}, + {0x2d5e09d9, { // "Your total treasure has been recorded in the Google Leaderboards." + "TwĂłj wynik zostaĹ‚ zapisany w rankingach Google.", + "Toplam hazinen Google Listelerine kaydedildi.", + "TvĹŻj celkovĂ˝ poklad byl zaznamenán na Ĺľebříčky na Googleu.", + "Đ’Đ°Ń Ń€ĐµĐ·Ńльтат запиŃĐ°Đ˝ в рейтинг Google.", + "Deine Gesamtschätze wurden in die Google Leaderboards aufgenommen.", + }}, + {0x2d6d45bb, { // "%The1 scares %the2 a bit!" + "%1 troszkÄ™ przestraszy%Ĺ‚1 %a2!", +/*MISSING*/ "%The1 scares %the2 a bit!", + "%1 trochu vyleka%l1 %a2!", + "%1 немного ĐżŃгает %a2!", + "%Der1 %1 ängstigt %den2 %a2 ein wenig!", + }}, + {0x2d72701d, { // "Rogues will never make moves which result in their immediate death. Even when cornered, they are able to instantly teleport back to their home world at any moment, taking the treasures forever... but at least they will not steal anything further!\n\n" + "Cwaniacy nigdy nie robiÄ… ruchĂłw, po ktĂłrych by zostali od razu zabici. Nawet gdy siÄ™ ich otoczy, sÄ… zdolni natychmiast teleportować siÄ™ i wrĂłcić do Ĺ›wiata, skÄ…d pochodzÄ…, zabierajÄ…c skarby na zawsze... ale przynajmniej nie ukradnÄ… juĹĽ nic wiÄ™cej!\n\n", +/*MISSING*/ "Rogues will never make moves which result in their immediate death. Even when cornered, they are able to instantly teleport back to their home world at any moment, taking the treasures forever... but at least they will not steal anything further!\n\n", + "Chytráci nikdy neudÄ›lajĂ­ tah, kterĂ˝ by vedl k jejich okamĹľitĂ© smrti. I kdyĹľ jsou zahnanĂ­ do kouta, dokážou se kdykoli okamĹľitÄ› teleportovat do svĂ©ho domovskĂ©ho svÄ›ta a navÄ›ky s sebou odnĂ©st poklady... ale aspoĹ uĹľ nebudou krást nic dalšího!\n\n", + "Разбойник никогда не Ńделает ход, ведŃщий Đş его Ńмерти. Когда они окрŃжены, они могŃŃ‚ мгновенно телепортироватьŃŃŹ обратно в их родной мир, забирая вŃе Ńокровища... но хотя бы не ŃкрадŃŃ‚ ничего в бŃĐ´Ńщем!\n\n", +/*MISSING*/ "Rogues will never make moves which result in their immediate death. Even when cornered, they are able to instantly teleport back to their home world at any moment, taking the treasures forever... but at least they will not steal anything further!\n\n", + }}, + {0x2d751c51, { // "underlying tree" + "drzewo bazowe", +/*MISSING*/ "underlying tree", + "stromová základnĂ­ struktura", + "ĐľŃновное дерево", +/*MISSING*/ "underlying tree", + }}, + {0x2d7c2196, { // "create the model" + "twĂłrz model", + "modeli ĂĽret", + "vytvoĹ™ model", + "Ńоздать модель", + "Erzeuge das Modell", + }}, + {0x2db034b4, { // "first joystick: movement threshold" + "dĹĽojstik 1: prĂłg ruchu", + "birinci oyun kolu: hareket eĹźiÄźi", + "joystick 1: práh pohybu", + "джойŃтик 1: порог движения", + "Joystick 1: Bewegungsgrenze", + }}, + {0x2dbddb1a, { // "game over screen" + "ekran koĹ„ca gry", + "oyun bitiĹź ekranı", + "obrazovka konce hry", + "экран конца игры", + "Game Over Bildschirm", + }}, + {0x2e48d491, { // "Orbs of Safety always appear here, and may be used to escape.\n" + "Sfery BezpieczeĹ„stwa zawsze moĹĽna tu znaleźć, by stÄ…d uciec.", +/*MISSING*/ "Orbs of Safety always appear here, and may be used to escape.\n", + "SfĂ©ry BezpeÄŤĂ­ se tu dajĂ­ vĹľdy najĂ­t a mĹŻĹľeš je použít k Ăşniku.", + "Сфера безопаŃноŃти вŃегда появляетŃŃŹ здеŃŃŚ, и её можно иŃпользовать, чтобы Ńйти.", +/*MISSING*/ "Orbs of Safety always appear here, and may be used to escape.\n", + }}, + {0x2e755a80, { // "Collect four different Elemental Shards!" + "ZnajdĹş Okruch kaĹĽdego ĹĽywioĹ‚u!", +/*MISSING*/ "Collect four different Elemental Shards!", + "ZĂ­skej ÄŤtyĹ™i rĹŻznĂ© ElementálnĂ­ Ăşlomky!", + "Собери ĐžŃколки вŃех Ńтихий!", + "Sammle vier verschiedene Elementscherben!", + }}, + {0x2e7b202e, { // "two players" + "dwĂłch graczy", + "iki kiĹźilik", + "dva hráči", + "два игрока", + "Zwei Spieler", + }}, + {0x2ea0ba09, { // "No description yet." + "Brak opisu.", + "HenĂĽz bir açıklama yok.", + "ZatĂ­m bez popisu.", + "Нет опиŃания.", + "Noch keine Beschreibung...", + }}, + {0x2ea8434f, { // "F8 = SVG shot" + "F8 = zrzut SVG", +/*MISSING*/ "F8 = SVG shot", + "F8 = snĂ­mek SVG", + "F8 = Ńнимок SVG", +/*MISSING*/ "F8 = SVG shot", + }}, + {0x2ee79c64, { // "Enable cheat mode or GAME OVER to use this" + "DostÄ™pne tylko po koĹ„cu gry albo w trybie oszusta", +/*MISSING*/ "Enable cheat mode or GAME OVER to use this", + "DostupnĂ© pouze v cheat mĂłdu nebo po skonÄŤenĂ­ hry", + "ДоŃŃ‚Ńпно только в конце игры и в режиме обманщика", + "Aktivere den Cheat-Modus oder GAME OVER um diese Funktion zu nutzen", + }}, + {0x2f160195, { // "So better just to concentrate on collecting treasure. Beware the traps, and the guards, who are hard to kill!" + "TakĹĽe lepiej siÄ™ skoncentrować na szukaniu skarbĂłw. Uwaga na puĹ‚apki i trudnych do pokonania straĹĽnikĂłw!", + "Yani sadece hazineleri toplamaya odaklansan iyi olur. Tuzaklara dikkat! Ă–ldĂĽrmesi pek zor olan muhafızlara da dikkat et!", + "TakĹľe se radÄ›ji soustĹ™eÄŹ jen na sbĂ­ránĂ­ pokladĹŻ. Pozor na pasti a na stráže -- je těžkĂ© je zabĂ­t!", + "Đ›ŃчŃе ŃконцентрироватьŃŃŹ на Ńборе Ńокровищ. ĐžŃтерегайтеŃŃŚ ловŃŃек и Ńтражников, которых Ńложно Ńбить!", + "Konzentriere dich besser darauf Schätze zu sammeln. Und achte auf Fallen, sowie Wachen die hart zu töten sind!", + }}, + {0x2f44452a, { // "You kill %the1." + "Zabi%Ĺ‚eĹ›0 %a1.", + "%a1 öldĂĽrdĂĽn.", + "Zabi%l0 jsi %a1.", + "Đ’Ń‹ Ńбили %a1.", + "Du tötest %den1 %a1.", + }}, + {0x2f86a320, { // "You have to run away from the water!" + "Musisz uciec z wody!", + "Sudan kaçmak zorundasın!", + "Musíš utĂ©ct pĹ™ed vodou!", + "Убегайте из воды!", + "Du musst vor dem Wasser fliehen!", + }}, + {0x2fdfb445, { // "Find a %1 in %the2." + "ZnajdĹş %a1 %abl2.", +/*MISSING*/ "Find a %1 in %the2.", + "Najdi %a1 %abl2.", + "Найди %a1 %abl2.", + "Finde eine %a1 %abl2.", + }}, + {0x2feee764, { // "design the net" + "projektuj siatkÄ™", + "ağı tasarla", + "vytvoĹ™ sĂ­ĹĄ", + "разработать Ńеть", + "entwirf das Netz", + }}, + {0x2ff6c863, { // "One wrong move and it is game over!" + "Jeden faĹ‚szywy ruch i koniec gry!", + "Tek bir yanlış hamle ve oyun biter!", + "JedinĂ˝ špatnĂ˝ tah a hra konÄŤĂ­!", + "Один неверный ŃĐ°Đł, и игра закончитŃŃŹ!", + "Eine falsche Bewegung kostet dich den Kopf!", + }}, + {0x2ffa6b17, { // "ON" + "WĹ", + "AÇIK", + "ZAP", + "ВКЛ", + "EIN", + }}, + {0x3038e1b0, { // "\"That should teach you to take me seriously!\"" + "\"Traktuj mnie powaĹĽnie! Niech to bÄ™dzie dla Ciebie nauczkÄ…!\"", + "\"Bu sana beni ciddiye alman gerektiÄźini öğretir!\"", + "\"To by tÄ› mÄ›lo nauÄŤit brát mÄ› vážnÄ›!\"", + "\"ОтноŃиŃŃŚ ко мне Ńерьёзно! Đ‘Ńдет тебе наŃка!\"", + "\"Das sollte dir beweisen mich Ernst zu nehmen!\"", + }}, + {0x308baacb, { // "turn count = %1 last exploration = %2 ghost timer = %3" + "kolejek = %1 eksploracja = %2 czaso-duchy = %3", +/*MISSING*/ "turn count = %1 last exploration = %2 ghost timer = %3", + "poÄŤet kol = %1 poslednĂ­ zkoumánĂ­ = %2 ÄŤasovaÄŤ duchĹŻ = %3", + "количеŃтво ходов = %1, поŃледнее иŃŃледование = %2, отŃчёт времени призраков = %3", + "Zähler = %1 letzte Erkundung = %2 Geister-Zähler = %3", + }}, + {0x309889bc, { // "camera rotation in ball model" + "obróć kamerÄ™ w modelu kuli", +/*MISSING*/ "camera rotation in ball model", + "rotace kamery v modelu koule", + "поворот камеры в модели Ńферы", +/*MISSING*/ "camera rotation in ball model", + }}, + {0x30ade9f9, { // "Prince" + "KsiÄ…ĹĽÄ™", +/*MISSING*/ "Prince", + "Princ", + "Принц", + "Prinz", + }}, + {0x30ae5da6, { // "Some rubble." + "Gruzy.", + "DökĂĽntĂĽler.", + "Sutiny.", + "Щебень.", + "TrĂĽmmer.", + }}, + {0x31276816, { // "Tutorial" + "PodrÄ™cznik", +/*MISSING*/ "Tutorial", + "Tutoriál", + "Đ ŃководŃтво", +/*MISSING*/ "Tutorial", + }}, + {0x3139bed2, { // "triangle grid: not rings" + "trĂłjkÄ…tna siatka: nie pierĹ›cienie", +/*MISSING*/ "triangle grid: not rings", + "trojĂşhelnĂ­ková mřížka: bez prstencĹŻ", + "треŃгольная Ńетка: нет колец", +/*MISSING*/ "triangle grid: not rings", + }}, + {0x3187663a, { // "by number" + "liczba", +/*MISSING*/ "by number", + "podle poÄŤtu", + "по количеŃтвŃ", +/*MISSING*/ "by number", + }}, + {0x31ba02b2, { // "You can press 'g' or click them in the list to drop a Dead Orb." + "WciĹ›nij 'g' lub kliknij Martwe Sfery na liĹ›cie, by je porzucić.", + "'g' ye basarak veya listede tıklayarak bir Ă–lĂĽ KĂĽreyi bırakabilirsin.", + "Mrtvou svĂ©ru mĹŻĹľeš poloĹľit stiskem klávesy 'g' nebo tĂ­m, Ĺľe na ni klikneš v seznamu.", + "Đ’Ń‹ можете нажать 'g' либо кликнŃŃ‚ŃŚ на ŃŃ„ĐµŃ€Ń Đ˛ ŃпиŃке, чтобы броŃить её.", + "Du kannst 'g' drĂĽcken oder sie in der Liste anklicken um tote Orbs abzulegen.", + }}, + {0x31d0e1f7, { // "MENU" + "MENU", + "MENĂś", + "MENU", + "МЕНЮ", + "MENĂś", + }}, + {0x31eb9ca2, { // "Look for the Orbs of Yendor in Hell or in the Crossroads!" + "Szukaj Sfer Yendoru w Piekle albo na SkrzyĹĽowaniu!", + "Yendorun KĂĽreleri için Cehennemi yahut Arayolları ara!", + "Hledej YendorskĂ© sfĂ©ry v Pekle nebo na KĹ™iĹľovatce!", + "Đщите Ńферы Йендора в ĐĐ´Ń Đ¸ на ПерекрёŃтке!", + "Such die Orbs von Yendor in der Hölle oder auf den Kreuzungen!", + }}, + {0x322e00a2, { // "x: %1" + "x: %1", + "x: %1", + "x: %1", + "x: %1", + "x: %1", + }}, + {0x32437fa4, { // "six players" + "szeĹ›ciu graczy", +/*MISSING*/ "six players", + "šest hráčů", + "ŃеŃŃ‚ŃŚ игроков", + "sechs Spieler", + }}, + {0x328fdd3c, { // "DRAG" + "DRAG", + "SRKLE", + "TAĹ˝ENĂŤ", + "DRAG", + "ZIEH", + }}, + {0x32949f8b, { // "Select the land ---" + "Wybierz krainÄ™ ---", + "Diyar seç ---", + "Vyber si kraj ---", + "Выбрать землю ---", + "Wähle das Land ---", + }}, + {0x32ae3e1f, { // "Just a nasty shark." + "ZwykĹ‚y groĹşny rekin.", + "Sadece vahĹźi bir köpekbalığı.", + "ObyÄŤejnĂ˝, nebezpeÄŤnĂ˝ Ĺľralok.", + "ПроŃŃ‚Đľ противная Đ°ĐşŃла.", + "Ist bloĂź ein fieser Hai.", + }}, + {0x32b6d522, { // "Aquatic region -- accessible only from coastal regions and other aquatic regions.\n" + "Kraina morska -- dostÄ™pna jedynie zs krain przybrzeĹĽnych i morskic.\n", +/*MISSING*/ "Aquatic region -- accessible only from coastal regions and other aquatic regions.\n", + "Kraina morska -- dostÄ™pna jedynie zs krain przybrzeĹĽnych i morskic.\n", + "МорŃкой регион -- Đ´ĐľŃŃ‚Ńпен только из прибрежных и Đ´Ń€Ńгих морŃких регионов.\n", +/*MISSING*/ "Aquatic region -- accessible only from coastal regions and other aquatic regions.\n", + }}, + {0x32bb448d, { // "The PoincarĂ© disk model is a model of a hyperbolic *plane* -- you might wonder why are the walls rendered in 3D then.\n\nHyperRogue actually assumes that the floor level is an equidistant surface in a three-dimensional hyperbolic world, and the camera is placed above the plane that the surface is equidistant to (which boils down to showing the floor level in PoincarĂ© disk model).\n\nThis is shown on the next slide, in the PoincarĂ© ball model, which is the 3D analog of the PoincarĂ© disk model." + "Model dysku PoincarĂ© to model *pĹ‚aszczyny* hiperbolicznej -- być moĹĽe siÄ™ zastanawiasz, jak w takim razie rozumieć Ĺ›ciany w 3D.\n\nHyperRogue zakĹ‚ada, ĹĽe powierzchnia podĹ‚ogi to powierzchnia ekswidystantna w trĂłjwymiarowym hiperbolicznym Ĺ›wiecie, a kamera znajduje siÄ™ nad powierzchniÄ…, do ktĂłrej podĹ‚oga jest ekwidystantna -- co powoduje, ĹĽe podĹ‚oga wyglÄ…da dokĹ‚adnie jak w modelu PoincarĂ©.\n\nPokazuje to kolejny slajd, w modelu kuli, trĂłjwymiarowym odpowiedniku modelu dysku.", +/*MISSING*/ "The PoincarĂ© disk model is a model of a hyperbolic *plane* -- you might wonder why are the walls rendered in 3D then.\n\nHyperRogue actually assumes that the floor level is an equidistant surface in a three-dimensional hyperbolic world, and the camera is placed above the plane that the surface is equidistant to (which boils down to showing the floor level in PoincarĂ© disk model).\n\nThis is shown on the next slide, in the PoincarĂ© ball model, which is the 3D analog of the PoincarĂ© disk model.", + "PoincarĂ©ho disk je model hyperbolickĂ© *roviny* -- moĹľná si tedy říkáš, proÄŤ se zdi zobrazujĂ­ ve 3D.\n\nHyperRogue ve skuteÄŤnosti pĹ™edpokládá, Ĺľe podlaha je ekvidistantnĂ­ plocha ve trojrozmÄ›rnĂ©m hyperbolickĂ©m svÄ›tÄ›, a Ĺľe kamera se nacházĂ­ nad rovinou, ke kterĂ© je tato plocha ekvidistantnĂ­ (coĹľ ve vĂ˝sledku znamená, Ĺľe se podlaha zobrazuje jako PoincarĂ©ho disk).\n\nTo mĹŻĹľeš vidÄ›t v následujĂ­cĂ­m snĂ­mku, kterĂ˝ ukazuje PoincarĂ©ho kouli -- 3D analog PoincarĂ©ho disku.", + "Модель диŃка ĐźŃанкаре -- ŃŤŃ‚Đľ модель гиперболичеŃкой *плоŃкоŃти*, и Ń‚Ń‹ мог Đ·Đ°Đ´ŃĐĽĐ°Ń‚ŃŚŃŃŹ, ĐżĐľŃ‡ĐµĐĽŃ Đ¶Đµ Ńтены отображаютŃŃŹ в 3D.\n\nHyperRogue на Ńамом деле предполагает, что Ńровень пола -- ŃŤŃ‚Đľ эквидиŃтанта в трёхмерном гиперболичеŃком мире, Đ° камера находитŃŃŹ выŃе плоŃкоŃти, эквидиŃтантой Đş которой являетŃŃŹ поверхноŃŃ‚ŃŚ -- таким образом пол выглядит в точноŃти как в модели ĐźŃанкаре.\n\nĐ­Ń‚Đľ показано на ŃледŃющем Ńлайде, в модели Ńферы, трёхмерном аналоге модели диŃка.", +/*MISSING*/ "The PoincarĂ© disk model is a model of a hyperbolic *plane* -- you might wonder why are the walls rendered in 3D then.\n\nHyperRogue actually assumes that the floor level is an equidistant surface in a three-dimensional hyperbolic world, and the camera is placed above the plane that the surface is equidistant to (which boils down to showing the floor level in PoincarĂ© disk model).\n\nThis is shown on the next slide, in the PoincarĂ© ball model, which is the 3D analog of the PoincarĂ© disk model.", + }}, + {0x32c11e4f, { // "OFF" + "WYĹ", + "KAPALI", + "VYP", + "ВЫКЛ", + "AUS", + }}, + {0x33150354, { // "You wonder what does it mean?" + "Co to moĹĽe znaczyć?", + "Bunun ne demek olduÄźunu merak ettin", + "Co to mĹŻĹľe znamenat?", + "Đ’Ń‹ ŃпроŃите, Đ° что ŃŤŃ‚Đľ значит?", + "Du wunderst dich, was es bedeutet.", + }}, + {0x33329502, { // "You have improved your '%1' high score on Steam!" + "Poprawi%Ĺ‚eĹ›0 swĂłj wynik w kategorii '%P1' na Steam!", + "Steam'deki '%P1'puanını artırdın!", + "Zlepši%l0 jsi svĂ© nejvyšší skĂłre na Steamu v kategorii '%P1'!", + "Đ’Ń‹ подняли Ńвой Ńчёт в категории '%1' в Steam!", + "Du hast deinen Highscore bei '%1' auf Steam verbessert!", + }}, + {0x33491116, { // "Cheats: " + "Oszustwa: ", + "Hileler: ", + "Cheaty: ", + "Читы: ", + "Cheats: ", + }}, + {0x338f9dd8, { // "This Orb allows you to create illusions of yourself. Illusions are targeted by most monsters, just like yourself, Thumpers, and your friends.\n\nEach illusion takes 5 charges to create, and one extra charge per turn. You can also click your illusion to take it away, restoring 4 charges.\n\nIf you have both Orb of Teleport and Orb of Trickery, Illusion is cast first -- you can then teleport on your Illusion to switch places with it." + "Ta sfera pozwala Ci tworzyć iluzje samego siebie. WiÄ™kszość potworĂłw celuje w iluzje, podobnie jak w Ciebie, Dudniki i Twoich przyjaciół.\n\nKaĹĽda iluzja wymaga 5 Ĺ‚adunkĂłw do stworzenia i jednego dodatkowego Ĺ‚adunku na kolejkÄ™. MoĹĽesz teĹĽ kliknąć swojÄ… iluzjÄ™, by jÄ… zabrać, co przywraca 4 Ĺ‚adunki.\n\nJeĹ›li masz zarĂłwno SferÄ™ Teleportacji jak i Sztuczek, Iluzja rzucana jest jako pierwsza -- moĹĽesz nastÄ™pnie teleportować siÄ™ na swojÄ… iluzjÄ™, by siÄ™ z niÄ… zamienić miejscami.", + "Bu KĂĽre kendinin ilĂĽzyonlarını çıkarmanı saÄźlar. Ä°lĂĽzyonlar tıpkı sen, GĂĽmleyenler ve dostların gibi pek çok canavar tarafından saldırıya uÄźrayabilir.\n\nHer ilĂĽzyonu çıkarması 5 Ĺźarj ve her ek tur bir Ĺźarj tĂĽketir. Ä°lĂĽzyona tıklayarak onu yok edip, 4 Ĺźarjını geri alabilirsin. \n\nAynı anda hem Kandırma hem Işınlanma KĂĽren varsa, önce Ä°lĂĽzyon uygulanır, sonra istersen ilĂĽzyonuna tıklayarak onla yer deÄźiĹźtirebilirsin. ", + "Tato sfĂ©ra ti umoĹľĹuje vytvářet svĂ© iluzornĂ­ dvojnĂ­ky. VÄ›tšina netvorĹŻ pĹŻjde po tvĂ˝ch iluzĂ­ch, stejnÄ› jako jdou po tobÄ›, po TloucĂ­ch a po tvĂ˝ch přátelĂ­ch.\n\nStvoĹ™enĂ­ kaĹľdĂ© iluze sníží náboj sfĂ©ry o 5 a vyÄŤerpává 1 náboj navĂ­c za kolo. MĹŻĹľeš takĂ© kliknout na svou iluzi a zrušit ji, ÄŤĂ­mĹľ se náboj sfĂ©ry zvýší o 4.\n\nPokud máš SfĂ©ru Teleportace a SfĂ©ru Klamu zároveĹ, nejprve pouĹľiješ SfĂ©ru Klamu -- potĂ© se mĹŻĹľeš teleportovat na svou iluzi a vymÄ›nit si s nĂ­ mĂ­sto.", + "Đ­Ń‚Đ° Ńфера позволяет Đ’Đ°ĐĽ Ńоздавать иллюзии. ĐŃ… бŃĐ´ŃŃ‚ атаковать почти вŃе монŃтры, Ń‚Đ°Đş же как Đ’Đ°Ń, Тамперы и ваŃих Ńоюзников.\n\nКаждая иллюзия требŃет 5 зарядов для Ńоздания и по ĐľĐ´Đ˝ĐľĐĽŃ Đ˛ каждый ход. Также Đ’Ń‹ можете кликнŃŃ‚ŃŚ на иллюзию, чтобы забрать её, потратив 3 заряда.\n\nĐ•Ńли Ń Đ’Đ°Ń ĐµŃŃ‚ŃŚ Ńферы ХитроŃти и Телепорта, Đллюзия работает первой -- Đ’Ń‹ можетепотом телепортироватьŃŃŹ на неё, чтобы поменятьŃŃŹ Ń Đ˝ĐµĐą меŃтами.", + "Dieser Orb erlaubt es dir, Illusionen deiner selbst zu erschaffen. Diese werden von den meisten Monstern verfolgt.\n\nJede Illusion benötigt 5 Ladungen zum Erschaffen, plus eine Ladung pro Zug. Du kannst deine Illusion anklicken um sie zu entfernen, wofĂĽr du 4 Ladungen bekommst.\n\nBesitzt du einen Orb der Teleportation und einen des Truges, wird Illusion bevorzugt du kannst dich dann auf deine Illusion teleportieren, um die Plätze zu tauschen.", + }}, + {0x339454d5, { // "player 2 go" + "gracz 2 idĹş", + "oyuncu 2, git", + "hráč 2 pohyb", + "игрок 2 идёт", + "Spieler 2 los", + }}, + {0x33aea165, { // "Just a typical hyperbolic pirate." + "Typowy hiperboliczny pirat.", + "Sadece bildiÄźiniz bir hiperbolik korsan.", + "TypickĂ˝ hyperbolickĂ˝ pirát.", + "Обычный гиперболичеŃкий пират.", + "Ist bloĂź ein typischer, hyperbolischer Pirat.", + }}, + {0x33d27403, { // "\n\nSee sounds/credits.txt for credits for sound effects" + "\n\nPodziÄ™kowania za efekty dĹşwiÄ™kowe w sounds/credits.txt", +/*MISSING*/ "\n\nSee sounds/credits.txt for credits for sound effects", + "\n\nPodìkovánĂ­ za zvukovĂ© efekty najde v souboru sounds/credits.txt", + "\n\nБлагодарноŃти Đ·Đ° звŃковые эффекты в sounds/credits.txt", +/*MISSING*/ "\n\nSee sounds/credits.txt for credits for sound effects", + }}, + {0x33fb8e0b, { // "%The1 squeaks sadly." + "%1 pisn%Ä…Ĺ‚1 smutno.", + "%1 ĂĽzĂĽntĂĽyle ciyaklıyor.", + "%1 smutnÄ› pištĂ­.", + "%1 пищит грŃŃтно.", + "%Die1 %1 piepst traurig.", + }}, + {0x3403ba38, { // "model used (not conformal!)" + "uĹĽyty model (nie konforemny!)", +/*MISSING*/ "model used (not conformal!)", + "pouĹľitĂ˝ model (nekonformálnĂ­!)", + "модель иŃпользŃетŃŃŹ (не конформная!)", + "verwendetes Modell (nicht konform!)", + }}, + {0x3414b24b, { // "degree of the approximation" + "stopieĹ„ przybliĹĽenia", +/*MISSING*/ "degree of the approximation", + "stupeĹ opieĹ„ przybliĹĽenia", + "Ńтепень приближения", + "Grad der Näherung", + }}, + {0x343f8bdc, { // "Dark red birds who have created the minefield.\n\nThey create a mine on the spot where they are killed, provided that the terrain is suitable. Also note that mines are triggered by dead birds falling on them." + "Ciemnoczerwone ptaki, ktĂłre stworzyĹ‚y pole minowe.\n\nNa polu, na ktĂłre spadĹ‚y, powstaje mina, o ile teren jest odpowiedni. PamiÄ™taj, ĹĽe mina wybucha, gdy spadnie na niÄ… martwy ptak.", + "Mayıntarlasını dĂĽzenleyen kızıl, siyah kuĹźlar.\n\nĂ–ldĂĽklerinde öldĂĽkleri hĂĽcrede, eÄźer hĂĽcre tipi uygunsa bir mayın çıkarırlar. Ayrıca dikkat, mayınlar, ĂĽzerine dĂĽĹźen ölĂĽ kuĹźlarla da tetiklenebilir.", + "TmavoÄŤervenĂ­ ptáci, kteří vytvoĹ™ili minovĂ© pole.\n\nKdyĹľ zemĹ™ou, vytvoří na poli, kam spadnou, minu, pokud to terĂ©n dovoluje. MÄ›j na pamÄ›ti, Ĺľe i pád mrtvĂ©ho ptáka na minu staÄŤĂ­ k tomu, aby ji odpálil!", + "Тёмно-чёрные птицы, ŃоздавŃие Минное поле.\n\nКогда птица Ńмирает, на клетке, где она была, ĐľŃŃ‚Đ°Ń‘Ń‚ŃŃŹ мина. Помни, что мёртвые птицы могŃŃ‚ активировать мины.", + "Dunkelrote Vögel, die das Minenfeld erschufen.\n\nWenn sie sterben erschaffen sie eine Mine, vorausgesetzt das Terrain passt). Tote, fallende Vögel lösen Minen auch aus!", + }}, + {0x3517dd24, { // "vineyard pattern" + "wzĂłr winnicy", +/*MISSING*/ "vineyard pattern", + "vinicovĂ˝ vzor", + "Ńзор виноградника", +/*MISSING*/ "vineyard pattern", + }}, + {0x352f28c1, { // "These bright yellow gems can be found only by those who have mastered the Crossroads." + "Te jasne, żółte klejnoty mogÄ… znaleźć tylko mistrze SkrzyĹĽowaĹ„.", + "Bu sarı parlak mĂĽcevherler Arayollarda yeterince deneyim kazananlar tarafından bulunabilir.", + "Tyto jasnÄ› ĹľlutĂ© drahokamy mohou najĂ­t pouze ti, kdo ovládli celou KĹ™iĹľovatku.", + "Эти ярко-жёлтые камни может найти лиŃŃŚ тот, кто ŃŃ‚Đ°Đ» ĐĽĐ°Ńтером ПерекрёŃтка.", + "Diese hellen, gelben Edelsteine können nur von denen gefunden werden, die die Kreuzungen gemeistert haben.", + }}, + {0x35b1bb91, { // "rainbow landscape" + "tÄ™czowy krajobraz", +/*MISSING*/ "rainbow landscape", + "duhová krajina", + "радŃжный пейзаж", +/*MISSING*/ "rainbow landscape", + }}, + {0x35b618da, { // "second joystick: pan threshold" + "dĹĽojstik 2: prĂłg przewijania", + "ikinci oyun kolu: gezdirme hızı", + "joystick 2: práh posuvu", + "джойŃтик 2: порог панорамы", + "Joystick 2: Scrollgrenze", + }}, + {0x35be8905, { // "floor/pattern" + "podĹ‚oga/wzorek", + "zemin/doku", + "podlaha/vzor", + "пол/Ńзор", + "Boden/Muster", + }}, + {0x35d1f8a2, { // "When Pikemen move, they attack all cells which are now adjacent to them. Luckily, they can be killed in the same way.\n\nThey never move if this would attack their friends." + "Kiedy Pikinier siÄ™ rusza, atakuje wszystkie komĂłrki, z ktĂłrymi sÄ…siaduje po wykonaniu ruchu. Na szczęście, jego samego moĹĽna pokonać takÄ… samÄ… metodÄ….\n\nPikinier siÄ™ nie rusza, jeĹ›li by w ten sposĂłb zaatakowaĹ‚ przyjaciela.", + "Mızraklılar hareket ettiÄźinde deÄźdikleri tĂĽm hĂĽcrelere saldırırlar. Çok şükĂĽr aynı Ĺźekilde öldĂĽrĂĽlebiliyorlar da. ArkadaĹźlarına hasar vereceklerse hareket etmiyorlar.", + "KopinĂ­ci po kaĹľdĂ©m svĂ©m pohybu zaĂştoÄŤĂ­ na všechna okolnĂ­ polĂ­ÄŤka NaštÄ›stĂ­ se dajĂ­ zabĂ­t stejnĂ˝m zpĹŻsobem.\n\nKopinĂ­ci se nepohnou, pokud by to znamenalo, Ĺľe zaĂştoÄŤĂ­ na svĂ© přátele.", + "Когда Копейщик ходит, он Đ°Ń‚Đ°ĐşŃет вŃе клетки рядом Ń Đ˝Đ¸ĐĽ. Đš ŃчаŃŃ‚ŃŚŃŽ, и его можно Ńбить подобным образом.\n\nКопейщик никогда не бŃдет атаковать Đ´Ń€ŃжеŃтвенной ĐµĐĽŃ ŃŃщеŃтво.", + "Bewegen sich Bergmänner, greifen sie alle Zellen um sie herum an. GlĂĽcklicherweise können sie genauso getötet werden.\n\nSie bewegen sich nicht wenn sie so ihre Freunde angreifen wĂĽrden.", + }}, + {0x35df8189, { // "1-9 = rotations: %1" + "1-9 = obroty: %1", + "1-9 = döndĂĽrmeler %1", + "1-9 = rotace: %1", + "1-9 = поворот: %1", + "1-9 = Drehungen: %1", + }}, + {0x362bf409, { // "%The1 kills %the2!" + "%1 zabi%Ĺ‚1 %a2!", + "%1 %a2 öldĂĽrdĂĽ!", + "%1 zabi%l1 %a2!", + "%1 Ńбил%E1 %a2!", + "%Der1 %1 tötet %den2 %a2!", + }}, + {0x3671b5b6, { // "This tour shows just a small part of what you can see in the world of HyperRogue. For example, hyperbolic mazes are much nicer than their Euclidean counterparts. Have fun exploring!\n\nPress '5' to leave the tutorial mode." + "Ten podrÄ™cznik pokazuje tylko maĹ‚Ä… część Ĺ›wiata HyperRogue. Na przykĹ‚ad hiperboliczne labirynty sÄ… ciekawsze niĹĽ euklidesowe. MiĹ‚ej zabawy!NaciĹ›nij '5' by opuĹ›cić podrÄ™cznik.", +/*MISSING*/ "This tour shows just a small part of what you can see in the world of HyperRogue. For example, hyperbolic mazes are much nicer than their Euclidean counterparts. Have fun exploring!\n\nPress '5' to leave the tutorial mode.", + "Tato prohlĂ­dka ukazuje jen malou část toho, co mĹŻĹľeš vidÄ›t ve svÄ›tÄ› HyperRogue. Tak například: hyperbolická bludištÄ› jsou mnohem hezÄŤĂ­ neĹľ jejich eukleidovskĂ© protÄ›jšky. Bav se pĹ™i dalším zkoumánĂ­!\n\n.StisknutĂ­m klávesy '5' opustíš tutoriál.", + "Đ­Ń‚Đľ ĐżŃтеŃеŃтвие показало лиŃŃŚ ĐĽĐ°Đ»ŃŃŽ чаŃŃ‚ŃŚ мира HyperRogue. Например, гиперболичеŃкие лабиринты намного приятнее евклидовых. Приятной игры!Нажмите '5', чтобы выйти из режима Đ ŃководŃтва.", +/*MISSING*/ "This tour shows just a small part of what you can see in the world of HyperRogue. For example, hyperbolic mazes are much nicer than their Euclidean counterparts. Have fun exploring!\n\nPress '5' to leave the tutorial mode.", + }}, + {0x36849629, { // "gnomonic projection" + "rzut gnomoniczny", +/*MISSING*/ "gnomonic projection", + "gnĂłmonická projekce", + "гномоничеŃкая проекция", +/*MISSING*/ "gnomonic projection", + }}, + {0x36cf01a9, { // "Ground level below the plane" + "Poziom podĹ‚oĹĽa pod pĹ‚aszczyznÄ…", +/*MISSING*/ "Ground level below the plane", + "ĂšroveĹ zemÄ› pod rovinou", + "Đ“Đ»Ńбина Ńровня земли", +/*MISSING*/ "Ground level below the plane", + }}, + {0x36f58dfe, { // "A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them." + "PlemiÄ™ ludzi ĹĽyjÄ…cych na Pustyni. Oswoili oni Pustynne Czerwie, dziÄ™ki czemu ĹĽyjÄ… razem pokojowo.", + "Çölde yaĹźayan bir insan jabilesi. BĂĽyĂĽk Kumkurtlarını evcilleĹźtirip kendilerine saldırmamasını saÄźladılar.", + "Kmen domorodcĹŻ z PouštÄ›. Dokázali dokonce zkrotit i obrovskĂ© PĂ­seÄŤnĂ© ÄŤervy, kteří na nÄ› neĂştoÄŤĂ­.", + "Племя людей, живŃщих в ĐżŃŃтыне. Они прирŃчили пеŃчаных червей, и те их не трогают.", + "Ein Volk, das in der WĂĽste lebt. Sie haben es sogar geschafft, die riesigen SandwĂĽrmer so zu zähmen, dass diese sie nicht angreifen.", + }}, + {0x36fb778b, { // "The cloud turns into a bunch of images!" + "Chmura zamienia siÄ™ w obrazy!", + "Bulut pek çok görĂĽntĂĽye dönĂĽĹźtĂĽ!", + "Oblak se promÄ›nil v nÄ›kolik obrazĹŻ!", + "Облако превратилоŃŃŚ в грŃĐżĐżŃ Đ¸Đ·ĐľĐ±Ń€Đ°Đ¶ĐµĐ˝Đ¸Đą!", + "Die Wolke verwandelt sich in mehrere Bilder!", + }}, + {0x37e4291e, { // "orb power: %1" + "moc: %1", + "kĂĽre gĂĽcĂĽ: %1", + "moc sfĂ©r: %1", + "Ńила Ńферы: %1", + "Orb Kraft: %1", + }}, + {0x3804a2f2, { // "movement animation speed" + "prÄ™dkość animacji ruchu", +/*MISSING*/ "movement animation speed", + "rychlost pohybovĂ˝ch animacĂ­", + "ŃкороŃŃ‚ŃŚ анимации движения", +/*MISSING*/ "movement animation speed", + }}, + {0x387a2936, { // "leave the Tutorial" + "opuść PodrÄ™cznik", +/*MISSING*/ "leave the Tutorial", + "opusĹĄ Tutoriál", + "выйти из Đ ŃководŃтва", +/*MISSING*/ "leave the Tutorial", + }}, + {0x38b21089, { // "Height of walls" + "Wysokość Ĺ›cian", +/*MISSING*/ "Height of walls", + "Výška zdĂ­", + "Đ’Ń‹Ńота Ńтен", +/*MISSING*/ "Height of walls", + }}, + {0x3908e6a3, { // "save the current config" + "zapisz obecnÄ… konfiguracjÄ™", + "mevcut ayarları kaydet", + "uloĹľit souÄŤasnĂ© nastavenĂ­", + "Ńохранить текŃщие наŃтройки", + "momentane Einstellungen speichern", + }}, + {0x395bc20c, { // "player 3 X" + "gracz 3 X", +/*MISSING*/ "player 3 X", + "hráč 3 X", + "игрок 3 X", + "Spieler 3 X", + }}, + {0x395bc20d, { // "player 3 Y" + "gracz 3 Y", +/*MISSING*/ "player 3 Y", + "hráč 3 Y", + "игрок 3 Y", + "Spieler 3 Y", + }}, + {0x39741514, { // "Choose from the lands visited this game." + "Wybierz spoĹ›rĂłd odwiedzonych krain.", + "Oyunda eriĹźtiÄźin diyarlardan birini seç.", + "Vyber si z krajĹŻ, kterĂ© jsi v tĂ©to hĹ™e navštĂ­vil.", + "Выберите ĐľĐ´Đ˝Ń Đ¸Đ· Ńже поŃещённых земель.", + "Wähle aus den Ländern, die diese Sitzung besucht wurden.", + }}, + {0x3989d384, { // "Config file: %1" + "Plik konfiguracyjny: %1", + "Ayar dosyası: %1", + "Soubor s nastavenĂ­m: %1", + "Файл конфигŃрации: %1", + "Confiq Datei: %1", + }}, + {0x39cf3230, { // "Gans model" + "Model Gansa", +/*MISSING*/ "Gans model", + "GansĹŻv model", + "Модель Đ“Đ°Đ˝ŃĐ°", +/*MISSING*/ "Gans model", + }}, + {0x3b247efe, { // "configure keys" + "klawisze skonfigurowane", +/*MISSING*/ "configure keys", + "konfigurace kláves", + "наŃтроить клавиŃи", + "Tasten konfigurieren", + }}, + {0x3b430e32, { // "Animated corpses of ancient Viking warriors. They are immune to mundane weapons, but they can be destroyed by your Orb of the Sword." + "OĹĽywione zwĹ‚oki staroĹĽytnych wikiĹ„skich wojownikĂłw. Draugry sÄ… odporne na zwyczajne bronie, ale mogÄ… zostać zniszczone przy uĹĽyciu Sfery Ostrza.", +/*MISSING*/ "Animated corpses of ancient Viking warriors. They are immune to mundane weapons, but they can be destroyed by your Orb of the Sword.", + "OĹľivlĂ© mrtvoly dávnĂ˝ch vikingskĂ˝ch váleÄŤnĂ­kĹŻ. Jsou imunnĂ­ proti obyÄŤejnĂ˝m zbranĂ­m, ale tvoje SfĂ©ra MeÄŤe je mĹŻĹľe zniÄŤit.", + "Оживлённые Ń‚Ń€Ńпы древних викингŃких воинов. ДраŃгров нельзя победить обычным орŃжием, но они Ńязвимы Đş Сфере Меча.", + "Untote Helden der alten Wikinger. Sie sind immun gegenĂĽber irdischen Waffen, aber sie können durch deinen Orb des Schwertes zerstört werden.", + }}, + {0x3b6161d4, { // "Humans are %1 absolute units high. Your head travels %2 times the distance travelled by your feet." + "Ludzie majÄ… wysokość %1. Twoja gĹ‚owa porusza siÄ™ %2 razy szybciej niĹĽ Twoje nogi.", +/*MISSING*/ "Humans are %1 absolute units high. Your head travels %2 times the distance travelled by your feet.", + "LidĂ© jsou vysocĂ­ %1 absolutnĂ­ch jednotek. Tvá hlava urazĂ­ %2-násobek vzdálenosti, kterou urazĂ­ tvĂ© nohy.", + "Человек имеет роŃŃ‚ %1. Đ’Đ°ŃĐ° голова проходит раŃŃтояние в %2 раз больŃе, чем ноги.", +/*MISSING*/ "Humans are %1 absolute units high. Your head travels %2 times the distance travelled by your feet.", + }}, + {0x3b63146e, { // "You become a bit nervous..." + "Czujesz siÄ™ zagroĹĽon%y0...", +/*MISSING*/ "You become a bit nervous...", + "ZaÄŤĂ­náš bĂ˝t trošku nervĂłznĂ­...", + "Đ’Ń‹ начали нервничать...", + "Du wirst ein wenig nervös...", + }}, + {0x3b698746, { // "Finished lands required: %1 (collect %2 treasure)\n" + "Wymagane ukoĹ„czone krainy: %1 (zdobÄ…dĹş %2 skarbĂłw)\n", + "Gereken bitirilmiĹź diyarlar: %1 (%2 hazine toplananlar)\n", + "PotĹ™ebuješ dokonÄŤit %1 krajĹŻ (zĂ­skat v nich %2 pokladĹŻ)\n", + "Земель окончено: %1 (Ńобрано %2 Ńокровищ)\n", + "Abgeschlossene Länder benötigt: %1 (sammle %2 Schätze)\n", + }}, + {0x3b7bee06, { // "return to the game" + "powrĂłt do gry", + "oyuna dön", + "návrat do hry", + "вернŃŃ‚ŃŚŃŃŹ в игрŃ", + "zum Spiel zurĂĽckkehren", + }}, + {0x3b960c12, { // "This cell is on fire. Most beings and items cannot survive." + "To pole siÄ™ pali. WiÄ™kszość stworzeĹ„ i przedmiotĂłw tu nie przetrwa.", + "Bu hĂĽcre yanıyor. Ăśzerindeki çoÄźu eĹźya ve canlı ölecek.", + "Toto polĂ­ÄŤko hoří. VÄ›tšina tvorĹŻ a pĹ™edmÄ›tĹŻ zde nepĹ™eĹľije.", + "Đ­Ń‚Đ° клетка в огне. БольŃинŃтво ŃŃщеŃтв и предметов не могŃŃ‚ выжить.", + "Diese Zelle brennt. Die meisten Items und Monster können dies nicht ĂĽberleben.", + }}, + {0x3b9db20b, { // "b = boundary" + "i = przedmioty", + "i = sınır", + "c = kopĂ­rovánĂ­", + "i = предметы", + "i = Grenze", + }}, + {0x3bae8fbf, { // "A Witch without any special powers. But watch out! She will pick up any basic Orbs on her path, and use their powers." + "Czarownica bez specjalnych mocy. UwaĹĽaj! MoĹĽe ona podnieść dowolnÄ… podstawowÄ… SferÄ™ na swojej drodze i uĹĽyć jej mocy.", + "Herhangi bir gĂĽcĂĽ olamyan bir Cadı. Ama dikkat! Yolunun ĂĽzerindeki herhangi bir KĂĽreyi alıp güçlerini kullanabilir.", + "ÄŚarodÄ›jnice bez jakĂ˝chkoli zvláštnĂ­ch schopnostĂ­. Ale pozor! UÄŤednice sbĂ­rajĂ­ jakĂ©koli základnĂ­ SfĂ©ry, na kterĂ© narazĂ­ a používajĂ­ jejich schopnosti.", + "Ведьма без ĐľŃобых Ńил. Но бŃдьте ĐľŃторожны! Она может поднять ŃŃ„ĐµŃ€Ń Đ˝Đ° Ńвоём ĐżŃти и забрать её ŃилŃ.", + "Eine Hexe ohne besondere Kräfte. Aber pass auf! Sie wird alle Orbs in ihrer Nähe aufheben und verwenden.", + }}, + {0x3c1727e4, { // "Four mines next to you!" + "Cztery miny koĹ‚o Ciebie!", + "Yakınında dört mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházejĂ­ ÄŤtyĹ™i miny!", + "Четыре мины рядом Ń Đ’Đ°ĐĽĐ¸!", + "4 Minen um dich!", + }}, + {0x3c191f07, { // "The more Hypersian Rugs you collect, the harder it is." + "Im wiÄ™cej zbierzesz Hiperskich DywanĂłw, tym misja trudniejsza.", + "Ne kadar AĹźkınlı Kilim toplarsan o kadar zor.", + "ÄŚĂ­m vĂ­c HyperskĂ˝ch kobercĹŻ sebereš, tĂ­m obtĂ­ĹľnÄ›jší bude.", + "Чем больŃе Đ’Ń‹ наŃли гиперŃидŃких ковров, тем ŃŤŃ‚Đľ Ńложнее.", + "Je mehr Hypersische Teppiche du sammelst desto schwieriger wird es.", + }}, + {0x3c656179, { // "The tasty treat increases your protection." + "Pyszny Cukierek poprawia TwojÄ… ochronÄ™.", +/*MISSING*/ "The tasty treat increases your protection.", + "Chutná Pochoutka zvyšuje tvou ochranu.", + "Đ’ĐşŃŃные конфетки ŃĐ»ŃчŃĐ°Ń‚ Đ’Đ°ŃŃ Đ·Đ°Ń‰Đ¸Ń‚Ń.", +/*MISSING*/ "The tasty treat increases your protection.", + }}, + {0x3c66765d, { // "spherical geometry" + "geometria sferyczna", +/*MISSING*/ "spherical geometry", + "sfĂ©rická geometrie", + "ŃферичеŃкая геометрия", +/*MISSING*/ "spherical geometry", + }}, + {0x3c8b2988, { // "NEW" + "NOWA", + "YENÄ°", + "NOVĂ HRA", + "NEW", + "NEU", + }}, + {0x3cdbf908, { // "hypersian rug mode" + "tryb hiperskiego dywanu", +/*MISSING*/ "hypersian rug mode", + "mĂłd hyperskĂ©ho koberce", + "режим гиперŃидŃкого ковра", + "Hypersischer-Teppich-Modus", + }}, + {0x3ced91b0, { // "When the tide is away, beautiful ambers can be found on the hyperbolic beaches. Perhaps there used to be a forest here?" + "W czasie odpĹ‚ywu na hiperbolicznej plaĹĽy moĹĽna znaleźć piÄ™kne bursztyny.", + "Dalga uzaktayken Ĺźahane kehribarlar hiperbolik kumsallarda bulunabilir. Belki önceleri burada bir orman vardı?", + "Za odlivu mĹŻĹľeš na hyperbolickĂ© pláži najĂ­t krásnĂ© kusy jantaru.MoĹľná tu kdysi bĂ˝val les?", + "Đ’Đľ время отлива на гиперболичеŃких берегах можно найти прекраŃный Янтарь. Може, здеŃŃŚ когда-Ń‚Đľ был леŃ?", + "Bei Ebbe können wunderschöne Bernsteine auf den hyperbolischen Stränden gefunden werden. Vielleicht war hier frĂĽher ein Wald...?", + }}, + {0x3cfe1720, { // "You feel that you have enough treasure to access new lands!" + "Masz wystarczajÄ…co wiele skarbĂłw, by znaleźć nowe krainy!", + "Yeni diyarlara ulaĹźmak için yeterince hazinen olduÄźunu düşünĂĽyorsun!", + "CĂ­tíš, Ĺľe uĹľ máš dost pokladĹŻ na to aby ses dostal do novĂ˝ch krajĹŻ!", + "Đ’Ń‹ чŃвŃтвŃете, что Ń Đ’Đ°Ń Đ´ĐľŃтаточно Ńокровищ, чтобы открыть новые земли!", + "Du spĂĽrst, dass du genug Schätze gesammelt hast um neue Länder zu erreichen!", + }}, + {0x3d0c36c8, { // "The ivy destroys %the1!" + "Bluszcz zniszczyĹ‚ %a1!", + "Samaşık %a1 yok etti!", + "BĹ™eÄŤĹĄan zniÄŤil %a1!", + "Плющ Ńничтожил %a1!", + "Der Efeu zerstört %den1 %a1!", + }}, + {0x3d1cd783, { // "Half-plane model" + "Model półpĹ‚aszczyzny", +/*MISSING*/ "Half-plane model", + "PolorovinovĂ˝ model", + "Модель полŃплоŃкоŃти", +/*MISSING*/ "Half-plane model", + }}, + {0x3d448fe5, { // "This land is warped. Ironically, the coast is completely straight..." + "Ta kraina jest dziwnie zakrzywiona. Co ciekawe, brzeg jest prosty jak drut...", +/*MISSING*/ "This land is warped. Ironically, the coast is completely straight...", + "Tento kraj je pokĹ™ivenĂ˝. IroniĂ­ je, Ĺľe pobĹ™eží je absolutnÄ› rovnĂ©...", + "Đ­Ń‚Đ° земля иŃкривлена. Đ—Đ°Ń‚Đľ берег абŃолютно прямой...", + "Dieses Land ist verzerrt. Ironischerweise ist die KĂĽste völlig gerade...", + }}, + {0x3d4bdfb2, { // "\nSpawn rate (as prize Orb): %1%/%2\n" + "\nCzÄ™stość wystÄ™powania (jako nagroda): %1%/%2\n", +/*MISSING*/ "\nSpawn rate (as prize Orb): %1%/%2\n", + "\nFrekvence (jako extra SfĂ©ra): %1%/%2\n", + "\nЧаŃтота появления (как награда): %1%/%2\n", +/*MISSING*/ "\nSpawn rate (as prize Orb): %1%/%2\n", + }}, + {0x3db53675, { // "Some lands unlock at specific treasures or kills" + "NiektĂłre krainy otwierajÄ… siÄ™ dziÄ™ki konkretnym skarbom lub pokonanym potworom", + "Bazı diyarlara ulaĹźabilmek için belirli öldĂĽrmeler ve hazineler gerekebilir.", + "NÄ›kterĂ© kraje se otevĹ™ou zĂ­skánĂ­m urÄŤitĂ˝ch pokladĹŻ nebo zabitĂ­m urÄŤitĂ˝ch netvorĹŻ.", + "Для открытия некоторых земель Đ˝Ńжно определённые Ńокровища или Ńбитые враги.", + "Manche Länder schaltest du durch bestimmte Anzahlen von Schätzen und Kills frei", + }}, + {0x3ddd8b37, { // "Shmup (shoot'em up) mode: You can play a hyperbolic shoot'em up game. The game is based on the usual turn-based grid-based HyperRogue, but there are some changes. You fight by throwing knives, and you have three extra lives. There are no allies, so all Orbs related to allies give you extra lives instead (up to 5). Some other rules have been adapted too.\n\n" + "Strzelanka: grasz w hiperbolicznÄ… strzelankÄ™, bazowanÄ… na turowych zasadach HyperRogue, ale z pewnymi zmianami. Twoja broĹ„ to rzucane noĹĽe, masz 3 dodatkowe ĹĽycia. Nie ma za to przyjaciół, zatem wszystkie Sfery ich dotyczÄ…ce dajÄ… Ci dodatkowe ĹĽycia (max 5). NiektĂłre z pozostaĹ‚ych reguĹ‚ rĂłwnieĹĽ zostaĹ‚y dostosowane.\n\n", +/*MISSING*/ "Shmup (shoot'em up) mode: You can play a hyperbolic shoot'em up game. The game is based on the usual turn-based grid-based HyperRogue, but there are some changes. You fight by throwing knives, and you have three extra lives. There are no allies, so all Orbs related to allies give you extra lives instead (up to 5). Some other rules have been adapted too.\n\n", + "MĂłd stříleÄŤky: zde mĹŻĹľeš hrát hyperbolickou stříleÄŤku. Hra je zaloĹľena na běžnĂ©m HyperRogue (s koly a polĂ­ÄŤky), ale jsou tu urÄŤitĂ© zmÄ›ny. Bojuješ tak, Ĺľe házíš noĹľe, a máš tĹ™i Ĺľivoty navĂ­c. NemĹŻĹľeš mĂ­t žádnĂ© kamarády, takĹľe všechny SfĂ©ry, kterĂ© s nimi souvisejĂ­, ti mĂ­sto toho pĹ™idávajĂ­ Ĺľivoty navĂ­c (maximum je 5). I nÄ›která další pravidla jsou adaptována.\n\n", + "Режим Ńтрельбы: Đ’Ń‹ можете играть в гиперболичеŃĐşŃŃŽ ŃтрелялкŃ, ĐľŃнованнŃŃŽ на обычной HyperRogue. Đ’Đ°Ńе орŃжие -- метательные ножи, и вы начинаете Ń 3 дополнительными жизнями. ЗдеŃŃŚ нет Ńоюзников, и вŃе Ńферы, Ń Đ˝Đ¸ĐĽĐ¸ Ńвязанные, проŃŃ‚Đľ Đ´Đ°ŃŽŃ‚ дополнительнŃŃŽ жизнь (вплоть Đ´Đľ 5). Некоторые Đ´Ń€Ńгие правила также изменены.\n\n", + "Shmup-Modus (Ballermodus): Du kannst ein hyperbolisches Ballerspiel spielen. Das Spiel basiert auf dem gewohnten zug- und zellenbasierten HyperRogue, aber mit einigen Ă„nderungen. Du kämpfst indem du Messer wirfst, und hast drei Extraleben. Es gibt keine Freunde, daher geben dir alle Orbs, die Freunde betreffen, stattdessen Extraleben (bis zu fĂĽnf). Einige andere Regeln wurden ebenfalls angepasst.\n\n", + }}, + {0x3deb988c, { // "A magical being which copies your movements. You feel that it would be much more useful in an Euclidean space." + "Magiczna istota kopiujÄ…ca Twoje ruchy. W przestrzeni euklidesowej byĹ‚aby duĹĽo bardziej przydatna.", + "Hareketlerini taklit eden bir bĂĽyĂĽlĂĽ varlık. Bunların Ă–klid uzayında daha iĹźe yarayacağını düşünmeden edemiyorsun .", + "Magická bytost, která kopĂ­ruje tvĂ© pohyby. Máš pocit, Ĺľe v eukleidovskĂ©m prostoru by byla mnohem uĹľiteÄŤnÄ›jší.", + "Đ­Ń‚Đľ магичеŃкое Ńоздание повторяет Đ’Đ°Ńи движения. Đ’Ń‹ понимаете, что в евклидовом мире ŃŤŃ‚Đľ ĐşŃĐ´Đ° полезнее.", + "Ein magisches Wesen, das deine Bewegungen kopiert.\nDu hast das GefĂĽhl, es wäre in einer euklidischen Umgebung viel nĂĽtzlicher.", + }}, + {0x3e374c5f, { // "Treasure required: %1 x %2.\n" + "Wymagane skarby: %1 x %2.\n", + "Gereken hazine: %1 tane %2.\n", + "PotĹ™ebuješ %1 x %2.\n", + "Сокровищ Ńобрано: %1 x %2.\n", + "Benötigte Schätze: %1 x %2.\n", + }}, + {0x3ee05d1b, { // "The rug depicts a man in a deep dungeon, unable to leave." + "Dywan przedstawia czĹ‚owieka w gĹ‚Ä™bokich lochach, niezdolnego do ucieczki.", +/*MISSING*/ "The rug depicts a man in a deep dungeon, unable to leave.", + "Na tomto koberci je vyobrazen muĹľ v hlubokĂ©m Ĺľaláři, kterĂ˝ nemĹŻĹľe ven.", + "Ковёр изображает человека из глŃбокого подземелья, который не может Ńбежать.", +/*MISSING*/ "The rug depicts a man in a deep dungeon, unable to leave.", + }}, + {0x3eeaab06, { // "\"I have been trained to fight with a Hypersian scimitar, you know?\"" + "\"Trenowa%Ĺ‚em1 walkÄ™ hiperskim szamszirem, wiesz?\"", + "Hiç AĹźkınlı Palasıyla savaĹźmak ĂĽzere eÄźitilmemiĹźtim biliyor musun?\"", + "Jsem vycviÄŤen%Ă˝1 v boji s hyperskou šavlĂ­, víš?\"", + "ĐŻ тренировал%c1 Ń ĐłĐ¸ĐżĐµŃ€ŃидŃким ятаганом, Ń‚Ń‹ в ĐşŃŃ€Ńе?\"", + "Ich habe trainiert um mit einem Hypersischem Scimitar zu kämpfen, wusstest du das?\"", + }}, + {0x3f053b67, { // "%The1 picks up %the2!" + "%1 podniosĹ‚a %a2!", + "%1 %a2 kaldırdı!", + "%1 sebrala %a2!", + "%1 поднял%E1 %a2!", + "Die %1 hebt %den2 %a2 auf!", + }}, + {0x3f3ffe3e, { // "%The1 raises some undead!" + "%1 oĹĽywia nieumarĹ‚ych!", + "%1 ölĂĽ çağırdı!", + "%1 probudil nemrtvĂ©!", + "%1 воŃŃŃ‚Đ°Đ» из мёртвых!", + "%Der1 %1 beschwört die Toten!", + }}, + {0x3f4727cc, { // "You cannot move between the cells without dots here!" + "Nie moĹĽesz poruszać siÄ™ miÄ™dzy polami bez kropek!", +/*MISSING*/ "You cannot move between the cells without dots here!", + "Nie moĹĽesz tu przechodzić miÄ™dzy polami bez kropek!", + "Đ’Ń‹ не можете ходить ĐĽĐµĐ¶Đ´Ń ĐżĐľĐ»ŃŹĐĽĐ¸ без точек!", + "Du kannst dich hier nicht zwischen Zellen ohne Punkte bewegen!", + }}, + {0x4002fc3c, { // "\"Bring me out of here please!\"" + "\"ProszÄ™, zabierz mnie stÄ…d!\"", + "Beni buradan çıkar lĂĽtfen!\"", + "ProsĂ­m tÄ›, odveÄŹ mÄ› odsud!\"", + "ПроŃŃ, Ńведи меня отŃŃŽĐ´Đ°!\"", + "Bitte bring mich hier raus!\"", + }}, + {0x40656952, { // "\"Be careful in the Rose Garden! It is beautiful, but very dangerous!\"" + "\"UwaĹĽaj w Różanym Ogrodzie! Jest tam piÄ™knie, ale bardzo niebezpiecznie!\"", +/*MISSING*/ "\"Be careful in the Rose Garden! It is beautiful, but very dangerous!\"", + "\"V RĹŻĹľovĂ© zahradÄ› si dávej pozor! Je pÄ›kná, ale takĂ© pÄ›knÄ› nebezpeÄŤná!\"", + "\"Đ‘Ńдьте ĐľŃторожны в Розарии! Там краŃиво, но очень опаŃно!\"", + "\"Sei vorsichtig im Rosengarten! Er ist schön, aber sehr gefährlich!\"", + }}, + {0x408f8ba3, { // "New Achievement:" + "Nowe osiÄ…gniÄ™cie:", + "Yeni BaĹźarım:", + "NovĂ˝ achievement:", + "Новое Đ´ĐľŃтижение:", + "Neues Achievement:", + }}, + {0x40a4d8a5, { // "a prized Orb, it appears only in cabinets" + "cenna Sfera, tylko w gablotach", + "çok kıymetli bir KĂĽre, sadece vitrinde bulunur.", + "cenná SfĂ©ra, která se objevuje pouze ve vitrĂ­nách", + "ценная Ńфера, только в кабинетах", + "Ein wertvoller Orb der nur in Vitrinen erscheint", + }}, + {0x416cad19, { // "summon Thumpers" + "przywoĹ‚aj dudniki", + "GĂĽmleyen çıkar", + "vyvolej Tlouky", + "призвать Тамперы", + "rufe Stampfer herbei", + }}, + {0x416f36a1, { // "special game modes" + "specjalne tryby gry", + "özel oyun modları", + "speciálnĂ­ hernĂ­ mĂłdy", + "Ńпециальные режимы", + "Spielmodi", + }}, + {0x41877005, { // "review the scene" + "przeglÄ…d sceny", + "durumu gör", + "pĹ™ehled scĂ©ny", + "Ńмотреть ŃценŃ", + "Die Szene anzeigen", + }}, + {0x419dd9a4, { // "The tentacles of Cthulhu are like sandworms, but longer. They also withdraw one cell at a time, instead of exploding instantly." + "Macki Cthulhu sÄ… podobne do Pustynnych Czerwi, ale dĹ‚uĹĽsze. W przeciwieĹ„stwie do nich nie eksplodujÄ… po zablokowaniu, tylko cofajÄ… siÄ™ pod ziemiÄ™, po 1 polu na kolejkÄ™.", + "Cthulhu'nun dokunaçları kumkurtları gibidir, ama daha uzundur. Ve birden patlamak yerine her seferinde bir hĂĽcregeri çekilirler.", + "Cthulhuova chapadla jsou nÄ›co jako PĂ­seÄŤnĂ­ ÄŤervi, ale delší. KromÄ› toho neexplodujĂ­ okamĹľitÄ›, ale ustupujĂ­ polĂ­ÄŤko za polĂ­ÄŤkem.", + "Đ©Ńпальца КтŃĐ»Ń…Ń ĐżĐľŃ…ĐľĐ´Đ¸ на пеŃчаных червей, но длиннее. Они втягиваютŃŃŹ по одной клетке, Đ° не взрываютŃŃŹ мгновенно.", + "Die Tentakel von Cthulhu sind wie SandwĂĽrmer, aber länger. Anstatt zu explodieren ziehen sie sich zurĂĽck, eine Zelle nach der anderen.", + }}, + {0x41a0800e, { // " $$$: %1" + " $$$: %1", + " $$$: %1", + " $$$: %1", + " $$$: %1", + " $$$: %1", + }}, + {0x41aeaa9f, { // "BACK" + "OK", + "GERÄ°", + "ZPÄšT", + "BACK", + "RĂśCK", + }}, + {0x41b07440, { // "A fake Land with colored floors." + "FaĹ‚szywa Kraina z kolorowymi podĹ‚ogami.", + "Renkli zeminli bir sahte diyar.", + "FalešnĂ˝ kraj s barevnou podlahou.", + "Фиктивная земля Ń Ń€Đ°Đ·Đ˝ĐľŃ†Đ˛ĐµŃ‚Đ˝Ń‹ĐĽ полом.", + "Ein falsches Land mit farbigen Böden.", + }}, + {0x41ef5d8c, { // "You can hold this bush to climb the Lost Mountain, but it is not very strong -- it will get destroyed if you climb from it into an unstable location. Bushes block the movement of birds." + "MoĹĽesz zĹ‚apać ten krzak, by siÄ™ wspiąć na ZagubionÄ… GĂłrÄ™, ale nie jest on zbyt wytrzymaĹ‚y -- zniszczy siÄ™, gdy wespniesz siÄ™ z niego do niestabilnej pozycji. Krzaki blokujÄ… drogÄ™ ptakom.", +/*MISSING*/ "You can hold this bush to climb the Lost Mountain, but it is not very strong -- it will get destroyed if you climb from it into an unstable location. Bushes block the movement of birds.", + "Tohoto keĹ™e se mĹŻĹľeš chytit pĹ™i vĂ˝stupu na Ztracenou horu, ale nenĂ­ příliš silnĂ˝ -- pokud z nÄ›j vylezeš na nestabilnĂ­ lokaci, zniÄŤĂ­ se. KeĹ™e blokujĂ­ pohyb ptákĹŻ.", + "Đ’Ń‹ можете хвататьŃŃŹ Đ·Đ° этот ĐşŃŃŃ‚, чтобы лезть на горŃ, но он не очень прочный: он развалитŃŃŹ, еŃли перемеŃтитьŃŃŹ Ń Đ˝ĐµĐłĐľ на неŃтабильнŃŃŽ клеткŃ. БлокирŃет перемещение птиц.", +/*MISSING*/ "You can hold this bush to climb the Lost Mountain, but it is not very strong -- it will get destroyed if you climb from it into an unstable location. Bushes block the movement of birds.", + }}, + {0x4212ec3c, { // "c = readd v" + "c = ponownie v", + "c = yeniden ekle v", + "c = znovu pĹ™idej v", + "c = обновить v", + "c = wiederhinzufĂĽgen v", + }}, + {0x426c48b7, { // "The Alchemists produce magical potions from pools of blue and red slime. You can go through these pools, but you cannot move from a blue pool to a red pool, or vice versa. Pools containing items count as colorless, and they change color to the PC's previous color when the item is picked up. Slime beasts also have to keep to their own color, but when they are killed, they explode, destroying items and changing the color of the slime and slime beasts around them." + "Alchemicy produkujÄ… magiczne napoje z niebieskiej i czerwonej mazi. MoĹĽesz poruszać siÄ™ poprzez maĹş, ale nie moĹĽesz przesunąć siÄ™ z pola niebieskiego na czerwone, ani z powrotem. Pola zawierajÄ…ce przedmioty sÄ… bezbarwne, po zebraniu przedmiotu zmieniajÄ… kolor na kolor pola, na ktĂłrym gracz byĹ‚ wczeĹ›niej. Maziste Stwory rĂłwnieĹĽ ograniczone sÄ… do swojego koloru. Zabijane eksplodujÄ…, niszczÄ…c przedmioty i zmieniajÄ…c kolor mazi wokół nich.\n", + "Simyacılar mavi ve kırmızı balçık havuzlarından sihirli iksirler ĂĽretirler. Bu havuzlardan geçebilirsin, ama kırmızı bir havuzdan mavi bir havuza veya tam tersine geçemezsin. Balçık canavarları kendi renklerinde durmak zorundadır, Ama öldĂĽklerinde patlarlar ve etrafındaki eĹźyaları yok eder, etraflarındaki balçığın ve canavarların rengini deÄźiĹźtirirler. \n", + "AlchymistĂ© vytvářejĂ­ magickĂ© lektvary z kaluží modrĂ©ho a ÄŤervenĂ©ho slizu. Ty mĹŻĹľeš tÄ›mito kaluĹľemi procházet, ale nemĹŻĹľeš se pohnout z modrĂ© kaluĹľe do ÄŤervenĂ© nebo obrácenÄ›. KaluĹľe s pĹ™edmÄ›ty se berou jako bezbarvĂ© a po sebránĂ­ pĹ™edmÄ›tu zmÄ›nĂ­ barvu na tu, na kterĂ© jste byl pĹ™edtĂ­m. I SlizovĂ­ netvoĹ™i se mohou pohybovat jen v kalužích svĂ© vlastnĂ­ barvy, ale kdyĹľ zemĹ™ou, vybuchnou, coĹľ zniÄŤĂ­ pĹ™edmÄ›ty v jejich blĂ­zkosti a zmÄ›nĂ­ barvu okolnĂ­ho slizu a SlizovĂ˝ch netvorĹŻ.", + "Đлхимики Ńоздают магичеŃкие зелья из краŃной и Ńиней Ńлизи. Đ’Ń‹ можете перемещатьŃŃŹ по этой Ńлизи, но не можете перейти Ń ĐşŃ€Đ°Ńной на Ńинюю и наоборот. Слизь, Ńодержащая предметы, беŃцветна и меняет Ńвой цвет на Đ’Đ°Ń, когда Đ’Ń‹ Ńобираете предмет. Живая Ńлизь тоже двигаетŃŃŹ лиŃŃŚ по ŃĐ˛ĐľĐµĐĽŃ Ń†Đ˛ĐµŃ‚Ń, но при гибели меняет цвет вŃей Ńлизи в радиŃŃе 2 клеток на Ńвой.\n", + "Die Alchemisten produzieren magische Tränke aus Lachen von blauem und rotem Schleim. Du kannst durch sie hindurchgehen, aber du kannst nicht von Blau zu Rot wechseln oder umgekehrt. Lachen mit Gegenständen darin sind farblos und bekommen die Farbe, auf der du zuletzt warst, wenn du den Gegenstand aufhebst. Schleimmonster mĂĽssen auch auf ihrer Farbe bleiben. Wenn sie sterben, explodieren sie, zerstören Items und ändern die Farbe von Schleim und Schleimmonstern um sie herum.", + }}, + {0x42a2a741, { // "first page [Space]" + "pierwsza strona [Space]", + "ilk sayfa [Space]", + "prvnĂ­ stránka [mezernĂ­k]", + "первая Ńтраница [пробел]", + "Erste Seite [LEER]", + }}, + {0x4321d329, { // "move down" + "idĹş do doĹ‚u", + "aĹźağı git", + "dolĹŻ", + "идти вниз", + "Runter bewegen", + }}, + {0x4380f6c5, { // " kills: %1/%2" + " zabicia: %1/%2", +/*MISSING*/ " kills: %1/%2", + " zabitĂ­: %1/%2", + " ŃбийŃтв: %1/%2", + " Tötungen: %1/%2", + }}, + {0x4392dd43, { // "(ESC) tour menu" + "(ESC) menu ucznia", +/*MISSING*/ "(ESC) tour menu", + "(ESC) menu prohlĂ­dky", + "(ESC) меню обŃчения", +/*MISSING*/ "(ESC) tour menu", + }}, + {0x43bec718, { // "four players" + "czterech graczy", +/*MISSING*/ "four players", + "ÄŤtyĹ™i hráči", + "четыре игрока", + "vier Spieler", + }}, + {0x43e793b1, { // "There are many possible solutions to the Yendor Quest. In the Yendor Challenge, you will try many of them!\n\nEach challenge takes part in a specific land, and you have to use what you have available.\n\nYou need to obtain an Orb of Yendor in the normal game to activate this challenge, and (ever) collect 10 treasures in one or two lands to activate a specific level.\n\nAfter you complete each challenge, you can try it again, on a harder difficulty level.\n\nAll the solutions showcased in the Yendor Challenge work in the normal play too. However, passages to other lands, and (sometimes) some land features are disabled in the Yendor Challenge, so that you have to use the expected method. Also, the generation rules are changed slightly for the Palace and Minefield while you are looking for the Orb of Yendor, to make the challenge more balanced (but these changes are also active during the normal Yendor Quest).\n\nYou get 1000 points for each challenge won, and 1 extra point for each extra difficulty level." + "Jest duĹĽo moĹĽliwych sposobĂłw, by zdobyć SferÄ™ Yendoru. W tej misji sprĂłbujesz wielu z nich!\n\nKaĹĽda misja dzieje siÄ™ w konkretnej krainie i musisz uĹĽyć tego, co jest dostepne.\n\nMusisz zdobyć SferÄ™ Yendoru w normalnej grze, by odblokować MisjÄ™ Yendor i (kiedykolwiek) zdobyć 10 skarbĂłw w jednym czy dwu Ĺ›wiatach, by uaktywnić konkretnÄ… misjÄ™.\n\nPo ukoĹ„czeniu kaĹĽdej misji, moĹĽesz sprĂłbować jescze raz, na trudniejszym poziomie.\n\nWszystkie rozwiÄ…zania uĹĽyte w Misji Yendor dziaĹ‚ajÄ… w normalnej grze. PrzejĹ›cia do innych krain i (czasami) niektĂłre inne elementy sÄ… wyĹ‚Ä…czone podczas Misji Yendor, byĹ› musia%Ĺ‚0 uĹĽyć oczekiwanej metody. ReguĹ‚y generowania krain sÄ… lekko zmienione, gdy szukasz Sfer Yendoru w PaĹ‚acu i na Polu Minowym, by poprawić rĂłwnowagÄ™ (te zmiany sÄ… teĹĽ aktywne przy poszukiwaniu Sfery Yendoru podczas normalnej gry).\n\n", + "Yendor Görevinin bir sĂĽrĂĽ çözĂĽmĂĽ var. Yendor Ek Görevi'nde bunların pek çoÄźunu deneyeceksin!\n\nHer görev belirli bir diyarda geçiyor ve elindekileri bĂĽtĂĽn verimliliÄźiyle kullanman gerekecek.\n\nBu görevi aktifleĹźtirmek için normal oyunda bir kez Yendor'un KĂĽresi'ni ele geçirmen gerekiyor. Ayrıca her hangi bir seviyeyi aktifleĹźtirmek için ilgili diyar(lar)da 10 hazine toplamış olman gerekiyor.\n\nEk görevi tamamladıktan sonra aynı görevi bir ĂĽst zorluk seviyesinde yeniden deneyebilirsin.\n\nYendor Ek Görevi'ndeki bĂĽtĂĽn çözĂĽmler normal oyunda da iĹźe yarar. Ancak, Yendor Ek görevinde, diÄźer diyarlara geçiĹź ve bazen diyarın bazı özellikleri devredışıdır, bu yĂĽzden beklenen çözĂĽmĂĽ bulman beklenir. Ayrıca, Yendor'un KĂĽresi'ni ararken görevin daha dengeli olması için Saray ve Mayın Tarlasındaki harita ĂĽretimi biraz deÄźiĹźtirilmiĹźtir. (bu deÄźiĹźiklikler normal Yendor Görevi'nde de mevcuttur).\n\nHer kazanılan ek görev için 1000 puan ve her fazladan zorluk seviyesi için 1 fazladan puan kazanırsın.\n\n", + "Je mnoho rĹŻznĂ˝ch zpĹŻsobĹŻ, jak zĂ­skat Yendorskou SfĂ©ru. V Misi: Yendor si jich vyzkoušíš celou Ĺ™adu!\n\nKaĹľdá mise se odehrává v urÄŤitĂ©m kraji a ty musíš využít to, co tam máš k dispozici.\n\nAbys mohl hrát Misi: Yendor, musíš zĂ­skat Yendorskou SfĂ©ru v normálnĂ­ hĹ™e; pro aktivaci konkrĂ©tnĂ­ch misĂ­ musíš takĂ© (alespoĹ jednou) zĂ­skat 10 pokladĹŻ v jednom ÄŤi dvou krajĂ­ch.\n\nPo splnÄ›nĂ­ kaĹľdĂ© mise se o ni mĹŻĹľeš pokusit znovu, na vyšší obtĂ­Ĺľnosti.\n\nVšechna Ĺ™ešenĂ­ v Misi: Yendor fungujĂ­ i v normálnĂ­ hĹ™e. PrĹŻchody do jinĂ˝ch krajin a (nÄ›kdy) nÄ›kterĂ© jejich prvky jsou však v Misi: Yendor vypnuty, takĹľe musĂ­te použít metodu, jaká se od vás oÄŤekává. KromÄ› toho se pĹ™i hledánĂ­ YendorskĂ© sfĂ©ry ponÄ›kud mÄ›nĂ­ pravidla pro generovánĂ­ Paláce a MinovĂ©ho pole, aby byla mise vĂ­ce vyvážená, (tyto zmÄ›ny však platĂ­ i bÄ›hem normálnĂ­ho hledánĂ­ YendorskĂ© SfĂ©ry).\n\n", + "Đ•ŃŃ‚ŃŚ много ŃпоŃобов Đ´ĐľŃŃ‚Đ°Ń‚ŃŚ ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°. Đ’ этой миŃŃии Đ’Ń‹ можете попробовать вŃе варианты!\n\nКаждая миŃŃия проходит в конкретных землях, и можно иŃпользовать лиŃŃŚ Ń‚Đľ, что Ń‚Đ°ĐĽ еŃŃ‚ŃŚ.\n\nĐ’Ń‹ должны Đ´ĐľŃŃ‚Đ°Ń‚ŃŚ ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ° в обычной игре, чтобы открыть этот режим, и Ńобрать 10 Ńокровищ в одной или двŃŃ… землях, чтобы открыть конкретные Ńровни.\n\nЗакончив определённŃŃŽ миŃŃию, Đ’Ń‹ можете попробовать её заново на больŃей ŃложноŃти.\n\nĐ’Ńе реŃения, продемонŃтрированные в миŃŃии Йендора, работают и в нормальной игре. Выходы в Đ´Ń€Ńгие земли и некоторые внŃтренние ĐľŃобенноŃти здеŃŃŚ отключены, что Đ·Đ°Ńтавляет иŃпользовать предŃŃмотренный ŃпоŃоб. Правила генерации во Дворце и на Минном поле немного изменены, пока Đ’Ń‹ ищете СферŃ, но в нормальной игре эти изменения во время квеŃŃ‚Đ° тоже дейŃтвŃŃŽŃ‚.\n\n", + "Es gibt viele mögliche Lösungen fĂĽr die Quest von Yendor. Während der Yendor Herausforderung wirst du viele davon ausprobieren!\n\nJede Herausforderung ist auf ein bestimmtes Land begrenzt und du musst nutzen was gegeben ist.\n\nZum Freischalten dieser Herausforderung muss ein Orb von Yendor im normalem Modus gesammelt werden sowie 10 Schätze in ein oder zwei Ländern um bestimmte Level zu aktivieren.\n\nNach dem Beenden einer Herausforderung kannst du eine schwierigere Version dieser spielen.\n\nAlle Lösungen der Yendor-Herausforderung funktionieren auch im normalem Spiel. Allerdings sind Wege zu anderen Ländern in der Yendor-Herausforderung deaktiviert, somit bleiben weniger Lösungsmöglichkeiten. AuĂźerdem kann verändert werden wie der Palast und das Minenfeld generiert werden um es einfacher zu machen einen Orb von Yendor zu finden. (Diese Ă„nderungen sind auch während des normalen Yendorquest aktiviert).\n\n", + }}, + {0x44057f41, { // "In most lands, more treasures are generated with each enemy native to this land you kill. Moreover, 100 kills is a requirement to enter the Graveyard and the Hive.\n\nFriendly creatures and parts of monsters (such as the Ivy) do appear in the list, but are not counted in the total kill count." + "W wiÄ™kszoĹ›ci krain, zabijanie przeciwnikĂłw pochodzÄ…cych z danej krainy powoduje, ĹĽe generowane jest wiÄ™cej skarbĂłw. Ponadto, 100 zabić jest konieczne, by mĂłc znaleźć Cmentarz i Mrowisko.\n\nPrzyjazne stworzenia i części potworĂłw (jak np. Bluszcz) wystÄ™pujÄ… na liĹ›cie, ale nie sÄ… liczone do Ĺ‚Ä…cznej liczby zabić.", + "ÇoÄźu diyarda, orada yaĹźayan canavarları öldĂĽrmen daha çok hazineyle karşılaĹźmanı saÄźlar. Ayrıca 100 leĹź Mezarlık ve Kovana girmen için bir önkoĹźuldur. \n\nDost yaratıklar ve canavarların parçaları (Sarmaşık gibi) litede gözĂĽkĂĽrt, ama toplam leĹźlere dahil edilmez.", + "Ve vÄ›tšinÄ› krajĹŻ se objevuje tĂ­m vĂ­c pokladĹŻ, ÄŤĂ­m vĂ­c zabijete nepřátel, kteří v nich ĹľijĂ­. KromÄ› toho musíš zabĂ­t 100 netvorĹŻ, aby ses mohl dostat na HĹ™bitov a do Ăšlu.\n\nPřátelštĂ­ tvorovĂ© a části netvorĹŻ (jako je BĹ™eÄŤĹĄan) se v seznamu objevujĂ­, ale do celkovĂ©ho poÄŤtu zabitĂ˝ch netvorĹŻ se nepoÄŤĂ­tajĂ­.", + "Đ’ больŃинŃтве земель чем больŃе Đ’Ń‹ Ńбиваете меŃтных жителей, тем больŃе Ńокровищ ŃоздаётŃŃŹ. Кроме того, Đ’Đ°ĐĽ Đ˝Ńжно Ńбить 100 врагов, чтобы попаŃŃ‚ŃŚ на Кладбище и в Улей.\n\nДрŃжеŃтвенные ŃŃщеŃтва и чаŃти монŃтров (например, чаŃти плюща) при этом на ŃчитаютŃŃŹ.", + "In den meisten Ländern werden mehr Schätze generiert, je mehr Feinde du darin tötest. DarĂĽber hinaus benötigst du 100 Kills fĂĽr den Friedhof und das Nest.\n\nFreundliche Kreaturen und Monsterteile (z.B. Efeu) werden zwar gezeigt, zählen aber nicht zur Gesamt-Punktzahl.", + }}, + {0x443579c7, { // "\"When I visited the Palace, a mouse wanted me to go somewhere.\"" + "\"Kiedy byĹ‚em w PaĹ‚acu, myszka chciaĹ‚a, bym gdzieĹ› poszedĹ‚.\"", + "\"Sarayı ziyaret ettiÄźimde, bir fare benden bir yere gitmemi istedi.\"", + "\"KdyĹľ jsem navštĂ­vil Palác, byla tam myška, co chtÄ›la, abych se nÄ›kam vydal.\"", + "\"Когда ŃŹ был во Дворце, ĐĽŃ‹ŃŃŚ пыталаŃŃŚ меня позвать ĐşŃĐ´Đ°-Ń‚Đľ.\"", + "\"Als ich den Palast besuchte wollte eine Maus das ich irgendwo hingehe.\"", + }}, + {0x44758caa, { // "Rangers take care of the magic mirrors in the Land of Mirrors. They know that rogues like to break these mirrors... so they will attack you!" + "StraĹĽnicy chroniÄ… lustra w Krainie Luster. WiedzÄ…, ĹĽe zĹ‚odzieje lubiÄ… rozbijać lustra... takĹĽe spodziewaj siÄ™ ataku!", + "Seyyahların aynalarını kıracağını bildiklerinden sana saldıracaklar!", + "Strážci se starajĂ­ o kouzelná zrcadla v Kraji zrcadel. VÄ›dĂ­, Ĺľe lupiÄŤi jako ty rádi tato zrcadla rozbĂ­jejĂ­... a proto na tebe ĂştoÄŤĂ­!", + "Странники охраняют магичеŃкие зеркала. Они знают, что эти разбойники хотят разбить их зеркала и Ń‚ŃŃ‚ же нападают на Đ’Đ°Ń!", + "Ranger beschĂĽtzen die Zauberspiegel im Spiegelland. Sie wissen, dass Schurken wie du die Spiegel gerne zerbrechen - also greifen sie dich an!", + }}, + {0x450c904d, { // "\"It is not possession but the act of getting there, " + "\"Nie posiadanie, ale proces docieranie na miejsce, ", +/*MISSING*/ "\"It is not possession but the act of getting there, ", + "\"Ne vlastnictvĂ­, ale cesta k nÄ›mu ", + "\"Đ­Ń‚Đľ не владение, но процеŃŃ ĐżĐľĐ»Ńчения знания", +/*MISSING*/ "\"It is not possession but the act of getting there, ", + }}, + {0x451f3f10, { // "advanced configuration" + "zaawansowana konfiguracja", + "geliĹźmiĹź ayarlar", + "pokroÄŤilá konfigurace", + "продвинŃтые наŃтройки", + "Erweiterte Einstellungen", + }}, + {0x45293820, { // "prepare the line animation" + "przygotuj animacjÄ™ linii", +/*MISSING*/ "prepare the line animation", + "pĹ™iprav přímkovou animaci", + "приготовить анимацию линии", + "bereite die Linien-Animation vor", + }}, + {0x45350617, { // "Welcome to the HyperRogue tutorial!" + "Witaj w podrÄ™czniku HyperRogue!", +/*MISSING*/ "Welcome to the HyperRogue tutorial!", + "VĂ­tej v tutoriálu HyperRogue!", + "Добро пожаловать в Ń€ŃководŃтво HyperRogue!", +/*MISSING*/ "Welcome to the HyperRogue tutorial!", + }}, + {0x453c3739, { // "You got Thorns! Stab monsters by moving around them." + "Ciernie! DĹşgaj potwory chodzÄ…c obok nich.", +/*MISSING*/ "You got Thorns! Stab monsters by moving around them.", + "ZĂ­skal jsi Trny! NynĂ­ mĹŻĹľeš probodnout netvory tĂ­m, Ĺľe kolem nich projdeš.", + "Đ’Ń‹ полŃчили Шипы! Колите монŃтров, ходя мимо них.", +/*MISSING*/ "You got Thorns! Stab monsters by moving around them.", + }}, + {0x457f1068, { // "Your total treasure has been recorded in the Steam Leaderboards." + "TwĂłj wynik zostaĹ‚ zapisany w rankingach Steam.", + "Toplam hazinen Steam Listelerine kaydedildi.", + "TvĹŻj celkovĂ˝ poklad byl zaznamenán na Ĺľebříčky na Steamu.", + "Đ’Đ°Ń ĐľĐ±Ń‰Đ¸Đą резŃльтат занеŃŃ‘Đ˝ в Ń‚Đ°Đ±Đ»Đ¸Ń†Ń Steam.", + "Deine Gesamtschätze wurden in die Steam-Bestenlisten aufgenommen.", + }}, + {0x461c6331, { // "default" + "domyĹ›lne", +/*MISSING*/ "default", + "default", + "по Ńмолчанию", +/*MISSING*/ "default", + }}, + {0x461e7611, { // "You cannot attack through the Vine!" + "Nie moĹĽesz atakować poprzez winoroĹ›l!", + "Ĺžarabın içinden saldıramazsın!", + "NemĹŻĹľeš ĂştoÄŤit skrz rĂ©vu!", + "Đ’Ń‹ не можете атаковать Ńквозь лозŃ!", + "Du kannst nicht durch die Reben hindurch angreifen!", + }}, + {0x463368ad, { // "\"The Holy Grail is in the center of the Round Table.\"" + "\"ĹšwiÄ™ty Graal jest poĹ›rodku OkrÄ…gĹ‚ego StoĹ‚u.\"", + "\"Kutsal Kâse Yuvarlak Masanın merkezinde.\"", + "\"SvatĂ˝ grál je ve stĹ™edu KulatĂ©ho stolu.\"", + "\"Святой Грааль в центре крŃглого Ńтола.\"", + "\"Der Heilige Gral ist im Zentrum der Tafelrunde.\"", + }}, + {0x4634453e, { // "You can summon these friendly constructs with a magical process." + "Przyjazna konstrukcja, tworzona poprzez magiczny proces.", + "Bu dost mekanizmaları bĂĽyĂĽsel bir iĹźlemle uyandırabilirsin.", + "Tyto přátelskĂ© konstrukty mĹŻĹľeš vyvolat pomocĂ­ magickĂ©ho procesu.", + "Магия позволяет призывать этих Đ´Ń€Ńжелюбных Ńозданий.", + "Du kannst diese freundlichen Steinriesen mit einem Ritual beschwören.", + }}, + {0x4696bd7f, { // "start a new game" + "nowa gra", +/*MISSING*/ "start a new game", + "nová hra", + "новая игра", + "neues Spiel starten", + }}, + {0x46bbc887, { // "This false princess is immune to the alluring scent of roses." + "Ta faĹ‚szywa księżniczka jest niewraĹĽliwa na zapach róż.", +/*MISSING*/ "This false princess is immune to the alluring scent of roses.", + "Tato falešná princezna je imunnĂ­ vĹŻÄŤi vábivĂ© vĹŻni růží.", + "Đ­Ń‚Đ° ложная принцеŃŃĐ° невоŃприимчива Đş ароматам роз.", + "Diese falsche Prinzessin ist immun gegenĂĽber dem verlockenden Duft der Rosen.", + }}, + {0x46bd9565, { // "%The1 breathes fire at %the2!" + "%1 zieje ogniem w %a2!", +/*MISSING*/ "%The1 breathes fire at %the2!", + "%1 chrlĂ­ oheĹ na %a2!", + "%1 Đ´Ń‹Ńит огнём на %a2!", + "%Der1 %1 spuckt Feuer auf %den2 %a2!", + }}, + {0x47a46d50, { // "treasure collected" + "zdobyte skarby", + "toplanan hazineler", + "zĂ­skanĂ© poklady", + "Ńобрано Ńокровищ", + "Gesammelte Schätze", + }}, + {0x47bcb239, { // "summon dead orbs" + "przywoĹ‚aj martwe sfery", + "ölĂĽ kĂĽre çıkar", + "vyvolej mrtvĂ© sfĂ©ry", + "призвать мёртвые Ńферы", + "rufe tote Orbs herbei", + }}, + {0x48142822, { // "This has been recorded in the Steam Leaderboards." + "To zostaĹ‚o zapisane w Rankingach Steam.", + "Bu Steam Listelerine kaydedildi.", + "Bylo zaznamenáno na Ĺľebříčky Steamu.", + "Đ­Ń‚Đľ запиŃано в Ń‚Đ°Đ±Đ»Đ¸Ń†Ń Ń€ĐµĐşĐľŃ€Đ´ĐľĐ˛ Steam.", + "Dies wurde in den Steam-Bestenlisten vermerkt.", + }}, + {0x483986df, { // "A land filled with huge ivy plants and dangerous animals." + "Kraina peĹ‚na wielkiego pnÄ…cego bluszczu i niebezpiecznych bestii.", + "Sarmaşık bitkileri ve tehlikeli hayvanlarla dolu bir diyar.", + "Kraj plnĂ˝ obrovskĂ˝ch rostlin bĹ™eÄŤĹĄanu a nebezpeÄŤnĂ˝ch zvĂ­Ĺ™at.", + "Земля, полная огромными плющами и опаŃными животными.", + "Ein Land voller riesiger Efeupflanzen und gefährlicher Tiere.", + }}, + {0x4895a247, { // "Unavailable in the multiplayer mode.\n" + "NiedostÄ™pne w trybie wielu graczy.\n", +/*MISSING*/ "Unavailable in the multiplayer mode.\n", + "NedostupnĂ© v mĂłdu pro vĂ­ce hráčů.\n", + "НедоŃŃ‚Ńпно в режиме неŃкольких игроков.\n", + "Nicht im Mehrspieler-Modus verfĂĽgbar.\n", + }}, + {0x489cc548, { // "Periodic patterns" + "Wzory okresowe", +/*MISSING*/ "Periodic patterns", + "PeriodickĂ© vzory", + "ПериодичеŃкие Ńзоры", +/*MISSING*/ "Periodic patterns", + }}, + {0x489faba1, { // "Princess" + "Księżniczka", +/*MISSING*/ "Princess", + "Princezna", + "ПринцеŃŃĐ°", + "Prinzessin", + }}, + {0x48aeb10a, { // "%The1 breaks the mirror!" + "%1 rozbi%Ĺ‚1 lustro!", + "%1 aynayı kırdı!", + "%1 rozbi%l1 zrcadlo!", + "%1 разбил%E1 зеркало!", + "%Der1 %1 zerstört den Spiegel!", + }}, + {0x48e37d1a, { // "Wow! %1! This trip should be worth it!" + "%1! Ta wyprawa powinna siÄ™ opĹ‚acić!", + "Vay canına! %1! Bu seyahati yaptığına deÄźecek!", + "Páni! %1! Tenhle vĂ˝let by mÄ›l stát za to!", + "%1! Đ ŃŤŃ‚Đľ ĐżŃтеŃеŃтвие Ńтоит того!", + "Wow, %1! Diese Reise lohnt sich!", + }}, + {0x4976c551, { // "You drop %the1." + "Porzuci%Ĺ‚eĹ›0 %a1.", + "%a1 düşürdĂĽn.", + "PoloĹľi%l0 jsi %a1.", + "Đ’Ń‹ выкинŃли %a1.", + "Du legst %den1 %a1 ab.", + }}, + {0x499be79c, { // "by land" + "kraina", +/*MISSING*/ "by land", + "podle kraje", + "по земле", +/*MISSING*/ "by land", + }}, + {0x49a3ff8e, { // "summon treasure" + "przywoĹ‚aj skarby", + "hazine çıkar", + "vyvolej poklad", + "призвать Ńокровища", + "rufe Schätze herbei", + }}, + {0x4a1c9024, { // "ESC for menu/quest" + "ESC - menu/misja", + "ESC - menĂĽ/görev", + "ESC - menu/Ăşkoly", + "ESC - меню/миŃŃия", + "ESC fĂĽr MenĂĽ/Quest", + }}, + {0x4ab7c698, { // "turn-based mode" + "gra turowa", +/*MISSING*/ "turn-based mode", + "hra na kola", + "поŃаговый режим", + "zugbasierter Modus", + }}, + {0x4af3c63d, { // "This Orb makes you stunningly beautiful. Monsters which come next to you will be stunned for one turn. Multi-tile monsters are not affected. Additionally, it makes you immune to beauty." + "DziÄ™ki tej Sferze stajesz siÄ™ oszaĹ‚amiajÄ…co piÄ™kn%y0. Stworzenia, ktĂłre wejdÄ… na pole obok Ciebie, zostanÄ… oszoĹ‚omione na 1 kolejkÄ™. Nie dziaĹ‚a to na stworzenia zajmujÄ…ce wiele pĂłl. Dodatkowo, stajesz siÄ™ niewraĹĽliw%y0 na piÄ™kno.", +/*MISSING*/ "This Orb makes you stunningly beautiful. Monsters which come next to you will be stunned for one turn. Multi-tile monsters are not affected. Additionally, it makes you immune to beauty.", + "Tato SfĂ©ra ti dává omraÄŤujĂ­cĂ­ krásu. NetvoĹ™i, kteří vstoupĂ­ na polĂ­ÄŤko vedle tebe, budou na jedno kolo omráčeni. Netvoří, kteří zabĂ­rajĂ­ vĂ­ce neĹľ jedno polĂ­ÄŤko, nejsou ovlivnÄ›ni. KromÄ› toho ti tato SfĂ©ra poskytuje imunitu proti kráse.", + "С этой Ńферой Đ’Ń‹ ŃтановитеŃŃŚ ĐľŃеломляюще прекраŃны. МонŃŃ‚Ń€, подоŃедŃий Đş Đ’Đ°ĐĽ, Đ·Đ°Ńтывает на один ход. Не дейŃтвŃет на монŃтров из неŃкольких клеток. Также Đ’Ń‹ теперь можете игнорировать краŃĐľŃ‚Ń Đ´Ń€Ńгих.", + "Dieser Orb macht dich atemberaubend schön. Monster, die sich dir nähern, werden fĂĽr einen Zug betäubt. Monster, die sich ĂĽber mehrere Zellen erstrecken, sind nicht betroffen. AuĂźerdem macht er dich immun gegenĂĽber 'Schönheit'.", + }}, + {0x4b4fc4fd, { // "move right" + "idĹş w prawo", + "saÄźa git", + "doprava", + "идти направо", + "Nach rechts bewegen", + }}, + {0x4b9b6984, { // "dist from hyperboloid ctr" + "odlegĹ‚ość od centrum hiperboloidy", + "hiperboloid merkezinden uzaklık", + "vzdálenost od stĹ™edu hyperboloidu", + "раŃŃтояние от центра гиперболоида", + "Entf. vom hyperbolischen Zentrum", + }}, + {0x4bb2ea16, { // "simply resize the window to change resolution" + "po prostu zmieĹ„ rozmiar okna", + "pencerenin boyutunu deÄźiĹźtirerek çözĂĽnĂĽrlüğü deÄźiĹźtirebilirsin.", + "rozlišenĂ­ mĹŻĹľeš zmÄ›nit prostou zmÄ›nou velikosti okna", + "проŃŃ‚Đľ поменяйте размер окна чтобы Ńменить разреŃение", + "Einfach die Fenstergröße anpassen um die Auflösung zu ändern", + }}, + {0x4bf49e02, { // "Equidistants" + "Ekwidystanty", +/*MISSING*/ "Equidistants", + "Ekvidistanty", + "ЭквидиŃтанты", +/*MISSING*/ "Equidistants", + }}, + {0x4c302be4, { // "F3 = load" + "F3 = wczytaj", + "F3 = yĂĽkle", + "F3 = nahránĂ­", + "F3 = загрŃзить", + "F3 = Laden", + }}, + {0x4ca27502, { // "mark heptagons" + "oznaczenia na siedmiokÄ…tach", +/*MISSING*/ "mark heptagons", +/*MISSING*/ "mark heptagons", + "отметить ŃемиŃгольники", +/*MISSING*/ "mark heptagons", + }}, + {0x4cc25130, { // "You throw fire!" + "Rzucasz ogniem!", + "AteĹź attın!", + "Vrhl jsi oheĹ!", + "Đ’Ń‹ броŃили огонь!", + "Du wirfst Feuer!", + }}, + {0x4cd01990, { // "Five mines next to you!" + "Pięć min koĹ‚o Ciebie!", + "Yakınında beĹź mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházĂ­ pÄ›t min!", + "Пяти мин рядом Ń Đ’Đ°ĐĽĐ¸!", + "5 Minen um dich!", + }}, + {0x4d80629f, { // "use Shift to decrease and Ctrl to fine tune " + "uĹĽyj Shift by zmniejszyć, Ctrl by zwiÄ™kszyć dokĹ‚adność", + "Shift'le azalt, Ctrl ile ince ayar yap.", + "pouĹľij Shift ke zmenšenĂ­ a Ctrl k jemnĂ©mu", + "иŃпользŃйте Shift для ŃменьŃения,", + "Shift zum Verringern, Strg zum feinen", + }}, + {0x4d895a7a, { // "In the pure tactics mode, you concentrate on a specific land. Your goal to obtain as high score as possible, without using features of the other lands. You can then compare your score with your friends!\n\nYou need to be somewhat proficient in the normal game to unlock the given land in this challenge (collect 20 treasure in the given land, or 2 in case of Camelot).\n\nSince getting high scores in some lands is somewhat luck dependent, you play each land N times, and your score is based on N consecutive plays. The value of N depends on how 'fast' the land is to play, and how random it is.\n\nIn the Caribbean, you can access Orbs of Thorns, Aether, and Space if you have ever collected 25 treasure in their native lands.\n\nThe rate of treasure spawn is static in this mode. It is not increased by killing monsters.\n\nGood luck, and have fun!" + "W trybie taktycznym skupiasz siÄ™ na jednej krainie. Twoim celem jest zdobycie jak najwyĹĽszego wyniku, bez uĹĽywania elementĂłw pozostaĹ‚ych krain. MoĹĽesz potem porĂłwnać wyniki ze znajomymi!\n\nMusisz sobie dobrze radzić w normalnej grze, by odblokować danÄ… krainÄ™ tutaj (zbierz 20 skarbĂłw w danym Ĺ›wiecie, albo 2 w przypadku Camelot).\n\nZdobywanie wysokich wynikĂłw w niektĂłrych krainach jest zaleĹĽne od szczęścia, zatem grasz kaĹĽdÄ… krainÄ™ N razy, a TwĂłj wynik jest oparty na N kolejnych grach. Wartość N zaleĹĽy od tego, jak 'szybko' gra siÄ™ w krainie i jak bardzo jest losowa.\n\nNa Karaibach masz dostÄ™p do Sfery Cierni, Eteru i Przestrzeni, jeĹĽeli kiedylkolwiek zebra%Ĺ‚eĹ›0 25 skarbĂłw w ich natywnych krainach.\n\nSzybkość generowania skarbĂłw jest staĹ‚a w tym trybie, nie powiÄ™ksza siÄ™ wraz z zabijaniem potworĂłw.\n\nPowodzenia i miĹ‚ej zabawy!", + "Saf taktik modunda sadece tek bir diyara odaklanırsın. Amacın diÄźer diyarların özelliklerini hiç kullanmadan mĂĽmkĂĽn olduÄźunca yĂĽksek puan yapmak. Sonra skorunu arkadaĹźlarınınkiyle karşılaĹźtırabilirsin!\n\n Normal oyunda maharetini ispatlayarak belli bir diyarı bu modda açabilirsin. (Belli bir diyarda 20 hazine toplamak, Kamelot için 2 hazine toplamak gibi).\n\nYĂĽksek skor almak şöyle böyle Ĺźansa baÄźlı olduÄźundan, her diyarı N defa oynarsın ve skorun bu ardarda N oyuna göre belirlenir. N'in deÄźeri diyarın ne kadar hızlı oynandığına ve ne derece rassal olduÄźuna göre deÄźiĹźir.\n\nKarayiplerde, Diken KĂĽresine, Ether'e ve Uzay'a eÄźer daha önce ilgili diyarlarda 25'er hazine topladıysan eriĹźebilirsin.\n\nHazine ĂĽretimi bu modda statiktir ve canavar öldĂĽrmekle artmaz.\n\nÄ°yi Ĺźanslar ve iyi eÄźlenceler!", + "V taktickĂ©m mĂłdu se soustĹ™edíš pouze na jeden specifickĂ˝ kraj. TvĂ˝m cĂ­lem je zĂ­skánĂ­ co nejvyššího skĂłre, bez pouĹľitĂ­ jakĂ˝chkoli prvkĹŻ jinĂ˝ch krajĹŻ. Potom si svĂ© skĂłre mĹŻĹľeš porovnat s přáteli!\n\nAbys v tomto mĂłdu odemkl urÄŤitĂ˝ kraj, musíš bĂ˝t alespoĹ trochu dobrĂ˝ ve standardnĂ­ hĹ™e (zĂ­skat 20 pokladĹŻ v danĂ©m kraji, 2 v případÄ› Camelotu).\n\nVzhledem k tomu, Ĺľe zĂ­skánĂ­ vysokĂ©ho skĂłre v nÄ›kterĂ˝ch krajĂ­ch ponÄ›kud závisĂ­ na štÄ›stĂ­, budeš kaĹľdĂ˝ kraj hrát N-krát a tvĂ© skĂłre bude zaloĹľeno na N po sobÄ› jdoucĂ­ch hrách. Hodnota N se odvĂ­jĂ­ od 'rychlosti' a náhodnosti danĂ©ho kraje.\n\nV Karibiku budeš mĂ­t k dispozici SfĂ©ry TrnĹŻ, Éteru a Prostoru, pokud jsi nÄ›kdy zĂ­skal 25 pokladĹŻ v jejich rodnĂ˝ch krajĂ­ch.\n\nGenerovánĂ­ pokladĹŻ je v tomto mĂłdu statickĂ©. Nezvyšuje se zabĂ­jenĂ­m netvorĹŻ.\n\nHodnÄ› štÄ›stĂ­, a dobĹ™e se bavte!", + "Đ’ тактичеŃком режиме Đ’Ń‹ концентрирŃетеŃŃŚ на одной земле. Цель - ĐĽĐ°ĐşŃимизировать Ńчёт,не иŃпользŃŃŹ ĐľŃобенноŃти Đ´Ń€Ńгих земель. Đ’Ń‹ можете Ńравнить Ńвои резŃльтаты Ń Ń€ĐµĐ·Ńльтатами Đ´Ń€Ńзей!\n\nĐ’Ń‹ должны быть Đ´ĐľŃтаточно опытным в обычной игре, чтобы открыть землю здеŃŃŚ (Ńоберите в ней 20 Ńокровищ, или 2 в ŃĐ»Ńчае Камелота).\n\nТак как резŃльтаты в некоторых землях могŃŃ‚ завиŃеть от ŃĐ»Ńчая, Đ’Đ°ĐĽ Đ˝Ńжно Ńыграть N раз, и Ńчёт завиŃит от N поŃледовательных игр. Значение N завиŃит от того, наŃколько быŃтро проходит игра, и наŃколько она завиŃит от ŃĐ»Ńчая.\n\nНа Карибах Đ’Đ°ĐĽ Đ´ĐľŃŃ‚Ńпны Ńферы Шипов, Эфира и ПроŃтранŃтва, еŃли Đ’Ń‹ Ńобрали 25 Ńокровищ в их родных землях.\n\nЧаŃтота появления Ńокровищ здеŃŃŚ поŃтоянна, она не завиŃит от количеŃтва Ńбитых монŃтров.\n\nУдачи и приятного времяпровождения!", + "Im Strategiemodus konzentrierst du dich auf ein einziges Land. Das Ziel ist es eine möglichst hohe Punktzahl zu erreichen ohne features anderer Länder zu nutzen. Du kannst deine Punktzahl mit denen deiner Freunde vergleichen!\n\nDu musst im normalen Spiel etwas erfahrener sein um das Land in dieser Herausforderung freizuschalten. (Sammle 20 Schätze im jeweiligem Land, oder 2 im Fall von Camelot).\n\nDa die Punktzahl in manchen Ländern sehr glĂĽcksbasierend sein kann, wird jedes Land N mal gespielt und die Punktzahl basiert auf N Durchläufen. Die Anzahl N hängt davon ab wie 'schnell' und zufällig das Land ist.\n\nIn der Karibik hast du Zugriff auf den Orb der Dornen, den Orb des Aether und den Orb des Raumes wenn zuvor 25 Schätze in ihren Heimatländern gesammelt wurden.\n\nDie Anzahl der Schätze in diesem Modus ist festgelegt und wird nicht durch das Töten von Monstern erhöht.\n\nViel GlĂĽck und Erfolg!", + }}, + {0x4d8ebaab, { // "This gate separates the warped area from the normal land." + "Ta brama oddziela strefÄ™ zakrzywionÄ… od normalnych krain.", +/*MISSING*/ "This gate separates the warped area from the normal land.", + "Tato brána oddÄ›luje pokĹ™ivenou oblast od normálnĂ­ch krajĹŻ.", + "Эти врата отделяют иŃкривлённые земли от обычных.", + "Dieses Tor trennt den verzerrten Bereich vom normalen Land.", + }}, + {0x4da1cb53, { // "Those large seabirds attack you for some reason. At least they are not as fast as Eagles..." + "Te wielkie morskie ptaki atakujÄ… CiÄ™ z jakiegoĹ› powodu. Przynajmniej nie sÄ… tak szybkie, jak OrĹ‚y...", + "Bu iri denizkuĹźları sana nedense saldırıyor. En azından kartallar kadar hızlı deÄźiller.", + "Tito velcĂ­ mořštĂ­ ptáci na tebe z nÄ›jakĂ©ho dĹŻvodu ĂştoÄŤĂ­. AspoĹ Ĺľe nejsou tak rychlĂ­ jako Orli...", + "Эти больŃие морŃкие птицв почемŃ-Ń‚Đľ Đ°Ń‚Đ°ĐşŃŃŽŃ‚ Đ’Đ°Ń. Они хотя бы не такие быŃтрые, как Орлы...", + "Diese groĂźen Seevögel greifen dich aus irgendeinem Grund an. Wenigstens sind sie langsamer als Adler...", + }}, + {0x4da25981, { // "spin up" + "obróć w gĂłrÄ™", +/*MISSING*/ "spin up", + "otoÄŤ nahoru", + "вращать вверх", + "herunterdrehen", + }}, + {0x4dd6967c, { // "next page" + "kolejna strona", +/*MISSING*/ "next page", + "další stránka", + "ŃледŃющая Ńтраница", + "nächste Seite", + }}, + {0x4dea6545, { // "Many lands in HyperRogue are based around periodic patterns. For example, both Zebra and Windy Plains are based on the pattern shown in the previous slide. Such lands often have tree-like nature." + "Wiele krain jest opartych na okresowych wzorach. Na przykĹ‚ad Zebra i Wietrzna RĂłwnina sÄ… obie oparte na wzorze z poprzedniego slajdu. Krainy takie majÄ… zwykle drzewiastÄ… strukturÄ™.", +/*MISSING*/ "Many lands in HyperRogue are based around periodic patterns. For example, both Zebra and Windy Plains are based on the pattern shown in the previous slide. Such lands often have tree-like nature.", + "HyperRogue obsahuje Ĺ™adu krajĹŻ, kterĂ© jsou zaloĹľenĂ© na periodickĂ˝ch vzorech. Tak například Zebra a VÄ›trnĂ© plánÄ› jsou obÄ› zaloĹľenĂ© na vzoru na pĹ™edešlĂ©m snĂ­mku. Tyto kraje mĂ­vajĂ­ ÄŤasto stromovou povahu.", + "Многие земли ĐľŃнованы на периодичеŃких Ńзорах. Например, Зебра и Ветреная Равнина Ńодержат Ńзоры Ń ĐżŃ€ĐµĐ´Ń‹Đ´Ńщего Ńлайда. Такие земли чаŃŃ‚Đľ имеют древовиднŃŃŽ ŃŃ‚Ń€ŃктŃŃ€Ń.", +/*MISSING*/ "Many lands in HyperRogue are based around periodic patterns. For example, both Zebra and Windy Plains are based on the pattern shown in the previous slide. Such lands often have tree-like nature.", + }}, + {0x4e2aa36d, { // "In the Chaos mode, lands change very often, and there are no walls between them. Some lands are incompatible with this.\n\nYou need to reach Crossroads IV to unlock the Chaos mode." + "W trybie Chaosu krainy zmieniajÄ… siÄ™ bardzo czÄ™sto i nie ma miÄ™dzy nimi Ĺ›cian. NiektĂłre krainy sÄ… niekompatybilne z tym trybem.\n\nMusisz dotrzeć do SkrzyĹĽowania IV, by odblokować tryb Chaosu.", +/*MISSING*/ "In the Chaos mode, lands change very often, and there are no walls between them. Some lands are incompatible with this.\n\nYou need to reach Crossroads IV to unlock the Chaos mode.", + "V chaotickĂ©m mĂłdu se kraje mÄ›nĂ­ velice ÄŤasto a nejsou mezi nimi žádnĂ© stÄ›ny. NÄ›kterĂ© kraje nejsou s tĂ­mto mĂłdem kompatibilnĂ­.\n\nChaotickĂ˝ mĂłd musíš odemknout tĂ­m, Ĺľe dojdeš na KĹ™iĹľovatku IV.", + "Đ’ режиме ĐĄĐ°ĐľŃĐ° земли меняютŃŃŹ очень чаŃŃ‚Đľ, и ĐĽĐµĐ¶Đ´Ń Đ˝Đ¸ĐĽĐ¸ нет Ńтен. Некоторые земли неŃовмеŃтимы Ń ŃŤŃ‚Đ¸ĐĽ режимом.\n\nĐ’Ń‹ должны Đ´ĐľŃтичь ПерекрёŃтка IV, чтобы открыть режим ĐĄĐ°ĐľŃĐ°.", + "Im Chaos-Modus wechseln die Ländern sehr oft und es gibt keine Wände zwischen ihnen. Einige Länder sind damit inkompatibel.\n\nDu musst die Kreuzungen IV erreichen, um den Chaos-Modus freizuschalten.", + }}, + {0x4e47b5a2, { // "0 = asymmetry" + "0 = asymetria", + "0 = asimetri", + "0 = asymetrie", + "0 = Đ°Ńимметрия", + "0 = Asymmetrie", + }}, + {0x4e6892d5, { // "Welcome to HyperRogue" + "Witaj w HyperRogue", + "HyperRogue'a hoĹźgeldin", + "VĂ­tej ve hĹ™e HyperRogue", + "Добро пожаловать в HyperRogue", + "Willkommen bei HyperRogue", + }}, + {0x4eb120ee, { // "player 5 X" + "gracz 5 X", +/*MISSING*/ "player 5 X", + "hráč 5 X", + "игрок 5 X", + "Spieler 5 X", + }}, + {0x4eb120ef, { // "player 5 Y" + "gracz 5 Y", +/*MISSING*/ "player 5 Y", + "hráč 5 Y", + "игрок 5 Y", + "Spieler 5 Y", + }}, + {0x4f0a247c, { // "Equidistants are curves which are at some fixed distance from a straight line. Some lands in HyperRogue are based on equidistants; you should see them after wandering a bit more.\n\nThis tutorial gives you freedom to go wherever you choose, but we do not recommend going deep into the Dungeon or the Ocean -- getting back might be difficult." + "Ekwidystanty to krzywe w staĹ‚ej odlegĹ‚oĹ›ci od linii prostej. NiektĂłre krainy w grze sÄ… oparte na ekwidystantach; po krĂłtkiej podróży je zobaczysz.\n\nTen podrÄ™cznik pozwala Ci siÄ™ ruszać dokÄ…d chcesz, ale nie polecamy zagĹ‚Ä™biać siÄ™ w Lochy ani w Ocean -- powrĂłt moĹĽe być trudny.", +/*MISSING*/ "Equidistants are curves which are at some fixed distance from a straight line. Some lands in HyperRogue are based on equidistants; you should see them after wandering a bit more.\n\nThis tutorial gives you freedom to go wherever you choose, but we do not recommend going deep into the Dungeon or the Ocean -- getting back might be difficult.", + "Ekvidistanty jsou kĹ™ivky, kterĂ© majĂ­ urÄŤitou danou vzdálenost od nÄ›jakĂ© přímky. V HyperRogue jsou kraje, kterĂ© jsou na ekvidistantách zaloĹľeny; kdyĹľ budeš putovat dál, mÄ›l bys na nÄ› narazit.\n\nV tomto tutoriálu se mĹŻĹľeš vydat, kam se ti zlĂ­bĂ­, ale doporuÄŤujeme, abys nechodil příliš hluboko do Ĺ˝aláře nebo do Oceánu -- mohl bys mĂ­t problĂ©m vrátit se zpátky.", + "ЭквидиŃтантой называетŃŃŹ кривая, ŃĐľŃтоящая из точек на фикŃированном раŃŃтоянии от прямой. Некоторые земли ĐľŃнованы на эквидиŃтантах; Ń‚Ń‹ ŃвидиŃŃŚ их через некоторое время.\n\nĐ­Ń‚Đľ Ń€ŃководŃтво позволяет идти ĐşŃĐ´Đ° Ńгодно, но ĐĽŃ‹ не рекомендŃем забиратьŃŃŹ глŃбоко в Подземелье или Океан -- возвращение может оказатьŃŃŹ Ń‚Ń€Ńдным.", +/*MISSING*/ "Equidistants are curves which are at some fixed distance from a straight line. Some lands in HyperRogue are based on equidistants; you should see them after wandering a bit more.\n\nThis tutorial gives you freedom to go wherever you choose, but we do not recommend going deep into the Dungeon or the Ocean -- getting back might be difficult.", + }}, + {0x4f429a41, { // "draw the grid" + "rysowanie siatki", +/*MISSING*/ "draw the grid", + "vykreslovánĂ­ møíky", + "риŃовать ŃеткŃ", +/*MISSING*/ "draw the grid", + }}, + {0x4f9581a9, { // "hardcore mode" + "tryb hardcore", + "AĹźmış mod", + "hardcore mĂłd", + "режим hardcore", + "Hardcore Modus", + }}, + {0x4f9d2e28, { // "gain orb powers" + "Moce sfer", + "kĂĽre güçleri kazan", + "zĂ­skej moc sfĂ©ry", + "полŃчить ŃĐ¸Đ»Ń Ńфер", + "erhalte Orbkräfte", + }}, + {0x4fbeb090, { // "Trolls of Trollheim are descendants of a bridge Troll, who collected payments from people crossing the bridge. One of them paid with golden eggs. The bridge Troll found the eggs beautiful, but he quickly lost them. Golden eggs are still revered by Trolls, and you can find them in their caves." + "Trolle z Trollheim sÄ… potomkami Trolla, ktĂłry pobieraĹ‚ myto od osĂłb przechodzÄ…cych mostem. Jeden z podróżnych zapĹ‚aciĹ‚ zĹ‚otymi jajami. Jaja bardzo spodobaĹ‚y siÄ™ naszemu Trollowi, ale szybko je zgubiĹ‚. Trolle z Trollheim wciÄ…ĹĽ darzÄ… zĹ‚ote jaja wielkim powaĹĽaniem i moĹĽesz znaleźć je w ich legowiskach.", +/*MISSING*/ "Trolls of Trollheim are descendants of a bridge Troll, who collected payments from people crossing the bridge. One of them paid with golden eggs. The bridge Troll found the eggs beautiful, but he quickly lost them. Golden eggs are still revered by Trolls, and you can find them in their caves.", + "TrollovĂ© z Trollheimu jsou potomky trolla, kterĂ˝ hlĂ­dal most a vybĂ­ral mĂ˝tnĂ© od tÄ›ch, kdo po nÄ›m chtÄ›li pĹ™ejĂ­t. Jeden z nich zaplatil zlatĂ˝mi vejci. Trollovi tato vejce pĹ™išla moc krásná, ale rychle je ztratil. TrollovĂ© uctĂ­vajĂ­ zlatá vejce dodnes a mĹŻĹľete je najĂ­t v jejich jeskynĂ­ch.", + "Đ’Ńе тролли здеŃŃŚ -- потомки Тролля ĐĽĐľŃŃ‚Đ°, ŃобиравŃего ĐżĐ»Đ°Ń‚Ń Ń Đ»ŃŽĐ´ĐµĐą, переŃекавŃих ĐĽĐľŃŃ‚. Один из них заплатил золотыми яйцами. Тролль Ńчёл эти яйца прекраŃными, но вŃкоре потерял. Тролли по-ĐżŃ€ĐµĐ¶Đ˝ĐµĐĽŃ ĐżĐľŃ‡Đ¸Ń‚Đ°ŃŽŃ‚ Золотые яйца, и вы можете найти их в меŃтных пещерах.", + "Die Trolle von Trollheim sind Nachfahren eines BrĂĽckentrolls, der Wegzölle von allen gesammelt hat, die die BrĂĽcke ĂĽberquerten. Einer von ihnen bezahlte mit goldenen Eiern.Der BrĂĽckentroll fand die Eier sehr schön, aber verlor sie bald darauf. Die Eier werden von den Trollen noch immer verehrt, und du kannst sie in ihren Höhlen finden.", + }}, + {0x4fd9ea92, { // "Alternatively: kill a %1 in %the2.\n" + "Alternatywnie: zabij %a1 %abl2.\n", +/*MISSING*/ "Alternatively: kill a %1 in %the2.\n", + "AlternativnÄ›: zabij %a1 %abl2.\n", + "Đльтернатива: Ńбить %a1 %abl2.\n", + "Alternativ: töte einen %a1 %d2.\n", + }}, + {0x4fdb418c, { // "High detail range" + "ZasiÄ™g wysokiego poziomu szczegółów", +/*MISSING*/ "High detail range", + "Rozsah vysokĂ˝ch detailĹŻ", + "Зона выŃокой детализации", +/*MISSING*/ "High detail range", + }}, + {0x4ff0f741, { // "z = zoom in" + "z = zbliĹĽenie", + "z = yaklaĹź", + "z = pĹ™iblĂ­ĹľenĂ­", + "z = приблизить", + "z = reinzoomen", + }}, + {0x50b9b5d3, { // "restart game" + "gra od nowa", + "oyunu yeniden baĹźlat", + "restartovat hru", + "играть заново", + "Neustart", + }}, + {0x514c6466, { // "Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$." + "Zabit%ya1 %1 moĹĽe zostać przywrĂłcona do ĹĽycia SferÄ… MiĹ‚oĹ›ci, po zdobyciu 20 dodatkowych $$$.", +/*MISSING*/ "Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$.", + "Zabit%Ă©ho1 %a1 je moĹľnĂ© oĹľivit pomocĂ­ SfĂ©ry Lásky, ale pĹ™edtĂ­m musíš zĂ­skat ještÄ› 20 $$$.", + "Убит%y1 %1 может быть оживлён при помощи Сферы любви, когда Đ’Ń‹ Ńоберёте ещё 20 $$$.", +/*MISSING*/ "Killed %1 can be revived with Orb of the Love, after you collect 20 more $$$.", + }}, + {0x51679fa7, { // "display the triheptagonal grid" + "pokaĹĽ siatkÄ™ triheptagonalnÄ…", +/*MISSING*/ "display the triheptagonal grid", + "zobraz triheptagonálnĂ­ mřížku", + "показать трёх-Ńеми-ŃгольнŃŃŽ ŃеткŃ", + "Zeige das tri-heptagonale Gitter an", + }}, + {0x517de5e8, { // "random black-and-white" + "losowy czarno-biaĹ‚y wzorek", + "rastgle siyah-beyaz", + "náhodnĂ˝ ÄŤernobĂ­lĂ˝ vzor", + "ŃĐ»Ńчайный чёрно-белый", + "Zufalls Schwarz und WeiĂź", + }}, + {0x51b360ed, { // "this Orb is never unlocked globally (only hubs)" + "ta Sfera wystÄ™puje tylko w centrach", + "bu KĂĽre hiç tĂĽm dĂĽnya için aktif edilmedi (sadece yerelde)", + "tato SfĂ©ra nenĂ­ nikdy odemÄŤena globálnÄ› (pouze v centrálnĂ­ch krajĂ­ch)", + "ŃŤŃ‚Đ° Ńфера открываетŃŃŹ только Ń‹ Центрах", + "Dieser Orb wird niemals global freigeschaltet", + }}, + {0x51c52bbd, { // "Halloween mini-game" + "mini-gra Halloween", +/*MISSING*/ "Halloween mini-game", + "mini-gra Halloween", + "мини-игра ХэллоŃин", +/*MISSING*/ "Halloween mini-game", + }}, + {0x520faa64, { // "Your total kills" + "ĹÄ…czne zabicia", + "Toplam leĹźler", + "CelkovĂ˝ poÄŤet zabitĂ˝ch netvorĹŻ", + "Đ’Ńего ŃбийŃтв", + "Deine Gesamtkills", + }}, + {0x5250bde7, { // "Orb power (target: mouse)" + "moc sfery (cel: mysz)", +/*MISSING*/ "Orb power (target: mouse)", + "PouĹľitĂ­ SfĂ©ry (zaměřenĂ­ myší)", + "активировать ŃферŃ", + "Orbkraft (Ziel: Maus)", + }}, + {0x52db38db, { // "level to save/load:" + "mapa do zapisu/wczytania:", + "kaydedilecek/yĂĽklenecek bölĂĽm", + "mapa k uloĹľenĂ­/nahránĂ­:", + "карты для загрŃзки/Ńохранения:", + "Level zum speichern/laden:", + }}, + {0x530987e8, { // "Dragons are powerful monsters. They are slow, but evil, and love to pick on creatures who are even slower than them. They must be stopped!\n\nA Dragon moves each two turns. It may attack with all its segments, or move its whole body forwards or backwards, it may also move a frontal part backwards. To kill a Dragon, you need to hit each of its segments. The head will regenerate on the turns the Dragon is not moving, so you will usually have to hit it with your last attack; otherwise, if the head is healthy, it may breathe fire (at range 3), losing the hitpoint. Killing the Dragon while still in the Dragon Chasms gives you treasure." + "Smoki to potężne bestie. SÄ… powolne, ale bardzo zĹ‚e, uwielbiajÄ… znÄ™cać siÄ™ nad stworzeniami, ktĂłre sÄ… od nich jeszcze wolniejsze. Musisz je powstrzymać!\n\nSmok rusza siÄ™ co dwie kolejki. MoĹĽe atakować kaĹĽdym segmentem, ruszyć caĹ‚e swoje ciaĹ‚o do przodu lub do tyĹ‚u albo ruszyć poczÄ…tkowy fragment do tyĹ‚u. By pokonać Smoka, musisz uderzyć kaĹĽdy z jego segmentĂłw. GĹ‚owa siÄ™ regeneruje w kolejkach, podczas ktĂłrych Smok siÄ™ nie rusza, takĹĽe zwykle musi być atakowana ostatnia; jeĹ›li gĹ‚owa jest zdrowa, moĹĽe zionąć ogniem (zasiÄ™g 3), tracÄ…c punkt ĹĽycia. Za pokonanie Smoka (bÄ™dÄ…c wciÄ…ĹĽ w Smoczych OtchĹ‚aniach) dostajesz skarby.", +/*MISSING*/ "Dragons are powerful monsters. They are slow, but evil, and love to pick on creatures who are even slower than them. They must be stopped!\n\nA Dragon moves each two turns. It may attack with all its segments, or move its whole body forwards or backwards, it may also move a frontal part backwards. To kill a Dragon, you need to hit each of its segments. The head will regenerate on the turns the Dragon is not moving, so you will usually have to hit it with your last attack; otherwise, if the head is healthy, it may breathe fire (at range 3), losing the hitpoint. Killing the Dragon while still in the Dragon Chasms gives you treasure.", + "Draci jsou mocnĂ­ netvoĹ™i. Jsou pomalĂ­, ale zlĂ­, a moc rádi si dovolujĂ­ na ty, kdo jsou ještÄ› pomalejší neĹľ oni. Musíš je zastavit!\n\nDrak se pohybuje vĹľdy jednou za dvÄ› kola. MĹŻĹľe zaĂştoÄŤit všemi svĂ˝mi segmenty, posunout celĂ© svĂ© tÄ›lo dopĹ™edu nebo dozadu, nebo stáhnout dozadu pĹ™ednĂ­ část tÄ›la. Abys je zabil, musíš zasáhnout všechny jeho segmenty. KdyĹľ se Drak nehĂ˝be, jeho hlava automaticky zregeneruje, takĹľe ji budeš obvykle musez zasáhnout poslednĂ­m Ăştokem; pokud je hlava zdravá, mĹŻĹľe drak chrlit oheĹ (na vzdálenost 3 polĂ­), coĹľ jĂ­ vezme jeden Ĺľivot. ZabitĂ­m Draka v DraÄŤĂ­ch propastech zĂ­skáš poklady.", + "Драконы -- очень Ńильные ŃŃщеŃтва. Они медленные, но злые, и любят издеватьŃŃŹ над ŃŃщеŃтвами, которые ещё медленнее. ĐžŃтановите их!\n\nДракон движетŃŃŹ каждый второй ход. Он может атаковать любой Ńвоей чаŃŃ‚ŃŚŃŽ, либо передвинŃŃ‚ŃŚŃŃŹ вперёд или назад, либо передвинŃŃ‚ŃŚ переднюю чаŃŃ‚ŃŚ назад. Чтобы Ńбить дракона, Đ˝Ńжно Ńдарить каждŃŃŽ его чаŃŃ‚ŃŚ. Голова регенерирŃет каждый ход, когда дракон не движетŃŃŹ, Ń‚Đ°Đş что обычно её придётŃŃŹ бить поŃледней; еŃли голова здорова, дракон может Đ´Ń‹ŃĐ°Ń‚ŃŚ огнём (дальноŃŃ‚ŃŚ 3), тратя ĐľĐ´Đ˝Ń Đ¶Đ¸Đ·Đ˝ŃŚ. Đ—Đ° ŃбийŃтво дракона в Драконьей бездне вы полŃчите наградŃ.", + "Drachen sind mächtige Monster. Sie sind langsam, aber böse, und lieben es Wesen zu schikanieren, die noch langsamer sind als sie. Sie mĂĽssen gestoppt werden!\n\nEin Drachen bewegt sich alle zwei ZĂĽge. Er kann mit all seinen Segmenten angreifen, oder seinen ganzen Körper vorwärts oder rĂĽckwärts bewegen, oder vordere Segmente rĂĽckwärts bewegen. Um einen Drachen zu töten, musst du jedes seiner Segmente treffen. Der Kopf regeneriert sich während der ZĂĽge, in denen der Drache sich nicht bewegt, daher solltest du diesen zuletzt treffen; andernfalls kann ein gesunder Kopf Feuer speien (im Radius 3) und dabei seinen Hitpoint verlieren. Den Drachen zu töten wird dir Schätze bescheren.", + }}, + {0x53391ee5, { // "The paper model created as papermodel-*.bmp" + "Model stworzony jako papermodel-*.bmp", + "Kâğıt model papermodel-*.bmp Ĺźeklinde ĂĽretildi", + "PapĂ­rovĂ˝ model byl vytvoĹ™en jako papermodel-*.bmp", + "Модель Ńохранена как papermodel-*.bmp", + "Das Papiermodell wurde als papermodel-*.bmp erzeugt", + }}, + {0x537619eb, { // "Welcome to Halloween!" + "Witaj w Halloween!", +/*MISSING*/ "Welcome to Halloween!", + "VĂ­tejte v Halloweenu!", + "Добро пожаловать на ХэллоŃин!", +/*MISSING*/ "Welcome to Halloween!", + }}, + {0x539a39d3, { // "This cell is partially on fire." + "To pole częściowo siÄ™ pali.", + "Bu hĂĽcre kısmen alevler içinde.", + "Toto polĂ­ÄŤko částeÄŤnÄ› hoří.", + "Đ­Ń‚Đ° клетка чаŃтично в огне.", + "Diese Zelle brennt teilweise.", + }}, + {0x53c8b5d8, { // "Quest status" + "Stan misji", + "Görev durumu", + "Stav ĂşkolĹŻ", + "СтатŃŃ ĐĽĐ¸ŃŃии", + "Queststatus", + }}, + {0x53ca77b3, { // "Collect 10 treasures in various lands to unlock the challenges there" + "Zdobywaj 10 skarbĂłw w różnych krainach, by odblokowywać misje", + "Diyarlardaki ek görevleri aktif etmek için oralarda 10 hazine topla.", + "Tyto mise odemkneš zĂ­skánĂ­m 10 pokladĹŻ v rĹŻznĂ˝ch krajĂ­ch", + "Собирайте 10 Ńокровищ в разных землях, чтобы открыть миŃŃии здеŃŃŚ", + "Sammle 10 Schätze in den verschiedenen Ländern um Herausforderungen freizuschalten", + }}, + {0x53f26d78, { // "Collect %1x %2 to unlock" + "Zbierz %1x %2 by odblokować", + " %1 tane %2 toplayarak aktifleĹźtir", + "Pro odemknutĂ­ zĂ­skej %1x %2", + "Соберите %1x %2, чтобы разблокировать", + "Sammle %1x %2 zum Freischalten", + }}, + {0x5466eb5d, { // "c = copy" + "b = brzeg", + "b = kopya", + "w = zdi", + "w = Ńтены", + "b = Kopieren", + }}, + {0x546da5c3, { // "forbidden to find in %the1" + "zakazana %abl1", + "%abl1 bulmak yasak.", + "zakázaná %abl1", + "запрещена %abl1", + "verboten in %der1 etwas zu finden", + }}, + {0x546ecfbd, { // "Date: %1 time: %2 s " + "Data: %1 czas: %2 s ", + "Tarih: %1 zaman: %2 s ", + "Datum: %1 ÄŤas: %2 s ", + "Дата: %1 время: %2 s ", + "Datum: %1 Zeit: %2 s ", + }}, + {0x54c2ea87, { // "Fractal landscapes" + "Fraktalne krajobrazy", +/*MISSING*/ "Fractal landscapes", + "FraktálnĂ­ krajinky", + "Фрактальные пейзажи", +/*MISSING*/ "Fractal landscapes", + }}, + {0x54fb4344, { // "This boat cannot go through the sand. But if you sit inside and wait for the tide, you will be able to use it to travel through the Ocean." + "Ta Ĺ‚Ăłdka nie moĹĽe pĹ‚ywać przez piasek. Ale jeĹ›li w niej usiÄ…dziesz i poczekasz na przypĹ‚yw, bÄ™dziesz mĂłc pĹ‚ynąć przez Ocean.", + "Bu bot kumda hareket edemez. Ama içine oturur ve dalgayı beklersen bunu OKyanus'ta seyahat etmek için kullanabilirsin.", + "Tento ÄŤlun nemĹŻĹľe plout po pĂ­sku. Ale pokud si do nÄ›j sedneš a poÄŤkáš na příliv, mĹŻĹľeš na nÄ›m cestovat pĹ™es Oceán.", + "Đ­Ń‚Đ° лодка не может пройти Ńквозь пеŃок. Но еŃли вы Ńядете внŃтрь и дождётеŃŃŚ прилива, Đ’Ń‹ Ńможете ей воŃпользоватьŃŃŹ.", + "Dieses Boot kann nicht durch den Sand schwimmen. Wartest du allerdings bis zur Flut, kannst du damit durch den Ozean reisen.", + }}, + {0x551495b5, { // "A precious metal from the Dead Caves." + "Drogocenny metal z Martwej Jaskini.", + "Ă–lĂĽ maÄźaralardan çıkan deÄźerli bir metal.", + "VzácnĂ˝ kov z MrtvĂ© jeskynÄ›.", + "Драгоценный металл из Мёртвых пещер.", + "Ein wertvolles Metall aus den toten Höhlen.", + }}, + {0x55183080, { // "A being made of stone, who likes high buildings. It becomes normal stone when killed, but only if next to something stable -- otherwise it falls." + "Stworzenie wykonane z kamienia, lubi wysokie budynki. Zamienia siÄ™ w normalny kamieĹ„, gdy go zabijesz, ale tylko, gdy stanie siÄ™ to obok czegoĹ› stabilnego -- w przeciwnym razie spada.", + "YĂĽksek binaları seven taĹźtan yapılmış bir yaratık. Ă–ldĂĽrĂĽldüğünde eÄźer duraÄźan bir Ĺźeyin yanındaysa normal taĹź haline gelir, yoksa dĂĽĹźer.", + "Kamenná bytost, která má ráda vysokĂ© budovy. Po smrti se promÄ›nĂ­ v obyÄŤejnĂ˝ kámen, ale pouze tehdy, kdyĹľ je vedle něčeho stabilnĂ­ho -- jinak spadne.", + "СŃщеŃтво из камня, выглядящее как выŃокое здание. СтановитŃŃŹ камнем, когда Ńмирает, еŃли рядом еŃŃ‚ŃŚ что-Ń‚Đľ Ńтабильное -- иначе падает.", + "Ein Wesen aus Stein das hohe Gebäude mag. Es wird zu normalem Stein wenn es stirbt, vorausgesetzt es ist neben etwas Stabilem. Ansonsten fällt es.", + }}, + {0x55361341, { // "There are several species of trolls living in the hyperbolic world. Some of them leave this wall behind them when they die." + "W hiperbolicznym Ĺ›wiecie ĹĽyje kilka gatunkĂłw trolla. NiektĂłre z nich zostawiajÄ… takÄ… Ĺ›cianÄ™, gdy siÄ™ je zabije.", + "Hiperbolik dĂĽnyada pek çok tĂĽr trol yaĹźar.Bazıları öldüğünde bu duvarı geride bırakır.", + "V hyperbolickĂ©m svÄ›tÄ› Ĺľije nÄ›kolik druhĹŻ trollĹŻ. NÄ›kteří z nich se po smrti promÄ›nĂ­ v tuto zeÄŹ.", + "Đ’ гиперболичеŃком мире еŃŃ‚ŃŚ неŃколько видов троллей. Некоторые из них при Ńмерти превращаютŃŃŹ в Ń‚Đ°ĐşŃŃŽ ŃтенŃ.", + "Es gibt mehrere verschiedene Trollgattungen in der hyperbolischen Welt. Manche von ihnen hinterlassen Wände wenn sie sterben.", + }}, + {0x556f6411, { // "This might be very useful for devices with limited memory." + "To moĹĽe być bardzo przydatne na urzÄ…dzeniach z ograniczonÄ… pamiÄ™ciÄ….", +/*MISSING*/ "This might be very useful for devices with limited memory.", + "To mĹŻĹľe bĂ˝t velmi uĹľiteÄŤnĂ© pĹ™i hĹ™e na zařízenĂ­ch s omezenou pamÄ›tĂ­.", + "Đ­Ń‚Đľ может быть полезно для ŃŃтройŃтв Ń ĐľĐłŃ€Đ°Đ˝Đ¸Ń‡ĐµĐ˝Đ˝ĐľĐą памятью.", + "Das kann sehr nĂĽtzlich fĂĽr Geräte mit begrenztem Speicher sein.", + }}, + {0x5578b72d, { // "\"Our Table seats %1 Knights!\"" + "\"Przy naszym stole mieĹ›ci siÄ™ %1 Rycerzy!\"", + "\"Masamızda %1 Şövalye oturuyor!\"", + "\"U našeho stolu sedĂ­ %1 rytířů!\"", + "\"Đ—Đ° наŃим Ńтолом Ńидит %1 рыцарей!\"", + "\"An unserer Tafel sitzen %1 Ritter!\"", + }}, + {0x55879513, { // "item" + "przedmiot", + "eĹźya", + "pĹ™edmÄ›t", + "предмет", + "Item", + }}, + {0x55b23682, { // "enable/disable texts" + "wĹ‚Ä…cz/wyĹ‚Ä…cz teksty", +/*MISSING*/ "enable/disable texts", + "zapnout/vypnout texty", + "включить/выключить текŃŃ‚Ń‹", +/*MISSING*/ "enable/disable texts", + }}, + {0x55d8e966, { // "\nRanged Orbs can be targeted by shift-clicking the desired location. " + "\nRobi siÄ™ to przez klikniÄ™cie na celu z Shiftem.", +/*MISSING*/ "\nRanged Orbs can be targeted by shift-clicking the desired location. ", + "\nTyto sfĂ©ry lze zacĂ­lovat kliknutĂ­m na poĹľadovanĂ© polĂ­ÄŤko se stisknutou klávesou Shift.", + "\nВыбор цели Ńферы определяетŃŃŹ щелчком ĐĽŃ‹Ńи на цели Ń Đ·Đ°Đ¶Đ°Ń‚Ń‹ĐĽ Shift'ом.", + "\nMit Distanzorbs kann per Shift-Klick auf die gewĂĽnschte Position gezielt werden. ", + }}, + {0x55fa9e37, { // "Known mines may be marked by pressing 'm'. Your allies won't step on marked mines." + "Znane miny moĹĽna oznaczać naciskajÄ…c 'm'. Twoi przyjaciele nie bÄ™dÄ… stawać na oznaczonych minach.", +/*MISSING*/ "Known mines may be marked by pressing 'm'. Your allies won't step on marked mines.", + "PolĂ­ÄŤka, která obsahujĂ­ miny, je moĹľnĂ© oznaÄŤit stiskem klávesy 'm'. Vaši spojenci na oznaÄŤenĂ© miny nevstoupĂ­.", + "ĐзвеŃтные мины можно помечать, нажимая 'm'. Твои Ńоюзники не бŃĐ´ŃŃ‚ на них наŃŃ‚Ńпать.", +/*MISSING*/ "Known mines may be marked by pressing 'm'. Your allies won't step on marked mines.", + }}, + {0x562c1c2e, { // "You shoot %the1!" + "Zastrzeli%Ĺ‚eĹ›0 %a1!", + "%1 dĂĽĹźmanına ateĹź ettin!", + "ZastĹ™eli%l0 jsi %a1!", + "Đ’Ń‹ Đ·Đ°Ńтрелили %a1!", + "Du erschieĂźt %den1 %a1!", + }}, + {0x563373a5, { // "Kills required: any Elemental (Living Fjord/Dead Caves).\n" + "Wymagane zabicia: dowolny Ĺ»ywioĹ‚ak (Ĺ»ywy Fiord/Martwa Jaskinia).", + "Gereken leĹźler: Herhangi bir Ă–zĂĽt (YaĹźayan Fiyort/Ă–lĂĽ MaÄźaralar).", + "PotĹ™ebuješ zabĂ­t libovolnĂ©ho Elementála (Ĺ˝ivoucĂ­ fjord/MrtvĂ© jeskynÄ›).", + "ТребŃетŃŃŹ Ńбить любого элементаля (Живой фьорд/Мёртвая пещера).", + "Benötigte Kills: beliebiger Elementar (Lebender Fjord/Tote Höhle).", + }}, + {0x564507de, { // "%The1 is frozen!" + "%1 zamarzĹ‚%oa1!", + "%1 dondu!", + "%1 zamrz%l1!", + "%1 замерзает!", + "%Der1 %1 ist eingefroren!", + }}, + {0x5655aa99, { // "A piece of architecture typical to R'Lyeh." + "Architektura typowa dla R'Lyeh.", + "R'Lyeh'e özgĂĽ bir mimari eser.", + "TypickĂ˝ architektonickĂ˝ prvek R'Lyeh.", + "Типичная архитектŃра Đ 'Льеха.", + "Ein StĂĽck R'Lyeh-typischer Architektur.", + }}, + {0x565a4f71, { // "%The1 wakes up %the2." + "%1 budzi %a2.", +/*MISSING*/ "%The1 wakes up %the2.", + "%1 probudil %a2.", + "%1 разбŃдил%E1 %a2.", +/*MISSING*/ "%The1 wakes up %the2.", + }}, + {0x56675618, { // "summon Sand Worm" + "przywoĹ‚aj Czerwia", + "Kumkurdu çıkar", + "vyvolej PĂ­seÄŤnĂ©ho ÄŤerva", + "призвать ПеŃчаного червя", + "rufe Sandwurm herbei", + }}, + {0x5669c348, { // "\"Have you tried to take a boat and go into the Ocean? Try it!\"" + "\"PrĂłbowa%Ĺ‚eĹ›0 wziąć Ĺ‚ĂłdkÄ™ i pĹ‚ynąć na Ocean?\"", + "\"Bir kayığa binip Okyanus'a açılmayı denedin mi? Denemelisin!\"", + "\"UĹľ jsi zkouše%l0 vzĂ­t ÄŤlun a vyplout na Oceán?\"", + "\"Đ’Ń‹ пробовали взять Đ»ĐľĐ´ĐşŃ Đ¸ Ńплыть в Океан?\"", + "\"Hast du schon versucht mit einem Boot auf den Ozean zu fahren?\"", + }}, + {0x566c3369, { // "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" + "Ruszasz siÄ™ myszÄ…, klawiaturÄ… numerycznÄ…, qweadzxc, lub hjklyubn. Czekasz naciskajÄ…c 's' lub '.'. Obracasz Ĺ›wiat strzaĹ‚kami, PgUp/Dn, lub Home/Space. NaciĹ›nij 'v' by przejść do menu (konfiguracja, tryby specjalne itd.), ESC by zobaczyć stan misji.\n\n", + "Fareyle, sayı tuĹźlarıyla, qweadzxc ile, veya hjklyubn ile hareket et. 's' ya da '.' ile bekle. Oklarla, PageUp/Down ile veya Home/Space ile dĂĽnyayı çevirebilirsin. Oyunu kaydetmek için GĂĽvenlik KĂĽresine ihtiyacın var. Ayarlar için 'v'ye görev durumu ve menĂĽ için 'ESC'ye bas.\n\n", + "Pohybuješ se pomocĂ­ myši, numerickĂ© klávesnice, kláves qweadzxc nebo kláves hjklyubn. Klávesy 's' nebo '.' ti umoĹľĹujĂ­ ÄŤekat na mĂ­stÄ›. Ĺ ipky, klávesy PgUp/PgDn a Home nebo mezernĂ­k ti umoĹľĹujĂ­ otáčet svÄ›t. NastavenĂ­ mĹŻĹľeš otevřít klávesou 'v', Ăşkoly a menu klávesou ESC.\n\n", + "ДвигайтеŃŃŚ Ń ĐżĐľĐĽĐľŃ‰ŃŚŃŽ ĐĽŃ‹Ńки, Đ˝Ńмпада, qweadzxc или hjklyubn. Ждите, нажимая 's' или '.'. Поворачивайте ĐşĐ°Ń€Ń‚Ń Ńтрелками, PageUp/Down или Home/Space. Чтобы ŃохранитьŃŃŹ, Đ’Đ°ĐĽ Đ˝Ńжна Ńфера безопаŃноŃти. Нажмите 'v' для наŃтроек, Esc для ŃŃ‚Đ°Ń‚ŃŃĐ° квеŃŃ‚Đ° или меню.", +/*MISSING*/ "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", + }}, + {0x568338c0, { // "return" + "powĂłt", +/*MISSING*/ "return", + "návrat", + "вернŃŃ‚ŃŚŃŃŹ", +/*MISSING*/ "return", + }}, + {0x5789e8a3, { // "Camera level above the plane" + "Wysokość kamery nad pĹ‚aszczyznÄ…", +/*MISSING*/ "Camera level above the plane", + "Výška kamery nad rovinou", + "Đ’Ń‹Ńота камеры над плоŃкоŃŃ‚ŃŚŃŽ", +/*MISSING*/ "Camera level above the plane", + }}, + {0x57b2222c, { // "Those roses smell too nicely. You have to come towards them." + "Te róże tak Ĺ‚adnie pachnÄ…. Musisz iść w ich kierunku.", +/*MISSING*/ "Those roses smell too nicely. You have to come towards them.", + "Ty rĹŻĹľe příliš krásnÄ› vonĂ­. Musíš jĂ­t smÄ›rem k nim.", + "Эти розы пахнŃŃ‚ ŃлиŃком прекраŃно. Đ’Ń‹ можете пойти лиŃŃŚ в ŃŃ‚ĐľŃ€ĐľĐ˝Ń Đ˝Đ¸Ń….", + "Diese Rosen duften zu gut - du musst zu ihnen gehen.", + }}, + {0x57d0af6b, { // "\"Straight lines stay close to each other forever, this is so romantic!\"" + "\"Linie proste, co mogÄ… zawsze być blisko siebie... Jakie to romantyczne!\"", + "\"DoÄźrular birbirlerine hep yakın, bu çok romantik!\"", + "\"Přímky, kterĂ© navÄ›ky zĹŻstávajĂ­ blĂ­zko sebe, to je tak romantickĂ©!\"", + "\"Прямые линии ĐľŃŃ‚Đ°ŃŽŃ‚ŃŃŹ близко Đ´Ń€ŃĐł Đş Đ´Ń€ŃĐłŃ... Как романтично!\"", + "\"Grade Linien bleiben einander fĂĽr immer nah, wie romantisch!\"", + }}, + {0x57f5e809, { // "Cultists throw fire at you from distance!" + "KultyĹ›ci rzucajÄ… ogniem z odlegĹ‚oĹ›ci!", +/*MISSING*/ "Cultists throw fire at you from distance!", + "KultistĂ© na tebe vrhajĂ­ z dálky oheĹ!", + "ĐšŃльтиŃŃ‚Ń‹ кидают огонь издалека!", +/*MISSING*/ "Cultists throw fire at you from distance!", + }}, + {0x586df720, { // "\"There are %1 floor tiles inside our Table!\"" + "\"Nasz stół otacza %1 pĂłl podĹ‚ogi!\"", + "\"Masamızın içinde %1 zemin hĂĽcresi var!\"", + "\"UvnitĹ™ našeho stolu je %1 dlaĹľdic!\"", + "\"Đ’Đ˝Ńтри Ńтола %1 клеток!\"", + "\"Es gibt %1 Bodenfliesen in unserer Tafel!\"", + }}, + {0x589f402b, { // "ver" + "wer", + "ver", + "ver", + "верŃия", + "ver", + }}, + {0x58b8b50f, { // "this Orb appears on floors and is used by witches" + "ta Sfera pojawia siÄ™ na ziemi i jest uĹĽywana przez czarownice", + "Bu KĂĽre zeminlerde bulunur ve cadılarca kullanılır.", + "tato SfĂ©ra se objevuje na zemi a využívajĂ­ ji ÄŤarodÄ›jnice czarownice", + "ŃŤŃ‚Đ° Ńфера появляетŃŃŹ на земле и иŃпользŃетŃŃŹ ведьмами", + "Dieser Orb erscheint auf dem Boden und wird von Hexen genutzt", + }}, + {0x58d882b1, { // "player 6 go" + "gracz 6 idĹş", +/*MISSING*/ "player 6 go", + "hráč 6 pohyb", + "игрок 6 идёт", + "Spieler 6 los", + }}, + {0x5918f7fc, { // "You have used less real time than ever before. Congratulations!" + "Zajęło to mniej czasu rzeczywistego niĹĽ wczeĹ›niej. Gratulacje!", + "Bu her zamankinden daha az zaman aldı! Tebrikler!", + "SpotĹ™ebova%l0 jsi mĂ©nÄ› reálnĂ©ho ÄŤasu neĹľ kdy pĹ™edtĂ­m. Gratulujeme!", + "Đ’Ń‹ потратили меньŃе реального времени, чем раньŃе. Поздравляем!", + "Du hast weniger Echtzeit als je zuvor benötigt. GlĂĽckwunsch!", + }}, + {0x59236c0a, { // "u = undo" + "u = cofnij", + "u = geri al", + "u = zpÄ›t", + "u = отмена", + "u = rĂĽckgängig", + }}, + {0x592fd1b2, { // "You have to escape first!" + "Musisz najpierw uciec!", + "Ă–nce kaçman gerekiyor!", + "Nejprve musíš utĂ©ct!", + "Đ’Ń‹ должны бежать первым!", + "Du musst zuerst entkommen!", + }}, + {0x5942af6b, { // "This menu can be also used to configure keys.\n\n" + "To menu moĹĽe być teĹĽ uĹĽyte do konfiguracji klawiszy.", +/*MISSING*/ "This menu can be also used to configure keys.\n\n", + "Toto menu je takĂ© moĹľnĂ© použít pro konfiguraci kláves.\n\n", + "Đ’ этом меню также можно поменять иŃпользŃемые клавиŃи\n\n.", + "Dieses MenĂĽ kann auch verwendet werden, um Tasten zu konfigurieren.", + }}, + {0x597d1896, { // "You are now a tortoise hero!" + "JesteĹ› żółwim bohaterem!", +/*MISSING*/ "You are now a tortoise hero!", + "NynĂ­ jsi ĹľelvĂ­ hrdina!", + "Теперь вы -- черепаŃий герой!", + "Du bist jetzt ein Held der Schildkröten!", + }}, + {0x59ba4407, { // "the native Orb of %the1" + "rodzima sfera %abl1", + "%abl1 doÄźal olarak bulunan KĂĽre", + "standardnĂ­ SfĂ©ra %abl1", + "родная Ńфера %abl1", + "der heimische Orb %der1", + }}, + {0x59d5a94d, { // "zebra lines" + "zebra: linie", +/*MISSING*/ "zebra lines", + "zebra: čáry", + "зебра: линии", +/*MISSING*/ "zebra lines", + }}, + {0x59e16a3b, { // "\"Find the Holy Grail to become one of us!\"" + "\"ZnajdĹş ĹšwiÄ™tego Graala, by stać siÄ™ jednym z nas!\"", + "\"Bizden biri olmak için Kutsal Kâseyi bul!\"", + "\"Najdi svatĂ˝ grál a staneš se jednĂ­m z nás!\"", + "\"Найди Святой Грааль, и ŃтанеŃŃŚ одним из наŃ!\"", + "\"Finde den Heiligen Gral um einer von uns zu werden!\"", + }}, + {0x59e46df2, { // "Sleeping bulls wake up when you get into distance of two cells from them." + "Byki siÄ™ budzÄ…, gdy siÄ™ znajdziesz w promieniu dwĂłch pĂłl od nich.", +/*MISSING*/ "Sleeping bulls wake up when you get into distance of two cells from them.", + "SpĂ­cĂ­ bĂ˝ci se probudĂ­, kdyĹľ se pĹ™iblížíš na dvÄ› polĂ­ÄŤka od nich.", + "Спящий бык проŃнётŃŃŹ, еŃли подойти Đş Đ˝ĐµĐĽŃ Đ˝Đ° раŃŃтояние двŃŃ… клеток.", +/*MISSING*/ "Sleeping bulls wake up when you get into distance of two cells from them.", + }}, + {0x59e8ecd2, { // "Players cannot get that far away!" + "Gracze nie mogÄ… siÄ™ tak oddalać!", +/*MISSING*/ "Players cannot get that far away!", + "Hráči se nemohou vzdálit tak daleko!", + "Đгроки не могŃŃ‚ Ń‚Đ°Đş Ńильно отдалятьŃŃŹ Đ´Ń€ŃĐł от Đ´Ń€Ńга!", + "Spieler dĂĽrfen sich nicht so weit voneinander entfernen!", + }}, + {0x59e98e29, { // "summon lots of treasure" + "przywoĹ‚aj duĹĽo skarbĂłw", + "çok hazine çıkar", + "vyvolej spoustu pokladĹŻ", + "призвать много Ńокровищ", + "rufe viele Schätze herbei", + }}, + {0x5a519933, { // "A Witch with a Winter spell. She is able to move through fire." + "Czarownica z czarem Zimy. MoĹĽe przechodzić przez ogieĹ„.", + "Kış bĂĽyĂĽsĂĽ olan bir cadı. AteĹźin içinde yĂĽrĂĽyebilir.", + "ÄŚarodÄ›jnice s kouzlem Zimy. Dokáže se pohybovat skrz oheĹ.", + "Ведьма Ń Đ·Đ°ĐşĐ»Đ¸Đ˝Đ°Đ˝Đ¸ĐµĐĽ зимы. Может проходить Ńквозь огонь.", + "Eine Frosthexe. Sie kann durch Feuer gehen.", + }}, + {0x5a54d807, { // "Those roses smell too nicely. You can only target cells closer to them!" + "Te róże tak Ĺ‚adnie pachnÄ…. MoĹĽesz celować tylko w pola bliĹĽej nich!", +/*MISSING*/ "Those roses smell too nicely. You can only target cells closer to them!", + "Ty rĹŻĹľe příliš krásnÄ› vonĂ­. MĹŻĹľeš zacĂ­lovat jenom polĂ­ÄŤka, která k nim jsou blĂ­Ĺľ!", + "Эти розы Ń‚Đ°Đş прекраŃно пахнŃŃ‚. Đ’Ń‹ можете выбирать цель только ближе Đş ним!", + "Diese Rosen duften zu gut. Du kannst nur Zellen näher bei ihnen anvisieren!", + }}, + {0x5a59bb53, { // "%The1 squeaks with hope!" + "%1 pisn%Ä…Ĺ‚1 z nadziejÄ…!", + "%1 umutla ciyaklıyor!", + "%1 nadÄ›jnÄ› pištĂ­!", + "%1 пищит Ń Đ˝Đ°Đ´ĐµĐ¶Đ´ĐľĐą!", + "%Die1 %1 piepst hoffnungsvoll!", + }}, + {0x5a5bf35e, { // "This forest is quite dry. Beware the bushfires!\nTrees catch fire on the next turn. The temperature of the grass cells rises once per turn for each fire nearby, and becomes fire itself when its temperature has risen 10 times.\nYou can also chop down the trees. Big trees take two turns to chop down." + "Ta puszcza jest wyschniÄ™ta. UwaĹĽaj na poĹĽary!\nSÄ…siednie drzewa zajmujÄ… siÄ™ ogniem w nastÄ™pnej kolejce. Temperatura pola bez drzewa roĹ›nie o 1 na kolejkÄ™ z kaĹĽdym ogniem w sÄ…siedztwie i gdy wzroĹ›nie do 10, to pole rĂłwnieĹĽ staje siÄ™ ogniem.\nMoĹĽesz teĹĽ Ĺ›cinać drzewa. ĹšciÄ™cie duĹĽego drzewa zajmuje dwie kolejki.", + "Bu orman epey kuru. Çalı yangınlarına dikkat et!\nAÄźaçlar her tur ateĹźe yakalanır. Çimen hĂĽcrelerinin ısısı her tur yakındaki ateĹźle bir artar ve sonra ısısı 10 kez yĂĽkselirse, kendisi ateĹź olur.\n AÄźaçları kesebilirsin. BĂĽyĂĽk aÄźaçları kesmesi 2 tur alır.\n ", + "Tento hvozd je velice suchĂ˝. Pozor na požáry!\nStromy zaÄŤnou hoĹ™et jedno kolo potĂ©, co se ocitnou v sousedstvĂ­ ohnÄ›. Teplota polĂ­ÄŤek s trávou vzrĹŻstá kaĹľdĂ© kolo o 1 za kaĹľdĂ© sousednĂ­ polĂ­ÄŤko s ohnÄ›m a potĂ©, co vzroste desetkrát, zaÄŤne tráva hoĹ™et.\nStromy v SuchĂ©m hvozdu mĹŻĹľeš kácet. PokácenĂ­ velkĂ˝ch stromĹŻ trvá dvÄ› kola.", + "Этот Đ»ĐµŃ Đ´ĐľĐ˛ĐľĐ»ŃŚĐ˝Đľ ŃŃхой. БерегитеŃŃŚ леŃных пожаров!\nДеревья загораютŃŃŹ от огня на ŃледŃющем ŃĐ°ĐłŃ. ТемператŃра травы раŃŃ‚Ń‘Ń‚ на каждом Ńаге, поŃле 10 Ńагов трава загораетŃŃŹ.\nТакже Đ’Ń‹ можете Ń€Ńбить деревья. БольŃие деревья требŃŃŽŃ‚ двŃŃ… Ńдаров.", + "Dieser Wald ist ziemlich trocken. Achtung - Waldbrände!\nBäume fangen im nächsten Zug Feuer. Die Temperatur von Gras steigt jeden Zug fĂĽr jedes Feuer in der Nähe, und wird selbst zu Feuer wenn dies 10-mal geschehen ist.\nDu kannst auch Bäume fällen. GroĂźe Bäume zu fällen dauert zwei ZĂĽge.", + }}, + {0x5a755a19, { // "pan right" + "przewiĹ„ w prawo", + "saÄźa kaydır", + "scrollovánĂ­ doprava", + "крŃтить вправо", + "Nach rechts schwenken", + }}, + {0x5a90f615, { // "static mode" + "tryb statyczny", +/*MISSING*/ "static mode", + "statickĂ˝ mĂłd", + "Ńтатичный режим", +/*MISSING*/ "static mode", + }}, + {0x5ac56465, { // "Ever wondered how some boardgame would look on the hyperbolic plane? I wondered about Go, so I have created this feature. Now you can try yourself!\nEnter = pick up an item (and score), space = clear an item\nOther keys place orbs and terrain features of various kinds\nIn the periodic editor, press 0-4 to switch walls in different ways\n" + "Zastanawia%Ĺ‚eĹ›0 siÄ™ moĹĽe, jak jakaĹ› gra planszowa wyglÄ…daĹ‚aby na pĹ‚aszczyĹşnie hiperbolicznej? Ja siÄ™ zastanawiaĹ‚em nad Go i postanowiĹ‚em to sprawdzić. Teraz Ty teĹĽ moĹĽesz sprawdzić!\nEnter = podnieĹ› przedmiot, space = zabierz przedmiot\nPozostaĹ‚e klawisze kĹ‚adÄ… różnego rodzaju przedmioty\nW edytorze okresowym, klawisze 0-4 zmieniajÄ… Ĺ›ciany na różne sposoby", + "Hiç bir oyunun hiperbolik dĂĽzlemde nasıl görĂĽneceÄźini merak ettin mi? Ben Go hakkında merak ettim ve bu özelliÄźi geliĹźtirdim. Sen de deneyebilirsin!\nEnter = bir itemi al (ve puan kazan), space = bir itemi temizle\nDiÄźer tuĹźlar kĂĽreler ve çeĹźitli arazi özellikleri eklemek için.\n", + "PĹ™emýšle%l0 jsi nÄ›kdy o tom, jak by vypadala desková hra na hyperbolickĂ© rovinÄ›? MÄ› zajĂ­malo Go, a tak jsem vytvoĹ™il tuhle funkci. TeÄŹ si to mĹŻĹľeš vyzkoušet i ty!\nEnter = seber pĹ™edmÄ›t (a skĂłre), mezernĂ­k = vymaĹľ pĹ™edmÄ›t\nDalší klávesy umĂ­sĹĄujĂ­ sfĂ©ry a nejrĹŻznÄ›jší terĂ©nnĂ­ prvky\nStiskem kláves 0-4 mĹŻĹľete rĹŻznÄ› pĹ™epĂ­nat zdi\n", + "Đ’Ń‹ когда-нибŃĐ´ŃŚ Đ´Ńмали Đľ том, как выглядит наŃтольная игра на гиперболичеŃкой плоŃкоŃти? ĐŻ Đ´ŃĐĽĐ°Đ» про Đ“Đľ и Ńоздал этот режим. Теперь и Đ’Ń‹ можете попробовать!\nEnter = поднять предмет, space = Ńдалить предмет\nĐžŃтальные клавиŃи добавляют разные предметы или элементы ландŃĐ°Ń„Ń‚Đ°.\nĐ’ периодичеŃком редакторе клавиŃи 0-4 меняют меŃтоположение Ńтен разными ŃпоŃобами.\n", + "Hast du dich je gewundert, wie ein Brettspiel auf einer hyperbolischen Ebene aussehen wĂĽrde? Ich habe mich ĂĽber Go gewundert und dieses Feature erstellt. Probiere es selbst!\nEnter = Gegenstand aufheben (und punkte), [LEER] = Gegenstand löschen\nAndere Tasten platzieren Orbs, Terrain und Anderes\nIm periodischen Editor kannst du 0-4 verwenden um die Wände zu verändern\n", + }}, + {0x5aecc3d3, { // "--- and teleport there" + "--- i siÄ™ teleportuj", + "--- ve oraya ışınlan.", + "--- a teleportuj se tam", + "--- и телепортироватьŃŃŹ Ń‚ŃĐ´Đ°", + "--- und teleportiere dorthin", + }}, + {0x5b5a7df7, { // "TRANSLATIONWARNING2" +/*MISSING*/ "TRANSLATIONWARNING2", + "çevirmek isterseniz lĂĽtfen zeno@attnam.com adresinden benimle iletiĹźime geçin.", +/*MISSING*/ "TRANSLATIONWARNING2", +/*MISSING*/ "TRANSLATIONWARNING2", +/*MISSING*/ "TRANSLATIONWARNING2", + }}, + {0x5b8d82af, { // "What is freedom for you? A situation when you can walk wherever you want? Or a situation when you do not have to work, since you have as much tasty food as you want?\n\nWell, this creature has chosen the second option. It won't be happy if you destroy its prison.\n" + "Czym jest dla Ciebie wolność? SytuacjÄ…, gdy moĹĽesz chodzić, gdzie chcesz? Czy sytuacjÄ…, gdy nie musisz pracować, bo masz tyle jedzenia, ile zapragniesz?\n\nTo stworzenie wybraĹ‚o drugÄ… opcjÄ™. Nie bÄ™dzie szczęśliwe, jak je uwolnisz z wiÄ™zienia.", +/*MISSING*/ "What is freedom for you? A situation when you can walk wherever you want? Or a situation when you do not have to work, since you have as much tasty food as you want?\n\nWell, this creature has chosen the second option. It won't be happy if you destroy its prison.\n", + "Co je pro tebe svoboda? To, Ĺľe si mĹŻĹľeš chodit, kam chceš? Nebo to, Ĺľe nemusíš pracovat, protoĹľe máš tolik dobrĂ©ho jĂ­dla, kolik chceš?\n\nInu, tento tvor si vybral tu druhou moĹľnost. Nebude rád, kdyĹľ zničíš jeho vÄ›zenĂ­.\n", + "Что для Đ’Đ°Ń ĐµŃŃ‚ŃŚ Ńвобода? Когда можно идти, ĐşŃĐ´Đ° хочеŃŃŚ? Đли когда не надо работать, Ń‚Đ°Đş как еŃŃ‚ŃŚ Ńтолько вкŃŃной еды, Ńколько хочеŃŃŚ?\n\nĐ­Ń‚Đľ ŃŃщеŃтво выбрало второй вариант. Đ›Đ¸Ń Đ˝Đµ бŃдет рад, еŃли Đ’Ń‹ разрŃŃите его тюрьмŃ.\n", + "Was bedeutet Freiheit fĂĽr dich? Eine Situation in der du gehen kannst wohin immer du willst? Oder eine Situation in der du nicht arbeiten musst und immer soviel leckeres Essen hast, wie du willst?\n\nWie auch immer, dieses Wesen wählte die zweite Option. Es wird nicht sehr glĂĽcklich sein, wenn du sein Gefängnis zerstörst.", + }}, + {0x5bb92408, { // " (E:%1)" + " (E:%1)", + " (Ă–:%1)", + " (E:%1)", + " (E:%1)", + " (E:%1)", + }}, + {0x5bd97cf6, { // "Activated Orb of Safety!" + "Aktywowano SferÄ™ BezpieczeĹ„stwa!", + "GĂĽvenlik KĂĽresini aktifleĹźtirdin.", + "Aktivova%l0 jsi SfĂ©ru bezpeÄŤĂ­!", + "Đктивирована Ńфера безопаŃноŃти!", + "Orb der Geborgenheit aktiviert!", + }}, + {0x5bdfa491, { // "A big monster from the Living Caves. A dead Troll will be reunited with the rocks, causing some walls to grow around its body." + "DuĹĽy stwĂłr z Ĺ»yjÄ…cych JaskiĹ„. Martwy Troll poĹ‚Ä…czy siÄ™ ze skaĹ‚Ä…, powodujÄ…c rozrost skaĹ‚ wokół jego ciaĹ‚a.", + "YaĹźayan MaÄźaralardan bĂĽyĂĽk bir canavar. Ă–lĂĽ bir Trol etrafında yĂĽkselen duvarlarla kayalarla yeniden bĂĽtĂĽnleĹźir. ", + "VelkĂ˝ netvor z Ĺ˝ivoucĂ­ch jeskynĂ­. MrtvĂ˝ Ĺ utroll splyne se skálou a kolem jeho tÄ›la se rozrostou zdi.", + "Огромный монŃŃ‚Ń€ из Живых пещер. Мёртвый тролль окрŃжаетŃŃŹ камнями, вызывая роŃŃ‚ Ńкал вокрŃĐł Ńебя.", + "Ein groĂźes Monster aus den Lebenden Höhlen. Ein toter Troll wird eins mit dem Gestein, was dazu fĂĽhrt, dass er von Wänden umgeben wird.", + }}, + {0x5bee3d6e, { // "Two players cannot move/attack the same location!" + "DwĂłch graczy nie moĹĽe celować w to samo miejsce!", +/*MISSING*/ "Two players cannot move/attack the same location!", + "Dva hráči nemohou zacĂ­lovat stejnou lokaci!", + "Два игрока не могŃŃ‚ ходить в ĐľĐ´Đ˝Ń ĐşĐ»ĐµŃ‚ĐşŃ!", + "Zwei Spieler können nicht dieselbe Stelle anvisieren!", + }}, + {0x5bf02e45, { // "On the following slide, the colors change smoothly in the whole infinite world. Again, this works better than in Euclidean geometry." + "Na kolejnym slajdzie kolory siÄ™ pĹ‚ynnie zmieniajÄ… w nieskoĹ„czonym Ĺ›wiecie. To rĂłwnieĹĽ dziaĹ‚a lepiej niĹĽ w geometrii euklidesowej.", +/*MISSING*/ "On the following slide, the colors change smoothly in the whole infinite world. Again, this works better than in Euclidean geometry.", + "Na následujĂ­cĂ­m snĂ­mku se barvy v celĂ©m nekoneÄŤnĂ©m svÄ›tÄ› hladce mÄ›nĂ­. I v tomto případÄ› to v hyperbolickĂ© geometrii funguje lĂ©pe neĹľ v eukleidovskĂ©.", + "На ŃледŃющем Ńлайде цвета изменяютŃŃŹ плавно по вŃĐµĐĽŃ Đ±ĐµŃĐşĐľĐ˝ĐµŃ‡Đ˝ĐľĐĽŃ ĐĽĐ¸Ń€Ń. Опять же, ŃŤŃ‚Đľ работает Đ»ŃчŃе, чем в евклидовой геометрии.", +/*MISSING*/ "On the following slide, the colors change smoothly in the whole infinite world. Again, this works better than in Euclidean geometry.", + }}, + {0x5c032e2e, { // "Welcome to the Euclidean mode!" + "Witaj w trybie euklidesowym!", +/*MISSING*/ "Welcome to the Euclidean mode!", + "VĂ­tej v eukleidovskĂ©m mĂłdu!", + "Добро пожаловать в евклидов режим!", +/*MISSING*/ "Welcome to the Euclidean mode!", + }}, + {0x5c1d1ce9, { // "A kind of Troll native to the Red Rock Valley." + "Ten rodzaj Trolla mieszka w Dolinie Czerwonej SkaĹ‚y.", + "Kızılkaya Vadisinde yaĹźayan bir trol.", + "Typ trolla, kterĂ˝ se vyskytuje v ĂšdolĂ­ ÄŤervenĂ˝ch skal.", + "Этот вид троллей обитает в Долине КраŃных Скал.", + "Eine spezielle Trollgattung, die im Rotfelsental lebt.", + }}, + {0x5c4fe15c, { // "r: %1" + "r: %1", + "r: %1", + "r: %1", + "r: %1", + "r: %1", + }}, + {0x5c61b7e8, { // "Two of your images crash and disappear!" + "Dwa Twoje obrazy wpadĹ‚y na siebie i znikĹ‚y!", + "Ä°ki yansıma çarpıştı ve yok oldu!", + "Dva tvoje obrazy se srazily a zmizely!", + "Два Đ’Đ°Ńих двойника ŃтолкнŃлиŃŃŚ и ŃничтожилиŃŃŚ!", + "Zwei deiner Abbilder stoĂźen zusammen und verschwinden!", + }}, + {0x5c8258dc, { // "Cannot teleport on an item!" + "Nie moĹĽesz teleportować siÄ™ na przedmiot!", + "Bir eĹźyanın ĂĽzerine ışınlanamazsın!", + "NemĹŻĹľeš se teleportovat na pĹ™edmÄ›t!", + "Нельзя телепортироватьŃŃŹ на предмет!", + "Du kannst dich nicht auf Gegenstände teleportieren!", + }}, + {0x5c89219a, { // "switch web display" + "przestaw strukturÄ™", +/*MISSING*/ "switch web display", + "pĹ™epni strukturu", + "переключить отображение Ńетки", + "wechsle die Web-Anzeige", + }}, + {0x5cf476b5, { // "random colors" + "losowe kolory", + "rastgele renkler", + "náhodnĂ© barvy", + "ŃĐ»Ńчайные цвета", + "zufällige Farben", + }}, + {0x5d483ee2, { // "QUEST" + "MISJA", + "GĂ–REV", + "ĂšKOLY", + "ĐśĐССĐĐŻ", + "QUEST", + }}, + {0x5d4e44de, { // "too dangerous to use in %the1" + "zbyt niebezpieczna %abl1", + "zbyt niebezpieczna %abl1", + "příliš nebezpeÄŤná %abl1", + "ŃлиŃком опаŃна %abl1", + "zu gefährlich um es in %der1 zu nutzen", + }}, + {0x5d4e8ff4, { // "Dead floor, with some rubble." + "Martwa ziemia, jest tu trochÄ™ gruzu.", + "Ă–lĂĽ zemin, ĂĽstĂĽnde taĹź parçaları var.", + "Mrtvá podlaha se sutinami.", + "Мёртвая земля Ń Ń‰ĐµĐ±Đ˝ĐµĐĽ.", + "Toter Boden, mit etwas Geröll.", + }}, + {0x5d8c000c, { // "A typical Graveyard monster." + "Typowy cmentarny stwĂłr.", + "Mezarlıkta sık rastlanan bir canavar.", + "TypickĂ˝ hĹ™bitovnĂ­ netvor.", + "Типичный для Кладбища монŃŃ‚Ń€.", + "Ein typisches Friedhofsmonster.", + }}, + {0x5d93351f, { // "cancel move" + "anuluj ruch", +/*MISSING*/ "cancel move", + "zruš pohyb", + "отмена хода", +/*MISSING*/ "cancel move", + }}, + {0x5d94df20, { // "%The1 kisses you, and begs you to bring %him1 away from here." + "%1 CiÄ™ pocaĹ‚owa%Ĺ‚1 i poprosi%Ĺ‚1, byĹ› %go1 stÄ…d zabra%Ĺ‚0.", + "%1 seni öpĂĽyor ve sana %go1 buradan uzaklaĹźtırman için yalvarıyor.", + "%1 tÄ› polĂ­bi%l1 a prosĂ­ tÄ›, abys ji odsud odved%l0.", + "%1 поцеловал%E1 тебя, и попроŃил%E1 ŃвеŃти отŃŃŽĐ´Đ°.", + "%Der1 %1 kĂĽsst dich und bittet dich %den1 von hier weg zu bringen.", + }}, + {0x5dee2673, { // "The Elemental Planes are divided into four subzones: Planes of Fire, Water, Air, and Earth. You need to collect a Shard from each Plane to construct an Elemental Gem. It is dangerous to collect too many Shards of the same type without constructing a Gem." + "Strefa Ĺ»ywioĹ‚Ăłw dzieli siÄ™ na cztery podstrefy: Strefa Ognia, Wody, Powietrza i Ziemi. Musisz znaleźć Okruch kaĹĽdego ĹĽywioĹ‚u, by skonstruować KamieĹ„ Ĺ»ywioĹ‚Ăłw. Jest niebezpiecznie zbierać wiele OkruchĂłw tego samego ĹĽywioĹ‚u bez konstruowania Kamienia.", + "Unsur DĂĽzlemleri dört altalana ayrılır: AteĹź, Su, Hava ve Toprak DĂĽzlemleri. Bir Unsurtaşı yapmak için her dört dĂĽzlemden birer parça toplaman gerekiyor. Bir Unsurtaşı yapmadan aynı cins parçadan çok sayıda toplamak tehlikelidir.", + "ElementálnĂ­ roviny se dÄ›lĂ­ na ÄŤtyĹ™i subzĂłny: Rovinu OhnÄ›, Vody, Vzduchu a ZemÄ›. Musíš v kaĹľdĂ© z Rovin najĂ­t Ăšlomek, ze kterĂ˝ch pak vytvoříš ElementálnĂ­ drahokam. Pozor, je nebezpeÄŤnĂ© mĂ­t příliš mnoho ĂšlomkĹŻ stejnĂ©ho typu a nepoužít je k sestavenĂ­ Drahokamu!", + "Đ•ŃŃ‚ŃŚ четыре ПлоŃкоŃти Стихий: ПлоŃкоŃŃ‚ŃŚ Огня, Воды, ВоздŃŃ…Đ° и Земли. Đ’Đ°ĐĽ Đ˝Ńжно Ńобрать по ĐžŃĐşĐľĐ»ĐşŃ Đ¸Đ· каждой, чтобы Ńобрать камень Ńтихий. Собирать много ĐľŃколков, не Ńобирая Камень, довольно опаŃно.", + "Die Elementare Ebene ist in 4 Zonen unterteilt: Die Feuerebene, die Erdebene, die Luftebene und die Wasserebene. Du brauchst eine Scherbe aus jeder Ebene um ein Elementjuwel herzustellen. Es ist äuĂźerst gefährlich mehrere Scherben desselben Typs zu sammeln ohne ein Elementjuwel herzustellen.", + }}, + {0x5e1ee8f2, { // "boundary" + "brzeg", + "sınır", + "hranice", + "граница", + "Grenze", + }}, + {0x5e9ce5c0, { // "This orb can be used to move faster for some time." + "Ta sfera powoduje, ĹĽe przez pewien czas poruszasz siÄ™ szybciej.", + "Bu kĂĽre bir sĂĽreliÄźine daha hızlı hareket etmeye yarar.", + "Tato sfĂ©ra ti umoĹľĹuje pohybovat se po urÄŤitou dobu rychleji.", + "Đ­Ń‚Đ° Ńфера ŃŃкорит Đ’Đ°Ń Đ˝Đ° некоторое время.", + "Du kannst diesen Orb verwenden, um dich fĂĽr einige Zeit schneller zu bewegen.", + }}, + {0x5ef47a97, { // "Your score: %1" + "TwĂłj wynik: %1", + "Puanın: %1", + "TvĂ© skĂłre: %1", + "Đ’Đ°Ń Ńчёт: %1", + "Punkte: %1", + }}, + {0x5f21e2d7, { // "%The1 activates her Flash spell!" + "%1 rzuci%Ĺ‚1 swĂłj czar BĹ‚ysk!", + "%1 Işık bĂĽyĂĽsĂĽnĂĽ aktifleĹźtirdi!", + "%1 aktivova%l1 kouzlo Záblesk!", + "%1 активировал%E1 заклинание вŃпыŃки!", + "%Der1 %1 aktiviert den Blitzzauber!", + }}, + {0x5f22ded5, { // "These star-shaped flowers native to Hell are a valuable alchemical component." + "Te piekielne roĹ›liny w ksztaĹ‚cie gwiazdy sÄ… cennym skĹ‚adnikiem alchemicznym.", + "Cehennemde yetiĹźen bu yıldız Ĺźekilli çiçekler deÄźerli bir simya bileĹźeni.", + "Tyto hvÄ›zdám podobnĂ© kvÄ›tiny z Pekla jsou cennou alchymistickou surovinou.", + "Эти звездовидные цветы их ĐĐ´Đ° - важный алхимичеŃкий компонент.", + "Diese sternförmigen Blumen aus der Hölle sind eine wertvolle alchemistische Zutat.", + }}, + {0x5f53f87c, { // "press 0 to leave this mode" + "WciĹ›nij 0, by opuĹ›cić ten tryb", + "Bu moddan çıkmak için 0'a bas", + "Pro opuštÄ›nĂ­ tohoto mĂłdu stiskni klávesu '0'", + "Нажмите 0, чтобы выйти из режима", + "DrĂĽcke 0 um diesen Modus zu verlassen", + }}, + {0x5f8ef306, { // "Another Dead Orb." + "Jeszcze jedna Martwa Sfera.", + "BaĹźka bir Ă–lĂĽ KĂĽre.", + "Další mrtvá sfĂ©ra.", + "Ещё одна мёртвая Ńфера.", + "Ein weiterer toter Orb.", + }}, + {0x5facfa66, { // "zebra pattern" + "wzĂłr zebry", + "zebra dokusu", + "vzor 'zebra'", + "Ńщор зебры", + "Zebramuster", + }}, + {0x5fc7252e, { // "cat" + "kot", +/*MISSING*/ "cat", + "koÄŤka", + "кот", + "Katze", + }}, + {0x5ff087bd, { // "You have improved %1 of your specific high scores!" + "Poprawi%Ĺ‚eĹ›0 %1 z wynikĂłw szczegółowych!", + "Tekil yĂĽksek skorlarından %1 tanesini artırdın !", + "Zlepši%l0 jsi %1 svĂ˝ch specifickĂ˝ch nejvyšších skĂłre!", + "Đ’Ń‹ Ńвеличили %1 отдельных резŃльтатов!!", + "Du hast %1 deiner spezifischen Highscores verbessert!", + }}, + {0x5ff8756f, { // "There are Krakens in your homeland too... huge sea monsters which could easily destroy ships. The geometry of this strange world prevents quick movement of huge objects, so there are no large ships, only small boats, and hyperbolic Krakens are relatively small too. Still, you suppose they might be the widest creatures which could still move at considerable speed...\n\nKraken heads can move only on hexagons. You need to attack all the tentacles to kill the Kraken. A tentacle cannot attack if it has been attacked on the same turn. When a Kraken attacks you while you are in a boat, it destroys the boat, but does not kill you." + "Tam, skÄ…d pochodzisz, rĂłwnieĹĽ sÄ… Krakeny... wielkie morskie potwory, ktĂłre z Ĺ‚atwoĹ›ciÄ… mogÄ… zatapiać statki. Geometria tego dziwnego Ĺ›wiata powoduje, ĹĽe wielkie obiekty nie mogÄ… siÄ™ szybko poruszać, nie ma tu zatem duĹĽych statkĂłw, tylko maĹ‚e Ĺ‚Ăłdki, i hiperboliczne Krakeny teĹĽ sÄ… wzglÄ™dnie maĹ‚e. WciÄ…ĹĽ one sÄ… chyba najwiÄ™kszymi stworzeniami, ktĂłre wciÄ…ĹĽ mogÄ… siÄ™ poruszać z rozsÄ…dnÄ… prÄ™dkoĹ›ciÄ…...\n\nGĹ‚owa krakena porusza siÄ™ tylko po szeĹ›ciokÄ…tach. By pokonać Krakena, musisz zaatakować jego wszystkie macki. Macka nie atakuje, jeĹ›li zostaĹ‚a zaatakowana w tej turze. JeĹ›li Kraken zaatakuje CiÄ™, gdy jesteĹ› na statku, zniszczy statek, ale CiÄ™ nie zabije.", +/*MISSING*/ "There are Krakens in your homeland too... huge sea monsters which could easily destroy ships. The geometry of this strange world prevents quick movement of huge objects, so there are no large ships, only small boats, and hyperbolic Krakens are relatively small too. Still, you suppose they might be the widest creatures which could still move at considerable speed...\n\nKraken heads can move only on hexagons. You need to attack all the tentacles to kill the Kraken. A tentacle cannot attack if it has been attacked on the same turn. When a Kraken attacks you while you are in a boat, it destroys the boat, but does not kill you.", + "I ve tvĂ© domovinÄ› existujĂ­ Krakeni... obrovskĂ© moĹ™skĂ© obludy, kterĂ© dokážou snadno zniÄŤit lodÄ›. Geometrie tohoto podivnĂ©ho svÄ›ta bránĂ­ rychlĂ©mu pohybu velkĂ˝ch objektĹŻ, a tak tu nejsou žádnĂ© velkĂ© lodÄ›, jen malĂ© loÄŹky, a i hyperboliÄŤtĂ­ Krakeni jsou relativnÄ› malĂ­. I tak jsou to moĹľná nejširší tvorovĂ©, kteří se stále dokážou pohybovat nÄ›jakou slušnou rychlostĂ­...\n\nKrakenĂ­ hlava se mĹŻĹľe pohybovat pouze po šestiĂşhelnĂ­kovĂ˝ch polĂ­ÄŤcĂ­ch. Abys Krakena zabil, musíš zasáhnout všechna jeho chapadla. Chapadlo nemĹŻĹľe zaĂştoÄŤit, pokud jsi ve stejnĂ©m kole zaĂştoÄŤil ty na nÄ›j. Pokud jsi na loÄŹce, KrakenĹŻv Ăştok ji zniÄŤĂ­, ale ty zĹŻstaneš naĹľivu.", + "На ваŃей родине тоже еŃŃ‚ŃŚ кракены... огромные морŃкие ŃŃщеŃтва, Ń Đ»Ń‘ĐłĐşĐľŃŃ‚ŃŚŃŽ Ńничтожающие больŃие корабли. Геометрия этого Ńтранного мира не позволяет больŃим объектам быŃтро двигатьŃŃŹ, ĐżĐľŃŤŃ‚ĐľĐĽŃ Đ·Đ´ĐµŃŃŚ нет больŃих кораблей, только маленькие лодки, и гиперболичеŃкие кракены тоже довольно малы. Вероятно, ŃŤŃ‚Đľ Ńамые больŃие ŃŃщеŃтва, ŃпоŃобные двигатьŃŃŹ Ń ĐżŃ€Đ¸Đ»Đ¸Ń‡Đ˝ĐľĐą ŃкороŃŃ‚ŃŚŃŽ...\n\nГолова кракена движетŃŃŹ только по ŃеŃтиŃгольникам. Чтобы Ńбить кракена, Đ˝Ńжно атаковать вŃе его щŃпальца. Đ©Ńпальце не может бить, еŃли оно атаковано в этот же ход. Đ•Ńли кракен Đ°Ń‚Đ°ĐşŃет ваŃ, когда вы в лодке, он Ńничтожает лодкŃ, но не бьёт ваŃ.", + "In deiner Heimat gibt es auch Kraken - riesige Seeungeheuer, die leicht Schiffe zerstören könnten. Die Geometrie dieser seltsamen Welt verhindert schnelle Bewegungen von groĂźen Objekten. Daher gibt es keine groĂźen Schiffe, nur kleine Boote, und hyperbolische Kraken sind auch relativ klein. Dennoch - du nimmst an, das sie die ausgedehntesten Kreaturen sind, die sich noch mit größerer Geschwindigkeit bewegen können...\n\nKöpfe von Kraken können sich nur auf Sechsecken bewegen. Du musst alle Tentakel angreifen, um einen Kraken zu töten. Ein Tentakel kann nicht angreifen, wenn er im gleichen Zug attackiert wurde. Wenn ein Krake dich angreift, während du in einem Boot bist, zerstört er das Boot, tötet dich jedoch nicht.", + }}, + {0x6038e891, { // "Simply a wall. Mostly." + "Po prostu Ĺ›ciana. W zasadzie.", + "Yalnızca bir duvar. BĂĽyĂĽk ihtimalle.", + "Po prostu Ĺ›ciana. W zasadzie.", + "Обычная Ńтена. Đ’ ĐľŃновном.", + "Eine einfache Wand. Größtenteils.", + }}, + {0x60b508ab, { // "throw at the pointer" + "rzut we wskaĹşnik", + "mausa doÄźru at", + "házenĂ­ na kurzor", + "кинŃŃ‚ŃŚ нож в цель", + "Zum Zeiger werfen", + }}, + {0x60f5c677, { // "A Witch with a Fire spell. She will leave a trail of fire behind her." + "Czarownica z czarem Ognia. Zostawia za sobÄ… pĹ‚onÄ…cÄ… Ĺ›cieĹĽkÄ™.", + "AteĹź bĂĽyĂĽsĂĽ olan bir Cadı. Arkasında ateĹźten bir yol bırakır.", + "ÄŚarodÄ›jnice s kouzlem OhnÄ›. Zanechává za sebou ohnivou stopu.", + "Ведьма Ń Đ·Đ°ĐşĐ»Đ¸Đ˝Đ°Đ˝Đ¸ĐµĐĽ огня. ĐžŃтавляет огненный Ńлед Đ·Đ° Ńобой.", + "Eine Feuerhexe. Sie hinterlässt eine Spur aus Feuer.", + }}, + {0x61292603, { // "You glance at your precious treasures." + "Patrzysz na swoje drogocenne skarby.", + "DeÄźerli hazinelerine şöyle bir baktın.", + "DĂ­váš se na svĂ© pĹ™evzácnĂ© poklady.", + "Đ’Ń‹ Ńмотрите на ваŃи драгоценные Ńокровища.", + "Du betrachtest deine kostbaren Schätze.", + }}, + {0x6133930c, { // "gain Orb of Yendor" + "zdobÄ…dĹş sferÄ™ Yendoru", +/*MISSING*/ "gain Orb of Yendor", + "zĂ­skej Yendorskou sfĂ©ru", + "полŃчить ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°", + "erhalte Orb von Yendor", + }}, + {0x616acab2, { // "This Orb allows you to find new lands more easily. Lands where you have already collected less treasure, and especially the Crossroads, are more likely to spawn while you have this. Additionally, Orbs of Safety are more likely to spawn in the Whirlpool." + "Ta sfera pozwala Ĺ‚atwo znajdować nowe krainy. Gdy jÄ… masz, Ĺ‚atwiej znaleźć jest krainy, w ktĂłrych zebrane zostaĹ‚o mniej skarbĂłw, w szczegĂłlnoĹ›ci SkrzyĹĽowania. Dodatkowo, Sfery BezpieczeĹ„stwa częściej trafiajÄ… siÄ™ w Wirze.", + "Bu kĂĽre yeni diyarlar bulmanı kolaylaĹźtırır. Daha az hazine topladığın diyarlar ve özellikle Arayollar, bu kĂĽreyi elinde tutarken daha yĂĽksek ihtimalle karşına çıkar. Ayrıca, GĂĽvenlik KĂĽrelerinin Tayfun'da ortaya çıkma ihtimalini artırır.", + "Tato SfĂ©ra ti umoĹľĹuje snadnÄ›ji najĂ­t novĂ© kraje. Dokud ji máš, budou se s vÄ›tší pravdÄ›podobnostĂ­ generovat kraje, ve kterĂ˝ch jsi zĂ­skal mĂ©nÄ› pokladĹŻ, zvláštÄ› pak KĹ™iĹľovatky KromÄ› toho se ve VĂ­ru bude generovat vĂ­ce SfĂ©r BezpeÄŤĂ­.", + "Đ­Ń‚Đ° Ńфера позволяет Ń Đ»Ń‘ĐłĐşĐľŃŃ‚ŃŚŃŽ находить новые земли. Земли, в которых Đ’Ń‹ Ńобрали мало Ńокровищ, и ĐľŃобенно ПерекрёŃтки, появляютŃŃŹ чаще, пока Ń Đ’Đ°Ń ĐµŃŃ‚ŃŚ ŃŤŃ‚Đ° Ńфера. Кроме того, Ńферы БезопаŃноŃти чаще находятŃŃŹ в Водовороте.", + "Dieser Orb erlaubt es dir neue Länder leichter zu entdecken. Länder in denen du bisher weniger Schätze gesammelt hast und besonders Kreuzungen sind wahrscheinlicher anzutreffen so lange du ihn besitzt. Des weiteren sind Orbs der Geborgenheit wahrscheinlicher im Strudel zu finden.", + }}, + {0x61be9d87, { // "or 'r' or F5 to restart" + "lub 'r' lub F5, by zacząć od poczÄ…tku", + "'r' veya F5 ile yeniden baĹźlat", + "'r' nebo F5: zaÄŤĂ­t znovu od začátku", + "либо 'r' или F5, чтобы начать заново", + "oder 'r' oder F5 zum Neustarten", + }}, + {0x61dbe2db, { // "center the map on me" + "centruj mapÄ™ na mnie", + "centruj mapÄ™ na mnie", + "vycentrovánĂ­ mapy na postavÄ›", + "центрировать ĐşĐ°Ń€Ń‚Ń ĐżĐľ мне", + "Karte selbstzentrieren", + }}, + {0x61e70a0c, { // "A simple, but effective, missile, used by rogues." + "Prosta choć efektywna broĹ„ rzucana, uĹĽywana przez poszukiwaczy skarbĂłw.", + "Seyyahlar tarafından kullanılan basit ama etkili bir silah.", + "Prostá, ale efektivnĂ­ vrhacĂ­ zbraĹ, kterou používajĂ­ lovci pokladĹŻ.", + "ПроŃтой, но эффективный Ńнаряд, иŃпользŃемый разбойниками.", + "Eine einfache, aber effektive, Wurfwaffe. Schurken verwenden sie.", + }}, + {0x61fe2a59, { // "sound effects volume" + "gĹ‚oĹ›ność efektĂłw dĹşwiÄ™kowych", +/*MISSING*/ "sound effects volume", + "hlasitost zvukovĂ˝ch efektĂą", + "громкоŃŃ‚ŃŚ звŃковых эффектов", +/*MISSING*/ "sound effects volume", + }}, + {0x624e89f5, { // "%The1 eats %the2!" + "%1 zjad%Ĺ‚1 %a2!", + "%1 %a2 yedi!", + "%1 seĹľra%l1 %a2!", + "%1 Ńъел%E1 %a2!", + "%Der1 %1 frisst %den2 %a2!", + }}, + {0x625c4a3c, { // "PLAY" + "GRAJ", + "OYNA", + "HRĂT", + "ĐĐ“Đ ĐĐ™", + "START", + }}, + {0x62dd148b, { // "The height of walls, in absolute units. For the current values of g and c, wall height of %1 absolute units corresponds to projection value of %2." + "Wysokość Ĺ›cian. Przy obecnych wartoĹ›ciach g i c, gĂłra Ĺ›ciany na wysokoĹ›ci %1 odpowiada współczynnikowi projekcji %2.", +/*MISSING*/ "The height of walls, in absolute units. For the current values of g and c, wall height of %1 absolute units corresponds to projection value of %2.", + "Výška zdĂ­ v absolutnĂ­ch jednotkách. PĹ™i souÄŤasnĂ˝ch hodnotách g a c odpovĂ­dá výška %1 absolutnĂ­ch jednotek projekÄŤnĂ­ hodnotÄ› %2.", + "Đ’Ń‹Ńота Ńтен. При данных значениях g и c Ńтена выŃоты в %1 единиц ŃоответŃтвŃет раŃŃтоянию на проекции в %2.", +/*MISSING*/ "The height of walls, in absolute units. For the current values of g and c, wall height of %1 absolute units corresponds to projection value of %2.", + }}, + {0x62f1f1e5, { // "Push Skeletons into the holes!" + "Wpychaj Szkielety do dziur!", +/*MISSING*/ "Push Skeletons into the holes!", + "StrÄŤ Kostlivce do dÄ›r!", + "Сталкивайте Ńкелетов в дырки!", +/*MISSING*/ "Push Skeletons into the holes!", + }}, + {0x631d6ba2, { // "Revived!" + "Wskrzeszono!", +/*MISSING*/ "Revived!", + "Wskrzeszono!", + "Đ’ĐľŃкреŃено!", + "Wiederbelebt!", + }}, + {0x63355b1b, { // "You will need more experience to defeat the Greater Demon!" + "Musisz zdobyć doĹ›wiadczenie, by pokonać WiÄ™kszego Demona!", +/*MISSING*/ "You will need more experience to defeat the Greater Demon!", + "Na poraĹľenĂ­ Ďábla budeš potĹ™ebovat vĂ­c zkušenostĂ­!", + "Đ’Đ°ĐĽ Đ˝Ńжно больŃе опыта, чтобы победить СтарŃего демона!", +/*MISSING*/ "You will need more experience to defeat the Greater Demon!", + }}, + {0x6342c3b9, { // "l = lands" + "c = kopia", + "c = diyar", + "l = kraje", + "c = копия", + "c = Länder", + }}, + {0x6373be2b, { // "Circles are strange in hyperbolic geometry too. Look for the Castle of Camelot in the Crossroads; the Round Table inside is a circle of radius 28. Finding its center is a difficult challenge.\n\nPress '5' to cheat by seeing the smaller circles too.\n\nNote: Camelot and some other lands are unlocked earlier in the Tutorial than in a real game." + "KoĹ‚a rĂłwnieĹĽ sÄ… dziwne w geometrii hiperbolicznej. Szukaj zamku Camelot na SkrzyĹĽowaniu; OkrÄ…gĹ‚y Stół jest koĹ‚em o promieniu 28. Znalezienie jego Ĺ›rodka to trudne wyzwanie.\n\nNaciĹ›nij '5' by oszukać -- zobaczyć mniejsze okrÄ™gi.\n\nUwaga: Camelot i niektĂłre inne krainy w tym podrÄ™czniku sÄ… pokazywane wczeĹ›niej niĹĽ w normalnej grze.", +/*MISSING*/ "Circles are strange in hyperbolic geometry too. Look for the Castle of Camelot in the Crossroads; the Round Table inside is a circle of radius 28. Finding its center is a difficult challenge.\n\nPress '5' to cheat by seeing the smaller circles too.\n\nNote: Camelot and some other lands are unlocked earlier in the Tutorial than in a real game.", + "I kruĹľnice jsou v hyperbolickĂ© geometrii podivnĂ©. Zkus na KĹ™iĹľovatce najĂ­t hrad Kamelot; KulatĂ˝ stĹŻl uvnitĹ™ je kruĹľnice o polomÄ›ru 28. NajĂ­t jejĂ­ stĹ™ed je obtĂ­ĹľnĂ˝ Ăşkol.\n\nStiskem klávesy '5' mĹŻĹľeš podvádÄ›t a vidÄ›t i menší kruĹľnice.\n\nPoznámka: Camelot a nÄ›kterĂ© další kraje se v Tutoriálu odemykajĂ­ dříve neĹľ ve skuteÄŤnĂ© hĹ™e.", + "ОкрŃжноŃти в гиперболичеŃкой геометрии тоже Ńтранные. Найдите замок Камелот на ПерекрёŃтке; КрŃглый Ńтол внŃтри него являетŃŃŹ крŃгом радиŃŃĐ° 28. Найти его центр -- Ń‚Ń€Ńдная задача.\n\nНажмите '5' чтобы полŃчить подŃĐşĐ°Đ·ĐşŃ -- Ńвидеть меньŃие крŃги.\n\nВнимание: Камелот и некоторые Đ´Ń€Ńгие земли открываютŃŃŹ в Đ ŃководŃтве раньŃе, чем в обычной игре.", +/*MISSING*/ "Circles are strange in hyperbolic geometry too. Look for the Castle of Camelot in the Crossroads; the Round Table inside is a circle of radius 28. Finding its center is a difficult challenge.\n\nPress '5' to cheat by seeing the smaller circles too.\n\nNote: Camelot and some other lands are unlocked earlier in the Tutorial than in a real game.", + }}, + {0x63981bdd, { // "%The1 is confused!" + "%1 jest zmieszan%ya1.", + "%1 sersemledi.", + "%1 je zmaten%Ă˝1.", + "%1 в замеŃательŃтве", + "%Der1 %1 ist verwirrt.", + }}, + {0x63bd4d6b, { // "You cannot attack diagonally!" + "Nie moĹĽesz atakować po przekÄ…tnej!", +/*MISSING*/ "You cannot attack diagonally!", + "NemĹŻĹľeš ĂştoÄŤit ĂşhlopříčnÄ›!", + "Đ’Ń‹ не можете атаковать по-диагонали!", + "Du kannst nicht diagonal angreifen!", + }}, + {0x63fd6548, { // "stay in place (left + right)" + "stĂłj w miejscu (lewo+prawo)", +/*MISSING*/ "stay in place (left + right)", + "stát na mĂ­stÄ› (doleva + doprava)", + "Ńтоять на меŃте (влево + вправо)", +/*MISSING*/ "stay in place (left + right)", + }}, + {0x64067fd0, { // "player 7 X" + "gracz 7 X", +/*MISSING*/ "player 7 X", + "hráč 7 X", + "игрок 7 X", + "Spieler 7 X", + }}, + {0x64067fd1, { // "player 7 Y" + "gracz 7 Y", +/*MISSING*/ "player 7 Y", + "hráč 7 Y", + "игрок 7 Y", + "Spieler 7 Y", + }}, + {0x644bdebd, { // "%The1 crashes into %the2!" + "%1 walnÄ…Ĺ‚ w %a2!", +/*MISSING*/ "%The1 crashes into %the2!", + "%1 narazil na %a2!", + "%1 врезал%c1 в %a2!", +/*MISSING*/ "%The1 crashes into %the2!", + }}, + {0x645dd0db, { // "Somebody has summoned these evil constructs with a magical process." + "Wroga konstrukcja, tworzona poprzez magiczny proces.", + "Birisi bĂĽyĂĽyle iĹźleyen bu mekanizmaları harekete geçirmiĹź.", + "Tyto zlĂ© konstrukty kdosi vyvolal pomocĂ­ magickĂ©ho procesu.", + "Враждебная конŃŃ‚Ń€Ńкция, Ńозданная в резŃльтате магичеŃкого процеŃŃĐ°.", + "Jemand hat diese bösen Konstrukte mit einem magischen Ritual beschworen.", + }}, + {0x64aa539c, { // "This floor will fall after someone goes there. Go quickly!" + "Ta podĹ‚oga siÄ™ zapadnie, jak ktoĹ› bÄ™dzie przechodziĹ‚. PrechodĹş szybko!", + "Bu zemin birisi oradan geçtikten sonra çöker! Çabuk uzaklaĹź!", + "Tato podlaha se propadne potĂ©, co pĹ™es ni nÄ›kdo projde. Běž rychle!", + "Пол провалитŃŃŹ, как только на него наŃŃ‚Ńпят. Бегите!", + "Der Boden wird zusammenbrechen sobald jemand ĂĽber ihn geht. Beeile dich!", + }}, + {0x65887dc3, { // "You cannot move between the triangular cells here!" + "Nie moĹĽesz przechodzić miÄ™dzy trĂłjkÄ…tami!", +/*MISSING*/ "You cannot move between the triangular cells here!", + "Tady se nemĹŻĹľeš pohybovat mezi trojĂşhelnĂ­kovĂ˝mi polĂ­ÄŤky!", + "Đ’Ń‹ не можете ходить ĐĽĐµĐ¶Đ´Ń Ń‚Ń€ĐµŃгольниками!", + "Du kannst dich nicht zwischen den dreieckigen Zellen bewegen!", + }}, + {0x65a3cf49, { // "You vault over %the1!" + "SzarĹĽujesz!", +/*MISSING*/ "You vault over %the1!", + "PĹ™eskoÄŤi%l0 jsi %a1!", + "Đ’Ń‹ ŃоверŃили рывок!", +/*MISSING*/ "You vault over %the1!", + }}, + {0x65c2d2d6, { // "Projection at the ground level" + "Współczynnik rzutu na poziome podĹ‚oĹĽa", +/*MISSING*/ "Projection at the ground level", + "Projekce na Ăşrovni zemÄ›", + "Проекция на поверхноŃŃ‚ŃŚ земли", +/*MISSING*/ "Projection at the ground level", + }}, + {0x65f9fcde, { // "You push %the1." + "Popchn%Ä…Ĺ‚eĹ›0 %a1.", + "%a1 ittirdin.", + "ZatlaÄŤi%l0 jsi %a1.", + "Đ’Ń‹ толкнŃли %a1.", + "Du schiebst %den1 %a1.", + }}, + {0x66a55592, { // "%1 turns" + "kolejek: %1", +/*MISSING*/ "%1 turns", + "kola: %1", + "ходов: %1", +/*MISSING*/ "%1 turns", + }}, + {0x66e43c1f, { // "In this mode you can draw your own player characters, floors, monsters, and items. Press 'e' while hovering over an object to edit it. Start drawing shapes with 'n', and add extra vertices with 'a'. Press 0-9 to draw symmetric pictures easily. More complex pictures can be created by using several layers ('l'). See the edges of the screen for more keys." + "W tym trybie moĹĽesz narysować swoje postacie, podĹ‚ogi, potwory i przedmioty. NaciĹ›nij 'e', gdy przesuwasz mysz ponad obiektem, by go edytować. Zaczynaj nowe ksztaĹ‚ty od 'n', dodawaj wierzchoĹ‚ki 'a'. NaciĹ›nij 0-9 by Ĺ‚atwo rysować symetryczne obrazy. Bardziej zĹ‚oĹĽone obrazy mogÄ… być tworzone przy uĹĽyciu warstw ('l'). PozostaĹ‚e klawisze sÄ… wymienione na krawÄ™dziach ekranu.", + "Bu modda kendi karakterlerini, zeminlerini, canavarlarını ve eĹźyalarını çizebilirsin. Ä°Ĺźaretçiyi bir nesneye götĂĽr ve onu dĂĽzenlemek için 'e'ye bas. 'n' ile Ĺźekiller çizmeye baĹźlayabilir, 'a' ile yeni köşeler ekleyebilirsin. 0-9'a basarak simetrik resimleri daha kolay çizebilirsin. Daha karmaşık resimler için birden fazla atman gerekebilir ('l'). Ekranın kıyılarına bakara daha fazla tuĹźu öğrenebilirsin.", + "V tomto mĂłdu si mĹŻĹľeš nakreslit vlastnĂ­ postavy, podlahu, netvory a pĹ™edmÄ›ty. Objekt mĹŻĹľeš editovat tak, Ĺľe na nÄ›j najedeš myší a stiskneš 'e'. 'n' zaÄŤne kreslit tvar a 'a' pĹ™idává novĂ© vrcholy. Klávesy 0-9 umoĹľĹujĂ­ snadnou kresbu symetrickĂ˝ch obrázkĹŻ. SloĹľitÄ›jší obrázky je moĹľnĂ© vytvoĹ™it s pouĹľitĂ­m nÄ› kolika vrstev ('l'). Další ovládacĂ­ klávesy mĹŻĹľeš najĂ­t na okrajĂ­ch obrazovky.", + "Đ’ этом режиме можно нариŃовать Ńвоего перŃонажа, пол, монŃтров, предметы. Нажмите 'e', держа ĐĽŃ‹ŃŃŚ над объектом, чтобы его изменить. Добавляйте формы Ń 'n', верŃины Ń 'a'. Нажмите 0-9 чтобы Ńделать Ńимметричный Ńзор. Более Ńложные фигŃры могŃŃ‚ ŃĐľŃтоять из неŃкольких Ńлоёв ('l'). ĐžŃтальные клавиŃи Ńмотри в Ńглах экрана.", + "In diesem Modus kannst du deine eigenen Charaktere, Böden, Monster und Items zeichnen. DrĂĽcke 'e' während du auf ein Objekt zeigst um es zu bearbeiten. Fang an Formen mit 'n' zu zeichnen und fĂĽg mit 'a'. weitere Eckpunkte hinzu. DrĂĽcke 0-9 um einfach symmetrisch zu zeichnen. Komplexere Bilder können durch mehrere Lagen ('l') erzeugt werden. Weitere Hotkeys stehen am Rand des Bildschirms.", + }}, + {0x66eada42, { // "friends killed: %1" + "przyjaciele zabici: %1", +/*MISSING*/ "friends killed: %1", + "zabitĂ­ kamarádi: %1", + "Ńбито Ńоюзников: %1", + "getötete Freunde: %1", + }}, + {0x6731c97f, { // "This Orb is able to bring faraway items to your location, even if there are monsters or barriers on the way. The cost of bringing an item (in charges) equals the square of its distance to you. Contrary to some other Orbs, usage is not allowed if you have not enough power left." + "Ta Sfera moĹĽe Ĺ›ciÄ…gać do Ciebie odlegĹ‚e przedmioty, nawet, jak po drodze sÄ… potwory lub inne przeszkody. Koszt Ĺ›ciÄ…gniÄ™cia przedmiotu (w Ĺ‚adunkach) rĂłwny jest kwadratowi odlegĹ‚oĹ›ci. W przeciwieĹ„stwie do niektĂłrych innych Sfer, nie moĹĽesz uĹĽyć Sfery Przestrzeni, jeĹ›li nie masz wystarczajÄ…co duĹĽo mocy.", + "Bu kĂĽre uzaktaki eĹźyaları , arada canavar yahut engeller olup olmadığı farketmeksizin, senin olduÄźun hĂĽcreye getirir. Bu iĹźlem eĹźyanın uzaklığı kadar güç tĂĽketir. Bazı KĂĽrelerin aksine, güç yoksa bu kĂĽreyi kullanamazsın.", + "Tato SfĂ©ra vám dokáže pĹ™inášet vzdálenĂ© pĹ™edmÄ›ty, a to i skrz netvory nebo bariĂ©ry. PĹ™inesenĂ­ pĹ™edmÄ›tu stojĂ­ tolik sĂ­ly, kolik je druhá mocnina vzdálenosti pĹ™edmÄ›tu. Na rozdĂ­l od nÄ›kterĂ˝ch jinĂ˝ch SfĂ©r, SfĂ©ru Prostoru nenĂ­ moĹľnĂ© použít, pokud vám uĹľ nezbĂ˝vá dostateÄŤnĂ© mnoĹľstvĂ­ sĂ­ly.", + "Đ­Ń‚Đ° Ńфера может принеŃти Đ’Đ°ĐĽ предметы издалека, даже еŃли на ĐżŃти еŃŃ‚ŃŚ монŃтры или препятŃтвия. СтоимоŃŃ‚ŃŚ иŃпользования равна ĐşĐ˛Đ°Đ´Ń€Đ°Ń‚Ń Ń€Đ°ŃŃтояния Đ´Đľ предмета. Đ’ отличие от некоторых Đ´Ń€Ńгих Ńфер, она не может быть иŃпользована, еŃли ей Ńилы не хватает.", + "Dieser Orb kann weit entfernte Gegenstände zu dir bringen, auch wenn Monster oder Barrieren im Weg sind. Die Kosten dafĂĽr ist die Distanz des Gegenstands zu dir zum Quadrat. Anders als ein paar andere Orbs kannst du diesen nicht benutzen, wenn er nicht genug Kraft hat.", + }}, + {0x676ec0fa, { // "When the charges on this Orb expire, you will be automatically returned to the place where you have found it. Extra Orbs of Recall delay this without changing the recall location. Pick up an Orb of Safety causes an immediate recall." + "Kiedy skoĹ„czÄ… siÄ™ Ĺ‚adunki tej Sfery, automatycznie wracasz do miejsca, w ktĂłrym jÄ… znalazĹ‚eĹ›. Dodatkowe Sfery Powrotu opóźniajÄ… powrĂłt bez zmiany miejsca powrotu, a Sfera BezpieczeĹ„stwa powoduje natychmiastowy powrĂłt.", +/*MISSING*/ "When the charges on this Orb expire, you will be automatically returned to the place where you have found it. Extra Orbs of Recall delay this without changing the recall location. Pick up an Orb of Safety causes an immediate recall.", + "KdyĹľ vyprší náboje tĂ©to SfĂ©ry, automaticky se vrátíš tam, kde jsi ji našel. Pokud sebereš vĂ­ce SfĂ©r Návratu, mĂ­sto návratu se nezmÄ›nĂ­ -- návrat se pouze oddálĂ­. Pokud sebereš SfĂ©ru BezpeÄŤnosti, vrátíš se okamĹľitÄ›.", + "Когда заряды этой Ńферы заканчиваютŃŃŹ, вы автоматичеŃки возвращаетеŃŃŚ в меŃŃ‚Đľ, где вы её наŃли. Дополнительные Ńферы откладывают этот момент, не меняя меŃŃ‚Đ° возвращения, Đ° Сфера БезопаŃноŃти вызывает немедленное возвращение.", +/*MISSING*/ "When the charges on this Orb expire, you will be automatically returned to the place where you have found it. Extra Orbs of Recall delay this without changing the recall location. Pick up an Orb of Safety causes an immediate recall.", + }}, + {0x679cde87, { // "The Orb loses its power as it leaves the Land of Power!" + "Sfera traci swÄ… moc, gdy opuszcza KrainÄ™ Mocy!", + "KĂĽre Güç Diyarından ayrılırken gĂĽcĂĽnĂĽ kaybediyor!", + "SfĂ©ra opustila Kraj Moci a ztratila svou sĂ­lu!", + "Сфера потеряла Ńвою ŃилŃ, когда покинŃла Землю Ńилы!", + "Der Orb verliert seine Kraft wenn du das Land der Macht verlässt!", + }}, + {0x67b00d2a, { // "pan left" + "przewiĹ„ w lewo", + "sola kaydır", + "scrollovánĂ­ doleva", + "крŃтить влево", + "Nach links schwenken", + }}, + {0x67ef03c1, { // "second joystick position (panning)" + "pozycja drugiego joysticka (przesuwanie)", +/*MISSING*/ "second joystick position (panning)", + "pozice druhĂ©ho joysticku (pĹ™esouvánĂ­)", + "положение второго джойŃтика (обзор)", +/*MISSING*/ "second joystick position (panning)", + }}, + {0x6828d3e3, { // "Rock snakes are similar to Sandworms, but they move each turn. However, they only move on the hexagonal cells. They are also somewhat longer than the Sandworms." + "Kamienne węże sÄ… podobne do Pustynnych Czerwi, ale wykonujÄ… ruch w kaĹĽdej kolejce. MogÄ… jednak poruszać siÄ™ tylko po szeĹ›ciokÄ…tach. SÄ… trochÄ™ dĹ‚uĹĽsze niĹĽ Pustynne Czerwie.", + "Kaya yılanları her tur hareket etmesi hariç Kumkurtlarına benzer. Ayrıca, sadece altıgen hĂĽcrelerde hareket ederler. Kumkurtlarından bir nebze daha geniĹźlerdir. ", + "KamennĂ­ hadi jsou podobnĂ­ PĂ­seÄŤnĂ˝m ÄŤervĹŻm, ale pohybujĂ­ se v kaĹľdĂ©m kole. Mohou se však pohybovat pouze po šestiĂşhelnĂ­kovĂ˝ch polĂ­ch. KromÄ› toho jsou oproti PĂ­seÄŤnĂ˝m ÄŤervĹŻm o nÄ›co delší.", + "Каменные змеи похожи на ĐźŃŃтынных червей, но движŃŃ‚ŃŃŹ каждый ход. Однако они могŃŃ‚ перемещатьŃŃŹ только по ŃеŃтиŃгольникам. Также они неŃколько длиннее червей.", + "Felsschlangen sind SandwĂĽrmern ähnlich, allerdings bewegen sie sich jeden Zug. DafĂĽr meiden sie allerdings heptagonale Zellen. Sie sind auch länger als SandwĂĽrmer.", + }}, + {0x687fbdb7, { // "player 2 spin" + "gracz 2 obrĂłt", + "oyuncu 2, dön", + "hráč 2 otáčenĂ­", + "игрок 2 вертит", + "Spieler 2 drehen", + }}, + {0x6890adc7, { // "anti-aliasing disabled" + "wyĹ‚Ä…czono anti-aliasing", + "Anti-aliasing devredışı", + "anti-aliasing vypnut", + "Ńглаживание выключено", + "Anti-Aliasing deaktiviert", + }}, + {0x68a71369, { // "You can fight most monsters by moving into their location. The monster could also kill you by moving into your location, but the game automatically cancels all moves which result in that.\n\n" + "WiÄ™kszość przeciwnikĂłw zabijasz poprzez wejĹ›cie na zajmowane przez nie pole. Przeciwnik moĹĽe CiÄ™ zabić w ten sam sposĂłb, ale gra automatycznie zabrania ruchĂłw, ktĂłre by do tego prowadziĹ‚y.\n\n", + "ÇoÄźu canavarın yerine ilerleyerek onu öldĂĽrebilirsin. Canavar da seni senin bulunduÄźun yere ilerleyerek öldĂĽrebilir, ama oyun böyle hamlelere zaten izin vermez.\n\n", + "Na vÄ›tšinu netvorĹŻ mĹŻĹľeš zaĂştoÄŤit tĂ­m, Ĺľe se pohneš na jejich polĂ­ÄŤko. Netvor mĹŻĹľe zabĂ­t tebe, pokud se pohne na tvĂ© polĂ­ÄŤko, ale hra automaticky zruší kaĹľdĂ˝ tah, kterĂ˝ by vedl k takovĂ© situaci.\n\n", + "Đ’Ń‹ можете атаковать больŃинŃтво монŃтров, проŃŃ‚Đľ передвигаяŃŃŚ на ĐşĐ»ĐµŃ‚ĐşŃ Ń Đ˝Đ¸ĐĽĐ¸. МонŃтры могŃŃ‚ атаковать Đ’Đ°Ń Ń‚ĐµĐĽ же ŃпоŃобом, но игра ŃĐ°ĐĽĐ° блокирŃет ходы, приводящие Đş этомŃ.\n\n", + "Du kannst die meisten Monster bekämpfen, indem du dich an ihre Position begibst. Besagtes Monster könnte dich auch töten, indem es sich an deine Position begibst, aber das Spiel lässt dies nicht zu.\n\n", + }}, + {0x68b8aef8, { // "Welcome to %the1 Challenge!" + "Uratuj %a1!", + "%1 görevine hoĹźgeldin!", + "VĂ­tej v Misi: %1!", + "СпаŃи %a1!", + "Willkommen zu der %a1-Herausforderung!", + }}, + {0x68c82eb7, { // " (appears here)" + " (wystÄ™puje tu)", +/*MISSING*/ " (appears here)", + " (objevuje se zde)", + " (появляетŃŃŹ здеŃŃŚ)", +/*MISSING*/ " (appears here)", + }}, + {0x68efc6fc, { // "model used" + "uĹĽyty model", +/*MISSING*/ "model used", + "pouĹľitĂ˝ model", + "иŃпользŃемая модель", + "verwendetes Modell", + }}, + {0x691a64f3, { // "r = regular" + "r = wzorki", + "r = dĂĽzenli", + "r = vzory", + "r = Ńзор", + "r = regulär", + }}, + {0x695a10f8, { // "language" + "jÄ™zyk", + "dil", + "jazyk", + "ŃŹĐ·Ń‹Đş", + "Sprache", + }}, + {0x6961cc1d, { // "explore the Palace Pattern (8 colors)" + "Eksploracja Wzoru PaĹ‚ac (8 kolorĂłw)", + "Saray Dokusunu KeĹźfet (8 renk)", + "ZkoumánĂ­ PalácovĂ©ho vzoru (8 barev)", + "ĐĐ·Ńчить Ńзор Дворца (8 цветов)", + "Erkunde die Schlossstruktur (8 Farben)", + }}, + {0x699e98b2, { // "Try the Tutorial to help with understanding the geometry of HyperRogue (menu -> special modes).\n\n" + "Uruchom PodrÄ™cznik, by zrozumieć geometriÄ™ HyperRogue (menu -> tryby specjalne.\n\n", +/*MISSING*/ "Try the Tutorial to help with understanding the geometry of HyperRogue (menu -> special modes).\n\n", + "Zkuste Tutoriál, chcete-li pomoci s chápánĂ­m geometrie HyperRogue (menu -> speciálnĂ­ mĂłdy.\n\n", + "ПопробŃйте Đ ŃководŃтво, чтобы понять геометрию HyperRogue (меню -> Ńпециальные режимы.\n\n", +/*MISSING*/ "Try the Tutorial to help with understanding the geometry of HyperRogue (menu -> special modes).\n\n", + }}, + {0x69b39d48, { // "right to left" + "w lewo", +/*MISSING*/ "right to left", + "zprava doleva", + "влево", + "von rechts nach links", + }}, + {0x6a04fee0, { // "Cannot use %the1 here!" + "Nie moĹĽesz tutaj tego uĹĽyć!", +/*MISSING*/ "Cannot use %the1 here!", + "Tady to nemĂąe pouĂ­t!", + "Невозможно иŃпользовать %a1 here!", +/*MISSING*/ "Cannot use %the1 here!", + }}, + {0x6a077dec, { // "%The1 disperses the cloud!" + "%1 rozprys%Ĺ‚1 chmurÄ™!", + "%1 bulutun içerisinde kayboldu!", + "%1 rozptĂ˝li%l1 oblak!", + "%1 раŃŃеял%E1 облако!", + "%Der1 %1 löst die Wolke auf!", + }}, + {0x6a72bef7, { // "Expansion" + "Ekspansja", +/*MISSING*/ "Expansion", + "Expanze", + "Đ Đ°ŃŃирение", +/*MISSING*/ "Expansion", + }}, + {0x6ab87b7f, { // "render bands automatically" + "automatycznie twĂłrz wstÄ™gi", +/*MISSING*/ "render bands automatically", + "renderovat pásy automaticky", + "риŃовать Đ»ĐµĐ˝Ń‚Ń Đ°Đ˛Ń‚ĐľĐĽĐ°Ń‚Đ¸Ń‡ĐµŃки", + "rendere Bänder automatisch", + }}, + {0x6ae460f4, { // "game design, programming, texts and graphics by Zeno Rogue \n\n" + "projekt, programowanie, teksty i grafika: Zeno Rogue \n\n", + "tasarım, programlama, metinler ve grafikler: Zeno Rogue \n\n", + "design, programovánĂ­, texty a grafika: Zeno Rogue \n\n", + "проект, программирование, текŃŃ‚Ń‹ и графика: Zeno Rogue \n\n", + "Design, Programmierung, Texte und Grafik: Zeno Rogue \n\n", + }}, + {0x6b12c064, { // "This orb can be used to invoke a flash spell, which destroys almost everything in radius of 2." + "Ta sfera pozwala rzucić czar BĹ‚ysk, ktĂłry niszczy wszystko w promieniu 2.", + "Bu kĂĽre ışık bĂĽyĂĽsĂĽnĂĽ kullanmaya yarar. Işık bĂĽyĂĽsĂĽ, 2 hĂĽcre uzaklıktaki her Ĺźeyi yok eder.", + "Tuto sfĂ©ru mĹŻĹľeš použít k seslánĂ­ kouzla Záblesk, kterĂ© zniÄŤĂ­ tĂ©měř vše do vzdálenosti 2 polĂ­ÄŤek od tebe.", + "Đ­Ń‚Đ° Ńфера вызывает заклинание вŃпыŃки, Ńничтожающее почти вŃŃ‘ в радиŃŃе 2.", + "Du kannst diesen Orb verwenden um einen Lichtzauber zu wirken, der nahezu alles um dich in einem Radius von 2 zerstört.", + }}, + {0x6b41c58b, { // "You think about possible meanings." + "Zastanawiasz siÄ™ nad moĹĽliwymi znaczeniami.", + "Bunun olası anlamlarını düşündĂĽn.", + "PĹ™emĂ˝líš, co by to mohlo znamenat.", + "Đ’Ń‹ Đ´Ńмаете Đľ возможном значении.", + "Du denkst ĂĽber die Bedeutung nach.", + }}, + {0x6b49cc24, { // "Treasure lost!" + "Skarb utracony!", + "Hazine kayboldu!", + "Ztrati%l0 jsi poklad!", + "Сокровища потеряны!", + "Schatz verloren!", + }}, + {0x6b4ba313, { // "l = layers: %1" + "l = warstwy: %1", + "l = katmanlar: %1", + "l = vrstvy: %1", + "l = Ńлой: %1", + "l = Ebenen: %1", + }}, + {0x6b524122, { // "Periodic Editor" + "Edytor okresowy", + "Periyodik Editör", + "PeriodickĂ˝ editor", + "ПериодичеŃкий редактор", + "Periodischer Editor", + }}, + {0x6b63d613, { // "Rock-III to wall ratio" + "Stosunek skaĹ‚y-III do Ĺ›cian", +/*MISSING*/ "Rock-III to wall ratio", + "PomÄ›r skály-III a zdĂ­", + "ОтноŃение выŃот Скалы-III и Ńтены", +/*MISSING*/ "Rock-III to wall ratio", + }}, + {0x6b728a57, { // "You collect your first %1!" + "Znalaz%Ĺ‚eĹ›0 pierwsz%yÄ…1 %a1!", + "%a1 topladın. Bu senin ilkin!", + "Naše%l0 jsi sv%ĹŻj1 prvnĂ­ %a1!", + "Đ’Ń‹ наŃли перв%A1 %a1!", + "Du hast dein erstes mal %a1 eingesammelt!", + }}, + {0x6bc18ab5, { // "A magical being which copies your movements." + "Magiczna istota kopiujÄ…ca Twoje ruchy.", + "Hareketlerini taklit eden bir bĂĽyĂĽlĂĽ varlık.", + "Magická bytost, kterĂ© kopĂ­ruje tvĂ© pohyby.", + "Đ­Ń‚Đľ магичеŃкое Ńоздание копирŃет Đ’Đ°Ńи движения.", + "Ein magisches Wesen, das deine Bewegungen kopiert.", + }}, + {0x6bc2888a, { // "geometry" + "geometria", +/*MISSING*/ "geometry", + "geometrie", + "геометрия", +/*MISSING*/ "geometry", + }}, + {0x6bdbf93c, { // "exit configuration" + "wyjdĹş z konfiguracji", + "ayarlardan çık.", + "opustit nastavenĂ­", + "выйти из наŃтроек", + "Einstellungen verlassen", + }}, + {0x6c22a84e, { // "i = items" + "l = krainy", + "l = eĹźya", + "m = netvoĹ™i", + "l = земли", + "l = Items", + }}, + {0x6c6e9f84, { // "next slide" + "kolejny slajd", +/*MISSING*/ "next slide", + "další snĂ­mek", + "ŃледŃющий Ńлайд", +/*MISSING*/ "next slide", + }}, + {0x6cbed3c9, { // "3D" + "3D", +/*MISSING*/ "3D", + "3D", + "3D", +/*MISSING*/ "3D", + }}, + {0x6cc91767, { // "world overview" + "przeglÄ…d krain", + "dĂĽnya önizlemesi", + "pĹ™ehled krajĹŻ", + "обзор мира", + "WeltĂĽberblick", + }}, + {0x6cfacec4, { // "right" + "prawo", +/*MISSING*/ "right", + "doprava", + "право", + "rechts", + }}, + {0x6d034a95, { // "Hit him by walking away from him." + "OdejdĹş od niego, by go trafić.", + "Ona ondan uzaklaĹźarak vur.", + "Zasáhni ho tak, Ĺľe se pohneš smÄ›rem od nÄ›j.", + "Ударьте его, Ńбежав от него.", + "Triff ihn indem du dich von ihm entfernst.", + }}, + {0x6d1c912c, { // "%The1 is destroyed by the Flash." + "BĹ‚ysk zniszczyĹ‚ %a1.", +/*MISSING*/ "%The1 is destroyed by the Flash.", + "Záblesk zniÄŤil %a1.", + "Đ’ŃпыŃка Ńничтожила %1.", + "%Der1 %1 wird durch den Lichtblitz zerstört.", + }}, + {0x6d5e942d, { // "Tiny droplets of magical water. You see images of yourself inside them. Go inside the cloud, to make these images help you." + "Malutkie kropelki magicznej wody, w ktĂłrych widać TwĂłj obraz. WejdĹş do Ĺ›rodka chmury, by te obrazy Ci pomogĹ‚y.", + "Ufak sihirli su damlaları. Kendi görĂĽntĂĽnĂĽ içlerinde görĂĽyorsun. Bu görĂĽntĂĽlerin sana yardım etmesi için bulutun içine gir. ", + "MaliÄŤkĂ© kapiÄŤky magickĂ© vody. Vidíš v nich svĂ© obrazy. KdyĹľ vejdeš do oblaku, tyto obrazy ti pomohou.", + "КроŃечные капли магичеŃкой жидкоŃти. Đ’Ń‹ видите в них Ńвои отражения. Войдите в облако, чтобы Ńоздать двойников, помогающих Đ’Đ°ĐĽ.", + "Kleine Tropfen magischen Wassers. Du siehst Abbilder von dir in ihnen. Gehe in die Wolke, um diese Bilder real werden zu lassen.", + }}, + {0x6d696af0, { // "framerate limit" + "ograniczenie na fps", + "kare sayısı sınırı", + "limit fps", + "ограничение на fps", + "Framerate-Limit", + }}, + {0x6d8c78c2, { // "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 or get information about map objects). You can also touch the numbers displayed to get their meanings.\n" + "Zazwyczaj poruszasz siÄ™ przez dotkniÄ™cie pola na mapie; moĹĽesz rĂłwnieĹĽ dotknąć jednego z przyciskĂłw w rogach, by to zmienić (by przewijać mapÄ™ albo zdobyć informacje). MoĹĽesz teĹĽ dotknąć liczb na ekranie, by poznać ich znaczenie.\n", + "Normalde haritada bir yere dokunarak hareket edersin, haritanın dört köşesindeki tuĹźlara dokunarak bunu deÄźiĹźtirebilirsin. (haritayı çevirmek ya da haritadaki nesneler hakkında bilgi almak için). Gösterilen numaralara dokunarak da anlamlarını görebilirsin. \n", + "Pohybuješ se obvykle tak, Ĺľe se dotkneš nÄ›jakĂ©ho mĂ­sta na mapÄ›; to mĹŻĹľeš zmÄ›nit tĂ­m, Ĺľe se dotkneš jednoho ze ÄŤtyĹ™ tlaÄŤĂ­tek v rohu mapy (pokud chceš posunovat mapu nebo zĂ­skat informace o objektech na mapÄ›). TakĂ© se mĹŻĹľeš dotknout zobrazenĂ˝ch ÄŤĂ­sel, abys zjistil jejich vĂ˝znam.\n", + "Обычно Đ’Ń‹ перемещаетеŃŃŚ проŃŃ‚Đľ кликая ĐĽŃ‹Ńкой в Đ˝Ńжном направлении; на можно иŃпользовать 4 кнопки по Ńглам карты чтобы лиŃŃ‚Đ°Ń‚ŃŚ ĐşĐ°Ń€Ń‚Ń Đ¸Đ»Đ¸ полŃчатьинформацию про объекты. Кликая по изображаемым чиŃлам, можно Ńмотреть, что они означают.\n", + "Normalerweise bewegst du dich durch Antippen der Karte, du kannst aber auch einen der vier Knöpfe in den Ecken antippen um dies zu ändern (um die Karte zu scrollen oder Infos ĂĽber Objekte zu bekommen). Du kannst auch die Zahlen antippen um ihre Bedeutung zu erfahren.\n", + }}, + {0x6da40197, { // "You trick %the1." + "Pokona%Ĺ‚eĹ›0 %a1.", + "%a1 kandırdın.", + "PĹ™elsti%l0 jsi %a1.", + "Đ’Ń‹ победили %a1.", + "Du ĂĽberlistest %den1 %a1.", + }}, + {0x6df385a2, { // "You need to move to give space to %the1!" + "Musisz siÄ™ ruszyć, by zrobić miejsce dla %a1!", +/*MISSING*/ "You need to move to give space to %the1!", + "Musíš se pohnout, abys udÄ›la%l0 mĂ­sto pro %a1!", + "Đ’Đ°ĐĽ Đ˝Ńжно ĐľŃвободить меŃŃ‚Đľ для %a1!", + "Du musst dich bewegen, um Platz fĂĽr %den1 %a1 zu machen!", + }}, + {0x6dfba684, { // "normal tesselation" + "zwykĹ‚a posadzka", +/*MISSING*/ "normal tesselation", + "normálnĂ­ dÄ›lenĂ­", + "обычное замощение", +/*MISSING*/ "normal tesselation", + }}, + {0x6e1db4ec, { // "drop Dead Orb" + "połóż MartwÄ… SferÄ™", + "Ă–lĂĽ KĂĽreyi bırak", + "poloĹľenĂ­ MrtvĂ© sfĂ©ry", + "броŃить мёртвŃŃŽ ŃферŃ", + "Toten Orb ablegen", + }}, + {0x6e262183, { // "\"Nice castle, eh?\"" + "\"Ĺadny zamek, co?\"", + "\"Kalemiz gĂĽzel, deÄźil mi?\"", + "\"Fajn hrad, co?\"", + "\"ХороŃий замок, Đ´Đ°?\"", + "\"Nettes Schloss, nicht?\"", + }}, + {0x6e34c335, { // "Press F5 to restart the game normally." + "WciĹ›nij F5, by zacząć normalnÄ… grÄ™.", + "Oyunu normal baĹźlatmak için F5'e bas", + "StisknutĂ­m F5 restartuješ hru v normálnĂ­m mĂłdu.", + "Нажмите F5, чтобы начать нормальнŃŃŽ игрŃ.", + "DrĂĽcke F5 um das Spiel neu zu starten.", + }}, + {0x6e366778, { // "Affects looks and grammar" + "WpĹ‚ywa na wyglÄ…d i gramatykÄ™", + "GörĂĽntĂĽyĂĽ ve grameri etkiler", + "OvlivĹuje vzhled a gramatiku", + "Влияет на внеŃний вид и грамматикŃ", + "Aussehen und Grammatik", + }}, + {0x6e49d052, { // "move up" + "idĹş do gĂłry", + "yukarı git", + "nahoru", + "идти наверх", + "Hoch bewegen", + }}, + {0x6e5942bf, { // "display the scope" + "pokaĹĽ zasiÄ™g", + "odağı göster", + "zobraz rozsah", + "показать охват", + "Bereich anzeigen", + }}, + {0x6e6bfe7c, { // "You would get hurt!" + "To by bolaĹ‚o!", + "Orada hasar alırsın!", + "To by bolelo!", + "Đ­Ń‚Đľ было больно!", + "Du wĂĽrdest dir wehtun!", + }}, + {0x6ead9dc9, { // "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, etc." + "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, itd.", + "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, vb.", + "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, atd.", + "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, и Ń‚. Đ´..", + "Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, etc.", + }}, + {0x6ec9d34d, { // "firewall lines: Palace" + "linie Ĺ›cian ognia: PaĹ‚ac", +/*MISSING*/ "firewall lines: Palace", + "čáry ohnivĂ˝ch stÄ›n: Palác", + "Ńтены огня: Дворец", +/*MISSING*/ "firewall lines: Palace", + }}, + {0x6f6e8057, { // "clear monster" + "zabierz potwora", + "canavarı temizle", + "vymazat netvore", + "Ńдалить монŃтра", + "Monster entfernen", + }}, + {0x6fa9922a, { // "Klein model" + "model Kleina", +/*MISSING*/ "Klein model", + "KleinĹŻv model", + "модель Клейна", +/*MISSING*/ "Klein model", + }}, + {0x6fabe1c6, { // "These sinister totems contain valuable gems." + "Te zĹ‚owieszcze totemy zawierajÄ… cenne klejnoty.", + "Bu tekinsiz totemler deÄźerli mĂĽcevherler içeriyor.", + "Tyto zlovÄ›stnĂ© totemy obsahujĂ­ cennĂ© drahokamy.", + "Этот зловещий тотем Ńодержит ценные камни.", + "Diese schaurigen Totems enthalten wertvolle Edelsteine.", + }}, + {0x6fccf858, { // "pics to save/load:" + "obrazki do zapisu/wczytania:", + "kaydedilecek/yĂĽklenecek resimler", + "obrázky k uloĹľenĂ­/nahránĂ­:", + "картинки для загрŃзки/Ńохранения:", + "Bilder zum speichern/laden:", + }}, + {0x6fe6194c, { // "You teleport to a new location!" + "Teleportujesz siÄ™ do nowego miejsca!", + "Yeni bir yere ışınlandın!!", + "Teleportuješ se na novĂ© mĂ­sto!", + "Đ’Ń‹ телепортировалиŃŃŚ в новое меŃŃ‚Đľ!", + "Du teleportierst dich an einen neuen Ort!", + }}, + {0x70431bf2, { // "save whom" + "kogo ratujemy", + "kim kurtarılacak", + "koho zachraĹuješ", + "кого ŃпаŃти", + "wen retten?", + }}, + {0x704dd087, { // "Reduce the framerate limit to conserve CPU energy" + "Ogranicz fps, by oszczÄ™dzać energiÄ™", + "CPU enerjisinden tasarruf etmek için kare sayısı sınırını azalt.", + "SniĹľ fps, abys šetĹ™il energii procesoru", + "Ограничить fps, чтобы Ńохранить энергию ЦП", + "Reduzieren des Framerate Limits spart CPU Energie", + }}, + {0x70858816, { // "Click a location to teleport there." + "Kliknij pole, by tam siÄ™ teleportować.", +/*MISSING*/ "Click a location to teleport there.", + "Klikni na polĂ­ÄŤko, kam se chceš teleportovat.", + "Кликни на поле, чтобы телепортироватьŃŃŹ Ń‚ŃĐ´Đ°.", +/*MISSING*/ "Click a location to teleport there.", + }}, + {0x7091f735, { // "leaderboards/achievements" + "osiÄ…gniÄ™cia i rankingi", +/*MISSING*/ "leaderboards/achievements", + "leaderboardy/achievementy", + "таблицы рекордов и Đ´ĐľŃтижения", + "Bestenlisten/Errungenschaften", + }}, + {0x70ae47f3, { // "A Witch with an Aether spell. She is able to move through fire and walls." + "Czarownica z czarem Eteru. MoĹĽe przechodzić przez ogieĹ„ i Ĺ›ciany.", + "Eter bĂĽyĂĽsĂĽ olan bir cadı. Duvarların ve ateĹźin içinden geçebilir.", + "ÄŚarodÄ›jnice s kouzlem Éteru. Dokáže procházet ohnÄ›m a zdmi.", + "Ведьма Ń Đ·Đ°ĐşĐ»Đ¸Đ˝Đ°Đ˝Đ¸ĐµĐĽ эфира. Может проходить Ńквозь огонь и Ńтены.", + "Eine Ă„therhexe. Sie kann durch Feuer und Wände gehen.", + }}, + {0x70b88165, { // "forward" + "do przodu", + "ileri", + "dopĹ™edu", + "вперёд", + "Vor", + }}, + {0x70d00f84, { // "This wonderful Orb can only be collected by those who have truly mastered this hyperbolic universe, as you need the right key to unlock it. Luckily, your psychic abilities will let you know where the key is after you touch the Orb." + "Ta cudowna sfera moĹĽe być zdobyta tylko przez prawdziwych mistrzĂłw tego Ĺ›wiata. By jÄ… otworzyć, potrzebujesz klucza. Na szczęście Twoje moce psychiczne powiedzÄ… Ci, gdzie jest klucz, gdy dotkniesz Sfery.", + "Bu harika KĂĽre kilidini açmak için doÄźru anahtarı gerektirdiÄźinden, sadece bu hiperbolik evrende tamamen ustalaĹźmış kiĹźilerce toplanabilir.Çok şükĂĽr, kĂĽreye dokununca psiĹźik yeteneklerin sana anahtarın nerede olduÄźunu söyler.", + "Tuto úžasnou sfĂ©ru mohou sebrat jenom ti, kdo se stali skuteÄŤnĂ˝mi pány tohoto hyperbolickĂ©ho vesnĂ­ru, protoĹľe na jejĂ­ odemÄŤenĂ­ potĹ™ebuješ správnĂ˝ klĂ­ÄŤ. TvĂ© psychickĂ© schopnosti ti naštÄ›stĂ­ prozradĂ­, kde se klĂ­ÄŤ nacházĂ­, jakmile se tĂ©to sfĂ©ry dotkneš.", + "Đ­Ń‚Đ° прекраŃная Ńфера может быть Ńобрана лиŃŃŚ тем, кто по наŃŃ‚ĐľŃŹŃ‰ĐµĐĽŃ ĐľŃвоил гиперболичеŃĐşŃŃŽ вŃеленнŃŃŽ, но Đ’Đ°ĐĽ Đ˝Ńжно найти ключ от неё. Đš ŃчаŃŃ‚ŃŚŃŽ, Đ’Ń‹ Ńзнаете, где он лежит, как только дотронетеŃŃŚ Đ´Đľ Ńферы.", + "Dieser wundervolle Orb kann nur von denen gesammelt werden, die dieses hyperbolische Universum wahrhaft gemeistert haben - denn du benötigst den richtigen SchlĂĽssel, um ihn zu entsperren. Deine psychischen Fähigkeiten erlauben es dir glĂĽcklicherweise zu erkennen, wo sich der SchlĂĽssel befindet, nachdem du den Orb berĂĽhrt hast.", + }}, + {0x70d58a62, { // "input" + "sterowanie", +/*MISSING*/ "input", + "vstup", + "ввод", +/*MISSING*/ "input", + }}, + {0x70df17ab, { // "This model renders straight lines as straight, but it distorts angles." + "Ten model pokazuje linie proste jako proste, ale przekĹ‚amuje kÄ…ty.", +/*MISSING*/ "This model renders straight lines as straight, but it distorts angles.", + "Tento model zobrazuje přímky jako přímky, ale zkresluje Ăşhly.", + "Đ’ этой модели прямые линии ĐľŃŃ‚Đ°ŃŽŃ‚ŃŃŹ прямыми, но Ńглы иŃкажаютŃŃŹ.", +/*MISSING*/ "This model renders straight lines as straight, but it distorts angles.", + }}, + {0x711da86b, { // "\"I would like to congratulate you again!\"" + "\"PragnÄ™ jeszcze raz Ci pogratulować!\"", + "\"Seni tekrar tebrik etmek isterim!\"", + "\"Rád bych ti znovu pogratuloval!\"", + "\"ĐŻ хотел бы ещё раз Đ’Đ°Ń ĐżĐľĐ·Đ´Ń€Đ°Đ˛Đ¸Ń‚ŃŚ!\"", + "\"Ich möchte dir erneut gratulieren!\"", + }}, + {0x716d2777, { // "You summon a bonfire!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 ognisko!", + "Bir kamp ateĹźi oluĹźturdun!", + "Vyvola%l0 jsi ohništÄ›!", + "Đ’Ń‹ призвали коŃтры!", + "Du beschwörst ein Leuchtfeuer!", + }}, + {0x71b2d04a, { // "rotate view" + "obróć widok", + "görĂĽntĂĽyĂĽ çevir", + "otoÄŤenĂ­ hracĂ­ plochy", + "повернŃŃ‚ŃŚ вид", + "Ansicht rotieren", + }}, + {0x720fa237, { // "Monsters slain by you in melee are turned into friendly ghosts. Does not affect plants and friends." + "Potwory zabite przez Ciebie wrÄ™cz sÄ… zamieniane w przyjazne duchy. Nie wpĹ‚ywa na roĹ›liny i przyjaciół.", +/*MISSING*/ "Monsters slain by you in melee are turned into friendly ghosts. Does not affect plants and friends.", + "NetvoĹ™i, kterĂ© zabiješ v boji na blĂ­zko, se promÄ›nĂ­ v přátelskĂ© duchy. NepĹŻsobĂ­ na rostliny a přátelskĂ© netvory.", + "Убитые Đ’Đ°Ńими Ń€Ńками монŃтры превращаютŃŃŹ в мирных призраков. Не дейŃтвŃет на раŃтения и Ńоюзников.", + "Monster, die du im Nahkampf getötet hast, werden in freundliche Geister verwandelt. Es hat keinen Effekt auf Pflanzen und Freunde.", + }}, + {0x721a70de, { // "An Air Elemental looks like a live tornado. Once you are three (or less) cells from it, it is impossible to move closer, due to strong winds. You can stand and wait, though. This also affects most monsters." + "Powietrzny Ĺ»ywioĹ‚ak wyglÄ…da jak ĹĽywa trÄ…ba powietrzna. Gdy znajdziesz siÄ™ trzy lub mniej pĂłl od niego, nie moĹĽesz siÄ™ zbliĹĽyć bardziej, ze wzglÄ™du na silny powiew. MoĹĽesz jednak stać w miejscu i czekać. Powietrzny Ĺ»ywioĹ‚ak wpĹ‚ywa takĹĽe na potwory.", + "Hava Unsuru canlı bir hortuma benziyor. EÄźer ondan üç ya da daha az uzaklıktaysan, güçlĂĽ rĂĽzgârlardan ötĂĽrĂĽ daha fazla yakınlaĹźman mĂĽmkĂĽn deÄźildir. Geçip gitmesini bekleyebilirsin elbette. Bu çoÄźu canavarı da etkiler. ", + "Elementál Vzduchu vypadá jako oĹľivlĂ© tornádo. Pokud jsi od nÄ›j tĹ™i nebo mĂ©nÄ› polĂ­ÄŤek, silnĂ˝ vĂ­tr ti bránĂ­ v tom, aby ses k nÄ›mu pĹ™iblĂ­Ĺľil. MĹŻĹľeš ovšem stát a ÄŤekat. Tento efekt takĂ© ovlivĹuje vÄ›tšinu netvorĹŻ.", + "ВоздŃŃные элементаль похож на живое торнадо. Đ•Ńли Đ’Ń‹ находитеŃŃŚ от него на раŃŃтоянии 3 или менее Đ’Ń‹ не можете подойти ближе из-Đ·Đ° Ńильного ветра. Но можно Ńтоять и ждать. Đ­Ń‚Đľ дейŃтвŃет на вŃех монŃтров.", + "Ein Luftelementar sieht aus wie ein lebender Tornado. Sobald man 3 Zellen oder weniger von ihm entfernt ist, ist es dank der starken Winde unmöglich näher zu kommen. Du kannst allerdings stehen und warten.", + }}, + {0x72211c18, { // "Come on, this is too easy... find a bigger castle!" + "Eee, to bÄ™dzie za Ĺ‚atwe... znajdĹş wiÄ™kszy zamek!", + "Pöfff, çok kolaydı... daha bĂĽyĂĽk bir kale bul!", + "Ale no tak, tohle je příliš jednoduchĂ©... najdi si vÄ›tší hrad!", + "ĐťŃ Đ´Đ°Đ˛Đ°Đą, ŃŤŃ‚Đľ ŃлиŃком проŃŃ‚Đľ... Найди больŃий замок!", + "Komm schon, das ist viel zu einfach... suche ein größeres Schloss!", + }}, + {0x7267229c, { // "Yet another model, which corresponds to orthographic projection of the sphere. PoincarĂ© disk model, Beltrami-Klein model, and the Gans model are all obtained by looking at either the hyperboloid model or an equidistant surface from various distances." + "Kolejny model, odpowiadajÄ…cy ortograficznemu rzutowi sfery. Model dysku, Kleina i Gansa powstajÄ… przez patrzenie na model hiperboloidy lub powierzchniÄ™ ekwidystantnÄ… z różnych odlegĹ‚oĹ›ci.", +/*MISSING*/ "Yet another model, which corresponds to orthographic projection of the sphere. PoincarĂ© disk model, Beltrami-Klein model, and the Gans model are all obtained by looking at either the hyperboloid model or an equidistant surface from various distances.", + "A tady máme další model, kterĂ˝ odpovĂ­dá ortografickĂ© projekci koule. PoincerĂ©ho disk, Beltrami-KleinĹŻv model i GansĹŻv model se zĂ­skajĂ­ tak, Ĺľe se z rĹŻznĂ˝ch vzdálenostĂ­ dĂ­váte na hyperboloidovĂ˝ model nebo na ekvidistantnĂ­ plochu.", + "Ещё одна модель, ŃоответŃтвŃющая ортогональной проекции Ńферы. Модели диŃка, Клейна и Đ“Đ°Đ˝ŃĐ° могŃŃ‚ быть полŃчены проекциями из модели гиперболоида или из эквидиŃтанты Ń Ń€Đ°Đ·Đ˝Ń‹Ń… раŃŃтояний.", +/*MISSING*/ "Yet another model, which corresponds to orthographic projection of the sphere. PoincarĂ© disk model, Beltrami-Klein model, and the Gans model are all obtained by looking at either the hyperboloid model or an equidistant surface from various distances.", + }}, + {0x72f22ebb, { // "continue game" + "kontynuuj grÄ™", + "oyuna devam et", + "pokraÄŤuj ve hĹ™e", + "продолжить игрŃ", + "Weiter", + }}, + {0x730c071a, { // "Unbalanced shards in your inventory are dangerous." + "Niebezpiecznie jest nosić niezrĂłwnowaĹĽone Okruchy.", +/*MISSING*/ "Unbalanced shards in your inventory are dangerous.", + "NevyrovnanĂ© Ăšlomky ve tvĂ©m inventáři jsou nebezpeÄŤnĂ©.", + "НеŃбаланŃированноŃŃ‚ŃŚ ĐľŃколков в Đ’Đ°Ńем инвентаре опаŃна.", + "Unbalancierte Scherben in deinem Inventar sind gefährlich.", + }}, + {0x731011ff, { // "The Hyperbugs are fighting!" + "Hiperinsekty ze sobÄ… walczÄ…!", + "AĹźkınböcekler savaşıyor!", + "Hyperhmyzáci bojujĂ­ mezi sebou!", + "ГипержŃки ŃражаютŃŃŹ!", + "Die Hyperkäfer kämpfen!", + }}, + {0x731c0efe, { // "%The1 is destroyed by the forces of Life!" + "SiĹ‚y Ĺ»ycia zniszczyĹ‚y %a1!", + "YaĹźam güçleri %a1 yok etti!", + "SĂ­la Ĺ˝ivota zniÄŤila %a1!", + "Сила Жизни Ńничтожила %a1!", + "Die Kräfte des Lebens zerstören %den1 %a1!", + }}, + {0x736ac465, { // "a = add v" + "a = dodaj v", + "a = ekle v", + "a = pĹ™idej v", + "a = добавить v", + "a = hinzufĂĽgen v", + }}, + {0x73713b3b, { // "You kill %the1 with a mental blast!" + "Zabi%Ĺ‚eĹ›0 %a1 mocÄ… psychicznÄ…!", + "%a2 zihin patlamasıyla öldĂĽrdĂĽn!", + "Zabi%l1 jsi %a2 mentálnĂ­m Ăştokem!", + "Đ’Ń‹ Ńбили %a1 ĐżŃихичеŃким взрывом!", + "Du tötest %den1 %a1 mit einem mentalen StoĂź!", + }}, + {0x73962d4d, { // "You may be unable to leave %the1 if you are not careful!\n" + "JeĹ›li nie uwaĹĽasz, moĹĽesz nie być w stanie stÄ…d uciec!", +/*MISSING*/ "You may be unable to leave %the1 if you are not careful!\n", + "Pokud si nedáš pozor, moĹľná uĹľ se odsud nedostaneš!", + "Возможно, вы не Ńможете отŃŃŽĐ´Đ° выбратьŃŃŹ, еŃли не бŃдете ĐľŃторожны!", +/*MISSING*/ "You may be unable to leave %the1 if you are not careful!\n", + }}, + {0x73fd37f2, { // "which coefficient" + "ktĂłry współczynnik", +/*MISSING*/ "which coefficient", + "kterĹŻ koeficient", + "какой коэффициент", + "welcher Koeffizient", + }}, + {0x741dafec, { // "Customize character" + "pokoloruj postać", + "Karakteri dĂĽzenle.", + "upravit postavu", + "НаŃтройка перŃонажа", + "Character anpassen", + }}, + {0x7466d4c4, { // "With each %1 you collect..." + "Z kaĹĽd%ymÄ…1 %abl1, ktĂłre znajdujesz...", + "%2 gittikçe daha tehlikeli bir hâl alıyor...", + "S kaĹľd%Ă˝m1 %abl1, kterĂ˝ sebereš...", + "С каждым Ńобранным %abl1...", + "Mit jedem gesammelten %d1...", + }}, + {0x748de98c, { // " (press ESC for some hints about it)." + " (naciĹ›nij ESC by dostać wskazĂłwki).", + " (ESC ile hakkında yardıma ulaĹźabilirsin).", + " (stiskni ESC pro trochu nápovÄ›dy).", + " (нажмите ESC, чтобы полŃчить подŃказки).", + " (DrĂĽcke ESC fĂĽr Hinweise).", + }}, + {0x74ae0912, { // "leave the game" + "opuść grÄ™", +/*MISSING*/ "leave the game", + "vyskoÄŤ ze hry", + "покинŃŃ‚ŃŚ игрŃ", +/*MISSING*/ "leave the game", + }}, + {0x74bc9920, { // "You destroy %the1." + "Zniszczy%Ĺ‚eĹ›0 %a1.", + "%a1 yok ettin.", + "ZniÄŤi%l0 jsi %a1.", + "Đ’Ń‹ Ńничтожили %a1.", + "Du zerstörst %den1 %a1.", + }}, + {0x74c9faac, { // "%The1 tries to dismount you!" + "%1 prĂłbuje CiÄ™ zrzucić!", +/*MISSING*/ "%The1 tries to dismount you!", + "%1 se tÄ› snaží shodit!", + "%1 пробŃет ŃброŃить ваŃ!", + "%Der1 %1 versucht dich abzuwerfen!", + }}, + {0x75123c27, { // "%The1 fills the hole!" + "%1 zatka%Ĺ‚1 dziurÄ™!", + "%1 deliÄźi dolduruyor!", + "%1 vyplni%l1 dĂ­ru!", + "%1 Ńпал%E1 в Đ´Ń‹Ń€Ń!", + "%Der1 %1 fĂĽllt das Loch!", + }}, + {0x7520df5b, { // "render spiral" + "rysuj spiralÄ™", +/*MISSING*/ "render spiral", + "renderovánĂ­ spirály", + "нариŃовать Ńпираль", +/*MISSING*/ "render spiral", + }}, + {0x753099b4, { // "enable the Hypersian Rug mode" + "wĹ‚Ä…cz tryb hiperskiego dywanu", +/*MISSING*/ "enable the Hypersian Rug mode", + "aktivuj mĂłd hyperskĂ©ho koberce", + "включить режим гиперŃидŃкого ковра", + "Aktiviere den Hypersischen-Teppich-Modus", + }}, + {0x75875396, { // "This parameter affects the ball model the same way as the projection parameter affects the disk model." + "Ten parametr wpĹ‚ywa na model kuli w ten sam sposĂłb, co projekcja wpĹ‚ywa na model dysku.", +/*MISSING*/ "This parameter affects the ball model the same way as the projection parameter affects the disk model.", + "Tento parametr ovlivĹuje model koule stejnĂ˝m zpĹŻsobem jako projekce model disku.", + "Этот параметр влияет на модель Ńферы также, как параметр проекции влияет на модель диŃка.", +/*MISSING*/ "This parameter affects the ball model the same way as the projection parameter affects the disk model.", + }}, + {0x75c48ec5, { // "player 4 spin" + "gracz 4 obrĂłt", +/*MISSING*/ "player 4 spin", + "hráč 4 otáčenĂ­", + "игрок 4 вертит", + "Spieler 4 drehen", + }}, + {0x75d73de0, { // "azimuthal equidistant" + "azymutalny, rĂłwne d", +/*MISSING*/ "azimuthal equidistant", + "azimutálnĂ­ dĂ©lkojevnĂ˝", + "азимŃтальная, Ńохранение раŃŃтояний", + "mittabstandstreu azimutal", + }}, + {0x7623ae12, { // "The ivy kills %the1!" + "Bluszcz zabiĹ‚ %a1!", + "Sarmaşık %a1 öldĂĽrdĂĽ!", + "BĹ™eÄŤĹĄan zabil %a1!", + "Плющ Ńбил %a1!", + "Der Efeu tötet %den1 %a1!", + }}, + {0x763d0f84, { // "The skeleton of a tree." + "Szkielet drzewa.", +/*MISSING*/ "The skeleton of a tree.", + "Skelet stromu.", + "Скелет дерева.", + "Das Skelett eines Baumes.", + }}, + {0x766ddf1f, { // "Bonus land, available only in some special modes.\n" + "Kraina dodatkowa, dostÄ™pna tylko w niektĂłrych trybach.\n", +/*MISSING*/ "Bonus land, available only in some special modes.\n", + "BonusovĂ˝ kraj, kterĂ˝ je dostupnĂ˝ pouze v nÄ›kterĂ˝ch speciálnĂ­ch mĂłdech.\n", + "Дополнительная земля, Đ´ĐľŃŃ‚Ńпна только в дополнительных режимах.\n", + "Bonusland, nur in einigen Spezialmodi verfĂĽgbar.\n", + }}, + {0x76c3bfe1, { // "lose all treasure" + "utrata skarbĂłw", + "tĂĽm hazineyi kaybet", + "zbav se všech pokladĹŻ", + "потерять вŃе Ńокровища", + "verliere alle Schätze", + }}, + {0x76ddb79b, { // "Mighty warriors from the Fjord, who can use boats." + "Potężni wojownicy z Fiordu, uĹĽywajÄ…cy Ĺ‚Ăłdek.", + "Fiyortun kayık kullanabilen kudretli savaşçıları.", + "MocnĂ­ váleÄŤnĂ­ci z Fjordu, kteří se dokážou plavit na ÄŤlunech.", + "МогŃчие воины из Фьорда, ŃпоŃобные иŃпользовать лодки.", + "Mächtige Krieger die von den Fjorden stammen und Boote benutzen.", + }}, + {0x771d2159, { // "character" + "postać", + "karakter", + "postava", + "перŃонаж", + "Rolle", + }}, + {0x77738337, { // "compass size" + "rozmiar kompasu", +/*MISSING*/ "compass size", + "velikost kompasu", +/*MISSING*/ "compass size", +/*MISSING*/ "compass size", + }}, + {0x77837aed, { // "\"I enjoy watching the hyperbug battles.\"" + "\"LubiÄ™ oglÄ…dać bitwy hiperinsektĂłw.\"", + "\"AĹźkınböcek savaĹźlarını izlemek hoĹźuma gidiyor.\"", + "\"Rád se dĂ­vám na bitvy HyperhmyzákĹŻ.\"", + "\"Мне нравитŃŃŹ наблюдать Đ·Đ° боями гипержŃков.\"", + "\"Ich mag es, den Hyperkäfern beim Kämpfen zuzusehen.\"", + }}, + {0x77aad383, { // "vector graphics editor -- press F1 for help" + "edytor grafiki -- wciĹ›nij F1, by zobaczyć pomoc", + "vektör grafik editörĂĽ -- yardım için F1'e bas.", + "editor vektorovĂ© grafiki -- nápovÄ›du zobrazíš stiskem F1", + "графичеŃкий редактор -- нажмите F1, чтобы полŃчить помощь", + "Vektor Grafiken Editor -- drĂĽcke F1 um Hilfe zu erhalten", + }}, + {0x77ac3c91, { // "A piece of a magic mirror, or a mirage cloud, that can be used for magical purposes. Only mirrors and clouds in the Land of Mirrors leave these." + "OdĹ‚amek szkĹ‚a z magicznego lustra albo fragment miraĹĽowej chmury. MoĹĽe zostać uĹĽyty do magii. Tylko lustra i chmury z Krainy Luster zostawiajÄ… odĹ‚amki.", + "Sihirli aynanın veya yansı bulutunun bir parçası. Sihirli amaçlar için kullanılabilir. Sadece aynalar ve bulutlardan dĂĽĹźer.", + "Kousek kouzelnĂ©ho zrcadla nebo oblaku pĹ™eludĹŻ, kterĂ˝ je moĹľnĂ© používat pro magickĂ© účely.ZanechávajĂ­ je po sobÄ› pouze zrcadla a oblaky v Kraji zrcadel.", + "ЧаŃŃ‚ŃŚ магичеŃкого зеркала или облака миражей. Может быть иŃпользовано в магичеŃких целях. Может быть полŃчено только в Зеркальной земле.", + "Ein StĂĽck eines Zauberspiegels oder einer Illusionswolke, das fĂĽr magische Zwecke verwendet werden kann. AusschlieĂźlich Zauberspiegel und Illusionswolken im Land der Spiegel hinterlassen so etwas.", + }}, + {0x77b3f296, { // "eight domains" + "osiem domen", + "sekiz alan", + "osm domĂ©n", + "воŃемь облаŃтей", + "Acht Bereiche", + }}, + {0x77ca7f5b, { // "Welcome to the Shoot'em Up mode!" + "Witaj w trybie strzelanki!", + "Witaj w trybie strzelanki!", + "VĂ­tej v mĂłdu stříleÄŤky!", + "Добро пожаловать в режим Ńтрельбы!", + "Willkommen im Ballermodus!", + }}, + {0x77d6ace1, { // "set 3D monsters or walls in basic config first" + "najpierw ustaw 3D potwory/Ĺ›ciany w konfiguracji podstawowej", +/*MISSING*/ "set 3D monsters or walls in basic config first", + "nejprve musíš nastavit 3D netvory nebo zdi v základnĂ­ konfiguraci", + "Ńначала выŃтавлять монŃтров или Ńтены в режиме 3D ", +/*MISSING*/ "set 3D monsters or walls in basic config first", + }}, + {0x784ca1bd, { // "%The1 is extinguished!" + "%2 ugasi%Ĺ‚2 %a1!", + "%1 söndĂĽ!", + "Elementál Vody uhasil %a1!", + "%1 гаŃнет!", + "%Der1 %a1 wurde ausgelöscht!", + }}, + {0x786da209, { // "It would be impolite to land on the table!" + "ByĹ‚oby niegrzecznie wylÄ…dować na stole!", + "Masaya çıkmak çok yakışıksız olur!", + "Přístát na stole by bylo nezdvoĹ™ilĂ©!", + "Было бы невежливо приземлятьŃŃŹ на Ńтол!", + "Es wäre unhöflich auf dem Tisch zu landen.", + }}, + {0x787b6ed1, { // "This wall is quite strong. You will need another way in." + "Ĺšciana kurhanu jest dosyć mocna, musisz poszukać innego wejĹ›cia.", +/*MISSING*/ "This wall is quite strong. You will need another way in.", + "Tato stÄ›na je velice pevná. Musíš najĂ­t jinou cestu dovnitĹ™.", + "Đ­Ń‚Đ° Ńтена довольно крепкая. Đ’Đ°ĐĽ Đ˝Ńжен Đ´Ń€Ńгой ĐżŃŃ‚ŃŚ.", + "Diese Wand ist sehr stabil - du brauchst einen anderen Weg hinein.", + }}, + {0x78b4341e, { // "These statues of Cthulhu are too large to carry, and they don't look too valuable anyway. Most monsters will never go through them... they probably have their reasons. But you can go! When you move into the cell containing a statue, you push the statue to the cell you left.\n" + "Te pomniki Cthulhu sÄ… za duĹĽe, by je nosić, zresztÄ… i tak nie wyglÄ…dajÄ… na zbyt cenne. Potwory nigdy przez nie nie przechodzÄ…... pewnie majÄ… swoje powody. Ale Ty moĹĽesz przejść! Kiedy wchodzisz na pole z pomnikiem, automatycznie przesuwasz pomnik na pole, ktĂłre opuĹ›ci%Ĺ‚eĹ›0.", + "Cthulhu putları taşımak için fazla bĂĽyĂĽk, zaten çok deÄźerli de gözĂĽkmĂĽyorlar. Canavarların çoÄźu onların içinden geçmiyor, bunun bir sebebi olmalı. Ama sen bunların içinden geçebilirsin! Putun olduÄźu hĂĽcreye girdiÄźinde putu terkettiÄźin hĂĽcreye itersin. \n", + "Tyto Cthulhuovy sochy jsou příliš velkĂ© na to, abys je unesl, a navĂ­c ani nevypadajĂ­ příliš cennĂ©. VÄ›tšina netvorĹŻ skrz nÄ› nikdy nepĹŻjde... asi majĂ­ svĂ© dĹŻvody. Ale ty pĹ™es nÄ› chodit mĹŻĹľeš! KdyĹľ vstoupíš na polĂ­ÄŤko se sochou, odstrčíš ji na to polĂ­ÄŤko, kterĂ© jsi opusti%l0.", + "Эти ŃŃ‚Đ°Ń‚Ńи КтŃĐ»Ń…Ń ŃлиŃком велики, чтобы их забрать, Đ´Đ° и не выглядят ĐľŃобо ценными. БольŃинŃтво монŃтров не может ходить через них, Ń Đ˝Đ¸Ń… еŃŃ‚ŃŚ на Ń‚Đľ Ńвои причины. Но Đ’Ń‹ можете! Когда Đ’Ń‹ ходите на ĐşĐ»ĐµŃ‚ĐşŃ Ń ĐżĐ°ĐĽŃŹŃ‚Đ˝Đ¸ĐşĐľĐĽ, он ŃдвигаетŃŃŹ на клеткŃ, которŃŃŽ Đ’Ń‹ покинŃли.", + "Diese Cthulhu-Statuen sind zu groĂź um sie zu tragen - und sehen sowieso nicht sonderlich wertvoll aus. Die meisten Monster gehen nie an ihnen vorbei, dafĂĽr haben sie wohl ihre GrĂĽnde. Du aber schon! Wenn du in die Zelle gehst, in der eine steht, schiebst du sie an deinen Ursprungsort.", + }}, + {0x7933ecb8, { // " for Android" + " na Android", + " Android için", + " na Android", + " на Android", + " fĂĽr Android", + }}, + {0x79603e13, { // "Defeat 100 enemies to access the Graveyard" + "Pokonaj 100 przeciwnikĂłw, by trafić na Cmentarz", + "Mezarlığa eriĹźmek için 100 dĂĽĹźman öldĂĽr.", + "HĹ™bitov zpřístupníš poraĹľenĂ­m 100 nepřátel", + "Убейте 100 врагов, чтобы открыть Кладбище", + "Töte 100 Gegner um Zugang zum Friedhof zu erhalten", + }}, + {0x796f67a0, { // "Annoying insects. They can awaken Sleeping Bulls." + "IrytujÄ…ce owady. MogÄ… budzić ĹšpiÄ…ce Byki.", +/*MISSING*/ "Annoying insects. They can awaken Sleeping Bulls.", + "OtravnĂ˝ hmyz. Dokáže probudit SpĂ­cĂ­ BĂ˝ky.", + "Надоедливые наŃекомые. МогŃŃ‚ бŃдить Спящих быков.", +/*MISSING*/ "Annoying insects. They can awaken Sleeping Bulls.", + }}, + {0x79a71f0c, { // "monsters destroyed: %1" + "potwory zniszczone: %1", +/*MISSING*/ "monsters destroyed: %1", + "zniÄŤenĂ­ nepřátelĂ©: %1", + "монŃтров Ńничтожено: %1", + "zerstörte Monster: %1", + }}, + {0x79afcedc, { // "You cannot defeat the Greater Demon yet!" + "Nie moĹĽesz jeszcze pokonać Wielkiego Demona!", + "BĂĽyĂĽk Ĺžeytanı henĂĽz yenemezsiniz!", + "Ďábla ještÄ› porazit nemĹŻĹľeš!", + "Đ’Ń‹ пока не можете победить СтарŃего демона!", + "Du kannst den Mächtigen Dämon noch nicht besiegen!", + }}, + {0x79c0f4f4, { // "%The1 is filled!" + "%1 zosta%Ĺ‚1 zalan%1y!", +/*MISSING*/ "%The1 is filled!", + "%1 je naplnÄ›n%1Ă˝!", + "%1 наполнил%c1!", +/*MISSING*/ "%The1 is filled!", + }}, + {0x79c4823b, { // "hexagonal" + "szeĹ›ciokÄ…t", + "altıgensel", + "šestiĂşhelnĂ­ky", + "ŃеŃтиŃгольник", + "hexagonal", + }}, + {0x79e5a8d7, { // " kills: %1" + " zabicia: %1", + " leĹźler: %1", + " zabito nepřátel: %1", + " ŃбийŃтв: %1", + " Kills: %1", + }}, + {0x7a2f868f, { // "configure panning" + "skonfiguruj przewijanie", + "kaydırmayı ayarla", + "konfigurace scrollovánĂ­", + "наŃтройки прокрŃтки", + "Schwenken konfigurieren", + }}, + {0x7a330767, { // "Evil people are mining for emeralds in this living cave. It does not grow naturally, but it is dug out in a regular pattern, which is optimal according to the evil engineers." + "Ĺąli ludzie szukajÄ… szmaragdĂłw w tej ĹĽywej jaskini. Nie roĹ›nie ona naturalnie -- ludzie wykopujÄ… regularne wzory, ktĂłre, zgodnie z ocenÄ… zĹ‚ych inĹĽynierĂłw, sÄ… 'optymalne'. ", + "KötĂĽ insanlar bu maÄźarada zĂĽmrĂĽt çıkarıyor. DoÄźal yollarla çıkmıyor, Ĺźeytani mĂĽhendislerin iĹźine gelecek Ĺźekilde dĂĽzenli bir Ĺźemayla çıkarılıyor.", + "V tĂ©to ĹľivoucĂ­ jeskyni těží zlĂ­ lidĂ© smaragdy. Neroste pĹ™irozenÄ›, ale je vykopána v pravidelnĂ©m vzoru, kterĂ˝ zlĂ­ inĹľenýři pokládajĂ­ za optimálnĂ­.", + "Злые люди иŃкали изŃĐĽŃ€ŃĐ´Ń‹ в Живой пещере. Она не раŃŃ‚Ń‘Ń‚ ŃĐ°ĐĽĐ°, но выкопана периодичеŃки оптимально для Đ˝Ńжд злых инженеров. ", + "Böse Leute bauen Smaragde in dieser lebenden Höhle ab. Sie entsteht nicht natĂĽrlich, sondern wird in einem Muster ausgebaut das die bösen Arbeiter als optimal ansehen.", + }}, + {0x7a64eea8, { // ", %1" + ", %1", +/*MISSING*/ ", %1", + ", %1", + ", %1", + ", %1", + }}, + {0x7a696805, { // "w = walls" + "w = Ĺ›ciany", + "w = duvar", + "b = hranice", + "m = монŃтры", + "w = Wände", + }}, + {0x7a727f8b, { // "%The1 bites %the2!" + "%1 ugryz%Ĺ‚1 %a2!", + "%1 %a2 ısırdı!", + "%1 kous%l1 %2!", + "%1 Ńдарил%E1 %a2!", + "%Der1 %1 beiĂźt %den2 %a2!", + }}, + {0x7a94214b, { // "In the shoot'em up mode, space and time is continuous. You attack by throwing knives. Very fun with two players!\n\nThere are other special modes too which change the gameplay or focus on a particular challenge." + "W trybie strzelanki czas i przestrzeĹ„ sÄ… ciÄ…gĹ‚e. Atakujesz rzucajÄ…c noĹĽami. Bardzo fajne na dwĂłch graczy!\n\nJest wiele trybĂłw specjalnych, zmieniajÄ…cych rozgrywkÄ™ lub koncentrujÄ…cych siÄ™ na konkretnym wyzwaniu.", +/*MISSING*/ "In the shoot'em up mode, space and time is continuous. You attack by throwing knives. Very fun with two players!\n\nThere are other special modes too which change the gameplay or focus on a particular challenge.", + "V mĂłdu stříleÄŤky je prostor i ÄŤas spojitĂ˝. Ăštočíš vrhánĂ­m nožů. Veliká legrace ve dvou hráčích!\n\nHyperRogue takĂ© obsahuje další speciálnĂ­ mĂłdy, kterĂ© mÄ›nĂ­ zpĹŻsob hry nebo jsou zaměřenĂ© na urÄŤitĂ˝ Ăşkol.", + "Đ’ режиме Ńтрельбы проŃтранŃтво и время непрерывны. Ты Đ°Ń‚Đ°ĐşŃеŃŃŚ, кидая ножи. Очень веŃело для двоих игроков!\n\nĐ•ŃŃ‚ŃŚ и Đ´Ń€Ńгие Ńпециальные режимы, изменяющие Đ¸ĐłŃ€Ń Đ¸Đ»Đ¸ концентрирŃющиеŃŃŹ на определённых задачах.", +/*MISSING*/ "In the shoot'em up mode, space and time is continuous. You attack by throwing knives. Very fun with two players!\n\nThere are other special modes too which change the gameplay or focus on a particular challenge.", + }}, + {0x7a952f83, { // "Chaos mode" + "tryb Chaosu", +/*MISSING*/ "Chaos mode", + "chaotickĂ˝ mĂłd", + "режим ĐĄĐ°ĐľŃĐ°", + "Chaos-Modus", + }}, + {0x7ad3304d, { // "length of a segment" + "dĹ‚ugość segmentu", +/*MISSING*/ "length of a segment", + "dĂ©lka segmentu", + "длина отрезка", + "Länge eines Segments", + }}, + {0x7ae6977d, { // "Apparently a prince is kept locked somewhere, but you won't ever find him in this hyperbolic palace. " + "GdzieĹ› tu jest uwiÄ™ziony ksiÄ…ĹĽÄ™, ale w tym hiperbolicznym paĹ‚acu nigdy go nie znajdziesz. ", + "GörĂĽnen o ki, bir Ĺźehzade bir yerlerde saklı tutuluyor, ama bu hiperbolik sarayda onu bulman mĂĽmkĂĽn deÄźil. ", + "NÄ›kde je tu prĂ˝ uvÄ›znÄ›nĂ˝ princ, ale toho v tomhle hyperbolickĂ©m paláci nikdy nenajdeš. ", + "Видимо, принц где-Ń‚Đľ заперт, но в гиперболичеŃком дворце Đ’Ń‹ его не найдёте. ", + "Scheinbar ist irgendwo ein Prinz eingesperrt, aber du wirst ihn in diesem hyperbolischem Palast nie finden.", + }}, + {0x7b2a0f9e, { // "High quality shots not available on this platform" + "Zrzuty HQ niedostÄ™pne na tej platformie", + "YĂĽksek kalite resimler bu platformda mevcut deÄźil", + "HQ snĂ­mky nejsou na tĂ©to platformÄ› k dispozici", + "Скрины выŃокого качеŃтва недоŃŃ‚Ńпны на этой платформе", + "HQ Screenshots sind auf diesem Gerät nicht verfĂĽgbar", + }}, + {0x7b411bc8, { // "This Orb gives you a weapon made of pure magical energy. You do not hold it, it simply floats in the air next to you. When you go, the energy sword moves with you, pointing at the same relative angle it pointed before -- you cannot move or rotate it otherwise. Most monsters can be killed by moving the sword into them, and won't move into the spot with the sword." + "Ta Sfera daje Ci ostrze zbudowanÄ… z czystej magicznej energii. Nie trzymasz go w rÄ™ce, po prostu unosi siÄ™ ono w powietrzu obok Ciebie. Kiedy siÄ™ poruszasz, ostrze energii porusza siÄ™ razem z TobÄ…, pozostajÄ…c skierowane pod tym samym kÄ…tem wzglÄ™dem Twojego ruchu, co wczeĹ›niej -- nie moĹĽesz nim obracać ani poruszać w inny sposĂłb. WiÄ™kszość potworĂłw ginie, gdy uderzysz w nie ostrzem, nie wejdÄ… one teĹĽ na pole, na ktĂłrym ostrze jest.", +/*MISSING*/ "This Orb gives you a weapon made of pure magical energy. You do not hold it, it simply floats in the air next to you. When you go, the energy sword moves with you, pointing at the same relative angle it pointed before -- you cannot move or rotate it otherwise. Most monsters can be killed by moving the sword into them, and won't move into the spot with the sword.", + "Tato SfĂ©ra ti poskytne zbraĹ vyrobenou z ÄŤistĂ© magickĂ© energie. Nedržíš ji -- prostÄ› se jen vznáší ve vzduchu vedle tebe. Kamkoli pĹŻjdeš, energetickĂ˝ meÄŤ pĹŻjde s tebou a bude namĂ­Ĺ™enĂ˝ ve stejnĂ©m relativnĂ­m Ăşhlu -- jinak s nĂ­m nemĹŻĹľeš pohybovat ani otáčet. VÄ›tšinu netvorĹŻ lze zabĂ­t tĂ­m, Ĺľe na jejich polĂ­ÄŤko posuneš meÄŤ, a samotnĂ­ netvoĹ™i na polĂ­ÄŤko s meÄŤem nevstoupĂ­.", + "Đ­Ń‚Đ° Ńфера Đ´Đ°Ń‘Ń‚ вам меч из чиŃтой магичеŃкой энергии. Đ’Ń‹ не неŃёте его, он ŃĐ°ĐĽ летит Đ·Đ° вами. Когда вы идёте, он движетŃŃŹ Đ·Đ° вами, ĐľŃтаваяŃŃŚ под тем же Ńглом отноŃительно Đ˛Đ°Ń -- вы не можете двигать или вращать его иначе. БольŃинŃтво монŃтров можно Ńбить, передвинŃв на их ĐşĐ»ĐµŃ‚ĐşŃ ĐĽĐµŃ‡, и они не могŃŃ‚ пойти на ĐşĐ»ĐµŃ‚ĐşŃ Ń ĐĽĐµŃ‡ĐľĐĽ.", + "Dieser Orb stellt dir eine Waffe aus purer magischer Energie zur VerfĂĽgung. Du hältst dieses Schwert nicht; es schwebt einfach neben dir in der Luft. Wenn du dich bewegst, bewegt sich das Energieschwert mit dir, wobei es in dieselbe relative Richtung zeigt wie zuvor; du kannst es nicht in anderer Weise bewegen oder drehen. Die meisten Monster können getötet werden, indem das Schwert in sie hineinbewegt wird, und begeben sich nicht auf das Feld mit dem Schwert.", + }}, + {0x7b5d1002, { // "F4 = extension" + "F4 = rozszerzenie", + "F4 = geniĹźletme", + "F4 = rozšířenĂ­", + "F4 = раŃŃирение", + "F4 = Erweiterung", + }}, + {0x7b6549fd, { // "In this mode you can draw your own player character and floors. Mostly for the development purposes, but you can have fun too.\n\nf - floor, p - player (repeat 'p' for layers)\n\nn - new shape, u - copy the 'player body' shape\n\n1-9 - rotational symmetries, 0 - toggle axial symmetry\n\npoint with mouse and: a - add point, m - move nearest point, d - delete nearest point, c - nearest point again, b - add after nearest\n\ns - save in C++ format (but cannot be loaded yet without editing source)\n\nz - zoom, o - PoincarĂ© model\n" + "W tym trybie moĹĽesz narysować swojÄ… wĹ‚asnÄ… postać albo podĹ‚ogÄ™. GĹ‚Ăłwnie w celu rozwijania gry, ale Ty teĹĽ moĹĽesz siÄ™ pobawić.\n\nf - podĹ‚oga, p - gracz (powtarzaj, by zmienić warstwÄ™)\n\nn - nowy ksztaĹ‚t, u - skopiuj standardowÄ… postać gracza\n\n1-9 - symetrie obrotowe, 0 - symetria osiowa\n\nwskaĹĽ myszÄ… i: a - dodaj punkt, m - przesuĹ„ najbliĹĽszy punkt, d - skasuj najbliĹĽszy punkt, c - powtĂłrz najbliĹĽszy punkt, b - po najbliĹĽszym\n\ns - zapisz w formacie C++ (niestety obecnie nie moĹĽna wczytać bez edytowania ĹşrĂłdeĹ‚ gry)\n\nz - powiÄ™kszenie, o - model PoincarĂ©\n", + "Bu modda, kendi karakterini ve zemini çizebilirsin. Aslında geliĹźtirme amaçları için vri ama eÄźlence için de kullanabilirsin.\n\nf - zemin, p - oyuncu (katman eklemek için 'p'ye tekrar bas)\n\nn - yeni Ĺźekil, u - oyuncu Ĺźeklini kopyala\n\n1-9 - döngĂĽsel simetriler, 0 - eksensel simetriyi aç/kapa\n\nfareyle göster ve: a - nokta ekle, m - en yakındaki noktaya git, d - en yakındaki noktayı sil, c - tekrar en yakın nokta, b - en yakından sonraya ekle\n\ns - C++ formatında sakla (ancak kaynağı dĂĽzenlemeden yĂĽklenemez)\n\nz - yakınlaĹź, o - PoincarĂ© modeli\n", + "V tomto mĂłdu mĹŻĹľeš nakreslit vlastnĂ­ postavu a podlahu. Slouží pĹ™edevším pro vĂ˝voj hry, ale mĹŻĹľeš se s nĂ­m i pobavit.\n\nf - podlaha, p - postava (opakovanĂ˝m stiskem 'p' pĹ™epĂ­náš mezi vrstvami)\n\nn - novĂ˝ tvar, u - zkopĂ­ruj tvar 'tÄ›lo postavy'\n\n1-9 - rotaÄŤnĂ­ symetrie, 0 - zapnout/vypnout osovou symetrii\n\nzamiĹ™ myší a: a - pĹ™idej bod, m - pĹ™esuĹ nejbližší bod, d - vymaĹľ nejbližší bod, c - znovu nejbližší bod, b - pĹ™idej za nejbližším\n\ns - uloĹľ ve formátu C++ (bez editovánĂ­ zdroje však prozatĂ­m soubor nelze nahrát)\n\nz - pĹ™iblĂ­ĹľenĂ­/vzdálenĂ­, o - PoincarĂ©ho model\n", + "Đ’ этом режиме Đ’Ń‹ можете риŃовать перŃонажа и вŃŃ‘ окрŃжение. Đ’ ĐľŃновном для Đ˝Ńжд разработчиков, но и проŃŃ‚Đľ для веŃелья тоже.\n\nf - пол, p - игрок (повторите для Ńмены Ńлоя)\n\nn - новая форма, u - копировать Ń„ĐľŃ€ĐĽŃ Đ¸ĐłŃ€ĐľĐşĐ°\n\n1-9 - повороты, 0 - ĐľŃевая Ńимметрия\n\nĐ Đ°ŃŃтавьте точки ĐĽŃ‹Ńкой и: a - добавить точкŃ, m - двигать ближайŃŃŃŽ точкŃ, d - Ńдалить ближайŃŃŃŽ точкŃ, c - Ńнова ближайŃĐ°ŃŹ точка, b - поŃле ближайŃей\n\ns - запиŃŃŚ в формате C++ (пока не может быть загрŃжено без редактирования иŃходников)\n\nz - Ńвеличение, o - модель ĐźŃанкаре\n", + "Hier kannst du deine eigenen Spielfiguren/Bodenplatten zeichnen. Primär zur Entwicklung, aber hab SpaĂź.\n\nf - Boden, p - Spieler (wiederholt fĂĽr Schichten)\n\nn - neue Form, u - kopiere die Körperform des Spielers\n\n1-9 - Dreh-Symmetrie, 0 - Achsen-Symmetrie umschalten\n\nMaus darĂĽber und: a - Punkt hinzufĂĽgen, m - Nächsten Punkt verschieben, d - Nächsten Punkt löschen, c - Nächsten Punkt kopieren, b - Nach Nächstem Punkt hinzufĂĽgen\n\ns - im C++-Format speichern (kannst du aber noch nicht laden, ohne Quellcode zu ändern)\n\nz - Zoom, o - PoincarĂ©-Modell\n", + }}, + {0x7b97b391, { // "display pattern codes (simplified)" + "pokaĹĽ kody wzorku (uproszczone)", + "doku kodlarını göster (basitleĹźtirilmiĹź)", + "zobraz kĂłdy vzoru (zjednodušenĂ©)", + "показать коды Ńзоров (Ńпрощённые)", + "Muster Codes anzeigen (vereinfacht)", + }}, + {0x7b98a273, { // "move down-left" + "ruch w dół-lewo", +/*MISSING*/ "move down-left", + "pohyb doleva dolĹŻ", + "ход вниз-влево", +/*MISSING*/ "move down-left", + }}, + {0x7bb124ed, { // "You need an Orb of Teleport to teleport." + "Potrzebujesz Sfery Teleportacji, by to zrobić.", + "Işınlanmak için Işınlanma KĂĽresine ihtiyacın var.", + "K teleportaci potĹ™ebuješ SfĂ©ru teleportace.", + "Đ’Đ°ĐĽ Đ˝Ńжна Ńфера телепорта для телепортации.", + "Du brauchst einen Orb der Teleportation um dich zu teleportieren.", + }}, + {0x7c18932f, { // "%The1 suffocates!" + "%1 siÄ™ udusi%Ĺ‚1!", +/*MISSING*/ "%The1 suffocates!", + "%1 leknu%l1!", + "%1 задыхаетŃŃŹ!", + "%Der1 %1 erstickt!", + }}, + {0x7c4d7cd4, { // "Welcome to HyperRogue!" + "Witaj w HyperRogue!", +/*MISSING*/ "Welcome to HyperRogue!", + "VĂ­tej v HyperRogue!", + "Добро пожаловать в HyperRogue!", +/*MISSING*/ "Welcome to HyperRogue!", + }}, + {0x7c4edcbf, { // "Variants of %the1 are available in the Random Pattern Mode after getting a highscore of at least 10 %2." + "Warianty krainy %1 sÄ… dostÄ™pne w trybie losowych wzorkĂłw po zdobyciu 10x %2.", + "%1 çeĹźitlemeleri Rastgele Doku Modunda en az on tane %2 skoru elde ederek açılır. ", + "Varianty kraje '%1' jsou dostupnĂ© v MĂłdu náhodnĂ˝ch vzorĹŻ po zĂ­skánĂ­ nejmĂ©nÄ› 10x %2.", + "Варианты земли %1 Đ´ĐľŃŃ‚Ńпны в редиме ŃĐ»Ńчайного Ńзора при рекорде не менее 10x %2.", + "Varianten der %1 sind im Zufallsmuster-Modus verfĂĽgbar, nachdem eine Punktzahl von 10x %2 erreicht wurde.", + }}, + {0x7c4f337d, { // "Unlock this challenge by getting the Orb of Yendor!" + "Odblokuj MisjÄ™ Yendor, zdobywajÄ…c SferÄ™ Yendoru!", + "Yendor'un KĂĽresi'ni alarak bu ek görevi aktif et!", + "Tuto misi odemkneš zĂ­skánĂ­m YendorskĂ© sfĂ©ry!", + "Откройте этот режим, Ńобрав ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°!", + "Finde einen Orb von Yendor um diese Herausforderung freizuschalten!", + }}, + {0x7c79f1cf, { // "summon Mimics" + "przywoĹ‚aj Mimiki", + "Taklitçiler çıkar", + "vyvolej Mimiky", + "призвать двойников", + "rufe Mimiken herbei", + }}, + {0x7ce5604c, { // "player 3 go" + "gracz 3 idĹş", +/*MISSING*/ "player 3 go", + "hráč 3 pohyb", + "игрок 3 идёт", + "Spieler 3 los", + }}, + {0x7d054f96, { // "You feel that the souls of slain enemies pull you to the Graveyard..." + "Czujesz, jak dusze pokonanych wrogĂłw wzywajÄ… CiÄ™ na Cmentarz...", + "KatlettiÄźin dĂĽĹźmanların ruhlarının seni mezarlığa çektiÄźini hissediyorsun...", + "CĂ­tíš, Ĺľe tÄ› duše zabitĂ˝ch nepřátel táhnou na HĹ™bitov...", + "Đ’Ń‹ чŃвŃтвŃете, как Đ´ŃŃи Ńбитых врагов Ń‚ŃŹĐ˝ŃŃ‚ Đ’Đ°Ń Đ˝Đ° Кладбище.", + "Du hast das GefĂĽhl, dass die Seelen gefallener Gegner dich zum Friedhof fĂĽhren...", + }}, + {0x7d05b547, { // "left" + "lewo", +/*MISSING*/ "left", + "doleva", + "лево", + "links", + }}, + {0x7d13171b, { // "Fractal landscapes: application" + "Zastosowanie fraktalnych krajobrazĂłw", +/*MISSING*/ "Fractal landscapes: application", + "FraktálnĂ­ krajinky: aplikace", + "Приложение фрактальных пейзажей", +/*MISSING*/ "Fractal landscapes: application", + }}, + {0x7d14a77c, { // "Shift=random, Ctrl=mix" + "Shift=losowo, Ctrl=miks", + "Shift=rastgele, Ctrl=karışık", + "Shift=náhodná, Ctrl=smÄ›s", + "Shift=ŃĐ»Ńчайный, Ctrl=ŃмеŃĐ°Ń‚ŃŚ", + "Shift=Zufällig, Ctrl=Mischen", + }}, + {0x7da15cb3, { // "Press F5 to clear the board." + "WciĹ›nij F5, by wyczyĹ›cić planszÄ™.", + "Tahtayı temizlemek için F5'e bas", + "F5 vymaĹľe desku.", + "Нажмите F5, чтобы очиŃтить Đ´ĐľŃĐşŃ.", + "DrĂĽcke F5 um das Spielfeld zu leeren.", + }}, + {0x7e199367, { // "Take a revolver, kill outlaws, collect bounties.\n\nNote: since this land is anachronistic, it is not available in normal game. It is only available in special modes." + "WeĹş rewolwer, zabijaj bandytĂłw i zgarniaj nagrody!\n\nUwaga: ta kraina jest anachronistyczna, takĹĽe nie jest dostÄ™pna w normalnej grze. Jest za to dostÄ™pna w specjalnych trybach.", + "Altıpatları al, haydutları öldĂĽr, baĹźlarına konan ödĂĽlleri topla!\n\nNot: Bu diyar anakronistik olduÄźu için, normal oyunda mevcut deÄźil, sadece özel modlarda oynanabilir.", + "Vezmi si revolver, zabĂ­jej psance, sbĂ­rej odmÄ›ny.\n\nPoznámka: tento kraj je anachronistickĂ˝, a proto nenĂ­ k dispozici v normálnĂ­ hĹ™e. Je dostupnĂ˝ pouze ve speciálnĂ­ch mĂłdech.", + "Хватай револьвер, Ńбивай бандитов, полŃчай награды!\n\nЗамечание: Так как ŃŤŃ‚Đ° земля анахрониŃтична, она не Đ´ĐľŃŃ‚Ńпна в нормальной игре. Только в Ńпециальных режимах.", + "Schnapp dir einen Revolver, erschieĂź Banditen und beanspruche das Kopfgeld!\n\nHinweis: Dieses Land ist nur in Spezialmodi verfĂĽgbar.", + }}, + {0x7e1a72ab, { // "Collect %1 $$$ to access more worlds" + "ZnajdĹş %1 $$$, by iść do nowych krain", + "%1 $$$ toplayarak baĹźka dĂĽnyalara eriĹź", + "Další kraje zpřístupníš sesbĂ­ránĂ­m %1 $$$", + "Соберите %1 $$$, чтобы открыть новые земли", + "Sammle %1 $$$ um mehr Länder betreten zu können", + }}, + {0x7e9ca1ba, { // "Treasure required: %1 $$$.\n" + "Wymagane skarby: %1 $$$.\n", + "Hazine gerekiyor: %1 $$$.\n", + "PotĹ™ebuješ %1 $$$.\n", + "Сокровищ Đ˝Ńжно: %1 $$$.\n", + "Schätze benötigt: %1 $$$.\n", + }}, + {0x7ec15097, { // "draw circle around the target" + "rysuj kółko wokół celu", +/*MISSING*/ "draw circle around the target", + "nakresli kruh kolem cĂ­le", + "нариŃŃйте крŃжок вокрŃĐł цели", +/*MISSING*/ "draw circle around the target", + }}, + {0x7f0e5193, { // "three colors rotated" + "trzy kolory obrĂłcone", +/*MISSING*/ "three colors rotated", + "tĹ™i barvy s otoÄŤkou", + "три цвета повёрнŃтые", +/*MISSING*/ "three colors rotated", + }}, + {0x7f368ee4, { // "0-9 = radius (%1)" + "0-9 = promieĹ„ (%1)", + "0-9 = promieĹ„ (%1)", + "0-9 = polomÄ›r (%1)", + "0-9 = радиŃŃ (%1)", + "0-9 = Radius (%1)", + }}, + {0x7f386b21, { // "Scale the displayed model." + "Skaluj model na ekranie.", +/*MISSING*/ "Scale the displayed model.", + "ZměŠměřítko zobrazenĂ©ho modelu.", + "МаŃŃтаб отображаемой модели.", +/*MISSING*/ "Scale the displayed model.", + }}, + {0x7f406896, { // "last on top" + "ostatnie na gĂłrze", +/*MISSING*/ "last on top", + "poslednĂ­ nahoĹ™e", + "поŃледние ŃверхŃ", +/*MISSING*/ "last on top", + }}, + {0x7f734e80, { // "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!", +/*MISSING*/ "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!", + "Не бŃдьте обманŃŃ‚Ń‹ краŃотой, еŃли не хотите полŃчить ŃĐ´Đ°Ń€ в ŃпинŃ!", + "Lass dich von Schönheit nicht täuschen - oder du wirst erstochen, wenn du zu nah kommst!", + }}, + {0x7fef823d, { // "The Overgrown Woods are filled with mutant ivies! These plants grow very fast. Each leaf, after being grown, can grow itself on the next turn. However, each part is only able to grow once in 16 turns. Outside of the Overgrown Woods, the Mutant Ivy may grow only on hexagonal cells.\n\nMaybe such fast growing plants could help you solve the problem of hunger in your world? Kill the Mutant Ivies to collect Mutant Saplings." + "PrzeroĹ›niÄ™ty Las jest peĹ‚en zmutowanego bluszczu! Te roĹ›liny rosnÄ… bardzo szybko. KaĹĽdy liść moĹĽe sam rosnąć w nastÄ™pnej turze po wyroĹ›niÄ™ciu, ale kaĹĽda część roĹ›liny moĹĽe rosnąć tylko raz na 16 tur. Poza PrzeroĹ›niÄ™tym Lasem Zmutowany Bluszcz moĹĽe rosnąć tylko na szeĹ›ciokÄ…tach.\n\nMoĹĽe tak szybko rosnÄ…ce roĹ›liny pozwoliĹ‚yby Ci rozwiÄ…zać problem gĹ‚odu w Twoim Ĺ›wiecie? Zabijaj Zmutowane Bluszcze, by zbierać sadzonki.", + "Azman Orman mutant sarmaşıklarla dolu! Bu bitkiler çok hızlı bĂĽyĂĽr. Her yaprak, bĂĽyĂĽdĂĽkten sonra sıradaki tur kendi başına bĂĽyĂĽyebilir. Ancak, her parça ancak 16 tur içinde bir kez bĂĽyĂĽyebilir. Azman Orman dışındaki diyarlarda, Mutant Sarmaşık sadece altıgen hĂĽcrelerde bĂĽyĂĽyebilir.\n\nBelki bu kadar hızlı bĂĽyĂĽyen bitkiler dĂĽnyandaki açlık sorununu çözebilir? Mutant Fidanları toplamak için Mutant Sarmaşıkları öldĂĽr.", + "Prales je plnĂ˝ mutantnĂ­ch bĹ™eÄŤĹĄanĹŻ! Tyto rostliny velice rychle rostou. Jakmile nÄ›jakĂ˝ list vyroste, hned v následujĂ­cĂ­m kole mĹŻĹľe sám rĹŻst. KaĹľdá část však mĹŻĹľe vyrĹŻst pouze jednou za 16 kol. Mimo Prales mĹŻĹľe MutantnĂ­ bĹ™eÄŤĹĄan rĹŻst pouze na šestiĂşhelnĂ­kovĂ˝ch polĂ­ÄŤkách.\n\nRostliny s takovou rychlostĂ­ rĹŻstu by ti moĹľná mohly pomoci vyĹ™ešit problĂ©m s hladem ve tvĂ©m svÄ›tÄ›. ZabĂ­jej MutantnĂ­ bĹ™eÄŤĹĄany, abys zĂ­skal MutantnĂ­ semenáčky.", + "ЗароŃли полны плющами-ĐĽŃтантами! Они раŃŃ‚ŃŃ‚ очень быŃтро. Каждый выроŃŃий побег может раŃти на ŃледŃющем же ходŃ. Но раŃти в ŃледŃющий раз он Ńможет лиŃŃŚ через 16 ходов. Вне ЗароŃлей плющи-ĐĽŃтанты могŃŃ‚ раŃти только на ŃеŃтиŃгольниках.\n\nВозможно, Ńтоль быŃтрый роŃŃ‚ реŃит ĐżŃ€ĐľĐ±Đ»ĐµĐĽŃ ĐłĐľĐ»ĐľĐ´Đ° в Đ’Đ°Ńем мире? Убейте плющ, чтобы Ńобрать Ńаженец.", + "Der verwilderte Wald ist voll mit mutiertem Efeu! Diese Pflanzen wachsen sehr schnell. Jedes Blatt kann, nachdem es gewachsen ist, im nächsten Zug selbst wachsen. Allerdings kann jeder Teil nur einmal alle 16 ZĂĽge austreiben. AuĂźerhalb des verwilderten Walds wächst mutierter Efeu nur auf hexagonalen Zellen.\n\nVielleicht können die schnell wachsenden Pflanzen das Hungerproblem in deiner Welt lösen? Töte mutierten Efeu um mutierte Sätzlinge zu erhalten.", + }}, + {0x800ee083, { // "%The1 drowns!" + "%1 siÄ™ utopi%Ĺ‚1!", + "%1 boÄźuldu!", + "%1 se utopi%l1!", + "%1 ŃтонŃĐ»%E1!", + "%Der1 %1 ertrinkt!", + }}, + {0x80512db6, { // "You wonder where all these monsters go, after their death..." + "Gdzie te wszystkie potwory idÄ… po Ĺ›mierci?...", + "BĂĽtĂĽn bu canavarların ölĂĽmlerinden sonra nereye gittiklerini merak ediyorsun...", + "PĹ™emýšlíš, kam všichni ti netvoĹ™i odejdou, kdyĹľ zemĹ™ou...", + "Đ’Ń‹ задаётеŃŃŚ вопроŃом, ĐşŃĐ´Đ° же деваютŃŃŹ эти монŃтры поŃле Ńмерти?", + "Du wunderst dich, was mit den Monstern passiert nachdem sie sterben...", + }}, + {0x806ed3d1, { // "four elements" + "cztery ĹĽywioĹ‚y", + "dört element", + "ÄŤtyĹ™i Ĺľivly", + "четыре элемента", + "Vier Elemente", + }}, + {0x807db083, { // "y: %1" + "y: %1", + "y: %1", + "y: %1", + "y: %1", + "y: %1", + }}, + {0x8084c224, { // "A beatiful purple gem from the Lost Mountain." + "PiÄ™kny fioletowy kamieĹ„ z Zagubionej GĂłry.", +/*MISSING*/ "A beatiful purple gem from the Lost Mountain.", + "KrásnĂ˝ fialovĂ˝ kámen ze ZtracenĂ© hory.", + "ПрекраŃный фиолетовый камень Ń ĐźĐľŃ‚ĐµŃ€ŃŹĐ˝Đ˝ĐľĐą горы.", +/*MISSING*/ "A beatiful purple gem from the Lost Mountain.", + }}, + {0x8085a8a6, { // "Somehow, this cave has not received the spark of Life yet." + "Dziwnym trafem, ta jaskinia jeszcze nie zdobyĹ‚a iskry Ĺ»ycia.", + "Nasılsa bu maÄźaraya yaĹźamın ışığı hiç uÄźramamış.", + "Tato jeskynÄ› z nÄ›jakĂ©ho dĹŻvodu dosud nedostala jiskru Ĺ˝ivota.", + "Так или иначе, в ŃŤŃ‚Ń ĐżĐµŃ‰ĐµŃ€Ń ĐµŃ‰Ń‘ не приŃла жизнь.", + "Diese Höhle wurde noch nicht vom Funken des Lebens berĂĽhrt.", + }}, + {0x80958c9a, { // "spiral on rendering" + "spirala przy renderowaniu", +/*MISSING*/ "spiral on rendering", + "spirála pĹ™i renderovánĂ­", + "Ńпираль отриŃовки", + "Spirale beim Rendering", + }}, + {0x80a0bf53, { // "\n\nEasy %1 might disappear when you collect more of its kind." + "\n\nĹatw%ya1 %1 moĹĽe zniknąć podczas gdy zbierasz je w innych miejscach.", +/*MISSING*/ "\n\nEasy %1 might disappear when you collect more of its kind.", + "\n\nSnadn%Ă˝1 %1 mĹŻĹľe zmizet, kdyĹľ jich sebereš vĂ­ce.", + "\n\nПроŃтые %P1 могŃŃ‚ иŃчезнŃŃ‚ŃŚ, когда вы Ńоберёте побольŃе их.", +/*MISSING*/ "\n\nEasy %1 might disappear when you collect more of its kind.", + }}, + {0x80b2231b, { // "teleport away" + "uciekaj stÄ…d (teleport)", +/*MISSING*/ "teleport away", + "teleportuj se pryÄŤ", + "телепортироватьŃŃŹ отŃŃŽĐ´Đ°", +/*MISSING*/ "teleport away", + }}, + {0x80b8c15c, { // "y = spin" + "y = obróć", + "y = döndĂĽr", + "y = otoÄŤ", + "y = поворот", + "y = drehen", + }}, + {0x80c62d36, { // " for iOS" + " na iOS", + " iOS için", + " na iOS", + " на iOS", + " fĂĽr iOS", + }}, + {0x80cd779a, { // "%The1 punches %the2!" + "%1 uderzy%Ĺ‚1 %a2!", + "%1 %a2 yumrukladı!", + "%1 udeĹ™i%l1 %a2!", + "%1 Ńдарил%E1 %a2!", + "%Der1 schlägt %den2 %a2!", + }}, + {0x8105667a, { // "Enter = back" + "Enter = powrĂłt", + "Enter = geri", + "Enter = zpÄ›t", + "Enter = назад", + "Enter = zurĂĽck", + }}, + {0x810e69a1, { // "\"I wonder what was there...\"" + "\"Zastanawiam siÄ™, co tam byĹ‚o...\"", + "\"Orada ne olduÄźunu merak ediyorum...\"", + "\"Copak tam asi bylo...?\"", + "\"ĐнтереŃно, что Ń‚Đ°ĐĽ было...\"", + "\"Ich frage mich was da war...\"", + }}, + {0x81487f61, { // "Press 'r' to choose a regular pattern. When a pattern is on, editing a cell automatically edits all cells which are equivalent according to this pattern. You can choose from several patterns, and choose which symmetries matter for equivalence. Also, you can press Space to switch between the map and graphics editor quickly -- note that editing floors with the graphics editor also adheres to the pattern." + "WciĹ›nij 'r', by wybrać regularny wzorek. Gdy wzorek jest wĹ‚Ä…czony, edytowanie pola automatycznie edytuje takĹĽe wszystkie pola, ktĂłre sÄ… mu rĂłwnowaĹĽne ze wzglÄ™du na ten wzorek. MoĹĽesz wybrać jeden z kilku wzorkĂłw i wybrać symetrie uwzglÄ™dniane przy obliczaniu rĂłwnowaĹĽnoĹ›ci. MoĹĽesz teĹĽ nacisnąć spacjÄ™, by szybko siÄ™ przenosić pomiÄ™dzy edytorem map i edytorem grafiki -- edytowanie podĹ‚Ăłg w edytorze grafiki rĂłwnieĹĽ nastÄ™puje zgodnie ze wzorkiem.", + "'r'ye basarak dĂĽzenli bir doku seçebilirsin. Bir doku aktifken, bir hĂĽcreyi deÄźiĹźtirmek o hĂĽcreye bu dokuda eĹźdeÄźer bĂĽtĂĽn hĂĽcreleri de deÄźiĹźtirir. Birden çok doku seçebilirsin ve hangi simetrilerin eĹźdeÄźer olduÄźunu seçebilirsin. Ayrıca, Space'e basarak harita ve grafik editörĂĽ arasında hızlıca gidip gelebilirsin -- zeminin grafik editörĂĽyle deÄźiĹźtirilmesinin dokuyu da deÄźiĹźtireceÄźini unutma.", + "Stiskem klávesy 'r' mĹŻĹľeš vybrat pravidelnĂ˝ vzor. KdyĹľ je vzor zapnutĂ˝, editace buĹky automaticky ovlivnĂ­ i všechny ostatnĂ­ buĹky, kterĂ© jsou podle tohoto vzoru ekvivalentnĂ­. MĹŻĹľeš si vybrat z nÄ›kolika moĹľnĂ˝ch vzorĹŻ, a takĂ© to, kterĂ© symetrie budou dĹŻleĹľitĂ© pro ekvivalenci. TakĂ© mĹŻĹľeš rychle pĹ™epĂ­nat mezernĂ­kem mezi editorem mapy a grafiky -- i editovánĂ­ podlahy grafickĂ˝m editorem se řídĂ­ pravidly vzoru.", + "Нажмите 'r', чтобы выбрать регŃлярный Ńзор. Когда Ńзор выбран, изменение клетки автоматичеŃки изменяет вŃе эквивалентные, ей в этом Ńзоре. Đ’Ń‹ можете выбрать один из неŃкольких Ńзоров и определить, какие Ńимметрии важны для эквивалентноŃти. Нажмите пробел, чтобы переключитьŃŃŹ ĐĽĐµĐ¶Đ´Ń ĐşĐ°Ń€Ń‚ĐľĐą и графичеŃким редактором -- изменение пола влияет на Ńзор.", + "DrĂĽcke 'r' um ein normales Muster zu wählen. Wenn ein Muster ausgewählt ist sorgt das ändern einer Zelle automatisch fĂĽr die Ă„nderung aller Zellen, die laut dem Muster gleich dieser sind. Du kannst aus mehreren Mustern wählen und bestimmen welche Symmetrien als gleich zählen. Durch das DrĂĽcken von LEER wird zwischen dem Karten und Grafikeditor gewechselt. Das ändern von Böden mit dem Grafikeditor wirkt sich auch auf das Muster aus.", + }}, + {0x8161e570, { // "always available" + "zawsze dostÄ™pna", +/*MISSING*/ "always available", + "vĹľdy dostupná", + "вŃегда Đ´ĐľŃŃ‚Ńпна", +/*MISSING*/ "always available", + }}, + {0x81b0724a, { // "hexa floor" + "podĹ‚oga hex", + "hekzazemin", + "hexa-podlaha", + "ŃеŃтиŃгольный пол", + "Hexagonaler Boden", + }}, + {0x81ba80a7, { // "Retrieving scores from Google Leaderboards..." + "ĹšciÄ…gam wyniki z rankingĂłw Google...", + "Google listelerindeki puanlar yĂĽkleniyor...", + "Stahuji skĂłre z ĹľebříčkĹŻ Google...", + "ПолŃчение резŃльтатов из таблиц Google...", + "Empfange Rekorde aus Google Leaderboards...", + }}, + {0x81d3a5ba, { // "A castle in the Crossroads..." + "O zamku na SkrzyĹĽowaniu...", + "Arayollarda bir Kale...", + "O hradu na KĹ™iĹľovatce...", + "Đž замке на перекрёŃтке...", + "Ein Schloss in den Kreuzungen...", + }}, + {0x81d98cfd, { // "Good luck in the elliptic plane!" + "Powodzenia na pĹ‚asczyĹşnie eliptycznej!", +/*MISSING*/ "Good luck in the elliptic plane!", + "HodnÄ› štÄ›stĂ­ v eliptickĂ© rovinÄ›!", + "Удачи на эллиптичеŃкой плоŃкоŃти!", +/*MISSING*/ "Good luck in the elliptic plane!", + }}, + {0x81f5d93f, { // "You will be fighting red rock snakes, too..." + "BÄ™dziesz teĹĽ walczyć z czerwonymi skalnymi wężami...", + "Kızıl yılanlarla da savaĹźacaksın...", + "Budeš bojovat i s kamennĂ˝mi hady...", + "Đ’Ń‹ тоже бŃдете битьŃŃŹ Ń ĐşŃ€Đ°Ńными змеями...", + "Du wirst auch rote Felsschlangen bekämpfen...", + }}, + {0x82283270, { // "press a key for '%1'" + "naciĹ›nij klawisz dla '%1'", + "'%1' için bir tuĹźa bas", + "stiskni klávesu pro '%1'", + "нажмите клавиŃŃ Đ´Đ»ŃŹ '%1'", + "DrĂĽcke eine Taste fĂĽr '%1'", + }}, + {0x827238d1, { // "An alternate layout of the Crossroads. It is more dense and more regular, although you won't find the castle of Camelot here." + "Alternatywny ukĹ‚ad SkrzyĹĽowania. Jest gÄ™stszy i bardziej regularny, choć nie znajdziesz tutaj zamku Camelot.", + "Arayolların alternatif bir versiyonu. Daha yoÄźun ve daha dĂĽzenli, ama Kamelot'un kalesini burada bulamazsın.", + "AlternativnĂ­ plán KĹ™iĹľovatky. Je hustší a pravidelnÄ›jší, ale hrad Camelot tady nenajdete.", + "ДрŃгая Ńхема перекрёŃтка. Она плотнее и регŃлярнее обычной, но замок Камелот Đ’Ń‹ здеŃŃŚ не найдёте.", + "Ein alternatives Layout der Kreuzungen. Es ist beständiger und dichter, aber du findest Camelot hier nicht.", + }}, + {0x827a3936, { // "You can hold this bush to climb the Lost Mountain. Bushes block the movement of birds." + "MoĹĽesz zĹ‚apać ten krzak, by siÄ™ wspiąć na ZagubionÄ… GĂłrÄ™. Krzaki blokujÄ… drogÄ™ ptakom.", +/*MISSING*/ "You can hold this bush to climb the Lost Mountain. Bushes block the movement of birds.", + "Tohoto keĹ™e se mĹŻĹľeš chytit pĹ™i vĂ˝stupu na Ztracenou horu. KeĹ™e blokujĂ­ pohyb ptákĹŻ.", + "Đ’Ń‹ можете хвататьŃŃŹ Đ·Đ° этот ĐşŃŃŃ‚, чтобы лезть на горŃ. БлокирŃет перемещение птиц.", +/*MISSING*/ "You can hold this bush to climb the Lost Mountain. Bushes block the movement of birds.", + }}, + {0x829b9943, { // "circle/horocycle tree" + "drzewo bazowe dla kół/horocykli", +/*MISSING*/ "circle/horocycle tree", + "kruhovĂ˝/horocyklickĂ˝ strom", + "ĐľŃновное дерево для окрŃжноŃтей/орициклов", +/*MISSING*/ "circle/horocycle tree", + }}, + {0x82c80b61, { // "There are many lands in HyperRogue. Collect 10 treasure in the given land type to complete it; this enables you to find the magical Orbs of this land, and in some cases get access to new lands. At 25 treasures this type of Orbs starts appearing in other lands as well. Press 'o' to get the details of all the Lands.\n\n" + "W Ĺ›wiecie HyperRogue jest wiele krain. Kraina jest zdobyta, gdy zbierzesz w niej 10 skarbĂłw; gdy zdobÄ™dziesz krainÄ™, moĹĽesz znaleźć magicznÄ… SferÄ™ tej krainy, i w niektĂłrych przypadkach uzsykać dostÄ™p do nowych krain. Gdy zbierzesz 25 skarbĂłw, ten typ Sfer bÄ™dzie siÄ™ teĹĽ pojawiaĹ‚ w innych krainach. NaciĹ›nij '0', by obejrzeć szczegóły na temat wszystkich Krain.\n\n", +/*MISSING*/ "There are many lands in HyperRogue. Collect 10 treasure in the given land type to complete it; this enables you to find the magical Orbs of this land, and in some cases get access to new lands. At 25 treasures this type of Orbs starts appearing in other lands as well. Press 'o' to get the details of all the Lands.\n\n", + "SvÄ›t HyperRogue sestává z mnoha krajĹŻ. KdyĹľ v nÄ›jakĂ©m kraji zĂ­skáš 10 pokladĹŻ, dobyješ ho; pak v nÄ›m mĹŻĹľeš najĂ­t magickĂ© SfĂ©ry, a nÄ›kdy takĂ© zĂ­skáš přístup k jinĂ˝m krajĹŻm. Po zĂ­skánĂ­ 25 pokladĹŻ se tyto magickĂ© SfĂ©ry zaÄŤnou objevovat i v jinĂ˝ch krajĂ­ch. DetailnĂ­ informace o všech krajĂ­ch mĹŻĹľeš zobrazit stisknutĂ­m klávesy 'o'.\n\n", + "Đ’ HyperRogue много разных земель. Соберите 10 ценноŃтей в земле, чтобы заверŃить её; ŃŤŃ‚Đľ позволяет находить в ней магичеŃкие Сферы, и иногда открывает Đ´Ń€Ńгие земли. ПоŃле Ńбора 25 ценноŃтей Ńферы начинают появлятьŃŃŹ и в Đ´Ń€Ńгих землях. Нажмите 'o', чтобы Ńзнать подробноŃти Đľ разных землях.\n\n", +/*MISSING*/ "There are many lands in HyperRogue. Collect 10 treasure in the given land type to complete it; this enables you to find the magical Orbs of this land, and in some cases get access to new lands. At 25 treasures this type of Orbs starts appearing in other lands as well. Press 'o' to get the details of all the Lands.\n\n", + }}, + {0x83095fd3, { // "player 6 spin" + "gracz 6 obrĂłt", +/*MISSING*/ "player 6 spin", + "hráč 6 otáčenĂ­", + "игрок 6 вертит", + "Spieler 6 drehen", + }}, + {0x830cc4a2, { // "\nRanged Orbs can be targeted by long touching the desired location." + "\nRobi siÄ™ to przez dĹ‚ugie dotkniÄ™cie celu.", +/*MISSING*/ "\nRanged Orbs can be targeted by long touching the desired location.", + "\nTyto sfĂ©ry lze zacĂ­lovat dlouhĂ˝m stiskem poĹľadovanĂ©ho polĂ­ÄŤka.", + "\nВыбор цели Ńферы определяетŃŃŹ долгим зажатием ĐĽŃ‹Ńи на цели.", + "\nMit Distanzorbs kann durch langes BerĂĽhren der gewĂĽnschten Position gezielt werden.", + }}, + {0x832fe3e8, { // "%The1 destroys your boat!" + "%1 zniszczy%Ĺ‚1 TwĂłj statek!", +/*MISSING*/ "%The1 destroys your boat!", + "%1 zniÄŤi%l1 Tvou loÄŹku!", + "%1 Ńничтожил%E1 твою лодкŃ!", + "%Der1 %1 zerstört dein Boot!", + }}, + {0x834fb047, { // "m = monsters" + "m = potwory", + "m = canavar", + "i = pĹ™edmÄ›ty", + "b = граница", + "m = Monster", + }}, + {0x838d01ac, { // "Configuration:" + "Konfiguracja:", + "AYARLAR:", + "NastavenĂ­:", + "НаŃтройки:", + "Einstellungen:", + }}, + {0x83e456c6, { // "This orb allows attacking Hedgehog Warriors directly, as well as stabbing other monsters.\n" + "Ta sfera pozwala bezpoĹ›rednio atakować WojownikĂłw-JeĹĽe, a takĹĽe dĹşgać pozostaĹ‚ych przeciwnikĂłw.\n", + "Bu kĂĽre Kirpi Savaşçılara doÄźrudan saldırmaya ve diÄźer canavarları bıçaklamaya izin verir.\n", + "Tato sfĂ©ra umoĹľĹuje ĂştoÄŤit na Ježčí váleÄŤnĂ­ky přímo a probodávat i jinĂ© netvory.\n", + "Đ­Ń‚Đ° Ńфера позволит прямо атаковать Ежей-Воинов и закалывать тех врагов, которых Đ’Ń‹ могли Ńбить обычным ĐżŃŃ‚Ń‘ĐĽ.\n", + "Dieser Orb erlaubt es dir Igelkrieger direkt anzugreifen, und andere Monster zu 'erstechen'.\n", + }}, + {0x84001e00, { // "%The1 burns!" + "%1 siÄ™ spaliĹ‚%oa1!", + "%1 yandı!", + "%1 shoĹ™e%l1!", + "%1 горит!", + "%Der1 %1 brennt!", + }}, + {0x840197e5, { // "There is a flash of thunder!" + "BĹ‚yskawica!", + "Bir ĹźimĹźek çaktı!", + "Zablesklo se!", + "Молния!", + "Ein Blitz!", + }}, + {0x8447b58f, { // "See more on the website: " + "WiÄ™cej na stronie: ", + "Daha fazlasını websitesinde görĂĽntĂĽleyin: ", + "VĂ­ce informacĂ­ najdeš na webovĂ© stránce: ", + "Смотрите далее на Ńайте: ", + "Mehr auf der Website: ", + }}, + {0x84a29ba6, { // "Trolls turn into stone walls when they die. When you have this Orb, this happens to every monster you defeat. Statues created from this Orb have slightly different properties than Trolls who petrify naturally." + "Gdy Trolle umierajÄ…, zamieniajÄ… siÄ™ w kamieĹ„. Ta Sfera powoduje, ĹĽe dzieje siÄ™ to ze wszystkimi pokonanymi stworzeniami. Pomniki stworzone przez SferÄ™ Kamienia majÄ… inne wĹ‚asnoĹ›ci niĹĽ Trolle spetryfikowane naturalnie.", +/*MISSING*/ "Trolls turn into stone walls when they die. When you have this Orb, this happens to every monster you defeat. Statues created from this Orb have slightly different properties than Trolls who petrify naturally.", + "KdyĹľ Troll zemĹ™e, promÄ›nĂ­ se v kámen. Tato SfĂ©ra to samĂ© provede s kaĹľdĂ˝m netvorem, kterĂ©ho porazíš. Sochy vytvoĹ™enĂ© pomocĂ­ SfĂ©ry Kamene majĂ­ trochu jinĂ© vlastnosti neĹľ pĹ™irozenÄ› zkamenÄ›lĂ­ TrollovĂ©.", + "УмерŃий тролль превращаетŃŃŹ в камень. Đ•Ńли Ń Đ˛Đ°Ń ĐµŃŃ‚ŃŚ Ń‚Đ° Ńфера, ŃŤŃ‚Đľ проиŃходит Ń ĐşĐ°Đ¶Đ´Ń‹ĐĽ монŃтром, которого вы Ńбиваете. СтатŃи, Ńозданные этой Ńферой, немного отличаютŃŃŹ от обычных окаменевŃих троллей.", + "Trolle werden zu Steinwänden, wenn sie sterben. Besitzt du diesen Orb, passiert das jedem Monster, das du besiegst. Statuen, die von diesem Orb erschaffen werden, haben etwas andere Eigenschaften als Trolle, die natĂĽrlich versteinern.", + }}, + {0x854f07d4, { // "A majestic bird, who is able to fly very fast." + "Ten majestatyczny ptak bardzo szybko lata.", + "Çok hızlı uçabilen görkemli bir kuĹź.", + "MajestátnĂ­ pták, kterĂ˝ dokáže velmi rychle lĂ©tat.", + "ВеличеŃтвенная птица, летающая очень быŃтро.", + "Ein majestätischer Vogel der sehr schnell fliegt.", + }}, + {0x857eedc1, { // "total kills" + "Ĺ‚Ä…czne zabicia", + "toplam leĹźler", + "celkovĂ˝ poÄŤet zabitĂ˝ch nepřátel", + "вŃего ŃбийŃтв", + "Gesamt Kills", + }}, + {0x8590511a, { // "Vampire Bats don't attack normally, but they drain your magical powers if they are at distance at most 2 from you." + "Nietoperze Wampiry nie atakujÄ… jak inne potwory. Zamiast tego, jeĹ›li sÄ… w odlegĹ‚oĹ›ci co najwyĹĽej 2, wysysajÄ… Twoje magiczne moce.", +/*MISSING*/ "Vampire Bats don't attack normally, but they drain your magical powers if they are at distance at most 2 from you.", + "Vampýři neĂştoÄŤĂ­ normálnĂ­ zpĹŻsobem, ale pokud se dostanou do vzdálenosti 2 a mĂ©nÄ› od tebe, vysávajĂ­ ti tvĂ© magickĂ© schopnosti.", + "Вампиры не Đ°Ń‚Đ°ĐşŃŃŽŃ‚ Đ’Đ°Ń ĐľĐ±Ń‹Ń‡Đ˝Ń‹ĐĽ образом, но они вытягивают из Đ’Đ°Ń ĐĽĐ°ĐłĐ¸Ń‡ĐµŃĐşŃŃŽ ŃилŃ, еŃли находятŃŃŹ на раŃŃтоянии не более 2.", +/*MISSING*/ "Vampire Bats don't attack normally, but they drain your magical powers if they are at distance at most 2 from you.", + }}, + {0x85c4a982, { // "GAME OVER" + "KONIEC GRY", + "OYUN BÄ°TTÄ°", + "KONEC HRY", + "КОНЕЦ ĐĐ“Đ Đ«", + "GAME OVER", + }}, + {0x86314e8f, { // "rotate right" + "obróć w prawo", + "saÄźa döndĂĽr", + "otoÄŤenĂ­ vpravo", + "повернŃŃ‚ŃŚ вправо", + "Nach rechts rotieren", + }}, + {0x86332931, { // "Wrong color!" + "ZĹ‚y kolor!", + "Yanlış renk!", + "Ĺ patná barva!", + "Не тот цвет!", + "Falsche Farbe!", + }}, + {0x86794019, { // "camera rotation" + "obróć kamerÄ™", +/*MISSING*/ "camera rotation", + "rotace kamery", + "поворот камеры", +/*MISSING*/ "camera rotation", + }}, + {0x86beece5, { // "rotate the character" + "obróć postać", + "karakteri döndĂĽr", + "otoÄŤ postavu", + "повернŃŃ‚ŃŚŃŃŹ", + "drehe Spielfigur", + }}, + {0x86c654bf, { // "You have to hit Palace Guards several times to kill them. After each hit, they are pushed away and stunned for some time." + "Musisz uderzyć StraĹĽnika kilka razy, by go zabić. Po kaĹĽdym trafieniu straĹĽnik jest odpychany i ogĹ‚uszony przez pewien czas.", + "Saray Muhafızlarının ölmesi için onlara bir kaç kere vurmalısın. Her vuruĹźtan sonra geri itilirler ve birkaç turluk sersemlerler.", + "Na zabitĂ­ Strážce Paláce potĹ™ebuješ nÄ›kolik ĂştokĹŻ. KaĹľdĂ˝ zásah Strážce odstrÄŤĂ­ dozadu a na chvĂ­li ho omráčí.", + "Чтобы Ńбить Дворцового Ńтражника, его Đ˝Ńжно Ńдарить неŃколько раз. ПоŃле каждого Ńдара он отлетает на ĐľĐ´Đ˝Ń ĐşĐ»ĐµŃ‚ĐşŃ Đ˝Đ°Đ·Đ°Đ´ и Đ·Đ°Ńтывает на некоторое время.", + "Du musst Palastwachen mehrmals treffen um sie zu töten. Nach jedem Treffer werden sie zurĂĽckgestoĂźen und kurz betäubt.", + }}, + {0x86c7da3b, { // "Return to the hyperbolic world" + "powrĂłt na hiperboloidÄ™", + "Hiperbolik DĂĽnyaya geri dön", + "Návrat do hyperbolickĂ©ho svÄ›ta", + "вернŃŃ‚ŃŚŃŃŹ на гиперболоид", + "Zur hyperbolischen Welt zurĂĽckkehren", + }}, + {0x86fd7670, { // "do nothing" + "nic", + "hiçbir Ĺźey yapma", + "nic", + "ничего", + "Tu nichts", + }}, + {0x8708cde4, { // " (expired)" + " (wyczerpany)", + " (zaman aşımı)", + " (vypršelo)", + " (кончилŃŃŹ)", + " (abgelaufen)", + }}, + {0x8716adcb, { // "SPACE = map/graphics" + "SPACE = mapa/grafika", + "SPACE = harita/grafikler", + "SPACE = mapa/grafika", + "SPACE = карта/графика", + "SPACE = Karte/Grafiken", + }}, + {0x87432023, { // "%The1 is destroyed!" + "%1 zosta%Ĺ‚1 zniszczon%ya1!", +/*MISSING*/ "%The1 is destroyed!", + "%1 by%l1 zniÄŤe%n1!", + "%1 Ńничтожен%E1!", +/*MISSING*/ "%The1 is destroyed!", + }}, + {0x877ac97d, { // "Cthulhu withdraws his tentacle!" + "Cthulhu chowa swojÄ… mackÄ™!", + "Cthulhu dokungacını çekti!", + "Cthulhu stahuje svĂ© chapadlo!", + "КтŃĐ»Ń…Ń Đ·Đ°Đ±Đ¸Ń€Đ°ĐµŃ‚ Ńвой щŃпальце!", + "Cthulhu zieht seinen Tentakel zurĂĽck!", + }}, + {0x87a3c451, { // "Witches use these crystal cabinets to protect Powerstones, as well as the more expensive Orbs. They are partially protected from thieves: they are too strong to be smashed by conventional attacks, and if you try to steal the item using an Orb of Aether, your Aether power will be completely drained." + "Czarownice uĹĽywajÄ… tych krysztaĹ‚owych gablot, by chronić Kamienie Mocy oraz bardziej cenne Sfery. Gabloty sÄ… częściowo chronione przed kradzieĹĽÄ…: sÄ… zbyt mocne, by je rozbić konwencjonalnymi atakami, a jeĹ›li sprĂłbujesz ukraść przedmiot uĹĽywajÄ…c Sfery Eteru, Twoja moc Eteru zostanie caĹ‚kowicie wyczerpana.", + "Bu kabinleri Cadılar GüçtaĹźlarını ve deÄźerli KĂĽreleri korumak için kullanıyorlar. Hırsızlara karşı kısmen korumalıdır, bildik saldırılarla kırılmak için fazlasıyla serttir ve eÄźer içindeki eĹźyayı Eter KĂĽresi kullanarak çalmaya çalışırsan kĂĽrenin gĂĽcĂĽ bitecektir.", + "ÄŚarodÄ›jnice používajĂ­ tyto vitrĂ­ny k ochranÄ› MocikamĹŻ, a takĂ© dražších typĹŻ SfĂ©r. VitrĂ­ny jsou částeÄŤnÄ› chránÄ›nĂ© proti zlodÄ›jĹŻm: jsou příliš odolnĂ© na to, aby se daly rozbĂ­t běžnĂ˝m Ăştokem, a pokud se pokusíš pĹ™edmÄ›t ukrást pomocĂ­ SfĂ©ry Éteru, zcela to vyÄŤerpá jejĂ­ sĂ­lu.", + "Ведьмы иŃпользŃŃŽŃ‚ эти криŃтальные кабинеты для защиты Камней Ńилы, как и Ńамые ценные Ńферы. Они чаŃтично защищают их от воров: они Đ´ĐľŃтаточно прочны, чтобы выдерживать прямые атаки, и еŃли Đ’Ń‹ попробŃете иŃпользовать ŃŃ„ĐµŃ€Ń Đ­Ń„Đ¸Ń€Đ° для проникновения в него, Ń‚Đľ Ńила Ńферы ŃŃ€Đ°Đ·Ń Đ¸ŃŃякнет.", + "Hexen verwenden diese Kristallvitrinen um Machtsteine, und wertvolle Orbs zu schĂĽtzen. Sie sind zu stark um von normalen Angriffen zerschmettert zu werden und solltest du versuchen den Inhalt mit einem Orb des Ă„thers zu stehlen, wird seine ganze Kraft verbraucht.", + }}, + {0x87ba9948, { // "\nRanged Orbs can be targeted by touching the desired location." + "\nRobi siÄ™ to przez dotkniÄ™cie celu.", +/*MISSING*/ "\nRanged Orbs can be targeted by touching the desired location.", + "\nTyto sfĂ©ry mĹŻĹľete zacĂ­lovat tak, Ĺľe se dotknete poĹľadovanĂ©ho polĂ­ÄŤka.", + "\nВыбор цели Ńферы определяетŃŃŹ зажатием ĐĽŃ‹Ńи на цели.", + "\nMit Distanzorbs kann durch BerĂĽhren der gewĂĽnschten Position gezielt werden.", + }}, + {0x87c84244, { // "You start chopping down the tree." + "Zaczynasz ciąć drzewo.", + "AÄźacı kesmeye baĹźladın.", + "ZaÄŤa%l0 jsi kácet strom.", + "Đ’Ń‹ начали Ń€Ńбить дерево.", + "Du fängst an, den Baum zu fällen.", + }}, + {0x87faf958, { // "Accessible only from %the1 (until finished).\n" + "Kraina dostÄ™pna tylko poprzez %a1 (przed ukoĹ„czeniem).\n", + "Sadece %a1 eriĹźilebilir. %a1 (bitirilene kadar).\n", + "Tento kraj je dostupnĂ˝ pouze skrz %a1 (dokud ho nedohraješ).\n", + "ДоŃŃ‚Ńпно только из %a1 (пока не окончена).\n", + "Nur von %der1 %a1 aus erreichbar (bis abgeschlossen).\n", + }}, + {0x880f622a, { // "native to %the1 (collect 10 %2)" + "rodzima %abl1 (10x %2)", + "%abl1 bulunuyor (10 tane %2)", + "standardnĂ­ %abl1 (zĂ­skej 10x %2)", + "родная %abl1 (10x %2)", + "heimisch in %der1 (10x %2)", + }}, + {0x8832d31f, { // "Don't center on the player character." + "Nie centruj na graczu.", +/*MISSING*/ "Don't center on the player character.", + "Necentrovat na hráče.", + "Не центрировать на игроке.", +/*MISSING*/ "Don't center on the player character.", + }}, + {0x8882ea34, { // "This dangerous sea contains nasty sharks and pirates. " + "Niebezpieczne morze, peĹ‚ne rekinĂłw i piratĂłw.", + "Bu tehlikeli deniz vahĹźi köpekbalıkları ve korsanlar barındırıyor.", + "V tomto nebezpeÄŤnĂ©m moĹ™i se vyskytujĂ­ nebezpeÄŤnĂ­ Ĺľraloci a piráti.", + "ОпаŃное море, полное Đ°ĐşŃĐ» и пиратов.", + "Dieser gefährliche Ozean enthält fiese Haie und Piraten.", + }}, + {0x88a6ca3b, { // "You summon some Mimics!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 MiraĹĽe!", + "Taklitçiler çağırdın!", + "Vyvola%l0 jsi nÄ›kolik PĹ™eludĹŻ!", + "Đ’Ń‹ призвали миражи!", + "Du beschwörst ein paar Mimics!", + }}, + {0x88a77da0, { // "You collect %the1." + "Znalaz%Ĺ‚eĹ›0 %a1.", + "%a1 aldın.", + "Sebra%l0 jsi %a1.", + "Đ’Ń‹ наŃли %a1.", + "Du sammelst %den1 %a1.", + }}, + {0x88b058d0, { // "You create an Illusion!" + "Tworzysz iluzjÄ™!", + "Bir Ä°lĂĽzyon ĂĽrettin!", + "VytvoĹ™il jsi iluzi!", + "Đ’Ń‹ Ńоздали иллюзию!", + "Du erschaffst eine Illusion!", + }}, + {0x88b3c6f4, { // "%The1 squeaks happily!" + "%1 pisn%Ä…Ĺ‚1 szczęśliwie!", + "%1 neĹźeyle ciyaklıyor!", + "%1 šťastnÄ› pištĂ­!", + "%1 пищит радоŃтно!", + "%Die1 %1 piepst fröhlich!", + }}, + {0x88b7c428, { // "\n\nNote: when pushing %the1 off a heptagonal cell, you can control the pushing direction by clicking left or right half of the heptagon." + "\n\nUwaga: kiedy spychasz %a1 z siedmiokÄ…ta, moĹĽesz sterować kierunkiem pchniÄ™cia klikajÄ…c lewÄ… lub prawÄ… poĹ‚owÄ™ siedmiokÄ…ta.", + "\n\nNot: %a1 bir yedigensel hĂĽcreden iterken, itmenin yönĂĽnĂĽ yedigenin sol ve saÄź yarısına tıklayarak belirleyebilirsin.", + "\n\nPoznámka: KdyĹľ tlačíš %a1 ze sedmiĂşhelnĂ­ku, mĹŻĹľeš ovládat smÄ›r tlaÄŤenĂ­ tĂ­m, Ĺľe klikneš na levou ÄŤi pravou polovinu tohoto sedmiĂşhelnĂ­ku.", + "\n\nВажно: когда Đ’Ń‹ толкаете %a1 Ń ŃемиŃгольника, Đ’Ń‹ можете выбирать направление движения, нажимая на ŃоответŃтвŃющŃŃŽ ĐżĐľĐ»ĐľĐ˛Đ¸Đ˝Ń ŃемиŃгольника.", + "\n\nHinweis: Wenn du %den1 %a1 von einer heptagonalen Zelle schiebst kannst du die Richtung bestimmen, indem du die linke oder rechte Seite des Heptagon anklickst.", + }}, + {0x89007bc0, { // "This Orb allows your boat to go against the current, and also to go into the land, creating water on the way." + "Ta Sfera pozwala Twojemu statkowi pĹ‚ynąć pod prÄ…d, a takĹĽe pĹ‚ynąć przez lÄ…d, tworzÄ…c wodÄ™ po drodze.", + "Bu KĂĽre akıntıya karşı hareket edebilmene imkân verir. Ayrıca bu kĂĽreyle karaya doÄźru hareket edip yolunda su çıkararak ilerleyebilirsin.", + "Tato SfĂ©ra tvĂ©mu ÄŤlunu umoĹľĹuje plout proti proudu. TakĂ© mĹŻĹľeš vyplout na souš a pĹ™itom vytvářet vodu, kamkoli se vydáš.", + "Đ­Ń‚Đ° Ńфера позволяет тебе плыть против течения, Đ° также двигатьŃŃŹ по ŃŃŃе, Ńоздавая Đ˛ĐľĐ´Ń ĐżĐľ ĐżŃти.", + "Dieser Orb erlaubt es dir, gegen die Strömung zu schwimmen. Du kannst damit auch durch Land schwimmen, wobei du Wasser kreierst).", + }}, + {0x892048aa, { // "Enemies killed: %1 (%2 types)" + "Zabici przeciwnicy: %1 (%2 typĂłw)", +/*MISSING*/ "Enemies killed: %1 (%2 types)", + "PoÄŤet zabitĂ˝ch nepřátel: %1 (%2 typĹŻ)", + "СŃщеŃтв Ńбито: %1 (%2 типов)", + "Getötete Feinde: %1 (%2 Arten)", + }}, + {0x8920d8ac, { // "Three mines next to you!" + "Trzy miny koĹ‚o Ciebie!", + "Yakınında üç mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházejĂ­ tĹ™i miny!", + "Три мины рядом Ń Đ’Đ°ĐĽĐ¸!", + "3 Minen um dich!", + }}, + {0x894ae094, { // "Nothing to stand on here!" + "Nie ma tu na czym stać!", + "Burada duracağın bir Ĺźey yok!", + "NenĂ­ tu na ÄŤem stát!", + "Не на чем Ńтоять!", + "Hier gibt es nichts worauf du stehen kannst!", + }}, + {0x894b9946, { // "deplete orb powers" + "utrata mocy", + "kĂĽre güçlerini tĂĽket", + "zruš moc sfĂ©ry", + "потерять Ńилы Ńфер", + "verbrauche Orbkräfte", + }}, + {0x89658792, { // "You switch places with %the1." + "Zamieniasz siÄ™ miejscami z %abl1.", + "%abl1 yer deÄźiĹźtirdin.", + "VymÄ›ni%l0 sis mĂ­sto s %abl1.", + "Đ’Ń‹ поменялиŃŃŚ меŃтами Ń %abl1.", + "Du tauschst den Platz mit %dem1 %a1.", + }}, + {0x896b50d1, { // "zoom out" + "oddalenie", +/*MISSING*/ "zoom out", + "oddálenĂ­", + "отдалить", + "herauszoomen", + }}, + {0x89842dfc, { // "kill a monster, or collect 25 %2" + "zabij potwora lub znajdĹş 25x %2", + "bir canavar öldĂĽr, ya da 25 tane %2 topla.", + "zabij netvora nebo zĂ­skej 25x %2", + "Ńбей монŃтра, или Ńобери 25x %2", + "töte ein Monster oder sammle 25x %2", + }}, + {0x899a859f, { // "Don't be fooled by this red-haired boy, or you will be stabbed if you come too close!" + "Nie daj siÄ™ zwieść temu rudowĹ‚osemu, bo jak siÄ™ za bardzo zbliĹĽysz, moĹĽesz zostać ugodzon%ya1 noĹĽem!", +/*MISSING*/ "Don't be fooled by this red-haired boy, or you will be stabbed if you come too close!", + "Nenech se oklamat tĂ­mto zrzavĂ˝m chlapcem -- pokud se k nÄ›mu příliš pĹ™iblížíš, bodne tÄ›!", + "Не бŃдьте обманŃŃ‚Ń‹ этим рыжеволоŃŃ‹ĐĽ парнем, Ń Đ˝ĐµĐłĐľ еŃŃ‚ŃŚ ĐľŃтрый нож!", + "Lass dich von diesem rothaarigen Jungen nicht täuschen - oder du wirst erstochen, wenn du zu nah kommst!", + }}, + {0x89adf1b4, { // "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods." + "Unikaj Ĺ›cinania drzew, uĹĽywania Sfer, i potworĂłw spoza Cmentarza.", +/*MISSING*/ "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods.", + "Nesmíš ve StrašidelnĂ©m lese kácet stromy a používat SfĂ©ry nebo netvory, kteří nepocházejĂ­ ze HĹ™bitova.", + "Не Ń€Ńбить деревья, не иŃпользовать Ńферы или поŃторонних монŃтров в ЛеŃŃ Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸.", +/*MISSING*/ "Avoid chopping trees, using Orbs, and non-graveyard monsters in the Haunted Woods.", + }}, + {0x89ca69da, { // "You can collect some valuable Ambers on the coast, but beware the tides!\n\nYou can also take one of the boats and venture into the Ocean, to find other coasts, dangerous whirlpools, and islands inhabited by Pirates." + "MoĹĽesz zbierać cenne bursztyny na plaĹĽy, ale uwaĹĽaj na odpĹ‚ywy!\n\nMoĹĽesz teĹĽ wziąć Ĺ‚ĂłdkÄ™ i popĹ‚ynąć niÄ… przez Ocean, by znaleźć inne brzegi, niebezpieczne wiry oraz wyspy zamieszkane przez PiratĂłw.", + "Kıyıdan çok deÄźerli kehribarlar toplayabilirsin, ama dalgalara dikkat et!\n\nKayıklardan birini alıp , baĹźka kıyılar, tehlikeli tayfunlar vekorsanların egemenliÄźindeki adalar bulmak için okyanusa açılabilirsin.", + "Na pobĹ™eží mĹŻĹľeš sbĂ­rat cennĂ˝ Jantar, ale pozor na příliv a odliv!\n\nTakĂ© si mĹŻĹľeš vzĂ­t ÄŤlun a vyplout na Oceán, kde najdeš další pobĹ™eží, nebezpeÄŤnĂ© vĂ­ry a ostrovy obĂ˝vanĂ© piráty.", + "Đ’Ń‹ модете найти ценный Янтарь не берегŃ, но ĐľŃтерегайтеŃŃŚ приливов!\n\nĐ’Ń‹ модете найти Đ»ĐľĐ´ĐşŃ Đ¸ отправитьŃŃŹ в Океан, чтобы найти Đ´Ń€Ńгие берега, опаŃные Водовороты и ĐľŃтрова, полные пиратов.", + "Du kannst wertvolle Bernsteine an der KĂĽste sammeln, aber achte auf die Gezeiten!\n\nDu kannst ebenso eines der Boote nehmen und in den Ozean reisen um andere KĂĽsten, gefährliche Strudel, und von Piraten besetzte Inseln zu finden.", + }}, + {0x89cb1efa, { // "also hold Alt during the game to toggle high contrast" + "Alt podczas gry przeĹ‚Ä…cza wysoki kontrast", + "ayrıca oyun sırasında Alt'a basılı tutarak yĂĽksek kontrastı açıp kapatabilirsin.", + "PodrĹľenĂ­m klávesy Alt bÄ›hem hry lze pĹ™epnout vysokĂ˝ kontrast", + "также Alt во время игры переключает выŃокий контраŃŃ‚", + "Du kannst auch ALT im Spiel halten, um hohen Kontrast umzuschalten", + }}, + {0x8a356529, { // "Press F1 or right click for help" + "WciĹ›nij F1 lub kliknij prawym, by uzyskać pomoc", + "F1 ya da saÄź tık ile yardıma ulaĹź.", + "Pro vyvolánĂ­ nápovÄ›dy stiskni F1 nebo klikni pravĂ˝m tlaÄŤĂ­tkem myši", + "Нажмите F1 или ПКМ для помощи", + "F1 oder Rechtsklick fĂĽr Hilfe", + }}, + {0x8a43ee0e, { // "Border between seas." + "Granica miÄ™dzy morzami.", + "Denizler arasındaki sınır.", + "Hranice mezi moĹ™i.", + "Граница ĐĽĐµĐ¶Đ´Ń ĐĽĐľŃ€ŃŹĐĽĐ¸.", + "Eine Grenze zwischen Seen.", + }}, + {0x8a520cd8, { // "cheat mode" + "tryb oszusta", + "hile modu", + "cheat mĂłd", + "режим обманщика", + "Cheats", + }}, + {0x8a57eb2e, { // "Your Orb of the Sword can be used to dig here." + "MoĹĽesz tu kopać przy uĹĽyciu Sfery Ostrza.", +/*MISSING*/ "Your Orb of the Sword can be used to dig here.", + "Tvá SfĂ©ra MeÄŤe se dá použít k prokopánĂ­ tohoto polĂ­ÄŤka.", + "Твоя Сфера меча может копать здеŃŃŚ.", + "Dein Orb des Schwertes kann verwendet werden, um hier zu graben.", + }}, + {0x8afa7d17, { // "An expensive metal from the Living Caves. For some reason gold prevents the living walls from growing close to it." + "Drogocenny metal z Ĺ»yjÄ…cych JaskiĹ„. ZĹ‚oto utrudnia wzrost Ĺ›cian wokół niego.", + "YaĹźayan MaÄźaralardan pahalı br metal. Anlaşılamayan bir sebeple altın yaĹźayan duvarları kendine yaklaĹźtırmıyor.", + "Valouny drahĂ©ho kovu z Ĺ˝ivoucĂ­ jeskynÄ›. Zlato z nÄ›jakĂ©ho dĹŻvodu zamezuje tomu, aby v jeho blĂ­zkosti rostly ĹľivoucĂ­ zdi.", + "Драгоценный металл из Живых пещер. Он препятŃтвŃет роŃŃ‚Ń Đ¶Đ¸Đ˛Ń‹Ń… Ńтен в ĐşĐ»ĐµŃ‚ĐşŃ Ń Đ˝Đ¸ĐĽ.", + "Ein teures Metall aus den Lebenden Höhlen. Aus irgendeinem Grund verhindert Gold, dass lebende Wände in seiner Nähe entstehen.", + }}, + {0x8b0e56bc, { // "You have enough treasure now to revive %the1!" + "Masz dość skarbĂłw, by przywrĂłcić %a1 do ĹĽycia!", +/*MISSING*/ "You have enough treasure now to revive %the1!", + "NynĂ­ máš dost pokladĹŻ na to, abys mohl oĹľivit %a1!", + "ĐŁ Đ˛Đ°Ń Đ´ĐľŃтаточно Ńокровищ, чтобы оживить %a1!", +/*MISSING*/ "You have enough treasure now to revive %the1!", + }}, + {0x8b48ef1f, { // "%The1 destroys %the2!" + "%1 zniszczy%Ĺ‚1 %a2!", + "%1 %a2 yok etti!", + "%1 zniÄŤi%l1 %a2!", + "%1 Ńничтожил%E1 %a2!", + "%Der1 %1 zerstört %den2 %a2!", + }}, + {0x8b64aa5c, { // "Better find some other place." + "Lepiej znajdĹş inne miejsce.", + "BaĹźka bir yer bulsan daha iyi olacak.", + "RadÄ›ji bys mÄ›%l0 najĂ­t nÄ›jakĂ© jinĂ© mĂ­sto.", + "Đ›ŃчŃе отправьтеŃŃŚ в Đ´Ń€Ńгое меŃŃ‚Đľ.", + "Du solltest besser einen anderen Ort finden.", + }}, + {0x8ba2057f, { // "render the texture only once" + "renderuj teksturÄ™ tylko raz", +/*MISSING*/ "render the texture only once", + "renderuj textury pouze jednou", + "отриŃовать один раз", + "Rendere die Textur nur einmal", + }}, + {0x8bf5eda5, { // "Dragon Scales are a prized material for armors. They are also prized by collectors, who would like to boast about how they have killed a Dragon.\n\nDragon Scales disappear after 500 turns." + "Smocze Ĺ‚uski sÄ… cenionym materiaĹ‚em na zbroje. SÄ… one rĂłwnieĹĽ poszukiwane przez zbieraczy, ktĂłrzy lubiÄ… siÄ™ przechwalać tym, ile smokĂłw zabili.\n\nSmocze Ĺ‚uski znikajÄ… po 500 kolejkach.", +/*MISSING*/ "Dragon Scales are a prized material for armors. They are also prized by collectors, who would like to boast about how they have killed a Dragon.\n\nDragon Scales disappear after 500 turns.", + "DraÄŤĂ­ šupiny jsou cenÄ›nĂ˝m materiálem pro vĂ˝robu zbroje. TakĂ© si je cenĂ­ sbÄ›ratelĂ©, kteří by se rádi chlubili tĂ­m, jak zabili Draka.\n\nDraÄŤĂ­ šupiny zmizĂ­ po uplynutĂ­ 500 kol.", + "ЧеŃŃŃŹ дракона -- ценный материал для брони. Также они ценятŃŃŹ коллекционерами, которые хотели бы похваŃŃ‚Đ°Ń‚ŃŚŃŃŹ, как они Ńбили дракона.\n\nЧеŃŃŃŹ дракона иŃчезнет через 500 ходов.", + "Drachenschuppen sind ein hochgeschätztes Material fĂĽr RĂĽstungen. Sie werden auch von Sammlern begehrt, die gerne damit prahlen, wie sie einen Drachen getötet haben.\n\nDrachenschuppen verschwinden nach 500 ZĂĽgen.", + }}, + {0x8cf7c8c6, { // "She has flowers in her long fair hair. You could not bring yourself to attack such a beautiful woman." + "Ta Ĺ›licznotka ma kwiaty w swych jasnych, dĹ‚ugich lokach. Nie jesteĹ› w stanie zaatakować tak piÄ™knej kobiety.", +/*MISSING*/ "She has flowers in her long fair hair. You could not bring yourself to attack such a beautiful woman.", + "Tato krasavice má ve svĂ˝ch dlouhĂ˝ch, svÄ›tlĂ˝ch vlasech kvÄ›tiny. Na tak krásnou Ĺľenu se nemĹŻĹľeš pĹ™imÄ›t zaĂştoÄŤit.", + "Đ’ её длинные Ńветлые локоны вплетены прекраŃные цветы. Đ’Ń‹ не можете Ńдарить Ńтоль краŃивŃŃŽ девŃŃĐşŃ.", + "Sie trägt Blumen in ihrem langen blonden Haar. Du kannst dich nicht dazu ĂĽberwinden so eine schöne Frau anzugreifen.", + }}, + {0x8d0d3879, { // "Hyperbolic pirates do not need huge ships, since so many lands to conquest are so close. These small boats are enough for them.\n\nBoats allow you to go through water. If you are in a boat, you can move into a water cell (and the boat will come with you)." + "Hiperboliczni piraci nie potrzebujÄ… duĹĽych statkĂłw, skoro tyle lÄ…dĂłw do zdobycia jest tak blisko. WystarczÄ… im maĹ‚e Ĺ‚Ăłdki.\n\nĹĂłdki pozwalajÄ… poruszać siÄ™ przez wodÄ™. JeĹ›li jesteĹ› na Ĺ‚Ăłdce, moĹĽesz przejść na pole z wodÄ… (a Ĺ‚Ăłdka przesunie siÄ™ razem z TobÄ…).", + "Hiperbolik korsanlar yakınlarda fethedilecek bir sĂĽrĂĽ toprak olduÄźundan devasa gemilere ihtiyaç duymuyor. Bu küçük kayıklar onlar için yeterli.\n\nKayıklar suda ilerleyebilmeni saÄźlıyor. EÄźer bir kayık içindeysen, bir su hĂĽcresine ilerleyebilirsin. (Ve kayık da seninle birlikte gelir). ", + "HyperboliÄŤtĂ­ piráti nepotĹ™ebujĂ­ velkĂ© lodÄ›, protoĹľe tolik zemĂ­, kterĂ© mohou dobĂ˝vat, je tak blĂ­zko. Tyto malĂ© ÄŤluny jim staÄŤĂ­.\n\nÄŚluny ti umoĹľĹujĂ­ pohybovat se po vodÄ›. Pokud jsi ve ÄŤlunu, mĹŻĹľeš vstoupit na vodnĂ­ polĂ­ÄŤko (ÄŤlun se pĹ™esune spolu s tebou).", + "ГиперболичеŃким пиратам не Đ˝Ńжны больŃие корабли, ведь много земель для завоевания Ń‚Đ°Đş близки. ДоŃтаточно этих маленьких лодок.\n\nЛодки позволяют двигатьŃŃŹ по воде. Đ•Ńли Đ’Ń‹ в лодке, Đ’Ń‹ можете перейти на ĐşĐ»ĐµŃ‚ĐşŃ Ń Đ˛ĐľĐ´ĐľĐą (и лодка перемеŃтитŃŃŹ Ń‚ŃĐ´Đ° же).", + "Hyperbolische Piraten brauchen keine riesigen Schiffe, da viele Länder zum Erobern so dicht zusammen sind. Diese kleinen Boote reichen ihnen.\n\nBoote lassen dich durch Wasser bewegen. Bist du in einem, kannst du dich auf Wasserzellen bewegen.", + }}, + {0x8d11dbf4, { // "Huge, impassable walls which separate various lands." + "Wielkie Ĺ›ciany, ktĂłre oddzielajÄ… od siebie poszczegĂłlne krainy.", + "Farklı diyarları birbirinden ayıran çok yĂĽksek, aşılamaz duvarlar.", + "ObrovskĂ©, neprostupnĂ© zdi, kterĂ© oddÄ›lujĂ­ rĹŻznĂ© kraje.", + "Огромные непроходимые Ńтены, разделяющие разные земли.", + "Gigantische, undurchdringbare Wände, die die verschiedenen Länder voneinander trennen.", + }}, + {0x8d295357, { // "You have collected 10 treasures of each type." + "Znalaz%Ĺ‚eĹ›0 10 skarbĂłw kaĹĽdego typu.", + "her hazine çeĹźidinden onar tane topladın.", + "ZĂ­ska%l0 jsi 10 pokladĹŻ od kaĹľdĂ©ho typu.", + "Đ’Ń‹ Ńобрали по 10 Ńокровищ каждого типа.", + "Du hast 10 Schätze jedes Typs gesammelt.", + }}, + {0x8d81cd48, { // "This might be useful for Android devices with limited memory." + "To moĹĽe siÄ™ przydać, gdy Twoje urzÄ…dzenie ma maĹ‚o pamiÄ™ci.", + "Bu, sınırlı hafızalı Android cihazları için kullanışlı olabilir.", + "To se mĹŻĹľe hodit na zařízenĂ­ch Android s omezenou pamÄ›tĂ­.", + "Đ­Ń‚Đľ может быть полезно для Android-ŃŃтройŃтв Ń ĐľĐłŃ€Đ°Đ˝Đ¸Ń‡ĐµĐ˝Đ˝ĐľĐą памятью.", + "Könnte fĂĽr Android-Geräte mit begrenztem Speicher nĂĽtzlich sein.", + }}, + {0x8d9e15f4, { // "Your Aether powers are drained by %the1!" + "Twoja moc Eteru zostaĹ‚a wyssana przez %a1!", + "Güçlerin %1 tarafından tĂĽketiliyor!", + "%1 vysála tvou sĂ­lu Éteru!", + "Твоя эфирная Ńила была ŃменьŃена %abl1!", + "%Der1 %1 saugt deine Ă„therkraft auf!", + }}, + {0x8dc2f051, { // "Showoff mode" + "Tryb pokazowy", + "GösteriĹź Modu", + "PĹ™edvádÄ›cĂ­ mĂłd", + "Режим показа", + "Angeber Modus", + }}, + {0x8e0a8eb4, { // "To learn more about straight lines, wander further, and you should find the Land of Eternal Motion. Try to run in a straight line, with a Running Dog next to you. Even though the Running Dog runs at the same speed as you, it will appear to go slower -- this is because you are running in a straight line, and the Running Dog has to run in a curve called an equidistant.\n\nRemember that you can right click on anything to get more information." + "By dowiedzieć siÄ™ wiÄ™cej o liniach prostych, podróżuj dalej, aĹĽ znajdziesz KrainÄ™ Wiecznego Ruchu. Biegnij w linii prostej z Psem biegnÄ…cym obok. Mimo ĹĽe Pies biegnie z tÄ… samÄ… prÄ™dkoĹ›ciÄ…, nie bÄ™dzie w stanie CiÄ™ dogonić -- poniewaĹĽ Ty ruszasz siÄ™ w linii prostej, a Pies biegnie po krzywej zwanej ekwidystantÄ….\n\nPamiÄ™taj, ĹĽe moĹĽesz klikać prawym przyciskiem na różnych elementach gry, by dowiedzieć siÄ™ o nich wiÄ™cej.", +/*MISSING*/ "To learn more about straight lines, wander further, and you should find the Land of Eternal Motion. Try to run in a straight line, with a Running Dog next to you. Even though the Running Dog runs at the same speed as you, it will appear to go slower -- this is because you are running in a straight line, and the Running Dog has to run in a curve called an equidistant.\n\nRemember that you can right click on anything to get more information.", + "Chceš-li se dozvÄ›dÄ›t vĂ­c o přímkách, běž dál a mÄ›l bys najĂ­t Zemi věčnĂ©ho pohybu. Pokus se tam běžet po přímce, zatĂ­mco vedle tebe běží BěžícĂ­ pes. I kdyĹľ běží stejnÄ› rychle jako ty, bude se zdát, Ĺľe je pomalejší -- to proto, Ĺľe ty běžíš po přímce, zatĂ­mco BěžícĂ­ pes musĂ­ běžet po kĹ™ivce zvanĂ© 'ekvidistanta'.\n\nNezapomeĹ, Ĺľe pokud na cokoli klikneš pravĂ˝m tlaÄŤĂ­tkem, mĹŻĹľeš o tom zĂ­skat vĂ­c informacĂ­.", + "Чтобы Ńзнать больŃе Đľ прямых линиях, найди Землю вечного движения. ПопробŃĐą двигатьŃŃŹ по прямой вмеŃте Ń Ńобакой, бегŃщей рядом. Хотя вы бежите Ń Ń€Đ°Đ˛Đ˝ĐľĐą ŃкороŃŃ‚ŃŚŃŽ, она бŃдет отŃтавать -- дело в том, что Ń‚Ń‹ бежиŃŃŚ по прямой, Đ° Ńобака -- по кривой, называемой эквидиŃтантой.\n\n", +/*MISSING*/ "To learn more about straight lines, wander further, and you should find the Land of Eternal Motion. Try to run in a straight line, with a Running Dog next to you. Even though the Running Dog runs at the same speed as you, it will appear to go slower -- this is because you are running in a straight line, and the Running Dog has to run in a curve called an equidistant.\n\nRemember that you can right click on anything to get more information.", + }}, + {0x8e157c82, { // "You construct some Elemental Gems!" + "Skonstruowa%Ĺ‚eĹ›0 KamieĹ„ ZywioĹ‚Ăłw!", +/*MISSING*/ "You construct some Elemental Gems!", + "VytvoĹ™i%l0 jsi ElementálnĂ­ drahokamy!", + "Đ’Ń‹ Ńоздали Элементальный камень!", + "Du erstellst ein paar Elementjuwelen!", + }}, + {0x8e282708, { // "Completing the quest in this land is not necessary for the Hyperstone Quest." + "Wykonanie tego zadania nie jest konieczne do zdobycia Hiperkamieni.", +/*MISSING*/ "Completing the quest in this land is not necessary for the Hyperstone Quest.", + "SplnÄ›nĂ­ mise v tomto kraji nenĂ­ nezbytnĂ© pro Hyperkamovou misi.", + "Выполнение задания в этой земле не обязательно для квеŃŃ‚Đ° Гиперкамней.", + "Das Bestehen der Herausforderung dieses Landes ist keine Voraussetzung fĂĽr die Hyperstein-Herausforderung.", + }}, + {0x8eb7812c, { // "(includes co-op)" + "(zawiera co-op)", +/*MISSING*/ "(includes co-op)", + "(zawiera co-op)", + "(включая ŃовмеŃтный режим)", + "(enthält co-op)", + }}, + {0x8f298833, { // "rotational symmetry" + "symetria obrotowa", + "döngĂĽsel simetri", + "rotaÄŤnĂ­ symetrie", + "вращательная Ńимметрия", + "drehende Symmetrie", + }}, + {0x8f2c66ca, { // "Precious belongings of ancient Viking heroes. Your Orb of the Sword can be used to dig these treasures out of the barrows." + "Drogocenne przedmioty naleĹĽÄ…ce do staroĹĽytnych wikiĹ„skich bohaterĂłw. UĹĽyj Sfery Ostrza, by wykopać te skarby z kurhanĂłw.", +/*MISSING*/ "Precious belongings of ancient Viking heroes. Your Orb of the Sword can be used to dig these treasures out of the barrows.", + "DrahocennĂ˝ majetel dávnĂ˝ch vikingskĂ˝ch hrdinĹŻ. Tvá SfĂ©ra MeÄŤe mĹŻĹľe tyto poklady vykopat z mohyl.", + "ДрагоценноŃти древних героев-викингов. ĐŃпользŃŃŽ ĐˇŃ„ĐµŃ€Ń ĐĽĐµŃ‡Đ°, чтобы добыть их из могилы.", + "Kostbares Eigentum der Helden der alten Wikinger. Dein Orb des Schwertes kann verwendet werden, um diese Schätze aus den HĂĽgelgräbern herauszuholen.", + }}, + {0x8f3b6267, { // "big triangular grid" + "duĹĽa siatka trĂłjkÄ…tna", +/*MISSING*/ "big triangular grid", + "velká trojĂşhelnĂ­ková mřížka", + "больŃĐ°ŃŹ треŃгольная Ńетка", +/*MISSING*/ "big triangular grid", + }}, + {0x8f624b06, { // "message flash time" + "czas pokazywania wiadomoĹ›ci", + "mesaj gösterme sĂĽresi", + "doba blikánĂ­ zprávy", + "время показа Ńообщений", + "Nachrichten-Zeit", + }}, + {0x8f7cc258, { // "fullscreen mode" + "tryb peĹ‚noekranowy", + "tam ekran modu", + "zobrazenĂ­ na celou obrazovku", + "полноэкранный режим", + "Vollbild", + }}, + {0x8fd09441, { // "This Orb allows you to jump over an adjacent monster, killing or stunning it. You can only vault in a roughly straight line. Target a cell on the other side to use it." + "Ta Sfera pozwala przeskoczyć sÄ…siadujÄ…cego potwora, zabijajÄ…c lub ogĹ‚uszajÄ…c go. MoĹĽesz skakać tylko w linii prostej. Wyceluj w pole po drugiej stronie potwora, by uĹĽyć tej Sfery.", +/*MISSING*/ "This Orb allows you to jump over an adjacent monster, killing or stunning it. You can only vault in a roughly straight line. Target a cell on the other side to use it.", + "Tato SfĂ©ra ti umoĹľĹuje pĹ™eskoÄŤit pĹ™es sousednĂ­ho netvora, a tĂ­m ho zabĂ­t nebo omráčit. VybÄ›hnout mĹŻĹľeš pouze zhruba po přímce. SfĂ©ra se používá zacĂ­lovánĂ­m polĂ­ÄŤka na druhĂ© stranÄ› netvora.", + "Đ­Ń‚Đ° Ńфера позволяет прыгать через ŃĐľŃеднего монŃтра, Ńбивая или оглŃŃĐ°ŃŹ его. Можно прыгать только по примерно пряной линии. Выберите ĐşĐ»ĐµŃ‚ĐşŃ Đ˝Đ° Đ´Ń€Ńгой Ńтороне, чтобы иŃпользовать ŃферŃ.", +/*MISSING*/ "This Orb allows you to jump over an adjacent monster, killing or stunning it. You can only vault in a roughly straight line. Target a cell on the other side to use it.", + }}, + {0x8fd8fcf3, { // "Beltrami-Klein model" + "Model Beltramiego-Kleina", +/*MISSING*/ "Beltrami-Klein model", + "Beltrami-KleinĹŻv model", + "Модель Бельтрами-Клейна", +/*MISSING*/ "Beltrami-Klein model", + }}, + {0x8fdb2403, { // "Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them." + "Stada tych BykĂłw biegnÄ… dĹ‚ugie dystansy z jakiegoĹ› powodu. Gdy coĹ› je zatrzyma, stajÄ… siÄ™ WĹ›ciekĹ‚ymi Bykami.", +/*MISSING*/ "Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them.", + "Sáda tÄ›chto BĂ˝kĹŻ z nÄ›jakĂ©ho dĹŻvodu bÄ›hajĂ­ na dlouhĂ© vzdálenosti. Pokud je nÄ›co zastavĂ­, promÄ›nĂ­ se ve VzteklĂ© BĂ˝ky.", + "Стада этих быков зачем-Ń‚Đľ пробегают огромные раŃŃтояния. Они ŃтановятŃŃŹ БеŃеными быками, еŃли что-Ń‚Đľ их ĐľŃтановит.", +/*MISSING*/ "Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them.", + }}, + {0x900ef316, { // "pan up" + "przewiĹ„ w gĂłrÄ™", + "yukarı kaydır", + "scrollovánĂ­ nahoru", + "крŃтить вверх", + "Hochschwenken", + }}, + {0x9032b3d6, { // "INFO" + "INFO", + "BÄ°LGÄ°", + "INFORMACE", + "ĐНФО", + "INFO", + }}, + {0x906a1466, { // "Your inventory is empty." + "Nie masz ĹĽadnych skarbĂłw.", + "Envanterin boĹź.", + "Nic u sebe nemáš.", + "Đ’Đ°Ń Đ¸Đ˝Đ˛ĐµĐ˝Ń‚Đ°Ń€ŃŚ ĐżŃŃŃ‚.", + "Dein Inventar ist leer.", + }}, + {0x90719f73, { // "Cannot create temporary matter on an item!" + "Nie moĹĽna tworzyć tymczasowej materii na przedmiocie!", + "Bir eĹźyanın ĂĽzerinde geçici madde oluĹźturamazsın!", + "DoÄŤasnou hmotu nelze vytvoĹ™it na pĹ™edmÄ›tu!", + "Нельзя Ńоздать временнŃŃŽ материю на предмете!", + "Temporäre Materie kann nicht auf einem Item erzeugt werden!", + }}, + {0x90acac78, { // "There must be some temples of Cthulhu in R'Lyeh..." + "MuszÄ… być jakieĹ› Ĺ›wiÄ…tynie Cthulhu w R'Lyeh...", + "R'Lyeh'te Cthulhu'ya adanmış bazı tapınaklar olmalı...", + "Cthulhu musĂ­ mĂ­t V R'Lyeh nÄ›jakĂ© Chrámy...", + "Đ’ Đ 'Льехе должны быть храмы КтŃлхŃ...", + "Es muss doch auch Tempel des Cthulhu in R'Lyeh geben...", + }}, + {0x90df12d0, { // "images" + "obrazki", +/*MISSING*/ "images", + "obrázky", + "изображения", +/*MISSING*/ "images", + }}, + {0x90e25cd6, { // "anti-aliasing enabled" + "wĹ‚Ä…czono anti-aliasing", + "Anti=alising devrede/", + "anti-aliasing zapnut", + "Ńглаживание включено", + "Anti-Aliasing aktiviert", + }}, + {0x90e37bd4, { // "A weirdly colored rock. Hyperentomologists claim that the Hyperbug armies use these rocks to navigate back home after a victorious battle." + "Ta skaĹ‚a ma dziwny kolor. Hiperentomolodzy twierdzÄ…, ĹĽe roje HiperinsektĂłw uĹĽywajÄ… tych skaĹ‚ do nawigacji, by wrĂłcić do domu po wygranej bitwie.", + "Garip renkli bir kaya. AĹźkınböcekbilimcilere göre aĹźkın böcek orduları bu kayaları zaferlerinden sonra evlerini bulmak için kullanıyorlar.", + "PodivnÄ› zbarvená skála. HyperentomologovĂ© tvrdĂ­, Ĺľe armády HyperhmyzákĹŻ je používajĂ­ k navigaci, kdyĹľ se vracejĂ­ domĹŻ po vĂ­tÄ›znĂ© bitvÄ›.", + "Странно окраŃенный камень. Гиперэнтомологи Ńчитают, что армии гипержŃков иŃпользŃŃŽŃ‚ их, чтобы вернŃŃ‚ŃŚŃŃŹ поŃле победоноŃной битвы домой.", + "Ein seltsam gefärbter Stein. Hyperentomologen behaupten, die Hyperkäfer-Armeen verwenden sie, um nach einer siegreichen Schlacht nach Hause zu finden.", + }}, + {0x90e70e66, { // "Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break." + "Te gÄ…Ĺ‚Ä™zie udĹşwignÄ… TwĂłj ciężar, ale jeĹ›li uĹĽyjesz ich, by siÄ™ przemieĹ›cić (nie spaść) na niestabilnÄ… pozycjÄ™, zĹ‚amiÄ… siÄ™.", +/*MISSING*/ "Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break.", + "Tyto vÄ›tve tvou váhu unesou, ale pokud se z nich pohneš (kromÄ› pádu) na nestabilnĂ­ polĂ­ÄŤko, zlomĂ­ se.", + "Эти ветви выдерживают Đ˛Đ°Ń Đ˛ĐµŃ, но еŃли из иŃпользовать, чтобы пойти (не ŃпаŃŃ‚ŃŚ) на что-Ń‚Đľ неŃŃтойчивое, они ŃломаютŃŃŹ.", + "Die Ă„ste hier werden dein Gewicht tragen, aber wenn du sie nutzt um dich zu einem instabilen Platz zu bewegen (nicht fallen), werden sie brechen.", + }}, + {0x90ee6489, { // "This Orb lets you ride Dragons and other worm-like creatures. Simply move onto such a creature to ride them; while riding, you are protected from dangerous terrains and partially from attacks (they cause you to lose half of your Domination power), but you cannot collect items. When only one charge is left, you have to dismount this turn -- be very careful to make this possible, as your mount could attack you immediately!\n\nWhile riding, click on a location to order your mount to move or attack there." + "Ta Sfera pozwala Ci jeĹşdzić Smokami i innymi wężopodobnymi stworami. Po prostu wykonaj ruch na pole z takim stworem, by go dosiąść. Podczas jazdy jesteĹ› chronion%y0 przed niebezpiecznym terenem i częściowo przed atakami (ktĂłre powodujÄ… utratÄ™ poĹ‚owy Twojej mocy Dominacji), ale nie moĹĽesz zbierać przedmiotĂłw. Kiedy zostanie tylko 1 Ĺ‚adunek, musisz natychmiast zsiąść -- zadbaj o to, by to byĹ‚o moĹĽliwe bez zostania zaatakowanym przez Twojego dawnego wierzchowca!\n\nPodczas jazdy kliknij dowolne pole, by nakazać Twojemu wierzchowcowi tam siÄ™ ruszyć lub zaatakować.", +/*MISSING*/ "This Orb lets you ride Dragons and other worm-like creatures. Simply move onto such a creature to ride them; while riding, you are protected from dangerous terrains and partially from attacks (they cause you to lose half of your Domination power), but you cannot collect items. When only one charge is left, you have to dismount this turn -- be very careful to make this possible, as your mount could attack you immediately!\n\nWhile riding, click on a location to order your mount to move or attack there.", + "Tato SfĂ©ra ti umoĹľĹuje jezdit na DracĂ­ch a jinĂ˝ch ÄŤervovitĂ˝ch netvorech. StaÄŤĂ­ se na nÄ› pohnout, a mĹŻĹľeš nasednout; bÄ›hem jĂ­zdy jsi chránÄ›n pĹ™ed nebezpeÄŤnĂ˝m terĂ©nem a částeÄŤnÄ› i pĹ™ed Ăştoky (ty tÄ› pĹ™ipravĂ­ o polovinu zbĂ˝vajĂ­cĂ­ sĂ­ly Dominance), nemĹŻĹľeš ale sbĂ­rat pĹ™edmÄ›ty. Ve chvĂ­li, kdy ti zbĂ˝vá pouze jeden náboj, musíš v tomto kole sesednout -- dej si dobrĂ˝ pozor, aby to bylo moĹľnĂ©, protoĹľe tvĹŻj oĹ™ na tebe mĹŻĹľe okamĹľitÄ› zaĂştoÄŤit!\n\n BÄ›hem jĂ­zdy mĹŻĹľeš kliknutĂ­m naĹ™izovat svĂ©mu oĹ™i, kam se má pohnout nebo zaĂştoÄŤit.", + "Đ­Ń‚Đ° Ńфера позволяет Đ˛Đ°Ń ĐµĐ·Đ´Đ¸Ń‚ŃŚ на драконах и Đ´Ń€Ńгих червеобразных ŃŃщеŃтвах. ПроŃŃ‚Đľ пойди на ĐşĐ»ĐµŃ‚ĐşŃ Ń Ń‚Đ°ĐşĐ¸ĐĽ монŃтром, чтобы ĐľŃедлать его. Пока Ń‚Ń‹ едеŃŃŚ на ŃŃщеŃтве, на тебя не дейŃтвŃŃŽŃ‚ никакие опаŃные объекты и, чаŃтично, атаки (от которых вы теряете ĐżĐľĐ»ĐľĐ˛Đ¸Đ˝Ń Ńилы этой Ńферы), но вы не можете Ńобирать предметы. Когда ĐľŃŃ‚Đ°Ń‘Ń‚ŃŃŹ только один заряд, вы должны Ńлезть Ń ŃŃщеŃтва -- бŃдьте ĐľŃторожны, ведь оно может ŃŃ€Đ°Đ·Ń Đ¶Đµ атаковать ваŃ!\n\nНажимайте на клетки, чтобы Đ·Đ°Ńтавить ŃŃщеŃтво Ń‚ŃĐ´Đ° пойти или атаковать.", + "Diser Orb erlaubt es dir Drachen oder ondere wurmartige Wesen zu reiten. Tritt einfach auf solch ein Wesen um es zu reiten; während des Ritts bist du vor gefährlichen Gebieten und teilweise vor Angriffen (sie verursachen den Verlust der Hälfte deiner Kraft der Dominanz) geschĂĽtzt. Jedoch kannst du keine Gegenstände sammeln. Sobald nur noch eine Ladung ĂĽbrig ist, musst du in diesem Zug absteigen -- achte darauf dies zu ermöglichen, denn dein Reittier könnte dich unmittelbar angreifen!\n\nWährend du reitest, klicke auf eine Zelle um deinem Reittier zu befehlen dorthin zu gehen oder dort anzugreifen.", + }}, + {0x91033a83, { // "You can stand here." + "MoĹĽesz na niej stanąć.", + "Burada durabilirsin.", + "Na tĂ©to plošince mĹŻĹľeš stát.", + "Можно вŃŃ‚Đ°Ń‚ŃŚ ŃŃŽĐ´Đ°.", + "Du kannst hier stehen.", + }}, + {0x9149140f, { // "Different kills required: %1.\n" + "Różnych zabitych przeciwnikĂłw wymaganych: %1.\n", +/*MISSING*/ "Different kills required: %1.\n", + "PoĹľadovanĂ˝ poÄŤet typĹŻ zabitĂ˝ch nepřátel: %1.\n", + "Необходимо Ńбить различных ŃŃщеŃтв: %1.\n", + "Verschiedene Tötungen erforderlich: %1.\n", + }}, + {0x91ad66d1, { // "This monster has come from another world, presumably to steal our treasures. Not as fast as an Eagle, not as resilient as the guards from the Palace, and not as huge as the Mutant Ivy from the Clearing; however, they are very dangerous because of their intelligence, and access to magical powers.\n\n" + "Ten potwĂłr przybyĹ‚ z innego Ĺ›wiata, prawdopodobnie po nasze skarby. Nie taki szybki jak OrzeĹ‚, nie taki odporny jak straĹĽnicy PaĹ‚acu, i nie taki wielki jak Zmutowany Bluszcz z Polany; jest jednak bardzo niebezpieczny ze wzglÄ™du na inteligencjÄ™ i dostÄ™p do mocy magicznych.\n\n", +/*MISSING*/ "This monster has come from another world, presumably to steal our treasures. Not as fast as an Eagle, not as resilient as the guards from the Palace, and not as huge as the Mutant Ivy from the Clearing; however, they are very dangerous because of their intelligence, and access to magical powers.\n\n", + "Tento netvor pĹ™išel z jinĂ©ho svÄ›ta, asi proto, aby nám ukradl poklady. NenĂ­ tak rychlĂ˝ jako Orel, nenĂ­ tak odolnĂ˝ jako stráže z Paláce, a nenĂ­ tak obrovskĂ˝ jako MutantnĂ­ bĹ™eÄŤtan z MĂ˝tiny; dĂ­ky svĂ© inteligenci a přístupu k magickĂ˝m schopnostem je však velmi nebezpeÄŤnĂ˝.\n\n", + "Этот монŃŃ‚Ń€ прибыл из Đ´Ń€Ńгого мира, видимо, чтобы ŃкраŃŃ‚ŃŚ наŃи Ńокровища. Не такой быŃтрый, как орёл, не такой живŃчий, как Ńтражники из Дворца, не такой живŃчий, как плющ-ĐĽŃтант Ń ĐźĐľĐ»ŃŹĐ˝Ń‹; однако они опаŃны из-Đ·Đ° их интеллекта и Đ´ĐľŃŃ‚Ńпа Đş магичеŃким Ńилам.\n\n", +/*MISSING*/ "This monster has come from another world, presumably to steal our treasures. Not as fast as an Eagle, not as resilient as the guards from the Palace, and not as huge as the Mutant Ivy from the Clearing; however, they are very dangerous because of their intelligence, and access to magical powers.\n\n", + }}, + {0x91f0ec0a, { // "clockwise" + "zegarowo", +/*MISSING*/ "clockwise", + "po smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek", + "по чаŃовой Ńтрелке", + "im Uhrzeigersinn", + }}, + {0x920e4875, { // "Hint: press 1 2 3 4 to change the projection." + "WskazĂłwka: 1 2 3 4 zmienia rzut.", +/*MISSING*/ "Hint: press 1 2 3 4 to change the projection.", + "NápovÄ›da: Klávesy 1 2 3 4 mÄ›nĂ­ projekci.", + "ПодŃказка: 1 2 3 4 -- Ńменить проекцию.", +/*MISSING*/ "Hint: press 1 2 3 4 to change the projection.", + }}, + {0x921e4397, { // "You hit %the1." + "Trafi%Ĺ‚eĹ›0 %a1.", + "%1 dĂĽĹźmanına vurdun.", + "Zasáhl jsi %a1.", + "Đ’Ń‹ Ńдарили %a1.", + "Du triffst %den1 %a1.", + }}, + {0x92345333, { // "This frozen lake is a hellish version of the Icy Land. Now, your body heat melts the floor, not the walls." + "ZamarzniÄ™te jezioro. Piekielna wersja Krainy Lodu, w ktĂłrej ciepĹ‚o Twojego ciaĹ‚a topi ziemiÄ™ pod TobÄ…, a nie Ĺ›ciany.", + "Bu donmuĹź göl, Buz Diyarlarının korkunç bir versiyonu gibi. Ĺžimdi, vĂĽcut ısın duvarları deÄźil, yeri eritiyor.", + "Toto zamrzlĂ© jezero je pekelnou verzĂ­ LedovĂ©ho kraje. Tady tvĂ˝m tÄ›lesnĂ˝m teplem netajĂ­ zdi, ale podlaha.", + "ЗамёрзŃее озеро - Đ°Đ´Ńкий вариант Ледяной земли. Но ŃĐµĐąŃ‡Đ°Ń Ń‚ĐµĐżĐ»Đľ плавит пол, Đ° не Ńтены.", + "Dieser gefrorene See ist eine höllische Version des Eisigen Landes. Hier schmilzt deine Körperwärme den Boden anstatt der Wände.", + }}, + {0x924212cc, { // "five players" + "piÄ™ciu graczy", +/*MISSING*/ "five players", + "pÄ›t hráčů", + "пять игроков", + "fĂĽnf Spieler", + }}, + {0x92642dd1, { // "A Troll without the power of Life." + "Troll bez mocy Ĺ»ycia.", + "Hayat gĂĽcĂĽnden mahrum bir trol.", + "Troll bez sĂ­ly Ĺ˝ivota.", + "Тролль без жизненной Ńилы.", + "Ein Troll ohne die Kraft des Lebens.", + }}, + {0x92790eef, { // "or ESC to see how it ended" + "lub ESC by zobaczyć, jak siÄ™ skoĹ„czyĹ‚o", + "veya nasıl bittiÄźini görmek için ESC'ye bas", + "nebo ESC, abys vidÄ›%l0, jak to skonÄŤilo", + "либо ESC, чтобы поŃмотреть, как вŃŃ‘ закончилоŃŃŚ", + "oder ESC um zu sehen, wie alles endete", + }}, + {0x92859386, { // "This orb can protect you from damage." + "Ta sfera chroni CiÄ™ przed obraĹĽeniami od potworĂłw.", + "Bu kĂĽre seni hasardan korur.", + "Tato sfĂ©ra tÄ› dokáže chránit pĹ™ed zranÄ›nĂ­m.", + "Đ­Ń‚Đ° Ńфера защитит Đ’Đ°Ń ĐľŃ‚ вŃех Đ°Ń‚Đ°Đş.", + "Dieser Orb kann dich vor Schaden schĂĽtzen.", + }}, + {0x92b415c8, { // "You push %the1 behind you!" + "Popchn%Ä…Ĺ‚eĹ›0 %a1 za siebie.", + "%a1 arkana ittin.", + "OdstrÄŤil jsi %a1 za sebe.", + "Đ’Ń‹ передвинŃли %a1 Đ·Đ° Ńебя.", + "Du schiebst %den1 %a1 hinter dich.", + }}, + {0x92c84a71, { // "move up-right" + "ruch w gĂłrÄ™-prawo", +/*MISSING*/ "move up-right", + "pohyb doprava nahoru", + "ход вверх-вправо", +/*MISSING*/ "move up-right", + }}, + {0x92e9560d, { // "help for keyboard users" + "pomoc dla uĹĽytkownikĂłw klawiatury", +/*MISSING*/ "help for keyboard users", +/*MISSING*/ "help for keyboard users", + "помощь для пользователей клавиатŃры", +/*MISSING*/ "help for keyboard users", + }}, + {0x92e9c33d, { // "Euclidean mode" + "tryb euklidesowy", + "Ă–klid modu", + "EukleidovskĂ˝ mĂłd", + "режим евклидовой плоŃкоŃти", + "Euklidischer Modus", + }}, + {0x931ed7e1, { // "This Orb summons a friendly Bomberbird." + "Ta sfera przywoĹ‚uje przyjaznego Bombardiera.", + "Bu KĂĽre barışçıl bir BombacıkuĹź çıkarır.", + "Tato sfĂ©ra vyvolá přátelskĂ©ho Bombarďáka.", + "Đ­Ń‚Đ° Ńфера вызывает Ń€Ńчного Бомбардира.", + "Dieser Orb ruft einen verbĂĽndeten Bombenvogel herbei.", + }}, + {0x935a45ec, { // "Map saved to %1" + "Mapa zapisana do %1", + "Harita %1 konumuna kaydedildi", + "Mapa uloĹľena do %1", + "Карта Ńохранена в %1", + "Karte unter %1 gespeichert", + }}, + {0x935ce07a, { // "useless in %the1" + "bezuĹĽyteczna %abl1", + "%abl1 iĹźe yaramaz", + "k niÄŤemu %abl1", + "беŃполезна %abl1", + "nutzlos in %der1", + }}, + {0x9373d1a6, { // "summon Orb of Yendor" + "przywoĹ‚aj sferÄ™ Yendoru", + "Yendorun KĂĽresini çıkar", + "vyvolej Yendorskou sfĂ©ru", + "призвать Ńферы Йендора", + "rufe einen Orb von Yendor herbei", + }}, + {0x93e87d87, { // "A rare and expensive substance found in the Desert. It is believed to extend life and raise special psychic powers." + "Rzadka i droga substancja z Pustyni. Podobno wydĹ‚uĹĽa ĹĽycie i daje moce psychiczne.", + "Çölde bulunan ender ve pahalı bir katkı maddesi. YaĹźamı uzattığına ve bazı özel psiĹźik güçleri açığa çıkardığına inanılıyor.", + "Drahá a vzácná látka, která se nacházĂ­ v Poušti. Věří se, Ĺľe prodluĹľuje Ĺľivot a zlepšuje zvláštnĂ­ psychickĂ© schopnosti.", + "Редкое и дорогое вещеŃтво из ĐźŃŃтыни. Говорят, продлевает Ńрок жизни и Đ´Đ°Ń‘Ń‚ ŃверхŃпоŃобноŃти.", + "Eine seltene und teure Substanz aus der WĂĽste. Man sagt, sie verlängert das Leben und verleiht besondere psychische Kräfte.", + }}, + {0x93fe8846, { // "You chop down %the1." + "Ĺšci%Ä…Ĺ‚eĹ›0 %a1.", +/*MISSING*/ "You chop down %the1.", + "Pokáce%l0 jsi %a1.", + "Đ’Ń‹ ŃŃ€Ńбили %a1.", + "Du hackst %den1 %a1 ab.", + }}, + {0x940873d4, { // "This beautiful flower is greatly prized by wizards, as it allows them to cast powerful magical spells without preparation.\n" + "Ten piÄ™kny kwiat ma wysokÄ… cenÄ™ wĹ›rĂłd czarodziejĂłw, bo pozwala im rzucać silne czary bez przygotowania.\n", +/*MISSING*/ "This beautiful flower is greatly prized by wizards, as it allows them to cast powerful magical spells without preparation.\n", + "Tento nádhernĂ˝ kvÄ›t si velmi cenĂ­ ÄŤarodÄ›jovĂ©, neboĹĄ jim umoĹľĹuje sesĂ­lat silná kouzla bez jakĂ©koli přípravy.\n", + "Этот прекраŃный цветок очень ценитŃŃŹ колдŃнами, Ń‚Đ°Đş как позволяет Ńоздавать мощные чары без подготовки.\n", + "Diese schöne Blume ist hochgeschätzt bei Zauberern, denn sie erlaubt es ihnen, ohne Vorbereitung machtvolle magische Zauber zu wirken.\n", + }}, + {0x9447d99f, { // "A rare unliving construct from the Dead Caves. It instantly destroys cave walls next to its path, and also leaves an impassable wall behind it. You suppose that this impassable wall helps it to escape from some threats. You hope you won't meet these threats..." + "Rzadka konstrukcja z Martwych JaskiĹ„. Natychmiast niszczy skalne Ĺ›ciany przy jego trasie i tworzy za sobÄ… Ĺ›cianÄ™ skaĹ‚y. Przypuszczasz, ĹĽe ta Ĺ›ciana pomaga mu uciekać przed jakimiĹ› zagroĹĽeniami. Masz nadziejÄ™, ĹĽe nie spotkasz tych zagroĹĽeĹ„...", + "Ă–lĂĽ MaÄźaralardan cansız bir mekanizma. Yoluna çıkan tĂĽm maÄźara duvarlarını yıkar ve arkasında geçilemeyen bir duvar bırakır.Bu duvarları birtakım tehditlerden kullanabileceÄźini düşünĂĽyorsun. Aynı zamanda bu tehditlerle hiç karşılaĹźmayacağını da umuyorsun..", + "VzácnĂ˝ neĹľivĂ˝ konstrukt z MrtvĂ˝ch jeskynĂ­. OkamĹľitÄ› niÄŤĂ­ stÄ›ny jeskynÄ› kolem svĂ© dráhy a zanechává za sebou neprostupnou zeÄŹ. Tato neprostupná zeÄŹ mu zĹ™ejmÄ› umoĹľĹuje uniknout pĹ™ed nebezpeÄŤĂ­m. Doufáš, Ĺľe na tato nebezpeÄŤĂ­ nenarazíš...", + "Редкое неживое Ńоздание из Мёртвых пещер. Мгновенно разрŃŃает Ńтены на Ńвоём ĐżŃти и ĐľŃтавляет Ńтены Đ·Đ° Ńобой.", + "Ein seltenes untotes Geschöpf aus den Toten Höhlen. Es zerstört unmittelbar alle Höhlenwände vor und neben sich und hinterlässt wiederum undurchdringbare Wände. Du vermutest, dass diese Wände ihm helfen sollen irgendwelchen Gefahren zu entkommen. Hoffentlich wirst du nicht sehen, wovor es flieht...", + }}, + {0x9455bd4b, { // "Y shift" + "przesuniÄ™cie Y", +/*MISSING*/ "Y shift", + "Y posuv", + "Ńдвиг по Y", +/*MISSING*/ "Y shift", + }}, + {0x9490fa41, { // "This tutorial is different than most other game tutorials -- you are not forced to do anything, and you can go wherever you want.\n\nHowever, %the1 is not what we are talking about now. We will not explain this land at the moment, and you could ponentially get lost there.\n\nRemember that you can get to the next slide by pressing Enter." + "Ten podrÄ™cznik jest inny niĹĽ wiÄ™kszość innych -- nie masz obowiÄ…zku robić tego co tutorial chce, moĹĽesz iść dokÄ…d chcesz.\n\nAle %1 nie jest miejscem, o ktĂłrym teraz mĂłwimy. Nie wyjaĹ›nimy go, i potencjalnie moĹĽesz siÄ™ zgubić.\n\nNaciĹ›nij Enter by przejść do kolejnego slajdu.", +/*MISSING*/ "This tutorial is different than most other game tutorials -- you are not forced to do anything, and you can go wherever you want.\n\nHowever, %the1 is not what we are talking about now. We will not explain this land at the moment, and you could ponentially get lost there.\n\nRemember that you can get to the next slide by pressing Enter.", + "Tento tutoriál funguje jinak, neĹľ ve vÄ›tšinÄ› her -- k niÄŤemu tÄ› nenutĂ­me a mĹŻĹľeš si jĂ­t, kam chceš.\n\nAle %1 nenĂ­ to, o ÄŤem teÄŹ mluvĂ­me. Tento kraj momentálnÄ› tutoriál nevysvÄ›tluje a je moĹľnĂ©, Ĺľe se v nÄ›m ztratíš.\n\nNezapomeĹ, Ĺľe stiskem klávesy Enter mĹŻĹľeš pĹ™ejĂ­t na další snĂ­mek.", + "Đ­Ń‚Đľ Ń€ŃководŃтво отличаетŃŃŹ от больŃинŃтва Đ´Ń€Ńгих -- Ń‚Ń‹ не обязан ничего делать, иди ĐşŃĐ´Đ° хочеŃŃŚ.\n\nОднако %1 -- не Ń‚Đľ, Đľ чём ĐĽŃ‹ ŃĐµĐąŃ‡Đ°Ń ĐłĐľĐ˛ĐľŃ€Đ¸ĐĽ. Мы не бŃдем ŃĐµĐąŃ‡Đ°Ń ĐľĐ±ŃŠŃŹŃнять ŃŤŃ‚Ń Đ·ĐµĐĽĐ»ŃŽ, и Ń‚Ń‹ можеŃŃŚ заблŃдитьŃŃŹ в ней.\n\nНажми Enter, чтобы перейти на ŃледŃющий Ńлайд.", +/*MISSING*/ "This tutorial is different than most other game tutorials -- you are not forced to do anything, and you can go wherever you want.\n\nHowever, %the1 is not what we are talking about now. We will not explain this land at the moment, and you could ponentially get lost there.\n\nRemember that you can get to the next slide by pressing Enter.", + }}, + {0x949e4d00, { // "\"The Red Rock Valley is dangerous, but beautiful.\"" + "\"Dolina Czerwonej SkaĹ‚y jest piÄ™kna, choć niebezpieczna.\"", + "\"KızılKaya Vadisi tehlikeli ama manzara çok gĂĽzel.\"", + "\"ĂšdolĂ­ ÄŤervenĂ˝ch skal je nebezpeÄŤnĂ©, ale krásnĂ©.\"", + "\"Долина краŃных камней опаŃна, но прекраŃна.\"", + "\"Das Rotfelsental ist gefährlich aber wunderschön.\"", + }}, + {0x949f3d3c, { // "Euclidean geometry" + "geometria euklidesowa", +/*MISSING*/ "Euclidean geometry", + "eukleidovská geometrie", + "евклидова геометрия", +/*MISSING*/ "Euclidean geometry", + }}, + {0x94f9c468, { // "Love takes time, but it heals all wounds, and transcends time and space.\n\nThe Orb of Love is worth 30$$$, if you end the game with it.\n" + "MiĹ‚ość potrzebuje czasu, ale leczy wszelkie rany; czas i przestrzeĹ„ nie sÄ… dla niej przeszkodami.\n\nSfera MiĹ‚oĹ›ci jest warta 30$$$, jeĹ›li skoĹ„czysz z niÄ… grÄ™.\n", + "AĹźk zaman alır, ama her yarayı iyileĹźtirir ve zaman ve mekâna galip gelir.\n\nAĹźk KĂĽresi oyunu onunla bitirebilirsen 30$$$ eder.\n", + "Láska chce ÄŤas, ale zahojĂ­ všechny rány a pĹ™ekoná ÄŤas i prostor.\n\nSfĂ©ra lásky má cenu 30$$$, pokud ji máš u sebe na konci hry.\n", + "Любовь требŃет времени, но лечит вŃе раны, и проходит Ńквозь время и проŃтранŃтво.\n\nСфера любви Ńтоит 30$$$, еŃли закончить Đ¸ĐłŃ€Ń Ń Đ˝ĐµĐą.\n", + "Liebe braucht Zeit, aber sie heilt alle Wunden und ĂĽberschreitet die Grenzen von Raum und Zeit.\n\nDer Orb der Liebe ist 30$$$ wert wenn du das Spiel mit ihm beendest.\n", + }}, + {0x95334578, { // "Escher" + "Escher", + "Escher", + "escherovskĂ˝", + "Đ­Ńер", + "Escher", + }}, + {0x957837bd, { // "You can touch the Dead Orb in your inventory to drop it." + "Dotknij Martwej Sfery na liĹ›cie, by jÄ… porzucić.", + "Ă–lĂĽ KĂĽreye dokunarak onu bırakabilirsin.", + "Mrtvou sfĂ©ru ve svĂ©m inventáři mĹŻĹľeš poloĹľit tĂ­m, Ĺľe se jĂ­ dotkneš.", + "КоŃнитеŃŃŚ мёртвой Ńферы, чтобы Ńобрать её.", + "Du kannst den toten Orb in deinem Inventar berĂĽhren, um ihn abzulegen.", + }}, + {0x95cf0169, { // "exit menu" + "wyjdĹş z menu", +/*MISSING*/ "exit menu", + "opusĹĄ menu", + "выйти из меню", +/*MISSING*/ "exit menu", + }}, + {0x96103279, { // "F4 = file" + "F4 = plik", + "F4 = dosya", + "F4 = soubor", + "F4 = файл", + "F4 = Datei", + }}, + {0x96433cdb, { // "key Orb power" + "moc sfery jednym klawiszem", +/*MISSING*/ "key Orb power", + "moc sfery jednym klawiszem", + "клавиŃĐ° для Ńилы Ńферы", + "Hauptkraft des Orb", + }}, + {0x9653c1d0, { // "Wow! That was close." + "Uff! ByĹ‚o blisko.", +/*MISSING*/ "Wow! That was close.", + "Uf! To bylo o chlup!", + "Ох! Đ­Ń‚Đľ было близко.", + "Wow! Das war knapp.", + }}, + {0x9657dce2, { // "elliptic" + "eliptyczna", +/*MISSING*/ "elliptic", + "eliptická", + "эллиптичеŃкая", +/*MISSING*/ "elliptic", + }}, + {0x966f306e, { // "Failed to load map from %1" + "Nie udaĹ‚o siÄ™ wczytać %1", + "Harita %1 konumundan yĂĽklenemedi", + "NahránĂ­ mapy z %1 se nezdaĹ™ilo", + "Не ŃдалоŃŃŚ загрŃзить ĐşĐ°Ń€Ń‚Ń Đ¸Đ· %1", + "Karte konnte nicht von %1 geladen werden", + }}, + {0x9698c7bc, { // "This Orb creates a warped zone of radius 5 around you, and also allows you to move diagonally in warped zones." + "Ta sfera tworzy wokół Ciebie w promieniu zakrzywionÄ… przestrzeĹ„, a takĹĽe pozwala Ci siÄ™ poruszać po przekÄ…tnej w zakrzywionej przestrzeni.", +/*MISSING*/ "This Orb creates a warped zone of radius 5 around you, and also allows you to move diagonally in warped zones.", + "Tato SfĂ©ra kolem tebe vytvoří pokĹ™ivenou zĂłnu o polomÄ›ru 5, a kromÄ› toho ti takĂ© umoĹľĹuje ĂşhlopříčnĂ˝ pohyb v pokĹ™ivenĂ˝ch zĂłnách.", + "Đ­Ń‚Đ° Ńфера Ńоздаёт иŃкривление в радиŃŃе 5 клеток вокрŃĐł Đ’Đ°Ń, и позволяет Đ’Đ°ĐĽ ходить по-диагонали в иŃкривлённых зонах.", + "Dieser Orb erzeugt einen verzerrten Bereich vom Radius 5 um dich herum und erlaubt es dir dich diagonal in verzerrten Bereichen zu bewegen.", + }}, + {0x96c5e7f7, { // "Static mode disabled." + "Tryb statyczny wyĹ‚Ä…czony.", +/*MISSING*/ "Static mode disabled.", + "StatickĂ˝ mĂłd vypnut.", + "Статичный режим выключен.", +/*MISSING*/ "Static mode disabled.", + }}, + {0x96d4d8a4, { // "(v) menu" + "(v) menu", + "(v) menĂĽ", + "(v) menu", + "(v) меню", + "MenĂĽ - v", + }}, + {0x97043e71, { // "Press Enter or F10 to quit" + "WciĹ›nij Enter lub F10, by wyjść z gry", + "Enter ya da F10 ile çık", + "Enter nebo F10: ukonÄŤit hru", + "Нажмите Enter или F10, чтобы выйти", + "DrĂĽcke Enter oder F10 zum Verlassen des Spiels", + }}, + {0x9718515d, { // "%The1 squeaks in despair." + "%1 pisn%Ä…Ĺ‚1 rozpaczliwie.", + "%1 karamsarlıkla ciyaklıyor.", + "%1 zoufale pištĂ­.", + "%1 пищит в отчаянии.", + "%Die1 %1 piepst voll Verzweiflung.", + }}, + {0x971c306d, { // "coefficient" + "współczynnik", +/*MISSING*/ "coefficient", + "koeficient", + "коэффициент", + "Koeffizient", + }}, + {0x971caf7e, { // "light" + "lekki", + "hafif", + "lehkĂ˝", + "легкий", + "einfach", + }}, + {0x9754bf46, { // "Unavailable in the shmup mode.\n" + "NiedostÄ™pne w trybie strzelanki.\n", +/*MISSING*/ "Unavailable in the shmup mode.\n", + "NedostupnĂ© v mĂłdu stříleÄŤky.\n", + "НедоŃŃ‚Ńпно в режиме Ńтрельбы.\n", + "Nicht im shmup-Modus verfĂĽgbar.\n", + }}, + {0x975cfefc, { // "A fresh grave. Necromancers like those." + "ĹšwieĹĽy grĂłb. Nekromanci to lubiÄ….", + "Taze bir mezar. Ă–lüçağıranlar bunu sever.", + "ÄŚerstvĂ˝ hrob. Ty majĂ­ rádi nekromanceĹ™i.", + "Свежая могила. Некроманты их любят.", + "Ein frisches Grab. Totenbeschwörer mögen diese.", + }}, + {0x975dd65d, { // "Orbs summoned!" + "Sfery mocy przywoĹ‚ane!", + "KĂĽreler çağırdın!", + "Vyvola%l0 jsi sfĂ©ry!", + "Сферы призваны!", + "Orbs beschworen!", + }}, + {0x97b380ef, { // "Hardness frozen at %1." + "Trudność zamroĹĽona: %1.", + "Trudność zamroĹĽona: %1.", + "ObtĂ­Ĺľnost nastavená na: %1.", + "СложноŃŃ‚ŃŚ заморожена на %1.", + "Festgefroren: %1.", + }}, + {0x97b82241, { // "Cannot move into the current location of another player!" + "Nie moĹĽesz wejść na miejsce innego gracza!", +/*MISSING*/ "Cannot move into the current location of another player!", + "NemĹŻĹľeš vstoupit na polĂ­ÄŤko obsazenĂ© jinĂ˝m hráčem!", + "Нельзя пойти в клеткŃ, занятŃŃŽ Đ´Ń€Ńгим игроком!", + "Kann nicht auf die momentane Position eines anderen Spielers gehen!", + }}, + {0x97bc983b, { // "%The1 shoots you!" + "%1 do Ciebie strzeli%Ĺ‚!", + "%1 sana ateĹź etti!", + "%1 tÄ› stĹ™eli%l!", + "%1 Đ·Đ°Ńтрелит тебя!", + "%Der1 %1 erschieĂźt dich!", + }}, + {0x97cc96e0, { // "A large bird who likes strong winds. Just as you, it can fly quickly in the wind." + "Wielki ptak, lubiÄ…cy silne wiatry. Tak jak Ty moĹĽe szybko latać z wiatrem.", +/*MISSING*/ "A large bird who likes strong winds. Just as you, it can fly quickly in the wind.", + "WelkĂ˝ pták, kterĂ˝ má rád silnĂ˝ vĂ­tr. Dokáže v nÄ›m rychle lĂ©tat, stejnÄ› jako ty.", + "БольŃĐ°ŃŹ птица, которая любит Ńильный ветер. Как и Đ’Ń‹, движетŃŃŹ быŃтрее Ń Đ˛ĐµŃ‚Ń€ĐľĐĽ.", + "Ein groĂźer Vogel, der starken Wind liebt. Wie du kann er schnell mit dem Wind fliegen.", + }}, + {0x97e25bca, { // "change the alpha parameter to show the lines" + "zmieĹ„ parametr alfa by linie byĹ‚y widoczne", +/*MISSING*/ "change the alpha parameter to show the lines", + "čáry mĹŻĹľeš zviditelnit zmÄ›nou parametru alfa", + "измените параметр альфа, чтобы Ńвидеть эти линии", +/*MISSING*/ "change the alpha parameter to show the lines", + }}, + {0x97e2cdae, { // "\n\nThis Orb is triggered on your first attack or illegal move." + "\n\nTa Sfera siÄ™ aktywuje automatycznie, gdy wykonasz atak lub nielegalny ruch.", +/*MISSING*/ "\n\nThis Orb is triggered on your first attack or illegal move.", + "\n\nTato sfĂ©ra se aktivuje prvnĂ­m Ăştokem nebo ilegálnĂ­m tahem.", + "\n\nĐ­Ń‚Đ° Ńфера Ńрабатывает при атаке или невозможном ходе.", + "\n\nDieser Orb wird bei deiner ersten Attacke oder deinem ersten unerlaubten Zug ausgelöst.", + }}, + {0x98012938, { // "\n\nFast flying creatures may attack or go against gravity only in their first move." + "\n\nSzybko latajÄ…ce stworzenia mogÄ… atakować i poruszać siÄ™ wbrew grawitacji tylko w swoim pierwszym ruchu.", +/*MISSING*/ "\n\nFast flying creatures may attack or go against gravity only in their first move.", + "\n\nRychlĂ­ lĂ©tajĂ­cĂ­ tvorovĂ© mohou ĂştoÄŤit nebo se protivit gravitaci pouze pĹ™i svĂ©m prvnĂ­m pohybu.", + "\n\nĐ‘Ń‹Ńтро летающие ŃŃщеŃтва могŃŃ‚ двигатьŃŃŹ или атаковать против гравитации только первым Ńвоим ходом.", +/*MISSING*/ "\n\nFast flying creatures may attack or go against gravity only in their first move.", + }}, + {0x982b5c26, { // "Zebra Pattern" + "WzĂłr Zebra", + "Zebra Dokusu", + "Vzor 'Zebra'", + "Ńзор Зебра", + "Zebramuster", + }}, + {0x982ba756, { // "Ancient Viking heroes were buried here. Their graves have barrows raised over them, and are guarded by Draugar, animated corpses who are immune to mundane weapons. You will need to use a magical weapon spell to defeat them, and to rob the ancient jewelry buried in the graves." + "Tu pochowano staroĹĽytnych wikiĹ„skich bohaterĂłw. Nad ich grobami wzniesiono kurhany. Kurhany sÄ… strzeĹĽone przez Draugry, oĹĽywione zwĹ‚oki odporne na zwyczajne bronie. Potrzebujesz magicznej broni, by je pokonać i zrabować staroĹĽytnÄ… biĹĽuteriÄ™ zakopanÄ… w kurhanach.", +/*MISSING*/ "Ancient Viking heroes were buried here. Their graves have barrows raised over them, and are guarded by Draugar, animated corpses who are immune to mundane weapons. You will need to use a magical weapon spell to defeat them, and to rob the ancient jewelry buried in the graves.", + "Tady jsou pohĹ™beni dávnĂ­ vikingštĂ­ hrdinovĂ©. Nad jejich hroby jsou postaveny mohyly a stĹ™eží je DraugarovĂ©, oĹľivlĂ© mrtvoly imunnĂ­ proti obyÄŤejnĂ˝m zbranĂ­m. Pokud je chceš porazit a uloupit prastarĂ© klenoty pohĹ™benĂ© v jejich hrobech, budeš si muset nÄ›jak vyÄŤarovat magickou zbraĹ.", + "Древние герои Викингов похоронены здеŃŃŚ. Над их могилами поŃтроены ĐşŃрганы. охраняемые ДраŃграми -- живыми мертвецами, невоŃприимчивыми Đş ĐľĐ±Ń‹Ń‡Đ˝ĐľĐĽŃ ĐľŃ€Ńжию. Đ’Đ°ĐĽ Đ˝Ńжно магичеŃкое орŃжие, чтобы победить их и добратьŃŃŹ Đ´Đľ драгоценноŃтей, закопанных в ĐşŃрганах.", + "Die Helden der alten Wikinger wurden hier begraben. Ăśber ihren Gräbern erheben sich HĂĽgel, die von Draugar bewacht werden, Untote, die immun gegen irdische Waffen sind. Du wirst einen Zauber fĂĽr eine magische Waffe brauchen, um sie zu besiegen und die in den Gräbern verborgenen antiken Juwelen zu rauben.", + }}, + {0x983cfb96, { // "dress color II" + "kolor sukienki II", +/*MISSING*/ "dress color II", + "barva šatĹŻ II", + "цвет одежды II", + "Kleiderfarbe II", + }}, + {0x98941047, { // "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. Length of paths on the Rock III level is %3 of the corresponding length on the ground level." + "Iloraz SkaĹ‚y III do Ĺ›ciany to %1, czyli SkaĹ‚a III ma wysokość %2. Drogi na poziomie SkaĹ‚y III sÄ… %3 odpowiednich odlegĹ‚oĹ›ci na poziomie podĹ‚oĹĽa.", +/*MISSING*/ "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. Length of paths on the Rock III level is %3 of the corresponding length on the ground level.", + "PomÄ›r Skály III a zdĂ­ je %1, takĹľe Skála III je vysoká %2 absolutnĂ­ch jednotek. DĂ©lka cest na Ăşrovni Skály III je %3-násobkem odpovĂ­dajĂ­cĂ­ dĂ©lky na Ăşrovni zemÄ›..", + "ОтноŃение выŃот Ńкалы-III и Ńтены равно %1, Ń‚Đ°Đş что Ńкала-III имеет выŃĐľŃ‚Ń %2. Длина ĐżŃти на такой выŃоте в %3 раз больŃе длины на Ńровне земли.", +/*MISSING*/ "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. Length of paths on the Rock III level is %3 of the corresponding length on the ground level.", + }}, + {0x98d5754f, { // "As you leave, your powers are drained!" + "Opuszczasz KrainÄ™ Mocy... Twoja moc znikĹ‚a!", + "Ayrılırken, tĂĽm güçlerinin tĂĽkendiÄźini farkettin!", + "Opouštíš Kraj Moci... Tvá sĂ­la mizĂ­!", + "Покидая землю Ńилы, Đ’Ń‹ теряете магию Ńфер!", + "Deine Kraft verblasst, als du gehst.", + }}, + {0x98f031b2, { // "Note: currently scores are saved only in the normal mode on Android" + "Uwaga: wyniki na Androidzie sÄ… zapisywane tylko w normalnym trybie", +/*MISSING*/ "Note: currently scores are saved only in the normal mode on Android", + "Poznámka: na Androidu se skĂłre v tuto chvĂ­li ukládajĂ­ pouze v normálnĂ­m mĂłdu", + "Важно: на Đндроиде Ńчёт запиŃываетŃŃŹ только в обычном режиме", + "Hinweis: aktuell werden bei Android Punktestände nur im Normalmodus gespeichert", + }}, + {0x98f9d752, { // "three colors" + "trzy kolory", +/*MISSING*/ "three colors", + "tĹ™i barvy", + "три цвета", +/*MISSING*/ "three colors", + }}, + {0x9908e6b5, { // "You have improved both your real time and knife count. Congratulations!" + "Poprawi%Ĺ‚eĹ›0 swĂłj najlepszy czas rzeczywisty i liczbÄ™ noĹĽy. Gratulacje!", + "Hem toplam zamanını hem de bıçak sayını geliĹźtirdin. Tebrikler!", + "Zlepšil jsi jak svĹŻj ÄŤas, tak poÄŤet nožů. Gratulujeme!", + "Đ’Ń‹ ŃĐ»ŃчŃили резŃльтаты по Ń€ĐµĐ°Đ»ŃŚĐ˝ĐľĐĽŃ Đ˛Ń€ĐµĐĽĐµĐ˝Đ¸ и количеŃŃ‚Đ˛Ń Đ˝ĐľĐ¶ĐµĐą. Поздравляем!", + "Du hast sowohl weniger Zeit sowie Messer als zuvor benutzt. GlĂĽckwunsch!", + }}, + {0x996d58ad, { // "Could not create an image of that size." + "Nie da siÄ™ stworzyć obrazu tej wielkoĹ›ci.", +/*MISSING*/ "Could not create an image of that size.", + "Obrázek tĂ©to velikosti nebylo moĹľnĂ© vytvoĹ™it.", + "Невозможно Ńоздать изображение такого размера.", + "Konnte ein Bild dieser Größe nicht erzeugen.", + }}, + {0x9972c6a9, { // "PICK" + "TEN", +/*MISSING*/ "PICK", + "VYBRAT", + "Đ’Đ«Đ‘ĐĐ ĐĐ™", +/*MISSING*/ "PICK", + }}, + {0x99887770, { // "create a baby tortoise" + "stwĂłrz żółwika", +/*MISSING*/ "create a baby tortoise", + "vytvoĹ™ ĹľelviÄŤku", + "Ńоздай черепаŃĐşŃ", +/*MISSING*/ "create a baby tortoise", + }}, + {0x9990ffba, { // "You command %the1!" + "%1 przyjmuje TwĂłj rozkaz.", +/*MISSING*/ "You command %the1!", + "%1 pĹ™ijĂ­má tvĹŻj rozkaz.", + "Đ’Ń‹ ĐľŃедлали %a1!.", + "Du befehligst %den1 %1!", + }}, + {0x99efd678, { // "switch ghost timer" + "przestaw czaso-duchy", +/*MISSING*/ "switch ghost timer", + "pĹ™epni ÄŤasovĂ© duchy", + "переключить таймер призраков", + "Geister-Zähler umschalten", + }}, + {0x9a327390, { // "unassign a key" + "odwiÄ…ĹĽ klawisz", + "bir tuĹź atamasını iptal et", + "zruš klávesu", + "отменить", + "Taste entbinden", + }}, + {0x9a357317, { // "Return to the normal game" + "PowrĂłt do normalnej gry", +/*MISSING*/ "Return to the normal game", + "Návrat do normálnĂ­ hry", + "ВернŃŃ‚ŃŚŃŃŹ в обычнŃŃŽ игрŃ", + "Kehre zum normalen Spiel zurĂĽck", + }}, + {0x9aa13108, { // "Kills gained!" + "Zdobyto trupy!", + "LeĹźler kazandınız!", + "ZĂ­ska%l0 jsi zabitĂ© netvory!", + "УбийŃтва полŃчены!", + "Kills erhalten!", + }}, + {0x9ab34e3f, { // "\"I want my revenge. Stun a guard and leave him for me!\"" + "\"ChcÄ™ zemsty. OgĹ‚usz straĹĽnika i mi go zostaw!\"", + "Ä°ntikam istiyorum! Bir muhafızı sersemlet ve onu bana bırak!\"", + "Chci se pomstĂ­t. OmraÄŤ nÄ›jakĂ©ho strážce a nech mi ho!\"", + "ĐŻ Ń…ĐľŃ‡Ń ĐĽŃтить! ОглŃŃи Ńтража и ĐľŃтавь его мне!\"", + "Ich will Rache. Betäube eine Wache und ĂĽberlasse sie mir!\"", + }}, + {0x9ab47466, { // "You can choose one of the several modes" + "MoĹĽesz wybrać jeden z kilku trybĂłw", + "Farklı modlardan birini seçebilirsin.", + "MĹŻĹľeš si vybrat jeden z nÄ›kolika mĂłdĹŻ", + "Đ’Ń‹ можете выбрать один из неŃкольких режимов", + "Du kannst einen der verschiedenen Modi auswählen", + }}, + {0x9ab8eee4, { // "return to the turn-based mode" + "powrĂłt do trybu turowego", + "tur bazlı moda dön", + "vraĹĄ se do mĂłdu na kola", + "вернŃŃ‚ŃŚŃŃŹ в поŃаговый режим", + "ZurĂĽck zum turn based Modus", + }}, + {0x9ab8f250, { // "objects found: %1" + "znalezione przedmioty: %1", + "bulunan eĹźyalar: %1", + "pĹ™edmÄ›tĹŻ nalezeno: %1", + "найдено предметов: %1", + "Objekte gefunden: %1", + }}, + {0x9ac7e8ae, { // "Cannot create temporary matter on a monster!" + "Nie moĹĽna tworzyć tymczasowej materii na potworze!", + "Geçici maddenin ĂĽzerinde bir canavar çıkaramazsın!", + "DoÄŤasnou hmotu nelze vytvoĹ™it na netvorovi!", + "Нельзя Ńоздать временнŃŃŽ материю на монŃтре!", + "Temporäre Materie kann nicht auf einem Monster erzeugt werden!", + }}, + {0x9b2b3f7c, { // "play the game!" + "graj!", + "oyna!", + "hraj!", + "играть!", + "Spielen!", + }}, + {0x9b4277d8, { // "Kills required: %1.\n" + "Wymagani pokonani przeciwnicy: %1.\n", + "Gereken leĹźler: %1 $$$.\n", + "PotĹ™ebuješ zabĂ­t %1 nepřátel.\n", + "УБийŃтв Đ˝Ńжно: %1 $$$.\n", + "Benötigte Kills: %1.\n", + }}, + {0x9b894de7, { // "Curvature" + "Krzywizna", +/*MISSING*/ "Curvature", + "ZakĹ™ivenĂ­", + "Кривизна", +/*MISSING*/ "Curvature", + }}, + {0x9b9260e5, { // "\"Thank you very much for talking, and have a great rest of your day!\"" + "\"DziÄ™kujÄ™ bardzo za rozmowÄ™, ĹĽyczÄ™ wspaniaĹ‚ej reszty dnia!\"", +/*MISSING*/ "\"Thank you very much for talking, and have a great rest of your day!\"", + "\"Moc ti dÄ›kuju za rozhovor a hezkĂ˝ zbytek dne!\"", + "\"БольŃое ŃпаŃибо Đ·Đ° беŃедŃ, Ńдачного дня!\"", + "\"Vielen Dank fĂĽr die Unterhaltung - hab einen schönen Tag!\"", + }}, + {0x9b9bc969, { // "Abandon all hope, the gates of Hell are opened!" + "Porzuć wszelkÄ… nadziejÄ™, bramy PiekĹ‚a sÄ… otwarte!", + "Umutlar tĂĽkendi, Cehennemin kapıları açıldı!", + "Zanech vší nadÄ›je, brány Pekla jsou otevĹ™eny!", + "ĐžŃтавь надеждŃ, врата ĐĐ´Đ° открылиŃŃŚ!", + "Gib jegliche Hoffnung auf, die Pforte der Hölle ist geöffnet!", + }}, + {0x9bbf0d6e, { // "A black gem with white stripes. It is beautiful." + "PiÄ™kny, drogocenny czarny kamieĹ„ z biaĹ‚ymi paskami.", + "Beyaz Ĺźeritli siyah bir mĂĽcevher. Çok gĂĽzel.", + "ÄŚernĂ˝ drahokam s bĂ­lĂ˝mi pásky. Velice krásnĂ˝.", + "Драгоценный чёрный камень Ń Đ±ĐµĐ»Ń‹ĐĽĐ¸ полоŃками.", + "Ein schwarzer Edelstein mit weiĂźen Streifen. Er ist wunderschön.", + }}, + {0x9c0fa751, { // "%The1 moves his finger downwards." + "%1 przesun%Ä…Ĺ‚1 swĂłj palec w dół.", + "%1 parmağını aĹźağı doÄźru hareket ettirdi.", + "%1 pohnu%l1 prstem dolĹŻ.", + "%1 опŃŃтил%E1 Ńвои пальцы.", + "%Der1 %1 bewegt seinen Finger nach unten.", + }}, + {0x9c38236e, { // "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." + "Czarownica z czarem BĹ‚ysku. Bardzo niebezpieczna!\n\nNa szczęście, nie uĹĽyje swojego czaru, jeĹ›li by to zabiĹ‚o jej przyjaciółki.", + "Işık bĂĽyĂĽsĂĽ olan bir cadı. Çok tehlikeli!\n\n Çok şükĂĽr, bĂĽyĂĽsĂĽnĂĽ bĂĽyĂĽsĂĽ arkadaĹźlarını da öldĂĽrecekse hiç kullanmaz. Ama Ĺžeytani Golemi de umursayacak deÄźil tabi.", + "ÄŚarodÄ›jnice s kouzlem Záblesk. Velmi nebezpeÄŤná!\n\nNaštÄ›stĂ­ toto kouzlo nepouĹľije, pokud by to zabilo jejĂ­ přátele. ZlĂ© golemy ale niÄŤit mĹŻĹľe.", + "Ведьма Ń Đ·Đ°ĐşĐ»Đ¸Đ˝Đ°Đ˝Đ¸ĐµĐĽ вŃпыŃки. Очень опаŃна!\n\nĐš ŃчаŃŃ‚ŃŚŃŽ, она никогда не иŃпользŃет заклинание, ели оно Ńбьёт Đ´Ń€Ńгих ведьм. Но големов она может и Ńничтожить.", + "Eine Donnerhexe. Sehr gefährlich!\n\nGlĂĽcklicherweise setzt sie den Zauber nicht ein, wenn dies ihre Freunde gefährden wĂĽrde. Sie kann allerdings böse Golems zerstören.", + }}, + {0x9c5df18c, { // "\n\nOnce you collect 10 Bomberbird Eggs, stepping on a cell with no adjacent mines also reveals the adjacent cells. Collecting even more Eggs will increase the radius. Additionally, collecting 25 Bomberbird Eggs will reveal adjacent cells even in your future games." + "\n\nGdy zdobÄ™dziesz 10 Jaj Bombardiera, ruch na pole bez sÄ…siadujÄ…cych min pokazuje takĹĽe liczby na sÄ…siednich polach; jeszcze wiÄ™cej jaj to wiÄ™kszy promieĹ„. Dodatkowo, zebranie 25 Jaj Bombardiera powoduje pokazywanie sÄ…siednich pĂłl nawet w kolejnych grach.", +/*MISSING*/ "\n\nOnce you collect 10 Bomberbird Eggs, stepping on a cell with no adjacent mines also reveals the adjacent cells. Collecting even more Eggs will increase the radius. Additionally, collecting 25 Bomberbird Eggs will reveal adjacent cells even in your future games.", + "\n\nJakmile zĂ­skáš 10 Vajec BombarďákĹŻ, odhalĂ­ vstup na polĂ­ÄŤko bez sousednĂ­ch min i všechna sousednĂ­ polĂ­ÄŤka. SebránĂ­m ještÄ› vÄ›tšího poÄŤtu Vajec, se rozsah odhalovánĂ­ zvyšuje. Pokud sebereš 25 Vajec BombarďákĹŻ, budou se navĂ­c ve všech dalších hrách sousednĂ­ polĂ­ÄŤka odhalovat automaticky.", + "\n\nĐ•Ńли вы Ńобрали 10 яиц Бомбардира, наŃŃ‚Ńпая на клеткŃ, вы полŃчаете информацию обо вŃех ŃĐľŃедних клетках; Ńобирая больŃе яиц вы Ńвеличиваете радиŃŃ ĐľĐ±Đ·ĐľŃ€Đ°. Также, еŃли Ńобрать 25 яиц Бомбардира, Ń‚Đľ во вŃех ŃледŃющих играх вы бŃдете автоматичеŃки полŃчать информацию Đľ ŃĐľŃедних клетках.", + "\n\nSobald du 10 Bombenvogeleier gesammelt hast, werden beim Betreten jeder Zelle, die nicht an eine Miene grenzt, auch alle Nachbarzellen aufgedeckt. Sammeln von noch mehr Eiern vergrößert den Radius. Das Sammeln von 25 Bombenvogeleiern schaltet sogar das Aufdecken von Nachbarzellen in zukĂĽnftigen Spielen frei.", + }}, + {0x9ca1dbd1, { // "cross display mode" + "tryb pokazywania osi", + "yıldız görĂĽnĂĽmĂĽ", + "mĂłd zobrazovánĂ­ os", + "режим показа ĐľŃей", + "Anzeigemodus (Kreuz)", + }}, + {0x9ce514f1, { // "ASCII" + "ASCII", + "ASCII", + "ASCII", + "ASCII", + "ASCII", + }}, + {0x9d168012, { // "%The1 is crushed!" + "%1 zosta%Ĺ‚1 przygniecion%ya1!", + "%1 ezildi!", + "Brána rozdrtila %a1!", + "%1 разрŃŃаетŃŃŹ", + "%Der1 wurde zerquetscht!", + }}, + {0x9d2b039f, { // "These huge monsters normally live below the sand, but your movements have disturbed them. They are too big to be slain with your weapons, but you can defeat them by making them unable to move. This also produces some Spice. They move two times slower than you." + "Te wielkie stworzenia normalnie ĹĽyjÄ… pod pustynnym piaskiem, ale Twoja obecność na pustyni spowodowaĹ‚a ich wyjĹ›cie na powierzchniÄ™. SÄ… za duĹĽe, byĹ› m%ĂłgĹ‚0 je zaatakować swojÄ… broniÄ…, ale zginÄ…, jeĹ›li nie bÄ™dÄ… mogĹ‚y siÄ™ ruszyć -- to produkuje takĹĽe trochÄ™ Przyprawy. Czerwie ruszajÄ… siÄ™ 2 razy wolniej od Ciebie.", + "Normalde bu canavarlar yer altında yaĹźarlar ama hareketlerin onları rahatsız etti. Bıçağınla kesilmek için fazla iriler, ama onları hareket edemez hale getirerek yenebilirsin. Bu biraz Baharat da ĂĽretir. Senden iki kat yavaĹź hareket ederler.", + "Tito obrovštĂ­ netvoĹ™i normálnÄ› ĹľijĂ­ pod pĂ­skem, ale tvĂ© pohyby je vyrušily. Jsou tak velcĂ­, Ĺľe je nemĹŻĹľeš zabĂ­t svĂ˝mi zbranÄ›mi, ale mĹŻĹľeš je porazit tĂ­m, Ĺľe jim znemoĹľníš pohyb. TĂ­m takĂ© vznikne nÄ›jakĂ© KoĹ™enĂ­. PĂ­seÄŤnĂ­ ÄŤervi se pohybujĂ­ dvakrát pomaleji neĹľ ty.", + "Эти огромные монŃтры обычно живŃŃ‚ под огромным Ńлоем пеŃка, но Đ’Ń‹ их потревожили. Они ŃлиŃком велики, чтобы их можно было Ńбить Đ’Đ°Ńим орŃжием, но они Ńмирают, еŃли не могŃŃ‚ двигатьŃŃŹ. Также они производят пряноŃти. Они движŃŃ‚ŃŃŹ в 2 раза медленнее Đ’Đ°Ń.", + "Diese riesigen Monster leben normalerweise unter dem Sand, aber deine Bewegungen haben sie geweckt. Sie sind zu groĂź, als dass du sie mit deinen Waffen erschlagen könntest. Du kannst sie besiegen, indem du dafĂĽr sorgst, dass sie sich nicht mehr bewegen können. Dies produziert auch etwas Spice. Sie bewegen sich halb so schnell wie du.", + }}, + {0x9d2f19ca, { // "-- use the Android menu instead" + "zapiszÄ… -- uĹĽyj menu Androida", +/*MISSING*/ "-- use the Android menu instead", + "-- pouĹľij menu Android", + "иŃпользŃйте меню Đндроида", + "-- verwende dafĂĽr das Android-MenĂĽ", + }}, + {0x9d7dc7ad, { // "Conformal square model" + "Konforemny kwadrat", +/*MISSING*/ "Conformal square model", + "KonformálnĂ­ ÄŤtvercovĂ˝ model", + "Конформный квадрат", +/*MISSING*/ "Conformal square model", + }}, + {0x9e0f4028, { // "(in the MENU). You can reduce the sight range, this should make the animations smoother." + "(w MENU). MoĹĽesz zmniejszyć zasiÄ™g wzroku, co powinno poprawić pĹ‚ynność animacji.", + "(MENĂśDE). GörĂĽĹź aralığını seçebilirsin. Bu animasyonları daha akıcı hâle getirebilir.", + "(v MENU). MĹŻĹľete zredukovat dohled, coĹľ by mÄ›lo udÄ›lat animace hladšími.", + "(в МЕНЮ). Đ’Ń‹ можете ŃменьŃить радиŃŃ ĐľĐ±Đ·ĐľŃ€Đ°, чтобы Ńделать анимацию более гладкой.", + "(im MENĂś). Du kannst die Sichtweite reduzieren, das sollte die Animationen glatter machen.", + }}, + {0x9e7df098, { // "This is your first victory!" + "To Twoje pierwsze zwyciÄ™stwo!", + "Bu senin ilk zaferin!", + "Toto je tvĂ© prvnĂ­ vĂ­tÄ›zstvĂ­!", + "Đ­Ń‚Đľ ваŃĐ° первая победа!", + "Dies ist dein erster Sieg!", + }}, + {0x9e8f56ee, { // "You can use this ladder to climb the Tower." + "UĹĽyj tej drabiny, by wspiąć siÄ™ na WieĹĽÄ™.", + "Kuleye çıkmak için bu merdiveni kullanabilirsin.", + "Po tomto Ĺľebříku mĹŻĹľeš lĂ©zt na Věž.", + "ĐŃпользŃйти леŃтницŃ, чтобы забратьŃŃŹ на Đ‘Đ°Ńню.", + "Du kannst diese Leiter nutzen um den Turm zu erklimmen.", + }}, + {0x9ee91778, { // "move down-right" + "ruch w dół-prawo", +/*MISSING*/ "move down-right", + "pohyb doprava dolĹŻ", + "ход вниз-вправо", +/*MISSING*/ "move down-right", + }}, + {0x9f821b2e, { // "Your power is drained by %the1!" + "Twoja moc jest wyssana przez %a1!", +/*MISSING*/ "Your power is drained by %the1!", + "%1 vysává tvou sĂ­lu!", + "%1 ŃменьŃил Đ’Đ°ŃŃ ĐĽĐľŃ‰ŃŚ!", + "Deine Kraft wird von %dem1 %d1 ausgesaugt!", + }}, + {0x9fcff1d6, { // "This orb lets you instantly move to a safe faraway location. Knowing the nature of this strange world, you doubt that you will ever find the way back...\n\nYour game will be saved if you quit the game while the Orb of Safety is still powered.\n\nTechnical note: as it is virtually impossible to return, this Orb recycles memory used for the world so far (even if you do not use it to save the game). " + "Ta sfera pozwala Ci natychmiast przenieść siÄ™ do bezpiecznego miejsca. ZnajÄ…c naturÄ™ tego Ĺ›wiata, zapewne nigdy nie trafisz z powrotem...\n\nJeĹ›li wyjdziesz z gry podczas gdy Sfera BezpieczeĹ„stwa wciÄ…ĹĽ ma moc, gra zostanie zapisana.\n\nUwaga techniczna: nawet jeĹ›li nie zapiszesz gry, ta sfera czyĹ›ci caĹ‚Ä… pamięć o Ĺ›wiecie gry. ", + "Bu kĂĽre seni gĂĽvenli bir uzak yere ışınlar. Bu dĂĽnyanın garip yapısını düşünĂĽnce geri dönĂĽp dönemeyeceÄźin belli deÄźil...\n\nEÄźer GĂĽvenlik KĂĽresi hâlâ açıkken oyundan çıkarsan oyunun kaydedilecek.\n\nTeknik not: geri dönmek aslında tamamen imkânsız olduÄźundan, bu KĂĽre sadece Ĺźimdiye kadar bu dĂĽnya için kullanılan hafızayı kullanır. (onu ounu kaydetmek için kullanmasanız da.) ", + "Tato sfĂ©ra ti umoĹľĹuje se okamĹľitÄ› pĹ™emĂ­stit na bezpeÄŤnĂ©, vzdálenĂ© mĂ­sto. Vzhledem k povaze tohoto podivnĂ©ho svÄ›ta pochybuješ, Ĺľe ještÄ› nÄ›kdy najdeš cestu zpátky...\n\nPokud pĹ™ed vypršenĂ­m efektu SfĂ©ry bezpeÄŤnosti ukončíš hru, uloží se.\n\nTechnická poznámka: vzhledem k tomu, Ĺľe návrat do jakĂ©hokoli jiĹľ navštĂ­venĂ©ho mĂ­sta je stejnÄ› prakticky nemoĹľnĂ˝, pouĹľitĂ­ SfĂ©ry bezpeÄŤnosti uvolnĂ­ veškerou paměť, kterou hernĂ­ svÄ›t aĹľ dosud využíval, a to i tehdy, pokud ji nepouĹľiješ k uloĹľenĂ­ hry.", + "Đ­Ń‚Đ° Ńфера перемещает Đ’Đ°Ń Đ˛ далёкое безопаŃное меŃŃ‚Đľ, откŃĐ´Đ° Đ’Ń‹ не вернётеŃŃŚ назад...\n\nПока Ńфера активна, при выходе из игры Đ’Đ°ŃĐ° игра бŃдет Ńохранена.\n\nТехничеŃки, Ńтарый мир проŃŃ‚Đľ ŃдаляетŃŃŹ. ", + "Dieser Orb versetzt dich augenblicklich an einen weit entfernten, sicheren Ort. In Anbetracht der Natur dieser Welt bezweifelst du, dass du je einen Weg zurĂĽckfindest...\n\nDein Spiel wird gespeichert wenn du es beendest während der Orb der Geborgenheit noch Kraft besitzt.\n\nTechnische Anmerkung: Da es wirklich unmöglich ist zurĂĽckzukehren, gibt dieser Orb den Speicher, den die Welt bis dahin belegt hat, frei (selbst wenn du das Spiel nicht speicherst.)", + }}, + {0x9fe084e4, { // "You cannot attack %the1 directly!" + "Nie moĹĽesz atakować %a1 wprost!", + "%a1 doÄźrudan öldĂĽremezsiniz!", + "Na %a1 nemĹŻĹľeš ĂştoÄŤit přímo!", + "Đ’Ń‹ не можете напаŃŃ‚ŃŚ на %a1!", + "Du kannst %den1 %a1 nicht direkt angreifen!", + }}, + {0x9ff28df6, { // "manual" + "rÄ™czny", + "kılavuz", + "ruÄŤnĂ­", + "Ń€Ńчной", + "manuell", + }}, + {0xa0360507, { // "Friendly ghosts are friendly beings who can go through any obstacles. However, unlike most friends, they tend to fly away from you." + "Przyjazne duchy mogÄ… przechodzić przez wszelkie przeszkody. Jednak, w przeciwieĹ„stwie do wiÄ™kszoĹ›ci pozostaĹ‚ych przyjaciół, majÄ… zwyczaj odlatywać od Ciebie.", +/*MISSING*/ "Friendly ghosts are friendly beings who can go through any obstacles. However, unlike most friends, they tend to fly away from you.", + "PřátelštĂ­ duchovĂ© jsou přátelskĂ© bytosti, kteří dokážou procházet jakĂ˝mikoli pĹ™ekážkami. Na rozdĂ­l od vÄ›tšiny tvĂ˝ch kamarádĹŻ ale majĂ­ tendenci lĂ©tat pryÄŤ od tebe.", + "ДрŃжеŃтвенные Đ´Ńхи могŃŃ‚ проходить Ńквозь любые препятŃтвия. Đ’ отличие от Đ´Ń€Ńгих Ńоюзников, Ńклонны Ńлетать от Đ’Đ°Ń.", + "Freundliche Geister sind freundliche Wesen, die sich durch alle Hindernisse bewegen können. Aber anders als deine meisten Freunde neigen sie dazu von dir wegzufliegen.", + }}, + {0xa0df3717, { // "expansion" + "rozszerzanie", +/*MISSING*/ "expansion", + "rozšířenĂ­", + "раŃŃирение", +/*MISSING*/ "expansion", + }}, + {0xa0ecd1c7, { // "and not in a chaos without norms.\"" + "a nie w chaosie bez reguĹ‚.\"", +/*MISSING*/ "and not in a chaos without norms.\"", + "nikoli v chaosu, kde neplatĂ­ žádnĂ© normy.\"", + "Đ° не в Ń…Đ°ĐľŃе без правил.\"", +/*MISSING*/ "and not in a chaos without norms.\"", + }}, + {0xa11852fa, { // "\nYou can never target cells which are adjacent to the player character, or ones out of the sight range." + "\nNie moĹĽesz celować w pola obok postaci, ani poza zasiÄ™giem wzroku.", +/*MISSING*/ "\nYou can never target cells which are adjacent to the player character, or ones out of the sight range.", + "\nPolĂ­ÄŤka, která sousedĂ­ s vaší postavou nebo jsou mimo váš dohled, nelze nikdy zacĂ­lit.", + "\nНельзя выбрать в качеŃтве цели ŃĐľŃедние Ń Đ˛Đ°ĐĽĐ¸ клетки или те, которые вы не видите.", + "\nDu kannst niemals auf Zellen, die der Spielfigur benachbart oder die nicht in Sichtweite sind, zielen.", + }}, + {0xa16a5b13, { // "p = paint" + "p = kolory", + "p = boya", + "p = obarvit", + "p = раŃкраŃка", + "p = Farbe", + }}, + {0xa16ba0c3, { // "\"I am lost...\"" + "\"ZgubiĹ‚em siÄ™...\"", + "Kayboldum...", + "\"I am lost...\"", + "\"ĐŻ потерялŃŃŹ...\"", + "\"Ich bin verloren...\"", + }}, + {0xa1aeb8a7, { // "You are killed by %the1!" + "Zabi%Ĺ‚1 CiÄ™ %1!", + "%1 tarafından öldĂĽrĂĽldĂĽn!", + "Zabi%l1 tÄ› %1!", + "Đ’Đ°Ń Ńбил %1!", + "%Der1 %1 hat dich getötet!", + }}, + {0xa1cb3d38, { // ", m - mode: shoot'em up" + "m - tryb strzelanki", + "m - SHMUP modu", + "m - mĂłd stříleÄŤky", + "m - режим Ńтрельбы", + "m - Modus: Ballern", + }}, + {0xa1fd06c1, { // "%The1 scares %the2!" + "%1 wystraszy%Ĺ‚1 %a2!", + "%1 %a2 korkuttu!", + "%1 vydÄ›si%l1 %a2!", + "%1 ĐżŃгает %a2!", + "%Der1 %1 erschreckt %den2 %a2!", + }}, + {0xa2298e28, { // "player 7 go" + "gracz 7 idĹş", +/*MISSING*/ "player 7 go", + "hráč 7 pohyb", + "игрок 7 идёт", + "Spieler 7 los", + }}, + {0xa25132c0, { // "Welcome to Spherogue!" + "Witaj w Sferogue!", +/*MISSING*/ "Welcome to Spherogue!", + "VĂ­tej ve SfĂ©rogue!", + "Добро пожаловать в Spherogue!", +/*MISSING*/ "Welcome to Spherogue!", + }}, + {0xa257a57d, { // "Press 'c' for credits." + "NaciĹ›nij 'c' by obejrzeć autorĂłw", + "Yapımcılar için 'c'ye bas.", + "Stiskni 'c' pro zobrazenĂ­ autorĹŻ", + "Нажмите 'c', чтобы Ńзнать авторов.", + "DrĂĽcke 'c' fĂĽr die Credits", + }}, + {0xa267f7d9, { // "\"By now, you should have your own formula, you know?\"" + "\"Wiesz co, m%ĂłgĹ‚0byĹ› juĹĽ mieć swĂłj wĹ‚asny wzĂłr!\"", + "\"Ĺžimdiye kadar kendi formĂĽlĂĽnĂĽ bulmalıydın deÄźil mi?\"", + "\"TeÄŹ uĹľ bys mÄ›%l0 mĂ­t svĹŻj vlastnĂ­ vzorec, ne?\"", + "\"ĐˇĐµĐąŃ‡Đ°Ń Ń Đ’Đ°Ń Đ´ĐľĐ»Đ¶Đ˝Đ° быть Ńвоя формŃла!\"", + "\"Mittlerweile solltest du deine eigene Formel haben weiĂźt du?\"", + }}, + {0xa2b6bab2, { // "Trees in this forest can be chopped down. Big trees take two turns to chop down." + "Drzewa w tym lesie moĹĽna Ĺ›cinać. ĹšciÄ™cie duĹĽego drzewa zajmuje dwie kolejki.", + "Bu ormandaki aÄźaçlar kesilebilir. BĂĽyĂĽk aÄźaçların kesilmesi iki tur alır.", + "Stromy v tomto lese je moĹľnĂ© kácet. KácenĂ­ velkĂ˝ch stromĹŻ trvá dvÄ› kola.", + "Đ’Ń‹ можете Ń€Ńбить деревья в леŃŃ. БольŃие деревья Ń€ŃбятŃŃŹ Đ·Đ° два хода.", + "Bäume in diesem Wald können gefällt werden. GroĂźe Bäume zu fällen dauert zwei ZĂĽge.", + }}, + {0xa2dc468c, { // "Aww, poor %1... where is your family?" + "Auu, biedny %1... gdzie Twoja rodzina?", +/*MISSING*/ "Aww, poor %1... where is your family?", + "Ă, chudáčku Ĺ˝elviÄŤko... kdepak máš rodinu?", + "Ох, бедный %1... Где его Ńемья?", + "Oh, du arme %1... wo ist deine Familie?", + }}, + {0xa2ea7202, { // "%The1 squeaks excitedly!" + "%1 siÄ™ ekscytuje!", + "%1 heyecanla ciyaklıyor!", + "%1 vzrušenÄ› pištĂ­!", + "%1 пищит азартно!", + "%Die1 %1 piepst aufgeregt!", + }}, + {0xa2eb0db6, { // "Variants of %the1 are always available in the Random Pattern Mode." + "Warianty krainy %1 sÄ… zawsze dostÄ™pne w trybie losowych wzorkĂłw.", + "%1 çeĹźitlemeleri Rastgele Doku Modunda her zaman mevcuttur.", + "Varianty kraje '%1' jsou vĹľdy k dispozici v MĂłdu náhodnĂ˝ch vzorĹŻ.", + "Варианты земли %1 вŃегда Đ´ĐľŃŃ‚Ńпны в режиме ŃĐ»Ńчайного Ńзора.", + "Varianten der %1 sind im Zufallsmuster-Modus verfĂĽgbar.", + }}, + {0xa367f3a9, { // "The hyperbolic pirates have no use for treasure maps. However, they have found out that a compass points to the center of the island. So they just go as far towards the center as they can, and hide their treasure there." + "Mapy sÄ… bezuĹĽyteczne dla hiperbolicznych piratĂłw, ale zauwaĹĽyli oni, ĹĽe kompas zawsze wskazuje w kierunku Ĺ›rodka wyspy. Zatem piraci po prostu idÄ… tak daleko w stronÄ™ Ĺ›rodka, jak mogÄ… i tam chowajÄ… swoje skarby.", + "Hazine haritalarının hiperbolik korsanlar için bir deÄźeri yok. Ancak, adanın ortasını gösteren bir pusula keĹźfettiler. Böylece, ortaya doÄźru olabildiÄźince ilerler ve hazinelerini orada saklarlar.", + "Mapy jsou hyperbolickĂ˝m pirátĹŻm k niÄŤemu. Zjistili ale, Ĺľe kompas vĹľdy ukazuje do stĹ™edu ostrova. A tak se prostÄ› vydávajĂ­ tak daleko do stĹ™edu, jak to jen jde, a tam ukrĂ˝vajĂ­ svĂ© poklady.", + "Карты беŃполезны для гиперболичеŃких пиратов, но они знают, что ĐşĐľĐĽĐżĐ°Ń Đ˛Ńегда показывает в центр ĐľŃтрова. Так что они проŃŃ‚Đľ идŃŃ‚ как можно дальŃе Đş Ń†ĐµĐ˝Ń‚Ń€Ń ĐľŃтрова и прячŃŃ‚ Ń‚Đ°ĐĽ Ńокровища.", + "Die hyperbolischen Piraten haben fĂĽr Schatzkarten keinen Gebrauch. Jedoch haben sie erfahren, dass ein Kompass in die Mitte einer Insel zeigt. Also gehen sie so weit dort hin, wie sie können, und verstecken dort ihre Schätze.", + }}, + {0xa3c20464, { // "Hypersian Rug model" + "Model Hiperskiego Dywanu", +/*MISSING*/ "Hypersian Rug model", + "Model hyperskĂ©ho koberce", + "Модель ГиперŃидŃкого ковра", +/*MISSING*/ "Hypersian Rug model", + }}, + {0xa3ced252, { // "movement color" + "kolor ruchu", +/*MISSING*/ "movement color", + "barva pohybu", + "цвет хода", + "Richtungsmarker-Farbe", + }}, + {0xa3de7c50, { // "Escher/3D" + "Escher/3D", +/*MISSING*/ "Escher/3D", + "Escher/3D", + "Đ­Ńер/3D", +/*MISSING*/ "Escher/3D", + }}, + {0xa3f46380, { // "Activated the Hyperstone Quest!" + "AktywowaĹ‚eĹ› MisjÄ™ HiperkamieĹ„!", + "AĹźkıntaĹź Görevini etkinleĹźtirdin!", + "Aktivoval jsi HyperkamovĂ˝ Ăşkol!", + "Đктивирована миŃŃия Гиперкамней!", + "Hyperstein-Herausforderung aktiviert!", + }}, + {0xa3f7444f, { // "You cannot target that close!" + "Nie moĹĽesz celować tak blisko!", + "O kadar yakını hedefleyemezsin!", + "NemĹŻĹľeš zamĂ­Ĺ™it tak blĂ­zko!", + "Đ’Ń‹ не можете выбрать цель Ń‚Đ°Đş близко!", + "Zu nah!", + }}, + {0xa499a90d, { // "Your brain is steaming." + "TwĂłj mĂłzg paruje.", + "Beynin kaynıyor.", + "Ze tvĂ©ho mozku se kouří.", + "Đ’Đ°Ń ĐĽĐľĐ·Đł дымитŃŃŹ.", + "Dein Hirn dampft!", + }}, + {0xa4a3cb42, { // "These Cultists can push the statues, just like you." + "Ci kultyĹ›ci mogÄ… przesuwać pomniki tak samo jak Ty.", + "Bu MĂĽritler putları tıpkı senin gibi itebilir.", + "Tito kultistĂ© dokážou strkat sochy, stejnÄ› jako ty.", + "Эти ĐşŃльтиŃŃ‚Ń‹ могŃŃ‚ двигать ŃŃ‚Đ°Ń‚Ńи,как и Đ’Ń‹.", + "Diese Kultanhänger können die Statuen schieben, genau wie du.", + }}, + {0xa51aefb4, { // "You collect %the1. (%2)" + "Znalaz%Ĺ‚eĹ›0 %a1. (%2)", +/*MISSING*/ "You collect %the1. (%2)", + "ZĂ­ska%l0 jsi %a1. (%2)", + "Đ’Ń‹ Ńобрали %a1. (%2)", + "Du sammelst %den1 %a1. (%2)", + }}, + {0xa52c28a0, { // "This land contains high rock formations. Most of the valley is at level 0, while items are found at level 3. It is impossible to gain two or more levels, or to lose three levels, in a single move, (attacks are possible at any difference, though). Kill Red Trolls and Rock Snakes to make a cell higher." + "W tej krainie sÄ… wysokie formacje skalne. WiÄ™kszość doliny jest na poziomie 0, a przedmioty moĹĽna znaleźć na poziomie 3. NiemoĹĽliwe jest wzniesienie siÄ™ na dwa lub wiÄ™cej poziomĂłw lub obniĹĽenie siÄ™ o trzy poziomy w jednym ruchu (ale atakować moĹĽna przy kaĹĽdej różnicy poziomĂłw). Zabij Czerwonego Trolla albo Skalnego Węża, by podnieść poziom pola.", + "Bu diyar kaya oluĹźumları barındırır. Vadinin çoÄźu yĂĽkseklik 0'dadır, eĹźyalar ise yĂĽkseklik 3'te bulunabilir. Tek hamlede iki veya daha fazla yĂĽkseklik kazanamaz yahut üç veya daha fazla yĂĽkseklik kazanamazsın. (ama yĂĽkseklikler arası saldırılar mĂĽmkĂĽn). Kızıl Trolleri ve Kaya Yılanlarını öldĂĽrerek bir hĂĽcreyi yĂĽkseltebilirsin. ", + "V tomto kraji se nacházejĂ­ vysokĂ© skalnĂ­ Ăştvary. VÄ›tšina ĂşdolĂ­ je na Ăşrovni 0, ale pĹ™edmÄ›ty se nacházejĂ­ pouze na Ăşrovni 3. JednĂ­m pohybem se mĹŻĹľete dostat maximálnÄ› o jednu ĂşroveĹ výš nebo o dvÄ› ĂşrovnÄ› nĂ­Ĺľ, ale ĂştoÄŤit je moĹľnĂ© bez ohledu na výškovĂ˝ rozdĂ­l. ZabĂ­jenĂ­m ÄŚervenĂ˝ch trollĹŻ a SkalnĂ­ch hadĹŻ mĹŻĹľete pole posouvat nahoru.", + "Đ­Ń‚Đ° земля Ńодержт ŃчаŃтки выŃоких Ńкал. БольŃĐ°ŃŹ чаŃŃ‚ŃŚ долины находитŃŃŹ на Ńровне 0, Đ° вŃе предметы лежат на Ńровне 3. Невозможно поднятьŃŃŹ на 2 или больŃе Ńровня или опŃŃтитьŃŃŹ на 3 Ńровня Đ·Đ° один ход, хотя атаковать можно вŃегда. Убейте КраŃного тролля или КаменнŃŃŽ змею, чтобы Ńделать ĐşĐ»ĐµŃ‚ĐşŃ Đ˛Ń‹Ńе.", + "Dieses Land enthält hohe Felsformationen. Der GroĂźteil des Tals ist auf Ebene 0, aber die meisten Gegenstände finden sich auf Ebene 3 (III). Es ist unmöglich mehr als eine Ebene aufzusteigen sowie alle 3 in einem Zug zu verlieren. Angriffe sind auf jeder Höhe möglich. Töte Rote Trolle und Felsschlangen, um eine Zelle zu erhöhen.", + }}, + {0xa58e0943, { // "Welcome to the Yendor Challenge %1!" + "Witaj w Misji Yendor %1!", +/*MISSING*/ "Welcome to the Yendor Challenge %1!", + "VĂ­tej v YendorskĂ© misi %1!", + "Добро пожаловать в миŃŃию Йендора %1!", +/*MISSING*/ "Welcome to the Yendor Challenge %1!", + }}, + {0xa5b5aaa6, { // "People worshipping Cthulhu. They are very dangerous." + "Wyznawcy Cthulhu, bardzo niebiezpieczni.", + "Cthulhu'ya tapan insanlar. Çok tehlikeliler.", + "LidĂ© uctĂ­vajĂ­cĂ­ Cthulhua. Jsou velmi nebezpeÄŤnĂ­.", + "Люди, поклоняющиеŃŃŹ КтŃлхŃ. Они довольно опаŃны.", + "Verehrer Cthulhus. Sie sind sehr gefährlich.", + }}, + {0xa5d1bc77, { // "Branches here could bear your weight easily." + "Te gaĹ‚Ä™zie z Ĺ‚atwoĹ›ciÄ… udĹşwignÄ… TwĂłj ciężar.", +/*MISSING*/ "Branches here could bear your weight easily.", + "Tyhle vÄ›tve by snadno unesly tvou váhu.", + "Эти ветви легко выдержат Đ˛Đ°Ń Đ˛ĐµŃ.", + "Die Ă„ste hier tragen dein Gewicht mit Leichtigkeit.", + }}, + {0xa605f9d2, { // "\nSpecial conduct failed:\n" + "\nDodatkowe wyzwanie (przegrane):", +/*MISSING*/ "\nSpecial conduct failed:\n", + "\nZvláštnĂ­ vĂ˝zva (neĂşspěšná):", + "\nДополнительное ŃŃловие (нарŃŃено):", +/*MISSING*/ "\nSpecial conduct failed:\n", + }}, + {0xa61bdb9e, { // "You are playing %the1 in the Pure Tactics mode." + "Grasz %a1 w trybie taktycznym.", +/*MISSING*/ "You are playing %the1 in the Pure Tactics mode.", + "PrávÄ› hraješ %a1 v ÄŤistÄ› taktickĂ©m mĂłdu.", + "Đ’Ń‹ играете в %a1 в ТактичеŃком режиме.", +/*MISSING*/ "You are playing %the1 in the Pure Tactics mode.", + }}, + {0xa63c8d96, { // "These warriors of the Forest wield exotic weapons called hedgehog blades. These blades protect them from a frontal attack, but they still can be 'stabbed' easily by moving from one place next to them to another." + "Ci wojownicy z Puszczy walczÄ… egzotycznÄ… broniÄ…, JeĹĽowym Ostrzem. Ostrza te broniÄ… przed atakiem z frontu, ale za to moĹĽesz ich Ĺ‚atwo 'dĹşgnąć' poprzez przejĹ›cie z jednego pola sÄ…siadujÄ…cego z nimi na inne.", + "Ormandaki bu savaşçılar, adına kirpi bıçağı denen ilginç bıçaklar taşıyorlar. Bu bıçaklar onları önden gelen saldırılardan korur, ama hâlâ yanlarından geçerek öldĂĽrĂĽlebilirler.", + "Tito váleÄŤnĂ­ci z Hvozdu vládnou exotickĂ˝mi zbranÄ›mi zvanĂ˝mi 'ježčí ÄŤepele'. Tyto ÄŤepele je chránĂ­ proti Ăştoku zepĹ™edu, ale mĹŻĹľeš je snadno 'probodnout' tĂ­m, Ĺľe se pohneš z jednoho polĂ­ÄŤka, kterĂ© s nimi sousedĂ­, na druhĂ©.", + "Эти леŃные воители воорŃжены экзотичеŃким орŃжием, называемым ежиным клинком. Клинки защищают их от прямых Đ°Ń‚Đ°Đş, но они могŃŃ‚ быть 'заколоты', Đ´ĐľŃтаточно перейти Ń ĐľĐ´Đ˝ĐľĐą клетки рядом Ń Đ˝ĐĽ на Đ´Ń€ŃĐłŃŃŽ.", + "Diese Krieger des Waldes besitzen exotische Waffen, die Igelklingen. Diese schĂĽtzen sie vor frontalen Angriffen - aber sie können dennoch 'erstochen' werden indem man sich direkt neben ihnen von einer Zelle auf eine andere bewegt.", + }}, + {0xa690f718, { // "%The1 shows you a finger." + "%1 pokaza%Ĺ‚1 Ci palec.", + "%1 sana parmak hareketi yaptı.", + "%1 ti ukáz%l1 jeden prst.", + "%1 показал%E1 Đ’Đ°ĐĽ палец.", + "%Der1 %1 zeigt dir einen Finger.", + }}, + {0xa6b27a7b, { // "You can right click any element to get more information about it.\n\n" + "Kliknij obiekt prawym przyciskiem myszy, by zobaczyć wiÄ™cej informacji na jego temat.\n\n", + "Herhangi bir Ĺźeye saÄź tıklayarak hakkında daha çok bilgiye ulaĹźabilirsin.\n\n", + "Informace o jakĂ©mkoli hernĂ­m prvku mĹŻĹľeš zobrazit tak, Ĺľe na nÄ›j klikneš pravĂ˝m tlaÄŤĂ­tkem myši.\n\n", + "Кликните правой кнопкой ĐĽŃ‹Ńи, чтобы Ńзнать больŃе.\n\n", + "Du kannst auf alles rechtsklicken, um Informationen darĂĽber zu erhalten.\n\n", + }}, + {0xa6ec396d, { // "Normally, the power of most Orbs slowly fades away, even when you are not actively using them. This Orb prevents this.\n\nWhen you have the Orb of Time, Orbs which are not active won't lose their power. Orbs are considered active if they have a continuous power which has actually affected something in the last turn.\n\nOrbs of Shielding remain active after being activated (even if you are no longer attacked), and Orbs of Time have a bigger cap inside their native Caribbean than outside." + "Zazwyczaj moc Sfer powoli wygasa, nawet gdy ich nie uĹĽywasz aktywnie. Ta Sfera temu zapobiega.\n\nJeĹ›li masz SferÄ™ Czasu, nieaktywne sfery nie bÄ™dÄ… traciĹ‚y mocy. Sfery sÄ… uwaĹĽane za aktywne, jeĹ›li majÄ… ciÄ…gĹ‚y efekt, ktĂłry rzeczywiĹ›cie na coĹ› wpĹ‚ynÄ…Ĺ‚ w ostatniej turze.\n\nSfery Tarczy pozostajÄ… aktywne po aktywacji (nawet jeĹĽeli nikt wiÄ™cej nie atakuje), a Sfery Czasu majÄ… wiÄ™kszy limit na Karaibach niĹĽ poza nimi.", + "Normalde KĂĽrelerin güçleri ,onları aktif olarak kullanmadığında bile, yavaşça azalır. Bu KĂĽre bunu engeller.\n\nZaman KĂĽresine sahip olduÄźunda aktif olmayan kĂĽreler güçlerini kaybetmez. SĂĽrekli gĂĽcĂĽ olan kĂĽreler eÄźer son turda bir Ĺźey etkiledilerse aktif sayılır.\n\nKalkan KĂĽresi aktifleĹźtirdikten sonra da (saldıraya uÄźramasan bile) aktif kalır. Ayrıca Zaman KĂĽresinin sınırı onların bulunduÄźu Karayiplerde daha fazladır.", + "SĂ­la vÄ›tšiny SfĂ©r se vÄ›tšinou pomalu vytrácĂ­, a to i tehdy, kdyĹľ je aktivnÄ› nepoužíváte. Tato sfĂ©ra tomu bránĂ­.\n\nKdyĹľ máš SfĂ©ru ÄŚasu, nebudou neaktivnĂ­ SfĂ©ry ztrácet sĂ­lu. 'AktivnĂ­ SfĂ©ra' je taková SfĂ©ra, která má stálĂ˝ efekt a která v minulĂ©m kole nÄ›co skuteÄŤnÄ› ovlivnila.\n\nSfĂ©ry Ĺ tĂ­tu zĹŻstávajĂ­ trvale aktivnĂ­, jakmile jednou zablokujĂ­ Ăştok (i kdyĹľ na tebe právÄ› nikdo neĂştoÄŤĂ­ a SfĂ©ry ÄŚasu mohou ve svĂ©m domovskĂ©m Karibiku dosahovat vyšších hodnot sĂ­ly neĹľ mimo nÄ›j.", + "Обычно Ńила Ńфер ŃгаŃает, даже еŃли Đ’Ń‹ не иŃпользŃете их. Сфера Времени препятŃтвŃет этомŃ.\n\nĐ•Ńли Ń Đ’Đ°Ń ĐµŃŃ‚ŃŚ Ńфера Времени, неактивные Ńферы не теряют Ńвою ŃилŃ. Сфера ŃчитаетŃŃŹ активной, еŃли она имеет поŃтоянный эффект, проявивŃийŃŃŹ на поŃледнем ходе.\n\nСфера Щита ŃчитаетŃŃŹ активной вŃегда (даже еŃли Đ’Ń‹ никого не атаковали). Сфера Времени имеет на Карибах больŃий эффект, чем в Đ´Ń€Ńгих меŃŃ‚Đ°Ń….", + "Normalerweise schwindet die Kraft der meisten Orbs, sogar wenn du sie nicht einsetzt. Der Orb der Zeit verhindert dies.\n\nBesitzt du einen, verlieren inaktive Orbs keine Kraft. Orbs zählen als aktiv, wenn sie eine andauernde Kraft besitzen, die im letzten Zug etwas beeinflusst hat.\n\nOrbs der Abschirmung bleiben nach Aktivierung aktiv und Orbs der Zeit halten in der Karibik länger als an anderen Orten.", + }}, + {0xa7088e66, { // " (won!)" + " (wygrane!)", + " (kazandın!)", + " (vĂ­tÄ›zstvĂ­!)", + " (победа!)", + " (Gewonnen!)", + }}, + {0xa7134b44, { // "CONGRATULATIONS!" + "GRATULACJE!", + "TEBRIKLER!", + "GRATULUJEME!", + "ПОЗДРĐВЛЯЕМ!", + "GLĂśCKWUNSCH!", + }}, + {0xa7313705, { // "special thanks to the following people for their bug reports, feature requests, porting, and other help:\n\n%1\n\n" + "SzczegĂłlne podziÄ™kowania dla poniĹĽszych osĂłb za zgĹ‚oszone przez nich bĹ‚Ä™dy, pomysĹ‚y, porty i innÄ… pomoc:\n\n%1\n\n", + "Hata bildirimleri, özellik istekleri, portlama ve diÄźer yardımları için Ĺźu kiĹźilere teĹźekkĂĽrler: %1 \n\n", + "zvláštnĂ­ podÄ›kovánĂ­ následujĂ­cĂ­m lidem za hlášenĂ­ chyb, žádosti o novĂ© funkce, porty a další pomoc:\n\n%1\n\n", + "отдельное ŃпаŃибо ŃледŃющим людям Đ·Đ° багрепорты, предложения и Đ´Ń€ŃĐłŃŃŽ помощь:\n\n%1\n\n", + "Besonderer Dank gebĂĽhrt diesen Leuten fĂĽr ihre Bug Reports, Feature-Anfragen, Ports, und andere Hilfe:\n\n%1\n\n", + }}, + {0xa741c82e, { // "Band model" + "Model wstÄ™gi", +/*MISSING*/ "Band model", + "PásovĂ˝ model", + "Модель ленты", +/*MISSING*/ "Band model", + }}, + {0xa757d525, { // "first joystick position (movement)" + "pozycja pierwszego joysticka (ruch)", +/*MISSING*/ "first joystick position (movement)", + "pozice prvnĂ­ho joysticku (pohyb)", + "положение первого джойŃтика (движение)", +/*MISSING*/ "first joystick position (movement)", + }}, + {0xa768dbfc, { // "A land for people wanting to experiment with cellular automata in the HyperRogue grid. Rules can be given on the command line; the default rules are:\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(-c0 or -c1 can be given if the same rule is to be used for hexagonal and heptagonal cells)." + "Kraina dla tych, co chcÄ… eksperymentować z automatami komĂłrkowymi w siatce HyperRogue. ReguĹ‚y moĹĽna podawać w linii poleceĹ„; domyĹ›lne to\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(moĹĽna podać -c0 lub -c1 by dać te same reguĹ‚y dla szeĹ›ciokÄ…tĂłw i siedmiokÄ…tĂłw).", +/*MISSING*/ "A land for people wanting to experiment with cellular automata in the HyperRogue grid. Rules can be given on the command line; the default rules are:\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(-c0 or -c1 can be given if the same rule is to be used for hexagonal and heptagonal cells).", + "Kraj pro ty, kdo by chtÄ›li experimentovat s buněčnĂ˝mi automaty na mřížce HyperRogue. Pravidla lze zadávat v příkazovĂ© řádce; standardnÄ› jsou to\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(takĂ© lze zadat -c0 nebo -c1, pokud se má použít stejnĂ© pravidlo pro šestiĂşhelnĂ­ky a sedmiĂşhelnĂ­ky).", + "Земля для желающих поэкŃпериментировать Ń ĐşĐ»ĐµŃ‚ĐľŃ‡Đ˝Ń‹ĐĽĐ¸ автоматами на Ńетке HyperRogue. Правила могŃŃ‚ быть заданы в командной Ńтроке; правила по Ńмолчанию:\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(можно иŃпользовать -c0 или -c1, еŃли правила для ŃеŃтиŃгольников и ŃемиŃгольников Ńовпадают).", +/*MISSING*/ "A land for people wanting to experiment with cellular automata in the HyperRogue grid. Rules can be given on the command line; the default rules are:\n-c07 00100000 -c06 0010000 -c17 00011000 -c16 0001100 -caprob 0.3\n(-c0 or -c1 can be given if the same rule is to be used for hexagonal and heptagonal cells).", + }}, + {0xa7741462, { // "%1 knives (%2)" + "noĹĽy: %1 (%2)", + "bıçaklar: %1 (%2)", + "nožů: %1 (%2)", + "ножи: %1 (%2)", + "%1 Messer (%2)", + }}, + {0xa7b0f3df, { // "Welcome to the Random Pattern mode!" + "Witaj w trybie losowych wzorĂłw!", +/*MISSING*/ "Welcome to the Random Pattern mode!", + "VĂ­tej v mĂłdu náhodnĂ˝ch vzorĹŻ!", + "Добро пожаловать в режим ŃĐ»Ńчайных Ńзоров!", +/*MISSING*/ "Welcome to the Random Pattern mode!", + }}, + {0xa7f306ff, { // "You have improved your '%1' high score on Google!" + "Poprawi%Ĺ‚eĹ›0 swĂłj wynik w kategorii '%P1' na Google!", + "Google'daki '%P1'puanını artırdın!", + "Zlepši%l0 jsi svĂ© nejvyšší skĂłre na Googleu v kategorii '%P1'!", + "Đ’Ń‹ повыŃили Ńвой резŃльтат '%1' в таблицах Google", + "Du hast deinen '%P1'-Rekord auf Google verbessert!", + }}, + {0xa82244d9, { // "Straight Lines" + "Linie proste", +/*MISSING*/ "Straight Lines", + "Přímky", + "Прямые линии", +/*MISSING*/ "Straight Lines", + }}, + {0xa82d5bf4, { // "Failed to save map to %1" + "Nie udaĹ‚o siÄ™ zapisać do %1", + "Harita %1 konumuna kaydedilemedi.", + "UloĹľenĂ­ mapy do %1 se nezdaĹ™ilo", + "Не ŃдалоŃŃŚ Ńозранить ĐşĐ°Ń€Ń‚Ń Đ˛ %1", + "Karte konnte nicht nach %1 gespeichert werden", + }}, + {0xa833d93c, { // "summon a Monster" + "przywoĹ‚aj potwora", + "Bir canavar çıkar", + "vyvolej netvora", + "призвать монŃтра", + "rufe ein Monster herbei", + }}, + {0xa83688cc, { // "Cannot cast illusion on a monster!" + "Nie moĹĽesz rzucić iluzji na potwora!", + "Bir canavarın ĂĽzerinde ilĂĽzyon oluĹźturamazsın!", + "NemĹŻĹľeš seslat iluzi na netvora!", + "Нельзя Ńоздать иллюзию на монŃтре!", + "Du kannst Illusionen nicht auf Monstern erschaffen!", + }}, + {0xa8713d1d, { // "You already have this Grimoire! Seek new tomes in the inner circles." + "JuĹĽ masz takÄ… KsiÄ™gÄ™! Szukaj nowych tomĂłw w wewnÄ™trznych krÄ™gach.", + "Bu Kara Kitaptan elinde zaten var! Yeni ciltleri iç dairelerde ara.", + "Tenhle Grimoár uĹľ máš! Hledej novĂ© Grimoáry ve vnitĹ™nĂ­ch kruzĂ­ch.", + "ĐŁ Đ’Đ°Ń Ńже еŃŃ‚ŃŚ этот ГримŃĐ°Ń€! Đщите новые тома в более глŃбоких крŃгах.", + "Du hast dieses Grimoire schon! Suche neue in den inneren Kreisen.", + }}, + {0xa8739e67, { // "This orb is dead..." + "Ta sfera jest martwa...", + "Bu kĂĽre ölĂĽ...", + "Tato sfĂ©ra je mrtvá...", + "Đ­Ń‚Đ° Ńфера мертва...", + "Dieser Orb ist tot...", + }}, + {0xa87b3042, { // "quit the game" + "koniec gry", + "oyundan çık", + "ukonÄŤit hru", + "выйти из игры", + "Beenden", + }}, + {0xa87d300f, { // "An alternate layout of the Crossroads, without walls." + "Alternatywny ukĹ‚ad SkrzyĹĽowaĹ„, bez Ĺ›cian.", +/*MISSING*/ "An alternate layout of the Crossroads, without walls.", + "AlternativnĂ­ verze KĹ™iĹľovatky bez zdĂ­.", + "ДрŃгой вариант перекрёŃтка, без Ńтен.", +/*MISSING*/ "An alternate layout of the Crossroads, without walls.", + }}, + {0xa91e5c94, { // "An ancient grave." + "Stary grĂłb.", + "Antik bir mezar.", + "StarĂ˝ hrob.", + "Старая могила.", + "Ein altes Grab.", + }}, + {0xa9244759, { // "Horocycles" + "Horocykle", +/*MISSING*/ "Horocycles", + "Horocykly", + "Орициклы", +/*MISSING*/ "Horocycles", + }}, + {0xa93109d6, { // "HyperRogue %1" + "HyperRogue %1", + "HyperRogue %1", + "HyperRogue %1", + "HyperRogue %1", + "HyperRogue %1", + }}, + {0xa9555d15, { // "A vine is growing here... but only on a half of the cell. How is that even possible?!Most monsters cannot move from this cell to the cell containing the other half. Vine spirits can move only to the adjacent cells which are also adjacent to the other half." + "Tu roĹ›nie winoroĹ›l... ale tylko na poĹ‚owie pola. Jak to w ogĂłle jest moĹĽliwe?!WiÄ™kszość stworzeĹ„ nie moĹĽe ruszyć siÄ™ z tego pola na pole zawierajÄ…ce drugÄ… poĹ‚owÄ™ winoroĹ›li. Winne duszki mogÄ… siÄ™ ruszyć tylko na te sÄ…siednie pola, ktĂłre sÄ…siadujÄ… takĹĽe z drugÄ… poĹ‚owÄ….", + "Burada Ĺźarap oluĹźuyor... ama sadece hĂĽcrenin yarısında. Bu nasıl mĂĽmkĂĽn olabilir?! ÇoÄźu canavar bu hĂĽcreden diÄźer yarıyı içeren hĂĽcreye hareket edemez. Ĺžarap özleri sadece diÄźer yarıya da bitiĹźik olan hĂĽcrelere gidebilir.", + "Tady roste rĂ©va... ale pouze na pĹŻlce polĂ­ÄŤka. Jak je to vĹŻbec moĹľnĂ©?!VÄ›tšina netvorĹŻ nemĹŻĹľe pĹ™echázet z tohoto polĂ­ÄŤka na polĂ­ÄŤko s druhou polovinou rĂ©vy. RĂ©vovĂ­ duchovĂ© se mohou pohybovat pouze na ta sousednĂ­ polĂ­ÄŤka, která sousedĂ­ i s druhou polovinou.", + "ЗдеŃŃŚ раŃŃ‚Ń‘Ń‚ лоза... но только на половине клетки. Как ŃŤŃ‚Đľ возможно?! БольŃинŃтво монŃтров не могŃŃ‚ перейти Ń ŃŤŃ‚ĐľĐą клетки на ŃĐľŃеднюю Ń Đ˝ĐµĐą по Ńтороне, Ńодержащей лозŃ; винный Đ´ŃŃ…, напротив, на может перейти Ń ŃŤŃ‚ĐľĐą клетки на лозŃ, ŃĐľŃеднюю Ń Đ˝ĐµĐą по Ńвободной половине.", + "Hier wächst eine Rebe... aber nur auf der halben Zelle. Wie kann das sein?!Die meisten Monster können sich nicht von dieser Zelle aus auf die bewegen, die die andere Hälfte enthält. Rebenseelen können sich nur auf angrenzende Zellen bewegen, die auch der anderen Hälfte anliegen. ", + }}, + {0xa9a41ee3, { // "Game loaded." + "Gra odczytana.", + "Oyun yĂĽklendi.", + "Hra nahrána.", + "Đгра Ńохранена.", + "Spiel geladen.", + }}, + {0xa9c9c4f0, { // "This fire never burns out." + "Ten ogieĹ„ pali siÄ™ wiecznie.", + "Bu ateĹź hiç sönmĂĽyor.", + "Tento oheĹ nikdy neuhasne.", + "Этот огонь никогда не гаŃнет.", + "Dieses Feuer erlischt niemals.", + }}, + {0xa9feaa6b, { // "You fall into a wormhole!" + "Wpad%Ĺ‚eĹ›0 w tunel przestrzenny!", + "Bir solucan deliÄźine dĂĽĹźtĂĽn!", + "Spad%l0 jsi do ÄŤervĂ­ dĂ­ry!", + "Đ’Ń‹ Ńпали в червоточинŃ!", + "Du fällst in ein Wurmloch!", + }}, + {0xaa0edc30, { // "animals killed: %1" + "zabitych zwierzÄ…t: %1", +/*MISSING*/ "animals killed: %1", + "zabitĂ˝ch zvĂ­Ĺ™at: %1", + "животных Ńбито: %1", + "getötete Tiere: %1", + }}, + {0xaa94065f, { // "SHARE" + "SHARE", + "PAYLAĹž", + "SDĂŤLEJ", + "SHARE", + "TEILE", + }}, + {0xab15ace4, { // "female" + "kobieta", + "kadın", + "Ĺľena", + "женŃкий", + "weiblich", + }}, + {0xab621991, { // "zebra triangles" + "zebra: trĂłjkÄ…ty", +/*MISSING*/ "zebra triangles", + "zebra: trojĂşhelnĂ­ky", + "зебра: треŃгольники", +/*MISSING*/ "zebra triangles", + }}, + {0xab720893, { // "You would be killed by %the1!" + "Zabi%Ĺ‚1by CiÄ™ %1!", + "%1 tarafından öldĂĽrĂĽlĂĽrsĂĽn!", + "To by tÄ› zabi%l1 %1!", + "Đ’Đ°Ń Ńбьёт %1!", + "%Der1 %1 wĂĽrde dich töten!", + }}, + {0xab7a0e7d, { // "With this Elixir, your life should be long and prosperous..." + "Ten Eliksir pozwoli Ci na dĹ‚ugie i szczęśliwe ĹĽycie...", + "Bu Ä°ksirle hayatın uzun ve refah olacak...", + "S tĂ­mto elixĂ­rem bys mÄ›l žít dlouho a blaze...", + "С этим эликŃиром Đ’Đ°ŃĐ° жизнь бŃдет долгой и процветающей...", + "Mit diesem Elixir sollte dein Leben lang und wohlhabend sein...", + }}, + {0xab81bd79, { // "F1 - help" + "F1 - pomoc", +/*MISSING*/ "F1 - help", + "F1 - nápovÄ›da", + "F1 - помощь", +/*MISSING*/ "F1 - help", + }}, + {0xaba3926a, { // "This orb is activated if you are unable to escape (radius 4) without making illegal moves or going through cells which are currently adjacent to enemy monsters. Most game over situations are covered by this, but generally, this orb is oversensitive...\n\nWhen activated, it creates a Flash effect of radius 5." + "Ta sfera aktywuje siÄ™, gdy nie moĹĽesz uciec (promieĹ„ 4) bez wykonywania nielegalnych ruchĂłw lub przechodzenia przez komĂłrki nie sÄ…siadujÄ…ce z przeciwnikami. Pokrywa wiÄ™kszość sytuacji 'koniec gry', ale zazwyczaj ta sfera jest nadwraĹĽliwa...\n\nAktywacja powoduje efekt czaru BĹ‚ysk w promieniu 5.", +/*MISSING*/ "This orb is activated if you are unable to escape (radius 4) without making illegal moves or going through cells which are currently adjacent to enemy monsters. Most game over situations are covered by this, but generally, this orb is oversensitive...\n\nWhen activated, it creates a Flash effect of radius 5.", + "Tato SfĂ©ra se aktivuje, pokud nemĹŻĹľeš utĂ©ct (do vzdálenosti 4 polĂ­ÄŤek), aniĹľ bys provedl ilegálnĂ­ pohyby nebo prošel polĂ­ÄŤky, která momentálnÄ› sousedĂ­ s nepřátelskĂ˝mi netvory. To pokrĂ˝vá vÄ›tšinu situacĂ­ 'konec hry', ale obvykle tato SfĂ©ra reaguje ponÄ›kud pĹ™ehnanÄ›...\n\nPĹ™i aktivaci vytvoří efekt Záblesku s polomÄ›rem 5 polĂ­ÄŤek.", + "Đ­Ń‚Đ° Ńфера активирŃетŃŃŹ, еŃли Đ’Đ°ĐĽ некŃĐ´Đ° идти (в радиŃŃе 4), не делая запрещённых ходов и не ходя на клетки, рядом Ń ĐşĐľŃ‚ĐľŃ€Ń‹ĐĽĐ¸ Ńтоит монŃŃ‚Ń€. Обычно игра кончаетŃŃŹ именно в такой ŃитŃации, хотя обратное верно далеко не вŃегда...\n\nПри активации Ńоздаёт Đ’ŃпыŃĐşŃ Ń€Đ°Đ´Đ¸ŃŃĐ° 5.", + "Dieser Orb wird aktiviert, wenn du nicht mehr entkommen kannst (Radius 4), ohne unerlaubte ZĂĽge zu machen oder Zellen zu ĂĽberqueren, die sich neben einem feindlichen Monster befinden. Die meisten game-over-Situationen erfĂĽllen diese Bedingung, aber im Allgemeinen ist dieser Orb ĂĽberempfindlich...\n\nWenn er aktiviert wird, erzeugt er einen Lichtblitz vom Radius 5.", + }}, + {0xaba70922, { // "inventory/kill mode" + "tryb rzeczy/zabić", +/*MISSING*/ "inventory/kill mode", + "mĂłd pĹ™edmÄ›tĹŻ/zabitĂ˝ch netvorĹŻ", + "режим предметов/ŃбийŃтв", +/*MISSING*/ "inventory/kill mode", + }}, + {0xabc14003, { // "parameters set correctly" + "parametry prawidĹ‚owe", +/*MISSING*/ "parameters set correctly", + "správnÄ› nastavenĂ© parametry", + "параметры корректны", +/*MISSING*/ "parameters set correctly", + }}, + {0xac1227ad, { // "pan down" + "przewiĹ„ w dół", + "aĹźağı kaydır", + "scrollovánĂ­ dolĹŻ", + "крŃтить вниз", + "Runterschwenken", + }}, + {0xac1e3d03, { // "Your Aether power has expired! RUN!" + "Twoja moc Eteru siÄ™ wyczerpaĹ‚a! UCIEKAJ!", + "Eter gĂĽcĂĽnĂĽn sĂĽresi bitti! KAÇ!", + "Tvá sĂ­la Éteru vyprchala. UTĂŤKEJ!", + "Đ’Đ°ŃĐ° эфирная Ńила иŃŃякает! Đ‘Đ•Đ“ĐТЕ!", + "Deine Ă„therkraft ist zu Ende! Lauf!!!", + }}, + {0xac35a37d, { // "You activate %the1." + "Aktywowa%Ĺ‚eĹ›0 %a1.", + "%a1 aktifleĹźtirdin.", + "Aktivova%l0 jsi %a1.", + "Đ’Ń‹ активировали %a1.", + "Du aktivierst %den1 %a1.", + }}, + {0xac4f826d, { // "kills" + "zab", + "leĹźler", + "zab", + "ŃбийŃтв", + "kills", + }}, + {0xad05121c, { // "Always available.\n" + "Kraina zawsze dostÄ™pna.\n", + "Her zaman mevcut.\n", + "Tento kraj je vĹľdy k dispozici.\n", + "Земля вŃегда Đ´ĐľŃŃ‚Ńпна.\n", + "Immer verfĂĽgbar.\n", + }}, + {0xad1a09a5, { // "openGL mode enabled" + "wĹ‚Ä…czono tryb OpenGL", + "OpenGL modu devrede", + "mĂłd openGL zapnut", + "режим OpenGL включен", + "OpenGL aktiviert", + }}, + {0xad56c229, { // "time elapsed" + "czas", + "geçen zaman", + "ÄŤas", + "время", + "Zeit", + }}, + {0xadc5accd, { // "%The1 hits %the2." + "%1 uderzy%Ĺ‚1 %a2.", +/*MISSING*/ "%The1 hits %the2.", + "%1 udeĹ™i%l1 %a2.", + "%1 Ńдарил%E1 %a2.", + "%Der1 %1 schlägt %den2 %a2.", + }}, + {0xaded0207, { // "Don't be fooled by this red-haired girl, or you will be stabbed if you come too close!" + "Nie daj siÄ™ zwieść tej rudowĹ‚osej, bo jak siÄ™ za bardzo zbliĹĽysz, moĹĽesz zostać ugodzon%ya1 noĹĽem!", +/*MISSING*/ "Don't be fooled by this red-haired girl, or you will be stabbed if you come too close!", + "Nenech se oklamat touto zrzavou dĂ­vkou -- pokud se k nĂ­ příliš pĹ™iblížíš, bodne tÄ›!", + "Не бŃдьте обманŃŃ‚Ń‹ этой рыжеволоŃой девŃŃкой, Ń Đ˝ĐµŃ‘ еŃŃ‚ŃŚ ĐľŃтрый нож!", + "Lass dich von diesem rothaarigen Mädchen nicht täuschen - oder du wirst erstochen, wenn du zu nah kommst!", + }}, + {0xae23f5e8, { // "configure input" + "konfiguracja sterowania", +/*MISSING*/ "configure input", + "konfigurace vstupu", + "наŃтроить ввод", +/*MISSING*/ "configure input", + }}, + {0xae245bf3, { // "TRANSLATIONWARNING" +/*MISSING*/ "TRANSLATIONWARNING", + "ÇEVÄ°RÄ° UYARISI: TĂĽrkçe çevirisi gĂĽncel deÄźil -- 8.1'den sonra eklenen özellikleri", +/*MISSING*/ "TRANSLATIONWARNING", +/*MISSING*/ "TRANSLATIONWARNING", +/*MISSING*/ "TRANSLATIONWARNING", + }}, + {0xae2cf6e1, { // "The temple of Cthulhu consists of many concentric circles of columns. You will surely encounter many Cultists there, who believe that a pilgrimage to the inner circles will bring them closer to Cthulhu himself, and Grimoires which surely contain many interesting secrets.\n\nThe circles in the temple of Cthulhu are actually horocycles. They are infinite, and there is an infinite number of them." + "ĹšwiÄ…tynia Cthulhu skĹ‚ada siÄ™ z wielu koncentrycznych krÄ™gĂłw kolumn. Spotkasz tu wielu KultystĂłw, dla ktĂłrych pielgrzymka do wewnÄ™trznych krÄ™gĂłw to szansa na bycie bliĹĽej Cthulhu, a takĹĽe KsiÄ™gi zawierajÄ…ce wiele interesujÄ…cych sekretĂłw.\n\nKrÄ™gi w ĹšwiÄ…tyni Cthulhu sÄ… wĹ‚aĹ›ciwie horocyklami. SÄ… nieskoĹ„czone i jest ich nieskoĹ„czenie wiele.", + "Cthulhu tapınağı çok sayıda eĹź merkezli dairesel sĂĽtunlardan oluĹźur. Burada iç dairelere yapılan bir haccın kendilerini Cthulhu'ya daha çok yaklaĹźtırdığına inanan bir çok MĂĽritle ve çok ilginç sırlar içeren Kara Kitaplarla karşılaĹźacaksın. \n\nCthulhu Tapınağının merkezindeki daireler aslında horoçemberler. Onlar sonsuz ve onlardan sonsuz tane var.", + "CthulhuĹŻv chrám sestává z mnoha soustĹ™ednĂ˝ch kruhĹŻ sloupĹŻ. JistÄ› tu narazíš na mnoho KultistĹŻ, kteří věří, Ĺľe je vykonánĂ­ pouti do vnitĹ™nĂ­ch kruhĹŻ pĹ™ivede blĂ­Ĺľ k samotnĂ©mu Cthulhuovi a ke GrimoárĹŻm, kterĂ© jistÄ› obsahujĂ­ mnoho zajĂ­mavĂ˝ch tajemstvĂ­.\n\nKruhy v CthulhuovÄ› chtámu jsou ve skuteÄŤnosti horocykly. Jsou nekoneÄŤnÄ› velkĂ© a je jich nekoneÄŤnÄ› mnoho.", + "Храм КтŃĐ»Ń…Ń Ńодержит много концентричеŃких крŃгов колонн. ЗдеŃŃŚ Đ’Ń‹ вŃтретите ĐşŃльтиŃтов, верящих, что ĐżŃтеŃеŃтвие во внŃтренние крŃги храма приблизит их ко КтŃлхŃ, и найдёте ГримŃары, Ńодержащие веŃŃŚĐĽĐ° интереŃные Ńекреты.\n\nКрŃги в храме на Ńамом деле орициклы. Они беŃконечны, и их чиŃло беŃконечно.", + "Der Tempel des Cthulhu. Er besteht aus vielen konzentrischen Kreisen von Säulen. Du wirst hier sicherlich vielen Anhängern Cthulhus begegnen. Sie glauben, dass eine Pilgerreise in die inneren Kreise sie näher zu Cthulhu bringt und man mächtige Grimoires finden kann, die viele Geheimnisse in sich bergen.\n\nDie Kreise hier sind eigentlich Horozykeln. Sie sind unendlich groĂź, und es gibt unendlich viele davon.", + }}, + {0xae2d6177, { // "\"That felt great. Thanks!\"" + "\"WspaniaĹ‚e uczucie. DziÄ™ki!\"", + "\"Çok iyi hissettim! SaÄźol!\"", + "\"To byl skvÄ›lĂ˝ pocit. DÄ›kuji!\"", + "\"Đ­Ń‚Đľ было прекраŃно. СпаŃибо!\"", + "\"Danke, das hat sich gut angefĂĽhlt.\"", + }}, + {0xae6f4a8d, { // "copying" + "kopiujÄ™", + "kopyalıyor", + "kopĂ­ruje", + "копирование", + "kopieren", + }}, + {0xaea25fcd, { // "Accessible only from %the1.\n" + "Kraina dostÄ™pna tylko poprzez %a1.\n", + "Sadece %a1 eriĹźilebilir.\n", + "Tento kraj je dostupnĂ˝ pouze skrz %a1.\n", + "ДоŃŃ‚Ńпно только из %a1.\n", + "Nur von %der1 %a1 aus erreichbar.\n", + }}, + {0xaeb1129b, { // "player 2 X" + "gracz 2 X", + "oyuncu 2, yatay", + "hráč 2 X", + "игрок 2 X", + "Spieler 2 X", + }}, + {0xaeb1129c, { // "player 2 Y" + "gracz 2 Y", + "oyuncu 2, dikey", + "hráč 2 Y", + "игрок 2 Y", + "Spieler 2 Y", + }}, + {0xaef79f07, { // "firewall lines" + "linie Ĺ›cian ognia", +/*MISSING*/ "firewall lines", + "čáry ohnivĂ˝ch stÄ›n", + "Ńтены огня", +/*MISSING*/ "firewall lines", + }}, + {0xaf02ccc6, { // "Mid detail range" + "ZasiÄ™g Ĺ›redniego poziomu szczegółów", +/*MISSING*/ "Mid detail range", + "Rozsah stĹ™ednĂ­ch detailĹŻ", + "Зона Ńредней детализации", +/*MISSING*/ "Mid detail range", + }}, + {0xaf542723, { // "backward" + "do tyĹ‚u", + "geri", + "dozadu", + "назад", + "ZurĂĽck", + }}, + {0xaf5bf681, { // "You cannot defeat the Shadow!" + "Nie moĹĽesz pokonać Cienia!", + "gölgeyi henĂĽz yenemezsiniz!", + "StĂ­n nemĹŻĹľeš porazit!", + "Đ’Ń‹ не можете Ńбить Ńвою тень!", + "Du kannst den Schatten nicht besiegen!", + }}, + {0xaf704be6, { // "Vampire Bats drain your magical powers!" + "Wampiry wysysajÄ… Twoje magiczne moce!", +/*MISSING*/ "Vampire Bats drain your magical powers!", + "Vampýři ti vysávajĂ­ magickĂ© schopnosti!", + "Вампиры выŃĐ°Ńывают из Đ’Đ°Ń ŃилŃ!", +/*MISSING*/ "Vampire Bats drain your magical powers!", + }}, + {0xaf9f8e73, { // "An alternate layout of the Crossroads. Great Walls cross here at right angles." + "Alternatywny ukĹ‚ad SkrzyĹĽowania. Wielkie Ĺšciany przecinajÄ… siÄ™ tu pod kÄ…tami prostymi.", + "Arayollar için bir alternatif dĂĽzen. BĂĽyĂĽk Duvarlar burada dik açı yaparak kesiĹźir.", + "AlternativnĂ­ uspořádánĂ­ KĹ™iĹľovatky. VelkĂ© zdi se tu protĂ­najĂ­ v pravĂ˝ch Ăşhlech.", + "Đльтернативный вариант ПерекрёŃтка. Великие Ńтены переŃекаютŃŃŹ под прямым Ńглом.", + "Ein alternatives Layout der Kreuzungen. GroĂźe Mauern kreuzen sich hier in rechten Winkeln.", + }}, + {0xafa28a3b, { // "Congratulations! Your score is %1." + "Gratulacje! TwĂłj wynik to %1.", + "Tebrikler! Puanın: %1.", + "Gratulujeme! TvĂ© skĂłre je %1.", + "Поздравляем! Đ’Đ°Ń Ń€ĐµĐ·Ńльтат: %1.", + "GlĂĽckwunsch! Deine Punktzahl beträgt %1.", + }}, + {0xafbe27dc, { // "A precious green gem from the Emerald Mines." + "Cenny, zielony klejnot z Kopalni SzmaragdĂłw.", + "ZĂĽmrĂĽt Madenlerinden eÄźerli yeĹźil bir mĂĽcevher.", + "CennĂ˝ zelenĂ˝ drahokam ze SmaragdovĂ©ho dolu.", + "Ценный зелёный камень из изŃĐĽŃ€Ńдных ŃĐ°Ń…Ń‚.", + "Ein wertvoller grĂĽner Edelstein aus den Smaragdminen.", + }}, + {0xb071059d, { // "The mirror shatters!" + "Lustro pÄ™ka!", + "Ayna kırıldı!", + "Zrcadlo se roztříštilo!", + "Зеркало разбилоŃŃŚ!", + "Der Spiegel zerbricht", + }}, + {0xb1009491, { // "player" + "gracz", +/*MISSING*/ "player", + "hráč", + "игрок", + "Spieler", + }}, + {0xb185b26f, { // "Skeletons work similar to Palace Guards, but they won't die no matter how many times you hit them. Well, you have to be more creative...\n\nSkeletons attacked outside of their native land, Palace, are stunned for a longer time." + "KoĹ›ciotrupy dziaĹ‚ajÄ… podobnie do StraĹĽnikĂłw PaĹ‚acu, ale nie zabijesz ich, ilekolwiek byĹ› ich atakowa%Ĺ‚0. WymyĹ›l coĹ› bardziej twĂłrczego...\n\nKoĹ›ciotrup zaatakowany poza PaĹ‚acem bÄ™dzie ogĹ‚uszony przez dĹ‚uĹĽszy czas.", + "Ä°skeletler Saray Muhafızlarına benzerdir, ama kaç sefer vurulurlarsa vurulsunlar ölmezler. Onları öldĂĽrmek için daha yaratıcı olmanız gerekiyor... \n\n Sarayın dışında darbe alan iskeletler daha uzun sĂĽre için sersemlerler.", + "Kostlivci fungujĂ­ podobnÄ› jako Strážci Paláce, ale aĹĄ na nÄ› zaĂştočíš, kolikrát chceš, nikdy je nezabiješ. No, musíš bĂ˝t vynalĂ©zavÄ›jší...\n\nMimo Palác, jejich rodnĂ˝ kraj, budou Kostlivci Ăştokem omráčenĂ­ na delší dobu.", + "Скелет реагирŃет на Ńдары как Дворцовый Ńтражник, но Ńколько раз бы Đ’Ń‹ его не Ńдарили, он не Ńмрёт. Хитрее надо быть...\n\nĐ•Ńли Ńкелет атакован вне его родной земли, Дворца, он Đ·Đ°Ńтывает на более долгое время.", + "Skelette ähneln den Palastwachen. Sie sterben zwar nicht egal wie oft du sie triffst, aber wenn du sie auĂźerhalb des Palastes angreifst sind sie fĂĽr lange Zeit betäubt \n\n", + }}, + {0xb1bbbfea, { // "You feel that a magical weapon is waiting for you..." + "Czujesz, ĹĽe magiczna broĹ„ na Ciebie czeka...", +/*MISSING*/ "You feel that a magical weapon is waiting for you...", + "CĂ­tíš, Ĺľe na tebe ÄŤeká magická zbraĹ...", + "Ты чŃвŃтвŃеŃŃŚ, что магичеŃкое орŃжие ждёт тебя...", +/*MISSING*/ "You feel that a magical weapon is waiting for you...", + }}, + {0xb1c9f938, { // "Six mines next to you!" + "Sześć min koĹ‚o Ciebie!", + "Yakınında altı mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházĂ­ šest min!", + "ШеŃŃ‚ŃŚ мин рядом Ń Đ’Đ°ĐĽĐ¸!", + "6 Minen um dich!", + }}, + {0xb1dbbe26, { // "rotation" + "obrĂłt", +/*MISSING*/ "rotation", + "rotace", + "поворот", + "Rotation", + }}, + {0xb21f6237, { // "You feel more experienced in demon fighting!" + "JesteĹ› bardziej doĹ›wiadczony w walce z demonami!", + "Ĺžeytanlarla savaĹźmada daha deneyimli hissediyorsun!", + "CĂ­tíš se zkušenÄ›jší v boji proti pekelnĂ˝m dĂ©monĹŻm!", + "Теперь Đ’Ń‹ более опытны в борьбе Ń Đ´ĐµĐĽĐľĐ˝Đ°ĐĽĐ¸!", + "Du fĂĽhlst dich erfahrener im Kampf gegen Dämonen!", + }}, + {0xb226a49b, { // "one player" + "jeden gracz", + "tek kiĹźilik", + "jeden hráč", + "один игрок", + "Ein Spieler", + }}, + {0xb22b7504, { // "Kill a Vizier in the Palace to access Emerald Mine" + "Zabij Wezyra w PaĹ‚acu, by iść do Kopalni SzmaragdĂłw", + "ZĂĽmrĂĽt Madenine ulaĹźmak için Saray'da bir Vezir öldĂĽr.", + "Zabij VezĂ­ra v Paláci a dostaneš se do SmaragdovĂ©ho dolu", + "Убей Визиря во дворце, чтобы открыть ĐĐ·ŃĐĽŃ€ŃĐ´Đ˝ŃŃŽ ŃĐ°Ń…Ń‚Ń.", + "Töte einen Wisier im Palast um Zugang zu den Smaragdminen zu erhalten", + }}, + {0xb2c04442, { // "A land filled with demons and molten sulphur. Abandon all hope ye who enter here!" + "Kraina peĹ‚na demonĂłw i stopionej siarki. Ty, ktĂłry wchodzisz, ĹĽegnaj siÄ™ z nadziejÄ…!", + "Ĺžeytanlarla ve erimiĹź sĂĽlfĂĽrle dolu bir diyar. Buraya giriyorsan tĂĽm ĂĽmitlerini terket!", + "Kraj plnĂ˝ dĂ©monĹŻ a roztavenĂ© sĂ­ry. Zanech vší nadÄ›je, ty, kdoĹľ vstupuješ!", + "Земля, полная демонов и раŃплавленной Ńеры. ĐžŃтавь Đ˝Đ°Đ´ĐµĐ¶Đ´Ń Đ˛ŃŃŹĐş ŃŃŽĐ´Đ° входящий!", + "Ein Land voller Dämonen und geschmolzenem Schwefel. Gib alle Hoffnung auf, wenn du eintrittst!", + }}, + {0xb2ccbf52, { // "You jump!" + "Skaczesz!", + "Zıpladın!", + "SkoÄŤil jsi!", + "Đ’Ń‹ прыгнŃли!", + "Du springst!", + }}, + {0xb2e991dc, { // "towards orthographic" + "w stronÄ™ rzutu ortogonalnego", +/*MISSING*/ "towards orthographic", + "smÄ›r k ortografickĂ© projekci", + "в ŃŃ‚ĐľŃ€ĐľĐ˝Ń ĐľŃ€Ń‚ĐľĐłĐľĐ˝Đ°Đ»ŃŚĐ˝ĐľĐą", +/*MISSING*/ "towards orthographic", + }}, + {0xb2f43970, { // "Actually, their powers appear god-like...\n\n" + "Jego moce wyglÄ…dajÄ… wĹ‚aĹ›ciwie na boskie...\n\n", +/*MISSING*/ "Actually, their powers appear god-like...\n\n", + "VlastnÄ› se zdá, Ĺľe má aĹľ boĹľskou moc...\n\n", + "Его Ńилы кажŃŃ‚ŃŃŹ богоподобными...\n\n", +/*MISSING*/ "Actually, their powers appear god-like...\n\n", + }}, + {0xb309a7f9, { // "Your mundane weapon cannot hurt %the1!" + "Twoja zwykĹ‚a broĹ„ nie dziaĹ‚a na %a1!", +/*MISSING*/ "Your mundane weapon cannot hurt %the1!", + "%1 se nedá zranit tvou obyÄŤejnou zbranĂ­!", + "Обычное орŃжие не берёт %a1!", + "Deine irdische Waffe kann %den1 %a1 nicht verletzen!", + }}, + {0xb3145edc, { // "%The1 falls!" + "%1 spad%Ĺ‚1!", + "%1 dĂĽĹźtĂĽ!", + "%1 spad%l1!", + "%1 Ńпал%E1!", + "%Der1 %1 fällt!", + }}, + {0xb33b4797, { // "home" + "centruj na graczy", + "ortaya geri dön", + "vycentrovánĂ­", + "центр на игроках", + "Home", + }}, + {0xb33df516, { // "render texture without OpenGL" + "renderuj teksturÄ™ bez OpenGL", +/*MISSING*/ "render texture without OpenGL", + "renderuj textury bez OpenGL", + "не иŃпользовать OpenGL", + "Rendere die Textur ohne OpenGL", + }}, + {0xb36abaf8, { // "The world can be mapped conformally to a square too." + "Ĺšwiat moĹĽna teĹĽ konforemnie odwzorować na kwadrat.", +/*MISSING*/ "The world can be mapped conformally to a square too.", + "SvÄ›t je takĂ© moĹľnĂ© konformálnÄ› namapovat na ÄŤtverec.", + "Также можно конформно отобразить мир на квадрат.", +/*MISSING*/ "The world can be mapped conformally to a square too.", + }}, + {0xb3826405, { // "%The1 throws fire at you!" + "%1 rzuca w Ciebie ogniem!", + "%1 sana ateĹź attı!", + "%1 po tobÄ› vystĹ™elil oheĹ!", + "%1 броŃил в Đ’Đ°Ń ĐľĐłĐ˝Ń‘ĐĽ!", + "%Der1 %1 wirft Feuer nach dir!", + }}, + {0xb3c80e9a, { // "%The1 is immune to mental blasts!" + "%1 jest odporn%ya1 na atak psychiczny!", + "%1 zihin patlamasından etkilenmez!", + "%1 je imunnĂ­ proti mentálnĂ­mu Ăştoku!", + "%1 защищён%E1 от ĐżŃихичеŃких Đ°Ń‚Đ°Đş!", + "%Der1 %1 ist immun gegen mentale Stöße!", + }}, + {0xb3ce009a, { // "second joystick: panning speed" + "dĹĽojstik 2: prÄ™dkość przewijania", + "ikinci oyun kolu: gezdirme hızı", + "joystick 2: rychlost posouvánĂ­", + "джойŃтик 2: ŃкороŃŃ‚ŃŚ панорамы", + "Joystick 2: Scrollgeschwindigkeit", + }}, + {0xb3f93924, { // "These warped humanoids are skilled warriors and sailors, and they feel at home at the Warped Coast. Their battle experience has taught them that enemies who wait without moving or attacking anything are the most deadly. If they see such an enemy, they become extremely suspicious, and they also wait." + "Te czĹ‚ekoksztaĹ‚tne stworzenia sÄ… zrÄ™czne na morzu i w walce, a na Zakrzywionym Brzegu czujÄ… siÄ™ jak w domu. Ich doĹ›wiadczenie bitewne nauczyĹ‚o je, ĹĽe ci przeciwnicy, ktĂłrzy czekajÄ… bez ruchu i bez ataku, sÄ… najbardziej niebezpieczni. Kiedy widzÄ… takiego przeciwnika, stajÄ… siÄ™ bardzo podejrzliwe i rĂłwnieĹĽ czekajÄ….", +/*MISSING*/ "These warped humanoids are skilled warriors and sailors, and they feel at home at the Warped Coast. Their battle experience has taught them that enemies who wait without moving or attacking anything are the most deadly. If they see such an enemy, they become extremely suspicious, and they also wait.", + "Tito pokĹ™ivenĂ­ humanoidĂ© jsou dobrĂ˝mi váleÄŤnĂ­ky i námoĹ™nĂ­ky a na PokĹ™ivenĂ©m pobĹ™eží jsou jako doma. Jejich bojovĂ© zkušenosti je nauÄŤily, Ĺľe nepřátelĂ©, kteří ÄŤekajĂ­ -- nehĂ˝bou se a neĂştoÄŤĂ­ -- jsou ti nejvraĹľednÄ›jší. KdyĹľ takovĂ©ho nepřítele uvidĂ­, zaÄŤnou bĂ˝t velmi podezĂ­ravĂ­ a budou ÄŤekat takĂ©.", + "Эти иŃкривлённые ĐłŃманоиды -- опытные воины и мореходы, и чŃвŃтвŃŃŽŃ‚ Ńебя как дома на ĐŃкривлённом берегŃ. ĐŃ… боевой опыт говорит, что враги, которые Ńтоят на меŃте и никого не Đ°Ń‚Đ°ĐşŃŃŽŃ‚, наиболее опаŃны. Когда они видят такого врага, Они ŃтановятŃŃŹ подозрительными и тоже Ńтоят на меŃте.", + "Diese verzerrten Humanoiden sind geschickte Krieger und Segler, die sich an der Verzerrten KĂĽste zu Hause fĂĽhlen. Ihre Kampferfahrung hat sie gelehrt, das Feinde, die warten ohne sich zu bewegen oder anzugreifen, die tödlichsten sind. Wenn sie solch einen Feind treffen, werden sie extrem misstrauisch und warten ebenfalls.", + }}, + {0xb405f402, { // "g = grid" + "g = siatka", + "g = Ĺźablon", + "g = sĂ­ĹĄ", + "g = Ńетка", + "g = Raster", + }}, + {0xb40f0c4d, { // "\"I would love to come to your world with you!\"" + "\"Chcia%Ĺ‚1bym wrĂłcić z TobÄ… do Twojego Ĺ›wiata!\"", + "Senle beraber dĂĽnyana gelmeyi çok isterdim!\"", + "ChtÄ›%l1 bych se s tebou vrátit do tvĂ©ho svÄ›ta!\"", + "ĐŻ хотел%E1 бы отправитьŃŃŹ в Đ’Đ°Ń ĐĽĐ¸Ń€ вмеŃте Ń Đ’Đ°ĐĽĐ¸!\"", + "Ich wĂĽrde gerne mit dir in deine Welt kommen!\"", + }}, + {0xb4167b8c, { // "%The1 squeaks in a confused way." + "Zmieszan%ya1 %1 pisn%Ä…Ĺ‚1.", + "%1 ĹźaĹźkın bir Ĺźekilde ciyaklıyor.", + "%1 zmatenÄ› pištĂ­.", + "%1 пищит, Đ·Đ°ĐżŃтавŃиŃŃŚ.", + "%Die1 %1 piepst verwirrt.", + }}, + {0xb4276c46, { // "A bird who hunts in the treetops of the Yendorian Forest." + "Ptak polujÄ…cy w koronach drzew w lesie yendoriaĹ„skim.", +/*MISSING*/ "A bird who hunts in the treetops of the Yendorian Forest.", + "Pták, kterĂ˝ lovĂ­ v korunách YendorskĂ©ho lesa.", + "Đ­Ń‚Đ° птица охотитŃŃŹ в ЙендорŃком леŃŃ.", + "Ein Vogel welcher in den Baumwipfeln des Yendorianischen Waldes jagt.", + }}, + {0xb435ae8b, { // "Circles" + "KoĹ‚a", +/*MISSING*/ "Circles", + "KruĹľnice", + "ОкрŃжноŃти", +/*MISSING*/ "Circles", + }}, + {0xb45264c8, { // "Palace Pattern" + "PaĹ‚acowy WzĂłr", + "Saray Dokusu", + "PalácovĂ˝ vzor", + "Дворцовый Ńзор", + "Palastmuster", + }}, + {0xb4b7757a, { // "HyperRogue uses the Minkowski hyperboloid model internally. Klein and PoincarĂ© models can be obtained by perspective, and the Gans model is obtained by orthogonal projection. See also the conformal mode (in the special modes menu) for more models." + "HyperRogue wewnÄ™trznie uĹĽywa modelu hiperboloidy Minkowskiego. Modele Kleina i PoincarĂ© sÄ… uzyskiwane przez perspektywÄ™, a model Gansa przez rzut ortogonalny. WiÄ™cej modeli w trybie konforemnym (w menu trybĂłw specjalnych).", +/*MISSING*/ "HyperRogue uses the Minkowski hyperboloid model internally. Klein and PoincarĂ© models can be obtained by perspective, and the Gans model is obtained by orthogonal projection. See also the conformal mode (in the special modes menu) for more models.", + "HyperRogue internÄ› používá model MinkowskĂ©ho hyperboloidu. KleinĹŻv a PoincarĂ©ho model lze zĂ­skat pomocĂ­ perspektivy a GansĹŻv model pomocĂ­ ortogonálnĂ­ projekce. VĂ­ce modelĹŻ mĹŻĹľeš najĂ­t v konformálnĂ­m mĂłdu (menu speciálnĂ­ch mĂłdĹŻ).", + "HyperRogue иŃпользŃет для раŃчётов модель МинковŃкого. Модели Клейна и ĐźŃанкаре полŃчаютŃŃŹ из неё перŃпективой, Đ° модель Đ“Đ°Đ˝ŃĐ° -- ортогональной проекцией. Также Ńмотрите конформный режим (в меню Ńпециальных режимов) для Đ´Ń€Ńгих моделей.", +/*MISSING*/ "HyperRogue uses the Minkowski hyperboloid model internally. Klein and PoincarĂ© models can be obtained by perspective, and the Gans model is obtained by orthogonal projection. See also the conformal mode (in the special modes menu) for more models.", + }}, + {0xb4f15d44, { // "Demons of Hell do not drown when they fall into the lake in Cocytus. They turn into demonic sharks, enveloped in a cloud of steam." + "Demony nie topiÄ… siÄ™, gdy wpadnÄ… w jezioro Kocyt. ZamieniajÄ… siÄ™ w demoniczne rekiny, otoczone chmurÄ… pary.", + "Cehennem Ĺžeytanları Kokitos'ta göle dĂĽĹźtĂĽklerinde boÄźulmazlar.Bir buhar bulutuyla kaplı ĹźeytanĂ® köpekbalıklarına dönüşürler.", + "KdyĹľ pekelnĂ­ dĂ©moni spadnou do jezera v Cocytu, neutopĂ­ se. MĂ­sto toho se promÄ›nĂ­ v ĎábelskĂ© Ĺľraloky zahalenĂ© v oblaku páry.", + "Демоны из ĐĐ´Đ° не тонŃŃ‚ в озёрах Коцита. Они превращаютŃŃŹ в демоничеŃких Đ°ĐşŃĐ», окŃтанных облаками пара.", + "Dämonen aus der Hölle ertrinken nicht, wenn sie in den See von Kokytos fallen. Stattdessen werden sie zu Dämonenhaien, eingehĂĽllt in eine Wolke aus Dampf.", + }}, + {0xb5149a1e, { // "You have found the Key! Now unlock this Orb of Yendor!" + "Znalaz%Ĺ‚eĹ›0 Klucz! OtwĂłrz SferÄ™ Yendoru!", + "Anahtarı buldun! Bu Yendorun KĂĽresinin kilidini açabilirsin!", + "Naše%l0 jsi KlĂ­ÄŤ! TeÄŹ odemkni tuto Yendorskou sfĂ©ru!", + "Đ’Ń‹ наŃли ключ! Откройте им ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°!", + "Du hast den SchlĂĽssel gefunden! Zeit den Orb von Yendor zu öffnen!", + }}, + {0xb51f5809, { // "heptagonal" + "siedmiokÄ…t", + "yedigensel", + "sedmiĂşhelnĂ­ky", + "ŃемиŃгольник", + "heptagonal", + }}, + {0xb5565061, { // "Enemies killed: %1" + "Potwory pokonane: %1", + "Ă–ldĂĽrĂĽlen DĂĽĹźmanlar: %1", + "ZabitĂ˝ch netvorĹŻ: %1", + "Врагов Ńбито: %1", + "Getötete Gegner: %1", + }}, + {0xb612caa4, { // "\"Maps... Just like the world, but smaller... how is that even possible?!\"" + "\"Mapy... jak Ĺ›wiat, tylko mniejsze... jak to w ogĂłle moĹĽliwe?!\"", + "\"Haritalar... Gerçek dĂĽnya gibi, ama daha küçük... bu nasıl mĂĽmkĂĽn olabilir?!\"", + "\"Mapy... stejnĂ© jako svÄ›t, ale menší... jak je to vĹŻbec moĹľnĂ©?!\"", + "\"Карты... как мир, только меньŃе... как ŃŤŃ‚Đľ возможно?!\"", + "\"Karten... Genau wie die Welt, nur kleiner... wie ist das möglich?!\"", + }}, + {0xb620161f, { // "display only heptagons" + "pokaĹĽ tylko siedmiokÄ…ty", + "sadece yedigenleri göster", + "zobraz pouze sedmiĂşhelnĂ­ky", + "показать только ŃемиŃгольники", + "Nur Heptagone anzeigen", + }}, + {0xb658c19a, { // ", m - mode: normal" + ", m - tryb normalny", + ", m - normal mod", + ", m - normálnĂ­ mĂłd", + ", m - нормальный режим", + ", m - Modus: Normal", + }}, + {0xb6689dff, { // "Let's see more models of the hyperbolic plane. This model uses a hyperboloid in the Minkowski geometry; it is used internally by HyperRogue." + "PokaĹĽemy teraz wiÄ™cej modeli. To jest hiperboloida w geometrii Minkowskiego; HyperRogue wewnÄ™trznie uĹĽywa tego modelu.", +/*MISSING*/ "Let's see more models of the hyperbolic plane. This model uses a hyperboloid in the Minkowski geometry; it is used internally by HyperRogue.", + "PodĂ­vejme se na další modely hyperbolickĂ© roviny. Tento model používá hyperboloid v MinkowskĂ©ho geometrii; právÄ› tento model HyperRogue používá internÄ›.", + "Давай поŃмотрим на Đ´Ń€Ńгие модели. Đ­Ń‚Đ° модель иŃпользŃет гиперболоид в геометрии МинковŃкого; HyperRogue внŃтренне иŃпользŃет ŃŤŃ‚Ń ĐĽĐľĐ´ĐµĐ»ŃŚ.", +/*MISSING*/ "Let's see more models of the hyperbolic plane. This model uses a hyperboloid in the Minkowski geometry; it is used internally by HyperRogue.", + }}, + {0xb74fae26, { // "Only thin twigs and leaves here. They may bear fruits, but for you, these cells count as unstable." + "Tu sÄ… jedynie cieniutkie gaĹ‚Ä…zki i liĹ›cie. MogÄ… tu rosnąć owoce, ale dla Ciebie te pola liczÄ… siÄ™ jako niestabilne.", +/*MISSING*/ "Only thin twigs and leaves here. They may bear fruits, but for you, these cells count as unstable.", + "Tady jsou jen tenkĂ© vÄ›tviÄŤky a listy. Mohou nĂ©st ovoce, ale pro tebe se poÄŤĂ­tajĂ­ jako nestabilnĂ­.", + "ЗдеŃŃŚ лиŃŃŚ тонкие веточки и лиŃŃ‚ŃŚŃŹ. Они могŃŃ‚ выдержать Ń„Ń€Ńкт, но не Đ˛Đ°Ń Đ˛ĐµŃ.", + "Hier sind nur dĂĽnne Zweige und Blätter. Sie mögen FrĂĽchte tragen, aber fĂĽr dich sind diese Zellen instabil.", + }}, + {0xb7879863, { // "Hint: use arrow keys to scroll." + "WskazĂłwka: przewijasz strzaĹ‚kami.", +/*MISSING*/ "Hint: use arrow keys to scroll.", + "NápovÄ›da: šipkami mĹŻĹľeš scrollovat.", + "ПодŃказка: лиŃтайте экран Ńтрелками.", +/*MISSING*/ "Hint: use arrow keys to scroll.", + }}, + {0xb792f8be, { // "The Grimoires contain many secrets of the Great Old Ones. Each new inner circle in the Temple of Cthulhu contains new Grimoires, with new secrets. 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 several copies of the same Grimoire..." + "Te KsiÄ™gi zawierajÄ… tajemnice Wielkich Przedwiecznych. KaĹĽdy krÄ…g wewnÄ™trzny w ĹšwiÄ…tyni Cthulhu zawiera nowe KsiÄ™gi, z nowymi sekretami. Zamierzasz je przeczytać po powrocie do domu. Wiedza jest dla Ciebie wartoĹ›ciowa, ale nie ma sensu, by brać kilka kopii tej samej KsiÄ™gi...", + "Kara Kitaplar Eski YĂĽcelere dair pek çok sır içerir. Cthulhu Tapınağındaki her iç daire yeni sırlar içeren yeni Kara Kitaplar içerir.Eve geri döndüğünde bunları okuyup pek çok Ĺźey öğrenmeyi umuyorsun. Bilgi senin için önemli, bu yĂĽzden aynı Kara Kitaptan birden fazla almak çok anlamsız.", + "Grimoáry obsahujĂ­ mnoho tajemstvĂ­ StarĂ˝ch VelkĂ˝ch. KaĹľdĂ˝ další vnitĹ™nĂ­ kruh Cthulhuova chrámu obsahuje novĂ© Grimoáry s novĂ˝mi tajemstvĂ­mi. Doufáš, Ĺľe si je všechny pĹ™eÄŤteš, aĹľ se vrátíš domĹŻ, a Ĺľe se naučíš mnoho vÄ›cĂ­. Znalosti z GrimoárĹŻ jsou pro tebe cennĂ©, ale nemá smysl snaĹľit se zĂ­skat nÄ›kolik kopiĂ­ stejnĂ©ho Grimoáru...", + "ГримŃары Ńодержат много Ńекретов Великих предков Каждый новый крŃĐł Храма КтŃĐ»Ń…Ń Ńодержит новые тома Ń Đ˝ĐľĐ˛Ń‹ĐĽĐ¸ Ńекретами. Đ’Ń‹ можете принеŃти их домой, прочитать и Ńзнать много вещей.Знание ценно для Đ’Đ°Ń, но Đ’Đ°ĐĽ не Đ˝Ńжны копии одного ГримŃара... ", + "Die Grimoires enthalten viele Geheimnisse der weisen Alten. Jeder neue innere Kreis des Tempels des Cthulhu enthält neue Grimoires mit mehr Geheimnissen. Das Wissen ist dir sehr kostbar, aber es wäre natĂĽrlich sinnlos, mehrmals das gleiche Grimoire aufzuheben...", + }}, + {0xb7c225da, { // "The Necromancer's Totem contains hellish incantations..." + "Totem Nekromanty zawiera piekielne inkantacje...", + "Ă–lüçağıranın Totemi Ĺźeytani iĹźlemelerle doluydu...", + "NekromancerĹŻv totem obsahuje pekelná zaklĂ­nánĂ­...", + "Тотем некроманта Ńодержит Đ°Đ´Ńкие заклинания...", + "Das Totenbeschwörer-Totem enthält diabolische ZaubersprĂĽche...", + }}, + {0xb8041ec3, { // "t = shift" + "t = przesuĹ„", + "t = kaydır", + "t = pĹ™esuĹ", + "t = Ńдвиг", + "t = verlagern", + }}, + {0xb8043afb, { // "%The1 fights with %the2!" + "%1 zaatakowaĹ‚ %a2!", + "%1 %a2 savaşıyor!", + "%1 se pustil do boje s %a2!", + "%1 атаковал%E1 %a2!", + "%Der1 %1 bekämpft %den2 %a2!", + }}, + {0xb836c2fa, { // "joystick mode: manual (press a button to move)" + "tryb dĹĽojstika: rÄ™czny (naciĹ›nij przycisk)", + "oyun kolu modu: manuel (bir dĂĽÄźmeye basarak hareket edersin)", + "mĂłd joysticku: ruÄŤnĂ­ (pohybuješ se stiskem tlaÄŤĂ­tka)", + "Режим джойŃтика: Ń€Ńчной (нажмите на клавиŃŃ Đ´Đ»ŃŹ перемещения)", + "Joystick: Manuell (Knopf drĂĽcken zum bewegen)", + }}, + {0xb842e685, { // "Kill monsters and collect treasures, and you may get access to Hell..." + "Zabijaj potwory, zdobywaj skarby, moĹĽe trafisz do PiekĹ‚a...", + "Canavarlar öldĂĽr, hazineler topla ve belki Cehenneme eriĹźebilirsin...", + "ZabĂ­jej netvory a sbĂ­rej poklady a moĹľná najdeš cestu do Pekla...", + "Убивайте монŃтров и Ńобирайте Ńокровища, и Đ’Ń‹ Ńможете открыть ĐĐ´...", + "Wenn du Monster tötest und Schätze sammelst erhältst du vielleicht Zutritt zur Hölle...", + }}, + {0xb8492a60, { // "Necromancers can raise ghosts and zombies from fresh graves." + "Nekromanci wzbudzajÄ… duchy i zombie ze Ĺ›wieĹĽych grobĂłw.", + "Ă–lüçağıranlar mezarlardan hayaletler ve hortlaklar çağırabilirler.", + "NekromanceĹ™i dokážou probouzet duchy a zombie z ÄŤerstvĂ˝ch hrobĹŻ.", + "Некромант может призывать призраков и зомби из Ńвежих могил.", + "Totenbeschwörer können Geister und Zombies aus frischen Gräbern auferwecken.", + }}, + {0xb872da2c, { // "THE END" + "KONIEC", +/*MISSING*/ "THE END", + "KONEC", + "КОНЕЦ", +/*MISSING*/ "THE END", + }}, + {0xb8868a94, { // "This is applied in HyperRogue to create landscapes, such as the chasms in the land of Reptiles or the Dragon Chasms, which you should find quickly. Also in the Dragon Chasms, you can find a Baby Tortoise, and try to find a matching adult tortoise in the Galápagos. There are over two millions of species, but since there is so much space in hyperbolic geometry, finding a matching tortoise is possible. The brighter the color in Galápagos is, the more aspects of the tortoises in the given area are matching." + "Jest to uĹĽywane w grze do stworzenia krajobrazĂłw, jak przepaĹ›ci w Jaszczurkach lub Smoczych OtchĹ‚aniach, ktĂłre niedĹ‚ugo znajdziesz. W Smoczych OtchĹ‚aniach moĹĽesz znaleźć Żółwika, i poszukać pasujÄ…cego dorosĹ‚ego żółwia w Galápagos. Jest ponad 2 miliony gatunkĂłw, ale ze wzglÄ™du na ilość miejsca w geometrii hiperbolicznej, znalezienie pasujÄ…cego żółwia jest moĹĽliwe. Im jaĹ›niejszy kolor w Galápagos, tym wiÄ™cej aspektĂłw żółwika pasuje do żółwii z danego terenu.", +/*MISSING*/ "This is applied in HyperRogue to create landscapes, such as the chasms in the land of Reptiles or the Dragon Chasms, which you should find quickly. Also in the Dragon Chasms, you can find a Baby Tortoise, and try to find a matching adult tortoise in the Galápagos. There are over two millions of species, but since there is so much space in hyperbolic geometry, finding a matching tortoise is possible. The brighter the color in Galápagos is, the more aspects of the tortoises in the given area are matching.", + "HyperRogue tohoto využívá pro vytvářenĂ­ krajin, jako jsou propasti v zemi JeštÄ›rek nebo v DraÄŤĂ­ch propastech, kterĂ© bys mÄ›l rychle najĂ­t. V DraÄŤĂ­ch propastech mĹŻĹľeš takĂ© najĂ­t Ĺ˝elviÄŤku, a potom se pokusit na Galapágách najĂ­t dospÄ›lou Ĺľelvu, která jĂ­ odpovĂ­dá. Existuje vĂ­ce neĹľ dva miliĂłny druhĹŻ Ĺľelv, ale protoĹľe v hyperbolickĂ© geometrii je tolik mĂ­sta, je moĹľnĂ© najĂ­t tu, která patří ke tvĂ© Ĺ˝elviÄŤce. ÄŚĂ­m jasnÄ›jší barva, tĂ­m vĂ­ce aspektĹŻ Ĺľelv v danĂ© oblasti odpovĂ­dá tvĂ© Ĺ˝elviÄŤce.", + "Фракталы применяютŃŃŹ для Ńоздания пропаŃтей в земле Рептилий и в Драконьей бездне, которые Ń‚Ń‹ быŃтро найдёŃŃŚ. Также в Драконьей бездне Ń‚Ń‹ можеŃŃŚ найти ЧерепаŃĐşŃ Đ¸ попробовать найти её родителей на ГалапагоŃĐ°Ń…. Там живёт более двŃŃ… миллионов видов, но в гиперболичеŃкой геометрии очень много меŃŃ‚Đ°, и найти её вид вполне возможно. Чем ярче цвет клетки, тем больŃе параметров Ńовпадает Ń Ń‚ĐµĐĽ видом, что Ń‚Ń‹ ищеŃŃŚ.", +/*MISSING*/ "This is applied in HyperRogue to create landscapes, such as the chasms in the land of Reptiles or the Dragon Chasms, which you should find quickly. Also in the Dragon Chasms, you can find a Baby Tortoise, and try to find a matching adult tortoise in the Galápagos. There are over two millions of species, but since there is so much space in hyperbolic geometry, finding a matching tortoise is possible. The brighter the color in Galápagos is, the more aspects of the tortoises in the given area are matching.", + }}, + {0xb8a07c50, { // "This Orb halves the power usage of orbs which cost some charges with each activation. It even affects the one-shot orbs such as Flash or Teleport. If such an activation normally costs x charges, it costs only x/2 (rounded up) if you have an Orb of Energy." + "Ta Sfera dwukrotnie zmniejsza zuĹĽycie mocy przez te Sfery, ktĂłrych kaĹĽda aktywacja kosztuje pewnÄ… liczbÄ™ Ĺ‚adunkĂłw. DziaĹ‚a nawet na Sfery jednokrotnego uĹĽytku jak BĹ‚ysk czy Teleport. JeĹ›li normalnie taka aktywacja kosztuje x Ĺ‚adunkĂłw, a masz SferÄ™ Energii, to bÄ™dzie ona kosztowaĹ‚a x/2 Ĺ‚adunkĂłw (zaokrÄ…glone w gĂłrÄ™).", +/*MISSING*/ "This Orb halves the power usage of orbs which cost some charges with each activation. It even affects the one-shot orbs such as Flash or Teleport. If such an activation normally costs x charges, it costs only x/2 (rounded up) if you have an Orb of Energy.", + "NÄ›kterĂ© SfĂ©ry spotĹ™ebujĂ­ kaĹľdou aktivacĂ­ nÄ›jakĂ© mnoĹľstvĂ­ nábojĹŻ. SfĂ©ra Energie sniĹľuje toto mnoĹľstvĂ­ na polovinu. Funguje dokonce i s jednorázovĂ˝mi SfĂ©rami, jako je SfĂ©ra Záblesku nebo Teleportace. Aktivace, která by normálnÄ› stála x nábojĹŻ bude se SfĂ©rou Energie stát pouze x/2 nábojĹŻ (zaokrouhleno nahoru).", + "Đ­Ń‚Đ° Ńфера ŃменьŃает энергию, иŃпользŃемŃŃŽ Đ´Ń€Ńгими Ńферами при активации. Đ­Ń‚Đľ работает даже для одноразовых Ńфер, например, Đ’ŃпыŃки или Телепорта. Đ•Ńли обычно иŃпользование Ńтоило x единиц энергии, Ń‚Đľ Ń ŃŤŃ‚ĐľĐą Ńферой оно бŃдет Ńтоить x/2 единиц (окрŃглённое вверх).", + "Dieser Orb halbiert den Kraftverbrauch von Orbs, die mit jeder Aktivierung Aufladungen verbrauchen. Es beeinflusst auch die einmalig aktivierbaren Orbs wie Lichtblitz oder Teleportation. Verbraucht eine Aktivierung normalerweise x Ladungen, dann verbraucht sie nur x/2 Ladungen (aufgerundet), wenn du einen Orb der Energie besitzt.", + }}, + {0xb8cfc315, { // "spherical" + "sferyczna", +/*MISSING*/ "spherical", + "sfĂ©rická", + "ŃферичеŃкая", +/*MISSING*/ "spherical", + }}, + {0xb8fdc440, { // "A petrified creature." + "Stworzenie zamienione w kamieĹ„.", +/*MISSING*/ "A petrified creature.", + "JakĂ˝si tvor promÄ›nÄ›nĂ˝ v kámen.", + "ОкаменевŃее ŃŃщеŃтво.", + "Eine versteinerte Kreatur.", + }}, + {0xb93299c8, { // "You have improved your total high score on Google. Congratulations!" + "Poprawi%Ĺ‚eĹ›0 swĂłj ogĂłlny najlepszy wynik na Google. Gratulacje!", + "Google'daki toplam yĂĽksek puanını artırdın. Tebrikler!", + "Zlepši%l0 jsi svĂ© celkovĂ© nejvyšší skĂłre na Googleu. Gratulujeme!", + "Đ’Ń‹ поŃтавили рекорд по ĐľĐ±Ń‰ĐµĐĽŃ ŃŃ‡Ń‘Ń‚Ń Đ˛ таблицах Google. Поздравляем!", + "Du hast deinen Gesamtrekord auf Google verbessert! GlĂĽckwunsch!", + }}, + {0xb957e9ce, { // "You join %the1." + "PoĹ‚Ä…czy%Ĺ‚eĹ›0 siÄ™ z %abl1.", + "%abl1 bĂĽtĂĽnleĹźtin.", + "Spoji%l0 ses %s1 %abl1.", + "Đ’Ń‹ вŃтретилиŃŃŚ Ń %abl1.", + "Du fĂĽhrst die %P1 zusammen.", + }}, + {0xb9aa3ece, { // "take me back" + "powrĂłt do menu", +/*MISSING*/ "take me back", + "návrat do menu", + "вернŃŃ‚ŃŚŃŃŹ в меню", + "Bring mich zurĂĽck", + }}, + {0xb9ce32c3, { // "Map loaded from %1" + "Mapa wczytana z %1", + "Harita %1 konumundan yĂĽklendi", + "Mapa naÄŤtena z %1", + "Карта загрŃжена из %1", + "Karte von %1 geladen", + }}, + {0xb9e45a0e, { // "%The1 will be revivable at %2 $$$" + "%1 bÄ™dzie mogĹ‚a oĹĽyć przy %2 $$$", +/*MISSING*/ "%The1 will be revivable at %2 $$$", + "%a1 bude moĹľnĂ© oĹľivit na %2 $$$", + "%1 бŃдет пригоден для возрождения при %2 $$$", +/*MISSING*/ "%The1 will be revivable at %2 $$$", + }}, + {0xb9eae632, { // "%1 takes %his1 revenge on %the2!" + "%1 siÄ™ mĹ›ci!", + "%1 intikamını alıyor!", + "%1 se mstĂ­!", + "%1 бŃдет ĐĽŃтить!", + "%1 nimmt Rache an %dem2 %d2!", + }}, + {0xb9f1b54e, { // "counterclockwise" + "antyzegarowo", +/*MISSING*/ "counterclockwise", + "proti smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek", + "против чаŃовой Ńтрелки", + "gegen den Uhrzeigersinn", + }}, + {0xba0df93c, { // "Cannot push into another player!" + "Nie moĹĽna pchać na innego gracza!", +/*MISSING*/ "Cannot push into another player!", + "NemĹŻĹľeš tlaÄŤit do jinĂ©ho hráče!", + "Нельзя толкать в Đ´Ń€Ńгого игрока!", + "Kann nicht auf einen anderen Spieler ziehen!", + }}, + {0xba80959f, { // "This orb can be used to summon friendly golems. It is used instantly when you pick it up." + "Ta sfera przywoĹ‚uje przyjazne golemy. Jest natychmiast uĹĽywana w momencie podniesienia.", + "Bu kĂĽre size dost golemler çağırmak için kullanılır. Onu eline aldığında anında kullanılır.", + "Tuto sfĂ©ru mĹŻĹľeš použít k vyvolánĂ­ přátelskĂ˝ch golemĹŻ. PouĹľije se automaticky, jakmile ji sebereš.", + "Đ­Ń‚Đ° Ńфера призывает Đ´Ń€ŃжеŃтвенных големов. Она Ńрабатывает, как только Đ’Ń‹ её поднимаете.", + "Dieser Orb dient dazu verbĂĽndete Golems herbeizurufen. Er wird aktiviert, sobald du ihn aufhebst.", + }}, + {0xbad9db6a, { // "You damage %the1 with a mental blast!" + "Zrani%Ĺ‚eĹ›0 %a1 mocÄ… psychicznÄ…!", +/*MISSING*/ "You damage %the1 with a mental blast!", + "Zrani%l0 jsi %a1 mentálnĂ­m Ăştokem!", + "Đ’Ń‹ атаковали %a1 энергией ĐĽŃ‹Ńли!", + "Du schädigst %den1 %a1 mit einem mentalen StoĂź!", + }}, + {0xbae8597e, { // "An alternative version of Orb of the Sword. If you have both of them, you have two energy swords, facing in opposite directions." + "Alternatywna wersja Sfery Ostrza. JeĹ›li masz obie, masz dwa ostrza energii, skierowane w przeciwnych kierunkach.", +/*MISSING*/ "An alternative version of Orb of the Sword. If you have both of them, you have two energy swords, facing in opposite directions.", + "AlternativnĂ­ verze SfĂ©ry MeÄŤe. Pokud máš obÄ› zároveĹ, budeš mĂ­t dva energetickĂ© meÄŤe namĂ­Ĺ™enĂ© do opaÄŤnĂ˝ch smÄ›rĹŻ..", + "ДрŃгая верŃия Сферы меча. Đ•Ńли Ń Đ˛Đ°Ń ĐµŃŃ‚ŃŚ обе, Ń‚Đľ вы имеете два меча, направленные в противоположные Ńтороны.", + "Eine alternative Variante des Orbs des Schwertes. Wenn du beide Orbs besitzt, hast du zwei Energieschwerter, die in entgegengesetzte Richtungen zeigen.", + }}, + {0xbb2abf97, { // "seven players" + "siedmiu graczy", +/*MISSING*/ "seven players", + "sedm hráčů", + "Ńемь игроков", + "sieben Spieler", + }}, + {0xbb5ccdb9, { // "You can go inside the Magic Mirror, and produce some mirror images to help you." + "MoĹĽesz wejść w Magiczne Lustro, by Twoje odbicia z niego wyszĹ‚y i Ci pomogĹ‚y.", + "Sihirli aynanın içine girerek sana yardım etmesi için bazı yansımalar ĂĽretebilirsin.", + "Do KouzelnĂ©ho zrcadla mĹŻĹľeš vstoupit a vytvoĹ™it nÄ›kolik zrcadlovĂ˝ch obrazĹŻ, kterĂ© ti pomohou.", + "Đ’Ń‹ можете пройти в МагичеŃкое зеркало и Ńоздать отражения, которые бŃĐ´ŃŃ‚ Đ’Đ°ĐĽ помогать.", + "Du kannst den Zauberspiegel betreten, um Spiegelbilder zu erzeugen, die dir helfen.", + }}, + {0xbb82f716, { // "The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, might appear shallow, but hyperbolic geometry is essential even there. In the next slide, you are attacked by two monsters at once. You can make them line up simply by running away in a straight line. Press '2' to try the same in the Euclidean world -- it is impossible." + "Taktyka walki z prostymi potworami, jak Yeti z Krainy Lodu, moĹĽe siÄ™ wydawać pĹ‚ytka, ale geometria hiperboliczna jest istotna nawet tu. W nastÄ™pnym slajdzie atakujÄ… CiÄ™ 2 potwory naraz. MoĹĽesz uciec po prostu odchodzÄ…c od nich w linii prostej. NaciĹ›nij '2', by sprĂłbować tego w Ĺ›wiecie euklidesowym -- jest to niemoĹĽliwe.", +/*MISSING*/ "The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, might appear shallow, but hyperbolic geometry is essential even there. In the next slide, you are attacked by two monsters at once. You can make them line up simply by running away in a straight line. Press '2' to try the same in the Euclidean world -- it is impossible.", + "Taktika boje proti jednoduchĂ˝m netvorĹŻm, jako jsou například YetiovĂ© z LedovĂ©ho kraje, mĹŻĹľe vypadat jednoduše, ale i tam je hyperbolická geometrie zásadnĂ­. Na dalším snĂ­mku na tebe ĂştoÄŤĂ­ dva netvoĹ™i najednou. Pokud budeš utĂ­kat po přímce, pĹ™inutíš je, aby se seĹ™adili. Stiskni klávesu '2', abys to samĂ© zkusil v eukleidovskĂ©m svÄ›tÄ› -- je to nemoĹľnĂ©.", + "Тактика боя Ń ĐżŃ€ĐľŃтыми монŃтрами, такими как Йети из Ледяной земли, может показатьŃŃŹ обычной, но геометрия важна и здеŃŃŚ. На ŃледŃющем Ńлайде тебя Đ°Ń‚Đ°ĐşŃŃŽŃ‚ ŃŃ€Đ°Đ·Ń Đ´Đ˛Đ° монŃтра. Ты можеŃŃŚ ŃправитьŃŃŹ Ń Đ˝Đ¸ĐĽĐ¸, проŃŃ‚Đľ отходя по прямой. Нажми '2', чтобы попробовать Ńделать Ń‚Đľ же Ńамое в евклидовом мире -- ничего не выйдет.", +/*MISSING*/ "The tactics of fighting simple monsters, such as the Yetis from the Icy Lands, might appear shallow, but hyperbolic geometry is essential even there. In the next slide, you are attacked by two monsters at once. You can make them line up simply by running away in a straight line. Press '2' to try the same in the Euclidean world -- it is impossible.", + }}, + {0xbbbed4ae, { // "Multiplayer: Play cooperatively (locally); treasures, kills, and deaths are calculated for each player too, for more competitive play. Orbs and treasures are shared, orbs drain faster, knives recharge slower, and player characters are not allowed to separate.\n\n" + "Wielu graczy: współpracujecie (lokalnie); moĹĽna teĹĽ współzawodniczyć o skarby i zabicia, ktĂłre sÄ… liczone dla kaĹĽdego gracza. Sfery i skarby sÄ… dzielone, sfery wyczerpujÄ… siÄ™ szybciej, noĹĽe wracajÄ… wolniej, i gracze nie mogÄ… siÄ™ rozdzielać.\n\n", +/*MISSING*/ "Multiplayer: Play cooperatively (locally); treasures, kills, and deaths are calculated for each player too, for more competitive play. Orbs and treasures are shared, orbs drain faster, knives recharge slower, and player characters are not allowed to separate.\n\n", + "VĂ­ce hráčů: Zde mĹŻĹľe hrát nÄ›kolik hráčů kooperativnÄ› (lokálnÄ›); poklady, zabitĂ­ netvoĹ™i a ĂşmrtĂ­ se poÄŤĂ­tajĂ­ pro kaĹľdĂ©ho hráče zvlášť, aby se dalo hrát kompetitivnÄ›ji. SfĂ©ry a poklady se sdĂ­lejĂ­, sfĂ©ry se vyÄŤerpávajĂ­ rychleji, noĹľe se dobĂ­jejĂ­ pomaleji a postavy se nesmÄ›jĂ­ příliš vzdálit.\n\n", + "ĐśŃльтиплеер: Đграйте ŃовмеŃтно (локально); Ńокровища, ŃбийŃтва и Ńмерти ŃчитаютŃŃŹ отдельно, Ńферы и Ńокровища ŃкладываютŃŃŹ, Ńферы ŃгаŃĐ°ŃŽŃ‚ быŃтрее, ножи воŃŃтанавливаютŃŃŹ медленнее, игроки не могŃŃ‚ Ńильно разделятьŃŃŹ.\n\n", + "Mehrspieler: Spiele gemeinsam (lokal); Schätze, Tötungen und Tode werden fĂĽr ein mehr wettstreitorientiertes Spiel zusätzlich fĂĽr jeden Spieler einzeln berechnet.Orbs und Schätze werden miteinander geteilt; Orbs werden schneller verbraucht, Messer werden langsamer wiederaufgeladen, und die Spielfiguren dĂĽrfen sich nicht weit voneinander entfernen.\n\n", + }}, + {0xbccfd5d0, { // "Static mode enabled." + "Tryb statyczny wĹ‚Ä…czony.", +/*MISSING*/ "Static mode enabled.", + "StatickĂ˝ mĂłd zapnut.", + "Статичный режим включен.", +/*MISSING*/ "Static mode enabled.", + }}, + {0xbcd35cbc, { // "These people study gravity and infinite trees. They have no special features, other than wearing a strange hat." + "Ci ludzie badajÄ… grawitacjÄ™ i drzewa nieskoĹ„czone. Nie majÄ… szczegĂłlnych wĹ‚asnoĹ›ci poza swoim dziwnym nakryciem gĹ‚owy.", +/*MISSING*/ "These people study gravity and infinite trees. They have no special features, other than wearing a strange hat.", + "Tito lidĂ© studujĂ­ gravitaci a nekoneÄŤnĂ© stromy. KromÄ› svĂ˝ch podivnĂ˝ch ÄŤepic nemajĂ­ žádnĂ© zvláštnĂ­ schopnosti.", + "Эти люди изŃчают гравитацию и беŃконечные деревья. Они ничем не отличаютŃŃŹ от обычных людей, кроме этих Ńтранных Ńляп.", + "Diese Leute studieren die Gravitation und unendliche Bäume. Sie haben keine besonderen Eigenschaften auĂźer dem Tragen eines seltsamen Hutes.", + }}, + {0xbcf4a764, { // "There is not enough space!" + "Nie ma miejsca!", + "Yeterince yer yok!", + "NenĂ­ tady dost mĂ­sta!", + "Нет меŃŃ‚Đ°!", + "Zu wenig Platz!", + }}, + {0xbcf9f5e6, { // "You feel something strange about gravity here..." + "Czujesz coĹ› dziwnego z grawitacjÄ… tutaj...", +/*MISSING*/ "You feel something strange about gravity here...", + "CĂ­tíš, Ĺľe na zdejší gravitaci je cosi podivnĂ©ho...", + "Đ’Ń‹ чŃвŃтвŃете, что Ń ĐłŃ€Đ°Đ˛Đ¸Ń‚Đ°Ń†Đ¸ĐµĐą здеŃŃŚ что-Ń‚Đľ не Ń‚Đ°Đş...", +/*MISSING*/ "You feel something strange about gravity here...", + }}, + {0xbcfaeaff, { // "A Witch with a Speed spell. She moves twice as fast as you. Unless you have an Orb of Speed too, of course!" + "Czarownica z czarem SzybkoĹ›ci. Rusza siÄ™ dwa razy szybciej od Ciebie. Chyba, ĹĽe Ty teĹĽ masz SferÄ™ SzybkoĹ›ci!", + "Hız bĂĽyĂĽsĂĽ olan bir Cadı. Senden iki kat hızlı hareket eder. Tabi senin de bir Hız KĂĽren yoksa!", + "ÄŚarodÄ›jnice s kouzlem Rychlosti. Pohybuje se dvakrát rychleji neĹľ ty. SamozĹ™ejmÄ›, pokud náhodou takĂ© nemáš SfĂ©ru Rychlosti!", + "Ведьма Ń Đ·Đ°ĐşĐ»Đ¸Đ˝Đ°Đ˝Đ¸ĐµĐĽ ŃкороŃŃ‚ŃŚ. Она движетŃŃŹ в 2 раза быŃтрее Đ’Đ°Ń. Đ•Ńли Ń Đ’Đ°Ń Đ˝ĐµŃ‚ того же заклинания, конечно!", + "Eine Geschwindigkeitshexe, sie bewegt sich doppelt so schnell wie du. AuĂźer natĂĽrlich, du hast auch einen Orb der Geschwindigkeit!", + }}, + {0xbd7bf660, { // "You cannot attack Tentacles directly!" + "Nie moĹĽesz atakować Macek wprost!", + "Dokungaçlara doÄźrudan saldıramazsın!", + "Na Chapadla nemĹŻĹľeš ĂştoÄŤit přímo!", + "Đ’Ń‹ не можете атаковать щŃпальца КтŃлхŃ!", + "Du kannst Tentakel nicht direkt angreifen!", + }}, + {0xbdca60db, { // "0 - return" + "0 - powrĂłt", +/*MISSING*/ "0 - return", + "0 - návrat", + "0 - вернŃŃ‚ŃŚŃŃŹ", +/*MISSING*/ "0 - return", + }}, + {0xbe010ea9, { // "only native Orbs allowed in %the1" + "tylko rodzime sfery %abl1", + "%abl1 sadece oraya özgĂĽ KĂĽreler kullanılabilir.", + "%abl1 jsou povoleny pouze náležícĂ­ SfĂ©ry", + "только родные Ńферы Đ´ĐľŃŃ‚Ńпны %abl1", + "Nur heimische Orbs in %der1 erlaubt", + }}, + {0xbe125228, { // "You gain your protective Shell back!" + "Masz SkorupÄ™ z powrotem!", +/*MISSING*/ "You gain your protective Shell back!", + "ZĂ­skal jsi zpátky svĹŻj ochrannĂ˝ Krunýř!", + "Đ’Ń‹ вернŃли Ńвою раковинŃ!", +/*MISSING*/ "You gain your protective Shell back!", + }}, + {0xbe458555, { // "You have a vision of the future, fighting demons in Hell..." + "Masz wizjÄ™ przyszĹ‚oĹ›ci, w ktĂłrej walczysz z demonami w Piekle...", + "GeleceÄźini gördĂĽn, Cehennemde Ĺźeytanlarla savaşıyordun...", + "Máš vizi budoucnosti; vidíš se, jak bojuješ s pekelnĂ˝mi dĂ©mony...", + "Đ’Ń‹ видите Ńебя в бŃĐ´Ńщем, Ńбивающего демонов в ĐĐ´Ń...", + "Du hast eine Vision, du wirst in der Zukunft Dämonen in der Hölle bekämpfen...", + }}, + {0xbeae1fd0, { // "One of few things that does not cause the floor in the Land of Eternal Motion to collapse. Obviously they are quite valuable." + "PiĂłro Feniksa jest tak lekie, ĹĽe podĹ‚oga z Krainy Wiecznego Ruchu pod nim siÄ™ nie zapada. Takie piĂłra muszÄ… być bardzo cenne.", + "Hareketler Diyarında yerlerin çökmemesini saÄźlayan ender Ĺźeylerden biri. Bunlar, tabi ki epey deÄźerli.", + "Jedna z mála vÄ›cĂ­, pod kterou se v Kraji věčnĂ©ho pohybu nepropadá zemÄ›. Tato pĂ­rka jsou samozĹ™ejmÄ› velice cenná.", + "ЕдинŃтвенная вещь, которŃŃŽ выдерживает пол в Земле вечного движения. Очевидно, довольно ценно.", + "Eines der wenigen Dinge, die den Boden im Land der ewigen Bewegung nicht einstĂĽrzen lassen. Sie sind offensichtlich sehr wertvoll.", + }}, + {0xbeb77adf, { // "You can walk on it... but beware." + "MoĹĽesz tu przejść, ale uwaĹĽaj!", + "Ăśzerinde yĂĽrĂĽyebilirsin. Ama dikkatli ol!", + "MĹŻĹľeš po nÄ›m chodit... ale pozor.", + "Đ’Ń‹ можете пойти ŃŃŽĐ´Đ°, но бŃдьте ĐľŃторожны!", + "Du kannst darauf gehen... aber Vorsicht.", + }}, + {0xbec253f3, { // "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 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!" + "Trafi%Ĺ‚eĹ›0 do dziwnej, nieeuklidesowej krainy. ZdobÄ…dĹş jak najwiÄ™cej skarbĂłw, zanim potwory CiÄ™ dopadnÄ…. Im wiÄ™cej zdobÄ™dziesz skarbĂłw, tym wiÄ™cej potworĂłw w danej krainie na Ciebie poluje. Sfery Yendoru sÄ… skarbem ostatecznym: zdobÄ…dĹş SferÄ™ Yendoru, by wygrać grÄ™!", + "Garip ve Ă–kliddışı bir dĂĽnyada hapsoldun. Canavarlar tarafından yakalanmadan önce olabildiÄźince hazine topla.Aynı arazi tipinde daha fazla hazine topladıkça,daha fazla canavar sana saldıracak.Yendor'un kĂĽreleri nihai hazinelerdir, onlardan bir tane ile oyunu kazanabilirsin!", + "Jsi uvÄ›znÄ›n v podivnĂ©m, neeukleidovskĂ©m svÄ›tÄ›. SesbĂ­rej co nejvĂ­ce pokladĹŻ, neĹľ tÄ› dostanou netvoĹ™i. ÄŚĂ­m vĂ­c pokladĹŻ sebereš, tĂ­m vĂ­c netvorĹŻ po tobÄ› pĹŻjde, dokud budeš ve stejnĂ©m typu kraje. NejvÄ›tším pokladem jsou YendorskĂ© sfĂ©ry: zĂ­skáš-li alespoĹ jednu z nich, vyhraješ hru!", + "Đ’Ń‹ оказалиŃŃŚ заперты в Ńтранном неевклидовом мире. Соберите как можно больŃе Ńокровищ перед тем как Đ’Đ°Ń ĐżĐľĐąĐĽĐ°ŃŽŃ‚ монŃтры. Чем больŃе Ńокровищ Đ’Ń‹ Ńобираете, тем больŃе монŃтров на Đ’Đ°Ń ĐľŃ…ĐľŃ‚Đ¸Ń‚ŃŃŹ, пока Đ’Ń‹ находитеŃŃŚ на одной территории. Сферы Йендора - Ńникальные Ńокровища; Ńоберите хотя бы однŃ, чтобы выиграть!", + "Du wurdest in einer seltsamen, nicht-euklidischen Welt gefangen... Sammle so viele Schätze wie du kannst, bevor dich die Monster fangen. Je mehr Schätze du hast, desto mehr Monster werden dich jagen bis du das Land verlässt. Die Orbs von Yendor sind der ultimative Schatz - sammle mindestens eine um zu gewinnen!", + }}, + {0xbf0ab4a0, { // "You just cannot stand in place, those roses smell too nicely." + "Nie moĹĽesz stać w miejscu, róże zbyt Ĺ‚adnie pachnÄ….", +/*MISSING*/ "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Ă­.", + "Đ’Ń‹ не можете ŃŃтоять на меŃте, эти розы пахнŃŃ‚ ŃлиŃком прекраŃно.", + "Du kannst einfach nicht stehen bleiben - diese Rosen duften zu gut.", + }}, + {0xbf1a2063, { // "Warnings are issued when you try to do something that appears dangerous, like stepping on a known mine, or getting your boat destroyed by a Kraken without having Orb of the Fish. In some cases the action might actually be safe -- so you can ignore the warning and do it anyway, simply by repeating the action." + "OstrzeĹĽenia pokazujÄ… siÄ™, gdy prĂłbujesz zrobić coĹ› niebezpiecznego: stanąć na minie, spowodować zniszczenie Ĺ‚Ăłdki przez Krakena bez Sfery Ryby, itp. W niektĂłrych przypadkach moĹĽe to być bezpieczne -- takĹĽe moĹĽesz zignorować ostrzeĹĽenie, po prostu prĂłbujÄ…c wykonać akcjÄ™ jeszcze raz.", +/*MISSING*/ "Warnings are issued when you try to do something that appears dangerous, like stepping on a known mine, or getting your boat destroyed by a Kraken without having Orb of the Fish. In some cases the action might actually be safe -- so you can ignore the warning and do it anyway, simply by repeating the action.", + "VarovánĂ­ se objevĂ­, kdyĹľ se pokusĂ­te udÄ›lat nÄ›co, co vypadá nebezpeÄŤnÄ›, jako je šlápnutĂ­ na polĂ­ÄŤko, kde vĂ­te, Ĺľe je mina, nebo riskovánĂ­, Ĺľe vám Kraken zniÄŤĂ­ loÄŹku, kdyĹľ nemáte SfĂ©ru Ryby. V nÄ›kterĂ˝ch případech mĹŻĹľe bĂ˝t taková vÄ›c ve skuteÄŤnosti bezpeÄŤná -- a proto je moĹľnĂ© opakovánĂ­m akce varovánĂ­ ignorovat a stejnÄ› to udÄ›lat.", + "ПредŃпреждения возникают, когда вы пытаетеŃŃŚ Ńделать что-Ń‚Đľ опаŃное: наŃŃ‚Ńпить на извеŃŃ‚Đ˝ŃŃŽ минŃ, позволить ĐšŃ€Đ°ĐşĐµĐ˝Ń Ńничтожить ваŃŃ Đ»ĐľĐ´ĐşŃ Đ±ĐµĐ· Сферы Рыбы, и Ń‚. Đż. Đногда эти дейŃтвия на Ńамом деле безопаŃны -- вы можете проигнорировать предŃпреждение, проŃŃ‚Đľ повторив дейŃтвие.", + "Es werden Warnungen ausgegeben wenn du versuchst etwas zu tun das gefährlich scheint wieauf eine bekannte Mine treten oder wenn ein Krake dein Boot zerstören wĂĽrde während du keinen Orb des Fischs besitzt. In einigen Fällen mag deine Aktion tatsächlich ungefährlich sein. Dann kannst du die Warnung ignorieren und es trotzdem tun, indem du die Aktion einfach wiederholst.", + }}, + {0xbf2d0f78, { // "You feel that the stars are right, and you can access R'Lyeh!" + "Gwiazdy sÄ… na miejscu, R'Lyeh czeka!", + "Yıldızlar sana, R'Lyeh'e ulaĹźabileceÄźini söylĂĽyor!", + "CĂ­tíš, Ĺľe postavenĂ­ hvÄ›zd je správnĂ©, a ty mĹŻĹľeš vstoupit do R'Lyeh!", + "Đ’Ń‹ чŃвŃтвŃете, что звёзды правы, Đ’Ń‹ можете открыть Đ 'Льех!", + "Die Sterne stehen gĂĽnstig, du kannst R´Lyeh erreichen!", + }}, + {0xbf3fc51e, { // "Screenshot saved to %1" + "Zrzut ekranu zapisany do %1", + "Ekran görĂĽntĂĽsĂĽ %1 konumuna kaydedildi.", + "SnĂ­mek obrazovky uloĹľen do %1", + "СкринŃот Ńохранён в %1", + "Screenshot nach %1 gespeichert", + }}, + {0xbf582b3c, { // "last messages:" + "ostatnie wiadomoĹ›ci: ", + "son mesajlar: ", + "poslednĂ­ zprávy: ", + "поŃледние Ńообщения: ", + "Letzte Nachrichten: ", + }}, + {0xbf7d0fe1, { // "Cold white gems, found in the Icy Land." + "Zimne biaĹ‚e kamienie z Krainy Lodu.", + "Buz Diyarlarında bulunan soÄźuk beyaz mĂĽcevherler.", + "ChladnĂ© bĂ­lĂ© drahokamy, kterĂ© se nacházejĂ­ v LedovĂ©m kraji.", + "Холодные белые камни, найденные в Ледяной земле.", + "Kalte weiĂźe Edelsteine aus dem Eisigen Land.", + }}, + {0xbfd31f6f, { // "You'll need your magical sword against the Draugar!" + "Potrzebujesz magicznego miecza przeciwko Draugrom!", +/*MISSING*/ "You'll need your magical sword against the Draugar!", + "Proti DraugarĹŻm budeš potĹ™ebovat kouzelnĂ˝ meÄŤ!", + "Против ДраŃгра Đ’Đ°ĐĽ понадобитŃŃŹ магичеŃкий меч!", +/*MISSING*/ "You'll need your magical sword against the Draugar!", + }}, + {0xbfdce89a, { // "b = reorder" + "b = kolejność", + "b = yeniden sırala", + "b = změŠuspořádánĂ­", + "b = порядок", + "b = neu anordnen", + }}, + {0xc01131cf, { // "This false prince is immune to the alluring scent of roses." + "Ten faĹ‚szywy ksiÄ…ĹĽÄ™ jest niewraĹĽliwy na zapach róż.", +/*MISSING*/ "This false prince is immune to the alluring scent of roses.", + "Tento falešnĂ˝ princ je imunnĂ­ vĹŻÄŤi vábivĂ© vĹŻni růží.", + "Этот ложный принц невоŃприимчив Đş ароматам роз.", + "Dieser falsche Prinz ist immun gegenĂĽber dem verlockenden Duft der Rosen.", + }}, + {0xc03bfc26, { // "Teleported to %1!" + "Przeniesiono w %abl1", + "%loc1 e ışınlandın.", + "Teleportova%l0 ses; nynĂ­ jsi %abl1", + "Đ’Ń‹ телепортированы %abl1", + "Nach %1 teleportiert", + }}, + {0xc065f905, { // "Extremely narrow Crossroads layout.\n" + "Skrajnie wÄ…ski ukĹ‚ad SkrzyĹĽowaĹ„.", +/*MISSING*/ "Extremely narrow Crossroads layout.\n", + "Velmi Ăşzká verze KĹ™iĹľovatky.", + "Очень Ńзкий вариант ПерекрёŃтка.", +/*MISSING*/ "Extremely narrow Crossroads layout.\n", + }}, + {0xc123b9e6, { // "A big and quite intelligent monster living in the Icy Land." + "DuĹĽa i caĹ‚kiem inteligentna bestia z Krainy Lodu.", + "Buz Diyarlarında yaĹźayan bĂĽyĂĽk ve epey zeki bir canavar.", + "VelkĂ˝ a dosti inteligentnĂ­ netvor, kterĂ˝ Ĺľije v LedovĂ©m kraji.", + "БольŃой и довольно Ńмный монŃŃ‚Ń€ из Ледяной земли.", + "Ein groĂźes und äuĂźerst intelligentes Monster das im Eisigem Land lebt.", + }}, + {0xc1661595, { // "How long should the messages stay on the screen." + "Jak dĹ‚ugo wiadomoĹ›ci zostajÄ… na ekranie", +/*MISSING*/ "How long should the messages stay on the screen.", + "Jak dlouho zĂąstanou zprávy na obrazovce", + "Как долго Ńообщения ĐľŃŃ‚Đ°ŃŽŃ‚ŃŃŹ на экране", +/*MISSING*/ "How long should the messages stay on the screen.", + }}, + {0xc167cfca, { // "down" + "dół", +/*MISSING*/ "down", + "dolĹŻ", + "вниз", + "runter", + }}, + {0xc1731760, { // "You take the Illusion away." + "Zabierasz iluzjÄ™!", + "Ä°llĂĽzyonu yok ettin.", + "Zrušil jsi iluzi.", + "Đ’Ń‹ забрали иллюзию!", + "Du entfernst die Illusion.", + }}, + {0xc1916916, { // "This is what Hyperbug Queens eat. Very tasty and healthy." + "PoĹĽywienie KrĂłlowej HiperinsektĂłw, bardzo smaczne i zdrowe.", + "Bu AĹźkınböcek Kraliçelerinin yediÄźi Ĺźey. Çok lezzetli ve saÄźlıklı.", + "Tohle je potrava, kterou jedĂ­ Královny hyperhmyzákĹŻ. Velmi chutná a zdravá.", + "Đ­Ń‚Đľ - еда королевы гипержŃков. Очень вкŃŃно и полезно.", + "Dieses Gelee wird von Hyperkäfer-Königinnen gegessen. Sehr schmackhaft und gesund.", + }}, + {0xc1a86dba, { // "Hyperstone Quest: collect at least %3 %1 in %the2" + "Misja alternatywna: znajdĹş co najmniej %3 skarbĂłw %abl2", + "AĹźkıntaĹź Görevi: %2'de en az %3 hazine topla.", + "HyperkamovĂ˝ Ăşkol: sesbĂ­rej nejmĂ©nÄ› %3 pokladĹŻ %abl2", + "МиŃŃия Гиперкамня: Ńоберите %3 драгоценноŃтей в %abl2", + "Hyperstein-Herausforderung: Sammle %3 %P1 %a2", + }}, + {0xc1d694c6, { // "This monster leaves a trail of fire behind." + "Ten ĹĽywioĹ‚ak zostawia za sobÄ… Ĺ›cianÄ™ ognia.", + "Bu canavar arkasında ateĹźten bir iz bırakıyor.", + "Tento netvor za sebou zanechává ohnivou stopu.", + "Этот Элементаль ĐľŃтавляет Đ·Đ° Ńобой Ńлед Огня.", + "Dieses Monster hinterlässt einen brennenden Pfad.", + }}, + {0xc23cf11e, { // "Apparently a princess is kept locked somewhere, but you won't ever find her in this hyperbolic palace. " + "GdzieĹ› tu jest uwiÄ™ziona księżniczka, ale w tym hiperbolicznym paĹ‚acu nigdy jej nie znajdziesz. ", + "GörĂĽnen o ki, bir prenses bir yerlerde saklı tutuluyor, ama bu hiperbolik sarayda onu bulman mĂĽmkĂĽn deÄźil. ", + "NÄ›kde je tu prĂ˝ uvÄ›znÄ›ná princezna, ale tu v tomhle hyperbolickĂ©m paláci nikdy nenajdeš. ", + "Видимо, принцеŃŃĐ° где-Ń‚Đľ заперта, но в гиперболичеŃком дворце Đ’Ń‹ её не найдёте. ", + "Scheinbar ist irgendwo eine Prinzessin eingesperrt, Aber du wirst sie in diesem hyperbolischem Palast nie finden. ", + }}, + {0xc24ac2cd, { // "Scores retrieved." + "Wyniki Ĺ›ciÄ…gniÄ™te.", + "Puanlar yĂĽklendi.", + "SkĂłre staĹľena.", + "РезŃльтаты полŃчены.", + "Rekorde empfangen.", + }}, + {0xc24cb3b5, { // "conformal/history mode" + "tryb konforemny/historii", +/*MISSING*/ "conformal/history mode", + "konformálnĂ­ mĂłd / historie", + "режим конформный/иŃтории", + "konformer/historischer Modus", + }}, + {0xc298f3eb, { // "Hyperstone Quest: collect at least %3 points in %the2" + "Misja HiperkamieĹ„: zdobÄ…dĹş co najmniej %3 punktĂłw %abl2", +/*MISSING*/ "Hyperstone Quest: collect at least %3 points in %the2", + "HyperkamovĂ˝ Ăşkol: zĂ­skej nejmĂ©nÄ› %3 bodĹŻ %abl2", + "МиŃŃия Гиперкамней: Ńобери не меньŃе %3 очков %abl2", + "Hyperstein-Herausforderung: sammle mindestens %3 Punkte %abl2", + }}, + {0xc34d6cef, { // "The next slide shows the number of cells in distance 1, 2, 3, ... from you. It grows exponentially: there are more than 10^100 cells in radius 1000 around you, and you will move further away during the game!\n\nThis is extremely important in the design of HyperRogue. HyperRogue has many navigational puzzles -- what would be simple in Euclidean world is extremely tricky in hyperbolic geometry (you want to reach a specific location 20 cells away, which of the thousands of possible directions should you take?); however, other things virtually impossible in Euclidean world become easy in HyperRogue. HyperRogue had to be specially designed so that it is impossible to grind the infinite world. There are almost no permanent upgrades; collecting treasures brings you benefits, but trying to get too many of the same kind is extremely dangerous." + "Kolejny slajd pokazuje liczbÄ™ pĂłl w odlegĹ‚oĹ›ci 1, 2, 3, ... od Ciebie. RoĹ›nie ona wykĹ‚adniczo: jest ponad 10^100 pĂłl w promieniu 1000 od Ciebie, i w trakcie gry bÄ™dziesz odchodzić dalej!\n\nJest to bardzo waĹĽne dla designu HyperRogue. SÄ… tu zagadki nawigacyjne -- coĹ› co by byĹ‚o proste w Ĺ›wiecie euklidesowej wymaga przemyĹ›lenia w geometrii hiperbolicznej (chcesz dostać siÄ™ do miejsca 20 pĂłl od Ciebie, ktĂłry z tysiÄ…ca moĹĽliwych kierunkĂłw wybrać?); z kolei inne rzeczy stajÄ… siÄ™ tu Ĺ‚atwe. Gra HyperRogue jest zaprojektowana tak, by nie daĹ‚o siÄ™ 'grindować' nieskoĹ„czonego Ĺ›wiata -- prawie nie ma permanentnych ulepszeĹ„, zbieranie skarbĂłw przynosi poĹĽytki, ale zdobycie wielu jednego rodzaju jest skrajnie niebezpieczne.", +/*MISSING*/ "The next slide shows the number of cells in distance 1, 2, 3, ... from you. It grows exponentially: there are more than 10^100 cells in radius 1000 around you, and you will move further away during the game!\n\nThis is extremely important in the design of HyperRogue. HyperRogue has many navigational puzzles -- what would be simple in Euclidean world is extremely tricky in hyperbolic geometry (you want to reach a specific location 20 cells away, which of the thousands of possible directions should you take?); however, other things virtually impossible in Euclidean world become easy in HyperRogue. HyperRogue had to be specially designed so that it is impossible to grind the infinite world. There are almost no permanent upgrades; collecting treasures brings you benefits, but trying to get too many of the same kind is extremely dangerous.", + "Další snĂ­mek ukazuje poÄŤet polĂ­ÄŤek ve vzdálenosti 1, 2, 3, ... od tebe. Roste exponenciálnÄ›: v kruhu o polomÄ›ru 1000 kolem tebe je vĂ­ce neĹľ 10^100 polĂ­ÄŤek, a bÄ›hem hry dojdeš ještÄ› dál!\n\nTento fakt je pro design HyperRogue velmi dĹŻleĹľitĂ˝. Hra obsahuje mnoho navigaÄŤnĂ­ch hádanek -- to, co by v eukleidovskĂ©m svÄ›tÄ› bylo jednoduchĂ©, je v hyperbolickĂ© geometrii extrĂ©mnÄ› sloĹľitĂ© (chceš se dostat na urÄŤitĂ© mĂ­sto 20 polĂ­ÄŤek daleko -- kterĂ˝m z tisĂ­cĹŻ moĹľnĂ˝ch smÄ›rĹŻ se máš vydat?); na druhou stranu, jinĂ© vÄ›ci, kterĂ© jsou v eukleidovskĂ©m svÄ›tÄ› prakticky nemoĹľnĂ©, jsou v HyperRogue snadnĂ©. HyperRogue musel bĂ˝t speciálnÄ› navrĹľen tak, aby se v jeho nekoneÄŤnĂ©m svÄ›tÄ› nedalo grindovat. Nejsou v nÄ›m tĂ©měř žádnĂ© trvalĂ© upgrady; sbĂ­ránĂ­ pokladĹŻ ti pĹ™ináší vĂ˝hody, ale pokud se pokusíš zĂ­skat příliš mnoho pokladĹŻ jednoho druhu, bude to nesmĂ­rnÄ› nebezpeÄŤnĂ©.", + "СледŃющий Ńлайд покажет количеŃтво клеток на раŃŃтоянии 1, 2, 3, ... от тебя. Оно раŃŃ‚Ń‘Ń‚ ŃŤĐşŃпоненциально: в радиŃŃе 1000 клеток от тебя находитŃŃŹ более 10^100 клеток, Đ° Ń‚Ń‹ Đ·Đ° время игры ŃйдёŃŃŚ гораздо дальŃе!\n\nĐ­Ń‚Đľ очень важно для HyperRogue. ЗдеŃŃŚ еŃŃ‚ŃŚ много загадок навигации -- Ń‚Đľ, что очень проŃŃ‚Đľ в евклидовой геометрии, ŃтановитŃŃŹ невероятно Ńложным в гиперболичеŃкой геометрии (Ń‚Ń‹ хочеŃŃŚ попаŃŃ‚ŃŚ в определённŃŃŽ ĐşĐ»ĐµŃ‚ĐşŃ Đ˝Đ° раŃŃтоянии 20 от тебя, какое из Ń‚Ń‹Ńяч направлений выбрать?); однако Đ´Ń€Ńгие вещи, практичеŃки невозможные в евклидовом мире, здеŃŃŚ очень проŃŃ‚Ń‹. Đгра HyperRogue Ńделана Ń‚Đ°Đş, чтобы было невозможно проŃŃ‚Đľ захватывать беŃконечный мир -- практичеŃки нет поŃтоянных ŃĐ»ŃчŃений, Ńбор Ńокровищ Đ´Đ°Ń‘Ń‚ преимŃщеŃтва, но Ńобирать много Ńокровищ одного вида веŃŃŚĐĽĐ° опаŃно.", +/*MISSING*/ "The next slide shows the number of cells in distance 1, 2, 3, ... from you. It grows exponentially: there are more than 10^100 cells in radius 1000 around you, and you will move further away during the game!\n\nThis is extremely important in the design of HyperRogue. HyperRogue has many navigational puzzles -- what would be simple in Euclidean world is extremely tricky in hyperbolic geometry (you want to reach a specific location 20 cells away, which of the thousands of possible directions should you take?); however, other things virtually impossible in Euclidean world become easy in HyperRogue. HyperRogue had to be specially designed so that it is impossible to grind the infinite world. There are almost no permanent upgrades; collecting treasures brings you benefits, but trying to get too many of the same kind is extremely dangerous.", + }}, + {0xc370670a, { // "Collect %1 $$$ to access even more lands" + "ZnajdĹş %1 $$$ by iść do kolejnych krain", + "Daha da fazla diyara ulaĹźmak için %1 $$$ toplayın.", + "SesbĂ­ránĂ­m %1 $$$ zĂ­skáš přístup do dalších krajĹŻ", + "Соберите %1 $$$, чтобы открыть новые земли", + "Sammle %1 $$$ um noch mehr Länder zu besuchen.", + }}, + {0xc3cbae01, { // "draw the heptagons darker" + "siedmiokÄ…ty ciemniejsze", + "yedigenleri daha koyu çiz", + "tmavší sedmiĂşhelnĂ­ky", + "ŃемиŃгольники темнее", + "Heptagone verdunkeln", + }}, + {0xc406717d, { // "player 4 X" + "gracz 4 X", +/*MISSING*/ "player 4 X", + "hráč 4 X", + "игрок 4 X", + "Spieler 4 X", + }}, + {0xc406717e, { // "player 4 Y" + "gracz 4 Y", +/*MISSING*/ "player 4 Y", + "hráč 4 Y", + "игрок 4 Y", + "Spieler 4 Y", + }}, + {0xc4c15ce0, { // "firewall lines: Power" + "linie Ĺ›cian ognia: Moc", +/*MISSING*/ "firewall lines: Power", + "čáry ohnivĂ˝ch stÄ›n: Moc", + "Ńтены огня: Сила", +/*MISSING*/ "firewall lines: Power", + }}, + {0xc4c1e40c, { // "F/;/Space/Enter/KP5 = fire, WASD/IJKL/Numpad = move" + "F/;/Space/Enter/KP5 = strzaĹ‚, WASD/IJKL/Numpad = ruch", + "F/;/Space/Enter/KP5 = strzaĹ‚, WASD/IJKL/Numpad = ruch", + "F/;/Space/Enter/KP5 = stĹ™elba, WASD/IJKL/Numpad = pohyb", + "F/;/Space/Enter/KP5 = Ńтрелять, WASD/IJKL/Numpad = ходить", + "F/[;]/[LEER]/[ENTER]/[Numpad 5] = schieĂźen, WASD/IJKL/[Numpad] = bewegen", + }}, + {0xc4cb4c3f, { // "0 = symmetry" + "0 = symetria", + "0 = simetri", + "0 = symetrie", + "0 = Ńимметрия", + "0 = Symmetrie", + }}, + {0xc5882c72, { // "monster" + "potwĂłr", + "canavar", + "netvor", + "монŃŃ‚Ń€", + "Monster", + }}, + {0xc58bcb69, { // "Ice Walls melt after some time has passed." + "Lodowe Ĺ›ciany topiÄ… siÄ™ po pewnym czasie.", + "Buz Duvarları biraz zaman geçince erirler.", + "LedovĂ© zdi ÄŤasem tajĂ­.", + "Ледяные Ńтены ŃĐľ временем могŃŃ‚ Ń‚Đ°ŃŹŃ‚ŃŚ.", + "Eiswände schmelzen nach gewisser Zeit.", + }}, + {0xc5cc6605, { // "Zebra quotient" + "przestrzeĹ„ ilorazowa zebry", +/*MISSING*/ "Zebra quotient", +/*MISSING*/ "Zebra quotient", +/*MISSING*/ "Zebra quotient", +/*MISSING*/ "Zebra quotient", + }}, + {0xc6366bc3, { // "player 4 go" + "gracz 4 idĹş", +/*MISSING*/ "player 4 go", + "hráč 4 pohyb", + "игрок 4 идёт", + "Spieler 4 los", + }}, + {0xc644756c, { // "Green pressure plates open all gates in radius 3 around them. Similarly, red pressure plates close all gates in this radius." + "Zielone pĹ‚yty otwierajÄ… wszystkie bramy w promieniu 3 wokół nich. Podobnie, czerwone pĹ‚yty zamykajÄ… wszystkie bramy w tym promieniu.", + "YeĹźil baskı levhaları 3 uzaklıktaki bĂĽtĂĽn kapıları açar. Aynı Ĺźekilde, kırmızı baskı levhaları bu komĹźuluktaki kapıları kapatır.", + "ZelenĂ© desky otevĹ™ou všechny brány v okruhu 3 polĂ­, kdyĹľ na nÄ› nÄ›kdo šlápne. ÄŚervenĂ© desky naopak všechny brány v tomto okruhu zavĹ™ou.", + "Зелёная плита открывает вŃе проходы в радиŃŃе 3 клеток. Đналогично, краŃная плита закрывает проходы в том же радиŃŃе.", + "GrĂĽne Druckplatten öffnen alle Tore in einem Radius von 3. Rote Druckplatten hingegen schlieĂźen die Tore.", + }}, + {0xc6bc4da8, { // "Yendor Challenge" + "Misja Yendor", + "Yendor Ek Görevi", + "Mise: Yendor", + "МиŃŃия Йендора", + "Yendor Herausforderung", + }}, + {0xc6e3d53a, { // "Hub Land: orbs appear here if unlocked in their native land" + "Centrum: sfery pojawiajÄ… siÄ™ tu przy 10 skarbach", + "Merkez: Ana diyarında aktifleĹźtirilen kĂĽreler burada gözĂĽkĂĽr.", + "CentrálnĂ­ kraj: SfĂ©ry se zde objevujĂ­, pokud jsi je odemkl v jejich rodnĂ© krajinÄ›", + "Центр: Ńфера появвляетŃŃŹ здеŃŃŚ, когда она разблокировна в Ńвоей родной земле", + "Zentrum: Orbs erscheinen hier wenn sie in ihrem Heimatland freigeschaltet wurden", + }}, + {0xc70ad7ca, { // "%The1 is protected from this kind of magic!" + "Tego typu magia nie dziaĹ‚a na %1!", +/*MISSING*/ "%The1 is protected from this kind of magic!", + "%1 má ochranu proti tomuto typu magie!", + "%1 защищён от этого вида магии!", +/*MISSING*/ "%The1 is protected from this kind of magic!", + }}, + {0xc71c7d9f, { // "Unlock the Orb of Yendor!" + "OtwĂłrz SferÄ™ Yendoru!", + "Yendor'un kĂĽresinin kilidini aç!", + "Odemkni Yendorskou sfĂ©ru!", + "Откройте ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°!", + "Ă–ffne den Orb von Yendor!", + }}, + {0xc7362d82, { // "easy" + "Ĺ‚atwe", + "kolay", + "snadná", + "легко", + "einfach", + }}, + {0xc743921a, { // "Galápagos is the land of Tortoises. They are very slow, which allows the Dragons to pick on them by stealing and eating their young. Bring the Baby Tortoises back, but, there is a catch: the Tortoises come in many varieties, depending on the part of Galápagos they live in -- there are 21 binary environmental factors, and thus 2097152 varieties. You'll have to find a Tortoise which matches the baby exactly!\n\nTortoises move each 3 turns, and attacks only stun them.\n\nBringing back a Baby Tortoise counts as 5 $$$. The more factors agree in the given location of Galápagos, the brighter it is shown on your screen." + "Galápagos to kraina Żółwi. Żółwie sÄ… bardzo powolne, co pozwala Smokom znÄ™cac siÄ™ nad nimi -- kradnÄ…c i zjadajÄ…c ich mĹ‚ode. Zwróć Żółwiki ich rodzinom, ale jest jeden haczyk: w różnych częściach Galápagos ĹĽyje wiele odmian Żółwi -- jest 21 binarnych czynnikĂłw Ĺ›rodowiskowych, co prowadzi do 2097152 odmian. Musisz znaleźć Żółwia dokĹ‚adnie pasujÄ…cego do Żółwika!\n\nŻówie ruszajÄ… siÄ™ co trzy kolejki. Ataki powodujÄ… jedynie ogĹ‚uszenie.\n\nZwrĂłcenie Żółwika liczy siÄ™ jako 5 $$$. Im wiÄ™cej czynnikĂłw zgadza siÄ™ w danym miejscu, tym jaĹ›niej jest ono narysowane na Twoim ekranie.", +/*MISSING*/ "Galápagos is the land of Tortoises. They are very slow, which allows the Dragons to pick on them by stealing and eating their young. Bring the Baby Tortoises back, but, there is a catch: the Tortoises come in many varieties, depending on the part of Galápagos they live in -- there are 21 binary environmental factors, and thus 2097152 varieties. You'll have to find a Tortoise which matches the baby exactly!\n\nTortoises move each 3 turns, and attacks only stun them.\n\nBringing back a Baby Tortoise counts as 5 $$$. The more factors agree in the given location of Galápagos, the brighter it is shown on your screen.", + "Galapágy jsou zemĂ­ Ĺ˝elv. Ĺ˝elvy jsou velice pomalĂ©, takĹľe si na nÄ› mohou dovolovat Draci, kteří kradou a požírajĂ­ jejich mláďata. Ty jim mĹŻĹľeš jejich Ĺ˝elviÄŤky pĹ™inĂ©st zpátky, ale je tu jeden háček: existuje mnoho typĹŻ Ĺ˝elv podle toho, ve kterĂ© části Galapág ĹľijĂ­ -- je tu celkem 21 binárnĂ­ch faktorĹŻ prostĹ™edĂ­, a tedy 2 097 152 variant. Musíš najĂ­t takovou Ĺ˝elvu, která pĹ™esnÄ› odpovĂ­dá tvĂ© Ĺ˝elviÄŤce!\n\nĹ˝elvy se pohybujĂ­ vĹľdy jednou za 3 kola a Ăştoky je mohou pouze omráčit.\n\nVrácenĂ­ Ĺ˝elviÄŤky se poÄŤĂ­tá za 5 $$$. ÄŚĂ­m vĂ­ce faktorĹŻ se v danĂ© části Galapág shoduje, tĂ­m jasnÄ›ji tato část vypadá na obrazovce.", + "ГалапагоŃŃ‹ -- край черепах. Черепахи очень медленны, что позволяет драконам издеватьŃŃŹ над ними -- краŃŃ‚ŃŚ и поедать их детей. Отведи черепаŃĐşŃ Đ˝Đ° родинŃ! Но еŃŃ‚ŃŚ проблема: здеŃŃŚ еŃŃ‚ŃŚ много разновидноŃтей черепах, завиŃящих от меŃŃ‚Đ° проживания -- еŃŃ‚ŃŚ 21 различных параметров, что Đ´Đ°Ń‘Ń‚ 2097152 вариантов. Найдите черепахŃ, точно ŃоответŃтвŃющŃŃŽ ŃŤŃ‚ĐľĐĽŃ ĐĽĐ°Đ»Ń‹ŃŃ!\n\nЧерепахи движŃŃ‚ŃŃŹ каждый третий ход. Đтаки только оглŃŃĐ°ŃŽŃ‚ их.\n\nКаждый приведённый черепаŃонок ŃчитаетŃŃŹ Đ·Đ° 5 $$$. Чем больŃе параметров Ńовпадают в данной меŃтноŃти, тем Ńветлее она показываетŃŃŹ.", + "Galápagos ist das Land der Schildkröten -- Sie sind sehr langsam, was es den Drachen ermöglicht sie zu schikanieren, indem sie die jungen Schilkröten stehlen oder fressen. Bring die Babyschildkröte zurĂĽck, aber es gibt einen Haken: es gibt viele Schildkrötenarten, abhängig von der Gegend Galápagos in der sie leben -- es gibt 21 binäre regionale Faktoren und somit 2097152 verschiedene Arten. Du musst eine Schildkröte finden, die exakt mit der Babyschildkröte ĂĽbereinstimmt!\n\nSchildkröten bewegen sich alle 3 ZĂĽge und Angriffe betäuben sie nur.\n\nEine Babyschildkröte zurĂĽckzubringen zählt 5 $$$. Je mehr Faktoren in der aktuellen Region Galápagos ĂĽbereinstimmen, umso heller erscheint sie auf dem Bildschirm.", + }}, + {0xc829b82e, { // "monsters killed: %1" + "pokonane potwory: %1", + "öldĂĽrĂĽlen canavarlar: %1", + "netvorĹŻ zabito: %1", + "монŃтров Ńбито: %1", + "Kills: %1", + }}, + {0xc83f16e9, { // "display only hexagons" + "pokaĹĽ tylko szeĹ›ciokÄ…ty", + "sadece altıgenleri göster", + "zobraz pouze šestiĂşhelnĂ­ky", + "показать только ŃеŃтиŃгольники", + "Nur Hexagone anzeigen", + }}, + {0xc864fee0, { // "(press v) and change the wall/monster mode to ASCII, or change the resolution." + "(naciĹ›nij 'v') i zmieĹ„ tryb Ĺ›cian/potworĂłw na ASCII albo zmieĹ„ rozdzielczość.", + "('v'ye bas) ve duvar ve canavar modunu ASCII'ye çevir veya çözĂĽnnĂĽrlüğü deÄźiĹźtir.", + "(stiskni 'v') a změŠmĂłd zdĂ­/netvorĹŻ na ASCII, nebo změŠrozlišenĂ­.", + "(нажмите 'v') и поменяйте режим отображения Ńтен/монŃтров на ASCII, или измените разреŃение. ", + "(drĂĽcke V) um den 'Wand/Monster'-Modus auf ASCII zu schalten, oder die Auflösung zu ändern.", + }}, + {0xc89e01f8, { // "Parrots feel safe in the forests of Caribbean, so they never leave them. But they will help the Pirates by attacking the intruders." + "Papugi czujÄ… siÄ™ bezpiecznie w lasach KaraibĂłw i ich nie opuszczajÄ…, ale chÄ™tnie pomogÄ… Piratom walczyć z najeĹşdĹşcami.", + "PapaÄźanlar Karayip Ormanlarında gĂĽvende hissederler, bu yĂĽzden buraları hiç terketmezler. İçeriye girenlere saldırarak korsanlara da yardım etmiĹź olurlar. ", + "Papoušci se v karibskĂ˝ch lesĂ­ch cĂ­tĂ­ bezpeÄŤnÄ›, a tak je nikdy neopouštÄ›jĂ­. PomáhajĂ­ ale pirátĹŻm tĂ­m, Ĺľe ĂştoÄŤĂ­ na vetĹ™elce.", + "ПопŃгаи чŃвŃтвŃŃŽŃ‚ Ńебя в безопаŃноŃти в КарибŃких леŃĐ°Ń… и никогда их не покидают. Но они помогают пиратам, нападая на чŃжаков.", + "Papageien fĂĽhlen sich sicher in den karibischen Wäldern, daher verlassen sie diese nie. Allerdings helfen sie den Piraten beim Angreifen der Eindringlinge.", + }}, + {0xc8a18138, { // "A gem from the Red Rock Valley." + "KamieĹ„ szlachetny z Doliny Czerwonej SkaĹ‚y.", + "Kızılkaya Vadisinden bir kızıl mĂĽcevher.", + "Drahokam z ĂšdolĂ­ ÄŤervenĂ˝ch skal.", + "Камень из Долины КраŃных Скал.", + "Ein Edelstein aus dem Rotfelsental.", + }}, + {0xc8a94b77, { // "Better not to let your greed make you stray from your path." + "Nie pozwĂłl, by zgubiĹ‚a CiÄ™ chciwość!", +/*MISSING*/ "Better not to let your greed make you stray from your path.", + "RadÄ›ji nedopusĹĄ, aby tÄ› tvá chamtivost svedla z cesty!", + "Đ›ŃчŃе не идти на ĐżĐľĐ˛ĐľĐ´Ń Ń Ńвоей жадноŃти!", + "Lass dich besser nicht durch Gier von deinem Weg abbringen!", + }}, + {0xc8c9f40a, { // "The gate is closing right on you! RUN!" + "Brama leci na Ciebie! UCIEKAJ!", + "Kapı ĂĽzerine kapanıyor! KAÇ!", + "Brána se zavĂ­rá! UTĂŤKEJ!", + "Проход закрываетŃŃŹ! Đ‘Đ•Đ“ĐТЕ!", + "Das Tor ĂĽber dir schlieĂźt sich! Renne!", + }}, + {0xc8ceb645, { // "Causes most monsters to attack other monsters, not only you and your friends." + "Powoduje, ĹĽe wiÄ™kszość potworĂłw bÄ™dzie teĹĽ atakowaĹ‚a inne potwory, nie tylko Ciebie i Twoich przyjaciół.", + "ÇoÄźu canavarın sen ve dostların yanında diÄźer canavarlara da saldırmasına sebep olur.", + "DĂ­ky tĂ©to SfĂ©Ĺ™e bude vÄ›tšina netvorĹŻ ĂştoÄŤit nejen na tebe a na tvĂ© kamarády, ale i na jinĂ© netvory.", + "МонŃтры начинают атаковать Đ´Ń€Ńгих монŃтров, Đ° не только Đ’Đ°Ń Đ¸ ваŃих Ńоюзников.", + "Dieser Orb bringt die meisten Monster dazu auch andere Monster und nicht nur dich anzugreifen.", + }}, + {0xc900c1da, { // "or 'o' to see the world overview" + "lub 'o', by obejrzeć przeglÄ…d krain", + "veya dĂĽnya önizlemesini görmek için 'o'ya basın.", + "nebo stiskni 'o' pro pĹ™ehled krajĹŻ", + "или 'o', чтобы поŃмотреть обзор", + "oder 'o' um einen Ăśberblick ĂĽber die Welt zu sehen", + }}, + {0xc92c7dd1, { // "A coastal area, from where you can get both to the inland worlds and to the Ocean. Each turn, each cell will become water or earth, based on the majority of cells around it. Contrary to the Living Caves, this process is not affected by most items and monsters, but elementals, dead Trolls, and cells outside of the Living Fjord have a very powerful effect." + "NadbrzeĹĽny rejon, z ktĂłrego moĹĽesz dostać siÄ™ zarĂłwno do krain wewnÄ…trzlÄ…dowych jak i na Ocean. W kaĹĽdej kolejce, kaĹĽde pole zmienia siÄ™ w wodÄ™ lub ziemiÄ™ w zaleĹĽnoĹ›ci od wiÄ™kszoĹ›ci pĂłl wokół. W przeciwieĹ„stwie do Ĺ»ywej Jaskini na ten proces nie wpĹ‚ywa wiÄ™kszość przedmiotĂłw i stworzeĹ„, ale ĹĽywioĹ‚aki, martwe Trolle i pola poza granicÄ… Ĺ»ywego Fiordu majÄ… bardzo silny efekt.", + "Sahil Ĺźeridinde bir bölge, buradan hem iç diyarlara hem de Okyanus'a geçebilirsin. Her tur, her hĂĽcre etrafındaki hĂĽcrelerin çoÄźunluÄźuna göre su veya toprak olacak. YaĹźayan MaÄźaraların aksine, bu sĂĽreç eĹźyalar veya canavarlardan etkilenmez. Ancak YaĹźayan Fiyortların dışındaki hĂĽcreler, Unsurlar ve Ă–lĂĽ Trollerin etkisi çok güçlĂĽdĂĽr.", + "PobĹ™eĹľnĂ­ oblast, odkud se mĹŻĹľeš dostat jak do vnitrozemskĂ˝ch svÄ›tĹŻ, tak do Oceánu. V kaĹľdĂ©m kole se kaĹľdĂ© pole zmÄ›nĂ­ na vodu nebo na souš podle toho, kterĂ©ho typu je vÄ›tšina polĂ­ kolem nÄ›j. Na rozdĂ­l od Ĺ˝ivoucĂ­ jeskynÄ› nemá vÄ›tšina pĹ™edmÄ›tĹŻ a netvorĹŻ na tento proces žádnĂ˝ vliv, ale elementálovĂ©, mrtvĂ­ trollovĂ© a pole mimo Ĺ˝ivoucĂ­ fjord majĂ­ velmi silnĂ˝ efekt.", + "Прибрежный регион, из которого можно попаŃŃ‚ŃŚ как в наземные облаŃти, Ń‚Đ°Đş и в Океан. Каждый ход каждая клетка ŃтановитŃŃŹ ŃŃŃей или водой, ĐľŃновываяŃŃŚ на том, каких ŃĐľŃедей больŃе. Đ’ отличие от Живой пещеры этот процеŃŃ Đ˝Đµ завиŃит от объектов и монŃтров, Đ·Đ° иŃключением Элементалей, мёртвых Троллей и клеток вне Живого фьорда - вŃе они имеют очень Ńильный эффект.", + "Ein KĂĽstengebiet von dem aus du ins Inland sowie zum Ozean kommst. Jeden Zug wird aus jeder Zelle Wasser oder Erde basierend auf der Mehrzahl der Zellen um sie herum. Im Gegensatz zu den lebenden Höhlen wird dieser Prozess von den meisten Monstern und Items nicht beeinflusst, Elementare, tote Trolle und Zellen auĂźerhalb des Fjords haben jedoch mächtige Effekte. ", + }}, + {0xc97ce988, { // "You pierce %the1." + "Bodziesz %a1.", +/*MISSING*/ "You pierce %the1.", + "Probodl jsi %a1.", + "Đ’Ń‹ проткнŃли %a1.", +/*MISSING*/ "You pierce %the1.", + }}, + {0xc982a2f2, { // "You hear a distant squeak!" + "SĹ‚yszysz odlegĹ‚y pisk!", + "Uzaktan gelen bir ciyaklama duydun!", + "V dálce slyšíš zapištÄ›nĂ­!", + "Đ’Ń‹ ŃлыŃите пиŃĐş!", + "Du hörst ein Piepsen in der Ferne!", + }}, + {0xc9a03358, { // "Saved the band image as: " + "Zapisano obraz jako: ", +/*MISSING*/ "Saved the band image as: ", + "PásovĂ˝ obrázek uloĹľen jako: ", + "Đзображение Ńохранено как: ", + "Bänderbild gespeichert als: ", + }}, + {0xc9ca07d4, { // "F7 = player on/off" + "F7 = gracz wĹ‚/wyĹ‚", + "F7 = oyuncu açık/kapalı", + "F7 = zapnout/vypnout hráče", + "F7 = игрок вкл/выкл", + "F7 = Spieler an/aus", + }}, + {0xc9e54ff0, { // "collect 3 %2 to unlock it in %the1" + "znajdĹş 3x %2 by udostÄ™pnić %abl1", + "%abl1 onu aktif etmek için 3 tane %2 topla.", + "zĂ­skej 3x %2, abys ji odemkl %abl1", + "collect 3x %2, чтобы открыть её %abl1", + "Sammle 3x %2 um es in %der1 freizuschalten", + }}, + {0xca147bdd, { // "coefficient (imaginary)" + "współczynnik (część urojona)", +/*MISSING*/ "coefficient (imaginary)", + "koeficient (imaginárnĂ­ část)", + "коэффициент (мнимый)", +/*MISSING*/ "coefficient (imaginary)", + }}, + {0xca6326b7, { // "Press Enter or F10 to save" + "WciĹ›nij Enter lub F10, by zapisać i wyjść", + "Enter ya da F10 ile kayıt et", + "Enter nebo F10: uloĹľit hru", + "Нажмите Enter или F10, чтобы ŃохранитьŃŃŹ", + "DrĂĽcke Enter oder F10 zum Speichern", + }}, + {0xca67eb2d, { // "extra graphical effects" + "dodatkowe efekty graficzne", +/*MISSING*/ "extra graphical effects", + "extra grafickĂ© efekty", + "дополнительные графичеŃкие эффекты", +/*MISSING*/ "extra graphical effects", + }}, + {0xca7a1de8, { // "Cannot create temporary matter here!" + "Nie moĹĽna tu stworzyć tymczasowej materii!", + "Burada geçici madde oluĹźturamazsın!", + "Zde nelze vytvoĹ™it doÄŤasnou hmotu!", + "Нельзя Ńоздать временнŃŃŽ материю здеŃŃŚ!", + "Hier kann keine temporäre Materie erzeugt werden!", + }}, + {0xca836329, { // "\nRanged Orbs can be targeted by clicking the desired location. " + "\nRobi siÄ™ to przez klikniÄ™cie na celu.", +/*MISSING*/ "\nRanged Orbs can be targeted by clicking the desired location. ", + "\nTyto sfĂ©ry lze zacĂ­lovat kliknutĂ­m na poĹľadovanĂ© polĂ­ÄŤko.", + "\nВыбор цели Ńферы определяетŃŃŹ щелчком ĐĽŃ‹Ńи на цели.", + "\nMit Distanzorbs kann per Klick auf die gewĂĽnschte Position gezielt werden. ", + }}, + {0xcaabb2e2, { // "The game starts in the Icy Lands. Collect the Ice Diamonds (press F1 if you do not know how to move). After you collect many of them, monsters will start to pose a challenge.\nAs is typical in roguelikes and other games based on tactical skill rather than story, if you lose, you have to start a new one from the start. However, in this tutorial, you can simply press '4' to teleport away from a bad situation.In general, the tutorial is rigged to show you what it wants -- for example, in this slide, you can press '5' to get lots of Ice Diamonds quickly." + "Gra rozpoczyna siÄ™ w Lodowej Krainie. Zbieraj Lodowe Diamenty (naciĹ›nij F1 jeĹ›li nie wiesz jak siÄ™ ruszać). Po zebraniu wielu DiamentĂłw ataki potworĂłw stanÄ… siÄ™ wyzwaniem. Zgodnie z konwencjami gier roguelike, jeĹ›li przegrasz, zaczynasz od poczÄ…tku; w tym podrÄ™czniku jednak wystarczy nacisnąć '4', by uciec ze zĹ‚ej sytuacji. PodrÄ™cznik jest podkrÄ™cony tak, by pokazać to co chce -- na przykĹ‚ad tutaj moĹĽesz nacisnąć '5' by zdobyć szybko duĹĽo diamentĂłw.", +/*MISSING*/ "The game starts in the Icy Lands. Collect the Ice Diamonds (press F1 if you do not know how to move). After you collect many of them, monsters will start to pose a challenge.\nAs is typical in roguelikes and other games based on tactical skill rather than story, if you lose, you have to start a new one from the start. However, in this tutorial, you can simply press '4' to teleport away from a bad situation.In general, the tutorial is rigged to show you what it wants -- for example, in this slide, you can press '5' to get lots of Ice Diamonds quickly.", + "Hra zaÄŤĂ­ná v LedovĂ©m kraji. SbĂ­rej LedovĂ© diamanty (pokud nevíš, jak se pohybovat, stiskni F1). KdyĹľ jich nasbĂ­ráš mnoho, netvoĹ™i zaÄŤnou bĂ˝t nebezpeÄŤnĂ­.\nJak je zvykem ve hrách žánru roguelike a v jinĂ˝ch, kterĂ© jsou zaloĹľenĂ© na taktickĂ˝ch dovednostech a nikoli na příbÄ›hu, pokud prohraješ, budeš muset zaÄŤĂ­t hrát od začátku. V tomto tutoriálu se ale mĹŻĹľeš z ošklivĂ© situace jednoduše teleportovat stisknutĂ­m klávesy '4'. Tutoriál je obecnÄ› dÄ›lanĂ˝ tak, aby ti mohl snadno ukázat, co chce -- v tomto snĂ­mku mĹŻĹľeš například stisknout klávesu '5', abys rychle zĂ­skal velkĂ© mnoĹľstvĂ­ LedovĂ˝ch diamantĹŻ.", + "Đгра начинаетŃŃŹ в Ледяной земле. Собирай Ледяные алмазы (нажми F1, еŃли не знаеŃŃŚ, как ходить). Когда Ń‚Ń‹ ŃоберёŃŃŚ много алмазов, монŃтры начнŃŃ‚ ŃтановитьŃŃŹ проблемой. Как и в Đ´Ń€Ńгих играх жанра roguelike, поŃле проигрыŃĐ° Ń‚Ń‹ начнёŃŃŚ играть Ń Đ˝Đ°Ń‡Đ°Đ»Đ°; но в пределах этого Ń€ŃководŃтва Ń‚Ń‹ можеŃŃŚ нажать '4', чтобы телепортироватьŃŃŹ из плохой ŃитŃации. Đ ŃководŃтво ŃŃтроено Ń‚Đ°Đş, чтобы показать тебе Đ¸ĐłŃ€Ń -- например, на этом Ńлайде Ń‚Ń‹ можеŃŃŚ нажать '5', чтобы полŃчить ŃŃ€Đ°Đ·Ń ĐĽĐ˝ĐľĐłĐľ алмазов.", +/*MISSING*/ "The game starts in the Icy Lands. Collect the Ice Diamonds (press F1 if you do not know how to move). After you collect many of them, monsters will start to pose a challenge.\nAs is typical in roguelikes and other games based on tactical skill rather than story, if you lose, you have to start a new one from the start. However, in this tutorial, you can simply press '4' to teleport away from a bad situation.In general, the tutorial is rigged to show you what it wants -- for example, in this slide, you can press '5' to get lots of Ice Diamonds quickly.", + }}, + {0xcabd677d, { // "\n\nThis is a part of a monster. It does not count for your total kills." + "\n\nTo jest część potwora. Nie liczy siÄ™ do Ĺ‚Ä…cznych zabić.", +/*MISSING*/ "\n\nThis is a part of a monster. It does not count for your total kills.", + "\n\nToto je část netvora. NepoÄŤĂ­tá se do celkovĂ©ho poÄŤtu zabitĂ˝ch netvorĹŻ.", + "\n\nĐ­Ń‚Đľ лиŃŃŚ чаŃŃ‚ŃŚ монŃтра. Не ŃчитываетŃŃŹ в количеŃтве ŃбийŃтв.", + "\n\nDas ist ein Teil eines Monsters. Es wird der Gesamtzahl deiner Tötungen nicht eingerechnet.", + }}, + {0xcae30e00, { // "+5 = move instantly" + "+5 = ruch natychmiastowy", +/*MISSING*/ "+5 = move instantly", + "+5 = okamitĂ˝ pohyb", + "+5 = мгновенный ход", +/*MISSING*/ "+5 = move instantly", + }}, + {0xcafe26a4, { // "This bomberbird will follow you at some distance, and attack your enemies. You can kill it to place a mine." + "Ten bombardier bÄ™dzie lataĹ‚ za TobÄ… i atakowaĹ‚ Twoich wrogĂłw. MoĹĽesz teĹĽ go zabić, by podĹ‚oĹĽyć minÄ™.", + "Bu bombacıkuĹź seni belli bir mesafeden takip eder ve dĂĽĹźmanlarına saldırır. Onu öldĂĽrerek bir mayın döşeyebilirsin.", + "Tento Bombarďák tÄ› bude sledovat v urÄŤitĂ© vzdálenosti a ĂştoÄŤit na tvĂ© nepřátele. KromÄ› toho ho mĹŻĹľeš zabĂ­t, a tĂ­m poloĹľit minu.", + "Этот бомбардир бŃдет Ńледовать Đ·Đ° Вами и атаковать Đ’Đ°Ńих врагов. Можете его Ńбить, чтобы ĐľŃтавить минŃ.", + "Dieser Bombenvogel folgt dir auf Distanz, und attackiert deine Feinde. Du kannst ihn töten, um eine Mine zu legen.", + }}, + {0xcb093da9, { // "The axes help with keyboard movement" + "Osie pomagajÄ…, gdy gramy na klawiaturze", + "Eksenler klavye hareketine yardım eder.", + "Osy pomáhajĂ­ pĹ™i pohybu pomocĂ­ klávesnice", + "ĐžŃи помогают перемещатьŃŃŹ Ń ĐżĐľĐĽĐľŃ‰ŃŚŃŽ клавиатŃры", + "Die Achsen helfen bei der Tastatursteuerung", + }}, + {0xcb0f63b8, { // "The higher the number, the smoother the animations in the game. If you find that animations are not smooth enough, you can try to change the options " + "Im wiÄ™ksza liczba, tym pĹ‚ynniejsze sÄ… animacje. JeĹ›li animacja nie jest dostatecznie pĹ‚ynna, sprĂłbuj zmienić opcje", + "Daha yĂĽksek sayı, daha akıcı animasyonlr demektir. EÄźer animasyonlar senin için yeterince akıcı deÄźilse, ayarları deÄźiĹźtirmeyi düşünebilirsin", + "ÄŚĂ­m vyšší ÄŤĂ­slo, tĂ­m hladší budou animace ve hĹ™e. Pokud se ti zdá, Ĺľe animace nejsou dostateÄŤnÄ› hladkĂ©, mĹŻĹľeš zkusit zmÄ›nit nastavenĂ­ ", + "Чем выŃе ŃŤŃ‚Đľ чиŃло, тем более гладкой бŃдет анимация в игре. Đ•Ńли она недоŃтаточно гладкая, поменяйте наŃтройки. ", + "Je höher die Zahl, desto flĂĽssiger sind die Animationen. Sind sie nicht flĂĽssig genug, versuche die Optionen zu ändern ", + }}, + {0xcb24fed4, { // "collect 25 %2 to unlock it in %the1" + "znajdĹş 25x %2 by udostÄ™pnić %abl1", + "%abl1 onu aktif etmek için 25 tane %2 topla.", + "zĂ­skej 25x %2, abys ji odemkl %abl1", + "collect 25x %2, чтобы открыть её %abl1", + "Sammle 25x %2 um es in %der1 freizuschalten", + }}, + {0xcb577ecd, { // "Many clans of Trolls spend their lives in this kingdom. You can find many statues of Trolls here. You suppose that they are not actually statues, but simply elderly Trolls, who have petrified upon death. Or maybe you have killed these Trolls yourself?" + "Wiele klanĂłw Trolli ĹĽyje w tym krĂłlestwie. MoĹĽna tu znaleźć mnĂłstwo pomnikĂłw trolli, albo raczej nie pomnikĂłw, tylko po prostu stare Trolle, ktĂłre umierajÄ…c zamieniĹ‚y siÄ™ kamieĹ„. A moĹĽe to Trolle zabite przez Ciebie?", +/*MISSING*/ "Many clans of Trolls spend their lives in this kingdom. You can find many statues of Trolls here. You suppose that they are not actually statues, but simply elderly Trolls, who have petrified upon death. Or maybe you have killed these Trolls yourself?", + "V tomto královstvĂ­ trávĂ­ svĹŻj Ĺľivot Ĺ™ada klanĹŻ TrollĹŻ. TakĂ© tu mĹŻĹľeš najĂ­t mnoho jejich soch. ĹĂ­káš si, Ĺľe to asi nejsou sochy, ale prostÄ› jen staří TrollovĂ©, kteří se po smrti promÄ›nili v kámen. Nebo Ĺľe by to byli TrollovĂ©, kterĂ© jsi zabil ty?", + "Много кланов Троллей жило в этом королевŃтве. Đ’Ń‹ можете найти много ŃŃ‚Đ°Ń‚ŃĐą Троллей здеŃŃŚ. Đ’Ń‹ предполагаете, что ŃŤŃ‚Đľ не ŃŃ‚Đ°Ń‚Ńи, Đ° проŃŃ‚Đľ Ńтарые тролли, окаменевŃие поŃле Ńмерти. Đли ŃŤŃ‚Đľ вы их Ńбили?", + "Viele Troll-Clans verbringen ihr Leben in diesem Königreich. Du kannst hier viele Troll-Statuen finden. Du vermutest, dass es nicht wirklich Statuen sind, sondern einfach ältere Trolle, die bei ihrem Tode versteinert sind. Oder hast du diese Trolle selbst getötet?", + }}, + {0xcb66465f, { // "The band model is the hyperbolic analog of the Mercator projection of the sphere: a given straight line is rendered as a straight line, and the rest of the world is mapped conformally, that is, angles are not distorted. Here, we take the straight line connecting your starting point and your current position -- usually the path taken by the player is surprisingly close to a straight line. Press '8' to see this path.\n\nIf you want, press '5' to see it rendered as a spiral, although it takes lots of time and memory." + "Model wstÄ™gi to hiperboliczny analog rzutu Mercatora: pewna linia prosta jest rysowana jaka linia prosta, a reszta Ĺ›wiata jest odwzorowana konforemnie, tzn. kÄ…ty nie sÄ… przekĹ‚amywane. Tutaj jako centralnÄ… liniÄ™ prostÄ… bierzemy liniÄ™ Ĺ‚Ä…czÄ…cÄ… punkt poczÄ…tkowy i TwojÄ… obecnÄ… pozycjÄ™ -- zazwyczaj droga wybrana przez gracza jest niespodzianie zbliĹĽona do linii prostej. NaciĹ›nij '8', by zobaczyć Ĺ›cieĹĽkÄ™.\n\nMoĹĽesz teĹĽ nacisnąć '5' by zobaczyć to w postaci spirali, ale wymaga to bardzo duĹĽo czasu i pamiÄ™ci.", +/*MISSING*/ "The band model is the hyperbolic analog of the Mercator projection of the sphere: a given straight line is rendered as a straight line, and the rest of the world is mapped conformally, that is, angles are not distorted. Here, we take the straight line connecting your starting point and your current position -- usually the path taken by the player is surprisingly close to a straight line. Press '8' to see this path.\n\nIf you want, press '5' to see it rendered as a spiral, although it takes lots of time and memory.", + "PásovĂ˝ model je hyperbolickĂ˝m analogem Mercatorovy projekce na kouli: jedna daná přímka se zobrazĂ­ jako přímka a zbytek svÄ›ta je namapován konformálnÄ›, tedy bez zkreslenĂ­ ĂşhlĹŻ. V tomto případÄ› pouĹľijeme přímku, která spojuje bod, kde jsi zaÄŤal hru, a tvou souÄŤasnou polohu -- dráha, po kterĂ© hráč jde, je obvykle pĹ™ekvapivÄ› blĂ­zká přímce. Tuto cestu mĹŻĹľeš vidÄ›t stisknutĂ­m klávesy '8'.\n\nPokud chceš, mĹŻĹľeš ji takĂ© stisknutĂ­m klávesy '5' vyrenderovat jako spirálu; vyĹľaduje to však hodnÄ› ÄŤasu a pamÄ›ti.", + "Модель ленты -- гиперболичеŃкий аналог проекции Меркатора Ńферы: данная прямая отображаетŃŃŹ в прямŃŃŽ, Đ° ĐľŃтавŃĐ°ŃŹŃŃŹ чаŃŃ‚ŃŚ отображаетŃŃŹ конформно, Ń‚Đľ еŃŃ‚ŃŚ Ńглы не иŃкажаютŃŃŹ. ЗдеŃŃŚ в качеŃтве центральной прямой иŃпользŃетŃŃŹ прямая, Ńоединяющая Ń‚ĐľŃ‡ĐşŃ Ńтарта и твою текŃщŃŃŽ позицию -- обычно твой ĐżŃŃ‚ŃŚ оказываетŃŃŹ неожиданно близко Ń ĐżŃ€ŃŹĐĽĐľĐą. Нажми '8', чтобы Ńвидеть Ńвой ĐżŃŃ‚ŃŚ.\n\nĐ•Ńли хочеŃŃŚ, нажми '5', чтобы отриŃовать Ńпираль, хотя ŃŤŃ‚Đľ займёт много времени и памяти.", +/*MISSING*/ "The band model is the hyperbolic analog of the Mercator projection of the sphere: a given straight line is rendered as a straight line, and the rest of the world is mapped conformally, that is, angles are not distorted. Here, we take the straight line connecting your starting point and your current position -- usually the path taken by the player is surprisingly close to a straight line. Press '8' to see this path.\n\nIf you want, press '5' to see it rendered as a spiral, although it takes lots of time and memory.", + }}, + {0xcb78f60d, { // "rhombic tesselation" + "posadzka rombowa", +/*MISSING*/ "rhombic tesselation", + "kosoÄŤtvercovĂ© dÄ›lenĂ­", + "замощение ромбами", +/*MISSING*/ "rhombic tesselation", + }}, + {0xcb8232b7, { // "visit the website" + "idĹş na stronÄ™ HyperRogue", +/*MISSING*/ "visit the website", + "navštiv webovou stránku", + "перейти на ŃŃ‚Ń€Đ°Đ˝Đ¸Ń†Ń HyperRogue", + "Webseite besuchen", + }}, + {0xcbd211bb, { // "\n\nTortoises are not monsters! They are just annoyed. They do not count for your total kills." + "\n\nŻółwie to nie potwory! SÄ… tylko rozwĹ›cieczone. Nie liczÄ… siÄ™ do Twoich zabić.", +/*MISSING*/ "\n\nTortoises are not monsters! They are just annoyed. They do not count for your total kills.", + "\n\nĹ˝elvy nejsou netvoĹ™i! Jsou jenom podráždÄ›nĂ©. Proto se nepoÄŤĂ­tajĂ­ do celkovĂ©ho poÄŤtu zabitĂ˝ch nepřátel.", + "\n\nЧерепаŃки -- не монŃтры! Хоть и раздражают. Они не ŃчитаютŃŃŹ в количеŃтве ŃбийŃтв.", + "\n\nSchildkröten sind keine Monster! Sie sind nur verärgert. Sie werden nicht der Gesamtzahl von Tötungen angerechnet.", + }}, + {0xcbe3ae13, { // ", you" + ", Ty", + ", Sen", + ", ty", + ", Đ’Ń‹", + ", du", + }}, + {0xcbf72793, { // "This part of the world is warped, restricting the movement somewhat. \"Diagonal\" movement and attacking between triangular cells is not allowed. Flash, Storms, and Freedom spells ignore this, and Ghosts can move, attack, and be attacked diagonally." + "Ta część Ĺ›wiata jest zakrzywiona, co powoduje zmniejszenie moĹĽliwoĹ›ci ruchu. Ruch i atakowanie \"po przekÄ…tnej\", czyli miÄ™dzy trĂłjkÄ…tami, sÄ… zabronione. Czary BĹ‚ysk, Burza i Wolność ignorujÄ… to. Duchy mogÄ… siÄ™ ruszać, atakować i być atakowane po przekÄ…tnej.", +/*MISSING*/ "This part of the world is warped, restricting the movement somewhat. \"Diagonal\" movement and attacking between triangular cells is not allowed. Flash, Storms, and Freedom spells ignore this, and Ghosts can move, attack, and be attacked diagonally.", + "Tato část svÄ›ta je pokĹ™ivená, coĹľ ponÄ›kud omezuje pohyb. \"ĂšhlopříčnĂ˝\" pohyb a Ăştok mezi trojĂşhelnĂ­kovĂ˝mi polĂ­ÄŤky nenĂ­ moĹľnĂ˝. Kouzla Záblesku, BouĹ™e a Svobody toto pravidlo ignorujĂ­ a DuchovĂ© se mohou pohybovat a ĂştoÄŤit ĂşhlopříčnÄ› nebo bĂ˝t sami ĂşhlopříčnÄ› napadeni.", + "Đ­Ń‚Đľ земля иŃкривлена, и движения немного ограничены. Ходы и атаки \"по-диагонали\" ĐĽĐµĐ¶Đ´Ń Ń‚Ń€ĐµŃгольниками невозможны. Заклинания Đ’ŃпыŃки, Đ‘Ńри и Свободы игнорирŃŃŽŃ‚ ŃŤŃ‚Đľ. Đ”Ńхи также могŃŃ‚ ходить, атаковать и быть атакованными по-диагонали.", + "Dieser Teil der Welt ist verzerrt, was die Bewegung etwas einschränkt. \"Diagonale\" Bewegung und Angriffe zwischen dreieckigen Zellen sind nicht erlaubt. Lichtblitz-, Sturm- und Freiheitszauber ignorieren das. Geister können sich diagonal bewegen und diagonal angegriffen werden.", + }}, + {0xcc012b4d, { // "secondary in %the1 (collect 10 %3, or 25 %2)" + "podrzÄ™dna %abl1 (10x %3, lub 25x %2)", + "%abl1 ikincil olarak bulunuyor (10 tane %3, veya 25 tane %2)", + "sekundárnĂ­ %abl1 (zĂ­skej 10x %3 nebo 25x %2)", + "дополнительная %abl1 (10x %3, или 25x %2)", + "sekundär in %der1 (10x %3, oder 25x %2)", + }}, + {0xcc095f49, { // "Follow the Mouse and escape with %the1!" + "IdĹş za MyszkÄ… i ucieknij z %abl1!", + "Fareyi takip et ve %abl1 kaç!", + "Následuj Myšku a uteÄŤ s %abl1!", + "СледŃq Đ·Đ° МыŃкой и выйди Ń %abl1!", + "Folge der Maus und entkomme mit %dem1!", + }}, + {0xcc0fa034, { // "dog" + "pies", +/*MISSING*/ "dog", + "pes", + "пёŃ", + "Hund", + }}, + {0xcc13ece6, { // "Ghosts can move through chasms!" + "Duchy przelatujÄ… nad dziurami!", +/*MISSING*/ "Ghosts can move through chasms!", + "DuchovĂ© se mohou pohybovat pĹ™es propasti!", + "Призраки могŃŃ‚ перелетать пропаŃти!", +/*MISSING*/ "Ghosts can move through chasms!", + }}, + {0xcc3fc29f, { // "configure joystick axes" + "skonfiguruj osie joysticka", + "joystick eksenlerini ayarla", + "konfigurace os joysticku", + "наŃтройка джойŃтика", + "Joystick Achsen konfigurieren", + }}, + {0xcc49e6af, { // "The Knights laugh at your failure!" + "Rycerze Ĺ›miejÄ… siÄ™ z Twojej poraĹĽki!", + "Şövalyeler hezimetine katıla katıla gĂĽlĂĽyor!", + "RytĂ­Ĺ™i se smÄ›jĂ­ tvĂ©mu neĂşspÄ›chu!", + "Рыцари ŃмеютŃŃŹ над Đ’Đ°Ńей неŃдачей!", + "Die Ritter lachen dich aus weil du versagt hast!", + }}, + {0xccb41803, { // "These reptiles are quite strange creatures. They spend most of their lives sleeping as floors that other creatures can walk on. Sometimes they wake up to hunt their prey, but they will happily go back to sleep if they happen to move into a hole on their way. Your attacks do not kill the Reptiles, but you can push and stun them." + "Te jaszczurki to dosyć dziwne stwory. WiÄ™kszość ĹĽycia spÄ™dzajÄ… Ĺ›piÄ…c, tworzÄ…c podĹ‚ogi, po ktĂłrych moĹĽna chodzić. Czasami siÄ™ budzÄ… by zapolować, ale bardzo chÄ™tnie poĹ‚oĹĽÄ… siÄ™ znĂłw do snu, jeĹ›li natrafiÄ… na swojej drodze na dziurÄ™. Twoje ataki nie zabijajÄ… jaszczurek, ale moĹĽesz je pchać i ogĹ‚uszać.", +/*MISSING*/ "These reptiles are quite strange creatures. They spend most of their lives sleeping as floors that other creatures can walk on. Sometimes they wake up to hunt their prey, but they will happily go back to sleep if they happen to move into a hole on their way. Your attacks do not kill the Reptiles, but you can push and stun them.", + "Tyto JeštÄ›rky jsou opravdu podivnĂ­ tvorovĂ©. Vštšinu Ĺľivota trávĂ­ tĂ­m, Ĺľe spĂ­ ve formÄ› podlahy, po kterĂ© jinĂ­ tvorovĂ© chodĂ­. NÄ›kdy se probudĂ­, aby lovily koĹ™ist, ale pokud po cestÄ› náhodou šlápnou do dĂ­ry, ochotnÄ› zase usnou. TvĂ© Ăştoky nemohou JeštÄ›rky zabĂ­t, mĹŻĹľeš je ale strkat a omraÄŤovat.", + "Эти ящерицы -- довольно Ńтранные ŃŃщеŃтва. Они проводят больŃŃŃŽ чаŃŃ‚ŃŚ жизни во Ńне, ŃĐ»Ńжа полом, по ĐşĐľŃ‚ĐľŃ€ĐľĐĽŃ Đ´Ń€Ńгие могŃŃ‚ ходить. Đногда они проŃыпаютŃŃŹ, чтобы поохотитьŃŃŹ, но они Ń Ń€Đ°Đ´ĐľŃŃ‚ŃŚŃŽ вернŃŃ‚ŃŃŹ ко ŃĐ˝Ń, еŃли найдŃŃ‚ отверŃтие в ĐżĐľĐ»Ń Đ˝Đ° Ńвоём ĐżŃти. Ваги атаки их не Ńбивают, Đ° только толкают и оглŃŃĐ°ŃŽŃ‚.", +/*MISSING*/ "These reptiles are quite strange creatures. They spend most of their lives sleeping as floors that other creatures can walk on. Sometimes they wake up to hunt their prey, but they will happily go back to sleep if they happen to move into a hole on their way. Your attacks do not kill the Reptiles, but you can push and stun them.", + }}, + {0xcccdfec3, { // "You rejoin %the1." + "PoĹ‚Ä…czy%Ĺ‚eĹ›0 siÄ™ z %abl1.", + "%abl1 bĂĽtĂĽnleĹźtin.", + "Znovu ses spoji%l0 %s1 %abl1.", + "Đ’Ń‹ воŃŃоединилиŃŃŚ Ń %abl1.", + "Du stößt wieder zu %den1 %a1 hinzu", + }}, + {0xcdd4911e, { // "Euclidean" + "euklidesowa", +/*MISSING*/ "Euclidean", + "eukleidovská", + "евклидова", +/*MISSING*/ "Euclidean", + }}, + {0xcddadaf6, { // "view your achievements" + "pokaĹĽ osiÄ…gniÄ™cia", +/*MISSING*/ "view your achievements", + "tvĂ© achievementy", + "Ńмотреть Đ´ĐľŃтижения", + "deine Errungenschaften ansehen", + }}, + {0xce3381e8, { // "spin down" + "obróć w dół", +/*MISSING*/ "spin down", + "otoÄŤ dolĹŻ", + "вращать вниз", + "hochdrehen", + }}, + {0xce7f0820, { // "add credits for your translation here" + "Teksty i tĹ‚umaczenie: Zeno i Tehora Rogue\n\n", + "Çeviri: zulmetefza & Seyacim\n\n", + "ÄŚeskĂ˝ pĹ™eklad: Marek ÄŚtrnáct \n\n", + "Перевод: green orange \n\n", + "Deutsche Ăśbersetzung: Jeffrey Smith, Arriator und Phillip 'TheGons' Gonsior \n\n", + }}, + {0xce87854f, { // "It was a floor... until something walked on it." + "Tu kiedyĹ› byĹ‚a podĹ‚oga, ale coĹ› po niej przeszĹ‚o.", + "Burası bir zemin parçasıydı...ta ki bir Ĺźey ĂĽzerinden geçene kadar.", + "Tady byla podlaha... neĹľ po nĂ­ nÄ›co pĹ™ešlo.", + "ЗдеŃŃŚ был пол... пока кто-Ń‚Đľ не наŃŃ‚Ńпил не него.", + "Das war einmal Boden... bis etwas darauf gegangen ist.", + }}, + {0xce8db891, { // "panning X" + "przewiĹ„ X", + "yatay kaydır", + "scrollovánĂ­ ve smÄ›ru X", + "крŃтить X", + "X schwenken", + }}, + {0xce8db892, { // "panning Y" + "przewiĹ„ Y", + "dikey kaydır", + "scrollovánĂ­ ve smÄ›ru Y", + "крŃтить Y", + "Y schwenken", + }}, + {0xcea95257, { // "Turn-based multiplayer: Turns are executed in parallel. A player can leave the game by pressing a designated key (useful when about to get killed or lost). The following Orbs work to bring such players back: " + "Turowo na wielu graczy: tury wykonujecie rĂłwnolegle. Gracz moĹĽe opuĹ›cić grÄ™ naciskajÄ…c wyznaczony klawisz (uĹĽyteczne, gdy siÄ™ zgubi lub by zaraz zostaĹ‚ zabity). NastÄ™pujÄ…cych Sfer moĹĽna uĹĽyć, by taki gracz wrĂłciĹ‚:", +/*MISSING*/ "Turn-based multiplayer: Turns are executed in parallel. A player can leave the game by pressing a designated key (useful when about to get killed or lost). The following Orbs work to bring such players back: ", + "Hra pro vĂ­ce hráčů na kola: Všichni hráči odehrajĂ­ svĂ© kolo souÄŤasnÄ›. Hráči mohou opustit hru stisknutĂ­m specifickĂ© klávesy (hodĂ­ se, kdyĹľ jim hrozĂ­, Ĺľe se ztratĂ­ nebo je nÄ›co zabije). Tyto hráče je moĹľnĂ© vrátit zpátky pouĹľitĂ­m následujĂ­cĂ­ch SfĂ©r:", + "ПоŃаговый ĐĽŃльтиплеер: ходы ŃоверŃĐ°ŃŽŃ‚ŃŃŹ параллельно. Đгрок может покинŃŃ‚ŃŚ игрŃ, нажав определённŃŃŽ клавиŃŃ (полезно, когда почти Ńмер или потерялŃŃŹ). СледŃющие Ńферы могŃŃ‚ вернŃŃ‚ŃŚ игроков обратно:", + "Mehrspieler zugbasiert: ZĂĽge werden simultan ausgefĂĽhrt. Ein Spieler kann das Spiel durch DrĂĽcken einer bestimmten Taste verlassen (nĂĽtzlich wenn Gefahr droht getötet zu werden oder verlorenzugehen). Die folgenden Orbs können dazu verwendet werden solche Spieler zurĂĽckzubringen: ", + }}, + {0xcecd6064, { // "z: %1" + "z: %1", + "z: %1", + "z: %1", + "z: %1", + "z: %1", + }}, + {0xced30d4e, { // "%The1 attacks your shell!" + "%1 zaatakowa%Ĺ‚1 TwojÄ… skorupÄ™!", +/*MISSING*/ "%The1 attacks your shell!", + "%1 zaĂştoÄŤi%l1 na tvĹŻj krunýř!", + "%1 Đ°Ń‚Đ°ĐşŃет ваŃŃ Ń€Đ°ĐşĐľĐ˛Đ¸Đ˝Ń!", + "%Der1 %1 attackiert deinen Panzer!", + }}, + {0xcede212a, { // "heptagonal mode" + "tryb siedmiokÄ…tĂłw", +/*MISSING*/ "heptagonal mode", + "sedmiĂşhelnĂ­kovĂ˝ mĂłd", + "режим ŃемиŃгольников", + "heptagonaler Modus", + }}, + {0xcee13684, { // "%The1 is washed away!" + "%2 zmy%Ĺ‚2 %a1!", + "%1 suya karışıp gitti!", + "Elementál Vody spláchl %a1!", + "%a1 Ńмыло водой!", + "%Der1 %a1 wurde weggeschwemmt!", + }}, + {0xcef0ea3b, { // "%The1 pierces %the2!" + "%1 przebi%Ĺ‚1 %a2!", + "%1 %a2 delip geçiyor!", + "%1 probod%l1 %a2!", + "%1 проколол%E1 %a2!", + "%Der1 durchbohrt %den2 %a2!", + }}, + {0xcf3aac29, { // "t/left/right - change display, up/down - scroll, s - sort by" + "t/lewo/prawo - zmiana, gĂłra/dół - przewijanie, s - sortowanie", + "t/sol/saÄź - görĂĽnĂĽmĂĽ deÄźiĹźtir, yukarı/aĹźağı - kaydır, s - sırala", + "t/doleva/doprava - zmÄ›na zobrazenĂ­, nahoru/dolĹŻ - posunovánĂ­, s - Ĺ™azenĂ­", + "t/левая/правая Ńтрелки - изменить, вверх/вниз - лиŃŃ‚Đ°Ń‚ŃŚ, s - Ńортировать", + " T/Links/Rechts - Anzeige ändern, Oben/Unten - Scrollen, S - Sortieren nach", + }}, + {0xcf65d6a2, { // "In the Windy Plains, you can let the wind carry you, causing you to move two cells with the wind in a single turn. This cannot be done if you are standing at distance at most 2 from the Air Elemental, or if any of the three cells on the way has two wind directions.\n\nPress 't' or click the destination to activate." + "Na Wietrznej RĂłwninie moĹĽesz pozwolić dać siÄ™ nieść wiatrowi, dziÄ™ki czemu ruszasz siÄ™ 2 pola z wiatrem w jednej kolejce. Jest to moĹĽliwe tylko, jeĹ›li nie stoisz w odlegĹ‚oĹ›ci co najwyĹĽej 2 od Powietrznego Ĺ»ywioĹ‚aka i ĹĽadne z trzech pĂłl po drodze nie ma wiatru w dwĂłch kierunkach.\n\nNaciĹ›nij 't' albo kliknij pole docelowe, by wykonać ten ruch.", +/*MISSING*/ "In the Windy Plains, you can let the wind carry you, causing you to move two cells with the wind in a single turn. This cannot be done if you are standing at distance at most 2 from the Air Elemental, or if any of the three cells on the way has two wind directions.\n\nPress 't' or click the destination to activate.", + "Na VÄ›trnĂ© pláni se mĹŻĹľeš nechat unášet vÄ›trem a pohybovat se o dvÄ› polĂ­ÄŤka v jednom kole. Toto nenĂ­ moĹľnĂ©, pokud se nacházíš ve vzdálenosti 2 nebo mĂ©nÄ› od Elementála vzduchu nebo pokud jsou na kterĂ©mkoli ze tří polĂ­ÄŤek, kterĂ˝mi bys prošel, dva smÄ›ry vÄ›tru.\n\nPro unášenĂ­ vÄ›trem stiskni klávesu 't' nebo klikni na cĂ­lovĂ© polĂ­ÄŤko.", + "На Ветреной равнине Đ’Ń‹ можете позволить Đ˛ĐµŃ‚Ń€Ń ŃнеŃти Đ’Đ°Ń, подвинŃвŃиŃŃŚ ŃŃ€Đ°Đ·Ń Đ˝Đ° 2 клетки Đ·Đ° 1 ход. Đ­Ń‚Đľ невозможно, еŃли Đ’Ń‹ Ńтоите на раŃŃтоянии не более 2 от ВоздŃŃного элементаля, или на одной из проходимых клеток более одного направления ветра.\n\nНажмите 't' или кликните на клеткŃ, чтобы ŃŤŃ‚Đľ иŃпользовать.", + "In den windigen Ebenen kannst du dich vom Wind tragen lassen, dann bewegst du dich mit dem Wind zwei Zellen in einem Zug. Dies gilt nicht, wenn du maximal 2 Zellen von einem Luftelementar entfernt bist, oder eine der drei Zellen in deinem Weg zwei Windrichtungen hat.\n\nDrĂĽcke 't' oder klicke auf dein Ziel zur Aktivierung.", + }}, + {0xcfa35fb1, { // "The islands of Caribbean are infinite and circular, and the pirates probably have hidden their treasures somewhere far from the coast." + "Wyspy na Karaibach sÄ… okrÄ…gĹ‚e i nieskoĹ„czone... Skarby piratĂłw sÄ… pewnie schowane gdzieĹ› daleko od brzegu.", + "Karayip Adaları sonsuz ve dairesel. Korsanlar hazinelerini bĂĽyĂĽk ihtimalle kıyılardan uzak yerlere saklıyordur.", + "KaribskĂ© ostrovy jsou nekoneÄŤnĂ© a kulatĂ© a piráti pravdÄ›podobnÄ› ukryli svĂ© poklady kdesi daleko od pobĹ™eží.", + "КарибŃкие ĐľŃтрова беŃконечные и крŃглые. Возможно, пираты прячŃŃ‚ Ńвои Ńокровища где-Ń‚Đľ вдали от берега.", + "Die Inseln der Karibik sind unzählig und kreisförmig, die Piraten haben ihre Schätze sicher fernab der KĂĽste versteckt.", + }}, + {0xcfc5e0f7, { // "gain Orb of the Sword" + "zdobÄ…dĹş SferÄ™ Ostrza", +/*MISSING*/ "gain Orb of the Sword", + "zĂ­skej SfĂ©ru meÄŤe", + "полŃчи ĐˇŃ„ĐµŃ€Ń ĐĽĐµŃ‡Đ°", +/*MISSING*/ "gain Orb of the Sword", + }}, + {0xd033df57, { // "triangle grid: rings" + "trĂłjkÄ…tna siatka: pierĹ›cienie", +/*MISSING*/ "triangle grid: rings", + "trojĂşhelnĂ­ková mřížka: s prstenci", + "треŃгольная Ńетка: кольца", +/*MISSING*/ "triangle grid: rings", + }}, + {0xd0863104, { // "Congratulations! You have found the Holy Grail!" + "Gratulacje! Znalaz%Ĺ‚eĹ›0 ĹšwiÄ™tego Graala!", + "Tebrikler! Kutsal Kâseyi buldun!", + "Gratulujeme! Naš%el0 jsi SvatĂ˝ grál!", + "Поздравляем! Đ’Ń‹ наŃли Ńвятой Грааль!", + "GlĂĽckwunsch! Du hast den Heiligen Gral gefunden!", + }}, + {0xd0ab00e0, { // "Illusions are targeted by most monsters, just like yourself, Thumpers, and your friends." + "WiÄ™kszość potworĂłw celuje w iluzje, podobnie jak w Ciebie, Dudniki i Twoich przyjaciół.", + "Ä°lĂĽzyonlar tıpkı sen, GĂĽmleyenler ve dostların gibi pek çok canavar tarafından saldırıya uÄźrayabilir.", + "VÄ›tšina netvorĹŻ pĹŻjde po tvĂ˝ch iluzĂ­ch, stejnÄ› jako jdou po tobÄ›, po TloucĂ­ch a po tvĂ˝ch přátelĂ­ch.", + "ĐŃ… бŃĐ´ŃŃ‚ атаковать почти вŃе монŃтры, Ń‚Đ°Đş же как Đ’Đ°Ń, Тамперы и ваŃих Ńоюзников.", + "Illusionen werden von den meisten Monstern verfolgt.", + }}, + {0xd0b045b5, { // "heptagonal grid" + "siatka siedmiokÄ…tna", +/*MISSING*/ "heptagonal grid", + "sedmiĂşhelnĂ­ková mřížka", + "ŃемиŃгольная Ńетка", +/*MISSING*/ "heptagonal grid", + }}, + {0xd0d94ce6, { // "Nice, a hyperbolic rug! It will not fit very well on your flat Euclidean floor, but who cares?" + "Jaki Ĺ‚adny hiperboliczny dywan! Nie bÄ™dzie dobrze przylegaĹ‚ do Twojej pĹ‚askiej, euklidesowej podĹ‚ogi, ale co z tego?", + "Harika! Bir hiperbolik kilim! Evindeki öklidyen zemine pek yakışmayacak, ama kimin umrunda!", + "Prima, hyperbolickĂ˝ koberec! Na tvoji placatou eukleidovskou podlahu moc dobĹ™e pasovat nebude, ale co?", + "ПрекраŃный гиперболичеŃкий ковёр! На плоŃкий пол его не положиŃŃŚ, Đ˝Ń Đ¸ ĐżŃŃŃ‚ŃŚ.", + "Ein hyperbolischer Teppich! Er wird nicht gut auf deinen flachen euklidischen Boden passen aber wen interessiert's?", + }}, + {0xd10ed1c0, { // "pure tactics mode" + "tryb taktyczny", + "saf taktik modu", + "taktickĂ˝ mĂłd", + "режим тактики", + "Strategiemodus", + }}, + {0xd18ab005, { // "band" + "wstÄ™ga", +/*MISSING*/ "band", + "pás", + "лента", + "Band", + }}, + {0xd1fc64ef, { // "You activate your demonic powers!" + "AktywowaĹ‚eĹ› moce demoniczne!", + "Ĺžeytani güçlerini aktifleĹźtirdin!", + "Aktivoval jsi svou dĂ©monickou moc!", + "Đ’Ń‹ активировали Ńвои демоничеŃкие Ńилы!", + "Du aktivierst deine dämonischen Kräfte!", + }}, + {0xd2223067, { // "Your eyes shine like gems." + "Twoje oczy bĹ‚yszczÄ… jak klejnoty.", + "Gözlerin mĂĽcevherler gibi ışıldıyor.", + "TvĂ© oÄŤi září jako drahokamy.", + "Đ’Đ°Ńи глаза Ńияют, как драгоценные камни.", + "Deine Augen funkeln wie Edelsteine.", + }}, + {0xd250e502, { // "This orb allows one to pass through all kinds of walls and chasms." + "Ta sfera pozwala przechodzić przez wszelkie Ĺ›ciany i przepaĹ›cie.", + "Bu kĂĽre her tĂĽrlĂĽ duvarların ve çatlakların içinden geçmene izin verir.", + "Tato sfĂ©ra ti umoĹľĹuje procházet skrz libovolnĂ© zdi a pĹ™es propasti.", + "Đ­Ń‚Đ° Ńфера позволяет ходить через вŃе Ńтены и пропаŃти.", + "Dieser Orb erlaubt es dir, alle Arten von Wänden und AbgrĂĽnden zu passieren.", + }}, + {0xd2995d4e, { // "This Orb allows you to throw fire, just like the Fire Cultists.\n\nEach fire drains 5 charges. You are not allowed to throw fire into adjacent cells." + "Ta sfera pozwala Ci rzucać ogniem tak jak OgniĹ›ci KultyĹ›ci. \n\nKaĹĽdy rzucony ogieĹ„ wymaga 5 Ĺ‚adunkĂłw. Nie moĹĽesz rzucać ogniem do sÄ…siednich komĂłrek.", + "Bu KĂĽre tıpkı AteĹź MĂĽritleri gibi ateĹź atabilmeni saÄźlar.\n\nHer ateĹź 5 Ĺźarj tĂĽketir, bitiĹźik hĂĽcrelere ateĹź atamazsın.", + "Tato sfĂ©ra ti umoĹľĹuje vrhat oheĹ jako KultistĂ© ohnÄ›.\n\nKaĹľdĂ© pouĹľitĂ­ sníží náboj sfĂ©ry o 5. OheĹ nelze vrhnout na sousednĂ­ polĂ­ÄŤko.", + "Đ­Ń‚Đ° Ńфера позволит Đ’Đ°ĐĽ кидать огонь, прямо как огненные ĐşŃльтиŃŃ‚Ń‹.\n\nКаждое иŃпользование тратит 5 зарядов. Đ’Ń‹ не можете кинŃŃ‚ŃŚ огонь на ŃĐľŃеднюю клеткŃ.", + "Dieser Orb erlaubt es dir, Feuer zu werfen.\n\nJedes Feuer verbraucht 5 Ladungen. Du kannst kein Feuer auf angrenzende Zellen werfen.", + }}, + {0xd2c6cd03, { // "Scores and achievements are not" + "Wyniki i osiÄ…gniÄ™cia nie sÄ…", + "BaĹźarımlar ve puanlar Ă–klid", + "V EukleidovskĂ©m mĂłdu se", + "Очки и Đ´ĐľŃтижения не", + "Im euklidischem Modus werden", + }}, + {0xd2dabc99, { // "you are looking through it!" + "patrzysz przez hiperboloidÄ™!", + "Hiperboloidin içinden bakıyorsun!", + "dĂ­váš se skrz nÄ›j!", + "взгляните на гиперболоид!", + "Du fängst an zu verstehen!", + }}, + {0xd305b3e9, { // "Avoid escaping from a discharge (\"That was close\")." + "Unikaj uciekania przed wyĹ‚adowaniem (\"byĹ‚o blisko\").", +/*MISSING*/ "Avoid escaping from a discharge (\"That was close\").", + "Nesmíš se vyhnout vĂ˝boji (\"To bylo tÄ›snÄ›\").", + "Не Ńбегать из-под разряда (\"Đ­Ń‚Đľ было близко\").", +/*MISSING*/ "Avoid escaping from a discharge (\"That was close\").", + }}, + {0xd30ccbb8, { // "A simple servant of the master of the Ivory Tower." + "Prosty sĹ‚uga mistrza WieĹĽy z KoĹ›ci SĹ‚oniowej.", + "FildiĹźi Kuledeki basit bir hizmetkâr.", + "ProstĂ˝ sluĹľebnĂ­k pána Věže ze slonovĂ© kosti.", + "Обычный ŃĐ»Ńга Хозяина баŃни из Ńлоновой коŃти.", + "Ein einfacher Diener des Meisters des Elfenbeinturms.", + }}, + {0xd33a9d85, { // "disk" + "koĹ‚o", +/*MISSING*/ "disk", + "disk", + "диŃĐş", + "Scheibe", + }}, + {0xd3566de2, { // "Despite this intelligence, Rogues appear extremely surprised by the most basic facts about geometry. They must come from some really strange world.\n\n" + "Mimo ich inteligencji Cwaniacy wyglÄ…dajÄ… na szalenie zdziwionych nawet najprostszymi faktami geometrycznymi. MuszÄ… pochodzić z jakiegoĹ› bardzo dziwnego Ĺ›wiata.", +/*MISSING*/ "Despite this intelligence, Rogues appear extremely surprised by the most basic facts about geometry. They must come from some really strange world.\n\n", + "Navzdory jejich inteligenci se zdá, Ĺľe Chytráky dokážou nesmĂ­rnÄ› pĹ™ekvapit i ta nejzákladnÄ›jší geometrická fakta. MusejĂ­ pocházet z nÄ›jakĂ©ho opravdupodivnĂ©ho svÄ›ta.", + "НеŃмотря на их интеллект, Разбойники веŃŃŚĐĽĐ° Ńдивлены проŃтейŃими фактами из геометрии. Наверное, они приŃли из очень Ńтранного мира\n\n.", +/*MISSING*/ "Despite this intelligence, Rogues appear extremely surprised by the most basic facts about geometry. They must come from some really strange world.\n\n", + }}, + {0xd3c0dbc4, { // "This attack is likely to hit the attacker." + "Ten atak pewnie trafi w atakujÄ…cego.", + "Bu saldırı bĂĽyĂĽk ihtimalle saldırganı vuracaktır.", + "Tento Ăştok mĹŻĹľe velmi snadno zasáhnout i samotnĂ©ho ĂştoÄŤnĂ­ka.", + "Đ­Ń‚Đ° атака, вероятно, попадёт в Đ°Ń‚Đ°ĐşŃющего.", + "Dieser Angriff trifft wahrscheinlich den Angreifer.", + }}, + {0xd3c2afef, { // "It is a shame to cheat!" + "Wstyd oszukiwać!", + "Seni Hilekâr!", + "Cheatovat je hanba!", + "Как Đ’Đ°ĐĽ не Ńтыдно!", + "Cheaten ist eine Schande!", + }}, + {0xd4319f18, { // "A beast made of vines!\n\nVine Beasts turn into vines when they die." + "Stworzenie zrobione z winoroĹ›li!\n\nWinne Stwory zmieniajÄ… siÄ™ w winoroĹ›le, gdy ginÄ….", + "Ĺžaraptan yaratılmış bir canavar!\n\nĹžarap Canavarı öldüğünde Ĺźaraba dönüşür.", + "Netvor vytvoĹ™enĂ˝ z rĂ©vy!\n\nRĂ©vovĂ­ netvoĹ™i se po smrti promÄ›nĂ­ v rĂ©vu.", + "Зверь, Ńвитый из виноградных лоз!\n\nВинный зверь превращаетŃŃŹ в Đ»ĐľĐ·Ń ĐżŃ€Đ¸ гибели.", + "Eine Bestie aus Reben!\n\nRebenbestien werden zu Reben wenn sie sterben.", + }}, + {0xd4420f18, { // "summon Bonfire" + "przywoĹ‚aj ognisko", + "KampateĹźi çıkar", + "vyvolej ohništÄ›", + "призвать КоŃтры", + "rufe Leuchtfeuer herbei", + }}, + {0xd47953f4, { // "save the configuration" + "zapis konfiguracji", + "ayarları kaydet", + "uloĹľ konfiguraci", + "Ńохранить наŃтройки", + "Konfiguration speichern", + }}, + {0xd49712c9, { // "exit 3D configuration" + "wyjdĹş z konfiguracji 3D", +/*MISSING*/ "exit 3D configuration", + "opustit 3D konfiguraci", + "выйти из наŃтроек 3D", +/*MISSING*/ "exit 3D configuration", + }}, + {0xd4d45743, { // "The sandworm explodes in a cloud of Spice!" + "Czerw eksplodowaĹ‚! Chmura Przyprawy!", + "Kumkurdu patladı ve etrafa baharat saçtı!", + "PĂ­seÄŤnĂ˝ ÄŤerv vybuchl v oblaku KoĹ™enĂ­!", + "Червь взорвалŃŃŹ и ŃŃ‚Đ°Đ» облаком Ńпеций", + "Der Sandwurm explodiert in einer Wolke aus Spice", + }}, + {0xd4e089bc, { // "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)" + "\n\n(W trybie siedmiokÄ…tĂłw promieĹ„ dziaĹ‚ania dla pĹ‚yt zamykajÄ…cych jest zmniejszony do 2.)", +/*MISSING*/ "\n\n(For the heptagonal mode, the radius has been reduced to 2 for closing plates.)", + "\n\n(V sedmiĂşhelnĂ­kovĂ©m mĂłdu majĂ­ zavĂ­racĂ­ desky dosah pouze 2.)", + "\n\n(Đ’ режиме ŃемиŃгольников радиŃŃ Đ´ĐµĐąŃтвия закрывающих плит ŃменьŃен Đ´Đľ 2.)", + "\n\n(FĂĽr den heptagonalen Modus wurde der Wirkradius von SchlieĂźmechanismen auf 2 reduziert.)", + }}, + {0xd53e31f8, { // "This spot will be burning soon! RUN!" + "To siÄ™ zaraz zapali! UCIEKAJ!", + "Bu nokta yakında yanacak! KAÇ!", + "Za chvĂ­li to tu zaÄŤne hoĹ™et! UTĂŤKEJ!", + "Земля под Вами загораетŃŃŹ! Đ‘Đ•Đ“ĐТЕ!", + "Dieser Ort wird bald in Flammen stehen - RENN!", + }}, + {0xd5612bae, { // "You stab %the1." + "DĹşgn%Ä…Ĺ‚eĹ›0 %a1.", + "%a1 bıçakladın.", + "Probod%l0 jsi %a1.", + "Đ’Ń‹ закололи %a1.", + "Du erstichst %den1 %a1.", + }}, + {0xd568e544, { // "rotate left" + "obróć w lewo", + "sola döndĂĽr", + "otoÄŤenĂ­ vlevo", + "повернŃŃ‚ŃŚ влево", + "Nach links rotieren", + }}, + {0xd5a03aa4, { // "\"Have you visited a temple in R'Lyeh?\"" + "\"By%Ĺ‚eĹ›0 w Ĺ›wiÄ…tyni w R'Lyeh?\"", + "\"R'Lyeh'teki tapınağı ziyaret ettin mi?\"", + "\"NavštĂ­vi%l0 jsi uĹľ chrám v R'Lyeh?\"", + "\"Đ’Ń‹ Ńже были в храме в Đ 'Льехе?\"", + "\"Warst du schon in einem der Tempel in R'Lyeh?\"", + }}, + {0xd5bce324, { // "This mode allows you to edit the map.\n\nNOTE: Use at your own risk. Combinations which never appear in the real game may work in an undefined way (do not work, look strangely, give strange messages, or crash the game).\n\nTo get the most of this editor, some knowledge of inner workings of HyperRogue is required. Each cell has four main fields: land type, wall type, monster type, item type. The same wall type (especially \"none\", \"sea\", or \"bonfire\") may look or work a bit differently, based on the land it is in. Sometimes an object may appear twice on the list due to subtle differences (for example, Demons could move next turn or not).\n\nPress w, i, l, or m to choose which aspect of cells to change, then just click on the cells and they will change. Press 'c' while hovering over a cell to copy that cell, this copies all information about it. When copying large areas or placing multi-tile monsters, it might be important where on the cell you are clicking.\n\nYou can also press 0-9 to apply your changes to a greater radius. This also affects the copy/paste feature, allowing to copy a larger area.\n\nPress F2 to save the current map (and F3 to load it). If you try this after a long game of HyperRogue (without using Orbs of Safety), the filesize will be very large! Note however that large structures, such as Great Walls, large circles and horocycles, are destroyed by this.\n\nPress 'b' to mark cells as boundaries. Such cells, and cells beyond them, are not copied by the copy/paste feature, nor saved by the save feature.\n\n" + "Ten tryb pozwala edytować mapÄ™.\n\nUWAGA: uĹĽywasz na wĹ‚asne ryzyko! Kombinacje, ktĂłre nigdy nie pojawiajÄ… siÄ™ w prawdziwej grze, mogÄ… dziaĹ‚ać w sposĂłb nieokreĹ›lony (nie dziaĹ‚ać, wyglÄ…dać dziwnie, produkować dziwne teksty albo wywalać grÄ™).\n\nBy wynieść najwiÄ™cej z tego edytora, przydatna jest pewna wiedza o dziaĹ‚aniu HyperRogue. KaĹĽde pole ma cztery atrybuty: typ lÄ…du, typ Ĺ›ciany, typ potwora, typ przedmiotu. Ten sam typ Ĺ›ciany (szczegĂłlnie \"nic\", \"morze\" albo \"ognisko\") moĹĽe wyglÄ…dać albo dziaĹ‚ać różnie w zaleĹĽnoĹ›ci od lÄ…du, na ktĂłrym siÄ™ znajduje. Czasami obiekt moĹĽe wystÄ™pować dwa razy na liĹ›cie ze wzglÄ™du na subtelne różnice (na przykĹ‚ad, Demony mogÄ… siÄ™ ruszać w nastÄ™pnej kolejce albo nie).\n\nWciĹ›nij w, i, l, m by wybrać, ktĂłry atrybut zmienić, nastÄ™pnie klikaj pola i bÄ™dÄ… siÄ™ zmieniać. NaciĹ›nij 'c', gdy myszka jest nad polem, by kopiować to pole -- to kopiuje caĹ‚Ä… informacjÄ™ o tym polu. Kiedy kopiujesz albo stawiasz potwory wielopolowe, moĹĽe mieć znaczenie punkt pola, w ktĂłrym klikasz.\n\nMoĹĽesz teĹĽ nacisnąć 0-9 by zastosować zmianÄ™ w wiÄ™kszym promieniu. To wpĹ‚ywa rĂłwnieĹĽ na kopiowanie/wklejanie, pozwalajÄ…c na skopiowanie wiÄ™kszego obszaru.\n\nWciĹ›nij F2, by zapisać obecnÄ… mapÄ™ (i F3, by naĹ‚adować). Jak sprĂłbujesz to zrobić po dĹ‚ugiej grze w HyperRogue (nie uĹĽywajÄ…cej Sfer BezpieczeĹ„stwa), rozmiar pliku bÄ™dzie bardzo duĹĽy! Uwaga: duĹĽe struktury, jak Wielkie Ĺšciany i horocykle, sÄ… przez to niszczone.\n\nNaciĹ›nij 'b' by zaznaczyć pole jako brzeg. Takie pola i pola za nimi nie sÄ… kopiowane funkcjÄ… copy/paste, ani teĹĽ nie sÄ… zapisywane funkcjÄ… save.\n\n", + "Bu mod haritayı dĂĽzenlemeni saÄźlar..\n\nNOT: sorumluluk sende! Gerçek oyunda hiç karşına çıkmayacak kombinasyonlar bilinmeyen bir Ĺźekilde çalışabilir. (çalışmayabilir, garip gözĂĽkebilir, oyunu çökertebilir.).\n\nEditörĂĽ layığıyla kullanabilmek için HyperRogue'un iç dinamiklerine dair bilgi sahibi olman beklenir. Her hĂĽcre dört temel alana sahip: diyar tipi, duvar tipi, canavar tipi, eĹźya tipi.Aynı duvar tipi (özellikle \"hiç\", \"deniz\", ve \"kampateĹźi\") içinde bulunduÄźu diyara göre farklı gözĂĽkebilir ve farklı iĹźlev edinebilir. Bazen bir eĹźya özel durumundan ötĂĽrĂĽ listede iki kez gözĂĽkebilir.(Meselâ Ĺźeytanın bir sonraki tur hareket edip edemeyeceÄźi durumu).\n\nHĂĽcrelerin hangi özelliÄźini deÄźiĹźtirmek istedÄźinizi w, i, l ve m'ye basarak seç. Ä°Ĺźaretçinin olduÄźu hĂĽcreyi baĹźka yere kopyalamak için c'ye bas. Bu, hĂĽcreye dair bilgiyi de kopyalar. Çok hĂĽcreli canavarları kopyalarken hĂĽcrenin neresine bastığın sonucu deÄźiĹźtirebilir.\n\n DeÄźiĹźikliklerini daha bĂĽyĂĽk bir çapta uygulamak için 0-9'a basabilirsin.. Bu aynı zamanda, kopyala/yapıştır özelliÄźinin de çapını geniĹźletir.\n\nMevcut haritayı kaydetmek için F2'ye bas (yĂĽklemek için de F3'e bas). EÄźer bunu GĂĽvenlik KĂĽresi kullanmadığınız bir oyunda denersen, dosya boyutu çok bĂĽyĂĽk olacaktır! Dikkat: BĂĽyĂĽk yapılar, meselâ horosikıllar, bĂĽyĂĽk duvarlar, geniĹź çemberler bu özelliÄźi kullanınca yok olurlar. \n\nHĂĽcreleri sınır olarak belirlemek için b'ye basın. Bu hĂĽcreler ve bu hĂĽcrelerin ötesindeki hĂĽcreler, kopyala/yapıştır ve kaydetme özelliÄźine dahil edilmezler. \n\n", + "V tomto mĂłdu mĹŻĹľeš editovat mapup.\n\nPOZOR: Používej na vlastnĂ­ nebezpeÄŤĂ­. Kombinace, kterĂ© se v normálnĂ­ hĹ™e nikdy nevyskytujĂ­, mohou fungovat nedefinovanĂ˝m zpĹŻsobem (nefungovat, divnÄ› vypadat, generovat podivnĂ© zprávy nebo zpĹŻsobit spadnutĂ­ hry).\n\nAbys z tohoto editoru zĂ­skal co nejvĂ­ce, musíš vÄ›dÄ›t nÄ›co o tom, jak HyperRogue funguje \"pod kapotou\". KaĹľdĂ© polĂ­ÄŤko má ÄŤtyĹ™i atributy: typ kraje, typ zdi, typ netvora, a typ pĹ™edmÄ›tu. Ten samĂ˝ typ zdi (pĹ™edevším \"nic\", \"moĹ™e\" nebo \"oheĹ\") mĹŻĹľe vypadat nebo se chovat trochu jinak podle toho, ve kterĂ©m kraji se nacházĂ­. NÄ›kterĂ© poloĹľky mohou bĂ˝t v seznamu dvakrát dĂ­ky drobnĂ˝m rozdĂ­lĹŻm (například ÄŚerti majĂ­ dvÄ› formy podle toho, zda se v příštĂ­m kole majĂ­ pohnout nebo ne).\n\nKlávesami 'w', 'i', 'l' a 'm' udáváš, kterĂ˝ aspekt polĂ­ÄŤek chceš zmÄ›nit; pak na polĂ­ÄŤko jednoduše klikni, a ono se zmÄ›nĂ­. Stiskem klávesy 'c' zkopĂ­ruješ polĂ­ÄŤko pod kurzorem (zkopĂ­rujĂ­ se všechny informace o tomto polĂ­ÄŤku). PĹ™i kopĂ­rovánĂ­ nebo vkládánĂ­ vĂ­cepolĂ­ÄŤkovĂ˝ch netvorĹŻ mĹŻĹľe bĂ˝t dĹŻleĹľitĂ©, kam pĹ™esnÄ› v polĂ­ÄŤku klikáš.\n\nSvĂ© zmÄ›ny mĹŻĹľeš takĂ© aplikovat na vÄ›tší oblast pomocĂ­ kláves 0-9, kterĂ© nastavujĂ­ polomÄ›r. To takĂ© ovlivĹuje kopĂ­rovánĂ­/vkládánĂ­, coĹľ ti umoĹľnĂ­ kopĂ­rovat vÄ›tší oblast.\n\nF2 uloží souÄŤasnou mapu (a F3 ji nahraje). Pokud to udÄ›láš po dlouhĂ© hĹ™e HyperRogue (kde jsi nepouĹľil SfĂ©ru BezpeÄŤnosti), bude vzniklĂ˝ soubor hodnÄ› velkĂ˝! Ovšem pozor -- velkĂ© struktury, jako jsou VelkĂ© zdi, velkĂ© kruhy a horocykly budou uloĹľenĂ­m a nahránĂ­m mapy zniÄŤeny.\n\nKlávesou 'b' mĹŻĹľeš polĂ­ÄŤka oznaÄŤit jako hraniÄŤnĂ­. Tato polĂ­ÄŤka a polĂ­ÄŤka za nimi nebudou pĹ™i operacĂ­ch kopĂ­rovánĂ­ a vkládánĂ­ kopĂ­rovány a nebudou ani uloĹľeny.\n\n", + "Đ’ этом режиме можно редактировать картŃ.\n\nĐ’ĐťĐĐśĐĐťĐĐ•: иŃпользŃйте его на Ńвой риŃĐş! Комбинации, которые не могŃŃ‚ возникнŃŃ‚ŃŚ в наŃтоящей игре, могŃŃ‚ иметь неопределённое поведение (не работать, выглядеть Ńтранно, выдавать Ńтранные Ńообщения, вызывать вылет игры).\n\nЧтобы пользоватьŃŃŹ редактором, Đ˝Ńжно немного предŃтавлять, как ŃŃтроена игра HyperRogue. Каждая клетка Ńодержит четыре ĐľŃновных элемента: тип земли, тип Ńтены, тип монŃтратип предмета. некоторые типы Ńтен (ĐľŃобенно \"ничего\", \"море\" и \"коŃŃ‚Ń‘Ń€\") могŃŃ‚ выглядеть или работать немного по-Ń€Đ°Đ·Đ˝ĐľĐĽŃ Đ˛ завиŃимоŃти от земли, в которой они находятŃŃŹ. Đногда объект может находитьŃŃŹ в ŃпиŃке в двŃŃ… экземплярах в завиŃимоŃти от разных вещей (например, бŃдет ли Демон двигатьŃŃŹ на ŃледŃющий ход).\n\nНажмите w, i, l, m чтобы выбрать, какой атрибŃŃ‚ клетки бŃдете менять, нажмите на клеткŃ, и она изменитŃŃŹ. Нажмите 'c', когда ĐĽŃ‹Ńка находитŃŃŹ над клетко , чтобы копировать ĐşĐ»ĐµŃ‚ĐşŃ -- копирŃетŃŃŹ вŃŃŹ информация Đľ ней. Đ•Ńли Đ’Ń‹ копирŃете или размещаете монŃтров из неŃкольких клеток, может иметь значение чаŃŃ‚ŃŚ клетки, на которŃŃŽ Đ’Ń‹ нажмёте.\n\nНажмите 0-9, чтобы применить изменения Ń Đ±ĐľĐ»ŃŚŃим радиŃŃом. Đ­Ń‚Đľ также влияет на копирование/вŃтавкŃ, копирŃŃŹ больŃŃŃŽ облаŃŃ‚ŃŚ.\n\nНажмите F2, чтобы Ńохранить текŃщŃŃŽ ĐşĐ°Ń€Ń‚Ń (и F3, чтобы загрŃзить). Đ•Ńли вы попробŃете Ńделат ŃŤŃ‚Đľ поŃле долгой игры в HyperRogue (без Ńфер БезопаŃноŃти), размер файла может быть очень велик! БольŃие ŃŃ‚Ń€ŃктŃры, такие как Великие Ńтены и ороциклы, бŃĐ´ŃŃ‚ Ńничтожены.\n\nНажмите 'b', чтобы обозначить ĐşĐ»ĐµŃ‚ĐşŃ ĐşĐ°Đş границŃ. Такие клетки, как и клетки Đ·Đ° ними, не бŃĐ´ŃŃ‚ копироватьŃŃŹ, вŃтавлятьŃŃŹ и ŃохранятьŃŃŹ.\n\n", + "Dieser Modus erlaubt es dir die Map zu bearbeiten.\n\nWARNUNG: Benutzen auf eigene Gefahr! Kombinationen, die im Spiel selbst nicht vorkommen, können in skurrilen Situationen enden (funktioniert nicht, sieht komisch aus, erzeugt komische Meldungen, fĂĽhrt zum Absturz.\n\nUm das beste aus dem Editor rauszuholen ist etwas Wissen ĂĽber Abläufe in HyperRogue nötig. Jede Zelle hat vier Hauptarten: Landtyp, Wandtyp, Monstertyp und Itemart. Ein und dieselbe Wand kann unterschiedlich aussehen und funktionieren, je nachdem auf welchem Land sie platziert ist. Manche Objekte können auch mehrmals Meldungen erzeugen. DrĂĽcke w, i, l oder m um zu bestimmen, welchen Aspekt der Zelle du änderst. Dann klick einfach auf die Zelle und sie wird sich ändern. DrĂĽcke 'c' während du dich ĂĽber einer Zelle befindest um diese zu kopieren. Beim Kopieren von groĂźen Gebieten und dem Platzieren von groĂźen Monstern kann es sehr wichtig sein wo man klickt.\n\nDurch das DrĂĽcken von 0-9 werden die Ă„nderungen in einem größerem Radius ausgefĂĽhrt. Das Ganze beeinflusst auch das Kopieren und EinfĂĽgen, wodurch ein größerer Bereich kopiert werden kann.\n\nDrĂĽcke F2 um die Map zu speichern (und F3 um sie zu laden). Nach einer langen HyperRogue Sitzung (ohne den Orb der Geborgenheit zu nutzen) kann die Datei sehr groĂź sein! Allerdings werden groĂźe Strukturen, wie GroĂźe Mauern, groĂźe Kreise und Horozykeln dadurch zerstört.\n\nDrĂĽcke 'b' um Zellen als Grenzen zu markieren. Solche Zellen, sowie Zellen hinter diesen können nicht kopiert oder gespeichert werden.\n\n", + }}, + {0xd5bf9cc8, { // "explore the Emerald Pattern" + "Eksploracja Szmaragdowego Wzoru", + "ZĂĽmrĂĽt Dokusunu keĹźfet", + "ZkoumánĂ­ SmaragdovĂ©ho vzoru", + "ĐĐ·Ńчить ĐĐ·ŃĐĽŃ€Ńдный Ńзор", + "Erkunde das Smaragdmuster", + }}, + {0xd5dfb865, { // "%1 vertices" + "wierzchoĹ‚ki: %1", + "köşeler: %1", + "vrcholy: %1", + "верŃины: %1", + "Eckpunkte: %1", + }}, + {0xd6623e59, { // "A Stone from the Land of Power. You are not sure what it is exactly, but as the Powerstones are kept in crystal cabinets, they are surely valuable." + "KamieĹ„ z Krainy Mocy. W sumie to nie wiesz, co to jest, ale trzymajÄ… te kamienie w krysztaĹ‚owych gablotach, takĹĽe muszÄ… być bardzo cenne.", + "Güç Diyarından bir taĹź. Ne olduÄźuna tam olarak emin deÄźilsin, ama bu taĹźlar kristal kabinlerde saklandığına göre çok deÄźerli olmalılar.", + "Kámen z Kraje Moci. Nejsi si jistĂ˝, co je pĹ™esnÄ› zaÄŤ, ale kdyĹľ dávajĂ­ Mocikamy do kĹ™išťálovĂ˝ch vitrĂ­n, musejĂ­ mĂ­t jistÄ› velkou cenu.", + "Камень из Земли Ńилы. Đ’Ń‹ точно не знаете, что ŃŤŃ‚Đľ такое, но раз они Ńпрятаны в криŃтальных кабинетах, они довольно ценны.", + "Ein Stein aus dem Land der Macht. Du bist dir nicht ganz sicher was er tut, aber da er in einer Kristallvitrine ist, ist er sicher wertvoll!", + }}, + {0xd66b2b2a, { // "PoincarĂ© Ball model" + "Model kuli", +/*MISSING*/ "PoincarĂ© Ball model", + "Model PoincarĂ©ho koule", + "СферичеŃкая модель ĐźŃанкаре", +/*MISSING*/ "PoincarĂ© Ball model", + }}, + {0xd673c1e3, { // "challenge" + "wyzwanie", + " ek görev", + "obtĂ­Ĺľná", + "иŃпытание", + "herausfordernd", + }}, + {0xd687021e, { // "e = edit this" + "e = edytuj to", + "e = bunu dĂĽzenle", + "e = editace", + "e = изменить", + "e = editieren", + }}, + {0xd68ec8e1, { // "Demons are slow, but you'll need the experience against stronger ones..." + "Mniejsze Demony sÄ… powolne, ale musisz zdobyć doĹ›wiadczenie przeciwko WiÄ™kszym...", +/*MISSING*/ "Demons are slow, but you'll need the experience against stronger ones...", + "ÄŚerti jsou pomalĂ­, ale proti ĎáblĹŻm budeš potĹ™ebovat zkušenosti...", + "Демоны медленны, но Đ’Đ°ĐĽ Đ˝Ńжен опыт, чтобы ŃражатьŃŃŹ против более Ńильных...", +/*MISSING*/ "Demons are slow, but you'll need the experience against stronger ones...", + }}, + {0xd693326f, { // "Forest Trolls create an impassable wall when they die." + "Zabite LeĹ›ne Trolle pozostawiajÄ… Ĺ›cianÄ™.", + "Orman Trolleri öldĂĽklerinde artlarında aşılmaz bir duvar bırakır.", + "LesnĂ­ trollovĂ© se po smrti promÄ›nĂ­ v neprostupnou zeÄŹ.", + "ЛеŃные тролли превращаютŃŃŹ в непроходимые Ńтены, когда Ńмирают.", + "Waldtrolle erschaffen eine unpassierbare Wand wenn sie sterben.", + }}, + {0xd6a28707, { // "Cannot teleport on a monster!" + "Nie moĹĽesz teleportować siÄ™ na potwora!", + "Bir canavarın ĂĽzerine ışınlanamazsın!", + "NemĹŻĹľeš se teleportovat na netvora!", + "Нельзя телепортироватьŃŃŹ на монŃтра!", + "Du kannst nicht auf Monster teleportieren!", + }}, + {0xd707820a, { // "In the Shoot'em Up mode, you are armed with thrown Knives." + "W trybie strzelanki jesteĹ› uzbrojony w noĹĽe do rzucania.", + "SHMUP modunda silahın fırlatılabilen bıçaklar.", + "V mĂłdu stříleÄŤky jsi vyzbrojenĂ˝ vrhacĂ­mi noĹľi.", + "Đ’ режиме Ńтрельбы Đ’Ń‹ воорŃжены метательными ножами.", + "Im Ballermodus bist du mit Wurfmessern bewaffnet.", + }}, + {0xd7297e6d, { // "This statue is made of materials which cannot be found in your world." + "Ta statua jest zrobiona z materiaĹ‚Ăłw, ktĂłrych nie ma w Twoim Ĺ›wiecie.", + "Bu heykel, senin geldiÄźin dĂĽnyada bulunamayacak maddelerden yapılmış.", + "Tato soška je vytvoĹ™ena z materiálĹŻ, kterĂ© se ve tvĂ©m svÄ›tÄ› nenacházejĂ­.", + "Эти ŃŃ‚Đ°Ń‚Ńи Ńделаны из материала, который не найдёŃŃŚ в Đ’Đ°Ńем мире.", + "Diese Statue besteht aus Materialien, die in deiner Welt nicht existieren.", + }}, + {0xd75fc967, { // "PoincarĂ© model" + "model PoincarĂ©", +/*MISSING*/ "PoincarĂ© model", + "PoincarĂ©ho model", + "модель ĐźŃанкаре", +/*MISSING*/ "PoincarĂ© model", + }}, + {0xd786c69d, { // "A beautiful figurine, made of ivory. Figurines close to the base of the Tower tend do disappear after you have collected many of them." + "PiÄ™kna figurka z koĹ›ci sĹ‚oniowej. Figurki blisko podstawy WieĹĽy znikajÄ…, gdy zbierzesz duĹĽo figurek.", + "FildiĹźinden yapılmış gĂĽzel bir biblo. Bunlardan çok sayıda topladığında, kulenin temeline yakın biblolar yok olmaya baĹźlar.", + "Nádherná figurka ze slonovĂ© kosti. Figurky poblĂ­Ĺľ základĹŻ Věže majĂ­ tendenci mizet, pokud jich zĂ­skáš hodnÄ›.", + "ЧŃдеŃная фигŃрка из Ńлоновой коŃти. ФигŃрки рядом Ń ĐľŃнованием баŃни пропадают, когда Đ’Ń‹ Ńоберёте много их.", + "Eine hĂĽbsche Figur aus Elfenbein. Figuren nah am FuĂźe des Turms neigen dazu zu verschwinden wenn du viele gesammelt hast.", + }}, + {0xd7d9ba22, { // "plain" + "prosty", + "dĂĽz", + "obyÄŤejnĂ˝", + "проŃтой", + "schlicht", + }}, + {0xd853202b, { // "Dead orbs gained!" + "Zdobyte Martwe Sfery!", + "Ă–lĂĽ KĂĽreler kazandın!", + "ZĂ­ska%l0 jsi MrtvĂ© sfĂ©ry!", + "Мёртвые Ńферы полŃчены!", + "Tote Orbs erhalten!", + }}, + {0xd85c8c1c, { // "three stripes" + "trzy paski", + "üç Ĺźerit", + "tĹ™i pásy", + "три полоŃŃ‹", + "Drei Streifen", + }}, + {0xd867f5a7, { // "Safety (quick save)" + "BezpieczeĹ„stwo (szybki save)", + "GĂĽvenlik (hızlı kayıt)", + "BezpeÄŤnost (rychlĂ© uloĹľenĂ­)", + "СохранитьŃŃŹ", + "Sicherheit (schnell speichern)", + }}, + {0xd86b25e9, { // "or another key to continue" + "lub inny klawisz, by kontynuować", + "veya devam etmek için baĹźka bir tuĹźa bas.", + "jakákoli jiná klávesa: pokraÄŤovat", + "либо Đ´Ń€ŃĐłŃŃŽ клавиŃŃ, чтобы продолжить", + "oder eine beliebige andere Taste zum Fortfahren.", + }}, + {0xd87a76e8, { // "cells generated" + "wygenerowane pola", + "ĂĽretilen hĂĽcreler", + "poÄŤet vygenerovanĂ˝ch polĂ­ÄŤek", + "клеток Ńгенерировано", + "Generierte Zellen", + }}, + {0xd8a00f35, { // "letters" + "literki", +/*MISSING*/ "letters", + "pĂ­smena", + "бŃквы", +/*MISSING*/ "letters", + }}, + {0xd8b71c12, { // "These creatures are slow, but they often appear in large numbers." + "Te demony sÄ… powolne, ale czÄ™sto pojawiajÄ… siÄ™ w duĹĽych grupach.", + "Bu yaratıklar yavaĹźtır ama genellikle sĂĽrĂĽ halinde gezerler.", + "Tito tvorovĂ© jsou pomalĂ­, ale ÄŤasto se objevujĂ­ ve velkĂ©m poÄŤtu.", + "Эти ŃŃщеŃтва медленны, но они берŃŃ‚ количеŃтвом.", + "Diese Monster sind langsam aber sie erscheinen oft in groĂźen Gruppen.", + }}, + {0xd8c4577a, { // "Your Orb of Recall is blocked by something big!" + "CoĹ› duĹĽego blokuje TwojÄ… SferÄ™ Powrotu!", +/*MISSING*/ "Your Orb of Recall is blocked by something big!", + "Tvoji SfĂ©ru Návratu blokuje nÄ›co velikĂ©ho!", + "Что-Ń‚Đľ больŃое блокирŃет ваŃŃ ĐˇŃ„ĐµŃ€Ń Đ’ĐľĐ·Đ˛Ń€Đ°Ń‰ĐµĐ˝Đ¸ŃŹ!", +/*MISSING*/ "Your Orb of Recall is blocked by something big!", + }}, + {0xd8ca7331, { // "Collect more treasures, there are still more lands waiting..." + "Zbieraj skarby, nowe krainy czekajÄ…...", + "Daha fazla hazine topla, hâlâ seni bekleyen diyarlar var...", + "SbĂ­rej další poklady, další kraje stále ÄŤekajĂ­...", + "Собирайте больŃе Ńокровищ, ещё много земель Đ’Đ°Ń Đ¶Đ´ŃŃ‚...", + "Sammle mehr Schätze, es warten weitere Länder auf dich...", + }}, + {0xd8cc6c5b, { // "Now, go to the Burial Grounds and find an Orb of the Sword. The Sword appears to always be facing in the same direction whatever you do, and it appears that you have to rotate the sword to excavate the treasures; yet, it is possible to excavate them! You migth have already noticed that the world rotates after you move around a loop and return to an old place.\n\nThis is related to the fact that the world of HyperRogue is curved, and the sum of angles in a triangle is not equal to 180 degrees." + "Teraz idĹş do KurhanĂłw i znajdĹş SferÄ™ Ostrza. Ostrze wyglÄ…da jakby zawsze byĹ‚o skierowane w tÄ… samÄ… stronÄ™, a wydaje siÄ™, ĹĽe do wykopania skarbĂłw trzeba je obrĂłcić. Jednak wykopanie skarbĂłw jest moĹĽliwe! Być moĹĽe juĹĽ zauwaĹĽy%Ĺ‚eĹ›0, ĹĽe Ĺ›wiat siÄ™ obraca, gdy zrobisz pÄ™tlÄ™.\n\nJest to zwiÄ…zane z zakrzywieniem Ĺ›wiata HyperRogue, i tym, ĹĽe suma kÄ…tĂłw trĂłjkÄ…ta nie jest rĂłwna 180 stopni.", +/*MISSING*/ "Now, go to the Burial Grounds and find an Orb of the Sword. The Sword appears to always be facing in the same direction whatever you do, and it appears that you have to rotate the sword to excavate the treasures; yet, it is possible to excavate them! You migth have already noticed that the world rotates after you move around a loop and return to an old place.\n\nThis is related to the fact that the world of HyperRogue is curved, and the sum of angles in a triangle is not equal to 180 degrees.", + "TeÄŹ se vydej na PohĹ™ebištÄ› a najdi SfĂ©ru meÄŤe. AĹĄ dÄ›láš, co dÄ›láš, MeÄŤ bude vĹľdy otoÄŤenĂ˝ stejnĂ˝m smÄ›rem, a pĹ™itom se zdá, Ĺľe abys mohl vykopat poklady, musíš MeÄŤ natoÄŤit; pĹ™esto je však moĹľnĂ© je vykopat! MoĹľná uĹľ sis všiml, Ĺľe kdyĹľ se pohybuješ po uzavĹ™enĂ© kĹ™ivce a vrátíš se tam, odkud jsi vyšel, bude svÄ›t pootoÄŤenĂ˝.\n\nTo souvisĂ­ s faktem, Ĺľe svÄ›t HyperRogue je zakĹ™ivenĂ˝ a souÄŤet ĂşhlĹŻ v trojĂşhelnĂ­ku se nerovná 180 stupĹĹŻm.", + "Теперь иди в ĐšŃрганы и найди ĐˇŃ„ĐµŃ€Ń ĐĽĐµŃ‡Đ°. КажетŃŃŹ, что меч вŃегда направлен в ĐľĐ´Đ˝Ń Đ¸ Ń‚Ń Đ¶Đµ ŃторонŃ, что бы Ń‚Ń‹ не делал%E0, Đ° для того, чтобы добыть Ńокровища, Đ˝Ńжно его повернŃŃ‚ŃŚ. Рего можно повернŃŃ‚ŃŚ! Может быть, Ń‚Ń‹ Ńже заметил%E0, что мир повернётŃŃŹ, еŃли пройти по петле и вернŃŃ‚ŃŚŃŃŹ на Ń‚Đľ же меŃŃ‚Đľ.\n\nĐ­Ń‚Đľ Ńвязано Ń Ń‚ĐµĐĽ, что мир HyperRogue иŃкривлён, и ŃŃĐĽĐĽĐ° Ńглов треŃгольника не равна 180 градŃŃĐ°ĐĽ.", +/*MISSING*/ "Now, go to the Burial Grounds and find an Orb of the Sword. The Sword appears to always be facing in the same direction whatever you do, and it appears that you have to rotate the sword to excavate the treasures; yet, it is possible to excavate them! You migth have already noticed that the world rotates after you move around a loop and return to an old place.\n\nThis is related to the fact that the world of HyperRogue is curved, and the sum of angles in a triangle is not equal to 180 degrees.", + }}, + {0xd8e7b5df, { // "quit" + "koniec", +/*MISSING*/ "quit", + "konec", + "выход", +/*MISSING*/ "quit", + }}, + {0xd91463d5, { // "The sandworm explodes!" + "Czerw eksplodowaĹ‚!", + "Kumkurdu patladı!", + "PĂ­seÄŤnĂ˝ ÄŤerv vybuchl!", + "Червь взорвалŃŃŹ!", + "Der Sandwurm explodiert!", + }}, + {0xd919e5b0, { // "skin color" + "kolor skĂłry", + "deri rengi", + "barva pleti", + "цвет кожи", + "Hautfarbe", + }}, + {0xd95bd05f, { // "player 6 X" + "gracz 6 X", +/*MISSING*/ "player 6 X", + "hráč 6 X", + "игрок 6 X", + "Spieler 6 X", + }}, + {0xd95bd060, { // "player 6 Y" + "gracz 6 Y", +/*MISSING*/ "player 6 Y", + "hráč 6 Y", + "игрок 6 Y", + "Spieler 6 Y", + }}, + {0xd96191e7, { // "line patterns" + "wzory linii", +/*MISSING*/ "line patterns", + "vzory ÄŤar", + "Ńаблоны линий", +/*MISSING*/ "line patterns", + }}, + {0xd97c7d02, { // "This Orb allows to temporarily create impassable matter, either to block paths or to build bridges across chasms and waters." + "Ta sfera pozwala tymczasowo stworzyć nieprzekraczalnÄ… barierÄ™. MoĹĽna to wykorzystać do blokowania tras lub do budowy mostĂłw nad przepaĹ›ciami i wodami.", + "Bu KĂĽre, yolları tıkamak veya boĹźluklar ve su ĂĽzerine köprĂĽ kurmak için geçilemez madde oluĹźturmaya yarar. ", + "Tato SfĂ©ra ti umoĹľĹuje doÄŤasnÄ› vytvářet neprostupnou hmotu, kterou mĹŻĹľeš zatarasit cestu nebo využít jako most pĹ™es propasti nebo pĹ™es vodu.", + "Đ­Ń‚Đ° Ńфера позволяет временно Ńоздавать непроходимое вещеŃтво, чтобы блокировать ĐżŃти или Ńтроить ĐĽĐľŃŃ‚Ń‹ через пропаŃŃ‚ŃŚ или водŃ.", + "Dieser Orb erlaubt es dir, unpassierbare temporäre Materie zu erzeugen, um Pfade zu blockieren oder BrĂĽcken ĂĽber Wasser und Schluchten zu bauen.", + }}, + {0xd987ce32, { // "All the monsters you kill are carried to this strange land, and buried. Careless Rogues are also carried here..." + "Pochowane sÄ… tu wszystkie potwory, ktĂłre zabijasz. A takĹĽe poszukiwacze skarbĂłw, ktĂłrzy nie uwaĹĽali...", + "Ă–ldĂĽrdüğünĂĽz bĂĽtĂĽn canavarlar buraya taşındı ve gömĂĽldĂĽ. Dikkatsiz Seyyahlar da buraya taşındı...", + "Všichni netvoĹ™i, kterĂ© zabiješ, jsou odneseni do tohoto podivnĂ©ho kraje, a tam pohĹ™beni. A takĂ© neopatrnĂ­ lupiÄŤi...", + "Đ’Ńе Ńбитые Вами монŃтры похоронены здеŃŃŚ. РнеоŃторожные охотники Đ·Đ° Ńокровищами тоже...", + "Alle Monster, die du tötest, werden hier begraben. Auch unvorsichtige Schurken landen hier...", + }}, + {0xd9a6e92a, { // "Cannot drop %the1 here!" + "Nie moĹĽesz tu poĹ‚oĹĽyć %a1!", + "Ă–lĂĽ KĂĽreyi buraya bırakamazsın!", + "Tady nelze poloĹľit Mrtvou SfĂ©ru!", + "Сюда нельзя положить мёртвŃŃŽ ŃферŃ!", + "Du kannst %den1 %a1 hier nicht ablegen!", + }}, + {0xd9b57a91, { // "turn right" + "skręć w prawo", + "saÄźa dön", + "otoÄŤenĂ­ vpravo", + "повернŃŃ‚ŃŚ направо", + "Nach rechts drehen", + }}, + {0xd9c1c404, { // "first on top" + "pierwsze na gĂłrze", +/*MISSING*/ "first on top", + "prvnĂ­ nahoĹ™e", + "первые ŃверхŃ", +/*MISSING*/ "first on top", + }}, + {0xd9c3c871, { // "This flower brings fortune to the person who finds it.\n" + "Te roĹ›liny dajÄ… szczęście temu, kto je znajdzie.\n", + "Bu çiçek kendisini bulana Ĺźans getirir.\n", + "Tato rostlina pĹ™ináší štÄ›stĂ­ tomu, kdo ji najde.\n", + "Этот цветок приноŃит ŃĐ´Đ°Ń‡Ń Ń‚ĐľĐĽŃ, кто найдёт его.\n", + "Diese Blume bringt ihrem Finder GlĂĽck.\n", + }}, + {0xda09920d, { // "'n' to start" + "n = start", + "n = baĹźlat", + "n = start", + "n = начать", + "n = start", + }}, + {0xda0cf1c2, { // "sight range" + "zasiÄ™g wzroku", +/*MISSING*/ "sight range", + "viditelnost", + "радиŃŃ Đ·Ń€ĐµĐ˝Đ¸ŃŹ", +/*MISSING*/ "sight range", + }}, + {0xda2f2292, { // "You summon %the1!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 %a1!", + "%a1 çağırdın!", + "Vyvola%l1 jsi %a1!", + "Đ’Ń‹ призвали %a1!", + "Du beschwörst %den1 %a1!", + }}, + {0xda37711f, { // "heavy" + "gruby", + "ağır", + "těžkĂ˝", + "тяжёлый", + "schwierig", + }}, + {0xda55b584, { // "first on bottom" + "pierwsze na dole", +/*MISSING*/ "first on bottom", + "prvnĂ­ dole", + "первые ŃнизŃ", +/*MISSING*/ "first on bottom", + }}, + {0xda753c45, { // "summon Ivy" + "przywoĹ‚aj Bluszcz", + "Sarmaşık çıkar", + "vyvolej BĹ™eÄŤĹĄan", + "призвать Плющ", + "rufe Efeu herbei", + }}, + {0xda924f7c, { // "The result of a collaboration of the Great Vizier and the Wizard of the Ivory Tower." + "Efekt współpracy Wielkiego Wezyra i Czarodzieja z WieĹĽy z KoĹ›ci SĹ‚oniowej.", +/*MISSING*/ "The result of a collaboration of the Great Vizier and the Wizard of the Ivory Tower.", + "VĂ˝sledek spolupráce VelkovezĂ­ra a ÄŚarodÄ›je z Věže ze slonovĂ© kosti.", + "СовмеŃтная разработка Великого визиря и Мага из Đ‘Đ°Ńни из Ńлоновой коŃти.", +/*MISSING*/ "The result of a collaboration of the Great Vizier and the Wizard of the Ivory Tower.", + }}, + {0xdac95cba, { // "Treasure gained!" + "Skarb zdobyty!", + "Hazine kazanıldı!", + "ZĂ­ska%l0 jsi poklad!", + "Сокровища полŃчены!", + "Schatz erhalten!", + }}, + {0xdb18151b, { // "Could not save the paper model data" + "Nie udaĹ‚o siÄ™ zapisać danych do modelu", + "Kâğıt modeli verisi kaydedilemedi", + "NepodaĹ™ilo se uloĹľit data pro papĂ­rovĂ˝ model", + "Не ŃдалоŃŃŚ Ńохранить модель", + "Papiermodell konnte nicht gespeichert werden", + }}, + {0xdb6a8542, { // "old style joystick configuration" + "konfiguracja joysticka w starym stylu", +/*MISSING*/ "old style joystick configuration", + "starĂ˝ styl konfigurace joysticku", + "Ńтарый режим наŃтройки джойŃтика", +/*MISSING*/ "old style joystick configuration", + }}, + {0xdb6beab6, { // "main menu" + "menu gĹ‚Ăłwne", +/*MISSING*/ "main menu", + "hlavnĂ­ menu", + "главное меню", +/*MISSING*/ "main menu", + }}, + {0xdb7f948a, { // "joystick configuration" + "konfiguracja joysticka", +/*MISSING*/ "joystick configuration", + "konfigurace joysticku", + "наŃтройка джойŃтика", +/*MISSING*/ "joystick configuration", + }}, + {0xdb8c4eb4, { // "%The1 squeaks hopelessly." + "%1 pisn%Ä…Ĺ‚1 bez nadziei.", + "%1 umutsuzca ciyaklıyor.", + "%1 zdrcenÄ› pištĂ­.", + "%1 пищит без надежды.", + "%Die1 %1 piepst hoffnungslos.", + }}, + {0xdb96b407, { // "When you have this Orb, most monsters won't see you, unless you are standing still, attacking, or picking up items." + "Kiedy masz SferÄ™ NiewidzialnoĹ›ci, wiÄ™kszość potworĂłw CiÄ™ nie widzi, chyba ĹĽe stoisz w miejscu, atakujesz, albo podnosisz przedmioty.", + "Bu kĂĽren varsa çoÄźu canavar seni beklemediÄźin, saldırmadığın yahut yerden bir Ĺźey almadığın sĂĽrece görmez.", + "Dokud máš tuto SfĂ©ru, vÄ›tšina netvorĹŻ tÄ› neuvidĂ­, pokud nebudeš stát na mĂ­stÄ›, nezaĂştočíš nebo nesebereš pĹ™edmÄ›t.", + "Пока Ń Đ’Đ°Ń ĐµŃŃ‚ŃŚ ŃŤŃ‚Đ° Ńфера, больŃинŃтво монŃтров не видят Đ’Đ°Ń, еŃли Đ’Ń‹ не Ńтоите рядом, не Đ°Ń‚Đ°ĐşŃете и не поднимаете предметы.", + "Während du diesen Orb besitzt, sehen dich die meisten Monster nicht, auĂźer du stehst still, greifst an, oder hebst etwas auf.", + }}, + {0xdbba0c19, { // " Hyperstone: %1/%2" + " Hiperkamienie: %1/%2", + " AĹźkıntaĹź: %1/%2", + " Hyperkamy: %1/%2", + " Гиперкамней: %1/%2", + " Hypersteine: %1/%2", + }}, + {0xdbe7dca1, { // "Whenever after your move there is a connection between a charged and a grounded cell, there is a short circuit. All cells on any path connecting a charged and a grounded cell (without repeated cells, or two consecutive grounded/charged cells) become damaged.\n\nSandstone walls and most creatures are conductive. Great Walls are isolators, but lands beyond them count as grounded.\n\nFulgurite, the treasure, is created when you manage to short circuit a sandstone wall, or a Rich Metal Beast.\n\nTrolls leave conductive rocks when killed, and Metal Beasts can only be killed by electricity -- your attacks only stun them, or push them away if already stunned." + "Za kaĹĽdym razem, gdy po Twoim ruchu jest poĹ‚Ä…czenie miÄ™dzy naĹ‚adowanym a uziemionym polem, nastÄ™puje zwarcie. Wszystkie pola na dowolnej Ĺ›cieĹĽce Ĺ‚Ä…czÄ…ce pole naĹ‚adowane z uziemionym (bez powtĂłrzonych pĂłl i bez dwĂłch sÄ…siednich naĹ‚adowanych/uziemionych komĂłrek) zostajÄ… uszkodzone.\n\nPiaskowe Ĺ›ciany i wiÄ™kszość potworĂłw przewodzi prÄ…d. Wielkie Ĺ›ciany sÄ… izolatorami, ale krainy za nimi liczÄ… siÄ™ jako uziemione.\n\nFulguryt to skarb, ktĂłry powstaje, gdy zwarcie zniszczy piaskowÄ… Ĺ›cianÄ™ albo Bogatego Stwora.\n\nZabite trolle pozostawiajÄ… przewodzÄ…ce Ĺ›ciany. Metalowe i Bogate Stwory moĹĽna zabić tylko elektrycznoĹ›ciÄ… -- Twoje ataki je ogĹ‚uszajÄ… albo odpychajÄ…, jeĹ›li sÄ… juĹĽ ogĹ‚uszone.", + "Hareketinden sonra, eÄźer yĂĽklĂĽ ve topraklı bir hĂĽcre arasında baÄźlantı varsa, kısa devre olur.YĂĽklĂĽ ve topraklı hĂĽcrenin arasındaki bĂĽtĂĽn hĂĽcreler (tekrarlayan hĂĽcreler, yahut iki ardışık topraklı yahut yĂĽklĂĽ hĂĽcre hariç) hasar görĂĽr.\n\nKumtaşı duvarları ve çoÄźu yaratık iletkendir. BĂĽyĂĽk Duvarlar yalıtkandır, ancak onlardan sonraki hĂĽcreler topraklanmış sayılır. \n\nFulgurit, buradaki hazine, bir kumtaşı duvarını veya Zengin Metal Canavarını kısa devreye uÄźratmanla ortaya çıkar.\n\nTroller öldĂĽklerinde artlarında iletken kayalar bırakırlar ve Metal Canavarlar sadece elektrik ile öldĂĽrĂĽlebilirler. Saldırıların metal canavarları sersemletir, yahut zaten sersemlemiĹźlerse ittirir. ", + "Po kaĹľdĂ©m tvĂ©m tahu se zkontroluje, zda nevzniklo spojenĂ­ mezi nÄ›jakĂ˝m nabitĂ˝m a uzemnÄ›nĂ˝m polĂ­ÄŤkem; pokud ano, dojde ke zkratu. Všechna polĂ­ÄŤka na jakĂ©koli dráze spojujĂ­cĂ­ nabitĂ© a uzemnÄ›nĂ© polĂ­ÄŤko (pokud se na nĂ­ žádnĂ© polĂ­ÄŤko nevyskytuje dvakrát a pokud na nĂ­ nejsou dvÄ› uzemnÄ›ná/nabitá polĂ­ÄŤka za sebou, dostanou zásah.\n\nPĂ­skovcovĂ© zdi a vÄ›tšina bytostĂ­ je vodivá. VelkĂ© zdi jsou izolanty, ale kraje za nimi se poÄŤĂ­tajĂ­ jako uzemnÄ›nĂ©.\n\nZdejší poklad, Fulgurit, vznikne, kdyĹľ se ti podaří zkratovat pĂ­skovcovou zeÄŹ nebo Bohatou bestii.\n\nTrollovĂ© se po smrti promÄ›nĂ­ ve vodivĂ© kameny a KovovĂ© a BohatĂ© bestie je moĹľnĂ© zabĂ­t pouze elektĹ™inou -- tvĂ© Ăştoky je pouze omráčí nebo, pokud uĹľ omráčenĂ© jsou, odstrÄŤĂ­.", + "ПоŃле каждого Đ’Đ°Ńего хода, еŃли еŃŃ‚ŃŚ Ńоединение ĐĽĐµĐ¶Đ´Ń Đ·Đ°Ń€ŃŹĐ¶ĐµĐ˝Đ˝ĐľĐą и заземлённой клеткой, возникает короткое замыкание. По вŃем клеткам на ĐżŃти ĐĽĐµĐ¶Đ´Ń Đ·Đ°Ń€ŃŹĐ¶ĐµĐ˝Đ˝ĐľĐą и заземлённой (без повторов, и без двŃŃ… ŃĐľŃедних заряженных/заземлённых) проходит ток.\n\nСтены из пеŃчаника и больŃинŃтво ŃŃщеŃтв проводят ток. Великие Ńтены -- изоляторы, Đ° вŃе клетки ĐĽĐµĐ¶Đ´Ń Đ˝Đ¸ĐĽĐ¸ ŃчитаютŃŃŹ заземлёнными.\n\nФŃльгŃрит, меŃтное Ńокровище, появляетŃŃŹ, еŃли разрŃŃить пеŃчаник или Ńбить Богатого железного зверя.\n\nТролль при гибели превращаетŃŃŹ в проводящŃŃŽ ŃтенŃ. Железных зверей можно Ńбить только электричеŃтвом -- атаки только оглŃŃĐ°ŃŽŃ‚ их, или толкают, еŃли Ńже оглŃŃены.", + "Nach jedem Zug gibt es einen Kurzschluss, vorausgesetzt es gibt eine Verbindung zwischen einer geladenen und einer geerdeten Zelle. Alle Zellen auf einem Pfad der eine geladene mit einer geerdeten Zelle verbindet werden beschädigt.\n\nSandsteinwände und die meisten Monster sind leitfähig. GroĂźe Mauern sind Isolatoren aber Zellen hinter ihnen zählen als geerdet.\n\nDer Schatz Fulgurit entsteht wenn eine Sandsteinwand oder ein ergiebiges Metallbiest kurzgeschlossen wird.\n\nTrolle hinterlassen leitfähige Steine wenn sie sterben und Metallbiester können nur durch Elektrizität getötet werden -- Deine Angriffe können sie nur betäuben oder wegstoĂźen wenn sie bereits betäubt sind.", + }}, + {0xdc1433e4, { // "A wonderful beverage, apparently obtained by mixing red and blue slime. You definitely feel more healthy after drinking it, but you still feel that one hit of a monster is enough to kill you." + "Cudowny napĂłj, powstaĹ‚y z mieszania czerwonej i niebieskiej mazi. Po jego wypiciu czujesz siÄ™ zdecydowanie lepiej, ale wciÄ…ĹĽ jedno uderzenie potwora moĹĽe CiÄ™ powalić.", + "Ĺžahane bir içki, görĂĽnen o ki kırmızı ve mavi balçığın karıştırılmasıyla elde edilmiĹź. İçince daha saÄźlıklı hissediyorsun ama bir canavarın tek vuruĹźunun seni öldĂĽreceÄźine de eminsin.", + "ÚžasnĂ˝ nápoj, prĂ˝ vytvoĹ™enĂ˝ smĂ­senĂ­m ÄŤervenĂ©ho a modrĂ©ho slizu. Po jeho vypitĂ­ se rozhodnÄ› cĂ­tíš zdravÄ›jší, ale pořád máš pocit, Ĺľe by tÄ› dokázal zabĂ­t jedinĂ˝ Ăşder netvora.", + "ЧŃдеŃный напиток, полŃченный из Ńиней и краŃной Ńлизи. Đ’Ń‹ чŃвŃтвŃете Ńебя Đ»ŃчŃе, выпив его, но одного Ńдара Đ’Đ°ĐĽ вŃŃ‘ ещё хватит, чтобы погибнŃŃ‚ŃŚ.", + "Ein wunderbares Getränk, anscheinend entstanden aus der Mischung von blauem und rotem Schleim. Du fĂĽhlst dich definitiv gesĂĽnder nach seinem Genuss, aber trotzdem ahnst du, dass ein Schlag eines Monsters ausreichen wĂĽrde, dich zu töten.", + }}, + {0xdc4798ed, { // "Seven mines next to you!" + "Siedem min koĹ‚o Ciebie!", + "Yakınında yedi mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházĂ­ sedm min!", + "Семь мин рядом Ń Đ’Đ°ĐĽĐ¸!", + "7 Minen um dich!", + }}, + {0xdc55616f, { // "edit all three colors" + "edytuj wszystkie kolory", +/*MISSING*/ "edit all three colors", + "edituj všechny tĹ™i barvy", + "редактировать три цвета", +/*MISSING*/ "edit all three colors", + }}, + {0xdc5d5d33, { // "face the pointer" + "celuj we wskaĹşnik", + "mausa bak", + "otoÄŤenĂ­ ke kurzoru", + "лицом Đş цели", + "Zum Zeiger drehen", + }}, + {0xdc7303f4, { // "Orb power (target: facing)" + "moc sfery (cel: na wprost)", +/*MISSING*/ "Orb power (target: facing)", + "PouĹľitĂ­ SfĂ©ry (zaměřenĂ­ pĹ™ed postavou)", + "клавиŃĐ° для Ńилы Ńферы", + "Orbkraft (Ziel: Blickrichtung)", + }}, + {0xdc994855, { // "Lots of treasure gained!" + "MnĂłstwo skarbĂłw zdobyte!", + "Bir sĂĽrĂĽ hazine kazandın!", + "ZĂ­ska%l0 jsi spoustu pokladĹŻ!", + "Много Ńокровищ полŃчено!", + "Eine Menge Schätze erhalten!", + }}, + {0xdc9aef4a, { // "The total value of the treasure you have collected.\n\nEvery world type contains a specific type of treasure, worth 1 $$$; your goal is to collect as much treasure as possible, but every treasure you find causes more enemies to hunt you in its native land.\n\nOrbs of Yendor are worth 50 $$$ each.\n\n" + "ĹÄ…czna wartość Twoich skarbĂłw.\n\nKaĹĽda kraina zawiera specyficzny dla niej skarb, wart 1 $$$; Twoim celem jest zebranie jak najwiÄ™cej skarbĂłw, ale kaĹĽdy znaleziony skarb powoduje, ĹĽe w jego krainie wiÄ™cej potworĂłw na Ciebie poluje.\n\nSfery Yendoru sÄ… warte po 50 $$$.\n\n", + "Topladığınız hazinelerin toplam deÄźeri.\n\nHer dĂĽnya 1 $$$ deÄźerinde belli bir çeĹźit hazine içerir; amacın olabildiÄźince çok hazine toplamak, ama her bulduÄźun hazine, daha fazla dĂĽĹźmanın sana saldırmasına sebep olur.\n\n Her Yendorun KĂĽresi 50 $$$ deÄźerindedir.\n\n", + "Celková hodnota pokladĹŻ, kterĂ© jsi sesbĂ­ral.\n\nV kaĹľdĂ©m typu kraje se nacházĂ­ specifickĂ˝ typ pokladĹŻ, kterĂ˝ má vĹľdy cenu 1 $$$; tvĂ˝m cĂ­lem je sesbĂ­rat co nejvĂ­ce pokladĹŻ, ale kaĹľdĂ˝ poklad, kterĂ˝ zĂ­skáš, zpĹŻsobĂ­, Ĺľe tÄ› v krajĂ­ch příslušnĂ©ho typu bude pronásledovat vĂ­ce nepřátel.\n\nKaĹľdá Yendorská sfĂ©ra má cenu 50 $$$.\n\n", + "Общая ŃтоимоŃŃ‚ŃŚ найденных Вами Ńокровищ.\n\nКаждая земля Ńодержит Ńвой тип ценноŃти, Ńтоящей 1 $$$; Đ’Đ°ŃĐ° цель - Ńобрать как можно больŃе ценноŃтей, но каждая найденная ценноŃŃ‚ŃŚ Ńвеличивает количеŃтво врагов в этой земле.\n\nСфера Йендора Ńтоит 50 $$$.\n\n", + "Der Gesamtwert deiner Schätze.\n\nJedes Land hat einen eigenen Schatztyp, der 1 $$$ wert ist. Dein Ziel ist soviel Schätze wie möglich zu sammeln, aber jeder Schatz den du findest erzeugt mehr Feinde in seinem Herkunftsland.\n\nOrbs von Yendor sind 50 $$$ pro StĂĽck wert.\n\n", + }}, + {0xdcb255ed, { // "Miners have special tools for dealing with the Living Cave. When they die, these tools activate, destroying the living cave around them." + "GĂłrnicy majÄ… specjalne narzÄ™dzia do kopania w Ĺ»ywych Jaskiniach. Kiedy ginÄ…, te narzÄ™dzia siÄ™ uruchamiajÄ…, powodujÄ…c, ĹĽe ĹĽywa jaskinia wokół nich obumiera.", + "Madenciler YaĹźayan MaÄźarayla baĹź etmek için özel gereçlere sahipler. Ă–ldĂĽklerinde, bu gereçler aktifleĹźiyor ve etraflarındaki YaĹźayan MaÄźarayı yok ediyor.", + "HornĂ­ci majĂ­ speciálnĂ­ nástroje pro práci v Ĺ˝ivoucĂ­ jeskyni. KdyĹľ zemĹ™ou, jejich nástroje se aktivujĂ­ a zniÄŤĂ­ ĹľivoucĂ­ jeskyni kolem nich.", + "Шахтёры имеют Ńпециальные инŃŃ‚Ń€Ńменты для копания Живой пещеры. При гибели они автоматичеŃки иŃпользŃŃŽŃ‚ŃŃŹ, Ńничтожая ĐżĐµŃ‰ĐµŃ€Ń Đ˛ĐľĐşŃ€ŃĐł них.", + "Minenarbeiter haben spezielle Werkzeuge fĂĽr den Umgang mit der Lebenden Höhle. Sterben sie, aktivieren sich diese Werkzeuge, was die Höhle um sie herum zerstört.", + }}, + {0xdcebb09e, { // "So, you have killed a Ratling on the unwarped sea? You will be punished for this! Luckily, if you run away from the Warped Sea quickly, the Ratling Avengers will lose track of you." + "Zabi%Ĺ‚eĹ›0 Szczuraka na niezakrzywionym morzu? MĹ›ciciele CiÄ™ dosiÄ™gnÄ…! Na szczęście, jeĹ›li szybko uciekniesz z Zakrzywionego Morza, Szczuraki-MĹ›ciciele zgubiÄ… TwĂłj Ĺ›lad.", +/*MISSING*/ "So, you have killed a Ratling on the unwarped sea? You will be punished for this! Luckily, if you run away from the Warped Sea quickly, the Ratling Avengers will lose track of you.", + "Ty jsi zabi%l0 Krysáka na nepokĹ™ivenĂ©m moĹ™i? Za to zaplatíš! Krysáci mstitelĂ© o tebe naštÄ›stĂ­ ztratĂ­ zájem, pokud z PokĹ™ivenĂ©ho moĹ™e rychle uteÄŤeš.", + "Đ’Ń‹ Ńбили КрыŃолюда в неиŃкривлённом море? ĐśŃтитель Đ´Đľ Đ’Đ°Ń Đ´ĐľĐ±ĐµŃ€Ń‘Ń‚ŃŃŹ!Đš ŃчаŃŃ‚ŃŚŃŽ, еŃли Đ´ĐľŃтаточно далеко Ńйти от ĐŃкривлённого моря, он потеряет Đ’Đ°Ń Ńлед.", + "Du hast also einen Rattenmenschen auf der unverzerrten See getötet? DafĂĽr wirst du bestraft werden! Wenn du GlĂĽck hast und schnell von der Verzerrten See verschwindest, werden die Rattenmenschen-Rächer deine Spur verlieren.", + }}, + {0xdcec3a85, { // "You have improved your total high score and %1 specific high scores!" + "Poprawi%Ĺ‚eĹ›0 swĂłj ogĂłlny najlepszy wynik oraz %1 z wynikĂłw szczegółowych!", + "Toplam yĂĽksek puanını ve %1 farklı tekil puanını artırdın!", + "Zlepši%l0 jsi svĂ© celkovĂ© nejvyšší skĂłre a %1 specifickĂ˝ch nejvyšších skĂłre!", + "Đ’Ń‹ подняли Ńвой общий резŃльтат и %1 отдельных резŃльтатов!", + "Du hast deinen Gesamthighscore und %1 spezifische Highscores verbessert!", + }}, + {0xdcf852ca, { // "half-plane" + "półpĹ‚aszczyzna", +/*MISSING*/ "half-plane", + "polorovina", + "полŃплоŃкоŃŃ‚ŃŚ", + "Halbebene", + }}, + {0xdd0527d1, { // "help" + "help", + "yardım", + "nápovÄ›da", + "помощь", + "Hilfe", + }}, + {0xdd22a807, { // "This being radiates an aura of wisdom. It is made of a beautiful crystal, you would love to take it home. But how is it going to defend itself? Better not to think of it, thinking causes your brain to go hot...\n\nCrystal Sages melt at -30 °C, and they can rise the temperature around you from afar." + "Ta istota promieniuje mÄ…droĹ›ciÄ…. Jest zrobiona z piÄ™knego krysztaĹ‚u, na pewno bardzo cennego. Ciekawe, jak zamierza siÄ™ przed TobÄ… bronić? Lepiej o tym nie myĹ›leć, myĹ›lenie za bardzo CiÄ™ rozgrzewa...\n\nKrysztaĹ‚owi MÄ™drcy topiÄ… siÄ™ w -30 °C i powodujÄ… wzrost temperatury wokół Ciebie.", + "MuhteĹźem bir kristalden yapılmış, eve götĂĽrmeyi çok isterdin.Ama kendini nasıl savunacak? Düşünmesen daha iyi, sadece düşünmek bile beynini zorluyor. ...\n\nKristal Pirleri -30 °C'de erir ve etrfındaki ısıyı uzaktan artırabilir.", + "Tato bytost vyzaĹ™uje auru moudrosti. Je vytvoĹ™ená z krásnĂ©ho krystalu -- moc rád%d0 by sis ji vza%l0 domĹŻ. Ale jak se bude bránit? RadÄ›ji na to nemyslet, z myšlenĂ­ se ti zahřívá mozek...\n\nKĹ™išťálovĂ­ mudrci tajĂ­ pĹ™i teplotÄ› -30 °C a dokážou kolem tebe na dálku zvyšovat teplotu.", + "Они излŃчают Đ°ŃŃ€Ń ĐĽŃдроŃти. Они Ńделаны из краŃивых криŃталлов, и Đ’Ń‹ хотели бы забрать их домой. Но как он ŃобираетŃŃŹ защищать Ńебя? Đ›ŃчŃе не Đ´Ńмайте об этом, ĐĽŃ‹Ńление нагревает Đ’Đ°Ń ĐĽĐľĐ·Đł...\n\nКриŃтальные ĐĽŃдрецы Ń‚Đ°ŃŽŃ‚ при -30 °C, и они могŃŃ‚ повыŃить температŃŃ€Ń Đ˛ĐľĐşŃ€ŃĐł Đ’Đ°Ń Đ¸Đ·Đ´Đ°Đ»ĐµĐşĐ°.", + "Dieses Wesen strahlt eine Aura der Weisheit aus. Es besteht aus einem schönen Kristall, am liebsten wĂĽrdest du es mit nach Hause nehmen... Nur, wie verteidigt es sich? Besser nicht daran denken... Denken lässt dein Gehirn heiĂź werden...\n\nKristallweisen schmelzen bei -30 °C. Sie können die Temperatur um dich herum aus der Ferne ansteigen lassen.", + }}, + {0xdd31dce5, { // "That was not a challenge. Find a larger castle!" + "To nie byĹ‚o wyzwanie. ZnajdĹş wiÄ™kszy zamek!", + "Bu seni heyecanlandırmadı bile. Daha bĂĽyĂĽk bir kale bul!", + "To nebylo nic těžkĂ©ho. Najdi si vÄ›tší hrad!", + "Đ­Ń‚Đľ было неŃложно. Найдите больŃий замок!", + "Das war keine Herausforderung. Finde ein größeres Schloss!", + }}, + {0xdd6d9cd4, { // "settings set here won't be saved" + "ustawienia ustawione tutaj siÄ™ nie", +/*MISSING*/ "settings set here won't be saved", + "nastavenĂ­ provedená zde nebudou uloĹľena", + "ŃŃтановленные наŃтройки не бŃĐ´ŃŃ‚ Ńохранены", + "hier gemachte Einstellungen werden nicht gespeichert", + }}, + {0xdd78d3c0, { // "symmetry 0-1" + "symetria 0-1", + "simetri 0-1", + "symetrie 0-1", + "Ńимметрия 0-1", + "Symmetrie 0-1", + }}, + {0xdd78d3c1, { // "symmetry 0-2" + "symetria 0-2", + "simetri 0-2", + "symetrie 0-2", + "Ńимметрия 0-2", + "Symmetrie 0-2", + }}, + {0xdd78d3c2, { // "symmetry 0-3" + "symetria 0-3", + "simetri 0-3", + "symetrie 0-3", + "Ńимметрия 0-3", + "Symmetrie 0-3", + }}, + {0xde221b93, { // "These dodecahedra made of a mysterious material are the Reptiles' favorite toy." + "Te dwunastoĹ›ciany zrobione z tajemniczego materiaĹ‚u to ulubiona zabawka Jaszczurek.", +/*MISSING*/ "These dodecahedra made of a mysterious material are the Reptiles' favorite toy.", + "Tyto dvanáctistÄ›ny z jakĂ©hosi tajemnĂ©ho materiálu jsou oblĂ­benou hraÄŤkou JeštÄ›rek.", + "Эти додекаэдры из Ńтранного материала -- любимые игрŃŃки ящериц.", +/*MISSING*/ "These dodecahedra made of a mysterious material are the Reptiles' favorite toy.", + }}, + {0xdec03d1b, { // "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\nThis 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\nUse 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 hiperbolicznej, podobnym do tego, ktĂłry moĹĽna otrzymać w kreatorze modeli papierowych albo poprzez hiperboliczne szydeĹ‚kowanie.\n\nDziaĹ‚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 '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 granie na niej na ĹĽywo.\n\nMoĹĽesz obracać model strzaĹ‚kami, a przybliĹĽać i oddalać go klawiszami Page Up/Down.", +/*MISSING*/ "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\nThis 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\nUse 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\nJe 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'. 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\nModel se otáčí šipkami a lze ho zoomovat klávesami Page Up/Down.", + "Đ’ этом режиме Đ’Ń‹ играете в HyperRogue на трёхмерной модели гиперболичеŃкой плоŃкоŃти, похожей на те, что можно полŃчить в 'Ńоздателе бŃмажных моделей'\n\nĐ­Ń‚Đľ требŃет некоторых раŃŃирений OpenGL, может работать некорректно или вызывать падение игры -- включение опции 'не иŃпользовать OpenGL' может помочь. Опция 'отриŃовать один раз' ŃŃкоряет отриŃовкŃ, но играть в таком режиме невозможно.\n\nĐŃпользŃйте Ńтрелки для вращения, Page Up/Down для изменения ĐĽĐ°ŃŃтаба.", + "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 erhält.\n\nDieser Modus erfordert einige OpenGL-Erweiterungen und kann abstĂĽrzen oder fehlerhaft funktionieren -- 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 wird nur einmal gerendert und du kannst darauf nicht spielen.\n\nVerwende die Pfeiltasten zum Rotieren, Bild auf/ab zum Zoomen.", + }}, + {0xdec89004, { // "scrolling speed" + "prÄ™dkość przewijania", +/*MISSING*/ "scrolling speed", + "rychlost scrollovánĂ­", + "ŃкороŃŃ‚ŃŚ прокрŃтки", +/*MISSING*/ "scrolling speed", + }}, + {0xded7510d, { // "The Knights of the Round Table are the greatest warriors of these lands. They are not very inventive with names though, as they call each of their castles Camelot. You are probably worthy of joining them, but they will surely give you some quest to prove yourself...\n\nEach castle contains a single treasure, the Holy Grail, in the center. The radius of the Round Table is usually 28, but after you find a Holy Grail successfully, each new castle (and each Round Table) you find will be bigger." + "Rycerze OkrÄ…gĹ‚ego StoĹ‚u to najwiÄ™ksi wojownicy tych krain. Niestety, nie sÄ… zbyt pomysĹ‚owi w nazywaniu i kaĹĽdy swĂłj zamek nazywajÄ… Camelot. Prawdopodobnie nadajesz siÄ™, by stać siÄ™ jednym z nich, ale na pewno dadzÄ… Ci jakÄ…Ĺ› misjÄ™, byĹ› pokaza%Ĺ‚0 swojÄ… wartość...\n\nKaĹĽdy zamek ma jeden skarb (ĹšwiÄ™ty Graal) w samym Ĺ›rodku. PromieĹ„ OkrÄ…gĹ‚ego StoĹ‚u to normalnie 28, ale z kaĹĽdym znalezionym ĹšwÄ™tym Graalem kaĹĽdy nowy zamek (i jego OkrÄ…gĹ‚y Stół) bÄ™dzie wiÄ™kszy.", + "Yuvarlak masa Şövalyeleri bu toprakların en mĂĽthiĹź savaşçıları. Kalelerine Kamelot demelerine bakılırsa, isimlerle araları pek iyi deÄźil herhalde. Aralarına katılmaya bĂĽyĂĽk ihtimalle layıksın, ama yine de sana kendini kanıtlamak için bir görev verecekler... \n\n Her kale merkezinde tek bir hazineyi, Kutsal Kâseyi barındırıyor. Yuvarlak masanın çapı genelde 28'dir, ama Kutsal Kâseyi bir kez bulduÄźunda, karşılaĹźtığın her yeni kale (ve her yuvarlak masa) eskisinden daha bĂĽyĂĽk olacak.", + "RytĂ­Ĺ™i KulatĂ©ho stolu jsou nejvÄ›tší bojovnĂ­ci tÄ›chto krajĹŻ. Ale nemajĂ­ zrovna talent na vymýšlenĂ­ jmen, protoĹľe všem svĂ˝m hradĹŻm říkajĂ­ Camelot. PravdÄ›podobnÄ› jsi hoden toho, aby ses k nim pĹ™ipojil, ale urÄŤitÄ› budeš muset splnit nÄ›jakĂ˝ Ăşkol, abys jim to dokázal...\n\nNa kaĹľdĂ©m hradÄ› je jeden poklad (SvatĂ˝ grál), kterĂ˝ se nacházĂ­ v jeho stĹ™edu. PolomÄ›r KulatĂ©ho stolu je obvykle 28, ale potĂ©, co najdeš SvatĂ˝ grál, bude kaĹľdĂ˝ další hrad (a kaĹľdĂ˝ další KulatĂ˝ stĹŻl) vÄ›tší a vÄ›tší.", + "Рыцари КрŃглого Ńтола - величайŃие воины этой земли. Они не очень изобретательны и называют каждый Ńвой замок Камелот. Возможно, Đ’Đ°ĐĽ Ńтоит вŃтретитьŃŃŹ Ń Đ˝Đ¸ĐĽĐ¸, и они Đ´Đ°Đ´ŃŃ‚ Đ’Đ°ĐĽ задание.\n\nКаждый замок Ńодержит одно Ńокровище (Святой Грааль) в центре. Обычно радиŃŃ ĐşŃ€Ńглого Ńтола равен 28, но Ń ĐşĐ°Đ¶Đ´Ń‹ĐĽ новым Граалем радиŃŃ ŃтановитŃŃŹ вŃŃ‘ больŃе.", + "Die Ritter der Tafelrunde sind die größten Krieger dieses Landes. Sie sind nur nicht sehr einfallsreich was Namen angeht, alle ihre Schlösser heiĂźen Camelot. Bevor du ihnen beitreten kannst, wirst du ihnen beweisen mĂĽssen dass du ihrer wĂĽrdig bist.\n\nIn der Mitte jedes Schlosses befindet sich ein einziger Schatz, der Heilige Gral. Der Radius einer Tafelrunde ist normalerweise 28, allerdings wächst dieser sowie das Schloss mit jedem Heiligem Gral den du sammelst.", + }}, + {0xdeed1b81, { // "paper model creator" + "kreator modeli papierowych", + "kâğıt modeli ĂĽreticisi", + "generátor papĂ­rovĂ˝ch modelĹŻ", + "Ńоздатель бŃмажных моделей", + "Papiermodell-Schöpfer", + }}, + {0xdef3113d, { // "hair color" + "kolor wĹ‚osĂłw", + "saç rengi", + "barva vlasĹŻ", + "цвет волоŃ", + "Haarfarbe", + }}, + {0xdf145984, { // "The ivy attacks %the1!" + "Bluszcz zaatakowaĹ‚ %a1!", +/*MISSING*/ "The ivy attacks %the1!", + "BĹ™eÄŤĹĄan zaĂştoÄŤil na %a1!", + "Плющ атаковал %a1!", + "Der Efeu greift %den1 %a1 an!", + }}, + {0xdf6b66d1, { // "frames per second" + "klatki na sekundÄ™", + "saniye başına kare", + "snĂ­mky za sekundu", + "кадров в ŃекŃндŃ", + "FPS", + }}, + {0xdf88bdd4, { // "shift+O to switch anti-aliasing" + "shift+O by przeĹ‚Ä…czyć antialiasing", +/*MISSING*/ "shift+O to switch anti-aliasing", + "Stiskem Shift+O se pĹ™epĂ­ná antialiasing", + "shift+O включает Ńглаживание", +/*MISSING*/ "shift+O to switch anti-aliasing", + }}, + {0xdf9236a7, { // "This magical missile burns whatever it hits." + "Ten magiczny pocisk pali to, w co trafi.", + "Bu bĂĽyĂĽlĂĽ saldırı deÄźdiÄźi Ĺźeyi yakar.", + "Tato magická stĹ™ela spálĂ­ všechno, co zasáhne.", + "Этот магичеŃкий Ńнаряд поджигает вŃŃ‘, во что попадает.", + "Dieses magische Geschoss verbrennt alles, was es trifft.", + }}, + {0xdfaed299, { // "Could not open the score file: " + "Nie udaĹ‚o siÄ™ otworzyć pliku: ", + "Puan dosyası açılamadı: ", + "NepodaĹ™ilo se otevřít soubor se skĂłre: ", + "Невозможно открыть файл Ń Ń€ĐµĐ·Ńльтатами: ", + "Highscores konnten nicht geladen werden: ", + }}, + {0xdfcb4b36, { // "F6 = HQ shot" + "F6 = zrzut HQ", + "F6 = HQ resim çek", + "F6 = HQ snĂ­mek", + "F6 = ŃкринŃот HQ", + "F6 = HQ Screenshot", + }}, + {0xdff093bf, { // "When you have this Orb, you will leave a trail of fire behind you." + "Kiedy masz SferÄ™ Ognia, zostawiasz za sobÄ… ognistÄ… Ĺ›cieĹĽkÄ™.", + "Bu KĂĽreye sahip olduÄźunda arkanda bir ateĹźten yol bırakırsın.", + "KdyĹľ máš tuto SfĂ©ru, zanecháváš za sebou ohnivou stopu.", + "Пока Ń Đ’Đ°Ń ĐµŃŃ‚ŃŚ ŃŤŃ‚Đ° Ńфера, Đ’Ń‹ ĐľŃтавляете огненный Ńлед Đ·Đ° Ńобой.", + "Mit diesem Orb hinterlässt du eine Spur aus Feuer.", + }}, + {0xe0214c82, { // "Drawing %1 (layer %2), F1 for help" + "Rysujemy %1 (warstwa %2), F1 - pomoc", + "%1 çiziliyor (katman %2), F1 - yardım", + "KreslĂ­m %1 (vrstva %2), F1 - nápovÄ›da", + "РиŃŃем %1 (Ńлой %2), F1 - помощь", + "Zeichne %1 (Schicht %2), F1 fĂĽr Hilfe", + }}, + {0xe076f634, { // " %1" + " %1", +/*MISSING*/ " %1", + " %1", + " %1", + " %1", + }}, + {0xe08be549, { // "Still confused? Read the FAQ on the HyperRogue website!\n\n" + "CoĹ› jest niejasne? Przeczytaj FAQ na stronie HyperRogue! (po angielsku)\n\n", + "Hâlâ karışık mı geliyor? HyperRogue vebsitesinden SSS'i okuyun! \n\n", + "Stále zmatenĂ­? PĹ™eÄŤtÄ›te si FAQ na webovĂ© stránce HyperRogue (prozatĂ­m pouze v angliÄŤtinÄ›)\n\n", + "Что-Ń‚ неяŃно? Прочитайте FAQ на Ńайте HyperRogue! (по-английŃки)\n\n", + "Immer noch verwirrt? Lies das FAQ auf der HyperRogue-Webseite.\n\n", + }}, + {0xe09e0a49, { // "Alternatively: kill a %1.\n" + "Alternatywnie: zabij %a1.\n", + "Ya da: Bir %1 öldĂĽr.\n", + "AlternativnÄ›: zabij %a1.\n", + "Đльтернатива: Ńбить %a1.\n", + "Alternativ: töte einen %a1.\n", + }}, + {0xe0be7240, { // "previous slide" + "poprzedni slajd", +/*MISSING*/ "previous slide", + "pĹ™edešlĂ˝ snĂ­mek", + "предыдŃщий Ńлайд", +/*MISSING*/ "previous slide", + }}, + {0xe0c51c51, { // "The slime reacts with %the1!" + "MaĹş reaguje z %abl1!", + "Balçık %abl1 etkileĹźime girdi!", + "Sliz reaguje s %abl1!", + "Слизь реагирŃет Ń %abl1!", + "Der Schleim reagiert mit %dem %d1!", + }}, + {0xe0dd1448, { // "This land is filled with beautiful, but dangerous, creatures and plants." + "Ta kraina peĹ‚na jest piÄ™knych, lecz niebezpiecznych, stworzeĹ„ i roĹ›lin.", +/*MISSING*/ "This land is filled with beautiful, but dangerous, creatures and plants.", + "Tento kraj je plnĂ˝ krásnĂ˝ch, ale nebezpeÄŤnĂ˝ch tvorĹŻ a rostlin.", + "Đ­Ń‚Đ° земля полна прекраŃными, но опаŃными ŃŃщеŃтвами и раŃтениями.", + "Dieses Land ist voller schöner, aber gefährlicher Wesen und Pflanzen.", + }}, + {0xe15c3d8f, { // "You have used less knives than ever before. Congratulations!" + "ZuĹĽyĹ‚eĹ› mniej noĹĽy niĹĽ kiedykolwiek wczeĹ›niej. Gratulacje!", + "Her zamankinden daha az bıçak kullandın. Tebrikler!", + "PouĹľil jsi mĂ©nÄ› nožů neĹľ kdykoli pĹ™edtĂ­m. Gratulujeme!", + "Đ’Ń‹ иŃпользовали меньŃе ножей, чем раньŃе. Поздравляем!", + "Du hast weniger Messer als zuvor benutzt. GlĂĽckwunsch!", + }}, + {0xe16601a8, { // "This is the biggest Hypersian Rug you have ever seen! Unfortunately, it is too large to take it as a trophy." + "To jest najwiÄ™kszy hiperski dywan, jaki kiedykolwiek widzia%Ĺ‚eĹ›0! Niestety, jest za duĹĽy, by wziąć go jako zdobycz.", + "Bu, gördüğün en bĂĽyĂĽk AĹźkınlı Kilim! Maalesef yanında götĂĽremeyeceÄźin kadar bĂĽyĂĽk.", + "Tohle je ten nejvÄ›tší HyperskĂ˝ koberec, jakĂ˝ jsi kdy vidÄ›%l0! BohuĹľel je ale příliš velkĂ˝ na to, aby sis ho moh%l0 vzĂ­t jako trofej.", + "Đ­Ń‚Đľ ŃĐ°ĐĽŃ‹Đą больŃой гиперŃидŃкий ковёр, который Đ’Ń‹ когда-либо видели! Đš Ńожалению, он ŃлиŃком больŃой, чтобы забрать его.", + "Das ist der größte Hypersische Teppich den du je gesehen hast! Leider ist er zu groĂź um ihn als Trophäe mitzunehmen.", + }}, + {0xe1d73b07, { // "(locked)" + "(zablokowane)", + "(aktif deÄźil)", + "(uzamÄŤeno)", + "(закрыто)", + "(Gesperrt)", + }}, + {0xe1dd5530, { // "player 1 spin" + "gracz 1 obrĂłt", + "oyuncu 1, dön", + "hráč 1 otáčenĂ­", + "игрок 1 вертит", + "Spieler 1 drehen", + }}, + {0xe1ffed98, { // "Orb of Yendor gained!" + "Zdobyta Sfera Yendoru!", + "Yendorun Orbu kazandın!", + "ZĂ­ska%0l jsi Yendorskou sfĂ©ru!", + "Сферы Йендора полŃчены!", + "Orb von Yendor erhalten!", + }}, + {0xe21bf3fa, { // "Aethereal powers let you go through the holes." + "Moc Eteru pozwala Ci przechodzić przez dziury.", +/*MISSING*/ "Aethereal powers let you go through the holes.", + "SĂ­la Éteru ti umoĹľĹuje pohybovat se pĹ™es dĂ­ry.", + "Силы эфира позволяют ходить Ńквозь пропаŃти.", +/*MISSING*/ "Aethereal powers let you go through the holes.", + }}, + {0xe21cf668, { // "shoot'em up mode" + "strzelanka", + "tryb strzelanki", + "stříleÄŤka", + "режим Ńтрельбы", + "Ballermodus", + }}, + {0xe23e1677, { // "%1 Challenge" + "Misja %1", + "%1 Görevi", + "Mise: %1", + "МиŃŃия %1", + "Herausforderung %1", + }}, + {0xe24ffa92, { // "config" + "ustawione", +/*MISSING*/ "config", + "konfigurace", + "наŃтройки", +/*MISSING*/ "config", + }}, + {0xe2626fb8, { // "press a key to unassign" + "naciĹ›nij klawisz do odwiÄ…zania", + "atamayı iptal için bir tuĹźa bas ", + "stiskni klávesu, kterou chceš zrušit", + "нажмите, чтобы отменить назначение", + "DrĂĽcke eine Taste zum entbinden", + }}, + {0xe270cb42, { // "You summon an Ivy!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 Bluszcz!", + "Bir sarmaşık oluĹźturdun!", + "Vyvola%l0 jsi BĹ™eÄŤĹĄan!", + "Đ’Ń‹ призвали плющ!", + "Du beschwörst Efeu!", + }}, + {0xe28e78c4, { // "You cannot target that far away!" + "Nie moĹĽesz celować tak daleko!", + "O kadar uzağı hedefleyemezsin.", + "NemĹŻĹľeš zamĂ­Ĺ™it tak daleko!", + "Đ’Ń‹ не можете выбрать цель Ń‚Đ°Đş далеко!", + "Zu weit weg!", + }}, + {0xe2943d19, { // "explore the Palace Pattern (4 colors)" + "Eksploracja Wzoru PaĹ‚ac (4 kolory)", + "Saray Dokusunu KeĹźfet (4 renk)", + "ZkoumánĂ­ PalácovĂ©ho vzoru (4 barvy)", + "ĐĐ·Ńчить Ńзор Дворца (4 цветов)", + "Erkunde die Schlossstruktur (4 Farben)", + }}, + {0xe2bd90fe, { // "The game is normally displayed in the so called PoincarĂ© disk model, which is a kind of a map of the infinite hyperbolic world. There are many projections of Earth, but since Earth is curved, all of them have to distort distances or angles in some way -- the same is true in hyperbolic geometry. The next slide shows another model, called the PoincarĂ© upper half-plane model. In this model, horocycles centered at one specific ideal point are drawn as straight lines." + "Gra jest normalnie w tak zwanym modelu PoincarĂ©, rodzaju mapy nieskoĹ„czonego hiperbolicznego Ĺ›wiata. Istnieje wiele rodzajĂłw rzutu Ziemi, ale ze wzglÄ™du na jej krzywiznÄ™, kaĹĽdy z nich przekĹ‚amuje odlegĹ‚oĹ›ci czy kÄ…ty w jakiĹ› sposĂłb -- to samo dzieje siÄ™ w geometrii hiperbolicznej. NastÄ™pny slajd pokazuje inny model, model półpĹ‚aszczyzny. W tym modelu horocykle o Ĺ›rodku w danym punkcie idealnym wyglÄ…dajÄ… jak linie poziome.", +/*MISSING*/ "The game is normally displayed in the so called PoincarĂ© disk model, which is a kind of a map of the infinite hyperbolic world. There are many projections of Earth, but since Earth is curved, all of them have to distort distances or angles in some way -- the same is true in hyperbolic geometry. The next slide shows another model, called the PoincarĂ© upper half-plane model. In this model, horocycles centered at one specific ideal point are drawn as straight lines.", + "Hra se normálnÄ› zobrazuje v modelu nazĂ˝vanĂ©m 'PoincarĂ©ho disk', coĹľ je nÄ›co jako mapa nekoneÄŤnĂ©ho hyperbolickĂ©ho svÄ›ta. ZemÄ› má takĂ© mnoho projekcĂ­, ale protoĹľe je zakĹ™ivená, musejĂ­ tyto projekce vĹľdy nÄ›jakĂ˝m zpĹŻsobem zkreslovat vzdálenosti nebo Ăşhly -- a v hyperbolickĂ© geometrii platĂ­ totĂ©Ĺľ. Další snĂ­mek ti ukáže jinĂ˝ model, zvanĂ˝ 'PoincarĂ©ho model hornĂ­ poloroviny'. V tomto modelu vypadajĂ­ horocykly se stĹ™edem v jednom specifickĂ©m ideálnĂ­m bodÄ› jako přímky.", + "Обычно игра отображаетŃŃŹ в Ń‚Đ°Đş называемой модели ĐźŃанкаре в диŃке, карте беŃконечного гиперболичеŃкого мира. Đ•ŃŃ‚ŃŚ много проекций Земли, но, Ń‚Đ°Đş как она иŃкривлённая, вŃе они иŃкажают раŃŃтояния или Ńглы каким-Ń‚Đľ образом -- Ń‚Đľ же Ńамое верно и здеŃŃŚ. СледŃющий Ńлайд изображает Đ´Ń€ŃĐłŃŃŽ модель, называемŃŃŽ моделью верхней полŃплоŃкоŃти. Đ’ этой модели орициклы Ń Ń†ĐµĐ˝Ń‚Ń€ĐľĐĽ в одной определённой идеальной точке изображаютŃŃŹ прямыми линиями.", +/*MISSING*/ "The game is normally displayed in the so called PoincarĂ© disk model, which is a kind of a map of the infinite hyperbolic world. There are many projections of Earth, but since Earth is curved, all of them have to distort distances or angles in some way -- the same is true in hyperbolic geometry. The next slide shows another model, called the PoincarĂ© upper half-plane model. In this model, horocycles centered at one specific ideal point are drawn as straight lines.", + }}, + {0xe2d2f9d7, { // "auto" + "auto", + "otomatik", + "auto", + "авто", + "auto", + }}, + {0xe307b485, { // "time" + "czas", + "zaman", + "ÄŤas", + "время", + "zeit", + }}, + {0xe31fd91e, { // "You glance at your precious treasure." + "Patrzysz na swĂłj drogocenny skarb.", + "Hazinene şöyle bir baktın.", + "DĂ­váš se na svĹŻj pĹ™evzácnĂ˝ poklad.", + "Đ’Ń‹ Ńмотрите на ваŃе драгоценное Ńокровище.", + "Du betrachtest deine kostbaren Schätze.", + }}, + {0xe32a6ab7, { // "page" + "strona", +/*MISSING*/ "page", + "stránka", + "Ńтраница", +/*MISSING*/ "page", + }}, + {0xe3441b20, { // "Euclidean/elliptic mode" + "tryb euklidesowy/eliptyczny", +/*MISSING*/ "Euclidean/elliptic mode", + "EukleidovskĂ˝/eliptickĂ˝ mĂłd", + "евклидов/эллиптичеŃкий режим", +/*MISSING*/ "Euclidean/elliptic mode", + }}, + {0xe35613f4, { // "floor" + "podĹ‚oga", + "zemin", + "podlaha", + "пол", + "Boden", + }}, + {0xe35992ba, { // " With the keyboard, you can rotate the view for a similar effect (Page Up/Down)." + " Na klawiaturze moĹĽesz obrĂłcić widok, by uzyskać podobny efekt (Page Up/Down).", + " Klavyeyle görĂĽntĂĽyĂĽ döndĂĽrerek benzer bir etki yakalayabilirsin. (Page Up/Down).", + " Na klávesnici mĹŻĹľeš podobnĂ©ho efektu dosáhnout otoÄŤenĂ­m hracĂ­ plochy (Page Up/Down).", + " На клавиатŃре пользŃйтеŃŃŚ поворотом поля для того же эффекта (Page Up/Down).", + " Du kannst die Ansicht mit der Tastatur rotieren; dies erzeugt einen ähnlichen Effekt (Bild auf/ab).", + }}, + {0xe3c7403d, { // "gain Ice Diamonds" + "daj Lodowe Diamenty", +/*MISSING*/ "gain Ice Diamonds", + "zĂ­skej LedovĂ© diamanty", + "Ńобери Ледяные алмазы", +/*MISSING*/ "gain Ice Diamonds", + }}, + {0xe3fc1d5c, { // "configure player 1" + "skonfiguruj gracza 1", + "1. oyuncuyu ayarla", + "konfigurace hráče 1", + "наŃтройки игрока 1", + "Spieler 1 konfigurieren", + }}, + {0xe3fc1d5d, { // "configure player 2" + "skonfiguruj gracza 2", + "2. oyuncuyu ayarla", + "konfigurace hráče 2", + "наŃтройки игрока 2", + "Spieler 2 konfigurieren", + }}, + {0xe3fc1d5e, { // "configure player 3" + "skonfiguruj gracza 3", +/*MISSING*/ "configure player 3", + "konfigurace hráče 3", + "наŃтройки игрока 3", + "Spieler 3 konfigurieren", + }}, + {0xe3fc1d5f, { // "configure player 4" + "skonfiguruj gracza 4", +/*MISSING*/ "configure player 4", + "konfigurace hráče 4", + "наŃтройки игрока 4", + "Spieler 4 konfigurieren", + }}, + {0xe3fc1d60, { // "configure player 5" + "konfiguruj gracza 5", +/*MISSING*/ "configure player 5", + "konfigurace hráče 5", +/*MISSING*/ "configure player 5", + "Spieler 5 konfigurieren", + }}, + {0xe3fc1d61, { // "configure player 6" + "konfiguruj gracza 6", +/*MISSING*/ "configure player 6", + "konfigurace hráče 6", +/*MISSING*/ "configure player 6", + "Spieler 6 konfigurieren", + }}, + {0xe3fc1d62, { // "configure player 7" + "konfiguruj gracza 7", +/*MISSING*/ "configure player 7", + "konfigurace hráče 7", +/*MISSING*/ "configure player 7", + "Spieler 7 konfigurieren", + }}, + {0xe4388b4f, { // "continue" + "kontynuuj", +/*MISSING*/ "continue", + "pokraÄŤuj", + "продолжить", +/*MISSING*/ "continue", + }}, + {0xe45854fb, { // "You can find safety in some places in the Prairie, but if you want treasures, they can be found only on the other side of a giant herd of bulls." + "SÄ… na Prerii miejsca bezpieczne, ale jeĹ›li szukasz skarbĂłw, moĹĽesz je znaleźć tylko po drugiej stronie wielkiego stada biegnÄ…cych bykĂłw.", +/*MISSING*/ "You can find safety in some places in the Prairie, but if you want treasures, they can be found only on the other side of a giant herd of bulls.", + "Na nÄ›kterĂ˝ch mĂ­stech PrĂ©rie je bezpeÄŤno, ale pokud chceš poklady, musíš je hledat na druhĂ© stranÄ› obrovskĂ©ho stáda bĂ˝kĹŻ.", + "Đ’ некоторых меŃŃ‚Đ°Ń… Прерии веŃŃŚĐĽĐ° безопаŃно, но еŃли вы хотите Ńокровищ, их можно найти лиŃŃŚ на Đ´Ń€Ńгой Ńтороне от огромных ŃŃ‚Đ°Đ´ быков.", +/*MISSING*/ "You can find safety in some places in the Prairie, but if you want treasures, they can be found only on the other side of a giant herd of bulls.", + }}, + {0xe469319b, { // "which grants the greatest enjoyment.\"" + "sprawia najwiÄ™kszÄ… przyjemność.\"", +/*MISSING*/ "which grants the greatest enjoyment.\"", + "poskytuje nejvÄ›tší potěšenĂ­.\"", + "который приноŃит больŃое ŃдовольŃтвие.\"", +/*MISSING*/ "which grants the greatest enjoyment.\"", + }}, + {0xe4aad319, { // "triheptagonal tesselation" + "posadzka trĂłjkÄ…tno-siedmiokÄ…tna", +/*MISSING*/ "triheptagonal tesselation", + "troj-sedmiĂşhelnĂ­kovĂ© dÄ›lenĂ­", + "замощение треŃгольниками и ŃемиŃгольниками", +/*MISSING*/ "triheptagonal tesselation", + }}, + {0xe50afb4c, { // "Gameboard" + "Plansza", + "Oyun Tahtası", + "HernĂ­ desky", + "Đгровая Đ´ĐľŃка", + "Spielbrett", + }}, + {0xe523dc37, { // "Not available in the pure tactics mode!" + "NiedostÄ™pne w trybie taktycznym!", + "Taktik modunda kullanılamaz!", + "Toto nenĂ­ v taktickĂ©m mĂłdu k dispozici!", + "НедоŃŃ‚Ńпно в тактичеŃком режиме!", + "Nicht verfĂĽgbar im Strategiemodus!", + }}, + {0xe5512986, { // "(e.g. Shift+Ctrl+Z)" + " (na przykĹ‚ad Shift+Ctrl+Z)", + " (Meselâ Shift+Ctrl+Z)", + "ladÄ›nĂ­ (například Shift+Ctrl+Z)", + "Ctrl для тонкой наŃтройки", + "Ă„ndern (z.B. Strg+Shift+Z)", + }}, + {0xe560137d, { // "A huge plant growing in the Jungle. Each Ivy has many branches, and one branch grows per each of your moves. Branches grow in a clockwise order. The root itself is vulnerable." + "Wielka roĹ›lina z dĹĽungli. Bluszcz zazwyczaj ma wiele gaĹ‚Ä™zi, po kaĹĽdym Twoim ruchu jedna z nich roĹ›nie. GaĹ‚Ä™zie rosnÄ… w kolejnosci zegarowej. Sam korzeĹ„ nie atakuje, zatem goĹ‚y korzeĹ„ Ĺ‚atwo Ĺ›ciąć.\n", + "VahĹźi Ormanda bĂĽyĂĽyen devasa bir bitki. Her sarmaşığın bir sĂĽrĂĽ dalı vardır ve senin her hareketinle bir dal bĂĽyĂĽr. Dallar saatyönĂĽ sırasında bĂĽyĂĽr. KökĂĽn kendisi savunmasızdır. \n", + "Obrovská rostlina, která roste v DĹľungli. KaĹľdĂ˝ BĹ™eÄŤĹĄan má mnoho vÄ›tvĂ­, a po kaĹľdĂ©m tvĂ©m pohybu jedna z nich povyroste. VÄ›tve rostou v poĹ™adĂ­ po smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek. KoĹ™en BĹ™eÄŤĹĄanu je takĂ© zranitelnĂ˝.", + "Огромное раŃтение, раŃŃ‚Ńщее в ДжŃнглях. Каждый плющ имеет много побегов, и один из них раŃŃ‚Ń‘Ń‚ каждый ход. Побеги раŃŃ‚ŃŃ‚ по чаŃовой Ńтрелке. Корень плюща - Ńамое Ńязвимое меŃŃ‚Đľ.\n", + "Eine riesige Pflanze, die im Dschungel wächst. Jeder Efeu hat viele Zweige, und jedes Mal, wenn du dich bewegst, wächst einer. Sie wachsen im Uhrzeigersinn. Die Wurzel selbst ist verwundbar.", + }}, + {0xe5905e88, { // "Roughly 42% cells are on the edge of your sight range. Reducing the sight range makes HyperRogue work faster, but also makes the game effectively harder." + "OkoĹ‚o 42% pĂłl jest na brzegu Twojego pola widzenia. Zmniejszenie zasiÄ™gu sprawia, ĹĽe HyperRogue dziaĹ‚a szybciej, ale rozgrywka jest trudniejsza.", +/*MISSING*/ "Roughly 42% cells are on the edge of your sight range. Reducing the sight range makes HyperRogue work faster, but also makes the game effectively harder.", + "Zhruba 42% polĂ­ÄŤek se nacházĂ­ na polomÄ›ru tvĂ©ho dohledu. Pokud snížíš dohled, bude HyperRogue bÄ›hat rychleji, ale takĂ© se tĂ­m ztíží.", + "Примерно 42% клеток находятŃŃŹ в радиŃŃе видимоŃти. УменьŃение радиŃŃĐ° обзора ŃŃкоряет Ń€Đ°Đ±ĐľŃ‚Ń HyperRogue, но заметно ŃŃложняет игрŃ.", +/*MISSING*/ "Roughly 42% cells are on the edge of your sight range. Reducing the sight range makes HyperRogue work faster, but also makes the game effectively harder.", + }}, + {0xe59fd741, { // "azimuthal equi-area" + "azymutalny, rĂłwne pola", +/*MISSING*/ "azimuthal equi-area", + "azimutálnĂ­ plochojevnĂ˝", + "азимŃтальная, Ńохранение площадей", + "flächentreu azimutal", + }}, + {0xe5d1b8b3, { // "This tutorial is mostly aimed to show what is special about the geometry used by HyperRogue. It also shows the basics of gameplay, and how is it affected by geometry.\n\nYou decide when you want to stop playing with the current \"slide\" and go to the next one, by pressing Enter. You can also press ESC to see a menu with other options." + "Zadaniem tego podrÄ™cznika jest pokazanie szczegĂłlnych wĹ‚asnoĹ›ci geometrii uĹĽywanej przez HyperRogue; sÄ… teĹĽ pokazane podstawy rozgrywki, i jak geometria na nie wpĹ‚ywa.\n\nTy decydujesz, kiedy chcesz skoĹ„czyć bawić siÄ™ obecnym \"slajdem\" i przejść do kolejnego, naciskajÄ…c Enter. NaciĹ›nij ESC by zobaczyć pozostaĹ‚e opcje.", +/*MISSING*/ "This tutorial is mostly aimed to show what is special about the geometry used by HyperRogue. It also shows the basics of gameplay, and how is it affected by geometry.\n\nYou decide when you want to stop playing with the current \"slide\" and go to the next one, by pressing Enter. You can also press ESC to see a menu with other options.", + "Tento tutoriál je pĹ™evážnÄ› zaměřen na to, aby ukázal, co je zvláštnĂ­ho na geometrii, kterou HyperRogue používá. TakĂ© ukazuje základy hry a to, jak ji geometrie ovlivĹuje.\n\nKdyĹľ si budeš chtĂ­t pĹ™estat hrát se souÄŤasnĂ˝m \"snĂ­mkem\" a pĹ™ejĂ­t na další, stiskni Enter. Stiskem ESC mĹŻĹľeš takĂ© zobrazit menu s dalšími moĹľnostmi.", + "Главная цель этого Ń€ŃководŃтва -- показать ĐľŃобенноŃти геометрии в HyperRogue. Также здеŃŃŚ объяŃняютŃŃŹ ĐľŃновы игры, и как геометрия на них влияет.\n\nТы можеŃŃŚ перейти на ŃледŃющий \"Ńлайд\", нажав Enter. Нажми ESC, чтобы открыть меню Ń Đ´Ń€Ńгими опциями.", +/*MISSING*/ "This tutorial is mostly aimed to show what is special about the geometry used by HyperRogue. It also shows the basics of gameplay, and how is it affected by geometry.\n\nYou decide when you want to stop playing with the current \"slide\" and go to the next one, by pressing Enter. You can also press ESC to see a menu with other options.", + }}, + {0xe61f191b, { // "You overhear miners talking about a castle..." + "PodsĹ‚ucha%Ĺ‚eĹ›0 gĂłrnikĂłw rozmawiajÄ…cych o zamku...", + "Madencilerin bir kale hakkında konuĹźtuÄźunu duydun...", + "Zaslechl jsi HornĂ­ky, jak mluvĂ­ o nÄ›jakĂ©m hradu...", + "Đ’Ń‹ ŃлыŃите Ńахтёров, говорящих Đľ замке...", + "Du hörst Minenarbeiter ĂĽber ein Schloss sprechen...", + }}, + {0xe629d1bd, { // "You summon a sandworm!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 Czerwia!", + "Bir kumkurdu çağırdın!", + "Vyvola%l0 jsi PĂ­seÄŤnĂ©ho ÄŤerva!", + "Đ’Ń‹ призвали червя!", + "Du beschwörst einen Sandwurm!", + }}, + {0xe686d5dc, { // "Cannot jump through %the1!" + "Nie moĹĽesz skakać przez %a1!", + "%1 hĂĽcresinden zıplayamazsın!", + "NemĹŻĹľeš skoÄŤit pĹ™es %a1!", + "Нельзя прыгать через %a1!", + "Du kannst nicht durch %den1 %a1 springen!", + }}, + {0xe6a912ff, { // "activate Orb power" + "aktywuj moc Sfery", + "KĂĽre gĂĽcĂĽnĂĽ aktif et", + "aktivace schopnosti SfĂ©ry", + "активировать ŃферŃ", + "Orb aktivieren", + }}, + {0xe74836ff, { // ", m - mode: hardcore only" + ", m - tryb hardcore", + ", m - aĹźmış mod", + ", m - pouze hardcore mĂłd", + ", m - режим hardcore", + ", m - Modus: Hardcore", + }}, + {0xe775008a, { // "Prove yourself here, then find new lands, with new quests..." + "PokaĹĽ, co potrafisz tutaj, potem znajdĹş nowe krainy i misje...", + "Kendini burada kanıtla, sonra yeni görevlerle yeni diyarlar keĹźfet...", + "UkaĹľ tady, co umíš, a pak najdi novĂ© kraje a novĂ© Ăşkoly...", + "Проверь Ńебя здеŃŃŚ, Đ° потом ищи новые земли Ń Đ˝ĐľĐ˛Ń‹ĐĽĐ¸ миŃŃиями", + "Beweise hier deine Fähigkeiten und finde dann neue Länder mit neuen Aufgaben....", + }}, + {0xe7819731, { // "You do not know exactly why, but there are valuable pearls on many boats in the whirlpool." + "WĹ‚aĹ›ciwie nie wiesz, dlaczego, ale na wielu statkach w Wirze moĹĽna znaleźć drogocenne perĹ‚y.", + "Nedeni bilinmez ama, pek tayfunun içindeki pek çok botta deÄźerli inciler var.", + "Nevíš tak ĂşplnÄ› jistÄ› proÄŤ, ale na mnoha ÄŤlunech ve VĂ­ru jsou cennĂ© perly.", + "НеизвеŃтно, почемŃ, но этих жемчŃжин довольно много в лодках в этом водовороте.", + "Du weiĂźt nicht genau warum, aber es gibt schöne Perlen auf vielen Booten im Strudel.", + }}, + {0xe7ab2a66, { // "Gravitational anomalies in the Jungle create mountains overgrown with ivies and bushes. Will you dare to climb the ivies to get the amethysts hidden above?\n\nCells adjacent to Ivies count as stable (but Ivies cannot climb themselves or other Ivies)." + "Anomalia grawitacyjna w DĹĽungli stworzyĹ‚a gĂłrÄ™ poroĹ›niÄ™tÄ… bluszczem i krzakami. Czy odwaĹĽysz siÄ™ wspiąć po bluszczu, by zdobyć ukryte na niej ametysty?\n\nPola sÄ…siadujÄ…ce z Bluszczem liczÄ… siÄ™ jako stabilne (ale Bluszcz nie moĹĽe siÄ™ wspinać po samym sobie ani po innych bluszczach).", +/*MISSING*/ "Gravitational anomalies in the Jungle create mountains overgrown with ivies and bushes. Will you dare to climb the ivies to get the amethysts hidden above?\n\nCells adjacent to Ivies count as stable (but Ivies cannot climb themselves or other Ivies).", + "GravitaÄŤnĂ­ anomálie v DĹľungli vytvářejĂ­ hory zarostlĂ© bĹ™eÄŤĹĄanem a keĹ™i. Odvážíš se vylĂ©zt na bĹ™eÄŤĹĄany, abys zĂ­skal ametysty ukrytĂ© nahoĹ™e?\n\nVšechny polĂ­ÄŤka, která sousedĂ­ s BĹ™eÄŤĹĄanem, se berou jako stabilnĂ­ (BĹ™eÄŤĹĄan ale nemĹŻĹľe šplhat po sobÄ› ani po jinĂ˝ch BĹ™eÄŤĹĄanech).", + "Гравитационная аномалия в ДжŃнглях Ńоздала горŃ, зароŃŃŃŃŽ плющом и ĐşŃŃтами. РиŃкнёте ли вы продратьŃŃŹ через плющ и найти Ńпрятанные здеŃŃŚ аметиŃŃ‚Ń‹?\n\nКлетки рядом Ń ĐżĐ»ŃŽŃ‰ĐľĐĽ ŃчитаютŃŃŹ Ńтабильными (однако плющ не может раŃти вдоль Ńебя или Đ´Ń€Ńгого плюща.", +/*MISSING*/ "Gravitational anomalies in the Jungle create mountains overgrown with ivies and bushes. Will you dare to climb the ivies to get the amethysts hidden above?\n\nCells adjacent to Ivies count as stable (but Ivies cannot climb themselves or other Ivies).", + }}, + {0xe7b428d4, { // "F2 = save" + "F2 = zapisz", + "F2 = kaydet", + "F2 = uloĹľenĂ­", + "F2 = запиŃĐ°Ń‚ŃŚ", + "F2 = Speichern", + }}, + {0xe819ab65, { // "more curved hyperbolic geometry" + "wiÄ™ksza krzywizna", +/*MISSING*/ "more curved hyperbolic geometry", + "zakĹ™ivenÄ›jší hyperbolická geometrie", + "более иŃкривлённая геометрия", +/*MISSING*/ "more curved hyperbolic geometry", + }}, + {0xe86acfd5, { // "\n\nThis Orb protects you from attacks, scents, and insulates you from electricity. It does not let you go through deadly terrain, but if you are attacked with fire, it lets you stay in place in it." + "\n\nTa Sfera chroni CiÄ™ przed atakami, zapachami, i izoluje od elektrycznoĹ›ci. Nie pozwala iść przez zabĂłjczy teren, ale jeĹ›li zostaniesz zaatakowan%y0 ogniem, moĹĽesz stać w miejscu.", +/*MISSING*/ "\n\nThis Orb protects you from attacks, scents, and insulates you from electricity. It does not let you go through deadly terrain, but if you are attacked with fire, it lets you stay in place in it.", + "\n\nTato sfĂ©ra te chránĂ­ pĹ™ed Ăştoky a pachy a izoluje tÄ› pĹ™ed elektĹ™inou. NeumoĹľĹuje procházet smrtĂ­cĂ­m terĂ©nem, ale pokud na tebe nÄ›kdo zaĂştoÄŤĂ­ ohnÄ›m, mĹŻĹľeš v nÄ›m zĹŻstat stát.", + "\n\nĐ­Ń‚Đ° Ńфера защищает Đ˛Đ°Ń ĐľŃ‚ Đ°Ń‚Đ°Đş, запахов, изолирŃет от электричеŃтва. Она не позволяет вам пойти в опаŃĐ˝ŃŃŽ клеткŃ, но еŃли вы атакованы огнём, вы можете Ńтоять на меŃте.", + "\n\nDieser Orb schĂĽtzt dich vor Angriffen, DĂĽften, und isoliert dich gegenĂĽber Elektrizität. Er lässt dich nicht durch tödliches Terrain laufen, aber wenn du mit Feuer angegriffen wirst, kannst du darin stehen bleiben.", + }}, + {0xe89063bd, { // "You need to dismount %the1!" + "Musisz opuĹ›cić %a1!", +/*MISSING*/ "You need to dismount %the1!", + "Musíš seskoÄŤit!", + "Đ’Ń‹ должны Ńлезть Ń %a1!", + "Du musst von %dem1 %a1 absteigen!", + }}, + {0xe8dc5933, { // "\"We live in a beautiful and orderly world, " + "\"Ĺ»yjemy w piÄ™knym i uporzÄ…dkowanym Ĺ›wiecie, ", +/*MISSING*/ "\"We live in a beautiful and orderly world, ", + "\"Ĺ˝ijeme v krásnĂ©m a uspořádanĂ©m svÄ›tÄ›, ", + "\"Мы живём в прекраŃном и Ńпорядоченном мире, ", +/*MISSING*/ "\"We live in a beautiful and orderly world, ", + }}, + {0xe8f470be, { // "Your total wealth" + "Twoje Ĺ‚Ä…czne bogactwo", + "Toplam servetiniz", + "TvĂ© celkovĂ© bohatstvĂ­", + "Đ’Đ°Ńе богатŃтво", + "Dein Gesamtvermögen", + }}, + {0xe966825b, { // "A beautiful gem from the Jungle." + "PiÄ™kny klejnot z DĹĽungli.", + "VahĹźi Ormandan elde edilmiĹź bir mĂĽcevher.", + "NádhernĂ˝ drahokam z DĹľungle.", + "ПрекраŃный камень из ДжŃнглей.", + "Ein schöner Edelstein aus dem Dschungel.", + }}, + {0xe96dc1b1, { // "all" + "wszystko", +/*MISSING*/ "all", + "vše", + "вŃе", +/*MISSING*/ "all", + }}, + {0xe970675e, { // "date" + "data", + "tarih", + "datum", + "Đ´Đ°Ń‚Đ°", + "Datum", + }}, + {0xe990670b, { // "background music" + "muzyka w tle", +/*MISSING*/ "background music", + "hudba", + "фоновая ĐĽŃзыка", + "Hintergrundmusik", + }}, + {0xe9914d4e, { // "polygon sides" + "boki wielokÄ…ta", +/*MISSING*/ "polygon sides", + "strany mnohoĂşhelnĂ­ku", + "Ńтороны многоŃгольника", + "Polygon-Seiten", + }}, + {0xe9e88caa, { // "A clearing in the Overgrown Woods. Obviously, this gives the Mutant Ivies an infinite space to grow...\n\nMutant Fruits rot if they are not adjacent to a Mutant Ivy." + "Polana w PrzeroĹ›niÄ™tym Lesie. OczywiĹ›cie, pozwala Zmutowanym Bluszczom rosnąć w nieskoĹ„czoność...\n\nZmutowane Owoce gnijÄ…, gdy nie sÄ…siadujÄ… ze Zmutowanym Bluszczem.", +/*MISSING*/ "A clearing in the Overgrown Woods. Obviously, this gives the Mutant Ivies an infinite space to grow...\n\nMutant Fruits rot if they are not adjacent to a Mutant Ivy.", + "MĂ˝tina v Pralese. MutantnĂ­ bĹ™eÄŤĹĄan tu samozĹ™ejmÄ› má nekoneÄŤnĂ˝ prostor k rĹŻstu...\n\nMutantnĂ­ ovoce shnije, pokud se nenacházĂ­ vedle MutantnĂ­ho bĹ™eÄŤĹĄanu.", + "Поляна в ЗароŃлях. ПредŃтавляет Ńобой неограниченное проŃтранŃтво для роŃŃ‚Đ° плющей-ĐĽŃтантов...\n\nĐśŃтировавŃие Ń„Ń€Ńкты гниют, еŃли они не находятŃŃŹ рядом Ń ĐżĐ»ŃŽŃ‰ĐľĐĽ.", + "Eine Lichtung in den verwilderten Wäldern. Offensichtlich gibt sie den mutierten Efeuen unbegrenzten Platz zu wachsen...\n\nMutierte FrĂĽchte verfaulen, wenn sie sich nicht direkt neben einem mutierten Efeu befinden.", + }}, + {0xe9f539aa, { // "display pattern codes (full)" + "pokaĹĽ kody wzorku (peĹ‚ne)", + "doku kodlarını göster (tam)", + "zobraz kĂłdy vzoru (ĂşplnĂ©)", + "показать коды Ńзоров (полные)", + "Muster Codes anzeigen (komplett)", + }}, + {0xea43495e, { // "player 1 go" + "gracz 1 idĹş", + "oyuncu 1, git", + "hráč 1 pohyb", + "игрок 1 идёт", + "Spieler 1 los", + }}, + {0xea811d40, { // "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." + "Ta Sfera pozwala Ci nurkować. Podczas nurkowania moĹĽesz widzieć i zbierać podwodne skarby, a potwory CiÄ™ nie widzÄ…. Boisz siÄ™ wyskakiwać do wody z Ĺ‚Ăłdki, takĹĽe raczej tego nie zrobisz.", + "Bu KĂĽre suya dalabilmeni saÄźlar. Suyun altındayken suyun altını görebilir ve sualtı hazinelerini toplayabilirsin. Bunu yaparken canavarlar seni göremez.Korkun sebebiyle bir kayıktan suya genelde doÄźrudan atlayamıyorsun.", + "Tato SfĂ©ra ti umoĹľĹuje potopit se pod vodu. KdyĹľ jsi potopenĂ˝, mĹŻĹľeš vidÄ›t a zĂ­skávat podvodnĂ­ poklady, zatĂ­mco netvoĹ™i tÄ› nevidĂ­. Obvykle ale nebudeš skákat do vody přímo ze ÄŤlunu -- to tÄ› trochu dÄ›sĂ­.", + "Đ­Ń‚Đ° Ńфера позволяет нырять. Когда Đ’Ń‹ ныряете, Đ’Ń‹ видите и можете Ńобирать подводные ценноŃти, Đ° враги Đ’Đ°Ń Đ˝Đµ видят. Но Đ’Ń‹ боитеŃŃŚ прягать из лодки прямо в водŃ.", + "Dieser Orb erlaubt es dir zu tauchen. Während du tauchst kannst du versunkene Schätze sammeln, dabei bist du fĂĽr Monster unsichtbar. Du hast Angst von einem Boot aus ins Meer zu springen daher tust du es meist nicht.", + }}, + {0xeaaeb0a1, { // "+5 = center instantly, -5 = do not center the map" + "+5 = centruj natychmiast, -5 = nie centruj", + "+5 = anında merkeze al, -5 = merkezleme", + "+5 = okamĹľitĂ© vycentrovánĂ­, -5 = žádnĂ© centrovánĂ­", + "+5 = центрировать ŃразŃ, -5 = не центрировать", + "+5 = sofort zentrieren, -5 = nicht zentrieren", + }}, + {0xeb30aac0, { // "A fruit from the Yendorian Forest." + "Owoc z YendoriaĹ„skiego Lasu.", +/*MISSING*/ "A fruit from the Yendorian Forest.", + "Ovoce z YendorskĂ©ho lesa.", + "ФрŃкт из ЙендорŃкого леŃĐ°.", + "Eine Frucht des Yendorianischen Waldes.", + }}, + {0xeb9ca8cf, { // "see the help screen" + "obejrzyj ekran pomocy", + "yardım ekranına bak.", + "zobrazit obrazovku s nápovÄ›dou", + "Ńмотри экран помощи", + "siehe Hilfe Bildschirm", + }}, + {0xebaeb90b, { // "The Hive is filled with Hyperbugs. They are huge insects which look a bit like ants, a bit like bees, and a bit like roaches. They live in circular nests, and an army of Hyperbugs will attack any intruder, including you and enemy Hyperbugs. Will you manage to get to the heart of such a nest, and get the precious Royal Jelly?" + "Mrowisko jest wypeĹ‚nione Hiperinsektami. Te wielkie owady wyglÄ…dajÄ… trochÄ™ jak mrĂłwki, trochÄ™ jak pszczoĹ‚y, trochÄ™ jak karaluchy. Ĺ»yjÄ… w okrÄ…gĹ‚ych gniazdach, i atakujÄ… kaĹĽdego najeĹşdĹşcÄ™, Ĺ‚Ä…cznie z TobÄ… i wrogimi hiperinsektami. Czy uda Ci siÄ™ dotrzeć do serca roju i zdobyć cenne krĂłlewskie mleczko?", + "Kovan aĹźkın böceklerle dolu. AĹźkınböcekler biraz arıya biraz karıncaya biraz da hamamböceÄźine benzeyen kocaman böcekler. Dairesel kovanlarda yaşıyorlar ve yaklaĹźan dĂĽĹźman aĹźkınböceklerineve sana saldıracaklardır. Kovanın merkezine ulaşıp MĂĽthiĹź Jöleyi ele geçirebilecek misin ?", + "Ăšl je plnĂ˝ HyperhmyzákĹŻ. Tento obří hmyz vypadá trochu jako mravenci, trochu jako vÄŤely a trochu jako švábi. Ĺ˝ijĂ­ v kruhovĂ˝ch Ăşlech a jejich armáda zaĂştoÄŤĂ­ na kaĹľdĂ©ho vetĹ™elce vÄŤetnÄ› tebe a nepřátelskĂ˝ch HyperhmyzákĹŻ. Dokážeš se dostat do srdce takovĂ©ho kruhovĂ©ho Ăşlu a zĂ­skat vzácnou Mateří kašiÄŤku?", + "Улей наŃелён гипержŃками. Эти огромные наŃекомые выглядят немного как ĐĽŃравьи, немного как пчёлы и немного как тараканы. Они живŃŃ‚ в крŃглых гнёздах, и их армия готова напаŃŃ‚ŃŚ на любого нарŃŃителя, включая Đ’Đ°Ń Đ¸ жŃков Đ´Ń€Ńгого цвета. Хотите ли Đ’Ń‹ добратьŃŃŹ Đ´Đľ центра такого гнезда и забрать ценное маточное молочко?", + "Das Nest ist voller Hyperkäfer. Riesige Insekten, die ein bisschen wie Ameisen, Bienen oder Kakerlaken aussehen. Sie leben in kreisförmigen Nestern, und eine Armee von ihnen greift sämtliche Eindringlinge an - auch dich und feindliche Hyperkäfer. Schaffst du es zum Zentrum eines Nests, um das wertvolle GelĂ©e Royale zu ergattern?", + }}, + {0xebc24350, { // "Your %1 activates!" + "Uruchomi%Ĺ‚1 siÄ™ Twoja %1!", +/*MISSING*/ "Your %1 activates!", + "Tvoje %1 se aktivovala!", + "Đ’Đ°ŃĐ° %1 Ńработала!", + "Dein %1 aktiviert sich!", + }}, + {0xebd2779b, { // "this Orb never appears in %the1" + "ta Sfera nie pojawia siÄ™ %abl1", + "Bu KĂĽre %abl1 hiç bulunmaz", + "tato SfĂ©ra, se %abl1 nikdy neobjevuje", + "ŃŤŃ‚Đ° Ńфера никогда не появляетŃŃŹ %abl1", + "Dieser Orb erscheint nie in %der1", + }}, + {0xebdeec21, { // "Still, even greater treasures lie ahead..." + "Jeszcze wiÄ™ksze skarby przed TobÄ…...", + "Ä°leride daha bile çok hazine seni bekliyor...", + "Ale dál leží ještÄ› vÄ›tší poklady...", + "БольŃĐ°ŃŹ чаŃŃ‚ŃŚ Ńокровищ ещё впереди...", + "Dich erwarten größere Schätze auf deinem Weg", + }}, + {0xebff281a, { // "No info about this..." + "Brak informacji o tym...", + "Hakkında bir bilgi yok...", + "O tomhle nemám žádnĂ© informace...", + "Нет информации об этом...", + "Keine Info hierĂĽber...", + }}, + {0xec03df26, { // "This land is a quick gateway to other lands. It is very easy to find other lands from the Crossroads. Which means that you find monsters from most other lands here!\n\nAs long as you have found enough treasure in their native lands, you can find magical items in the Crossroads. Mirror Land brings mirrors and clouds, and other land types bring magical orbs.\n\nA special treasure, Hyperstone, can be found on the Crossroads, but only after you have found 10 of every other treasure." + "Ta kraina jest szybkim przejĹ›ciem do pozostaĹ‚ych krain.\n\nBardzo Ĺ‚atwo stÄ…d dostać siÄ™ do wiÄ™kszoĹ›ci miejsc, ale moĹĽna teĹĽ tu spotkać potwory z różnych stron!\n\nMoĹĽesz znaleźć magiczne przedmioty na SkrzyĹĽowaniu, jeĹ›li zdoby%Ĺ‚eĹ›0 wystarczajÄ…co wiele skarbĂłw w ich rodzinnych krainach. SÄ… to sfery, magiczne lustra i chmury.\n\nSpecyficzne skarby SkrzyĹĽowaĹ„, Hiperkamienie, moĹĽna znaleźć na SkrzyĹĽowaniu, ale tylko po znalezieniu 10 jednostek kaĹĽdego innego skarbu.", + "Bu diyar diÄźer diyarlara kolay geçiĹź için var. Arayollardan baĹźka diyarları bulması çok kolay. Bu demektir ki, burada baĹźka diyarlardan canavarlar bulman çok olası!\n\nEÄźer hazineleri kendi yerlerinde yeterince topladıysan, Arayollarda sihirli eĹźyalar bulabilirsin. Ayanalar Diyarından yansımalar ve bulutlar, diÄźer diyarlardan sihirli kĂĽreler gelebilir.\n\nĂ–zel bir hazine, AĹźkıntaĹź, sadece Arayollarda bulnabilir, ama öncesinde diÄźer her hazine çeĹźidinden 10'ar tane bulman gerekiyor.", + "Tento kraj je rychlou branou do jinĂ˝ch krajĹŻ. Na KĹ™iĹľovatce je velmi snadnĂ© najĂ­t jinĂ© kraje. CoĹľ znamená, Ĺľe tu najdeš i netvory z vÄ›tšiny jinĂ˝ch krajĹŻ!\n\nNa KĹ™iĹľovatce mĹŻĹľeš najĂ­t magickĂ© pĹ™edmÄ›ty, pokud jsi v jejich krajĂ­ch nalez%l0 dost pokladĹŻ. MĹŻĹľeš tu najĂ­t zrcadla a oblaky z Kraje zrcadel a magickĂ© sfĂ©ry z jinĂ˝ch typĹŻ krajĹŻ.\n\nNa KĹ™iĹľovatce mĹŻĹľeš najĂ­t zvláštnĂ­ poklad -- Hyperkam -- ale pouze potĂ©, co najdeš 10 kusĹŻ od všech ostatnĂ­ch pokladĹŻ.", + "Đ­Ń‚Đ° земля - кратчайŃий ĐżŃŃ‚ŃŚ в любŃŃŽ Đ´Ń€ŃĐłŃŃŽ. ЗдеŃŃŚ очень легко найти любŃŃŽ Đ´Ń€ŃĐłŃŃŽ землю, и здеŃŃŚ можно вŃтретить монŃтров изо вŃех земель!\n\nКак только Đ’Ń‹ набираете Đ´ĐľŃтаточно Ńокровищ в некоторой земле, её магичеŃкие предметы ŃтановятŃŃŹ Đ´ĐľŃŃ‚Ńпны здеŃŃŚ. Đ’ Зеркальной земле ŃŤŃ‚Đľ зеркала и миражи, в ĐľŃтальных - Ńферы.\n\nСвой Ńокровище, Гиперкамень, появитŃŃŹ лиŃŃŚ поŃле того, как Đ’Ń‹ Ńоберёте по 10 Ńокровищ каждого типа.", + "Dieses Land ist eine schnelle Verbindung zu anderen Ländern. Es ist sehr einfach, an den Kreuzungen andere Länder zu finden. Das heiĂźt, dass du hier auch Monstern aus den meisten anderen Ländern begegnen wirst!\n\nSobald du genug Schätze in den jeweiligen Ländern gefunden hast, erscheinen deren magische Gegenstände auf den Kreuzungen. Spiegel und Wolken stammen aus dem Spiegelland, andere magische Orbs aus anderen Ländern.\n\nEin besonderer Schatz, der Hyperstein, kann auf den Kreuzungen gefunden werden. Aber du musst zuerst 10 von allen anderen Schätzen gesammelt haben.", + }}, + {0xec251dd1, { // "HELP" + "POMOC", + "YARDIM", + "NĂPOVÄšDA", + "ПОМОШЬ", + "HILFE", + }}, + {0xec29dcbd, { // "New players think that the action of HyperRogue takes place on a sphere. This is not true -- the next slide will show the surface HyperRogue actually takes place on.\n\nUse arrow keys to rotate the model, and Page Up/Down to zoom.\n\nIf you do not see anything, press '5' to try a safer renderer." + "Nowi gracze myĹ›lÄ…, ĹĽe akcja HyperRogue toczy siÄ™ na sferze. To nieprawda -- kolejny slajd pokazuje powierzchniÄ™, na ktĂłrej toczy siÄ™ gra. Obracaj modelem strzaĹ‚kami, Page Up/Down by skalować.\n\nJeĹ›li nic nie widzisz, naciĹ›nij '5' dla bezpieczniejszego renderera.", +/*MISSING*/ "New players think that the action of HyperRogue takes place on a sphere. This is not true -- the next slide will show the surface HyperRogue actually takes place on.\n\nUse arrow keys to rotate the model, and Page Up/Down to zoom.\n\nIf you do not see anything, press '5' to try a safer renderer.", + "NovĂ­ hráči si ÄŤasto myslĂ­, Ĺľe se HyperRogue odehrává na povrchu koule. NenĂ­ to pravda -- další snĂ­mek ti ukáže povrch, na jakĂ©m se HyperRogue opravdu odehrává.\n\nModel mĹŻĹľeš otáčet šipkami a zoomovat klávesami Page Up/Down.\n\nPokud nic nevidíš, stiskni klávesu '5' pro aktivaci bezpeÄŤnÄ›jšího rendereru.", + "Новички иногда Đ´ŃĐĽĐ°ŃŽŃ‚, что дейŃтвие в HyperRogue проиŃходит на Ńфере. Đ­Ń‚Đľ неправда -- на ŃледŃющем Ńлайде показана наŃтоящая поверхноŃŃ‚ŃŚ HyperRogue.\n\nĐŃпользŃйте Ńтрелки, чтобы поворачивать модель, и Page Up/Down, чтобы менять размер.\n\nĐ•Ńли ничего не видно, нажми '5' для безопаŃного визŃализатора.", +/*MISSING*/ "New players think that the action of HyperRogue takes place on a sphere. This is not true -- the next slide will show the surface HyperRogue actually takes place on.\n\nUse arrow keys to rotate the model, and Page Up/Down to zoom.\n\nIf you do not see anything, press '5' to try a safer renderer.", + }}, + {0xec5728d2, { // "A nasty creature native to the Living Caves. They don't like you for some reason." + "Brzydki stwĂłr z Ĺ»ywych JaskiĹ„. JakoĹ› CiÄ™ nie lubi.", + "YaĹźayan MaÄźaralarda yaĹźayan iÄźrenç bir yaratık. Nedense seni hiç sevmiyor.", + "Hnusná potvora ĹľijĂ­cĂ­ v Ĺ˝ivoucĂ­ch jeskynĂ­ch. Z nÄ›jakĂ©ho dĹŻvodu tÄ› nemajĂ­ rády.", + "Противное ŃŃщеŃтво из Живых пещер. По каким-Ń‚Đľ причинам не любит людей.", + "Ein grässliches Geschöpf, das in den Lebenden Höhlen haust. Irgendwie können diese Kreaturen dich nicht leiden.", + }}, + {0xec6ad5de, { // "Two mines next to you!" + "Dwie miny koĹ‚o Ciebie!", + "Yakınında iki mayın var!", + "Ve tvĂ© blĂ­zkosti se nacházejĂ­ dvÄ› miny!", + "Две мины рядом Ń Đ’Đ°ĐĽĐ¸!", + "2 Minen um dich!", + }}, + {0xec94383d, { // "This orb can be used to invoke a wall of ice. It also protects you from fires." + "Ta sfera zostawia za TobÄ… Ĺ›cianÄ™ lodu, a takĹĽe chroni CiÄ™ przed ogniem.", + "Bu kĂĽre bir buz duvarı oluĹźturmaya yarar. Aynı zamanda seni ateĹźten korur", + "Tuto sfĂ©ru mĹŻĹľeš použít k vytvoĹ™enĂ­ ledovĂ© zdi. KromÄ› toho tÄ› chránĂ­ pĹ™ed ohnÄ›m.", + "Đ­Ń‚Đ° Ńфера Ńоздаёт Đ·Đ° Вами ŃŃ‚ĐµĐ˝Ń Đ»ŃŚĐ´Đ°. Также защищает Đ’Đ°Ń ĐľŃ‚ огня.", + "Du kannst diesen Orb verwenden um einen Eiszauber zu wirken, der eine Wand aus Eis erschafft. Er schĂĽtzt dich auch vor Feuer.", + }}, + {0xecb8ebbf, { // "Nowhere to blow %the1!" + "Nie ma gdzie zdmuchnąć %a1!", + "%a1! ittirecek bir yer yok!", + "%a1 nenĂ­ kam odfouknout!", + "НекŃĐ´Đ° ŃĐ´ŃŃ‚ŃŚ %a1!", + "Kein Platz um %den1 %a1 wegzuwehen!", + }}, + {0xece1dc90, { // "Joystick %1, axis %2" + "Joystick %1, oĹ› %2", + "Joystick %1, eksen %2", + "Joystick %1, osa %2", + "ДжойŃтик %1, ĐľŃŃŚ %2", + "Joystick %1, Achse %2", + }}, + {0xecef3333, { // "That was easy, but groups could be dangerous." + "To byĹ‚o proste, z grupami moĹĽe być trudniej.", + "Bu kolaydı, ama gruplar daha tehlikeli olabilir.", + "To bylo snadnĂ©, ale skupiny by mohly bĂ˝t nebezpeÄŤnĂ©.", + "Они Ńлабы, но в Ńтае могŃŃ‚ быть опаŃны.", + "Das war einfach, aber mehrere könnten gefährlich sein.", + }}, + {0xed1ff286, { // "Ď•: %1°" + "Ď•: %1°", + "Ď•: %1°", + "Ď•: %1°", + "Ď•: %1°", + "Ď•: %1°", + }}, + {0xed2fcf78, { // "Preparing the line (%1/1000)..." + "Przygotowanie linii (%1/1000)...", +/*MISSING*/ "Preparing the line (%1/1000)...", + "PĹ™ipravuji přímku (%1/1000)...", + "Приготовление линии (%1/1000)...", + "Vorbereitung der Strecke (%1/1000)...", + }}, + {0xed5e21dc, { // "items only" + "tylko przedmioty", + "tylko przedmioty", + "pouze pĹ™edmÄ›ty", + "только предметы", + "nur Items", + }}, + {0xed787b62, { // "last on bottom" + "ostatnie na dole", +/*MISSING*/ "last on bottom", + "poslednĂ­ dole", + "поŃледние ŃнизŃ", +/*MISSING*/ "last on bottom", + }}, + {0xedc17179, { // "Stab them by walking around them." + "PrzejdĹş wokół, by dĹşgnąć.", + "Etrafında yĂĽrĂĽyerek bıçaklayın.", + "Probodni ho tĂ­m, Ĺľe ho obejdeš.", + "Нападите на него ŃбокŃ.", + "Erstich sie, indem du um sie herumgehst.", + }}, + {0xee0610ec, { // "This minefield has been created by the Bomberbirds to protect their valuable eggs. Mines explode when they are stepped on, creating fire all around them (this fire never expires in the Minefield). If you don't step on a mine, you know the number of mines in cells around you. These numbers are marked with color codes on the cells you have visited." + "To pole minowe zostaĹ‚o stworzone przez ptaki, Bombardiery, w celu ochrony ich jaj. Miny eksplodujÄ…, gdy ktoĹ› na nich stanie, tworzÄ…c ogieĹ„ wokół (ten ogieĹ„ nigdy nie wygasa na Polu Minowym). JeĹ›li uda Ci siÄ™ nie stanąć na minÄ™, to poznajesz liczbÄ™ min na polach wokół siebie. Te liczby sÄ… oznaczone kolorowymi kropkami na odwiedzonych polach.", + "Bu mayıntarlası BombacıkuĹźlar tarafından deÄźerli yumurtalarını korumak için dĂĽzenlenmiĹź.Mayınlar ĂĽzerine basınca etrafında ateĹź çıkararak patlıyor(Mayıntarlasında bu ateĹź zamanla sönmez). EÄźer bir mayına basmazsan, etrafındaki mayın sayısını bilebilirsin.Bu sayılar daha önce ziyaret ettiÄźin hĂĽcrelerde farklı renk kodlarıyla iĹźaretlidir.", + "Toto minovĂ© pole vytvoĹ™ili ptáci Bombarďáci, aby ochránili svá cenná vejce. Mina exploduje, kdyĹľ na ni nÄ›kdo nebo nÄ›co šlápne, ÄŤĂ­mĹľ zapálĂ­ oheĹ na svĂ©m poli a na všech sousednĂ­ch polĂ­ch (v MinovĂ©m poli tento oheĹ nikdy neuhasne). A samozĹ™ejmÄ› ji takĂ© odpálĂ­ jakĂ˝koli oheĹ! Pokud nešlápneš na minu, budeš vĹľdy vÄ›dÄ›t, kolik min se nacházĂ­ na polĂ­ch okolo tebe. Tento poÄŤet bude oznaÄŤenĂ˝ barevnĂ˝mi kĂłdy na polĂ­ch, která jsi uĹľ navštĂ­vil.", + "Минное поле было Ńоздано птицами Бомбардирами, чтобы охранять их ценные яйца. Мина взрываетŃŃŹ, когда Đ’Ń‹ наŃŃ‚Ńпаете на неё, и Ńоздаёт огонь вокрŃĐł Đ’Đ°Ń (огонь здеŃŃŚ горит вечно). Đ•Ńли Đ’Ń‹ не наŃŃ‚Ńпили на минŃ, Ń‚Đľ Đ’Ń‹ знаете, Ńеолько мин рядом Ń Đ’Đ°ĐĽĐ¸. Эти чиŃла кодирŃŃŽŃ‚ŃŃŹ цветами клеток, на которых Đ’Ń‹ были.", + "Dieses Minenfeld wurde von den Bombenvögeln erschaffen, um ihre wertvollen Eier zu schĂĽtzen. Minen explodieren, wenn sie betreten werden, was Feuer um sie herum erzeugt (dieses erlischt im Minenfeld nicht). Wenn du auf keine Mine trittst, weiĂźt du, wie viele Minen um dich herum sind. Diese Zahlen werden auf Zellen, die du besucht hast farblich angezeigt.", + }}, + {0xee08f272, { // "You cannot go against the current!" + "Nie moĹĽesz pĹ‚ynąć pod prÄ…d!", + "Akıntıya karşı hareket edemezsin!", + "NemĹŻĹľeš plout proti proudu!", + "Нельзя плыть против течения!", + "Du kannst nicht gegen die Strömung schwimmen!", + }}, + {0xee489efb, { // "Your eyes shine as you glance at your precious treasures." + "Twoje oczy bĹ‚yszczÄ…, gdy patrzysz na swoje skarby.", + "DeÄźerli hazinelerine bakarken gözlerin ışıldadı.", + "TvĂ© oÄŤi září, kdyĹľ se dĂ­váš na svĂ© pĹ™evzácnĂ© poklady.", + "Đ’Đ°Ńи глаза Ńверкают, когда Đ’Ń‹ Ńмотрите на Ńвои драгоценноŃти.", + "Deine Augen strahlen als du die Schätze erblickst.", + }}, + {0xee6664b5, { // " (local treasure)" + " (lokalny skarb)", +/*MISSING*/ " (local treasure)", + " (mĂ­stnĂ­ poklad)", + " (меŃтное Ńокровище)", +/*MISSING*/ " (local treasure)", + }}, + {0xee761f21, { // "%The1 says, \"I die, but my clan in Trollheim will avenge me!\"" + "%1 mĂłwi: \"Ja umieram, ale mĂłj klan w Trollheim mnie pomĹ›ci!\"", +/*MISSING*/ "%The1 says, \"I die, but my clan in Trollheim will avenge me!\"", + "1 říká: \"Já umĂ­rám, ale mĹŻj klan v Trollheimu mÄ› pomstĂ­!\"", + "%1 говорит: \"ĐŻ Ńмираю, но мой клан в Тролльхейме отомŃтит Đ·Đ° меня!\"", +/*MISSING*/ "%The1 says, \"I die, but my clan in Trollheim will avenge me!\"", + }}, + {0xeebcc20e, { // "Someone has told you that one can get battle experience safely by killing tons of essentially harmless creatures, such as Bats. But does this make any sense?...\n\nIt does not. Bats cannot hurt you, but may block your movement, or toggle switches if they fall on them." + "KtoĹ› powiedziaĹ‚, ĹĽe moĹĽna bezpiecznie zdobyć doĹ›wiadczenie w walce poprzez zabicie duĹĽej liczby wĹ‚aĹ›ciwie niegroĹşnych stworzeĹ„, jak na przykĹ‚ad Nietoperzy. Ale czy to ma jakiĹ› sens?...\n\nNie ma. Nietoperze nie mogÄ… Ci nic zrobić, ale blokujÄ… TwĂłj ruch, i mogÄ… przestawiać przeĹ‚Ä…czniki, gdy na nie spadnÄ….", +/*MISSING*/ "Someone has told you that one can get battle experience safely by killing tons of essentially harmless creatures, such as Bats. But does this make any sense?...\n\nIt does not. Bats cannot hurt you, but may block your movement, or toggle switches if they fall on them.", + "NÄ›kdo ti Ĺ™ekl, Ĺľe zabitĂ­m spousty v podstatÄ› neškodnĂ˝ch tvorĹŻ, jako jsou Netopýři, mĹŻĹľeš bezpeÄŤnÄ› zĂ­skat bojovĂ© zkušenosti. Ale dává to nÄ›jakĂ˝ smysl...?\n\nNe, nedává. Netopýři ti nemohou ublĂ­Ĺľit, ale mohou blokovat tvĹŻj pohyb nebo pĹ™epĂ­nat vypĂ­naÄŤe, kdyĹľ na nÄ› spadnou.", + "Кто-Ń‚Đľ Ńказал, что можно полŃчить боевой опыт абŃолютно безопаŃно, Ńбивая Ń‚Ń‹Ńячи абŃолютно безобидных ŃŃщеŃтв, например, ЛетŃчих ĐĽŃ‹Ńей. Но какой в этом ŃĐĽŃ‹ŃĐ»?...\n\nДа никакого. ЛетŃчие ĐĽŃ‹Ńи не наноŃŃŹŃ‚ вам вреда, но могŃŃ‚ меŃĐ°Ń‚ŃŚ движению, Đ° также падать на переключатели.", +/*MISSING*/ "Someone has told you that one can get battle experience safely by killing tons of essentially harmless creatures, such as Bats. But does this make any sense?...\n\nIt does not. Bats cannot hurt you, but may block your movement, or toggle switches if they fall on them.", + }}, + {0xeedc6223, { // "parts destroyed: %1" + "części zniszczone: %1", +/*MISSING*/ "parts destroyed: %1", + "zniÄŤenĂ© části: %1", + "Ńничтожено чаŃтей: %1", + "zerstörte Teile: %1", + }}, + {0xef22263e, { // "player 3 spin" + "gracz 3 obrĂłt", +/*MISSING*/ "player 3 spin", + "hráč 3 otáčenĂ­", + "игрок 3 вертит", + "Spieler 3 drehen", + }}, + {0xef2df1f4, { // "! (version %1)\n\n" + "! (wersja %1)\n\n", + "! (versiyon %1)\n\n", + "! (verze %1)\n\n", + "! (верŃия %1)\n\n", + "! (Version %1)\n\n", + }}, + {0xef8ca48d, { // "star factor" + "współczynnik gwiazdki", +/*MISSING*/ "star factor", + "zhvÄ›zdÄ›nĂ­", + "коэффициент звезды", + "Sternfaktor", + }}, + {0xefe5ded9, { // "triangular game board" + "plansza do gry z trĂłjkÄ…tĂłw", + "üçgensel tahta", + "TrojĂşhelnĂ­ková hernĂ­ deska", + "треŃгольная игровая Đ´ĐľŃка", + "Triangulares Spielbrett", + }}, + {0xf01af9bf, { // "joystick mode" + "tryb dĹĽojstika", + "oyun kolu modu", + "mĂłd joysticku", + "режим джойŃтика", + "Joystick", + }}, + {0xf01c6ce1, { // "targetting ranged Orbs Shift+click only" + "celowanie sfer na odglegĹ‚ość wymaga Shift+klik", + "menzilli kĂĽreler için sadece Shift+sol tık", + "zaměřovánĂ­ dálkovĂ˝ch SfĂ©r pouze kombinacĂ­ Shift + kliknutĂ­", + "выбирать цель Ńфер только через Shift+клик", + "Zielen mit Distanzorbs per Shift-Klick", + }}, + {0xf08d9520, { // "Everything in this Land has black and white stripes." + "Wszystko w tej Krainie ma czarne i biaĹ‚e paski.", + "Bu diyardaki her Ĺźey siyah ve beyaz Ĺźeritlere sahip.", + "Všechno v tomto kraji má ÄŤernĂ© a bĂ­lĂ© pruhy.", + "Đ’ŃŃ‘ в этой Земли имеет белые и чёрные полоŃŃ‹.", + "Alles in diesem Land hat schwarze und weiĂźe Streifen.", + }}, + {0xf0901c78, { // "other" + "inne", + "diÄźer", + "další", + "Đ´Ń€Ńгое", + "andere", + }}, + {0xf0b074f1, { // "You have found %the1!" + "Znalaz%Ĺ‚eĹ›0 %a1!", + "%a1 buldun!", + "Naše%l0 jsi %a1!", + "Đ’Ń‹ наŃли %a1!", + "Du hast %den1 %a1 gefunden!", + }}, + {0xf0b17da7, { // "You can also scroll to the desired location and then press 't'." + "MoĹĽesz teĹĽ przewinąć do miejsca docelowego i wcisnąć 't'.", + "Ä°stersen görĂĽntĂĽyĂĽ isteidÄźin yere çekip sonra 't'ye basabilirsin.", + "TakĂ© mĹŻĹľeš posunout obraz do poĹľadovanĂ© lokace a stisknout 't'.", + "Đ’Ń‹ также можете пролиŃŃ‚Đ°Ń‚ŃŚ в Đ˝Ńжное меŃŃ‚ŃŚ и нажать 't'.", + "Du kannst auch an die gewĂĽnschte Position scrollen und 't' drĂĽcken.", + }}, + {0xf0e3a522, { // "Periodic patterns: application" + "Zastosowanie wzorĂłw okresowych", +/*MISSING*/ "Periodic patterns: application", + "PeriodickĂ© vzory: aplikace", + "Приложение периодичеŃких Ńзоров", +/*MISSING*/ "Periodic patterns: application", + }}, + {0xf0fb16c4, { // "Left the game." + "Opuszczono grÄ™.", +/*MISSING*/ "Left the game.", + "OpuštÄ›nĂ­ hry.", + "Выйти из игры.", + "Spiel verlassen.", + }}, + {0xf130cd50, { // "Cargo of a ship which was once destroyed by a Kraken." + "Ĺadunek statku zatopionego dawno temu przez Krakena.", +/*MISSING*/ "Cargo of a ship which was once destroyed by a Kraken.", + "Náklad z lodi, kterou kdysi zniÄŤil Kraken.", + "Đ“Ń€ŃĐ· корабля, когда-Ń‚Đľ Ńничтоженного Кракеном.", + "Ladung eines Schiffes, das einst von einem Kraken zerstört wurde.", + }}, + {0xf15919d5, { // "You have used less turns than ever before. Congratulations!" + "Zajęło to mniej kolejek niĹĽ kiedykolwiek wczeĹ›niej. Gratulacje!", + "Her zamankinden daha az sayıda tur kullandın! Tebrikler! ", + "SpotĹ™ebova%l0 jsi mĂ©nÄ› kol neĹľ kdy pĹ™edtĂ­m. Gratulujeme!", + "Đ’Ń‹ потратили меньŃе ходов, чем раньŃе. Поздравляем!", + "Du hast sowohl weniger ZĂĽge als je zuvor benötigt. GlĂĽckwunsch!", + }}, + {0xf1a528d4, { // "Emerald Pattern" + "Szmaragdowy WzĂłr", + "ZĂĽmrĂĽt Dokusu", + "SmaragdovĂ˝ vzor", + "ĐĐ·ŃĐĽŃ€Ńдный Ńзор", + "Smaragdmuster", + }}, + {0xf1c15b62, { // "You activate the Lightning spell!" + "Aktywowa%Ĺ‚eĹ›0 czar Burza!", + "ĹžimĹźek bĂĽyĂĽsĂĽnĂĽ etkinleĹźtirdin!", + "Aktivova%l0 jsi kouzlo Blesk!", + "Đ’Ń‹ активировали заклинание молнии!", + "Du aktivierst den Donner Zauber!", + }}, + {0xf1e162a7, { // "stereographic projection" + "rzut stereograficzny", +/*MISSING*/ "stereographic projection", + "stereografická projekce", + "ŃтереографичеŃкая проекция", +/*MISSING*/ "stereographic projection", + }}, + {0xf201e5f2, { // "Orb power depleted!" + "Zabrano sfery mocy!", + "KĂĽre gĂĽcĂĽ tĂĽkendi!", + "SĂ­la sfĂ©ry se vyÄŤerpala!", + "Сила Ńферы иŃчерпана!", + "Du hast die Kraft des Orbs aufgebraucht!", + }}, + {0xf201fbc0, { // "You will now start your games in %1" + "BÄ™dziesz zaczynaĹ‚ grÄ™ %abl1", + "Ĺžimdi oyunlarını %abl1 baĹźlatacaksın.", + "OdteÄŹ budeš zaÄŤĂ­nat hru %abl1", + "Теперь вы начинаете Đ¸ĐłŃ€Ń %abl1", + "Du startest deine Spiele von nun an in %a1", + }}, + {0xf22050cb, { // "Collect at least 10 Demon Daisies to find the Orbs of Yendor" + "ZnajdĹş 10 Czarciego Ziela, by znaleźć Sfery Yendoru", + "10 Ĺžeytan Papatyası toplayarak Yendorun KĂĽrelerini bulabilirsin.", + "YendorskĂ© sfĂ©ry zpřístupníš sesbĂ­ránĂ­m nejmĂ©nÄ› 10 ÄŚertovĂ˝ch kvĂ­tek", + "Соберите 10 Đ°Đ´Ńких ромаŃек, чтобы найти ŃŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°", + "Sammle mindestens 10 DämonenblĂĽmchen um die Orbs von Yendor zu finden", + }}, + {0xf223aa46, { // "summon a Golem" + "przywoĹ‚aj Golema", + "Golem çıkar", + "vyvolej golema", + "призвать Голема", + "rufe einen Golem herbei", + }}, + {0xf265ee4b, { // "\"There is no royal road to geometry.\"" + "W geometrii nie ma specjalnych drĂłg dla krĂłlĂłw.\"", +/*MISSING*/ "\"There is no royal road to geometry.\"", + "NenĂ­ žádná královská cesta ke geometrii.\"", + "\"Нет царŃких ĐżŃтей Đş геометрии.\"", +/*MISSING*/ "\"There is no royal road to geometry.\"", + }}, + {0xf28650d8, { // "The faster you get here, the better you are!" + "Im szybciej to osiÄ…gniesz, tym lepiej!", + "Daha hızlı demek, daha iyi demek !", + "ÄŚĂ­m rychleji se sem dostaneš, tĂ­m lepší jsi!", + "Чем быŃтрее, тем Đ»ŃчŃе!", + "Je schneller du es hierher schaffst, desto besser bist du!", + }}, + {0xf2d2d33a, { // "Defeat Flail Guards by moving away from them." + "Wojownika z Cepem pokonujesz odchodzÄ…c od niego.", +/*MISSING*/ "Defeat Flail Guards by moving away from them.", + "Strážce s Ĺ™emdihem porazíš tĂ­m, Ĺľe se pohneš smÄ›rem od nÄ›j.", + "Поразите Воина Ń Ń†ĐµĐżĐľĐĽ, Ńбегая от него.", +/*MISSING*/ "Defeat Flail Guards by moving away from them.", + }}, + {0xf2d8259d, { // "[+] keep the window size, [-] use the screen resolution" + "[+] zachowaj rozmiar okna, [-] uĹĽyj rozdzielczoĹ›ci ekranu", + "[+] pencere boyutunu koru, [-] ekran çözĂĽnĂĽrlüğünĂĽ kullan", + "[+] zachovej rozmÄ›r okna, [-] pouĹľij rozlišenĂ­ obrazovky", + "[+] фикŃирŃет размер окна, [-] иŃпользŃет разреŃение экрана", + "[+] Fenstergröße behalten, [-] Bildschirmauflösung verwenden", + }}, + {0xf308e57a, { // "For now, collect as much treasure as possible..." + "Szukaj skarbĂłw, znajdĹş, ile tylko moĹĽesz...", + "Ĺžimdilik mĂĽmkĂĽn olduÄźunca fazla hazine topla...", + "ProzatĂ­m sesbĂ­rej co nejvĂ­c pokladĹŻ......", + "Соберите Ńтолько Ńокровищ, Ńколько Ńможете...", + "Aber sammle vorerst so viele Schätze wie möglich.", + }}, + {0xf351c0a0, { // "left to right" + "w prawo", +/*MISSING*/ "left to right", + "zleva doprava", + "вправо", + "von links nach rechts", + }}, + {0xf385bf50, { // "random pattern mode" + "tryb losowych wzorĂłw", + "rastgele doku modu", + "mĂłd náhodnĂ˝ch vzorĹŻ", + "режим ŃĐ»Ńчайных Ńзоров", + "Zufallsmuster Modus", + }}, + {0xf3914c9c, { // "Accessible only from %the1 or %the2.\n" + "Kraina dostÄ™pna tylko poprzez %a1 i %a2.\n", + "Sadece %a1 veya %a2 eriĹźilebilir.\n", + "Tento kraj je dostupnĂ˝ pouze skrz %a1 nebo %a2.\n", + "ДоŃŃ‚Ńпно только из %a1 и %a2.\n", + "Nur von %der1 %a1 oder %der %a2 aus erreichbar.\n", + }}, + {0xf3b20816, { // "\"Train in the Desert first!\"" + "\"Potrenuj najpierw na Pustyni!\"", + "\"Ă–nce Çöl'de kendini yetiĹźtir!\"", + "\"Nejdřív se natrĂ©nuj v Poušti!\"", + "\"ПотренирŃйтеŃŃŚ Ńначала в ĐźŃŃтыне!\"", + "\"Trainier zuerst in der WĂĽste!\"", + }}, + {0xf3f04786, { // "%The1 throws fire at %the2!" + "%1 rzuca ogniem w %a2!", +/*MISSING*/ "%The1 throws fire at %the2!", + "%1 házĂ­ oheĹ na %a2!", + "%1 кидает огонь в %a2!", + "%Der1 %1 wirft Feuer auf %den2 %a2!", + }}, + {0xf472ee24, { // "(You can also use right Shift)\n\n" + "(MoĹĽesz teĹĽ uĹĽyć prawego Shifta)\n\n", +/*MISSING*/ "(You can also use right Shift)\n\n", + "(TakĂ© lze použít pravĂ˝ Shift)\n\n", + "(Также можно иŃпользовать правый Shift)\n\n", +/*MISSING*/ "(You can also use right Shift)\n\n", + }}, + {0xf4ca290b, { // "A hot land, full of sand dunes, mysterious Spice, and huge and dangerous sand worms." + "GorÄ…ca ziemia, peĹ‚na wydm, tajemniczej Przyprawy i wielkich Pustynnych Czerwi.", + "Kum tepeleri, gizemli Baharat ve devasa Kumkurtlarıyla dolu sıcak bir diyar.", + "HorkĂ˝ kraj plnĂ˝ pĂ­seÄŤnĂ˝ch dun, tajemnĂ©ho KoĹ™enĂ­ a obrovskĂ˝ch a nebezpeÄŤnĂ˝ch PĂ­seÄŤnĂ˝ch ÄŤervĹŻ.", + "Жаркая земля, полная пеŃчаных Đ´ŃŽĐ˝, загадочных Ńпеций и огромных опаŃных червей.", + "Ein heiĂźes Land voller SanddĂĽnen, geheimnisvollem Spice, und riesigen und gefährlichen SandwĂĽrmern.", + }}, + {0xf4e796f2, { // "You summon a golem!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 Golema!", + "Bir golem çağırdın!", + "Vyvola%l0 jsi golema!", + "Đ’Ń‹ призвали голема!", + "Du beschwörst einen Golem!", + }}, + {0xf4fb4209, { // "reset per-player statistics" + "zresetuj statystyki graczy", +/*MISSING*/ "reset per-player statistics", + "Vyresetovat hráčskĂ© statistiky", + "очиŃтить ŃтатиŃŃ‚Đ¸ĐşŃ ĐżĐľ игрокам", +/*MISSING*/ "reset per-player statistics", + }}, + {0xf541b622, { // "or 'v' to see the main menu" + "lub 'v' by zobaczyć menu", + "veya ana menĂĽyĂĽ görmek için 'v'ye bas.", + "nebo stiskni 'v' pro hlavnĂ­ menu", + "или 'v', чтобы открыть главное меню", + "oder v um das MenĂĽ einzublenden", + }}, + {0xf5440591, { // "joystick mode: automatic (release the joystick to move)" + "tryb dĹĽojstika: automatyczny (puść by ruszyć)", + "oyun kolu modu: otomatik (kolu bırakarak hareket edersin)", + "mĂłd joysticku: automatickĂ˝ (pohybuješ se uvolnÄ›nĂ­m joysticku)", + "Режим джойŃтика: авто (опŃŃтите джойŃтик для перемещения)", + "Joystick: Automatisch (loslassen zum bewegen)", + }}, + {0xf54446a7, { // "projection" + "rzut", +/*MISSING*/ "projection", + "projekce", +/*MISSING*/ "projection", +/*MISSING*/ "projection", + }}, + {0xf549cbfc, { // "Basics of gameplay" + "Podstawy rozgrywki", +/*MISSING*/ "Basics of gameplay", + "Základy hry", + "Начала игры", +/*MISSING*/ "Basics of gameplay", + }}, + {0xf565d694, { // "Challenges do not get harder" + "Misje nie stajÄ… siÄ™ trudniejsze", + "Ek görevler zorlaĹźmaz.", + "ObtĂ­Ĺľnost misĂ­ zĹŻstává stále stejná", + "СложноŃŃ‚ŃŚ не меняетŃŃŹ", + "Herausforderungen werden nicht schwieriger", + }}, + {0xf58afff6, { // "You have improved your total and '%1' high score!" + "Poprawi%Ĺ‚eĹ›0 swĂłj wynik ogĂłlny oraz swĂłj wynik w kategorii '%P1!'", + "Toplam yĂĽksek puanını ve '%P1!' puanını artırdın!", + "Zlepši%l0 jsi svĂ© celkovĂ© nejvyšší skĂłre a svĂ© nejvyšší skĂłre v kategorii '%P1!'", + "Đ’Ń‹ подняли Ńвой общий резŃльтат и '%1'!", + "Du hast deinen Gesamthighscore und '%1' Highscore verbessert!", + }}, + {0xf5af26f3, { // "predesigned patterns" + "zaprojektowane wzorki", + "hazır dokular", + "pĹ™edem vytvoĹ™enĂ© vzory", + "Ńпроектированные Ńзоры", + "Vorgefertigte Muster", + }}, + {0xf5eadca0, { // "Coastal region -- connects inland and aquatic regions.\n" + "Kraina przybrzeĹĽna -- Ĺ‚Ä…czy krainy lÄ…dowe i morskie.\n", +/*MISSING*/ "Coastal region -- connects inland and aquatic regions.\n", + "PobĹ™eĹľnĂ­ kraj -- spojuje vnitrozemskĂ© a moĹ™skĂ© kraje.\n", + "Прибрежный регион -- Ńоединяет наземные и морŃкие регионы.\n", +/*MISSING*/ "Coastal region -- connects inland and aquatic regions.\n", + }}, + {0xf5fc270a, { // "f = flip %1" + "f = odbicie %1", + "f = çevir %1", + "f = pĹ™eklopit %1", + "f = перевернŃŃ‚ŃŚ %1", + "f = kippen %1", + }}, + {0xf6297cf7, { // "These creatures are slow, but very powerful... more powerful than you. You need some more experience in demon fighting before you will be able to defeat them. Even then, you will be able to slay this one, but more powerful demons will come...\n\nEach 10 lesser demons you kill, you become powerful enough to kill all the greater demons on the screen, effectively turning them into lesser demons." + "Te demony sÄ… powolne, ale bardzo silne... silniejsze od Ciebie. Potrzebujesz zdobyć trochÄ™ doĹ›wiadczenia, zanim bÄ™dziesz w stanie je pokonać. Nawet wtedy przyjdÄ… jeszcze silniejsze demony...\n\nZa kaĹĽdym razem, gdy pokonasz 10 mniejszych demonĂłw, stajesz siÄ™ dostatecznie silny, by pokonać wszystkie Wielkie Demony na ekranie. StajÄ… siÄ™ one w tym momencie Mniejszymi Demonami.", + "Bu yaratıklar yavaĹźtır ama çok güçlĂĽdĂĽr. Senden bile. Bunları yenebilmek için öncesinde Ĺźeytanlarla savaĹźma konusunda tecrĂĽbeli olman gerekir. O zaman bile, bunu yenebilirsin, ama daha güçlĂĽ Ĺźeytanlar gelecektir...\n\nĂ–ldĂĽrdüğün her 10 küçük Ĺźeytan için, ekrandaki bĂĽtĂĽn BĂĽyĂĽk Ĺžeytanları -sanki onlar da küçükmĂĽĹź gibi- öldĂĽrebilirsin.", + "Tito tvorovĂ© jsou pomalĂ­, ale velmi silnĂ­... silnÄ›jší neĹľ ty. Abys je mohl porazit, musíš mĂ­t vÄ›tší zkušenosti v boji proti dĂ©monĹŻm. I pak budeš sice schopnĂ˝ zabĂ­t tohoto Ďábla, ale pĹ™ijdou ještÄ› silnÄ›jší...\n\nZa kaĹľdĂ˝ch 10 ÄŚertĹŻ, kterĂ© zabiješ, zĂ­skáš dost sĂ­ly na to, abys mohl zabĂ­t všechny Ďábly na obrazovce -- v podstatÄ› se promÄ›nĂ­ v ÄŚerty.", + "Эти ŃŃщеŃтва медленны, но очень Ńильны... гораздо Ńильнее Đ’Đ°Ń. Đ’Đ°ĐĽ Đ˝Ńжно набратьŃŃŹ опыта в битве Ń Đ´ĐµĐĽĐľĐ˝Đ°ĐĽĐ¸.\n\nКогда Đ’Ń‹ Ńбьёте 10 младŃих демонов, Đ’Ń‹ Ńтанете Đ´ĐľŃтаточно Ńильны, чтобы побеждать ŃŃ‚Đ°Ń€Ńих, которые Ń‚ŃŃ‚ же Ńами ŃŃ‚Đ°Đ˝ŃŃ‚ младŃими, но потом придŃŃ‚ новые ŃŃ‚Đ°Ń€Ńие демоны...", + "Diese Kreaturen sind langsam, aber sehr mächtig... mächtiger als du. Du brauchst Erfahrung im Kampf gegen Dämonen, bevor du sie besiegen kannst. Trotzdem bist du in der Lage, diesen zu töten, aber es werden stärkere Dämonen kommen...\n\nJedes Mal, wenn du 10 gewöhnliche Dämonen getötet hast, wirst du stark genug, um alle mächtigen Dämonen auf dem Bildschirm zu töten, indem du sie in gewöhnliche Dämonen verwandelst.", + }}, + {0xf67f9ac8, { // "You cannot attack %the1!" + "Nie moĹĽesz zaatakować %a1!", +/*MISSING*/ "You cannot attack %the1!", + "NemĹŻĹľeš ĂştoÄŤit na %a1!", + "Đ’Ń‹ не можете атаковать %a1!", +/*MISSING*/ "You cannot attack %the1!", + }}, + {0xf698e17d, { // "You cannot attack Rock Snakes directly!" + "Nie moĹĽesz atakować Skalnych Węży bezpoĹ›rednio!", + "Kaya Yılanlarına doÄźrudan saldıramazsın!", + "Na KamennĂ© hady nemĹŻĹľeš ĂştoÄŤit přímo!", + "Đ’Ń‹ не можете атаковать КаменнŃŃŽ змею!", + "Du kannst Felsschlangen nicht direkt angreifen!", + }}, + {0xf6a96efd, { // "inventory/kill sorting" + "sortowanie skarbĂłw/potworĂłw", +/*MISSING*/ "inventory/kill sorting", + "Ĺ™azenĂ­ inventáře/netvorĹŻ", + "Ńортировать предметы/монŃтров", +/*MISSING*/ "inventory/kill sorting", + }}, + {0xf6c1527a, { // "treasure collected: %1" + "zdobyte skarby: %1", + "toplanan hazine: %1", + "pokladĹŻ zĂ­skáno: %1", + "Ńобрано Ńокровищ: %1", + "Schätze gesammelt: %1", + }}, + {0xf71db775, { // "You jump over the table!" + "Skaczesz przez stół!", + "Masanın ĂĽstĂĽne çıktın!", + "PĹ™eskoÄŤil jsi stĹŻl!", + "Đ’Ń‹ запрыгнŃли на Ńтол!", + "Du springst ĂĽber den Tisch!", + }}, + {0xf7467711, { // "A heap of wood that can be used to start a fire. Everything is already here, you just need to touch it to fire it." + "Stos drewna. Wszystko gotowe, wystarczy podpalić.", + "AteĹź yakmaya uygun bir yığın odun. Her Ĺźey zaten burada, ateĹź için sadece dokunman yetecek.", + "Hromada dĹ™eva, která se dá použít k zapálenĂ­ ohnÄ›. Všechno uĹľ tu je, na podpálenĂ­ se jĂ­ staÄŤĂ­ jen dotknout.", + "ĐšŃча брёвен. Đ’ŃŃ‘ готово для коŃтра, Đ’Đ°ĐĽ Đ˝Ńжно лиŃŃŚ поджечь его.", + "Ein Haufen Holz, den du verwenden kannst, um ein Feuer zu machen. Alles ist schon da, du musst es nur berĂĽhren um das Feuer zu entfachen.", + }}, + {0xf74b7514, { // "emerald pattern" + "szmaragdowy wzĂłr", + "zĂĽmrĂĽt dokusu", + "smaragdovĂ˝ vzor", + "изŃĐĽŃ€Ńдный Ńзор", + "Smaragdmuster", + }}, + {0xf751afd7, { // "A strange land which contains mirrors and mirages, protected by Mirror Rangers." + "Dziwna kraina, gdzie moĹĽna znaleźć magiczne lustra i chmury, bronione przez StraĹĽnikĂłw Luster.", + "Aynalar ve yansımalarla dolu garip bir diyar, ayna korucuları tarafından korunuyor.", + "PodivnĂ˝ kraj se zrcadly a pĹ™eludy, kterĂ˝ chránĂ­ ZrcadlovĂ­ strážci.", + "Странная земля Ń Đ·ĐµŃ€ĐşĐ°Đ»Đ°ĐĽĐ¸ и миражами, защищёнными Странниками.", + "Ein seltsames Land voller Spiegel und Illusionswolken, die von den Rangern geschĂĽtzt werden.", + }}, + {0xf7b278b8, { // "\"There is no branch of mathematics, however abstract, " + "\"Nie ma na tyle abstrakcyjnej gaĹ‚Ä™zi matematyki, by siÄ™ nie daĹ‚o jej ", +/*MISSING*/ "\"There is no branch of mathematics, however abstract, ", + "\"NenĂ­ žádnĂ© matematickĂ© odvÄ›tvĂ­, jakkoli abstraktnĂ­, ", + "\"Нет ни одной облаŃти математики, как бы абŃтрактна она ни была, ", +/*MISSING*/ "\"There is no branch of mathematics, however abstract, ", + }}, + {0xf7d5e5f2, { // "turn left" + "skręć w lewo", + "sola dön", + "otoÄŤenĂ­ vlevo", + "повернŃŃ‚ŃŚ налево", + "Nach links drehen", + }}, + {0xf8472f7f, { // "move through walls" + "przechodĹş przez Ĺ›ciany", +/*MISSING*/ "move through walls", + "procházenĂ­ zdmi", + "проходить Ńквозь Ńтены", +/*MISSING*/ "move through walls", + }}, + {0xf86c2b63, { // "F5 = restart" + "F5 = restart", + "F5 = yeniden baĹźlat", + "F5 = restart", + "F5 = перезапŃŃĐş", + "F5 = Neustart", + }}, + {0xf86d1171, { // "You summon some Thumpers!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 dudniki!", + "GĂĽmleyenler oluĹźturdun", + "Vyvola%l0 jsi nÄ›kolikl TloukĹŻ!", + "Đ’Ń‹ призвали тамперы!", + "Du beschwörst ein paar Stampfer!", + }}, + {0xf88f8da1, { // "You gain a protective Shell!" + "ZdobyĹ‚%eĹ›0 ochronnÄ… SkorupÄ™!", +/*MISSING*/ "You gain a protective Shell!", + "ZĂ­ska%l0 jsi ochrannĂ˝ Krunýř!", + "Đ’Ń‹ полŃчили защитнŃŃŽ раковинŃ!", +/*MISSING*/ "You gain a protective Shell!", + }}, + {0xf893311c, { // "%The1 is killed by thorns!" + "%1 wpad%Ĺ‚1 na kolce i siÄ™ zabi%Ĺ‚1!", +/*MISSING*/ "%The1 is killed by thorns!", + "%1 se nabod%l na trny!", + "%1 Ńбит%E1 Ńипами!", + "%Der1 %1 wurde von den Dornen getötet!", + }}, + {0xf89cf7e3, { // "A dark forest filled with ghosts and graves. But there is also treasure hidden deep within... But don't let greed make you stray from your path, as you can get lost!\n\nThe Haunted Woods are bounded by a single equidistant curve. It is not a circle or horocycle.\n\n" + "Mroczny las, peĹ‚en duchĂłw i grobĂłw. GĹ‚Ä™boko w Ĺ›rodku sÄ… rĂłwnieĹĽ skarby... Ale nie pozwĂłl, by zgubiĹ‚a CiÄ™ chciwość!\n\nNawiedzony Las jest ograniczony jednÄ… ekwidystantÄ…. Nie jest koĹ‚em ani horocyklem.\n\n", +/*MISSING*/ "A dark forest filled with ghosts and graves. But there is also treasure hidden deep within... But don't let greed make you stray from your path, as you can get lost!\n\nThe Haunted Woods are bounded by a single equidistant curve. It is not a circle or horocycle.\n\n", + "TemnĂ˝ hvozd plnĂ˝ duchĹŻ a hrobĹŻ. Ale hluboko uvnitĹ™ se skrĂ˝vá poklad... NedopusĹĄ však, aby tÄ› tvá chamtivost svedla z cesty, protoĹľe tu mĹŻĹľeš zabloudit!\n\nStrašidelnĂ˝ hvozd je ohraniÄŤenĂ˝ jednou ekvidistantou. NenĂ­ to kruh ani horocyklus.\n\n", + "Мрачный леŃ, полный Đ´Ńхов и надгробий. Но в глŃбине Ńпрятаныi Ńокровища... Но не бŃдьте ŃлиŃком жадными, Đ° Ń‚Đľ потеряетеŃŃŚ!\n\nĐ›ĐµŃ Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸ ограничен одной эквидиŃтантой.\n\n", + "Ein dunkler Wald voller Geister und Gräber. Doch in seinen Tiefen sind auch Schätze versteckt... Aber lass dich nicht durch Gier von deinem Weg abbringen, du könntest dich verlaufen!\n\nDer verwunschene Wald ist begrenzt durch eine einzige äquidisdante Kurve. Diese ist kein Kreis und kein Horozykel.\n\n", + }}, + {0xf8abf46f, { // "The Knights congratulate you on your success!" + "Rycerze gratulujÄ… Ci sukcesu!", + "Şövalyeler baĹźarın için seni tebrik ediyor!", + "RytĂ­Ĺ™i ti gratulujĂ­ ke tvĂ©mu ĂşspÄ›chu!", + "Рыцари поздравляют Đ’Đ°Ń Ń ŃŃпехом!", + "Die Ritter gratulieren dir zu deinem Erfolg!", + }}, + {0xf8d5e789, { // "MOVE" + "RUCH", + "OYNAT", + "POHYB", + "ХОД", + "VOR", + }}, + {0xf927dd7c, { // "Someone has put air fans in these plains, causing strong winds everywhere. You think that the purpose is to harness the magical power of Air Elementals, but you are not sure.\n\nAll cells except fans are grouped into three colors according to a pattern. Wind blows counterclockwise around each group of cells of a single color. Cells which are blocked by walls, or at distance at most 2 from an Air Elemental, do not count for this.\n\nIt is illegal to move in a direction which is closer to incoming wind than to outcoming wind. However, you can move two cells with the wind in a single turn, and so can the birds." + "KtoĹ› porozstawiaĹ‚ wentylatory na tych rĂłwninach, powodujÄ…c wszÄ™dzie silne wiatry. Celem jest zapewne uzyskanie magicznych mocy Powietrznych Ĺ»ywioĹ‚akĂłw, ale nie masz pewnoĹ›ci.\n\nWszystkie komĂłrki poza wentylatorami sÄ… podzielone na trzy kolory, zgodnie z regularnym wzorem. Wiatr wieje przeciwnie do ruchu wskazĂłwek zegara wokół kaĹĽdej grupy pĂłl jednego koloru. Pola zablokowane przez Ĺ›ciany lub w odlegĹ‚oĹ›ci co najwyĹĽej 2 od Powietrznego Ĺ»ywioĹ‚aka, nie liczÄ… siÄ™ tutaj.\n\nNie moĹĽna ruszać siÄ™ w kierunku ktĂłry jest bliĹĽej przychodzÄ…cego niĹĽ odchodzÄ…cego wiatru. MoĹĽesz jednak siÄ™ ruszyć o dwa pola z wiatrem w jednej kolejce. Ptaki rĂłwnieĹĽ tak mogÄ… zrobić.", +/*MISSING*/ "Someone has put air fans in these plains, causing strong winds everywhere. You think that the purpose is to harness the magical power of Air Elementals, but you are not sure.\n\nAll cells except fans are grouped into three colors according to a pattern. Wind blows counterclockwise around each group of cells of a single color. Cells which are blocked by walls, or at distance at most 2 from an Air Elemental, do not count for this.\n\nIt is illegal to move in a direction which is closer to incoming wind than to outcoming wind. However, you can move two cells with the wind in a single turn, and so can the birds.", + "NÄ›kdo umĂ­stil na tuto pláŠvÄ›tráky, dĂ­ky kterĂ˝m tu všude vanou silnĂ© vÄ›try. Myslíš si, Ĺľe jejich účelem je zkrotit magickou moc ElementálĹŻ vzduchu, ale s jistotou to nevíš.\n\nVšechna polĂ­ÄŤka s vĂ˝jimkou vÄ›trákĹŻ jsou rozdÄ›lena na tĹ™i barvy podle urÄŤitĂ©ho vzoru. VĂ­tr vane proti smÄ›ru hodinovĂ˝ch ruÄŤiÄŤek kolem kaĹľdĂ© skupiny stejnobarevnĂ˝ch polĂ­ÄŤek. PolĂ­ÄŤka zablokovaná zdmi nebo polĂ­ÄŤka ve vzdálenosti 2 nebo mĂ©nÄ› od Elementála vzduchu se nepoÄŤĂ­tajĂ­.\n\nNenĂ­ moĹľnĂ© pohybovat se smÄ›rem, kterĂ˝ je vĂ­c proti vÄ›tru neĹľ po vÄ›tru. PĹ™i pohybu po vÄ›tru se však mĹŻĹľeš (stejnÄ› jako libovolnĂ˝ typ ptáka) pohnout o dvÄ› polĂ­ÄŤka v jedinĂ©m kole.", + "Кто-Ń‚Đľ раŃŃтавил вентиляторы на этой равнине и вызвал Ńильные ветры. Đ’Đ°ĐĽ кажетŃŃŹ, что кто-Ń‚Đľ хотел иŃпользовать ŃĐ¸Đ»Ń Đ’ĐľĐ·Đ´ŃŃных Элементалей, но не Ńверены.\n\nĐ’Ńе клетки, кроме вентиляторов, раŃкраŃены в 3 цвета регŃлярным образом. Ветер Đ´Ńет против чаŃовой Ńтрелки вокрŃĐł каждой грŃппы одноцветных клеток. Клетки, занятые Ńтенами, или находящиеŃŃŹ на раŃŃтоянии не более 2 от ВоздŃŃного Элементаля, не ŃчитываютŃŃŹ.\n\nНевозможно пойти в направлении, которое ближе ко Đ˛Ń…ĐľĐ´ŃŹŃ‰ĐµĐĽŃ Đ˛ĐµŃ‚Ń€Ń, чем Đş выходящемŃ. Đ—Đ°Ń‚Đľ Đ’Ń‹ можете пройти ŃŃ€Đ°Đ·Ń 2 клетки в направлении ветра, и птицы тоже могŃŃ‚.", + "Jemand hat Ventilatoren in diese Ebenen gebracht, die ĂĽberall starke Winde hervorrufen. Du vermutest, sie sollen die magische Kraft der Luftelementare zĂĽgeln, aber du bist dir nicht sicher.\n\nAlle Zellen auĂźer den Ventilatoren unterteilen sich einem Muster entsprechend in drei Farben. Der Wind weht gegen den Uhrzeigersinn in jeder Gruppe von Zellen mit einer Farbe. Zellen, die durch Wände blockiert oder nicht mehr als 2 Zellen von einem Luftelementar entfernt sind, sind dabei ausgenommen.\n\nEs ist unzulässig in eine Richtung zu gehen, die näher am einströmenden als am ausströmenden Wind liegt. Aber du kannst in einem Zug zwei Zellen mit dem Wind gehen, genau wie die Vögel.", + }}, + {0xf9555116, { // "No mines next to you." + "Nie ma min obok Ciebie.", + "Yakınında hiç mayın yok.", + "Ve tvĂ© blĂ­zkosti se nenacházejĂ­ žádnĂ© miny.", + "Нет мин рядом Ń Đ’Đ°ĐĽĐ¸.", + "Keine Minen um dich.", + }}, + {0xf98b5600, { // "Note: you can play, but scores won't be saved on Android" + "Uwaga: moĹĽesz grać, ale wyniki nie bÄ™dÄ… zapisywane", +/*MISSING*/ "Note: you can play, but scores won't be saved on Android", + "Poznámka: mĹŻĹľeš hrát, ale tvĂ© skĂłre se neuloží", + "Важно: вы можете играть, но Ńчёт не бŃдет Ńохранён", + "Hinweis: du kannst spielen, aber bei Android werden keine Punktestände gespeichert", + }}, + {0xfa0c015f, { // "use at your own risk!" + "uĹĽywasz na wĹ‚asne ryzyko!", + "sorumluluk sende!", + "pouĹľitĂ­ na vlastnĂ­ nebezpeÄŤĂ­!", + "иŃпользŃйте ŃŤŃ‚Đľ на Ńвой риŃĐş!", + "Benutzen auf eigene Gefahr!", + }}, + {0xfa396010, { // "The Land of Power is filled with everburning fire, magical Orbs, and guarded by witches and golems. There are basic orbs lying everywhere, and more prized ones are kept in crystal cabinets.\n\nWitches are allowed to use all the powers of the basic orbs against intruders. These powers never expire, but a Witch can use only one power at a time (not counting Orbs of Life).\n\nWitches and Golems don't pursue you into other Lands. Also, most Orb powers are drained when you leave the Land of Power." + "Kraina Mocy jest wypeĹ‚niona wiecznie pĹ‚onÄ…cym ogniem, magicznymi Sferami, i strzeĹĽona przez Czarownice i golemy. Podstawowe Sfery walajÄ… siÄ™ wszÄ™dzie, a te bardziej cenne sÄ… trzymane w krysztaĹ‚owych gablotach.\n\nCzarownice uĹĽywajÄ… wszystkich mocy podstawowych Sfer przeciwko intruzom. Ich moce nigdy nie przemijajÄ…, ale Czarownica moĹĽe uĹĽywać naraz tylko jednej mocy (nie liczÄ…c Sfer Ĺ»ycia).\n\nCzarownice i Golemy nie goniÄ… CiÄ™ do innych krain. WiÄ™kszość Sfer traci swojÄ… moc, gdy opuszczasz KrainÄ™ Mocy.", + "Güç Diyarı sönmeyen ateĹźle, bĂĽyĂĽlĂĽ KĂĽrelerle dolu ve cadılar ve golemler ile korunuyor. Her yerde temel KĂĽreler var ve daha deÄźerliler de kristal kabinlerde korunuyor. \n\nCadılar bu kĂĽrelerin gĂĽcĂĽnĂĽ olası iĹźgalcilere karşı kullanabilirler. Bu güçlerin sĂĽresi bitmez ama YaĹźam KĂĽresi hariç cadılar aynı anda sadece birini kullanabilir. \n\nCadılar ve Golemler seni diÄźer diyarlara kadar takip etmezler. Ayrıca çoÄźu kĂĽrenin gĂĽcĂĽ Güç Diyarını terkettiÄźinde biter.", + "Kraj Moci je plnĂ˝ věčnÄ› planoucĂ­ch ohĹĹŻ a magickĂ˝ch SfĂ©r a stĹ™eží ho ÄŤarodÄ›jnice a golemovĂ©. ZákladnĂ­ SfĂ©ry se válejĂ­ všude kolem a ty cennÄ›jší jsou schovanĂ© v kĹ™išťálovĂ˝ch vitrĂ­nách.\n\nÄŚarodÄ›jnice mohou v boji proti vetĹ™elcĹŻm používat všechny základnĂ­ sfĂ©ry. Jejich sĂ­la se nikdy nevyÄŤerpá, ale kaĹľdá ÄŚarodÄ›jnice mĹŻĹľe mĂ­t vĹľdy pouze jednu schopnost (SfĂ©ry Ĺ˝ivota se nepoÄŤĂ­tajĂ­).\n\nÄŚarodÄ›jnice a golemovĂ© tÄ› nikdy nebudou pronásledovat do jinĂ˝ch KrajĹŻ. KromÄ› toho vÄ›tšina sfĂ©r pĹ™i opuštÄ›nĂ­ Kraje Moci svou sĂ­lu ztratĂ­.", + "Земля Ńилы полна вечно горящими огнями и магичеŃкими Ńферами и защищена ведьмами и големами. Đ’Ńе обычные Ńферы еŃŃ‚ŃŚ здеŃŃŚ, и наиболее ценные из них защищены криŃтальными кабинетами.\n\nВедьмы ŃпоŃобны иŃпользовать Ńилы Ńфер против нарŃŃителей. Эти Ńилы дейŃтвŃŃŽŃ‚ беŃконечно, но каждая ведьма может иŃпользовать лиŃŃŚ ĐžĐ´Đ˝Ń (не Ńчитая Ńферы жизни).\n\nВедьмы и големы не покидают ŃŤŃ‚Ń Đ·ĐµĐĽĐ»ŃŽ. Когда вы Ńходите из неё, Ńилы некоторых Đ’Đ°Ńих Ńфер покидают Đ’Đ°Ń.", + "Das Land der Macht ist voll mit ewigen Flammen, magischen Orb sowie Hexen und Golems die es bewachen. Ăśberall liegen einfache Orbs herum, und wertvollere werden in Kristallvitrinen aufbewahrt.\n\nHexen dĂĽrfen alle Orbkräfte gegen Angreifer einsetzen. Diese laufen nie aus, allerdings kann eine Hexe jederzeit nur einen Zauber nutzen. (mit Ausnahme der Orbs des Lebens)\n\nHexen und Golems verfolgen dich nicht in andere Länder. AuĂźerdem verlieren viele Zauber die Kraft sobald du das Land verlässt.", + }}, + {0xfacc6c34, { // "This feather is truly beautiful and strong." + "PiĂłro biaĹ‚ego goĹ‚Ä™bia. PiÄ™kne i silne.", +/*MISSING*/ "This feather is truly beautiful and strong.", + "Pero bĂ­lĂ© holubice. Opravdu nádhernĂ© a silnĂ©.", + "КраŃивое и Ńильное голŃбиное перо.", + "Diese Feder ist wahrlich schön und stark.", + }}, + {0xfafa0222, { // "%The1 would kill you there!" + "Zabi%Ĺ‚1by Ciebie %1!", + "%1 orada seni hemencecik öldĂĽrĂĽr!", + "Tam by tÄ› zabi%l1 %1!", + "%1 Ńбьёт Đ’Đ°Ń Đ·Đ´ĐµŃŃŚ!", + "%Der1 %1 wĂĽrde dich dort töten!", + }}, + {0xfb1e1e81, { // "Cannot teleport here!" + "Nie moĹĽesz teleportować siÄ™ tutaj!", + "Buraya ışınlanamazsın!", + "Sem se teleportovat nemĹŻĹľeš!", + "Нельзя телепортироватьŃŃŹ ŃŃŽĐ´Đ°!", + "Du kannst dich hierhin nicht teleportieren!", + }}, + {0xfbb3ff91, { // "Thus, it is potentially useful for extremely long games, which would eat all the memory on your system otherwise.\n" + "Jest wiÄ™c to uĹĽyteczne w bardzo dĹ‚ugich grach, ktĂłre inaczej by zjadĹ‚y caĹ‚Ä… pamięć.", + "Yani, bu olası çok uzun, sistemin tĂĽm hafızasını tĂĽketecek oyunlarında yardımcı olabilir.", + "To je tedy potenciálnÄ› uĹľiteÄŤnĂ© pro extrĂ©mnÄ› dlouhĂ© hry, kterĂ© by jinak seĹľraly všechnu paměť tvĂ©ho poÄŤĂ­taÄŤe.", + "Đ­Ń‚Đľ может быть полезно для крайне долгих игр, еŃли Ń Đ’Đ°Ń Đ·Đ°ĐşĐ°Đ˝Ń‡Đ¸Đ˛Đ°ĐµŃ‚ŃŃŹ память.", + "Dies ist nĂĽtzlich fĂĽr sehr lange Spiele, welche ansonsten viel Speicher nutzen wĂĽrden.", + }}, + {0xfbe924dd, { // " (click to drop)" + " (naciĹ›nij by porzucić)", + " (bırakmak için tıkla)", + " (poloĹľ kliknutĂ­m)", + " (нажмите, чтобы броŃить)", + " (Klicke zum Ablegen)", + }}, + {0xfbe9cdc2, { // "To access Hell, collect %1 treasures each of 9 kinds..." + "By dostać siÄ™ do PiekĹ‚a, znajdĹş po %1 skarbĂłw kaĹĽdego z 9 rodzajĂłw...", + "Cehenneme eriĹźmek için her 9 hazine tipinden %1'ar tane toplamalısın...", + "Aby ses dostal do Pekla, sesbĂ­rej %1 pokladĹŻ od kaĹľdĂ©ho z 9 rĹŻznĂ˝ch typĹŻ...", + "Чтобы открыть ĐĐ´, Ńоберите по %1 Ńокровищ из 9 различных меŃŃ‚...", + "Um die Hölle zu erreichen sammle je %1 von 9 verschiedenen Schätzen...", + }}, + {0xfbf4ee95, { // "Collect at least %1 treasures in each of 9 types to access Hell" + "ZnajdĹş po %1 skarbĂłw w 9 typach, by siÄ™ dostać do PiekĹ‚a", + "9 hazine çeĹźidinin hepsinden %1'ar tane toplayarak Cehenneme eriĹźebilirsin.", + "Peklo zpřístupníš sesbĂ­ránĂ­m %1 pokladĹŻ od kaĹľdĂ©ho z 9 typĹŻ", + "Соберите хотя бы по %1 Ńокровищ 9 разных типов, чтобы попаŃŃ‚ŃŚ в ĐĐ´", + "Sammle 9 verschiedene Schätze mindestens %1x um Zugang zur Hölle zu erhalten", + }}, + {0xfc0a5900, { // "synchronize net and map" + "synchronizuj siatkÄ™ z mapÄ…", + "haritayı ve ağı eĹźle", + "synchronizuj sĂ­ĹĄ a mapu", + "Ńинхронизовать Ńеть и картŃ", + "Synchronisier Netz und Karte", + }}, + {0xfc0edbfc, { // "You summon a monster!" + "PrzywoĹ‚a%Ĺ‚eĹ›0 potwora!", + "Bir canavar oluĹźturdun!", + "Vyvola%l0 jsi netvora!", + "Đ’Ń‹ призвали монŃтра!", + "Du beschwörst ein Monster!", + }}, + {0xfc2d9158, { // "flash" + "bĹ‚ysk", +/*MISSING*/ "flash", + "záblesk", + "вŃпыŃка", +/*MISSING*/ "flash", + }}, + {0xfc349b88, { // "Shoot'em up mode" + "Tryb strzelanki", +/*MISSING*/ "Shoot'em up mode", + "MĂłd stříleÄŤky", + "режим Ńтрельбы", +/*MISSING*/ "Shoot'em up mode", + }}, + {0xfc66f74c, { // "player 5 spin" + "gracz 5 obrĂłt", +/*MISSING*/ "player 5 spin", + "hráč 5 otáčenĂ­", + "игрок 5 вертит", + "Spieler 5 drehen", + }}, + {0xfc89b511, { // "EN" + "PL", + "TR", + "CZ", + "RU", + "DE", + }}, + {0xfcb63ab4, { // "Kills required: %1 (%2).\n" + "Wymagani pokonani przeciwnicy: %1 (%2).\n", +/*MISSING*/ "Kills required: %1 (%2).\n", + "Nutno zabĂ­t nepřátel: %1 (%2).\n", + "Убить монŃтров необходимо: %1 (%2).\n", + "Notwendige Tötungen: %1 (%2).\n", + }}, + {0xfcd24c71, { // "If we are viewing an equidistant g absolute units below a plane, from a point c absolute units above the plane, this corresponds to viewing a Minkowski hyperboloid from a point tanh(g)/tanh(c) units below the center. This in turn corresponds to the PoincarĂ© model for g=c, and Klein-Beltrami model for g=0." + "JeĹ›li ekwidystantnÄ… powierzchniÄ™ g jednostek pod pĹ‚aszczyznÄ… oglÄ…damy z punktu na wysokoĹ›ci c, odpowiada to oglÄ…daniu hiperboloidy Monkowskiego z punktu tanh(g)/tanh(c) poniĹĽej jej Ĺ›rodka. To z kolei odpowiada modelowi PoincarĂ© dla g=c, i Kleina-Beltramiego dla g=0.", +/*MISSING*/ "If we are viewing an equidistant g absolute units below a plane, from a point c absolute units above the plane, this corresponds to viewing a Minkowski hyperboloid from a point tanh(g)/tanh(c) units below the center. This in turn corresponds to the PoincarĂ© model for g=c, and Klein-Beltrami model for g=0.", + "DĂ­váme-li se na ekvidistantnĂ­ plochu, která se nacházĂ­ g absolutnĂ­ch jednotek pod rovinou, z bodu, kterĂ˝ je c absolutnĂ­ch jednotek nad rovinou, je to ekvivalentnĂ­ tomu, kdyĹľ se dĂ­váme na Minkowskiho hyperboloid z bodu, kterĂ˝ je tanh(g)/tanh(c) jednotek pod jeho stĹ™edem. To pak odpovĂ­dá PoincarĂ©ho modelu, kdyĹľ je g=c, a Klein-Beltramiho modelu, kdyĹľ je g=0.", + "Đ•Ńли ĐĽŃ‹ Ńмотрим на эквидиŃŃ‚Đ°Đ˝Ń‚Ń Đ˝Đ° глŃбине g единиц из точки на выŃоте c единиц, ŃŤŃ‚Đľ ŃоответŃтвŃет ĐłĐ¸ĐżĐµŃ€Đ±ĐľĐ»ĐľĐ¸Đ´Ń ĐśĐ¸Đ˝ĐşĐľĐ˛Ńкого, на который ĐĽŃ‹ Ńмотрим из точки на tanh(g)/tanh(c) единиц ниже центра. То еŃŃ‚ŃŚ ŃŤŃ‚Đľ ŃоответŃтвŃет модели ĐźŃанкаре при g=c, и Клейна-Бельтрами -- при g=0.", +/*MISSING*/ "If we are viewing an equidistant g absolute units below a plane, from a point c absolute units above the plane, this corresponds to viewing a Minkowski hyperboloid from a point tanh(g)/tanh(c) units below the center. This in turn corresponds to the PoincarĂ© model for g=c, and Klein-Beltrami model for g=0.", + }}, + {0xfd264e48, { // "Watch the Minkowski hyperboloid or the hypersian rug mode with the red/cyan 3D glasses." + "OglÄ…daj hiperboloidÄ™ Minkowskiego albo tryb hiperskiego dywanu przez czerwono-turkusowe okulary 3D.", +/*MISSING*/ "Watch the Minkowski hyperboloid or the hypersian rug mode with the red/cyan 3D glasses.", + "Sleduj MinkowskĂ©ho hyperboloid nebo mĂłd hyperskĂ©ho koberce s pomocĂ­ ÄŤervenomodrĂ˝ch 3D brĂ˝lĂ­.", + "Смотреть гиперболоид МинковŃкого или режим гиперŃидŃкого через краŃно-голŃбые 3D очки.", +/*MISSING*/ "Watch the Minkowski hyperboloid or the hypersian rug mode with the red/cyan 3D glasses.", + }}, + {0xfd2f1f8a, { // "This move appears dangerous -- are you sure?" + "Ten ruch wyglÄ…da na niebezpieczny -- na pewno?", +/*MISSING*/ "This move appears dangerous -- are you sure?", + "Tento tah vypadá nebezpeÄŤnÄ› -- urÄŤitÄ› ho chceš udÄ›lat?", + "Этот ход выглядит опаŃным -- вы Ńверены?", + "Dieser Zug scheint gefährlich zu sein - bist du sicher?", + }}, + {0xfd351e0b, { // "This giant ape thinks that you are an enemy." + "Ta maĹ‚pa uwaĹĽa, ĹĽe jesteĹ› jej przeciwnikiem.", + "Bu devasa maymun senin bir dĂĽĹźman olduÄźunu düşünĂĽyor.", + "Tato obrovská opice si myslĂ­, Ĺľe jsi jejĂ­ nepřítel.", + "Đ­Ń‚Đ° огромная обезьяна Ńчитает Đ’Đ°Ń Ńвоим врагом.", + "Dieser riesige Affe glaubt, dass du ein Feind bist.", + }}, + {0xfd4f8051, { // "The Knights stare at you!" + "Rycerze gapiÄ… siÄ™ na Ciebie ze zdziwieniem!", + "Şövalyeler sana dik dik bakıyor!", + "RytĂ­Ĺ™i na tebe zĂ­rajĂ­!", + "Рыцари Ńмотрят на Đ’Đ°Ń!", + "Die Ritter starren dich an...", + }}, + {0xfd51d9ba, { // "Saved the high quality shot to %1" + "Zapisano zrzut HQ do %1", + "HQ resim %1 konumuna kaydedildi", + "HQ snĂ­mek uloĹľen do %1", + "Скрин выŃокого качеŃтва Ńохранён в %1", + "HQ Screenshot nach %1 gespeichert", + }}, + {0xfd8f6cfa, { // "player character" + "postać gracza", + "oyuncunun karakteri", + "tvoje postava", + "Đ’Đ°Ń ĐżĐµŃ€Ńонаж", + "Charakter", + }}, + {0xfe662a68, { // "Cannot jump on %the1!" + "Nie moĹĽesz skoczyć na %1!", + "%1 hĂĽcresine atlayamazsın!", + "NemĹŻĹľeš skoÄŤit na %1!", + "Нельзя прыгнŃŃ‚ŃŚ на %1!", + "Du kannst nicht auf %den1 %a1 springen!", + }}, + {0xfe6ce188, { // "Each challenge gets harder after each victory" + "KaĹĽda misja staje siÄ™ trudniejsza z kaĹĽdym zwyciÄ™stwem", + "Her zaferinden sonra ek görevler zorlaşır.", + "ObtĂ­Ĺľnost kaĹľdĂ© mise se zvýší, kdyĹľ ji splníš", + "МиŃŃия ŃтановитŃŃŹ Ńложнее Ń ĐşĐ°Đ¶Đ´ĐľĐą победой", + "Die Schwierigkeit einer Herausforderung steigt nach jedem Sieg.", + }}, + {0xfe879321, { // "A land where you cannot stop, because every piece of floor is extremely unstable. Only monsters who can run forever are able to survive there, and only phoenix feathers are so light that they do not disturb the floor.\n" + "Kraina, w ktĂłrej nie moĹĽesz przestać siÄ™ ruszać, bo grunt jest wszÄ™dzie bardzo niestabilny. Jedynie stworzenia bÄ™dÄ…ce w stanie wiecznie siÄ™ ruszać mogÄ… tu przeĹĽyć i jedynie piĂłra feniksa sÄ… na tyle lekkie, by nie zaburzyć podĹ‚ogi.", + "Duramayacağınız bir diyar...ÇünkĂĽ zeminin her noktası oldukça kırılgan. Sadece sonsuza kadar koĹźabilen canavarlar burada yaĹźayabilirler ve anka telekleri öyle hafiftir ki, zemine zarar vermezler.", + "Kraj, ve kterĂ©m se nemĹŻĹľeš zastavit, protoĹľe kaĹľdĂ˝ kousek podlahy je nesmĂ­rnÄ› nestabilnĂ­. Mohou tu pĹ™ežít pouze netvoĹ™i, kteří dokážou věčnÄ› běžet, a pouze fĂ©nixova pĂ­rka jsou tak lehká, Ĺľe nenaruší podlahu.", + "Земля, в которой нельзя ĐľŃтановитьŃŃŹ, ĐżĐľŃ‚ĐľĐĽŃ Ń‡Ń‚Đľ пол крайне неŃŃтойчив. ЛиŃŃŚ монŃтры, ŃпоŃобные вŃегда бежать, могŃŃ‚ здеŃŃŚ выжить, и лиŃŃŚ перья феникŃĐ° Ńтоль легки, что не тревожат землю.\n", + "Ein Land, in dem du nicht stehen bleiben darfst, denn jedes StĂĽck Boden ist extrem instabil. Nur Monster, die ewig laufen können, sind in der Lage hier zu ĂĽberleben. Nur Phönixfedern sind leicht genug, den Boden nicht zu beeinflussen.\n", + }}, + {0xfe8aaa55, { // "continue playing" + "kontynuuj grÄ™", + "oyuna devam et", + "pokraÄŤuj ve hĹ™e", + "продолжить игрŃ", + "Spiel fortsetzen", + }}, + {0xfeafb644, { // "shoot'em up and multiplayer" + "strzelanka / wielu graczy", +/*MISSING*/ "shoot'em up and multiplayer", + "stříleÄŤka / vĂ­ce hráčů", + "Ńтрельба / игроки", + "shmup und Mehrspieler", + }}, + {0xfebfb8a6, { // "move left" + "idĹş w lewo", + "sola git", + "doleva", + "идти налево", + "Nach links bewegen", + }}, + {0xfec7e1e9, { // "(press ESC during the game to review your quest)" + "(naciĹ›nij ESC w trakcie gry, by zobaczyć stan swojej misji)", + "(Görevine bakmak için oyun sırasında ESC'ye bas.)", + "(svĂ© Ăşkoly mĹŻĹľeš bÄ›hem hry zobrazit stiskem ESC)", + "(нажмите ESC во время игры, чтобы поŃмотреть ваŃи миŃŃии)", + "(DrĂĽcke ESC während des Spiels, um deine aktuelle Quest anzuzeigen)", + }}, + {0xfec941a9, { // "\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen." + "\n\nGdy Trolle wyruszÄ…, masz 750 kolejek na zebranie skarbĂłw -- jeĹ›li tego nie zrobisz, %P1 zostanÄ… ukradzione.", +/*MISSING*/ "\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen.", + "\n\nKdyĹľ TrollovĂ© odejdou, máš 750 kol na zĂ­skánĂ­ pokladu -- jinak ho nÄ›co ukradne.", + "\n\nКогда тролли ŃйдŃŃ‚, Ń Đ˛Đ°Ń Đ±Ńдет 750 ходов, чтобы Ńобрать %a1, иначе ŃкрадŃŃ‚.", +/*MISSING*/ "\n\nAfter the Trolls leave, you have 750 turns to collect %the1, or it gets stolen.", + }}, + {0xfefe0ac5, { // "This cave contains walls which are somehow living. After each turn, each cell counts the number of living wall and living floor cells around it, and if it is currently of a different type than the majority of cells around it, it switches. Items count as three floor cells, and dead Trolls count as five wall cells. Some foreign monsters also count as floor or wall cells.\n" + "Ĺšciany tej jaskini sa ĹĽywe. W kaĹĽdej kolejce kaĹĽde pole liczy, ile wokół niego jest pĂłl Ĺ›ciany i pĂłl ziemi i jeĹ›li jest innego typu niĹĽ wiÄ™kszość pĂłl wokół niego, to zmienia typ na przeciwny. Przedmioty liczÄ… siÄ™ jako 3 pola ziemi, martwe Trolle jako 5 pĂłl Ĺ›ciany. NiektĂłre potwory z innych krain rĂłwnieĹĽ liczÄ… siÄ™ jako ziemia lub Ĺ›ciana.\n", + "Bu maÄźara nasılsa yaĹźayan duvarlarla kaplıdır. Her tur her hĂĽcre çevresindeki yaĹźayan zemin ve yaĹźayan duvar hĂĽcrelerini sayar ve eÄźer çevresindeki çoÄźunluktan farklı bir tĂĽrdeyse çoÄźunluÄźa dönüşür. EĹźyalar üç zemin hĂĽcresi, ölĂĽ Troller beĹź duvar hĂĽcresi olarak sayılır.\n", + "Zdi tĂ©to jeskynÄ› jsou, kdovĂ­jak, ĹľivĂ©. Po kaĹľdĂ©m kole kaĹľdĂ© polĂ­ÄŤko spoÄŤĂ­tá poÄŤet polĂ­ÄŤek s ĹľivoucĂ­mi zdmi a polĂ­ÄŤek s ĹľivoucĂ­mi podlahami kolem sebe a pokud má jinĂ˝ typ neĹľ vÄ›tšina jeho sousedĹŻ, zmÄ›nĂ­ se ze zdi na podlahu nebo opaÄŤnÄ›. PĹ™edmÄ›ty se poÄŤĂ­tajĂ­ jako tĹ™i polĂ­ÄŤka podlahy, mrtvĂ­ Ĺ utrollovĂ© jako pÄ›t polĂ­ÄŤek zdĂ­. NÄ›kteří cizĂ­ netvoĹ™i se takĂ© poÄŤĂ­tajĂ­ jako podlaha nebo zeÄŹ.\n", + "Đ’ этой пещере даже Ńтены живые. Каждый ход каждая клетка Ńчитает количеŃтво клеток живого пола и живых Ńтен Ńреди ŃĐľŃедних, и еŃли клеток Đ´Ń€Ńгого типа больŃе, она меняет тип. Предметы ŃчитаютŃŃŹ Đ·Đ° 3 клетки пола, мёртвые тролли - Đ·Đ° 5 клеток Ńтен.Некоторые монŃтры из Đ´Ń€Ńгих земель тоже могŃŃ‚ ŃчитатьŃŃŹ Đ·Đ° пол или Ńтены.\n", + "Diese Höhle enthält Wände, die auf irgendeine Art leben. Nach jedem Zug zählt jede Zelle die Zahl von lebenden Wänden und Böden um sich herum. Wenn sie von anderer Art als die Mehrzahl der umgebenden Zellen ist, wandelt sie sich um. Gegenstände zählen als drei Böden; tote Trolle zählen als fĂĽnf Wände. Manche fremde Monster zählen auch als Böden oder Wände.\n", + }}, + {0xff26e9bf, { // "You have improved both your real time and turn count. Congratulations!" + "Poprawi%Ĺ‚eĹ›0 swĂłj najlepszy czas rzeczywisty i liczbÄ™ ruchĂłw. Gratulacje!", + "Hem gerçek zamanını hem de tur sayını geliĹźtirdin! Tebrikler! ", + "Zlepši%l0 jsi svĹŻj reálnĂ˝ ÄŤas i svĹŻj poÄŤet kol. Gratulujeme!", + "Đ’Ń‹ ŃĐ»ŃчŃили резŃльтаты по Ń€ĐµĐ°Đ»ŃŚĐ˝ĐľĐĽŃ Đ˛Ń€ĐµĐĽĐµĐ˝Đ¸ и по чиŃĐ»Ń Ń…ĐľĐ´ĐľĐ˛! Поздравляем", + "Du hast sowohl weniger Echtzeit als auch ZĂĽge als je zuvor benötigt. GlĂĽckwunsch!", + }}, + {0xffa845cd, { // "You slash %the1." + "Poci%Ä…Ĺ‚eĹ›0 %a1.", +/*MISSING*/ "You slash %the1.", + "Sek%l0 jsi %a1.", + "Đ’Ń‹ разрŃбили %a1.", + "Du schlägst %den1 %a1.", + }}, + {0xffb51405, { // "review your quest" + "przeglÄ…d misji", + "görevine gözat", + "pĹ™ehled ĂşkolĹŻ", + "Ńмотреть квеŃŃ‚", + "Quest anzeigen", + }}, + {0xffb8423c, { // "basic configuration" + "podstawowa konfiguracja", + "temel ayarlar", + "základnĂ­ konfigurace", + "базовые наŃтройки", + "Einstellungen", + }}, + }; + +fullnoun all_nouns[377] = { +/*MISSING*/ {0x0, 0, { // """" + {2/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""}, + {2/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""}, + {2/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""}, + {2/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""}, + {2/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""/*MISSING*/ , ""}, + }}, + {0x3c73fa, 0, { // ""Plane of Water"" + {1, "Strefa Wody", "Strefy Wody", "StrefÄ™ Wody", "w Strefie Wody"}, + {1, "Su DĂĽzlemi", "Su DĂĽzlemleri", "Su DĂĽzlemini", "Su DĂĽzleminde"}, + {1, "Rovina Vody", "Roviny Vody", "Rovinu Vody", "v RovinÄ› Vody"}, + {1, "ПлоŃкоŃŃ‚ŃŚ Воды", "ПлоŃкоŃти Воды", "ПлоŃкоŃŃ‚ŃŚ Воды", "в ПлоŃкоŃти Воды"}, + {1, "Wasserebene", "Wasserebenen", "Wasserebene", "Wasserebene"}, + }}, + {0x64ad71, 0, { // ""Wine"" + {2, "Wino", "Wina", "Wino", "Winem"}, + {2, "Ĺžarap", "Ĺžaraplar", "Ĺžarabı", "Ĺžarapla"}, + {2, "Láhev vĂ­na", "Lahve vĂ­na", "Láhev vĂ­na", "LahvĂ­ vĂ­na"}, + {2, "Вино", "Вина", "Вино", "Вином"}, + {0, "Wein", "Weine", "Wein", "Wein"}, + }}, + {0x11132be, 0, { // ""Water Elemental"" + {0, "Wodny Ĺ»ywioĹ‚ak", "Wodne Ĺ»ywioĹ‚aki", "Wodnego Ĺ»ywioĹ‚aka", "Wodnym Ĺ»ywioĹ‚akiem"}, + {0, "Su Unsuru", "Su Unsurları", "Su Unsurunu", "Su Unsuruyla"}, + {0, "Elementál Vody", "ElementálovĂ© Vody", "Elementála Vody", "Elementálem Vody"}, + {0, "Водный элементаль", "Водные элементали", "Водного элементаля", "Водным элементалем"}, + {0, "Wasserelementar", "Wasserelementare", "Wasserelementar", "Wasserelementar"}, + }}, + {0x1e6876e, 0, { // ""False Prince"" + {0, "FaĹ‚szywy KsiÄ…ĹĽÄ™", "FaĹ‚szywi KsiÄ…ĹĽÄ™ta", "FaĹ‚szywego KsiÄ™cia", "FaĹ‚szywym KsiÄ™ciem"}, + {0/*MISSING*/ , "False Prince"/*MISSING*/ , "False Prince"/*MISSING*/ , "False Prince"/*MISSING*/ , "False Prince"}, + {0, "FalešnĂ˝ princ", "FalešnĂ­ princovĂ©", "FalešnĂ©ho prince", "FalešnĂ˝m princem"}, + {0, "Ложный принц", "Ложные принцы", "Ложного принца", "Ложным принцем"}, + {0, "Falscher Prinz", "Falsche Prinzen", "Falschen Prinz", "Falschen Prinz"}, + }}, + {0x2d68a1c, 0, { // ""Orb of Thorns"" + {1, "Sfera Cierni", "Sfery Cierni", "SferÄ™ Cierni", "SferÄ… Cierni"}, + {1, "Diken KĂĽresi", "Diken KĂĽreleri", "Diken KĂĽresini", "Diken KĂĽresiyle"}, + {1, "SfĂ©ra TrnĹŻ", "SfĂ©ry TrnĹŻ", "SfĂ©ru TrnĹŻ", "SfĂ©rou TrnĹŻ"}, + {1, "Сфера Шипов", "Сферы Шипов", "ĐˇŃ„ĐµŃ€Ń Đ¨Đ¸ĐżĐľĐ˛", "Сферой Шипов"}, + {0, "Orb der Dornen", "Orbs der Dornen", "Orb der Dornen", "Orb der Dornen"}, + }}, + {0x3bf4992, 0, { // ""Cellular Automaton"" + {0, "Automat KomĂłrkowy", "Automaty KomĂłrkowe", "Automat KomĂłrkowy", "w Automacie KomĂłrkowym"}, + {0/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"}, + {0, "BuněčnĂ˝ automat", "BuněčnĂ© automaty", "BuněčnĂ˝ automat", "v BuněčnĂ©m automatu"}, + {3, "Клеточный автомат", "Клеточные автоматы", "Клеточный автомат", "в Клеточном автомате"}, + {0/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"/*MISSING*/ , "Cellular Automaton"}, + }}, + {0x594962b, 0, { // ""Platform"" + {1, "Platforma", "Platformy", "PlatformÄ™", "PlatformÄ…"}, + {1, "Platform", "Platformlar", "Platformu", "Platformla"}, + {1, "Plošinka", "Plošinky", "Plošinku", "Plošinkou"}, + {1, "Платформа", "Платформы", "ПлатформŃ", "Платформой"}, + {0/*MISSING*/ , "Platform"/*MISSING*/ , "Platform"/*MISSING*/ , "Platform"/*MISSING*/ , "Platform"}, + }}, + {0x59bc9da, 0, { // ""Galápagos"" + {0, "Galápagos", "Galápagos", "Galápagos", "na Galápagos"}, + {0/*MISSING*/ , "Galápagos"/*MISSING*/ , "Galápagos"/*MISSING*/ , "Galápagos"/*MISSING*/ , "Galápagos"}, + {1, "Galapágy", "Galapágy", "Galapágy", "na Galapágách"}, + {0, "ГалапагоŃŃ‹", "ГалапагоŃŃ‹", "ГалапагоŃŃ‹", "на ГалапагоŃĐ°Ń…"}, + {0, "Galápagos", "Galápagos", "in Galápagos", "in Galápagos"}, + }}, + {0x72878ed, 0, { // ""dead troll"" + {0, "martwy troll", "martwe trolle", "martwego trolla", "martwym trollem"}, + {0, "Ă–lĂĽ Trol", "Ă–lĂĽ Troller", "Ă–lĂĽ TrolĂĽ", "Ă–lĂĽ Trolle"}, + {0, "mrtvĂ˝ troll", "mrtvĂ­ trollovĂ©", "mrtvĂ©ho trolla", "mrtvĂ˝m trollem"}, + {0, "мёртвый тролль", "мёртвые тролли", "мёртвого тролля", "мёртвым троллем"}, + {0, "toter Troll", "toten Trolle", "toten Troll", "toten Troll"}, + }}, + {0x73dabf9, 0, { // ""Crossroads V"" + {3, "SkrzyĹĽowanie V", "SkrzyĹĽowania V", "SkrzyĹĽowanie V", "na SkrzyĹĽowaniu V"}, + {0/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"}, + {3, "KĹ™iĹľovatka V", "KĹ™iĹľovatky V", "KĹ™iĹľovatku V", "na KĹ™iĹľovatce V"}, + {3, "ПерекрёŃток V", "ПерекрёŃтки V", "ПерекрёŃток V", "на ПерекрёŃтке V"}, + {0/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"/*MISSING*/ , "Crossroads V"}, + }}, + {0x7486caa, 0, { // ""Ruby"" + {3, "Rubin", "Rubiny", "Rubin", "Rubinem"}, + {3, "Yakut", "Yakutlar", "Yakutu", "Yakutla"}, + {3, "RubĂ­n", "RubĂ­ny", "RubĂ­n", "RubĂ­nem"}, + {3, "Đ Ńбин", "Đ Ńбины", "Đ Ńбин", "Đ Ńбином"}, + {0, "Rubin", "Rubine", "Rubin", "Rubin"}, + }}, + {0x7ae3b95, 0, { // ""Mouse"" + {1, "Myszka", "Myszki", "MyszkÄ™", "MyszkÄ…"}, + {1, "Fare", "Fareler", "Fareyi", "Fareyle"}, + {1, "Myška", "Myška", "Myšku", "Myškou"}, + {1, "МыŃка", "МыŃки", "МыŃĐşŃ", "МыŃкой"}, + {1, "Maus", "Mäuse", "Maus", "Maus"}, + }}, + {0x7d0776e, 0, { // ""Orb of Fire"" + {1, "Sfera Ognia", "Sfery Ognia", "SferÄ™ Ognia", "SferÄ… Ognia"}, + {1, "AteĹź KĂĽresi", "AteĹź KĂĽreleri", "AteĹź KĂĽresini", "AteĹź KĂĽresiyle"}, + {1, "SfĂ©ra OhnÄ›", "SfĂ©ry OhnÄ›", "SfĂ©ru OhnÄ›", "SfĂ©rou OhnÄ›"}, + {1, "Сфера Огня", "Сферы Огня", "ĐˇŃ„ĐµŃ€Ń ĐžĐłĐ˝ŃŹ", "Сферой Огня"}, + {0, "Orb des Feuers", "Orbs des Feuers", "Orb des Feuers", "Orb des Feuers"}, + }}, + {0x982eac3, 0, { // ""Reptile"" + {1, "Jaszczurka", "Jaszczurki", "JaszczurkÄ™", "JaszczurkÄ…"}, + {0/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"}, + {1, "JeštÄ›rka", "JeštÄ›rky", "JeštÄ›rku", "JeštÄ›rce"}, + {1, "Ящерица", "Ящерицы", "ЯщерицŃ", "Ящерицей"}, + {0/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"/*MISSING*/ , "Reptile"}, + }}, + {0xa2dba6e, 0, { // ""Onyx"" + {3, "Onyks", "Onyksy", "Onyks", "Onyksem"}, + {3, "Akik", "Akikler", "AkiÄźi", "Akikle"}, + {3, "Onyx", "Onyxy", "Onyx", "Onyxem"}, + {3, "ОникŃ", "ОникŃŃ‹", "ОникŃ", "ОникŃом"}, + {0, "Onyx", "Onyxe", "Onyx", "Onyx"}, + }}, + {0xacc4f88, 0, { // ""Shadow"" + {0, "CieĹ„", "Cienie", "CieĹ„", "Cieniem"}, + {0, "Gölge", "Gölgeler", "Gölgeyi", "Gölgeyle"}, + {0, "StĂ­n", "StĂ­novĂ©", "StĂ­na", "StĂ­nem"}, + {1, "Тень", "Тени", "Тень", "Тенью"}, + {0, "Schatten", "Schatten", "Schatten", "Schatten"}, + }}, + {0xc15c294, 0, { // ""Mirror Land"" + {1, "Kraina Luster", "Kraina Luster", "KrainÄ™ Luster", "w Krainie Luster"}, + {1, "Aynalar Diyarı", "Aynalar Diyarları", "Aynalar Diyarını", "Aynalar Diyarında"}, + {3, "Kraj zrcadel", "Kraje zrcadel", "Kraj zrcadel", "v Kraji zrcadel"}, + {1, "Зеркальная земля", "Зеркальные земли", "ЗеркальнŃŃŽ землю", "в Зеркальной земле"}, + {0, "Spiegelland", "Spiegelländer", "im Spiegelland", "im Spiegelland"}, + }}, + {0xc23bfef, 0, { // ""Minefield"" + {2, "Pole Minowe", "Pola Minowe", "Pole Minowe", "na Polu Minowym"}, + {2, "Mayıntarlası", "Mayıntarlaları", "Mayıntarlasını", "Mayıntarlasında"}, + {2, "MinovĂ© pole", "Minová pole", "MinovĂ© pole", "v MinovĂ©m poli"}, + {2, "Минное поле", "Минные поля", "Минное поле", "на Минном поле"}, + {2, "Minenfeld", "Minenfelder", "im Minenfeld", "im Minenfeld"}, + }}, + {0xc271d6d, 0, { // ""Silver"" + {2, "Srebro", "Srebra", "Srebro", "Srebrem"}, + {2, "GĂĽmĂĽĹź", "GĂĽmĂĽĹźler", "GĂĽmüşü", "GĂĽmĂĽĹźle"}, + {2, "Kus stříbra", "Kusy stříbra", "Kus stříbra", "Kusem stříbra"}, + {2, "Серебро", "Серебро", "Серебро", "Серебром"}, + {2, "Silber", "Silber", "Silber", "Silber"}, + }}, + {0xc9d9e0c, 0, { // ""Eagle"" + {0, "OrzeĹ‚", "OrĹ‚y", "OrĹ‚a", "OrĹ‚em"}, + {0, "Kartal", "Kartallar", "Kartalı", "Kartalla"}, + {0, "Orel", "Orli", "Orla", "Orlem"}, + {0, "Орёл", "Орлы", "Орла", "Орлом"}, + {0, "Adler", "Adler", "Adler", "Adler"}, + }}, + {0xd0f6f4b, 0, { // ""Red Rock Valley"" + {1, "Dolina Czerwonej SkaĹ‚y", "Dolina Czerwonej SkaĹ‚y", "DolinÄ™ Czerwonej SkaĹ‚y", "w Dolinie Czerwonej SkaĹ‚y"}, + {1, "Kızılkaya Vadisi", "Kızılkaya Vadileri", "Kızılkaya Vadisini", "Kızılkaya Vadisinde"}, + {2, "ĂšdolĂ­ ÄŤervenĂ˝ch skal", "ĂšdolĂ­ ÄŤervenĂ˝ch skal", "ĂšdolĂ­ ÄŤervenĂ˝ch skal", "v ĂšdolĂ­ ÄŤervenĂ˝ch skal"}, + {1, "Долина КраŃных Скал", "Долины КраŃных Скал", "Đ”Đ°Đ»Đ¸Đ˝Ń ĐšŃ€Đ°Ńных Скал", "в Долине КраŃных Скал"}, + {2, "Rotfelsental", "Rotfelsentäler", "im Rotfelsental", "im Rotfelsental"}, + }}, + {0xdf3c837, 0, { // ""Key"" + {3, "Klucz", "Klucze", "Klucz", "Kluczem"}, + {3, "Anahtar", "Anahtarlar", "Anahtarı", "Anahtarla"}, + {3, "KlĂ­ÄŤ", "KlĂ­ÄŤe", "KlĂ­ÄŤ", "KlĂ­ÄŤem"}, + {3, "Ключ", "Ключи", "Ключ", "Ключом"}, + {0, "SchlĂĽssel", "SchlĂĽssel", "SchlĂĽssel", "SchlĂĽssel"}, + }}, + {0xeb45f25, 0, { // ""Dragon Scale"" + {1, "Smocza Ĺuska", "Smocze Ĺuski", "SmoczÄ… ĹuskÄ™", "SmoczÄ… ĹuskÄ…"}, + {0/*MISSING*/ , "Dragon Scale"/*MISSING*/ , "Dragon Scale"/*MISSING*/ , "Dragon Scale"/*MISSING*/ , "Dragon Scale"}, + {1, "DraÄŤĂ­ šupina", "DraÄŤĂ­ šupiny", "DraÄŤĂ­ šupinu", "DraÄŤĂ­ šupinou"}, + {1, "чеŃŃŃŹ дракона", "чеŃŃи дракона", "чеŃŃŃŽ дракона", "чеŃŃŃ‘Đą дракона"}, + {1, "Drachenschuppe", "Drachenschuppen", "Drachenschuppe", "Drachenschuppe"}, + }}, + {0xf6089ad, 0, { // ""Draugr"" + {0, "Draugr", "Draugry", "Draugra", "Draugrem"}, + {0/*MISSING*/ , "Draugr"/*MISSING*/ , "Draugr"/*MISSING*/ , "Draugr"/*MISSING*/ , "Draugr"}, + {0, "Draugr", "DraugrovĂ©", "Draugra", "Draugrem"}, + {0, "ДраŃгр", "ДраŃгры", "ДраŃгра", "ДраŃгром"}, + {0, "Draugr", "Draugar", "Draugr", "Draugr"}, + }}, + {0x10ddbfc9, 0, { // ""Orb of the Mind"" + {1, "Sfera Psychiki", "Sfery Psychiki", "SferÄ™ Psychiki", "SferÄ… Psychiki"}, + {1, "Psychiki KĂĽresi", "Psychiki KĂĽreleri", "Psychiki KĂĽresini", "Psychiki KĂĽresiyle"}, + {1, "SfĂ©ra Mysli", "SfĂ©ry Mysli", "SfĂ©ru Mysli", "SfĂ©rou Mysli"}, + {1, "Сфера Đ Đ°Đ·ŃĐĽĐ°", "Сферы Đ Đ°Đ·ŃĐĽĐ°", "ĐˇŃ„ĐµŃ€Ń Đ Đ°Đ·ŃĐĽĐ°", "Сферой Đ Đ°Đ·ŃĐĽĐ°"}, + {0, "Orb der Psyche", "Orbs der Psyche", "Orb der Psyche", "Orb der Psyche"}, + }}, + {0x10ff2cb0, 0, { // ""Hive"" + {2, "Mrowisko", "Mrowisko", "Mrowisko", "w Mrowisku"}, + {2, "Kovan", "Kovanlar", "Kovanı", "Kovanda"}, + {3, "Ăšl", "Ăšly", "Ăšl", "v Ăšlu"}, + {3, "Улей", "Ульи", "Улей", "в Улье"}, + {2, "Nest", "Nest", "im Nest", "im Nest"}, + }}, + {0x11b70d9f, 0, { // ""Red Hyperbug"" + {0, "Czerwony Hiperinsekt", "Czerwone Hiperinsekty", "Czerwonego Hiperinsekta", "Czerwonym Hiperinsektem"}, + {0, "Kırmızı AĹźkınböcek", "Kırmızı AĹźkınböcekler", "Kırmızı AĹźkınböceÄźi", "Kırmızı AĹźkınböcekle"}, + {0, "ÄŚervenĂ˝ hyperhmyzák", "ÄŚervenĂ­ hyperhmyzáci", "ÄŚervenĂ©ho hyperhmyzáka", "ÄŚervenĂ˝m hyperhmyzákem"}, + {0, "КраŃный гипержŃĐş", "КраŃные гипержŃки", "КраŃного гипержŃка", "КраŃным гипержŃком"}, + {0, "Roter Hyperkäfer", "Rote Hyperkäfer", "Roten Hyperkäfer", "Roten Hyperkäfer"}, + }}, + {0x13551589, 0, { // ""Mirage"" + {0, "MiraĹĽ", "MiraĹĽe", "MiraĹĽ", "MiraĹĽem"}, + {0, "Yansı", "Yansılar", "Yansıyı", "Yansıyla"}, + {3, "PĹ™elud", "PĹ™eludy", "PĹ™elud", "PĹ™eludem"}, + {3, "Мираж", "Миражи", "Мираж", "Миражом"}, + {1, "Spiegelung", "Spiegelungen", "Spiegelung", "Spiegelung"}, + }}, + {0x13f7d362, 0, { // ""Viking"" + {0, "Wiking", "Wikingowie", "Wikinga", "Wikingiem"}, + {0, "Viking", "Vikingler", "Vikingi", "Vikingle"}, + {0, "Viking", "VikingovĂ©", "Vikinga", "Vikingem"}, + {0, "Викинг", "Викинги", "Викинга", "Викингом"}, + {0, "Wikinger", "Wikinger", "Wikinger", "Wikinger"}, + }}, + {0x1422459d, 0, { // ""Green Hyperbug"" + {0, "Zielony Hiperinsekt", "Zielone Hiperinsekty", "Zielonego Hiperinsekta", "Zielonym Hiperinsektem"}, + {0, "YeĹźil AĹźkınböcek", "YeĹźil AĹźkınböcekler", "YeĹźil AĹźkınböceÄźi", "YeĹźil AĹźkınböcekle"}, + {0, "ZelenĂ˝ hyperhmyzák", "ZelenĂ­ hyperhmyzáci", "ZelenĂ©ho hyperhmyzáka", "ZelenĂ˝m hyperhmyzákem"}, + {0, "Зелёный гипержŃĐş", "Зелёные гипержŃки", "Зелёного гипержŃка", "Зелёным гипержŃком"}, + {0, "GrĂĽner Hyperkäfer", "GrĂĽne Hyperkäfer", "GrĂĽnen Hyperkäfer", "GrĂĽnen Hyperkäfer"}, + }}, + {0x144bd658, 0, { // ""big bush"" + {3, "duĹĽy krzak", "duĹĽe krzaki", "duĹĽy krzak", "duĹĽym krzakiem"}, + {0/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"}, + {3, "velkĂ˝ keĹ™", "velkĂ© keĹ™e", "velkĂ˝ keĹ™", "velkĂ˝m keĹ™em"}, + {3, "больŃой ĐşŃŃŃ‚", "больŃие ĐşŃŃŃ‚Ń‹", "больŃой ĐşŃŃŃ‚", "больŃим ĐşŃŃтом"}, + {0/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"/*MISSING*/ , "big bush"}, + }}, + {0x145a3ea0, 0, { // ""wall of Camelot"" + {1, "Ĺ›ciana Camelot", "Ĺ›ciany Camelot", "Ĺ›cianÄ™ Camelot", "Ĺ›cianÄ… Camelot"}, + {1, "Kamelot Duvarı", "Kamelot Duvarları", "Kamelot Duvarını", "Kamelot Duvarıyla"}, + {1, "hradba Camelotu", "hradby Camelotu", "hradbu Camelotu", "hradbou Camelotu"}, + {1, "Ńтена Камелота", "Ńтены Камелота", "ŃŃ‚ĐµĐ˝Ń ĐšĐ°ĐĽĐµĐ»ĐľŃ‚Đ°", "Ńтеной Камелота"}, + {1, "Wand von Camelot", "Wände von Camelot", "Wand von Camelot", "Wand von Camelot"}, + }}, + {0x146a6b1a, 0, { // ""Tentacle"" + {1, "Macka", "Macki", "MackÄ™", "MackÄ…"}, + {0, "Dokunaç", "Dokunaçlar", "Dokunacı", "Dokunaçla"}, + {3, "Konec chapadla", "Konce chapadel", "Konec chapadla", "Koncem chapadla"}, + {2, "Đ©Ńпальце", "Đ©Ńпальца", "Đ©Ńпальце", "Đ©Ńпальцем"}, + {1, "Tentakel", "Tentakel", "Tentakel", "Tentakel"}, + }}, + {0x14f61189, 0, { // ""small bush"" + {3, "krzaczek", "krzaczki", "krzaczek", "krzaczkiem"}, + {0/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"}, + {3, "maĹ‚Ă˝ keřík", "maĹ‚Ă© keříky", "maĹ‚Ă˝ keřík", "maĹ‚Ă˝m keříkem"}, + {3, "маленький ĐşŃŃŃ‚", "маленькие ĐşŃŃŃ‚Ń‹", "маленький ĐşŃŃŃ‚", "маленьким ĐşŃŃтом"}, + {0/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"/*MISSING*/ , "small bush"}, + }}, + {0x151e041d, 0, { // ""island"" + {1, "wyspa", "wyspy", "wyspÄ™", "wyspÄ…"}, + {1, "ada", "adalar", "adayı", "adayla"}, + {3, "ostrov", "ostrovy", "ostrov", "ostrovem"}, + {3, "ĐľŃтров", "ĐľŃтрова", "ĐľŃтров", "ĐľŃтровом"}, + {1, "Insel", "Inseln", "Insel", "Insel"}, + }}, + {0x15d403e8, 0, { // ""Reptiles"" + {3, "Jaszczurki", "Jaszczurki", "Jaszczurki", "na Jaszczurkach"}, + {0/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"}, + {3, "JeštÄ›rky", "JeštÄ›rky", "JeštÄ›rky", "na JeštÄ›rkách"}, + {3, "Ящерицы", "Ящерицы", "Ящериц", "на Ящерицах"}, + {0/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"/*MISSING*/ , "Reptiles"}, + }}, + {0x1648dfe3, 0, { // ""Orb of Teleport"" + {1, "Sfera Teleportacji", "Sfery Teleportacji", "SferÄ™ Teleportacji", "SferÄ… Teleportacji"}, + {1, "Işınlanma KĂĽresi", "Işınlanma KĂĽreleri", "Işınlanma KĂĽresini", "Işınlanma KĂĽresiyle"}, + {1, "SfĂ©ra Teleportace", "SfĂ©ry Teleportace", "SfĂ©ru Teleportace", "SfĂ©rou Teleportace"}, + {1, "Сфера Телепорта", "Сферы Телепорта", "ĐˇŃ„ĐµŃ€Ń Đ˘ĐµĐ»ĐµĐżĐľŃ€Ń‚Đ°", "Сферой Телепорта"}, + {0, "Orb der Teleportation", "Orbs der Teleportation", "Orb der Teleportation", "Orb der Teleportation"}, + }}, + {0x16a1c106, 0, { // ""Orb of Space"" + {1, "Sfera Przestrzeni", "Sfery Przestrzeni", "SferÄ™ Przestrzeni", "SferÄ… Przestrzeni"}, + {1, "BoĹźluk KĂĽresi", "BoĹźluk KĂĽreleri", "BoĹźluk KĂĽresini", "BoĹźluk KĂĽresiyle"}, + {1, "SfĂ©ra Prostoru", "SfĂ©ry Prostoru", "SfĂ©ru Prostoru", "SfĂ©rou Prostoru"}, + {1, "Сфера ПроŃтранŃтва", "Сферы ПроŃтранŃтва", "ĐˇŃ„ĐµŃ€Ń ĐźŃ€ĐľŃтранŃтва", "Сферой ПроŃтранŃтва"}, + {0, "Orb des Raumes", "Orbs des Raumes", "Orb des Raumes", "Orb des Raumes"}, + }}, + {0x17931c8f, 0, { // ""Yendorian Researcher"" + {0, "YendoriaĹ„ski Badacz", "YendoriaĹ„scy Badacze", "YendoriaĹ„skiego Badacza", "YendoriaĹ„skim Badaczem"}, + {0/*MISSING*/ , "Yendorian Researcher"/*MISSING*/ , "Yendorian Researcher"/*MISSING*/ , "Yendorian Researcher"/*MISSING*/ , "Yendorian Researcher"}, + {0, "YendorskĂ˝ badatel", "YendorštĂ­ badatelĂ©", "YendorskĂ©ho badatele", "YendorskĂ˝m badatelem"}, + {0, "ЙендорŃкий иŃŃледователь", "ЙендорŃкие иŃŃледователи", "ЙендорŃкого иŃŃледователя", "ЙендорŃким иŃŃледователем"}, + {0, "Yendorianischer Forscher", "Yendorianische Forscher", "Yendorianischen Forscher", "Yendorianischen Forscher"}, + }}, + {0x18630997, 0, { // ""Orb of Speed"" + {1, "Sfera SzybkoĹ›ci", "Sfery SzybkoĹ›ci", "SferÄ™ SzybkoĹ›ci", "SferÄ… SzybkoĹ›ci"}, + {1, "Hız KĂĽresi", "Hız KĂĽreleri", "Hız KĂĽresini", "Hız KĂĽresiyle"}, + {1, "SfĂ©ra Rychlosti", "SfĂ©ry Rychlosti", "SfĂ©ru Rychlosti", "SfĂ©rou Rychlosti"}, + {1, "Сфера СкороŃти", "Сферы СкороŃти", "ĐˇŃ„ĐµŃ€Ń ĐˇĐşĐľŃ€ĐľŃти", "Сферой СкороŃти"}, + {0, "Orb der Geschwindigkeit", "Orbs der Geschwindigkeit", "Orb der Geschwindigkeit", "Orb der Geschwindigkeit"}, + }}, + {0x1930f25c, 0, { // ""sand dune"" + {1, "wydma", "wydmy", "wydmÄ™", "wydmÄ…"}, + {1, "Kumul", "Kumullar", "Kumulu", "Kumulda"}, + {1, "pĂ­seÄŤná duna", "pĂ­seÄŤnĂ© duny", "pĂ­seÄŤnou dunu", "pĂ­seÄŤnou dunou"}, + {1, "дюна", "дюны", "Đ´ŃŽĐ˝Ń", "дюной"}, + {1, "SanddĂĽne", "SanddĂĽnen", "SanddĂĽne", "SanddĂĽne"}, + }}, + {0x19468c49, 0, { // ""Lost Mountain"" + {1, "Zagubiona GĂłra", "Zagubione GĂłry", "ZagubionÄ… GĂłrÄ…", "na Zagubionej GĂłrze"}, + {0/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"}, + {1, "Ztracená hora", "ZtracenĂ© hory", "Ztracenou horu", "na ZtracenĂ© hoĹ™e"}, + {1, "Потерянная гора", "Потерянные горы", "ПотеряннŃŃŽ горŃ", "на Потерянной горе"}, + {0/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"/*MISSING*/ , "Lost Mountain"}, + }}, + {0x194752fa, 0, { // ""Friendly Ghost"" + {3, "Przyjazny Duch", "Przyjazne Duchy", "Przyjaznego Ducha", "Przyjaznym Duchem"}, + {0/*MISSING*/ , "Friendly Ghost"/*MISSING*/ , "Friendly Ghost"/*MISSING*/ , "Friendly Ghost"/*MISSING*/ , "Friendly Ghost"}, + {0, "PřátelskĂ˝ duch", "PřátelštĂ­ duchovĂ©", "PřátelskĂ©ho ducha", "PřátelskĂ˝m duchem"}, + {0, "ДрŃжеŃтвенный Đ´ŃŃ…", "ДрŃжеŃтвенные Đ´Ńхи", "ДрŃжеŃтвенного Đ´ŃŃ…Đ°", "ДрŃжеŃтвенным Đ´Ńхом"}, + {0, "Freundlicher Geist", "Freundliche Geister", "Freundlichen Geist", "Freundlichen Geist"}, + }}, + {0x19640701, 0, { // ""Raging Bull"" + {0, "WĹ›ciekĹ‚y Byk", "WĹ›ciekĹ‚e Byki", "WĹ›ciekĹ‚ego Byka", "WĹ›ciekĹ‚ym Bykiem"}, + {0/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"}, + {0, "VzteklĂ˝ BĂ˝k", "VzteklĂ­ BĂ˝ci", "VzteklĂ©ho BĂ˝ka", "VzteklĂ˝m BĂ˝kem"}, + {0, "БеŃеный бык", "БеŃеные быки", "БеŃеного быка", "БеŃеным быком"}, + {0/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"/*MISSING*/ , "Raging Bull"}, + }}, + {0x1a404e9f, 0, { // ""Vine Spirit"" + {0, "Winny Duszek", "Winne Duszki", "Winnego Duszka", "Winnym Duszkiem"}, + {0, "Ĺžarap Ă–zĂĽ", "Ĺžarap Ă–zleri", "Ĺžarap Ă–zĂĽnĂĽ", "Ĺžarap Ă–zĂĽyle"}, + {0, "RĂ©vovĂ˝ duch", "RĂ©vovĂ­ duchovĂ©", "RĂ©vovĂ©ho ducha", "RĂ©vovĂ˝m duchem"}, + {0, "Винный Đ´ŃŃ…", "Винные Đ´Ńхи", "Винного Đ´ŃŃ…Đ°", "Винным Đ´Ńхом"}, + {1, "Rebenseele", "Rebenseelen", "Rebenseele", "Rebenseele"}, + }}, + {0x1c2a0990, 0, { // ""Ivy D"" + {0, "Bluszcz D", "Bluszcze D", "Bluszcz D", "Bluszczem D"}, + {0, "Sarmaşık D", "sarmaşıklar D", "Sarmaşığı D", "Sarmaşıkla D"}, + {3, "BĹ™eÄŤĹĄan D", "BĹ™eÄŤĹĄany D", "BĹ™eÄŤĹĄan D", "BĹ™eÄŤĹĄanem D"}, + {3, "Плющ D", "Плющи D", "Плющ D", "Плющом D"}, + {0, "Efeu D", "Efeue D", "Efeu D", "Efeu D"}, + }}, + {0x1c2a099a, 0, { // ""Ivy N"" + {0, "Bluszcz N", "Bluszcze N", "Bluszcz N", "Bluszczem N"}, + {0, "sarmaşık N", "Sarmaşıklar N", "Sarmaşığı N", "Sarmaşıkla N"}, + {3, "BĹ™eÄŤĹĄan N", "BĹ™eÄŤĹĄany N", "BĹ™eÄŤĹĄan N", "BĹ™eÄŤĹĄanem N"}, + {3, "Плющ N", "Плющи N", "Плющ N", "Плющом N"}, + {0, "Efeu N", "Efeue N", "Efeu N", "Efeu N"}, + }}, + {0x1d4ed559, 0, { // ""Pirate"" + {0, "Pirat", "Piraci", "Pirata", "Piratem"}, + {0, "Korsan", "Korsanlar", "Korsanı", "Korsanla"}, + {0, "Pirát", "Piráti", "Piráta", "Pirátem"}, + {0, "Пират", "Пираты", "Пирата", "Пиратом"}, + {0, "Pirat", "Piraten", "Pirat", "Pirat"}, + }}, + {0x1ddb40e6, 0, { // ""column"" + {1, "kolumna", "kolumny", "kolumnÄ™", "kolumnÄ…"}, + {1, "SĂĽtun", "SĂĽtunlar", "SĂĽtunu", "SĂĽtunla"}, + {3, "sloup", "sloupy", "sloup", "sloupem"}, + {1, "колонна", "колонны", "колоннŃ", "колонной"}, + {1, "Säule", "Säulen", "Säule", "Säule"}, + }}, + {0x1e704a9a, 0, { // ""Red Troll"" + {0, "Czerwony Troll", "Czerwone Trolle", "Czerwonego Trolla", "Czerwonym Trollem"}, + {0, "Kızıl Trol", "Kızıl Troller", "Kızıl TrolĂĽ", "Kızıl Trolle"}, + {0, "ÄŚervenĂ˝ troll", "ÄŚervenĂ­ trollovĂ©", "ÄŚervenĂ©ho trolla", "ÄŚervenĂ˝m trollem"}, + {0, "КраŃный тролль", "КраŃные тролли", "КраŃного тролля", "КраŃным троллем"}, + {0, "Roter Troll", "Rote Trolle", "Roten Troll", "Roten Troll"}, + }}, + {0x1eadd9b1, 0, { // ""Land of Power"" + {1, "Kraina Mocy", "Kraina Mocy", "KrainÄ… Mocy", "w Krainie Mocy"}, + {1, "Güç Diyarı", "Güç Diyarları", "Güç Diyarını", "Güç Diyarında"}, + {3, "Kraj Moci", "Kraje Moci", "Kraj Moci", "v Kraji Moci"}, + {1, "Земля Ńилы", "Земли Ńилы", "Землю Ńилы", "в Земле Ńилы"}, + {2, "Land der Macht", "Länder der Macht", "im Land der Macht", "im Land der Macht"}, + }}, + {0x1eeb8385, 0, { // ""Amethyst"" + {3, "Ametyst", "Ametysty", "Ametyst", "Ametystem"}, + {0/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"}, + {3, "Ametyst", "Ametysty", "Ametyst", "Ametystem"}, + {3, "ĐметиŃŃ‚", "ĐметиŃŃ‚Ń‹", "ĐметиŃŃ‚", "ĐметиŃтом"}, + {0/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"/*MISSING*/ , "Amethyst"}, + }}, + {0x214d9df6, 0, { // ""Ivy Branch"" + {1, "GaĹ‚Ä…Ĺş Bluszczu", "GaĹ‚Ä™zie Bluszczu", "GaĹ‚Ä…Ĺş Bluszczu", "GaĹ‚Ä™ziÄ… Bluszczu"}, + {1, "Sarmaşık Dalı", "Sarmaşık Dalları", "Sarmaşık Dalını", "Sarmaşık Dalıyla"}, + {1, "VÄ›tev bĹ™eÄŤĹĄanu", "VÄ›tve bĹ™eÄŤĹĄanu", "VÄ›tev bĹ™eÄŤĹĄanu", "VÄ›tvĂ­ bĹ™eÄŤĹĄanu"}, + {1, "Ветвь плюща", "Ветви плюща", "Ветвь плюща", "Ветвью плюща"}, + {0, "Efeuzweig", "Efeuzweige", "Efeuzweig", "Efeuzweig"}, + }}, + {0x22d86d83, 0, { // ""Tame Bomberbird"" + {3, "Oswojony Bombardier", "Oswojone Bombardiery", "Oswojonego Bombardiera", "Oswojonym Bombardierem"}, + {3, "Sakin BombacıkuĹź", "Sakin BombacıkuĹźlar", "Sakin BombacıkuĹźunu", "Sakin BombacıkuĹźuyla"}, + {0, "OchoÄŤenĂ˝ Bombarďák", "OchoÄŤenĂ­ Bombarďáci", "OchoÄŤenĂ©ho Bombarďáka", "OchoÄŤenĂ˝m Bombarďákem"}, + {0, "Đ Ńчной бомбардир", "Đ Ńчные бомбардиры", "Đ Ńчного бомбардира", "Đ Ńчным бомбардиром"}, + {0, "Zahmer Bombenvogel", "Zahme Bombenvögel", "Zahmen Bombenvogel", "Zahmen Bombenvogel"}, + }}, + {0x22e16aae, 0, { // ""Pirate Treasure"" + {0, "Skarb PiratĂłw", "Skarby PiratĂłw", "Skarb PiratĂłw", "Skarbem PiratĂłw"}, + {0, "Korsan Hazinesi", "Korsan Hazineleri", "Korsan Hazinesini", "Korsan Hazinesiyle"}, + {0, "PirátskĂ˝ poklad", "PirátskĂ© poklady", "PirátskĂ˝ poklad", "PirátskĂ˝m pokladem"}, + {2, "Сокровище пиратов", "Сокровища пиратов", "Сокровище пиратов", "Сокровищем пиратов"}, + {0, "Piratenschatz", "Piratenschätze", "Piratenschatz", "Piratenschatz"}, + }}, + {0x239a26a6, 0, { // ""Land of Storms"" + {1, "Kraina Burzy", "Krainy Burzy", "KrainÄ™ Burzy", "w Krainie Burzy"}, + {1, "Fırtına Diyarı", "Fırtına Diyarları", "Fırtına Diyarını", "Fırtına Diyarında"}, + {1, "Kraj Bouří", "Kraje Bouří", "Kraj Bouří", "v Kraji Bouří"}, + {1, "Земля Đ‘Ńри", "Земли Đ‘Ńри", "Землю Đ‘Ńри", "в Земле Đ‘Ńри"}, + {2, "Land der StĂĽrme", "Länder der StĂĽrme", "im Land der StĂĽrme", "im Land der StĂĽrme"}, + }}, + {0x25e264cf, 0, { // ""Orb of Water"" + {1, "Sfera Wody", "Sfery Wody", "SferÄ™ Wody", "SferÄ… Wody"}, + {1, "Su KĂĽresi", "Su KĂĽreleri", "Su KĂĽresini", "Su KĂĽresiyle"}, + {1, "SfĂ©ra vody", "SfĂ©ry vody", "SfĂ©ru vody", "SfĂ©rou vody"}, + {1, "Сфера Воды", "Сферы Воды", "ĐˇŃ„ĐµŃ€Ń Đ’ĐľĐ´Ń‹", "Сферой Воды"}, + {0, "Orb des Wassers", "Orbs des Wassers", "Orb des Wassers", "Orb des Wassers"}, + }}, + {0x26f959f7, 0, { // ""Alchemist Lab"" + {2, "Laboratorium", "Laboratorium", "Laboratorium", "w Laboratorium"}, + {2, "Laboratuar", "Laboratuarlar", "Laboratuarı", "laboratuarda"}, + {1, "Alchymistická laboratoĹ™", "AlchymistickĂ© laboratoĹ™e", "Alchymistickou laboratoĹ™", "v AlchymistickĂ© laboratoĹ™i"}, + {1, "Лаборатория", "Лаборатории", "Лабораторию", "в Лаборатории"}, + {0, "Alchemielabor", "Alchemielabore", "im Alchemielabor", "im Alchemielabor"}, + }}, + {0x27373108, 0, { // ""Orb of Energy"" + {1, "Sfera Energii", "Sfery Energii", "SferÄ™ Energii", "SferÄ… Energii"}, + {0/*MISSING*/ , "Orb of Energy"/*MISSING*/ , "Orb of Energy"/*MISSING*/ , "Orb of Energy"/*MISSING*/ , "Orb of Energy"}, + {1, "SfĂ©ra Energie", "SfĂ©ry Energie", "SfĂ©ru Energie", "SfĂ©rou Energie"}, + {1, "Сфера Energii", "Сферы Energii", "ĐˇŃ„ĐµŃ€Ń Energii", "Сферой Energii"}, + {0, "Orb der Energie", "Orbs der Energie", "Orb der Energie", "Orb der Energie"}, + }}, + {0x27627e19, 0, { // ""stone gargoyle floor"" + {1, "podĹ‚oga z rzygacza", "podĹ‚ogi z rzygacza", "podĹ‚ogÄ™ z rzygacza", "podĹ‚ogÄ… z rzygacza"}, + {1, "taĹź çörten zemini", "taĹź çörten zeminleri", "taĹź çörten zeminini", "taĹź çörten zeminiyle"}, + {1, "podlaha z chrliÄŤe", "podlahy z chrliÄŤĹŻ", "podlahu z chrliÄŤe", "podlahou z chrliÄŤe"}, + {3, "пол Ń ĐłĐľŃ€ĐłŃльей", "полы Ń ĐłĐľŃ€ĐłŃльями", "пол Ń ĐłĐľŃ€ĐłŃльей", "полом Ń ĐłĐľŃ€ĐłŃльей"}, + {0, "Steingargoyle-Boden", "Steingargoyle-Böden", "Steingargoyle-Boden", "Steingargoyle-Boden"}, + }}, + {0x295eca8f, 0, { // ""Orb of the Fish"" + {1, "Sfera Ryby", "Sfery Ryby", "SferÄ™ Ryby", "SferÄ… Ryby"}, + {1, "Balık KĂĽresi", "Balık KĂĽreleri", "Balık KĂĽresini", "Balık KĂĽresiyle"}, + {1, "SfĂ©ra Ryby", "SfĂ©ry Ryby", "SfĂ©ru Ryby", "SfĂ©rou Ryby"}, + {1, "Сфера Рыбы", "Сферы Рыбы", "ĐˇŃ„ĐµŃ€Ń Đ Ń‹Đ±Ń‹", "Сферой Рыбы"}, + {0, "Orb des Fischs", "Orbs des Fischs", "Orb des Fischs", "Orb des Fischs"}, + }}, + {0x2aa339b0, 0, { // ""Evil Golem"" + {0, "ZĹ‚y Golem", "ZĹ‚e Golemy", "ZĹ‚ego Golema", "ZĹ‚ym Golemem"}, + {0, "Ĺžeytani Golem", "Ĺžeytani Golemler", "Ĺžeytani Golemi", "Ĺžeytani Golemle"}, + {0, "ZlĂ˝ golem", "ZlĂ­ golemovĂ©", "ZlĂ©ho golema", "ZlĂ˝m golemem"}, + {0, "Злой голем", "Злые големы", "Злого голема", "Злым големом"}, + {0, "Böser Golem", "Böse Golems", "Bösen Golem", "Bösen Golem"}, + }}, + {0x2bab10d5, 0, { // ""Knife"" + {3, "Nóż", "NoĹĽe", "Nóż", "NoĹĽem"}, + {0, "Bıçak", "Bıçaklar", "Bıçağı", "Bıçakla"}, + {3, "NĹŻĹľ", "NoĹľe", "NĹŻĹľ", "NoĹľem"}, + {3, "Нож", "Ножи", "Нож", "Ножом"}, + {2, "Messer", "Messer", "Messer", "Messer"}, + }}, + {0x2be7948a, 0, { // ""no item"" + {3, "brak przedmiotu", "braki przedmiotu", "braku przedmiotu", "brakiem przedmiotu"}, + {0/*MISSING*/ , "no item"/*MISSING*/ , "no item"/*MISSING*/ , "no item"/*MISSING*/ , "no item"}, + {3, "žádnĂ˝ pĹ™edmÄ›t", "žádnĂ© pĹ™edmÄ›ty", "žádnĂ˝ pĹ™edmÄ›t", "žádnĂ˝m pĹ™edmÄ›tem"}, + {3, "нет предмета", "нет предмета", "нет предмета", "нет предмета"}, + {0, "kein Gegenstand", "keine Gegenstände", "keinen Gegenstand", "keinen Gegenstand"}, + }}, + {0x2c05e0f6, 0, { // ""Sand Worm W"" + {0, "Pustynny Czerw W", "Pustynne Czerwie W", "Pustynnego Czerwia W", "Pustynnym Czerwiem W"}, + {0, "Kumkurdu W", "Kumkurtları W", "Kumkurdunu W", "Kumkurduyla W"}, + {0, "PĂ­seÄŤnĂ˝ ÄŤerv W", "PĂ­seÄŤnĂ­ ÄŤervi W", "PĂ­seÄŤnĂ©ho ÄŤerva W", "PĂ­seÄŤnĂ˝m ÄŤervem W"}, + {0, "ĐźŃŃтынный червь W", "ĐźŃŃтынные черви W", "ĐźŃŃтынного червя W", "ĐźŃŃтынным червём W"}, + {0, "Sandwurm W", "SandwĂĽrmer W", "Sandwurm W", "Sandwurm W"}, + }}, + {0x2c125756, 0, { // ""Fire Cultist"" + {0, "Ognisty Kultysta", "OgniĹ›ci KultyĹ›ci", "Ognistego KultystÄ™", "Ognistym KultystÄ…"}, + {0, "AteĹź MĂĽridi", "AteĹź MĂĽritleri", "AteĹź MĂĽridini", "AteĹź MĂĽritle"}, + {0, "Kultista ohnÄ›", "KultistĂ© ohnÄ›", "Kultistu ohnÄ›", "Kultistou ohnÄ›"}, + {0, "Огненный ĐşŃльтиŃŃ‚", "Огненные ĐşŃльтиŃŃ‚Ń‹", "Огненного ĐşŃльтиŃŃ‚Đ°", "Огненным ĐşŃльтиŃтом"}, + {0, "Feuerkultist", "Feuerkultisten", "Feuerkultisten", "Feuerkultisten"}, + }}, + {0x2c23322d, 0, { // ""Royal Jelly"" + {2, "KrĂłlewskie Mleczko", "KrĂłlewskie Mleczka", "KrĂłlewskie Mleczko", "KrĂłlewskim Mleczkiem"}, + {2, "MĂĽthiĹź Jöle", "MĂĽthiĹź Jöleler", "MĂĽthiĹź Jöleyi", "MĂĽthiĹź Jöleyle"}, + {1, "Mateří kašiÄŤka", "Mateří kašiÄŤky", "Mateří kašiÄŤku", "Mateří kašiÄŤkou"}, + {2, "маточное молочко", "маточное молочко", "маточное молочко", "маточным молочком"}, + {2, "GelĂ©e Royale", "GelĂ©e Royale", "GelĂ©e Royale", "GelĂ©e Royale"}, + }}, + {0x2ff35477, 0, { // ""Necromancer"" + {0, "Nekromanta", "Nekromanci", "NekromantÄ™", "NekromantÄ…"}, + {0, "Ă–lüçağıran", "Ă–lüçağıranlar", "Ă–lüçağıranı", "Ă–lüçağıranla"}, + {0, "Nekromancer", "NekromanceĹ™i", "Nekromancera", "Nekromancerem"}, + {0, "Некромант", "Некроманты", "Некроманта", "Некромантом"}, + {0, "Totenbeschwörer", "Totenbeschwörer", "Totenbeschwörer", "Totenbeschwörer"}, + }}, + {0x3063d2f6, 0, { // ""Orb of Domination"" + {1, "Sfera Dominacji", "Sfery Dominacji", "SferÄ™ Dominacji", "SferÄ… Dominacji"}, + {0/*MISSING*/ , "Orb of Domination"/*MISSING*/ , "Orb of Domination"/*MISSING*/ , "Orb of Domination"/*MISSING*/ , "Orb of Domination"}, + {1, "SfĂ©ra Dominance", "SfĂ©ry Dominance", "SfĂ©ru Dominance", "SfĂ©rou Dominance"}, + {1, "Сфера Доминации", "Сферы Доминации", "ĐˇŃ„ĐµŃ€Ń Đ”ĐľĐĽĐ¸Đ˝Đ°Ń†Đ¸Đ¸", "Сферой Доминации"}, + {0, "Orb der Dominanz", "Orbs der Dominanz", "Orb der Dominanz", "Orb der Dominanz"}, + }}, + {0x309f6294, 0, { // ""grounded wall"" + {1, "uziemiona Ĺ›ciana", "uziemione Ĺ›ciany", "uziemionÄ… scianÄ™", "uziemionÄ… Ĺ›cianÄ…"}, + {1, "topraklı duvar", "topraklı duvarlar", "topraklı duvarı", "topraklı duvarla"}, + {1, "uzemnÄ›ná zeÄŹ", "uzemnÄ›nĂ© zdi", "uzemnÄ›nou zeÄŹ", "uzemnÄ›nou zdĂ­"}, + {1, "заземлённая Ńтена", "заземлённые Ńтены", "заземлённŃŃŽ ŃтенŃ", "заземлённой Ńтеной"}, + {1, "geerdete Wand", "geerdete Wände", "geerdete Wand", "geerdete Wand"}, + }}, + {0x30ade9f9, 0, { // ""Prince"" + {0, "KsiÄ…ĹĽÄ™", "KsiÄ…ĹĽÄ™ta", "KsiÄ™cia", "KsiÄ™ciem"}, + {0, "Ĺžehzade", "Ĺžehzadeyi", "Ĺžehzadeler", "Ĺžehzadeyle"}, + {0, "Princ", "PrincovĂ©", "Prince", "Princem"}, + {0, "Принц", "Принцы", "Принца", "Принцем"}, + {0, "Prinz", "Prinzen", "Prinz", "Prinz"}, + }}, + {0x31586dfd, 0, { // ""Desert"" + {1, "Pustynia", "Pustynia", "PustyniÄ™", "na Pustyni"}, + {1, "Çöl", "Çöller", "ÇölĂĽ", "Çölde"}, + {1, "Poušť", "PouštÄ›", "Poušť", "na Poušti"}, + {1, "ĐźŃŃтыня", "ĐźŃŃтыни", "ĐźŃŃтыню", "в ĐźŃŃтыне"}, + {1, "WĂĽste", "WĂĽsten", "in der WĂĽste", "in der WĂĽste"}, + }}, + {0x3181b219, 0, { // ""Earth Elemental"" + {0, "Ĺ»ywioĹ‚ak", "Ĺ»ywioĹ‚aki", "Ĺ»ywioĹ‚aka", "Ĺ»ywioĹ‚akiem"}, + {0, "Toprak Unsuru", "Toprak Unsurları", "Toprak Unsurunu", "Toprak Unsuruyla"}, + {0, "Elementál ZemÄ›", "ElementálovĂ© ZemÄ›", "Elementála ZemÄ›", "Elementálem ZemÄ›"}, + {0, "Земной элементаль", "Земные элементали", "Земного элементаля", "Земным элементалем"}, + {0, "Erdelementar", "Erdelementare", "Erdelementar", "Erdelementar"}, + }}, + {0x318d9d8d, 0, { // ""Land of Eternal Motion"" + {2, "Kraina Wiecznego Ruchu", "Kraina Wiecznego Ruchu", "KrainÄ™ Wiecznego Ruchu", "w Krainie Wiecznego Ruchu"}, + {2, "Sonsuz Devinim Diyarı", "Sonsuz Devinim Diyarları", "Sonsuz Devinim Diyarını", "Sonsuz Devinim Diyarında"}, + {3, "Kraj věčnĂ©ho pohybu", "Kraje věčnĂ©ho pohybu", "Kraj věčnĂ©ho pohybu", "v Kraji věčnĂ©ho pohybu"}, + {1, "Земля Вечного Движения", "Земли Вечного Движения", "Землю Вечного Движения", "в Земле Вечного Движения"}, + {2, "Land der ewigen Bewegung", "Länder der ewigen Bewegung", "im Land der ewigen Bewegung", "im Land der ewigen Bewegung"}, + }}, + {0x331fcbb5, 0, { // ""stone gargoyle"" + {0, "kamienny rzygacz", "kamienne rzygacze", "kamiennego rzygacza", "kamiennym rzygaczem"}, + {0, "taĹź çörten", "taĹź çörtenler", "taĹź çörteni", "taĹź çörtenle"}, + {3, "kamennĂ˝ chrliÄŤ", "kamennĂ© chrliÄŤe", "kamennĂ©ho chrliÄŤe", "kamennĂ˝m chrliÄŤem"}, + {1, "каменная горгŃлья", "каменные горгŃльи", "каменнŃŃŽ горгŃлью", "каменной горгŃльей"}, + {0, "Steingargoyle", "Steingargoyles", "Steingargoyle", "Steingargoyle"}, + }}, + {0x33878aca, 0, { // ""Ancient Jewelry"" + {1, "StaroĹĽytna BiĹĽuteria", "StaroĹĽytna BiĹĽuteria", "StaroĹĽytnÄ… BiĹĽuteriÄ™", "StaroĹĽytnÄ… BiĹĽuteriÄ…"}, + {0/*MISSING*/ , "Ancient Jewelry"/*MISSING*/ , "Ancient Jewelry"/*MISSING*/ , "Ancient Jewelry"/*MISSING*/ , "Ancient Jewelry"}, + {3, "DávnĂ˝ šperk", "DávnĂ© šperky", "DávnĂ˝ šperk", "DávnĂ˝m šperkem"}, + {1, "Древняя драгоценноŃŃ‚ŃŚ", "Древние драгоценноŃти", "Древнюю драгоценноŃŃ‚ŃŚ", "Древней драгоценноŃŃ‚ŃŚŃŽ"}, + {1, "Antike Juwelen", "Antike Juwelen", "Antiken Juwelen", "Antiken Juwelen"}, + }}, + {0x338f38ab, 0, { // ""Rock Snake Tail"" + {3, "Ogon Węża", "Ogony Węża", "Ogon Węża", "Ogonem Węża"}, + {3, "Kaya Yılanı KuyruÄźu", "Kaya Yılanı Kuyrukları", "Kaya Yılan KuyruÄźunu", "Kaya Yılan KuyruÄźuyla"}, + {3, "Ocas KamennĂ©ho hada", "Ocasy KamennĂ˝ch hadĹŻ", "Ocas KamennĂ©ho hada", "Ocasem KamennĂ©ho hada"}, + {3, "ХвоŃŃ‚ змеи", "ХвоŃŃ‚Ń‹ змей", "ХвоŃŃ‚ змеи", "ХвоŃтом змеи"}, + {0, "Felsschlangenschweif", "Felsschlangenschweifs", "Felsschlangenschweif", "Felsschlangenschweif"}, + }}, + {0x34f98b1f, 0, { // ""Bonfire"" + {2, "Ognisko", "Ogniska", "Ognisko", "Ogniskiem"}, + {2, "Kamp AteĹźi", "Kamp AteĹźleri", "Kamp AteĹźini", "Kamp AteĹźiyle"}, + {2, "OhništÄ›", "OhništÄ›", "OhništÄ›", "OhništÄ›m"}, + {3, "КоŃŃ‚Ń‘Ń€", "КоŃтры", "КоŃŃ‚Ń‘Ń€", "КоŃтром"}, + {2, "Leuchtfeuer", "Leuchtfeuer", "Leuchtfeuer", "Leuchtfeuer"}, + }}, + {0x356918f6, 0, { // ""Living Fjord"" + {3, "Ĺ»ywy Fiord", "Ĺ»ywe Fiordy", "Ĺ»ywy Fiord", "w Ĺ»ywym Fiordzie"}, + {3, "YaĹźayan Fiyort", "YaĹźayan Fiyortlar", "YaĹźayan Fiyortu", "YaĹźayan Fiyortta"}, + {3, "Ĺ˝ivoucĂ­ fjord", "Ĺ˝ivoucĂ­ fjordy", "Ĺ˝ivoucĂ­ Fjord", "v Ĺ˝ivoucĂ­m Fjordu"}, + {3, "Живой фьорд", "Живые фьорды", "Живой фьорд", "в Живом фьорде"}, + {0, "Lebender Fjord", "Lebende Fjorde", "Lebender Fjord", "Lebender Fjord"}, + }}, + {0x36e98812, 0, { // ""palace wall"" + {1, "mur PaĹ‚acu", "mury PaĹ‚acu", "mur PaĹ‚acu", "murem PaĹ‚acu"}, + {1, "Saray Duvarı", "Saray Duvarları", "Saray Duvarını", "Saray Duvarı"}, + {1, "zeÄŹ paláce", "zdi paláce", "zeÄŹ paláce", "zeÄŹ paláce"}, + {1, "Ńтена дворца", "Ńтены дворца", "ŃŃ‚ĐµĐ˝Ń Đ´Đ˛ĐľŃ€Ń†Đ°", "Ńтеной дворца"}, + {1, "Palastwand", "Palastwände", "Palastwand", "Palastwand"}, + }}, + {0x3807f344, 0, { // ""Fire Shard"" + {3, "Okruch Ognia", "Okruchy Ognia", "Okruch Ognia", "Okruchem Ognia"}, + {0, "AteĹź Parçası", "AteĹź Parçaları", "AteĹź Parçasını", "AteĹź Parçasıyla"}, + {3, "Ăšlomek OhnÄ›", "Ăšlomky OhnÄ›", "Ăšlomek OhnÄ›", "Ăšlomkem OhnÄ›"}, + {3, "ĐžŃколок Огня", "ĐžŃколки Огня", "ĐžŃколок Огня", "ĐžŃколком Огня"}, + {1, "Feuerscherbe", "Feuerscherben", "Feuerscherbe", "Feuerscherbe"}, + }}, + {0x38384004, 0, { // ""Giant Fox"" + {3, "Wielki Lis", "Wielkie Lisy", "Wielkiego Lisa", "Wielkim Lisem"}, + {0/*MISSING*/ , "Giant Fox"/*MISSING*/ , "Giant Fox"/*MISSING*/ , "Giant Fox"/*MISSING*/ , "Giant Fox"}, + {1, "Obří liška", "Obří lišky", "Obří lišku", "Obří liškou"}, + {0, "Огромный лиŃ", "Огромные лиŃŃ‹", "Огромного лиŃĐ°", "Огромным лиŃом"}, + {0, "Riesenfuchs", "RiesenfĂĽchse", "Riesenfuchs", "Riesenfuchs"}, + }}, + {0x3ab53b1b, 0, { // ""Orb of Undeath"" + {1, "Sfera NieumarĹ‚ych", "Sfery NieumarĹ‚ych", "SferÄ™ NieumarĹ‚ych", "SferÄ… NieumarĹ‚ych"}, + {0/*MISSING*/ , "Orb of Undeath"/*MISSING*/ , "Orb of Undeath"/*MISSING*/ , "Orb of Undeath"/*MISSING*/ , "Orb of Undeath"}, + {1, "SfĂ©ra NemrtvĂ˝ch", "SfĂ©ry NemrtvĂ˝ch", "SfĂ©ru NemrtvĂ˝ch", "SfĂ©rou NemrtvĂ˝ch"}, + {1, "Сфера Нежити", "Сферы Нежити", "ĐˇŃ„ĐµŃ€Ń ĐťĐµĐ¶Đ¸Ń‚Đ¸", "Сферой Нежити"}, + {0, "Orb der Untoten", "Orbs der Untoten", "Orb der Untoten", "Orb der Untoten"}, + }}, + {0x3b4c9ee0, 0, { // ""weird rock"" + {2, "dziwna skaĹ‚a", "dziwne skaĹ‚y", "dziwnÄ… skaĹ‚Ä™", "dziwnÄ… skaĹ‚Ä…"}, + {2, "garip kaya", "garip kayalar", "garip kayayı", "garip kayayla"}, + {1, "podivná skála", "podivnĂ© skály", "podivnou skálu", "podivnou skálou"}, + {3, "Ńтранный камень", "Ńтранные камни", "Ńтранный камень", "Ńтранным камнем"}, + {0, "Seltsamer Stein", "Seltsame Steine", "Seltsamen Stein", "Seltsamen Stein"}, + }}, + {0x3bb978a5, 0, { // ""moat of Camelot"" + {1, "fosa Camelot", "fosy Camelot", "fosÄ™ Camelot", "fosÄ… Camelot"}, + {1, "Kamelot hendeÄźi", "Kamelot hendekleri", "Kamelot hendeÄźini", "Kamelot hendeÄźiyle"}, + {3, "vodnĂ­ příkop", "vodnĂ­ příkopy", "vodnĂ­ příkop", "vodnĂ­m příkopem"}, + {3, "ров Камелота", "рвы Камелота", "ров Камелота", "рвом Камелота"}, + {0, "Graben von Camelot", "Gräben von Camelot", "Graben von Camelot", "Graben von Camelot"}, + }}, + {0x3be3878f, 0, { // ""Thornless Rose"" + {1, "Róża bez KolcĂłw", "Róże bez KolcĂłw", "Różę bez KolcĂłw", "Różą bez KolcĂłw"}, + {0/*MISSING*/ , "Thornless Rose"/*MISSING*/ , "Thornless Rose"/*MISSING*/ , "Thornless Rose"/*MISSING*/ , "Thornless Rose"}, + {1, "RĹŻĹľe bez trnĹŻ", "RĹŻĹľe bez trnĹŻ", "RĹŻĹľi bez trnĹŻ", "Růží bez trnĹŻ"}, + {1, "роза без Ńипов", "розы без Ńипов", "Ń€ĐľĐ·Ń Đ±ĐµĐ· Ńипов", "розой без Ńипов"}, + {1, "Rose ohne Dornen", "Rosen ohne Dornen", "Rose ohne Dornen", "Rose ohne Dornen"}, + }}, + {0x3d400c71, 0, { // ""Thumper"" + {3, "Dudnik", "Dudniki", "Dudnik", "Dudnikiem"}, + {3, "GĂĽmleyen", "GĂĽmleyenler", "GĂĽmleyeni", "GĂĽmleyenle"}, + {3, "Tlouk", "Tlouky", "Tlouk", "Tloukem"}, + {3, "Тампер", "Тамперы", "Тампер", "Тампером"}, + {0, "Stampfer", "Stampfer", "Stampfer", "Stampfer"}, + }}, + {0x3dd9fb5f, 0, { // ""barrow"" + {3, "kurhan", "kurhany", "kurhan", "kurhanem"}, + {0/*MISSING*/ , "barrow"/*MISSING*/ , "barrow"/*MISSING*/ , "barrow"/*MISSING*/ , "barrow"}, + {1, "mohyla", "mohyly", "mohylu", "mohylou"}, + {3, "ĐşŃрган", "ĐşŃрганы", "ĐşŃрган", "ĐşŃрганом"}, + {3, "HĂĽgelgrab", "HĂĽgelgräber", "HĂĽgelgrab", "HĂĽgelgrab"}, + }}, + {0x3ec5a2f2, 0, { // ""Orb of Safety"" + {1, "Sfera BezpieczeĹ„stwa", "Sfery BezpieczeĹ„stwa", "SferÄ™ BezpieczeĹ„stwa", "SferÄ… BezpieczeĹ„stwa"}, + {1, "GĂĽvenlik KĂĽresi", "GĂĽvenlik KĂĽreleri", "GĂĽvenlik KĂĽresini", "GĂĽvenlik KĂĽresiyle"}, + {1, "SfĂ©ra BezpeÄŤnosti", "SfĂ©ry BezpeÄŤnosti", "SfĂ©ru BezpeÄŤnosti", "SfĂ©rou BezpeÄŤnosti"}, + {1, "Сфера БезопаŃноŃти", "Сферы БезопаŃноŃти", "ĐˇŃ„ĐµŃ€Ń Đ‘ĐµĐ·ĐľĐżĐ°ŃноŃти", "Сферой БезопаŃноŃти"}, + {0, "Orb der Geborgenheit", "Orbs der Geborgenheit", "Orb der Geborgenheit", "Orb der Geborgenheit"}, + }}, + {0x3ee3571b, 0, { // ""Dead Orb"" + {1, "Martwa Sfera", "Martwe Sfery", "MartwÄ… SferÄ™", "MartwÄ… SferÄ…"}, + {1, "Ă–lĂĽ KĂĽre", "Ă–lĂĽ KĂĽreler", "Ă–lĂĽ KĂĽreyle", "Ă–lĂĽ KĂĽreyi"}, + {1, "Mrtvá sfĂ©ra", "MrtvĂ© sfĂ©ry", "Mrtvou sfĂ©ru", "Mrtvou sfĂ©rou"}, + {1, "Мёртвая Ńфера", "Мёртвые Ńферы", "МёртвŃŃŽ ŃферŃ", "Мёртвой Ńферой"}, + {0, "toter Orb", "toten Orbs", "toten Orb", "toten Orb"}, + }}, + {0x3ee8eeb4, 0, { // ""Orb of Discord"" + {1, "Sfera Niezgody", "Sfery Niezgody", "SferÄ™ Niezgody", "SferÄ… Niezgody"}, + {1, "Ä°htilaf KĂĽresi", "Ä°htilaf KĂĽreleri", "Ä°htilaf KĂĽresini", "Ä°htilaf KĂĽresiyle"}, + {1, "SfĂ©ra Nesváru", "SfĂ©ry Nesváru", "SfĂ©ru Nesváru", "SfĂ©rou Nesváru"}, + {1, "Сфера Раздора", "Сферы Раздора", "ĐˇŃ„ĐµŃ€Ń Đ Đ°Đ·Đ´ĐľŃ€Đ°", "Сферой Раздора"}, + {0, "Orb des Zwiespalts", "Orbs des Zwiespalts", "Orb des Zwiespalts", "Orb des Zwiespalts"}, + }}, + {0x4065e362, 0, { // ""limestone wall"" + {1, "wapienna Ĺ›ciana", "wapienne Ĺ›ciany", "wapiennÄ… Ĺ›cianÄ™", "wapiennÄ… Ĺ›cianÄ…"}, + {1, "kireçtaşı duvar", "kireçtaşı duvarlar", "kireçtaşı duvarı", "kireçtaşı duvarla"}, + {1, "vápencová stÄ›na", "vápencovĂ© stÄ›ny", "vápencovou stÄ›nu", "vápencovou stÄ›nou"}, + {1, "извеŃтняковая Ńтена", "извеŃтняковые Ńтены", "извеŃтняковŃŃŽ ŃтенŃ", "извеŃтняковой Ńтеной"}, + {1, "Kalkstein Wand", "Kalkstein Wände", "Kalkstein Wand", "Kalkstein Wand"}, + }}, + {0x40e4a983, 0, { // ""Fulgurite"" + {3, "Fulguryt", "Fulguryty", "Fulguryt", "Fulgurytem"}, + {0/*MISSING*/ , "Fulgurite"/*MISSING*/ , "Fulgurite"/*MISSING*/ , "Fulgurite"/*MISSING*/ , "Fulgurite"}, + {3, "Fulgurit", "Fulgurity", "Fulgurit", "Fulguritem"}, + {3, "ФŃльгŃрит", "ФŃльгŃриты", "ФŃльгŃрит", "ФŃльгŃритом"}, + {0, "Fulgurit", "Fulgurite", "Fulgurit", "Fulgurit"}, + }}, + {0x418c6203, 0, { // ""Baby Tortoise"" + {0, "Żółwik", "Żółwiki", "Żółwika", "Żółwikiem"}, + {0/*MISSING*/ , "Baby Tortoise"/*MISSING*/ , "Baby Tortoise"/*MISSING*/ , "Baby Tortoise"/*MISSING*/ , "Baby Tortoise"}, + {1, "Ĺ˝elviÄŤka", "Ĺ˝elviÄŤky", "Ĺ˝elviÄŤku", "Ĺ˝elviÄŤkou"}, + {1, "ЧерепаŃка", "ЧерепаŃки", "ЧерепаŃĐşŃ", "ЧерепаŃкой"}, + {0, "Babyschildkröte", "Babyschildkröten", "Babyschildkröte", "Babyschildkröte"}, + }}, + {0x4290380f, 0, { // ""minefield"" + {2, "pole minowe", "pola minowe", "pole minowe", "polem minowym"}, + {2, "mayıntarlası", "mayıntarlaları", "mayıntarlasını", "mayıntarlasıyla"}, + {2, "minovĂ© pole", "minová pole", "minovĂ© pole", "minovĂ˝m polem"}, + {2, "минное поле", "минные поля", "минное поле", "на минном поле"}, + {1, "Mine?", "Minen?", "Mine?", "Mine?"}, + }}, + {0x43dcc29c, 0, { // ""rubble"" + {3, "gruz", "gruzy", "gruz", "gruzem"}, + {3, "gruz", "gruzy", "gruz", "gruzem"}, + {1, "sutiny", "sutiny", "sutiny", "sutinami"}, + {3, "щебень", "щебни", "щебень", "щебнем"}, + {2, "Geröll", "Geröll", "Geröll", "Geröll"}, + }}, + {0x4427f2e9, 0, { // ""red slime"" + {1, "czerwona maĹş", "czerwone mazie", "czerwonÄ… maĹş", "czerwonÄ… maziÄ…"}, + {1, "Kırmızı Balçık", "Kırmızı Balçıklar", "Kırmızı Balçığı", "Kırmızı Balçıkta"}, + {3, "ÄŤervenĂ˝ sliz", "ÄŤervenĂ© slizy", "ÄŤervenĂ˝ sliz", "ÄŤervenĂ˝m slizem"}, + {1, "краŃная Ńлизь", "краŃная Ńлизь", "краŃĐ˝ŃŃŽ Ńлизь", "краŃной Ńлизью"}, + {0, "Roter Schleim", "Roten Schleime", "Roten Schleim", "Roten Schleim"}, + }}, + {0x4435c8e0, 0, { // ""Orb of Horns"" + {1, "Sfera RogĂłw", "Sfery RogĂłw", "SferÄ™ RogĂłw", "SferÄ… RogĂłw"}, + {0/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"}, + {1, "SfĂ©ra RohĹŻ", "SfĂ©ry RohĹŻ", "SfĂ©ru RohĹŻ", "SfĂ©rou RohĹŻ"}, + {1, "Сфера Рогов", "Сферы Рогов", "ĐˇŃ„ĐµŃ€Ń Đ ĐľĐłĐľĐ˛", "Сферой Рогов"}, + {0/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"/*MISSING*/ , "Orb of Horns"}, + }}, + {0x44c19f73, 2, { // ""Crossroads"" + {2, "SkrzyĹĽowanie", "SkrzyĹĽowanie", "SkrzyĹĽowanie", "na SkrzyĹĽowaniu"}, + {2, "Arayollar", "Arayollar", "Arayolları", "Arayollarda"}, + {1, "KĹ™iĹľovatka", "KĹ™iĹľovatky", "KĹ™iĹľovatku", "na KĹ™iĹľovatce"}, + {3, "ПерекрёŃток", "ПерекрёŃтки", "ПерекрёŃток", "на ПерекрёŃтке"}, + {1, "Kreuzungen", "Kreuzungen", "auf den Kreuzungen", "auf den Kreuzungen"}, + }}, + {0x45a84b21, 0, { // ""Gadfly"" + {0, "Giez", "Gzy", "Gza", "Gzem"}, + {0/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"}, + {0, "Ovád", "Ovádi", "Ováda", "Ovádem"}, + {0, "Овод", "Оводы", "Овода", "Оводом"}, + {0/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"/*MISSING*/ , "Gadfly"}, + }}, + {0x45f826dd, 0, { // ""Orb of Yendor"" + {1, "Sfera Yendoru", "Sfery Yendoru", "SferÄ™ Yendoru", "SferÄ… Yendoru"}, + {1, "Yendor KĂĽresi", "Yendor KĂĽreleri", "Yendor KĂĽresini", "Yendor KĂĽresiyle"}, + {1, "Yendorská sfĂ©ra", "YendorskĂ© sfĂ©ry", "Yendorskou sfĂ©ru", "Yendorskou sfĂ©rou"}, + {1, "Сфера Йендора", "Сферы Йендора", "ĐˇŃ„ĐµŃ€Ń Đ™ĐµĐ˝Đ´ĐľŃ€Đ°", "Сферой Йендора"}, + {0, "Orb des Yendor", "Orbs des Yendor", "Orb des Yendor", "Orb des Yendor"}, + }}, + {0x46dfcc8f, 0, { // ""Orb of the Warp"" + {1, "Sfera Zakrzywienia", "Sfery Zakrzywienia", "SferÄ™ Zakrzywienia", "SferÄ… Zakrzywienia"}, + {0/*MISSING*/ , "Orb of the Warp"/*MISSING*/ , "Orb of the Warp"/*MISSING*/ , "Orb of the Warp"/*MISSING*/ , "Orb of the Warp"}, + {1, "SfĂ©ra PokĹ™ivenĂ­", "SfĂ©ry PokĹ™ivenĂ­", "SfĂ©ru PokĹ™ivenĂ­", "SfĂ©rou PokĹ™ivenĂ­"}, + {1, "Сфера ĐŃкривления", "Сферы ĐŃкривления", "ĐˇŃ„ĐµŃ€Ń ĐŃкривления", "Сферой ĐŃкривления"}, + {0, "Orb der Verzerrung", "Orbs der Verzerrung", "Orb der Verzerrung", "Orb der Verzerrung"}, + }}, + {0x489faba1, 0, { // ""Princess"" + {1, "Księżniczka", "Księżniczki", "KsiężniczkÄ™", "KsiężniczkÄ…"}, + {1, "Prenses", "Prensesi", "Prensesler", "Prensesle"}, + {1, "Princezna", "Princezny", "Princeznu", "Princeznou"}, + {1, "ПринцеŃŃĐ°", "ПринцеŃŃŃ‹", "ПринцеŃŃŃ", "ПринцеŃŃой"}, + {1, "Prinzessin", "Prinzessinnen", "Prinzessin", "Prinzessin"}, + }}, + {0x48f159ba, 0, { // ""Active Ivy"" + {0, "Aktywny Bluszcz", "Aktywne Bluszcze", "Aktywny Bluszcz", "Aktywnym Bluszczem"}, + {0, "Canlı Sarmaşık", "Canlı Sarmaşıklar", "Canlı Sarmaşığı", "Canlı Sarmaşığıyla"}, + {3, "AktivnĂ­ bĹ™eÄŤĹĄan", "AktivnĂ­ bĹ™eÄŤĹĄany", "AktivnĂ­ bĹ™eÄŤĹĄan", "AktivnĂ­m bĹ™eÄŤĹĄanem"}, + {3, "Đктивный плющ", "Đктивные плющи", "Đктивный плющ", "Đктивным плющом"}, + {0, "Lebender Efeu", "Lebende Efeue", "Lebenden Efeu", "Lebenden Efeu"}, + }}, + {0x49886610, 0, { // ""dead floor"" + {1, "martwa ziemia", "martwe ziemie", "martwÄ… ziemiÄ™", "martwÄ… ziemiÄ…"}, + {1, "ölĂĽ zemin", "ölĂĽ zeminler", "ölĂĽ zemini", "ölĂĽ zeminde"}, + {1, "mrtvá podlaha", "mrtvĂ© podlahy", "mrtvou podlahu", "mrtvou podlahou"}, + {3, "мёртвый пол", "мёртвые полы", "мёртвый пол", "мёртвым полом"}, + {1, "toter Boden", "tote Böden", "toten Boden", "toten Boden"}, + }}, + {0x4ad32242, 0, { // ""Orb of the Dragon"" + {1, "Sfera Smoka", "Sfery Smoka", "SferÄ™ Smoka", "SferÄ… Smoka"}, + {1, "Ejderha KĂĽresi", "Ejderha KĂĽreleri", "Ejderha KĂĽresini", "Ejderha KĂĽresiyle"}, + {1, "SfĂ©ra Draka", "SfĂ©ry Draka", "SfĂ©ru Draka", "SfĂ©rou Draka"}, + {1, "Сфера Дракона", "Сферы Дракона", "ĐˇŃ„ĐµŃ€Ń Đ”Ń€Đ°ĐşĐľĐ˝Đ°", "Сферой Дракона"}, + {0, "Orb des Drachen", "Orbs des Drachen", "Orb des Drachen", "Orb des Drachen"}, + }}, + {0x4ae2d4e6, 0, { // ""Speed Witch"" + {1, "Czarownica Szybka", "Czarownice Szybkie", "CzarownicÄ™ SzybkÄ…", "CzarownicÄ… SzybkÄ…"}, + {1, "Hız Cadısı", "Hız Cadıları", "Hız Cadısını", "Hız Cadısıyla"}, + {1, "ÄŚarodÄ›jnice Rychlosti", "ÄŚarodÄ›jnice Rychlosti", "ÄŚarodÄ›jnici Rychlosti", "ÄŚarodÄ›jnicĂ­ Rychlosti"}, + {1, "Ведьма ŃкороŃти", "Ведьмы ŃкороŃти", "Đ’ĐµĐ´ŃŚĐĽŃ ŃкороŃти", "Ведьмой ŃкороŃти"}, + {1, "Geschwindigkeitshexe", "Geschwindigkeitshexen", "Geschwindigkeitshexe", "Geschwindigkeitshexe"}, + }}, + {0x4badb8db, 0, { // ""fresh grave"" + {3, "Ĺ›wieĹĽy grĂłb", "Ĺ›wieĹĽe groby", "Ĺ›wieĹĽy grĂłb", "Ĺ›wieĹĽym grobem"}, + {3, "Taze Mezar", "Taze Mezarlar", "Taze Mezarı", "Taze Mezarda"}, + {3, "ÄŤerstvĂ˝ hrob", "ÄŤerstvĂ© hroby", "ÄŤerstvĂ˝ hrob", "ÄŤerstvĂ˝m hrobem"}, + {1, "Ńвежая могила", "Ńвежие могилы", "ŃвежŃŃŽ могилŃ", "Ńвежей могилой"}, + {0, "Frische Grab", "Frische Gräber", "Frisches Grab", "Frisches Grab"}, + }}, + {0x4c77a976, 0, { // ""Orb of Stunning"" + {1, "Sfera OgĹ‚uszania", "Sfery OgĹ‚uszania", "SferÄ™ OgĹ‚uszania", "SferÄ… OgĹ‚uszania"}, + {1, "Sersemletme KĂĽresi", "Sersemletme KĂĽreleri", "Sersemletme KĂĽresini", "Sersemletme KĂĽresiyle"}, + {1, "SfĂ©ra OmráčenĂ­", "SfĂ©ry OmráčenĂ­", "SfĂ©ru OmráčenĂ­", "SfĂ©rou OmráčenĂ­"}, + {1, "Сфера ОглŃŃения", "Сферы ОглŃŃения", "ĐˇŃ„ĐµŃ€Ń ĐžĐłĐ»ŃŃения", "Сферой ОглŃŃения"}, + {0, "Orb der Betäubung", "Orbs der Betäubung", "Orb der Betäubung", "Orb der Betäubung"}, + }}, + {0x4c909cae, 0, { // ""Orb of Freedom"" + {1, "Sfera WolnoĹ›ci", "Sfery WolnoĹ›ci", "SferÄ™ WolnoĹ›ci", "SferÄ… WolnoĹ›ci"}, + {0/*MISSING*/ , "Orb of Freedom"/*MISSING*/ , "Orb of Freedom"/*MISSING*/ , "Orb of Freedom"/*MISSING*/ , "Orb of Freedom"}, + {1, "SfĂ©ra Svobody", "SfĂ©ry Svobody", "SfĂ©ru Svobody", "SfĂ©rou Svobody"}, + {1, "Сфера Свободы", "Сферы Свободы", "ĐˇŃ„ĐµŃ€Ń ĐˇĐ˛ĐľĐ±ĐľĐ´Ń‹", "Сферой Свободы"}, + {0, "Orb der Freiheit", "Orbs der Freiheit", "Orb der Freiheit", "Orb der Freiheit"}, + }}, + {0x4df3f5d0, 0, { // ""Cultist"" + {0, "Kultysta", "KultyĹ›ci", "KultystÄ™", "KultystÄ…"}, + {0, "MĂĽrit", "MĂĽritler", "MĂĽridi", "MĂĽritle"}, + {0, "Kultista", "KultistĂ©", "Kultistu", "Kultistou"}, + {0, "ĐšŃльтиŃŃ‚", "ĐšŃльтиŃŃ‚Ń‹", "ĐšŃльтиŃŃ‚Đ°", "ĐšŃльтиŃтом"}, + {0, "Kultanhänger", "Kultanhänger", "Kultanhänger", "Kultanhänger"}, + }}, + {0x4fc909c3, 0, { // ""no monster"" + {3, "brak potwora", "braki potwora", "braku potwora", "brakiem potwora"}, + {0/*MISSING*/ , "no monster"/*MISSING*/ , "no monster"/*MISSING*/ , "no monster"/*MISSING*/ , "no monster"}, + {0, "žádnĂ˝ netvor", "žádnĂ­ netvoĹ™i", "žádnĂ©ho netvora", "žádnĂ˝m netvorem"}, + {3, "нет монŃтра", "нет монŃтра", "нет монŃтра", "нет монŃтра"}, + {2, "kein Monster", "keine Monster", "kein Monster", "kein Monster"}, + }}, + {0x4fd9547e, 0, { // ""big statue of Cthulhu"" + {3, "pomnik Cthulhu", "pomniki Cthulhu", "pomnik Cthulhu", "pomnikiem Cthulhu"}, + {3, "Cthulhu'nun Putu", "Cthulhu'nun Putları", "Cthulhu'nun Putunu", "Cthulhu'nun Putuyla"}, + {1, "Cthulhuova socha", "Cthulhuovy sochy", "Cthulhuovu sochu", "Cthulhuovou sochou"}, + {3, "памятник КтŃлхŃ", "памятники КтŃлхŃ", "памятник КтŃлхŃ", "памятником КтŃлхŃ"}, + {1, "groĂźe Statue des Cthulhu", "groĂźen Statuen des Cthulhu", "groĂźen Statue des Cthulhu", "groĂźen Statue des Cthulhu"}, + }}, + {0x4fe64013, 0, { // ""Mutant Sapling"" + {1, "Zmutowana Sadzonka", "Zmutowane Sadzonki", "ZmutowanÄ… SadzonkÄ™", "ZmutowanÄ… SadzonkÄ…"}, + {1, "Mutant Fidan", "Mutant Fidanlar", "Mutant Fidanı", "Mutant Fidanla"}, + {3, "MutantnĂ­ semenáček", "MutantnĂ­ semenáčky", "MutantnĂ­ semenáček", "MutantnĂ­m semenáčkem"}, + {3, "Саженец-ĐĽŃтант", "Саженцы-ĐĽŃтанты", "Саженец-ĐĽŃтант", "Саженцем-ĐĽŃтантом"}, + {0, "Mutierter Sätzling", "Mutierte Sätzlinge", "Mutierten Sätzling", "Mutierten Sätzling"}, + }}, + {0x5212cc51, 0, { // ""sandstone wall"" + {1, "piaskowa Ĺ›ciana", "piaskowe Ĺ›ciany", "piaskowÄ… scianÄ™", "piaskowÄ… Ĺ›cianÄ…"}, + {1, "kumtaşı duvarı", "kumtaşı duvarları", "kumtaşı duvarını", "kumtaşı duvarla"}, + {1, "pĂ­skovcová zeÄŹ", "pĂ­skovcovĂ© zdi", "pĂ­skovcovou zeÄŹ", "pĂ­skovcovou zdĂ­"}, + {1, "пеŃчаниковая Ńтена", "пеŃчаниковые Ńтены", "пеŃчаниковŃŃŽ ŃтенŃ", "пеŃчаниковой Ńтеной"}, + {1, "Sandsteinwand", "Sandsteinwände", "Sandsteinwand", "Sandsteinwand"}, + }}, + {0x521ec5ac, 0, { // ""Necromancer's Totem"" + {3, "Totem Nekromanty", "Totemy Nekromanty", "Totem Nekromanty", "Totemem Nekromanty"}, + {3, "Ă–lüçağıran Totemi", "Ă–lüçağıran Totemleri", "Ă–lüçağıran Totemini", "Ă–lüçağıran Totemiyle"}, + {3, "NekromancerĹŻv totem", "Nekromancerovy totemy", "NekromancerĹŻv totem", "NekromancerovĂ˝m totemem"}, + {3, "Тотем некроманта", "Тотемы некроманта", "Тотем некроманта", "Тотемом некроманта"}, + {2, "Totenbeschwörer-Totem", "Totenbeschwörer-Totems", "Totenbeschwörer-Totem", "Totenbeschwörer-Totem"}, + }}, + {0x52e162a1, 0, { // ""Ratling Avenger"" + {0, "Szczurak-MĹ›ciciel", "Szczuraki-MĹ›ciciele", "Szczuraka-MĹ›ciciela", "Szczurakiem-MĹ›cicielem"}, + {0/*MISSING*/ , "Ratling Avenger"/*MISSING*/ , "Ratling Avenger"/*MISSING*/ , "Ratling Avenger"/*MISSING*/ , "Ratling Avenger"}, + {0, "Krysák mstitel", "Krysáci mstitelĂ©", "Krysáka mstitele", "Krysákem mstitelem"}, + {0, "КрыŃолюд-ĐĽŃтитель", "КрыŃолюди-ĐĽŃтители", "КрыŃолюда-ĐĽŃтителя", "КрыŃолюдом-ĐĽŃтителем"}, + {0, "Rattenmenschen-Rächer", "Rattenmenschen-Rächer", "Rattenmenschen-Rächer", "Rattenmenschen-Rächer"}, + }}, + {0x532d17d5, 0, { // ""Bomberbird Egg"" + {2, "Jajo Bombardiera", "Jaja Bombardiera", "Jajo Bombardiera", "Jajem Bombardiera"}, + {2, "BombacıkuĹź Yumurtası", "BombacıkuĹź Yumurtaları", "BombacıkuĹź Yumurtasını", "BombacıkuĹź Yumurtasıyla"}, + {2, "Vejce Bombarďáka", "Vejce Bombarďáka", "Vejce Bombarďáka", "Vejcem Bombarďáka"}, + {2, "Яйцо бомбардира", "Яйца бомбардира", "Яйцо бомбардира", "Яйцом бомбардира"}, + {2, "Bombenvogelei", "Bombenvogeleier", "Bombenvogelei", "Bombenvogelei"}, + }}, + {0x54279e12, 0, { // ""Ivory Tower"" + {1, "WieĹĽa z KoĹ›ci SĹ‚oniowej", "WieĹĽe z KoĹ›ci SĹ‚oniowej", "WieĹĽÄ… z KoĹ›ci SĹ‚oniowej", "na WieĹĽy z KoĹ›ci SĹ‚oniowej"}, + {1, "FildiĹźi Kule", "FildiĹźi Kuleler", "FildiĹźi Kuleyi", "FildiĹźi Kulede"}, + {1, "Věž ze slonovĂ© kosti", "Věže ze slonovĂ© kosti", "Věž ze slonovĂ© kosti", "ve Věži ze slonovĂ© kosti"}, + {1, "Đ‘Đ°Ńня из Ńлоновой коŃти", "Đ‘Đ°Ńни из Ńлоновой коŃти", "Đ‘Đ°Ńню из Ńлоновой коŃти", "в Đ‘Đ°Ńне из Ńлоновой коŃти"}, + {0, "Elfenbeinturm", "ElfenbeintĂĽrme", "Elfenbeinturm", "Elfenbeinturm"}, + }}, + {0x55dea6bd, 0, { // ""Orb of Aether"" + {1, "Sfera Eteru", "Sfery Eteru", "SferÄ™ Eteru", "SferÄ… Eteru"}, + {1, "Eter KĂĽresi", "Eter KĂĽreleri", "Eter KĂĽresini", "Eter KĂĽresiyle"}, + {1, "SfĂ©ra Éteru", "SfĂ©ry Éteru", "SfĂ©ru Éteru", "SfĂ©rou Éteru"}, + {1, "Сфера Эфира", "Сферы Эфира", "ĐˇŃ„ĐµŃ€Ń Đ­Ń„Đ¸Ń€Đ°", "Сферой Эфира"}, + {0, "Orb des Ă„thers", "Orbs des Ă„thers", "Orb des Ă„thers", "Orb des Ă„thers"}, + }}, + {0x55eafd16, 0, { // ""Statue of Cthulhu"" + {1, "Statuetka", "Statuetki", "StatuetkÄ™", "StatuetkÄ…"}, + {1, "Cthulhu Heykeli", "Cthulhu Heykelleri", "Cthulhu Heykelini", "Cthulhu Heykeliyle"}, + {1, "Cthulhuova soška", "Cthulhuovy sošky", "Cthulhuovu sošku", "Cthulhuovou soškou"}, + {1, "СтатŃŃŹ КтŃлхŃ", "СтатŃи КтŃлхŃ", "СтатŃŃŽ КтŃлхŃ", "СтатŃей КтŃлхŃ"}, + {1, "Cthulhu Statue", "Cthulhu Statuen", "Cthulhu Statue", "Cthulhu Statue"}, + }}, + {0x56dcb9b1, 0, { // ""Tentacle W"" + {1, "Macka W", "Macki W", "MackÄ™ W", "MackÄ… W"}, + {0, "Dokunaç W", "Dokunaçlar W", "Dokunacı W", "Dokunaçla W"}, + {2, "Chapadlo W", "Chapadla W", "Chapadlo W", "Chapadlem W"}, + {2, "Đ©Ńпальце W", "Đ©Ńпальца W", "Đ©Ńпальце W", "Đ©Ńпальцем W"}, + {0, "Tentakel W", "Tentakel W", "Tentakel W", "Tentakel W"}, + }}, + {0x576cd2d8, 0, { // ""temporary bridge"" + {3, "tymczasowy most", "tymczasowe mosty", "tymczasowy most", "tymczasowym mostem"}, + {3, "geçici köprĂĽ", "geçici köprĂĽler", "geçici köprĂĽyĂĽ", "geçici köprĂĽyle"}, + {3, "doÄŤasnĂ˝ most", "doÄŤasnĂ© mosty", "doÄŤasnĂ˝ most", "doÄŤasnĂ˝m mostem"}, + {3, "временный ĐĽĐľŃŃ‚", "временные ĐĽĐľŃŃ‚Ń‹", "временный ĐĽĐľŃŃ‚", "временным ĐĽĐľŃтом"}, + {1, "temporäre BrĂĽcke", "temporäre BrĂĽcken", "temporäre BrĂĽcke", "temporäre BrĂĽcke"}, + }}, + {0x591a8afe, 0, { // ""Rock Troll"" + {0, "Skalny Troll", "Skalne Trolle", "Skalnego Trolla", "Skalnym Trollem"}, + {0, "Kaya TrolĂĽ", "Kaya Trolleri", "Kaya TrolĂĽnĂĽ", "Kaya TrolĂĽyle"}, + {0, "Ĺ utroll", "Ĺ utrollovĂ©", "Ĺ utrolla", "Ĺ utrollem"}, + {0, "Горный тролль", "Горные тролли", "Горного Тролля", "Горным троллем"}, + {0, "Steintroll", "Steintrolle", "Steintroll", "Steintroll"}, + }}, + {0x5b31dfeb, 0, { // ""Orb of the Frog"" + {1, "Sfera Ĺ»aby", "Sfery Ĺ»aby", "SferÄ™ Ĺ»aby", "SferÄ… Ĺ»aby"}, + {1, "KurbaÄźa KĂĽresi", "KurbaÄźa KĂĽreleri", "KurbaÄźa KĂĽresini", "KurbaÄźa KĂĽresiyle"}, + {1, "SfĂ©ra Žáby", "SfĂ©ry Žáby", "SfĂ©ru Žáby", "SfĂ©rou Žáby"}, + {1, "Сфера Жабы", "Сферы Жабы", "ĐˇŃ„ĐµŃ€Ń Đ–Đ°Đ±Ń‹", "Сферой Жабы"}, + {0, "Orb des Frosches", "Orbs des Frosches", "Orb des Frosches", "Orb des Frosches"}, + }}, + {0x5b8f4cbc, 0, { // ""Emerald"" + {3, "Szmaragd", "Szmaragdy", "Szmaragd", "Szmaragdem"}, + {3, "ZĂĽmrĂĽt", "ZĂĽmrĂĽtler", "ZĂĽmrĂĽtĂĽ", "ZĂĽmrĂĽtle"}, + {3, "Smaragd", "Smaragdy", "Smaragd", "Smaragdem"}, + {3, "ĐĐ·ŃĐĽŃ€ŃĐ´", "ĐĐ·ŃĐĽŃ€ŃĐ´Ń‹", "ĐĐ·ŃĐĽŃ€ŃĐ´", "ĐĐ·ŃĐĽŃ€Ńдом"}, + {0, "Smaragd", "Smaragde", "Smaragd", "Smaragd"}, + }}, + {0x5b929d56, 0, { // ""crystal cabinet"" + {1, "krysztaĹ‚owa gablota", "krysztaĹ‚owe gabloty", "krysztaĹ‚owÄ… gablotÄ™", "krysztaĹ‚owÄ… gablotÄ…"}, + {1, "Kristal Kabin", "Kristal Kabinler", "Kristal Kabini", "Kristal Kabinle"}, + {1, "kĹ™išťálová vitrĂ­na", "kĹ™išťálovĂ© vitrĂ­ny", "kĹ™išťálovou vitrĂ­nu", "kĹ™išťálovou vitrĂ­nou"}, + {3, "криŃтальный кабинет", "криŃтальные кабинеты", "криŃтальный кабинет", "криŃтальным кабинетом"}, + {1, "Kristallvitrine", "Kristallvitrinen", "Kristallvitrine", "Kristallvitrine"}, + }}, + {0x5c708ba6, 0, { // ""Rose Lord"" + {0, "Różany Pan", "Różani Panowie", "Różanego Pana", "Różanym Panem"}, + {0/*MISSING*/ , "Rose Lord"/*MISSING*/ , "Rose Lord"/*MISSING*/ , "Rose Lord"/*MISSING*/ , "Rose Lord"}, + {1, "RĹŻĹľovĂ˝ pán", "RúžovĂ­ pánovĂ©", "RĹŻĹľovĂ©ho pána", "RĹŻĹľovĂ˝m pánem"}, + {0, "Розовый лорд", "Розовые лорды", "Розового лорда", "Розовым лордом"}, + {0, "Rosenherr", "Rosenherren", "Rosenherr", "Rosenherr"}, + }}, + {0x5e748a12, 0, { // ""Gargoyle"" + {0, "Rzygacz", "Rzygacze", "Rzygacza", "Rzygaczem"}, + {0, "Çörten", "Çörtenler", "Çörteni", "Çörtenle"}, + {3, "ChrliÄŤ", "ChrliÄŤe", "ChrliÄŤ", "ChrliÄŤem"}, + {1, "ГоргŃлья", "ГоргŃльи", "ГоргŃлью", "ГоргŃльей"}, + {0, "Gargoyle", "Gargoyles", "Gargoyle", "Gargoyle"}, + }}, + {0x5ee2290b, 0, { // ""platform"" + {1, "platforma", "platformy", "platformÄ™", "platformÄ…"}, + {0/*MISSING*/ , "platform"/*MISSING*/ , "platform"/*MISSING*/ , "platform"/*MISSING*/ , "platform"}, + {1, "plošinka", "plošinky", "plošinku", "plošinkou"}, + {1, "платформа", "платформы", "платформŃ", "платформой"}, + {1, "Plattform", "Plattformen", "Plattform", "Plattform"}, + }}, + {0x5f9e644d, 0, { // ""Jungle"" + {1, "DĹĽungla", "DĹĽungla", "DĹĽunglÄ™", "w DĹĽungli"}, + {1, "VahĹźi Orman", "VahĹźi Ormanlar", "VahĹźi Ormanı", "VahĹźi Ormanda"}, + {1, "DĹľungle", "DĹľungle", "DĹľungli", "v dĹľungli"}, + {2, "ДжŃнгли", "ДжŃнгли", "ДжŃнгли", "в ДжŃнглях"}, + {0, "Dschungel", "Dschungel", "im Dschungel", "im Dschungel"}, + }}, + {0x60737bbc, 0, { // ""Winter Witch"" + {1, "Czarownica Zimy", "Czarownice Zimy", "CzarownicÄ™ Zimy", "CzarownicÄ… Zimy"}, + {1, "Kış Cadısı", "Kış Cadıları", "Kış Cadısını", "Kış Cadısıyla"}, + {1, "ÄŚarodÄ›jnice Zimy", "ÄŚarodÄ›jnice Zimy", "ÄŚarodÄ›jnici Zimy", "ÄŚarodÄ›jnicĂ­ Zimy"}, + {1, "Ведьма зимы", "Ведьмы зимы", "Đ’ĐµĐ´ŃŚĐĽŃ Đ·Đ¸ĐĽŃ‹", "Ведьмой зимы"}, + {1, "Frosthexe", "Frosthexen", "Frosthexe", "Frosthexe"}, + }}, + {0x60ea65ce, 0, { // ""Reptile bridge"" + {3, "Jaszczurzy most", "Jaszczurze mosty", "Jaszczurzy most", "Jaszczurzym mostem"}, + {0/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"}, + {3, "JeštÄ›rÄŤĂ­ most", "JeštÄ›rÄŤĂ­ mosty", "JeštÄ›rÄŤĂ­ most", "JeštÄ›rÄŤĂ­m mostem"}, + {3, "Ящеричный ĐĽĐľŃŃ‚", "Ящеричные ĐĽĐľŃŃ‚Ń‹", "Ящеричный ĐĽĐľŃŃ‚", "Ящеричным ĐĽĐľŃтом"}, + {0/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"/*MISSING*/ , "Reptile bridge"}, + }}, + {0x63e60e0f, 0, { // ""Emerald Mine"" + {1, "Kopalnia SzmaragdĂłw", "Kopalnia SzmaragdĂłw", "KopalniÄ™ SzmaragdĂłw", "w Kopalni SzmaragdĂłw"}, + {1, "ZĂĽmrĂĽt Madeni", "ZĂĽmrĂĽt Madenleri", "ZĂĽmrĂĽt Madenini", "ZĂĽmrĂĽt Madeninde"}, + {3, "SmaragdovĂ˝ dĹŻl", "SmaragdovĂ© doly", "SmaragdovĂ˝ dĹŻl", "ve SmaragdovĂ©m dole"}, + {1, "ĐĐ·ŃĐĽŃ€Ńдная ŃĐ°Ń…Ń‚Đ°", "ĐĐ·ŃĐĽŃ€Ńдные ŃĐ°Ń…Ń‚Ń‹", "ĐĐ·ŃĐĽŃ€ŃĐ´Đ˝ŃŃŽ ŃĐ°Ń…Ń‚Ń", "в ĐĐ·ŃĐĽŃ€Ńдной Ńахте"}, + {1, "Smaragdmine", "Smaragdminen", "in der Smaragdmine", "in der Smaragdmine"}, + }}, + {0x647840a5, 0, { // ""Fireball"" + {1, "Ognista Kula", "Ogniste Kule", "OgnistÄ… KulÄ™", "OgnistÄ… KulÄ…"}, + {1, "AteĹź Topu", "AteĹź Topları", "AteĹź Topunu", "AteĹź Topuyla"}, + {1, "Ohnivá koule", "OhnivĂ© koule", "Ohnivou kouli", "Ohnivou koulĂ­"}, + {3, "Огненный Шар", "Огненные Шары", "Огненный Шар", "Огненным Шаром"}, + {0, "Feuerball", "Feuerbälle", "Feuerball", "Feuerball"}, + }}, + {0x64ac7100, 0, { // ""Earth Shard"" + {3, "Okruch Ziemi", "Okruchy Ziemi", "Okruch Ziemi", "Okruchem Ziemi"}, + {0, "Toprak Parçası", "Toprak Parçaları", "Toprak Parçasını", "Toprak Parçasıyla"}, + {3, "Ăšlomek ZemÄ›", "Ăšlomky ZemÄ›", "Ăšlomek ZemÄ›", "Ăšlomkem ZemÄ›"}, + {3, "ĐžŃколок Земли", "ĐžŃколки Земли", "ĐžŃколок Земли", "ĐžŃколком Земли"}, + {1, "Erdscherbe", "Erdscherben", "Erdscherbe", "Erdscherbe"}, + }}, + {0x652bd1e5, 0, { // ""Caribbean"" + {2, "Karaiby", "Morze Karaibskie", "KaraibĂłw", "na Karaibach"}, + {0, "Karayipler", "Karayip", "Karayipleri", "Karayiplerde"}, + {0, "Karibik", "Karibiky", "Karibuku", "v Karibiku"}, + {0, "Карибы", "Карибы", "Карибы", "на Карибах"}, + {1, "Karibik", "Karibiken", "in der Karibik", "in der Karibik"}, + }}, + {0x654fc32d, 0, { // ""partial fire"" + {0, "częściowy ogieĹ„", "częściowe ognie", "częściowy ogieĹ„", "częściowym ogniem"}, + {0, "kısmĂ® ateĹź", "kısmĂ® ateĹźler", "kısmĂ® ateĹźi", "kısmĂ® ateĹźle"}, + {0, "částeÄŤnĂ˝ oheĹ", "částeÄŤnĂ© ohnÄ›", "částeÄŤnĂ˝ oheĹ", "částeÄŤnĂ˝m ohnÄ›m"}, + {3, "чаŃтичный огонь", "чаŃтичные огни", "чаŃтичный огонь", "чаŃтичным огнём"}, + {2, "partielles Feuer", "partielle Feuer", "partielle Feuer", "partielle Feuer"}, + }}, + {0x6578b7c3, 0, { // ""closing plate"" + {1, "zamykajÄ…ca pĹ‚yta", "zamykajÄ…ce pĹ‚yty", "zamykajÄ…cÄ… pĹ‚ytÄ™", "zamykajÄ…cÄ… pĹ‚ytÄ…"}, + {1, "kapatma levhası", "kapatma levhaları", "kapatma levhasını", "kapatma levhasıyla"}, + {1, "zavĂ­racĂ­ deska", "zavĂ­racĂ­ desky", "zavĂ­racĂ­ desku", "zavĂ­racĂ­ deskou"}, + {1, "закрывающая плита", "закрывающие плиты", "закрывающŃŃŽ плитŃ", "закрывающей плитой"}, + {0, "SchlieĂźmechanismus", "SchlieĂźmechanismen", "SchlieĂźmechanismus", "SchlieĂźmechanismus"}, + }}, + {0x65eeb55f, 0, { // ""Friendly Ivy"" + {3, "Przyjazny Bluszcz", "Przyjazne Bluszcze", "Przyjazny Bluszcz", "Przyjaznym Bluszczem"}, + {0/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"}, + {3, "PřátelskĂ˝ bĹ™eÄŤĹĄan", "PřátelskĂ© bĹ™eÄŤĹĄany", "PřátelskĂ˝ bĹ™eÄŤĹĄan", "PřátelskĂ˝m bĹ™eÄŤĹĄanem"}, + {3, "Đ Ńчной плющ", "Đ Ńчные плющи", "Đ Ńчной плющ", "Đ Ńчным плющом"}, + {0/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"/*MISSING*/ , "Friendly Ivy"}, + }}, + {0x66adb446, 0, { // ""tree"" + {2, "drzewo", "drzewa", "drzewo", "drzewem"}, + {2, "aÄźaç", "aÄźaçlar", "aÄźacı", "aÄźaçla"}, + {3, "strom", "stromy", "strom", "stromem"}, + {2, "дерево", "деревья", "дерево", "деревом"}, + {0, "Baum", "Bäume", "Baum", "Baum"}, + }}, + {0x671492bd, 0, { // ""living floor"" + {1, "ĹĽywa ziemia", "ĹĽywe ziemie", "ĹĽywÄ… ziemiÄ™", "ĹĽywÄ… ziemiÄ…"}, + {1, "Canlı Zemin", "Canlı Zeminler", "Canlı Zemini", "Canlı Zeminde"}, + {1, "ĹľivoucĂ­ podlaha", "ĹľivoucĂ­ podlahy", "ĹľivoucĂ­ podlahu", "ĹľivoucĂ­ podlahou"}, + {3, "живой пол", "живые полы", "живой пол", "живым полом"}, + {0, "Lebender Boden", "Lebende Böden", "Lebender Boden", "Lebender Boden"}, + }}, + {0x67a2b7fb, 0, { // ""Striped Dog"" + {0, "Pasiasty Pies", "Pasiate Psy", "Pasiastego Psa", "Pasiastym Psem"}, + {0, "Ĺžeritli Köpek", "Ĺžeritli Köpekler", "Ĺžeritli KöpeÄźi", "Ĺžeritli Köpekle"}, + {0, "PruhovanĂ˝ pes", "PruhovanĂ­ psi", "PruhovanĂ©ho psa", "PruhovanĂ˝m psem"}, + {0, "ПолоŃĐ°Ń‚Ń‹Đą пёŃ", "ПолоŃатые ĐżŃŃ‹", "ПолоŃатого ĐżŃĐ°", "ПолоŃĐ°Ń‚Ń‹ĐĽ ĐżŃом"}, + {0, "Gestreifter Hund", "Gestreifte Hunde", "Gestreiften Hund", "Gestreiften Hund"}, + }}, + {0x682e01d4, 2, { // ""Crossroads III"" + {2, "SkrzyĹĽowanie III", "SkrzyĹĽowania III", "SkrzyĹĽowanie III", "na SkrzyĹĽowaniu III"}, + {2, "Arayollar III", "Arayollar III", "Arayolları III", "Arayollarda III"}, + {1, "KĹ™iĹľovatka III", "KĹ™iĹľovatky III", "KĹ™iĹľovatku III", "na KĹ™iĹľovatc III"}, + {3, "ПерекрёŃток III", "ПерекрёŃтки III", "ПерекрёŃток III", "на ПерекрёŃтке III"}, + {1, "Kreuzungen III", "Kreuzungen III", "auf den Kreuzungen III", "auf den Kreuzungen III"}, + }}, + {0x6867efd1, 0, { // ""Lesser Demon"" + {0, "Mniejszy Demon", "Mniejsze Demony", "Mniejszego Demona", "Mniejszym Demonem"}, + {0, "Küçük Ĺžeytan", "Küçük Ĺžeytanlar", "Küçük Ĺžeytanı", "Küçük Ĺžeytanla"}, + {0, "ÄŚert", "ÄŚerti", "ÄŚerta", "ÄŚertem"}, + {0, "МладŃий демон", "МладŃие демоны", "МладŃего демона", "МладŃим демоном"}, + {0, "Gewöhnliche Dämon", "Gewöhnlichen Dämonen", "Gewöhnlichen Dämon", "Gewöhnlichen Dämon"}, + }}, + {0x6a3f72bc, 0, { // ""Round Table"" + {3, "OkrÄ…gĹ‚y Stół", "OkrÄ…gĹ‚e StoĹ‚y", "OkrÄ…gĹ‚y Stół", "OkrÄ…gĹ‚ym StoĹ‚em"}, + {3, "Yuvarlak Masa", "yuvarlak Masalar", "Yuvarlak Masayı", "Yuvarlak Masayla"}, + {3, "KulatĂ˝ stĹŻl", "KulatĂ© stoly", "KulatĂ˝ stĹŻl", "KulatĂ˝m stolem"}, + {3, "КрŃглый Стол", "КрŃглые Столы", "КрŃглый Стол", "КрŃĐłĐ»ĐľĐĽŃ ĐˇŃ‚ĐľĐ»Ń"}, + {1, "Tafelrunde", "Tafelrunde", "Tafelrunde", "Tafelrunde"}, + }}, + {0x6ac36d20, 0, { // ""canopy"" + {2, "listowie", "listowia", "listowie", "listowiem"}, + {0/*MISSING*/ , "canopy"/*MISSING*/ , "canopy"/*MISSING*/ , "canopy"/*MISSING*/ , "canopy"}, + {1, "koruna", "koruny", "korunu", "korunou"}, + {1, "лиŃтва", "лиŃтва", "лиŃтвŃ", "лиŃтвой"}, + {2, "Kronendach", "Kronendächer", "Kronendach", "Kronendach"}, + }}, + {0x6af295a7, 0, { // ""rosebush"" + {3, "krzak róży", "krzaki róży", "krzak róży", "krzakiem róży"}, + {0/*MISSING*/ , "rosebush"/*MISSING*/ , "rosebush"/*MISSING*/ , "rosebush"/*MISSING*/ , "rosebush"}, + {3, "rĹŻĹľovĂ˝ keřík", "rĹŻĹľovĂ© keříky", "rĹŻĹľovĂ˝ keřík", "rĹŻĹľovĂ˝m keříkem"}, + {3, "ĐşŃŃŃ‚ розы", "ĐşŃŃŃ‚Ń‹ розы", "ĐşŃŃŃ‚ розы", "ĐşŃŃтом розы"}, + {0, "Rosenbusch", "RosenbĂĽsche", "Rosenbusch", "Rosenbusch"}, + }}, + {0x6bd7c035, 0, { // ""Sea Border"" + {3, "Granica morska", "Granice morskie", "Granicy morskiej", "na Granicy morskiej"}, + {3, "Deniz Sınırı", "Deniz Sınırları", "Deniz Sınırını", "Deniz Sınırında"}, + {3, "MoĹ™ská hranice", "MoĹ™skĂ© hranice", "MoĹ™skou hranici", "na MoĹ™skĂ© hranici"}, + {3, "Граница моря", "Границы моря", "Đ“Ń€Đ°Đ˝Đ¸Ń†Ń ĐĽĐľŃ€ŃŹ", "на Границе моря"}, + {1, "Seegrenze", "Seegrenzen", "Seegrenze", "Seegrenze"}, + }}, + {0x6c135277, 0, { // ""lake"" + {2, "jezioro", "jeziora", "jezioro", "jeziorem"}, + {2, "Göl", "Göller", "GölĂĽ", "Gölde"}, + {2, "jezero", "jezera", "jezero", "jezerem"}, + {2, "озеро", "озёра", "озеро", "озером"}, + {0, "See", "Seen", "See", "See"}, + }}, + {0x6c2b5c5d, 0, { // ""Overgrown Woods"" + {3, "PrzeroĹ›niÄ™ty Las", "PrzeroĹ›niÄ™te Lasy", "PrzeroĹ›niÄ™ty Las", "w PrzeroĹ›niÄ™tym Lesie"}, + {3, "Azman Orman", "Azman Ormanlar", "Azman Ormanı", "Azman Ormanda"}, + {3, "Prales", "Pralesy", "Prales", "v Pralese"}, + {1, "ЗароŃли", "ЗароŃли", "ЗароŃли", "в ЗароŃлях"}, + {0, "Verwilderter Wald", "Verwilderte Wälder", "im Verwilderten Wald", "im Verwilderten Wald"}, + }}, + {0x6c49496c, 0, { // ""Yendorian Forest"" + {3, "Las YendoriaĹ„ski", "Lasy YendoriaĹ„skie", "YendoriaĹ„skiego Lasu", "w YendoriaĹ„skim Lesie"}, + {0/*MISSING*/ , "Yendorian Forest"/*MISSING*/ , "Yendorian Forest"/*MISSING*/ , "Yendorian Forest"/*MISSING*/ , "Yendorian Forest"}, + {3, "YendorskĂ˝ les", "YendorskĂ© lesy", "YendorskĂ˝ les", "v YendorskĂ©m lese"}, + {3, "ЙендорŃкий ЛеŃ", "ЙендорŃкие ЛеŃĐ°", "ЙендорŃкий ЛеŃ", "в ЙендорŃком ЛеŃŃ"}, + {3, "Yendorianischer Wald", "Yendorianische Wälder", "im Yendorianischen Wald", "im Yendorianischen Wald"}, + }}, + {0x6c8e75d1, 0, { // ""Burial Grounds"" + {3, "Kurhany", "Kurhany", "Kurhany", "w Kurhanach"}, + {0/*MISSING*/ , "Burial Grounds"/*MISSING*/ , "Burial Grounds"/*MISSING*/ , "Burial Grounds"/*MISSING*/ , "Burial Grounds"}, + {2, "PohĹ™ebištÄ›", "PohĹ™ebištÄ›", "PohĹ™ebištÄ›", "na PohĹ™ebišti"}, + {3, "ĐšŃрганы", "ĐšŃрганы", "ĐšŃрганы", "в ĐšŃрганах"}, + {1, "Begräbnisstätten", "Begräbnisstätten", "in den Begräbnisstätten", "in den Begräbnisstätten"}, + }}, + {0x6d5cef1f, 0, { // ""Bull Dash"" + {1, "Kraina BykĂłw", "Krainy BykĂłw", "KrainÄ™ BykĂłw", "w Krainie BykĂłw"}, + {0/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"}, + {3, "Býčí kraj", "Býčí kraje", "Býčí kraj", "v Býčím kraji"}, + {1, "Земля быков", "Земли быков", "Землю быков", "на Земле быков"}, + {0/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"/*MISSING*/ , "Bull Dash"}, + }}, + {0x6d815a1e, 0, { // ""Orb of the Stone"" + {1, "Sfera Kamienia", "Sfery Kamienia", "SferÄ™ Kamienia", "SferÄ… Kamienia"}, + {0/*MISSING*/ , "Orb of the Stone"/*MISSING*/ , "Orb of the Stone"/*MISSING*/ , "Orb of the Stone"/*MISSING*/ , "Orb of the Stone"}, + {1, "SfĂ©ra Kamene", "SfĂ©ry Kamene", "SfĂ©ru Kamene", "SfĂ©rou Kamene"}, + {1, "Сфера Камня", "Сферы Камня", "ĐˇŃ„ĐµŃ€Ń ĐšĐ°ĐĽĐ˝ŃŹ", "Сферой Камня"}, + {0, "Orb des Steines", "Orbs des Steines", "Orb des Steines", "Orb des Steines"}, + }}, + {0x6df7abdd, 0, { // ""Fire Elemental"" + {0, "Ognisty Ĺ»ywioĹ‚ak", "Ogniste Ĺ»ywioĹ‚aki", "Ognistego Ĺ»ywioĹ‚aka", "Ognistym Ĺ»ywioĹ‚akiem"}, + {0, "AteĹź Unsuru", "AteĹź Unsurları", "AteĹź Unsurunu", "AteĹź Unsuruyla"}, + {0, "Elementál OhnÄ›", "ElementálovĂ© OhnÄ›", "Elementála OhnÄ›", "Elementálem OhnÄ›"}, + {0, "Огненный Элементаль", "Огненные Элементали", "Огненного Элементаля", "Огненным Элементалем"}, + {0, "Feuerelementar", "Feuerelementare", "Feuerelementar", "Feuerelementar"}, + }}, + {0x6e596c8e, 0, { // ""Zebra"" + {1, "Zebra", "Zebry", "ZebrÄ…", "w Zebrze"}, + {1, "Zebra", "Zebralar", "Zebrayı", "Zebrada"}, + {1, "Zebra", "Zebry", "Zebru", "v ZebĹ™e"}, + {1, "Зебра", "Зебры", "ЗебрŃ", "в Зебре"}, + {2, "Zebra", "Zebras", "in Zebra", "in Zebra"}, + }}, + {0x6ef82407, 0, { // ""Ice Diamond"" + {3, "Lodowy Diament", "Lodowe Diamenty", "Lodowy Diament", "Lodowym Diamentem"}, + {3, "Buz Elması", "Buz Elmasları", "Buz Elmasını", "Buz Elmasıyla"}, + {3, "LedovĂ˝ diamant", "LedovĂ© diamanty", "LedovĂ˝ diamant", "LedovĂ˝m diamantem"}, + {3, "Ледяной алмаз", "Ледяные алмазы", "Ледяной алмаз", "Ледяным алмазом"}, + {0, "Frostdiamant", "Frostdiamanten", "Frostdiamant", "Frostdiamant"}, + }}, + {0x6fded839, 0, { // ""Orb of Summoning"" + {1, "Sfera PrzywoĹ‚ania", "Sfery PrzywoĹ‚ania", "SferÄ™ PrzywoĹ‚ania", "SferÄ… PrzywoĹ‚ania"}, + {1, "Çağırma KĂĽresi", "Çağırma KĂĽreleri", "Çağırma KĂĽresini", "Çağırma KĂĽresiyle"}, + {1, "SfĂ©ra VyvolánĂ­", "SfĂ©ry VyvolánĂ­", "SfĂ©ru VyvolánĂ­", "SfĂ©rou VyvolánĂ­"}, + {1, "Сфера Призыва", "Сферы Призыва", "ĐˇŃ„ĐµŃ€Ń ĐźŃ€Đ¸Đ·Ń‹Đ˛Đ°", "Сферой Призыва"}, + {0, "Orb der Beschwörung", "Orbs der Beschwörung", "Orb der Beschwörung", "Orb der Beschwörung"}, + }}, + {0x6fe5cc7a, 0, { // ""charged wall"" + {1, "naĹ‚adowana Ĺ›ciana", "naĹ‚adoawne Ĺ›ciany", "naĹ‚adowanÄ… scianÄ™", "naĹ‚adowanÄ… Ĺ›cianÄ…"}, + {1, "yĂĽklĂĽ duvar", "yĂĽklĂĽ duvarlar", "yĂĽklĂĽ duvarı", "yĂĽklĂĽ duvarla"}, + {1, "nabitá zeÄŹ", "nabitĂ© zdi", "nabitou zeÄŹ", "nabitou zdĂ­"}, + {1, "заряженная Ńтена", "заряженные Ńтены", "заряженнŃŃŽ ŃтенŃ", "заряженной Ńтеной"}, + {1, "geladene Wand", "geladene Wände", "geladene Wand", "geladene Wand"}, + }}, + {0x701e2c54, 0, { // ""Grimoire"" + {1, "KsiÄ™ga", "KsiÄ™gi", "KsiÄ™gÄ™", "KsiÄ™gÄ…"}, + {1, "Kara Kitap", "Kara Kitaplar", "Kara Kitabı", "Kara Kitapla"}, + {3, "Grimoár", "Grimoáry", "Grimoár", "Grimoárem"}, + {3, "ГримŃĐ°Ń€", "ГримŃары", "ГримŃĐ°Ń€", "ГримŃаром"}, + {2, "Grimoire", "Grimoires", "Grimoire", "Grimoire"}, + }}, + {0x703225bc, 0, { // ""Golem"" + {0, "Golem", "Golemy", "Golema", "Golemem"}, + {0, "Golem", "Golemler", "Golemi", "Golemle"}, + {0, "Golem", "GolemovĂ©", "Golema", "Golemem"}, + {0, "Голем", "Големы", "Голема", "Големом"}, + {0, "Golem", "Golems", "Golem", "Golem"}, + }}, + {0x70660f35, 0, { // ""Plane of Air"" + {1, "Strefa Powietrza", "Strefy Powietrza", "StrefÄ™ Powietrza", "w Strefie Powietrza"}, + {1, "AteĹź DĂĽzlemi", "AteĹź DĂĽzlemleri", "Hava DĂĽzlemini", "Hava DĂĽzleminde"}, + {1, "Rovina Vzduchu", "Roviny Vzduchu", "Rovinu Vzduchu", "v RovinÄ› Vzduchu"}, + {1, "ПлоŃкоŃŃ‚ŃŚ ВоздŃŃ…Đ°", "ПлоŃкоŃти ВоздŃŃ…Đ°", "ПлоŃкоŃŃ‚ŃŚ ВоздŃŃ…Đ°", "в ПлоŃкоŃти ВоздŃŃ…Đ°"}, + {1, "Luftebene", "Luftebenen", "Luftebene", "Luftebene"}, + }}, + {0x739ca4ff, 0, { // ""Orb of Nature"" + {1, "Sfera Natury", "Sfery Natury", "SferÄ™ Natury", "SferÄ… Natury"}, + {0/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"}, + {1, "SfĂ©ra Přírody", "SfĂ©ry Přírody", "SfĂ©ru Přírody", "SfĂ©rou Přírody"}, + {1, "Сфера Природы", "Сферы Природы", "ĐˇŃ„ĐµŃ€Ń ĐźŃ€Đ¸Ń€ĐľĐ´Ń‹", "Сферой Природы"}, + {0/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"/*MISSING*/ , "Orb of Nature"}, + }}, + {0x74510512, 0, { // ""blue slime"" + {1, "niebieska maĹş", "niebieskie mazie", "niebieskÄ… maĹş", "niebieskÄ… maziÄ…"}, + {1, "Mavi Balçık", "Mavi Balçıklar", "Mavi Balçığı", "Mavi Balçıkta"}, + {3, "modrĂ˝ sliz", "modrĂ© slizy", "modrĂ˝ sliz", "modrĂ˝m slizem"}, + {1, "Ńиняя Ńлизь", "Ńиняя Ńлизь", "Ńинюю Ńлизь", "Ńиней Ńлизью"}, + {0, "Blauer Schleim", "Blauen Schleime", "Blauen Schleim", "Blauen Schleim"}, + }}, + {0x74fc70a9, 0, { // ""cell without mine"" + {2, "pole bez miny", "pola bez min", "pole bez min", "polem bez min"}, + {2, "mayınsız hĂĽcre", "mayınsız hĂĽcreler", "mayınsız hĂĽcreyi", "mayınsız hĂĽcreyle"}, + {2, "pole bez miny", "pole bez min", "pole bez miny", "polem bez min"}, + {2, "поле без мин", "поля без мин", "поле без мин", "полем без мин"}, + {1, "minenlose Zelle", "minenlose Zellen", "minenlose Zelle", "minenlose Zelle"}, + }}, + {0x752ff5e6, 0, { // ""Forest Troll"" + {0, "LeĹ›ny Troll", "LeĹ›ne Trolle", "LeĹ›nego Trolla", "LeĹ›nym Trollem"}, + {0, "Orman TrolĂĽ", "Orman Trolleri", "Orman TrolĂĽnĂĽ", "Orman TrolĂĽyle"}, + {0, "Lestroll", "LestrollovĂ©", "Lestrolla", "Lestrollem"}, + {0, "ЛеŃной тролль", "ЛеŃные тролли", "ЛеŃного тролля", "ЛеŃным троллем"}, + {0, "Waldtroll", "Waldtrolle", "Waldtroll", "Waldtroll"}, + }}, + {0x7595ad5e, 0, { // ""rock III"" + {1, "skaĹ‚a III", "skaĹ‚y III", "skaĹ‚Ä™ III", "skaĹ‚Ä… III"}, + {1, "kaya III", "kayalar III", "kayayı III", "kayayla III"}, + {1, "skála III", "skály III", "skálu III", "skálou III"}, + {1, "Ńкалы III", "Ńкалы III", "ŃĐşĐ°Đ»Ń III", "Ńкалой III"}, + {0, "Fels III", "Felsen III", "Fels III", "Fels III"}, + }}, + {0x75e56b56, 0, { // ""Whirlpool"" + {3, "Wir", "Wiry", "Wir", "w Wirze"}, + {3, "Tayfun", "Tayfunlar", "Tayfunu", "Tayfunda"}, + {3, "VĂ­r", "VĂ­ry", "VĂ­r", "ve VĂ­ru"}, + {3, "Водоворот", "Водовороты", "Водоворот", "в Водовороте"}, + {0, "Strudel", "Strudel", "im Strudel", "im Strudel"}, + }}, + {0x76ef96b5, 0, { // ""great wall"" + {1, "wielka Ĺ›ciana", "wielkie Ĺ›ciany", "wielkÄ… Ĺ›cianÄ™", "wielkÄ… Ĺ›cianÄ…"}, + {1, "YĂĽksek Duvar", "YĂĽksek Duvarlar", "YĂĽksek Duvarı", "YĂĽksek Duvarda"}, + {1, "velká zeÄŹ", "velkĂ© zdi", "velkou zeÄŹ", "velkou zdĂ­"}, + {1, "великая Ńтена", "великие Ńтены", "великŃŃŽ ŃтенŃ", "великой Ńтеной"}, + {1, "GroĂźe Mauer", "GroĂźen Mauern", "GroĂźe Mauer", "GroĂźe Mauer"}, + }}, + {0x7792b48f, 0, { // ""Mutant Fruit"" + {3, "Zmutowany Owoc", "Zmutowane Owoce", "Zmutowany Owoc", "Zmutowanym Owocem"}, + {0/*MISSING*/ , "Mutant Fruit"/*MISSING*/ , "Mutant Fruit"/*MISSING*/ , "Mutant Fruit"/*MISSING*/ , "Mutant Fruit"}, + {2, "MutantnĂ­ ovoce", "MutantnĂ­ ovoce", "MutantnĂ­ ovoce", "MutantnĂ­ ovoce"}, + {3, "ФрŃкт-ĐĽŃтант", "ФрŃкты-ĐĽŃтанты", "ФрŃкт-ĐĽŃтант", "ФрŃктом-ĐĽŃтантом"}, + {1, "Mutierte Frucht", "Mutierte FrĂĽchte", "Mutierte Frucht", "Mutierte Frucht"}, + }}, + {0x78391eaf, 0, { // ""Desert Man"" + {0, "CzĹ‚owiek Pustyni", "Ludzie Pustyni", "CzĹ‚owieka Pustyni", "CzĹ‚owiekiem Pustyni"}, + {0, "Bedevi", "Bedeviler", "Bedeviyi", "Bedeviyle"}, + {0, "PouštnĂ­ muĹľ", "PouštnĂ­ muĹľi", "PouštnĂ­ho muĹľe", "PouštnĂ­m muĹľem"}, + {0, "Человек ĐżŃŃтыни", "Люди ĐżŃŃтыни", "Человека ĐżŃŃтыни", "Человеком ĐżŃŃтыни"}, + {0, "WĂĽstenmann", "WĂĽstenmänner", "WĂĽstenmann", "WĂĽstenmann"}, + }}, + {0x786f5e72, 0, { // ""Dungeon"" + {3, "Loch", "Lochy", "Loch", "w Lochu"}, + {0/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"}, + {3, "Ĺ˝alář", "Ĺ˝aláře", "Ĺ˝alář", "v Ĺ˝aláři"}, + {2, "Подземелье", "Подземелья", "Подземелье", "в Подземелье"}, + {0/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"/*MISSING*/ , "Dungeon"}, + }}, + {0x796d5023, 0, { // ""rock II"" + {1, "skaĹ‚a II", "skaĹ‚y II", "skaĹ‚Ä™ II", "skaĹ‚Ä… II"}, + {1, "kaya II", "kayalar II", "kayayı II", "kayayla II"}, + {1, "skála II", "skály II", "skálu II", "skálou II"}, + {1, "Ńкалы II", "Ńкалы II", "ŃĐşĐ°Đ»Ń II", "Ńкалой II"}, + {0, "Fels II", "Felsen II", "Fels II", "Fels II"}, + }}, + {0x79b02b48, 0, { // ""Fern Flower"" + {3, "Kwiat Paproci", "Kwiaty Paproci", "Kwiat Paproci", "Kwiatem Paproci"}, + {3, "EÄźreltiotu ÇiçeÄźi", "EÄźreltiotu Çiçekleri", "EÄźreltiotu ÇiçeÄźini", "EÄźreltiotu ÇiçeÄźiyle"}, + {3, "KapradinovĂ˝ kvÄ›t", "KapradinovĂ© kvÄ›ty", "KapradinovĂ˝ kvÄ›t", "KapradinovĂ© kvÄ›ty"}, + {3, "Цветок папоротника", "Цветы папоротника", "Цветок папоротника", "Цветком папоротника"}, + {0, "FarnblĂĽte", "FarnblĂĽten", "FarnblĂĽte", "FarnblĂĽte"}, + }}, + {0x79cad766, 0, { // ""Rose Garden"" + {3, "Różany OgrĂłd", "Różane Ogrody", "Różany OgrĂłd", "w Różanym Ogrodzie"}, + {0/*MISSING*/ , "Rose Garden"/*MISSING*/ , "Rose Garden"/*MISSING*/ , "Rose Garden"/*MISSING*/ , "Rose Garden"}, + {1, "RĹŻĹľová zahrada", "RĹŻĹľovĂ© zahrady", "RĹŻĹľovou zahradu", "v RĹŻĹľovĂ© zahradÄ›"}, + {3, "Розарий", "Розарии", "Розарий", "в Розарии"}, + {0, "Rosengarten", "Rosengärten", "im Rosengarten", "im Rosengarten"}, + }}, + {0x7af26a7f, 0, { // ""closed gate"" + {1, "zamkniÄ™ta brama", "zamkniÄ™te bramy", "zamkniÄ™tÄ… bramÄ™", "zamkniÄ™tÄ… bramÄ…"}, + {1, "kapalı kapı", "kapalı kapılar", "kapalı kapıyı", "kapalı kapıyla"}, + {1, "zavĹ™ená brána", "zavĹ™enĂ© brány", "zavĹ™enou bránu", "zavĹ™enou bránou"}, + {3, "закрытый проход", "закрытые проходы", "закрытый проход", "закрытым проходом"}, + {2, "Geschlossenes Tor", "Geschlossene Tore", "Geschlossene Tor", "Geschlossene Tor"}, + }}, + {0x7b02aea0, 0, { // ""Demon Shark"" + {0, "Rekin-Demon", "Rekiny-Demony", "Rekina-Demona", "Rekinem-Demonem"}, + {0, "Ĺžeytan Köpekbalığı", "Ĺžeytan Köpekbalıkları", "Ĺžeytan Köpekbalığını", "Ĺžeytan Köpekbalığıyla"}, + {0, "ĎábelskĂ˝ Ĺľralok", "ĎábelštĂ­ Ĺľraloci", "ĎábelskĂ©ho Ĺľraloka", "ĎábelskĂ˝m Ĺľralokem"}, + {1, "ĐĐşŃла-демон", "ĐĐşŃлы-демоны", "ĐĐşŃĐ»Ń-демона", "ĐĐşŃлой-демоном"}, + {0, "Dämonenhai", "Dämonenhaie", "Dämonenhai", "Dämonenhai"}, + }}, + {0x7b736f7f, 0, { // ""Handsome Gardener"" + {0, "Przystojny Ogrodnik", "Przystojni Ogrodnicy", "Przystojnego Ogrodnika", "Przystojnym Ogrodnikiem"}, + {0/*MISSING*/ , "Handsome Gardener"/*MISSING*/ , "Handsome Gardener"/*MISSING*/ , "Handsome Gardener"/*MISSING*/ , "Handsome Gardener"}, + {1, "PohlednĂ˝ zahradnĂ­k", "PohlednĂ­ zahradnĂ­ci", "PohlednĂ©ho zahradnĂ­ka", "PohlednĂ˝m zahradnĂ­kem"}, + {0, "КраŃивый Ńадовод", "КраŃивые Ńадоводы", "КраŃивого Ńадовника", "КраŃивым Ńадовником"}, + {0, "HĂĽbscher Gärtner", "HĂĽbsche Gärtner", "HĂĽbschen Gärtner", "HĂĽbschen Gärtner"}, + }}, + {0x7ce94873, 0, { // ""Bounty"" + {1, "Nagroda", "Nagrody", "NagrodÄ™", "NagrodÄ…"}, + {1, "Ă–dĂĽl", "Ă–dĂĽller", "Ă–dĂĽlĂĽ", "Ă–dĂĽlle"}, + {1, "OdmÄ›na", "OdmÄ›ny", "OdmÄ›nu", "OdmÄ›nou"}, + {1, "Награда", "Награды", "НаградŃ", "Наградой"}, + {2, "Kopfgeld", "Kopfgelder", "Kopfgeld", "Kopfgeld"}, + }}, + {0x7d9792d4, 0, { // ""Orb of Empathy"" + {1, "Sfera Empatii", "Sfery Empatii", "SferÄ™ Empatii", "SferÄ… Empatii"}, + {0/*MISSING*/ , "Orb of Empathy"/*MISSING*/ , "Orb of Empathy"/*MISSING*/ , "Orb of Empathy"/*MISSING*/ , "Orb of Empathy"}, + {1, "SfĂ©ra Empatie", "SfĂ©ry Empatie", "SfĂ©ru Empatie", "SfĂ©rou Empatie"}, + {1, "Сфера СочŃвŃтвия", "Сферы СочŃвŃтвия", "ĐˇŃ„ĐµŃ€Ń ĐˇĐľŃ‡ŃвŃтвия", "Сферой СочŃвŃтвия"}, + {0, "Orb der Empathie", "Orbs der Empathie", "Orb der Empathie", "Orb der Empathie"}, + }}, + {0x7fc6879d, 0, { // ""Bat"" + {3, "Nietoperz", "Nietoperze", "Nietoperza", "Nietoperzem"}, + {0/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"}, + {0, "NetopĂ˝r", "Netopýři", "NetopĂ˝ra", "NetopĂ˝rem"}, + {1, "ЛетŃчая ĐĽŃ‹ŃŃŚ", "ЛетŃчие ĐĽŃ‹Ńи", "ЛетŃчŃŃŽ ĐĽŃ‹ŃŃŚ", "ЛетŃчей ĐĽŃ‹ŃŃŚŃŽ"}, + {0/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"/*MISSING*/ , "Bat"}, + }}, + {0x8056e574, 0, { // ""Prairie"" + {1, "Preria", "Prerie", "PreriÄ™", "na Prerii"}, + {0/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"}, + {1, "PrĂ©rie", "PrĂ©rii", "PrĂ©rii", "na PrĂ©rii"}, + {1, "Прерия", "Прерии", "Прерию", "в Прерии"}, + {0/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"/*MISSING*/ , "Prairie"}, + }}, + {0x85a9052d, 0, { // ""Ranger"" + {0, "StraĹĽnik", "StraĹĽnicy", "StraĹĽnika", "StraĹĽnikiem"}, + {0, "Korucu", "Korucular", "Korucuyu", "Korucuyla"}, + {0, "Strážce", "Strážci", "Strážce", "Strážcem"}, + {0, "Странник", "Странники", "Странника", "Странником"}, + {0, "Ranger", "Ranger", "Ranger", "Ranger"}, + }}, + {0x864ac83d, 2, { // ""Crossroads II"" + {2, "SkrzyĹĽowanie II", "SkrzyĹĽowania II", "SkrzyĹĽowanie II", "na SkrzyĹĽowaniu II"}, + {2, "Arayollar 2", "Arayollar 2'ler", "Arayollar 2'yi", "Arayollar 2'de"}, + {2, "KĹ™iĹľovatka II", "KĹ™iĹľovatky II", "KĹ™iĹľovatku II", "na KĹ™iĹľovatce II"}, + {2, "ПерекрёŃток II", "ПерекрёŃтки II", "ПерекрёŃток II", "на ПерекрёŃтке II"}, + {2, "Kreuzungen II", "Kreuzungen II", "auf den Kreuzungen II", "auf den Kreuzungen II"}, + }}, + {0x864ac84a, 2, { // ""Crossroads IV"" + {3, "SkrzyĹĽowanie IV", "SkrzyĹĽowania IV", "SkrzyĹĽowanie IV", "na SkrzyĹĽowaniu IV"}, + {0/*MISSING*/ , "Crossroads IV"/*MISSING*/ , "Crossroads IV"/*MISSING*/ , "Crossroads IV"/*MISSING*/ , "Crossroads IV"}, + {3, "KĹ™iĹľovatka IV", "KĹ™iĹľovatky IV", "KĹ™iĹľovatku IV", "na KĹ™iĹľovatce IV"}, + {3, "ПерекрёŃток IV", "ПерекрёŃтки IV", "ПерекрёŃток IV", "на ПерекрёŃтке IV"}, + {1, "Kreuzungen IV", "Kreuzungen IV", "auf den Kreuzungen IV", "auf den Kreuzungen IV"}, + }}, + {0x8818aa45, 0, { // ""Water Shard"" + {3, "Okruch Wody", "Okruchy Wody", "Okruch Wody", "Okruchem Wody"}, + {0, "Su Parçası", "Su Parçaları", "Su Parçasını", "Su Parçasıyla"}, + {3, "Ăšlomek Vody", "Ăšlomky Vody", "Ăšlomek Vody", "Ăšlomkem Vody"}, + {3, "ĐžŃколок Воды", "ĐžŃколки Воды", "ĐžŃколок Воды", "ĐžŃколком Воды"}, + {1, "Wasserscherbe", "Wasserscherben", "Wasserscherbe", "Wasserscherbe"}, + }}, + {0x88408040, 0, { // ""Game Board"" + {1, "Plansza", "Plansza", "PlanszÄ™", "na Planszy"}, + {1, "Tahta", "Tahtalar", "Tahtayı", "Tahtada"}, + {1, "HernĂ­ deska", "HernĂ­ desky", "HernĂ­ desku", "na HernĂ­ desce"}, + {1, "Đгровая ДоŃка", "Đгровые ДоŃки", "ĐгровŃŃŽ ДоŃĐşŃ", "на Đгровой ДоŃке"}, + {2, "Spielbrett", "Spielbretter", "auf dem Spielbrett", "auf dem Spielbrett"}, + }}, + {0x8867fc7b, 0, { // ""Hypersian Rug"" + {3, "Hiperski Dywan", "Hiperskie Dywany", "Hiperski Dywan", "Hiperskim Dywanem"}, + {3, "AĹźkınlı Kilim", "AĹźkınlı Kilimler", "AĹźkınlı Kilimi", "AĹźkınlı Kilimle"}, + {3, "HyperskĂ˝ koberec", "HyperskĂ© koberce", "HyperskĂ˝ koberec", "HyperskĂ˝m kobercem"}, + {3, "ГиперŃидŃкий ковёр", "ГиперŃидŃкие ковры", "ГиперŃидŃкий ковёр", "ГиперŃидŃким ковром"}, + {0, "Hypersischer Teppich", "Hypersische Teppiche", "Hypersischer Teppich", "Hypersischer Teppich"}, + }}, + {0x88bf8c73, 0, { // ""metal wall"" + {1, "metalowa Ĺ›ciana", "metalowe Ĺ›ciany", "metalowÄ… scianÄ™", "metalowÄ… Ĺ›cianÄ…"}, + {1, "metal duvar", "metal duvarlar", "metal duvarı", "metal duvarla"}, + {1, "kovovĂ© zeÄŹ", "kovovĂ© zdi", "kovovou zeÄŹ", "kovovou zdĂ­"}, + {1, "металличеŃкая Ńтена", "металличеŃкие Ńтены", "металличеŃĐşŃŃŽ ŃтенŃ", "металличеŃкой Ńтеной"}, + {1, "Metallwand", "Metallwände", "Metallwand", "Metallwand"}, + }}, + {0x88f7630f, 0, { // ""Haunted Woods"" + {3, "Nawiedzony Las", "Nawiedzone Lasy", "Nawiedzony Las", "w Nawiedzonym Lesie"}, + {0/*MISSING*/ , "Haunted Woods"/*MISSING*/ , "Haunted Woods"/*MISSING*/ , "Haunted Woods"/*MISSING*/ , "Haunted Woods"}, + {3, "StrašidelnĂ˝ hvozd", "StrašidelnĂ© hvozdy", "StrašidelnĂ˝ hvozd", "ve StrašidelnĂ©m hvozdu"}, + {3, "Đ›ĐµŃ Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸", "ЛеŃĐ° Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸", "Đ›ĐµŃ Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸", "в ЛеŃŃ Ń ĐżŃ€Đ¸Đ˛Đ¸Đ´ĐµĐ˝Đ¸ŃŹĐĽĐ¸"}, + {0, "Verwunschener Wald", "Verwunschene Wälder", "im Verwunschenen Wald", "im Verwunschenen Wald"}, + }}, + {0x892e723f, 0, { // ""Ice Sapphire"" + {3, "Lodowy Szafir", "Lodowe Szafiry", "Lodowy Szafir", "Lodowym Szafirem"}, + {3, "Buz Safiri", "Buz Safirleri", "Buz Safirini", "Buz Safiriyle"}, + {3, "LedovĂ˝ safĂ­r", "LedovĂ© safĂ­ry", "LedovĂ˝ safĂ­r", "LedovĂ˝m safĂ­rem"}, + {3, "Ледяной Ńапфир", "Ледяные Ńапфиры", "Ледяной Ńапфир", "Ледяным Ńапфиром"}, + {0, "Frostsaphir", "Frostsaphire", "Frostsaphir", "Frostsaphir"}, + }}, + {0x89b196d4, 0, { // ""Dodecahedron"" + {3, "DwunastoĹ›cian", "DwunastoĹ›ciany", "DwunastoĹ›cian", "DwunastoĹ›cianem"}, + {0/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"}, + {3, "DvanáctistÄ›n", "DvanáctistÄ›ny", "DvanáctistÄ›n", "DvanáctistÄ›nem"}, + {3, "Додекаэдр", "Додекаэдры", "Додекаэдр", "Додекаэдром"}, + {0/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"/*MISSING*/ , "Dodecahedron"}, + }}, + {0x8b1cc002, 0, { // ""Slime Mold"" + {3, "Ĺšluzowiec", "Ĺšluzowce", "Ĺšluzowiec", "Ĺšluzowcem"}, + {0/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"}, + {1, "Hlenka", "Hlenky", "Hlenku", "Hlenkou"}, + {0, "Слизень", "Слизни", "Слизня", "Слизнем"}, + {0/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"/*MISSING*/ , "Slime Mold"}, + }}, + {0x8d8bfe35, 0, { // ""Clearing"" + {1, "Polana", "Polany", "PolanÄ™", "na Polanie"}, + {0/*MISSING*/ , "Clearing"/*MISSING*/ , "Clearing"/*MISSING*/ , "Clearing"/*MISSING*/ , "Clearing"}, + {1, "MĂ˝tina", "MĂ˝tiny", "MĂ­tinu", "na MĂ˝tinÄ›"}, + {1, "Поляна", "Поляны", "ПолянŃ", "на Поляне"}, + {1, "Lichtung", "Lichtungen", "auf der Lichtung", "auf der Lichtung"}, + }}, + {0x8dd246a8, 0, { // ""Ice Shark"" + {0, "Lodowy Rekin", "Lodowe Rekiny", "Lodowego Rekina", "Lodowym Rekinem"}, + {0, "Buz Köpekbalığı", "Buz Köpekbalıkları", "Buz Köpekbalığını", "Buz Köpekbalığıyla"}, + {0, "LedovĂ˝ Ĺľralok", "LedovĂ­ Ĺľraloci", "LedovĂ©ho Ĺľraloka", "LedovĂ˝m Ĺľralokem"}, + {1, "Ледяная Đ°ĐşŃла", "Ледяные Đ°ĐşŃлы", "ЛедянŃŃŽ Đ°ĐşŃĐ»Ń", "Ледяной Đ°ĐşŃлой"}, + {0, "Frosthai", "Frosthaie", "Frosthai", "Frosthai"}, + }}, + {0x8e69ee81, 0, { // ""Orb of Recall"" + {1, "Sfera Powrotu", "Sfery Powrotu", "SferÄ™ Powrotu", "SferÄ… Powrotu"}, + {0/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"}, + {1, "SfĂ©ra Návratu", "SfĂ©ry Návratu", "SfĂ©ru Návratu", "SfĂ©rou Návratu"}, + {1, "Сфера Возвращения", "Сферы Возвращения", "ĐˇŃ„ĐµŃ€Ń Đ’ĐľĐ·Đ˛Ń€Đ°Ń‰ĐµĐ˝Đ¸ŃŹ", "Сферой Возвращения"}, + {0/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"/*MISSING*/ , "Orb of Recall"}, + }}, + {0x8e8a4b25, 0, { // ""Halloween"" + {3, "Halloween", "Halloween", "Halloween", "w Halloween"}, + {0/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"}, + {3, "Halloween", "Halloweeny", "Halloween", "v Halloweenu"}, + {3, "ХэллоŃин", "ХэллоŃин", "ХэллоŃин", "в ХэллоŃине"}, + {0/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"/*MISSING*/ , "Halloween"}, + }}, + {0x90992e59, 0, { // ""Air Elemental"" + {0, "Powietrzny Ĺ»ywioĹ‚ak", "Powietrzne Ĺ»ywioĹ‚aki", "Powietrznego Ĺ»ywioĹ‚aka", "Powietrznym Ĺ»ywioĹ‚akiem"}, + {0, "Hava Unsuru", "Hava Unsurları", "Hava Unsurunu", "Hava Unsuruyla"}, + {0, "Elementál Vzduchu", "ElementálovĂ© Vzduchu", "Elementála Vzduchu", "Elementálem Vzduchu"}, + {0, "ВоздŃŃный Элементаль", "ВоздŃŃные Элементали", "ВоздŃŃного Элементаля", "ВоздŃŃным Элементалем"}, + {0, "Luftelementar", "Luftelementare", "Luftelementar", "Luftelementar"}, + }}, + {0x916932f5, 0, { // ""Great Wall"" + {2, "Wielka Ĺšciana", "Wielka Ĺšciana", "WielkÄ… ĹšcianÄ™", "na Wielkiej Ĺšcianie"}, + {0, "BĂĽyĂĽk Duvar", "BĂĽyĂĽk Duvarları", "BĂĽyĂĽk Duvarı", "BĂĽyĂĽk Duvarda"}, + {1, "Velká zeÄŹ", "VelkĂ© zdi", "Velkou zeÄŹ", "na VelkĂ© zdi"}, + {1, "Великая Ńтена", "Великие Ńтены", "ВеликŃŃŽ ŃтенŃ", "на Великой Ńтене"}, + {1, "GroĂźe Mauer", "GroĂźen Mauern", "auf der GroĂźen Mauer", "auf der GroĂźen Mauer"}, + }}, + {0x91835dc5, 0, { // ""Familiar"" + {0, "Chowaniec", "ChowaĹ„ce", "ChowaĹ„ca", "ChowaĹ„cem"}, + {0/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"}, + {0, "PomocnĂ­k", "PomocnĂ­ci", "PomocnĂ­ka", "PomocnĂ­kem"}, + {0, "Знакомый", "Знакомые", "Знакомого", "Знакомым"}, + {0/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"/*MISSING*/ , "Familiar"}, + }}, + {0x921a3033, 0, { // ""Fire Fairy"" + {1, "Ognista WiĹ‚a", "Ogniste WiĹ‚y", "OgnistÄ… WiĹ‚Ä™", "OgnistÄ… WiĹ‚Ä…"}, + {1, "AteĹź Perisi", "AteĹź Perileri", "AteĹź Perisini", "AteĹź Perisiyle"}, + {0, "OhnivĂ˝ mužíček", "OhnivĂ­ mužíčci", "OhnivĂ©ho mužíčka", "OhnivĂ˝m mužíčkem"}, + {1, "Огненная фея", "Огненный феи", "ОгненнŃŃŽ фею", "Огненной феей"}, + {1, "Feuerfee", "Feuerfeen", "Feuerfee", "Feuerfee"}, + }}, + {0x9221100c, 0, { // ""Vineyard"" + {1, "Winnica", "Winnica", "WinnicÄ™", "w Winnicy"}, + {1, "Ĺžaraplık", "Ĺžaraplıklar", "Ĺžaraplığı", "Ĺžaraplıkta"}, + {1, "Vinice", "Vinice", "Vinici", "na Vinici"}, + {3, "Виноградник", "Виноградники", "Виноградник", "в Винограднике"}, + {0, "Weingarten", "Weingärten", "im Weingarten", "im Weingarten"}, + }}, + {0x9285a10b, 0, { // ""Plane of Fire"" + {1, "Strefa Ognia", "Strefy Ognia", "StrefÄ™ Ognia", "w Strefie Ognia"}, + {1, "AteĹź DĂĽzlemi", "AteĹź DĂĽzlemleri", "AteĹź DĂĽzlemini", "AteĹź DĂĽzleminde"}, + {1, "Rovina OhnÄ›", "Roviny OhnÄ›", "Rovinu OhnÄ›", "v RovinÄ› OhnÄ›"}, + {1, "ПлоŃкоŃŃ‚ŃŚ Огня", "ПлоŃкоŃти Огня", "ПлоŃкоŃŃ‚ŃŚ Огня", "в ПлоŃкоŃти Огня"}, + {1, "Feuerebene", "Feuerebenen", "Feuerebene ", "Feuerebene "}, + }}, + {0x930c9b5e, 0, { // ""Tentacle+Ghost"" + {1, "Macka+Duch", "Macki+Duchy", "MackÄ™+Ducha", "MackÄ…+Duchem"}, + {1, "Dokungaç&Hayalet", "Dokungaç&Hayaletler", "Dokungaç&Hayaleti", "Dokungaç&Hayaletle"}, + {0, "Chapadlo+Duch", "Chapadla+DuchovĂ©", "Chapadlo+Ducha", "Chapadlem+Duchem"}, + {2, "Đ©Ńпальце+Đ”ŃŃ…", "Đ©Ńпальца+Đ”Ńхи", "Đ©Ńпальце+Đ”ŃŃ…Đ°", "Đ©Ńпальцем+Đ”Ńхом"}, + {1, "Tentakel+Geist", "Tentakel+Geister", "Tentakel+Geist", "Tentakel+Geist"}, + }}, + {0x9319ab65, 0, { // ""Holy Grail"" + {0, "ĹšwiÄ™ty Graal", "ĹšwiÄ™te Graale", "ĹšwiÄ™tego Graala", "ĹšwiÄ™tym Graalem"}, + {3, "Kutsal Kâse", "Kutsal Kâseler", "Kutsal Kâseyi", "Kutsal Kâseyle"}, + {3, "SvatĂ˝ grál", "SvatĂ© grály", "SvatĂ˝ grál", "SvatĂ˝m grálem"}, + {3, "Святой Грааль", "Святые Граали", "Святой Грааль", "Святым Граалем"}, + {0, "Heiliger Gral", "Heilige Grale", "Heiligen Gral", "Heiligen Gral"}, + }}, + {0x934bf032, 0, { // ""Orb of the Bull"" + {1, "Sfera Byka", "Sfery Byka", "SferÄ™ Byka", "SferÄ… Byka"}, + {0/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"}, + {1, "SfĂ©ra BĂ˝ka", "SfĂ©ry BĂ˝ka", "SfĂ©ru BĂ˝ka", "SfĂ©rou BĂ˝ka"}, + {1, "Сфера Быка", "Сферы Быка", "ĐˇŃ„ĐµŃ€Ń Đ‘Ń‹ĐşĐ°", "Сферой Быка"}, + {0/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"/*MISSING*/ , "Orb of the Bull"}, + }}, + {0x93fdcaec, 0, { // ""Tongue"" + {3, "JÄ™zyk", "JÄ™zyki", "JÄ™zyk", "JÄ™zykiem"}, + {3, "Dil", "Diller", "Dili", "Dille"}, + {3, "Jazyk", "Jazyky", "Jazyk", "Jazykem"}, + {3, "ĐŻĐ·Ń‹Đş", "Языки", "ĐŻĐ·Ń‹Đş", "Языком"}, + {1, "Zunge", "Zungen", "Zunge", "Zunge"}, + }}, + {0x946ae4a5, 0, { // ""Greater Demon"" + {0, "Wielki Demon", "Wielkie Demony", "Wielkiego Demona", "Wielkim Demonem"}, + {0, "BĂĽyĂĽk Ĺžeytan", "BĂĽyĂĽk Ĺžeytanlar", "BĂĽyĂĽk Ĺžeytanı", "BĂĽyĂĽk Ĺžeytanla"}, + {0, "Ďábel", "ĎáblovĂ©", "Ďábla", "Ďáblem"}, + {0, "СтарŃий демон", "СтарŃие демоны", "СтарŃего демона", "СтарŃим демоном"}, + {0, "Mächtige Dämon", "Mächtigen Dämonen", "Mächtige Dämon", "Mächtige Dämon"}, + }}, + {0x97257147, 0, { // ""electric discharge"" + {2, "wyĹ‚adowanie", "wyĹ‚adowania", "wyĹ‚adowanie", "wyĹ‚adowaniem"}, + {2, "elektrik boĹźalımı", "elektrik boĹźalımları", "elektrik boĹźalımını", "elektrik boĹźalımıyla"}, + {3, "vĂ˝boj", "vĂ˝boje", "vĂ˝boj", "vĂ˝bojem"}, + {3, "разряд", "разряды", "разряд", "разрядом"}, + {2, "Elektrische Entladung", "Elektrische Entladungen", "Elektrische Entladung", "Elektrische Entladung"}, + }}, + {0x97d20ec7, 0, { // ""Vizier"" + {0, "Wezyr", "Wezyrowie", "Wezyra", "Wezyrem"}, + {0, "Vezir", "Vezirler", "Veziri", "Vezirler"}, + {0, "VezĂ­r", "VezĂ­rovĂ©", "VezĂ­ra", "VezĂ­rem"}, + {0, "Визирь", "Визири", "Визиря", "Визирем"}, + {0, "Wesir", "Wesire", "Wesir", "Wesir"}, + }}, + {0x97d3de2f, 0, { // ""Sand Worm"" + {0, "Pustynny Czerw", "Pustynne Czerwie", "Pustynnego Czerwia", "Pustynnym Czerwiem"}, + {0, "Kumkurdu", "Kumkurtları", "Kumkurdunu", "Kumkurduyla"}, + {0, "PĂ­seÄŤnĂ˝ ÄŤerv", "PĂ­seÄŤnĂ­ ÄŤervi", "PĂ­seÄŤnĂ©ho ÄŤerva", "PĂ­seÄŤnĂ˝m ÄŤervem"}, + {0, "ĐźŃŃтынный червь", "ĐźŃŃтынные черви", "ĐźŃŃтынного червя", "ĐźŃŃтынным червём"}, + {0, "Sandwurm ", "SandwĂĽrmer", "Sandwurm", "Sandwurm"}, + }}, + {0x983c8c0d, 0, { // ""Hedgehog Warrior"" + {0, "Wojownik-JeĹĽ", "Wojownicy-JeĹĽe", "Wojownika-JeĹĽa", "Wojownikiem-JeĹĽem"}, + {0, "Kirpi Savaşçı", "Kirpi Savaşçılar", "Kirpi Savaşçıyı", "Kirpi Savaşçıyla"}, + {0, "Ježčí váleÄŤnĂ­k", "Ježčí váleÄŤnĂ­ci", "Ježčího váleÄŤnĂ­ka", "Ježčím váleÄŤnĂ­kem"}, + {0, "Đж-воин", "Ежи-воины", "Ежа-воина", "Ежом-воином"}, + {0, "Igelkrieger", "Igelkrieger", "Igelkrieger", "Igelkrieger"}, + }}, + {0x98748a3a, 0, { // ""Orb of Friendship"" + {1, "Sfera PrzyjaĹşni", "Sfery PrzyjaĹşni", "SferÄ™ PrzyjaĹşni", "SferÄ… PrzyjaĹşni"}, + {1, "Dostluk KĂĽresi", "Dostluk KĂĽreleri", "Dostluk KĂĽresini", "Dostluk KĂĽresiyle"}, + {1, "SfĂ©ra PřátelstvĂ­", "SfĂ©ry PřátelstvĂ­", "SfĂ©ru PřátelstvĂ­", "SfĂ©rou PřátelstvĂ­"}, + {1, "Сфера ДрŃжбы", "Сферы ДрŃжбы", "ĐˇŃ„ĐµŃ€Ń Đ”Ń€Ńжбы", "Сферой ДрŃжбы"}, + {0, "Orb der Freundschaft", "Orbs der Freundschaft", "Orb der Freundschaft", "Orb der Freundschaft"}, + }}, + {0x9a71dcab, 0, { // ""trapdoor"" + {2, "zapadnia", "zapadnie", "zapadniÄ™", "zapadniÄ…"}, + {2, "tuzak kapısı", "tuzak kapıları", "tuzak kapısını", "tuzak kapısıyla"}, + {2, "propadlo", "propadla", "propadlo", "propadlem"}, + {1, "ловŃŃка", "ловŃŃки", "ловŃŃĐşŃ", "ловŃŃкой"}, + {1, "FalltĂĽr", "FalltĂĽren", "FalltĂĽr", "FalltĂĽr"}, + }}, + {0x9b74105e, 0, { // ""Shard"" + {3, "OdĹ‚amek", "OdĹ‚amki", "OdĹ‚amek", "OdĹ‚amkiem"}, + {3, "Cam Parçası", "Cam Parçaları", "Cam Parçasını", "Cam Parçasıyla"}, + {1, "StĹ™epina", "StĹ™epiny", "StĹ™epinu", "StĹ™epinou"}, + {3, "ĐžŃколок", "ĐžŃколки", "ĐžŃколок", "ĐžŃколком"}, + {1, "Scherbe", "Scherben", "Scherbe", "Scherbe"}, + }}, + {0x9b741065, 0, { // ""Shark"" + {0, "Rekin", "Rekiny", "Rekina", "Rekinem"}, + {0, "Köpekbalığı", "Köpekbalıkları", "Köpekbalığını", "Köpekbalığıyla"}, + {0, "Ĺ˝ralok", "Ĺ˝raloci", "Ĺ˝raloka", "Ĺ˝ralokem"}, + {1, "ĐĐşŃла", "ĐĐşŃлы", "ĐĐşŃĐ»Ń", "ĐĐşŃлой"}, + {0, "Hai", "Haie", "Hai", "Hai"}, + }}, + {0x9c67ce3d, 0, { // ""Icewolf"" + {0, "Lodowy Wilk", "Lodowe Wilki", "Lodowego Wilka", "Lodowym Wilkiem"}, + {0, "Buzkurdu", "Buzkurtları", "Buzkurdunu", "Buzkurduyla"}, + {0, "LedovĂ˝ vlk", "LedovĂ­ vlci", "LedovĂ©ho vlka", "LedovĂ˝m vlkem"}, + {0, "Ледяной волк", "Ледяные волки", "Ледяного волка", "Ледяным волком"}, + {0, "Eiswolf", "Eiswölfe", "Eiswolf", "Eiswolf"}, + }}, + {0x9cca513f, 0, { // ""Pikeman"" + {0, "Pikinier", "Pikinierzy", "Pikiniera", "Pikinierem"}, + {0, "Mızraklı", "Mızraklılar", "Mızraklıyı", "Mızraklıyla"}, + {0, "KopinĂ­k", "KopinĂ­ci", "KopinĂ­ka", "KopinĂ­kem"}, + {0, "Копейщик", "Копейщики", "Копейщика", "Копейщиком"}, + {0, "Bergmann", "Bergmänner", "Bergmann", "Bergmann"}, + }}, + {0x9d071523, 0, { // ""Amber"" + {3, "Bursztyn", "Bursztyny", "Bursztyn", "Bursztynem"}, + {3, "Kehribar", "Kehribarlar", "Kehribarı", "Kehribarla"}, + {3, "Jantar", "Jantary", "Jantar", "Jantarem"}, + {3, "Янтарь", "Янтари", "Янтарь", "Янтарём"}, + {0, "Bernstein", "Bernsteine", "Bernstein", "Bernstein"}, + }}, + {0x9f911f3d, 0, { // ""Skeleton"" + {0, "KoĹ›ciotrup", "KoĹ›ciotrupy", "KoĹ›ciotrupa", "KoĹ›ciotrupem"}, + {0, "KoĹ›ciotrup", "KoĹ›ciotrupy", "KoĹ›ciotrupa", "KoĹ›ciotrupem"}, + {0, "Kostlivec", "Kostlivci", "Kostlivce", "Kostlivcem"}, + {0, "Скелет", "Скелеты", "Скелета", "Скелетом"}, + {0, "Skelett", "Skelette", "Skelett", "Skelett"}, + }}, + {0xa059a1b8, 0, { // ""Cocytus"" + {0, "Kocyt", "Kocyt", "Kocytu", "w Kocycie"}, + {0, "Kokitos", "Kokitoslar", "Kokitosu", "Kokitosta"}, + {3, "Cocytus", "Cocyty", "Cocytus", "v Cocytu"}, + {3, "Коцит", "Коцит", "Коцит", "в Коците"}, + {0, "Kokytus", "Kokytus", "im Kokytus", "im Kokytus"}, + }}, + {0xa0601d59, 0, { // ""Tortoise"" + {0, "Żółw", "Żółwie", "Żółwia", "Żółwiem"}, + {0/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"}, + {1, "Ĺ˝elva", "Ĺ˝elvy", "Ĺ˝elva", "Ĺ˝elvou"}, + {1, "Черепаха", "Черепахи", "ЧерепахŃ", "Черепахой"}, + {0/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"/*MISSING*/ , "Tortoise"}, + }}, + {0xa0fdad5a, 0, { // ""Witch Apprentice"" + {1, "Uczennica", "Uczennice", "UczennicÄ™", "UczennicÄ…"}, + {1, "Cadı Kalfası", "Cadı Kalfaları", "Cadı Kalfasını", "Cadı Kalfasıyla"}, + {1, "UÄŤednice", "UÄŤednice", "UÄŤednici", "UÄŤednicĂ­"}, + {1, "Ведьма-Ńченица", "Ведьмы-Ńченицы", "ВедьмŃ-ŃченицŃ", "Ведьмой-Ńченицей"}, + {0, "Hexenlehrling", "Hexenlehrlinge", "Hexenlehrling", "Hexenlehrling"}, + }}, + {0xa37f5f1f, 0, { // ""Miner"" + {0, "GĂłrnik", "GĂłrnicy", "GĂłrnika", "GĂłrnikiem"}, + {0, "Madenci", "Madenciler", "Madenciyi", "Madenciyle"}, + {0, "HornĂ­k", "HornĂ­ci", "HornĂ­ka", "HornĂ­kem"}, + {0, "Шахтёр", "Шахтёры", "Шахтёра", "Шахтёром"}, + {0, "Minenarbeiter", "Minenarbeiter", "Minenarbeiter", "Minenarbeiter"}, + }}, + {0xa400d12d, 0, { // ""Demon Daisy"" + {1, "Czarcie Ziele", "Czarcie Ziela", "Czarcie Ziele", "Czarcim Zielem"}, + {1, "Ĺžeytan Papatyası", "Ĺžeytan Papatyaları", "Ĺžeytan Papatyasını", "Ĺžeytan Papatyasıyla"}, + {2, "ÄŚertovo kvĂ­tko", "ÄŚertova kvĂ­tka", "ÄŚertovo kvĂ­tko", "ÄŚertovĂ˝m kvĂ­tkem"}, + {1, "ĐĐ´Ńкая ромаŃка", "ĐĐ´Ńкие ромаŃки", "ĐĐ´ŃĐşŃŃŽ ромаŃĐşŃ", "ĐĐ´Ńкой ромаŃкой"}, + {0, "DämonenblĂĽmchen", "DämonenblĂĽmchen", "DämonenblĂĽmchen", "DämonenblĂĽmchen"}, + }}, + {0xa550aecd, 0, { // ""Knight"" + {0, "Rycerz", "Rycerze", "Rycerza", "Rycerzem"}, + {0, "Şövalye", "Şövalyeler", "Şövalyeyi", "Şövalyeyle"}, + {0, "RytĂ­Ĺ™", "RytĂ­Ĺ™i", "RytĂ­Ĺ™e", "RytĂ­Ĺ™em"}, + {0, "Рыцарь", "Рыцари", "Рыцаря", "Рыцарем"}, + {0, "Ritter", "Ritter", "Ritter", "Ritter"}, + }}, + {0xa7441417, 0, { // ""frozen lake"" + {2, "zamarzniÄ™te jezioro", "zamarzniÄ™te jeziora", "zamarzniÄ™te jezioro", "zamarzniÄ™tym jeziorem"}, + {2, "DonmuĹź Göl", "DonmuĹź Göller", "DonmuĹź GölĂĽ", "DonmuĹź Gölde"}, + {2, "zamrzlĂ© jezero", "zamrzlá jezera", "zamrzlĂ© jezero", "zemrzlĂ˝m jezerem"}, + {2, "замёрзŃее озеро", "замёрзŃие озёра", "замёрзŃее озеро", "замёрзŃим озером"}, + {0, "Gefrorene See", "Gefrorene Seen", "Gefrorene See", "Gefrorene See"}, + }}, + {0xa7829bdc, 0, { // ""White Dove Feather"" + {2, "GoĹ‚Ä™bie PiĂłro", "GoĹ‚Ä™bie PiĂłra", "GoĹ‚Ä™bie PiĂłro", "GoĹ‚Ä™bim PiĂłrem"}, + {0/*MISSING*/ , "White Dove Feather"/*MISSING*/ , "White Dove Feather"/*MISSING*/ , "White Dove Feather"/*MISSING*/ , "White Dove Feather"}, + {2, "HolubiÄŤĂ­ pero", "HolubiÄŤĂ­ pera", "HolubiÄŤĂ­ pero", "HolubiÄŤĂ­m perem"}, + {2, "ГолŃбиное перо", "ГолŃбиные перья", "ГолŃбиное перо", "ГолŃбиным пером"}, + {1, "Feder der weiĂźen Taube", "Federn der weiĂźen Taube", "Feder der weiĂźen Taube", "Feder der weiĂźen Taube"}, + }}, + {0xa7abedd3, 0, { // ""Flail Guard"" + {0, "StraĹĽnik z cepem", "StraĹĽnicy z cepami", "StraĹĽnika z cepem", "StraĹĽnikiem z cepem"}, + {0, "Topuz Muhafızı", "Topuz Muhafızları", "Topuz Muhafızını", "Topuz Muhafazıyla"}, + {0, "Strážce s Ĺ™emdihem", "Strážci s Ĺ™emdihy", "Strážce s Ĺ™emdihem", "Strážcem s Ĺ™emdihem"}, + {0, "Воин Ń Ń†ĐµĐżĐľĐĽ", "Воины Ń Ń†ĐµĐżĐľĐĽ", "Воина Ń Ń†ĐµĐżĐľĐĽ", "Воином Ń Ń†ĐµĐżĐľĐĽ"}, + {0, "Morgenstern-Wächter", "Morgenstern-Wächter", "Morgenstern-Wächter", "Morgenstern-Wächter"}, + }}, + {0xa92b4827, 0, { // ""Dark Troll"" + {0, "Mroczny Troll", "Mroczne Trolle", "Mrocznego Trolla", "Mrocznym Trollem"}, + {0, "Kara Trol", "Kara Troller", "Kara TrolĂĽ", "Kara Trolle"}, + {0, "TemnĂ˝ troll", "TemnĂ­ trollovĂ©", "TemnĂ©ho trolla", "TemnĂ˝m trollem"}, + {0, "Тёмный тролль", "Тёмные тролли", "Тёмного тролля", "Тёмным троллем"}, + {0, "Dunkle Troll", "Dunkle Trolle", "Dunklen Troll", "Dunklen Troll"}, + }}, + {0xa94c7a1b, 0, { // ""stranded boat"" + {1, "Ĺ‚Ăłdka na mieliĹşnie", "Ĺ‚Ăłdki na mieliĹşnie", "Ĺ‚ĂłdkÄ™ na mieliĹşnie", "w Ĺ‚Ăłdce na mieliĹşnie"}, + {1, "terkedilmiĹź bot", "terkedilmiĹź botlar", "terkedilmiĹź botu", "terkedilmiĹź botla"}, + {3, "ÄŤlun na mÄ›lÄŤinÄ›", "ÄŤluny na mÄ›lÄŤinÄ›", "ÄŤlun na mÄ›lÄŤinÄ›", "ve ÄŤlunu na mÄ›lÄŤinÄ›"}, + {1, "лодка на мели", "лодки на мели", "Đ»ĐľĐ´ĐşŃ Đ˝Đ° мели", "в лодке на мели"}, + {2, "gestrandetes Boot", "gestrandete Boote", "gestrandete Boot", "gestrandete Boot"}, + }}, + {0xa9f08e70, 0, { // ""Sleeping Bull"" + {0, "ĹšpiÄ…cy Byk", "ĹšpiÄ…ce Byki", "ĹšpiÄ…cego Byka", "ĹšpiÄ…cym Bykiem"}, + {0/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"}, + {0, "SpĂ­cĂ­ BĂ˝k", "SpĂ­cĂ­ BĂ˝ci", "SpĂ­cĂ­ho BĂ˝ka", "SpĂ­cĂ­m BĂ˝kem"}, + {0, "Спящий бык", "Спящие быки", "Спящего быка", "Спящим быком"}, + {0/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"/*MISSING*/ , "Sleeping Bull"}, + }}, + {0xa9f73f16, 0, { // ""rock I"" + {1, "skaĹ‚a I", "skaĹ‚y I", "skaĹ‚Ä™ I", "skaĹ‚Ä… I"}, + {1, "kaya I", "kayalar I", "kayayı I", "kayayla I"}, + {1, "skála I", "skály I", "skálu I", "skálou I"}, + {1, "Ńкалы I", "Ńкалы I", "ŃĐşĐ°Đ»Ń I", "Ńкалой I"}, + {0, "Fels I", "Felsen I", "Fels I", "Fels I"}, + }}, + {0xaa24f3f1, 0, { // ""Orb of Trickery"" + {1, "Sfera Sztuczek", "Sfery Sztuczek", "SferÄ™ Sztuczek", "SferÄ… Sztuczek"}, + {1, "Kandırma KĂĽresi", "Kandırma KĂĽreleri", "Kandırma KĂĽresini", "Kandırma KĂĽresiyle"}, + {1, "SfĂ©ra Klamu", "SfĂ©ry Klamu", "SfĂ©ru Klamu", "SfĂ©rou Klamu"}, + {1, "Сфера ХитроŃти", "Сферы ХитроŃти", "ĐˇŃ„ĐµŃ€Ń ĐĄĐ¸Ń‚Ń€ĐľŃти", "Сферой ХитроŃти"}, + {0, "Orb des Truges", "Orbs des Truges", "Orb des Truges", "Orb des Truges"}, + }}, + {0xab04e11c, 0, { // ""Icy Land"" + {1, "Lodowa Kraina", "Lodowa Kraina", "LodowÄ… KrainÄ™", "w Lodowej Krainie"}, + {1, "Buz Diyarı", "Buz Diyarları", "Buz Diyarını", "Buz Diyarında"}, + {3, "LedovĂ˝ kraj", "LedovĂ© kraje", "LedovĂ˝ kraj", "v LedovĂ©m kraji"}, + {1, "Ледяная земля", "Ледяные земли", "ЛедянŃŃŽ землю", "в Ледяной земле"}, + {2, "Eisiges Land", "Eisige Länder", "im Eisigen Land", "im Eisigen Land"}, + }}, + {0xac9d8155, 0, { // ""Garnet"" + {3, "Granat", "Granaty", "Granat", "Granatem"}, + {3, "Nartaşı", "NartaĹźları", "Nartaşını", "Nartaşıyla"}, + {3, "Granát", "Granáty", "Granát", "Granátem"}, + {3, "Гранат", "Гранаты", "Гранат", "Гранатом"}, + {0, "Granat", "Granate", "Granat", "Granat"}, + }}, + {0xad105028, 0, { // ""Dead Ivy"" + {0, "Martwy Bluszcz", "Martwe Bluszcze", "Martwy Bluszcz", "Martwym Bluszczem"}, + {0, "Ă–lĂĽ Sarmaşık", "Ă–lĂĽ Sarmaşıklar", "Ă–lĂĽ Sarmaşığı", "Ă–lĂĽ Sarmaşıkla"}, + {0, "MrtvĂ˝ bĹ™eÄŤĹĄan", "MrtvĂ© bĹ™eÄŤĹĄany", "MrtvĂ˝ bĹ™eÄŤĹĄan", "MrtvĂ˝m bĹ™eÄŤĹĄanem"}, + {3, "Мёртвый плющ", "Мёртвые плющи", "Мёртвый плющ", "Мёртвым плющом"}, + {0, "Toter Efeu", "Tote Efeue", "Toten Efeu", "Toten Efeu"}, + }}, + {0xad8cbc5b, 0, { // ""Butterfly"" + {0, "Motylek", "Motylki", "Motylka", "Motylkiem"}, + {0/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"}, + {0, "MotĂ˝lek", "MotĂ˝lci", "MotĂ˝lka", "MotĂ˝lkem"}, + {1, "Бабочка", "Бабочки", "БабочкŃ", "Бабочкой"}, + {0/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"/*MISSING*/ , "Butterfly"}, + }}, + {0xade3ee7a, 0, { // ""Orb of Love"" + {1, "Sfera MiĹ‚oĹ›ci", "Sfery MiĹ‚oĹ›ci", "SferÄ™ MiĹ‚oĹ›ci", "SferÄ… MiĹ‚oĹ›ci"}, + {1, "AĹźk KĂĽresi", "AĹźk KĂĽreleri", "AĹźk KĂĽresini", "AĹźk KĂĽresiyle"}, + {1, "SfĂ©ra Lásky", "SfĂ©ry Lásky", "SfĂ©ru Lásky", "SfĂ©rou Lásky"}, + {1, "Сфера Любви", "Сферы Любви", "ĐˇŃ„ĐµŃ€Ń Đ›ŃŽĐ±Đ˛Đ¸", "Сферой Любви"}, + {0, "Orb der Liebe", "Orbs der Liebe", "Orb der Liebe", "Orb der Liebe"}, + }}, + {0xaefc7f29, 0, { // ""Eternal Fire"" + {3, "Wieczny OgieĹ„", "Wieczne Ognie", "Wieczny OgieĹ„", "Wiecznym Ogniem"}, + {3, "Sonsuz AteĹź", "Sonsuz AteĹźler", "Sonsuz AteĹźi", "Sonsuz AteĹźle"}, + {3, "VěčnĂ˝ OheĹ", "VěčnĂ© OhnÄ›", "VěčnĂ˝ OheĹ", "VěčnĂ˝m OhnÄ›m"}, + {3, "Вечный огонь", "Вечные огни", "Вечный огонь", "Вечным огнём"}, + {2, "Ewiges Feuer", "Ewige Feuer", "Ewige Feuer", "Ewige Feuer"}, + }}, + {0xaf24c8c9, 0, { // ""Orb of Shielding"" + {1, "Sfera Tarczy", "Sfery Tarczy", "SferÄ™ Tarczy", "SferÄ… Tarczy"}, + {1, "Kalkan KĂĽresi", "Kalkan KĂĽreleri", "Kalkan KĂĽresini", "Kalkan KĂĽresiyle"}, + {1, "SfĂ©ra Ĺ tĂ­tu", "SfĂ©ry Ĺ tĂ­tu", "SfĂ©ru Ĺ tĂ­tu", "SfĂ©rou Ĺ tĂ­tu"}, + {1, "Сфера Щита", "Сферы Щита", "ĐˇŃ„ĐµŃ€Ń Đ©Đ¸Ń‚Đ°", "Сферой Щита"}, + {0, "Orb der Abschirmung", "Orbs der Abschirmung", "Orb der Abschirmung", "Orb der Abschirmung"}, + }}, + {0xaf37b549, 0, { // ""Green Grass"" + {1, "Zielona Trawa", "Zielone Trawy", "ZielonÄ… TrawÄ™", "ZielonÄ… TrawÄ…"}, + {0/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"}, + {1, "Zelená Tráva", "ZelenĂ© Trávy", "Zelenou Trávu", "Zelenou Trávou"}, + {1, "Зелёная трава", "Зелёные травы", "ЗелёнŃŃŽ травŃ", "Зелёной травой"}, + {0/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"/*MISSING*/ , "Green Grass"}, + }}, + {0xb005fb30, 0, { // ""Orb of Flash"" + {1, "Sfera BĹ‚ysku", "Sfery BĹ‚ysku", "SferÄ™ BĹ‚ysku", "SferÄ… BĹ‚ysku"}, + {1, "ĹžimĹźek KĂĽresi", "ĹžimĹźek KĂĽreleri", "ĹžimĹźek KĂĽresini", "ĹžimĹźek KĂĽresiyle"}, + {1, "SfĂ©ra Záblesku", "SfĂ©ry Záblesku", "SfĂ©ru Záblesku", "SfĂ©rou Záblesku"}, + {1, "Сфера Đ’ŃпыŃки", "Сферы Đ’ŃпыŃки", "ĐˇŃ„ĐµŃ€Ń Đ’ŃпыŃки", "Сферой Đ’ŃпыŃки"}, + {0, "Orb des Blitzes", "Orbs des Blitzes", "Orb des Blitzes", "Orb des Blitzes"}, + }}, + {0xb170338a, 0, { // ""Storm Troll"" + {0, "Burzowy Troll", "Burzowe Trolle", "Burzowego Trolla", "Burzowym Trollem"}, + {0, "Fırtına TrolĂĽ", "Fırtına Trolleri", "Fırtına TrolĂĽnĂĽ", "Fırtına TrolĂĽyle"}, + {0, "BouĹ™kotroll", "BouĹ™kotrollovĂ©", "BouĹ™kotrolla", "BouĹ™kotrollem"}, + {0, "Тролль бŃри", "Тролли бŃри", "Тролля бŃри", "Троллем бŃри"}, + {0, "Sturmtroll", "Sturmtrolle", "Sturmtroll", "Sturmtroll"}, + }}, + {0xb21c83e5, 0, { // ""ancient grave"" + {3, "stary grĂłb", "stare groby", "stary grĂłb", "starym grobem"}, + {3, "Antik Mezar", "Antik Mezarlar", "Antik Mezarı", "Antik Mezarda"}, + {3, "starĂ˝ hrob", "starĂ© hroby", "starĂ˝ hrob", "starĂ˝m hrobem"}, + {1, "древняя могила", "древние могилы", "древнюю могилŃ", "древней могилой"}, + {0, "Antike Grab", "Antike Gräber", "Antike Grab", "Antike Grab"}, + }}, + {0xb25cbbd6, 0, { // ""Metal Beast"" + {3, "Metalowy StwĂłr", "Metalowe Stwory", "Metalowego Stwora", "Metalowym Stworem"}, + {3, "Metal Canavar", "Metal Canavarları", "Metal Canavarını", "Metal Canavarıyla"}, + {1, "Kovová bestie", "KovovĂ© bestie", "Kovovou bestii", "Kovovou bestiĂ­"}, + {0, "Железный зверь", "Железные звери", "Железного зверя", "Железным зверем"}, + {2, "Metallbiest", "Metallbiester", "Metallbiest", "Metallbiest"}, + }}, + {0xb29e8496, 0, { // ""Zombie"" + {0, "Zombie", "Zombies", "Zombie", "Zombie"}, + {0, "Hortlak", "Hortlaklar", "Hortlağı", "Hortlakla"}, + {1, "Zombie", "Zombie", "Zombii", "ZombiĂ­"}, + {0, "Зомби", "Зомби", "Зомби", "Зомби"}, + {0, "Zombie", "Zombies", "Zombie", "Zombie"}, + }}, + {0xb2e3b8ed, 0, { // ""Hell"" + {2, "PiekĹ‚o", "PiekĹ‚o", "PiekĹ‚o", "w Piekle"}, + {2, "Cehennem", "Cehennemler", "Cehennemi", "Cehennemde"}, + {2, "Peklo", "Pekla", "Peklo", "v Pekle"}, + {3, "ĐĐ´", "ĐĐ´", "ĐĐ´", "в ĐĐ´Ń"}, + {1, "Hölle", "Höllen", "in der Hölle", "in der Hölle"}, + }}, + {0xb4205a72, 0, { // ""saloon wall"" + {1, "Ĺ›ciana salonu", "Ĺ›ciany salonu", "Ĺ›cianÄ™ salonu", "Ĺ›cianÄ… salonu"}, + {1, "bar duvarı", "bar duvarları", "bar duvarını", "bar duvarıyla"}, + {1, "zeÄŹ saloonu", "zdi saloonu", "zeÄŹ saloonu", "zdĂ­ saloonu"}, + {1, "Ńтена ŃĐ°Đ»Ńна", "Ńтены ŃĐ°Đ»Ńнов", "ŃŃ‚ĐµĐ˝Ń ŃĐ°Đ»Ńна", "Ńтеной ŃĐ°Đ»Ńна"}, + {1, "Saloon Wand", "Saloon Wände", "Saloon Wand", "Saloon Wand"}, + }}, + {0xb4c63743, 0, { // ""Ratling"" + {0, "Szczurak", "Szczuraki", "Szczuraka", "Szczurakiem"}, + {0/*MISSING*/ , "Ratling"/*MISSING*/ , "Ratling"/*MISSING*/ , "Ratling"/*MISSING*/ , "Ratling"}, + {0, "Krysák", "Krysáci", "Krysáka", "Krysákem"}, + {0, "КрыŃолюд", "КрыŃолюди", "КрыŃолюда", "КрыŃолюдом"}, + {0, "Rattenmensch", "Rattenmenschen", "Rattenmensch", "Rattenmensch"}, + }}, + {0xb4fd21ea, 0, { // ""ladder"" + {1, "drabina", "drabiny", "drabinÄ™", "drabinÄ…"}, + {1, "merdiven", "merdivenler", "merdiveni", "merdivenle"}, + {3, "Ĺľebřík", "Ĺľebříky", "Ĺľebřík", "Ĺľebříkem"}, + {1, "леŃтница", "леŃтницы", "леŃтницŃ", "леŃтницей"}, + {1, "Leiter", "Leitern", "Leiter", "Leiter"}, + }}, + {0xb52f7b64, 0, { // ""Orb of Life"" + {1, "Sfera Ĺ»ycia", "Sfery Ĺ»ycia", "SferÄ™ Ĺ»ycia", "SferÄ… Ĺ»ycia"}, + {1, "YaĹźam KĂĽresi", "YaĹźam KĂĽreleri", "YaĹźam KĂĽresini", "YaĹźam KĂĽresiyle"}, + {1, "SfĂ©ra Ĺ˝ivota", "SfĂ©ry Ĺ˝ivota", "SfĂ©ru Ĺ˝ivota", "SfĂ©rou Ĺ˝ivota"}, + {1, "Сфера Жизни", "Сферы Жизни", "ĐˇŃ„ĐµŃ€Ń Đ–Đ¸Đ·Đ˝Đ¸", "Сферой Жизни"}, + {0, "Orb des Lebens", "Orbs des Lebens", "Orb des Lebens", "Orb des Lebens"}, + }}, + {0xb5fa80f5, 0, { // ""Rose Beauty"" + {1, "Różana PiÄ™kność", "Różane PiÄ™knoĹ›ci", "RóżanÄ… PiÄ™kność", "RóżanÄ… PiÄ™kność"}, + {0/*MISSING*/ , "Rose Beauty"/*MISSING*/ , "Rose Beauty"/*MISSING*/ , "Rose Beauty"/*MISSING*/ , "Rose Beauty"}, + {1, "RĹŻĹľová kráska", "RĹŻĹľovĂ© krásky", "RĹŻĹľovou krásku", "RĹŻĹľovou krásku"}, + {1, "Розовая краŃотка", "Розовые краŃотки", "РозовŃŃŽ краŃоткŃ", "Розовой краŃоткой"}, + {1, "Rosenschönheit", "Rosenschönheiten", "Rosenschönheit", "Rosenschönheit"}, + }}, + {0xb675c845, 0, { // ""Plane of Earth"" + {1, "Strefa Ziemi", "Strefy Ziemi", "StrefÄ™ Ziemi", "w Strefie Ziemi"}, + {1, "Toprak DĂĽzlemi", "Toprak DĂĽzlemleri", "Toprak DĂĽzlemini", "Toprak DĂĽzleminde"}, + {1, "Rovina ZemÄ›", "Roviny ZemÄ›", "Rovinu ZemÄ›", "v RovinÄ› ZemÄ›"}, + {1, "ПлоŃкоŃŃ‚ŃŚ Земли", "ПлоŃкоŃти Земли", "ПлоŃкоŃŃ‚ŃŚ Земли", "в ПлоŃкоŃти Земли"}, + {1, "Erdebene ", "Erdebenen", "Erdebene", "Erdebene"}, + }}, + {0xb6ca63c6, 0, { // ""Crystal Sage"" + {0, "KrysztaĹ‚owy MÄ™drzec", "KrysztaĹ‚owi MÄ™drcy", "KrysztaĹ‚owego MÄ™drca", "KrysztaĹ‚owym MÄ™drcem"}, + {0, "Buz Piri", "Buz Pirleri", "Buz Pirini", "Buz Piriyle"}, + {0, "KĹ™išťálovĂ˝ mudrc", "KĹ™išťálovĂ­ mudrci", "KĹ™išťálovĂ©ho mudrce", "KĹ™išťálovĂ˝m mudrcem"}, + {0, "КриŃтальный ĐĽŃдрец", "КриŃтальные ĐĽŃдрецы", "КриŃтального ĐĽŃдреца", "КриŃтальным ĐĽŃдрецом"}, + {0, "Kristallweise", "Kristallweisen", "Kristallweisen", "Kristallweisen"}, + }}, + {0xb7d5f347, 0, { // ""Cult Leader"" + {0, "PrzywĂłdca Kultu", "PrzywĂłdcy Kultu", "PrzywĂłdcÄ™ Kultu", "PrzywĂłdcÄ… Kultu"}, + {0, "KĂĽlt Lideri", "KĂĽlt Liderleri", "KĂĽlt Liderini", "KĂĽlt Lideriyle"}, + {0, "VĹŻdce kultu", "VĹŻdcovĂ© kultu", "VĹŻdce kultu", "VĹŻdcem kultu"}, + {0, "Лидер ĐşŃльта", "Лидеры ĐşŃльта", "Лидера ĐşŃльта", "Лидером ĐşŃльта"}, + {0, "AnfĂĽhrer des Kultes", "AnfĂĽhrer des Kultes", "AnfĂĽhrer des Kultes", "AnfĂĽhrer des Kultes"}, + }}, + {0xb80cce44, 0, { // ""trunk"" + {3, "pieĹ„", "pnie", "pieĹ„", "pniem"}, + {0/*MISSING*/ , "trunk"/*MISSING*/ , "trunk"/*MISSING*/ , "trunk"/*MISSING*/ , "trunk"}, + {3, "kmen", "kmeny", "kmen", "kmenem"}, + {3, "пень", "пни", "пень", "пнём"}, + {0, "Baumstamm", "Baumstämme", "Baumstamm", "Baumstamm"}, + }}, + {0xb819b29d, 0, { // ""Fire Witch"" + {1, "Czarownica Ognia", "Czarownice Ognia", "CzarownicÄ™ Ognia", "CzarownicÄ… Ognia"}, + {1, "AteĹź Cadısı", "AteĹź Cadıları", "AteĹź Cadısını", "AteĹź Cadısıyla"}, + {1, "ÄŚarodÄ›jnice OhnÄ›", "ÄŚarodÄ›jnice OhnÄ›", "ÄŚarodÄ›jnici OhnÄ›", "ÄŚarodÄ›jnicĂ­ OhnÄ›"}, + {1, "Ведьма огня", "Ведьмы огня", "Đ’ĐµĐ´ŃŚĐĽŃ ĐľĐłĐ˝ŃŹ", "Ведьмой огня"}, + {1, "Feuerhexe", "Feuerhexen", "Feuerhexe", "Feuerhexe"}, + }}, + {0xb89f31c7, 0, { // ""sea"" + {1, "morze", "morza", "morze", "morzem"}, + {1, "deniz", "denizler", "denizi", "denizle"}, + {2, "moĹ™e", "moĹ™e", "moĹ™e", "moĹ™em"}, + {3, "море", "моря", "море", "морем"}, + {0, "See", "Seen", "See", "See"}, + }}, + {0xb8b94a1c, 0, { // ""Aether Witch"" + {1, "Czarownica Eteru", "Czarownice Eteru", "CzarownicÄ™ Eteru", "CzarownicÄ… Eteru"}, + {1, "Eter Cadısı", "Eter Cadıları", "Eter Cadısını", "Eter Cadısıyla"}, + {1, "ÄŚarodÄ›jnice Éteru", "ÄŚarodÄ›jnice Éteru", "ÄŚarodÄ›jnici Éteru", "ÄŚarodÄ›jnicĂ­ Éteru"}, + {1, "Ведьма эфира", "Ведьмы эфира", "Đ’ĐµĐ´ŃŚĐĽŃ ŃŤŃ„Đ¸Ń€Đ°", "Ведьмой эфира"}, + {1, "Ă„therhexe", "Ă„therhexen", "Ă„therhexe", "Ă„therhexe"}, + }}, + {0xba60cabe, 0, { // ""big tree"" + {2, "duĹĽe drzewo", "duĹĽe drzewa", "duĹĽe drzewo", "duĹĽym drzewem"}, + {2, "BĂĽyĂĽk AÄźaç", "BĂĽyĂĽk AÄźaçlar", "BĂĽyĂĽk AÄźacı", "BĂĽyĂĽk AÄźaçla"}, + {3, "velkĂ˝ strom", "velkĂ© stromy", "velkĂ˝ strom", "velkĂ˝m stromem"}, + {2, "больŃое дерево", "больŃие деревья", "больŃое дерево", "больŃим деревом"}, + {0, "GroĂźer Baum", "GroĂźe Bäume", "GroĂźer Baum", "GroĂźer Baum"}, + }}, + {0xbbf36b59, 0, { // ""Orb of the Shell"" + {1, "Sfera Skorupy", "Sfery Skorupy", "SferÄ™ Skorupy", "SferÄ… Skorupy"}, + {0/*MISSING*/ , "Orb of the Shell"/*MISSING*/ , "Orb of the Shell"/*MISSING*/ , "Orb of the Shell"/*MISSING*/ , "Orb of the Shell"}, + {1, "SfĂ©ra Krunýře", "SfĂ©ry Krunýře", "SfĂ©ru Krunýře", "SfĂ©rou Krunýře"}, + {1, "Сфера Панциря", "Сферы Панциря", "ĐˇŃ„ĐµŃ€Ń ĐźĐ°Đ˝Ń†Đ¸Ń€ŃŹ", "Сферой Панциря"}, + {0, "Orb des Panzers", "Orbs des Panzers", "Orb des Panzers", "Orb des Panzers"}, + }}, + {0xbc651aba, 0, { // ""Orb of Storms"" + {1, "Sfera Burzy", "Sfery Burzy", "SferÄ™ Burzy", "SferÄ… Burzy"}, + {1, "Fırtına KĂĽresi", "Fırtına KĂĽreleri", "Fırtına KĂĽresini", "Fırtına KĂĽresiyle"}, + {1, "SfĂ©ra Bouří", "SfĂ©ry Bouří", "SfĂ©ru Bouří", "SfĂ©rou Bouří"}, + {1, "Сфера Đ‘Ńри", "Сферы Đ‘Ńри", "ĐˇŃ„ĐµŃ€Ń Đ‘Ńри", "Сферой Đ‘Ńри"}, + {0, "Orb des Sturms", "Orbs des Sturms", "Orb des Sturms", "Orb des Sturms"}, + }}, + {0xbda6c7e3, 1, { // ""Camelot"" + {3, "Camelot", "Camelot", "Camelot", "w Camelot"}, + {3, "Kamelot", "Kamelotlar", "Kamelotu", "Kamelotta"}, + {3, "Camelot", "Cameloty", "Camelotu", "v Camelotu"}, + {3, "Камелот", "Камелот", "Камелот", "в Камелоте"}, + {2, "Camelot", "Camelot", "in Camelot", "in Camelot"}, + }}, + {0xbdebcdca, 0, { // ""weak branch"" + {1, "sĹ‚aba gaĹ‚Ä…Ĺş", "sĹ‚abe gaĹ‚Ä™zie", "sĹ‚abÄ… gaĹ‚Ä…Ĺş", "sĹ‚abÄ… gaĹ‚Ä™ziÄ…"}, + {0/*MISSING*/ , "weak branch"/*MISSING*/ , "weak branch"/*MISSING*/ , "weak branch"/*MISSING*/ , "weak branch"}, + {1, "tenká vÄ›tev", "tenkĂ© vÄ›tve", "tenkou vÄ›tev", "tenkou vÄ›tvĂ­"}, + {1, "тонкая ветка", "тонкие ветки", "тонкŃŃŽ веткŃ", "тонкой веткой"}, + {0, "schwacher Ast", "schwachen Ă„ste", "schwachen Ast", "schwachen Ast"}, + }}, + {0xbe4d2c8c, 0, { // ""stone gargoyle bridge"" + {3, "most z rzygacza", "mosty z rzygacza", "most z rzygacza", "mostem z rzygacza"}, + {3, "taĹź çörten köprĂĽsĂĽ", "taĹź çörten köprĂĽleri", "taĹź çörten köprĂĽsĂĽnĂĽ", "taĹź çörten köprĂĽsĂĽyle"}, + {3, "most z chrliÄŤe", "mosty z chrliÄŤĹŻ", "most z chrliÄŤe", "mostem z chrliÄŤe"}, + {3, "ĐĽĐľŃŃ‚ Ń ĐłĐľŃ€ĐłŃльей", "ĐĽĐľŃŃ‚Ń‹ Ń ĐłĐľŃ€ĐłŃльями", "ĐĽĐľŃŃ‚ Ń ĐłĐľŃ€ĐłŃльей", "ĐĽĐľŃтом Ń ĐłĐľŃ€ĐłŃльями"}, + {1, "Steingargoyle-BrĂĽcke", "Steingargoyle-BrĂĽcken", "Steingargoyle-BrĂĽcke", "Steingargoyle-BrĂĽcke"}, + }}, + {0xc040393b, 0, { // ""barrow wall"" + {1, "Ĺ›ciana kurhanu", "Ĺ›ciany kurhanu", "Ĺ›cianÄ™ kurhanu", "Ĺ›cianÄ… kurhanu"}, + {0/*MISSING*/ , "barrow wall"/*MISSING*/ , "barrow wall"/*MISSING*/ , "barrow wall"/*MISSING*/ , "barrow wall"}, + {1, "stÄ›na mohyly", "stÄ›ny mohyly", "stÄ›nÄ› mohyly", "stÄ›nou mohyly"}, + {1, "Ńтена ĐşŃргана", "Ńтены ĐşŃргана", "ŃŃ‚ĐµĐ˝Ń ĐşŃргана", "Ńтеной ĐşŃргана"}, + {1, "HĂĽgelwand", "HĂĽgelwände", "HĂĽgelwand", "HĂĽgelwand"}, + }}, + {0xc0576c8e, 0, { // ""Ivy Root"" + {0, "KorzeĹ„ Bluszczu", "Korzenie Bluszczu", "KorzeĹ„ Bluszczu", "Korzeniem Bluszczu"}, + {0, "Sarmaşık KökĂĽ", "Sarmaşık Kökleri", "Sarmaşık KökĂĽnĂĽ", "Sarmaşık KökĂĽyle"}, + {3, "KoĹ™en bĹ™eÄŤĹĄanu", "KoĹ™eny bĹ™eÄŤĹĄanu", "KoĹ™en bĹ™eÄŤĹĄanu", "KoĹ™enem bĹ™eÄŤĹĄanu"}, + {3, "Корень плюща", "Корни плюща", "Корень плюща", "Корнем плюща"}, + {1, "Efeu Wurzel", "Efeu Wurzeln", "Efeu Wurzel", "Efeu Wurzel"}, + }}, + {0xc0c33bfe, 0, { // ""opening plate"" + {1, "otwierajÄ…ca pĹ‚yta", "otwierajÄ…ce pĹ‚yty", "otwierajÄ…cÄ… pĹ‚ytÄ™", "otwierajÄ…cÄ… pĹ‚ytÄ…"}, + {1, "açma levhası", "açma levhaları", "açma levhasını", "açma levhasıyla"}, + {1, "otvĂ­racĂ­ deska", "otvĂ­racĂ­ desky", "otvĂ­racĂ­ desku", "otvĂ­racĂ­ deskou"}, + {1, "открывающая плита", "открывающие плиты", "открывающŃŃŽ плитŃ", "открывающей плитой"}, + {0, "Ă–ffnungsmechanismus", "Ă–ffnungsmechanismen", "Ă–ffnungsmechanismus", "Ă–ffnungsmechanismus"}, + }}, + {0xc3512f3c, 0, { // ""Orb of Beauty"" + {1, "Sfera PiÄ™kna", "Sfery PiÄ™kna", "SferÄ™ PiÄ™kna", "SferÄ… PiÄ™kna"}, + {0/*MISSING*/ , "Orb of Beauty"/*MISSING*/ , "Orb of Beauty"/*MISSING*/ , "Orb of Beauty"/*MISSING*/ , "Orb of Beauty"}, + {1, "SfĂ©ra Krásy", "SfĂ©ry Krásy", "SfĂ©ru Krásy", "SfĂ©rou Krásy"}, + {1, "Сфера краŃоты", "Сферы краŃоты", "ĐˇŃ„ĐµŃ€Ń ĐşŃ€Đ°Ńоты", "Сферой краŃоты"}, + {0, "Orb der Schönheit", "Orbs der Schönheit", "Orb der Schönheit", "Orb der Schönheit"}, + }}, + {0xc66ea1de, 0, { // ""Parrot"" + {1, "Papuga", "Papugi", "PapugÄ™", "PapugÄ…"}, + {1, "PapaÄźan", "PapaÄźanlar", "PapaÄźanı", "PapaÄźanla"}, + {0, "Papoušek", "Papoušci", "Papouška", "Papouškem"}, + {0, "ПопŃгай", "ПопŃгаи", "ПопŃгая", "ПопŃгаем"}, + {0, "Papagei", "Papageien", "Papagei", "Papagei"}, + }}, + {0xc6e66c93, 0, { // ""Vampire Bat"" + {0, "Wampir", "Wampiry", "Wampira", "Wampirem"}, + {0/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"}, + {0, "VampĂ˝r", "Vampýři", "VampĂ˝ra", "VampĂ˝rem"}, + {0, "Вампир", "Вампиры", "Вампира", "Вампиром"}, + {0/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"/*MISSING*/ , "Vampire Bat"}, + }}, + {0xc875735e, 2, { // ""Kraken Depths"" + {1, "GĹ‚Ä™biny KrakenĂłw", "GĹ‚Ä™biny KrakenĂłw", "GĹ‚Ä™biny KrakenĂłw", "w GĹ‚Ä™binach KrakenĂłw"}, + {0/*MISSING*/ , "Kraken Depths"/*MISSING*/ , "Kraken Depths"/*MISSING*/ , "Kraken Depths"/*MISSING*/ , "Kraken Depths"}, + {1, "KrakenĂ­ hlubiny", "KrakenĂ­ hlubiny", "KrakenĂ­ hlubiny", "v KrakenĂ­ch hlubinách"}, + {1, "Đ“Đ»Ńбины кракенов", "Đ“Đ»Ńбины кракенов", "Đ“Đ»Ńбины кракенов", "в Đ“Đ»Ńбинах кракенов"}, + {1, "Krakentiefen", "Krakentiefen", "in den Krakentiefen", "in den Krakentiefen"}, + }}, + {0xc8c66d41, 0, { // ""Coral"" + {3, "Koral", "Korale", "Koral", "Koralem"}, + {0/*MISSING*/ , "Coral"/*MISSING*/ , "Coral"/*MISSING*/ , "Coral"/*MISSING*/ , "Coral"}, + {3, "Korál", "Korály", "Korál", "Korálem"}, + {3, "Коралл", "Кораллы", "Коралл", "Кораллом"}, + {3, "Koralle", "Korallen", "Koralle", "Koralle"}, + }}, + {0xc93e7fe9, 0, { // ""giant rug"" + {3, "wielki dywan", "wielkie dywany", "wielki dywan", "wielkim dywanem"}, + {3, "devasa kilim", "devasa kilimler", "devasa kilimi", "devasa kilimle"}, + {3, "obří koberec", "obří koberce", "obří koberec", "obřím kobercem"}, + {3, "огромный ковёр", "огромные ковры", "огромный ковёр", "огромным ковром"}, + {3, "Riesiger Teppich", "Riesige Teppiche", "Riesigen Teppich", "Riesigen Teppich"}, + }}, + {0xc956dc2a, 0, { // ""Trollheim"" + {3, "Trollheim", "Trollheim", "Trollheim", "w Trollheim"}, + {0/*MISSING*/ , "Trollheim"/*MISSING*/ , "Trollheim"/*MISSING*/ , "Trollheim"/*MISSING*/ , "Trollheim"}, + {3, "Trollheim", "Trollheimy", "Trollheim", "v Trollheimu"}, + {3, "Тролльхейм", "Тролльхеймы", "Тролльхейм", "в Тролльхейме"}, + {3, "Trollheim", "Trollheim", "Trollheim", "Trollheim"}, + }}, + {0xc9a76da2, 0, { // ""Phoenix Feather"" + {2, "PiĂłro Feniksa", "PiĂłra Feniksa", "PiĂłro Feniksa", "PiĂłrem Feniksa"}, + {2, "Anka KuĹźu TĂĽyĂĽ", "Anka KuĹźu TĂĽyleri", "Anka KuĹźu TĂĽyĂĽnĂĽ", "Anka KuĹźu TĂĽyĂĽyle"}, + {2, "FĂ©nixovo pĂ­rko", "FĂ©nixova pĂ­rka", "FĂ©nixovo pĂ­rko", "FĂ©nixovĂ˝m pĂ­rkem"}, + {2, "Перо феникŃĐ°", "Перья феникŃĐ°", "Перо феникŃĐ°", "Пером феникŃĐ°"}, + {1, "Phönixfeder", "Phönixfedern", "Phönixfeder", "Phönixfeder"}, + }}, + {0xc9e27f87, 0, { // ""Reptile floor"" + {1, "Jaszczurza podĹ‚oga", "Jaszczurze podĹ‚ogi", "JaszczurzÄ… podĹ‚ogÄ™", "JaszczurzÄ… podĹ‚ogÄ…"}, + {0/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"}, + {1, "JeštÄ›rÄŤĂ­ podlaha", "JeštÄ›rščí podlahy", "JeštÄ›rÄŤĂ­ podlahu", "JeštÄ›rÄŤĂ­ podlahou"}, + {3, "Ящеричный пол", "Ящеричные полы", "Ящеричный пол", "Ящеричным полом"}, + {0/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"/*MISSING*/ , "Reptile floor"}, + }}, + {0xca5028f9, 0, { // ""Hyperstone"" + {3, "HiperkamieĹ„", "Hiperkamienie", "HiperkamieĹ„", "Hiperkamieniem"}, + {3, "AĹźkıntaĹź", "AĹźkıntaĹźlar", "AĹźkıntaşı", "AĹźkıntaĹźla"}, + {3, "Hyperkam", "Hyperkamy", "Hyperkam", "Hyperkamem"}, + {3, "Гиперкамень", "Гиперкамни", "Гиперкамень", "Гиперкамнем"}, + {0, "Hyperstein", "Hypersteine", "Hyperstein", "Hyperstein"}, + }}, + {0xcad7fc4d, 1, { // ""R'Lyeh"" + {2, "R'Lyeh", "R'Lyeh", "R'Lyeh", "w R'Lyeh"}, + {2, "R'Lyeh", "R'Lyeh", "R'Lyeh", "R'Lyeh"}, + {2, "R'Lyeh", "R'Lyeh", "R'Lyeh", "v R'Lyeh"}, + {3, "Đ 'Льех", "Đ 'Льех", "Đ 'Льех", "в Đ 'Льехе"}, + {2, "R'Lyeh", "R'Lyeh", "in R'Lyeh", "in R'Lyeh"}, + }}, + {0xcb051b8b, 0, { // ""Running Dog"" + {0, "BiegnÄ…cy Pies", "BiegnÄ…ce Psy", "BiegnÄ…cego Psa", "BiegnÄ…cym Psem"}, + {0, "KoĹźan Köpek", "KoĹźan Köpekler", "KoĹźan KöpeÄźi", "KoĹźan Köpekle"}, + {0, "BěžícĂ­ pes", "BěžícĂ­ psi", "BěžícĂ­ho psa", "BěžícĂ­m psem"}, + {1, "БегŃщая Ńобака", "БегŃщие Ńобаки", "БегŃщŃŃŽ ŃобакŃ", "БегŃщей Ńобакой"}, + {0, "Laufhund", "Laufhunde", "Laufhund", "Laufhund"}, + }}, + {0xcba185cf, 0, { // ""stone statue"" + {3, "kamienny pomnik", "kamienne pomniki", "kamienny pomnik", "kamiennym pomnikiem"}, + {0/*MISSING*/ , "stone statue"/*MISSING*/ , "stone statue"/*MISSING*/ , "stone statue"/*MISSING*/ , "stone statue"}, + {1, "kamenná socha", "kamennĂ© sochy", "kamennou sochu", "kamennou sochou"}, + {1, "каменная ŃŃ‚Đ°Ń‚ŃŃŹ", "каменные ŃŃ‚Đ°Ń‚Ńи", "каменнŃŃŽ ŃŃ‚Đ°Ń‚ŃŃŽ", "каменной ŃŃ‚Đ°Ń‚Ńей"}, + {1, "Steinstatue", "Steinstatuen", "Steinstatue", "Steinstatue"}, + }}, + {0xcbe8c992, 0, { // ""Dry Forest"" + {0, "Puszcza", "Puszcza", "PuszczÄ™", "w Puszczy"}, + {0, "Kara Orman", "Kara Ormanlar", "Kara Ormanı", "Kara Ormanda"}, + {3, "SuchĂ˝ hvozd", "SuchĂ© hvozdy", "SuchĂ˝ hvozd", "v SuchĂ©m hvozdu"}, + {3, "СŃхой ЛеŃ", "СŃхие ЛеŃĐ°", "СŃхой ЛеŃ", "в СŃхом ЛеŃŃ"}, + {0, "Trockenwald", "Trockenwälder", "im Trockenwald", "im Trockenwald"}, + }}, + {0xcc1be799, 0, { // ""open gate"" + {1, "otwarta brama", "otwarte bramy", "otwartÄ… bramÄ™", "otwartÄ… bramÄ…"}, + {1, "açık kapı", "açık kapılar", "açık kapıyı", "açık kapıyla"}, + {1, "otevĹ™ená brána", "otevĹ™enĂ© brány", "otevĹ™enou bránu", "otevĹ™enou bránou"}, + {3, "открытый проход", "открытые проходы", "открытый проход", "открытым проходом"}, + {2, "Offenes Tor", "Offene Tor", "Offenes Tor", "Offenes Tor"}, + }}, + {0xcd5954e2, 0, { // ""Treat"" + {3, "Cukierek", "Cukierki", "Cukierka", "Cukierkiem"}, + {0/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"}, + {1, "Pochoutka", "Pochoutky", "Pochutku", "Pochoutkou"}, + {1, "конфета", "конфеты", "конфетŃ", "конфетой"}, + {0/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"/*MISSING*/ , "Treat"}, + }}, + {0xcdca3c6e, 0, { // ""Fat Guard"" + {0, "Gruby StraĹĽnik", "Grubi StraĹĽnicy", "Grubego StraĹĽnika", "Grubym StraĹĽnikiem"}, + {0, "ĹžiĹźman Muhafız", "ĹžiĹźman Muhafızlar", "ĹžiĹźman Muhafızı", "ĹžiĹźman Muhafızla"}, + {0, "TlustĂ˝ strážce", "TlustĂ­ strážci", "TlustĂ©ho strážce", "TlustĂ˝m strážcem"}, + {0, "ТŃчный Ńтражник", "ТŃчные Ńтражники", "ТŃчного Ńтражника", "ТŃчным Ńтражником"}, + {1, "Dicke Wache", "Dicken Wachen", "Dicke Wache", "Dicke Wache"}, + }}, + {0xceab75b0, 0, { // ""Palace"" + {3, "PaĹ‚ac", "PaĹ‚ace", "PaĹ‚ac", "w PaĹ‚acu"}, + {3, "Saray", "Saraylar", "Sarayı", "Sarayda"}, + {3, "Palác", "Paláce", "Palác", "v Paláci"}, + {3, "Дворец", "Дворцы", "Дворец", "в Дворце"}, + {0, "Palast", "Paläste", "im Palast", "im Palast"}, + }}, + {0xcf0477ad, 0, { // ""Warped Coast"" + {3, "Zakrzywiony Brzeg", "Zakrzywiony Brzegi", "Zakrzywiony Brzeg", "na Zakrzywionym Brzegu"}, + {0/*MISSING*/ , "Warped Coast"/*MISSING*/ , "Warped Coast"/*MISSING*/ , "Warped Coast"/*MISSING*/ , "Warped Coast"}, + {2, "PokĹ™ivenĂ© pobĹ™eží", "PokĹ™ivená pobĹ™eží", "PokĹ™ivenĂ© pobĹ™eží", "na PokĹ™ivenĂ©m pobĹ™eží"}, + {3, "ĐŃкривлённый берег", "ĐŃкривлённые берега", "ĐŃкривлённый берег", "на ĐŃкривлённом берегŃ"}, + {1, "Verzerrte KĂĽste", "Verzerrte KĂĽsten", "an der Verzerrten KĂĽste", "an der Verzerrten KĂĽste"}, + }}, + {0xcf0a2594, 0, { // ""Outlaw"" + {0, "Bandyta", "Bandyci", "BandytÄ™", "BandytÄ…"}, + {0, "Haydut", "Haydutlar", "Haydutu", "Haydutla"}, + {0, "Psanec", "Psanci", "Psance", "Psancem"}, + {0, "Бандит", "Бандиты", "Бандита", "Бандитом"}, + {0, "Bandit", "Banditen", "Bandit", "Bandit"}, + }}, + {0xcf36b6e8, 2, { // ""Elemental Planes"" + {1, "Strefa Ĺ»ywioĹ‚Ăłw", "Strefy Ĺ»ywioĹ‚Ăłw", "StrefÄ™ Ĺ»ywioĹ‚Ăłw", "w Strefie Ĺ»ywioĹ‚Ăłw"}, + {1, "Unsur DĂĽzlemleri", "Unsur DĂĽzlemleri", "Unsur DĂĽzlemlerini", "Unsur DĂĽzlemlerinde"}, + {1, "ElementálnĂ­ roviny", "ElementálnĂ­ roviny", "ElementálnĂ­ roviny", "v ElementálnĂ­ch rovinách"}, + {1, "ПлоŃкоŃŃ‚ŃŚ Стихий", "ПлоŃкоŃти Стихий", "ПлоŃкоŃŃ‚ŃŚ Стихий", "в ПлоŃкоŃти Стихий"}, + {1, "Elementare Ebene", "Elementare Ebene", "auf der Elementaren Ebene", "auf der Elementaren Ebene"}, + }}, + {0xd0300026, 0, { // ""Fire"" + {3, "OgieĹ„", "Ognie", "OgieĹ„", "Ogniem"}, + {3, "AteĹź", "AteĹźler", "AteĹźi", "AteĹźle"}, + {3, "OheĹ", "OhnÄ›", "OheĹ", "OhnÄ›m"}, + {3, "Огонь", "Огни", "Огонь", "Огнём"}, + {2, "Feuer", "Feuer", "Feuer", "Feuer"}, + }}, + {0xd0fd9d9a, 0, { // ""Rogue"" + {0, "Cwaniak", "Cwaniaki", "Cwaniaka", "Cwaniakiem"}, + {0, "Seyyah", "Seyyahlar", "Seyyahı", "Seyyahla"}, + {0, "Chytrák", "Chytráci", "Chytráka", "Chytrákem"}, + {0, "Разбойник", "Разбойники", "Разбойника", "Разбойником"}, + {0, "Schurke", "Schurken", "Schurken", "Schurken"}, + }}, + {0xd1cca586, 0, { // ""dead wall"" + {1, "martwa Ĺ›ciana", "martwe Ĺ›ciany", "martwÄ… Ĺ›cianÄ™", "martwÄ… Ĺ›cianÄ…"}, + {1, "ölĂĽ duvar", "ölĂĽ duvarlar", "ölĂĽ duvarı", "ölĂĽ duvarda"}, + {1, "mrtvá zeÄŹ", "mrtvĂ© zdi", "mrtvou zeÄŹ", "mrtvou zdĂ­"}, + {1, "мёртвая Ńтена", "мёртвые Ńтены", "мёртвŃŃŽ ŃтенŃ", "мёртвой Ńтеной"}, + {1, "tote Wand", "tote Wände", "tote Wand", "tote Wand"}, + }}, + {0xd21228c2, 0, { // ""dead rock troll"" + {0, "martwy skalny troll", "martwe skalne trolle", "martwego skalnego trolla", "martwym skalnym trollem"}, + {0, "ölĂĽ maÄźara trolĂĽ", "ölĂĽ maÄźara trolleri", "ölĂĽ maÄźara trolĂĽnĂĽ", "ölĂĽ maÄźara trolĂĽyle"}, + {0, "mrtvĂ˝ Ĺ utroll", "mrtvĂ­ Ĺ utrollovĂ©", "mrtvĂ©ho Ĺ utrolla", "mrtvĂ˝m Ĺ utrollem"}, + {0, "мёртвый пещерный тролль", "мёртвые пещерные тролли", "мёртвого пещерного тролля", "мёртвым пещерным троллем"}, + {0, "toter Felsentroll", "tote Felsentrolle", "toten Felsentroll", "toten Felsentroll"}, + }}, + {0xd234e251, 0, { // ""living wall"" + {1, "ĹĽywa Ĺ›ciana", "ĹĽywe Ĺ›ciany", "ĹĽywÄ… Ĺ›cianÄ™", "ĹĽywÄ… Ĺ›cianÄ…"}, + {1, "Canlı Duvar", "Canlı Duvarlar", "Canlı Duvarı", "Canlı Duvarda"}, + {1, "ĹľivoucĂ­ zeÄŹ", "ĹľivoucĂ­ zdi", "ĹľivoucĂ­ zeÄŹ", "ĹľivoucĂ­ zdĂ­"}, + {1, "живая Ńтена", "живые Ńтены", "живŃŃŽ ŃтенŃ", "живой Ńтеной"}, + {1, "Lebende Wand", "Lebende Wände", "Lebende Wand", "Lebende Wand"}, + }}, + {0xd3c9c3a1, 0, { // ""temporary wall"" + {1, "tymczasowa Ĺ›ciana", "tymczasowe Ĺ›ciany", "tymczasowÄ… Ĺ›cianÄ™", "tymczasowÄ… Ĺ›cianÄ…"}, + {1, "geçici duvar", "geçici duvarlar", "geçici duvarı", "geçici duvarla"}, + {1, "doÄŤasná zeÄŹ", "doÄŤasnĂ© zdi", "doÄŤasnou zeÄŹ", "doÄŤasnou zdĂ­"}, + {1, "временная Ńтена", "временные Ńтены", "временнŃŃŽ ŃтенŃ", "временной Ńтеной"}, + {1, "temporäre Wand", "temporäre Wände", "temporäre Wand", "temporäre Wand"}, + }}, + {0xd43d87d8, 0, { // ""Gold"" + {2, "ZĹ‚oto", "ZĹ‚ota", "ZĹ‚oto", "ZĹ‚otem"}, + {2, "Altın", "Altınlar", "Altını", "Altınla"}, + {3, "ZlatĂ˝ valoun", "ZlatĂ© valouny", "ZlatĂ˝ valoun", "ZlatĂ˝m valounem"}, + {2, "Золото", "Золото", "Золото", "Золотом"}, + {2, "Gold", "Gold", "Gold", "Gold"}, + }}, + {0xd47a1579, 0, { // ""no wall"" + {3, "brak Ĺ›ciany", "braki Ĺ›ciany", "braku Ĺ›ciany", "brakiem Ĺ›ciany"}, + {0/*MISSING*/ , "no wall"/*MISSING*/ , "no wall"/*MISSING*/ , "no wall"/*MISSING*/ , "no wall"}, + {1, "žádnĂ© stÄ›na", "žádnĂ© stÄ›ny", "žádnou stÄ›nu", "žádnou stÄ›nou"}, + {3, "нет Ńтены", "нет Ńтены", "нет Ńтены", "нет Ńтены"}, + {1, "keine Wand", "keine Wände", "keine Wand", "keine Wand"}, + }}, + {0xd491de5e, 0, { // ""Pearl"" + {1, "PerĹ‚a", "PerĹ‚y", "PerĹ‚Ä™", "PerĹ‚Ä…"}, + {1, "Ä°nci", "Ä°nciler", "Ä°nciyi", "Ä°ncide"}, + {1, "Perla", "Perly", "Perlu", "Perlou"}, + {1, "ЖемчŃжина", "ЖемчŃжины", "ЖемчŃжинŃ", "ЖемчŃжиной"}, + {1, "Perle", "Perlen", "Perle", "Perle"}, + }}, + {0xd6128c30, 0, { // ""Windy Plains"" + {1, "Wietrzna RĂłwnina", "Wietrzne RĂłwniny", "WietrznÄ… RĂłwninÄ™", "na Wietrznej RĂłwninie"}, + {0/*MISSING*/ , "Windy Plains"/*MISSING*/ , "Windy Plains"/*MISSING*/ , "Windy Plains"/*MISSING*/ , "Windy Plains"}, + {1, "VÄ›trná pláĹ", "VÄ›trnĂ© plánÄ›", "VÄ›trnou pláĹ", "na VÄ›trnĂ© pláni"}, + {1, "Ветреная равнина", "Ветреные равнины", "ВетренŃŃŽ равнинŃ", "на Ветреной равнине"}, + {1, "Windige Ebenen", "Windige Ebenen", "in den Windigen Ebenen", "in den Windigen Ebenen"}, + }}, + {0xd614f371, 0, { // ""Sand Worm Tail"" + {0, "Ogon Czerwia", "Ogony Czerwia", "Ogon Czerwia", "Ogonem Czerwia"}, + {0, "Kumkurdu KuyruÄźu", "Kumkurdu Kuyrukları", "Kumkurdu KuyruÄźunu", "Kumkurdu KuyruÄźuyla"}, + {3, "ÄŚervĂ­ ocas", "ÄŚervĂ­ ocasy", "ÄŚervĂ­ ocas", "ÄŚervĂ­m ocasem"}, + {0, "ХвоŃŃ‚ червя", "ХвоŃŃ‚Ń‹ червя", "ХвоŃŃ‚Đ° червя", "ХвоŃтом червя"}, + {0, "Sandwurm Schweif", "Sandwurm Schweife", "Sandwurm Schweif", "Sandwurm Schweif"}, + }}, + {0xd6651cb3, 0, { // ""Dragon"" + {0, "Smok", "Smoki", "Smoka", "Smokiem"}, + {0/*MISSING*/ , "Dragon"/*MISSING*/ , "Dragon"/*MISSING*/ , "Dragon"/*MISSING*/ , "Dragon"}, + {0, "Drak", "Draci", "Draka", "Drakem"}, + {0, "Дракон", "Драконы", "Дракона", "Драконом"}, + {0, "Drachen", "Drachen", "Drachen", "Drachen"}, + }}, + {0xd6acd1c8, 0, { // ""none"" + {3, "nic", "nic", "niczego", "niczym"}, + {3, "hiç", "hiçler", "hiçi", "hiçle"}, + {2, "nic", "nic", "nic", "niÄŤĂ­m"}, + {2, "ничто", "ничто", "ничего", "ничем"}, + {3, "keines", "keines", "keines", "keines"}, + }}, + {0xd6eceeba, 0, { // ""Orb of the Sword II"" + {1, "Sfera Ostrza II", "Sfery Ostrza II", "SferÄ™ Ostrza II", "SferÄ… Ostrza II"}, + {0/*MISSING*/ , "Orb of the Sword II"/*MISSING*/ , "Orb of the Sword II"/*MISSING*/ , "Orb of the Sword II"/*MISSING*/ , "Orb of the Sword II"}, + {1, "SfĂ©ra MeÄŤe II", "SfĂ©ry MeÄŤe II", "SfĂ©ru MeÄŤe II", "SfĂ©rou MeÄŤe II"}, + {1, "Сфера Меча II", "Сферы Меча II", "ĐˇŃ„ĐµŃ€Ń ĐśĐµŃ‡Đ° II", "Сферой Меча II"}, + {0, "Orb des Schwertes II", "Orbs des Schwertes II", "Orb des Schwertes II", "Orb des Schwertes II"}, + }}, + {0xd7fe2ac7, 0, { // ""Wind Crow"" + {1, "Wietrzna Wrona", "Wietrzne Wrony", "WietrznÄ… WronÄ™", "WietrznÄ… WronÄ…"}, + {0/*MISSING*/ , "Wind Crow"/*MISSING*/ , "Wind Crow"/*MISSING*/ , "Wind Crow"/*MISSING*/ , "Wind Crow"}, + {1, "VÄ›trná vrána", "VÄ›trnĂ© vrány", "VÄ›trnou vránu", "VÄ›trnou vránou"}, + {1, "Ветряная ворона", "Ветряные вороны", "ВетрянŃŃŽ воронŃ", "Ветряной вороной"}, + {1, "Windkrähe", "Windkrähen", "Windkrähe", "Windkrähe"}, + }}, + {0xd7fe825d, 0, { // ""Dormant Ivy"" + {0, "UĹ›piony Bluszcz", "UĹ›pione Bluszcze", "UĹ›piony Bluszcz", "UĹ›pionym Bluszczem"}, + {0, "Uyuyan Sarmaşık", "Uyuyan Sarmaşıklar", "Uyuyan Sarmaşığı", "Uyuyan Sarmaşıkla"}, + {0, "NeaktivnĂ­ bĹ™eÄŤĹĄan", "NeaktivnĂ­ bĹ™eÄŤĹĄany", "NeaktivnĂ­ bĹ™eÄŤĹĄan", "NeaktivnĂ­m bĹ™eÄŤĹĄanem"}, + {3, "Спящий плющ", "Спящие плющи", "Спящий плющ", "Спящим плющом"}, + {0, "Ruhender Efeu", "Ruhende Efeue", "Ruhenden Efeu", "Ruhenden Efeu"}, + }}, + {0xd8b8981e, 0, { // ""Elemental Gem"" + {3, "KamieĹ„ Ĺ»ywioĹ‚Ăłw", "Kamienie Ĺ»ywioĹ‚Ăłw", "KamieĹ„ Ĺ»ywioĹ‚Ăłw", "Kamieniem Ĺ»ywioĹ‚Ăłw"}, + {0, "Unsurtaşı", "UnsurtaĹźları", "Unsurtaşını", "Unsurtaşıyla"}, + {3, "ElementálnĂ­ drahokam", "ElementálnĂ­ drahokamy", "ElementálnĂ­ drahokam", "ElementálnĂ­m drahokamem"}, + {3, "Камень Ńтихий", "Камни Ńтихий", "Камень Ńтихий", "Камнем Ńтихий"}, + {2, "Elementjuwel", "Elementjuwelen", "Elementjuwel", "Elementjuwel"}, + }}, + {0xda56e219, 0, { // ""Servant"" + {0, "SĹ‚uga", "SĹ‚udzy", "SĹ‚ugÄ™", "SĹ‚ugÄ…"}, + {0, "Hizmetkâr", "Hizmetkârlar", "Hizmetkârı", "Hizmetkârla"}, + {0, "SluĹľebnĂ­k", "SluĹľebnĂ­ci", "SluĹľebnĂ­ka", "SluĹľebnĂ­kem"}, + {0, "СлŃга", "СлŃги", "СлŃĐłŃ", "СлŃгой"}, + {0, "Diener", "Diener", "Diener", "Diener"}, + }}, + {0xdbb078c8, 0, { // ""Powerstone"" + {0, "KamieĹ„ Mocy", "Kamienie Mocy", "KamieĹ„ Mocy", "Kamieniem Mocy"}, + {0, "Güç Taşı", "Güç TaĹźları", "Güç Taşını", "Güç Taşıyla"}, + {3, "Mocikam", "Mocikamy", "Mocikam", "Mocikamem"}, + {3, "Камень Ńилы", "Камни Ńилы", "Камень Ńилы", "Камнем Ńилы"}, + {0, "Machtstein", "Machtsteine", "Machtstein", "Machtstein"}, + }}, + {0xdc1bb91a, 0, { // ""Orb of Earth"" + {1, "Sfera Ziemi", "Sfery Ziemi", "SferÄ™ Ziemi", "SferÄ… Ziemi"}, + {1, "Toprak KĂĽresi", "Toprak KĂĽreleri", "Toprak KĂĽresini", "Toprak KĂĽresiyle"}, + {1, "SfĂ©ra ZemÄ›", "SfĂ©ry ZemÄ›", "SfĂ©ru ZemÄ›", "SfĂ©rou ZemÄ›"}, + {1, "Сфера Земли", "Сферы Земли", "ĐˇŃ„ĐµŃ€Ń Đ—ĐµĐĽĐ»Đ¸", "Сферой Земли"}, + {0, "Orb der Erde", "Orbs der Erde", "Orb der Erde", "Orb der Erde"}, + }}, + {0xdc6e66c3, 0, { // ""Tentacle (withdrawing)"" + {1, "Macka (uciekajÄ…ca)", "Macki (uciekajÄ…ce)", "MackÄ™ (uciekajÄ…cÄ…)", "MackÄ… (uciekajÄ…cÄ…)"}, + {1, "Dokunaç (geri çekiliyor)", "Dokunaçlar (geri çekiliyor)", "Dokunacı (geri çekiliyor)", "Dokunaçla (geri çekiliyor)"}, + {1, "Chapadlo (ustupujĂ­cĂ­)", "Chapadla (ustupujĂ­cĂ­)", "Chapadlo (ustupujĂ­cĂ­)", "Chapadlem (ustupujĂ­cĂ­m)"}, + {2, "Đ©Ńпальце (иŃчезает)", "Đ©Ńпальца(иŃчезает)", "Đ©Ńпальце(иŃчезает)", "Đ©Ńпальцем(иŃчезает)"}, + {0, "Fliehende Tentakel", "Fliehenden Tentakel", "Fliehende Tentakel", "Fliehende Tentakel"}, + }}, + {0xdc707305, 0, { // ""Temple of Cthulhu"" + {1, "ĹšwiÄ…tynia Cthulhu", "ĹšwiÄ…tynia Cthulhu", "ĹšwiÄ…tyniÄ™ Cthulhu", "w ĹšwiÄ…tyni Cthulhu"}, + {1, "Cthulhu'nun Tapınağı", "Cthulhu'nun Tapınakları", "Cthulhu'nun Tapınağını", "Cthulhu'nun Tapınağında"}, + {3, "CthulhuĹŻv chrám", "Cthulhuovy chrámy", "CthulhuĹŻv chrám", "v CthulhuovÄ› chrámu"}, + {3, "Храм КтŃлхŃ", "Храмы КтŃлхŃ", "Храм КтŃлхŃ", "в Храме КтŃлхŃ"}, + {0, "Tempel des Cthulhu", "Tempel des Cthulhu", "im Tempel des Cthulhu", "im Tempel des Cthulhu"}, + }}, + {0xdf01075f, 0, { // ""Cloud of Mirage"" + {1, "Chmura MiraĹĽowa", "Chmury MiraĹĽowe", "ChmurÄ™ MiraĹĽowÄ…", "ChmurÄ… MiraĹĽowÄ…"}, + {1, "Bulut Yansısı", "Bulut Yansıları", "Bulut Yansısını", "Bulut Yansısıyla"}, + {3, "Oblak pĹ™eludĹŻ", "Oblaky pĹ™eludĹŻ", "Oblak pĹ™eludĹŻ", "Oblakem pĹ™eludĹŻ"}, + {2, "Облако миражей", "Облака миражей", "Облако миражей", "Облаком миражей"}, + {1, "Illusionswolke", "Illusionswolken", "Illusionswolke", "Illusionswolke"}, + }}, + {0xdfd173e9, 0, { // ""Illusion"" + {1, "Iluzja", "Iluzje", "IluzjÄ™", "IluzjÄ…"}, + {1, "Ä°lĂĽzyon", "Ä°lĂĽzyonlar", "Ä°lĂĽzyonu", "Ä°lĂĽzyonla"}, + {1, "Iluze", "Iluze", "Iluzi", "IluzĂ­"}, + {1, "Đллюзия", "Đллюзии", "Đллюзию", "Đллюзией"}, + {1, "Illusion", "Illusionen", "Illusion", "Illusion"}, + }}, + {0xe042e7a8, 0, { // ""Bomberbird"" + {3, "Bombardier", "Bombardiery", "Bombardiera", "Bombardierem"}, + {3, "BombacıkuĹź", "BombacıkuĹźlar", "BombacıkuĹźunu", "BombacıkuĹźuyla"}, + {0, "Bombarďák", "Bombarďáci", "Bombarďáka", "Bombarďákem"}, + {0, "Бомбардир", "Бомбардиры", "Бомбардира", "Бомбардиром"}, + {0, "Bombenvogel", "Bombenvögel", "Bombenvogel", "Bombenvogel"}, + }}, + {0xe13510da, 0, { // ""vine"" + {1, "winoroĹ›l", "winoroĹ›le", "winoroĹ›l", "winoroĹ›lÄ…"}, + {1, "Ĺźarap", "Ĺźaraplar", "Ĺźarabı", "Ĺźarapla"}, + {1, "rĂ©va", "rĂ©va", "rĂ©vu", "rĂ©vou"}, + {1, "лоза", "лозы", "лозы", "лозой"}, + {1, "Rebe", "Reben", "Rebe", "Rebe"}, + }}, + {0xe16ebb5e, 0, { // ""Tentacle Tail"" + {1, "Ogon Macki", "Ogony Macki", "Ogon Macki", "Ogonem Macki"}, + {0, "Dokunaç Devamı", "Dokunaç Devamları", "Dokunaç Devamını", "Dokunaç Devamıyla"}, + {2, "Chapadlo", "Chapadla", "Chapadlo", "Chapadlem"}, + {3, "ХвоŃŃ‚ щŃпальца", "ХвоŃŃ‚Ń‹ щŃпальца", "ХвоŃŃ‚ щŃпальца", "ХвоŃтом щŃпальца"}, + {0, "Tentakel Schweif", "Tentakel Schweif", "Tentakel Schweif", "Tentakel Schweif"}, + }}, + {0xe29ae5d6, 0, { // ""Ivory Figurine"" + {1, "Figurka", "Figurki", "FigurkÄ™", "FigurkÄ…"}, + {1, "FildiĹźi Biblo", "FildiĹźi Biblolar", "FildiĹźi Bibloyu", "FildiĹźi Bibloyla"}, + {1, "Figurka", "Figurky", "Figurku", "Figurkou"}, + {1, "ФигŃрка", "ФигŃрки", "ФигŃркŃ", "ФигŃркой"}, + {1, "Elfenbeinfigur", "Elfenbeinfiguren", "Elfenbeinfigur", "Elfenbeinfigur"}, + }}, + {0xe388cddf, 0, { // ""lake of sulphur"" + {2, "jezioro siarki", "jeziora siarki", "jezioro siarki", "jeziorem siarki"}, + {2, "SĂĽlfĂĽr GölĂĽ", "SĂĽlfĂĽr Gölleri", "SĂĽlfĂĽr GölĂĽnĂĽ", "SĂĽlfĂĽr GölĂĽnde"}, + {2, "sirnĂ© jezĂ­rko", "sirná jezĂ­rka", "sirnĂ© jezĂ­rko", "sirnĂ˝m jezĂ­rkem"}, + {2, "озеро Ńеры", "озёра Ńеры", "озеро Ńеры", "озером Ńеры"}, + {0, "Schwefelsee", "Schwefelseen", "Schwefelsee", "Schwefelsee"}, + }}, + {0xe4a5cfa5, 0, { // ""Rock Snake"" + {0, "Skalny WÄ…ĹĽ", "Skalne Węże", "Skalnego Węża", "Skalnym Wężem"}, + {0, "Kaya Yılanı", "Kaya Yılanları", "Kaya Yılanını", "Kaya Yılanıyla"}, + {0, "KamennĂ˝ had", "KamennĂ­ hadi", "KamennĂ©ho hada", "KamennĂ˝m hadem"}, + {1, "Каменная змея", "Каменные змеи", "КаменнŃŃŽ змею", "Каменной змеёй"}, + {1, "Felsschlange", "Felsschlangen", "Felsschlange", "Felsschlange"}, + }}, + {0xe57d27eb, 0, { // ""Rose Lady"" + {1, "Różana Dama", "Różane Damy", "RóżanÄ… DamÄ™", "RóżanÄ… DamÄ…"}, + {0/*MISSING*/ , "Rose Lady"/*MISSING*/ , "Rose Lady"/*MISSING*/ , "Rose Lady"/*MISSING*/ , "Rose Lady"}, + {1, "RĹŻĹľová panĂ­", "RĹŻĹľovĂ© panĂ­", "RĹŻĹľovou dámu", "RĹŻĹľovou panĂ­"}, + {1, "Розовая Đ´Đ°ĐĽĐ°", "Розовые Đ´Đ°ĐĽŃ‹", "РозовŃŃŽ Đ´Đ°ĐĽŃ", "Розовой дамой"}, + {1, "Rosendame", "Rosendamen", "Rosendame", "Rosendame"}, + }}, + {0xe6a497fc, 0, { // ""Herd Bull"" + {0, "Stadny Byk", "Stadne Byki", "Stadnego Byka", "Stadnym Bykiem"}, + {0/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"}, + {0, "StádovĂ˝ BĂ˝k", "StádovĂ­ BĂ˝ci", "StádovĂ©ho BĂ˝ka", "StádovĂ˝m BĂ˝kem"}, + {0, "Стадный бык", "Стадные быки", "Стадного быка", "Стадным быком"}, + {0/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"/*MISSING*/ , "Herd Bull"}, + }}, + {0xe6de3079, 0, { // ""Vine Beast"" + {0, "Winny StwĂłr", "Winne Stwory", "Winnego Stwora", "Winnym Stworem"}, + {0, "Ĺžarap Canavarı", "Ĺžarap Canavarları", "Ĺžarap Canavarını", "Ĺžarap Canavarıyla"}, + {0, "RĂ©vovĂ˝ netvor", "RĂ©vovĂ­ netvoĹ™i", "RĂ©vovĂ©ho netvora", "RĂ©vovĂ˝m netvorem"}, + {0, "Винный зверь", "Винные звери", "Винного зверя", "Винным зверем"}, + {1, "Rebenbestie", "Rebenbestien", "Rebenbestie", "Rebenbestie"}, + }}, + {0xe890513d, 0, { // ""Seep"" + {0, "SÄ…czak", "SÄ…czaki", "SÄ…czaka", "SÄ…czakiem"}, + {0, "Sızıntı", "Sızıntılar", "Sızıntıyı", "Sızıntıyla"}, + {0, "PrĹŻsak", "PrĹŻsakovĂ©", "PrĹŻsaka", "PrĹŻsakem"}, + {0, "Горный призрак", "Горные призраки", "Горного призрака", "Горным призраком"}, + {0, "Tropfer", "Tropfer", "Tropfer", "Tropfer"}, + }}, + {0xe92c565d, 0, { // ""Orb of Winter"" + {1, "Sfera Zimy", "Sfery Zimy", "SferÄ™ Zimy", "SferÄ… Zimy"}, + {1, "Kış KĂĽresi", "Kış KĂĽreleri", "Kış KĂĽresini", "Kış KĂĽresiyle"}, + {1, "SfĂ©ra Zimy", "SfĂ©ry Zimy", "SfĂ©ru Zimy", "SfĂ©rou Zimy"}, + {1, "Сфера Зимы", "Сферы Зимы", "ĐˇŃ„ĐµŃ€Ń Đ—Đ¸ĐĽŃ‹", "Сферой Зимы"}, + {0, "Orb des Winters", "Orbs des Winters", "Orb des Winters", "Orb des Winters"}, + }}, + {0xea5a8f39, 0, { // ""Dead Cave"" + {1, "Martwa Jaskinia", "Martwa Jaskinia", "MartwÄ… JaskiniÄ™", "w Martwej Jaskini"}, + {1, "Ă–lĂĽ MaÄźara", "Ă–lĂĽ MaÄźaralar", "Ă–lĂĽ MaÄźarayı", "Ă–lĂĽ MaÄźarada"}, + {1, "Mrtvá jeskynÄ›", "MrtvĂ© jeskynÄ›", "Mrtvou jeskyni", "v MrtvĂ© jeskyni"}, + {1, "Мёртвая пещера", "Мёртвые пещеры", "МёртвŃŃŽ пещерŃ", "в Мёртвой пещере"}, + {1, "Tote Höhle", "Tote Höhlen", "in der Toten Höhle", "in der Toten Höhle"}, + }}, + {0xea683a5f, 0, { // ""Orb of Invisibility"" + {1, "Sfera NiewidzialnoĹ›ci", "Sfery NiewidzialnoĹ›ci", "SferÄ™ NiewidzialnoĹ›ci", "SferÄ… NiewidzialnoĹ›ci"}, + {1, "GörĂĽnmezlik KĂĽresi", "GörĂĽnmezlik KĂĽreleri", "GörĂĽnmezlik KĂĽresini", "GörĂĽnmezlik KĂĽresiyle"}, + {1, "SfĂ©ra Neviditelnosti", "SfĂ©ry Neviditelnosti", "SfĂ©ru Neviditelnosti", "SfĂ©rou Neviditelnosti"}, + {1, "Сфера НевидимоŃти", "Сферы НевидимоŃти", "ĐˇŃ„ĐµŃ€Ń ĐťĐµĐ˛Đ¸Đ´Đ¸ĐĽĐľŃти", "Сферой НевидимоŃти"}, + {0, "Orb der Transparenz", "Orbs der Transparenz", "Orb der Transparenz", "Orb der Transparenz"}, + }}, + {0xea69ead7, 0, { // ""Sunken Treasure"" + {3, "Zatopiony Skarb", "Zatopione Skarby", "Zatopiony Skarb", "Zatopionym Skarbem"}, + {0/*MISSING*/ , "Sunken Treasure"/*MISSING*/ , "Sunken Treasure"/*MISSING*/ , "Sunken Treasure"/*MISSING*/ , "Sunken Treasure"}, + {3, "PotopenĂ˝ poklad", "PotopenĂ© poklady", "PotopenĂ˝ poklad", "PotopenĂ˝m pokladem"}, + {3, "ЗатонŃвŃее Ńокровище", "ЗатонŃвŃие Ńокровища", "ЗатонŃвŃее Ńокровище", "ЗатонŃвŃим Ńокровищем"}, + {0, "Versunkener Schatz", "Versunkene Schätze", "Versunkenen Schatz", "Versunkenen Schatz"}, + }}, + {0xebfa53de, 0, { // ""chasm"" + {2, "przepaść", "przepaĹ›ci", "przepaść", "przepaĹ›ciÄ…"}, + {2, "Uçurum", "Uçurumlar", "Uçurumu", "Uçurumda"}, + {1, "propast", "propasti", "propast", "propastĂ­"}, + {1, "пропаŃŃ‚ŃŚ", "пропаŃти", "пропаŃŃ‚ŃŚ", "пропаŃŃ‚ŃŚŃŽ"}, + {0, "Abgrund", "AbgrĂĽnde", "Abgrund", "Abgrund"}, + }}, + {0xec3d06d9, 0, { // ""Orb of Matter"" + {1, "Sfera Materii", "Sfery Materii", "SferÄ™ Materii", "SferÄ… Materii"}, + {1, "Madde KĂĽresi", "Madde KĂĽreleri", "Madde KĂĽresini", "Madde KĂĽresiyle"}, + {1, "SfĂ©ra Hmoty", "SfĂ©ry Hmoty", "SfĂ©ru Hmoty", "SfĂ©rou Hmoty"}, + {1, "Сфера ВещеŃтва", "Сферы ВещеŃтва", "ĐˇŃ„ĐµŃ€Ń Đ’ĐµŃ‰ĐµŃтва", "Сферой ВещеŃтва"}, + {0, "Orb der Materie", "Orbs der Materie", "Orb der Materie", "Orb der Materie"}, + }}, + {0xec821dae, 0, { // ""Fjord Troll"" + {0, "Fjordtroll", "Fjordtrolle", "Fjordtrolla", "Fjordtrollem"}, + {0, "Fiyort TrolĂĽ", "Fiyort Trolleri", "Fiyort TrolĂĽnĂĽ", "Fiyort TrolĂĽyle"}, + {0, "Fjordtroll", "FjordtrollovĂ©", "Fjordtrolla", "Fjordtrollem"}, + {0, "Тролль фьорда", "Тролли фьорда", "Тролля фьорда", "Троллем фьорда"}, + {0, "Fjord Troll", "Fjord Trolle", "Fjord Troll", "Fjord Troll"}, + }}, + {0xeca4511f, 0, { // ""Slime Beast"" + {0, "Mazisty StwĂłr", "Maziste Stwory", "Mazistego Stwora", "Mazistym Stworem"}, + {1, "Balçık Canavarı", "Balçık Canavarları", "Balçık Canavarını", "Balçık Canavarıyla"}, + {0, "SlizovĂ˝ netvor", "SlizovĂ­ netvoĹ™i", "SlizovĂ©ho netvora", "SlizovĂ˝m netvorem"}, + {1, "Живая Ńлизь", "Живая Ńлизь", "ЖивŃŃŽ Ńлизь", "Живой Ńлизью"}, + {1, "Schleimbestie", "Schleimbestien", "Schleimbestie", "Schleimbestie"}, + }}, + {0xecbb1f9a, 0, { // ""Dragon Chasms"" + {1, "Smocze OtchĹ‚anie", "Smocze OtchĹ‚anie", "Smocze OtchĹ‚anie", "w Smoczych OtchĹ‚aniach"}, + {0/*MISSING*/ , "Dragon Chasms"/*MISSING*/ , "Dragon Chasms"/*MISSING*/ , "Dragon Chasms"/*MISSING*/ , "Dragon Chasms"}, + {1, "DraÄŤĂ­ propasti", "DraÄŤĂ­ propasti", "DraÄŤĂ­ propasti", "v DraÄŤĂ­ch propastech"}, + {1, "Драконья бездна", "Драконьи бездны", "Драконью безднŃ", "в Драконьей бездне"}, + {1, "Drachenschluchten", "Drachenschluchten", "in den Drachenschluchten", "in den Drachenschluchten"}, + }}, + {0xed9fa709, 0, { // ""Yeti"" + {0, "Yeti", "Yeti", "Yeti", "Yeti"}, + {0, "Yeti", "Yeti", "Yeti", "Yeti"}, + {0, "Yeti", "YetiovĂ©", "Yetiho", "Yetim"}, + {0, "Йети", "Йети", "Йети", "Йети"}, + {0, "Yeti", "Yetis", "Yeti", "Yeti"}, + }}, + {0xede91476, 0, { // ""Black Lotus"" + {3, "Czarny Lotos", "Czarne Lotosy", "Czarny Lotos", "Czarnym Lotosem"}, + {0/*MISSING*/ , "Black Lotus"/*MISSING*/ , "Black Lotus"/*MISSING*/ , "Black Lotus"/*MISSING*/ , "Black Lotus"}, + {3, "ÄŚernĂ˝ lotos", "ÄŚernĂ© lotosy", "ÄŚernĂ˝ lotos", "ÄŚernĂ˝m lotosem"}, + {3, "Чёрный лотоŃ", "Чёрные лотоŃŃ‹", "Чёрный лотоŃ", "Чёрным лотоŃом"}, + {0, "Schwarzer Lotus", "Schwarze Lotus", "Schwarzen Lotus", "Schwarzen Lotus"}, + }}, + {0xee28d696, 0, { // ""Spice"" + {1, "Przyprawa", "Przyprawy", "PrzyprawÄ™", "PrzyprawÄ…"}, + {1, "Baharat", "Baharatlar", "Baharatı", "Baharatla"}, + {2, "KoĹ™enĂ­", "KoĹ™enĂ­", "KoĹ™enĂ­", "KoĹ™enĂ­m"}, + {1, "ПряноŃŃ‚ŃŚ", "ПряноŃти", "ПряноŃŃ‚ŃŚ", "ПряноŃŃ‚ŃŚŃŽ"}, + {2, "Spice", "Spice", "Spice", "Spice"}, + }}, + {0xee6e1823, 0, { // ""Giant Ape"" + {1, "Wielka MaĹ‚pa", "Wielkie MaĹ‚py", "WielkÄ… MaĹ‚pÄ™", "WielkÄ… MaĹ‚pÄ…"}, + {1, "Dev Maymun", "Dev Maymunlar", "Dev Maymunu", "Dev Maymunla"}, + {1, "Obří opice", "Obří opice", "Obří opici", "Obří opicĂ­"}, + {1, "Огромная обезьяна", "Огромные обезьяны", "ОгромнŃŃŽ обезьянŃ", "Огромной обезьяной"}, + {0, "Riesenaffe", "Riesenaffen", "Riesenaffen", "Riesenaffen"}, + }}, + {0xee987540, 0, { // ""Air Shard"" + {3, "Okruch Powietrza", "Okruchy Powietrza", "Okruch Powietrza", "Okruchem Powietrza"}, + {0, "Hava Parçası", "Hava Parçaları", "Hava Parçasını", "Hava Parçasıyla"}, + {3, "Ăšlomek Vzduchu", "Ăšlomky Vzduchu", "Ăšlomek Vzduchu", "Ăšlomkem Vzduchu"}, + {3, "ĐžŃколок ВоздŃŃ…Đ°", "ĐžŃколки ВоздŃŃ…Đ°", "ĐžŃколок ВоздŃŃ…Đ°", "ĐžŃколком ВоздŃŃ…Đ°"}, + {1, "Luftscherbe", "Luftscherben", "Luftscherbe", "Luftscherbe"}, + }}, + {0xeeca94f9, 0, { // ""Sparrowhawk"" + {0, "Krogulec", "Krogulce", "Krogulca", "Krogulcem"}, + {0/*MISSING*/ , "Sparrowhawk"/*MISSING*/ , "Sparrowhawk"/*MISSING*/ , "Sparrowhawk"/*MISSING*/ , "Sparrowhawk"}, + {0, "Krahujec", "Krahujci", "Krahujce", "Krahujcem"}, + {0, "ĐŻŃтреб", "ĐŻŃтребы", "ĐŻŃтреба", "ĐŻŃтребом"}, + {0, "Sperber", "Sperber", "Sperber", "Sperber"}, + }}, + {0xef8d54c7, 0, { // ""Graveyard"" + {3, "Cmentarz", "Cmentarz", "Cmentarz", "na Cmentarzu"}, + {3, "Mezarlık", "Mezarlıklar", "Mezarlığı", "Mezarlıkta"}, + {3, "HĹ™bitov", "HĹ™bitovy", "HĹ™bitov", "na HĹ™bitovÄ›"}, + {2, "Кладбище", "Кладбища", "Кладбище", "на Кладбище"}, + {0, "Friedhof", "Friedhöfe", "auf dem Friedhof", "auf dem Friedhof"}, + }}, + {0xeff05e04, 0, { // ""Living Cave"" + {1, "Ĺ»ywa Jaskinia", "Ĺ»ywa Jaskinia", "Ĺ»ywÄ… JaskiniÄ™", "w Ĺ»ywej Jaskini"}, + {1, "YaĹźayan MaÄźara", "YaĹźayan MaÄźaralar", "YaĹźayan MaÄźarayı", "YaĹźayan MaÄźarada"}, + {1, "Ĺ˝ivoucĂ­ jeskynÄ›", "Ĺ˝ivoucĂ­ jeskynÄ›", "Ĺ˝ivoucĂ­ jeskyni", "v Ĺ˝ivoucĂ­ jeskyni"}, + {1, "Живая Пещера", "Живые Пещеры", "ЖивŃŃŽ ПещерŃ", "в Живой Пещере"}, + {1, "Lebendige Höhle", "Lebendige Höhlen", "in der Lebendigen Höhle", "in der Lebendigen Höhle"}, + }}, + {0xf086bced, 0, { // ""Orb of Time"" + {1, "Sfera Czasu", "Sfery Czasu", "SferÄ™ Czasu", "SferÄ… Czasu"}, + {1, "Zaman KĂĽresi", "Zaman KĂĽreleri", "Zaman KĂĽresini", "Zaman KĂĽresiyle"}, + {1, "SfĂ©ra ÄŚasu", "SfĂ©ry ÄŚasu", "SfĂ©ru ÄŚasu", "SfĂ©rou ÄŚasu"}, + {1, "Сфера Времени", "Сферы Времени", "ĐˇŃ„ĐµŃ€Ń Đ’Ń€ĐµĐĽĐµĐ˝Đ¸", "Сферой Времени"}, + {0, "Orb der Zeit", "Orbs der Zeit", "Orb der Zeit", "Orb der Zeit"}, + }}, + {0xf098af77, 0, { // ""Ghost"" + {0, "Duch", "Duchy", "Ducha", "Duchem"}, + {0, "Hayalet", "Hayaletler", "Hayaleti", "Hayaletle"}, + {0, "Duch", "DuchovĂ©", "Ducha", "Duchem"}, + {0, "Đ”ŃŃ…", "Đ”Ńхи", "Đ”ŃŃ…Đ°", "Đ”Ńхом"}, + {0, "Geist", "Geister", "Geist", "Geist"}, + }}, + {0xf0cdc208, 0, { // ""boat"" + {1, "Ĺ‚Ăłdka", "Ĺ‚Ăłdki", "Ĺ‚ĂłdkÄ™", "Ĺ‚ĂłdkÄ…"}, + {1, "kayık", "kayıklar", "kayığı", "kayıkla"}, + {3, "ÄŤlun", "ÄŤluny", "ÄŤlun", "ÄŤlunem"}, + {1, "лодка", "лодки", "лодкŃ", "лодкой"}, + {2, "Boot", "Boote", "Boot", "Boot"}, + }}, + {0xf0e0b88f, 0, { // ""Mutant Ivy"" + {3, "Zmutowany Bluszcz", "Zmutowane Bluszcze", "Zmutowany Bluszcz", "Zmutowanym Bluszczem"}, + {3, "Mutant Sarmaşık", "Mutant Sarmaşıklar", "Mutant Sarmaşığı", "Mutant Sarmaşıkla"}, + {3, "MutantnĂ­ bĹ™eÄŤĹĄan", "MutantnĂ­ bĹ™eÄŤĹĄany", "MutantnĂ­ bĹ™eÄŤĹĄan", "MutantnĂ­m bĹ™eÄŤĹĄanem"}, + {3, "Плющ-ĐĽŃтант", "Плющи-ĐĽŃтанты", "ПлюŃ-ĐĽŃтант", "Плющом-ĐĽŃтантом"}, + {0, "Mutierter Efeu", "Mutierte Efeue", "Mutierten Efeu", "Mutierten Efeu"}, + }}, + {0xf125c9ed, 0, { // ""temporary floor"" + {1, "tymczasowa podĹ‚oga", "tymczasowe podĹ‚ogi", "tymczasowÄ… podĹ‚ogÄ™", "tymczasowÄ… podĹ‚ogÄ…"}, + {1, "geçici zemin", "geçici zeminler", "geçici zemini", "geçici zeminle"}, + {1, "doÄŤasná podlaha", "doÄŤasnĂ© podlahy", "doÄŤasnou podlahu", "doÄŤasnou podlahou"}, + {3, "временный пол", "временные полы", "временный пол", "временным полом"}, + {0, "temporärer Boden", "temporäre Böden", "temporären Boden", "temporären Boden"}, + }}, + {0xf28de481, 0, { // ""Orb of Luck"" + {1, "Sfera Szczęścia", "Sfery Szczęścia", "SferÄ™ Szczęścia", "SferÄ… Szczęścia"}, + {1, "Ĺžans KĂĽresi", "Ĺžans KĂĽreleri", "Ĺžans KĂĽresini", "Ĺžans KĂĽresiyle"}, + {1, "SfĂ©ra Ĺ tÄ›stĂ­", "SfĂ©ry Ĺ tÄ›stĂ­", "SfĂ©ru Ĺ tÄ›stĂ­", "SfĂ©rou Ĺ tÄ›stĂ­"}, + {1, "Сфера Удачи", "Сферы Удачи", "ĐˇŃ„ĐµŃ€Ń ĐŁĐ´Đ°Ń‡Đ¸", "Сферой Удачи"}, + {0, "Orb des GlĂĽcks", "Orbs des GlĂĽcks", "Orb des GlĂĽcks", "Orb des GlĂĽcks"}, + }}, + {0xf2f1046e, 0, { // ""Blue Hyperbug"" + {0, "Niebieski Hiperinsekt", "Niebieskie Hiperinsekty", "Niebieskiego Hiperinsekta", "Niebieskim Hiperinsektem"}, + {0, "Mavi AĹźkınböcek", "Mavi AĹźkınböcekler", "Mavi AĹźkınböceÄźi", "Mavi AĹźkınböcekle"}, + {0, "ModrĂ˝ hyperhmyzák", "Modří hyperhmyzáci", "ModrĂ©ho hyperhmyzáka", "ModrĂ˝m hyperhmyzákem"}, + {0, "Синий гипержŃĐş", "Синие гипержŃки", "Синего гипержŃка", "Синим гипержŃком"}, + {0, "Blauer Hyperkäfer", "Blaue Hyperkäfer", "Blauen Hyperkäfer", "Blauen Hyperkäfer"}, + }}, + {0xf342c876, 0, { // ""Golden Egg"" + {2, "ZĹ‚ote Jajo", "ZĹ‚ote Jaja", "ZĹ‚ote Jajo", "ZĹ‚otym Jajem"}, + {0/*MISSING*/ , "Golden Egg"/*MISSING*/ , "Golden Egg"/*MISSING*/ , "Golden Egg"/*MISSING*/ , "Golden Egg"}, + {2, "ZlatĂ© vejce", "Zlatá vejce", "ZlatĂ© vejce", "ZlatĂ˝m vejcem"}, + {2, "Золотое яйцо", "Золотые яйца", "Золотое яйцо", "Золотым яйцом"}, + {2, "Goldenes Ei", "Goldene Eier", "Goldene Ei", "Goldene Ei"}, + }}, + {0xf358ed0c, 0, { // ""Elixir of Life"" + {3, "Eliksir Ĺ»ycia", "Eliksiry Ĺ»ycia", "Eliksir Ĺ»ycia", "Eliksirem Ĺ»ycia"}, + {3, "YaĹźam Ä°ksiri", "YaĹźam Ä°ksirleri", "YaĹźam Ä°ksirini", "YaĹźam Ä°ksiriyle"}, + {3, "ElixĂ­r Ĺľivota", "ElixĂ­ry Ĺľivota", "ElixĂ­r Ĺľivota", "ElixĂ­rem Ĺľivota"}, + {3, "ЭликŃир жизни", "ЭликŃиры жизни", "ЭликŃир жизни", "ЭликŃиром жизни"}, + {2, "Lebenselixir", "Lebenselixir", "Lebenselixir", "Lebenselixir"}, + }}, + {0xf3926b40, 0, { // ""Orb of Vaulting"" + {1, "Sfera Przeskoku", "Sfery Przeskoku", "SferÄ™ Przeskoku", "SferÄ… Przeskoku"}, + {0/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"}, + {1, "SfĂ©ra PĹ™eskoku", "SfĂ©ry PĹ™eskoku", "SfĂ©ru PĹ™eskoku", "SfĂ©rou PĹ™eskoku"}, + {1, "Сфера Рывка", "Сферы Рывка", "ĐˇŃ„ĐµŃ€Ń Đ Ń‹Đ˛ĐşĐ°", "Сферой Рывка"}, + {0/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"/*MISSING*/ , "Orb of Vaulting"}, + }}, + {0xf3b4b660, 0, { // ""Red Gem"" + {3, "Czerwony KamieĹ„", "Czerwone Kamienie", "Czerwony KamieĹ„", "Czerwonym Kamieniem"}, + {0, "Kızıl MĂĽcevher", "Kızıl MĂĽcevherler", "Kızıl MĂĽcevheri", "Kızıl MĂĽcevherle"}, + {3, "ÄŚervenĂ˝ drahokam", "ÄŚervenĂ© drahokamy", "ÄŚervenĂ˝ drahokam", "ÄŚervenĂ˝m drahokamem"}, + {3, "КраŃный камень", "КраŃные камни", "КраŃный камень", "КраŃным камнем"}, + {0, "Roter Stein", "Rote Steine", "Roten Stein", "Roten Stein"}, + }}, + {0xf3c25ba9, 0, { // ""strong wind"" + {3, "silny wiatr", "silne wiatry", "silny wiatr", "silnym wiatrem"}, + {0/*MISSING*/ , "strong wind"/*MISSING*/ , "strong wind"/*MISSING*/ , "strong wind"/*MISSING*/ , "strong wind"}, + {3, "silnĂ˝ vĂ­tr", "silnĂ© vÄ›try", "silnĂ˝ vĂ­tr", "silnĂ˝m vÄ›trem"}, + {3, "Ńильный ветер", "Ńильные ветры", "Ńильный ветер", "Ńильным ветром"}, + {0, "starker Wind", "starke Winde", "starken Wind", "starken Wind"}, + }}, + {0xf3f23cda, 0, { // ""Orb of Air"" + {1, "Sfera Powietrza", "Sfery Powietrza", "SferÄ™ Powietrza", "SferÄ… Powietrza"}, + {1, "Hava KĂĽresi", "Hava KĂĽreleri", "Hava KĂĽresini", "Hava KĂĽresiyle"}, + {1, "SfĂ©ra Vzduchu", "SfĂ©ry Vzduchu", "SfĂ©ru Vzduchu", "SfĂ©rou Vzduchu"}, + {1, "Сфера ВоздŃŃ…Đ°", "Сферы ВоздŃŃ…Đ°", "ĐˇŃ„ĐµŃ€Ń Đ’ĐľĐ·Đ´ŃŃ…Đ°", "Сферой ВоздŃŃ…Đ°"}, + {0, "Orb der Luft", "Orbs der Luft", "Orb der Luft", "Orb der Luft"}, + }}, + {0xf505646d, 0, { // ""Palace Guard"" + {0, "StraĹĽnik PaĹ‚acu", "StraĹĽnicy PaĹ‚acu", "StraĹĽnika PaĹ‚acu", "StraĹĽnikiem PaĹ‚acu"}, + {0, "Saray Muhafızı", "Saray Muhafızları", "Saray Muhafızını", "Saray Muhafızıyla"}, + {0, "Strážce Paláce", "Strážci Paláce", "Strážce Paláce", "Strážcem Paláce"}, + {0, "Дворцовый Ńтражник", "Дворцовые Ńтражники", "Дворцового Ńтражника", "Дворцовым Ńтражником"}, + {1, "Palastwache", "Palastwachen", "Palastwache", "Palastwache"}, + }}, + {0xf6325a4d, 0, { // ""Wild West"" + {3, "Dziki ZachĂłd", "Dzikie Zachody", "Dziki ZachĂłd", "na Dzikim Zachodzie"}, + {3, "VahĹźi Batı", "VahĹźi Batılar", "VahĹźi Batıyı", "VahĹźi Batıda"}, + {3, "DivokĂ˝ západ", "DivokĂ© západy", "DivokĂ˝ západ", "na DivokĂ©m západÄ›"}, + {3, "Дикий Запад", "Дикие Запады", "Дикий Запад", "на Диком Западе"}, + {0, "Wilder Westen", "Wilde Westen", "im Wilden Westen", "im Wilden Westen"}, + }}, + {0xf6d7d83e, 0, { // ""Warped Sea"" + {1, "Zakrzywione Morze", "Zakrzywione Morza", "Zakrzywione Morze", "na Zakrzywionym Morzu"}, + {0/*MISSING*/ , "Warped Sea"/*MISSING*/ , "Warped Sea"/*MISSING*/ , "Warped Sea"/*MISSING*/ , "Warped Sea"}, + {1, "PokĹ™ivenĂ© moĹ™e", "PokĹ™ivená moĹ™e", "PokĹ™ivenĂ© moĹ™e", "na PokĹ™ivenĂ©m moĹ™i"}, + {2, "ĐŃкривлённое море", "ĐŃкривлённые моря", "ĐŃкривлённое море", "в ĐŃкривлённом море"}, + {1, "Verzerrte See", "Verzerrten Seen", "auf der Verzerrten See", "auf der Verzerrten See"}, + }}, + {0xf6fecf4f, 0, { // ""Flash Witch"" + {1, "Czarownica BĹ‚ysku", "Czarownice BĹ‚ysku", "CzarownicÄ™ BĹ‚ysku", "CzarownicÄ… BĹ‚ysku"}, + {1, "Işık Cadısı", "Işık Cadıları", "Işık Cadısını", "Işık Cadısıyla"}, + {1, "ÄŚarodÄ›jnice Záblesku", "ÄŚarodÄ›jnice Záblesku", "ÄŚarodÄ›jnicĂ­ Záblesku", "ÄŚarodÄ›jnicĂ­ Záblesku"}, + {1, "Ведьма вŃпыŃки", "Ведьмы вŃпыŃки", "Đ’ĐµĐ´ŃŚĐĽŃ Đ˛ŃпыŃки", "Ведьмой вŃпыŃки"}, + {1, "Donnerhexe", "Donnerhexen", "Donnerhexe", "Donnerhexe"}, + }}, + {0xf78ea3ca, 0, { // ""Magic Mirror"" + {2, "Magiczne Lustro", "Magiczne Lustra", "Magiczne Lustro", "Magicznym Lustrem"}, + {2, "Sihirli Ayna", "Sihirli Aynalar", "Sihirli Aynayı", "Sihirli Aynayla"}, + {2, "KouzelnĂ© zrcadlo", "Kouzelná zrcadla", "KouzelnĂ© zrcadlo", "KouzelnĂ˝m zrcadlem"}, + {2, "ВолŃебное зеркало", "ВолŃебные зеркала", "ВолŃебное зеркало", "ВолŃебным зеркалом"}, + {0, "Zauberspiegel", "Zauberspiegel", "Zauberspiegel", "Zauberspiegel"}, + }}, + {0xf7a1921e, 0, { // ""Orb of the Sword"" + {1, "Sfera Ostrza", "Sfery Ostrza", "SferÄ™ Ostrza", "SferÄ… Ostrza"}, + {0/*MISSING*/ , "Orb of the Sword"/*MISSING*/ , "Orb of the Sword"/*MISSING*/ , "Orb of the Sword"/*MISSING*/ , "Orb of the Sword"}, + {1, "SfĂ©ra MeÄŤe", "SfĂ©ry MeÄŤe", "SfĂ©ru MeÄŤe", "SfĂ©rou MeÄŤe"}, + {1, "Сфера Меча", "Сферы Меча", "ĐˇŃ„ĐµŃ€Ń ĐśĐµŃ‡Đ°", "Сферой Меча"}, + {0, "Orb des Schwertes", "Orbs des Schwertes", "Orb des Schwertes", "Orb des Schwertes"}, + }}, + {0xf7f22746, 0, { // ""False Princess"" + {1, "FaĹ‚szywa Księżniczka", "FaĹ‚szywe Księżniczki", "FaĹ‚szywÄ… KsiężniczkÄ™", "FaĹ‚szywÄ… KsiężniczkÄ…"}, + {0/*MISSING*/ , "False Princess"/*MISSING*/ , "False Princess"/*MISSING*/ , "False Princess"/*MISSING*/ , "False Princess"}, + {1, "Falešná princezna", "FalešnĂ© princezny", "Falešnou princeznu", "Falešnou princeznou"}, + {1, "Ложная принцеŃŃĐ°", "Ложные принцеŃŃŃ‹", "ЛожнŃŃŽ принцеŃŃŃ", "Ложной принцеŃŃой"}, + {1, "Falsche Prinzessin", "Falsche Prinzessinen", "Falsche Prinzessin", "Falsche Prinzessin"}, + }}, + {0xf8c01ee7, 0, { // ""Goblin"" + {0, "Goblin", "Gobliny", "Goblina", "Goblinem"}, + {0, "Goblin", "Goblinler", "Goblini", "Goblinle"}, + {0, "Goblin", "Goblini", "Goblina", "Goblinem"}, + {0, "Гоблин", "Гоблины", "Гоблина", "Гоблином"}, + {0, "Goblin", "Goblins", "Goblin", "Goblin"}, + }}, + {0xf928aba7, 0, { // ""ice wall"" + {1, "lodowa Ĺ›ciana", "lodowe Ĺ›ciany", "lodowÄ… Ĺ›cianÄ™", "lodowÄ… Ĺ›cianÄ…"}, + {1, "Buzdan Duvar", "Buzdan Duvarlar", "Buzdan Duvarı", "Buzdan Duvarda"}, + {1, "ledová zeÄŹ", "ledovĂ© zdi", "ledovou zeÄŹ", "ledovou zdĂ­"}, + {1, "ледяная Ńтена", "ледяные Ńтены", "ледянŃŃŽ ŃтенŃ", "ледяной Ńтеной"}, + {1, "Eiswand", "Eiswände", "Eiswand", "Eiswand"}, + }}, + {0xf9638f5a, 0, { // ""Mirror Image"" + {2, "Odbicie Lustrzane", "Odbicia Lustrzane", "Odbicie Lustrzane", "Odbiciem Lustrzanym"}, + {2, "Yansıma", "Yansımalar", "Yansımayı", "Yansımayla"}, + {3, "ZrcadlovĂ˝ obraz", "ZrcadlovĂ© obrazy", "ZrcadlovĂ˝ obraz", "ZrcadlovĂ˝m obrazem"}, + {2, "Зеркальное отражение", "Зеркальные отражения", "Зеркальное отражение", "Зеркальным отражением"}, + {2, "Spiegelbild", "Spiegelbilder", "Spiegelbild", "Spiegelbild"}, + }}, + {0xf9db8922, 0, { // ""Compass"" + {0, "Kompas", "Kompasy", "Kompas", "Kompasem"}, + {0, "Pusula", "Pusulalar", "Pusulayı", "Pusulayla"}, + {0, "Kompas", "Kompasy", "Kompas", "Kompasem"}, + {3, "КомпаŃ", "КомпаŃŃ‹", "КомпаŃ", "КомпаŃом"}, + {0, "Kompass", "Kompasse", "Kompass", "Kompass"}, + }}, + {0xf9df8cef, 0, { // ""solid branch"" + {1, "solidna gaĹ‚Ä…Ĺş", "solidne gaĹ‚Ä™zie", "solidnÄ… gaĹ‚Ä…Ĺş", "solidnÄ… gaĹ‚Ä™ziÄ…"}, + {0/*MISSING*/ , "solid branch"/*MISSING*/ , "solid branch"/*MISSING*/ , "solid branch"/*MISSING*/ , "solid branch"}, + {1, "pevná vÄ›tev", "pevnĂ© vÄ›tve", "pevnou vÄ›tev", "pevnou vÄ›tvĂ­"}, + {1, "толŃŃ‚Đ°ŃŹ ветка", "толŃтые ветки", "толŃŃ‚ŃŃŽ веткŃ", "толŃтой веткой"}, + {0, "solider Ast", "solide Ă„ste", "soliden Ast", "soliden Ast"}, + }}, + {0xfa0b397e, 0, { // ""Ocean"" + {3, "Ocean", "Oceany", "Ocean", "na Oceanie"}, + {3, "Okyanus", "Okyanuslar", "Okyanusu", "Okyanusla"}, + {3, "Oceán", "Oceány", "Oceán", "na Oceánu"}, + {3, "Океан", "Океаны", "Океан", "в Океане"}, + {0, "Ozean", "Ozeane", "im Ozean", "im Ozean"}, + }}, + {0xfac23af3, 0, { // ""warp gate"" + {1, "wrota zakrzywienia", "wrota zakrzywienia", "wrota zakrzywienia", "wrotami zakrzywienia"}, + {0/*MISSING*/ , "warp gate"/*MISSING*/ , "warp gate"/*MISSING*/ , "warp gate"/*MISSING*/ , "warp gate"}, + {1, "kĹ™ivá brána", "kĹ™ivĂ© brány", "kĹ™ivou bránu", "kĹ™ivou branou"}, + {1, "врата иŃкривления", "врата иŃкривления", "врата иŃкривления", "вратами иŃкривления"}, + {2, "verzerrtes Tor", "verzerrte Tore", "verzerrte Tor", "verzerrte Tor"}, + }}, + {0xfcb2047b, 0, { // ""Revolver"" + {3, "Rewolwer", "Rewolwery", "Rewolwer", "Rewolwerem"}, + {3, "Altıpatlar", "Altıpatlarlar", "Altıpatları", "Altıpatlarla"}, + {3, "Revolver", "Revolvery", "Revolver", "Revolverem"}, + {3, "Револьвер", "Револьверы", "Револьвер", "Револьвером"}, + {0, "Revolver", "Revolver", "Revolver", "Revolver"}, + }}, + {0xfdadd7ea, 0, { // ""Rich Metal Beast"" + {3, "Bogaty StwĂłr", "Bogate Stwory", "Bogatego Stwora", "Bogatym Stworem"}, + {3, "Zengin Metal Canavar", "Zengin Metal Canavarları", "Zengin Metal Canavarını", "Zengin Metal Canavarıyla"}, + {1, "Bohatá bestie", "BohatĂ© bestie", "Bohatou bestii", "Bohatou bestiĂ­"}, + {0, "Богатый железный зверь", "Богатые железные звери", "Богатого железного зверя", "Богатым железным зверем"}, + {2, "Ergiebiges Metallbiest", "Ergiebige Metallbiester", "Ergiebige Metallbiest", "Ergiebige Metallbiest"}, + }}, + {0xfec6df36, 0, { // ""Flail"" + {3, "Cep", "Cepy", "Cep", "Cepem"}, + {0, "Topuz", "Topuzlar", "Topuzu", "Topuzla"}, + {3, "Ĺemdih", "Ĺemdihy", "Ĺemdih", "Ĺemdihem"}, + {3, "Цеп", "Цепы", "Цеп", "Цепом"}, + {0, "Morgenstern", "Morgensterne", "Morgenstern", "Morgenstern"}, + }}, + {0xff0c4ea1, 0, { // ""Spinel"" + {3, "Spinel", "Spinele", "Spinel", "Spinelem"}, + {0/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"}, + {3, "Spinel", "Spinely", "Spinel", "Spinelem"}, + {1, "Шпинель", "Шпинели", "Шпинель", "Шпинелью"}, + {0/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"/*MISSING*/ , "Spinel"}, + }}, + {0xff1eb57a, 0, { // ""Apple"" + {2, "JabĹ‚ko", "JabĹ‚ka", "JabĹ‚ko", "JabĹ‚kiem"}, + {0/*MISSING*/ , "Apple"/*MISSING*/ , "Apple"/*MISSING*/ , "Apple"/*MISSING*/ , "Apple"}, + {2, "Jablko", "Jablka", "Jablko", "Jablkem"}, + {2, "Яблоко", "Яблоки", "Яблоко", "Яблоком"}, + {0, "Apfel", "Ă„pfel", "Apfel", "Apfel"}, + }}, + {0xff6e2c87, 0, { // ""Albatross"" + {3, "Albatros", "Albatrosy", "Albatrosa", "Albatrosem"}, + {3, "Albatros", "Albatroslar", "Albatrosu", "Albatrosla"}, + {3, "Albatros", "AlbatrosovĂ©", "Albatrosa", "Albatrosem"}, + {0, "ĐльбатроŃ", "ĐльбатроŃŃ‹", "ĐльбатроŃĐ°", "ĐльбатроŃом"}, + {0, "Albatros", "Albatrosse", "Albatros", "Albatros"}, + }}, + {0xffc7337b, 0, { // ""fan"" + {3, "Wentylator", "Wentylatory", "Wentylator", "Wentylatorem"}, + {0/*MISSING*/ , "fan"/*MISSING*/ , "fan"/*MISSING*/ , "fan"/*MISSING*/ , "fan"}, + {3, "VÄ›trák", "VÄ›tráky", "VÄ›trák", "VÄ›trákem"}, + {3, "Вентилятор", "Вентиляторы", "Вентилятор", "Вентилятором"}, + {0, "Ventilator", "Ventilatoren", "Ventilator", "Ventilator"}, + }}, + }; diff --git a/mapeditor.cpp b/mapeditor.cpp index 6aa59ac6..fe013a76 100644 --- a/mapeditor.cpp +++ b/mapeditor.cpp @@ -25,11 +25,10 @@ namespace mapeditor { #ifndef NOEDIT map modelcell; - - void clearModelCells() { - modelcell.clear(); - } - + + void handleKeyMap(int sym, int uni); + bool handleKeyFile(int sym, int uni); + void applyModelcell(cell *c) { if(mapeditor::whichPattern == 'H') return; if(mapeditor::whichPattern == 'H') return; @@ -157,7 +156,6 @@ namespace mapstream { clearMemory(); initcells(); - cleargraphmemory(); if(shmup::on) shmup::init(); while(true) { @@ -425,8 +423,6 @@ namespace mapeditor { return true; } - int subscreen; //0=normal, 1=config, 2=patterns, 3=predesigned - cell *drawcell; #ifndef NOEDIT @@ -557,11 +553,15 @@ namespace mapeditor { return f1.first < f2.first; } + string filecaption, cfileext; + string *cfileptr; + void drawFileDialog() { displayfr(vid.xres/2, 30 + vid.fsize, 2, vid.fsize, - XLAT(cmode == emDraw ? "pics to save/load:" : "level to save/load:"), forecolor, 8); + filecaption, forecolor, 8); - string cfile = cmode == emDraw ? picfile : levelfile; + string& cfile = *cfileptr; + displayfr(vid.xres/2, 34 + vid.fsize * 2, 2, vid.fsize, cfile, editext ? 0xFF00FF : 0xFFFF00, 8); @@ -589,7 +589,7 @@ namespace mapeditor { while ((dir = readdir(d)) != NULL) { string s = dir->d_name; if(s != ".." && s[0] == '.') ; - else if(size(s) > 4 && s.substr(size(s)-4) == (cmode == emDraw ? ".pic" : ".lev")) + else if(size(s) > 4 && s.substr(size(s)-4) == cfileext) v.push_back(make_pair(s, CFILE)); else if(dir->d_type & DT_DIR) v.push_back(make_pair(s+"/", CDIR)); @@ -608,6 +608,8 @@ namespace mapeditor { displayColorButton(x, y, v[i].first, 1000 + i, 0, 0, v[i].second, 0xFFFF00); } + + keyhandler = handleKeyFile; } void displayFunctionKeys() { @@ -630,142 +632,190 @@ namespace mapeditor { v.push_back(make_pair(s, i)); } + void showPrePattern() { + dialog::init("predesigned patterns"); + dialog::addItem(XLAT("Gameboard"), 'g'); + dialog::addItem(XLAT("random colors"), 'r'); + dialog::addItem(XLAT("rainbow landscape"), 'l'); + dialog::addItem(XLAT("dark rainbow landscape"), 'd'); + dialog::addItem(XLAT("football"), 'F'); + + dialog::addSelItem(XLAT("emerald pattern"), "emerald", 'e'); + + dialog::addSelItem(XLAT("four elements"), "palace", 'b'); + dialog::addSelItem(XLAT("eight domains"), "palace", 'a'); + + dialog::addSelItem(XLAT("zebra pattern"), "zebra", 'z'); + dialog::addSelItem(XLAT("four triangles"), "zebra", 't'); + dialog::addSelItem(XLAT("three stripes"), "zebra", 'x'); + + dialog::addSelItem(XLAT("random black-and-white"), "current", 'w'); + + dialog::addSelItem(XLAT("field pattern C"), "field", 'C'); + dialog::addSelItem(XLAT("field pattern D"), "field", 'D'); + dialog::addSelItem(XLAT("field pattern N"), "field", 'N'); + dialog::addSelItem(XLAT("field pattern S"), "field", 'S'); + + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if((uni >= 'a' && uni <= 'z') || (uni >= 'A' && uni <= 'Z')) { + whichCanvas = uni; + subcanvas = rand(); + firstland = laCanvas; randomPatternsMode = false; + restartGame(); + } + else if(doexiton(sym, uni)) popScreen(); + }; + } + + void showPattern() { + dialog::init(); + + dialog::addBoolItem(XLAT(euclid ? "three colors" : "Emerald Pattern"), (whichPattern == 'f'), 'f'); + dialog::addBoolItem(XLAT("Palace Pattern"), (whichPattern == 'p'), 'p'); + dialog::addBoolItem(XLAT(euclid ? "three colors rotated" : "Zebra Pattern"), (whichPattern == 'z'), 'z'); + dialog::addBoolItem(XLAT("field pattern"), (whichPattern == 'F'), 'F'); + + if(whichPattern == 'f') symRotation = true; + if(whichPattern == 'F') ; + else if(!euclid) { + dialog::addBoolItem(XLAT("rotational symmetry"), (symRotation), '0'); + dialog::addBoolItem(XLAT("symmetry 0-1"), (sym01), '1'); + dialog::addBoolItem(XLAT("symmetry 0-2"), (sym02), '2'); + dialog::addBoolItem(XLAT("symmetry 0-3"), (sym03), '3'); + } + else + dialog::addBoolItem(XLAT("edit all three colors"), (symRotation), '0'); + + dialog::addBoolItem(XLAT("display pattern codes (full)"), (displaycodes == 1), 'd'); + dialog::addBoolItem(XLAT("display pattern codes (simplified)"), (displaycodes == 2), 's'); + + dialog::addBoolItem(XLAT("display only hexagons"), (whichShape == '6'), '6'); + dialog::addBoolItem(XLAT("display only heptagons"), (whichShape == '7'), '7'); + dialog::addBoolItem(XLAT("display the triheptagonal grid"), (whichShape == '8'), '8'); + dialog::addItem(XLAT("line patterns"), 'l'); + + dialog::addItem(XLAT("predesigned patterns"), 'r'); + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(uni == 'f' || uni == 'p' || uni == 'z' || uni == 'H' || uni == 'F') { + if(whichPattern == uni) whichPattern = 0; + else whichPattern = uni; + modelcell.clear(); + } + + else if(uni == '0') symRotation = !symRotation; + else if(uni == '1') sym01 = !sym01; + else if(uni == '2') sym02 = !sym02; + else if(uni == '3') sym03 = !sym03; + else if(uni == '6' || uni == '7' || uni == '8') { + if(whichShape == uni) whichShape = 0; + else whichShape = uni; + } + else if(uni == '3') sym03 = !sym03; + else if(uni == 'd') displaycodes = displaycodes == 1 ? 0 : 1; + else if(uni == 's') displaycodes = displaycodes == 2 ? 0 : 2; + + else if(uni == 'l') + pushScreen(linepatterns::showMenu); + + else if(uni == 'r') pushScreen(showPrePattern); + + else if(doexiton(sym, uni)) popScreen(); + }; + } + + void showList() { + v.clear(); + if(painttype == 4) painttype = 0; + switch(painttype) { + case 0: + for(int i=0; i= '1' && uni <= '9') uni = 1000 + uni - '1'; + if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == '-' || sym == SDLK_KP_MINUS) uni = 1000; + for(int z=0; z 2000) sym = uni - 2000; if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == SDLK_ESCAPE) { - choosefile = false; + popScreen(); return true; } else if(sym == SDLK_F2 || sym == SDLK_F3) { - choosefile = false; + popScreen(); return false; } else if(sym == SDLK_F4) { @@ -1075,132 +1125,80 @@ namespace mapeditor { return true; } - void handleKey(int sym, int uni) { - if(choosefile && handleKeyFile(sym, uni)) ; - else if(subscreen == 1 && painttype == 6) { - paintwhat_str = "paint"; - int v = dialog::handleKeyColor(sym, uni, paintwhat); - if(v == 1) subscreen = 0; - if(v == 2) cmode = emNormal; - } - else if(subscreen == 1) { - if(uni >= '1' && uni <= '9') uni = 1000 + uni - '1'; - if(sym == SDLK_RETURN || sym == SDLK_KP_ENTER || sym == '-' || sym == SDLK_KP_MINUS) uni = 1000; - for(int z=0; z= 'a' && uni <= 'z') || (uni >= 'A' && uni <= 'Z')) { - whichCanvas = uni; - subcanvas = rand(); - firstland = laCanvas; randomPatternsMode = false; - restartGame(); subscreen = 0; - } - else if(uni != 0) subscreen = 0; - } - else if(subscreen == 2) { - dialog::handleNavigation(sym, uni); - if(uni == 'f' || uni == 'p' || uni == 'z' || uni == 'H' || uni == 'F') { - if(whichPattern == uni) whichPattern = 0; - else whichPattern = uni; - clearModelCells(); - } - - else if(uni == '0') symRotation = !symRotation; - else if(uni == '1') sym01 = !sym01; - else if(uni == '2') sym02 = !sym02; - else if(uni == '3') sym03 = !sym03; - else if(uni == '6' || uni == '7' || uni == '8') { - if(whichShape == uni) whichShape = 0; - else whichShape = uni; - } - else if(uni == '3') sym03 = !sym03; - else if(uni == 'd') displaycodes = displaycodes == 1 ? 0 : 1; - else if(uni == 's') displaycodes = displaycodes == 2 ? 0 : 2; - - else if(uni == 'l') - cmode = emLinepattern; + void handleKeyMap(int sym, int uni) { + handlePanning(sym, uni); - else if(uni == 'r') - subscreen = 3; - - else if(uni != 0) subscreen = 0; + // left-clicks are coded with '-', and right-clicks are coded with sym F1 + if(uni == '-') undoLock(); + if(mousepressed && mouseover && sym != SDLK_F1) + allInPattern(mouseover, radius, neighborId(mouseover, mouseover2)); + + if(mouseover) for(int i=0; itype; i++) createMov(mouseover, i); + if(uni == 'u') applyUndo(); + else if(uni == 'v' || sym == SDLK_F10 || sym == SDLK_ESCAPE) popScreen(); + else if(uni >= '0' && uni <= '9') radius = uni - '0'; + else if(uni == 'm') pushScreen(showList), painttype = 0, infix = ""; + else if(uni == 'i') pushScreen(showList), painttype = 1, infix = ""; + else if(uni == 'l') pushScreen(showList), painttype = 2, infix = ""; + else if(uni == 'w') pushScreen(showList), painttype = 3, infix = ""; + else if(uni == 'r') pushScreen(showPattern); + else if(uni == 't' && mouseover) { + cwt.c = mouseover; playermoved = true; + cwt.spin = neighborId(mouseover, mouseover2); } - else { - // left-clicks are coded with '-', and right-clicks are coded with sym F1 - if(uni == '-') undoLock(); - if(mousepressed && mouseover && sym != SDLK_F1) - allInPattern(mouseover, radius, neighborId(mouseover, mouseover2)); - - if(mouseover) for(int i=0; itype; i++) createMov(mouseover, i); - if(uni == 'u') applyUndo(); - else if(uni == 'v' || sym == SDLK_F10 || sym == SDLK_ESCAPE) cmode = emNormal; - else if(uni >= '0' && uni <= '9') radius = uni - '0'; - else if(uni == 'm') subscreen = 1, painttype = 0, infix = ""; - else if(uni == 'i') subscreen = 1, painttype = 1, infix = ""; - else if(uni == 'l') subscreen = 1, painttype = 2, infix = ""; - else if(uni == 'w') subscreen = 1, painttype = 3, infix = ""; - else if(uni == 'r') subscreen = 2; - else if(uni == 't' && mouseover) { - cwt.c = mouseover; playermoved = true; - cwt.spin = neighborId(mouseover, mouseover2); - } - else if(uni == 'b') painttype = 5, paintwhat_str = XLAT("boundary"); - else if(uni == 'p') - subscreen = 1, paintwhat = (painttype ==6 ? paintwhat : 0x808080), painttype = 6; - else if(sym == SDLK_F2) { - if(mapstream::saveMap(levelfile.c_str())) - addMessage(XLAT("Map saved to %1", levelfile)); - else - addMessage(XLAT("Failed to save map to %1", levelfile)); - } - else if(sym == SDLK_F5) { - restartGame(); - } - else if(sym == SDLK_F3) { - if(mapstream::loadMap(levelfile.c_str())) - addMessage(XLAT("Map loaded from %1", levelfile)); - else - addMessage(XLAT("Failed to load map from %1", levelfile)); - } - else if(sym == SDLK_F4) - choosefile = true; - else if(sym == SDLK_F6) { - saveHighQualityShot(); - } - else if(sym == SDLK_F8) { - svg::render(); - } - else if(sym == SDLK_F7) { - drawplayer = !drawplayer; - } - else if(uni == 'c') { - if(mouseover && mouseover2) - copydir = neighborId(mouseover, mouseover2); - if(copydir<0) copydir = 0; - copyflip = (uni == 'f'); - copywhat = mouseover, painttype = 4; - paintwhat_str = XLAT("copying"); - } - else if(uni == 'f') { - copyflip = !copyflip; - } - else if(uni == 'h' || sym == SDLK_F1) { - lastmode = cmode; - cmode = emHelp; - help = mehelptext(); - } - else if(uni == ' ') { - cmode = emDraw; - initdraw(mouseover ? mouseover : cwt.c); - } + else if(uni == 'b') painttype = 5, paintwhat_str = XLAT("boundary"); + else if(uni == 'p') { + painttype = 6; + paintwhat_str = "paint"; + dialog::openColorDialog(paintwhat = (painttype ==6 ? paintwhat : 0x808080)); + } + else if(sym == SDLK_F2) { + if(mapstream::saveMap(levelfile.c_str())) + addMessage(XLAT("Map saved to %1", levelfile)); + else + addMessage(XLAT("Failed to save map to %1", levelfile)); + } + else if(sym == SDLK_F5) { + restartGame(); + } + else if(sym == SDLK_F3) { + if(mapstream::loadMap(levelfile.c_str())) + addMessage(XLAT("Map loaded from %1", levelfile)); + else + addMessage(XLAT("Failed to load map from %1", levelfile)); + } + else if(sym == SDLK_F4) { + cfileptr = &levelfile; + filecaption = XLAT("level to save/load:"); + cfileext = ".lev"; + pushScreen(drawFileDialog); + } + else if(sym == SDLK_F6) { + saveHighQualityShot(); + } + else if(sym == SDLK_F8) { + svg::render(); + } + else if(sym == SDLK_F7) { + drawplayer = !drawplayer; + } + else if(uni == 'c') { + if(mouseover && mouseover2) + copydir = neighborId(mouseover, mouseover2); + if(copydir<0) copydir = 0; + copyflip = (uni == 'f'); + copywhat = mouseover, painttype = 4; + paintwhat_str = XLAT("copying"); + } + else if(uni == 'f') { + copyflip = !copyflip; + } + else if(uni == 'h' || sym == SDLK_F1) + gotoHelp(mehelptext()); + else if(uni == ' ') { + popScreen(); + pushScreen(showDrawEditor); + initdraw(mouseover ? mouseover : cwt.c); } } @@ -1216,7 +1214,7 @@ namespace mapeditor { "the screen for more keys."; string drawhelptext() { - return XLAT(mapeditor::drawhelp); + return XLAT(drawhelp); } int dslayer; @@ -1235,83 +1233,57 @@ namespace mapeditor { } void drawGhosts(cell *c, const transmatrix& V, int ct) { -/* if(cmode == emDraw && cwt.c->type == 6 && ct == 6) for(int a=0; arots; a++) { - - transmatrix V2 = V * spin(M_PI + 2*M_PI*a/dsCur->rots); - - if(mouseout()) break; - - hyperpoint P2 = V2 * inverse(cwtV) * mouseh; - - int xc, yc, sc; - getcoord(P2, xc, yc, sc); - displaychr(xc, yc, sc, 10, 'x', 0xFF); - - if(crad > 0 && c->cpdist <= 3) { - lalpha = 0x80; - transmatrix movtocc = V2 * inverse(cwtV) * rgpushxto0(ccenter); - for(int d=0; d<84; d++) - drawline(movtocc * ddi(d+1, crad) * C0, movtocc * ddi(d, crad) * C0, 0xC00000); - lalpha = 0xFF; - } - } */ } hyperpoint ccenter = C0; hyperpoint coldcenter = C0; void drawGrid() { - if(cmode == emDraw && !inHighQual) { - - for(int d=0; d<84; d++) { - transmatrix d2 = drawtrans * rgpushxto0(ccenter); - int lalpha; - if(d % (84/drawcell->type) == 0) - lalpha = 0x40; - else - lalpha = 0x20; - int col = darkena(0xC0C0C0, 0, lalpha); - queueline(d2 * C0, d2 * spin(M_PI*d/42)* xpush(1) * C0, col); - for(int u=2; u<=20; u++) { - if(u % 5 == 0) lalpha = 0x40; - else lalpha = 0x20; - queueline( - d2 * spin(M_PI*d/42)* xpush(u/20.) * C0, - d2 * spin(M_PI*(d+1)/42)* xpush(u/20.) * C0, - darkena(0xC0C0C0, 0, lalpha)); - } + for(int d=0; d<84; d++) { + transmatrix d2 = drawtrans * rgpushxto0(ccenter); + int lalpha; + if(d % (84/drawcell->type) == 0) + lalpha = 0x40; + else + lalpha = 0x20; + int col = darkena(0xC0C0C0, 0, lalpha); + queueline(d2 * C0, d2 * spin(M_PI*d/42)* xpush(1) * C0, col); + for(int u=2; u<=20; u++) { + if(u % 5 == 0) lalpha = 0x40; + else lalpha = 0x20; + queueline( + d2 * spin(M_PI*d/42)* xpush(u/20.) * C0, + d2 * spin(M_PI*(d+1)/42)* xpush(u/20.) * C0, + darkena(0xC0C0C0, 0, lalpha)); } - queueline(drawtrans*ccenter, drawtrans*coldcenter, darkena(0xC0C0C0, 0, 0x20)); - - int sg = drawcellShapeGroup(); - - if(0) for(int i=0; id[mapeditor::dslayer]); - - for(int a=0; ad[mapeditor::dslayer]); + + for(int a=0; a> 2; @@ -1897,7 +1882,7 @@ namespace mapeditor { } #ifndef NOEDIT - if(cmode == emDraw && mapeditor::editingShape(group, id)) { + if(cmode2 == smDraw && mapeditor::editingShape(group, id)) { /* for(int a=0; a= 'a' && uni < 'a' + numpat) + dialog::openColorDialog(patterns[uni - 'a'].color, NULL); + else if(doexiton(sym,uni)) popScreen(); + }; } - void handleMenu(int sym, int uni) { - dialog::handleNavigation(sym, uni); - if(uni >= 'a' && uni < 'a' + numpat) - dialog::openColorDialog(patterns[uni - 'a'].color, NULL); - else if(doexiton(sym,uni)) cmode = emNormal; - } }; diff --git a/menus.cpp b/menus.cpp index b5e0f4a1..5ae71637 100644 --- a/menus.cpp +++ b/menus.cpp @@ -8,13 +8,12 @@ ld whatever = 0; -void gotoHelp(const string& h, emtype c = cmode) { - help = h; - if(c != emHelp) lastmode = c; - cmode = emHelp; - printf("goto help, back = %d\n", c); +int PREC(ld x) { + ld sh = shiftmul; + if(sh > -.2 && sh < .2) x = 10.01; + return int(shiftmul * x); } - + void showOverview() { DEBB(DF_GRAPH, (debugfile,"show overview\n")); mouseovers = XLAT("world overview"); @@ -107,63 +106,57 @@ void showOverview() { } dialog::displayPageButtons(3, pages); - } - -int PREC(ld x) { - ld sh = shiftmul; - if(sh > -.2 && sh < .2) x = 10.01; - return int(shiftmul * x); - } - -void handleOverview(int sym, int uni) { - int umod = uni % 1000; - int udiv = uni / 1000; - if(udiv == 1 && umod < landtypes) { - if(cheater && !hiliteclick) { - eLand l = eLand(umod); - cheater++; - bool princ = (l == laPrincessQuest); - if(princ) { - if(kills[moVizier] == 0) kills[moVizier] = 1; - princess::forceMouse = true; - princess::gotoPrincess = true; - l = laPalace; + + keyhandler = [] (int sym, int uni) { + int umod = uni % 1000; + int udiv = uni / 1000; + if(udiv == 1 && umod < landtypes) { + if(cheater && !hiliteclick) { + eLand l = eLand(umod); + cheater++; + bool princ = (l == laPrincessQuest); + if(princ) { + if(kills[moVizier] == 0) kills[moVizier] = 1; + princess::forceMouse = true; + princess::gotoPrincess = true; + l = laPalace; + } + cheatMoveTo(l); + popScreen(); + canmove = true; + if(princ) fullcenter(); } - cheatMoveTo(l); - cmode = emNormal; - canmove = true; - if(princ) fullcenter(); + else gotoHelp(generateHelpForLand(eLand(umod))); } - else gotoHelp(generateHelpForLand(eLand(umod))); - } - else if(udiv == 2 && umod < ittypes) { - if(cheater && !hiliteclick) { - cheater++; - int ic = itemclass(eItem(umod)); - if(ic == IC_TREASURE) items[umod] += PREC(10); - if(ic == IC_ORB) items[umod] += PREC(60); - if(umod == itGreenStone) items[umod] += PREC(100); - else if(ic == IC_OTHER) items[umod] += (shiftmul>0?1:-1); - if(items[umod] < 0) items[umod] = 0; - if(hardcore) canmove = true; - else checkmove(); + else if(udiv == 2 && umod < ittypes) { + if(cheater && !hiliteclick) { + cheater++; + int ic = itemclass(eItem(umod)); + if(ic == IC_TREASURE) items[umod] += PREC(10); + if(ic == IC_ORB) items[umod] += PREC(60); + if(umod == itGreenStone) items[umod] += PREC(100); + else if(ic == IC_OTHER) items[umod] += (shiftmul>0?1:-1); + if(items[umod] < 0) items[umod] = 0; + if(hardcore) canmove = true; + else checkmove(); + } + else gotoHelp(generateHelpForItem(eItem(umod))); } - else gotoHelp(generateHelpForItem(eItem(umod))); - } - else if(udiv == 3 && umod < walltypes) gotoHelp(generateHelpForWall(eWall(umod))); - else if(uni == SDLK_F1) gotoHelp( - "This displays all lands available in the game. " - "Bonus lands (available only in separate challenges) " - "are not included. Lands written in dark have to be " - "unlocked, and lands in dark red are unavailable " - "because of using special options. Click on any " - "land or item to get information about it. Hover over " - "an Orb to know its relation to the current land. " - "Cheaters can click to move between lands, and use the " - "mousewheel to gain or lose treasures and orbs quickly (Ctrl = precise, Shift = reverse)." - ); - else if(dialog::handlePageButtons(uni)) ; - else if(doexiton(sym, uni)) cmode = emNormal; + else if(udiv == 3 && umod < walltypes) gotoHelp(generateHelpForWall(eWall(umod))); + else if(uni == SDLK_F1) gotoHelp( + "This displays all lands available in the game. " + "Bonus lands (available only in separate challenges) " + "are not included. Lands written in dark have to be " + "unlocked, and lands in dark red are unavailable " + "because of using special options. Click on any " + "land or item to get information about it. Hover over " + "an Orb to know its relation to the current land. " + "Cheaters can click to move between lands, and use the " + "mousewheel to gain or lose treasures and orbs quickly (Ctrl = precise, Shift = reverse)." + ); + else if(dialog::handlePageButtons(uni)) ; + else if(doexiton(sym, uni)) popScreen(); + }; } bool checkHalloweenDate() { @@ -177,6 +170,7 @@ bool checkHalloweenDate() { } void showMainMenu() { + gamescreen(2); getcstat = ' '; @@ -208,7 +202,7 @@ void showMainMenu() { if(canmove) q = "review your quest"; else - q = "review the scene"; + q = "game over screen"; dialog::addItem(XLAT(q), SDLK_ESCAPE); dialog::addItem(XLAT("world overview"), 'o'); @@ -231,614 +225,77 @@ void showMainMenu() { dialog::addItem("SHARE", 's'-96); #endif - if(!canmove) q = "game over screen"; + if(!canmove) q = "review the scene"; else if(turncount > 0) q = "continue game"; else q = "play the game!"; dialog::addItem(XLAT(q), ' '); dialog::display(); - } - -void handleMenuKey(int sym, int uni) { - dialog::handleNavigation(sym, uni); - if(sym == SDLK_F1 || sym == 'h') gotoHelp(help); - else if(sym == 'c' && cheater) - cmode = emCheatMenu; - else if(sym == 'b') cmode = emBasicConfig; - else if(sym == 'g') cmode = emGraphConfig; - else if(sym == 'd') cmode = emDisplayMode; - else if(sym == 'm') cmode = emChangeMode; -#ifndef NOSAVE - else if(sym == 't') loadScores(); -#endif - else if(uni == 'y'-96) { - if(!sphere) { - euclidland = laHalloween; - restartGame('E'); - vid.alpha = 999; - vid.scale = 998; - cmode = emNormal; + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(sym == SDLK_F1 || sym == 'h') gotoHelp(help); + else if(sym == 'c' && cheater) pushScreen(showCheatMenu); + else if(sym == 'b') pushScreen(showBasicConfig); + else if(sym == 'g') pushScreen(showGraphConfig); + else if(sym == 'd') pushScreen(showDisplayMode); + else if(sym == 'm') pushScreen(showChangeMode); + #ifndef NOSAVE + else if(sym == 't') loadScores(); + #endif + else if(uni == 'y'-96) { + if(!sphere) { + euclidland = laHalloween; + restartGame('E'); + vid.alpha = 999; + vid.scale = 998; + popScreen(); + } + else { + restartGame('E'); + vid.alpha = 1; + vid.scale = 1; + popScreen(); + } } - else { - restartGame('E'); - vid.alpha = 1; - vid.scale = 1; - cmode = emNormal; + else if(sym == 'r' || sym == SDLK_F5) { + restartGame(); + popScreen(); + } + else if(sym == 'q' || sym == SDLK_F10) + quitmainloop = true; + else if(sym == 'o') { + clearMessages(); + pushScreen(showOverview); + } +#ifdef INV + else if(sym == 'i') { + clearMessages(); + pushScreen(inv::show()); } - } - else if(sym == 'r' || sym == SDLK_F5) { - restartGame(); - cmode = emNormal; - } - else if(sym == 'q' || sym == SDLK_F10) - quitmainloop = true; - else if(sym == 'o') { - clearMessages(); - cmode = emOverview; - } - else if(sym == 'i') { - clearMessages(); - cmode = emInventory; - } - else if(sym == SDLK_ESCAPE) { - cmode = emQuit; - achievement_final(false); - } -#ifdef MOBILE -#ifdef HAVE_ACHIEVEMENTS - else if(sym == '3') { - achievement_final(false); - cmode = emLeader; - } #endif -#endif -#ifdef ROGUEVIZ - else if(uni == 'u') cmode = emRogueviz; -#endif - else if(doexiton(sym, uni)) { - cmode = emNormal; - msgs.clear(); - } - } - -void showAllConfig() { - dialog::addBreak(50); - dialog::addItem(XLAT("exit configuration"), 'v'); -#ifndef NOCONFIG - dialog::addItem(XLAT("save the current config"), 's'); -#endif - } - -void handleAllConfig(int sym, int uni) { - if(sym == SDLK_F1 || uni == 'h') gotoHelp(help); - - if(uni == 'v') cmode = emMenu; - if(sym == SDLK_ESCAPE) cmode = emNormal; -#ifndef NOCONFIG - if(uni == 's') saveConfig(); -#endif - } - -void showGraphConfig() { - - dialog::init(XLAT("graphics configuration")); - - #ifndef ONEGRAPH - #ifdef GL - dialog::addBoolItem(XLAT("openGL mode"), vid.usingGL, 'o'); + else if(sym == SDLK_ESCAPE) + showMissionScreen(); + #ifdef MOBILE + #ifdef HAVE_ACHIEVEMENTS + else if(sym == '3') { + achievement_final(false); + pushScreen(leader::showMenu); + } #endif #endif - - if(!vid.usingGL) - dialog::addBoolItem(XLAT("anti-aliasing"), vid.antialias & AA_NOGL, 'O'); - - if(vid.usingGL) - dialog::addSelItem(XLAT("anti-aliasing"), - (vid.antialias & AA_POLY) ? "polygons" : - (vid.antialias & AA_LINES) ? "lines" : - "NO", 'O'); - - if(vid.usingGL) { - dialog::addSelItem(XLAT("line width"), fts(vid.linewidth), 'w'); -// dialog::addBoolItem(XLAT("finer lines at the boundary"), vid.antialias & AA_LINEWIDTH, 'b'); - } - - #ifndef MOBWEB - dialog::addSelItem(XLAT("framerate limit"), its(vid.framelimit), 'l'); + #ifdef ROGUEVIZ + else if(uni == 'u') pushScreen(rogueviz::showMenu); #endif - -#ifndef IOS - dialog::addBoolItem(XLAT("fullscreen mode"), (vid.full), 'f'); -#endif - - dialog::addSelItem(XLAT("scrolling speed"), fts(vid.sspeed), 'a'); - dialog::addSelItem(XLAT("movement animation speed"), fts(vid.mspeed), 'm'); - - dialog::addBoolItem(XLAT("extra graphical effects"), (vid.particles), 'u'); - -#ifdef WHATEVER - dialog::addSelItem(XLAT("whatever"), fts(whatever), 'j'); -#endif - - const char *glyphsortnames[6] = { - "first on top", "first on bottom", - "last on top", "last on bottom", - "by land", "by number" + else if(doexiton(sym, uni)) { + popScreenAll(); + msgs.clear(); + } }; - - const char *glyphmodenames[3] = {"letters", "auto", "images"}; - dialog::addSelItem(XLAT("inventory/kill sorting"), XLAT(glyphsortnames[glyphsortorder]), 'k'); - - dialog::addSelItem(XLAT("inventory/kill mode"), XLAT(glyphmodenames[vid.graphglyph]), 'd'); - -#ifdef MOBILE - dialog::addSelItem(XLAT("font scale"), its(fontscale), 'b'); -#endif - - dialog::addSelItem(XLAT("sight range"), its(sightrange), 'r'); - -#ifdef MOBILE - dialog::addSelItem(XLAT("compass size"), its(vid.mobilecompasssize), 'c'); -#endif - - dialog::addSelItem(XLAT("aura brightness"), its(vid.aurastr), 'z'); - dialog::addSelItem(XLAT("aura smoothening factor"), its(vid.aurasmoothen), 'x'); - - showAllConfig(); - dialog::display(); - } - -void switchFullscreen() { - vid.full = !vid.full; -#ifdef ANDROID - addMessage(XLAT("Reenter HyperRogue to apply this setting")); - settingsChanged = true; -#endif -#ifndef NOSDL - if(true) { - vid.xres = vid.full ? vid.xscr : 9999; - vid.yres = vid.full ? vid.yscr : 9999; - extern bool setfsize; - setfsize = true; - } - setvideomode(); -#endif - } - -void switchGL() { - vid.usingGL = !vid.usingGL; - if(vid.usingGL) addMessage(XLAT("openGL mode enabled")); - if(!vid.usingGL) addMessage(XLAT("openGL mode disabled")); -#ifndef ANDROID - if(!vid.usingGL) addMessage(XLAT("shift+O to switch anti-aliasing")); -#endif -#ifdef ANDROID - settingsChanged = true; -#else -#ifndef NOSDL - setvideomode(); -#endif -#endif - } - -void handleGraphConfig(int sym, int uni) { - dialog::handleNavigation(sym, uni); - - if(uni == 'O') uni = 'o', shiftmul = -1; - - char xuni = uni | 96; - - if(xuni == 'u') vid.particles = !vid.particles; - if(xuni == 'd') vid.graphglyph = (1+vid.graphglyph)%3; - - if(xuni == 'j') { - dialog::editNumber(whatever, -10, 10, 1, 0, XLAT("whatever"), - XLAT("Whatever.")); - dialog::sidedialog = true; - } - - if(xuni == 'a') dialog::editNumber(vid.sspeed, -5, 5, 1, 0, - XLAT("scrolling speed"), - XLAT("+5 = center instantly, -5 = do not center the map")); - - if(xuni == 'm') dialog::editNumber(vid.mspeed, -5, 5, 1, 0, - XLAT("movement animation speed"), - XLAT("+5 = move instantly")); - - if(xuni == 'r') { - dialog::editNumber(sightrange, 4, cheater ? 10 : 7, 1, 7, XLAT("sight range"), - XLAT("Roughly 42% cells are on the edge of your sight range. Reducing " - "the sight range makes HyperRogue work faster, but also makes " - "the game effectively harder.")); - dialog::sidedialog = true; - } - - if(xuni == 'k') { - glyphsortorder = eGlyphsortorder((glyphsortorder+6+(shiftmul>0?1:-1)) % gsoMAX); - } - - if(xuni == 'f') switchFullscreen(); - -#ifndef ONEGRAPH - if(xuni == 'o' && shiftmul > 0) switchGL(); -#endif - - if(xuni == 'o' && shiftmul < 0) { - if(!vid.usingGL) - vid.antialias ^= AA_NOGL | AA_FONT; - else if(vid.antialias & AA_POLY) - vid.antialias ^= AA_POLY | AA_LINES; - else if(vid.antialias & AA_LINES) - vid.antialias |= AA_POLY; - else - vid.antialias |= AA_LINES; - } - - // if(xuni == 'b') vid.antialias ^= AA_LINEWIDTH; - - if(xuni == 'w' && vid.usingGL) - dialog::editNumber(vid.linewidth, 0, 10, 0.1, 1, XLAT("line width"), ""); - - if(xuni == 'c') - dialog::editNumber(vid.mobilecompasssize, 0, 100, 10, 20, XLAT("compass size"), ""); - - if(xuni == 'l') - dialog::editNumber(vid.framelimit, 5, 300, 10, 300, XLAT("framerate limit"), ""); - -#ifdef MOBILE - if(xuni =='b') - dialog::editNumber(fontscale, 0, 400, 10, 100, XLAT("font scale"), ""); -#endif - - if(xuni =='z') - dialog::editNumber(vid.aurastr, 0, 256, 10, 128, XLAT("aura brightness"), ""); - else if(xuni =='x') - dialog::editNumber(vid.aurasmoothen, 1, 180, 1, 5, XLAT("aura smoothening factor"), ""); - - handleAllConfig(sym, xuni); - } - -void showBasicConfig() { - const char *axmodes[5] = {"OFF", "auto", "light", "heavy", "arrows"}; - dialog::init(XLAT("basic configuration")); - -#ifndef NOTRANS - dialog::addSelItem(XLAT("language"), XLAT("EN"), 'l'); -#endif - dialog::addSelItem(XLAT("player character"), numplayers() > 1 ? "" : csname(vid.cs), 'g'); - -#ifndef NOAUDIO - dialog::addSelItem(XLAT("background music volume"), its(musicvolume), 'b'); - dialog::addSelItem(XLAT("sound effects volume"), its(effvolume), 'e'); -#endif - -// input: - dialog::addSelItem(XLAT("help for keyboard users"), XLAT(axmodes[vid.axes]), 'c'); - - dialog::addBoolItem(XLAT("reverse pointer control"), (revcontrol), 'r'); - dialog::addBoolItem(XLAT("draw circle around the target"), (vid.drawmousecircle), 'd'); - - dialog::addSelItem(XLAT("message flash time"), its(vid.flashtime), 't'); -#ifdef MOBILE - dialog::addBoolItem(XLAT("targetting ranged Orbs long-click only"), (vid.shifttarget&2), 'i'); -#else - dialog::addBoolItem(XLAT("targetting ranged Orbs Shift+click only"), (vid.shifttarget&1), 'i'); -#endif -#ifdef STEAM - dialog::addBoolItem(XLAT("send scores to Steam leaderboards"), (vid.steamscore&1), 'l'); -#endif - -#ifndef MOBILE - dialog::addSelItem(XLAT("configure keys/joysticks"), "", 'p'); -#endif - - showAllConfig(); - - if(lang() != 0) { - string tw = ""; - string s = XLAT("TRANSLATIONWARNING"); - if(s != "" && s != "TRANSLATIONWARNING") tw += s; - s = XLAT("TRANSLATIONWARNING2"); - if(s != "" && s != "TRANSLATIONWARNING2") { if(tw != "") tw += " "; tw += s; } - if(tw != "") { - dialog::addBreak(50); - dialog::addHelp(tw); - dialog::lastItem().color = 0xFF0000; - } - } - - dialog::display(); - } - -void handleBasicConfig(int sym, int uni) { - dialog::handleNavigation(sym, uni); - - char xuni = uni | 96; - - if(uni >= 32 && uni < 64) xuni = uni; - - if(xuni == 'c') { vid.axes += 60 + (shiftmul > 0 ? 1 : -1); vid.axes %= 5; } -#ifndef NOAUDIO - if(xuni == 'b') { - dialog::editNumber(musicvolume, 0, 128, 10, 60, XLAT("background music volume"), ""); - } - if(xuni == 'e') { - dialog::editNumber(effvolume, 0, 128, 10, 60, XLAT("sound effects volume"), ""); - } -#endif - - if(sym == SDLK_ESCAPE) cmode = emNormal; - -#ifndef NOTRANS - if(xuni == 'l') { - vid.language += (shiftmul>0?1:-1); - vid.language %= NUMLAN; - if(vid.language < 0) vid.language += NUMLAN; -#ifdef ANDROID - settingsChanged = true; -#endif - } -#endif - - if(xuni == 'g') cmode = emCustomizeChar; - -#ifndef MOBILE - if(xuni == 'p') { - cmode = emShmupConfig; - multi::shmupcfg = shmup::on; - } -#endif - - if(xuni == 'r') revcontrol = !revcontrol; - if(xuni == 'd') vid.drawmousecircle = !vid.drawmousecircle; - -#ifdef STEAM - if(xuni == 'l') vid.steamscore = vid.steamscore^1; -#endif - if(xuni == 't') - dialog::editNumber(vid.flashtime, 0, 64, 1, 8, XLAT("message flash time"), - XLAT("How long should the messages stay on the screen.")); - - if(xuni == 'i') { vid.shifttarget = vid.shifttarget^3; } - - handleAllConfig(sym, xuni); - } - -void showJoystickConfig() { - - dialog::init(XLAT("joystick configuration")); - - dialog::addSelItem(XLAT("first joystick position (movement)"), its(joyx)+","+its(joyy), 0); - dialog::addSelItem(XLAT("second joystick position (panning)"), its(panjoyx)+","+its(panjoyy), 0); - -#ifndef MOBWEB - dialog::addSelItem(XLAT("joystick mode"), XLAT(autojoy ? "automatic" : "manual"), 'p'); - - dialog::addSelItem(XLAT("first joystick: movement threshold"), its(vid.joyvalue), 'a'); - dialog::addSelItem(XLAT("first joystick: execute movement threshold"), its(vid.joyvalue2), 'b'); - dialog::addSelItem(XLAT("second joystick: pan threshold"), its(vid.joypanthreshold), 'c'); - dialog::addSelItem(XLAT("second joystick: panning speed"), fts(vid.joypanspeed * 1000), 'd'); -#endif - - dialog::addItem(XLAT("back"), 'v'); - dialog::display(); - } - -void handleJoystickConfig(int sym, int uni) { - dialog::handleNavigation(sym, uni); - char xuni = uni | 96; - if(xuni == 'p') autojoy = !autojoy; - else if(xuni == 'a') - dialog::editNumber(vid.joyvalue, 0, 32768, 100, 4800, XLAT("first joystick: movement threshold"), ""); - else if(xuni == 'b') - dialog::editNumber(vid.joyvalue2, 0, 32768, 100, 5600, XLAT("first joystick: execute movement threshold"), ""); - else if(xuni == 'c') - dialog::editNumber(vid.joypanthreshold, 0, 32768, 100, 2500, XLAT("second joystick: pan threshold"), ""); - else if(xuni == 'd') - dialog::editNumber(vid.joypanspeed, 0, 1e-2, 1e-5, 1e-4, XLAT("second joystick: panning speed"), ""); - - else if(xuni == 'v') - cmode = emShmupConfig; - - else if(doexiton(sym, uni)) cmode = emShmupConfig; - } - -void projectionDialog() { - geom3::tc_alpha = ticks; - dialog::editNumber(vid.alpha, -5, 5, .1, 1, - XLAT("projection"), - XLAT("HyperRogue uses the Minkowski hyperboloid model internally. " - "Klein and Poincar‚ models can be obtained by perspective, " - "and the Gans model is obtained by orthogonal projection. " -// "This parameter specifies the distance from the hyperboloid center " -// "to the eye. " - "See also the conformal mode (in the special modes menu) " - "for more models.")); - dialog::sidedialog = true; - } - -void show3D() { - using namespace geom3; - dialog::init(XLAT("3D configuration")); - - dialog::addSelItem(XLAT("High detail range"), fts(highdetail), 'n'); - dialog::addSelItem(XLAT("Mid detail range"), fts(middetail), 'm'); - - dialog::addBreak(50); - dialog::addSelItem(XLAT("Camera level above the plane"), fts3(camera), 'c'); - dialog::addSelItem(XLAT("Ground level below the plane"), fts3(depth), 'g'); - - dialog::addSelItem(XLAT("Projection at the ground level"), fts3(vid.alpha), 'a'); - dialog::addBreak(50); - dialog::addSelItem(XLAT("Height of walls"), fts3(wall_height), 'w'); - - dialog::addSelItem(XLAT("Rock-III to wall ratio"), fts3(rock_wall_ratio), 'r'); - dialog::addSelItem(XLAT("Human to wall ratio"), fts3(human_wall_ratio), 'h'); - dialog::addSelItem(XLAT("Level of water surface"), fts3(lake_top), 'l'); - dialog::addSelItem(XLAT("Level of water bottom"), fts3(lake_bottom), 'k'); - - dialog::addBreak(50); - dialog::addSelItem(XLAT("Y shift"), fts3(vid.yshift), 'y'); - dialog::addSelItem(XLAT("camera rotation"), fts3(vid.camera_angle), 's'); - dialog::addSelItem(XLAT("distance between eyes"), fts3(vid.eye), 'e'); - dialog::addBreak(50); - dialog::addBoolItem(XLAT("ball model"), pmodel == mdBall, 'B'); - dialog::addBoolItem(XLAT("hyperboloid model"), pmodel == mdHyperboloid, 'M'); - dialog::addSelItem(XLAT("camera rotation in ball model"), fts3(vid.ballangle), 'b'); - dialog::addSelItem(XLAT("projection in ball model"), fts3(vid.ballproj), 'x'); - - dialog::addBreak(50); - if(!(wmspatial || mmspatial)) - dialog::addInfo(XLAT("set 3D monsters or walls in basic config first")); - else if(invalid != "") - dialog::addInfo(XLAT("error: "+invalid)); - else - dialog::addInfo(XLAT("parameters set correctly")); - dialog::addBreak(50); - dialog::addItem(XLAT("exit 3D configuration"), 'v'); - dialog::display(); - } - -string explain3D(ld *param) { - using namespace geom3; - if(param == &highdetail || param == &middetail) - return - XLAT( - "Objects at distance less than %1 absolute units " - "from the center will be displayed with high " - "detail, and at distance at least %2 with low detail.", - fts3(highdetail), fts3(middetail) - ); - - if(param == &camera) - return - XLAT( - "Camera is placed %1 absolute units above a plane P in a three-dimensional " - "world. Ground level is actually an equidistant surface, %2 absolute units " - "below the plane P. The plane P (as well as the ground level or any " - "other equidistant surface below it) is viewed at an angle of %3 " - "(the tangent of the angle between the point in " - "the center of your vision and a faraway location is 1/cosh(c) = %4).", - fts3(camera), - fts3(depth), - fts3(atan(1/cosh(camera))*2*180/M_PI), - fts3(1/cosh(camera))); - if(param == &depth) - return - XLAT( - "Ground level is actually an equidistant surface, " - "%1 absolute units below the plane P. " - "Theoretically, this value affects the world -- " - "for example, eagles could fly %2 times faster by " - "flying above the ground level, on the plane P -- " - "but the actual game mechanics are not affected. " - "(Distances reported by the vector graphics editor " - "are not about points on the ground level, but " - "about the matching points on the plane P -- " - "divide them by the factor above to get actual " - "distances.)" - - , - fts3(depth), fts3(cosh(depth))); - // mention absolute units - - if(param == &vid.alpha) - return - XLAT( - "If we are viewing an equidistant g absolute units below a plane, " - "from a point c absolute units above the plane, this corresponds " - "to viewing a Minkowski hyperboloid from a point " - "tanh(g)/tanh(c) units below the center. This in turn corresponds to " - "the PoincarĂ© model for g=c, and Klein-Beltrami model for g=0."); - - if(param == &wall_height) - return - XLAT( - "The height of walls, in absolute units. For the current values of g and c, " - "wall height of %1 absolute units corresponds to projection value of %2.", - fts3(wall_height), fts3(factor_to_projection(geom3::WALL))); - - if(param == &rock_wall_ratio) - return - XLAT( - "The ratio of Rock III to walls is %1, so Rock III are %2 absolute units high. " - "Length of paths on the Rock III level is %3 of the corresponding length on the " - "ground level.", - fts3(rock_wall_ratio), fts3(wall_height * rock_wall_ratio), - fts3(cosh(depth - wall_height * rock_wall_ratio) / cosh(depth))); - - if(param == &human_wall_ratio) - return - XLAT( - "Humans are %1 " - "absolute units high. Your head travels %2 times the distance travelled by your " - "feet.", - fts3(wall_height * human_wall_ratio), - fts3(cosh(depth - wall_height * human_wall_ratio) / cosh(depth))); - - return ""; - } - -void handle3D(int sym, int uni) { - using namespace geom3; - dialog::handleNavigation(sym, uni); - - if(uni == 'n') - dialog::editNumber(geom3::highdetail, 0, 5, .5, 7, XLAT("High detail range"), ""); - else if(uni == 'm') - dialog::editNumber(geom3::middetail, 0, 5, .5, 7, XLAT("Mid detail range"), ""); - else if(uni == 'c') - tc_camera = ticks, - dialog::editNumber(geom3::camera, 0, 5, .1, 1, XLAT("Camera level above the plane"), ""); - else if(uni == 'g') - tc_depth = ticks, - dialog::editNumber(geom3::depth, 0, 5, .1, 1, XLAT("Ground level below the plane"), ""); - else if(uni == 'a') - projectionDialog(); - else if(uni == 'w') - dialog::editNumber(geom3::wall_height, 0, 1, .1, .3, XLAT("Height of walls"), ""); - else if(uni == 'l') - dialog::editNumber(geom3::lake_top, 0, 1, .1, .25, XLAT("Level of water surface"), ""); - else if(uni == 'k') - dialog::editNumber(geom3::lake_bottom, 0, 1, .1, .9, XLAT("Level of water bottom"), ""); - else if(uni == 'r') - dialog::editNumber(geom3::rock_wall_ratio, 0, 1, .1, .9, XLAT("Rock-III to wall ratio"), ""); - else if(uni == 'h') - dialog::editNumber(geom3::human_wall_ratio, 0, 1, .1, .7, XLAT("Human to wall ratio"), ""); - - else if(uni == 'e') { - dialog::editNumber(vid.eye, -10, 10, 0.01, 0, XLAT("distance between eyes"), - XLAT("Watch the Minkowski hyperboloid or the hypersian rug mode with the " - "red/cyan 3D glasses.")); - dialog::sidedialog = true; - } - - else if(uni == 'y') - dialog::editNumber(vid.yshift, 0, 1, .1, 0, XLAT("Y shift"), - "Don't center on the player character." - ); - else if(uni == 's') - dialog::editNumber(vid.camera_angle, -180, 180, 5, 0, XLAT("camera rotation"), - "Rotate the camera. Can be used to obtain a first person perspective, " - "or third person perspective when combined with Y shift." - ); - else if(uni == 'b') - dialog::editNumber(vid.ballangle, 0, 90, 5, 0, XLAT("camera rotation in ball model"), - "Rotate the camera in ball/hyperboloid model."); - else if(uni == 'x') - dialog::editNumber(vid.ballproj, 0, 100, .1, 0, XLAT("projection in ball model"), - "This parameter affects the ball model the same way as the projection parameter affects the disk model."); - else if(uni == 'B') - pmodel = (pmodel == mdBall ? mdDisk : mdBall); - else if(uni == 'M') - pmodel = (pmodel == mdHyperboloid ? mdDisk : mdHyperboloid); - - else if(doexiton(sym, uni)) cmode = emDisplayMode; - - if(cmode == emNumber) dialog::sidedialog = true; } void showDisplayMode() { + gamescreen(3); dialog::init(XLAT("special display modes")); @@ -876,6 +333,54 @@ void showDisplayMode() { showAllConfig(); dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + char xuni = uni; + if((xuni >= 'A' && xuni <= 'Z') || (xuni >= 1 && xuni <= 26)) xuni |= 32; + + if(xuni == 'p') projectionDialog(); + + if(xuni == 'z') { + dialog::editNumber(vid.scale, .001, 1000, .1, 1, XLAT("scale factor"), + XLAT("Scale the displayed model.")); + dialog::scaleLog(); + dialog::sidedialog = true; + } + + if(xuni == 'm') { vid.monmode += 60 + (shiftmul > 0 ? 1 : -1); vid.monmode %= 6; } + + if(xuni == '9') pushScreen(show3D); + + #ifndef NOEDIT + else if(xuni == 'g') { + pushScreen(mapeditor::showDrawEditor); + mapeditor::initdraw(cwt.c); + } + #endif + + else if(xuni == 'x') { + viewdists = !viewdists; + popScreen(); + } + #ifndef NORUG + else if(xuni == 'u') { + if(sphere) projectionDialog(); + else rug::select(); + } + #endif + else if(uni == 'a') + pushScreen(conformal::show); + + #ifndef NOMODEL + else if(xuni == 'n') + pushScreen(netgen::show); + #endif + + else gmodekeys(sym, uni); + + handleAllConfig(sym, xuni); + }; } void gmodekeys(int sym, int uni) { @@ -892,59 +397,11 @@ void gmodekeys(int sym, int uni) { } } -void handleDisplayMode(int sym, int uni) { - dialog::handleNavigation(sym, uni); - char xuni = uni; - if((xuni >= 'A' && xuni <= 'Z') || (xuni >= 1 && xuni <= 26)) xuni |= 32; - - if(xuni == 'p') projectionDialog(); - - if(xuni == 'z') { - dialog::editNumber(vid.scale, .001, 1000, .1, 1, XLAT("scale factor"), - XLAT("Scale the displayed model.")); - dialog::scaleLog(); - dialog::sidedialog = true; - } - - if(xuni == 'm') { vid.monmode += 60 + (shiftmul > 0 ? 1 : -1); vid.monmode %= 6; } - - if(xuni == '9') cmode = em3D; - -#ifndef NOEDIT - else if(xuni == 'g') { - cmode = emDraw; - mapeditor::initdraw(cwt.c); - } -#endif - - else if(xuni == 'x') { - viewdists = !viewdists; - cmode = emNormal; - } -#ifndef NORUG - else if(xuni == 'u') { - if(sphere) projectionDialog(); - else rug::select(); - } -#endif - else if(uni == 'a') - cmode = emConformal; - -#ifndef NOMODEL - else if(xuni == 'n') - cmode = emNetgen; -#endif - - else gmodekeys(sym, uni); - - handleAllConfig(sym, xuni); - } - void switchHardcore() { if(hardcore && !canmove) { restartGame(); hardcore = false; - cmode = emNormal; + popScreen(); } else if(hardcore && canmove) { hardcore = false; } else { hardcore = true; canmove = true; hardcoreAt = turncount; } @@ -952,10 +409,11 @@ void switchHardcore() { addMessage("One wrong move, and it is game over!"); else addMessage("Not so hardcore?"); - if(pureHardcore()) cmode = emNormal; + if(pureHardcore()) popScreen(); } void showChangeMode() { + gamescreen(3); dialog::init(XLAT("special game modes")); // gameplay modes @@ -991,111 +449,104 @@ void showChangeMode() { dialog::addItem(XLAT("return to the game"), 'v'); dialog::display(); - } - -void handleChangeMode(int sym, int uni) { - dialog::handleNavigation(sym, uni); - char xuni = uni; - if(xuni == 'v' || sym == SDLK_ESCAPE) cmode = emNormal; - - else if(uni == 'c') { - if(tactic::on && gold()) { - addMessage(XLAT("Not available in the pure tactics mode!")); + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + char xuni = uni; + + if(xuni == 'v' || sym == SDLK_ESCAPE) popScreen(); + + else if(uni == 'c') { + if(tactic::on && gold()) { + addMessage(XLAT("Not available in the pure tactics mode!")); + } + else if(!cheater) { + cheater++; + addMessage(XLAT("You activate your demonic powers!")); + #ifndef MOBILE + addMessage(XLAT("Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, etc.")); + #endif + popScreen(); + } + else { + popScreen(); + firstland = princess::challenge ? laPalace : laIce; + restartGame(); + } } - else if(!cheater) { - cheater++; - addMessage(XLAT("You activate your demonic powers!")); -#ifndef MOBILE - addMessage(XLAT("Shift+F, Shift+O, Shift+T, Shift+L, Shift+U, etc.")); -#endif - cmode = emNormal; + + else if(xuni == 'e') + pushScreen(showEuclideanMenu); + else if(xuni == 't') { + clearMessages(); + pushScreen(tactic::showMenu); + } + else if(xuni == 'y') { + clearMessages(); + if(yendor::everwon || autocheat) + pushScreen(yendor::showMenu); + else gotoHelp(yendor::chelp); } - else { - cmode = emNormal; - firstland = princess::challenge ? laPalace : laIce; - restartGame(); + else if(xuni == '7') + restartGame('7'); + else if(xuni == 'P') + pushScreen(peace::showMenu); + else if(xuni == 'i') { + restartGame('i'); } - } - - else if(xuni == 'e') { - cmode = emPickEuclidean; - } - else if(xuni == 't') { - clearMessages(); - cmode = emTactic; - } - else if(xuni == 'y') { - clearMessages(); - if(yendor::everwon || autocheat) - cmode = emYendor; - else gotoHelp(yendor::chelp); - } - else if(xuni == '7') - restartGame('7'); - else if(xuni == 'P') - cmode = emPeace; - else if(xuni == 'i') { - restartGame('i'); - cmode = emNormal; - } -#ifdef TOUR - else if(uni == 'T') { - cmode = emNormal; - tour::start(); - } -#endif - else if(uni == 'C') { - if(!chaosmode) gotoHelp( - "In the Chaos mode, lands change very often, and " - "there are no walls between them. " - "Some lands are incompatible with this." - "\n\nYou need to reach Crossroads IV to unlock the Chaos mode.", - chaosUnlocked ? emNormal : emChangeMode - ); - if(chaosUnlocked) restartGame('C'); - } - else if(xuni == 'p') { - if(!princess::everSaved) - addMessage(XLAT("Save %the1 first to unlock this challenge!", moPrincess)); - else { - restartGame('p'); - cmode = emNormal; + #ifdef TOUR + else if(uni == 'T') { + tour::start(); } - } -#ifndef NOEDIT - else if(xuni == 'm') { - if(tactic::on) - addMessage(XLAT("Not available in the pure tactics mode!")); - else { - cheater++; - cmode = emMapEditor; - lastexplore = turncount; - addMessage(XLAT("You activate your terraforming powers!")); + #endif + else if(uni == 'C') { + if(chaosUnlocked) restartGame('C'); + if(chaosmode) gotoHelp( + "In the Chaos mode, lands change very often, and " + "there are no walls between them. " + "Some lands are incompatible with this." + "\n\nYou need to reach Crossroads IV to unlock the Chaos mode." + ); } - } -#endif - else if(xuni == 's') { -#ifdef MOBILE - restartGame('s'); - cmode = emNormal; -#else - multi::shmupcfg = shmup::on; - cmode = emShmupConfig; -#endif - } - else if(xuni == 'h' && !shmup::on) - switchHardcore(); - else if(xuni == 'r') { - firstland = laIce; - restartGame('r'); - cmode = emNormal; - } - else if(doexiton(sym, uni)) - cmode = emMenu; + else if(xuni == 'p') { + if(!princess::everSaved) + addMessage(XLAT("Save %the1 first to unlock this challenge!", moPrincess)); + else + restartGame('p'); + } + #ifndef NOEDIT + else if(xuni == 'm') { + if(tactic::on) + addMessage(XLAT("Not available in the pure tactics mode!")); + else { + cheater++; + pushScreen(mapeditor::showMapEditor); + lastexplore = turncount; + addMessage(XLAT("You activate your terraforming powers!")); + } + } + #endif + else if(xuni == 's') { + #ifdef MOBILE + restartGame('s'); + #else + multi::shmupcfg = shmup::on; + pushScreen(shmup::showShmupConfig); + #endif + } + else if(xuni == 'h' && !shmup::on) + switchHardcore(); + else if(xuni == 'r') { + firstland = laIce; + restartGame('r'); + } + else if(doexiton(sym, uni)) + popScreen(); + }; } void showCheatMenu() { + gamescreen(1); dialog::init("cheat menu"); dialog::addItem(XLAT("return to the game"), ' '); dialog::addBreak(50); @@ -1124,76 +575,21 @@ void showCheatMenu() { dialog::addItem(XLAT("switch ghost timer"), 'G'-64); dialog::addItem(XLAT("switch web display"), 'W'-64); dialog::display(); - } - -void handleCheatMenu(int sym, int uni) { - dialog::handleNavigation(sym, uni); - if(uni != 0) { - applyCheat(uni); - if(uni == 'F' || uni == 'C' || uni == 'O' || - uni == 'S' || uni == 'U' || uni == 'G' || - uni == 'W' || uni == 'I' || uni == 'E' || - uni == 'H' || uni == 'B' || uni == 'M' || - uni == 'P' || uni == 'Y'-64 || uni == 'G'-64 || - uni == ' ' || uni == 8 || uni == 13 || - uni == SDLK_ESCAPE || uni == 'q' || uni == 'v' || sym == SDLK_ESCAPE || - sym == SDLK_F10) - cmode = emNormal; - } - } - -void showCustomizeChar() { - dialog::init(XLAT("Customize character")); - - if(shmup::on || multi::players) shmup::cpid = shmup::cpid_edit % shmup::players; - charstyle& cs = getcs(); - - dialog::addSelItem(XLAT("character"), csname(cs), 'g'); - dialog::addColorItem(XLAT("skin color"), cs.skincolor, 's'); - dialog::addColorItem(XLAT("weapon color"), cs.swordcolor, 'w'); - dialog::addColorItem(XLAT("hair color"), cs.haircolor, 'h'); - - if(cs.charid >= 1) dialog::addColorItem(XLAT("dress color"), cs.dresscolor, 'd'); - else dialog::addBreak(100); - if(cs.charid == 3) dialog::addColorItem(XLAT("dress color II"), cs.dresscolor2, 'f'); - else dialog::addBreak(100); - - dialog::addColorItem(XLAT("movement color"), cs.uicolor, 'u'); - - if(!shmup::on && multi::players == 1) dialog::addSelItem(XLAT("save whom"), XLAT1(minf[moPrincess].name), 'p'); - - if(numplayers() > 1) dialog::addSelItem(XLAT("player"), its(shmup::cpid+1), 'a'); - - dialog::addBreak(50); - dialog::addItem(XLAT("return to the game"), 'v'); - dialog::display(); - } - -void switchcolor(int& c, unsigned int* cs) { - dialog::openColorDialog(c, cs); - } - -void handleCustomizeChar(int sym, int uni) { - dialog::handleNavigation(sym, uni); - char xuni = uni | 96; - - if(shmup::on || multi::players) shmup::cpid = shmup::cpid_edit % shmup::players; - charstyle& cs = getcs(); - if(xuni == 'a') { shmup::cpid_edit++; shmup::cpid_edit %= 60; } - if(xuni == 'g') { - cs.charid++; - if(cs.charid == 2 && !princess::everSaved) cs.charid = 4; - cs.charid %= 10; - } - if(xuni == 'p') vid.samegender = !vid.samegender; - bool cat = cs.charid >= 4; - if(xuni == 's') switchcolor(cs.skincolor, cat ? haircolors : skincolors); - if(xuni == 'h') switchcolor(cs.haircolor, haircolors); - if(xuni == 'w') switchcolor(cs.swordcolor, cat ? eyecolors : swordcolors); - if(xuni == 'd') switchcolor(cs.dresscolor, cat ? haircolors : dresscolors); - if(xuni == 'f') switchcolor(cs.dresscolor2, dresscolors2); - if(xuni == 'u') switchcolor(cs.uicolor, eyecolors); - if(xuni == 'v' || sym == SDLK_ESCAPE) cmode = emNormal; + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(uni != 0) { + applyCheat(uni); + if(uni == 'F' || uni == 'C' || uni == 'O' || + uni == 'S' || uni == 'U' || uni == 'G' || + uni == 'W' || uni == 'I' || uni == 'E' || + uni == 'H' || uni == 'B' || uni == 'M' || + uni == 'P' || uni == 'Y'-64 || uni == 'G'-64 || + uni == ' ' || uni == 8 || uni == 13 || + uni == SDLK_ESCAPE || uni == 'q' || uni == 'v' || sym == SDLK_ESCAPE || + sym == SDLK_F10) + popScreen(); + } + }; } int eupage = 0; @@ -1208,6 +604,7 @@ const char* geometrynames[gGUARD] = { }; void showEuclideanMenu() { + gamescreen(4); int s = vid.fsize; vid.fsize = vid.fsize * 4/5; dialog::init(XLAT("Euclidean/elliptic mode")); @@ -1250,307 +647,68 @@ void showEuclideanMenu() { dialog::display(); vid.fsize = s; - } - -void handleEuclidean(int sym, int uni) { - dialog::handleNavigation(sym, uni); - int lid; - if(uni >= 'a' && uni <= 'z') lid = uni - 'a'; - else if(uni >= 'A' && uni <= 'Z') lid = 26 + uni - 'A'; - else lid = -1; - - if(lid >= 0) lid += euperpage * eupage; - - if(uni == '0') { - targetgeometry = geometry; - restartGame('g'); - cmode = emNormal; - } - else if(uni == '5') { - targetgeometry = eGeometry(1+targetgeometry); - if(targetgeometry == gGUARD) targetgeometry = gEuclid; - } - else if(uni == '-' || uni == PSEUDOKEY_WHEELUP || uni == PSEUDOKEY_WHEELDOWN) { - eupage++; - if(eupage * euperpage >= LAND_SPHEUC) eupage = 0; - } - else if(lid >= 0 && lid < LAND_SPHEUC) { - euclidland = land_spheuc[lid]; - if(landvisited[euclidland] && euclidland != laOceanWall) { - if(targetgeometry != geometry) - restartGame('g'); - else - restartGame(tactic::on ? 't' : 0); - // disable PTM if chosen a land from the Euclidean menu - if(tactic::on) restartGame('t'); - cmode = emNormal; - } - else euclidland = laIce; - } - else if(uni == '2' || sym == SDLK_F1) gotoHelp( - "If you want to know how much the gameplay is affected by the " - "hyperbolic geometry in HyperRogue, this mode is for you!\n\n" + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + int lid; + if(uni >= 'a' && uni <= 'z') lid = uni - 'a'; + else if(uni >= 'A' && uni <= 'Z') lid = 26 + uni - 'A'; + else lid = -1; - "You can play an Euclidean version of each of the lands in " - "HyperRogue. Lands which include horocycles (Temple, Caribbean, " - "Whirlpool), infinite trees (Zebra, Emerald), or networks of " - "ultraparallel lines (Crossroads, Vineyard, Palace) cannot be " - "faithfully represented in Euclidean, so yo get more " - "or less simplified versions of them. Choose Crossroads to play a game " - "where many different lands appear." - ); - else if(doexiton(sym, uni)) cmode = emNormal; + if(lid >= 0) lid += euperpage * eupage; + + if(uni == '0') { + targetgeometry = geometry; + restartGame('g'); + popScreen(); + } + else if(uni == '5') { + targetgeometry = eGeometry(1+targetgeometry); + if(targetgeometry == gGUARD) targetgeometry = gEuclid; + } + else if(uni == '-' || uni == PSEUDOKEY_WHEELUP || uni == PSEUDOKEY_WHEELDOWN) { + eupage++; + if(eupage * euperpage >= LAND_SPHEUC) eupage = 0; + } + else if(lid >= 0 && lid < LAND_SPHEUC) { + euclidland = land_spheuc[lid]; + if(landvisited[euclidland] && euclidland != laOceanWall) { + if(targetgeometry != geometry) + restartGame('g'); + else + restartGame(tactic::on ? 't' : 0); + // disable PTM if chosen a land from the Euclidean menu + if(tactic::on) restartGame('t'); + popScreen(); + } + else euclidland = laIce; + } + else if(uni == '2' || sym == SDLK_F1) gotoHelp( + "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 play an Euclidean version of each of the lands in " + "HyperRogue. Lands which include horocycles (Temple, Caribbean, " + "Whirlpool), infinite trees (Zebra, Emerald), or networks of " + "ultraparallel lines (Crossroads, Vineyard, Palace) cannot be " + "faithfully represented in Euclidean, so yo get more " + "or less simplified versions of them. Choose Crossroads to play a game " + "where many different lands appear." + ); + else if(doexiton(sym, uni)) popScreen(); + }; } #ifdef MOBILE namespace leader { void showMenu(); void handleKey(int sym, int uni); } #endif -#ifndef NOSAVE -void showScores() { - int y = vid.fsize * 7/2; - int bx = vid.fsize; - getcstat = 1; - - string modes = - scoremode == 0 ? XLAT(", m - mode: normal") : - scoremode == 1 ? XLAT(", m - mode: shoot'em up") : - scoremode == 2 ? XLAT(", m - mode: hardcore only") : - "?"; - - if(euclid) modes += XLAT(" (E:%1)", euclidland); - - - mouseovers = XLAT("t/left/right - change display, up/down - scroll, s - sort by") + modes; - - displaystr(bx*4, vid.fsize*2, 0, vid.fsize, "#", forecolor, 16); - displaystr(bx*8, vid.fsize*2, 0, vid.fsize, "$$$", forecolor, 16); - displaystr(bx*12, vid.fsize*2, 0, vid.fsize, XLAT("kills"), forecolor, 16); - displaystr(bx*18, vid.fsize*2, 0, vid.fsize, XLAT("time"), forecolor, 16); - displaystr(bx*22, vid.fsize*2, 0, vid.fsize, XLAT("ver"), forecolor, 16); - displaystr(bx*23, vid.fsize*2, 0, vid.fsize, displayfor(NULL), forecolor, 0); - if(scorefrom < 0) scorefrom = 0; - int id = 0; - int omit = scorefrom; - int rank = 0; - while(y < (ISMOBILE ? vid.yres - 5*vid.fsize : vid.yres - 2 * vid.fsize)) { - if(id >= size(scores)) break; - - score& S(scores[id]); - - bool wrongtype = false; - - wrongtype |= (euclid && (!S.box[116] || S.box[120] != euclidland)); - wrongtype |= (!euclid && S.box[116]); - - wrongtype |= (scoremode == 1 && !S.box[119]); - wrongtype |= (scoremode != 1 && S.box[119]); - wrongtype |= (scoremode == 2 && (!S.box[117] || S.box[118] >= PUREHARDCORE_LEVEL)); - - if(wrongtype) { id++; continue; } - - if(omit) { omit--; rank++; id++; continue; } - - char buf[16]; - - rank++; sprintf(buf, "%d", rank); - displaystr(bx*4, y, 0, vid.fsize, buf, 0xC0C0C0, 16); - - sprintf(buf, "%d", S.box[2]); - displaystr(bx*8, y, 0, vid.fsize, buf, 0xC0C0C0, 16); - - sprintf(buf, "%d", S.box[3]); - displaystr(bx*12, y, 0, vid.fsize, buf, 0xC0C0C0, 16); - - sprintf(buf, "%d:%02d", S.box[0]/60, S.box[0] % 60); - displaystr(bx*18, y, 0, vid.fsize, buf, 0xC0C0C0, 16); - - displaystr(bx*22, y, 0, vid.fsize, S.ver, 0xC0C0C0, 16); - - displaystr(bx*23, y, 0, vid.fsize, displayfor(&S), 0xC0C0C0, 0); - - y += vid.fsize*5/4; id++; - } - -#ifdef MOBILE - buttonclicked = false; - displayabutton(-1, +1, XLAT("SORT"), BTON); - displayabutton( 0, +1, XLAT("PICK"), BTON); - displayabutton(+1, +1, XLAT("PLAY"), BTON); -#endif - } - -void sortScores() { - if(scorerev) reverse(scores.begin(), scores.end()); - else { - scorerev = true; - scoresort = scoredisplay; - stable_sort(scores.begin(), scores.end(), scorecompare); - } - } - -void shiftScoreDisplay(int delta) { - scoredisplay = (scoredisplay + POSSCORE + delta) % POSSCORE, scorerev = false; - if(fakescore()) shiftScoreDisplay(delta); - } - -void handleScoreKeys(int sym, int uni) { -#ifndef MOBILE - if(sym == SDLK_LEFT || sym == SDLK_KP4 || sym == 'h' || sym == 'a') - shiftScoreDisplay(-1); - else if(sym == SDLK_RIGHT || sym == SDLK_KP6 || sym == 'l' || sym == 'd') - shiftScoreDisplay(1); - else if(sym == 't') { mapeditor::infix = ""; cmode = emPickScores; } - else if(sym == SDLK_UP || sym == 'k' || sym == 'w') - scorefrom -= 5; - else if(sym == SDLK_DOWN || sym == 'j' || sym == 'x') - scorefrom += 5; - else if(sym == PSEUDOKEY_WHEELUP) - scorefrom--; - else if(sym == PSEUDOKEY_WHEELDOWN) - scorefrom++; - else if(sym == 's') sortScores(); - else if(sym == 'm') { scoremode++; scoremode %= 3; } - else if(doexiton(sym, uni)) cmode = emNormal; -#else - static int scoredragx, scoredragy; - extern bool clicked, lclicked; - extern int andmode; - - if(andmode) { - if(!clicked && !lclicked) { - andmode = 0; - scoredragx = mousex; - scoredragy = mousey; - } - } - - else { - - if(clicked && !lclicked) - scoredragx = mousex, scoredragy = mousey; - - else if(lclicked && !clicked) { - if(mousey > vid.ycenter - 2 * vid.fsize) { - if(mousex < vid.xcenter*2/3) sortScores(); - else if(mousex < vid.xcenter*4/3) - cmode = emPickScores; - else andmode = 0, cmode = emNormal; - } - } - - else if(clicked && lclicked) { - // if(mousex > scoredragx + 80) scoredragx += 80, shiftScoreDisplay(1); - // if(mousex < scoredragx - 80) scoredragx -= 80, shiftScoreDisplay(-1); - while(mousey > scoredragy + vid.fsize) scoredragy += vid.fsize, scorefrom--; - while(mousey < scoredragy - vid.fsize) scoredragy -= vid.fsize, scorefrom++; - } - } -#endif - } - -bool monsterpage = false; - -void handlePickScoreKeys(int sym, int uni) { - extern int andmode; - andmode = 2; - if(uni == 'm') monsterpage = !monsterpage; else - if(uni >= '1' && uni <= '9') uni = uni + 1000 - '1'; - else if(uni >= 1000 && uni < 1000 + size(pickscore_options)) { - cmode = emScores; - scoredisplay = pickscore_options[uni - 1000].second; - } - else if(mapeditor::editInfix(uni)) ; - else if(doexiton(sym, uni)) cmode = emScores; - } - -void showPickScores() { - - getcstat = '0'; - int d = scoredisplay; - - pickscore_options.clear(); - - scorerev = false; - - for(int i=0; i keyhandler; -#ifndef NOMODEL - if(cmode == emNetgen) netgen::show(); -#endif -#ifndef NORUG - if(cmode == emRugConfig) rug::show(); -#endif -#ifndef NOEDIT - if(cmode == emMapEditor) mapeditor::showMapEditor(); - if(cmode == emDraw) mapeditor::showDrawEditor(); -#endif - -#ifndef NOSAVE - if(cmode == emScores) showScores(); - if(cmode == emPickScores) showPickScores(); -#endif - if(cmode == emHelp) showHelp(); - if(cmode == em3D) show3D(); -#ifdef MOBILE -#ifdef HAVE_ACHIEVEMENTS - if(cmode == emLeader) leader::showMenu(); -#endif -#endif -#ifdef ROGUEVIZ - if(cmode == emRogueviz) rogueviz::showMenu(); -#endif +#ifndef MOBILE +void quitOrAgain() { + int y = vid.yres * (618) / 1000; + displayButton(vid.xres/2, y + vid.fsize*1/2, + (items[itOrbSafety] && havesave) ? + XLAT("Press Enter or F10 to save") : + XLAT("Press Enter or F10 to quit"), + SDLK_RETURN, 8, 2); + displayButton(vid.xres/2, y + vid.fsize*2, XLAT("or 'r' or F5 to restart"), 'r', 8, 2); + displayButton(vid.xres/2, y + vid.fsize*7/2, XLAT("or 't' to see the top scores"), 't', 8, 2); + displayButton(vid.xres/2, y + vid.fsize*10/2, XLAT("or 'v' to see the main menu"), 'v', 8, 2); + displayButton(vid.xres/2, y + vid.fsize*13/2, XLAT("or 'o' to see the world overview"), 'o', 8, 2); + } +#endif + +int msgscroll = 0; + +string timeline() { + int timespent = (int) (savetime + (timerstopped ? 0 : (time(NULL) - timerstart))); + char buf[20]; + sprintf(buf, "%d:%02d", timespent/60, timespent % 60); + return + shmup::on ? + XLAT("%1 knives (%2)", its(turncount), buf) + : + XLAT("%1 turns (%2)", its(turncount), buf); + } + +void showMission() { + + cmode2 = smMission; + gamescreen(1); drawStats(); + keyhandler = handleKeyQuit; + + dialog::init( +#ifdef TOUR + tour::on ? (canmove ? XLAT("Tutorial") : XLAT("GAME OVER")) : +#endif + cheater ? XLAT("It is a shame to cheat!") : + showoff ? XLAT("Showoff mode") : + canmove && princess::challenge ? XLAT("%1 Challenge", moPrincess) : + canmove ? XLAT("Quest status") : + XLAT("GAME OVER"), + 0xC00000, 200, 100 + ); + dialog::addInfo(XLAT("Your score: %1", its(gold()))); + dialog::addInfo(XLAT("Enemies killed: %1", its(tkills()))); + +#ifdef TOUR + if(tour::on) ; else +#endif + if(items[itOrbYendor]) { + dialog::addInfo(XLAT("Orbs of Yendor found: %1", its(items[itOrbYendor])), iinf[itOrbYendor].color); + dialog::addInfo(XLAT("CONGRATULATIONS!"), iinf[itOrbYendor].color); + } + else { + if(princess::challenge) + dialog::addInfo(XLAT("Follow the Mouse and escape with %the1!", moPrincess)); + else if(gold() < R30) + dialog::addInfo(XLAT("Collect %1 $$$ to access more worlds", its(R30))); + else if(gold() < R60) + dialog::addInfo(XLAT("Collect %1 $$$ to access even more lands", its(R60))); + else if(!hellUnlocked()) + dialog::addInfo(XLAT("Collect at least %1 treasures in each of 9 types to access Hell", its(R10))); + else if(items[itHell] < R10) + dialog::addInfo(XLAT("Collect at least %1 Demon Daisies to find the Orbs of Yendor", its(R10))); + else if(size(yendor::yi) == 0) + dialog::addInfo(XLAT("Look for the Orbs of Yendor in Hell or in the Crossroads!")); + else + dialog::addInfo(XLAT("Unlock the Orb of Yendor!")); + } + + if(!timerstopped && !canmove) { + savetime += time(NULL) - timerstart; + timerstopped = true; + } + if(canmove && !timerstart) + timerstart = time(NULL); + + if(princess::challenge) ; +#ifdef TOUR + else if(tour::on) ; +#endif + else if(tkills() < R100) + dialog::addInfo(XLAT("Defeat %1 enemies to access the Graveyard", its(R100))); + else if(kills[moVizier] == 0 && (items[itFernFlower] < U5 || items[itGold] < U5)) + dialog::addInfo(XLAT("Kill a Vizier in the Palace to access Emerald Mine")); + else if(items[itEmerald] < U5) + dialog::addInfo(XLAT("Collect 5 Emeralds to access Camelot")); + else if(hellUnlocked() && !chaosmode) { + bool b = true; + for(int i=0; i=0) { + msginfo m; + m.spamtype = 0; + m.flashout = true; + m.stamp = ticks-128*vid.flashtime-128*(gls-i); + m.msg = gamelog[i].msg; + m.quantity = gamelog[i].quantity; + mnum++, + msgs.push_back(m); + } + + dialog::addBreak(100); + + bool intour = false; + +#ifdef TOUR + intour = tour::on; +#endif + + if(intour) { +#ifdef TOUR + if(canmove) { + dialog::addItem(XLAT("spherical geometry"), '1'); + dialog::addItem(XLAT("Euclidean geometry"), '2'); + dialog::addItem(XLAT("more curved hyperbolic geometry"), '3'); + } + if(!items[itOrbTeleport]) + dialog::addItem(XLAT("teleport away"), '4'); + else if(!items[itOrbAether]) + dialog::addItem(XLAT("move through walls"), '4'); + else + dialog::addItem(XLAT("flash"), '4'); + if(canmove) { + if(tour::slidecommand != "") + dialog::addItem(tour::slidecommand, '5'); + dialog::addItem(XLAT("static mode"), '6'); + dialog::addItem(XLAT("enable/disable texts"), '7'); + dialog::addItem(XLAT("next slide"), SDLK_RETURN); + dialog::addItem(XLAT("previous slide"), SDLK_BACKSPACE); + dialog::addItem(XLAT("list of slides"), '9'); + } + else + dialog::addBreak(200); + dialog::addItem(XLAT("main menu"), 'v'); +#endif + } + else { + dialog::addItem(XLAT(canmove ? "continue" : "see how it ended"), SDLK_ESCAPE); + dialog::addItem(XLAT("main menu"), 'v'); + dialog::addItem(XLAT("restart"), SDLK_F5); + #ifndef MOBILE + dialog::addItem(XLAT(quitsaves() ? "save" : "quit"), SDLK_F10); + #endif + #ifdef ANDROIDSHARE + dialog::addItem(XLAT("SHARE"), 's'-96); + #endif + } + + dialog::display(); + + if(mnum) + displayfr(vid.xres/2, vid.yres-vid.fsize*(mnum+1), 2, vid.fsize/2, XLAT("last messages:"), 0xC0C0C0, 8); + } + +void setAppropriateOverview() { + clearMessages(); + if(tactic::on) + pushScreen(tactic::showMenu); + else if(yendor::on) + pushScreen(yendor::showMenu); + else if(peace::on) + pushScreen(peace::showMenu); + else if(geometry != gNormal) + pushScreen(showEuclideanMenu); + else + pushScreen(showOverview); + } + +void showMissionScreen() { + popScreenAll(); + pushScreen(showMission); + achievement_final(false); + msgscroll = 0; } diff --git a/netgen.cpp b/netgen.cpp index f1542a82..fe80ebd3 100644 --- a/netgen.cpp +++ b/netgen.cpp @@ -659,49 +659,49 @@ namespace netgen { dialog::display(); } - } + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); - void handleKey(int sym, int uni) { - dialog::handleNavigation(sym, uni); - - if(!loaded) { - loadData(); if(!loaded) { - addMessage(XLAT("Failed to load the file 'papermodeldata.txt'")); - cmode = emNormal; + loadData(); + if(!loaded) { + addMessage(XLAT("Failed to load the file 'papermodeldata.txt'")); + popScreen(); + return; + } + if(!created) { + View = Id; + if(centerover) viewctr.h = centerover->master; + else viewctr.h = cwt.c->master; + playermoved = false; + dataFromHR(); + designNet(); + created = 1; + return; + } + } + + if(mode == 2 && uni != 0) { + mode = 0; return; } - if(!created) { + if(uni == 's') { View = Id; if(centerover) viewctr.h = centerover->master; else viewctr.h = cwt.c->master; playermoved = false; - dataFromHR(); - designNet(); - created = 1; - return; } - } - - if(mode == 2 && uni != 0) { - mode = 0; - return; - } - if(uni == 's') { - View = Id; - if(centerover) viewctr.h = centerover->master; - else viewctr.h = cwt.c->master; - playermoved = false; - } - else if(uni == 'c') { - createPapermodel(); - addMessage(XLAT("The paper model created as papermodel-*.bmp")); - } - else if(uni == 'd') designNet(); - else if(uni == 't') mode = 2; - else if(doexiton(sym, uni)) - cmode = emNormal; + else if(uni == 'c') { + createPapermodel(); + addMessage(XLAT("The paper model created as papermodel-*.bmp")); + } + else if(uni == 'd') designNet(); + else if(uni == 't') mode = 2; + else if(doexiton(sym, uni)) + popScreen(); + }; } - + } #endif diff --git a/rogueviz.cpp b/rogueviz.cpp index acc24c5c..04667c6b 100644 --- a/rogueviz.cpp +++ b/rogueviz.cpp @@ -955,9 +955,9 @@ string describe(shmup::monster *m) { sort(alledges.begin(), alledges.end(), edgecmp); - help = "Edges: "; + ::help = "Edges: "; - if(vd.info) help = (*vd.info) + "\n" + help; + if(vd.info) ::help = (*vd.info) + "\n" + help; for(int j=0; j function roguevizslide_action(char c return [c,t,act] (presmode mode) { mapeditor::canvasback = 0x101010; setCanvas(mode, c); - if(mode == 1 || mode == pmGeometryStart) t(); + if(mode == pmStart || mode == pmGeometryStart) t(); - if(mode == 3 || mode == pmGeometry || mode == pmGeometryReset) { + act(mode); + + if(mode == pmStop || mode == pmGeometry || mode == pmGeometryReset) { rogueviz::close(); shmup::clearMonsters(); if(mode == pmGeometryReset) t(); } - act(mode); }; } @@ -1983,4 +1984,11 @@ slide rvslides[] = { } +auto hooks = + addHook(hooks_frame, 0, drawExtra) + + addHook(hooks_args, 100, readArgs) + + addHook(clearmemory, 0, clear) + + addHook(hooks_config, 0, [] () { ss::list(rogueviz::rvtour::rvslides); }); + + }; diff --git a/rug.cpp b/rug.cpp index fa055e0a..fa53a821 100644 --- a/rug.cpp +++ b/rug.cpp @@ -667,50 +667,45 @@ void show() { dialog::addBoolItem(XLAT("render texture without OpenGL"), (rendernogl), 'g'); dialog::addSelItem(XLAT("texture size"), its(texturesize)+"x"+its(texturesize), 's'); dialog::display(); - } + keyhandler = [] (int sym, int uni) { + #ifdef PANDORA + rendernogl = true; + #endif + dialog::handleNavigation(sym, uni); -void handleKey(int sym, int uni) { -#ifdef PANDORA - rendernogl = true; -#endif - dialog::handleNavigation(sym, uni); - - if(uni == 'h') { - lastmode = cmode; - cmode = emHelp; - help = + if(uni == 'h') gotoHelp( "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."; - } - else if(uni == 'u') { - if(sphere) restartGame('E'); - if(euclid) restartGame('e'); - rug::init(); - cmode = emNormal; - } - else if(uni == 'o') - renderonce = !renderonce; -#ifndef PANDORA - else if(uni == 'g') - rendernogl = !rendernogl; -#endif - else if(uni == 's') { - texturesize *= 2; - if(texturesize == 8192) texturesize = 128; - dialog::scaleLog(); - } - else if(doexiton(sym, uni)) - cmode = emChangeMode; + "Use arrow keys to rotate, Page Up/Down to zoom." + ); + else if(uni == 'u') { + if(sphere) restartGame('E'); + if(euclid) restartGame('e'); + rug::init(); + popScreen(); + } + else if(uni == 'o') + renderonce = !renderonce; + #ifndef PANDORA + else if(uni == 'g') + rendernogl = !rendernogl; + #endif + else if(uni == 's') { + texturesize *= 2; + if(texturesize == 8192) texturesize = 128; + dialog::scaleLog(); + } + else if(doexiton(sym, uni)) popScreen(); + }; } void select() { if(rug::rugged) rug::close(); - else cmode = emRugConfig; + else pushScreen(rug::show); } } diff --git a/scores.cpp b/scores.cpp new file mode 100644 index 00000000..f28ad8cb --- /dev/null +++ b/scores.cpp @@ -0,0 +1,288 @@ +#ifndef NOSAVE +vector scores; + +int scoresort = 2; +int scoredisplay = 1; +int scorefrom = 0; +int scoremode = 0; +bool scorerev = false; + +bool scorecompare(const score& s1, const score &s2) { + return s1.box[scoresort] > s2.box[scoresort]; + } + +bool fakescore() { + return fakebox[scoredisplay]; + } + +string displayfor(score* S) { + // printf("S=%p, scoredisplay = %d\n", S, scoredisplay); + if(S == NULL) { + return XLATN(boxname[scoredisplay]); + } + if(scoredisplay == 0) { + char buf[10]; + snprintf(buf, 10, "%d:%02d", S->box[0]/60, S->box[0]%60); + return buf; + } + if(scoredisplay == 1) { + time_t tim = S->box[1]; + char buf[128]; strftime(buf, 128, "%c", localtime(&tim)); + return buf; + } + return its(S->box[scoredisplay]); + } + +void loadScores() { + scores.clear(); + FILE *f = fopen(scorefile, "rt"); + if(!f) { + printf("Could not open the score file '%s'!\n", scorefile); + addMessage(s0 + "Could not open the score file: " + scorefile); + return; + } + while(!feof(f)) { + char buf[120]; + if(fgets(buf, 120, f) == NULL) break; + if(buf[0] == 'H' && buf[1] == 'y') { + score sc; bool ok = true; + {if(fscanf(f, "%s", buf) <= 0) break;} sc.ver = buf; + + for(int i=0; i= "4.4") { + sc.box[0] = sc.box[65]; + // the first executable on Steam included a corruption + if(sc.box[65] > 1420000000 && sc.box[65] < 1430000000) { + sc.box[0] = sc.box[65] - sc.box[1]; + sc.box[65] = sc.box[0]; + } + // do not include saves + if(sc.box[65 + 4 + itOrbSafety - itOrbLightning]) ok = false; + } + else + sc.box[0] = sc.box[1] - sc.box[0]; // could not save then + if(ok && boxid > 20) scores.push_back(sc); + } + } + fclose(f); + addMessage(its(size(scores))+" games have been recorded in "+scorefile); + pushScreen(showScores); + boxid = 0; applyBoxes(); + scoresort = 2; reverse(scores.begin(), scores.end()); + scoremode = 0; + if(shmup::on) scoremode = 1; + else if(hardcore) scoremode = 2; + scorefrom = 0; + stable_sort(scores.begin(), scores.end(), scorecompare); + #ifdef MOBILE + extern int andmode; + andmode = 2; + #endif + } + +vector > pickscore_options; + +void sortScores() { + if(scorerev) reverse(scores.begin(), scores.end()); + else { + scorerev = true; + scoresort = scoredisplay; + stable_sort(scores.begin(), scores.end(), scorecompare); + } + } + +void shiftScoreDisplay(int delta) { + scoredisplay = (scoredisplay + POSSCORE + delta) % POSSCORE, scorerev = false; + if(fakescore()) shiftScoreDisplay(delta); + } + +void showScores() { + int y = vid.fsize * 7/2; + int bx = vid.fsize; + getcstat = 1; + + string modes = + scoremode == 0 ? XLAT(", m - mode: normal") : + scoremode == 1 ? XLAT(", m - mode: shoot'em up") : + scoremode == 2 ? XLAT(", m - mode: hardcore only") : + "?"; + + if(euclid) modes += XLAT(" (E:%1)", euclidland); + + + mouseovers = XLAT("t/left/right - change display, up/down - scroll, s - sort by") + modes; + + displaystr(bx*4, vid.fsize*2, 0, vid.fsize, "#", forecolor, 16); + displaystr(bx*8, vid.fsize*2, 0, vid.fsize, "$$$", forecolor, 16); + displaystr(bx*12, vid.fsize*2, 0, vid.fsize, XLAT("kills"), forecolor, 16); + displaystr(bx*18, vid.fsize*2, 0, vid.fsize, XLAT("time"), forecolor, 16); + displaystr(bx*22, vid.fsize*2, 0, vid.fsize, XLAT("ver"), forecolor, 16); + displaystr(bx*23, vid.fsize*2, 0, vid.fsize, displayfor(NULL), forecolor, 0); + if(scorefrom < 0) scorefrom = 0; + int id = 0; + int omit = scorefrom; + int rank = 0; + while(y < (ISMOBILE ? vid.yres - 5*vid.fsize : vid.yres - 2 * vid.fsize)) { + if(id >= size(scores)) break; + + score& S(scores[id]); + + bool wrongtype = false; + + wrongtype |= (euclid && (!S.box[116] || S.box[120] != euclidland)); + wrongtype |= (!euclid && S.box[116]); + + wrongtype |= (scoremode == 1 && !S.box[119]); + wrongtype |= (scoremode != 1 && S.box[119]); + wrongtype |= (scoremode == 2 && (!S.box[117] || S.box[118] >= PUREHARDCORE_LEVEL)); + + if(wrongtype) { id++; continue; } + + if(omit) { omit--; rank++; id++; continue; } + + char buf[16]; + + rank++; sprintf(buf, "%d", rank); + displaystr(bx*4, y, 0, vid.fsize, buf, 0xC0C0C0, 16); + + sprintf(buf, "%d", S.box[2]); + displaystr(bx*8, y, 0, vid.fsize, buf, 0xC0C0C0, 16); + + sprintf(buf, "%d", S.box[3]); + displaystr(bx*12, y, 0, vid.fsize, buf, 0xC0C0C0, 16); + + sprintf(buf, "%d:%02d", S.box[0]/60, S.box[0] % 60); + displaystr(bx*18, y, 0, vid.fsize, buf, 0xC0C0C0, 16); + + displaystr(bx*22, y, 0, vid.fsize, S.ver, 0xC0C0C0, 16); + + displaystr(bx*23, y, 0, vid.fsize, displayfor(&S), 0xC0C0C0, 0); + + y += vid.fsize*5/4; id++; + } + +#ifdef MOBILE + buttonclicked = false; + displayabutton(-1, +1, XLAT("SORT"), BTON); + displayabutton( 0, +1, XLAT("PICK"), BTON); + displayabutton(+1, +1, XLAT("PLAY"), BTON); +#endif + + keyhandler = [] (int sym, int uni) { + #ifndef MOBILE + if(sym == SDLK_LEFT || sym == SDLK_KP4 || sym == 'h' || sym == 'a') + shiftScoreDisplay(-1); + else if(sym == SDLK_RIGHT || sym == SDLK_KP6 || sym == 'l' || sym == 'd') + shiftScoreDisplay(1); + else if(sym == 't') { mapeditor::infix = ""; pushScreen(showPickScores); } + else if(sym == SDLK_UP || sym == 'k' || sym == 'w') + scorefrom -= 5; + else if(sym == SDLK_DOWN || sym == 'j' || sym == 'x') + scorefrom += 5; + else if(sym == PSEUDOKEY_WHEELUP) + scorefrom--; + else if(sym == PSEUDOKEY_WHEELDOWN) + scorefrom++; + else if(sym == 's') sortScores(); + else if(sym == 'm') { scoremode++; scoremode %= 3; } + else if(doexiton(sym, uni)) popScreen(); + #else + static int scoredragx, scoredragy; + extern bool clicked, lclicked; + extern int andmode; + + if(andmode) { + if(!clicked && !lclicked) { + andmode = 0; + scoredragx = mousex; + scoredragy = mousey; + } + } + + else { + + if(clicked && !lclicked) + scoredragx = mousex, scoredragy = mousey; + + else if(lclicked && !clicked) { + if(mousey > vid.ycenter - 2 * vid.fsize) { + if(mousex < vid.xcenter*2/3) sortScores(); + else if(mousex < vid.xcenter*4/3) + cmode = emPickScores; + else andmode = 0, popScreen(); + } + } + + else if(clicked && lclicked) { + // if(mousex > scoredragx + 80) scoredragx += 80, shiftScoreDisplay(1); + // if(mousex < scoredragx - 80) scoredragx -= 80, shiftScoreDisplay(-1); + while(mousey > scoredragy + vid.fsize) scoredragy += vid.fsize, scorefrom--; + while(mousey < scoredragy - vid.fsize) scoredragy -= vid.fsize, scorefrom++; + } + } + #endif + }; + } + +bool monsterpage = false; + +void showPickScores() { + + getcstat = '0'; + int d = scoredisplay; + + pickscore_options.clear(); + + scorerev = false; + + for(int i=0; i= '1' && uni <= '9') uni = uni + 1000 - '1'; + else if(uni >= 1000 && uni < 1000 + size(pickscore_options)) { + scoredisplay = pickscore_options[uni - 1000].second; + popScreen(); + } + else if(mapeditor::editInfix(uni)) ; + else if(doexiton(sym, uni)) popScreen(); + }; + } +#endif + diff --git a/shmup.cpp b/shmup.cpp index 47975d1b..8d45f0c5 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -4,12 +4,6 @@ // implementation of the shoot'em up mode -#ifdef MOBILE -#define SHMUPTITLE "shoot'em up mode" -#else -#define SHMUPTITLE "shoot'em up and multiplayer" -#endif - extern int mousex, mousey; extern bool clicked; @@ -215,6 +209,8 @@ bool shmupcfg; bool configdead; +void handleConfig(int sym, int uni); + void showShmupConfig() { #ifndef NOSDL @@ -362,6 +358,8 @@ void showShmupConfig() { dialog::display(); } + + keyhandler = handleConfig; #endif } @@ -380,7 +378,7 @@ void handleConfig(int sym, int uni) { else if(uni == '7') vid.scfg.subconfig = 8; else if(uni == 'j') vid.scfg.subconfig = SCJOY; else if(uni == 'a') multi::alwaysuse = !multi::alwaysuse; - else if(uni == 'b') cmode = emJoyConfig; + else if(uni == 'b') pushScreen(showJoyConfig); else if(uni == 'r') for(int i=0; ibase, m->at, tohex); } - -} +void addShmupHelp(string& out) { + if(shmup::mousetarget && intval(mouseh, tC0(shmup::mousetarget->pat)) < .1) { + out += ", "; #ifdef ROGUEVIZ -#include "rogueviz.cpp" + if(shmup::mousetarget->type == moRogueviz) { + help = XLAT(minf[shmup::mousetarget->type].help); + out += rogueviz::describe(shmup::mousetarget); + } + else #endif + { + out += XLAT1(minf[shmup::mousetarget->type].name); + help = generateHelpForMonster(shmup::mousetarget->type); + } + } + } + +auto hooks = addHook(clearmemory, 0, shmup::clearMemory); + +} diff --git a/sound.cpp b/sound.cpp index 4dc90ed0..c41e45cb 100644 --- a/sound.cpp +++ b/sound.cpp @@ -65,13 +65,13 @@ int musfadeval = 2000; eLand cid = laNone; +hookset *hooks_music; + void handlemusic() { DEBB(DF_GRAPH, (debugfile,"handle music\n")); if(audio && musicvolume) { eLand id = getCurrentLandForMusic(); -#ifdef EXTRA_MUSIC - if(extra::changemusic(id)) return; -#endif + if(callhandlers(false, hooks_music, id)) return; if(outoffocus) id = eLand(0); if(musfname[id] == "LAST") id = cid; if(!loaded[id]) { diff --git a/system.cpp b/system.cpp index f09ee4f9..2a4d350c 100644 --- a/system.cpp +++ b/system.cpp @@ -925,6 +925,7 @@ namespace gamestack { }; void restartGame(char switchWhat, bool push) { + popScreenAll(); DEBB(DF_INIT, (debugfile,"restartGame\n")); if(push) @@ -1061,41 +1062,6 @@ void restartGame(char switchWhat, bool push) { resetmusic(); } -void clearGameMemory() { - #ifdef HASLINEVIEW - conformal::renderAutoband(); - conformal::on = false; - #endif - DEBB(DF_INIT, (debugfile,"clearGameMemory\n")); - pathq.clear(); - dcal.clear(); - yendor::yii = NOYENDOR; yendor::yi.clear(); - clearshadow(); - offscreen.clear(); - princess::clear(); - buggycells.clear(); - mirrors.clear(); - clearing::bpdata.clear(); - tortoise::emap.clear(); - tortoise::babymap.clear(); - seenSevenMines = false; - #ifdef HASLINEVIEW - conformal::killhistory.clear(); - conformal::findhistory.clear(); - conformal::movehistory.clear(); - conformal::includeHistory = false; - #endif - recallCell = NULL; - prairie::lasttreasure = NULL; - prairie::enter = NULL; - prairie::tchoices.clear(); - prairie::beaststogen.clear(); - butterflies.clear(); - #ifdef ROGUEVIZ - rogueviz::close(); - #endif - } - static int orbid = 0; eItem nextOrb() { @@ -1222,7 +1188,6 @@ bool applyCheat(char u, cell *c = NULL) { items[itOrbShield] += 1; cheater++; addMessage(XLAT("Orb power gained!")); canmove = true; - if(cmode == emQuit) cmode = emNormal; } return true; } @@ -1235,12 +1200,12 @@ bool applyCheat(char u, cell *c = NULL) { #ifndef NOEDIT if(u == 'A') { lastexplore = turncount; - cmode = emMapEditor; + pushScreen(mapeditor::showMapEditor); return true; } if(u == 'A'-64) { mapeditor::drawcell = mouseover ? mouseover : cwt.c; - cmode = emDraw; + pushScreen(mapeditor::showDrawEditor); return true; } #endif @@ -1366,7 +1331,7 @@ bool applyCheat(char u, cell *c = NULL) { return true; } if(u == 'W'-64) { - cmode = emLinepattern; + pushScreen(linepatterns::showMenu); return true; } if(u == 'G'-64) { @@ -1423,3 +1388,19 @@ bool applyCheat(char u, cell *c = NULL) { return false; } +purehookset clearmemory; + +void clearMemory() { + callhooks(clearmemory); + } + +auto cgm = addHook(clearmemory, 40, [] () { + pathq.clear(); + dcal.clear(); + clearshadow(); + seenSevenMines = false; + recallCell = NULL; + butterflies.clear(); + buggycells.clear(); + }); + diff --git a/tour.cpp b/tour.cpp index 2c07674a..8b9548ba 100644 --- a/tour.cpp +++ b/tour.cpp @@ -72,21 +72,20 @@ void presentation(presmode mode) { } void slidehelp() { - if(texts && slides[currentslide].help[0]) { - help = - helptitle(XLAT(slides[currentslide].name), 0xFF8000) + - XLAT(slides[currentslide].help); - if(cmode != emHelp) - lastmode = cmode; - cmode = emHelp; - } + if(texts && slides[currentslide].help[0]) + gotoHelp( + help = + helptitle(XLAT(slides[currentslide].name), 0xFF8000) + + XLAT(slides[currentslide].help) + ); } bool handleKeyTour(int sym, int uni) { - bool normode = (cmode == emHelp || cmode == emNormal || cmode == emQuit); - if(!normode) return false; + if(!tour::on) return false; + if(!cmode2) return false; int flags = slides[currentslide].flags; - if((sym == SDLK_RETURN || sym == SDLK_KP_ENTER) && (cmode != emHelp || (flags & QUICKSKIP))) { + if((sym == SDLK_RETURN || sym == SDLK_KP_ENTER) && (cmode2 != smHelp || (flags & QUICKSKIP))) { + if(cmode2) popScreen(); if(geometry || purehepta) { restartGame(0, false); if(!(flags & QUICKGEO)) return true; @@ -106,7 +105,7 @@ bool handleKeyTour(int sym, int uni) { if(currentslide == 0) { slidehelp(); return true; } presentation(pmStop); currentslide--; - if(cmode == emHelp) slidehelp(); + if(cmode2 == smHelp) popScreen(), slidehelp(); presentation(pmStart); return true; } @@ -164,7 +163,7 @@ bool handleKeyTour(int sym, int uni) { return true; } if(sym == '4') { - cmode = emNormal; + popScreenAll(); if(items[itOrbTeleport]) goto give_aether; items[itOrbTeleport] = 1; checkmove(); @@ -214,15 +213,15 @@ bool handleKeyTour(int sym, int uni) { return true; } if(sym == '9') { - cmode = emSlideshows; + pushScreen(ss::showMenu); return true; } return false; } void checkGoodLand(eLand l) { - if(!showland(l) && texts) { - help = XLAT( + if(!showland(l) && texts) + gotoHelp(XLAT( "This tutorial is different than most other game tutorials -- " "you are not forced to do anything, and you can go wherever you want.\n\n" "However, %the1 is not what we are talking about now. " @@ -230,9 +229,7 @@ void checkGoodLand(eLand l) { "get lost there.\n\n" "Remember that you can get to the next slide by pressing Enter.", l - ); - cmode = emHelp; - } + )); } namespace ss { @@ -260,42 +257,38 @@ namespace ss { if(size(slideshows) > 1) dialog::addItem(XLAT("change slideshow"), '1'); dialog::addItem(XLAT("exit menu"), '0'); dialog::display(); - } - - void handleKey(int sym, int uni) { - if(uni >= 'a' && uni < 'a' + sssize) { - if(geometry || purehepta) { - restartGame(0, false); - presentation(pmGeometryReset); + keyhandler = [] (int sym, int uni) { + if(uni >= 'a' && uni < 'a' + sssize) { + if(geometry || purehepta) { + restartGame(0, false); + presentation(pmGeometryReset); + } + if(slides != wts) { + while(tour::on) restartGame('T', false); + slides = wts; + tour::start(); + } + presentation(pmStop); + currentslide = uni - 'a'; + popScreenAll(); + presentation(pmStart); + slidehelp(); } - if(slides != wts) { - while(tour::on) restartGame('T', false); - slides = wts; - tour::start(); + else if(uni == '1') { + list(wts); + for(int i=0; i int size(const T& x) {return int(x.size()); } string its(int i) { char buf[64]; sprintf(buf, "%d", i); return buf; } string fts(float x) { char buf[64]; sprintf(buf, "%4.2f", x); return buf; } diff --git a/yendor.cpp b/yendor.cpp index 3d9c55f5..2aab696a 100644 --- a/yendor.cpp +++ b/yendor.cpp @@ -412,6 +412,31 @@ namespace yendor { }; vector scoreboard; + const char *chelp = + "There are many possible solutions to the Yendor Quest. In the Yendor " + "Challenge, you will try many of them!\n\n" + "Each challenge takes part in a specific land, and you have to use what " + "you have available.\n\n" + + "You need to obtain an Orb of Yendor in the normal game to activate " + "this challenge, and (ever) collect 10 treasures in one or two lands " + "to activate a specific level.\n\n" + + "After you complete each challenge, you can try it again, on a harder " + "difficulty level.\n\n" + + "All the solutions showcased in the Yendor Challenge work in the normal " + "play too. However, passages to other lands, and (sometimes) some land features " + "are disabled in the Yendor " + "Challenge, so that you have to use the expected method. Also, " + "the generation rules are changed slightly for the Palace " + "and Minefield while you are looking for the Orb of Yendor, " + "to make the challenge more balanced " + "(but these changes are also active during the normal Yendor Quest).\n\n" + + "You get 1000 points for each challenge won, and 1 extra point for " + "each extra difficulty level."; + void showMenu() { int s = vid.fsize; vid.fsize = vid.fsize * 4/5; @@ -475,57 +500,28 @@ namespace yendor { yendor::uploadScore(); vid.fsize = s; - } - const char *chelp = - "There are many possible solutions to the Yendor Quest. In the Yendor " - "Challenge, you will try many of them!\n\n" - "Each challenge takes part in a specific land, and you have to use what " - "you have available.\n\n" - - "You need to obtain an Orb of Yendor in the normal game to activate " - "this challenge, and (ever) collect 10 treasures in one or two lands " - "to activate a specific level.\n\n" - - "After you complete each challenge, you can try it again, on a harder " - "difficulty level.\n\n" - - "All the solutions showcased in the Yendor Challenge work in the normal " - "play too. However, passages to other lands, and (sometimes) some land features " - "are disabled in the Yendor " - "Challenge, so that you have to use the expected method. Also, " - "the generation rules are changed slightly for the Palace " - "and Minefield while you are looking for the Orb of Yendor, " - "to make the challenge more balanced " - "(but these changes are also active during the normal Yendor Quest).\n\n" - - "You get 1000 points for each challenge won, and 1 extra point for " - "each extra difficulty level."; - - void handleKey(int sym, int uni) { - dialog::handleNavigation(sym, uni); - if(uni >= 'a' && uni < 'a'+YENDORLEVELS-1) { - challenge = uni-'a' + 1; - if(levelUnlocked(challenge) || autocheat) { - restartGame(yendor::on ? 0 : 'y'); - cmode = emNormal; + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + if(uni >= 'a' && uni < 'a'+YENDORLEVELS-1) { + challenge = uni-'a' + 1; + if(levelUnlocked(challenge) || autocheat) { + restartGame(yendor::on ? 0 : 'y'); + popScreen(); + } + else + addMessage("Collect 10 treasures in various lands to unlock the challenges there"); } - else - addMessage("Collect 10 treasures in various lands to unlock the challenges there"); - } - else if(uni == '0') { - if(yendor::on) restartGame('y'); - cmode = emNormal; - } - else if(uni == '1') easy = !easy; - else if(uni == '2' || sym == SDLK_F1) { - lastmode = cmode; - cmode = emHelp; - help = chelp; - } - else if(doexiton(sym, uni)) cmode = emNormal; + else if(uni == '0') { + if(yendor::on) restartGame('y'); + popScreen(); + } + else if(uni == '1') easy = !easy; + else if(uni == '2' || sym == SDLK_F1) gotoHelp(chelp); + else if(doexiton(sym, uni)) popScreen(); + }; } - + void collected(cell* c2) { int pg = gold(); playSound(c2, "tada"); @@ -565,6 +561,10 @@ namespace yendor { achievement_collection(itOrbYendor, pg, gold()); achievement_victory(false); } + + auto hooks = addHook(clearmemory, 0, [] () { + yendor::yii = NOYENDOR; yendor::yi.clear(); + }); }; #define MAXTAC 20 @@ -738,23 +738,20 @@ namespace tactic { } displayScore(scorehere, xr * 50); } - } + + keyhandler = [] (int sym, int uni) { + if(uni >= 1000 && uni < 1000 + LAND_TAC) { + firstland = euclidland = getLandById(uni - 1000); + restartGame(tactic::on ? 0 : 't'); + popScreen(); + } + else if(uni == '0') { + popScreen(); + firstland = laIce; + if(tactic::on) restartGame('t'); + } - void handleKey(int sym, int uni) { - if(uni >= 1000 && uni < 1000 + LAND_TAC) { - firstland = euclidland = getLandById(uni - 1000); - restartGame(tactic::on ? 0 : 't'); - cmode = emNormal; - } - else if(uni == '0') { - cmode = emNormal; - firstland = laIce; - if(tactic::on) restartGame('t'); - } - else if(sym == SDLK_F1) { - lastmode = cmode; - cmode = emHelp; - help = + else if(sym == SDLK_F1) gotoHelp( "In the pure tactics mode, you concentrate on a specific land. " "Your goal to obtain as high score as possible, without using " "features of the other lands. You can then compare your score " @@ -775,12 +772,13 @@ namespace tactic { "The rate of treasure spawn is static in this mode. It is not " "increased by killing monsters.\n\n" - "Good luck, and have fun!"; - - } - else if(dialog::handlePageButtons(uni)) ; - else if(doexiton(sym, uni)) cmode = emNormal; + "Good luck, and have fun!" + ); + else if(dialog::handlePageButtons(uni)) ; + else if(doexiton(sym, uni)) popScreen(); + }; } + }; int modecodetable[42][6] = { @@ -931,6 +929,7 @@ namespace peace { int qty; eLand getNext(eLand last) { + if(!peace::on) return laNone; if(isElemental(last) && hrand(100) < 90) return laNone; else if(createOnSea(last)) @@ -949,23 +948,6 @@ namespace peace { return false; } - void showMenu() { - dialog::init(XLAT(otherpuzzles ? "hyperbolic puzzles" : "memory game"), 0x40A040, 150, 100); - - levellist = otherpuzzles ? explorelevels : simonlevels; - - for(qty = 0; levellist[qty]; qty++) - dialog::addItem(XLAT1(linf[levellist[qty]].name), 'a'+qty); - - dialog::addBreak(100); - dialog::addItem(XLAT(otherpuzzles ? "memory game" : "other hyperbolic puzzles"), '1'); - dialog::addBoolItem(XLAT("display hints"), hint, '2'); - dialog::addItem(XLAT("Help"), SDLK_F1); - dialog::addItem(XLAT("Return to the normal game"), '0'); - - dialog::display(); - } - const char *chelp = NODESCYET; namespace simon { @@ -1043,26 +1025,41 @@ namespace peace { } } - void handleKey(int sym, int uni) { - dialog::handleNavigation(sym, uni); + void showMenu() { + dialog::init(XLAT(otherpuzzles ? "hyperbolic puzzles" : "memory game"), 0x40A040, 150, 100); + + levellist = otherpuzzles ? explorelevels : simonlevels; + + for(qty = 0; levellist[qty]; qty++) + dialog::addItem(XLAT1(linf[levellist[qty]].name), 'a'+qty); + + dialog::addBreak(100); + dialog::addItem(XLAT(otherpuzzles ? "memory game" : "other hyperbolic puzzles"), '1'); + dialog::addBoolItem(XLAT("display hints"), hint, '2'); + dialog::addItem(XLAT("Help"), SDLK_F1); + dialog::addItem(XLAT("Return to the normal game"), '0'); - if(uni == '1') otherpuzzles = !otherpuzzles; - else if(uni >= 'a' && uni < 'a' + qty) { - whichland = levellist[uni - 'a']; - restartGame(peace::on ? 0 : 'P'); - cmode = emNormal; - } - else if(uni == '2') { hint = !hint; cmode = emNormal; } - else if(uni == '0') { - firstland = laIce; - if(peace::on) restartGame('P'); - cmode = emNormal; - } - else if(uni == 'h' || sym == SDLK_F1) { - lastmode = cmode; - cmode = emHelp; - help = chelp; - } - else if(doexiton(sym, uni)) cmode = emNormal; + dialog::display(); + + keyhandler = [] (int sym, int uni) { + dialog::handleNavigation(sym, uni); + + if(uni == '1') otherpuzzles = !otherpuzzles; + else if(uni >= 'a' && uni < 'a' + qty) { + whichland = levellist[uni - 'a']; + restartGame(peace::on ? 0 : 'P'); + popScreen(); + } + else if(uni == '2') { hint = !hint; popScreen(); } + else if(uni == '0') { + firstland = laIce; + if(peace::on) restartGame('P'); + popScreen(); + } + else if(uni == 'h' || sym == SDLK_F1) gotoHelp(chelp); + else if(doexiton(sym, uni)) popScreen(); + }; } + + auto aNext = addHook(hooks_nextland, 100, getNext); };