1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-27 02:20:36 +00:00

new land structure: excessive crossing walls

This commit is contained in:
Zeno Rogue 2024-04-06 10:36:51 +02:00
parent 1fc02631c8
commit e83d38e267
3 changed files with 27 additions and 6 deletions

View File

@ -560,6 +560,7 @@ EX bool isbar4(cell *c) {
EX bool barrier_cross(eLand l, eLand r) { EX bool barrier_cross(eLand l, eLand r) {
if(l == laCrossroads3 || r == laCrossroads3) return hrand(100) < 66; if(l == laCrossroads3 || r == laCrossroads3) return hrand(100) < 66;
if(land_structure == lsCrossWalls) return hrand(100) < 90;
if(isElemental(l) && isElemental(r)) return hrand(100) < 75; if(isElemental(l) && isElemental(r)) return hrand(100) < 75;
return false; return false;
} }

View File

@ -288,6 +288,7 @@ EX void gen_baby_tortoise(cell *c) {
EX int rebalance_treasure(int x, int y, eLand l) { EX int rebalance_treasure(int x, int y, eLand l) {
int res = ((tactic::on || quotient == 2 || daily::on) ? (y) : inv::on ? min(2*(y),x) : (x)); int res = ((tactic::on || quotient == 2 || daily::on) ? (y) : inv::on ? min(2*(y),x) : (x));
if(use_custom_land_list) res = (res * custom_land_treasure[l] + 50) / 100; if(use_custom_land_list) res = (res * custom_land_treasure[l] + 50) / 100;
res *= ls::ls_mul();
return res; return res;
} }
@ -1280,7 +1281,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
if(d == 8) { if(d == 8) {
bool ok = c->landparam == 0; bool ok = c->landparam == 0;
forCellEx(c2, c) if(c2->landparam) ok = false; forCellEx(c2, c) if(c2->landparam) ok = false;
if(ok && hrand(doCross ?450:15000) < 20 + (2 * items[itMutant] + yendor::hardness()) && !safety) { if(ok && hrand(doCross ?450:15000) < (20 + (2 * items[itMutant] + yendor::hardness())) * ls::ls_mul_big() && !safety) {
if(!peace::on) c->item = itMutant; if(!peace::on) c->item = itMutant;
c->landparam = items[itMutant] + 5 + hrand(11); c->landparam = items[itMutant] + 5 + hrand(11);
c->wall = waNone; c->wall = waNone;
@ -2065,7 +2066,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
case laHunting: case laHunting:
if(d == 7 && c->land == laHunting && !racing::on && !safety && !reptilecheat) { if(d == 7 && c->land == laHunting && !racing::on && !safety && !reptilecheat) {
if(hrand(1000) < 20) { if(hrand(1000) < 20 * ls::ls_mul_big()) {
if(openplains(c)) { if(openplains(c)) {
if(hrand(2) == 0) { if(hrand(2) == 0) {
if(!items[itHunting]) { if(!items[itHunting]) {
@ -2273,7 +2274,7 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
c->monst = moMonkey; c->monst = moMonkey;
else if(hrand_monster(80000) < 5 + items[itRuby] + yendor::hardness()) else if(hrand_monster(80000) < 5 + items[itRuby] + yendor::hardness())
c->monst = moEagle; c->monst = moEagle;
else if(pseudohept_r(c) && c != currentmap->gamestart() && hrand_monster(4000) < 300 + items[itRuby] && !c->monst) { else if(pseudohept_r(c) && c != currentmap->gamestart() && hrand_monster(4000) < (300 + items[itRuby]) * ls::ls_mul_big() && !c->monst) {
int hardchance = items[itRuby] + yendor::hardness(); int hardchance = items[itRuby] + yendor::hardness();
if(hardchance > 25) hardchance = 25; if(hardchance > 25) hardchance = 25;
bool hardivy = hrand(100) < hardchance; bool hardivy = hrand(100) < hardchance;

View File

@ -81,7 +81,7 @@ EX eLand firstland = laIce;
EX eLand specialland = laIce; EX eLand specialland = laIce;
#if HDR #if HDR
enum eLandStructure { lsNiceWalls, lsChaos, lsPatchedChaos, lsTotalChaos, lsChaosRW, lsWallChaos, lsSingle, lsNoWalls, lsHorodisks, lsVoronoi, lsLandscape, lsGUARD }; enum eLandStructure { lsNiceWalls, lsChaos, lsPatchedChaos, lsTotalChaos, lsChaosRW, lsWallChaos, lsSingle, lsNoWalls, lsHorodisks, lsVoronoi, lsLandscape, lsCrossWalls, lsGUARD };
#endif #endif
EX eLandStructure land_structure; EX eLandStructure land_structure;
@ -90,9 +90,9 @@ EX namespace ls {
EX bool single() { return land_structure == lsSingle; } EX bool single() { return land_structure == lsSingle; }
EX bool any_chaos() { return among(land_structure, lsChaos, lsPatchedChaos, lsWallChaos, lsTotalChaos, lsChaosRW, lsLandscape); } EX bool any_chaos() { return among(land_structure, lsChaos, lsPatchedChaos, lsWallChaos, lsTotalChaos, lsChaosRW, lsCrossWalls, lsLandscape); }
EX bool std_chaos() { return land_structure == lsChaos; } EX bool std_chaos() { return land_structure == lsChaos; }
EX bool wall_chaos() { return land_structure == lsWallChaos; } EX bool wall_chaos() { return among(land_structure, lsWallChaos, lsCrossWalls); }
EX bool patched_chaos() { return land_structure == lsPatchedChaos; } EX bool patched_chaos() { return land_structure == lsPatchedChaos; }
EX bool any_order() { return among(land_structure, lsNiceWalls, lsNoWalls, lsHorodisks, lsVoronoi); } EX bool any_order() { return among(land_structure, lsNiceWalls, lsNoWalls, lsHorodisks, lsVoronoi); }
@ -112,11 +112,26 @@ EX int chaoticity() {
if(land_structure == lsChaos) return 40; if(land_structure == lsChaos) return 40;
if(land_structure == lsLandscape) return 35; if(land_structure == lsLandscape) return 35;
if(land_structure == lsWallChaos) return 30; if(land_structure == lsWallChaos) return 30;
if(land_structure == lsCrossWalls) return 32;
if(land_structure == lsVoronoi) return 20; if(land_structure == lsVoronoi) return 20;
if(land_structure == lsSingle) return 0; if(land_structure == lsSingle) return 0;
return 10; return 10;
} }
/** a multiplier to make stuff more frequent in Wall Chaos and Cross Wall Chaos: treasure */
EX int ls_mul() {
if(land_structure == lsWallChaos) return 2;
if(land_structure == lsCrossWalls) return 3;
return 1;
}
/** a multiplier to make stuff more frequent in Wall Chaos and Cross Wall Chaos: even bigger */
EX int ls_mul_big() {
if(land_structure == lsWallChaos) return 5;
if(land_structure == lsCrossWalls) return 10;
return 1;
}
EX bool tame_chaos() { return any_chaos() && chaoticity() < 35; } EX bool tame_chaos() { return any_chaos() && chaoticity() < 35; }
EX } EX }
@ -144,6 +159,8 @@ EX string land_structure_name(bool which) {
return XLAT("landscape"); return XLAT("landscape");
case lsNoWalls: case lsNoWalls:
return XLAT("wall-less"); return XLAT("wall-less");
case lsCrossWalls:
return XLAT("excessive crossing walls");
default: default:
return "error structure"; return "error structure";
} }
@ -164,6 +181,8 @@ EX void fix_land_structure_choice() {
land_structure = lsNoWalls; land_structure = lsNoWalls;
if(!nice_walls_available() && land_structure == lsWallChaos) if(!nice_walls_available() && land_structure == lsWallChaos)
land_structure = lsChaos; land_structure = lsChaos;
if(!nice_walls_available() && land_structure == lsCrossWalls)
land_structure = lsChaos;
if(ls::hv_structure() && (!hyperbolic || bt::in() || quotient)) if(ls::hv_structure() && (!hyperbolic || bt::in() || quotient))
land_structure = lsSingle; land_structure = lsSingle;
if(walls_not_implemented() && among(land_structure, lsChaos, lsNoWalls)) if(walls_not_implemented() && among(land_structure, lsChaos, lsNoWalls))