mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-02 12:19:18 +00:00
camelot_monster() and emerald_monster() to prevent wandering monster generating incorrect monsters
This commit is contained in:
parent
43f629e9c4
commit
51ffd708d0
20
bigstuff.cpp
20
bigstuff.cpp
@ -1571,6 +1571,16 @@ EX bool no_barriers_in_radius(cell *c, int rad) {
|
||||
return true;
|
||||
}
|
||||
|
||||
EX eMonster camelot_monster() {
|
||||
eMonster ms[3] = { moHedge, moLancer, moFlailer };
|
||||
eMonster m = ms[hrand(3)];
|
||||
if(m == moHedge && VALENCE > 3)
|
||||
m = moPyroCultist;
|
||||
if(getDistLimit() <= 2 && m == moLancer) m = moGoblin;
|
||||
if(getDistLimit() <= 3 && m == moPyroCultist) m = moCultist;
|
||||
return m;
|
||||
}
|
||||
|
||||
EX void buildCamelot(cell *c) {
|
||||
int d = celldistAltRelative(c);
|
||||
if(tactic::on || (d <= 14 && roundTableRadius(c) > 20)) {
|
||||
@ -1614,14 +1624,8 @@ EX void buildCamelot(cell *c) {
|
||||
}
|
||||
if(d == 0) c->wall = waRoundTable;
|
||||
if(celldistAlt(c) == 0 && !tactic::on) c->item = itHolyGrail;
|
||||
if(d < 0 && hrand(7000) <= 10 + items[itHolyGrail] * 5) {
|
||||
eMonster m[3] = { moHedge, moLancer, moFlailer };
|
||||
c->monst = m[hrand(3)];
|
||||
if(c->monst == moHedge && VALENCE > 3)
|
||||
c->monst = moPyroCultist;
|
||||
if(getDistLimit() <= 2 && c->monst == moLancer) c->monst = moGoblin;
|
||||
if(getDistLimit() <= 3 && c->monst == moPyroCultist) c->monst = moCultist;
|
||||
}
|
||||
if(d < 0 && hrand(7000) <= 10 + items[itHolyGrail] * 5)
|
||||
c->monst = camelot_monster();
|
||||
if(d == 1) {
|
||||
// roughly as many knights as table cells
|
||||
if(hrand(1000000) < 1000000 / expansion.get_growth() && !reptilecheat)
|
||||
|
16
landgen.cpp
16
landgen.cpp
@ -143,6 +143,14 @@ EX void createArrowTrapAt(cell *c, eLand land) {
|
||||
}
|
||||
}
|
||||
|
||||
EX eMonster emerald_monster() {
|
||||
static eMonster emeraldmonsters[4] = { moHedge, moLancer, moFlailer, moMiner };
|
||||
eMonster m = emeraldmonsters[hrand(4)];
|
||||
if(m == moHedge && (S3 != 3 || (hybri && !prod)))
|
||||
m = moFlailer;
|
||||
return m;
|
||||
}
|
||||
|
||||
EX void build_pool(cell *c, bool with_boat) {
|
||||
bool vacant = true;
|
||||
if(c->monst || !among(c->wall, waNone, waSea, waBoat)) vacant = false;
|
||||
@ -537,12 +545,8 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
|
||||
for(int i=0; i<c->type; i++) if(c->move(i)->wall == waCavewall) ok = false;
|
||||
if(ok) c->item = itEmerald;
|
||||
}
|
||||
if(hrand_monster(8000) < 50 + 10 * (items[itEmerald] + yendor::hardness())) {
|
||||
static eMonster emeraldmonsters[4] = { moHedge, moLancer, moFlailer, moMiner };
|
||||
c->monst = emeraldmonsters[hrand(4)];
|
||||
if(c->monst == moHedge && (S3 != 3 || (hybri && !prod)))
|
||||
c->monst = moFlailer;
|
||||
}
|
||||
if(hrand_monster(8000) < 50 + 10 * (items[itEmerald] + yendor::hardness()))
|
||||
c->monst = emerald_monster();
|
||||
if(sphere && c->type != 6 && c->master->fiftyval == 5) {
|
||||
c->monst = moMiner;
|
||||
c->stuntime = 7;
|
||||
|
@ -678,10 +678,8 @@ EX void wandering() {
|
||||
else if(c->land == laMinefield && wchance(items[itBombEgg]-20, 400))
|
||||
c->monst = moBomberbird;
|
||||
|
||||
else if(c->land == laEmerald && wchance(items[itEmerald], 5)) {
|
||||
static eMonster m[4] = {moHedge, moLancer, moMiner, moFlailer};
|
||||
c->monst = m[hrand(4)];
|
||||
}
|
||||
else if(c->land == laEmerald && wchance(items[itEmerald], 5))
|
||||
c->monst = emerald_monster();
|
||||
|
||||
else if(c->land == laWineyard && wchance(items[itWine], 10)) {
|
||||
c->monst = moVineBeast;
|
||||
@ -710,10 +708,8 @@ EX void wandering() {
|
||||
c->monst = eMonster(moWitch + hrand(NUMWITCH));
|
||||
}
|
||||
|
||||
else if(c->land == laCamelot && hrand(30) == 0 && (euclid || c->master->alt) && celldistAltRelative(c) < 0) {
|
||||
eMonster m[3] = { moHedge, moLancer, moFlailer };
|
||||
c->monst = m[hrand(3)];
|
||||
}
|
||||
else if(c->land == laCamelot && hrand(30) == 0 && (euclid || c->master->alt) && celldistAltRelative(c) < 0)
|
||||
c->monst = camelot_monster();
|
||||
|
||||
else if(isCrossroads(c->land) && items[itHyperstone] && wchance(items[itHyperstone], 20)) {
|
||||
c->monst = wanderingCrossroadsMonster();
|
||||
|
Loading…
Reference in New Issue
Block a user