Source:Artilist.h

Below is the full text to include/artilist.h from NetHack 3.4.3. To link to a particular line, write [[artilist.h#line123 ]], for example. 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.    *	Mjollnir will return to the hand of the wielder when thrown 55.   *	if the wielder is a Valkyrie wearing Gauntlets of Power. 56.   */  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 ), 60.   61.   A("Cleaver",			BATTLE_AXE,  62.   	SPFX_RESTR, 0, 0,  63.   	PHYS(3,6),	NO_DFNS,	NO_CARY,	0, A_NEUTRAL, PM_BARBARIAN, NON_PM, 1500L ), 64.   65.   A("Grimtooth",			ORCISH_DAGGER,  66.   	SPFX_RESTR, 0, 0,  67.   	PHYS(2,6),	NO_DFNS,	NO_CARY,	0, A_CHAOTIC, NON_PM, PM_ORC, 300L ), 68.  /*  69.    *	Orcrist and Sting have same alignment as elves. 70.   */  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 ), 74.   75.   /*  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. 80.   */  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 ), 84.  /*  85.    *	Magicbane is a bit different! Its magic fanfare 86.   *	unbalances victims in addition to doing some damage. 87.   */  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 ), 91.   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 ), 95.   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 ), 99.   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 ), 103.  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 ), 107.  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 ), 111.  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 ), 115.  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 ), 119.  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 ), 123.  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 ), 127. /*  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). 131.  */  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 ), 135. /*  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") 142.  */  143.  A("Snickersnee",		KATANA,  144.  	SPFX_RESTR, 0, 0,  145.  	PHYS(0,8),	NO_DFNS,	NO_CARY,	0, A_LAWFUL, PM_SAMURAI, NON_PM, 1200L ), 146.  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 ), 150.  151.  /*  152.   *	The artifacts for the quest dungeon, all self-willed. 153.  */  154.   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 ), 159.  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 ), 165.  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 ), 170.  171.  #if 0	/* OBSOLETE */ 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 ), 177. #endif 178.  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 ), 183.  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 ), 188.  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 ), 193.  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 ), 198.  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 ), 203.  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 ), 209.  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 ), 214.  215.  #ifdef TOURIST 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 ), 221. #endif 222.  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 ), 228.  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 ), 233.  234.  /*  235.   *  terminator; otyp must be zero 236.  */  237.  A(0, 0, 0, 0, 0, NO_ATTK, NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 0L ) 238.  239.  };	/* artilist[] (or artifact_names[]) */ 240.  241.  #undef	A 242.  243.  #ifndef MAKEDEFS_C 244. #undef	NO_ATTK 245. #undef	NO_DFNS 246. #undef	DFNS 247. #undef	PHYS 248. #undef	DRLI 249. #undef	COLD 250. #undef	FIRE 251. #undef	ELEC 252. #undef	STUN 253. #endif 254.  255.  /*artilist.h*/