mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
Orb of Stone over water produces bridges now. You can use Orb of Matter over temporary bridge again to create a wall. Fixed some ways of producing permanent land in the Whirlpool.
This commit is contained in:
parent
606bcf23bd
commit
3e0e789434
@ -1221,7 +1221,7 @@ enum eItem { itNone, itDiamond, itGold, itSpice, itRuby, itElixir, itShard, itBo
|
|||||||
|
|
||||||
// --- wall types ---
|
// --- wall types ---
|
||||||
|
|
||||||
const int walltypes = 98;
|
const int walltypes = 100;
|
||||||
|
|
||||||
struct walltype {
|
struct walltype {
|
||||||
char glyph;
|
char glyph;
|
||||||
@ -1402,6 +1402,8 @@ walltype winf[walltypes] = {
|
|||||||
{ '.', 0xFFFF00, "Reptile bridge", reptiledesc},
|
{ '.', 0xFFFF00, "Reptile bridge", reptiledesc},
|
||||||
{ '.', 0xFFFF00, "invisible floor", NODESCYET},
|
{ '.', 0xFFFF00, "invisible floor", NODESCYET},
|
||||||
{ '#', 0xC0C0FF, "mirror wall", mirroreddesc},
|
{ '#', 0xC0C0FF, "mirror wall", mirroreddesc},
|
||||||
|
{ '.', 0xE0E0E0, "stepping stones", "A petrified creature."},
|
||||||
|
{ '#', 0x309060, "temporary wall", twdesc},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eWall { waNone, waIcewall, waBarrier, waFloorA, waFloorB, waCavewall, waCavefloor, waDeadTroll, waDune,
|
enum eWall { waNone, waIcewall, waBarrier, waFloorA, waFloorB, waCavewall, waCavefloor, waDeadTroll, waDune,
|
||||||
@ -1431,7 +1433,9 @@ enum eWall { waNone, waIcewall, waBarrier, waFloorA, waFloorB, waCavewall, waCav
|
|||||||
waBigBush, waSmallBush,
|
waBigBush, waSmallBush,
|
||||||
waReptile, waReptileBridge,
|
waReptile, waReptileBridge,
|
||||||
waInvisibleFloor,
|
waInvisibleFloor,
|
||||||
waMirrorWall
|
waMirrorWall,
|
||||||
|
waPetrifiedBridge,
|
||||||
|
waTempBridgeBlocked
|
||||||
};
|
};
|
||||||
|
|
||||||
// --- land types ---
|
// --- land types ---
|
||||||
|
83
complex.cpp
83
complex.cpp
@ -1052,7 +1052,7 @@ namespace mirror {
|
|||||||
c->wall == waGiantRug || c->wall == waCIsland || c->wall == waCIsland2 ||
|
c->wall == waGiantRug || c->wall == waCIsland || c->wall == waCIsland2 ||
|
||||||
c->wall == waGargoyleFloor || c->wall == waRubble ||
|
c->wall == waGargoyleFloor || c->wall == waRubble ||
|
||||||
c->wall == waGargoyleBridge || c->wall == waTempFloor || c->wall == waTempBridge ||
|
c->wall == waGargoyleBridge || c->wall == waTempFloor || c->wall == waTempBridge ||
|
||||||
c->wall == waMirrorWall;
|
c->wall == waMirrorWall || c->wall == waPetrifiedBridge;
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroyKilled() {
|
void destroyKilled() {
|
||||||
@ -1999,48 +1999,49 @@ void livecaves() {
|
|||||||
c->aitmp = 0;
|
c->aitmp = 0;
|
||||||
if(c->monst == moDarkTroll) c->monst = moTroll;
|
if(c->monst == moDarkTroll) c->monst = moTroll;
|
||||||
if(c->item || c->monst || c->cpdist == 0) continue;
|
if(c->item || c->monst || c->cpdist == 0) continue;
|
||||||
for(int j=0; j<c->type; j++) if(c->mov[j]) {
|
forCellEx(c2, c) {
|
||||||
if(c->mov[j]->wall == waDeadfloor) c->aitmp++, bringlife.push_back(c->mov[j]);
|
eWall w = c2->wall;
|
||||||
else if(c->mov[j]->wall == waDeadwall || (c->mov[j]->wall == waDeadfloor2 && !c->mov[j]->monst))
|
if(w == waDeadfloor) c->aitmp++, bringlife.push_back(c2);
|
||||||
c->aitmp--, bringlife.push_back(c->mov[j]);
|
else if(w == waDeadwall || (w == waDeadfloor2 && !c2->monst))
|
||||||
else if(c->mov[j]->wall == waCavefloor) c->aitmp++;
|
c->aitmp--, bringlife.push_back(c2);
|
||||||
else if(c->mov[j]->wall == waCavewall) c->aitmp--;
|
else if(w == waCavefloor) c->aitmp++;
|
||||||
else if(c->mov[j]->wall == waRubble) c->aitmp--;
|
else if(w == waCavewall) c->aitmp--;
|
||||||
else if(c->mov[j]->wall == waGargoyle) c->aitmp--;
|
else if(w == waRubble) c->aitmp--;
|
||||||
else if(c->mov[j]->wall == waGargoyleFloor) c->aitmp--;
|
else if(w == waGargoyle) c->aitmp--;
|
||||||
else if(c->mov[j]->wall == waGargoyleBridge) c->aitmp--;
|
else if(w == waGargoyleFloor) c->aitmp--;
|
||||||
else if(c->mov[j]->wall == waDeadTroll) c->aitmp -= 5;
|
else if(w == waGargoyleBridge) c->aitmp--;
|
||||||
else if(c->mov[j]->wall == waDeadTroll2) c->aitmp -= 3;
|
else if(w == waDeadTroll) c->aitmp -= 5;
|
||||||
else if(c->mov[j]->wall == waPetrified) c->aitmp -= 2;
|
else if(w == waDeadTroll2) c->aitmp -= 3;
|
||||||
else if(c->mov[j]->wall == waVinePlant) c->aitmp--;
|
else if(w == waPetrified || w == waPetrifiedBridge) c->aitmp -= 2;
|
||||||
else if(chaosmode && c->mov[j]->land != laCaves && c->mov[j]->land != laEmerald) ;
|
else if(w == waVinePlant) c->aitmp--;
|
||||||
else if(c->mov[j]->land == laTrollheim) ; // trollheim floor does not count
|
else if(chaosmode && c2->land != laCaves && c2->land != laEmerald) ;
|
||||||
else if(c->mov[j]->wall != waBarrier) c->aitmp += 5;
|
else if(c2->land == laTrollheim) ; // trollheim floor does not count
|
||||||
|
else if(w != waBarrier) c->aitmp += 5;
|
||||||
|
|
||||||
if(sword::at(c)) c->aitmp += 500;
|
if(sword::at(c)) c->aitmp += 500;
|
||||||
|
|
||||||
if(c->mov[j]->cpdist == 0 && markOrb(itOrbDigging)) c->aitmp+=100;
|
if(c2->cpdist == 0 && markOrb(itOrbDigging)) c->aitmp+=100;
|
||||||
if(items[itOrbEmpathy] && isFriendly(c->mov[j]) && markEmpathy(itOrbDigging))
|
if(items[itOrbEmpathy] && isFriendly(c2) && markEmpathy(itOrbDigging))
|
||||||
c->aitmp+=100;
|
c->aitmp+=100;
|
||||||
if(c->mov[j]->wall == waThumperOn) c->aitmp+=100;
|
if(w == waThumperOn) c->aitmp+=100;
|
||||||
if(c->mov[j]->wall == waFire) c->aitmp+=100;
|
if(w == waFire) c->aitmp+=100;
|
||||||
if(c->mov[j]->wall == waBigStatue) c->aitmp-=100;
|
if(w == waBigStatue) c->aitmp-=100;
|
||||||
if(c->mov[j]->item && !peace::on) c->aitmp+=2;
|
if(c2->item && !peace::on) c->aitmp+=2;
|
||||||
if(c->mov[j]->monst == moZombie) c->aitmp += 10;
|
if(c2->monst == moZombie) c->aitmp += 10;
|
||||||
if(c->mov[j]->monst == moGhost) c->aitmp += 10;
|
if(c2->monst == moGhost) c->aitmp += 10;
|
||||||
if(c->mov[j]->monst == moTentacleGhost) c->aitmp += 10;
|
if(c2->monst == moTentacleGhost) c->aitmp += 10;
|
||||||
if(c->mov[j]->monst == moFriendlyGhost) c->aitmp += 10;
|
if(c2->monst == moFriendlyGhost) c->aitmp += 10;
|
||||||
if(c->mov[j]->monst == moSkeleton) c->aitmp ++;
|
if(c2->monst == moSkeleton) c->aitmp ++;
|
||||||
if(c->mov[j]->monst == moGargoyle) c->aitmp--;
|
if(c2->monst == moGargoyle) c->aitmp--;
|
||||||
if(c->mov[j]->monst == moDraugr) c->aitmp--;
|
if(c2->monst == moDraugr) c->aitmp--;
|
||||||
if(isDragon(c->mov[j]->monst)) c->aitmp++;
|
if(isDragon(c2->monst)) c->aitmp++;
|
||||||
if(c->mov[j]->monst == moNecromancer) c->aitmp += 10;
|
if(c2->monst == moNecromancer) c->aitmp += 10;
|
||||||
if(c->mov[j]->monst == moWormtail) c->aitmp++;
|
if(c2->monst == moWormtail) c->aitmp++;
|
||||||
if(c->mov[j]->monst == moTentacletail) c->aitmp-=2;
|
if(c2->monst == moTentacletail) c->aitmp-=2;
|
||||||
if(isIvy(c->mov[j])) c->aitmp--;
|
if(isIvy(c2)) c->aitmp--;
|
||||||
if(isDemon(c->mov[j])) c->aitmp-=3;
|
if(isDemon(c2)) c->aitmp-=3;
|
||||||
// if(c->mov[j]->monst) c->tmp++;
|
// if(c2->monst) c->tmp++;
|
||||||
// if(c->mov[j]->monst == moTroll) c->tmp -= 3;
|
// if(c2->monst == moTroll) c->tmp -= 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(c->land == laLivefjord) {
|
else if(c->land == laLivefjord) {
|
||||||
@ -2057,11 +2058,11 @@ void livecaves() {
|
|||||||
cell *c2 = c->mov[j];
|
cell *c2 = c->mov[j];
|
||||||
if(c2->wall == waNone || c2->wall == waStrandedBoat)
|
if(c2->wall == waNone || c2->wall == waStrandedBoat)
|
||||||
c->aitmp -= (c2->land == laLivefjord ? 1 : 100);
|
c->aitmp -= (c2->land == laLivefjord ? 1 : 100);
|
||||||
if(c2->wall == waTempFloor || c2->wall == waTempBridge)
|
if(c2->wall == waTempFloor || c2->wall == waTempBridge || c2->wall == waTempBridgeBlocked)
|
||||||
;
|
;
|
||||||
else if(c2->wall == waDeadTroll || c2->wall == waDeadTroll2 || c2->wall == waThumperOn || isFire(c2) || snakelevel(c2))
|
else if(c2->wall == waDeadTroll || c2->wall == waDeadTroll2 || c2->wall == waThumperOn || isFire(c2) || snakelevel(c2))
|
||||||
c->aitmp -= 10;
|
c->aitmp -= 10;
|
||||||
else if(c2->wall == waPetrified)
|
else if(c2->wall == waPetrified || c2->wall == waPetrifiedBridge)
|
||||||
c->aitmp -= 10;
|
c->aitmp -= 10;
|
||||||
if(c2->wall == waBigStatue)
|
if(c2->wall == waBigStatue)
|
||||||
c->aitmp -= 10;
|
c->aitmp -= 10;
|
||||||
|
@ -62,7 +62,8 @@ bool isActivable(cell *c) {
|
|||||||
|
|
||||||
bool hasTimeout(cell *c) {
|
bool hasTimeout(cell *c) {
|
||||||
return c->wall == waThumperOn || c->wall == waFire || c->wall == waPartialFire ||
|
return c->wall == waThumperOn || c->wall == waFire || c->wall == waPartialFire ||
|
||||||
c->wall == waTempWall || c->wall == waTempFloor || c->wall == waTempBridge;
|
c->wall == waTempWall || c->wall == waTempFloor || c->wall == waTempBridge ||
|
||||||
|
c->wall == waTempBridgeBlocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isMimic(eMonster m) {
|
bool isMimic(eMonster m) {
|
||||||
@ -294,7 +295,8 @@ bool realred(eWall w) {
|
|||||||
|
|
||||||
int snakelevel(eWall w) {
|
int snakelevel(eWall w) {
|
||||||
if(w == waRed1 || w == waDeadfloor2 || w == waRubble || w == waGargoyleFloor ||
|
if(w == waRed1 || w == waDeadfloor2 || w == waRubble || w == waGargoyleFloor ||
|
||||||
w == waGargoyleBridge || w == waTempFloor || w == waTempBridge || w == waRoundTable)
|
w == waGargoyleBridge || w == waTempFloor || w == waTempBridge || w == waRoundTable ||
|
||||||
|
w == waPetrifiedBridge)
|
||||||
return 1;
|
return 1;
|
||||||
if(w == waRed2) return 2;
|
if(w == waRed2) return 2;
|
||||||
if(w == waRed3) return 3;
|
if(w == waRed3) return 3;
|
||||||
@ -309,7 +311,7 @@ bool isWall(cell *w) {
|
|||||||
w->wall == waCavefloor || w->wall == waFrozenLake || w->wall == waVineHalfA ||
|
w->wall == waCavefloor || w->wall == waFrozenLake || w->wall == waVineHalfA ||
|
||||||
w->wall == waVineHalfB || w->wall == waDeadfloor || w->wall == waDeadfloor2 ||
|
w->wall == waVineHalfB || w->wall == waDeadfloor || w->wall == waDeadfloor2 ||
|
||||||
w->wall == waRubble || w->wall == waGargoyleFloor || w->wall == waGargoyleBridge ||
|
w->wall == waRubble || w->wall == waGargoyleFloor || w->wall == waGargoyleBridge ||
|
||||||
w->wall == waTempFloor || w->wall == waTempBridge ||
|
w->wall == waTempFloor || w->wall == waTempBridge || w->wall == waPetrifiedBridge ||
|
||||||
w->wall == waBoat || w->wall == waCIsland || w->wall == waCIsland2 ||
|
w->wall == waBoat || w->wall == waCIsland || w->wall == waCIsland2 ||
|
||||||
w->wall == waRed1 || w->wall == waRed2 || w->wall == waRed3 ||
|
w->wall == waRed1 || w->wall == waRed2 || w->wall == waRed3 ||
|
||||||
w->wall == waMineUnknown || w->wall == waMineMine || w->wall == waMineOpen ||
|
w->wall == waMineUnknown || w->wall == waMineMine || w->wall == waMineOpen ||
|
||||||
|
114
game.cpp
114
game.cpp
@ -814,7 +814,7 @@ void useup(cell *c) {
|
|||||||
drawParticles(c, c->wall == waFire ? 0xC00000 : winf[c->wall].color, 10, 50);
|
drawParticles(c, c->wall == waFire ? 0xC00000 : winf[c->wall].color, 10, 50);
|
||||||
if(c->wall == waTempFloor)
|
if(c->wall == waTempFloor)
|
||||||
c->wall = waChasm;
|
c->wall = waChasm;
|
||||||
else if(c->wall == waTempBridge)
|
else if(c->wall == waTempBridge || c->wall == waTempBridgeBlocked)
|
||||||
placeWater(c, c);
|
placeWater(c, c);
|
||||||
else
|
else
|
||||||
c->wall = c->land == laCaribbean ? waCIsland2 : waNone;
|
c->wall = c->land == laCaribbean ? waCIsland2 : waNone;
|
||||||
@ -1278,10 +1278,41 @@ int monstersnear(cell *c, cell *nocount, eMonster who, cell *pushto, cell *comef
|
|||||||
stalemate::moves.pop_back();
|
stalemate::moves.pop_back();
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void petrify(cell *c, eWall walltype, eMonster m) {
|
||||||
|
destroyHalfvine(c);
|
||||||
|
playSound(c, "die-troll");
|
||||||
|
|
||||||
|
if(isWateryOrBoat(c) && c->land == laWhirlpool) {
|
||||||
|
c->wall = waSea;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(walltype == waGargoyle && cellUnstableOrChasm(c))
|
||||||
|
walltype = waGargoyleFloor;
|
||||||
|
else if(walltype == waGargoyle && isWatery(c))
|
||||||
|
walltype = waGargoyleBridge;
|
||||||
|
else if(walltype == waPetrified && isWatery(c))
|
||||||
|
walltype = waPetrifiedBridge;
|
||||||
|
else if((c->wall == waTempBridge || c->wall == waTempBridgeBlocked) && c->land == laWhirlpool) {
|
||||||
|
c->wall = waTempBridgeBlocked;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(!doesnotFall(c)) {
|
||||||
|
fallingFloorAnimation(c, walltype, m);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isReptile(c->wall)) kills[moReptile]++;
|
||||||
|
destroyHalfvine(c);
|
||||||
|
c->wall = walltype;
|
||||||
|
c->wparam = m;
|
||||||
|
c->item = itNone;
|
||||||
|
}
|
||||||
|
|
||||||
void killIvy(cell *c, eMonster who) {
|
void killIvy(cell *c, eMonster who) {
|
||||||
if(c->monst == moIvyDead) return;
|
if(c->monst == moIvyDead) return;
|
||||||
if(checkOrb(who, itOrbStone)) c->wall = waPetrified, c->wparam = c->monst;
|
if(checkOrb(who, itOrbStone)) petrify(c, waPetrified, c->monst);
|
||||||
c->monst = moIvyDead; // NEWYEARFIX
|
c->monst = moIvyDead; // NEWYEARFIX
|
||||||
for(int i=0; i<c->type; i++) if(c->mov[i])
|
for(int i=0; i<c->type; i++) if(c->mov[i])
|
||||||
if(isIvy(c->mov[i]) && c->mov[i]->mondir == c->spn(i))
|
if(isIvy(c->mov[i]) && c->mov[i]->mondir == c->spn(i))
|
||||||
@ -1307,6 +1338,8 @@ void prespill(cell* c, eWall t, int rad, cell *from) {
|
|||||||
c->wall = waPalace;
|
c->wall = waPalace;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// no slime in Whirlpool
|
||||||
|
if(c->land == laWhirlpool) return;
|
||||||
// these walls block spilling completely
|
// these walls block spilling completely
|
||||||
if(c->wall == waIcewall || c->wall == waBarrier || c->wall == waWarpGate ||
|
if(c->wall == waIcewall || c->wall == waBarrier || c->wall == waWarpGate ||
|
||||||
c->wall == waDeadTroll || c->wall == waDeadTroll2 ||
|
c->wall == waDeadTroll || c->wall == waDeadTroll2 ||
|
||||||
@ -1318,7 +1351,7 @@ void prespill(cell* c, eWall t, int rad, cell *from) {
|
|||||||
c->wall == waTower ||
|
c->wall == waTower ||
|
||||||
c->wall == waPalace ||
|
c->wall == waPalace ||
|
||||||
c->wall == waPlatform || c->wall == waStone || c->wall == waTempWall ||
|
c->wall == waPlatform || c->wall == waStone || c->wall == waTempWall ||
|
||||||
c->wall == waTempFloor || c->wall == waTempBridge ||
|
c->wall == waTempFloor || c->wall == waTempBridge || c->wall == waPetrifiedBridge || c->wall == waTempBridgeBlocked ||
|
||||||
c->wall == waSandstone || c->wall == waCharged || c->wall == waGrounded ||
|
c->wall == waSandstone || c->wall == waCharged || c->wall == waGrounded ||
|
||||||
c->wall == waMetal || c->wall == waSaloon || c->wall == waFan ||
|
c->wall == waMetal || c->wall == waSaloon || c->wall == waFan ||
|
||||||
c->wall == waBarrowDig || c->wall == waBarrowWall ||
|
c->wall == waBarrowDig || c->wall == waBarrowWall ||
|
||||||
@ -1331,7 +1364,7 @@ void prespill(cell* c, eWall t, int rad, cell *from) {
|
|||||||
c->wall == waVinePlant || isFire(c) || c->wall == waBonfireOff || c->wall == waVineHalfA || c->wall == waVineHalfB ||
|
c->wall == waVinePlant || isFire(c) || c->wall == waBonfireOff || c->wall == waVineHalfA || c->wall == waVineHalfB ||
|
||||||
c->wall == waCamelotMoat || c->wall == waSea || c->wall == waCTree ||
|
c->wall == waCamelotMoat || c->wall == waSea || c->wall == waCTree ||
|
||||||
c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyle ||
|
c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyle ||
|
||||||
c->wall == waRose || c->wall == waPetrified)
|
c->wall == waRose || c->wall == waPetrified || c->wall == waPetrifiedBridge)
|
||||||
t = waTemporary;
|
t = waTemporary;
|
||||||
|
|
||||||
if(c->wall == waSulphur) {
|
if(c->wall == waSulphur) {
|
||||||
@ -1484,7 +1517,8 @@ bool snakepile(cell *c, eMonster m) {
|
|||||||
c->wall = waDeadwall;
|
c->wall = waDeadwall;
|
||||||
}
|
}
|
||||||
else if(c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyleBridge ||
|
else if(c->wall == waRubble || c->wall == waGargoyleFloor || c->wall == waGargoyleBridge ||
|
||||||
c->wall == waTempFloor || c->wall == waTempBridge) {
|
c->wall == waTempFloor || c->wall == waTempBridge || c->wall == waPetrifiedBridge) {
|
||||||
|
if(c->land == laWhirlpool) return false;
|
||||||
c->wall = waRed2;
|
c->wall = waRed2;
|
||||||
if(m == moDarkTroll) c->wall = waDeadwall;
|
if(m == moDarkTroll) c->wall = waDeadwall;
|
||||||
}
|
}
|
||||||
@ -1576,6 +1610,9 @@ void explodeMine(cell *c) {
|
|||||||
c2->wall = waNone;
|
c2->wall = waNone;
|
||||||
makeflame(c2, 10, false);
|
makeflame(c2, 10, false);
|
||||||
}
|
}
|
||||||
|
else if(c2->wall == waPetrifiedBridge || c2->wall == waGargoyleBridge) {
|
||||||
|
placeWater(c, c);
|
||||||
|
}
|
||||||
else if(c2->wall == waPalace || c2->wall == waOpenGate || c2->wall == waClosedGate ||
|
else if(c2->wall == waPalace || c2->wall == waOpenGate || c2->wall == waClosedGate ||
|
||||||
c2->wall == waSandstone || c2->wall == waMetal || c2->wall == waSaloon) {
|
c2->wall == waSandstone || c2->wall == waMetal || c2->wall == waSaloon) {
|
||||||
c2->wall = waNone;
|
c2->wall = waNone;
|
||||||
@ -1654,7 +1691,8 @@ void minerEffect(cell *c) {
|
|||||||
else if(isReptile(c->wall))
|
else if(isReptile(c->wall))
|
||||||
c->wparam = 1; // wake up next turn
|
c->wparam = 1; // wake up next turn
|
||||||
else if(c->wall == waTempFloor) c->wall = waChasm;
|
else if(c->wall == waTempFloor) c->wall = waChasm;
|
||||||
else if(c->wall == waTempBridge) placeWater(c, NULL);
|
else if(c->wall == waTempBridge || c->wall == waPetrifiedBridge || c->wall == waTempBridgeBlocked)
|
||||||
|
placeWater(c, NULL);
|
||||||
else if(doesFall(c))
|
else if(doesFall(c))
|
||||||
ow = waNone;
|
ow = waNone;
|
||||||
else
|
else
|
||||||
@ -1667,7 +1705,7 @@ bool isRatling(eMonster m) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void killMutantIvy(cell *c, eMonster who) {
|
void killMutantIvy(cell *c, eMonster who) {
|
||||||
if(checkOrb(who, itOrbStone)) c->wall = waPetrified, c->wparam = moMutant;
|
if(checkOrb(who, itOrbStone)) petrify(c, waPetrified, moMutant);
|
||||||
removeIvy(c);
|
removeIvy(c);
|
||||||
for(int i=0; i<c->type; i++)
|
for(int i=0; i<c->type; i++)
|
||||||
if(c->mov[i]->mondir == c->spn(i) && (isMutantIvy(c->mov[i]) || c->mov[i]->monst == moFriendlyIvy))
|
if(c->mov[i]->mondir == c->spn(i) && (isMutantIvy(c->mov[i]) || c->mov[i]->monst == moFriendlyIvy))
|
||||||
@ -1776,27 +1814,11 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(connected) {
|
if(connected) petrify(c, waGargoyle, m), pcount = 0;
|
||||||
pcount = 0;
|
|
||||||
playSound(c, "die-troll");
|
|
||||||
destroyHalfvine(c);
|
|
||||||
if(cellUnstableOrChasm(c)) c->wall = waGargoyleFloor;
|
|
||||||
else if(isWatery(c)) c->wall = waGargoyleBridge;
|
|
||||||
else c->wall = waGargoyle;
|
|
||||||
c->item = itNone;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m == moTroll) {
|
if(m == moTroll) {
|
||||||
destroyHalfvine(c);
|
petrify(c, waDeadTroll, m); pcount = 0;
|
||||||
if(doesnotFall(c)) {
|
|
||||||
pcount = 0;
|
|
||||||
playSound(c, "die-troll");
|
|
||||||
if(isReptile(c->wall)) kills[moReptile]++;
|
|
||||||
c->wall = waDeadTroll;
|
|
||||||
}
|
|
||||||
else fallingFloorAnimation(c, waDeadTroll, m), pcount = 0;
|
|
||||||
c->item = itNone;
|
|
||||||
for(int i=0; i<c->type; i++) if(c->mov[i]) {
|
for(int i=0; i<c->type; i++) if(c->mov[i]) {
|
||||||
c->mov[i]->item = itNone;
|
c->mov[i]->item = itNone;
|
||||||
if(c->mov[i]->wall == waDeadwall || c->mov[i]->wall == waDeadfloor2) c->mov[i]->wall = waCavewall;
|
if(c->mov[i]->wall == waDeadwall || c->mov[i]->wall == waDeadfloor2) c->mov[i]->wall = waCavewall;
|
||||||
@ -1804,16 +1826,7 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(m == moFjordTroll || m == moForestTroll || m == moStormTroll) {
|
if(m == moFjordTroll || m == moForestTroll || m == moStormTroll) {
|
||||||
destroyHalfvine(c);
|
petrify(c, waDeadTroll2, m);
|
||||||
if(doesnotFall(c)) {
|
|
||||||
if(isReptile(c->wall)) kills[moReptile]++;
|
|
||||||
c->wall = waDeadTroll2;
|
|
||||||
pcount = 0;
|
|
||||||
playSound(c, "die-troll");
|
|
||||||
}
|
|
||||||
else fallingFloorAnimation(c, waDeadTroll2, m), pcount = 0;
|
|
||||||
c->wparam = m;
|
|
||||||
c->item = itNone;
|
|
||||||
}
|
}
|
||||||
if(m == moMiner) {
|
if(m == moMiner) {
|
||||||
pcount = 32;
|
pcount = 32;
|
||||||
@ -1847,17 +1860,8 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
if(m == moPrincess) {
|
if(m == moPrincess) {
|
||||||
playSound(c, princessgender() ? "die-princess" : "die-prince");
|
playSound(c, princessgender() ? "die-princess" : "die-prince");
|
||||||
}
|
}
|
||||||
if(m == moVineBeast) {
|
if(m == moVineBeast)
|
||||||
destroyHalfvine(c);
|
petrify(c, waVinePlant, m), pcount = 0;
|
||||||
if(doesnotFall(c)) {
|
|
||||||
if(isReptile(c->wall)) kills[moReptile]++;
|
|
||||||
c->wall = waVinePlant;
|
|
||||||
pcount = 0;
|
|
||||||
playSound(c, "die-vinebeast");
|
|
||||||
}
|
|
||||||
else fallingFloorAnimation(c, waVinePlant, m), pcount = 0;
|
|
||||||
c->item = itNone;
|
|
||||||
}
|
|
||||||
if(isBird(m)) moveEffect(c, c, moDeadBird);
|
if(isBird(m)) moveEffect(c, c, moDeadBird);
|
||||||
if(m == moBomberbird || m == moTameBomberbird) {
|
if(m == moBomberbird || m == moTameBomberbird) {
|
||||||
pcount = 0;
|
pcount = 0;
|
||||||
@ -1869,7 +1873,7 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
c->wall == waStrandedBoat || c->wall == waRed1 || c->wall == waGiantRug) {
|
c->wall == waStrandedBoat || c->wall == waRed1 || c->wall == waGiantRug) {
|
||||||
c->wall = waMineMine;
|
c->wall = waMineMine;
|
||||||
if(c->item) explodeMine(c);
|
if(c->item) explodeMine(c);
|
||||||
else if(c->land == laMinefield) c->landparam |= 1;
|
else if(c->land == laMinefield) c->landparam = 1;
|
||||||
}
|
}
|
||||||
else if(c->wall == waFrozenLake)
|
else if(c->wall == waFrozenLake)
|
||||||
c->wall = waLake;
|
c->wall = waLake;
|
||||||
@ -1918,18 +1922,8 @@ void killMonster(cell *c, eMonster who, flagtype deathflags) {
|
|||||||
if(isFire(c) && itemBurns(c->item))
|
if(isFire(c) && itemBurns(c->item))
|
||||||
c->item = itNone;
|
c->item = itNone;
|
||||||
}
|
}
|
||||||
if(checkOrb(who, itOrbStone)) {
|
if(checkOrb(who, itOrbStone))
|
||||||
destroyHalfvine(c);
|
petrify(c, waPetrified, m), pcount = 0;
|
||||||
if(doesnotFall(c)) {
|
|
||||||
if(isReptile(c->wall)) kills[moReptile]++;
|
|
||||||
c->wall = waPetrified;
|
|
||||||
pcount = 0;
|
|
||||||
playSound(c, "die-troll");
|
|
||||||
}
|
|
||||||
else fallingFloorAnimation(c, waPetrified, m), pcount = 0;
|
|
||||||
c->wparam = m;
|
|
||||||
c->item = itNone;
|
|
||||||
}
|
|
||||||
if(m == moFireFairy) {
|
if(m == moFireFairy) {
|
||||||
drawFireParticles(c, 16); pcount = 0;
|
drawFireParticles(c, 16); pcount = 0;
|
||||||
playSound(c, "die-fairy");
|
playSound(c, "die-fairy");
|
||||||
@ -3587,7 +3581,7 @@ void explodeAround(cell *c) {
|
|||||||
if(c2->wall == waPetrified) c2->wall = waNone;
|
if(c2->wall == waPetrified) c2->wall = waNone;
|
||||||
if(c2->wall == waDeadfloor2) c2->wall = waDeadfloor;
|
if(c2->wall == waDeadfloor2) c2->wall = waDeadfloor;
|
||||||
if(c2->wall == waGargoyleFloor) c2->wall = waChasm;
|
if(c2->wall == waGargoyleFloor) c2->wall = waChasm;
|
||||||
if(c2->wall == waGargoyleBridge) placeWater(c2, c2);
|
if(c2->wall == waGargoyleBridge || c2->wall == waPetrifiedBridge) placeWater(c2, c2);
|
||||||
if(c2->wall == waRubble) c2->wall = waNone;
|
if(c2->wall == waRubble) c2->wall = waNone;
|
||||||
if(c2->wall == waPlatform) c2->wall = waNone;
|
if(c2->wall == waPlatform) c2->wall = waNone;
|
||||||
if(c2->wall == waStone) c2->wall = waNone;
|
if(c2->wall == waStone) c2->wall = waNone;
|
||||||
|
11
graph.cpp
11
graph.cpp
@ -2557,9 +2557,9 @@ void setcolors(cell *c, int& wcol, int &fcol) {
|
|||||||
fcol = wcol;
|
fcol = wcol;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c->wall == waDeadTroll2 || c->wall == waPetrified) {
|
if(c->wall == waDeadTroll2 || c->wall == waPetrified || c->wall == waPetrifiedBridge) {
|
||||||
eMonster m = eMonster(c->wparam);
|
eMonster m = eMonster(c->wparam);
|
||||||
if(c->wall == waPetrified)
|
if(c->wall == waPetrified || c->wall == waPetrifiedBridge)
|
||||||
wcol = gradient(wcol, minf[m].color, 0, .2, 1);
|
wcol = gradient(wcol, minf[m].color, 0, .2, 1);
|
||||||
if(c->wall == waPetrified || isTroll(m)) if(!(m == moForestTroll && c->land == laOvergrown))
|
if(c->wall == waPetrified || isTroll(m)) if(!(m == moForestTroll && c->land == laOvergrown))
|
||||||
wcol = gradient(wcol, minf[m].color, 0, .4, 1);
|
wcol = gradient(wcol, minf[m].color, 0, .4, 1);
|
||||||
@ -2845,6 +2845,7 @@ int shallow(cell *c) {
|
|||||||
c->wall == waGargoyleBridge ||
|
c->wall == waGargoyleBridge ||
|
||||||
c->wall == waTempFloor ||
|
c->wall == waTempFloor ||
|
||||||
c->wall == waTempBridge ||
|
c->wall == waTempBridge ||
|
||||||
|
c->wall == waPetrifiedBridge ||
|
||||||
c->wall == waFrozenLake)
|
c->wall == waFrozenLake)
|
||||||
return 5;
|
return 5;
|
||||||
return 7;
|
return 7;
|
||||||
@ -2983,6 +2984,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
|||||||
// int col = 0xFFFFFF - 0x20 * c->maxdist - 0x2000 * c->cpdist;
|
// int col = 0xFFFFFF - 0x20 * c->maxdist - 0x2000 * c->cpdist;
|
||||||
|
|
||||||
if(!buggyGeneration && c->mpdist > 8 && !cheater) return; // not yet generated
|
if(!buggyGeneration && c->mpdist > 8 && !cheater) return; // not yet generated
|
||||||
|
/* if(!buggyGeneration && c->mpdist > 7 && !cheater) {
|
||||||
|
int cd = c->mpdist;
|
||||||
|
string label = its(cd);
|
||||||
|
int dc = distcolors[cd&7];
|
||||||
|
queuestr(V, (cd > 9 ? .6 : 1) * .2, label, 0xFF000000 + dc, 1);
|
||||||
|
} */
|
||||||
|
|
||||||
if(c->land == laNone && (cmode & sm::MAP)) {
|
if(c->land == laNone && (cmode & sm::MAP)) {
|
||||||
queuepoly(V, shTriangle, 0xFF0000FF);
|
queuepoly(V, shTriangle, 0xFF0000FF);
|
||||||
|
@ -5886,3 +5886,5 @@ S(
|
|||||||
N("Kraken", GEN_M, "Kraken", "Krakeny", "Krakena", "Krakenem")
|
N("Kraken", GEN_M, "Kraken", "Krakeny", "Krakena", "Krakenem")
|
||||||
N("Kraken Tentacle", GEN_F, "Macka Krakena", "Macki Krakena", "Mackę Krakena", "Macką Krakena")
|
N("Kraken Tentacle", GEN_F, "Macka Krakena", "Macki Krakena", "Mackę Krakena", "Macką Krakena")
|
||||||
S(" (killing increases treasure spawn)", " (pokonywanie zwiększa częstość skarbów)");
|
S(" (killing increases treasure spawn)", " (pokonywanie zwiększa częstość skarbów)");
|
||||||
|
|
||||||
|
N("stepping stones", GEN_O, "Bród", "Brody", "Bród", "Brodem")
|
||||||
|
7
orbs.cpp
7
orbs.cpp
@ -774,7 +774,8 @@ void summonAt(cell *dest) {
|
|||||||
|
|
||||||
bool tempWallPossibleAt(cell *dest) {
|
bool tempWallPossibleAt(cell *dest) {
|
||||||
if(dest->monst || (dest->item && !itemHidden(dest))) return false;
|
if(dest->monst || (dest->item && !itemHidden(dest))) return false;
|
||||||
return dest->wall == waChasm || isWatery(dest) || dest->wall == waNone;
|
return dest->wall == waChasm || isWatery(dest) || dest->wall == waNone ||
|
||||||
|
dest->wall == waTempBridge;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tempWallAt(cell *dest) {
|
void tempWallAt(cell *dest) {
|
||||||
@ -782,6 +783,10 @@ void tempWallAt(cell *dest) {
|
|||||||
dest->wall = waTempFloor;
|
dest->wall = waTempFloor;
|
||||||
else if(dest->wall == waNone)
|
else if(dest->wall == waNone)
|
||||||
dest->wall = waTempWall;
|
dest->wall = waTempWall;
|
||||||
|
else if(dest->wall == waTempBridge) {
|
||||||
|
dest->wall = waTempBridgeBlocked;
|
||||||
|
return;
|
||||||
|
}
|
||||||
else if(isWatery(dest))
|
else if(isWatery(dest))
|
||||||
dest->wall = waTempBridge;
|
dest->wall = waTempBridge;
|
||||||
int len = (items[itOrbMatter]+1) / 2;
|
int len = (items[itOrbMatter]+1) / 2;
|
||||||
|
Loading…
Reference in New Issue
Block a user