1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-24 01:00:25 +00:00

racing:: fixed some lands for racing

This commit is contained in:
Zeno Rogue 2018-11-23 02:58:16 +01:00
parent a14255158a
commit 410c05554c
6 changed files with 40 additions and 22 deletions

View File

@ -965,6 +965,7 @@ int wallchance(cell *c, bool deepOcean) {
(l == laMirror && !yendor::generating) ? 6000 :
l == laTerracotta ? 250 :
(tactic::on && !tactic::trailer) ? 0 :
racing::on ? 0 :
l == laCaribbean ? 500 :
(l == laWarpSea || l == laWarpCoast) ? 500 :
l == laStorms ? 250 :
@ -1038,10 +1039,10 @@ void buildBigStuff(cell *c, cell *from) {
else if((archimedean || pseudohept(c)) && isWarped(c->land) && hrand(10000) < 3000 && c->land &&
buildBarrierNowall(c, eLand(c->land ^ laWarpSea ^ laWarpCoast))) ;
else if((archimedean || pseudohept(c)) && c->land == laCrossroads4 && hrand(10000) < 7000 && c->land && !c->master->alt && !tactic::on &&
else if((archimedean || pseudohept(c)) && c->land == laCrossroads4 && hrand(10000) < 7000 && c->land && !c->master->alt && !tactic::on && !racing::on &&
buildBarrierNowall(c, getNewLand(laCrossroads4))) ;
else if((archimedean || pseudohept(c)) && hrand(I10000) < 20 && !generatingEquidistant && !yendor::on && !tactic::on && !isCrossroads(c->land) &&
else if((archimedean || pseudohept(c)) && hrand(I10000) < 20 && !generatingEquidistant && !yendor::on && !tactic::on && !racing::on && !isCrossroads(c->land) &&
gold() >= R200 && !weirdhyperbolic && !c->master->alt &&
!inmirror(c) && !isSealand(c->land) && !isHaunted(c->land) && !isGravityLand(c->land) &&
(c->land != laRlyeh || rlyehComplete()) &&
@ -1093,7 +1094,7 @@ void buildBigStuff(cell *c, cell *from) {
if((!chaosmode) && bearsCamelot(c->land) && is_master(c) && !binarytiling &&
(quickfind(laCamelot) || peace::on || (hrand(I2000) < (c->land == laCrossroads4 ? 800 : 200) && horo_ok() &&
items[itEmerald] >= U5 && !tactic::on))) {
items[itEmerald] >= U5 && !tactic::on && !racing::on))) {
int rtr = newRoundTableRadius();
heptagon *alt = createAlternateMap(c, rtr+14, hsOrigin);
if(alt) {
@ -1109,19 +1110,19 @@ void buildBigStuff(cell *c, cell *from) {
if(c->land == laRlyeh && ctof(c) && horo_ok() &&
(quickfind(laTemple) || peace::on || (hrand(I2000) < 100 &&
items[itStatue] >= U5 && !randomPatternsMode &&
!tactic::on && !yendor::on)))
!tactic::on && !yendor::on && !racing::on)))
createAlternateMap(c, 2, hsA);
if(c->land == laJungle && ctof(c) &&
(quickfind(laMountain) || (hrand(I2000) < 100 && horo_ok() &&
!randomPatternsMode && !tactic::on && !yendor::on && landUnlocked(laMountain))))
!randomPatternsMode && !tactic::on && !yendor::on && !racing::on && landUnlocked(laMountain))))
createAlternateMap(c, 2, hsA);
if(c->land == laOvergrown && ctof(c) && horo_ok() &&
(quickfind(laClearing) || (hrand(I2000) < 25 &&
!randomPatternsMode && items[itMutant] >= U5 &&
isLandIngame(laClearing) &&
!tactic::on && !yendor::on))) {
!tactic::on && !yendor::on && !racing::on))) {
heptagon *h = createAlternateMap(c, 2, hsA);
if(h) clearing::bpdata[h].root = NULL;
}
@ -1133,7 +1134,7 @@ void buildBigStuff(cell *c, cell *from) {
if(c->land == laOcean && ctof(c) && deepOcean && !generatingEquidistant && !peace::on && horo_ok() &&
(quickfind(laWhirlpool) || (
hrand(2000) < (PURE ? 500 : 1000) && !tactic::on && !yendor::on)))
hrand(2000) < (PURE ? 500 : 1000) && !tactic::on && !racing::on && !yendor::on)))
createAlternateMap(c, 2, hsA);
if(c->land == laCaribbean && horo_ok() && ctof(c) && !c->master->alt)
@ -1146,7 +1147,7 @@ void buildBigStuff(cell *c, cell *from) {
(princess::forceMouse ? canReachPlayer(from, moMouse) :
(hrand(2000) < (peace::on ? 100 : 20))) &&
!c->master->alt &&
(princess::challenge || kills[moVizier] || peace::on) && !tactic::on && !yendor::on) {
(princess::challenge || kills[moVizier] || peace::on) && !tactic::on && !yendor::on && !racing::on) {
createAlternateMap(c, PRADIUS0, hsOrigin, waPalace);
celllister cl(c, 5, 1000000, NULL);
for(cell *c: cl.lst) if(c->master->alt) generateAlts(c->master);

View File

@ -7215,7 +7215,7 @@ namespace orbbull {
static constexpr bool randterra = false;
void terracotta(cell *c) {
if(c->wall == waTerraWarrior && !c->monst) {
if(c->wall == waTerraWarrior && !c->monst && !racing::on) {
bool live = false;
if(randterra) {
c->landparam++;

View File

@ -4684,6 +4684,7 @@ namespace racing {
extern vector<cell*> track;
extern map<cell*, pair<int, int> > trackstage;
extern int current_player;
extern vector<eLand> race_lands;
}
bool subscreen_split(reaction_t for_each_subscreen);

View File

@ -788,7 +788,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
else c2->mondir = NODIR;
}
}
if(!c->monst && !tactic::on && !yendor::on && !randomPatternsMode && !peace::on && !euclid && hrand(4000) < 10 && !safety) {
if(!c->monst && !tactic::on && !racing::on && !yendor::on && !randomPatternsMode && !peace::on && !euclid && hrand(4000) < 10 && !safety) {
c->item = itBabyTortoise;
tortoise::babymap[c] = getBits(c) ^ tortoise::getRandomBits();
}
@ -956,7 +956,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
forCellEx(c2, cc[i]) if(c2->wall == waArrowTrap) ok = false;
}
if(ok) {
for(int i=1; i<4; i++)
if(!racing::on) for(int i=1; i<4; i++)
cc[i]->wall = waArrowTrap,
cc[i]->wparam = 0;
for(int i=0; i<5; i++)
@ -965,7 +965,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
cc[4]->wall = waStone;
}
}
if(pseudohept(c) && hrand(100) < 40 && c->wall == waNone) {
if(pseudohept(c) && hrand(100) < 40 && c->wall == waNone && !racing::on) {
c->wall = waTerraWarrior;
c->landparam = randterra ? 0 : 3 + hrand(3);
if(hrand(100) < items[itTerra]-10)
@ -1759,7 +1759,7 @@ void giantLandSwitch(cell *c, int d, cell *from) {
break;
case laHunting:
if(d == 7 && c->land == laHunting) {
if(d == 7 && c->land == laHunting && !racing::on) {
if(hrand(1000) < 20) {
if(openplains(c)) {
if(hrand(2) == 0) {

View File

@ -667,7 +667,7 @@ bool rlyehComplete() {
}
bool lchance(eLand l) {
if(tactic::on || yendor::on || ((geometry || GOLDBERG) && specialland == laElementalWall)) return true;
if(tactic::on || yendor::on || racing::on || ((geometry || GOLDBERG) && specialland == laElementalWall)) return true;
if(chaosmode) return hrand(100) < 25;
return hrand(100) >= 40 * kills[elementalOf(l)] / (elementalKills()+1);
}
@ -724,8 +724,8 @@ hookset<eLand(eLand)> *hooks_nextland;
eLand getNewLand(eLand old) {
if(old == laMirror && !chaosmode && hrand(10) >= (tactic::on ? 0 : markOrb(itOrbLuck) ? 5 : 2)) return laMirrored;
if(old == laTerracotta && !chaosmode && hrand(5) >= (tactic::on ? 0 : markOrb(itOrbLuck) ? 2 : 1) && !weirdhyperbolic) return laTerracotta;
if(old == laMirror && !chaosmode && hrand(10) >= ((tactic::on || racing::on) ? 0 : markOrb(itOrbLuck) ? 5 : 2)) return laMirrored;
if(old == laTerracotta && !chaosmode && hrand(5) >= ((tactic::on || racing::on) ? 0 : markOrb(itOrbLuck) ? 2 : 1) && !weirdhyperbolic) return laTerracotta;
eLand l = callhandlers(laNone, hooks_nextland, old);
if(l) return l;
@ -763,6 +763,15 @@ eLand getNewLand(eLand old) {
if(old == laEAir && lchance(old)) return hrand(2) ? laEWater : laEFire;
if(old == laEWater && lchance(old)) return hrand(2) ? laEEarth : laEAir;
if(old == laEFire && lchance(old)) return hrand(2) ? laEEarth : laEAir;
if(racing::on && old != laElementalWall) {
eLand l = old;
using racing::race_lands;
while(l == old) l = race_lands[hrand(isize(race_lands))];
if(l == laElementalWall) l = randomElementalLand();
if(l == laMirror) l = laCrossroads;
return l;
}
if(tactic::on && !(tactic::trailer && old == specialland)) return specialland;
if(weirdhyperbolic && specialland != old && specialland != laCrossroads4 && !chaosmode && old != laBarrier) return specialland;

View File

@ -19,14 +19,21 @@ static const int TWIDTH = 6;
vector<cell*> track;
map<cell*, pair<int, int> > trackstage;
bool bad(cell *c2, cell *c) {
if(!passable(c2, c, P_ISPLAYER)) return true;
if((c2->land == laCrossroads) ^ (c->land == laCrossroads)) return true;
return false;
}
int trackval(cell *c) {
int v = celldist(c);
int bonus = 0;
if(c->land != laCrossroads)
forCellEx(c2, c) {
int d = celldist(c2) - v;
if(d < 0 && !passable(c2, c, P_ISPLAYER))
if(d < 0 && bad(c2, c))
bonus += 2;
if(d == 0 && !passable(c2, c, P_ISPLAYER))
if(d == 0 && bad(c2, c))
bonus ++;
}
return v + bonus;
@ -71,7 +78,7 @@ void generate_track() {
break;
}
setdist(c, 4, parent[c]);
forCellEx(c1, c) if(passable(c, c1, P_ISPLAYER) && !parent.count(c1)) {
forCellEx(c1, c) if(!bad(c1, c) && !parent.count(c1)) {
parent[c1] = c;
cellbydist[trackval(c1)].push_back(c1);
}
@ -289,7 +296,6 @@ int readArgs() {
stop_game();
shmup::on = true;
racing::on = true;
tactic::on = true;
timerghost = false;
}
else return 1;
@ -365,7 +371,9 @@ auto hook =
#endif
vector<eLand> race_lands = {
laIce, laDesert,
laHunting,
laIce,
laDesert,
laCrossroads, /* need editing */
laCaves, /* need fixing */
@ -378,7 +386,6 @@ vector<eLand> race_lands = {
laElementalWall,
laWildWest,
laDragon,
laHunting,
laTerracotta, /* disable traps and warriors */
laRuins,
};