1 /* SCCS Id: @(#)artilist.h 3.4 2003/02/12 */ 2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3 /* NetHack may be freely redistributed. See license for details. */ 4 5 #ifdef MAKEDEFS_C 6 /* in makedefs.c, all we care about is the list of names */ 7 8 #define A(nam,typ,s1,s2,mt,atk,dfn,cry,inv,al,cl,rac,cost) nam 9 10 static const char *artifact_names[] = { 11 #else 12 /* in artifact.c, set up the actual artifact list structure */ 13 14 #define A(nam,typ,s1,s2,mt,atk,dfn,cry,inv,al,cl,rac,cost) \ 15 { typ, nam, s1, s2, mt, atk, dfn, cry, inv, al, cl, rac, cost } 16 17 #define NO_ATTK {0,0,0,0} /* no attack */ 18 #define NO_DFNS {0,0,0,0} /* no defense */ 19 #define NO_CARY {0,0,0,0} /* no carry effects */ 20 #define DFNS(c) {0,c,0,0} 21 #define CARY(c) {0,c,0,0} 22 #define PHYS(a,b) {0,AD_PHYS,a,b} /* physical */ 23 #define DRLI(a,b) {0,AD_DRLI,a,b} /* life drain */ 24 #define COLD(a,b) {0,AD_COLD,a,b} 25 #define FIRE(a,b) {0,AD_FIRE,a,b} 26 #define ELEC(a,b) {0,AD_ELEC,a,b} /* electrical shock */ 27 #define STUN(a,b) {0,AD_STUN,a,b} /* magical attack */ 28 29 STATIC_OVL NEARDATA struct artifact artilist[] = { 30 #endif /* MAKEDEFS_C */ 31 32 /* Artifact cost rationale: 33 * 1. The more useful the artifact, the better its cost. 34 * 2. Quest artifacts are highly valued. 35 * 3. Chaotic artifacts are inflated due to scarcity (and balance). 36 */ 37 38 39 /* dummy element #0, so that all interesting indices are non-zero */ 40 A("", STRANGE_OBJECT, 41 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L ), 42 43 A("Excalibur", LONG_SWORD, 44 (SPFX_NOGEN|SPFX_RESTR|SPFX_SEEK|SPFX_DEFN|SPFX_INTEL|SPFX_SEARCH),0,0, 45 PHYS(5,10), DRLI(0,0), NO_CARY, 0, A_LAWFUL, PM_KNIGHT, NON_PM, 4000L ), 46 /* 47 * Stormbringer only has a 2 because it can drain a level, 48 * providing 8 more. 49 */ 50 A("Stormbringer", RUNESWORD, 51 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN|SPFX_INTEL|SPFX_DRLI), 0, 0, 52 DRLI(5,2), DRLI(0,0), NO_CARY, 0, A_CHAOTIC, NON_PM, NON_PM, 8000L ), 53 54 #ifdef BLACKMARKET 55 A("Thiefbane", TWO_HANDED_SWORD, 56 (SPFX_NOGEN|SPFX_RESTR|SPFX_BEHEAD|SPFX_DCLAS|SPFX_DRLI), 0, S_HUMAN, 57 DRLI(5,1), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, NON_PM, 1500L ), 58 #endif /* BLACKMARKET */ 59 60 /* 61 * Mjollnir will return to the hand of the wielder when thrown 62 * if the wielder is a Valkyrie wearing Gauntlets of Power. 63 */ 64 A("Mjollnir", WAR_HAMMER, /* Mjo:llnir */ 65 (SPFX_RESTR|SPFX_ATTK), 0, 0, 66 ELEC(5,24), NO_DFNS, NO_CARY, 0, A_NEUTRAL, PM_VALKYRIE, NON_PM, 4000L ), 67 68 A("Cleaver", BATTLE_AXE, 69 SPFX_RESTR, 0, 0, 70 PHYS(3,6), NO_DFNS, NO_CARY, 0, A_NEUTRAL, PM_BARBARIAN, NON_PM, 1500L ), 71 72 A("Grimtooth", ORCISH_DAGGER, 73 SPFX_RESTR, 0, 0, 74 PHYS(2,6), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ORC, 300L ), 75 /* 76 * Orcrist and Sting have same alignment as elves. 77 */ 78 A("Orcrist", ELVEN_BROADSWORD, 79 SPFX_DFLAG2, 0, M2_ORC, 80 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ELF, 2000L ), 81 82 /* 83 * The combination of SPFX_WARN and M2_something on an artifact 84 * will trigger EWarn_of_mon for all monsters that have the appropriate 85 * M2_something flags. In Sting's case it will trigger EWarn_of_mon 86 * for M2_ORC monsters. 87 */ 88 A("Sting", ELVEN_DAGGER, 89 (SPFX_WARN|SPFX_DFLAG2), 0, M2_ORC, 90 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ELF, 800L ), 91 /* 92 * Magicbane is a bit different! Its magic fanfare 93 * unbalances victims in addition to doing some damage. 94 */ 95 A("Magicbane", ATHAME, 96 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0, 97 STUN(3,4), DFNS(AD_MAGM), NO_CARY, 0, A_NEUTRAL, PM_WIZARD, NON_PM, 3500L ), 98 99 A("Frost Brand", LONG_SWORD, 100 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0, 101 COLD(5,0), COLD(0,0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 3000L ), 102 103 A("Fire Brand", LONG_SWORD, 104 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0, 105 FIRE(5,0), FIRE(0,0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 3000L ), 106 107 A("Dragonbane", BROADSWORD, 108 (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS), 0, S_DRAGON, 109 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 500L ), 110 111 A("Demonbane", LONG_SWORD, 112 (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_DEMON, 113 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 2500L ), 114 115 A("Werebane", SILVER_SABER, 116 (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_WERE, 117 PHYS(5,0), DFNS(AD_WERE), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 1500L ), 118 119 A("Grayswandir", SILVER_SABER, 120 (SPFX_RESTR|SPFX_HALRES), 0, 0, 121 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 8000L ), 122 123 A("Giantslayer", LONG_SWORD, 124 (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_GIANT, 125 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NEUTRAL, NON_PM, NON_PM, 200L ), 126 127 A("Ogresmasher", WAR_HAMMER, 128 (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS), 0, S_OGRE, 129 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 200L ), 130 131 A("Trollsbane", MORNING_STAR, 132 (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS|SPFX_REGEN), 0, S_TROLL, 133 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 200L ), 134 /* 135 * Two problems: 1) doesn't let trolls regenerate heads, 136 * 2) doesn't give unusual message for 2-headed monsters (but 137 * allowing those at all causes more problems than worth the effort). 138 */ 139 A("Vorpal Blade", LONG_SWORD, 140 (SPFX_WARN_S|SPFX_RESTR|SPFX_BEHEAD), 0, S_JABBERWOCK, 141 PHYS(5,8), NO_DFNS, NO_CARY, 0, A_NEUTRAL, NON_PM, NON_PM, 4000L ), 142 /* 143 * Ah, never shall I forget the cry, 144 * or the shriek that shrieked he, 145 * As I gnashed my teeth, and from my sheath 146 * I drew my Snickersnee! 147 * --Koko, Lord high executioner of Titipu 148 * (From Sir W.S. Gilbert's "The Mikado") 149 */ 150 A("Snickersnee", KATANA, 151 SPFX_RESTR, 0, 0, 152 PHYS(0,8), NO_DFNS, NO_CARY, 0, A_LAWFUL, PM_SAMURAI, NON_PM, 1200L ), 153 154 A("Sunsword", LONG_SWORD, 155 (SPFX_RESTR|SPFX_DFLAG2), 0, M2_UNDEAD, 156 PHYS(5,0), DFNS(AD_BLND), NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 1500L ), 157 158 /* 159 * The artifacts for the quest dungeon, all self-willed. 160 */ 161 162 A("The Orb of Detection", CRYSTAL_BALL, 163 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_ESP|SPFX_HSPDAM), 0, 164 NO_ATTK, NO_DFNS, CARY(AD_MAGM), 165 INVIS, A_LAWFUL, PM_ARCHEOLOGIST, NON_PM, 2500L ), 166 167 A("The Heart of Ahriman", LUCKSTONE, 168 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_DISPL|SPFX_EREGEN), 0, 169 /* this stone does double damage if used as a projectile weapon */ 170 PHYS(5,0), NO_DFNS, NO_CARY, 171 LEVITATION, A_NEUTRAL, PM_BARBARIAN, NON_PM, 2500L ), 172 173 A("The Sceptre of Might", MACE, 174 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DALIGN), 0, 0, 175 PHYS(5,0), NO_DFNS, CARY(AD_MAGM), 176 CONFLICT, A_LAWFUL, PM_CAVEMAN, NON_PM, 2500L ), 177 178 #if 0 /* OBSOLETE */ 179 A("The Palantir of Westernesse", CRYSTAL_BALL, 180 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), 181 (SPFX_ESP|SPFX_REGEN|SPFX_HSPDAM), 0, 182 NO_ATTK, NO_DFNS, NO_CARY, 183 TAMING, A_CHAOTIC, NON_PM , PM_ELF, 8000L ), 184 #endif 185 186 A("The Staff of Aesculapius", QUARTERSTAFF, 187 (SPFX_NOGEN|SPFX_RESTR|SPFX_ATTK|SPFX_INTEL|SPFX_DRLI|SPFX_REGEN), 0,0, 188 DRLI(0,0), DRLI(0,0), NO_CARY, 189 HEALING, A_NEUTRAL, PM_HEALER, NON_PM, 5000L ), 190 191 A("The Magic Mirror of Merlin", MIRROR, 192 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK), SPFX_ESP, 0, 193 NO_ATTK, NO_DFNS, CARY(AD_MAGM), 194 0, A_LAWFUL, PM_KNIGHT, NON_PM, 1500L ), 195 196 A("The Eyes of the Overworld", LENSES, 197 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_XRAY), 0, 0, 198 NO_ATTK, NO_DFNS, CARY(AD_MAGM), 199 ENLIGHTENING, A_NEUTRAL, PM_MONK, NON_PM, 2500L ), 200 201 A("The Mitre of Holiness", HELM_OF_BRILLIANCE, 202 (SPFX_NOGEN|SPFX_RESTR|SPFX_DFLAG2|SPFX_INTEL), 0, M2_UNDEAD, 203 NO_ATTK, NO_DFNS, CARY(AD_FIRE), 204 ENERGY_BOOST, A_LAWFUL, PM_PRIEST, NON_PM, 2000L ), 205 206 A("The Longbow of Diana", BOW, 207 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_REFLECT), SPFX_ESP, 0, 208 PHYS(5,0), NO_DFNS, NO_CARY, 209 CREATE_AMMO, A_CHAOTIC, PM_RANGER, NON_PM, 4000L ), 210 211 A("The Master Key of Thievery", SKELETON_KEY, 212 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK), 213 (SPFX_WARN|SPFX_TCTRL|SPFX_HPHDAM), 0, 214 NO_ATTK, NO_DFNS, NO_CARY, 215 UNTRAP, A_CHAOTIC, PM_ROGUE, NON_PM, 3500L ), 216 217 A("The Tsurugi of Muramasa", TSURUGI, 218 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_BEHEAD|SPFX_LUCK), 0, 0, 219 PHYS(0,8), NO_DFNS, NO_CARY, 220 0, A_LAWFUL, PM_SAMURAI, NON_PM, 4500L ), 221 222 #ifdef TOURIST 223 A("The Platinum Yendorian Express Card", CREDIT_CARD, 224 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DEFN), 225 (SPFX_ESP|SPFX_HSPDAM), 0, 226 NO_ATTK, NO_DFNS, CARY(AD_MAGM), 227 CHARGE_OBJ, A_NEUTRAL, PM_TOURIST, NON_PM, 7000L ), 228 #endif 229 230 A("The Orb of Fate", CRYSTAL_BALL, 231 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_LUCK), 232 (SPFX_WARN|SPFX_HSPDAM|SPFX_HPHDAM), 0, 233 NO_ATTK, NO_DFNS, NO_CARY, 234 LEV_TELE, A_NEUTRAL, PM_VALKYRIE, NON_PM, 3500L ), 235 236 A("The Eye of the Aethiopica", AMULET_OF_ESP, 237 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_EREGEN|SPFX_HSPDAM), 0, 238 NO_ATTK, NO_DFNS, CARY(AD_MAGM), 239 CREATE_PORTAL, A_NEUTRAL, PM_WIZARD, NON_PM, 4000L ), 240 241 /* 242 * terminator; otyp must be zero 243 */ 244 A(0, 0, 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L ) 245 246 }; /* artilist[] (or artifact_names[]) */ 247 248 #undef A 249 250 #ifndef MAKEDEFS_C 251 #undef NO_ATTK 252 #undef NO_DFNS 253 #undef DFNS 254 #undef PHYS 255 #undef DRLI 256 #undef COLD 257 #undef FIRE 258 #undef ELEC 259 #undef STUN 260 #endif 261 262 /*artilist.h*/ 263