summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/artefact.h
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-25 02:29:14 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-06-25 02:29:14 +0000
commit2fad05374f70f21d4af3d147325581bf1047b5be (patch)
tree40a46254f044837f658e4dbabb07ce3c52b72804 /crawl-ref/source/artefact.h
parentab0e3274d569d1cdea4010f4ed1d4b24cd3804e9 (diff)
downloadcrawl-ref-2fad05374f70f21d4af3d147325581bf1047b5be.tar.gz
crawl-ref-2fad05374f70f21d4af3d147325581bf1047b5be.zip
First part of the merger of fixed artefacts into unrandom artefacts
(further changes will be much smaller). Breaks savefile compatibility, and bumps the major savefile version up to 6. Some changes made to some tiles files, but it hasn't been tested with a tiles build. Overview of changes: * Unrand artefacts are now defined in art-data.txt and is turned into C code via util/art-data.pl. This has the dual advantage of being more readable by humans, and that if the unrand data structure changes then you can just change util/art-data.pl and regenerate the C code rather than having to change some 70 different C structs by hand. * util/art-data.pl automatically updates NO_UNRANDARTS, and also automatically generates an enumeration of all the unrands which are equal to their item.special field. * randart.cc and randart.h have been renamed to artefact.cc and artefact.h, since the files covers all types of artefacts, and the differences between randarts, unrandarts and (former) fixed arts have been minimized since the terms were introduced. Also renamed unrand.h to art-data.h * The brands and resistances of former fixed arts are now handled via artefact properties, but the rest of their special behaviours are still hardcoded. * Unrandarts are now distinguished between normal and "special", with the special ones currently just being identical to the list of the formed fixed arts. Special unrandarts are randomly generated less often than normal unrandarts, can be generated in the Abyss if they've been lost, can't be picked up by monsters, and can't be affected by Tukima's Dance. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10035 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/artefact.h')
-rw-r--r--crawl-ref/source/artefact.h263
1 files changed, 263 insertions, 0 deletions
diff --git a/crawl-ref/source/artefact.h b/crawl-ref/source/artefact.h
new file mode 100644
index 0000000000..58b5cf55f7
--- /dev/null
+++ b/crawl-ref/source/artefact.h
@@ -0,0 +1,263 @@
+/*
+ * File: artefact.h
+ * Summary: Random and unrandom artefact functions.
+ * Written by: Linley Henzell
+ *
+ * Modified for Crawl Reference by $Author$ on $Date$
+ */
+
+
+#ifndef RANDART_H
+#define RANDART_H
+
+#include "externs.h"
+
+// NOTE: NO_UNRANDARTS is automatically set by util/art-data.pl
+#define NO_UNRANDARTS 76
+
+#define ART_PROPERTIES ARTP_NUM_PROPERTIES
+
+// Reserving the upper bits for later expansion/versioning.
+#define RANDART_SEED_MASK 0x00ffffff
+
+#define SPWPN_SINGING_SWORD UNRAND_SINGING_SWORD
+#define SPWPN_WRATH_OF_TROG UNRAND_TROG
+#define SPWPN_SCYTHE_OF_CURSES UNRAND_CURSES
+#define SPWPN_MACE_OF_VARIABILITY UNRAND_VARIABILITY
+#define SPWPN_GLAIVE_OF_PRUNE UNRAND_PRUNE
+#define SPWPN_SCEPTRE_OF_TORMENT UNRAND_TORMENT
+#define SPWPN_SWORD_OF_ZONGULDROK UNRAND_ZONGULDROK
+#define SPWPN_SWORD_OF_POWER UNRAND_POWER
+#define SPWPN_STAFF_OF_OLGREB UNRAND_OLGREB
+#define SPWPN_VAMPIRES_TOOTH UNRAND_VAMPIRES_TOOTH
+#define SPWPN_STAFF_OF_WUCAD_MU UNRAND_WUCAD_MU
+#define SPWPN_SWORD_OF_CEREBOV UNRAND_CEREBOV
+#define SPWPN_STAFF_OF_DISPATER UNRAND_DISPATER
+#define SPWPN_SCEPTRE_OF_ASMODEUS UNRAND_ASMODEUS
+
+#define SPWPN_START_NOGEN_FIXEDARTS UNRAND_CEREBOV
+#define SPWPN_END_FIXEDARTS UNRAND_ASMODEUS
+
+enum unrand_special_type
+{
+ UNRANDSPEC_EITHER,
+ UNRANDSPEC_NORMAL,
+ UNRANDPSEC_SPECIAL
+};
+
+// NOTE: This enumeration is automatically generated from art-data.txt
+// via util/art-data.pl
+enum unrand_type
+{
+ UNRAND_START = 180,
+ UNRAND_DUMMY1 = UNRAND_START,
+ UNRAND_SINGING_SWORD, // Singing Sword
+ UNRAND_TROG, // Wrath of Trog
+ UNRAND_VARIABILITY, // Mace of Variability
+ UNRAND_PRUNE, // Glaive of Prune
+ UNRAND_POWER, // Sword of Power
+ UNRAND_OLGREB, // Staff of Olgreb
+ UNRAND_WUCAD_MU, // Staff of Wucad Mu
+ UNRAND_VAMPIRES_TOOTH, // Vampire's Tooth
+ UNRAND_CURSES, // Scythe of Curses
+ UNRAND_TORMENT, // Sceptre of Torment
+ UNRAND_ZONGULDROK, // Sword of Zonguldrok
+ UNRAND_CEREBOV, // Sword of Cerebov
+ UNRAND_DISPATER, // Staff of Dispater
+ UNRAND_ASMODEUS, // Sceptre of Asmodeus
+ UNRAND_BLOODBANE, // long sword "Bloodbane"
+ UNRAND_FLAMING_DEATH, // scimitar of Flaming Death
+ UNRAND_BRILLIANCE, // mace of Brilliance
+ UNRAND_LEECH, // demon blade "Leech"
+ UNRAND_CHILLY_DEATH, // dagger of Chilly Death
+ UNRAND_MORG, // dagger "Morg"
+ UNRAND_FINISHER, // scythe "Finisher"
+ UNRAND_PUNK, // sling "Punk"
+ UNRAND_KRISHNA, // bow of Krishna "Sharnga"
+ UNRAND_SKULLCRUSHER, // giant club "Skullcrusher"
+ UNRAND_GUARD, // glaive of the Guard
+ UNRAND_JIHAD, // sword of Jihad
+ UNRAND_HELLFIRE, // crossbow "Hellfire"
+ UNRAND_DOOM_KNIGHT, // sword of the Doom Knight
+ UNRAND_EOS, // "Eos"
+ UNRAND_BOTONO, // spear of the Botono
+ UNRAND_OCTOPUS_KING, // trident of the Octopus King
+ UNRAND_ARGA, // mithril axe "Arga"
+ UNRAND_ELEMENTAL_STAFF, // Elemental Staff
+ UNRAND_SNIPER, // hand crossbow "Sniper"
+ UNRAND_PIERCER, // longbow "Piercer"
+ UNRAND_BLOWGUN_ASSASSIN, // blowgun of the Assassin
+ UNRAND_WYRMBANE, // Wyrmbane
+ UNRAND_SPRIGGANS_KNIFE, // Spriggan's Knife
+ UNRAND_PLUTONIUM_SWORD, // plutonium sword
+ UNRAND_UNDEADHUNTER, // great mace "Undeadhunter"
+ UNRAND_SERPENT_SCOURGE, // whip "Serpent-Scourge"
+ UNRAND_ACCURACY, // knife of Accuracy
+ UNRAND_CRYSTAL_SPEAR, // Lehudib's crystal spear
+ UNRAND_IGNORANCE, // shield of Ignorance
+ UNRAND_AUGMENTATION, // robe of Augmentation
+ UNRAND_THIEF, // cloak of the Thief
+ UNRAND_BULLSEYE, // shield "Bullseye"
+ UNRAND_DYROVEPREVA, // crown of Dyrovepreva
+ UNRAND_MISFORTUNE, // robe of Misfortune
+ UNRAND_FLASH, // cloak of Flash
+ UNRAND_BOOTS_ASSASSIN, // boots of the Assassin
+ UNRAND_LEARS, // Lear's chain mail
+ UNRAND_ZHOR, // skin of Zhor
+ UNRAND_SALAMANDER, // salamander hide armour
+ UNRAND_WAR, // gauntlets of War
+ UNRAND_RESISTANCE, // shield of Resistance
+ UNRAND_FOLLY, // robe of Folly
+ UNRAND_MAXWELL, // Maxwell's patent armour
+ UNRAND_DRAGON, // mask of the Dragon
+ UNRAND_NIGHT, // robe of Night
+ UNRAND_DRAGON_KING, // armour of the Dragon King
+ UNRAND_ALCHEMIST, // hat of the Alchemist
+ UNRAND_FENCERS_GLOVES, // Fencer's gloves
+ UNRAND_STARLIGHT, // cloak of Starlight
+ UNRAND_RATSKIN_CLOAK, // ratskin cloak
+ UNRAND_AIR, // amulet of the Air
+ UNRAND_SHADOWS, // ring of Shadows
+ UNRAND_CEKUGOB, // amulet of Cekugob
+ UNRAND_FOUR_WINDS, // amulet of the Four Winds
+ UNRAND_BLOODLUST, // necklace of Bloodlust
+ UNRAND_SHAOLIN, // ring of Shaolin
+ UNRAND_ROBUSTNESS, // ring of Robustness
+ UNRAND_MAGE, // ring of the Mage
+ UNRAND_SHIELDING, // brooch of Shielding
+ UNRAND_DUMMY2, // DUMMY UNRANDART 2
+ UNRAND_LAST = UNRAND_DUMMY2
+};
+
+// The following unrandart bits were taken from $pellbinder's mon-util
+// code (see mon-util.h & mon-util.cc) and modified (LRH).
+struct unrandart_entry
+{
+ const char *name; // true name of unrandart (max 31 chars)
+ const char *unid_name; // un-id'd name of unrandart (max 31 chars)
+
+ object_class_type base_type; // class of ura
+ int sub_type; // type of ura
+ int plus; // plus of ura
+ int plus2; // plus2 of ura
+ int colour; // colour of ura
+ short prpty[ART_PROPERTIES];
+
+ // special description added to 'v' command output (max 31 chars)
+ const char *desc;
+ // special description added to 'v' command output (max 31 chars)
+ const char *desc_id;
+ // special description added to 'v' command output (max 31 chars)
+ const char *desc_end;
+};
+
+bool is_known_artefact( const item_def &item );
+bool is_artefact( const item_def &item );
+bool is_random_artefact( const item_def &item );
+bool is_unrandom_artefact( const item_def &item );
+bool is_special_unrandom_artefact( const item_def &item );
+
+unique_item_status_type get_unique_item_status(const item_def& item);
+unique_item_status_type get_unique_item_status(int unrand_index);
+void set_unique_item_status(const item_def& item,
+ unique_item_status_type status );
+void set_unique_item_status(int unrand_index,
+ unique_item_status_type status );
+
+/* ***********************************************************************
+ * called from: itemname
+ * *********************************************************************** */
+std::string get_artefact_name( const item_def &item );
+
+/* ***********************************************************************
+ * called from: spl-book
+ * *********************************************************************** */
+void set_artefact_name( item_def &item, const std::string &name );
+void set_artefact_appearance( item_def &item, const std::string &appear );
+
+/* ***********************************************************************
+ * called from: effects
+ * *********************************************************************** */
+std::string artefact_name( const item_def &item, bool appearance = false );
+
+/* ***********************************************************************
+ * called from: describe
+ * *********************************************************************** */
+const char *unrandart_descrip( int which_descrip, const item_def &item );
+
+/* ***********************************************************************
+ * called from: dungeon makeitem
+ * *********************************************************************** */
+int find_okay_unrandart(unsigned char aclass, unsigned char atype = OBJ_RANDOM,
+ unrand_special_type specialness = UNRANDSPEC_EITHER,
+ bool in_abyss = false);
+
+typedef FixedVector< int, ART_PROPERTIES > artefact_properties_t;
+typedef FixedVector< bool, ART_PROPERTIES > artefact_known_props_t;
+
+/* ***********************************************************************
+ * called from: describe - fight - it_use2 - item_use - player
+ * *********************************************************************** */
+void artefact_desc_properties( const item_def &item,
+ artefact_properties_t &proprt,
+ artefact_known_props_t &known,
+ bool force_fake_props = false);
+
+void artefact_wpn_properties( const item_def &item,
+ artefact_properties_t &proprt,
+ artefact_known_props_t &known );
+
+void artefact_wpn_properties( const item_def &item,
+ artefact_properties_t &proprt );
+
+int artefact_wpn_property( const item_def &item, artefact_prop_type prop,
+ bool &known );
+
+int artefact_wpn_property( const item_def &item, artefact_prop_type prop );
+
+int artefact_known_wpn_property( const item_def &item,
+ artefact_prop_type prop );
+
+int artefact_wpn_num_props( const item_def &item );
+int artefact_wpn_num_props( const artefact_properties_t &proprt );
+
+void artefact_wpn_learn_prop( item_def &item, artefact_prop_type prop );
+bool artefact_wpn_known_prop( const item_def &item, artefact_prop_type prop );
+
+/* ***********************************************************************
+ * called from: dungeon
+ * *********************************************************************** */
+bool make_item_blessed_blade( item_def &item );
+bool make_item_randart( item_def &item );
+bool make_item_unrandart( item_def &item, int unrand_index );
+
+/* ***********************************************************************
+ * called from: randart - debug
+ * *********************************************************************** */
+bool randart_is_bad( const item_def &item );
+bool randart_is_bad( const item_def &item, artefact_properties_t &proprt );
+
+/* ***********************************************************************
+ * called from: items
+ * *********************************************************************** */
+int find_unrandart_index(const item_def& artefact);
+
+unrandart_entry* get_unrand_entry(int unrand_index);
+
+unrand_special_type get_unrand_specialness(int unrand_index);
+unrand_special_type get_unrand_specialness(const item_def &item);
+
+/* ***********************************************************************
+ * called from: debug
+ * *********************************************************************** */
+void artefact_set_properties( item_def &item,
+ artefact_properties_t &proprt );
+void artefact_set_property( item_def &item,
+ artefact_prop_type prop,
+ int val );
+
+/* ***********************************************************************
+ * called from: mapdef
+ * *********************************************************************** */
+int get_unrandart_num( const char *name );
+#endif