artilist.h

Go to the documentation of this file.
00001 /*      SCCS Id: @(#)artilist.h 3.4     2003/02/12      */
00002 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
00003 /* NetHack may be freely redistributed.  See license for details. */
00004 
00005 #ifdef MAKEDEFS_C
00006 /* in makedefs.c, all we care about is the list of names */
00007 
00008 #define A(nam,typ,s1,s2,mt,atk,dfn,cry,inv,al,cl,rac,cost) nam
00009 
00010 static const char *artifact_names[] = {
00011 #else
00012 /* in artifact.c, set up the actual artifact list structure */
00013 
00014 #define A(nam,typ,s1,s2,mt,atk,dfn,cry,inv,al,cl,rac,cost) \
00015  { typ, nam, s1, s2, mt, atk, dfn, cry, inv, al, cl, rac, cost }
00016 
00017 #define     NO_ATTK     {0,0,0,0}               /* no attack */
00018 #define     NO_DFNS     {0,0,0,0}               /* no defense */
00019 #define     NO_CARY     {0,0,0,0}               /* no carry effects */
00020 #define     DFNS(c)     {0,c,0,0}
00021 #define     CARY(c)     {0,c,0,0}
00022 #define     PHYS(a,b)   {0,AD_PHYS,a,b}         /* physical */
00023 #define     DRLI(a,b)   {0,AD_DRLI,a,b}         /* life drain */
00024 #define     COLD(a,b)   {0,AD_COLD,a,b}
00025 #define     FIRE(a,b)   {0,AD_FIRE,a,b}
00026 #define     ELEC(a,b)   {0,AD_ELEC,a,b}         /* electrical shock */
00027 #define     STUN(a,b)   {0,AD_STUN,a,b}         /* magical attack */
00028 
00029 STATIC_OVL NEARDATA struct artifact artilist[] = {
00030 #endif  /* MAKEDEFS_C */
00031 
00032 /* Artifact cost rationale:
00033  * 1.  The more useful the artifact, the better its cost.
00034  * 2.  Quest artifacts are highly valued.
00035  * 3.  Chaotic artifacts are inflated due to scarcity (and balance).
00036  */
00037 
00038 
00039 /*  dummy element #0, so that all interesting indices are non-zero */
00040 A("",                           STRANGE_OBJECT,
00041         0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L ),
00042 
00043 A("Excalibur",                  LONG_SWORD,
00044         (SPFX_NOGEN|SPFX_RESTR|SPFX_SEEK|SPFX_DEFN|SPFX_INTEL|SPFX_SEARCH),0,0,
00045         PHYS(5,10),     DRLI(0,0),      NO_CARY,        0, A_LAWFUL, PM_KNIGHT, NON_PM, 4000L ),
00046 /*
00047  *      Stormbringer only has a 2 because it can drain a level,
00048  *      providing 8 more.
00049  */
00050 A("Stormbringer",               RUNESWORD,
00051         (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN|SPFX_INTEL|SPFX_DRLI), 0, 0,
00052         DRLI(5,2),      DRLI(0,0),      NO_CARY,        0, A_CHAOTIC, NON_PM, NON_PM, 8000L ),
00053 
00054 #ifdef BLACKMARKET
00055 A("Thiefbane",          TWO_HANDED_SWORD,
00056         (SPFX_NOGEN|SPFX_RESTR|SPFX_BEHEAD|SPFX_DCLAS|SPFX_DRLI), 0, S_HUMAN,
00057         DRLI(5,1),      NO_DFNS,        NO_CARY,        0, A_CHAOTIC, NON_PM, NON_PM, 1500L ),
00058 #endif /* BLACKMARKET */
00059 
00060 /*
00061  *      Mjollnir will return to the hand of the wielder when thrown
00062  *      if the wielder is a Valkyrie wearing Gauntlets of Power.
00063  */
00064 A("Mjollnir",                   WAR_HAMMER,             /* Mjo:llnir */
00065         (SPFX_RESTR|SPFX_ATTK),  0, 0,
00066         ELEC(5,24),     NO_DFNS,        NO_CARY,        0, A_NEUTRAL, PM_VALKYRIE, NON_PM, 4000L ),
00067 
00068 A("Cleaver",                    BATTLE_AXE,
00069         SPFX_RESTR, 0, 0,
00070         PHYS(3,6),      NO_DFNS,        NO_CARY,        0, A_NEUTRAL, PM_BARBARIAN, NON_PM, 1500L ),
00071 
00072 A("Grimtooth",                  ORCISH_DAGGER,
00073         SPFX_RESTR, 0, 0,
00074         PHYS(2,6),      NO_DFNS,        NO_CARY,        0, A_CHAOTIC, NON_PM, PM_ORC, 300L ),
00075 /*
00076  *      Orcrist and Sting have same alignment as elves.
00077  */
00078 A("Orcrist",                    ELVEN_BROADSWORD,
00079         SPFX_DFLAG2, 0, M2_ORC,
00080         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_CHAOTIC, NON_PM, PM_ELF, 2000L ),
00081 
00082 /*
00083  *      The combination of SPFX_WARN and M2_something on an artifact
00084  *      will trigger EWarn_of_mon for all monsters that have the appropriate
00085  *      M2_something flags.  In Sting's case it will trigger EWarn_of_mon
00086  *      for M2_ORC monsters.
00087  */
00088 A("Sting",                      ELVEN_DAGGER,
00089         (SPFX_WARN|SPFX_DFLAG2), 0, M2_ORC,
00090         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_CHAOTIC, NON_PM, PM_ELF, 800L ),
00091 /*
00092  *      Magicbane is a bit different!  Its magic fanfare
00093  *      unbalances victims in addition to doing some damage.
00094  */
00095 A("Magicbane",                  ATHAME,
00096         (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
00097         STUN(3,4),      DFNS(AD_MAGM),  NO_CARY,        0, A_NEUTRAL, PM_WIZARD, NON_PM, 3500L ),
00098 
00099 A("Frost Brand",                LONG_SWORD,
00100         (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
00101         COLD(5,0),      COLD(0,0),      NO_CARY,        0, A_NONE, NON_PM, NON_PM, 3000L ),
00102 
00103 A("Fire Brand",                 LONG_SWORD,
00104         (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0,
00105         FIRE(5,0),      FIRE(0,0),      NO_CARY,        0, A_NONE, NON_PM, NON_PM, 3000L ),
00106 
00107 A("Dragonbane",                 BROADSWORD,
00108         (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS), 0, S_DRAGON,
00109         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_NONE, NON_PM, NON_PM, 500L ),
00110 
00111 A("Demonbane",                  LONG_SWORD,
00112         (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_DEMON,
00113         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_LAWFUL, NON_PM, NON_PM, 2500L ),
00114 
00115 A("Werebane",                   SILVER_SABER,
00116         (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_WERE,
00117         PHYS(5,0),      DFNS(AD_WERE),  NO_CARY,        0, A_NONE, NON_PM, NON_PM, 1500L ),
00118 
00119 A("Grayswandir",                SILVER_SABER,
00120         (SPFX_RESTR|SPFX_HALRES), 0, 0,
00121         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_LAWFUL, NON_PM, NON_PM, 8000L ),
00122 
00123 A("Giantslayer",                LONG_SWORD,
00124         (SPFX_WARN|SPFX_RESTR|SPFX_DFLAG2), 0, M2_GIANT,
00125         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_NEUTRAL, NON_PM, NON_PM, 200L ),
00126 
00127 A("Ogresmasher",                WAR_HAMMER,
00128         (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS), 0, S_OGRE,
00129         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_NONE, NON_PM, NON_PM, 200L ),
00130 
00131 A("Trollsbane",                 MORNING_STAR,
00132         (SPFX_WARN_S|SPFX_RESTR|SPFX_DCLAS|SPFX_REGEN), 0, S_TROLL,
00133         PHYS(5,0),      NO_DFNS,        NO_CARY,        0, A_NONE, NON_PM, NON_PM, 200L ),
00134 /*
00135  *      Two problems:  1) doesn't let trolls regenerate heads,
00136  *      2) doesn't give unusual message for 2-headed monsters (but
00137  *      allowing those at all causes more problems than worth the effort).
00138  */
00139 A("Vorpal Blade",               LONG_SWORD,
00140         (SPFX_WARN_S|SPFX_RESTR|SPFX_BEHEAD), 0, S_JABBERWOCK,
00141         PHYS(5,8),      NO_DFNS,        NO_CARY,        0, A_NEUTRAL, NON_PM, NON_PM, 4000L ),
00142 /*
00143  *      Ah, never shall I forget the cry,
00144  *              or the shriek that shrieked he,
00145  *      As I gnashed my teeth, and from my sheath
00146  *              I drew my Snickersnee!
00147  *                      --Koko, Lord high executioner of Titipu
00148  *                        (From Sir W.S. Gilbert's "The Mikado")
00149  */
00150 A("Snickersnee",                KATANA,
00151         SPFX_RESTR, 0, 0,
00152         PHYS(0,8),      NO_DFNS,        NO_CARY,        0, A_LAWFUL, PM_SAMURAI, NON_PM, 1200L ),
00153 
00154 A("Sunsword",                   LONG_SWORD,
00155         (SPFX_RESTR|SPFX_DFLAG2), 0, M2_UNDEAD,
00156         PHYS(5,0),      DFNS(AD_BLND),  NO_CARY,        0, A_LAWFUL, NON_PM, NON_PM, 1500L ),
00157 
00158 /*
00159  *      The artifacts for the quest dungeon, all self-willed.
00160  */
00161 
00162 A("The Orb of Detection",       CRYSTAL_BALL,
00163         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_ESP|SPFX_HSPDAM), 0,
00164         NO_ATTK,        NO_DFNS,        CARY(AD_MAGM),
00165         INVIS,          A_LAWFUL, PM_ARCHEOLOGIST, NON_PM, 2500L ),
00166 
00167 A("The Heart of Ahriman",       LUCKSTONE,
00168         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_DISPL|SPFX_EREGEN), 0,
00169         /* this stone does double damage if used as a projectile weapon */
00170         PHYS(5,0),      NO_DFNS,        NO_CARY,
00171         LEVITATION,     A_NEUTRAL, PM_BARBARIAN, NON_PM, 2500L ),
00172 
00173 A("The Sceptre of Might",       MACE,
00174         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DALIGN), 0, 0,
00175         PHYS(5,0),      NO_DFNS,        CARY(AD_MAGM),
00176         CONFLICT,       A_LAWFUL, PM_CAVEMAN, NON_PM, 2500L ),
00177 
00178 #if 0   /* OBSOLETE */
00179 A("The Palantir of Westernesse",        CRYSTAL_BALL,
00180         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL),
00181                 (SPFX_ESP|SPFX_REGEN|SPFX_HSPDAM), 0,
00182         NO_ATTK,        NO_DFNS,        NO_CARY,
00183         TAMING,         A_CHAOTIC, NON_PM , PM_ELF, 8000L ),
00184 #endif
00185 
00186 A("The Staff of Aesculapius",   QUARTERSTAFF,
00187         (SPFX_NOGEN|SPFX_RESTR|SPFX_ATTK|SPFX_INTEL|SPFX_DRLI|SPFX_REGEN), 0,0,
00188         DRLI(0,0),      DRLI(0,0),      NO_CARY,
00189         HEALING,        A_NEUTRAL, PM_HEALER, NON_PM, 5000L ),
00190 
00191 A("The Magic Mirror of Merlin", MIRROR,
00192         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK), SPFX_ESP, 0,
00193         NO_ATTK,        NO_DFNS,        CARY(AD_MAGM),
00194         0,              A_LAWFUL, PM_KNIGHT, NON_PM, 1500L ),
00195 
00196 A("The Eyes of the Overworld",  LENSES,
00197         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_XRAY), 0, 0,
00198         NO_ATTK,        NO_DFNS,        CARY(AD_MAGM),
00199         ENLIGHTENING,   A_NEUTRAL,       PM_MONK, NON_PM, 2500L ),
00200 
00201 A("The Mitre of Holiness",      HELM_OF_BRILLIANCE,
00202         (SPFX_NOGEN|SPFX_RESTR|SPFX_DFLAG2|SPFX_INTEL), 0, M2_UNDEAD,
00203         NO_ATTK,        NO_DFNS,        CARY(AD_FIRE),
00204         ENERGY_BOOST,   A_LAWFUL, PM_PRIEST, NON_PM, 2000L ),
00205 
00206 A("The Longbow of Diana", BOW,
00207         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_REFLECT), SPFX_ESP, 0,
00208         PHYS(5,0),      NO_DFNS,        NO_CARY,
00209         CREATE_AMMO, A_CHAOTIC, PM_RANGER, NON_PM, 4000L ),
00210 
00211 A("The Master Key of Thievery", SKELETON_KEY,
00212         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_SPEAK),
00213                 (SPFX_WARN|SPFX_TCTRL|SPFX_HPHDAM), 0,
00214         NO_ATTK,        NO_DFNS,        NO_CARY,
00215         UNTRAP,         A_CHAOTIC, PM_ROGUE, NON_PM, 3500L ),
00216 
00217 A("The Tsurugi of Muramasa",    TSURUGI,
00218         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_BEHEAD|SPFX_LUCK), 0, 0,
00219         PHYS(0,8),      NO_DFNS,        NO_CARY,
00220         0,              A_LAWFUL, PM_SAMURAI, NON_PM, 4500L ),
00221 
00222 #ifdef TOURIST
00223 A("The Platinum Yendorian Express Card", CREDIT_CARD,
00224         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_DEFN),
00225                 (SPFX_ESP|SPFX_HSPDAM), 0,
00226         NO_ATTK,        NO_DFNS,        CARY(AD_MAGM),
00227         CHARGE_OBJ,     A_NEUTRAL, PM_TOURIST, NON_PM, 7000L ),
00228 #endif
00229 
00230 A("The Orb of Fate",            CRYSTAL_BALL,
00231         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_LUCK),
00232                 (SPFX_WARN|SPFX_HSPDAM|SPFX_HPHDAM), 0,
00233         NO_ATTK,        NO_DFNS,        NO_CARY,
00234         LEV_TELE,       A_NEUTRAL, PM_VALKYRIE, NON_PM, 3500L ),
00235 
00236 A("The Eye of the Aethiopica",  AMULET_OF_ESP,
00237         (SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL), (SPFX_EREGEN|SPFX_HSPDAM), 0,
00238         NO_ATTK,        NO_DFNS,        CARY(AD_MAGM),
00239         CREATE_PORTAL,  A_NEUTRAL, PM_WIZARD, NON_PM, 4000L ),
00240 
00241 /*
00242  *  terminator; otyp must be zero
00243  */
00244 A(0, 0, 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L )
00245 
00246 };      /* artilist[] (or artifact_names[]) */
00247 
00248 #undef  A
00249 
00250 #ifndef MAKEDEFS_C
00251 #undef  NO_ATTK
00252 #undef  NO_DFNS
00253 #undef  DFNS
00254 #undef  PHYS
00255 #undef  DRLI
00256 #undef  COLD
00257 #undef  FIRE
00258 #undef  ELEC
00259 #undef  STUN
00260 #endif
00261 
00262 /*artilist.h*/