mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-11-16 05:37:11 +00:00
first approach to Cursed Land
This commit is contained in:
@@ -1681,6 +1681,11 @@ ITEM('>', 0xFF6060, "fatigue", itFatigue, IC_NAI, ZERO, RESERVED, osNone,
|
|||||||
MONSTER('H', 0x181818, "Hag", moHexer, CF_FACE_UP, RESERVED, moYeti,
|
MONSTER('H', 0x181818, "Hag", moHexer, CF_FACE_UP, RESERVED, moYeti,
|
||||||
"Hags can curse you from afar!")
|
"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
|
//shmupspecials
|
||||||
MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, CF_FACE_UP | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.")
|
MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, CF_FACE_UP | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.")
|
||||||
|
|||||||
35
landgen.cpp
35
landgen.cpp
@@ -2584,7 +2584,40 @@ EX void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
|
|
||||||
break;
|
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 laNone:
|
||||||
case laBarrier:
|
case laBarrier:
|
||||||
case laOceanWall:
|
case laOceanWall:
|
||||||
|
|||||||
@@ -1449,7 +1449,7 @@ EX void moveshadow() {
|
|||||||
cshpos = (cshpos+1) % SHSIZE;
|
cshpos = (cshpos+1) % SHSIZE;
|
||||||
for(int p: player_indices()) {
|
for(int p: player_indices()) {
|
||||||
cell* where = shpos[p][cshpos];
|
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)) {
|
!sword::at(where)) {
|
||||||
if(shfrom) animateMovement(match(shfrom, where), LAYER_SMALL);
|
if(shfrom) animateMovement(match(shfrom, where), LAYER_SMALL);
|
||||||
where->monst = moShadow;
|
where->monst = moShadow;
|
||||||
|
|||||||
Reference in New Issue
Block a user