specified CF_FACE_UP for humanoids and similar, and CF_FACE_SIDE for quadrupeds and similar

This commit is contained in:
Zeno Rogue 2019-04-21 00:57:24 +02:00
parent e95fc386e1
commit 2dd5c66d7f
2 changed files with 130 additions and 128 deletions

View File

@ -60,6 +60,8 @@ static const flagtype CF_GHOSTMOVER = Flag(45);
static const flagtype CF_TECHNICAL = Flag(46); static const flagtype CF_TECHNICAL = Flag(46);
static const flagtype CF_MOVED = Flag(47); static const flagtype CF_MOVED = Flag(47);
static const flagtype CF_FACING = Flag(48); static const flagtype CF_FACING = Flag(48);
static const flagtype CF_FACE_UP = Flag(49);
static const flagtype CF_FACE_SIDE = Flag(50);
enum eMonster { enum eMonster {
#define MONSTER(a,b,c,d,e,f,g,h) d, #define MONSTER(a,b,c,d,e,f,g,h) d,

View File

@ -31,21 +31,21 @@
MONSTER( 0, 0, "no monster" , moNone, ZERO | CF_NOGHOST | CF_NOBLOW, RESERVED, moNone, NULL) MONSTER( 0, 0, "no monster" , moNone, ZERO | CF_NOGHOST | CF_NOBLOW, RESERVED, moNone, NULL)
MONSTER( 'Y', 0x4040FF, "Yeti" , moYeti, ZERO, RESERVED, moYeti, MONSTER( 'Y', 0x4040FF, "Yeti" , moYeti, CF_FACE_UP, RESERVED, moYeti,
"A big and quite intelligent monster living in the Icy Land." "A big and quite intelligent monster living in the Icy Land."
) )
MONSTER( 'W', 0xD08040, "Icewolf" , moWolf, ZERO, RESERVED, moYeti, MONSTER( 'W', 0xD08040, "Icewolf" , moWolf, CF_FACE_SIDE, RESERVED, moYeti,
"A nasty predator from the Icy Land. Contrary to other monsters, " "A nasty predator from the Icy Land. Contrary to other monsters, "
"it tracks its prey by their heat." "it tracks its prey by their heat."
) )
MONSTER( 'W', 0xD08040, "Icewolf" , moWolfMoved, CF_MOVED, RESERVED, moNone, "") MONSTER( 'W', 0xD08040, "Icewolf" , moWolfMoved, CF_MOVED | CF_FACE_SIDE, RESERVED, moNone, "")
MONSTER( 'R', 0xFF8000, "Ranger" , moRanger, ZERO, RESERVED, moYeti, MONSTER( 'R', 0xFF8000, "Ranger" , moRanger, CF_FACE_UP, RESERVED, moYeti,
"Rangers take care of the magic mirrors in the Land of Mirrors. " "Rangers take care of the magic mirrors in the Land of Mirrors. "
"They know that rogues like to break these mirrors... so " "They know that rogues like to break these mirrors... so "
"they will attack you!" "they will attack you!"
) )
MONSTER( 'T', 0xD0D0D0, "Rock Troll", moTroll, ZERO | CF_TROLL, RESERVED, moYeti, trollhelp) MONSTER( 'T', 0xD0D0D0, "Rock Troll", moTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti, trollhelp)
MONSTER( 'G', 0x20D020, "Goblin", moGoblin, ZERO, RESERVED, moYeti, MONSTER( 'G', 0x20D020, "Goblin", moGoblin, CF_FACE_UP, RESERVED, moYeti,
"A nasty creature native to the Living Caves. They don't like you " "A nasty creature native to the Living Caves. They don't like you "
"for some reason." "for some reason."
) )
@ -54,12 +54,12 @@ MONSTER( 'S', 0xE0E040, "Sand Worm", moWorm, ZERO | CF_NOGHOST | CF_NOBLOW | CF_
MONSTER( 's', 0x808000, "Sand Worm Tail", moWormtail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, wormdes ) MONSTER( 's', 0x808000, "Sand Worm Tail", moWormtail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, wormdes )
MONSTER( 'S', 0x808000, "Sand Worm W", moWormwait, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, wormdes ) MONSTER( 'S', 0x808000, "Sand Worm W", moWormwait, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, wormdes )
MONSTER( 'H', 0x80FF00, "Hedgehog Warrior", moHedge, ZERO, RESERVED, moYeti, MONSTER( 'H', 0x80FF00, "Hedgehog Warrior", moHedge, CF_FACE_UP, RESERVED, moYeti,
"These warriors of the Forest wield exotic weapons called hedgehog blades. " "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' " "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." "easily by moving from one place next to them to another."
) )
MONSTER( 'M', 0x806050, "Desert Man", moDesertman, ZERO, RESERVED, moYeti, MONSTER( 'M', 0x806050, "Desert Man", moDesertman, CF_FACE_UP, RESERVED, moYeti,
"A tribe of men native to the Desert. They have even tamed the huge Sandworms, who won't attack them.") "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 | CF_NOGHOST | CF_NOBLOW | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes) MONSTER( 'C', 0x00FFFF, "Ivy Root", moIvyRoot, ZERO | CF_NOGHOST | CF_NOBLOW | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes)
@ -69,41 +69,41 @@ MONSTER( 'C', 0x006030, "Dormant Ivy", moIvyWait, ZERO | CF_NOGHOST | CF_NOBLOW
MONSTER( 'C', 0x804000, "Dead Ivy", moIvyNext, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_NOHIGHLIGHT | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes) MONSTER( 'C', 0x804000, "Dead Ivy", moIvyNext, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_NOHIGHLIGHT | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes)
MONSTER( 'C', 0x800000, "Dead Ivy", moIvyDead, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_NOHIGHLIGHT | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes) MONSTER( 'C', 0x800000, "Dead Ivy", moIvyDead, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_NOHIGHLIGHT | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_IVY | CF_INACTIVE, RESERVED, moNone, ivydes)
MONSTER( 'M', 0x804000, "Giant Ape", moMonkey, ZERO, RESERVED, moYeti, MONSTER( 'M', 0x804000, "Giant Ape", moMonkey, CF_FACE_UP, RESERVED, moYeti,
"This giant ape thinks that you are an enemy.") "This giant ape thinks that you are an enemy.")
MONSTER( 'B', 0x909000, "Slime Beast", moSlime, ZERO | CF_NOBLOW | CF_SLIME | CF_IGNORE_SMELL, RESERVED, moSlime, slimehelp) MONSTER( 'B', 0x909000, "Slime Beast", moSlime, CF_FACE_UP | CF_NOBLOW | CF_SLIME | CF_IGNORE_SMELL, RESERVED, moSlime, slimehelp)
MONSTER( '@', 0xFF80FF, "Mimic", moMimic, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MIMIC | CF_NONLIVING | CF_FRIENDLY | CF_FACING, RESERVED, moNone, MONSTER( '@', 0xFF80FF, "Mimic", moMimic, CF_FACE_UP | CF_NOGHOST | CF_NOBLOW | CF_MIMIC | CF_NONLIVING | CF_FRIENDLY | CF_FACING, RESERVED, moNone,
"A magical being which copies your movements. " "A magical being which copies your movements. "
"You feel that it would be much more useful in an Euclidean space." "You feel that it would be much more useful in an Euclidean space."
) )
MONSTER( '@', 0xFF8080, "Mirage (REMOVED)", moREMOVED, ZERO, RESERVED, moNone, MONSTER( '@', 0xFF8080, "Mirage (REMOVED)", moREMOVED, ZERO, RESERVED, moNone,
"A magical being which copies your movements. " "A magical being which copies your movements. "
) )
MONSTER( '@', 0x509050, "Golem", moGolem, ZERO | CF_NOGHOST | CF_GOK | CF_NONLIVING | CF_FRIENDLY | CF_FACING, RESERVED, moNone, MONSTER( '@', 0x509050, "Golem", moGolem, CF_FACE_UP | CF_NOGHOST | CF_GOK | CF_NONLIVING | CF_FRIENDLY | CF_FACING, RESERVED, moNone,
"You can summon these friendly constructs with a magical process." "You can summon these friendly constructs with a magical process."
) )
MONSTER( '@', 0x509050, "Golem", moGolemMoved, ZERO | CF_NOGHOST | CF_GOK | CF_NONLIVING | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone, MONSTER( '@', 0x509050, "Golem", moGolemMoved, CF_FACE_UP | CF_NOGHOST | CF_GOK | CF_NONLIVING | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone,
"You can summon these friendly constructs with a magical process." "You can summon these friendly constructs with a magical process."
) )
MONSTER( 'E', 0xD09050, "Eagle", moEagle, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'E', 0xD09050, "Eagle", moEagle, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"A majestic bird, who is able to fly very fast." "A majestic bird, who is able to fly very fast."
) )
MONSTER( 'S', 0xFF8080, "Seep", moSeep, ZERO | CF_NOBLOW | CF_SLIME | CF_IGNORE_SMELL, RESERVED, moSlime, MONSTER( 'S', 0xFF8080, "Seep", moSeep, CF_FACE_SIDE | CF_NOBLOW | CF_SLIME | CF_IGNORE_SMELL, RESERVED, moSlime,
"A monster who is able to live inside the living cave wall." "A monster who is able to live inside the living cave wall."
) )
MONSTER( 'Z', 0x804000, "Zombie", moZombie, ZERO | CF_NONLIVING, RESERVED, moYeti, MONSTER( 'Z', 0x804000, "Zombie", moZombie, CF_FACE_UP | CF_NONLIVING, RESERVED, moYeti,
"A typical Graveyard monster." "A typical Graveyard monster."
) )
MONSTER( 'G', 0xFFFFFF, "Ghost", moGhost, ZERO | CF_NOBLOW | CF_NONLIVING | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE | CF_IGNORE_SMELL | CF_GHOSTMOVER, RESERVED, moGhost, MONSTER( 'G', 0xFFFFFF, "Ghost", moGhost, CF_FACE_SIDE | CF_NOBLOW | CF_NONLIVING | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE | CF_IGNORE_SMELL | CF_GHOSTMOVER, RESERVED, moGhost,
"A typical monster from the Graveyard, who moves through walls.\n\n" "A typical monster from the Graveyard, who moves through walls.\n\n"
"There are also wandering Ghosts. They will appear " "There are also wandering Ghosts. They will appear "
"if you do not explore any new places for a long time (about 100 turns). " "if you do not explore any new places for a long time (about 100 turns). "
"They can appear anywhere in the game." "They can appear anywhere in the game."
) )
MONSTER( 'N', 0x404040, "Necromancer", moNecromancer, ZERO, RESERVED, moYeti, MONSTER( 'N', 0x404040, "Necromancer", moNecromancer, CF_FACE_UP, RESERVED, moYeti,
"Necromancers can raise ghosts and zombies from fresh graves." "Necromancers can raise ghosts and zombies from fresh graves."
) )
MONSTER( 'S', 0x404040, "Shadow", moShadow, ZERO | CF_NOBLOW | CF_NONLIVING, RESERVED, moNone, MONSTER( 'S', 0x404040, "Shadow", moShadow, CF_FACE_UP | CF_NOBLOW | CF_NONLIVING, RESERVED, moNone,
"A creepy monster who follows you everywhere in the Graveyard." "A creepy monster who follows you everywhere in the Graveyard."
) )
MONSTER( 'T', 0x40E040, "Tentacle", moTentacle, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes ) MONSTER( 'T', 0x40E040, "Tentacle", moTentacle, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes )
@ -111,236 +111,236 @@ MONSTER( 't', 0x008000, "Tentacle Tail", moTentacletail, ZERO | CF_NOGHOST | CF_
MONSTER( 'T', 0x008000, "Tentacle W", moTentaclewait, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, tentdes ) MONSTER( 'T', 0x008000, "Tentacle W", moTentaclewait, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, tentdes )
MONSTER( 'z', 0xC00000, "Tentacle (withdrawing)", moTentacleEscaping, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes ) MONSTER( 'z', 0xC00000, "Tentacle (withdrawing)", moTentacleEscaping, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM, RESERVED, moNone, tentdes )
MONSTER( 'P', 0xFF8000, "Cultist", moCultist, ZERO, RESERVED, moYeti, MONSTER( 'P', 0xFF8000, "Cultist", moCultist, CF_FACE_UP, RESERVED, moYeti,
"People worshipping Cthulhu. They are very dangerous." "People worshipping Cthulhu. They are very dangerous."
) )
MONSTER( 'P', 0xFFFF00, "Fire Cultist", moPyroCultist, ZERO, RESERVED, moYeti, MONSTER( 'P', 0xFFFF00, "Fire Cultist", moPyroCultist, CF_FACE_UP, RESERVED, moYeti,
"People worshipping Cthulhu. This one is especially dangerous, " "People worshipping Cthulhu. This one is especially dangerous, "
"as he is armed with a weapon which launches fire from afar." "as he is armed with a weapon which launches fire from afar."
) )
MONSTER( 'D', 0xFF0000, "Greater Demon", moGreater, ZERO | CF_DEMON | CF_SLOWMOVER, RESERVED, moYeti, gdemonhelp) MONSTER( 'D', 0xFF0000, "Greater Demon", moGreater, CF_FACE_UP | CF_DEMON | CF_SLOWMOVER, RESERVED, moYeti, gdemonhelp)
MONSTER( 'D', 0x800000, "Greater Demon", moGreaterM, ZERO | CF_DEMON | CF_INACTIVE, RESERVED, moLesser, gdemonhelp) MONSTER( 'D', 0x800000, "Greater Demon", moGreaterM, CF_FACE_UP | CF_DEMON | CF_INACTIVE, RESERVED, moLesser, gdemonhelp)
MONSTER( 'd', 0xFF2020, "Lesser Demon", moLesser, ZERO | CF_DEMON | CF_SLOWMOVER, RESERVED, moYeti, ldemonhelp) MONSTER( 'd', 0xFF2020, "Lesser Demon", moLesser, CF_FACE_UP | CF_DEMON | CF_SLOWMOVER, RESERVED, moYeti, ldemonhelp)
MONSTER( 'd', 0x802020, "Lesser Demon", moLesserM, ZERO | CF_DEMON | CF_INACTIVE, RESERVED, moLesser, ldemonhelp) MONSTER( 'd', 0x802020, "Lesser Demon", moLesserM, CF_FACE_UP | CF_DEMON | CF_INACTIVE, RESERVED, moLesser, ldemonhelp)
MONSTER( 'S', 0x2070C0, "Ice Shark", moShark, ZERO | CF_SHARK, RESERVED, moShark, MONSTER( 'S', 0x2070C0, "Ice Shark", moShark, CF_FACE_SIDE | CF_SHARK, RESERVED, moShark,
"This dangerous predator has killed many people, and has been sent to Cocytus." "This dangerous predator has killed many people, and has been sent to Cocytus."
) )
MONSTER( 'W', 0xFFFFFF, "Running Dog", moRunDog, ZERO, RESERVED, moYeti, MONSTER( 'W', 0xFFFFFF, "Running Dog", moRunDog, CF_FACE_SIDE, RESERVED, moYeti,
"This white dog is able to run all the time. It is the only creature " "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." "able to survive and breed in the Land of Eternal Motion."
) )
MONSTER( 'S', 0xC00040, "Demon Shark", moGreaterShark, ZERO | CF_NOBLOW | CF_SHARK | CF_IGNORE_SMELL | CF_GHOSTMOVER, RESERVED, moGreaterShark, MONSTER( 'S', 0xC00040, "Demon Shark", moGreaterShark, CF_FACE_SIDE | CF_NOBLOW | CF_SHARK | CF_IGNORE_SMELL | CF_GHOSTMOVER, RESERVED, moGreaterShark,
"Demons of Hell do not drown when they fall into the lake in Cocytus. " "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." "They turn into demonic sharks, enveloped in a cloud of steam."
) )
MONSTER( 'S', 0xC00040, "Fire Fairy", moFireFairy, ZERO, RESERVED, moYeti, MONSTER( 'S', 0xC00040, "Fire Fairy", moFireFairy, CF_FACE_UP, RESERVED, moYeti,
"These fairies would rather burn the forest, than let you get some Fern Flowers. " "These fairies would rather burn the forest, than let you get some Fern Flowers. "
"The forest is infinite, after all...\n\n" "The forest is infinite, after all...\n\n"
"Fire Fairies transform into fires when they die." "Fire Fairies transform into fires when they die."
) )
MONSTER( 'C', 0x4000C0, "Crystal Sage", moCrystalSage, ZERO | CF_UNARMED, RESERVED, moYeti, MONSTER( 'C', 0x4000C0, "Crystal Sage", moCrystalSage, CF_FACE_UP | CF_UNARMED, RESERVED, moYeti,
"This being radiates an aura of wisdom. " "This being radiates an aura of wisdom. "
"It is made of a beautiful crystal, you would love to take it home. " "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, " "But how is it going to defend itself? Better not to think of it, "
"thinking causes your brain to go hot...\n\n" "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." "Crystal Sages melt at -30 °C, and they can rise the temperature around you from afar."
) )
MONSTER( 'P', 0x4040C0, "Pikeman", moLancer, ZERO, RESERVED, moYeti, MONSTER( 'P', 0x4040C0, "Pikeman", moLancer, CF_FACE_UP, RESERVED, moYeti,
"When Pikemen move, they attack all cells which are now adjacent to them. " "When Pikemen move, they attack all cells which are now adjacent to them. "
"Luckily, they can be killed in the same way.\n\n" "Luckily, they can be killed in the same way.\n\n"
"They never move if this would attack their friends." "They never move if this would attack their friends."
) )
MONSTER( 'F', 0xC04040, "Flail Guard", moFlailer, ZERO, RESERVED, moYeti, MONSTER( 'F', 0xC04040, "Flail Guard", moFlailer, CF_FACE_UP, RESERVED, moYeti,
"This guard of the Emerald Mine is wielding a huge flail. " "This guard of the Emerald Mine is wielding a huge flail. "
"You cannot attack him directly, as the flail would still hit you then. " "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, " "Luckily, you have learned a trick: if you step away from him, "
"he will hit himself with the flail!" "he will hit himself with the flail!"
) )
MONSTER( 'M', 0x404040, "Miner", moMiner, ZERO, RESERVED, moYeti, MONSTER( 'M', 0x404040, "Miner", moMiner, CF_FACE_UP, RESERVED, moYeti,
"Miners have special tools for dealing with the Living Cave. " "Miners have special tools for dealing with the Living Cave. "
"When they die, these tools activate, destroying the living cave " "When they die, these tools activate, destroying the living cave "
"around them." "around them."
) )
MONSTER( 'V', 0x421C52, "Vine Beast", moVineBeast, ZERO, RESERVED, moYeti, MONSTER( 'V', 0x421C52, "Vine Beast", moVineBeast, CF_FACE_SIDE, RESERVED, moYeti,
"A beast made of vines!\n\n" "A beast made of vines!\n\n"
"Vine Beasts turn into vines when they die." "Vine Beasts turn into vines when they die."
) )
MONSTER( 'V', 0xFFC0C0, "Vine Spirit", moVineSpirit, ZERO | CF_NOBLOW | CF_SLIME | CF_ATTACK_THRU_VINE | CF_IGNORE_SMELL, RESERVED, moSlime, MONSTER( 'V', 0xFFC0C0, "Vine Spirit", moVineSpirit, CF_FACE_SIDE | CF_NOBLOW | CF_SLIME | CF_ATTACK_THRU_VINE | CF_IGNORE_SMELL, RESERVED, moSlime,
"A spirit living in the vines!\n\n" "A spirit living in the vines!\n\n"
"Vine Spirits destroy the vines when they die." "Vine Spirits destroy the vines when they die."
) )
MONSTER( 'T', 0x803030, "Dark Troll", moDarkTroll, ZERO | CF_TROLL, RESERVED, moYeti, MONSTER( 'T', 0x803030, "Dark Troll", moDarkTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti,
"A Troll without the power of Life." "A Troll without the power of Life."
) )
MONSTER( 'E', 0xFFFF40, "Earth Elemental", moEarthElemental, ZERO | CF_NONLIVING, RESERVED, moEarthElemental, MONSTER( 'E', 0xFFFF40, "Earth Elemental", moEarthElemental, CF_FACE_UP | CF_NONLIVING, RESERVED, moEarthElemental,
"A rare unliving construct from the Dead Caves. " "A rare unliving construct from the Dead Caves. "
"It instantly destroys cave walls next to its path, and also leaves " "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 " "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..." "escape from some threats. You hope you won't meet these threats..."
) )
MONSTER( 'B', 0xC04040, "Red Hyperbug", moBug0, ZERO | CF_BUG | CF_FACING, RESERVED, moBug0, hivehelp) MONSTER( 'B', 0xC04040, "Red Hyperbug", moBug0, CF_FACE_SIDE | CF_BUG | CF_FACING, RESERVED, moBug0, hivehelp)
MONSTER( 'B', 0x40C040, "Green Hyperbug", moBug1, ZERO | CF_BUG | CF_FACING, RESERVED, moBug1, hivehelp) MONSTER( 'B', 0x40C040, "Green Hyperbug", moBug1, CF_FACE_SIDE | CF_BUG | CF_FACING, RESERVED, moBug1, hivehelp)
MONSTER( 'B', 0x4040C0, "Blue Hyperbug", moBug2, ZERO | CF_BUG | CF_FACING, RESERVED, moBug2, hivehelp) MONSTER( 'B', 0x4040C0, "Blue Hyperbug", moBug2, CF_FACE_SIDE | CF_BUG | CF_FACING, RESERVED, moBug2, hivehelp)
MONSTER( 'W', 0x404040, "Witch Apprentice", moWitch, ZERO | CF_WITCH | CF_POWER, RESERVED, moYeti, MONSTER( 'W', 0x404040, "Witch Apprentice", moWitch, CF_FACE_UP | CF_WITCH | CF_POWER, RESERVED, moYeti,
"A Witch without any special powers. But watch out! She will " "A Witch without any special powers. But watch out! She will "
"pick up any basic Orbs on her path, and use their powers." "pick up any basic Orbs on her path, and use their powers."
) )
MONSTER( 'W', 0xFF4040, "Speed Witch", moWitchSpeed, ZERO | CF_WITCH | CF_POWER, RESERVED, moYeti, MONSTER( 'W', 0xFF4040, "Speed Witch", moWitchSpeed, CF_FACE_UP | CF_WITCH | CF_POWER, RESERVED, moYeti,
"A Witch with a Speed spell. She moves twice as fast as you. Unless you " "A Witch with a Speed spell. She moves twice as fast as you. Unless you "
"have an Orb of Speed too, of course!" "have an Orb of Speed too, of course!"
) )
MONSTER( 'W', 0xFFFFFF, "Flash Witch", moWitchFlash, ZERO | CF_WITCH | CF_POWER, RESERVED, moYeti, MONSTER( 'W', 0xFFFFFF, "Flash Witch", moWitchFlash, CF_FACE_UP | CF_WITCH | CF_POWER, RESERVED, moYeti,
"A Witch with a Flash spell. Very dangerous!\n\n" "A Witch with a Flash spell. Very dangerous!\n\n"
"Luckily, she never uses the spell if it would kill her friends. " "Luckily, she never uses the spell if it would kill her friends. "
"She could destroy an Evil Golem, though." "She could destroy an Evil Golem, though."
) )
MONSTER( 'W', 0xFF8000, "Fire Witch", moWitchFire, ZERO | CF_WITCH | CF_POWER, RESERVED, moYeti, MONSTER( 'W', 0xFF8000, "Fire Witch", moWitchFire, CF_FACE_UP | CF_WITCH | CF_POWER, RESERVED, moYeti,
"A Witch with a Fire spell. She will leave a trail of fire behind her." "A Witch with a Fire spell. She will leave a trail of fire behind her."
) )
MONSTER( 'W', 0x8080FF, "Winter Witch", moWitchWinter, ZERO | CF_WITCH | CF_IGNORE_SMELL | CF_GHOSTMOVER | CF_POWER, RESERVED, moWitchWinter, MONSTER( 'W', 0x8080FF, "Winter Witch", moWitchWinter, CF_FACE_UP | CF_WITCH | CF_IGNORE_SMELL | CF_GHOSTMOVER | CF_POWER, RESERVED, moWitchWinter,
"A Witch with a Winter spell. She is able to move through fire." "A Witch with a Winter spell. She is able to move through fire."
) )
MONSTER( 'W', 0x808080, "Aether Witch", moWitchGhost, ZERO | CF_NOBLOW | CF_WITCH | CF_IGNORE_SMELL | CF_GHOSTMOVER | CF_POWER, RESERVED, moWitchGhost, MONSTER( 'W', 0x808080, "Aether Witch", moWitchGhost, CF_FACE_UP | CF_NOBLOW | CF_WITCH | CF_IGNORE_SMELL | CF_GHOSTMOVER | CF_POWER, RESERVED, moWitchGhost,
"A Witch with an Aether spell. She is able to move through fire and walls." "A Witch with an Aether spell. She is able to move through fire and walls."
) )
MONSTER( '@', 0x905050, "Evil Golem", moEvilGolem, ZERO | CF_NONLIVING | CF_POWER, RESERVED, moYeti, MONSTER( '@', 0x905050, "Evil Golem", moEvilGolem, CF_FACE_UP | CF_NONLIVING | CF_POWER, RESERVED, moYeti,
"Somebody has summoned these evil constructs with a magical process." "Somebody has summoned these evil constructs with a magical process."
) )
MONSTER( '@', 0x8080FF, "Knight", moKnight, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING, RESERVED, moNone, camelothelp ) MONSTER( '@', 0x8080FF, "Knight", moKnight, CF_FACE_UP | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING, RESERVED, moNone, camelothelp )
MONSTER( 'P', 0xD10000, "Cult Leader", moCultistLeader, ZERO | CF_LEADER, RESERVED, moPirate, MONSTER( 'P', 0xD10000, "Cult Leader", moCultistLeader, CF_FACE_UP | CF_LEADER, RESERVED, moPirate,
"These Cultists can push the statues, just like you." "These Cultists can push the statues, just like you."
) )
MONSTER( 'B', 0x909000, "Slime Beast", moSlimeNextTurn, ZERO, RESERVED, moNone, slimehelp) MONSTER( 'B', 0x909000, "Slime Beast", moSlimeNextTurn, CF_FACE_UP, RESERVED, moNone, slimehelp)
MONSTER( '@', 0x8080FF, "Knight", moKnightMoved, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone, camelothelp ) MONSTER( '@', 0x8080FF, "Knight", moKnightMoved, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone, camelothelp )
MONSTER( '@', 0x8B4513, "Illusion", moIllusion, ZERO | CF_NOGHOST | CF_NONLIVING | CF_FRIENDLY | CF_FACING | CF_IGNORE_PLATE, RESERVED, moNone, MONSTER( '@', 0x8B4513, "Illusion", moIllusion, CF_FACE_SIDE | CF_NOGHOST | CF_NONLIVING | CF_FRIENDLY | CF_FACING | CF_IGNORE_PLATE, RESERVED, moNone,
"Illusions are targeted " "Illusions are targeted "
"by most monsters, just like yourself, Thumpers, and your friends." "by most monsters, just like yourself, Thumpers, and your friends."
) )
MONSTER( 'P', 0xD00000, "Pirate", moPirate, ZERO | CF_LEADER, RESERVED, moPirate, MONSTER( 'P', 0xD00000, "Pirate", moPirate, CF_FACE_UP | CF_LEADER, RESERVED, moPirate,
"Just a typical hyperbolic pirate." ) "Just a typical hyperbolic pirate." )
MONSTER( 'S', 0x8080C0, "Shark", moCShark, ZERO | CF_SHARK, RESERVED, moShark, "Just a nasty shark.") MONSTER( 'S', 0x8080C0, "Shark", moCShark, CF_FACE_SIDE | CF_SHARK, RESERVED, moShark, "Just a nasty shark.")
MONSTER( 'P', 0x0000FF, "Parrot", moParrot, ZERO | CF_NOBLOW | CF_SLIME | CF_IGNORE_SMELL, RESERVED, moSlime, "Parrots feel safe in the forests of Caribbean, so they " MONSTER( 'P', 0x0000FF, "Parrot", moParrot, CF_FACE_SIDE | CF_NOBLOW | CF_SLIME | CF_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.") "never leave them. But they will help the Pirates by attacking the intruders.")
MONSTER( 'S', 0xE09000, "Rock Snake", moHexSnake, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_IGNORE_SMELL | CF_MULTITILE | CF_WORM, RESERVED, moNone, redsnakedes ) MONSTER( 'S', 0xE09000, "Rock Snake", moHexSnake, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_IGNORE_SMELL | CF_MULTITILE | CF_WORM, RESERVED, moNone, redsnakedes )
MONSTER( 's', 0xE09000, "Rock Snake Tail", moHexSnakeTail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, redsnakedes ) MONSTER( 's', 0xE09000, "Rock Snake Tail", moHexSnakeTail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MOUNTABLE | CF_MULTITILE | CF_WORM | CF_INACTIVE, RESERVED, moNone, redsnakedes )
MONSTER( 'T', 0xC02020, "Red Troll", moRedTroll, ZERO | CF_TROLL, RESERVED, moYeti, "A kind of Troll native to the Red Rock Valley.") MONSTER( 'T', 0xC02020, "Red Troll", moRedTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti, "A kind of Troll native to the Red Rock Valley.")
MONSTER( 'B', 0xA00000, "Bomberbird", moBomberbird, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'B', 0xA00000, "Bomberbird", moBomberbird, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"Dark red birds who have created the minefield.\n\n" "Dark red birds who have created the minefield.\n\n"
"They create a mine on the spot where they are killed, provided " "They create a mine on the spot where they are killed, provided "
"that the terrain is suitable. Also note that mines are triggered " "that the terrain is suitable. Also note that mines are triggered "
"by dead birds falling on them." "by dead birds falling on them."
) )
MONSTER( 'A', 0xFFFFFF, "Albatross", moAlbatross, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'A', 0xFFFFFF, "Albatross", moAlbatross, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"Those large seabirds attack you for some reason. At least they are not " "Those large seabirds attack you for some reason. At least they are not "
"as fast as Eagles..." "as fast as Eagles..."
) )
MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbird, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moTameBomberbird, tamebomberdesc) MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbird, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moTameBomberbird, tamebomberdesc)
MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbirdMoved, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE | CF_MOVED, RESERVED, moTameBomberbird, tamebomberdesc) MONSTER( 'B', 0x40C000, "Tame Bomberbird", moTameBomberbirdMoved, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE | CF_MOVED, RESERVED, moTameBomberbird, tamebomberdesc)
MONSTER( 'G', 0xFF0000, "Palace Guard", moPalace, ZERO | CF_STUNNABLE | CF_HP, RESERVED, moYeti, MONSTER( 'G', 0xFF0000, "Palace Guard", moPalace, CF_FACE_UP | CF_STUNNABLE | CF_HP, RESERVED, moYeti,
"You have to hit Palace Guards several times to kill them. After each hit, they " "You have to hit Palace Guards several times to kill them. After each hit, they "
"are pushed away and stunned for some time." "are pushed away and stunned for some time."
) )
MONSTER( 'G', 0xC06000, "Fat Guard", moFatGuard, ZERO | CF_STUNNABLE | CF_HP, RESERVED, moYeti, "Fat guards are too heavy to be pushed away by your hits.") MONSTER( 'G', 0xC06000, "Fat Guard", moFatGuard, CF_FACE_UP | CF_STUNNABLE | CF_HP, RESERVED, moYeti, "Fat guards are too heavy to be pushed away by your hits.")
MONSTER( 'G', 0xFFFFFF, "Skeleton", moSkeleton, ZERO | CF_NONLIVING | CF_STUNNABLE, RESERVED, moYeti, MONSTER( 'G', 0xFFFFFF, "Skeleton", moSkeleton, CF_FACE_UP | CF_NONLIVING | CF_STUNNABLE, RESERVED, moYeti,
"Skeletons work similar to Palace Guards, but they won't die no matter how many " "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" "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." "Skeletons attacked outside of their native land, Palace, are stunned for a longer time."
) )
MONSTER( 'G', 0xC000C0, "Vizier", moVizier, ZERO | CF_STUNNABLE | CF_HP, RESERVED, moYeti, MONSTER( 'G', 0xC000C0, "Vizier", moVizier, CF_FACE_UP | CF_STUNNABLE | CF_HP, RESERVED, moYeti,
"Viziers are neither pushed away nor stunned. However, you attack them automatically when " "Viziers are neither pushed away nor stunned. However, you attack them automatically when "
"escaping from them.") "escaping from them.")
MONSTER( 'V', 0xC0C0C0, "Viking", moViking, ZERO | CF_LEADER, RESERVED, moPirate, "Mighty warriors from the Fjord, who can use boats.") MONSTER( 'V', 0xC0C0C0, "Viking", moViking, CF_FACE_UP | CF_LEADER, RESERVED, moPirate, "Mighty warriors from the Fjord, who can use boats.")
MONSTER( 'T', 0x00FFFF, "Fjord Troll", moFjordTroll, ZERO | CF_TROLL, RESERVED, moYeti, MONSTER( 'T', 0x00FFFF, "Fjord Troll", moFjordTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti,
"Fjord Trolls leave a wall when they die, causing the living fjord to rise around it. " "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." "Contrary to Rock Trolls, items around are not destroyed."
) )
MONSTER( 'E', 0x0000FF, "Water Elemental", moWaterElemental, ZERO | CF_NOBLOW | CF_NONLIVING, RESERVED, moWaterElemental, MONSTER( 'E', 0x0000FF, "Water Elemental", moWaterElemental, CF_FACE_UP | CF_NOBLOW | CF_NONLIVING, RESERVED, moWaterElemental,
"Wherever this powerful being goes, the living fjord " "Wherever this powerful being goes, the living fjord "
"sinks below water, non-magical boats are destroyed, and fires are extinguished.\n\n" "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." "As a special case, you can attack the Water Elemental from the water, without drowning immediately."
) )
MONSTER( 'M', 0xD0D0D0, "Mouse", moMouse, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moNone, princessdesc) MONSTER( 'M', 0xD0D0D0, "Mouse", moMouse, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moNone, princessdesc)
MONSTER( 'M', 0xD0D0D0, "Mouse", moMouseMoved, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_MOVED, RESERVED, moNone, princessdesc) MONSTER( 'M', 0xD0D0D0, "Mouse", moMouseMoved, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_MOVED, RESERVED, moNone, princessdesc)
MONSTER( 'P', 0xFF80FF, "Prince", moPrincess, ZERO | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_UNARMED, RESERVED, moNone, princessdesc) MONSTER( 'P', 0xFF80FF, "Prince", moPrincess, CF_FACE_UP | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_UNARMED, RESERVED, moNone, princessdesc)
MONSTER( 'P', 0xFF80FF, "Princess", moPrincessMoved, ZERO | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_MOVED, RESERVED, moNone, princessdesc) MONSTER( 'P', 0xFF80FF, "Princess", moPrincessMoved, CF_FACE_UP | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_UNARMED | CF_MOVED, RESERVED, moNone, princessdesc)
MONSTER( 'P', 0xFF80FF, "Prince", moPrincessArmed, ZERO | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING, RESERVED, moNone, princessdesc) MONSTER( 'P', 0xFF80FF, "Prince", moPrincessArmed, CF_FACE_UP | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING, RESERVED, moNone, princessdesc)
MONSTER( 'P', 0xFF80FF, "Princess", moPrincessArmedMoved, ZERO | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone, princessdesc) MONSTER( 'P', 0xFF80FF, "Princess", moPrincessArmedMoved, CF_FACE_UP | CF_NOGHOST | CF_PRINCESS | CF_GOK | CF_STUNNABLE | CF_HP | CF_FRIENDLY | CF_FACING | CF_MOVED, RESERVED, moNone, princessdesc)
MONSTER( 'F', 0xD03000, "Familiar", moFamiliar, ZERO, RESERVED, moYeti, "A simple servant of the master of the Ivory Tower.") MONSTER( 'F', 0xD03000, "Familiar", moFamiliar, CF_FACE_SIDE, RESERVED, moYeti, "A simple servant of the master of the Ivory Tower.")
MONSTER( 'B', 0x707070, "Gargoyle", moGargoyle, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, gargdesc) MONSTER( 'B', 0x707070, "Gargoyle", moGargoyle, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, gargdesc)
MONSTER( 'E', 0xFF0000, "Fire Elemental", moFireElemental, ZERO, RESERVED, moYeti, MONSTER( 'E', 0xFF0000, "Fire Elemental", moFireElemental, CF_FACE_UP, RESERVED, moYeti,
"This monster leaves a trail of fire behind.") "This monster leaves a trail of fire behind.")
MONSTER( 'E', 0xC0C0FF, "Air Elemental", moAirElemental, ZERO | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moAirElemental, "An Air Elemental looks like a live tornado. Once you are three (or less) cells from it, " MONSTER( 'E', 0xC0C0FF, "Air Elemental", moAirElemental, CF_FACE_UP | CF_FLYING | CF_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. " "it is impossible to move closer, due to strong winds. You can stand and wait, though. "
"This also affects most monsters.") "This also affects most monsters.")
MONSTER( 'D', 0xC06000, "Striped Dog", moOrangeDog, ZERO, RESERVED, moYeti, "A predator native to the Zebra.") MONSTER( 'D', 0xC06000, "Striped Dog", moOrangeDog, CF_FACE_SIDE, RESERVED, moYeti, "A predator native to the Zebra.")
MONSTER( 'G', 0xFFFFFF, "Tentacle+Ghost", moTentacleGhost, ZERO | CF_NOGHOST | CF_NOBLOW | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE | CF_IGNORE_SMELL | CF_MULTITILE | CF_WORM | CF_GHOSTMOVER, RESERVED, moNone, tentdes ) MONSTER( 'G', 0xFFFFFF, "Tentacle+Ghost", moTentacleGhost, CF_FACE_SIDE | CF_NOGHOST | CF_NOBLOW | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE | CF_IGNORE_SMELL | CF_MULTITILE | CF_WORM | CF_GHOSTMOVER, RESERVED, moNone, tentdes )
MONSTER( 'B', 0x8080C0, "Metal Beast", moMetalBeast, ZERO | CF_METAL | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, elecdesc ) MONSTER( 'B', 0x8080C0, "Metal Beast", moMetalBeast, CF_FACE_SIDE | CF_METAL | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, elecdesc )
MONSTER( 'B', 0xC060C0, "Rich Metal Beast", moMetalBeast2, ZERO | CF_METAL | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, elecdesc ) MONSTER( 'B', 0xC060C0, "Rich Metal Beast", moMetalBeast2, CF_FACE_SIDE | CF_METAL | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, elecdesc )
MONSTER( 'O', 0xA06020, "Outlaw", moOutlaw, ZERO, RESERVED, moYeti, wildwestdesc ) MONSTER( 'O', 0xA06020, "Outlaw", moOutlaw, CF_FACE_UP, RESERVED, moYeti, wildwestdesc )
MONSTER( 'C', 0xC0C060, "Mutant Ivy", moMutant, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_MUTANTIVY, RESERVED, moNone, overdesc ) MONSTER( 'C', 0xC0C060, "Mutant Ivy", moMutant, CF_NOGHOST | CF_NOBLOW | CF_PART | CF_IGNORE_SMELL | CF_MULTITILE | CF_ANYIVY | CF_MUTANTIVY, RESERVED, moNone, overdesc )
MONSTER( 'T', 0x0080FF, "Storm Troll", moStormTroll, ZERO | CF_TROLL, RESERVED, moYeti, elecdesc ) MONSTER( 'T', 0x0080FF, "Storm Troll", moStormTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti, elecdesc )
MONSTER( 'T', 0x00C080, "Forest Troll", moForestTroll, ZERO | CF_TROLL, RESERVED, moYeti, MONSTER( 'T', 0x00C080, "Forest Troll", moForestTroll, CF_FACE_UP | CF_TROLL, RESERVED, moYeti,
"Forest Trolls create an impassable wall when they die." "Forest Trolls create an impassable wall when they die."
) )
MONSTER( 'F', 0xC35817, "Giant Fox", moRedFox, ZERO, RESERVED, moYeti, MONSTER( 'F', 0xC35817, "Giant Fox", moRedFox, CF_FACE_SIDE, RESERVED, moYeti,
"What is freedom for you? A situation when you can walk wherever you want? " "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 " "Or a situation when you do not have to work, since you have as much tasty food "
"as you want?\n\n" "as you want?\n\n"
"Well, this creature has chosen the second option. It won't be happy " "Well, this creature has chosen the second option. It won't be happy "
"if you destroy its prison.\n" "if you destroy its prison.\n"
) )
MONSTER( 'C', 0x8080FF, "Wind Crow", moWindCrow, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'C', 0x8080FF, "Wind Crow", moWindCrow, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"A large bird who likes strong winds. Just as you, it can fly quickly in the wind." "A large bird who likes strong winds. Just as you, it can fly quickly in the wind."
) )
MONSTER( 'G', 0xC0FFC0, "Friendly Ghost", moFriendlyGhost, ZERO | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE, RESERVED, moFriendlyGhost, MONSTER( 'G', 0xC0FFC0, "Friendly Ghost", moFriendlyGhost, CF_FACE_SIDE | CF_NOGHOST | CF_GOK | CF_FRIENDLY | CF_FACING | CF_GHOST | CF_FLYING | CF_ATTACK_THRU_VINE | CF_ATTACK_NONADJACENT | CF_IGNORE_PLATE, RESERVED, moFriendlyGhost,
"Friendly ghosts are friendly beings who can go through any obstacles. However, " "Friendly ghosts are friendly beings who can go through any obstacles. However, "
"unlike most friends, they tend to fly away from you." "unlike most friends, they tend to fly away from you."
) )
MONSTER( 'R', 0x906030, "Ratling", moRatling, ZERO | CF_LEADER | CF_RATLING, RESERVED, moPirate, MONSTER( 'R', 0x906030, "Ratling", moRatling, CF_FACE_UP | CF_LEADER | CF_RATLING, RESERVED, moPirate,
"These warped humanoids are skilled warriors and sailors, and they " "These warped humanoids are skilled warriors and sailors, and they "
"feel at home at the Warped Coast. Their battle experience has taught them " "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. " "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." "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( 'F', 0xC00000, "False Princess", moFalsePrincess, CF_FACE_UP, RESERVED, moYeti, GENDERSWITCH )
MONSTER( 'R', 0x500050, "Rose Lady", moRoseLady, ZERO | CF_IGNORE_SMELL, RESERVED, moYeti, GENDERSWITCH ) MONSTER( 'R', 0x500050, "Rose Lady", moRoseLady, CF_FACE_UP | CF_IGNORE_SMELL, RESERVED, moYeti, GENDERSWITCH )
MONSTER( 'R', 0xF0A0D0, "Rose Beauty", moRoseBeauty, ZERO, RESERVED, moYeti, GENDERSWITCH ) MONSTER( 'R', 0xF0A0D0, "Rose Beauty", moRoseBeauty, CF_FACE_UP, RESERVED, moYeti, GENDERSWITCH )
MONSTER( 'R', 0x806040, "Ratling Avenger", moRatlingAvenger, ZERO | CF_LEADER | CF_RATLING, RESERVED, moPirate, MONSTER( 'R', 0x806040, "Ratling Avenger", moRatlingAvenger, CF_FACE_UP | CF_LEADER | CF_RATLING, RESERVED, moPirate,
"So, you have killed a Ratling on the unwarped sea? You will be punished for this! " "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." "Luckily, if you run away from the Warped Sea quickly, the Ratling Avengers will lose track of you."
) )
MONSTER( 'T', 0x487830, "Tortoise", moTortoise, ZERO | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, tortoisedesc) MONSTER( 'T', 0x487830, "Tortoise", moTortoise, CF_FACE_SIDE | CF_STUNNABLE | CF_SLOWMOVER, RESERVED, moYeti, tortoisedesc)
MONSTER( 'D', 0xC03000, "Dragon", moDragonHead, ZERO | CF_NOGHOST | CF_NOBLOW | CF_STUNNABLE | CF_MOUNTABLE | CF_FLYING | CF_IGNORE_PLATE | CF_MULTITILE | CF_DRAGON | CF_WORM, RESERVED, moDragonHead, dragondesc) MONSTER( 'D', 0xC03000, "Dragon", moDragonHead, ZERO | CF_NOGHOST | CF_NOBLOW | CF_STUNNABLE | CF_MOUNTABLE | CF_FLYING | CF_IGNORE_PLATE | CF_MULTITILE | CF_DRAGON | CF_WORM, RESERVED, moDragonHead, dragondesc)
MONSTER( 'd', 0xC03000, "Dragon", moDragonTail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_STUNNABLE | CF_MOUNTABLE | CF_PART | CF_FLYING | CF_IGNORE_PLATE | CF_MULTITILE | CF_DRAGON | CF_WORM, RESERVED, moDragonHead, dragondesc) MONSTER( 'd', 0xC03000, "Dragon", moDragonTail, ZERO | CF_NOGHOST | CF_NOBLOW | CF_STUNNABLE | CF_MOUNTABLE | CF_PART | CF_FLYING | CF_IGNORE_PLATE | CF_MULTITILE | CF_DRAGON | CF_WORM, RESERVED, moDragonHead, dragondesc)
MONSTER( 'F', 0x909090, "Gadfly", moGadfly, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, "Annoying insects. They can awaken Sleeping Bulls.") MONSTER( 'F', 0x909090, "Gadfly", moGadfly, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, "Annoying insects. They can awaken Sleeping Bulls.")
MONSTER( 'Y', 0xFF8000, "Yendorian Researcher", moResearcher, ZERO, RESERVED, moYeti, MONSTER( 'Y', 0xFF8000, "Yendorian Researcher", moResearcher, ZERO, RESERVED, moYeti,
"These people study gravity and infinite trees. " "These people study gravity and infinite trees. "
"They have no special features, other than wearing a strange hat." "They have no special features, other than wearing a strange hat."
) )
MONSTER( 'K', 0xA8A8A8, "Sparrowhawk", moSparrowhawk, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'K', 0xA8A8A8, "Sparrowhawk", moSparrowhawk, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"A bird who hunts in the treetops of Yendorian Forest." "A bird who hunts in the treetops of Yendorian Forest."
) )
MONSTER( 'K', 0xD0A0A0, "Kraken", moKrakenH, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MULTITILE | CF_KRAKEN | CF_FACING, RESERVED, moNone, krakendesc) MONSTER( 'K', 0xD0A0A0, "Kraken", moKrakenH, ZERO | CF_NOGHOST | CF_NOBLOW | CF_MULTITILE | CF_KRAKEN | CF_FACING, RESERVED, moNone, krakendesc)
MONSTER( 'K', 0xC07070, "Kraken Tentacle", moKrakenT, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_MULTITILE | CF_KRAKEN, RESERVED, moNone, krakendesc) MONSTER( 'K', 0xC07070, "Kraken Tentacle", moKrakenT, ZERO | CF_NOGHOST | CF_NOBLOW | CF_PART | CF_MULTITILE | CF_KRAKEN, RESERVED, moNone, krakendesc)
MONSTER( 'D', 0xF09090, "Draugr", moDraugr, ZERO | CF_NONLIVING | CF_SLOWMOVER, RESERVED, moYeti, MONSTER( 'D', 0xF09090, "Draugr", moDraugr, CF_FACE_UP | CF_NONLIVING | CF_SLOWMOVER, RESERVED, moYeti,
"Animated corpses of ancient Viking warriors. They are immune to mundane weapons, " "Animated corpses of ancient Viking warriors. They are immune to mundane weapons, "
"but they can be destroyed by your Orb of the Sword." "but they can be destroyed by your Orb of the Sword."
) )
MONSTER( 'C', 0xC08000, "Friendly Ivy", moFriendlyIvy, ZERO | CF_NOGHOST | CF_FRIENDLY | CF_FACING | CF_ANYIVY, RESERVED, moNone, naturedesc ) MONSTER( 'C', 0xC08000, "Friendly Ivy", moFriendlyIvy, ZERO | CF_NOGHOST | CF_FRIENDLY | CF_FACING | CF_ANYIVY, RESERVED, moNone, naturedesc )
MONSTER( 'V', 0xC000C0, "Vampire Bat", moVampire, ZERO | CF_BIRD | CF_FLYING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'V', 0xC000C0, "Vampire Bat", moVampire, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moEagle,
"Vampire Bats don't attack normally, but they drain your magical powers if " "Vampire Bats don't attack normally, but they drain your magical powers if "
"they are at distance at most 2 from you." "they are at distance at most 2 from you."
) )
MONSTER( 'B', 0x404040, "Bat", moBat, ZERO | CF_BIRD | CF_FLYING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'B', 0x404040, "Bat", moBat, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_UNARMED | CF_IGNORE_PLATE, RESERVED, moEagle,
"Someone has told you that one can get battle experience safely by " "Someone has told you that one can get battle experience safely by "
"killing tons of essentially harmless creatures, such as Bats. But " "killing tons of essentially harmless creatures, such as Bats. But "
"does this make any sense?...\n\n" "does this make any sense?...\n\n"
"It does not. Bats cannot hurt you, but may block your movement, or " "It does not. Bats cannot hurt you, but may block your movement, or "
"toggle switches if they fall on them." ) "toggle switches if they fall on them." )
MONSTER( 'R', 0x8080C0, "Reptile", moReptile, ZERO | CF_STUNNABLE, RESERVED, moReptile, reptiledesc ) MONSTER( 'R', 0x8080C0, "Reptile", moReptile, CF_FACE_SIDE | CF_STUNNABLE, RESERVED, moReptile, reptiledesc )
MONSTER( 'B', 0x606020, "Herd Bull", moHerdBull, ZERO | CF_BULL | CF_FACING, RESERVED, moRagingBull, MONSTER( 'B', 0x606020, "Herd Bull", moHerdBull, CF_FACE_SIDE | CF_BULL | CF_FACING, RESERVED, moRagingBull,
"Herds of these Bulls are running long distances for some reason. They become Raging Bulls if something stops them." ) "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 | CF_BULL | CF_FACING, RESERVED, moYeti, MONSTER( 'B', 0xA03000, "Raging Bull", moRagingBull, CF_FACE_SIDE | CF_BULL | CF_FACING, RESERVED, moYeti,
"Raging Bulls charge in a straight line: on heptagons, when they can choose one of two possible directions, " "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 " "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. " "closer to your current location is chosen; if still a tie, past locations are considered. "
@ -349,44 +349,44 @@ MONSTER( 'B', 0xA03000, "Raging Bull", moRagingBull, ZERO | CF_BULL | CF_FACING,
"which they charge at you again (in any direction). " "which they charge at you again (in any direction). "
"Raging Bulls cannot be killed or stunned conventionally." "Raging Bulls cannot be killed or stunned conventionally."
) )
MONSTER( 'B', 0xB07000, "Sleeping Bull", moSleepBull, ZERO | CF_BULL | CF_FACING, RESERVED, moRagingBull, MONSTER( 'B', 0xB07000, "Sleeping Bull", moSleepBull, CF_FACE_SIDE | CF_BULL | CF_FACING, RESERVED, moRagingBull,
"Sleeping bulls wake up when you get into distance of two cells from them." "Sleeping bulls wake up when you get into distance of two cells from them."
) )
MONSTER( 'S', 0xFFD500, "Butterfly", moButterfly, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE | CF_FACING, RESERVED, moButterfly, bulldashdesc) MONSTER( 'S', 0xFFD500, "Butterfly", moButterfly, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE | CF_FACING, RESERVED, moButterfly, bulldashdesc)
MONSTER( 'N', 0xFFFF80, "Narcissist", moNarciss, ZERO, RESERVED, moYeti, MONSTER( 'N', 0xFFFF80, "Narcissist", moNarciss, CF_FACE_UP, RESERVED, moYeti,
"This person loves to look at their own reflection in the mirror. " "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, " "He believes himself to be one of the most important creatures in this world, "
"and hates those who do not admire him." "and hates those who do not admire him."
) )
MONSTER( 'M', 0xFFC0FF, "Mirror Spirit", moMirrorSpirit, ZERO, RESERVED, moYeti, MONSTER( 'M', 0xFFC0FF, "Mirror Spirit", moMirrorSpirit, CF_FACE_UP, RESERVED, moYeti,
"A long time ago a mighty warrior was guarding the mirrors from being broken. " "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 " "While this warrior is no longer alive, his reflections have gained life of "
"their own, and will punish the intruders.\n\n" "their own, and will punish the intruders.\n\n"
"If you attack a Mirror Spirit physically, it is delayed, but not destroyed -- " "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." "more reflections will come out of the mirror. Use Mimics to destroy them."
) )
MONSTER( 'W', 0x202020, "Hunting Dog", moHunterDog, ZERO, RESERVED, moYeti, huntingdesc) MONSTER( 'W', 0x202020, "Hunting Dog", moHunterDog, CF_FACE_SIDE, RESERVED, moYeti, huntingdesc)
MONSTER( 'T', 0xE2725B, "Terracotta Warrior", moTerraWarrior, ZERO | CF_NONLIVING | CF_STUNNABLE | CF_HP, RESERVED, moYeti, terradesc) MONSTER( 'T', 0xE2725B, "Terracotta Warrior", moTerraWarrior, CF_FACE_UP | CF_NONLIVING | CF_STUNNABLE | CF_HP, RESERVED, moYeti, terradesc)
MONSTER( 'J', 0x50A030, "Jiangshi", moJiangshi, ZERO | CF_NONLIVING, RESERVED, moYeti, MONSTER( 'J', 0x50A030, "Jiangshi", moJiangshi, CF_FACE_UP | CF_NONLIVING, RESERVED, moYeti,
"You think this was one of the people who have constructed the Terracotta Warriors and the arrow traps. " "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." "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 | CF_NONLIVING, RESERVED, moVoidBeast, MONSTER( 'B', 0xA00000, "Void Beast", moVoidBeast, CF_FACE_UP | CF_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 -- " "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 " "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.") "moving with the wind.")
MONSTER( 'W', 0xA00000, "Lava Wolf", moLavaWolf, ZERO, RESERVED, moYeti, MONSTER( 'W', 0xA00000, "Lava Wolf", moLavaWolf, CF_FACE_SIDE, RESERVED, moYeti,
"While Ice Wolves love heat, their instincts usually will not let them leave the Icy Lands -- " "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. " "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... " "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." "and try to track their prey using their other senses and intelligence."
) )
MONSTER( 'W', 0x202020, "Hunting Dog (guarding)", moHunterGuard, ZERO, RESERVED, moYeti, huntingdesc) MONSTER( 'W', 0x202020, "Hunting Dog (guarding)", moHunterGuard, CF_FACE_SIDE, RESERVED, moYeti, huntingdesc)
MONSTER( 'G', 0xC0C0FF, "Ice Golem", moIceGolem, ZERO | CF_NONLIVING, RESERVED, moYeti, MONSTER( 'G', 0xC0C0FF, "Ice Golem", moIceGolem, CF_FACE_UP | CF_NONLIVING, RESERVED, moYeti,
"The Ice Golems are powered by intense magical coldness. When destroyed in the Blizzard or another icy land, they become " "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.") "ice walls, and freeze the land around them.")
MONSTER( 'B', 0xC0C0FF, "Sand Bird", moSandBird, ZERO, RESERVED, moNone, NODESC) MONSTER( 'B', 0xC0C0FF, "Sand Bird", moSandBird, CF_FACE_SIDE, RESERVED, moNone, NODESC)
MONSTER( 'S', 0xA00000, "Salamander", moSalamander, ZERO | CF_STUNNABLE, RESERVED, moYeti, MONSTER( 'S', 0xA00000, "Salamander", moSalamander, CF_FACE_SIDE | CF_STUNNABLE, RESERVED, moYeti,
"Salamanders are tough lizard-like creatures. Their tough skin protects them " "Salamanders are tough lizard-like creatures. Their tough skin protects them "
"from both physical attacks and heat. Salamanders " "from both physical attacks and heat. Salamanders "
"are stunned for a longer time if you push them into lava, fire, or a solid obstacle.") "are stunned for a longer time if you push them into lava, fire, or a solid obstacle.")
@ -394,28 +394,28 @@ MONSTER( 'W', 0x202020, "Hunting Dog (regrouping)", moHunterChanging, ZERO, RESE
"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.") "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 | CF_MAGNETIC | CF_FACING, RESERVED, moYeti, NODESCYET) MONSTER( 'B', 0xC00000, "North Pole", moNorthPole, ZERO | CF_MAGNETIC | CF_FACING, RESERVED, moYeti, NODESCYET)
MONSTER( 'B', 0x0000C0, "South Pole", moSouthPole, ZERO | CF_MAGNETIC | CF_FACING, RESERVED, moYeti, NODESCYET) MONSTER( 'B', 0x0000C0, "South Pole", moSouthPole, ZERO | CF_MAGNETIC | CF_FACING, RESERVED, moYeti, NODESCYET)
MONSTER( 'P', 0xC03000, "Red Raider", moPair, ZERO | CF_RAIDER | CF_FACING, 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( 'P', 0xC03000, "Red Raider", moPair, CF_FACE_UP | CF_RAIDER | CF_FACING, 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 | CF_RAIDER, RESERVED, moHexDemon, "Gray Raiders never step on gray cells.") MONSTER( 'H', 0xC0C0C0, "Gray Raider", moHexDemon, CF_FACE_UP | CF_RAIDER, RESERVED, moHexDemon, "Gray Raiders never step on gray cells.")
MONSTER( 'A', 0x80B080, "Green Raider", moAltDemon, ZERO | CF_RAIDER, RESERVED, moAltDemon, "Green Raiders never step from one green cell to another.") MONSTER( 'A', 0x80B080, "Green Raider", moAltDemon, CF_FACE_UP | CF_RAIDER, RESERVED, moAltDemon, "Green Raiders never step from one green cell to another.")
MONSTER( 'M', 0x904000, "Brown Raider", moMonk, ZERO | CF_RAIDER, RESERVED, moMonk, "Brown Raiders never move adjacent to an item.") MONSTER( 'M', 0x904000, "Brown Raider", moMonk, CF_FACE_UP | CF_RAIDER, RESERVED, moMonk, "Brown Raiders never move adjacent to an item.")
MONSTER( 'C', 0x0060E0, "Blue Raider", moCrusher, ZERO | CF_RAIDER, RESERVED, moYeti, "Blue Raiders have a powerful attack which takes two turns to complete, and also makes the Blue Raider stunned " MONSTER( 'C', 0x0060E0, "Blue Raider", moCrusher, CF_FACE_UP | CF_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.") "for a long time. This attack can destroy other Raiders if it hits them.")
MONSTER( '@', 0xC00000, "Red Jelly", moSwitch1, ZERO | CF_SWITCH | CF_FACING, RESERVED, moYeti, jellydesc) MONSTER( '@', 0xC00000, "Red Jelly", moSwitch1, CF_FACE_SIDE | CF_SWITCH | CF_FACING, RESERVED, moYeti, jellydesc)
MONSTER( '@', 0x0000C0, "Blue Jelly", moSwitch2, ZERO | CF_SWITCH | CF_FACING, RESERVED, moYeti, jellydesc) MONSTER( '@', 0x0000C0, "Blue Jelly", moSwitch2, CF_FACE_SIDE | CF_SWITCH | CF_FACING, RESERVED, moYeti, jellydesc)
MONSTER( 'B', 0xE07000, "Bronze Beast", moBrownBug, ZERO | CF_STUNNABLE, RESERVED, moYeti, MONSTER( 'B', 0xE07000, "Bronze Beast", moBrownBug, CF_FACE_SIDE | CF_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. " "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." "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 | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'B', 0xE07060, "Acid Gull", moAcidBird, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle,
"Where did this strange bird come from?...\n\n" "Where did this strange bird come from?...\n\n"
"Acid Gulls dissolve the land on which they fall when they die. " "Acid Gulls dissolve the land on which they fall when they die. "
) )
MONSTER( 'W', 0xA04060, "Mutant", moVariantWarrior, ZERO, RESERVED, moYeti, MONSTER( 'W', 0xA04060, "Mutant", moVariantWarrior, CF_FACE_UP, RESERVED, moYeti,
"These guys look a bit strange, but they have no special properties." "These guys look a bit strange, but they have no special properties."
) )
MONSTER( 'W', 0x707080, "Falling Dog", moFallingDog, ZERO, RESERVED, moYeti, MONSTER( 'W', 0x707080, "Falling Dog", moFallingDog, CF_FACE_SIDE, RESERVED, moYeti,
"Distant relatives of the Running Dogs.") "Distant relatives of the Running Dogs.")
MONSTER( 'B', 0xC0C040, "Western Hawk", moWestHawk, ZERO | CF_BIRD | CF_FLYING | CF_IGNORE_PLATE, RESERVED, moEagle, MONSTER( 'B', 0xC0C040, "Western Hawk", moWestHawk, CF_FACE_SIDE | CF_BIRD | CF_FLYING | CF_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. " "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." ) "The name Western Hawks remained." )
@ -1549,7 +1549,7 @@ MONSTER('A', 0x606040, "Space Rock", moAsteroid, ZERO, RESERVED, moAsteroid, roc
REQ( NEVER ) REQ( NEVER )
//shmupspecials //shmupspecials
MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, ZERO | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.") MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, CF_FACE_UP | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.")
MONSTER( '*', 0xC0C0C0, "Knife", moBullet, ZERO | CF_BULLET, RESERVED, moNone, "A simple, but effective, missile, used by rogues.") MONSTER( '*', 0xC0C0C0, "Knife", moBullet, ZERO | CF_BULLET, RESERVED, moNone, "A simple, but effective, missile, used by rogues.")
MONSTER( '*', 0xFF0000, "Flail", moFlailBullet, ZERO | CF_BULLET, RESERVED, moNone, "This attack is likely to hit the attacker.") MONSTER( '*', 0xFF0000, "Flail", moFlailBullet, ZERO | CF_BULLET, RESERVED, moNone, "This attack is likely to hit the attacker.")
MONSTER( '*', 0xFFFF00, "Fireball", moFireball, ZERO | CF_BULLET, RESERVED, moNone, "This magical missile burns whatever it hits.") MONSTER( '*', 0xFFFF00, "Fireball", moFireball, ZERO | CF_BULLET, RESERVED, moNone, "This magical missile burns whatever it hits.")