mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-11 18:00:34 +00:00
refactored native and landUnlocked into content.cpp
This commit is contained in:
parent
cffb895c72
commit
f90e1001e3
304
content.cpp
304
content.cpp
@ -20,6 +20,15 @@
|
||||
#define LAND(a,b,c,d,e,f,g)
|
||||
#endif
|
||||
|
||||
#ifndef NATIVE
|
||||
#define NATIVE(x)
|
||||
#endif
|
||||
|
||||
#ifndef REQ
|
||||
#define REQ(x)
|
||||
#define REQAS(x,y)
|
||||
#endif
|
||||
|
||||
|
||||
MONSTER( 0, 0, "no monster" , moNone, ZERO | CF_NOGHOST | CF_NOBLOW, RESERVED, moNone, NULL)
|
||||
MONSTER( 'Y', 0x4040FF, "Yeti" , moYeti, ZERO, RESERVED, moYeti,
|
||||
@ -1044,7 +1053,13 @@ WALL( '+', 0x804000, "trunk", waTrunk3, WF_WALL, RESERVED, 0, sgNone, "The skele
|
||||
|
||||
|
||||
LAND( 0xFF00FF, "???" , laNone, ZERO | LF_TECHNICAL, itNone, RESERVED, "")
|
||||
NATIVE(0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0xC06000, "Great Wall" , laBarrier, ZERO | LF_TECHNICAL, itNone, RESERVED, "")
|
||||
NATIVE(0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0xFF0000, "Crossroads" , laCrossroads, ZERO, itHyperstone, RESERVED,
|
||||
"This land is a quick gateway to other lands. It is very easy to find other lands "
|
||||
"from the Crossroads. Which means that you find monsters from most other lands here!\n\n"
|
||||
@ -1054,51 +1069,104 @@ LAND( 0xFF0000, "Crossroads" , laCrossroads, ZERO, itHyperstone, RESERVED,
|
||||
"A special treasure, Hyperstone, can be found on the Crossroads, but only "
|
||||
"after you have found 10 of every other treasure."
|
||||
)
|
||||
NATIVE(0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0xCDA98F, "Desert", laDesert, ZERO, itSpice, RESERVED,
|
||||
"A hot land, full of sand dunes, mysterious Spice, and huge and dangerous sand worms."
|
||||
)
|
||||
NATIVE((m == moDesertman || m == moWorm) ? 2 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x8080FF, "Icy Land", laIce, ZERO | LF_ICY, itDiamond, RESERVED,
|
||||
"A very cold land, full of ice walls. Your mere presence will cause these ice walls to "
|
||||
"melt, even if you don't want it."
|
||||
)
|
||||
NATIVE((m == moWolf || m == moWolfMoved || m == moYeti) ? 2 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x306060, "Living Cave", laCaves, ZERO | LF_TROLL, itGold, RESERVED, cavehelp)
|
||||
NATIVE((m == moGoblin || m == moTroll) ? 2 : m == moSeep ? 1 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x00C000, "Jungle", laJungle, ZERO, itRuby, RESERVED,
|
||||
"A land filled with huge ivy plants and dangerous animals."
|
||||
)
|
||||
NATIVE((m == moIvyRoot || m == moMonkey) ? 2 : (isIvy(m) || m == moEagle || m == moMonkey) ? 1 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x900090, "Alchemist Lab", laAlchemist, ZERO, itElixir, RESERVED, slimehelp)
|
||||
NATIVE((m == moSlime) ? 2 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x704070, "Hall of Mirrors", laMirror, ZERO | LF_MIRROR, itShard, RESERVED,
|
||||
"A strange land filled with mirrors. "
|
||||
"Break magic mirrors and mirage clouds to "
|
||||
"gain treasures and helpful Mimics."
|
||||
)
|
||||
NATIVE((m == moMirrorSpirit || m == moNarciss || m == moMimic) ? 1 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0x404070, "Graveyard", laGraveyard, ZERO, itBone, RESERVED,
|
||||
"All the monsters you kill are carried to this strange land, and buried. "
|
||||
"Careless Rogues are also carried here..."
|
||||
)
|
||||
NATIVE((m == moZombie || m == moNecromancer) ? 2 : m == moGhost ? 1 : 0)
|
||||
REQ(KILLS(R100))
|
||||
|
||||
LAND( 0x00FF00, "R'Lyeh", laRlyeh, ZERO, itStatue, RESERVED,
|
||||
"An ancient sunken city which can be reached only when the stars are right.\n\n"
|
||||
"You can find Temples of Cthulhu in R'Lyeh once you collect five Statues of Cthulhu."
|
||||
)
|
||||
NATIVE(
|
||||
(m == moCultist || m == moTentacle || m == moPyroCultist) ? 2 :
|
||||
(m == moCultistLeader || isIvy(m)) ? 1 : 0)
|
||||
REQ(ACCONLYF(laOcean) GOLD(R60))
|
||||
|
||||
LAND( 0xC00000, "Hell", laHell, ZERO, itHell, RESERVED,
|
||||
"A land filled with demons and molten sulphur. Abandon all hope ye who enter here!"
|
||||
)
|
||||
NATIVE((m == moLesser || m == moGreater) ? 2 : 0)
|
||||
REQ(NUMBER(orbsUnlocked(), 9, XLAT("Finished lands required: %1 (collect %2 treasure)\n", "9", its(R10))))
|
||||
|
||||
LAND( 0x00FF00, "Cocytus", laCocytus, ZERO | LF_ICY, itSapphire, RESERVED,
|
||||
cocytushelp
|
||||
)
|
||||
NATIVE((m == moShark || m == moGreaterShark || m == moCrystalSage) ? 2 : m == moYeti ? 1 : 0)
|
||||
REQ(ITEMS(itHell, U10) ITEMS(itDiamond, U10))
|
||||
|
||||
LAND( 0xFFFF00, "Land of Eternal Motion", laMotion, ZERO, itFeather, RESERVED,
|
||||
"A land where you cannot stop, because every piece of floor is extremely unstable. Only monsters who "
|
||||
"can run forever are able to survive there, and only phoenix feathers are so light that they do not disturb "
|
||||
"the floor.\n"
|
||||
)
|
||||
NATIVE((m == moRunDog) ? 2 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0x008000, "Dry Forest", laDryForest, ZERO, itFernFlower, RESERVED, foresthelp)
|
||||
NATIVE((m == moHedge || m == moFireFairy) ? 2 : 0)
|
||||
REQ(GOLD(R60))
|
||||
|
||||
LAND( 0x60C060, "Emerald Mine", laEmerald, ZERO, itEmerald, RESERVED,
|
||||
"Evil people are mining for emeralds in this living cave. "
|
||||
"It does not grow naturally, but it is dug out in a regular "
|
||||
"pattern, which is optimal according to the evil engineers."
|
||||
)
|
||||
NATIVE((m == moFlailer || m == moLancer || m == moMiner) ? 2 : m == moHedge ? 1 : 0)
|
||||
REQ( ORD(AKILL(moVizier, laPalace), ITEMS(itFernFlower, U5) ITEMS(itGold, U5)))
|
||||
|
||||
LAND( 0x421C52, "Vineyard", laWineyard, ZERO, itWine, RESERVED, vinehelp)
|
||||
NATIVE((m == moVineSpirit || m == moVineBeast) ? 2 : 0)
|
||||
REQ(GOLD(R60))
|
||||
|
||||
LAND( 0x104040, "Dead Cave", laDeadCaves, ZERO | LF_TROLL, itSilver, RESERVED, deadcavehelp)
|
||||
NATIVE((m == moEarthElemental || m == moDarkTroll) ? 2 : (m == moGoblin || m == moSeep) ? 1 : 0)
|
||||
REQ(GOLD(R60) ITEMS(itGold, 10))
|
||||
|
||||
LAND( 0x705020, "Hive", laHive, ZERO, itRoyalJelly, RESERVED, hivehelp)
|
||||
NATIVE(isBug(m) ? 1 : 0)
|
||||
REQ(KILLS(R100) GOLD(R60))
|
||||
|
||||
LAND( 0xFFFF00, "Land of Power", laPower, ZERO, itPower, RESERVED,
|
||||
"The Land of Power is filled with everburning fire, magical Orbs, and guarded by "
|
||||
"witches and golems. There are basic orbs lying everywhere, and more prized ones "
|
||||
@ -1109,27 +1177,58 @@ LAND( 0xFFFF00, "Land of Power", laPower, ZERO, itPower, RESERVED,
|
||||
"Witches and Golems don't pursue you into other Lands. Also, most Orb powers "
|
||||
"are drained when you leave the Land of Power."
|
||||
)
|
||||
NATIVE((isWitch(m) || m == moEvilGolem) ? 1 : 0)
|
||||
REQ(ITEMS(itHell, U10))
|
||||
|
||||
LAND( 0xD0D0D0, "Camelot", laCamelot, ZERO | LF_CYCLIC, itHolyGrail, RESERVED, camelothelp )
|
||||
NATIVE((m == moKnight || m == moHedge || m == moFlailer || m == moLancer) ? 1 : 0)
|
||||
REQ(ITEMS(itEmerald, U5) ACCONLY2(laCrossroads, laCrossroads3))
|
||||
|
||||
LAND( 0xD000D0, "Temple of Cthulhu", laTemple, ZERO | LF_CYCLIC, itGrimoire, RESERVED, templehelp )
|
||||
NATIVE((m == moTentacle || m == moCultist || m == moPyroCultist || m == moCultistLeader) ? 1 : 0)
|
||||
REQ(ACCONLY(laRlyeh) ITEMS(itStatue, U5))
|
||||
|
||||
LAND( 0xFF8000, "Crossroads II", laCrossroads2, ZERO, itHyperstone, RESERVED,
|
||||
"An alternate layout of the Crossroads. It is more dense and more regular, "
|
||||
"although you won't find the castle of Camelot here."
|
||||
)
|
||||
NATIVE(0)
|
||||
REQ(GOLD(R60))
|
||||
|
||||
LAND( 0x0000FF, "Caribbean", laCaribbean, ZERO | LF_SEA | LF_PURESEA, itPirate, RESERVED, caribbeanhelp)
|
||||
NATIVE((m == moPirate || m == moParrot || m == moCShark) ? 1 : 0)
|
||||
REQAS(laOcean,)
|
||||
|
||||
LAND( 0x400000, "Red Rock Valley", laRedRock, ZERO | LF_TROLL, itRedGem, RESERVED, redrockhelp )
|
||||
NATIVE((m == moRedTroll || m == moHexSnake) ? 2 : 0)
|
||||
REQ(GOLD(R60) ITEMS(itSpice, 10))
|
||||
|
||||
LAND( 0xD0D0D0, "Minefield", laMinefield, ZERO, itBombEgg, RESERVED, minedesc)
|
||||
NATIVE((m == moBomberbird || m == moTameBomberbird) ? 1 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0x2020FF, "Ocean", laOcean, ZERO | LF_EQUI | LF_SEA | LF_COASTAL, itCoast, RESERVED,
|
||||
"You can collect some valuable Ambers on the coast, but beware the tides!\n\n"
|
||||
"You can also take one of the boats and venture into the Ocean, "
|
||||
"to find other coasts, dangerous whirlpools, and islands inhabited by Pirates."
|
||||
)
|
||||
NATIVE((m == moBomberbird || m == moTameBomberbird) ? 1 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0x0000C0, "Whirlpool", laWhirlpool, ZERO | LF_CYCLIC | LF_SEA, itWhirlpool, RESERVED,
|
||||
"Many lost boats are spinning in this whirlpool. Some of them contain treasures "
|
||||
"and Pirates.\n\n"
|
||||
"Unmanned boats will go one cell clockwise in each turn. Sharks and manned boats "
|
||||
"are only allowed to go with the current, that is, towards the center, or clockwise."
|
||||
)
|
||||
NATIVE((m == moPirate || m == moCShark) ? 1 : 0)
|
||||
REQAS(laOcean, ACCONLY(laOcean))
|
||||
|
||||
LAND( 0xFFD500, "Palace", laPalace, ZERO, itPalace, RESERVED, palacedesc )
|
||||
NATIVE((m == moPalace || m == moFatGuard || m == moSkeleton || m == moVizier) ? 2 :
|
||||
m == moSkeleton ? 1 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0xC0C000, "Living Fjord", laLivefjord, ZERO | LF_SEA | LF_COASTAL | LF_TROLL, itFjord, RESERVED,
|
||||
"A coastal area, from where you can get both to the inland worlds and to the Ocean. "
|
||||
"Each turn, each cell will become water or earth, based on the majority of cells around it. "
|
||||
@ -1137,44 +1236,126 @@ LAND( 0xC0C000, "Living Fjord", laLivefjord, ZERO | LF_SEA | LF_COASTAL | LF_TRO
|
||||
"but elementals, dead Trolls, and cells outside of the Living Fjord have "
|
||||
"a very powerful effect."
|
||||
)
|
||||
NATIVE(m == moViking ? 2 : (m == moFjordTroll || m == moWaterElemental) ? 1 : 0)
|
||||
REQAS(laOcean,)
|
||||
|
||||
LAND( 0xFFFFE0, "Ivory Tower", laIvoryTower, ZERO | LF_GRAVITY | LF_EQUI, itIvory, RESERVED, "Powerful wizards claimed this part of the world, to perform their magical "
|
||||
"experiments in peace and solitude. They have changed the direction of gravity, "
|
||||
"to make it even harder for intruders to reach them.\n\n"
|
||||
"Gravity works as follows: cells are unstable if they are empty, and there is "
|
||||
"no cell immediately below them which contains a wall. It is impossible to move "
|
||||
"from one unstable cell to another, except if moving down.")
|
||||
NATIVE((m == moFamiliar || m == moGargoyle) ? 2 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0x606060, "Zebra", laZebra, ZERO, itZebra, RESERVED, "Everything in this Land has black and white stripes.")
|
||||
NATIVE((m == moOrangeDog) ? 2 : 0)
|
||||
REQ(GOLD(R30) ITEMS(itFeather, U10))
|
||||
|
||||
LAND( 0xC08080, "Plane of Fire", laEFire, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc)
|
||||
NATIVE(isNative(laElementalWall, m))
|
||||
REQAS(laElementalWall,)
|
||||
|
||||
LAND( 0x808080, "Plane of Air", laEAir, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc)
|
||||
NATIVE(isNative(laElementalWall, m))
|
||||
REQAS(laElementalWall,)
|
||||
|
||||
LAND( 0x80C080, "Plane of Earth", laEEarth, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc)
|
||||
NATIVE(isNative(laElementalWall, m))
|
||||
REQAS(laElementalWall,)
|
||||
|
||||
LAND( 0x8080C0, "Plane of Water", laEWater, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc)
|
||||
NATIVE(isNative(laElementalWall, m))
|
||||
REQAS(laElementalWall,)
|
||||
|
||||
LAND( 0x4040FF, "Crossroads III", laCrossroads3, ZERO, itHyperstone, RESERVED,
|
||||
"An alternate layout of the Crossroads. Great Walls cross here at right angles."
|
||||
)
|
||||
NATIVE(0)
|
||||
REQ(NUMBER(orbsUnlocked(), 9, XLAT("Finished lands required: %1 (collect %2 treasure)\n", "9", its(R10))))
|
||||
|
||||
LAND( 0x4040C0, "Sea Border", laOceanWall, ZERO | LF_TECHNICAL | LF_SEA, itNone, RESERVED, "Border between seas.")
|
||||
// REQAS(laOcean,)
|
||||
REQ(NEVER)
|
||||
NATIVE(0)
|
||||
|
||||
LAND( 0x4040C0, "Elemental Planes", laElementalWall, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc)
|
||||
NATIVE((m == elementalOf(l) && m) ? 2 : (m == moAirElemental || m == moEarthElemental || m == moWaterElemental || m == moFireElemental) ? 1 : 0)
|
||||
REQ(KILL(moAirElemental, laWhirlwind) KILL(moWaterElemental, laLivefjord) KILL(moEarthElemental, laDeadCaves) KILL(moFireElemental, laDragon))
|
||||
|
||||
LAND( 0xE08020, "Canvas", laCanvas, ZERO | LF_TECHNICAL, itNone, RESERVED, "A fake Land with colored floors.")
|
||||
NATIVE(0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0x00C000, "Palace Quest", laPrincessQuest, ZERO, itSavedPrincess, RESERVED, princessdesc) // fake
|
||||
NATIVE(isNative(laPalace, m))
|
||||
REQ(ACCONLY(laPalace) KILL(moVizier, laPalace))
|
||||
|
||||
LAND( 0xD0D060, "Wild West", laWildWest, ZERO, itBounty, RESERVED, wildwestdesc)
|
||||
NATIVE((m == moOutlaw) ? 2 : 0)
|
||||
REQ( NEVER )
|
||||
|
||||
LAND( 0x80A080, "Land of Storms", laStorms, ZERO | LF_TROLL, itFulgurite, RESERVED, elecdesc)
|
||||
NATIVE((m == moMetalBeast || m == moMetalBeast2 || m == moStormTroll) ? 1 : 0)
|
||||
REQ( GOLD(R60) )
|
||||
|
||||
LAND( 0x20A050, "Overgrown Woods", laOvergrown, ZERO | LF_TROLL, itMutant, RESERVED, overdesc)
|
||||
NATIVE((m == moMutant || m == moForestTroll) ? 1 : 0)
|
||||
REQ( GOLD(R60) ITEMS(itRuby, U10) )
|
||||
|
||||
LAND( 0x20D050, "Clearing", laClearing, ZERO | LF_CYCLIC, itMutant2, RESERVED, cleardesc)
|
||||
NATIVE((m == moMutant || m == moRedFox) ? 1 : 0)
|
||||
REQ(ACCONLY(laOvergrown) ITEMS(itMutant, U5))
|
||||
|
||||
LAND( 0x303030, "Haunted Woods", laHaunted, ZERO | LF_EQUI | LF_HAUNTED, itLotus, RESERVED, hauntdesc)
|
||||
NATIVE((m == moGhost || m == moFriendlyGhost) ? 1 : 0)
|
||||
REQ(ACCONLY(laGraveyard) ITEMS(itBone, U10))
|
||||
|
||||
LAND( 0x303030, "Haunted Woods", laHauntedWall, ZERO | LF_EQUI | LF_TECHNICAL | LF_HAUNTED, itLotus, RESERVED, hauntdesc)
|
||||
NATIVE(isNative(laHaunted, m))
|
||||
REQAS(laHaunted,)
|
||||
|
||||
LAND( 0x303030, "Haunted Woods", laHauntedBorder, ZERO | LF_EQUI | LF_TECHNICAL | LF_HAUNTED, itLotus, RESERVED, hauntdesc)
|
||||
NATIVE(isNative(laHaunted, m))
|
||||
REQAS(laHaunted,)
|
||||
|
||||
LAND( 0xC0C0FF, "Windy Plains", laWhirlwind, ZERO, itWindstone, RESERVED, winddesc)
|
||||
NATIVE((m == moAirElemental || m == moWindCrow) ? 2 : 0)
|
||||
REQ( GOLD(R60) )
|
||||
|
||||
LAND( 0x764e7c*2, "Rose Garden", laRose, ZERO, itRose, RESERVED, roselanddesc)
|
||||
NATIVE((m == moFalsePrincess || m == moRoseBeauty || m == moRoseLady) ? 2 : 0)
|
||||
REQ( GOLD(R60) )
|
||||
|
||||
LAND( 0xFFD580, "Warped Coast", laWarpCoast, ZERO | LF_WARPED | LF_COASTAL, itCoral, RESERVED, warplanddesc)
|
||||
NATIVE(m == moRatling ? 2 : m == moRatlingAvenger ? 1 : 0)
|
||||
REQAS(laOcean,)
|
||||
|
||||
LAND( 0xFFD580, "Warped Sea", laWarpSea, ZERO | LF_WARPED | LF_SEA | LF_COASTAL, itCoral, RESERVED, warplanddesc)
|
||||
NATIVE(isNative(laWarpCoast, m))
|
||||
REQAS(laWarpCoast,)
|
||||
|
||||
LAND( 0xC08080, "Crossroads IV", laCrossroads4, ZERO, itHyperstone, RESERVED,
|
||||
"An alternate layout of the Crossroads, without walls."
|
||||
)
|
||||
NATIVE(0)
|
||||
REQ(GOLD(R200))
|
||||
|
||||
LAND( 0xFFD580, "Yendorian Forest", laEndorian, ZERO | LF_GRAVITY | LF_EQUI, itApple, RESERVED,
|
||||
"This forest was planted by one of the wizards from the Ivory Tower "
|
||||
"to conduct experiments with gravity."
|
||||
)
|
||||
NATIVE((m == moResearcher || m == moSparrowhawk) ? 2 : 0)
|
||||
REQ(ITEMS(itIvory, U10))
|
||||
|
||||
LAND( 0x487830, "Galápagos", laTortoise, ZERO, itBabyTortoise, RESERVED, tortoisedesc)
|
||||
NATIVE(m == moTortoise ? 1 : 0)
|
||||
REQ(COND(tortoise::seek(), XLAT("Find a %1 in %the2.", itBabyTortoise, laDragon)) ACCONLY(laDragon))
|
||||
|
||||
LAND( 0xD04000, "Dragon Chasms", laDragon, ZERO, itDragon, RESERVED, dragondesc)
|
||||
NATIVE((isDragon(m) || m == moFireElemental) ? 1 : 0)
|
||||
REQ(NUMBER(killtypes(), R20, XLAT("Different kills required: %1.\n", its(R20))))
|
||||
|
||||
LAND( 0xD04000, "Kraken Depths", laKraken, ZERO | LF_SEA | LF_PURESEA, itKraken, RESERVED,
|
||||
"A long time ago, this was a trade route. But then, Krakens have risen out of the "
|
||||
"depths. Many trading ships sank here. Legend says that you can uncover the secret "
|
||||
@ -1184,56 +1365,147 @@ LAND( 0xD04000, "Kraken Depths", laKraken, ZERO | LF_SEA | LF_PURESEA, itKraken,
|
||||
"a Kraken. You will also need Orb of the Fish to get the treasures, luckily you can "
|
||||
"steal one from the Viking treasure hunters."
|
||||
)
|
||||
NATIVE(m == moKrakenH ? 2 : (m == moViking || m == moKrakenT) ? 1 : 0)
|
||||
REQ(ITEMS(itFjord, U10))
|
||||
|
||||
LAND( 0x804020, "Burial Grounds", laBurial, ZERO, itBarrow, RESERVED,
|
||||
"Ancient Viking heroes were buried here. Their graves have barrows raised over "
|
||||
"them, and are guarded by Draugar, animated corpses who are immune to mundane weapons. "
|
||||
"You will need to use a magical weapon spell to defeat them, and to rob the "
|
||||
"ancient jewelry buried in the graves."
|
||||
)
|
||||
NATIVE(m == moDraugr ? 1 : 0)
|
||||
REQ(ITEMS(itBarrow, U10))
|
||||
|
||||
LAND( 0x90A548, "Trollheim", laTrollheim, ZERO, itTrollEgg, RESERVED,
|
||||
"Many clans of Trolls spend their lives in this kingdom. You can find many "
|
||||
"statues of Trolls here. You suppose that they are not actually statues, but simply "
|
||||
"elderly Trolls, who have petrified upon death. Or maybe you have killed "
|
||||
"these Trolls yourself?"
|
||||
)
|
||||
NATIVE(isTroll(m) ? 1 : 0)
|
||||
REQ( KILL(moTroll, laCaves) KILL(moDarkTroll, laDeadCaves) KILL(moRedTroll, laRedRock) KILL(moStormTroll, laStorms) KILL(moForestTroll, laOvergrown) KILL(moFjordTroll, laLivefjord) )
|
||||
|
||||
LAND( 0xFF7518, "Halloween", laHalloween, ZERO, itTreat, RESERVED, halloweendesc)
|
||||
NATIVE((m == moGhost || m == moZombie || m == moWitch ||
|
||||
m == moLesser || m == moGreater ||
|
||||
m == moVampire || m == moDraugr ||
|
||||
m == moSkeleton || m == moWitchFire ||
|
||||
m == moFlailer || m == moPyroCultist ||
|
||||
m == moFatGuard || m == moHedge ||
|
||||
m == moLancer || m == moFireFairy ||
|
||||
m == moBomberbird || m == moRatlingAvenger ||
|
||||
m == moVineBeast || m == moDragonHead || m == moDragonTail) ? 1 : 0)
|
||||
REQ( NEVER )
|
||||
|
||||
LAND( 0x605040, "Dungeon", laDungeon, ZERO | LF_GRAVITY | LF_EQUI, itSlime, RESERVED,
|
||||
"The result of a collaboration of the Great Vizier and the Wizard of the Ivory Tower."
|
||||
)
|
||||
NATIVE(m == moBat ? 2 : m == moSkeleton || m == moGhost ? 1 : 0)
|
||||
REQ(ITEMS(itPalace, U5) ITEMS(itIvory, U5))
|
||||
|
||||
LAND( 0x603000, "Lost Mountain", laMountain, ZERO | LF_GRAVITY | LF_CYCLIC, itAmethyst, RESERVED,
|
||||
"Gravitational anomalies in the Jungle create mountains "
|
||||
"overgrown with ivies and bushes. "
|
||||
"Will you dare to climb the ivies to get the amethysts hidden above?\n\n"
|
||||
"Cells adjacent to Ivies count as stable (but Ivies "
|
||||
"cannot climb themselves or other Ivies).")
|
||||
NATIVE(m == moEagle || m == moMonkey || isIvy(m) || m == moFriendlyIvy ? 1 : 0)
|
||||
REQ(ITEMS(itRuby, U5) ITEMS(itIvory, U5) ACCONLY(laJungle))
|
||||
|
||||
LAND( 0xFFFF00, "Reptiles", laReptile, ZERO, itDodeca, RESERVED, reptiledesc)
|
||||
NATIVE(m == moReptile ? 1 : 0)
|
||||
REQ(GOLD(R30) ITEMS(itElixir, U10))
|
||||
|
||||
LAND( 0x0000D0, "Prairie", laPrairie, ZERO, itGreenGrass, RESERVED, prairiedesc)
|
||||
NATIVE((m == moRagingBull || m == moHerdBull || m == moGadfly) ? 1 : 0)
|
||||
REQ(GOLD(R90))
|
||||
|
||||
LAND( 0x800080, "Bull Dash", laBull, ZERO, itBull, RESERVED, bulldashdesc)
|
||||
NATIVE((m == moSleepBull || m == moRagingBull || m == moButterfly || m == moGadfly) ? 1 : 0)
|
||||
REQ(GOLD(R90))
|
||||
|
||||
LAND( 0xC000C0, "Crossroads V", laCrossroads5, ZERO, itHyperstone, RESERVED, "Extremely narrow Crossroads layout.\n")
|
||||
NATIVE(0)
|
||||
REQ(GOLD(R300))
|
||||
|
||||
LAND( 0xC0C0C0, "Cellular Automaton", laCA, ZERO | LF_TECHNICAL, itNone, RESERVED, cadesc)
|
||||
NATIVE(0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0xC0C0FF, "Mirror Wall", laMirrorWall, ZERO | LF_TECHNICAL | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc)
|
||||
NATIVE(isNative(laMirror, m))
|
||||
|
||||
LAND( 0xC8C8FF, "Reflection", laMirrored, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc)
|
||||
NATIVE(isNative(laMirror, m))
|
||||
REQAS(laMirror,)
|
||||
|
||||
LAND( 0xC0C0FF, "Reflection", laMirrorWall2, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc)
|
||||
NATIVE(isNative(laMirror, m))
|
||||
REQAS(laMirror,)
|
||||
|
||||
LAND( 0xC8C8FF, "Reflection", laMirrored2, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc)
|
||||
NATIVE(isNative(laMirror, m))
|
||||
REQAS(laMirror,)
|
||||
|
||||
LAND( 0xC8C8FF, "Mirror Land", laMirrorOld, ZERO | LF_MIRROR, itShard, RESERVED,
|
||||
"A strange land which contains mirrors and mirages, protected by Mirror Rangers.")
|
||||
NATIVE((m == moEagle || m == moRanger || m == moMimic) ? 1 : 0)
|
||||
REQ(GOLD(R30))
|
||||
|
||||
LAND( 0xA06000, "Volcanic Wasteland", laVolcano, ZERO, itLavaLily, RESERVED, lavadesc)
|
||||
NATIVE((m == moLavaWolf || m == moSalamander) ? 2 : 0)
|
||||
REQ(GOLD(R60) ITEMS(itElixir, U10))
|
||||
|
||||
LAND( 0x8080FF, "Blizzard", laBlizzard, ZERO | LF_ICY, itBlizzard, RESERVED, blizzarddesc)
|
||||
NATIVE((m == moVoidBeast || m == moIceGolem) ? 2 : 0)
|
||||
REQ(ITEMS(itDiamond, U5) ITEMS(itWindstone, U5))
|
||||
|
||||
LAND( 0x207068, "Hunting Ground", laHunting, ZERO, itHunting, RESERVED, huntingdesc)
|
||||
NATIVE(m == moHunterDog ? 1 : 0)
|
||||
REQ(ALWAYS)
|
||||
|
||||
LAND( 0xE2725B, "Terracotta Army", laTerracotta, ZERO, itTerra, RESERVED, terraldesc)
|
||||
NATIVE(m == moJiangshi ? 2 : m == moTerraWarrior ? 1 : 0)
|
||||
REQ(GOLD(R90))
|
||||
|
||||
LAND( 0xE2725B, "Terracotta Army", laMercuryRiver, ZERO | LF_TECHNICAL, itTerra, RESERVED, terraldesc)
|
||||
NATIVE(isNative(laTerracotta, m))
|
||||
REQAS(laTerracotta,)
|
||||
|
||||
LAND( 0x80FF00, "Crystal World", laDual, ZERO, itGlowCrystal, RESERVED, crystaldesc)
|
||||
NATIVE(m == moRatling ? 2 : 0)
|
||||
REQ(GOLD(R90))
|
||||
|
||||
LAND( 0x306030, "Snake Nest", laSnakeNest, ZERO, itSnake, RESERVED, NODESCYET)
|
||||
NATIVE(m == moHexSnake ? 2 : 0)
|
||||
REQ(GOLD(R90))
|
||||
|
||||
LAND( 0x80FF00, "Docks", laDocks, ZERO | LF_SEA, itDock, RESERVED, NODESCYET)
|
||||
NATIVE(among(m, moRatling, moPirate, moCShark, moAlbatross, moFireFairy) ? 2 : 0)
|
||||
REQAS(laOcean,)
|
||||
|
||||
LAND( 0x306030, "Ruined City", laRuins, ZERO, itRuins, RESERVED, ruindesc)
|
||||
NATIVE(m == moSwitch1 || m == moSwitch2 ? 2 : 0)
|
||||
REQ(KILL(moSkeleton, laPalace))
|
||||
|
||||
LAND( 0x306030, "Magnetosphere", laMagnetic, ZERO, itMagnet, RESERVED, NODESCYET)
|
||||
NATIVE(isMagneticPole(m) ? 2 : 0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0x306030, "Jelly Kingdom", laSwitch, ZERO, itSwitch, RESERVED, jellydesc)
|
||||
NATIVE(m == moSwitch1 || m == moSwitch2 ? 2 : 0)
|
||||
REQ(GOLD(R30) ITEMS(itElixir, U10))
|
||||
|
||||
LAND( 0xFF00FF, "Lost Memory", laMemory, ZERO | LF_TECHNICAL, itNone, RESERVED,
|
||||
"Because of the properties of hyperbolic geometry, it is extremely unlikely to randomly "
|
||||
"get back to a faraway place you have been to. However, you have managed to get there "
|
||||
"somehow. In the meantime, its memory has been cleared, since the 'remove faraway cells from the memory'"
|
||||
" option was on."
|
||||
)
|
||||
NATIVE(0)
|
||||
REQ(NEVER)
|
||||
|
||||
LAND( 0x804000, "Brown Island", laBrownian, ZERO | LF_PURESEA, itBrownian, RESERVED,
|
||||
"The Brown Islands have been generated by ancient underground creatures, who moved randomly and raised lands in their path... "
|
||||
"adults spawned larvae in each move, which also moved randomly and also raised lands in their path, and eventually became adults and spawned their own larvae. "
|
||||
@ -1243,10 +1515,16 @@ LAND( 0x804000, "Brown Island", laBrownian, ZERO | LF_PURESEA, itBrownian, RESER
|
||||
"or to lose three levels, in a single move, (attacks are possible at any "
|
||||
"difference, though). Killed Bronze Beasts rise the land by one level."
|
||||
)
|
||||
NATIVE(among(m, moBrownBug, moAcidBird) ? 2 : 0)
|
||||
REQAS(laOcean,)
|
||||
|
||||
LAND( 0x211F6F, "Free Fall", laWestWall, ZERO | LF_GRAVITY | LF_EQUI, itWest, RESERVED,
|
||||
"What on one side looks to be a normal (well, infinite) horizontal wall, on to the other side turns out to be the vertical wall"
|
||||
" of an infinitely high tower. Jump from the window, and let the magical gravity carry you..."
|
||||
)
|
||||
NATIVE(among(m, moWestHawk, moFallingDog) ? 2 : 0)
|
||||
REQ(ITEMS(itFeather, 5) ITEMS(itIvory, 5))
|
||||
|
||||
LAND( 0x30FF30, "Irradiated Field", laVariant, ZERO, itVarTreasure, RESERVED,
|
||||
"These fields are ravaged with many kinds of magical radiation, which not only make the ground glow nicely in various colors, "
|
||||
"but also cause the inhabitants to protect the treasures of their land in various ways. In some areas of the Irradiated Fields, "
|
||||
@ -1254,12 +1532,21 @@ LAND( 0x30FF30, "Irradiated Field", laVariant, ZERO, itVarTreasure, RESERVED,
|
||||
"careless, or help you if you know how to use them to your advantage. Will you walk through the Irradiated Fields randomly, or "
|
||||
"try to find areas where treasures are common but nasty monsters are not, and keep to them? It is your choice!\n\n"
|
||||
)
|
||||
NATIVE(
|
||||
m == moVariantWarrior ? 2 :
|
||||
among(m, moMonk, moCrusher, moSkeleton, moHedge, moLancer, moFlailer, moCultist, moPyroCultist, moNecromancer, moGhost, moZombie, moRatling) ? 1 :
|
||||
isIvy(m) ? 1 : 0)
|
||||
#define LST {itRuins, itEmerald, itBone}
|
||||
REQ(ITEMS_TOTAL(LST, variant_unlock_value()))
|
||||
#undef LST
|
||||
|
||||
// add new content here
|
||||
|
||||
LAND( 0x202020, "Space Rocks", laAsteroids, ZERO, itAsteroid, RESERVED, rock_description)
|
||||
ITEM( '!', 0xFFD0D0, "Fuel", itAsteroid, IC_TREASURE, ZERO, RESERVED, osNone, rock_description)
|
||||
MONSTER('A', 0x606040, "Space Rock", moAsteroid, ZERO, RESERVED, moAsteroid, rock_description)
|
||||
NATIVE(m == moAsteroid ? 2 : 0)
|
||||
REQ( NEVER )
|
||||
|
||||
//shmupspecials
|
||||
MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, ZERO | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.")
|
||||
@ -1284,4 +1571,21 @@ MONSTER( '*', 0, "vertex", moRogueviz, ZERO | CF_TECHNICAL, RESERVED, moN
|
||||
#undef LAND
|
||||
#undef WALL
|
||||
#undef ITEM
|
||||
#undef NATIVE
|
||||
#undef REQ
|
||||
#undef REQAS
|
||||
|
||||
#undef GOLD
|
||||
#undef ITEMS
|
||||
#undef NEVER
|
||||
#undef ALWAYS
|
||||
#undef KILLS
|
||||
#undef KILL
|
||||
#undef AKILL
|
||||
#undef ORD
|
||||
#undef NUMBER
|
||||
#undef COND
|
||||
#undef ITEMS_TOTAL
|
||||
#undef ACCONLY
|
||||
#undef ACCONLY2
|
||||
#undef ACCONLYF
|
||||
|
12
game.cpp
12
game.cpp
@ -2533,8 +2533,8 @@ bool attackMonster(cell *c, flagtype flags, eMonster killer) {
|
||||
c->stuntime = 2;
|
||||
}
|
||||
|
||||
bool eu = elementalUnlocked();
|
||||
bool tu = trollUnlocked();
|
||||
bool eu = landUnlocked(laElementalWall);
|
||||
bool tu = landUnlocked(laTrollheim);
|
||||
|
||||
if(flags & AF_MSG) fightmessage(m, killer, dostun, flags);
|
||||
if(dostun)
|
||||
@ -2573,12 +2573,12 @@ bool attackMonster(cell *c, flagtype flags, eMonster killer) {
|
||||
if(tk < R100 && ntk >= R100 && !euclid && !sphere)
|
||||
addMessage(XLAT("You feel that the souls of slain enemies pull you to the Graveyard..."));
|
||||
|
||||
if(!tu && trollUnlocked()) {
|
||||
if(!tu && landUnlocked(laTrollheim)) {
|
||||
playSound(c, "message-troll");
|
||||
addMessage(XLAT("%The1 says, \"I die, but my clan in Trollheim will avenge me!\"", m));
|
||||
}
|
||||
|
||||
if(!eu && elementalUnlocked())
|
||||
if(!eu && landUnlocked(laElementalWall))
|
||||
addMessage(XLAT("After killing %the1, you feel able to reach the Elemental Planes!", m));
|
||||
|
||||
if(m == moVizier && c->monst != moVizier && kills[moVizier] == 1) {
|
||||
@ -7063,7 +7063,7 @@ bool collectItem(cell *c2, bool telekinesis) {
|
||||
halloween::getTreat(c2);
|
||||
}
|
||||
else {
|
||||
bool lhu = hellUnlocked();
|
||||
bool lhu = landUnlocked(laHell);
|
||||
if(c2->item == itBarrow)
|
||||
for(int i=0; i<c2->landparam; i++) gainItem(c2->item);
|
||||
else if(c2->item) gainItem(c2->item);
|
||||
@ -7119,7 +7119,7 @@ bool collectItem(cell *c2, bool telekinesis) {
|
||||
addMessage(XLAT("Kill monsters and collect treasures, and you may get access to Hell..."));
|
||||
IF(R10 * 9)
|
||||
addMessage(XLAT("To access Hell, collect %1 treasures each of 9 kinds...", its(R10)));
|
||||
if(hellUnlocked() && !lhu) {
|
||||
if(landUnlocked(laHell) && !lhu) {
|
||||
addMessage(XLAT("Abandon all hope, the gates of Hell are opened!"));
|
||||
addMessage(XLAT("And the Orbs of Yendor await!"));
|
||||
}
|
||||
|
151
help.cpp
151
help.cpp
@ -561,6 +561,36 @@ string generateHelpForMonster(eMonster m) {
|
||||
return s;
|
||||
}
|
||||
|
||||
void add_reqs(eLand l, string& s) {
|
||||
back:
|
||||
|
||||
switch(l) {
|
||||
#define LAND(a,b,c,d,e,f,g) case c:
|
||||
#define REQ(x) x return;
|
||||
#define REQAS(x,y) y l = x; goto back;
|
||||
#define GOLD(x) NUMBER(gold(), x, XLAT("Treasure required: %1 $$$.\n", its(x)))
|
||||
#define KILL(who, where) NUMBER(kills[who], 1, XLAT("Kills required: %1 (%2).\n", who, where))
|
||||
#define ITEMS(kind, number) NUMBER(items[kind], number, XLAT("Treasure required: %1 x %2.\n", its(number), kind))
|
||||
#define NEVER ;
|
||||
#define ALWAYS s += XLAT("Always available.\n");
|
||||
#define KILLS(x) NUMBER(tkills(), x, XLAT("Kills required: %1.\n", its(x)))
|
||||
#define AKILL(who, where) s += XLAT("Alternatively: kill a %1 in %the2.\n", who, where); buteol(s, kills[who], 1);
|
||||
#define ORD(a, b) b a
|
||||
#define ALT(x) // if([&] { x return true; } ()) return true;
|
||||
#define NUMBER(val, required, description) s += description; buteol(s, val, required);
|
||||
#define COND(x,y) s += (y);
|
||||
#define ITEMS_TOTAL(list, z) \
|
||||
{ int now = 0; string t = ""; for(eItem i: list) { if(t!="") t += " + "; t += XLATN(iinf[i].name); now += items[i]; } s += XLAT("Treasure required: %1 x %2.\n", its(z), t); buteol(s, now, z); }
|
||||
#define ACCONLY(z) s += XLAT("Accessible only from %the1.\n", z);
|
||||
#define ACCONLY2(z,x) s += XLAT("Accessible only from %the1 or %the2.\n", z, x);
|
||||
#define ACCONLYF(z) s += XLAT("Accessible only from %the1 (until finished).\n", z);
|
||||
#include "content.cpp"
|
||||
|
||||
case landtypes: return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
string generateHelpForLand(eLand l) {
|
||||
string s = helptitle(XLATN(linf[l].name), linf[l].color);
|
||||
|
||||
@ -571,21 +601,8 @@ string generateHelpForLand(eLand l) {
|
||||
if(l == laMinefield) addMinefieldExplanation(s);
|
||||
|
||||
s += "\n\n";
|
||||
if(l == laIce || l == laCaves || l == laDesert || l == laMotion || l == laJungle ||
|
||||
l == laCrossroads || l == laAlchemist || l == laHunting)
|
||||
s += XLAT("Always available.\n");
|
||||
|
||||
#define ACCONLY(z) s += XLAT("Accessible only from %the1.\n", z);
|
||||
#define ACCONLY2(z,x) s += XLAT("Accessible only from %the1 or %the2.\n", z, x);
|
||||
#define ACCONLYF(z) s += XLAT("Accessible only from %the1 (until finished).\n", z);
|
||||
#define TREQ(z) { s += XLAT("Treasure required: %1 $$$.\n", its(z)); buteol(s, gold(), z); }
|
||||
#define TREQ2(z,x) { s += XLAT("Treasure required: %1 x %2.\n", its(z), x); buteol(s, items[x], z); }
|
||||
#define TREQ3(z,x) { int now = 0; string t = ""; for(eItem i: x) { if(t!="") t += " + "; t += XLATN(iinf[i].name); now += items[i]; } s += XLAT("Treasure required: %1 x %2.\n", its(z), t); buteol(s, now, z); }
|
||||
|
||||
if(l == laMirror || l == laMinefield || l == laPalace ||
|
||||
l == laOcean || l == laLivefjord || l == laZebra || l == laWarpCoast || l == laWarpSea ||
|
||||
l == laReptile || l == laIvoryTower || l == laSwitch)
|
||||
TREQ(R30)
|
||||
add_reqs(l, s);
|
||||
|
||||
if(l == laPower && inv::on)
|
||||
help += XLAT(
|
||||
@ -601,112 +618,6 @@ string generateHelpForLand(eLand l) {
|
||||
if(isPureSealand(l))
|
||||
s += XLAT("Aquatic region -- accessible only from coastal regions and other aquatic regions.\n");
|
||||
|
||||
if(l == laWhirlpool) ACCONLY(laOcean)
|
||||
if(l == laRlyeh) ACCONLYF(laOcean)
|
||||
if(l == laTemple) ACCONLY(laRlyeh)
|
||||
if(l == laClearing) ACCONLY(laOvergrown)
|
||||
if(l == laHaunted) ACCONLY(laGraveyard)
|
||||
if(l == laPrincessQuest) ACCONLY(laPalace)
|
||||
if(l == laMountain) ACCONLY(laJungle)
|
||||
if(l == laCamelot) ACCONLY2(laCrossroads, laCrossroads3)
|
||||
|
||||
if(l == laDryForest || l == laWineyard || l == laDeadCaves || l == laHive || l == laRedRock ||
|
||||
l == laOvergrown || l == laStorms || l == laWhirlwind ||
|
||||
l == laCrossroads2 || l == laRlyeh || l == laVolcano)
|
||||
TREQ(R60)
|
||||
|
||||
if(l == laReptile) TREQ2(U10, itElixir)
|
||||
if(l == laVolcano) TREQ2(U10, itElixir)
|
||||
if(l == laSwitch) TREQ2(U10, itElixir)
|
||||
|
||||
if(l == laEndorian) TREQ2(U10, itIvory)
|
||||
if(l == laKraken) TREQ2(U10, itFjord)
|
||||
if(l == laBurial) TREQ2(U10, itKraken)
|
||||
|
||||
if(l == laDungeon) TREQ2(U5, itIvory)
|
||||
if(l == laDungeon) TREQ2(U5, itPalace)
|
||||
if(l == laMountain) TREQ2(U5, itIvory)
|
||||
if(l == laMountain) TREQ2(U5, itRuby)
|
||||
|
||||
if(l == laBlizzard) TREQ2(U5, itDiamond)
|
||||
if(l == laBlizzard) TREQ2(U5, itWindstone)
|
||||
|
||||
if(l == laWestWall) TREQ2(U5, itIvory)
|
||||
if(l == laWestWall) TREQ2(U5, itFeather)
|
||||
|
||||
if(l == laBrownian) TREQ(R30)
|
||||
|
||||
if(l == laVariant) {
|
||||
const auto lst = vector<eItem>{itRuins, itEmerald, itBone};
|
||||
TREQ3(variant_unlock_value(), lst)
|
||||
}
|
||||
|
||||
if(l == laPrairie) TREQ(R90)
|
||||
if(l == laBull) TREQ(R90)
|
||||
if(l == laRose) TREQ(R90)
|
||||
if(l == laTerracotta) TREQ(R90)
|
||||
if(l == laCrossroads4) TREQ(R200)
|
||||
if(l == laCrossroads5) TREQ(R300)
|
||||
|
||||
if(l == laGraveyard || l == laHive) {
|
||||
s += XLAT("Kills required: %1.\n", "100");
|
||||
buteol(s, tkills(), R100);
|
||||
}
|
||||
|
||||
if(l == laDragon) {
|
||||
s += XLAT("Different kills required: %1.\n", "20");
|
||||
buteol(s, killtypes(), R20);
|
||||
}
|
||||
|
||||
if(l == laTortoise) ACCONLY(laDragon)
|
||||
if(l == laTortoise) s += XLAT("Find a %1 in %the2.", itBabyTortoise, laDragon);
|
||||
|
||||
if(l == laHell || l == laCrossroads3) {
|
||||
s += XLAT("Finished lands required: %1 (collect %2 treasure)\n", "9", its(R10));
|
||||
buteol(s, orbsUnlocked(), 9);
|
||||
}
|
||||
|
||||
if(l == laCocytus || l == laPower) TREQ2(U10, itHell)
|
||||
if(l == laRedRock) TREQ2(U10, itSpice)
|
||||
if(l == laOvergrown) TREQ2(U10, itRuby)
|
||||
if(l == laClearing) TREQ2(U5, itMutant)
|
||||
if(l == laCocytus) TREQ2(U10, itDiamond)
|
||||
if(l == laDeadCaves) TREQ2(U10, itGold)
|
||||
if(l == laTemple) TREQ2(U5, itStatue)
|
||||
if(l == laHaunted) TREQ2(U10, itBone)
|
||||
if(l == laCamelot) TREQ2(U5, itEmerald)
|
||||
if(l == laEmerald) {
|
||||
TREQ2(U5, itFernFlower) TREQ2(U5, itGold)
|
||||
s += XLAT("Alternatively: kill a %1 in %the2.\n", moVizier, laPalace);
|
||||
buteol(s, kills[moVizier], 1);
|
||||
}
|
||||
|
||||
#define KILLREQ(who, where) { s += XLAT("Kills required: %1 (%2).\n", who, where); buteol(s, kills[who], 1); }
|
||||
|
||||
if(l == laPrincessQuest)
|
||||
KILLREQ(moVizier, laPalace);
|
||||
|
||||
if(l == laElementalWall) {
|
||||
KILLREQ(moFireElemental, laDragon);
|
||||
KILLREQ(moEarthElemental, laDeadCaves);
|
||||
KILLREQ(moWaterElemental, laLivefjord);
|
||||
KILLREQ(moAirElemental, laWhirlwind);
|
||||
}
|
||||
|
||||
if(l == laRuins)
|
||||
KILLREQ(moSkeleton, laPalace);
|
||||
|
||||
if(l == laTrollheim) {
|
||||
KILLREQ(moTroll, laCaves);
|
||||
KILLREQ(moFjordTroll, laLivefjord);
|
||||
KILLREQ(moDarkTroll, laDeadCaves);
|
||||
KILLREQ(moStormTroll, laStorms);
|
||||
KILLREQ(moForestTroll, laOvergrown);
|
||||
KILLREQ(moRedTroll, laRedRock);
|
||||
}
|
||||
|
||||
if(l == laZebra) TREQ2(U10, itFeather)
|
||||
|
||||
if(l == laCamelot || l == laPrincessQuest)
|
||||
s += XLAT("Completing the quest in this land is not necessary for the Hyperstone Quest.");
|
||||
|
||||
|
3
hyper.h
3
hyper.h
@ -775,8 +775,6 @@ void moveMonster(cell *ct, cell *cf, int direction_hint);
|
||||
int palaceHP();
|
||||
void placeLocalOrbs(cell *c);
|
||||
int elementalKills();
|
||||
bool elementalUnlocked();
|
||||
bool trollUnlocked();
|
||||
bool isMultitile(eMonster m);
|
||||
void checkFreedom(cell *cf);
|
||||
int rosedist(cell *c);
|
||||
@ -1601,7 +1599,6 @@ static const int NO_LOVE = 8;
|
||||
|
||||
int gold(int no = 0);
|
||||
int tkills();
|
||||
bool hellUnlocked();
|
||||
|
||||
bool markOrb(eItem it); // mark the orb as 'used', return true if exists
|
||||
bool markEmpathy(eItem it); // mark both the given orb and Empathy as 'used', return true if exists
|
||||
|
422
landlock.cpp
422
landlock.cpp
@ -17,228 +17,9 @@ bool nodisplay(eMonster m) {
|
||||
// returns: 2 = treasure increaser, 1 = just appears, 0 = does not appear
|
||||
int isNative(eLand l, eMonster m) {
|
||||
switch(l) {
|
||||
case laIce:
|
||||
return (m == moWolf || m == moWolfMoved || m == moYeti) ? 2 : 0;
|
||||
|
||||
case laJungle:
|
||||
return (m == moIvyRoot || m == moMonkey) ? 2 :
|
||||
(isIvy(m) || m == moEagle || m == moMonkey) ? 1 : 0;
|
||||
|
||||
case laCaves:
|
||||
return (m == moGoblin || m == moTroll) ? 2 : m == moSeep ? 1 : 0;
|
||||
|
||||
case laDesert:
|
||||
return (m == moDesertman || m == moWorm) ? 2 : 0;
|
||||
|
||||
case laAlchemist:
|
||||
return (m == moSlime) ? 2 : 0;
|
||||
|
||||
case laMirror: case laMirrored: case laMirrorWall: case laMirrorWall2: case laMirrored2:
|
||||
return (m == moMirrorSpirit || m == moNarciss || m == moMimic) ? 1 : 0;
|
||||
|
||||
case laMirrorOld:
|
||||
return (m == moEagle || m == moRanger || m == moMimic) ? 1 : 0;
|
||||
|
||||
case laMotion:
|
||||
return (m == moRunDog) ? 2 : 0;
|
||||
|
||||
case laGraveyard:
|
||||
return (m == moZombie || m == moNecromancer) ? 2 :
|
||||
m == moGhost ? 1 : 0;
|
||||
|
||||
case laRlyeh:
|
||||
return
|
||||
(m == moCultist || m == moTentacle || m == moPyroCultist) ? 2 :
|
||||
(m == moCultistLeader || isIvy(m)) ? 1 : 0;
|
||||
|
||||
case laDryForest:
|
||||
return (m == moHedge || m == moFireFairy) ? 2 : 0;
|
||||
|
||||
case laHell:
|
||||
return (m == moLesser || m == moGreater) ? 2 : 0;
|
||||
|
||||
case laCocytus:
|
||||
return (m == moShark || m == moGreaterShark || m == moCrystalSage) ? 2 :
|
||||
m == moYeti ? 1 : 0;
|
||||
|
||||
case laCrossroads: case laCrossroads2: case laCrossroads3: case laCrossroads4:
|
||||
case laCrossroads5:
|
||||
case laNone: case laBarrier: case laOceanWall: case laCanvas: case laMemory:
|
||||
return 0;
|
||||
|
||||
case laEmerald:
|
||||
return (m == moFlailer || m == moLancer || m == moMiner) ? 2 :
|
||||
m == moHedge ? 1 : 0;
|
||||
|
||||
case laWineyard:
|
||||
return (m == moVineSpirit || m == moVineBeast) ? 2 : 0;
|
||||
|
||||
case laHive:
|
||||
return isBug(m) ? 1 : 0;
|
||||
|
||||
case laDeadCaves:
|
||||
return (m == moEarthElemental || m == moDarkTroll) ? 2 :
|
||||
(m == moGoblin || m == moSeep) ? 1 : 0;
|
||||
|
||||
case laPower:
|
||||
return (isWitch(m) || m == moEvilGolem) ? 1 : 0;
|
||||
|
||||
case laCamelot:
|
||||
return (m == moKnight || m == moHedge || m == moFlailer || m == moLancer) ? 1 : 0;
|
||||
|
||||
case laTemple:
|
||||
return (m == moTentacle || m == moCultist || m == moPyroCultist || m == moCultistLeader) ? 1 : 0;
|
||||
|
||||
case laCaribbean:
|
||||
return (m == moPirate || m == moParrot || m == moCShark) ? 1 : 0;
|
||||
|
||||
case laRedRock: return (m == moRedTroll || m == moHexSnake) ? 2 : 0;
|
||||
|
||||
case laMinefield:
|
||||
return (m == moBomberbird || m == moTameBomberbird) ? 1 : 0;
|
||||
|
||||
case laOcean:
|
||||
return (m == moAlbatross) ? 2 : (m == moPirate || m == moCShark) ? 1 : 0;
|
||||
|
||||
case laWhirlpool:
|
||||
return (m == moPirate || m == moCShark) ? 1 : 0;
|
||||
|
||||
case laPalace: case laPrincessQuest:
|
||||
return (m == moPalace || m == moFatGuard || m == moSkeleton || m == moVizier) ? 2 :
|
||||
m == moSkeleton ? 1 : 0;
|
||||
|
||||
case laLivefjord:
|
||||
return m == moViking ? 2 : (m == moFjordTroll || m == moWaterElemental) ? 1 : 0;
|
||||
|
||||
case laIvoryTower:
|
||||
return (m == moFamiliar || m == moGargoyle) ? 2 : 0;
|
||||
|
||||
case laZebra: return (m == moOrangeDog) ? 2 : 0;
|
||||
|
||||
case laEAir: case laEEarth: case laEWater: case laEFire:
|
||||
case laElementalWall:
|
||||
if(m == elementalOf(l) && m) return 2;
|
||||
return (m == moAirElemental || m == moEarthElemental || m == moWaterElemental || m == moFireElemental) ? 1 : 0;
|
||||
|
||||
case laStorms:
|
||||
return (m == moMetalBeast || m == moMetalBeast2 || m == moStormTroll) ? 1 : 0;
|
||||
|
||||
case laOvergrown:
|
||||
return (m == moMutant || m == moForestTroll) ? 1 : 0;
|
||||
|
||||
case laWildWest:
|
||||
return (m == moOutlaw) ? 2 : 0;
|
||||
|
||||
case laHalloween:
|
||||
return (m == moGhost || m == moZombie || m == moWitch ||
|
||||
m == moLesser || m == moGreater ||
|
||||
m == moVampire || m == moDraugr ||
|
||||
m == moSkeleton || m == moWitchFire ||
|
||||
m == moFlailer || m == moPyroCultist ||
|
||||
m == moFatGuard || m == moHedge ||
|
||||
m == moLancer || m == moFireFairy ||
|
||||
m == moBomberbird || m == moRatlingAvenger ||
|
||||
m == moVineBeast || m == moDragonHead || m == moDragonTail) ? 1 : 0;
|
||||
|
||||
case laClearing:
|
||||
return (m == moMutant || m == moRedFox) ? 1 : 0;
|
||||
|
||||
case laHaunted: case laHauntedWall: case laHauntedBorder:
|
||||
return (m == moGhost || m == moFriendlyGhost) ? 1 : 0;
|
||||
|
||||
case laWhirlwind:
|
||||
return (m == moAirElemental || m == moWindCrow) ? 2 : 0;
|
||||
|
||||
case laRose:
|
||||
return (m == moFalsePrincess || m == moRoseBeauty || m == moRoseLady) ? 2 : 0;
|
||||
|
||||
case laWarpCoast: case laWarpSea:
|
||||
return m == moRatling ? 2 : m == moRatlingAvenger ? 1 : 0;
|
||||
|
||||
case laDragon:
|
||||
return (isDragon(m) || m == moFireElemental) ? 1 : 0;
|
||||
|
||||
case laEndorian:
|
||||
return (m == moResearcher || m == moSparrowhawk) ? 2 : 0;
|
||||
|
||||
case laTortoise:
|
||||
return m == moTortoise ? 1 : 0;
|
||||
|
||||
case laTrollheim:
|
||||
return isTroll(m) ? 1 : 0;
|
||||
|
||||
case laKraken:
|
||||
return m == moKrakenH ? 2 : (m == moViking || m == moKrakenT) ? 1 : 0;
|
||||
|
||||
case laBurial:
|
||||
return m == moDraugr ? 1 : 0;
|
||||
|
||||
case laDungeon:
|
||||
return
|
||||
m == moBat ? 2 :
|
||||
m == moSkeleton || m == moGhost ? 1 :
|
||||
0;
|
||||
|
||||
case laMountain:
|
||||
return
|
||||
m == moEagle || m == moMonkey || isIvy(m) || m == moFriendlyIvy ? 1 : 0;
|
||||
|
||||
case laReptile:
|
||||
return m == moReptile ? 1 : 0;
|
||||
|
||||
case laBull:
|
||||
return (m == moSleepBull || m == moRagingBull || m == moButterfly || m == moGadfly) ? 1 : 0;
|
||||
|
||||
case laPrairie:
|
||||
return (m == moRagingBull || m == moHerdBull || m == moGadfly) ? 1 : 0;
|
||||
|
||||
case laVolcano:
|
||||
return (m == moLavaWolf || m == moSalamander) ? 2 : 0;
|
||||
|
||||
case laTerracotta: case laMercuryRiver:
|
||||
return m == moJiangshi ? 2 : m == moTerraWarrior ? 1 : 0;
|
||||
|
||||
case laBlizzard:
|
||||
return (m == moVoidBeast || m == moIceGolem) ? 2 : 0;
|
||||
|
||||
case laHunting:
|
||||
return m == moHunterDog ? 1 : 0;
|
||||
|
||||
case laDual:
|
||||
return m == moRatling ? 2 : 0;
|
||||
|
||||
case laSnakeNest:
|
||||
return m == moHexSnake ? 2 : 0;
|
||||
|
||||
case laCA: return 0;
|
||||
|
||||
case laDocks:
|
||||
return among(m, moRatling, moPirate, moCShark, moAlbatross, moFireFairy) ? 2 : 0;
|
||||
|
||||
case laSwitch:
|
||||
return m == moSwitch1 || m == moSwitch2 ? 2 : 0;
|
||||
|
||||
case laRuins:
|
||||
return among(m, moPair, moHexDemon, moAltDemon, moMonk, moCrusher) ? 2 :
|
||||
m == moSkeleton ? 1 : 0;
|
||||
|
||||
case laVariant:
|
||||
return
|
||||
m == moVariantWarrior ? 2 :
|
||||
among(m, moMonk, moCrusher, moSkeleton, moHedge, moLancer, moFlailer, moCultist, moPyroCultist, moNecromancer, moGhost, moZombie, moRatling) ? 1 :
|
||||
isIvy(m) ? 1 : 0;
|
||||
|
||||
case laWestWall:
|
||||
return among(m, moWestHawk, moFallingDog) ? 2 : 0;
|
||||
|
||||
case laBrownian:
|
||||
return among(m, moBrownBug, moAcidBird) ? 2 : 0;
|
||||
|
||||
case laMagnetic:
|
||||
return isMagneticPole(m) ? 2 : 0;
|
||||
|
||||
case laAsteroids:
|
||||
return m == moAsteroid ? 2 : 0;
|
||||
#define LAND(a,b,c,d,e,f,g) case c:
|
||||
#define NATIVE(x) return x;
|
||||
#include "content.cpp"
|
||||
|
||||
case landtypes: return 0;
|
||||
}
|
||||
@ -299,10 +80,6 @@ bool landUnlockedRPM(eLand n) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int variant_unlock() {
|
||||
return items[itRuins] + items[itEmerald] + items[itBone];
|
||||
}
|
||||
|
||||
int variant_unlock_value() {
|
||||
return inv::on ? 75 : 30;
|
||||
}
|
||||
@ -312,161 +89,29 @@ bool landUnlocked(eLand l) {
|
||||
return landUnlockedRPM(l);
|
||||
}
|
||||
|
||||
back:
|
||||
|
||||
switch(l) {
|
||||
case laOvergrown:
|
||||
return gold() >= R60 && items[itRuby] >= U10;
|
||||
#define LAND(a,b,c,d,e,f,g) case c:
|
||||
#define REQ(x) x return true;
|
||||
#define REQAS(x,y) l = x; goto back;
|
||||
#define GOLD(x) if(gold() < x) return false;
|
||||
#define ITEMS(kind, number) if(items[kind] < number) return false;
|
||||
#define NEVER if(1) return false;
|
||||
#define ALWAYS ;
|
||||
#define KILLS(x) if(tkills() < x) return false;
|
||||
#define KILL(x, where) if(!kills[x]) return false;
|
||||
#define AKILL(x, where) if(kills[x]) return true;
|
||||
#define ORD(a, b) a b
|
||||
#define NUMBER(val, required, description) if(val < required) return false;
|
||||
#define COND(x,y) if(!(x)) return false;
|
||||
#define ITEMS_TOTAL(list, z) { int total = 0; for(eItem x: list) total += items[x]; if(total < z) return false; }
|
||||
#define ACCONLY(x)
|
||||
#define ACCONLY2(x,y)
|
||||
#define ACCONLYF(x)
|
||||
#include "content.cpp"
|
||||
|
||||
case laStorms: case laWhirlwind:
|
||||
return gold() >= R60;
|
||||
|
||||
case laWildWest: case laHalloween: case laAsteroids:
|
||||
return false;
|
||||
|
||||
case laIce: case laJungle: case laCaves: case laDesert:
|
||||
case laMotion: case laCrossroads: case laAlchemist:
|
||||
return true;
|
||||
|
||||
case laMirror: case laMinefield: case laPalace:
|
||||
case laOcean: case laLivefjord: case laMirrored: case laMirrorWall: case laMirrorWall2:
|
||||
case laDocks:
|
||||
case laMirrored2:
|
||||
return gold() >= R30;
|
||||
|
||||
case laCaribbean: case laWhirlpool:
|
||||
return gold() >= R30;
|
||||
|
||||
case laRlyeh: case laDryForest: case laWineyard: case laCrossroads2:
|
||||
return gold() >= R60;
|
||||
|
||||
case laDeadCaves:
|
||||
return gold() >= R60 && items[itGold] >= U10;
|
||||
|
||||
case laGraveyard:
|
||||
return tkills() >= R100;
|
||||
|
||||
case laHive:
|
||||
return tkills() >= R100 && gold() >= R60;
|
||||
|
||||
case laRedRock:
|
||||
return gold() >= R60 && items[itSpice] >= U10;
|
||||
|
||||
case laEmerald:
|
||||
return (items[itFernFlower] >= U5 && items[itGold] >= U5) || kills[moVizier];
|
||||
|
||||
case laCamelot:
|
||||
return items[itEmerald] >= U5;
|
||||
|
||||
case laHell: case laCrossroads3:
|
||||
return hellUnlocked();
|
||||
|
||||
case laPower:
|
||||
return items[itHell] >= U10;
|
||||
|
||||
case laCocytus:
|
||||
return items[itHell] >= U10 && items[itDiamond] >= U10;
|
||||
|
||||
case laTemple:
|
||||
return items[itStatue] >= U5;
|
||||
|
||||
case laClearing:
|
||||
return items[itMutant] >= U5;
|
||||
|
||||
case laIvoryTower: return gold() >= R30;
|
||||
case laZebra: return gold() >= R30 && items[itFeather] >= U10;
|
||||
|
||||
case laEAir: case laEEarth: case laEWater: case laEFire: case laElementalWall:
|
||||
return elementalUnlocked();
|
||||
|
||||
case laBarrier: case laNone: case laOceanWall: case laCanvas: case laCA: case laMemory:
|
||||
return false;
|
||||
|
||||
case laMirrorOld:
|
||||
return false;
|
||||
|
||||
case laHaunted: case laHauntedWall: case laHauntedBorder:
|
||||
return items[itBone] >= U10;
|
||||
|
||||
case laPrincessQuest: return kills[moVizier] && !shmup::on && multi::players == 1;
|
||||
|
||||
case laRose:
|
||||
return gold() >= R90;
|
||||
|
||||
case laWarpCoast: case laWarpSea:
|
||||
return gold() >= R30;
|
||||
|
||||
case laCrossroads4:
|
||||
return gold() >= R200;
|
||||
|
||||
case laEndorian:
|
||||
return items[itIvory] >= U10;
|
||||
|
||||
case laTortoise:
|
||||
return tortoise::seek();
|
||||
|
||||
case laDragon:
|
||||
return killtypes() >= R20;
|
||||
|
||||
case laKraken:
|
||||
return items[itFjord] >= U10;
|
||||
|
||||
case laBurial:
|
||||
return items[itKraken] >= U10;
|
||||
|
||||
case laTrollheim:
|
||||
return trollUnlocked();
|
||||
|
||||
case laDungeon:
|
||||
return items[itPalace] >= U5 && items[itIvory] >= U5;
|
||||
|
||||
case laMountain:
|
||||
return items[itRuby] >= U5 && items[itIvory] >= U5;
|
||||
|
||||
case laReptile:
|
||||
return gold() >= R30 && items[itElixir] >= U10;
|
||||
|
||||
case laPrairie:
|
||||
case laBull:
|
||||
return gold() >= R90;
|
||||
|
||||
case laVolcano:
|
||||
return gold() >= R60 && items[itElixir] >= U10;
|
||||
|
||||
case laHunting:
|
||||
return true;
|
||||
|
||||
case laTerracotta: case laMercuryRiver:
|
||||
return gold() >= R90;
|
||||
|
||||
case laBlizzard:
|
||||
return items[itDiamond] >= U5 && items[itWindstone] >= U5;
|
||||
|
||||
case laCrossroads5:
|
||||
return gold() >= R300;
|
||||
|
||||
case laDual:
|
||||
case laSnakeNest:
|
||||
return gold() >= R90;
|
||||
|
||||
case laSwitch:
|
||||
return gold() >= R30 && items[itElixir] >= U10;
|
||||
|
||||
case laRuins:
|
||||
return kills[moSkeleton];
|
||||
|
||||
case laBrownian:
|
||||
return gold() >= R30;
|
||||
|
||||
case laWestWall:
|
||||
return items[itFeather] >= 5 && items[itIvory] >= 5;
|
||||
|
||||
case laVariant:
|
||||
return variant_unlock() >= variant_unlock_value();
|
||||
|
||||
case laMagnetic:
|
||||
return false; // not implemented
|
||||
|
||||
case landtypes:
|
||||
return false;
|
||||
case landtypes: return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -531,17 +176,6 @@ int elementalKills() {
|
||||
kills[moAirElemental] + kills[moWaterElemental] + kills[moEarthElemental] + kills[moFireElemental];
|
||||
}
|
||||
|
||||
bool elementalUnlocked() {
|
||||
return
|
||||
kills[moAirElemental] && kills[moWaterElemental] && kills[moEarthElemental] && kills[moFireElemental];
|
||||
}
|
||||
|
||||
bool trollUnlocked() {
|
||||
return
|
||||
kills[moTroll] && kills[moDarkTroll] && kills[moRedTroll] &&
|
||||
kills[moStormTroll] && kills[moForestTroll] && kills[moFjordTroll];
|
||||
}
|
||||
|
||||
eLand randomElementalLandWeighted() {
|
||||
int i = hrand(elementalKills());
|
||||
i -= kills[moAirElemental]; if(i<0) return laEAir;
|
||||
@ -804,7 +438,7 @@ eLand getNewLand(eLand old) {
|
||||
if(items[itIvory] >= U5 && !generatingEquidistant && items[itFeather] >= U5)
|
||||
tab[cnt++] = laWestWall;
|
||||
|
||||
if(variant_unlock() >= variant_unlock_value()) {
|
||||
if(landUnlocked(laVariant)) {
|
||||
tab[cnt++] = laVariant;
|
||||
if(old == laRuins) LIKELY tab[cnt++] = laVariant;
|
||||
if(old == laGraveyard) LIKELY tab[cnt++] = laVariant;
|
||||
@ -837,7 +471,7 @@ eLand getNewLand(eLand old) {
|
||||
if(old == laReptile) LIKELY tab[cnt++] = laDragon;
|
||||
}
|
||||
|
||||
if(trollUnlocked()) {
|
||||
if(landUnlocked(laTrollheim)) {
|
||||
tab[cnt++] = laTrollheim;
|
||||
if(isTrollLand(old)) LIKELY tab[cnt++] = laTrollheim;
|
||||
if(old == laTrollheim) for(int i=0; i<landtypes; i++) {
|
||||
@ -846,7 +480,7 @@ eLand getNewLand(eLand old) {
|
||||
}
|
||||
}
|
||||
|
||||
if(elementalUnlocked()) {
|
||||
if(landUnlocked(laElementalWall)) {
|
||||
tab[cnt++] = randomElementalLandWeighted();
|
||||
|
||||
if(old == laDragon) LIKELY tab[cnt++] = laEFire;
|
||||
@ -862,7 +496,7 @@ eLand getNewLand(eLand old) {
|
||||
if(old == laEAir) LIKELY tab[cnt++] = laWhirlwind;
|
||||
}
|
||||
|
||||
if(hellUnlocked()) {
|
||||
if(landUnlocked(laHell)) {
|
||||
if(!generatingEquidistant && old != laPrairie) tab[cnt++] = laCrossroads3;
|
||||
tab[cnt++] = laHell;
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ void showOverview() {
|
||||
mouseovers += " ";
|
||||
mouseovers += XLAT(" kills: %1/%2", its(tkills()), its(killtypes()));
|
||||
mouseovers += XLAT(" $$$: %1", its(gold()));
|
||||
if(hellUnlocked()) {
|
||||
if(landUnlocked(laHell)) {
|
||||
int i1, i2; countHyperstoneQuest(i1, i2);
|
||||
mouseovers += XLAT(" Hyperstone: %1/%2", its(i1), its(i2));
|
||||
}
|
||||
|
@ -360,10 +360,6 @@ int orbsUnlocked() {
|
||||
return i;
|
||||
}
|
||||
|
||||
bool hellUnlocked() {
|
||||
return orbsUnlocked() >= 9;
|
||||
}
|
||||
|
||||
ld orbprizefun(int tr) {
|
||||
if(tactic::on) return 1;
|
||||
if(tr < 10) return 0;
|
||||
|
4
quit.cpp
4
quit.cpp
@ -334,7 +334,7 @@ void showMission() {
|
||||
dialog::addInfo(XLAT("Collect %1 $$$ to access more worlds", its(R30)));
|
||||
else if(gold() < R60)
|
||||
dialog::addInfo(XLAT("Collect %1 $$$ to access even more lands", its(R60)));
|
||||
else if(!hellUnlocked())
|
||||
else if(!landUnlocked(laHell))
|
||||
dialog::addInfo(XLAT("Collect at least %1 treasures in each of 9 types to access Hell", its(R10)));
|
||||
else if(items[itHell] < R10)
|
||||
dialog::addInfo(XLAT("Collect at least %1 Demon Daisies to find the Orbs of Yendor", its(R10)));
|
||||
@ -363,7 +363,7 @@ void showMission() {
|
||||
dialog::addInfo(XLAT("Kill a Vizier in the Palace to access Emerald Mine"));
|
||||
else if(items[itEmerald] < U5)
|
||||
dialog::addInfo(XLAT("Collect 5 Emeralds to access Camelot"));
|
||||
else if(hellUnlocked() && !chaosmode) {
|
||||
else if(landUnlocked(laHell) && !chaosmode) {
|
||||
eLand l = nextHyperstone();
|
||||
if(l)
|
||||
dialog::addInfo(
|
||||
|
Loading…
Reference in New Issue
Block a user