diff --git a/landgen.cpp b/landgen.cpp index 5c3e4964..7f3dabca 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -275,6 +275,11 @@ EX void place_random_gate_continuous(cell *c) { else toggleGates(c, waOpenPlate, 1); } +EX void gen_baby_tortoise(cell *c) { + c->item = itBabyTortoise; + tortoise::babymap[c] = tortoise::getb(c) ^ tortoise::getRandomBits(); + } + EX void giantLandSwitch(cell *c, int d, cell *from) { bool fargen = d == 9; switch(c->land) { @@ -1060,10 +1065,8 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { else c2->mondir = NODIR; } } - if(!c->monst && !ls::single() && !racing::on && !yendor::on && !randomPatternsMode && !peace::on && !euclid && hrand(4000) < 10 && !safety) { - c->item = itBabyTortoise; - tortoise::babymap[c] = tortoise::getb(c) ^ tortoise::getRandomBits(); - } + if(!c->monst && !ls::single() && !racing::on && !yendor::on && !randomPatternsMode && !peace::on && !euclid && hrand(4000) < 10 && !safety) + gen_baby_tortoise(c); } break; @@ -1786,13 +1789,19 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { } } ONEMPTY { - if(hrand_monster(4000) < (peace::on ? 750 : 50 + items[itBabyTortoise]*2 + yendor::hardness() * 6) && !safety) { + if(hrand_monster(ls::hv_structure() ? 8000 : 4000) < (peace::on ? 750 : 50 + items[itBabyTortoise]*2 + yendor::hardness() * 6) && !safety) { c->monst = moTortoise; c->hitpoints = 3; auto val = tortoise::getb(c); tortoise::emap[c] = val; } - + else if(ls::hv_structure() && hrand(10000) <= 250) { + c->item = itCompass; + } + else if(ls::hv_structure() && hrand_monster(10000) <= 15) { + c->monst = moPirate; + } + int chance = 50 + items[itBabyTortoise]*2; if(quickfind(laTortoise)) chance += 150; if((ls::single() || euclid || peace::on) && hrand(4000) < chance && !safety) { @@ -2467,7 +2476,9 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { int freq = 4000; if(ls::single() && specialland == laCrossroads5 && !racing::on) freq = 250; - if(ls::hv_structure() && hrand(10000) < 10) { c->monst = moPirate; } + if(ls::hv_structure() && hrand(10000) < 10 && !c->monst) { c->monst = moPirate; } + if(ls::horodisk_structure() && !c->item && hrand(10000) < 10 && !safety) + gen_baby_tortoise(c); if(hrand_monster(freq) < items[itHyperstone] && !c->monst) { // only interesting monsters here! eMonster cm = crossroadsMonster(); diff --git a/landlock.cpp b/landlock.cpp index 651069ec..8a9825a3 100644 --- a/landlock.cpp +++ b/landlock.cpp @@ -590,6 +590,8 @@ EX eLand getNewLand(eLand old, eLand old2 IS(laBarrier)) { if(old == laCrossroads || old == laCrossroads2) tab[cnt++] = laOcean; if(old == laOcean) tab[cnt++] = laCrossroads2; } + + if(ls::horodisk_structure() && tortoise::seek()) LIKELY tab[cnt++] = laTortoise; eLand n = old; while(incompatible(n, old) || incompatible(n, old2) || !isLandIngame(n)) { @@ -861,7 +863,7 @@ EX land_validity_t& land_validity(eLand l) { if(l == laMirrorOld && !shmup::on) return not_implemented; } - if(ls::hv_structure() && among(l, laPrairie, laIvoryTower, laDungeon, laEndorian, laBrownian, laTortoise, laElementalWall, laWarpCoast, laWarpSea, laHive, laPrincessQuest)) return not_in_hv; + if(ls::hv_structure() && among(l, laPrairie, laIvoryTower, laDungeon, laEndorian, laBrownian, laElementalWall, laWarpCoast, laWarpSea, laHive, laPrincessQuest)) return not_in_hv; if(ls::voronoi_structure() && among(l, laCamelot, laWhirlpool, laClearing)) return not_in_hv; if(ls::horodisk_structure() && l != laCrossroads && isCrossroads(l)) return not_in_hv; diff --git a/pcmove.cpp b/pcmove.cpp index 68895d8c..29ee04f0 100644 --- a/pcmove.cpp +++ b/pcmove.cpp @@ -1045,7 +1045,7 @@ bool pcmove::attack() { changes.ccell(c2); c2->stuntime = 2; changes.at_commit([c2] { - items[itBabyTortoise] += 4; + items[itBabyTortoise] += (ls::hv_structure() ? 9 : 4); updateHi(itBabyTortoise, items[itBabyTortoise]); c2->item = itBabyTortoise; tortoise::babymap[c2] = tortoise::seekbits;