mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-05-06 01:04:07 +00:00
Merge branch 'master' of https://github.com/zenorogue/hyperrogue
This commit is contained in:
commit
8da22c4ba9
@ -527,7 +527,7 @@ EX void killMonster(cell *c, eMonster who, flagtype deathflags IS(0)) {
|
|||||||
princess::reviveAt = gold(NO_LOVE) + 20;
|
princess::reviveAt = gold(NO_LOVE) + 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(princess::challenge) showMissionScreen();
|
if(princess::challenge) changes.at_commit([] { showMissionScreen(); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
complex2.cpp
10
complex2.cpp
@ -911,6 +911,7 @@ EX namespace dice {
|
|||||||
int faces;
|
int faces;
|
||||||
int facesides;
|
int facesides;
|
||||||
int order;
|
int order;
|
||||||
|
int highest_hardness;
|
||||||
die_structure(int ord, const vector<vector<int>>& v) {
|
die_structure(int ord, const vector<vector<int>>& v) {
|
||||||
sides = v;
|
sides = v;
|
||||||
spins = sides;
|
spins = sides;
|
||||||
@ -933,6 +934,9 @@ EX namespace dice {
|
|||||||
for(int i=0; i<faces; i++)
|
for(int i=0; i<faces; i++)
|
||||||
for(int j: sides[i])
|
for(int j: sides[i])
|
||||||
hardness[i] = min(hardness[i], hardness[j]+1);
|
hardness[i] = min(hardness[i], hardness[j]+1);
|
||||||
|
highest_hardness = 0;
|
||||||
|
for(int i=0; i<faces; i++)
|
||||||
|
highest_hardness = max(highest_hardness, hardness[i]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1201,7 +1205,11 @@ EX namespace dice {
|
|||||||
visit(c, dd, V);
|
visit(c, dd, V);
|
||||||
for(int i=0; i<isize(data); i++) {
|
for(int i=0; i<isize(data); i++) {
|
||||||
auto dat = data[i];
|
auto dat = data[i];
|
||||||
queuestr(fpp ? dat.V * zpush(cgi.FLOOR) : dat.V, .5, its(dat.dd.val+1), 0xFF8000FF);
|
int wa = dw->hardness[dat.dd.val];
|
||||||
|
int wb = dw->highest_hardness;
|
||||||
|
unsigned int red = ((wa * 0x00) + ((wb-wa) * 0xff)) / wb;
|
||||||
|
color_t col = 0xFF0000FF + (red << 16);
|
||||||
|
queuestr(fpp ? dat.V * zpush(cgi.FLOOR) : dat.V, .5, its(dat.dd.val+1), col);
|
||||||
if(i <= 22)
|
if(i <= 22)
|
||||||
forCellIdEx(c2, id, dat.c) if(can_roll(si, dat.dd.dir, movei(dat.c, id)) && !visited.count(c2)) {
|
forCellIdEx(c2, id, dat.c) if(can_roll(si, dat.dd.dir, movei(dat.c, id)) && !visited.count(c2)) {
|
||||||
auto re = roll_effect(movei(dat.c, id), dat.dd);
|
auto re = roll_effect(movei(dat.c, id), dat.dd);
|
||||||
|
@ -9,7 +9,7 @@ namespace hr {
|
|||||||
bool doAutoplay;
|
bool doAutoplay;
|
||||||
eLand autoplayLand;
|
eLand autoplayLand;
|
||||||
|
|
||||||
namespace prairie { extern long long enter; }
|
namespace prairie { extern cell *enter; }
|
||||||
|
|
||||||
bool sameland(eLand ll, eLand ln) {
|
bool sameland(eLand ll, eLand ln) {
|
||||||
if(ln == laBarrier || ln == laOceanWall)
|
if(ln == laBarrier || ln == laOceanWall)
|
||||||
@ -20,101 +20,7 @@ bool sameland(eLand ll, eLand ln) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell *cellToTarget() {
|
void randomCheat() {
|
||||||
if (isCrossroads(cwt.at->land)) {
|
|
||||||
for (cell *c: dcal) {
|
|
||||||
if (c->land == laCamelot && c->wall == waNone) {
|
|
||||||
printf("Trying to teleport into Camelot\n");
|
|
||||||
items[itOrbTeleport] += 1;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(cwt.at->land == laCamelot) {
|
|
||||||
int oldDist = celldistAltRelative(cwt.at);
|
|
||||||
if (oldDist > 3) {
|
|
||||||
for (cell *c: dcal) {
|
|
||||||
if (c->land == laCamelot) {
|
|
||||||
int dist = celldistAltRelative(c);
|
|
||||||
if (-1 <= dist && dist <= 1 && hrand(10) == 0) {
|
|
||||||
printf("Trying to teleport near the round table (%d to %d)\n", oldDist, dist);
|
|
||||||
items[itOrbTeleport] += 1;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dcal[hrand(isize(dcal))];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* auto a3 = addHook(hooks_nextland, 100, [] (eLand l) {
|
|
||||||
eLand l2;
|
|
||||||
do { l2 = pick(laRuins, laTerracotta, laPrairie); } while(l2 == l);
|
|
||||||
return l2;
|
|
||||||
}); */
|
|
||||||
|
|
||||||
void autoplay(int num_moves = 1000000000) {
|
|
||||||
// drawMesh();
|
|
||||||
// exit(0);
|
|
||||||
|
|
||||||
doAutoplay = true;
|
|
||||||
|
|
||||||
cheater = 1;
|
|
||||||
eLand lland = laIce;
|
|
||||||
eLand lland2 = laIce;
|
|
||||||
int lcount = 0;
|
|
||||||
int gcount = 0;
|
|
||||||
int lastgold = 0;
|
|
||||||
|
|
||||||
// landlist = { laRuins, laTerracotta, laPrairie };
|
|
||||||
|
|
||||||
generateLandList(isLandIngame);
|
|
||||||
|
|
||||||
#ifndef NOSDL
|
|
||||||
int lastdraw = 0;
|
|
||||||
#endif
|
|
||||||
while(doAutoplay) {
|
|
||||||
|
|
||||||
long long ienter = (long long) prairie::enter;
|
|
||||||
if(ienter && ienter < 100000) {
|
|
||||||
printf("ERROR: enter has incorrect value\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(gold() > lastgold) {
|
|
||||||
lastgold = gold();
|
|
||||||
gcount = 0;
|
|
||||||
}
|
|
||||||
else gcount++;
|
|
||||||
|
|
||||||
if(false && sameland(lland, cwt.at->land)) lcount++;
|
|
||||||
else {
|
|
||||||
lcount = 0; lland2 = lland; lland = cwt.at->land;
|
|
||||||
printf("%10dcc %5dt %5de %5d$ %5dK %5dgc %-30s H%d\n", cellcount, turncount, celldist(cwt.at), gold(), tkills(), gcount, dnameof(cwt.at->land).c_str(), hrand(1000000));
|
|
||||||
fflush(stdout);
|
|
||||||
#ifndef NOSDL
|
|
||||||
if(int(SDL_GetTicks()) > lastdraw + 3000) {
|
|
||||||
lastdraw = SDL_GetTicks();
|
|
||||||
fullcenter();
|
|
||||||
msgs.clear();
|
|
||||||
popScreenAll();
|
|
||||||
drawscreen();
|
|
||||||
clearAnimations();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
//mainloop();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if(gcount < 500) for(int i=1; i<isize(dcal); i++) {
|
|
||||||
c2 = dcal[i];
|
|
||||||
if(lcount >= 50 && !sameland(lland, c2->land) && !sameland(lland2, c2->land)) break;
|
|
||||||
else if(lcount < 50 && c2->item && c2->item != itOrbSafety) break;
|
|
||||||
} */
|
|
||||||
|
|
||||||
// Use a random cheat
|
|
||||||
int croll = hrand(50);
|
int croll = hrand(50);
|
||||||
if (croll < 25) {
|
if (croll < 25) {
|
||||||
eItem b = (eItem) hrand(ittypes);
|
eItem b = (eItem) hrand(ittypes);
|
||||||
@ -217,11 +123,43 @@ void autoplay(int num_moves = 1000000000) {
|
|||||||
vid.monmode = hrand(4);
|
vid.monmode = hrand(4);
|
||||||
printf("Set vid.monmode to %d: %s\n", vid.monmode, mdmodes[vid.monmode]);
|
printf("Set vid.monmode to %d: %s\n", vid.monmode, mdmodes[vid.monmode]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cell *cellToTarget() {
|
||||||
|
if (isCrossroads(cwt.at->land)) {
|
||||||
|
for (cell *c: dcal) {
|
||||||
|
if (c->land == laCamelot && c->wall == waNone) {
|
||||||
|
printf("Trying to teleport into Camelot\n");
|
||||||
|
items[itOrbTeleport] += 1;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cwt.at->land == laCamelot) {
|
||||||
|
int oldDist = celldistAltRelative(cwt.at);
|
||||||
|
if (oldDist > 3) {
|
||||||
|
for (cell *c: dcal) {
|
||||||
|
if (c->land == laCamelot) {
|
||||||
|
int dist = celldistAltRelative(c);
|
||||||
|
if (-1 <= dist && dist <= 1 && hrand(10) == 0) {
|
||||||
|
printf("Trying to teleport near the round table (%d to %d)\n", oldDist, dist);
|
||||||
|
items[itOrbTeleport] += 1;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dcal[hrand(isize(dcal))];
|
||||||
|
}
|
||||||
|
|
||||||
|
void randomMove()
|
||||||
|
{
|
||||||
// don't show warning dialogs
|
// don't show warning dialogs
|
||||||
items[itWarning] = 1;
|
items[itWarning] = 1;
|
||||||
|
|
||||||
// Make a random move
|
|
||||||
int roll = hrand(50);
|
int roll = hrand(50);
|
||||||
if (roll == 0) {
|
if (roll == 0) {
|
||||||
// drop dead orb
|
// drop dead orb
|
||||||
@ -248,7 +186,6 @@ void autoplay(int num_moves = 1000000000) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("MOVE CONFUSED %d\n", d);
|
printf("MOVE CONFUSED %d\n", d);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// try to use a ranged orb
|
// try to use a ranged orb
|
||||||
@ -257,8 +194,102 @@ void autoplay(int num_moves = 1000000000) {
|
|||||||
const char *tm = (ti == eItem(-1)) ? "orb cannot be used (see message log)" : iinf[ti].name;
|
const char *tm = (ti == eItem(-1)) ? "orb cannot be used (see message log)" : iinf[ti].name;
|
||||||
printf("TARGET %p: %s\n", (void*)ct, tm);
|
printf("TARGET %p: %s\n", (void*)ct, tm);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(false) if(turncount % 5000 == 0) {
|
void noteUnusualSituations()
|
||||||
|
{
|
||||||
|
if(cwt.at->monst && !isMultitile(cwt.at->monst)) {
|
||||||
|
// This is possible in multiple ways
|
||||||
|
printf("on a non-multitile monster: %s\n", minf[cwt.at->monst].name);
|
||||||
|
}
|
||||||
|
else if(isDie(cwt.at->wall)) {
|
||||||
|
// This is possible with aether + teleport
|
||||||
|
printf("on a wall-type die: %s\n", winf[cwt.at->wall].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isAnythingWrong()
|
||||||
|
{
|
||||||
|
uintptr_t ienter = (uintptr_t) prairie::enter;
|
||||||
|
if(ienter && ienter < 100000) {
|
||||||
|
printf("ERROR: prairie::enter has incorrect value\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(buggyGeneration || isize(buggycells)) {
|
||||||
|
println(hlog, "ERROR: buggy generation");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isIcyLand(cwt.at)) {
|
||||||
|
float heat = HEAT(cwt.at);
|
||||||
|
// Checking for extreme values as well as NaNs and infinities
|
||||||
|
if (!(-1e10 < heat && heat < 1e10)) {
|
||||||
|
printf("ERROR: Heat is out of expected range\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cwt.at->land == laCamelot) {
|
||||||
|
for(int i=0; i<isize(dcal); i++) {
|
||||||
|
cell *c = dcal[i];
|
||||||
|
if(c->land == laCamelot && celldistAltRelative(c) == 0 && c->wall != waRoundTable) {
|
||||||
|
printf("ERROR: The round table of camelot is interrupted by a cell of %s\n", winf[c->wall].name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0; i<isize(dcal); i++) {
|
||||||
|
cell *c = dcal[i];
|
||||||
|
(void)isChild(c, NULL);
|
||||||
|
if(childbug) return true;
|
||||||
|
if(c->land == laNone) {
|
||||||
|
printf("ERROR: no-land found\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(c->item == itBuggy || c->item == itBuggy2) {
|
||||||
|
printf("ERROR: buggy item found\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!euclid && isPrincess(c->monst) && princess::getPrincessInfo(c) == nullptr) {
|
||||||
|
printf("ERROR: missing princess info\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(dice::on(c)) {
|
||||||
|
if(dice::data.count(c) == 0) {
|
||||||
|
c->item = itBuggy;
|
||||||
|
printf("ERROR: missing dice::data[%p]\n", (void *)c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(!dice::data[c].which) {
|
||||||
|
// we might get here instead if someone already tried to do data[c], which creates a new element out of nothing
|
||||||
|
c->item = itBuggy;
|
||||||
|
printf("ERROR: missing dice::data[%p].which\n", (void *)c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stopIfBug()
|
||||||
|
{
|
||||||
|
if(isAnythingWrong()) {
|
||||||
|
if(noGUI) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
kills[moPlayer] = 0;
|
||||||
|
canmove = true;
|
||||||
|
doAutoplay = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showAutoplayStats()
|
||||||
|
{
|
||||||
printf("cells travelled: %d\n", celldist(cwt.at));
|
printf("cells travelled: %d\n", celldist(cwt.at));
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -274,9 +305,11 @@ void autoplay(int num_moves = 1000000000) {
|
|||||||
printf("\n\n\n");
|
printf("\n\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hrand(5000) == 0 || (isGravityLand(cwt.at->land) && coastvalEdge(cwt.at) >= 100) || gcount > 2000 || cellcount >= 20000000) {
|
void resetIfNeeded(int *gcount)
|
||||||
|
{
|
||||||
|
if(hrand(5000) == 0 || (isGravityLand(cwt.at->land) && coastvalEdge(cwt.at) >= 100) || *gcount > 2000 || cellcount >= 20000000) {
|
||||||
printf("RESET\n");
|
printf("RESET\n");
|
||||||
gcount = 0;
|
*gcount = 0;
|
||||||
cellcount = 0;
|
cellcount = 0;
|
||||||
activateSafety(autoplayLand ? autoplayLand : landlist[hrand(isize(landlist))]);
|
activateSafety(autoplayLand ? autoplayLand : landlist[hrand(isize(landlist))]);
|
||||||
if (cellcount < 0) {
|
if (cellcount < 0) {
|
||||||
@ -289,86 +322,72 @@ void autoplay(int num_moves = 1000000000) {
|
|||||||
printf("Safety generated\n");
|
printf("Safety generated\n");
|
||||||
forCellEx(c2, cwt.at) c2->item = itOrbSafety;
|
forCellEx(c2, cwt.at) c2->item = itOrbSafety;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isIcyLand(cwt.at)) {
|
|
||||||
float heat = HEAT(cwt.at);
|
|
||||||
// Checking for extreme values as well as NaNs and infinities
|
|
||||||
if (!(-1e10 < heat && heat < 1e10)) {
|
|
||||||
printf("Heat is out of expected range\n");
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwt.at->land == laCamelot) {
|
/* auto a3 = addHook(hooks_nextland, 100, [] (eLand l) {
|
||||||
for(int i=0; i<isize(dcal); i++) {
|
eLand l2;
|
||||||
cell *c = dcal[i];
|
do { l2 = pick(laRuins, laTerracotta, laPrairie); } while(l2 == l);
|
||||||
if(c->land == laCamelot && celldistAltRelative(c) == 0 && c->wall != waRoundTable) {
|
return l2;
|
||||||
printf("The round table of camelot is interrupted by a cell of %s\n", winf[c->wall].name);
|
}); */
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
void autoplay(int num_moves = 1000000000) {
|
||||||
doAutoplay = false;
|
// drawMesh();
|
||||||
|
// exit(0);
|
||||||
|
|
||||||
|
doAutoplay = true;
|
||||||
|
|
||||||
|
cheater = 1;
|
||||||
|
eLand lland = laIce;
|
||||||
|
eLand lland2 = laIce;
|
||||||
|
int lcount = 0;
|
||||||
|
int gcount = 0;
|
||||||
|
int lastgold = 0;
|
||||||
|
|
||||||
|
// landlist = { laRuins, laTerracotta, laPrairie };
|
||||||
|
|
||||||
|
generateLandList(isLandIngame);
|
||||||
|
|
||||||
|
#ifndef NOSDL
|
||||||
|
int lastdraw = 0;
|
||||||
|
#endif
|
||||||
|
while(doAutoplay) {
|
||||||
|
|
||||||
|
if(gold() > lastgold) {
|
||||||
|
lastgold = gold();
|
||||||
|
gcount = 0;
|
||||||
}
|
}
|
||||||
|
else gcount++;
|
||||||
|
|
||||||
|
if(false && sameland(lland, cwt.at->land)) lcount++;
|
||||||
|
else {
|
||||||
|
lcount = 0; lland2 = lland; lland = cwt.at->land;
|
||||||
|
printf("%10dcc %5dt %5de %5d$ %5dK %5dgc %-30s H%d\n", cellcount, turncount, celldist(cwt.at), gold(), tkills(), gcount, dnameof(cwt.at->land).c_str(), hrand(1000000));
|
||||||
|
fflush(stdout);
|
||||||
|
#ifndef NOSDL
|
||||||
|
if(int(SDL_GetTicks()) > lastdraw + 3000) {
|
||||||
|
lastdraw = SDL_GetTicks();
|
||||||
|
fullcenter();
|
||||||
|
msgs.clear();
|
||||||
|
popScreenAll();
|
||||||
|
drawscreen();
|
||||||
|
clearAnimations();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
//mainloop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cwt.at->monst && !isMultitile(cwt.at->monst)) {
|
/* if(gcount < 500) for(int i=1; i<isize(dcal); i++) {
|
||||||
printf("on a non-multitile monster: %s\n", minf[cwt.at->monst].name);
|
c2 = dcal[i];
|
||||||
}
|
if(lcount >= 50 && !sameland(lland, c2->land) && !sameland(lland2, c2->land)) break;
|
||||||
else if(isDie(cwt.at->wall)) {
|
else if(lcount < 50 && c2->item && c2->item != itOrbSafety) break;
|
||||||
printf("on a wall-type die: %s\n", winf[cwt.at->wall].name);
|
} */
|
||||||
}
|
|
||||||
|
|
||||||
for(int i=0; i<isize(dcal); i++) {
|
randomCheat();
|
||||||
cell *c = dcal[i];
|
randomMove();
|
||||||
if(isChild(c, NULL)) {
|
if(false) if(turncount % 5000 == 0) showAutoplayStats();
|
||||||
}
|
resetIfNeeded(&gcount);
|
||||||
if(childbug) doAutoplay = false;
|
noteUnusualSituations();
|
||||||
if(c->land == laNone) {
|
stopIfBug();
|
||||||
printf("no-land found\n");
|
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
if(c->item == itBuggy || c->item == itBuggy2) {
|
|
||||||
printf("buggy item found\n");
|
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
if(isPrincess(c->monst) && princess::getPrincessInfo(c) == nullptr) {
|
|
||||||
printf("missing princess info\n");
|
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
if(dice::on(c)) {
|
|
||||||
if(dice::data.count(c) == 0) {
|
|
||||||
c->item = itBuggy;
|
|
||||||
printf("missing dice::data[%p]\n", (void *)c);
|
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
else if(!dice::data[c].which) {
|
|
||||||
// we might get here instead if someone already tried to do data[c], which creates a new element out of nothing
|
|
||||||
c->item = itBuggy;
|
|
||||||
printf("missing dice::data[%p].which\n", (void *)c);
|
|
||||||
kills[moPlayer] = 0;
|
|
||||||
canmove = true;
|
|
||||||
doAutoplay = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(buggyGeneration || isize(buggycells)) {
|
|
||||||
if(noGUI) {
|
|
||||||
printf("Fatal: buggy generation\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
println(hlog, "buggy generation");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(turncount >= num_moves) return;
|
if(turncount >= num_moves) return;
|
||||||
}
|
}
|
||||||
|
@ -678,8 +678,8 @@ S("Rangers take care of the magic mirrors in the Land of Mirrors. "
|
|||||||
"Strážci se starají o kouzelná zrcadla v Kraji zrcadel. Vědí, že lupiči "
|
"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čí!")
|
"jako ty rádi tato zrcadla rozbíjejí... a proto na tebe útočí!")
|
||||||
|
|
||||||
S("A nasty creature native to the Living Caves. They don't like you "
|
// TODO update translation
|
||||||
"for some reason.",
|
S("A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"Hnusná potvora žijící v Živoucích jeskyních. Z nějakého důvodu "
|
"Hnusná potvora žijící v Živoucích jeskyních. Z nějakého důvodu "
|
||||||
"tě nemají rády.")
|
"tě nemají rády.")
|
||||||
|
|
||||||
|
@ -641,8 +641,8 @@ S("Rangers take care of the magic mirrors in the Land of Mirrors. "
|
|||||||
"Ranger beschützen die Zauberspiegel im Spiegelland. Sie wissen, dass Schurken wie du "
|
"Ranger beschützen die Zauberspiegel im Spiegelland. Sie wissen, dass Schurken wie du "
|
||||||
"die Spiegel gerne zerbrechen - also greifen sie dich an!")
|
"die Spiegel gerne zerbrechen - also greifen sie dich an!")
|
||||||
|
|
||||||
S("A nasty creature native to the Living Caves. They don't like you "
|
// TODO update translation
|
||||||
"for some reason.",
|
S("A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"Ein grässliches Geschöpf, das in den Lebenden Höhlen haust. Irgendwie können diese Kreaturen dich nicht leiden.")
|
"Ein grässliches Geschöpf, das in den Lebenden Höhlen haust. Irgendwie können diese Kreaturen dich nicht leiden.")
|
||||||
|
|
||||||
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
||||||
|
@ -654,8 +654,8 @@ S("Rangers take care of the magic mirrors in the Land of Mirrors. "
|
|||||||
"Strażnicy chronią lustra w Krainie Luster. Wiedzą, że złodzieje lubią "
|
"Strażnicy chronią lustra w Krainie Luster. Wiedzą, że złodzieje lubią "
|
||||||
"rozbijać lustra... także spodziewaj się ataku!")
|
"rozbijać lustra... także spodziewaj się ataku!")
|
||||||
|
|
||||||
S("A nasty creature native to the Living Caves. They don't like you "
|
// TODO update translation
|
||||||
"for some reason.",
|
S("A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"Brzydki stwór z Żywych Jaskiń. Jakoś Cię nie lubi.")
|
"Brzydki stwór z Żywych Jaskiń. Jakoś Cię nie lubi.")
|
||||||
|
|
||||||
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
||||||
@ -8399,7 +8399,7 @@ N("shallow water", GEN_F, "płytka woda", "płytkie wody", "płytką wodę", "p
|
|||||||
S("Shallow water is passable both for land creatures and for water creatures.",
|
S("Shallow water is passable both for land creatures and for water creatures.",
|
||||||
"Przez płytką wodę mogą przejść i stworzenia lądowe, i wodne.")
|
"Przez płytką wodę mogą przejść i stworzenia lądowe, i wodne.")
|
||||||
|
|
||||||
N("shallow water", GEN_F, "głęboka woda", "głębokie wody", "głęboką wodę", "głęboką wodą")
|
N("deep water", GEN_F, "głęboka woda", "głębokie wody", "głęboką wodę", "głęboką wodą")
|
||||||
|
|
||||||
S("This body of water is calm and beautiful, but too deep to pass.",
|
S("This body of water is calm and beautiful, but too deep to pass.",
|
||||||
"Ta woda jest spokojna i piękna, ale zbyt głęboka, by przez nią przejść.")
|
"Ta woda jest spokojna i piękna, ale zbyt głęboka, by przez nią przejść.")
|
||||||
@ -9408,3 +9408,5 @@ S(
|
|||||||
)
|
)
|
||||||
|
|
||||||
N("Palace Quest", GEN_O, "Misja w Pałacu", "Misje w Pałacu", "Misję w Pałacu", "na Misji w Pałacu")
|
N("Palace Quest", GEN_O, "Misja w Pałacu", "Misje w Pałacu", "Misję w Pałacu", "na Misji w Pałacu")
|
||||||
|
|
||||||
|
N("Pike", GEN_F, "Szczupak", "Szczupaki", "Szczupaka", "Szczupakiem")
|
||||||
|
@ -669,9 +669,9 @@ S(
|
|||||||
"Strażnicy chronią lustra w Krainie Luster. Wiedzą, że złodzieje lubią "
|
"Strażnicy chronią lustra w Krainie Luster. Wiedzą, że złodzieje lubią "
|
||||||
"rozbijać lustra... także spodziewaj się ataku!")
|
"rozbijać lustra... także spodziewaj się ataku!")
|
||||||
|
|
||||||
|
// TODO update translation
|
||||||
S(
|
S(
|
||||||
"A nasty creature native to the Living Caves. They don't like you "
|
"A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"for some reason.",
|
|
||||||
|
|
||||||
"Brzydki stwór z Żywych Jaskiń."
|
"Brzydki stwór z Żywych Jaskiń."
|
||||||
"Jakoś Cię nie lubi.")
|
"Jakoś Cię nie lubi.")
|
||||||
|
@ -651,8 +651,8 @@ S("Rangers take care of the magic mirrors in the Land of Mirrors. "
|
|||||||
"Странники охраняют магические зеркала. Они знают, что эти "
|
"Странники охраняют магические зеркала. Они знают, что эти "
|
||||||
"разбойники хотят разбить их зеркала и тут же нападают на Вас!")
|
"разбойники хотят разбить их зеркала и тут же нападают на Вас!")
|
||||||
|
|
||||||
S("A nasty creature native to the Living Caves. They don't like you "
|
// TODO update translation
|
||||||
"for some reason.",
|
S("A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"Противное существо из Живых пещер. По каким-то причинам не любит людей.")
|
"Противное существо из Живых пещер. По каким-то причинам не любит людей.")
|
||||||
|
|
||||||
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
||||||
@ -7325,6 +7325,43 @@ S("multiplayer", "режим нескольких игроков")
|
|||||||
// [PL:7811]
|
// [PL:7811]
|
||||||
S("Hint: these keys usually work during the game", "Подсказка: можно использовать эти клавиши во время игры")
|
S("Hint: these keys usually work during the game", "Подсказка: можно использовать эти клавиши во время игры")
|
||||||
|
|
||||||
|
// [PL:8390]
|
||||||
|
N("Wetland", GEN_N, "Водно-болотное угодье", "Водно-болотные угодья", "Водно-болотное угодье", "в Водно-болотном угодье")
|
||||||
|
|
||||||
|
S("Some people have definitely drowned in this treacherous area. Better be careful!",
|
||||||
|
"Некоторые люди несомненно утонули в этом опасном месте. Берегитесь!")
|
||||||
|
|
||||||
|
N("Water Lily", GEN_F, "Кувшинка", "Кувшинки", "Кувшинку", "Кувшинкой")
|
||||||
|
S("A beautiful plant from the Wetland.", "Красивое растение из Водно-болотного угодья.")
|
||||||
|
|
||||||
|
N("shallow water", GEN_F, "неглубокая вода", "неглубокая вода", "неглубокую воду", "в неглубокой воде")
|
||||||
|
S("Shallow water is passable both for land creatures and for water creatures.",
|
||||||
|
"Эта вода проходима и для наземных существ, и для водных существ.")
|
||||||
|
|
||||||
|
N("deep water", GEN_F, "глубокая вода", "глубокая вода", "глубокую воду", "в глубокой воде")
|
||||||
|
S("This body of water is calm and beautiful, but too deep to pass.",
|
||||||
|
"Эта вода тиха и красива, но слишком глубока, чтобы через неё проходить.")
|
||||||
|
|
||||||
|
S("You remember anglers from your hometown showing the impressive pikes they have caught. This one is much larger.",
|
||||||
|
"Вы помните, как рыбаки из Вашей родины показывали щук впечатляющих размеров, которых они ловили. "
|
||||||
|
"А эта щука гораздо больше.")
|
||||||
|
|
||||||
|
N("Rusałka", GEN_F, "Русалка", "Русалки", "Русалку", "Русалкой")
|
||||||
|
S("A malicious water being. When you kill her, she changes the tile you are standing on, from land to shallow water, or from shallow water to deep water.",
|
||||||
|
"Злобное водное существо. Когда её убьёте, она превратит клетку на котором Вы стоите из суши в неглубокую воду, или из неглубокой воды в глубокую.")
|
||||||
|
|
||||||
|
N("Topielec", GEN_M, "Утопец", "Утопцы", "Утопца", "Утопцем")
|
||||||
|
S("A malicious water being. When you kill him, he changes the tile you are standing on, from land to shallow water, or from shallow water to deep water.",
|
||||||
|
"Злобное водное существо. Когда его убьёте, он превратит клетку на котором Вы стоите из суши в неглубокую воду, или из неглубокой воды в глубокую.")
|
||||||
|
|
||||||
|
Orb("Plague", "Заражения")
|
||||||
|
S(
|
||||||
|
"When you kill an enemy, adjacent enemies are also attacked, as long as they are further away from you than from the originally attacked enemy. "
|
||||||
|
"These enemies may in turn infect further enemies, up to distance of at most 4 from you.",
|
||||||
|
"Когда Вы убьёте врага, стоящие рядом враги тоже будут атакованы, если они находятся дальше от Вас, "
|
||||||
|
"чем изначально атакованный. "
|
||||||
|
"Эти враги, в своём очереди, заразят стоящих рядом них врагов, вплоть до 4 клетки от Вас.")
|
||||||
|
|
||||||
// [PL:8443]
|
// [PL:8443]
|
||||||
N("Frog Park", GEN_O, "Жабный парк", "Жабные парки", "Жабный парк", "в Жабном парке")
|
N("Frog Park", GEN_O, "Жабный парк", "Жабные парки", "Жабный парк", "в Жабном парке")
|
||||||
|
|
||||||
@ -7394,6 +7431,8 @@ S("highlight stuff", "подсветить вещи")
|
|||||||
|
|
||||||
N("Palace Quest", GEN_O, "Дворцовый квест", "Дворцовые квесты", "Дворцовый квест", "в Дворцовом квесте")
|
N("Palace Quest", GEN_O, "Дворцовый квест", "Дворцовые квесты", "Дворцовый квест", "в Дворцовом квесте")
|
||||||
|
|
||||||
|
N("Pike", GEN_F, "Щука", "Щуки", "Щуку", "Щукой")
|
||||||
|
|
||||||
// Note: the translation should be complete until the marked line.
|
// Note: the translation should be complete until the marked line.
|
||||||
// The following are missing from the Polish translation:
|
// The following are missing from the Polish translation:
|
||||||
S("quick projection", "быстрая проекция")
|
S("quick projection", "быстрая проекция")
|
||||||
|
@ -608,8 +608,8 @@ S("Rangers take care of the magic mirrors in the Land of Mirrors. "
|
|||||||
"they will attack you!",
|
"they will attack you!",
|
||||||
"Seyyahların aynalarını kıracağını bildiklerinden sana saldıracaklar!")
|
"Seyyahların aynalarını kıracağını bildiklerinden sana saldıracaklar!")
|
||||||
|
|
||||||
S("A nasty creature native to the Living Caves. They don't like you "
|
// TODO update translation
|
||||||
"for some reason.",
|
S("A nasty creature that lives in caves. They don't like you for some reason.",
|
||||||
"Yaşayan Mağaralarda yaşayan iğrenç bir yaratık. Nedense seni hiç sevmiyor.")
|
"Yaşayan Mağaralarda yaşayan iğrenç bir yaratık. Nedense seni hiç sevmiyor.")
|
||||||
|
|
||||||
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
S("A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.",
|
||||||
|
@ -191,7 +191,7 @@ EX void initgame() {
|
|||||||
if((isGravityLand(firstland) && !isCyclic(firstland)) || (firstland == laOcean && !safety && !yendor::on))
|
if((isGravityLand(firstland) && !isCyclic(firstland)) || (firstland == laOcean && !safety && !yendor::on))
|
||||||
firstland = weirdhyperbolic ? laCrossroads4 : laCrossroads;
|
firstland = weirdhyperbolic ? laCrossroads4 : laCrossroads;
|
||||||
|
|
||||||
clear_euland(specialland);
|
clear_euland(firstland);
|
||||||
|
|
||||||
cwt.at = currentmap->gamestart(); cwt.spin = 0; cwt.mirrored = false;
|
cwt.at = currentmap->gamestart(); cwt.spin = 0; cwt.mirrored = false;
|
||||||
cwt.at->land = firstland;
|
cwt.at->land = firstland;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user