From 4fbb684dead05e8579046b997888abc6bb76af25 Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Sun, 27 Mar 2016 15:46:59 +0200 Subject: Avoid hardcoding most artifact numbers --- src/defines.h | 194 ++------------------------------------------------------- src/init1.cc | 6 +- src/object2.cc | 75 +++++----------------- 3 files changed, 23 insertions(+), 252 deletions(-) (limited to 'src') diff --git a/src/defines.h b/src/defines.h index 224f5bd9..dc9dbfb8 100644 --- a/src/defines.h +++ b/src/defines.h @@ -678,208 +678,19 @@ /*** Artifact indexes (see "lib/edit/a_info.txt") ***/ - -/* Lites */ -#define ART_GALADRIEL 1 -#define ART_ELENDIL 2 -#define ART_THRAIN 3 #define ART_PALANTIR 202 -#define ART_UNDEATH 200 -#define ART_STONE_LORE 15 -#define ART_PALANTIR_ITHIL 208 - -/* Amulets */ -#define ART_CARLAMMAS 4 -#define ART_INGWE 5 -#define ART_DWARVES 6 #define ART_ANCHOR 14 -#define ART_ELESSAR 206 -#define ART_EVENSTAR 207 - -/* Rings */ -#define ART_FLAR 7 -#define ART_BARAHIR 8 -#define ART_TULKAS 9 -#define ART_NARYA 10 -#define ART_NENYA 11 -#define ART_VILYA 12 #define ART_POWER 13 -/* 14 used by the anchor of space-time */ -/* 15 used by the stone of lore */ - -/* Dragon Scale */ -#define ART_RAZORBACK 16 -#define ART_BLADETURNER 17 -#define ART_MEDIATOR 166 - -/* Hard Armour */ -#define ART_HIMRING 167 -#define ART_SOULKEEPER 19 -#define ART_ISILDUR 20 -#define ART_ROHIRRIM 21 -#define ART_BELEGENNON 22 -#define ART_CELEBORN 23 -#define ART_ARVEDUI 24 -#define ART_CASPANION 25 - -/* Thunderlord flying suit */ #define ART_MARDA 26 -#define ART_TRON 27 - -/* Soft Armour */ -#define ART_THALKETTOTH 28 - -/* Shields */ -#define ART_THORIN 30 -#define ART_CELEGORM 31 -#define ART_ANARION 32 -#define ART_GILGALAD 169 -#define ART_HARADRIM 176 - -/* Helms and Crowns */ #define ART_MORGOTH 34 -#define ART_BERUTHIEL 35 -#define ART_THRANDUIL 36 -#define ART_THENGEL 37 -#define ART_HAMMERHAND 38 -#define ART_DOR 39 -#define ART_HOLHENNETH 40 -#define ART_GORLIM 41 -#define ART_GONDOR 42 -#define ART_KNOWLEDGE 160 -#define ART_NUMENOR 43 -#define ART_CELEBRIMBOR 170 - -/* Cloaks */ -#define ART_COLLUIN 44 -#define ART_HOLCOLLETH 45 -#define ART_THINGOL 46 -#define ART_THORONGIL 47 -#define ART_COLANNON 48 -#define ART_LUTHIEN 49 -#define ART_TUOR 50 - -/* Gloves */ -#define ART_CAMBELEG 52 -#define ART_CAMMITHRIM 53 -#define ART_PAURHACH 54 -#define ART_PAURNIMMEN 55 -#define ART_PAURAEGEN 56 -#define ART_PAURNEN 57 -#define ART_CAMLOST 58 -#define ART_FINGOLFIN 59 -#define ART_EOL 178 - -/* Boots */ -#define ART_FEANOR 60 -#define ART_DAL 61 -#define ART_THROR 62 - -/* Swords */ #define ART_NARSIL 164 -#define ART_MAEDHROS 64 -#define ART_ANGRIST 65 -#define ART_NARTHANC 66 -#define ART_NIMTHANC 67 -#define ART_DETHANC 68 -#define ART_RILIA 69 -#define ART_BELANGIL 70 #define ART_CALRIS 71 -#define ART_ARUNRUTH 72 #define ART_GLAMDRING 73 -#define ART_AEGLIN 74 -#define ART_ORCRIST 75 -#define ART_GURTHANG 76 -#define ART_ZARCUTHRA 77 -#define ART_MORMEGIL 78 -#define ART_GONDRICAM 79 -#define ART_CRISDURIAN 80 -#define ART_AGLARANG 81 -#define ART_RINGIL 82 #define ART_ANDURIL 83 #define ART_ANGUIREL 84 -#define ART_ELVAGIL 85 -#define ART_FORASGIL 86 -#define ART_CARETH 87 -#define ART_STING 88 -#define ART_HARADEKKET 89 -#define ART_GILETTAR 90 -#define ART_DOOMCALLER 91 -#define ART_VORPAL_BLADE 92 -#define ART_ERU 147 - -/* Polearms */ -#define ART_THEODEN 93 -#define ART_PAIN 94 -#define ART_OSONDIR 95 -#define ART_TIL 96 -#define ART_AEGLOS 97 -#define ART_OROME 98 #define ART_NIMLOTH 99 -#define ART_EORLINGAS 100 -#define ART_DURIN 101 -#define ART_EONWE 102 -#define ART_BALLI 103 -#define ART_LOTHARANG 104 -#define ART_MUNDWINE 105 -#define ART_BARUKKHELED 106 -#define ART_WRATH 107 -#define ART_ULMO 108 -#define ART_AVAVIR 109 -#define ART_FUNDIN 175 - -/* The sword of the Dawn */ -#define ART_DAWN 110 - -/* Hafted */ -#define ART_MELKOR 18 -#define ART_HURIN 33 #define ART_GROND 111 -#define ART_TOTILA 112 -#define ART_THUNDERFIST 113 -#define ART_BLOODSPIKE 114 -#define ART_FIRESTAR 115 -#define ART_TARATOL 116 -#define ART_AULE 117 -#define ART_NAR 118 -#define ART_ERIRIL 119 -#define ART_OLORIN 120 -#define ART_DEATHWREAKER 121 -#define ART_TURMIL 122 #define ART_GOTHMOG 123 -#define ART_AXE_GOTHMOG 145 -#define ART_SKULLCLEAVER 177 - -#define ART_NAIN 174 - -/* Bows */ -#define ART_BELTHRONDING 124 -#define ART_BARD 125 -#define ART_CUBRAGOL 126 -#define ART_UMBAR 171 - -/* Mage Staffs */ -#define ART_GANDALF 127 - -/* Boomerangs */ -#define ART_BEOR 128 -#define ART_GLIMDRIR 129 - -/* Musical Instrument */ -#define ART_MAGLOR 137 -#define ART_SKY 138 -#define ART_DAERON 139 -#define ART_DRUEDAIN 141 -#define ART_ROHAN 142 -#define ART_HELM 143 -#define ART_BOROMIR 144 - -/* Diggers */ -#define ART_EREBOR 140 - -#define ART_ORCHAST 156 -#define ART_NIGHT 157 -#define ART_NATUREBANE 158 /* Spell for various object */ #define SPELL_ID_PLAIN 1 @@ -2663,7 +2474,10 @@ #define TR5_ACTIVATE_NO_WIELD 0x00002000L /* Can be 'A'ctivated without being wielded */ #define TR5_MAGIC_BREATH 0x00004000L /* Can breath anywere */ #define TR5_WATER_BREATH 0x00008000L /* Can breath underwater */ -#define TR5_WIELD_CAST 0x00010000L /* Need to be wielded to cast spelsl fomr it(if it can be wiekded) */ +#define TR5_WIELD_CAST 0x00010000L /* Must be wielded to cast spell from it */ +#define TR5_RANDOM_RESIST 0x00020000L /* Grants random resistance */ +#define TR5_RANDOM_POWER 0x00040000L /* Grants random power */ +#define TR5_RANDOM_RES_OR_POWER 0x00080000L /* Grants random resistance OR power (50-50 chance) */ /* ESP defines */ #define ESP_ORC 0x00000001L diff --git a/src/init1.cc b/src/init1.cc index 56b1a3ac..75a75d3a 100644 --- a/src/init1.cc +++ b/src/init1.cc @@ -722,9 +722,9 @@ cptr k_info_flags5[] = "MAGIC_BREATH", "WATER_BREATH", "WIELD_CAST", - "XXX8X17", - "XXX8X18", - "XXX8X19", + "RANDOM_RESIST", + "RANDOM_POWER", + "RANDOM_RES_OR_POWER", "XXX8X20", "XXX8X21", "XXX8X22", diff --git a/src/object2.cc b/src/object2.cc index c9853932..145aab4c 100644 --- a/src/object2.cc +++ b/src/object2.cc @@ -2043,76 +2043,33 @@ static void object_mention(object_type *o_ptr) void random_artifact_resistance(object_type * o_ptr) { - bool_ give_resistance = FALSE, give_power = FALSE; - - switch (o_ptr->name1) - { - case ART_CELEBORN: - case ART_ARVEDUI: - case ART_CASPANION: - case ART_TRON: - case ART_ROHIRRIM: - case ART_CELEGORM: - case ART_ANARION: - case ART_THRANDUIL: - case ART_LUTHIEN: - case ART_THROR: - case ART_THORIN: - case ART_NIMTHANC: - case ART_DETHANC: - case ART_NARTHANC: - case ART_STING: - case ART_TURMIL: - case ART_THALKETTOTH: - { - /* Give a resistance */ - give_resistance = TRUE; - } - break; - case ART_MAEDHROS: - case ART_GLAMDRING: - case ART_ORCRIST: - case ART_ANDURIL: - case ART_ZARCUTHRA: - case ART_GURTHANG: - case ART_HARADEKKET: - case ART_CUBRAGOL: - case ART_DAWN: - { - /* Give a resistance OR a power */ - if (randint(2) == 1) give_resistance = TRUE; - else give_power = TRUE; - } - break; - case ART_NENYA: - case ART_VILYA: - case ART_BERUTHIEL: - case ART_FINGOLFIN: - case ART_THINGOL: - case ART_ULMO: - case ART_OLORIN: + auto f5 = a_info[o_ptr->name1].flags5; + + // Check flags + bool give_resistance = (f5 & TR5_RANDOM_RESIST); + bool give_power = (f5 & TR5_RANDOM_POWER); + if (f5 & TR5_RANDOM_RES_OR_POWER) + { + if (randint(2) == 1) { - /* Give a power */ - give_power = TRUE; + give_resistance = true; } - break; - case ART_POWER: - case ART_GONDOR: - case ART_AULE: + else { - /* Give both */ - give_power = TRUE; - give_resistance = TRUE; + give_power = true; } - break; } + // Grant the resistance/power if (give_power) { o_ptr->xtra1 = EGO_XTRA_ABILITY; /* Randomize the "xtra" power */ - if (o_ptr->xtra1) o_ptr->xtra2 = randint(256); + if (o_ptr->xtra1) + { + o_ptr->xtra2 = randint(256); + } } artifact_bias = 0; -- cgit v1.2.3