1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-04-28 21:53:20 +00:00

more work on the Crystal World

This commit is contained in:
Zeno Rogue 2017-10-30 09:05:16 +01:00
parent e492ea09d9
commit 36fe4c670b
10 changed files with 55 additions and 12 deletions

View File

@ -1197,6 +1197,7 @@ itemtype iinf[ittypes] = {
{ 'o', 0x3080D0, "Orb of Change", { 'o', 0x3080D0, "Orb of Change",
"This ranged Orb will transform the target monster into one without any special powers. It also stuns them for one turn. " "This ranged Orb will transform the target monster into one without any special powers. It also stuns them for one turn. "
"Does not affect multi-tile monsters."}, "Does not affect multi-tile monsters."},
{ '!', 0x80FF00, "Glowing Crystal", NODESC},
}; };
// --- wall types --- // --- wall types ---
@ -1558,7 +1559,7 @@ const landtype linf[landtypes] = {
{ 0x207068, "Hunting Ground", huntingdesc}, { 0x207068, "Hunting Ground", huntingdesc},
{ 0xE2725B, "Terracotta Army", terraldesc}, { 0xE2725B, "Terracotta Army", terraldesc},
{ 0xE2725B, "Terracotta Army", terraldesc}, { 0xE2725B, "Terracotta Army", terraldesc},
{ 0xE04040, "Dual", NODESCYET} { 0x80FF00, "Crystal World", NODESCYET}
}; };
#define LAND_OVER 57 #define LAND_OVER 57

View File

@ -68,7 +68,7 @@ struct genderswitch_t {
#define NUM_GS 6 #define NUM_GS 6
static const int ittypes = 121; static const int ittypes = 122;
struct itemtype { struct itemtype {
char glyph; char glyph;
@ -112,7 +112,7 @@ enum eItem {
itInventory, itInventory,
itLavaLily, itHunting, itBlizzard, itTerra, itLavaLily, itHunting, itBlizzard, itTerra,
itOrbSide1, itOrbSide2, itOrbSide3, itOrbSide1, itOrbSide2, itOrbSide3,
itOrbLava, itOrbMorph, itOrbLava, itOrbMorph, itGlowCrystal
}; };
static const int walltypes = 105; static const int walltypes = 105;

View File

@ -275,7 +275,7 @@ int itemclass(eItem i) {
i == itSlime || i == itAmethyst || i == itDodeca || i == itSlime || i == itAmethyst || i == itDodeca ||
i == itGreenGrass || i == itBull || i == itGreenGrass || i == itBull ||
i == itLavaLily || i == itHunting || i == itLavaLily || i == itHunting ||
i == itBlizzard || i == itTerra i == itBlizzard || i == itTerra || i == itGlowCrystal
) )
return IC_TREASURE; return IC_TREASURE;
if(i == itSavedPrincess || i == itStrongWind || i == itWarning) if(i == itSavedPrincess || i == itStrongWind || i == itWarning)

View File

@ -2431,8 +2431,14 @@ void setcolors(cell *c, int& wcol, int &fcol) {
case laBurial: case laTrollheim: case laBarrier: case laOceanWall: case laBurial: case laTrollheim: case laBarrier: case laOceanWall:
case laCrossroads2: case laCrossroads3: case laCrossroads4: case laCrossroads5: case laCrossroads2: case laCrossroads3: case laCrossroads4: case laCrossroads5:
case laRose: case laPower: case laWildWest: case laHalloween: case laRedRock: case laRose: case laPower: case laWildWest: case laHalloween: case laRedRock:
case laDragon: case laStorms: case laTerracotta: case laMercuryRiver: case laDual: case laDragon: case laStorms: case laTerracotta: case laMercuryRiver:
fcol = linf[c->land].color; break; fcol = linf[c->land].color; break;
case laDual:
fcol = linf[c->land].color;
if(c->landparam == 2) fcol = 0x40FF00;
if(c->landparam == 3) fcol = 0xC0FF00;
break;
case laDesert: fcol = 0xEDC9AF; break; case laDesert: fcol = 0xEDC9AF; break;
case laKraken: fcol = 0x20A020; break; case laKraken: fcol = 0x20A020; break;
@ -3139,6 +3145,7 @@ int getfd(cell *c) {
case laDeadCaves: case laDeadCaves:
case laPalace: case laPalace:
case laCA: case laCA:
case laDual:
return 1; return 1;
case laTrollheim: case laTrollheim:

View File

@ -1921,8 +1921,33 @@ void giantLandSwitch(cell *c, int d, cell *from) {
break; break;
case laDual: case laDual:
if(d == 9 && (ctof(c) || hrand(100) < 5)) if(d == 7) {
c->wall = waChasm; if(pseudohept(c))
c->wall = waChasm;
else {
c->landparam = 1;
if(S7%2 == 0) {
c->landparam = 2;
forCellCM(c2, c) {
if(c2->landparam == 2) c->landparam = 3;
if(!ctof(c2)) forCellCM(c3, c2) if(c3->landparam == 3) c->landparam = 3;
}
}
int hr = hrand(100) / 5;
if(hr == 0)
c->wall = waTrapdoor;
else if(hr == 1)
c->wall = waSmallTree;
else if(hr == 2)
c->wall = waStone;
}
}
ONEMPTY {
if(hrand(5000) < PT(100 + 2 * kills[moRatling], 200) && notDippingFor(itGlowCrystal))
c->item = itGlowCrystal;
if(hrand(2000) < 2 * (items[itGlowCrystal] + yendor::hardness()))
c->monst = moRatling;
}
break; break;
} }
} }

View File

@ -198,6 +198,9 @@ int isNative(eLand l, eMonster m) {
case laHunting: case laHunting:
return m == moHunterDog ? 1 : 0; return m == moHunterDog ? 1 : 0;
case laDual:
return m == moRatling ? 2 : 0;
case laCA: return 0; case laCA: return 0;
} }
return false; return false;
@ -290,6 +293,7 @@ eItem treasureType(eLand l) {
case laTerracotta: case laMercuryRiver: return itTerra; case laTerracotta: case laMercuryRiver: return itTerra;
case laBlizzard: return itBlizzard; case laBlizzard: return itBlizzard;
case laHunting: return itHunting; case laHunting: return itHunting;
case laDual: return itGlowCrystal;
case laCA: return itNone; case laCA: return itNone;
} }
@ -385,7 +389,7 @@ bool landUnlocked(eLand l) {
case laStorms: case laWhirlwind: case laStorms: case laWhirlwind:
return gold() >= R60; return gold() >= R60;
case laWildWest: case laHalloween: case laWildWest: case laHalloween: case laDual:
return false; return false;
case laIce: case laJungle: case laCaves: case laDesert: case laIce: case laJungle: case laCaves: case laDesert:

View File

@ -438,6 +438,11 @@ void wandering() {
else if(c->land == laClearing && wchance(items[itMutant2], 150) && items[itMutant2] >= 15 && !c->monst && c->type == 7) else if(c->land == laClearing && wchance(items[itMutant2], 150) && items[itMutant2] >= 15 && !c->monst && c->type == 7)
c->monst = moRedFox; c->monst = moRedFox;
else if(c->land == laDual && wchance(items[itGlowCrystal], 40)) {
c->monst = moRatling;
playSeenSound(c);
}
else if(hrand(50) < statuecount * statuecount) else if(hrand(50) < statuecount * statuecount)
c->monst = moCultistLeader; c->monst = moCultistLeader;

View File

@ -1,4 +1,4 @@
#define ORBLINES 61 #define ORBLINES 62
// orbgen flags // orbgen flags
@ -104,6 +104,7 @@ const orbinfo orbinfos[ORBLINES] = {
{orbgenflags::S_NATIVE, laHunting, 0, 2500, itOrbSide3}, {orbgenflags::S_NATIVE, laHunting, 0, 2500, itOrbSide3},
{orbgenflags::S_NATIVE, laBlizzard, 0, 2000, itOrbWinter}, {orbgenflags::S_NATIVE, laBlizzard, 0, 2000, itOrbWinter},
{orbgenflags::S_NATIVE, laTerracotta, 800, 2500, itOrbSide1}, {orbgenflags::S_NATIVE, laTerracotta, 800, 2500, itOrbSide1},
{orbgenflags::S_NATIVE, laDual, 600, 2500, itOrbSide2},
{orbgenflags::S_NATIVE, laWhirlpool, 0, 2000, itOrbWater}, // needs to be last {orbgenflags::S_NATIVE, laWhirlpool, 0, 2000, itOrbWater}, // needs to be last
}; };

View File

@ -967,7 +967,7 @@ void buildpolys() {
0; 0;
bshape(shFloorShadow[0], PPR_FLOOR); bshape(shFloorShadow[0], PPR_FLOOR);
for(int t=0; t<=6; t++) hpcpush(ddi(S7 + t*S14, floorrad0*SHADMUL) * C0); for(int t=0; t<=S6; t++) hpcpush(ddi(S7 + t*S14, floorrad0*SHADMUL) * C0);
bshape(shFloorShadow[1], PPR_FLOOR); bshape(shFloorShadow[1], PPR_FLOOR);
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12 + td, floorrad1*SHADMUL) * C0); for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12 + td, floorrad1*SHADMUL) * C0);
@ -1324,7 +1324,7 @@ void buildpolys() {
for(int t=0; t<=S3; t++) hpcpush(ddi(t*S28, -hcrossf*.94) * C0); for(int t=0; t<=S3; t++) hpcpush(ddi(t*S28, -hcrossf*.94) * C0);
bshape(shBigTriShadow, PPR_FLOOR); bshape(shBigTriShadow, PPR_FLOOR);
for(int t=0; t<=S3; t++) hpcpush(ddi(t*S28 + S14, hcrossf*.94*SHADMUL) * C0); for(int t=0; t<=S3; t++) hpcpush(ddi(t*S28 + S14 + (S3==4?S14:0), hcrossf*.94*SHADMUL) * C0);
/*bshape(shBigHexTriangleRev, PPR_FLOOR); /*bshape(shBigHexTriangleRev, PPR_FLOOR);

View File

@ -589,7 +589,7 @@ namespace tactic {
bool tacticUnlocked(int i) { bool tacticUnlocked(int i) {
eLand l = land_tac[i].l; eLand l = land_tac[i].l;
if(autocheat) return true; if(autocheat) return true;
if(l == laWildWest) return true; if(l == laWildWest || l == laDual) return true;
return hiitemsMax(treasureType(l)) * landMultiplier(l) >= 20; return hiitemsMax(treasureType(l)) * landMultiplier(l) >= 20;
} }