diff --git a/content.cpp b/content.cpp index e9a35d09..fc3869de 100644 --- a/content.cpp +++ b/content.cpp @@ -1681,6 +1681,11 @@ ITEM('>', 0xFF6060, "fatigue", itFatigue, IC_NAI, ZERO, RESERVED, osNone, MONSTER('H', 0x181818, "Hag", moHexer, CF_FACE_UP, RESERVED, moYeti, "Hags can curse you from afar!") +LAND(0xC0C0FF, "Cursed Land", laCursed, 0, itCursed, RESERVED, + "This land is full of curses!") + +ITEM('/', 0x211F6F, "Cursed Gold", itCursed, IC_TREASURE, ZERO, RESERVED, osNone, + "A cursed gold.") //shmupspecials MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, CF_FACE_UP | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.") diff --git a/landgen.cpp b/landgen.cpp index c147f78b..bd3093dc 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -2584,7 +2584,40 @@ EX void giantLandSwitch(cell *c, int d, cell *from) { break; } - + + case laCursed: { + if(fargen) { + c->wall = waStone; + for(int i=0; i<3; i++) { + auto ew = [i] (cell *c1) { + return getCdata(c1, i) & 64; + }; + int val = ew(c); + forCellCM(c1, c) if(ew(c1) != val) + c->wall = waNone; + } + } + if(d == 7) { + if(c->wall == waNone) { + int wals = 0; + forCellCM(c1, c) if(c1->wall == waStone || c1->wall == waRubble || c1->land != laCursed) + wals++; + if(!wals) c->wall = waDeepWater; + } + if(c->wall == waStone && hrand(100) < 20) + c->wall = waRubble; + } + ONEMPTY { + if(hrand(5000) < 30 + kills[moHexer] && notDippingFor(itCursed)) + c->item = itCursed; + else if(hrand(5000) < 30) + c->item = pick(itCurseWeakness, itCurseDraining, itCurseWater, itCurseFatigue, itCurseRepulsion, itCurseGluttony); + if(hrand_monster(4000) < 10 + items[itCursed] + yendor::hardness() && !safety) + c->monst = moHexer; + } + break; + } + case laNone: case laBarrier: case laOceanWall: diff --git a/monstermove.cpp b/monstermove.cpp index 0d395150..d4398c49 100644 --- a/monstermove.cpp +++ b/monstermove.cpp @@ -1449,7 +1449,7 @@ EX void moveshadow() { cshpos = (cshpos+1) % SHSIZE; for(int p: player_indices()) { cell* where = shpos[p][cshpos]; - if(where && where->monst == moNone && where->cpdist && where->land == laGraveyard && + if(where && where->monst == moNone && where->cpdist && among(where->land, laGraveyard, laCursed) && !sword::at(where)) { if(shfrom) animateMovement(match(shfrom, where), LAYER_SMALL); where->monst = moShadow;