diff --git a/content.cpp b/content.cpp new file mode 100644 index 00000000..caf3fcb8 --- /dev/null +++ b/content.cpp @@ -0,0 +1,1278 @@ +// Hyperbolic Rogue +// X-macros for items, monsters, walls, and lands +// add new content at 'add new content here' so that constants do not change +// old things are sorted according to type, but this is not necessary for new content +// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details + +#ifndef MONSTER +#define MONSTER(a,b,c,d,e,f,g,h) +#endif + +#ifndef WALL +#define WALL(a,b,c,d,e,f,g,h,i) +#endif + +#ifndef ITEM +#define ITEM(a,b,c,d,e,f,g,h,i) +#endif + +#ifndef LAND +#define LAND(a,b,c,d,e,f,g) +#endif + + +MONSTER( 0, 0, "no monster" , moNone, ZERO | MF_NOGHOST | MF_NOBLOW, RESERVED, moNone, NULL) +MONSTER( 'Y', 0x4040FF, "Yeti" , moYeti, ZERO, RESERVED, moYeti, + "A big and quite intelligent monster living in the Icy Land." + ) +MONSTER( 'W', 0xD08040, "Icewolf" , moWolf, ZERO, RESERVED, moYeti, + "A nasty predator from the Icy Land. Contrary to other monsters, " + "it tracks its prey by their heat." + ) +MONSTER( 'W', 0xD08040, "Icewolf" , moWolfMoved, ZERO, RESERVED, moNone, "") +MONSTER( 'R', 0xFF8000, "Ranger" , moRanger, ZERO, RESERVED, moYeti, + "Rangers take care of the magic mirrors in the Land of Mirrors. " + "They know that rogues like to break these mirrors... so " + "they will attack you!" + ) +MONSTER( 'T', 0xD0D0D0, "Rock Troll", moTroll, ZERO | MF_TROLL, RESERVED, moYeti, trollhelp) +MONSTER( 'G', 0x20D020, "Goblin", moGoblin, ZERO, RESERVED, moYeti, + "A nasty creature native to the Living Caves. They don't like you " + "for some reason." + ) +MONSTER( 'S', 0xE0E040, "Sand Worm", moWorm, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, wormdes ) +MONSTER( 's', 0x808000, "Sand Worm Tail", moWormtail, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, wormdes ) +MONSTER( 'S', 0x808000, "Sand Worm W", moWormwait, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, wormdes ) +MONSTER( 'H', 0x80FF00, "Hedgehog Warrior", moHedge, ZERO, RESERVED, moYeti, + "These warriors of the Forest wield exotic weapons called hedgehog blades. " + "These blades protect them from a frontal attack, but they still can be 'stabbed' " + "easily by moving from one place next to them to another." + ) +MONSTER( 'M', 0x806050, "Desert Man", moDesertman, ZERO, RESERVED, moYeti, + "A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.") +MONSTER( 'C', 0x00FFFF, "Ivy Root", moIvyRoot, ZERO | MF_NOGHOST | MF_NOBLOW | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'C', 0xFFFF00, "Active Ivy", moIvyHead, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'C', 0x40FF00, "Ivy Branch", moIvyBranch, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'C', 0x006030, "Dormant Ivy", moIvyWait, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_NOHIGHLIGHT | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'C', 0x804000, "Dead Ivy", moIvyNext, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_NOHIGHLIGHT | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'C', 0x800000, "Dead Ivy", moIvyDead, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_NOHIGHLIGHT | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_IVY, RESERVED, moNone, ivydes) +MONSTER( 'M', 0x804000, "Giant Ape", moMonkey, ZERO, RESERVED, moYeti, + "This giant ape thinks that you are an enemy.") +MONSTER( 'B', 0x909000, "Slime Beast", moSlime, ZERO | MF_NOBLOW | MF_SLIME | MF_IGNORE_SMELL, RESERVED, moSlime, slimehelp) +MONSTER( '@', 0xFF80FF, "Mimic", moMimic, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MIMIC | MF_NONLIVING | MF_FRIENDLY, RESERVED, moNone, + "A magical being which copies your movements. " + "You feel that it would be much more useful in an Euclidean space." + ) +MONSTER( '@', 0xFF8080, "Mirage (REMOVED)", moREMOVED, ZERO, RESERVED, moNone, + "A magical being which copies your movements. " + ) +MONSTER( '@', 0x509050, "Golem", moGolem, ZERO | MF_NOGHOST | MF_GOK | MF_NONLIVING | MF_FRIENDLY, RESERVED, moNone, + "You can summon these friendly constructs with a magical process." + ) +MONSTER( '@', 0x509050, "Golem", moGolemMoved, ZERO | MF_NOGHOST | MF_GOK | MF_NONLIVING | MF_FRIENDLY, RESERVED, moNone, + "You can summon these friendly constructs with a magical process." + ) +MONSTER( 'E', 0xD09050, "Eagle", moEagle, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "A majestic bird, who is able to fly very fast." + ) +MONSTER( 'S', 0xFF8080, "Seep", moSeep, ZERO | MF_NOBLOW | MF_SLIME | MF_IGNORE_SMELL, RESERVED, moSlime, + "A monster who is able to live inside the living cave wall." + ) +MONSTER( 'Z', 0x804000, "Zombie", moZombie, ZERO | MF_NONLIVING, RESERVED, moYeti, + "A typical Graveyard monster." + ) +MONSTER( 'G', 0xFFFFFF, "Ghost", moGhost, ZERO | MF_NOBLOW | MF_NONLIVING | MF_GHOST | MF_FLYING | MF_ATTACK_THRU_VINE | MF_ATTACK_NONADJACENT | MF_IGNORE_PLATE | MF_IGNORE_SMELL | MF_GHOSTMOVER, RESERVED, moGhost, + "A typical monster from the Graveyard, who moves through walls.\n\n" + "There are also wandering Ghosts. They will appear " + "if you do not explore any new places for a long time (about 100 turns). " + "They can appear anywhere in the game." + ) +MONSTER( 'N', 0x404040, "Necromancer", moNecromancer, ZERO, RESERVED, moYeti, + "Necromancers can raise ghosts and zombies from fresh graves." + ) +MONSTER( 'S', 0x404040, "Shadow", moShadow, ZERO | MF_NONLIVING, RESERVED, moNone, + "A creepy monster who follows you everywhere in the Graveyard." + ) +MONSTER( 'T', 0x40E040, "Tentacle", moTentacle, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, tentdes ) +MONSTER( 't', 0x008000, "Tentacle Tail", moTentacletail, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, tentdes ) +MONSTER( 'T', 0x008000, "Tentacle W", moTentaclewait, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, tentdes ) +MONSTER( 'z', 0xC00000, "Tentacle (withdrawing)", moTentacleEscaping, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, tentdes ) +MONSTER( 'P', 0xFF8000, "Cultist", moCultist, ZERO, RESERVED, moYeti, + "People worshipping Cthulhu. They are very dangerous." + ) +MONSTER( 'P', 0xFFFF00, "Fire Cultist", moPyroCultist, ZERO, RESERVED, moYeti, + "People worshipping Cthulhu. This one is especially dangerous, " + "as he is armed with a weapon which launches fire from afar." + ) +MONSTER( 'D', 0xFF0000, "Greater Demon", moGreater, ZERO | MF_DEMON | MF_SLOWMOVER, RESERVED, moYeti, gdemonhelp) +MONSTER( 'D', 0x800000, "Greater Demon", moGreaterM, ZERO | MF_DEMON, RESERVED, moLesser, gdemonhelp) +MONSTER( 'd', 0xFF2020, "Lesser Demon", moLesser, ZERO | MF_DEMON | MF_SLOWMOVER, RESERVED, moYeti, ldemonhelp) +MONSTER( 'd', 0x802020, "Lesser Demon", moLesserM, ZERO | MF_DEMON, RESERVED, moLesser, ldemonhelp) +MONSTER( 'S', 0x2070C0, "Ice Shark", moShark, ZERO | MF_SHARK, RESERVED, moShark, + "This dangerous predator has killed many people, and has been sent to Cocytus." + ) +MONSTER( 'W', 0xFFFFFF, "Running Dog", moRunDog, ZERO, RESERVED, moYeti, + "This white dog is able to run all the time. It is the only creature " + "able to survive and breed in the Land of Eternal Motion." + ) +MONSTER( 'S', 0xC00040, "Demon Shark", moGreaterShark, ZERO | MF_NOBLOW | MF_SHARK | MF_IGNORE_SMELL | MF_GHOSTMOVER, RESERVED, moGreaterShark, + "Demons of Hell do not drown when they fall into the lake in Cocytus. " + "They turn into demonic sharks, enveloped in a cloud of steam." + ) +MONSTER( 'S', 0xC00040, "Fire Fairy", moFireFairy, ZERO, RESERVED, moYeti, + "These fairies would rather burn the forest, than let you get some Fern Flowers. " + "The forest is infinite, after all...\n\n" + "Fire Fairies transform into fires when they die." + ) +MONSTER( 'C', 0x4000C0, "Crystal Sage", moCrystalSage, ZERO | MF_UNARMED, RESERVED, moYeti, + "This being radiates an aura of wisdom. " + "It is made of a beautiful crystal, you would love to take it home. " + "But how is it going to defend itself? Better not to think of it, " + "thinking causes your brain to go hot...\n\n" + "Crystal Sages melt at -30 °C, and they can rise the temperature around you from afar." + ) +MONSTER( 'P', 0x4040C0, "Pikeman", moLancer, ZERO, RESERVED, moYeti, + "When Pikemen move, they attack all cells which are now adjacent to them. " + "Luckily, they can be killed in the same way.\n\n" + "They never move if this would attack their friends." + ) +MONSTER( 'F', 0xC04040, "Flail Guard", moFlailer, ZERO, RESERVED, moYeti, + "This guard of the Emerald Mine is wielding a huge flail. " + "You cannot attack him directly, as the flail would still hit you then. " + "Luckily, you have learned a trick: if you step away from him, " + "he will hit himself with the flail!" + ) +MONSTER( 'M', 0x404040, "Miner", moMiner, ZERO, RESERVED, moYeti, + "Miners have special tools for dealing with the Living Cave. " + "When they die, these tools activate, destroying the living cave " + "around them." + ) +MONSTER( 'V', 0x421C52, "Vine Beast", moVineBeast, ZERO, RESERVED, moYeti, + "A beast made of vines!\n\n" + "Vine Beasts turn into vines when they die." + ) +MONSTER( 'V', 0xFFC0C0, "Vine Spirit", moVineSpirit, ZERO | MF_NOBLOW | MF_SLIME | MF_ATTACK_THRU_VINE | MF_IGNORE_SMELL, RESERVED, moSlime, + "A spirit living in the vines!\n\n" + "Vine Spirits destroy the vines when they die." + ) +MONSTER( 'T', 0x803030, "Dark Troll", moDarkTroll, ZERO | MF_TROLL, RESERVED, moYeti, + "A Troll without the power of Life." + ) +MONSTER( 'E', 0xFFFF40, "Earth Elemental", moEarthElemental, ZERO | MF_NONLIVING, RESERVED, moEarthElemental, + "A rare unliving construct from the Dead Caves. " + "It instantly destroys cave walls next to its path, and also leaves " + "an impassable wall behind it. You suppose that this impassable wall helps it to " + "escape from some threats. You hope you won't meet these threats..." + ) +MONSTER( 'B', 0xC04040, "Red Hyperbug", moBug0, ZERO | MF_BUG, RESERVED, moBug0, hivehelp) +MONSTER( 'B', 0x40C040, "Green Hyperbug", moBug1, ZERO | MF_BUG, RESERVED, moBug1, hivehelp) +MONSTER( 'B', 0x4040C0, "Blue Hyperbug", moBug2, ZERO | MF_BUG, RESERVED, moBug2, hivehelp) +MONSTER( 'W', 0x404040, "Witch Apprentice", moWitch, ZERO | MF_WITCH | MF_POWER, RESERVED, moYeti, + "A Witch without any special powers. But watch out! She will " + "pick up any basic Orbs on her path, and use their powers." + ) +MONSTER( 'W', 0xFF4040, "Speed Witch", moWitchSpeed, ZERO | MF_WITCH | MF_POWER, RESERVED, moYeti, + "A Witch with a Speed spell. She moves twice as fast as you. Unless you " + "have an Orb of Speed too, of course!" + ) +MONSTER( 'W', 0xFFFFFF, "Flash Witch", moWitchFlash, ZERO | MF_WITCH | MF_POWER, RESERVED, moYeti, + "A Witch with a Flash spell. Very dangerous!\n\n" + "Luckily, she never uses the spell if it would kill her friends. " + "She could destroy an Evil Golem, though." + ) +MONSTER( 'W', 0xFF8000, "Fire Witch", moWitchFire, ZERO | MF_WITCH | MF_POWER, RESERVED, moYeti, + "A Witch with a Fire spell. She will leave a trail of fire behind her." + ) +MONSTER( 'W', 0x8080FF, "Winter Witch", moWitchWinter, ZERO | MF_WITCH | MF_IGNORE_SMELL | MF_GHOSTMOVER | MF_POWER, RESERVED, moWitchWinter, + "A Witch with a Winter spell. She is able to move through fire." + ) +MONSTER( 'W', 0x808080, "Aether Witch", moWitchGhost, ZERO | MF_NOBLOW | MF_WITCH | MF_IGNORE_SMELL | MF_GHOSTMOVER | MF_POWER, RESERVED, moWitchGhost, + "A Witch with an Aether spell. She is able to move through fire and walls." + ) +MONSTER( '@', 0x905050, "Evil Golem", moEvilGolem, ZERO | MF_NONLIVING | MF_POWER, RESERVED, moYeti, + "Somebody has summoned these evil constructs with a magical process." + ) +MONSTER( '@', 0x8080FF, "Knight", moKnight, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY, RESERVED, moNone, camelothelp ) +MONSTER( 'P', 0xD10000, "Cult Leader", moCultistLeader, ZERO | MF_LEADER, RESERVED, moPirate, + "These Cultists can push the statues, just like you." + ) +MONSTER( 'B', 0x909000, "Slime Beast", moSlimeNextTurn, ZERO, RESERVED, moNone, slimehelp) +MONSTER( '@', 0x8080FF, "Knight", moKnightMoved, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY, RESERVED, moNone, camelothelp ) +MONSTER( '@', 0x8B4513, "Illusion", moIllusion, ZERO | MF_NOGHOST | MF_NONLIVING | MF_FRIENDLY | MF_IGNORE_PLATE, RESERVED, moNone, + "Illusions are targeted " + "by most monsters, just like yourself, Thumpers, and your friends." + ) +MONSTER( 'P', 0xD00000, "Pirate", moPirate, ZERO | MF_LEADER, RESERVED, moPirate, + "Just a typical hyperbolic pirate." ) +MONSTER( 'S', 0x8080C0, "Shark", moCShark, ZERO | MF_SHARK, RESERVED, moShark, "Just a nasty shark.") +MONSTER( 'P', 0x0000FF, "Parrot", moParrot, ZERO | MF_NOBLOW | MF_SLIME | MF_IGNORE_SMELL, RESERVED, moSlime, "Parrots feel safe in the forests of Caribbean, so they " + "never leave them. But they will help the Pirates by attacking the intruders.") +MONSTER( 'S', 0xE09000, "Rock Snake", moHexSnake, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_IGNORE_SMELL | MF_MULTITILE | MF_WORM, RESERVED, moNone, redsnakedes ) +MONSTER( 's', 0xE09000, "Rock Snake Tail", moHexSnakeTail, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MOUNTABLE | MF_MULTITILE | MF_WORM, RESERVED, moNone, redsnakedes ) +MONSTER( 'T', 0xC02020, "Red Troll", moRedTroll, ZERO | MF_TROLL, RESERVED, moYeti, "A kind of Troll native to the Red Rock Valley.") +MONSTER( 'B', 0xA00000, "Bomberbird", moBomberbird, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "Dark red birds who have created the minefield.\n\n" + "They create a mine on the spot where they are killed, provided " + "that the terrain is suitable. Also note that mines are triggered " + "by dead birds falling on them." + ) +MONSTER( 'A', 0xFFFFFF, "Albatross", moAlbatross, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "Those large seabirds attack you for some reason. At least they are not " + "as fast as Eagles..." + ) +MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbird, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moTameBomberbird, tamebomberdesc) +MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbirdMoved, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moTameBomberbird, tamebomberdesc) +MONSTER( 'G', 0xFF0000, "Palace Guard", moPalace, ZERO | MF_STUNNABLE | MF_HP, RESERVED, moYeti, + "You have to hit Palace Guards several times to kill them. After each hit, they " + "are pushed away and stunned for some time." + ) +MONSTER( 'G', 0xC06000, "Fat Guard", moFatGuard, ZERO | MF_STUNNABLE | MF_HP, RESERVED, moYeti, "Fat guards are too heavy to be pushed away by your hits.") +MONSTER( 'G', 0xFFFFFF, "Skeleton", moSkeleton, ZERO | MF_NONLIVING | MF_STUNNABLE, RESERVED, moYeti, + "Skeletons work similar to Palace Guards, but they won't die no matter how many " + "times you hit them. Well, you have to be more creative...\n\n" + "Skeletons attacked outside of their native land, Palace, are stunned for a longer time." + ) +MONSTER( 'G', 0xC000C0, "Vizier", moVizier, ZERO | MF_STUNNABLE | MF_HP, RESERVED, moYeti, + "Viziers are neither pushed away nor stunned. However, you attack them automatically when " + "escaping from them.") +MONSTER( 'V', 0xC0C0C0, "Viking", moViking, ZERO | MF_LEADER, RESERVED, moPirate, "Mighty warriors from the Fjord, who can use boats.") +MONSTER( 'T', 0x00FFFF, "Fjord Troll", moFjordTroll, ZERO | MF_TROLL, RESERVED, moYeti, + "Fjord Trolls leave a wall when they die, causing the living fjord to rise around it. " + "Contrary to Rock Trolls, items around are not destroyed." + ) +MONSTER( 'E', 0x0000FF, "Water Elemental", moWaterElemental, ZERO | MF_NOBLOW | MF_NONLIVING, RESERVED, moWaterElemental, + "Wherever this powerful being goes, the living fjord " + "sinks below water, non-magical boats are destroyed, and fires are extinguished.\n\n" + "As a special case, you can attack the Water Elemental from the water, without drowning immediately." + ) +MONSTER( 'M', 0xD0D0D0, "Mouse", moMouse, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY | MF_UNARMED | MF_IGNORE_PLATE, RESERVED, moNone, princessdesc) +MONSTER( 'M', 0xD0D0D0, "Mouse", moMouseMoved, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY | MF_UNARMED, RESERVED, moNone, princessdesc) +MONSTER( 'P', 0xFF80FF, "Prince", moPrincess, ZERO | MF_NOGHOST | MF_PRINCESS | MF_GOK | MF_STUNNABLE | MF_HP | MF_FRIENDLY | MF_UNARMED, RESERVED, moNone, princessdesc) +MONSTER( 'P', 0xFF80FF, "Princess", moPrincessMoved, ZERO | MF_NOGHOST | MF_PRINCESS | MF_GOK | MF_STUNNABLE | MF_HP | MF_FRIENDLY | MF_UNARMED, RESERVED, moNone, princessdesc) +MONSTER( 'P', 0xFF80FF, "Prince", moPrincessArmed, ZERO | MF_NOGHOST | MF_PRINCESS | MF_GOK | MF_STUNNABLE | MF_HP | MF_FRIENDLY, RESERVED, moNone, princessdesc) +MONSTER( 'P', 0xFF80FF, "Princess", moPrincessArmedMoved, ZERO | MF_NOGHOST | MF_PRINCESS | MF_GOK | MF_STUNNABLE | MF_HP | MF_FRIENDLY, RESERVED, moNone, princessdesc) +MONSTER( 'F', 0xD03000, "Familiar", moFamiliar, ZERO, RESERVED, moYeti, "A simple servant of the master of the Ivory Tower.") +MONSTER( 'B', 0x707070, "Gargoyle", moGargoyle, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, gargdesc) +MONSTER( 'E', 0xFF0000, "Fire Elemental", moFireElemental, ZERO, RESERVED, moYeti, + "This monster leaves a trail of fire behind.") +MONSTER( 'E', 0xC0C0FF, "Air Elemental", moAirElemental, ZERO | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moAirElemental, "An Air Elemental looks like a live tornado. Once you are three (or less) cells from it, " + "it is impossible to move closer, due to strong winds. You can stand and wait, though. " + "This also affects most monsters.") +MONSTER( 'D', 0xC06000, "Striped Dog", moOrangeDog, ZERO, RESERVED, moYeti, "A predator native to the Zebra.") +MONSTER( 'G', 0xFFFFFF, "Tentacle+Ghost", moTentacleGhost, ZERO | MF_NOGHOST | MF_NOBLOW | MF_GHOST | MF_FLYING | MF_ATTACK_THRU_VINE | MF_ATTACK_NONADJACENT | MF_IGNORE_PLATE | MF_IGNORE_SMELL | MF_MULTITILE | MF_WORM | MF_GHOSTMOVER, RESERVED, moNone, tentdes ) +MONSTER( 'B', 0x8080C0, "Metal Beast", moMetalBeast, ZERO | MF_METAL | MF_STUNNABLE | MF_SLOWMOVER, RESERVED, moYeti, elecdesc ) +MONSTER( 'B', 0xC060C0, "Rich Metal Beast", moMetalBeast2, ZERO | MF_METAL | MF_STUNNABLE | MF_SLOWMOVER, RESERVED, moYeti, elecdesc ) +MONSTER( 'O', 0xA06020, "Outlaw", moOutlaw, ZERO, RESERVED, moYeti, wildwestdesc ) +MONSTER( 'C', 0xC0C060, "Mutant Ivy", moMutant, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_IGNORE_SMELL | MF_MULTITILE | MF_ANYIVY | MF_MUTANTIVY, RESERVED, moNone, overdesc ) +MONSTER( 'T', 0x0080FF, "Storm Troll", moStormTroll, ZERO | MF_TROLL, RESERVED, moYeti, elecdesc ) +MONSTER( 'T', 0x00C080, "Forest Troll", moForestTroll, ZERO | MF_TROLL, RESERVED, moYeti, + "Forest Trolls create an impassable wall when they die." + ) +MONSTER( 'F', 0xC35817, "Giant Fox", moRedFox, ZERO, RESERVED, moYeti, + "What is freedom for you? A situation when you can walk wherever you want? " + "Or a situation when you do not have to work, since you have as much tasty food " + "as you want?\n\n" + "Well, this creature has chosen the second option. It won't be happy " + "if you destroy its prison.\n" + ) +MONSTER( 'C', 0x8080FF, "Wind Crow", moWindCrow, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "A large bird who likes strong winds. Just as you, it can fly quickly in the wind." + ) +MONSTER( 'G', 0xC0FFC0, "Friendly Ghost", moFriendlyGhost, ZERO | MF_NOGHOST | MF_GOK | MF_FRIENDLY | MF_GHOST | MF_FLYING | MF_ATTACK_THRU_VINE | MF_ATTACK_NONADJACENT | MF_IGNORE_PLATE, RESERVED, moFriendlyGhost, + "Friendly ghosts are friendly beings who can go through any obstacles. However, " + "unlike most friends, they tend to fly away from you." + ) +MONSTER( 'R', 0x906030, "Ratling", moRatling, ZERO | MF_LEADER | MF_RATLING, RESERVED, moPirate, + "These warped humanoids are skilled warriors and sailors, and they " + "feel at home at the Warped Coast. Their battle experience has taught them " + "that enemies who wait without moving or attacking anything are the most deadly. " + "If they see such an enemy, they become extremely suspicious, and they also wait." + ) +MONSTER( 'F', 0xC00000, "False Princess", moFalsePrincess, ZERO, RESERVED, moYeti, GENDERSWITCH ) +MONSTER( 'R', 0x500050, "Rose Lady", moRoseLady, ZERO | MF_IGNORE_SMELL, RESERVED, moYeti, GENDERSWITCH ) +MONSTER( 'R', 0xF0A0D0, "Rose Beauty", moRoseBeauty, ZERO, RESERVED, moYeti, GENDERSWITCH ) +MONSTER( 'R', 0x806040, "Ratling Avenger", moRatlingAvenger, ZERO | MF_LEADER | MF_RATLING, RESERVED, moPirate, + "So, you have killed a Ratling on the unwarped sea? You will be punished for this! " + "Luckily, if you run away from the Warped Sea quickly, the Ratling Avengers will lose track of you." + ) +MONSTER( 'T', 0x487830, "Tortoise", moTortoise, ZERO | MF_STUNNABLE | MF_SLOWMOVER, RESERVED, moYeti, tortoisedesc) +MONSTER( 'D', 0xC03000, "Dragon", moDragonHead, ZERO | MF_NOGHOST | MF_NOBLOW | MF_STUNNABLE | MF_MOUNTABLE | MF_FLYING | MF_IGNORE_PLATE | MF_MULTITILE | MF_DRAGON | MF_WORM, RESERVED, moDragonHead, dragondesc) +MONSTER( 'd', 0xC03000, "Dragon", moDragonTail, ZERO | MF_NOGHOST | MF_NOBLOW | MF_STUNNABLE | MF_MOUNTABLE | MF_PART | MF_FLYING | MF_IGNORE_PLATE | MF_MULTITILE | MF_DRAGON | MF_WORM, RESERVED, moDragonHead, dragondesc) +MONSTER( 'F', 0x909090, "Gadfly", moGadfly, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, "Annoying insects. They can awaken Sleeping Bulls.") +MONSTER( 'Y', 0xFF8000, "Yendorian Researcher", moResearcher, ZERO, RESERVED, moYeti, + "These people study gravity and infinite trees. " + "They have no special features, other than wearing a strange hat." + ) +MONSTER( 'K', 0xA8A8A8, "Sparrowhawk", moSparrowhawk, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "A bird who hunts in the treetops of Yendorian Forest." + ) +MONSTER( 'K', 0xD0A0A0, "Kraken", moKrakenH, ZERO | MF_NOGHOST | MF_NOBLOW | MF_MULTITILE | MF_KRAKEN, RESERVED, moNone, krakendesc) +MONSTER( 'K', 0xC07070, "Kraken Tentacle", moKrakenT, ZERO | MF_NOGHOST | MF_NOBLOW | MF_PART | MF_MULTITILE | MF_KRAKEN, RESERVED, moNone, krakendesc) +MONSTER( 'D', 0xF09090, "Draugr", moDraugr, ZERO | MF_NONLIVING | MF_SLOWMOVER, RESERVED, moYeti, + "Animated corpses of ancient Viking warriors. They are immune to mundane weapons, " + "but they can be destroyed by your Orb of the Sword." + ) +MONSTER( 'C', 0xC08000, "Friendly Ivy", moFriendlyIvy, ZERO | MF_NOGHOST | MF_FRIENDLY | MF_ANYIVY, RESERVED, moNone, naturedesc ) +MONSTER( 'V', 0xC000C0, "Vampire Bat", moVampire, ZERO | MF_BIRD | MF_FLYING | MF_UNARMED | MF_IGNORE_PLATE, RESERVED, moEagle, + "Vampire Bats don't attack normally, but they drain your magical powers if " + "they are at distance at most 2 from you." + ) +MONSTER( 'B', 0x404040, "Bat", moBat, ZERO | MF_BIRD | MF_FLYING | MF_UNARMED | MF_IGNORE_PLATE, RESERVED, moEagle, + "Someone has told you that one can get battle experience safely by " + "killing tons of essentially harmless creatures, such as Bats. But " + "does this make any sense?...\n\n" + "It does not. Bats cannot hurt you, but may block your movement, or " + "toggle switches if they fall on them." ) +MONSTER( 'R', 0x8080C0, "Reptile", moReptile, ZERO | MF_STUNNABLE, RESERVED, moReptile, reptiledesc ) +MONSTER( 'B', 0x606020, "Herd Bull", moHerdBull, ZERO | MF_BULL, RESERVED, moRagingBull, + "Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them." ) +MONSTER( 'B', 0xA03000, "Raging Bull", moRagingBull, ZERO | MF_BULL, RESERVED, moYeti, + "Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, " + "they choose one closer to your current location. In the case of a tie, the cell where more neighbors is " + "closer to your current location is chosen; if still a tie, past locations are considered. " + "They can attack you in any direction, and monsters on their way are attacked even if friendly. " + "When they crash into something, the obstacle is usually destroyed, and they are stunned for three turns, after " + "which they charge at you again (in any direction). " + "Raging Bulls cannot be killed or stunned conventionally." + ) +MONSTER( 'B', 0xB07000, "Sleeping Bull", moSleepBull, ZERO | MF_BULL, RESERVED, moRagingBull, + "Sleeping bulls wake up when you get into distance of two cells from them." + ) +MONSTER( 'S', 0xFFD500, "Butterfly", moButterfly, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moButterfly, bulldashdesc) +MONSTER( 'N', 0xFFFF80, "Narcissist", moNarciss, ZERO, RESERVED, moYeti, + "This person loves to look at their own reflection in the mirror. " + "He believes himself to be one of the most important creatures in this world, " + "and hates those who do not admire him." + ) +MONSTER( 'M', 0xFFC0FF, "Mirror Spirit", moMirrorSpirit, ZERO, RESERVED, moYeti, + "A long time ago a mighty warrior was guarding the mirrors from being broken. " + "While this warrior is no longer alive, his reflections have gained life of " + "their own, and will punish the intruders.\n\n" + "If you attack a Mirror Spirit physically, it is delayed, but not destroyed -- " + "more reflections will come out of the mirror. Use Mimics to destroy them." + ) +MONSTER( 'W', 0x202020, "Hunting Dog", moHunterDog, ZERO, RESERVED, moYeti, huntingdesc) +MONSTER( 'T', 0xE2725B, "Terracotta Warrior", moTerraWarrior, ZERO | MF_NONLIVING | MF_STUNNABLE | MF_HP, RESERVED, moYeti, terradesc) +MONSTER( 'J', 0x50A030, "Jiangshi", moJiangshi, ZERO | MF_NONLIVING, RESERVED, moYeti, + "You think this was one of the people who have constructed the Terracotta Warriors and the arrow traps. " + "They have been locked inside, so that they will never divulge the secrets of the mausoleum. They would like to return their homes and families, though." + ) +MONSTER( 'B', 0xA00000, "Void Beast", moVoidBeast, ZERO | MF_NONLIVING, RESERVED, moVoidBeast, + "Are creatures of Void actual monsters, or just monster-shaped holes in the air?\n\nVoid Beasts move simply by letting the air move into their current location -- " + "the hole will move to the place where the air came from! Void Beasts are great at moving against the wind, but they have problems " + "moving with the wind.") +MONSTER( 'W', 0xA00000, "Lava Wolf", moLavaWolf, ZERO, RESERVED, moYeti, + "While Ice Wolves love heat, their instincts usually will not let them leave the Icy Lands -- " + "they are afraid that they will be unable to get back home, and that they will lose track of their prey. " + "However, they find the Volcanic Wasteland so hot and attractive that they abandon their natural instincts... " + "and try to track their prey using their other senses and intelligence." + ) +MONSTER( 'W', 0x202020, "Hunting Dog (guarding)", moHunterGuard, ZERO, RESERVED, moYeti, huntingdesc) +MONSTER( 'G', 0xC0C0FF, "Ice Golem", moIceGolem, ZERO | MF_NONLIVING, RESERVED, moYeti, + "The Ice Golems are powered by intense magical coldness. When destroyed in the Blizzard or another icy land, they become " + "ice walls, and freeze the land around them.") +MONSTER( 'B', 0xC0C0FF, "Sand Bird", moSandBird, ZERO, RESERVED, moNone, NODESC) +MONSTER( 'S', 0xA00000, "Salamander", moSalamander, ZERO | MF_STUNNABLE, RESERVED, moYeti, + "Salamanders are tough lizard-like creatures. Their tough skin protects them " + "from both physical attacks and heat. Salamanders " + "are stunned for a longer time if you push them into lava, fire, or a solid obstacle.") +MONSTER( 'W', 0x202020, "Hunting Dog (regrouping)", moHunterChanging, ZERO, RESERVED, moYeti, + "When your plan has clearly failed, it is better to abandon it and go to a safe place, to have a chance of succeeding next time. This dog clearly knows this.") +MONSTER( 'B', 0xC00000, "North Pole", moNorthPole, ZERO | MF_MAGNETIC, RESERVED, moYeti, NODESCYET) +MONSTER( 'B', 0x0000C0, "South Pole", moSouthPole, ZERO | MF_MAGNETIC, RESERVED, moYeti, NODESCYET) +MONSTER( 'P', 0xC03000, "Red Raider", moPair, ZERO | MF_RAIDER, RESERVED, moYeti, "Red Raiders travel in pairs. They have promised to always watch another one's back. They are able to destroy walls on their way.") +MONSTER( 'H', 0xC0C0C0, "Gray Raider", moHexDemon, ZERO | MF_RAIDER, RESERVED, moHexDemon, "Gray Raiders never step on gray cells.") +MONSTER( 'A', 0x80B080, "Green Raider", moAltDemon, ZERO | MF_RAIDER, RESERVED, moAltDemon, "Green Raiders never step from one green cell to another.") +MONSTER( 'M', 0x904000, "Brown Raider", moMonk, ZERO | MF_RAIDER, RESERVED, moMonk, "Brown Raiders never move adjacent to an item.") +MONSTER( 'C', 0x0060E0, "Blue Raider", moCrusher, ZERO | MF_RAIDER, RESERVED, moYeti, "Blue Raiders have a powerful attack which takes two turns to complete, and also makes the Blue Raider stunned " + "for a long time. This attack can destroy other Raiders if it hits them.") +MONSTER( '@', 0xC00000, "Red Jelly", moSwitch1, ZERO | MF_SWITCH, RESERVED, moYeti, jellydesc) +MONSTER( '@', 0x0000C0, "Blue Jelly", moSwitch2, ZERO | MF_SWITCH, RESERVED, moYeti, jellydesc) +MONSTER( 'B', 0xE07000, "Bronze Beast", moBrownBug, ZERO | MF_STUNNABLE, RESERVED, moYeti, + "A large bug native to the Brown Islands. Cannot be killed easily due to their tough armor; still, they can be killed by pushing them into water or from great heights. " + "Bronze Beasts are very bad at descending slopes -- it takes them extra time to get down, and they are stunned for a longer time if you push them down." + ) +MONSTER( 'B', 0xE07060, "Acid Gull", moAcidBird, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "Where did this strange bird come from?...\n\n" + "Acid Gulls dissolve the land on which they fall when they die. " + ) +MONSTER( 'W', 0xA04060, "Mutant", moVariantWarrior, ZERO, RESERVED, moYeti, + "These guys look a bit strange, but they have no special properties." + ) +MONSTER( 'W', 0x707080, "Falling Dog", moFallingDog, ZERO, RESERVED, moYeti, + "Distant relatives of the Running Dogs.") +MONSTER( 'B', 0xC0C040, "Western Hawk", moWestHawk, ZERO | MF_BIRD | MF_FLYING | MF_IGNORE_PLATE, RESERVED, moEagle, + "Some readers misinterpreted the early maps of Free Fall, thinking that it is a land to the west from some wall. " + "The name Western Hawks remained." ) + +ITEM( 0, 0, "no item", itNone, -1, ZERO | IF_FIREPROOF, RESERVED, osNone, NULL) +ITEM( '*', 0xFFFFFF, "Ice Diamond", itDiamond, IC_TREASURE, ZERO, RESERVED, osNone, + "Cold white gems, found in the Icy Land." + ) +ITEM( '$', 0xFFD700, "Gold", itGold, IC_TREASURE, ZERO, RESERVED, osNone, + "An expensive metal from the Living Caves. For some reason " + "gold prevents the living walls from growing close to it." + ) +ITEM( ';', 0xFF4000, "Spice", itSpice, IC_TREASURE, ZERO, RESERVED, osNone, + "A rare and expensive substance found in the Desert. " + "It is believed to extend life and raise special psychic powers." + ) +ITEM( '*', 0xC00000, "Ruby", itRuby, IC_TREASURE, ZERO, RESERVED, osNone, + "A beautiful gem from the Jungle." + ) +ITEM( '!', 0xFFFF00, "Elixir of Life", itElixir, IC_TREASURE, ZERO, RESERVED, osNone, + "A wonderful beverage, apparently obtained by mixing red and blue slime. You definitely feel more " + "healthy after drinking it, but you still feel that one hit of a monster is enough to kill you.") +ITEM( '%', 0xFF00FF, "Shard", itShard, IC_TREASURE, ZERO, RESERVED, osNone, + "A piece of a magic mirror, or a mirage cloud, that can be used for magical purposes. Only mirrors and clouds " + "in the Land of Mirrors leave these.") +ITEM( '/', 0xFF8000, "Necromancer's Totem", itBone, IC_TREASURE, ZERO, RESERVED, osNone, + "These sinister totems contain valuable gems.") +ITEM( '%', 0x00D000, "Demon Daisy", itHell, IC_TREASURE, ZERO, RESERVED, osNone, + "These star-shaped flowers native to Hell are a valuable alchemical component.") +ITEM( '/', 0x00FF00, "Statue of Cthulhu", itStatue, IC_TREASURE, ZERO, RESERVED, osNone, + "This statue is made of materials which cannot be found in your world.") +ITEM( '*', 0xFF8000, "Phoenix Feather", itFeather, IC_TREASURE, ZERO, RESERVED, osNone, + "One of few things that does not cause the floor in the Land of Eternal Motion to collapse. Obviously they are quite valuable." + ) +ITEM( '*', 0x8080FF, "Ice Sapphire", itSapphire, IC_TREASURE, ZERO, RESERVED, osNone, + "Cold blue gems, found in the Cocytus." + ) +ITEM( '*', 0xEEFF20, "Hyperstone", itHyperstone, IC_TREASURE, ZERO, RESERVED, osNone, + "These bright yellow gems can be found only by those who have mastered the Crossroads." + ) +ITEM( '[', 0x8080FF, "Key", itKey, IC_OTHER, ZERO, RESERVED, osNone, + "That's all you need to unlock the Orb of Yendor! Well... as long as you are able to return to the Orb that this key unlocks...\n\n" + "Each key unlocks only the Orb of Yendor which led you to it." + ) +ITEM( 'o', 0x306030, "Dead Orb", itGreenStone, IC_OTHER, ZERO, RESERVED, osNone, + "These orbs can be found in the Graveyard. You think that they were once powerful magical orbs, but by now, their " + "power is long gone. No way to use them, you could as well simply drop them...\n\n" + ) +ITEM( 'o', 0xFF20FF, "Orb of Yendor", itOrbYendor, IC_OTHER, ZERO, RESERVED, osNone, + "This wonderful Orb can only be collected by those who have truly mastered this hyperbolic universe, " + "as you need the right key to unlock it. Luckily, your psychic abilities will let you know " + "where the key is after you touch the Orb." ) +ITEM( 'o', 0xFFFF00, "Orb of Storms", itOrbLightning, IC_ORB, ZERO, RESERVED, osOffensive, + "This orb can be used to invoke the lightning spell, which causes lightning bolts to shoot from you in all directions.") +ITEM( 'o', 0xFFFFFF, "Orb of Flash", itOrbFlash, IC_ORB, ZERO, RESERVED, osOffensive, + "This orb can be used to invoke a flash spell, which destroys almost everything in radius of 2.") +ITEM( 'o', 0x8080FF, "Orb of Winter", itOrbWinter, IC_ORB, ZERO | IF_FIREPROOF | IF_PROTECTION | IF_EMPATHY, RESERVED, osNone, + "This orb can be used to invoke a wall of ice. It also protects you from fires.") +ITEM( 'o', 0xFF6060, "Orb of Speed", itOrbSpeed, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osUtility, + "This orb can be used to move faster for some time.") +ITEM( 'o', 0x90B090, "Orb of Life", itOrbLife, IC_ORB, ZERO | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend, + "This orb can be used to summon friendly golems. It is used instantly when you pick it up.") +ITEM( 'o', 0x60D760, "Orb of Shielding", itOrbShield, IC_ORB, ZERO | IF_PROTECTION | IF_EMPATHY, RESERVED, osNone, + "This orb can protect you from damage.") +ITEM( 'o', 0x606060, "Orb of Earth", itOrbDigging, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osUtility, + "This orb lets you go through living walls. It also has powers in some of the other lands.") +ITEM( 'o', 0x20FFFF, "Orb of Teleport", itOrbTeleport, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This orb lets you instantly move to another location on the map. Just click a location which " + "is not next to you to teleport there. " + ) +ITEM( 'o', 0xA0FF40, "Orb of Safety", itOrbSafety, IC_ORB, ZERO, RESERVED, osUtility, + "This orb lets you instantly move to a safe faraway location. Knowing the nature of this strange world, you doubt " + "that you will ever find the way back...\n\n" + "Your game will be saved if you quit the game while the Orb of Safety is still powered.\n\n" + "Technical note: as it is virtually impossible to return, this Orb recycles memory used for the world so far (even if you do not use it to save the game). " + ) +ITEM( 'o', 0x40C000, "Orb of Thorns", itOrbThorns, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive, + "This orb allows attacking Hedgehog Warriors directly, as well as stabbing other monsters.\n" + ) +ITEM( '%', 0x0000FF, "Fern Flower", itFernFlower, IC_TREASURE, ZERO, RESERVED, osNone, + "This flower brings fortune to the person who finds it.\n" + ) +ITEM( '!', 0x900000, "Wine", itWine, IC_TREASURE, ZERO, RESERVED, osNone, + "Wine grown under hyperbolic sun would be extremely prized in your home location." + ) +ITEM( 'o', 0x706070, "Orb of Aether", itOrbAether, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osUtility, + "This orb allows one to pass through all kinds of walls and chasms." + ) +ITEM( '$', 0xFFFFC0, "Silver", itSilver, IC_TREASURE, ZERO, RESERVED, osNone, + "A precious metal from the Dead Caves." + ) +ITEM( 'o', 0x005050, "Orb of the Mind", itOrbPsi, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This orb allows you to instantly kill a non-adjacent enemy by clicking it. " + "Each use drains 30 charges." + ) +ITEM( '!', 0xE2B227, "Royal Jelly", itRoyalJelly, IC_TREASURE, ZERO, RESERVED, osNone, + "This is what Hyperbug Queens eat. Very tasty and healthy." + ) +ITEM( '*', 0x60C060, "Emerald", itEmerald, IC_TREASURE, ZERO, RESERVED, osNone, + "A precious green gem from the Emerald Mines." + ) +ITEM( 'o', 0x421C52, "Orb of Invisibility", itOrbInvis, IC_ORB, ZERO | IF_PROTECTION | IF_EMPATHY, RESERVED, osNone, + "When you have this Orb, most monsters won't see you, unless " + "you are standing still, attacking, or picking up items." + ) +ITEM( '*', 0xFFFF00, "Powerstone", itPower, IC_TREASURE, ZERO, RESERVED, osNone, + "A Stone from the Land of Power. You are not sure what it is exactly, but " + "as the Powerstones are kept in crystal cabinets, they are surely valuable." + ) +ITEM( 'o', 0xFF4000, "Orb of Fire", itOrbFire, IC_ORB, ZERO | IF_FIREPROOF | IF_EMPATHY, RESERVED, osNone, + "When you have this Orb, you will leave a trail of fire behind you." + ) +ITEM( '!', 0xFFFF00, "Holy Grail", itHolyGrail, IC_OTHER, ZERO, RESERVED, osNone, camelothelp ) +ITEM( '?', 0x00FF00, "Grimoire", itGrimoire, IC_TREASURE, ZERO, RESERVED, osNone, + "The Grimoires contain many secrets of the Great Old Ones. " + "Each new inner circle in the Temple of Cthulhu contains new Grimoires, with new secrets. " + "You hope to read them when you return home, and to learn many things. " + "The knowledge is valuable to you, but it is rather pointless to try to get " + "several copies of the same Grimoire..." + ) +ITEM( 'o', 0xFF8000, "Orb of the Dragon", itOrbDragon, IC_ORB, ZERO | IF_FIREPROOF | IF_RANGED, RESERVED, osRanged, + "This Orb allows you to throw fire, just like the Fire Cultists.\n\n" + "Each fire drains 5 charges. You are not allowed to throw fire into adjacent cells." + ) +ITEM( 'o', 0x8B4513, "Orb of Trickery", itOrbIllusion, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb allows you to create illusions of yourself. Illusions are targeted " + "by most monsters, just like yourself, Thumpers, and your friends.\n\n" + "Each illusion takes 5 charges to create, and one extra charge " + "per turn. You can also click your illusion to take it away, restoring 4 charges.\n\n" + "If you have both Orb of Teleport and Orb of Trickery, Illusion is cast " + "first -- you can then teleport on your Illusion to switch places with it." + ) +ITEM( 'x', 0xFF0000, "Pirate Treasure", itPirate, IC_TREASURE, ZERO, RESERVED, osNone, "Ye wonder where did th' Pirates find all these riches...") +ITEM( '?', 0xFFFFFF, "Compass", itCompass, IC_OTHER, ZERO, RESERVED, osNone, + "The hyperbolic pirates have no use for treasure maps. However, they have found " + "out that a compass points to the center of the island. So they just go as " + "far towards the center as they can, and hide their treasure there." + ) +ITEM( '*', 0xFF8080, "Red Gem", itRedGem, IC_TREASURE, ZERO, RESERVED, osNone, "A gem from the Red Rock Valley.") +ITEM( 'o', 0x6060FF, "Orb of Time", itOrbTime, IC_ORB, ZERO, RESERVED, osUtility, + "Normally, the power of most Orbs slowly fades away, even when " + "you are not actively using them. This Orb prevents this.\n\n" + + "When you have the Orb of Time, Orbs which are not active won't lose their power. " + "Orbs are considered active if they have a continuous power which has actually " + "affected something in the last turn.\n\n" + + "Orbs of Shielding remain active after being activated (even if you are no longer " + "attacked), and Orbs of Time have a bigger cap inside their native Caribbean than " + "outside." + ) +ITEM( 'o', 0x40C0C0, "Orb of Space", itOrbSpace, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb is able to bring faraway items to your location, even if there are " + "monsters or barriers on the way. The cost of " + "bringing an item (in charges) equals the square of its distance to you. Contrary " + "to some other Orbs, usage is not allowed if you have not enough power left." + ) +ITEM( '!', 0xFF8080, "Bomberbird Egg", itBombEgg, IC_TREASURE, ZERO, RESERVED, osNone, + "Bomberbird eggs are big and tasty, and thus valuable. " + "They can hatch when left alone for some time (but this will never happen " + "if you are watching)." + ) +ITEM( '*', 0xFFBF00, "Amber", itCoast, IC_TREASURE, ZERO, RESERVED, osNone, + "When the tide is away, beautiful ambers can be found on the hyperbolic beaches. " + "Perhaps there used to be a forest here?" + ) +ITEM( '$', 0xFFFFFF, "Pearl", itWhirlpool, IC_TREASURE, ZERO, RESERVED, osNone, + "You do not know exactly why, but there are valuable pearls on many boats " + "in the whirlpool." + ) +ITEM( 'o', 0x306000, "Orb of Friendship", itOrbFriend, IC_ORB, ZERO | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend, + "This Orb summons a friendly Bomberbird." + ) +ITEM( 'o', 0x000060, "Orb of Water", itOrbWater, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osNone, + "This Orb allows your boat to go against the current, " + "and also to go into the land, creating water on the way." + ) +ITEM( 'o', 0xC0C0FF, "Orb of Air", itOrbAir, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb allows you to blow your enemies away.\n\n" + "Click a monster to blow it one cell away. It cannot be used against mimics, ghosts, sharks and other monsters restricted to a specific terrain, and multi-tile monsters." + ) +ITEM( '?', 0x802000, "Hypersian Rug", itPalace, IC_TREASURE, ZERO, RESERVED, osNone, + "Nice, a hyperbolic rug! It will not fit very well on your flat Euclidean floor, but who cares?") +ITEM( 'o', 0x60A060, "Orb of the Frog", itOrbFrog, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb lets you jump to a place which is two cell away from you, in a single turn. " + "You can jump over water, chasms and fire, but not over walls.") +ITEM( '*', 0x800000, "Garnet", itFjord, IC_TREASURE, ZERO, RESERVED, osNone, "Vikings believe that garnets improve their strength.") +ITEM( 'o', 0x0070C0, "Orb of the Fish", itOrbFish, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osNone, + "This Orb lets you dive into the water. While diving, you are able to see and collect underwater treasures, " + "while being invisible to monsters yourself. You are afraid of jumping into the water straight from a boat, so usually you won't do it." + ) +ITEM( 'o', 0xC00000, "Orb of Discord", itOrbDiscord, IC_ORB, ZERO, RESERVED, osFriend, + "Causes most monsters to attack other monsters, not only you and your friends.") +ITEM( 'P', 0x00FF00, "SAVE", itSavedPrincess, IC_NAI, ZERO, RESERVED, osNone, princessdesc) +ITEM( 'o', 0xFF208F, "Orb of Love", itOrbLove, IC_ORB, ZERO | IF_SHMUPLIFE, RESERVED, osLove, + "Love takes time, but it heals all wounds, and transcends time and space.\n\n" + "The Orb of Love is worth 30$$$, if you end the game with it.\n" + ) +ITEM( '/', 0xFFFFE0, "Ivory Figurine", itIvory, IC_TREASURE, ZERO, RESERVED, osNone, + "A beautiful figurine, made of ivory. Figurines close to the base of the Tower " + "tend do disappear after you have collected many of them." + ) +ITEM( '*', 0x606060, "Onyx", itZebra, IC_TREASURE, ZERO, RESERVED, osNone, "A black gem with white stripes. It is beautiful.") +ITEM( '%', 0xFF8000, "Fire Shard", itFireShard, IC_OTHER, ZERO | IF_SHARD, RESERVED, osNone, elemdesc) +ITEM( '%', 0x8080C0, "Air Shard", itAirShard, IC_OTHER, ZERO | IF_SHARD, RESERVED, osNone, elemdesc) +ITEM( '%', 0x80C080, "Earth Shard", itEarthShard, IC_OTHER, ZERO | IF_SHARD, RESERVED, osNone, elemdesc) +ITEM( '%', 0x0000C0, "Water Shard", itWaterShard, IC_OTHER, ZERO | IF_SHARD, RESERVED, osNone, elemdesc) +ITEM( '*', 0xF0F0F0, "Elemental Gem", itElemental, IC_TREASURE, ZERO, RESERVED, osNone, elemdesc) +ITEM( 'o', 0x309060, "Orb of Summoning", itOrbSummon, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This orb allows you to summon monsters. Usually, they are either Elementals or " + "native creatures. While the monsters do not like being summoned, and will " + "attack you once they recover from summoning sickness, such summoning " + "often has its uses." + ) +ITEM( 'o', 0x306090, "Orb of Matter", itOrbMatter, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb allows to temporarily create impassable matter, either to block paths or " + "to build bridges across chasms and waters.") +ITEM( '*', 0xF0F000, "Bounty", itBounty, IC_TREASURE, ZERO, RESERVED, osNone, wildwestdesc) +ITEM( '[', 0xC0C0C0, "Revolver", itRevolver, IC_OTHER, ZERO | IF_RANGED, RESERVED, osRanged, wildwestdesc) +ITEM( '*', 0xF0F080, "Fulgurite", itFulgurite, IC_TREASURE, ZERO, RESERVED, osNone, elecdesc) +ITEM( '%', 0xFFFFFF, "Mutant Sapling", itMutant, IC_TREASURE, ZERO, RESERVED, osNone, overdesc) +ITEM( 'o', 0xA08000, "Orb of Stunning", itOrbStunning, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb allows you to target monsters to stun them. " + "10 charges are used to stun for 5 turns. Does not " + "work against multi-tile monsters.") +ITEM( 'o', 0xC00000, "Orb of Luck", itOrbLuck, IC_ORB, ZERO, RESERVED, osUtility, + "This Orb allows you to find new lands more easily. " + "Lands where you have already collected less treasure, " + "and especially the Crossroads, are more likely to " + "spawn while you have this. Additionally, Orbs of Safety " + "are more likely to spawn in the Whirlpool." + ) +ITEM( '%', 0xD03030, "Mutant Fruit", itMutant2, IC_TREASURE, ZERO, RESERVED, osNone, cleardesc) +ITEM( 'o', 0xC00000, "Orb of Freedom", itOrbFreedom, IC_ORB, ZERO, RESERVED, osOffensive, + "This orb is activated if you are unable to escape (radius 4) " + "without making illegal moves or " + "going through cells which are currently adjacent to enemy monsters. " + "Most game over situations are covered by this, but generally, " + "this orb is oversensitive...\n\n" + "When activated, it creates a Flash effect of radius 5." + ) +ITEM( '%', 0x606060, "Black Lotus", itLotus, IC_TREASURE, ZERO, RESERVED, osNone, + "This beautiful flower is greatly prized by wizards, as it allows them to cast powerful magical spells " + "without preparation.\n" + ) +ITEM( 'o', 0x505050, "Orb of Undeath", itOrbUndeath, IC_ORB, ZERO | IF_EMPATHY | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend, + "Monsters slain by you in melee are turned into friendly ghosts, " + "Does not affect plants and friends." + ) +ITEM( '*', 0x8080FF, "White Dove Feather", itWindstone, IC_TREASURE, ZERO, RESERVED, osNone, + "This feather is truly beautiful and strong." + ) +ITEM( 'o', 0xC00060, "Orb of Empathy", itOrbEmpathy, IC_ORB, ZERO | IF_SHMUPLIFE, RESERVED, osFriend, + "This Orb lets your allies to share your Orb powers.\n\n" + "The following Orbs are affected:" + ) +ITEM( '>', 0x0000FF, "strong wind", itStrongWind, IC_NAI, ZERO, RESERVED, osNone, + "In the Windy Plains, you can let the wind carry you, " + "causing you to move two cells with the wind in a single turn. " + "This cannot be done if you are standing at distance at most 2 " + "from the Air Elemental, or if any of the three cells on the way " + "has two wind directions.\n\n" + "Press 't' or click the destination to activate." + ) +ITEM( 'x', 0xFF00FF, "buggy item", itBuggy, IC_NAI, ZERO, RESERVED, osNone, + "Please report this as a bug." + ) +ITEM( 'x', 0xFFFF00, "buggy item", itBuggy2, IC_NAI, ZERO, RESERVED, osNone, + "Please report this as a bug." + ) +ITEM( '%', 0x744c7c / 4 + 0x800000, "Thornless Rose", itRose, IC_TREASURE, ZERO, RESERVED, osNone, + "A big, beautiful, magical flower." + ) +ITEM( '*', 0xFF40A0, "Coral", itCoral, IC_TREASURE, ZERO, RESERVED, osNone, + "Corals have a somewhat hyperbolic structure even in your home world, " + "but natural corals from the Warped Sea have truly beautiful shapes. " + "Ratlings know the value of corals, and thus keep them in boats for safety." + ) +ITEM( 'o', 0x764e7c*2, "Orb of Beauty", itOrbBeauty, IC_ORB, ZERO, RESERVED, osNone, + "This Orb makes you stunningly beautiful. " + "Monsters which come next to you will be stunned for one turn. " + "Multi-tile monsters are not affected. Additionally, it makes you immune to " + "beauty." + ) +ITEM( 'o', 0xFFFF80, "Orb of the Warp", itOrb37, IC_ORB, ZERO, RESERVED, osWarping, + "This Orb creates a warped zone of radius 5 around you, " + "and also allows you to move diagonally in warped zones." + ) +ITEM( 'o', 0xFFFF80, "Orb of Energy", itOrbEnergy, IC_ORB, ZERO, RESERVED, osUtility, + "This Orb halves the power usage of orbs which cost some " + "charges with each activation. It even affects the " + "one-shot orbs such as Flash or Teleport. If such an activation " + "normally costs x charges, it costs only x/2 (rounded up) " + "if you have an Orb of Energy." + ) +ITEM( 't', 0x487830, "Baby Tortoise", itBabyTortoise, IC_TREASURE, ZERO, RESERVED, osNone, tortoisedesc) +ITEM( 'o', 0x487830, "Orb of the Shell", itOrbShell, IC_ORB, ZERO | IF_PROTECTION, RESERVED, osNone, + "This Orb protects you from physical attacks. " + "It lasts for more turns than the Orb of Shielding, but " + "10 charges are lost whenever you are attacked. " + "It also does not protect you from fires, scents, and being eaten." + ) +ITEM( '!', 0xc00000, "Apple", itApple, IC_TREASURE, ZERO, RESERVED, osNone, "A fruit from the Yendorian Forest.") +ITEM( '!', 0xFF6000, "Dragon Scale", itDragon, IC_TREASURE, ZERO | IF_FIREPROOF, RESERVED, osNone, + "Dragon Scales are a prized material for armors. " + "They are also prized by collectors, who would like to boast " + "about how they have killed a Dragon.\n\n" + "Dragon Scales disappear after 500 turns." + ) +ITEM( 'o', 0x900000, "Orb of Domination", itOrbDomination, IC_ORB, ZERO | IF_RANGED | IF_SHMUPLIFE, RESERVED, osRanged, + "This Orb lets you ride Dragons and other worm-like creatures. " + "Simply move onto such a creature to ride them; while riding, you are protected from dangerous terrains " + "and partially from attacks (they cause you to lose half of your Domination power), " + "but you cannot collect items.\n\n" + /*When only one charge is left, " + "you have to dismount this turn -- be very careful to make this possible, " + "as your mount could attack you immediately!\n\n" */ + "While riding, " + "click on a location to order your mount to move or attack there." + ) +ITEM( 'o', 0xFFFF80, "Orb of the Sword", itOrbSword, IC_ORB, ZERO, RESERVED, osDirectional, + "This Orb gives you a weapon made of pure magical energy. You do not hold " + "it, it simply floats in the air next to you. When you go, the energy sword moves " + "with you, pointing at the same relative angle it pointed before -- you cannot " + "move or rotate it otherwise. Most monsters can be killed by moving the sword into them, " + "and won't move into the spot with the sword." + ) +ITEM( 'x', 0x4040FF, "Sunken Treasure", itKraken, IC_TREASURE, ZERO, RESERVED, osNone, + "Cargo of a ship which was once destroyed by a Kraken." ) +ITEM( 'o', 0xFF8040, "Orb of the Sword II", itOrbSword2, IC_ORB, ZERO, RESERVED, osDirectional, + "An alternative version of Orb of the Sword. If you have both of them, " + "you have two energy swords, facing in opposite directions." + ) +ITEM( '*', 0xFFFF80, "Ancient Jewelry", itBarrow, IC_TREASURE, ZERO, RESERVED, osNone, + "Precious belongings of ancient Viking heroes. Your Orb of the Sword can be " + "used to dig these treasures out of the barrows." + ) +ITEM( '!', 0xFFD700, "Golden Egg", itTrollEgg, IC_TREASURE, ZERO, RESERVED, osNone, + "Trolls of Trollheim are descendants of a bridge Troll, who collected " + "payments from people crossing the bridge. One of them paid with " + "golden eggs. The bridge Troll found the eggs beautiful, but he quickly lost them. " + "Golden eggs are still revered by Trolls, and you can find them in their " + "caves." + ) +ITEM( '!', 0xFF0000, "Warning", itWarning, IC_NAI, ZERO, RESERVED, osNone, warningdesc + ) +ITEM( 'o', 0x808080, "Orb of the Stone", itOrbStone, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osNone, + "Trolls turn into stone walls when they die. When you have this Orb, " + "this happens to every monster you defeat. Statues created from this Orb " + "have slightly different properties than Trolls who petrify naturally." + ) +ITEM( 'o', 0xC08000, "Orb of Nature", itOrbNature, IC_ORB, ZERO | IF_RANGED | IF_SHMUPLIFE, RESERVED, osRanged, naturedesc ) +ITEM( '%', 0x800080, "Treat", itTreat, IC_TREASURE, ZERO | IF_FIREPROOF, RESERVED, osNone, halloweendesc ) +ITEM( '%', 0x30A030, "Slime Mold", itSlime, IC_TREASURE, ZERO, RESERVED, osNone, + "A very interesting species of slime mold." + ) +ITEM( '*', 0xFF00FF, "Amethyst", itAmethyst, IC_TREASURE, ZERO, RESERVED, osNone, "A beatiful purple gem from the Lost Mountain." ) +ITEM( 'o', 0xC00040, "Orb of Recall", itOrbRecall, IC_ORB, ZERO, RESERVED, osNone, + "When the charges on this Orb expire, " + "you will be automatically returned to the place where you have found it. " + "Extra Orbs of Recall delay this without changing the recall location. " + "Pick up an Orb of Safety causes an immediate recall.") +ITEM( ']', 0x8080FF, "Dodecahedron", itDodeca, IC_TREASURE, ZERO, RESERVED, osNone, + "These dodecahedra made of a mysterious material are the Reptiles' favorite toy." + ) +ITEM( 'o', 0x8080FF, "Orb of Vaulting", itOrbDash, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "This Orb allows you to jump over an adjacent monster, killing or stunning it. " + "You can only vault in a roughly straight line. " + "Target a cell on the other side to use it." + ) +ITEM( '$', 0x80FF80, "Green Grass", itGreenGrass, IC_TREASURE, ZERO, RESERVED, osNone, prairiedesc ) +ITEM( 'o', 0xC09090, "Orb of Horns", itOrbHorns, IC_ORB, ZERO, RESERVED, osDirectional, + "After you move while having this Orb, you immediately attack the next cell in the straight line " + "(or two cells, when moving on a heptagon). This attack is slightly stronger than your normal " + "attack: it can stun some of the monsters which cannot be killed or stunned normally." + ) +ITEM( 'o', 0xA05020, "Orb of the Bull", itOrbBull, IC_ORB, ZERO, RESERVED, osDirectional, + "You get the powers of Shield, Horns, and Thorns after you move two moves in a straight line " + "with this Orb." ) +ITEM( '$', 0xC060C0, "Spinel", itBull, IC_TREASURE, ZERO, RESERVED, osNone, bulldashdesc ) +ITEM( 'o', 0xC0C0FF, "Orb of the Mirror", itOrbMirror, IC_ORB, ZERO, RESERVED, osNone, + "Use Orb of the Mirror to gain copies of one of your Orbs; " + "mirroring weaker Orbs usually yields more copies. " + "It can only be used once per Orb type, " + "and only when you are next to a mirror." + ) +ITEM( 'O', 0xF0F0F0, "your orbs", itInventory, IC_OTHER, ZERO, RESERVED, osNone, + "Click this to see your orbs.") +ITEM( '%', 0xE0E000, "Lava Lily", itLavaLily, IC_TREASURE, ZERO | IF_FIREPROOF, RESERVED, osNone, + "This plant, able to survive in the extreme conditions of the Volcanic Wasteland, " + "is a valuable alchemical ingredient." + ) +ITEM( '*', 0x40E0D0, "Turquoise", itHunting, IC_TREASURE, ZERO, RESERVED, osNone, + "Hunters believe that wearing a Turquoise amulet will improve their accuracy. " + "This one has been lost, but the hunting dogs are guarding it until the owner returns.") +ITEM( '*', 0x009090, "Forgotten Relic", itBlizzard, IC_TREASURE, ZERO, RESERVED, osNone, blizzarddesc) +ITEM( '(', 0xFFE080, "Ancient Weapon", itTerra, IC_TREASURE, ZERO, RESERVED, osNone, + "This ancient weapon is beautifully encrusted with precious gems, but you prefer your own -- it is much lighter.") +ITEM( 'o', 0x307080, "Orb of Slashing", itOrbSide1, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive, + "Whenever you attack with this Orb, you also hit the monsters adjacent both to you and the monster you originally attacked.") +ITEM( 'o', 0x30A080, "Orb of the Triangle", itOrbSide2, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive, + "Whenever you attack with this Orb, you also hit the monsters adjacent to you which are neither adjacent nor opposite to the monster " + "you originally attacked.") +ITEM( 'o', 0x30D080, "Orb of Ferocity", itOrbSide3, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive, + "Whenever you attack with this Orb, you also hit the monsters adjacent to you and opposite to the monster you originally attacked.") +ITEM( 'o', 0xD08030, "Orb of Lava", itOrbLava, IC_ORB, ZERO | IF_FIREPROOF, RESERVED, osUtility, + "This Orb summons a minor volcanic activity around you. " + "All the heptagonal cells adjacent to enemies in distance at most 5 to you " + "will be set on fire. Does not affect the cell you are on, and enemies resistant to fire.") +ITEM( 'o', 0x3080D0, "Orb of Change", itOrbMorph, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged, + "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.") +ITEM( '!', 0x80FF00, "Glowing Crystal", itGlowCrystal, IC_TREASURE, ZERO, RESERVED, osNone, crystaldesc) +ITEM( '!', 0x80FF80, "Snake Oil", itSnake, IC_TREASURE, ZERO, RESERVED, osNone, "Made of actual snakes!") +ITEM( '!', 0x80FF80, "Sea Glass", itDock, IC_TREASURE, ZERO, RESERVED, osNone, NODESCYET) +ITEM( '*', 0xBBCC99, "Chrysoberyl", itRuins, IC_TREASURE, ZERO, RESERVED, osNone, "Fragment of the past glory.") +ITEM( '*', 0x80FF80, "Monopole", itMagnet, IC_TREASURE, ZERO, RESERVED, osNone, NODESCYET) +ITEM( '!', 0xFF00FF, "Tasty Jelly", itSwitch, IC_TREASURE, ZERO, RESERVED, osNone, "A tasty byproduct of the Jelly Revolution.") +ITEM( 'o', 0x80FF80, "Orb of Phasing", itOrbPhasing, IC_ORB, ZERO, RESERVED, osNone, + "This orb lets you pass through walls (one cell wide), and also through monsters, as long as they will not attack you in transit.") +ITEM( 'o', 0xFFFF80, "Orb of Magnetism", itOrbMagnetism, IC_ORB, ZERO, RESERVED, osNone, NODESCYET) +ITEM( 'o', 0x202020, "Orb of Slaying", itOrbSlaying, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive, + "This Orb lets you defeat Raiders and other tough single-cell monsters in melee." + ) +ITEM( '*', 0xFFA860, "Tiger's Eye", itBrownian, IC_TREASURE, ZERO, RESERVED, osNone, + "A brown gem." + ) +ITEM( '$', 0xF0C0C0, "Meteorite", itWest, IC_TREASURE, ZERO, RESERVED, osNone, + "These rocks falling from the sky have been captured to fall forever in the artificial gravity. Meteorite iron is believed to be a valuable material for magical weapons.") +ITEM( '*', 0x30FF30, "Torbernite", itVarTreasure, IC_TREASURE, ZERO, RESERVED, osNone, + "Crystals emiting magical radiation.") +ITEM( 'o', 0x703800, "Orb of Intensity", itOrbIntensity, IC_ORB, ZERO, RESERVED, osNone, + "When you have this, initial and maximal charge amounts of all Orbs are increased by 20%." + ) +ITEM( 'o', 0x80D080, "Orb of Gravity", itOrbGravity, IC_ORB, ZERO | IF_SHMUPLIFE, RESERVED, osWarping, + "This Orb lets you magically control gravity around you. In lands with unusual gravity, the options are: usual gravity (no change, except that it may disrupt birds), " + "anti-gravity (causes the direction of gravity to be reversed), levitation (you can move in directions which are neither up nor down, " + "or between cells if one of them has a wall in a 'neutral' direction). In lands with standard gravity, levitation lets creatures to avoid traps, chasms, " + "and water, while anti-gravity makes it possible to move only when next to a wall (movement between cells without adjacent walls is not allowed). " + "For each move, the gravity is based on what you do, and all enemies in the effective range are affected (for example, if you move next to a wall in a non-gravity land, " + "anti-gravity kicks in and monsters will not be able to move in open space)." + ) +ITEM( 'o', 0xD08080, "Orb of Choice", itOrbChoice, IC_ORB, ZERO, RESERVED, osNone, + "Did you know that it is possible to break a magical sphere into finitely many parts, and then, out of the parts obtained, to make two magical spheres, just like the original? " + "Hyperbolic geometry makes this even easier!\n\n" + "When you pick up another Orb, it will not disappear from the ground -- Orb of Choice will be drained instead." + ) +//ITEM( '*', 0x26619C, "Lapis Lazuli", moNone, ZERO | MF_NOGHOST | MF_NOBLOW, RESERVED, moNone, NODESCYET) + +WALL( '.', 0xFF00FF, "no wall", waNone, ZERO | WF_HEATCOLOR, RESERVED, 0, sgNone, NULL) +WALL( '#', 0x8080FF, "ice wall", waIcewall, WF_WALL | WF_HIGHWALL | WF_HEATCOLOR, RESERVED, 0, sgNone, + "Ice Walls melt after some time has passed." + ) +WALL( '#', 0xC06000, "great wall", waBarrier, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, barrierhelp) +WALL( '+', 0x900030, "red slime", waFloorA, ZERO | WF_ALCHEMY, RESERVED, 0, sgFloorA, slimehelp ) +WALL( '+', 0x300090, "blue slime", waFloorB, ZERO | WF_ALCHEMY, RESERVED, 0, sgFloorB, slimehelp ) +WALL( '#', 0xA0D0A0, "living wall", waCavewall, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgCave, cavehelp) +WALL( '.', 0x306060, "living floor", waCavefloor, ZERO, RESERVED, 0, sgNone,cavehelp) +WALL( '#', 0xD03030, "dead rock troll", waDeadTroll, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, trollhelp) +WALL( '#', 0xCDA98F, "sand dune", waDune, WF_WALL | WF_HIGHWALL | WF_CONE, RESERVED, 0, sgNone, + "A natural terrain feature of the Desert." + ) +WALL( '%', 0xC0C0FF, "Magic Mirror", waMirror, WF_WALL, RESERVED, 0, sgNone, + "You can go inside the Magic Mirror, and produce some mirror images to help you." + ) +WALL( '%', 0xFFC0C0, "Cloud of Mirage", waCloud, WF_WALL, RESERVED, 0, sgNone, + "Tiny droplets of magical water. You see images of yourself inside them. " + "Go inside the cloud, to make these images help you.") +WALL( '^', 0x8D694F, "Thumper", waThumperOff, WF_WALL | WF_ACTIVABLE | WF_THUMPER, RESERVED, 0, sgNone, thumpdesc) +WALL( '^', 0x804000, "Fire", waFire, WF_FIRE | WF_TIMEOUT, RESERVED, 0, sgNone, + "This cell is on fire. Most beings and items cannot survive." + ) +WALL( '+', 0xC0C0C0, "ancient grave", waAncientGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE, RESERVED, 0, sgNone, + "An ancient grave." + ) +WALL( '+', 0xD0D080, "fresh grave", waFreshGrave, WF_WALL | WF_HIGHWALL | WF_GRAVE, RESERVED, 0, sgNone, + "A fresh grave. Necromancers like those." + ) +WALL( '#', 0x00FFFF, "column", waColumn, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, + "A piece of architecture typical to R'Lyeh." + ) +WALL( '=', 0xFFFF00, "lake of sulphur", waSulphurC, ZERO | WF_CHASM | WF_SULPHURIC, RESERVED, 0, sgNone, lakeDesc ) +WALL( '=', 0xFFFF00, "lake of sulphur", waSulphur, ZERO | WF_CHASM | WF_SULPHURIC, RESERVED, 0, sgNone, lakeDesc ) +WALL( '=', 0x000080, "lake", waLake, WF_WATER | WF_HEATCOLOR, RESERVED, 0, sgWater, + "An impassable lake in Cocytus." + ) +WALL( '_', 0x000080, "frozen lake", waFrozenLake, ZERO | WF_HEATCOLOR, RESERVED, 0, sgNone, cocytushelp ) +WALL( '>', 0x101010, "chasm", waChasm, ZERO | WF_CHASM, RESERVED, 0, sgNone, + "It was a floor... until something walked on it." + ) +WALL( '>', 0x101010, "chasmD", waChasmD, WF_WALL, RESERVED, 0, sgNone, + "It was a floor... until something walked on it." + ) +WALL( '#', 0x60C000, "big tree", waBigTree, WF_WALL | WF_HIGHWALL | WF_STDTREE | WF_CONE, RESERVED, 0, sgNone, foresthelp) +WALL( '#', 0x006000, "tree", waSmallTree, WF_WALL | WF_HIGHWALL | WF_STDTREE | WF_CONE, RESERVED, 0, sgNone, foresthelp) +WALL( '#', 0x421C52*2, "vine", waVinePlant, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgVine, vinehelp) +WALL( ':', 0x006000, "vine", waVineHalfA, ZERO | WF_NOFLIGHT | WF_HALFVINE, RESERVED, 0, sgVine, hvinehelp) +WALL( ';', 0x006000, "vine", waVineHalfB, ZERO | WF_NOFLIGHT | WF_HALFVINE, RESERVED, 0, sgVine, hvinehelp) +WALL( '^', 0x804000, "partial fire", waPartialFire, WF_FIRE | WF_TIMEOUT, RESERVED, 0, sgNone, "This cell is partially on fire.") +WALL( '#', 0xA07070, "dead wall", waDeadwall, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgCave, deadcavehelp) +WALL( '.', 0x401010, "dead floor", waDeadfloor, ZERO, RESERVED, 0, sgNone,deadcavehelp) +WALL( '.', 0x905050, "rubble", waDeadfloor2, ZERO, RESERVED, 1, sgNone, "Dead floor, with some rubble.") +WALL( '#', 0xD0D010, "weird rock", waWaxWall, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, + "A weirdly colored rock. Hyperentomologists claim that the " + "Hyperbug armies use these rocks to navigate back home after a victorious battle." + ) +WALL( '#', 0x8080C0, "crystal cabinet", waGlass, WF_WALL, RESERVED, 0, sgNone, + "Witches use these crystal cabinets to protect Powerstones, as well as the more " + "expensive Orbs. They are partially protected from thieves: they are too strong " + "to be smashed by conventional attacks, and if you try to steal the item " + "using an Orb of Aether, your Aether power will be completely drained." + ) +WALL( '#', 0xC0C0C0, "wall of Camelot", waCamelot, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, camelothelp ) +WALL( '+', 0xA06000, "Round Table", waRoundTable, WF_WALL, RESERVED, 1, sgNone, camelothelp ) +WALL( '=', 0x0000A0, "moat of Camelot", waCamelotMoat, WF_WATER, RESERVED, 0, sgWater, camelothelp) +WALL( '+', 0x606060, "big statue of Cthulhu", waBigStatue, WF_WALL, RESERVED, 0, sgNone, + "These statues of Cthulhu are too large to carry, and they don't look too " + "valuable anyway. Most monsters will never go through them... they probably have " + "their reasons. But you can go! When you move into the cell containing " + "a statue, you push the statue to the cell you left.\n" + ) +WALL( '=', 0x0000A0, "sea", waSea, WF_WATER, RESERVED, 0, sgWater, caribbeanhelp) +WALL( '+', 0x0000A0, "boat", waBoat, ZERO | WF_BOAT | WF_NOFLIGHT, RESERVED, 0, sgNone, + "Hyperbolic pirates do not need huge ships, since so many lands to conquest " + "are so close. These small boats are enough for them.\n\n" + "Boats allow you to go through water. If you are in a boat, you can move into " + "a water cell (and the boat will come with you)." + ) +WALL( '.', 0x00FF00, "island", waCIsland, ZERO | WF_CISLAND, RESERVED, 0, sgNone, cislandhelp) +WALL( '.', 0x80C060, "island", waCIsland2, ZERO | WF_CISLAND, RESERVED, 0, sgNone, cislandhelp) +WALL( '#', 0x006000, "tree", waCTree, WF_WALL | WF_HIGHWALL | WF_CONE | WF_CISLAND, RESERVED, 0, sgTree, + "The forests of Caribbean are too dense to be traversed by humans, " + "and they are hard to burn. Many colorful parrots can be found there." + ) +WALL( ',', 0x800000, "rock I", waRed1, ZERO | WF_RED, RESERVED, 1, sgNone, redrockhelp) +WALL( ':', 0xC00000, "rock II", waRed2, ZERO | WF_RED, RESERVED, 2, sgNone, redrockhelp) +WALL( ';', 0xFF0000, "rock III", waRed3, ZERO | WF_RED, RESERVED, 3, sgNone, redrockhelp) +WALL( '.', 0xD0D0D0, "minefield", waMineUnknown, ZERO, RESERVED, 0, sgNone, minedesc) +WALL( '.', 0xD0D0D0, "minefield", waMineMine, ZERO, RESERVED, 0, sgNone, minedesc) +WALL( '.', 0x909090, "cell without mine", waMineOpen, ZERO, RESERVED, 0, sgNone, minedesc) +WALL( '+', 0x808000, "stranded boat", waStrandedBoat, ZERO | WF_BOAT | WF_NOFLIGHT, RESERVED, 0, sgNone, + "This boat cannot go through the sand. But if you sit inside and " + "wait for the tide, you will be able to use it to travel through the Ocean." + ) +WALL( '#', 0xFFD500, "palace wall", waPalace, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, palacedesc ) +WALL( '+', 0xFFFFFF, "closed gate", waClosedGate, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, gatedesc ) +WALL( '-', 0x404040, "open gate", waOpenGate, ZERO, RESERVED, 0, sgNone, gatedesc ) +WALL( '_', 0xC00000, "closing plate", waClosePlate, ZERO, RESERVED, 0, sgNone, gatedesc ) +WALL( '_', 0x00C050, "opening plate", waOpenPlate, ZERO, RESERVED, 0, sgNone, gatedesc ) +WALL( '_', 0x202020, "trapdoor", waTrapdoor, ZERO, RESERVED, 0, sgNone, "This floor will fall after someone goes there. Go quickly!" ) +WALL( '+', 0xFF0000, "giant rug", waGiantRug, ZERO, RESERVED, 0, sgNone, + "This is the biggest Hypersian Rug you have ever seen! " + "Unfortunately, it is too large to take it as a trophy." ) +WALL( '#', 0xfffff0, "platform", waPlatform, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, "You can stand here.") +WALL( '#', 0x909090, "stone gargoyle", waGargoyle, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, gargdesc) +WALL( '.', 0xB0B0B0, "stone gargoyle floor", waGargoyleFloor, ZERO, RESERVED, 1, sgNone, gargdesc) +WALL( '.', 0x909090, "rubble", waRubble, ZERO, RESERVED, 1, sgNone, "Some rubble.") +WALL( '+', 0x804000, "ladder", waLadder, ZERO, RESERVED, 0, sgNone, + "You can use this ladder to climb the Tower." + ) +WALL( '#', 0xC0C0C0, "limestone wall", waStone, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, "Simply a wall. Mostly.") +WALL( '^', 0x804000, "Bonfire", waBonfireOff, WF_WALL | WF_ACTIVABLE, RESERVED, 0, sgNone, + "A heap of wood that can be used to start a fire. Everything is already here, you just need to touch it to fire it." + ) +WALL( '^', 0x8D694F, "Thumper", waThumperOn, WF_WALL | WF_TIMEOUT | WF_PUSHABLE | WF_THUMPER, RESERVED, 0, sgNone, + "A device that attracts sandworms and other enemies. You need to activate it.") +WALL( '^', 0x804000, "Eternal Fire", waEternalFire, WF_FIRE, RESERVED, 0, sgNone, + "This fire never burns out." + ) +WALL( '.', 0x909090, "stone gargoyle bridge", waGargoyleBridge, ZERO, RESERVED, 1, sgNone, gargdesc) +WALL( '#', 0x309060, "temporary wall", waTempWall, WF_WALL | WF_HIGHWALL | WF_TIMEOUT, RESERVED, 0, sgNone, twdesc) +WALL( '.', 0x309060, "temporary floor", waTempFloor, ZERO | WF_TIMEOUT, RESERVED, 1, sgNone, twdesc) +WALL( '.', 0x309060, "temporary bridge", waTempBridge, ZERO | WF_TIMEOUT, RESERVED, 1, sgNone, twdesc) +WALL( '#', 0x3030FF, "charged wall", waCharged, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, elecdesc) +WALL( '#', 0xFF3030, "grounded wall", waGrounded, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, elecdesc) +WALL( '#', 0xA0A060, "sandstone wall", waSandstone, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, elecdesc) +WALL( '#', 0x704000, "saloon wall", waSaloon, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, wildwestdesc) +WALL( '#', 0x90C0C0, "metal wall", waMetal, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, elecdesc) +WALL( '#', 0x607030, "dead troll", waDeadTroll2, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, trollhelpX) +WALL( '+', 0xC0C0FF, "fan", waFan, WF_WALL, RESERVED, 0, sgNone, winddesc) +WALL( '?', 0xFF00FF, "", waTemporary, WF_WALL, RESERVED, 0, sgNone, NODESC) +WALL( '?', 0xFF00FF, "", waElementalTmp, WF_WALL, RESERVED, 0, sgNone, NODESC) +WALL( '?', 0xFF00FF, "", waElementalD, WF_WALL, RESERVED, 0, sgNone, NODESC) +WALL( '+', 0x00F000, "green slime", waSlime1, ZERO, RESERVED, 0, sgNone, NODESC) +WALL( '+', 0xF0F000, "yellow slime", waSlime2, ZERO, RESERVED, 0, sgNone, NODESC) +WALL( '#', 0x764e7c, "rosebush", waRose, WF_WALL | WF_HIGHWALL | WF_THORNY, RESERVED, 0, sgNone, roselanddesc) +WALL( '#', 0xC0C000, "warp gate", waWarpGate, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, + "This gate separates the warped area from the normal land.") +WALL( '+', 0x804000, "trunk", waTrunk, ZERO | WF_NOFLIGHT, RESERVED, 0, sgNone, "The skeleton of a tree.") +WALL( '-', 0x402000, "solid branch", waSolidBranch, ZERO, RESERVED, 0, sgNone, "Branches here could bear your weight easily.") +WALL( ':', 0x804000, "weak branch", waWeakBranch, ZERO, RESERVED, 0, sgNone, + "Branches here will bear you weight, but if you use them to move (not fall) to an unstable place, they will break.") +WALL( '+', 0x60C060, "canopy", waCanopy, ZERO, RESERVED, 0, sgNone, + "Only thin twigs and leaves here. They may bear fruits, but for you, these cells count " + "as unstable." + ) +WALL( '#', 0xD0C060, "barrow wall", waBarrowWall, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, "This wall is quite strong. You will need another way in.") +WALL( '#', 0x90A060, "barrow", waBarrowDig, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, "Your Orb of the Sword can be used to dig here.") +WALL( '#', 0xE0E0E0, "stone statue", waPetrified, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, "A petrified creature.") +WALL( '.', 0xE8E8E8, "tower of Camelot", waTower, ZERO, RESERVED, 3, sgNone, camelothelp) +WALL( '-', 0x402000, "big bush", waBigBush, ZERO | WF_NOFLIGHT, RESERVED, 0, sgNone, + "You can hold this bush to climb the Lost Mountain. " + "Bushes block the movement of birds." + ) +WALL( ':', 0x804000, "small bush", waSmallBush, ZERO | WF_NOFLIGHT, RESERVED, 0, sgNone, + "You can hold this bush to climb the Lost Mountain, " + "but it is not very strong -- it will get destroyed " + "if you climb from it into an unstable location. " + "Bushes block the movement of birds.") +WALL( '.', 0xFFFF00, "Reptile floor", waReptile, ZERO | WF_REPTILE, RESERVED, 0, sgNone, reptiledesc) +WALL( '.', 0xFFFF00, "Reptile bridge", waReptileBridge, ZERO | WF_REPTILE, RESERVED, 0, sgNone, reptiledesc) +WALL( '.', 0xFFFF00, "invisible floor", waInvisibleFloor, ZERO, RESERVED, 0, sgNone, NODESCYET) +WALL( '#', 0xC0C0FF, "mirror wall", waMirrorWall, WF_WALL, RESERVED, 0, sgNone, mirroreddesc) +WALL( '.', 0xE0E0E0, "stepping stones", waPetrifiedBridge, ZERO, RESERVED, 1, sgNone, "A petrified creature.") +WALL( '#', 0x309060, "temporary wall", waTempBridgeBlocked, WF_WALL | WF_HIGHWALL | WF_TIMEOUT, RESERVED, 0, sgNone, twdesc) +WALL( 'S', 0xB0B0B0, "warrior statue", waTerraWarrior, WF_WALL, RESERVED, 0, sgNone, terradesc) +WALL( '=', 0xB0B0B0, "bubbling slime", waBubble, ZERO | WF_CHASM, RESERVED, 0, sgNone, NODESC) +WALL( '^', 0xD00000, "arrow trap", waArrowTrap, ZERO, RESERVED, 0, sgNone, arrowtrapdesc) +WALL( '=', 0xE2E2E2, "mercury river", waMercury, ZERO | WF_CHASM, RESERVED, 0, sgNone, "A river of mercury.") +WALL( '&', 0xD00000, "lava", waMagma, ZERO, RESERVED, 1, sgNone, lavadesc) +WALL( '=', 0x804000, "dock", waDock, ZERO, RESERVED, 0, sgNone, "A dock.") +WALL( '^', 0xFF8000, "burning dock", waBurningDock, WF_FIRE | WF_TIMEOUT, RESERVED, 0, sgNone, "A burning dock.") +WALL( '#', 0xE04030, "ruin wall", waRuinWall, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, ruindesc) +WALL( '#', 0xA04060, "Brownian generator", waBrownian, WF_WALL | WF_HIGHWALL, RESERVED, 0, sgNone, NODESC) +WALL( '^', 0xC05000, "fire trap", waFireTrap, ZERO, RESERVED, 0, sgNone, + "This trap will explode when stepped on, setting all the adjacent cells on fire. However, this happens on the next turn, " + "so you can safely escape if you are fast enough.") +WALL( '^', 0xFD692F, "Explosive Barrel", waExplosiveBarrel, WF_WALL | WF_PUSHABLE, RESERVED, 0, sgNone, + "These barrels can be pushed, and they will explode if next to a fire, or under some attacks." + ) +WALL( '#', 0xC0C0C0, "editable statue", waEditStatue, WF_WALL, RESERVED, 0, sgNone, + "A statue." + ) +WALL( '+', 0x804000, "trunk", waTrunk3, WF_WALL, RESERVED, 0, sgNone, "The skeleton of a tree.") + + +LAND( 0xFF00FF, "???" , laNone, ZERO | LF_TECHNICAL, itNone, RESERVED, "") +LAND( 0xC06000, "Great Wall" , laBarrier, ZERO | LF_TECHNICAL, itNone, RESERVED, "") +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" + "As long as you have found enough treasure in their native lands, you can " + "find magical items in the Crossroads. Mirror Land brings mirrors and clouds, " + "and other land types bring magical orbs.\n\n" + "A special treasure, Hyperstone, can be found on the Crossroads, but only " + "after you have found 10 of every other treasure." + ) +LAND( 0xCDA98F, "Desert", laDesert, ZERO, itSpice, RESERVED, + "A hot land, full of sand dunes, mysterious Spice, and huge and dangerous sand worms." + ) +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." + ) +LAND( 0x306060, "Living Cave", laCaves, ZERO | LF_TROLL, itGold, RESERVED, cavehelp) +LAND( 0x00C000, "Jungle", laJungle, ZERO, itRuby, RESERVED, + "A land filled with huge ivy plants and dangerous animals." + ) +LAND( 0x900090, "Alchemist Lab", laAlchemist, ZERO, itElixir, RESERVED, slimehelp) +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." + ) +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..." + ) +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." + ) +LAND( 0xC00000, "Hell", laHell, ZERO, itHell, RESERVED, + "A land filled with demons and molten sulphur. Abandon all hope ye who enter here!" + ) +LAND( 0x00FF00, "Cocytus", laCocytus, ZERO | LF_ICY, itSapphire, RESERVED, + cocytushelp + ) +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" + ) +LAND( 0x008000, "Dry Forest", laDryForest, ZERO, itFernFlower, RESERVED, foresthelp) +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." + ) +LAND( 0x421C52, "Vineyard", laWineyard, ZERO, itWine, RESERVED, vinehelp) +LAND( 0x104040, "Dead Cave", laDeadCaves, ZERO | LF_TROLL, itSilver, RESERVED, deadcavehelp) +LAND( 0x705020, "Hive", laHive, ZERO, itRoyalJelly, RESERVED, hivehelp) +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 " + "are kept in crystal cabinets.\n\n" + "Witches are allowed to use all the powers of the " + "basic orbs against intruders. These powers never expire, but a Witch " + "can use only one power at a time (not counting Orbs of Life).\n\n" + "Witches and Golems don't pursue you into other Lands. Also, most Orb powers " + "are drained when you leave the Land of Power." + ) +LAND( 0xD0D0D0, "Camelot", laCamelot, ZERO | LF_CYCLIC, itHolyGrail, RESERVED, camelothelp ) +LAND( 0xD000D0, "Temple of Cthulhu", laTemple, ZERO | LF_CYCLIC, itGrimoire, RESERVED, templehelp ) +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." + ) +LAND( 0x0000FF, "Caribbean", laCaribbean, ZERO | LF_SEA | LF_PURESEA, itPirate, RESERVED, caribbeanhelp) +LAND( 0x400000, "Red Rock Valley", laRedRock, ZERO | LF_TROLL, itRedGem, RESERVED, redrockhelp ) +LAND( 0xD0D0D0, "Minefield", laMinefield, ZERO, itBombEgg, RESERVED, minedesc) +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." + ) +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." + ) +LAND( 0xFFD500, "Palace", laPalace, ZERO, itPalace, RESERVED, palacedesc ) +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. " + "Contrary to the Living Caves, this process is not affected by most items and monsters, " + "but elementals, dead Trolls, and cells outside of the Living Fjord have " + "a very powerful effect." + ) +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.") +LAND( 0x606060, "Zebra", laZebra, ZERO, itZebra, RESERVED, "Everything in this Land has black and white stripes.") +LAND( 0xC08080, "Plane of Fire", laEFire, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc) +LAND( 0x808080, "Plane of Air", laEAir, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc) +LAND( 0x80C080, "Plane of Earth", laEEarth, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc) +LAND( 0x8080C0, "Plane of Water", laEWater, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc) +LAND( 0x4040FF, "Crossroads III", laCrossroads3, ZERO, itHyperstone, RESERVED, + "An alternate layout of the Crossroads. Great Walls cross here at right angles." + ) +LAND( 0x4040C0, "Sea Border", laOceanWall, ZERO | LF_TECHNICAL | LF_SEA, itNone, RESERVED, "Border between seas.") +LAND( 0x4040C0, "Elemental Planes", laElementalWall, ZERO | LF_ELEMENTAL, itElemental, RESERVED, elemdesc) +LAND( 0xE08020, "Canvas", laCanvas, ZERO | LF_TECHNICAL, itNone, RESERVED, "A fake Land with colored floors.") +LAND( 0x00C000, "Palace Quest", laPrincessQuest, ZERO, itSavedPrincess, RESERVED, princessdesc) // fake +LAND( 0xD0D060, "Wild West", laWildWest, ZERO, itBounty, RESERVED, wildwestdesc) +LAND( 0x80A080, "Land of Storms", laStorms, ZERO | LF_TROLL, itFulgurite, RESERVED, elecdesc) +LAND( 0x20A050, "Overgrown Woods", laOvergrown, ZERO | LF_TROLL, itMutant, RESERVED, overdesc) +LAND( 0x20D050, "Clearing", laClearing, ZERO | LF_CYCLIC, itMutant2, RESERVED, cleardesc) +LAND( 0x303030, "Haunted Woods", laHaunted, ZERO | LF_EQUI | LF_HAUNTED, itLotus, RESERVED, hauntdesc) +LAND( 0x303030, "Haunted Woods", laHauntedWall, ZERO | LF_EQUI | LF_TECHNICAL | LF_HAUNTED, itLotus, RESERVED, hauntdesc) +LAND( 0x303030, "Haunted Woods", laHauntedBorder, ZERO | LF_EQUI | LF_TECHNICAL | LF_HAUNTED, itLotus, RESERVED, hauntdesc) +LAND( 0xC0C0FF, "Windy Plains", laWhirlwind, ZERO, itWindstone, RESERVED, winddesc) +LAND( 0x764e7c*2, "Rose Garden", laRose, ZERO, itRose, RESERVED, roselanddesc) +LAND( 0xFFD580, "Warped Coast", laWarpCoast, ZERO | LF_WARPED | LF_COASTAL, itCoral, RESERVED, warplanddesc) +LAND( 0xFFD580, "Warped Sea", laWarpSea, ZERO | LF_WARPED | LF_SEA | LF_COASTAL, itCoral, RESERVED, warplanddesc) +LAND( 0xC08080, "Crossroads IV", laCrossroads4, ZERO, itHyperstone, RESERVED, + "An alternate layout of the Crossroads, without walls." + ) +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." + ) +LAND( 0x487830, "Galápagos", laTortoise, ZERO, itBabyTortoise, RESERVED, tortoisedesc) +LAND( 0xD04000, "Dragon Chasms", laDragon, ZERO, itDragon, RESERVED, dragondesc) +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 " + "of a magical weapon spell somewhere in the depths...\n\n" + + "You can find Sunken Treasures here, but they won't appear until you have killed " + "a Kraken. You will also need Orb of the Fish to get the treasures, luckily you can " + "steal one from the Viking treasure hunters." + ) +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." + ) +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?" + ) +LAND( 0xFF7518, "Halloween", laHalloween, ZERO, itTreat, RESERVED, halloweendesc) +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." + ) +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).") +LAND( 0xFFFF00, "Reptiles", laReptile, ZERO, itDodeca, RESERVED, reptiledesc) +LAND( 0x0000D0, "Prairie", laPrairie, ZERO, itGreenGrass, RESERVED, prairiedesc) +LAND( 0x800080, "Bull Dash", laBull, ZERO, itBull, RESERVED, bulldashdesc) +LAND( 0xC000C0, "Crossroads V", laCrossroads5, ZERO, itHyperstone, RESERVED, "Extremely narrow Crossroads layout.\n") +LAND( 0xC0C0C0, "Cellular Automaton", laCA, ZERO | LF_TECHNICAL, itNone, RESERVED, cadesc) +LAND( 0xC0C0FF, "Mirror Wall", laMirrorWall, ZERO | LF_TECHNICAL | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc) +LAND( 0xC8C8FF, "Reflection", laMirrored, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc) +LAND( 0xC0C0FF, "Reflection", laMirrorWall2, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc) +LAND( 0xC8C8FF, "Reflection", laMirrored2, ZERO | LF_TECHNICAL | LF_INMIRROR | LF_INMIRRORORWALL, itShard, RESERVED, mirroreddesc) +LAND( 0xC8C8FF, "Mirror Land", laMirrorOld, ZERO | LF_MIRROR, itShard, RESERVED, + "A strange land which contains mirrors and mirages, protected by Mirror Rangers.") +LAND( 0xA06000, "Volcanic Wasteland", laVolcano, ZERO, itLavaLily, RESERVED, lavadesc) +LAND( 0x8080FF, "Blizzard", laBlizzard, ZERO | LF_ICY, itBlizzard, RESERVED, blizzarddesc) +LAND( 0x207068, "Hunting Ground", laHunting, ZERO, itHunting, RESERVED, huntingdesc) +LAND( 0xE2725B, "Terracotta Army", laTerracotta, ZERO, itTerra, RESERVED, terraldesc) +LAND( 0xE2725B, "Terracotta Army", laMercuryRiver, ZERO | LF_TECHNICAL, itTerra, RESERVED, terraldesc) +LAND( 0x80FF00, "Crystal World", laDual, ZERO, itGlowCrystal, RESERVED, crystaldesc) +LAND( 0x306030, "Snake Nest", laSnakeNest, ZERO, itSnake, RESERVED, NODESCYET) +LAND( 0x80FF00, "Docks", laDocks, ZERO | LF_SEA, itDock, RESERVED, NODESCYET) +LAND( 0x306030, "Ruined City", laRuins, ZERO, itRuins, RESERVED, ruindesc) +LAND( 0x306030, "Magnetosphere", laMagnetic, ZERO, itMagnet, RESERVED, NODESCYET) +LAND( 0x306030, "Jelly Kingdom", laSwitch, ZERO, itSwitch, RESERVED, jellydesc) +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." + ) +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. " + "The creatures spawned exponentially, but the space they lived in still grew faster, so there was enough space for the whole spawn...\n\n" + "That was a long time ago. Now, the mountainous Brown Islands are inhabited by strange monsters. Good luck adventuring!\n\n" + "Parts of the Brown Islands have different elevations, from 0 to 3. It is impossible to gain two or more levels, " + "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." + ) +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..." + ) +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, " + "you will meet powerful enemies; in other areas, you will find arrow traps, fire traps, or pools, which can kill you if you are " + "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" + ) + +// add new content here + +//shmupspecials +MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, ZERO | MF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.") +MONSTER( '*', 0xC0C0C0, "Knife", moBullet, ZERO | MF_BULLET, RESERVED, moNone, "A simple, but effective, missile, used by rogues.") +MONSTER( '*', 0xFF0000, "Flail", moFlailBullet, ZERO | MF_BULLET, RESERVED, moNone, "This attack is likely to hit the attacker.") +MONSTER( '*', 0xFFFF00, "Fireball", moFireball, ZERO | MF_BULLET, RESERVED, moNone, "This magical missile burns whatever it hits.") +MONSTER( '*', 0xFFFF00, "Tongue", moTongue, ZERO | MF_BULLET, RESERVED, moNone, "Some monsters have long tongues, which allow them to attack enemies in nearby cells.") +MONSTER( '*', 0xFFFFFF, "Airball", moAirball, ZERO | MF_BULLET, RESERVED, moNone, "This magical missile pushes back whatever it hits.") +MONSTER( '*', 0x0060E0, "Blueball", moCrushball, ZERO, RESERVED, moNone, "A powerful missile from a Blue Raider.") + +//technical/temporary +MONSTER( '?', 0x00C000, "dead bug", moDeadBug, ZERO, RESERVED, moNone, NODESC) +// appears as 'killed by electric discharge' +MONSTER( '?', 0xFFFF00, "electric discharge", moLightningBolt, ZERO, RESERVED, moNone, elecdesc) +MONSTER( '?', 0xE06000, "dead bird", moDeadBird, ZERO, RESERVED, moNone, NODESC) +MONSTER( '?', 0xE06000, "Energy Sword", moEnergySword, ZERO, RESERVED, moNone, NODESC) +MONSTER( '!', 0xFF0000, "Warning", moWarning, ZERO, RESERVED, moNone, warningdesc) +MONSTER( '!', 0xFF0000, "arrow trap", moArrowTrap, ZERO | MF_BULLET, RESERVED, moNone, arrowtrapdesc) +MONSTER( '*', 0, "vertex", moRogueviz, ZERO, RESERVED, moNone, "A vertex from rogueviz.") + +#undef MONSTER +#undef LAND +#undef WALL +#undef ITEM +