1 /* aNetHack 0.0.1 artilist.h $ANH-Date: 1433050874 2015/05/31 05:41:14 $ $ANH-Branch: master $:$ANH-Revision: 1.16 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* aNetHack 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, clr) 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, clr) \
16 typ, nam, s1, s2, mt, atk, dfn, cry, inv, al, cl, rac, cost, clr \
19 /* clang-format off */
20 #define NO_ATTK {0,0,0,0} /* no attack */
21 #define NO_DFNS {0,0,0,0} /* no defense */
22 #define NO_CARY {0,0,0,0} /* no carry effects */
23 #define DFNS(c) {0,c,0,0}
24 #define CARY(c) {0,c,0,0}
25 #define PHYS(a,b) {0,AD_PHYS,a,b} /* physical */
26 #define DRLI(a,b) {0,AD_DRLI,a,b} /* life drain */
27 #define COLD(a,b) {0,AD_COLD,a,b}
28 #define FIRE(a,b) {0,AD_FIRE,a,b}
29 #define ELEC(a,b) {0,AD_ELEC,a,b} /* electrical shock */
30 #define STUN(a,b) {0,AD_STUN,a,b} /* magical attack */
33 STATIC_OVL NEARDATA
struct artifact artilist
[] = {
34 #endif /* MAKEDEFS_C */
36 /* Artifact cost rationale:
37 * 1. The more useful the artifact, the better its cost.
38 * 2. Quest artifacts are highly valued.
39 * 3. Chaotic artifacts are inflated due to scarcity (and balance).
42 /* dummy element #0, so that all interesting indices are non-zero */
43 A("", STRANGE_OBJECT
, 0, 0, 0, NO_ATTK
, NO_DFNS
, NO_CARY
, 0, A_NONE
,
44 NON_PM
, NON_PM
, 0L, NO_COLOR
),
46 A("Excalibur", LONG_SWORD
, (SPFX_NOGEN
| SPFX_RESTR
| SPFX_SEEK
47 | SPFX_DEFN
| SPFX_INTEL
| SPFX_SEARCH
),
48 0, 0, PHYS(5, 10), DRLI(0, 0), NO_CARY
, 0, A_LAWFUL
, PM_KNIGHT
, NON_PM
,
51 * Stormbringer only has a 2 because it can drain a level,
54 A("Stormbringer", RUNESWORD
,
55 (SPFX_RESTR
| SPFX_ATTK
| SPFX_DEFN
| SPFX_INTEL
| SPFX_DRLI
), 0, 0,
56 DRLI(5, 2), DRLI(0, 0), NO_CARY
, 0, A_CHAOTIC
, NON_PM
, NON_PM
, 8000L,
59 * Mjollnir will return to the hand of the wielder when thrown
60 * if the wielder is a Valkyrie wearing Gauntlets of Power.
62 A("Mjollnir", WAR_HAMMER
, /* Mjo:llnir */
63 (SPFX_RESTR
| SPFX_ATTK
), 0, 0, ELEC(5, 24), NO_DFNS
, NO_CARY
, 0,
64 A_NEUTRAL
, PM_VALKYRIE
, NON_PM
, 4000L, NO_COLOR
),
66 A("Cleaver", BATTLE_AXE
, SPFX_RESTR
, 0, 0, PHYS(3, 6), NO_DFNS
, NO_CARY
,
67 0, A_NEUTRAL
, PM_BARBARIAN
, NON_PM
, 1500L, NO_COLOR
),
70 * Grimtooth glows in warning when elves are present, but its
71 * damage bonus applies to all targets rather than just elves
72 * (handled as special case in spec_dbon()).
74 A("Grimtooth", ORCISH_DAGGER
, (SPFX_RESTR
| SPFX_WARN
| SPFX_DFLAG2
),
75 0, M2_ELF
, PHYS(2, 6), NO_DFNS
,
76 NO_CARY
, 0, A_CHAOTIC
, NON_PM
, PM_ORC
, 300L, CLR_RED
),
78 * Orcrist and Sting have same alignment as elves.
80 * The combination of SPFX_WARN+SPFX_DFLAG2+M2_value will trigger
81 * EWarn_of_mon for all monsters that have the M2_value flag.
82 * Sting and Orcrist will warn of M2_ORC monsters.
84 A("Orcrist", ELVEN_BROADSWORD
, (SPFX_WARN
| SPFX_DFLAG2
), 0, M2_ORC
,
85 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_CHAOTIC
, NON_PM
, PM_ELF
, 2000L,
86 CLR_BRIGHT_BLUE
), /* bright blue is actually light blue */
88 A("Sting", ELVEN_DAGGER
, (SPFX_WARN
| SPFX_DFLAG2
), 0, M2_ORC
, PHYS(5, 0),
89 NO_DFNS
, NO_CARY
, 0, A_CHAOTIC
, NON_PM
, PM_ELF
, 800L, CLR_BRIGHT_BLUE
),
91 * Magicbane is a bit different! Its magic fanfare
92 * unbalances victims in addition to doing some damage.
94 A("Magicbane", ATHAME
, (SPFX_RESTR
| SPFX_ATTK
| SPFX_DEFN
), 0, 0,
95 STUN(3, 4), DFNS(AD_MAGM
), NO_CARY
, 0, A_NEUTRAL
, PM_WIZARD
, NON_PM
,
98 A("Frost Brand", LONG_SWORD
, (SPFX_RESTR
| SPFX_ATTK
| SPFX_DEFN
), 0, 0,
99 COLD(5, 0), COLD(0, 0), NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 3000L,
102 A("Fire Brand", LONG_SWORD
, (SPFX_RESTR
| SPFX_ATTK
| SPFX_DEFN
), 0, 0,
103 FIRE(5, 0), FIRE(0, 0), NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 3000L,
106 A("Dragonbane", BROADSWORD
,
107 (SPFX_RESTR
| SPFX_DCLAS
| SPFX_REFLECT
), 0, S_DRAGON
,
108 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 500L,
111 A("Demonbane", LONG_SWORD
, (SPFX_RESTR
| SPFX_DFLAG2
), 0, M2_DEMON
,
112 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_LAWFUL
, NON_PM
, NON_PM
, 2500L,
115 A("Werebane", SILVER_SABER
, (SPFX_RESTR
| SPFX_DFLAG2
), 0, M2_WERE
,
116 PHYS(5, 0), DFNS(AD_WERE
), NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 1500L,
119 A("Grayswandir", SILVER_SABER
, (SPFX_RESTR
| SPFX_HALRES
), 0, 0,
120 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_LAWFUL
, NON_PM
, NON_PM
, 8000L,
123 A("Giantslayer", LONG_SWORD
, (SPFX_RESTR
| SPFX_DFLAG2
), 0, M2_GIANT
,
124 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_NEUTRAL
, NON_PM
, NON_PM
, 200L,
127 A("Ogresmasher", WAR_HAMMER
, (SPFX_RESTR
| SPFX_DCLAS
), 0, S_OGRE
,
128 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 200L,
131 A("Trollsbane", MORNING_STAR
, (SPFX_RESTR
| SPFX_DCLAS
), 0, S_TROLL
,
132 PHYS(5, 0), NO_DFNS
, NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 200L,
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).
139 A("Vorpal Blade", LONG_SWORD
, (SPFX_RESTR
| SPFX_BEHEAD
), 0, 0,
140 PHYS(5, 1), NO_DFNS
, NO_CARY
, 0, A_NEUTRAL
, NON_PM
, NON_PM
, 4000L,
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")
150 A("Snickersnee", KATANA
, SPFX_RESTR
, 0, 0, PHYS(0, 8), NO_DFNS
, NO_CARY
,
151 0, A_LAWFUL
, PM_SAMURAI
, NON_PM
, 1200L, NO_COLOR
),
153 A("Sunsword", LONG_SWORD
, (SPFX_RESTR
| SPFX_DFLAG2
), 0, M2_UNDEAD
,
154 PHYS(5, 0), DFNS(AD_BLND
), NO_CARY
, 0, A_LAWFUL
, NON_PM
, NON_PM
, 1500L,
158 * The artifacts for the quest dungeon, all self-willed.
161 A("The Orb of Detection", CRYSTAL_BALL
,
162 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
), (SPFX_ESP
| SPFX_HSPDAM
), 0,
163 NO_ATTK
, NO_DFNS
, CARY(AD_MAGM
), INVIS
, A_LAWFUL
, PM_ARCHEOLOGIST
,
164 NON_PM
, 2500L, NO_COLOR
),
166 A("The Heart of Ahriman", LUCKSTONE
,
167 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
), SPFX_STLTH
, 0,
168 /* this stone does double damage if used as a projectile weapon */
169 PHYS(5, 0), NO_DFNS
, NO_CARY
, LEVITATION
, A_NEUTRAL
, PM_BARBARIAN
,
170 NON_PM
, 2500L, NO_COLOR
),
172 A("The Sceptre of Might", MACE
,
173 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
| SPFX_DALIGN
), 0, 0, PHYS(5, 0),
174 DFNS(AD_MAGM
), NO_CARY
, CONFLICT
, A_LAWFUL
, PM_CAVEMAN
, NON_PM
, 2500L,
178 A("The Palantir of Westernesse", CRYSTAL_BALL
,
179 (SPFX_NOGEN
|SPFX_RESTR
|SPFX_INTEL
),
180 (SPFX_ESP
|SPFX_REGEN
|SPFX_HSPDAM
), 0,
181 NO_ATTK
, NO_DFNS
, NO_CARY
,
182 TAMING
, A_CHAOTIC
, NON_PM
, PM_ELF
, 8000L, NO_COLOR
),
185 A("The Staff of Aesculapius", QUARTERSTAFF
,
186 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_ATTK
| SPFX_INTEL
| SPFX_DRLI
188 0, 0, DRLI(0, 0), DRLI(0, 0), NO_CARY
, HEALING
, A_NEUTRAL
, PM_HEALER
,
189 NON_PM
, 5000L, NO_COLOR
),
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
), 0, A_LAWFUL
, PM_KNIGHT
, NON_PM
, 1500L,
196 A("The Eyes of the Overworld", LENSES
,
197 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
| SPFX_XRAY
), 0, 0, NO_ATTK
,
198 DFNS(AD_MAGM
), NO_CARY
, ENLIGHTENING
, A_NEUTRAL
, PM_MONK
, NON_PM
,
201 A("The Mitre of Holiness", HELM_OF_BRILLIANCE
,
202 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_DFLAG2
| SPFX_INTEL
| SPFX_PROTECT
), 0,
203 M2_UNDEAD
, NO_ATTK
, NO_DFNS
, CARY(AD_FIRE
), ENERGY_BOOST
, A_LAWFUL
,
204 PM_PRIEST
, NON_PM
, 2000L, NO_COLOR
),
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
, CREATE_AMMO
, A_CHAOTIC
, PM_RANGER
, NON_PM
,
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, NO_ATTK
, NO_DFNS
, NO_CARY
,
214 UNTRAP
, A_CHAOTIC
, PM_ROGUE
, NON_PM
, 3500L, NO_COLOR
),
216 A("The Tsurugi of Muramasa", TSURUGI
,
217 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
| SPFX_BEHEAD
| SPFX_LUCK
219 0, 0, PHYS(0, 8), NO_DFNS
, NO_CARY
, 0, A_LAWFUL
, PM_SAMURAI
, NON_PM
,
222 A("The Platinum Yendorian Express Card", CREDIT_CARD
,
223 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
| SPFX_DEFN
),
224 (SPFX_ESP
| SPFX_HSPDAM
), 0, NO_ATTK
, NO_DFNS
, CARY(AD_MAGM
),
225 CHARGE_OBJ
, A_NEUTRAL
, PM_TOURIST
, NON_PM
, 7000L, NO_COLOR
),
227 A("The Orb of Fate", CRYSTAL_BALL
,
228 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
| SPFX_LUCK
),
229 (SPFX_WARN
| SPFX_HSPDAM
| SPFX_HPHDAM
), 0, NO_ATTK
, NO_DFNS
, NO_CARY
,
230 LEV_TELE
, A_NEUTRAL
, PM_VALKYRIE
, NON_PM
, 3500L, NO_COLOR
),
232 A("The Eye of the Aethiopica", AMULET_OF_ESP
,
233 (SPFX_NOGEN
| SPFX_RESTR
| SPFX_INTEL
), (SPFX_EREGEN
| SPFX_HSPDAM
), 0,
234 NO_ATTK
, DFNS(AD_MAGM
), NO_CARY
, CREATE_PORTAL
, A_NEUTRAL
, PM_WIZARD
,
235 NON_PM
, 4000L, NO_COLOR
),
238 * terminator; otyp must be zero
240 A(0, 0, 0, 0, 0, NO_ATTK
, NO_DFNS
, NO_CARY
, 0, A_NONE
, NON_PM
, NON_PM
, 0L,
241 0) /* 0 is CLR_BLACK rather than NO_COLOR but it doesn't matter here */
243 }; /* artilist[] (or artifact_names[]) */