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. */
6 /* in makedefs.c, all we care about is the list of names */
8 #define A(nam,typ,s1,s2,mt,atk,dfn,cry,inv,al,cl,rac,cost) nam
10 static const char *artifact_names[] = {
12 /* in artifact.c, set up the actual artifact list structure */
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 }
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 */
29 STATIC_OVL NEARDATA struct artifact artilist[] = {
30 #endif /* MAKEDEFS_C */
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).
39 /* dummy element #0, so that all interesting indices are non-zero */
41 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L ),
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 ),
47 * Stormbringer only has a 2 because it can drain a level,
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 ),
54 * Mjollnir will return to the hand of the wielder when thrown
55 * if the wielder is a Valkyrie wearing Gauntlets of Power.
57 A("Mjollnir", WAR_HAMMER, /* Mjo:llnir */
58 (SPFX_RESTR|SPFX_ATTK), 0, 0,
59 ELEC(5,24), NO_DFNS, NO_CARY, 0, A_NEUTRAL, PM_VALKYRIE, NON_PM, 4000L ),
61 A("Cleaver", BATTLE_AXE,
63 PHYS(3,6), NO_DFNS, NO_CARY, 0, A_NEUTRAL, PM_BARBARIAN, NON_PM, 1500L ),
65 A("Grimtooth", ORCISH_DAGGER,
67 PHYS(2,6), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ORC, 300L ),
69 * Orcrist and Sting have same alignment as elves.
71 A("Orcrist", ELVEN_BROADSWORD,
72 SPFX_DFLAG2, 0, M2_ORC,
73 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ELF, 2000L ),
76 * The combination of SPFX_WARN and M2_something on an artifact
77 * will trigger EWarn_of_mon for all monsters that have the appropriate
78 * M2_something flags. In Sting's case it will trigger EWarn_of_mon
79 * for M2_ORC monsters.
81 A("Sting", ELVEN_DAGGER,
82 (SPFX_WARN|SPFX_DFLAG2), 0, M2_ORC,
83 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_CHAOTIC, NON_PM, PM_ELF, 800L ),
85 * Magicbane is a bit different! Its magic fanfare
86 * unbalances victims in addition to doing some damage.
88 A("Magicbane", ATHAME,
89 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
90 STUN(3,4), DFNS(AD_MAGM), NO_CARY, 0, A_NEUTRAL, PM_WIZARD, NON_PM, 3500L ),
92 A("Frost Brand", LONG_SWORD,
93 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
94 COLD(5,0), COLD(0,0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 3000L ),
96 A("Fire Brand", LONG_SWORD,
97 (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
98 FIRE(5,0), FIRE(0,0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 3000L ),
100 A("Dragonbane", BROADSWORD,
101 (SPFX_RESTR|SPFX_DCLAS), 0, S_DRAGON,
102 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 500L ),
104 A("Demonbane", LONG_SWORD,
105 (SPFX_RESTR|SPFX_DFLAG2), 0, M2_DEMON,
106 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 2500L ),
108 A("Werebane", SILVER_SABER,
109 (SPFX_RESTR|SPFX_DFLAG2), 0, M2_WERE,
110 PHYS(5,0), DFNS(AD_WERE), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 1500L ),
112 A("Grayswandir", SILVER_SABER,
113 (SPFX_RESTR|SPFX_HALRES), 0, 0,
114 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 8000L ),
116 A("Giantslayer", LONG_SWORD,
117 (SPFX_RESTR|SPFX_DFLAG2), 0, M2_GIANT,
118 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NEUTRAL, NON_PM, NON_PM, 200L ),
120 A("Ogresmasher", WAR_HAMMER,
121 (SPFX_RESTR|SPFX_DCLAS), 0, S_OGRE,
122 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 200L ),
124 A("Trollsbane", MORNING_STAR,
125 (SPFX_RESTR|SPFX_DCLAS), 0, S_TROLL,
126 PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 200L ),
128 * Two problems: 1) doesn't let trolls regenerate heads,
129 * 2) doesn't give unusual message for 2-headed monsters (but
130 * allowing those at all causes more problems than worth the effort).
132 A("Vorpal Blade", LONG_SWORD,
133 (SPFX_RESTR|SPFX_BEHEAD), 0, 0,
134 PHYS(5,1), NO_DFNS, NO_CARY, 0, A_NEUTRAL, NON_PM, NON_PM, 4000L ),
136 * Ah, never shall I forget the cry,
137 * or the shriek that shrieked he,
138 * As I gnashed my teeth, and from my sheath
139 * I drew my Snickersnee!
140 * --Koko, Lord high executioner of Titipu
141 * (From Sir W.S. Gilbert's "The Mikado")
143 A("Snickersnee", KATANA,
145 PHYS(0,8), NO_DFNS, NO_CARY, 0, A_LAWFUL, PM_SAMURAI, NON_PM, 1200L ),
147 A("Sunsword", LONG_SWORD,
148 (SPFX_RESTR|SPFX_DFLAG2), 0, M2_UNDEAD,
149 PHYS(5,0), DFNS(AD_BLND), NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 1500L ),
152 * The artifacts for the quest dungeon, all self-willed.
155 A("The Orb of Detection", CRYSTAL_BALL,
156 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_ESP|SPFX_HSPDAM), 0,
157 NO_ATTK, NO_DFNS, CARY(AD_MAGM),
158 INVIS, A_LAWFUL, PM_ARCHEOLOGIST, NON_PM, 2500L ),
160 A("The Heart of Ahriman", LUCKSTONE,
161 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), SPFX_STLTH, 0,
162 /* this stone does double damage if used as a projectile weapon */
163 PHYS(5,0), NO_DFNS, NO_CARY,
164 LEVITATION, A_NEUTRAL, PM_BARBARIAN, NON_PM, 2500L ),
166 A("The Sceptre of Might", MACE,
167 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DALIGN), 0, 0,
168 PHYS(5,0), NO_DFNS, CARY(AD_MAGM),
169 CONFLICT, A_LAWFUL, PM_CAVEMAN, NON_PM, 2500L ),
172 A("The Palantir of Westernesse", CRYSTAL_BALL,
173 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL),
174 (SPFX_ESP|SPFX_REGEN|SPFX_HSPDAM), 0,
175 NO_ATTK, NO_DFNS, NO_CARY,
176 TAMING, A_CHAOTIC, NON_PM , PM_ELF, 8000L ),
179 A("The Staff of Aesculapius", QUARTERSTAFF,
180 (SPFX_NOGEN|SPFX_RESTR|SPFX_ATTK|SPFX_INTEL|SPFX_DRLI|SPFX_REGEN), 0,0,
181 DRLI(0,0), DRLI(0,0), NO_CARY,
182 HEALING, A_NEUTRAL, PM_HEALER, NON_PM, 5000L ),
184 A("The Magic Mirror of Merlin", MIRROR,
185 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK), SPFX_ESP, 0,
186 NO_ATTK, NO_DFNS, CARY(AD_MAGM),
187 0, A_LAWFUL, PM_KNIGHT, NON_PM, 1500L ),
189 A("The Eyes of the Overworld", LENSES,
190 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_XRAY), 0, 0,
191 NO_ATTK, NO_DFNS, CARY(AD_MAGM),
192 ENLIGHTENING, A_NEUTRAL, PM_MONK, NON_PM, 2500L ),
194 A("The Mitre of Holiness", HELM_OF_BRILLIANCE,
195 (SPFX_NOGEN|SPFX_RESTR|SPFX_DFLAG2|SPFX_INTEL), 0, M2_UNDEAD,
196 NO_ATTK, NO_DFNS, CARY(AD_FIRE),
197 ENERGY_BOOST, A_LAWFUL, PM_PRIEST, NON_PM, 2000L ),
199 A("The Longbow of Diana", BOW,
200 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_REFLECT), SPFX_ESP, 0,
201 PHYS(5,0), NO_DFNS, NO_CARY,
202 CREATE_AMMO, A_CHAOTIC, PM_RANGER, NON_PM, 4000L ),
204 A("The Master Key of Thievery", SKELETON_KEY,
205 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK),
206 (SPFX_WARN|SPFX_TCTRL|SPFX_HPHDAM), 0,
207 NO_ATTK, NO_DFNS, NO_CARY,
208 UNTRAP, A_CHAOTIC, PM_ROGUE, NON_PM, 3500L ),
210 A("The Tsurugi of Muramasa", TSURUGI,
211 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_BEHEAD|SPFX_LUCK), 0, 0,
212 PHYS(0,8), NO_DFNS, NO_CARY,
213 0, A_LAWFUL, PM_SAMURAI, NON_PM, 4500L ),
216 A("The Platinum Yendorian Express Card", CREDIT_CARD,
217 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DEFN),
218 (SPFX_ESP|SPFX_HSPDAM), 0,
219 NO_ATTK, NO_DFNS, CARY(AD_MAGM),
220 CHARGE_OBJ, A_NEUTRAL, PM_TOURIST, NON_PM, 7000L ),
223 A("The Orb of Fate", CRYSTAL_BALL,
224 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_LUCK),
225 (SPFX_WARN|SPFX_HSPDAM|SPFX_HPHDAM), 0,
226 NO_ATTK, NO_DFNS, NO_CARY,
227 LEV_TELE, A_NEUTRAL, PM_VALKYRIE, NON_PM, 3500L ),
229 A("The Eye of the Aethiopica", AMULET_OF_ESP,
230 (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_EREGEN|SPFX_HSPDAM), 0,
231 NO_ATTK, NO_DFNS, CARY(AD_MAGM),
232 CREATE_PORTAL, A_NEUTRAL, PM_WIZARD, NON_PM, 4000L ),
235 * terminator; otyp must be zero
237 A(0, 0, 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L )
239 }; /* artilist[] (or artifact_names[]) */