diff options
-rw-r--r-- | crawl-ref/source/describe.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/effects.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/externs.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/it_use3.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/itemname.cc | 57 | ||||
-rw-r--r-- | crawl-ref/source/itemname.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/itemprop.h | 6 | ||||
-rw-r--r-- | crawl-ref/source/makeitem.cc | 3 | ||||
-rw-r--r-- | crawl-ref/source/newgame.cc | 19 | ||||
-rw-r--r-- | crawl-ref/source/spl-book.cc | 11 | ||||
-rw-r--r-- | crawl-ref/source/tags.cc | 8 | ||||
-rw-r--r-- | crawl-ref/source/tile1.cc | 15 | ||||
-rw-r--r-- | crawl-ref/source/tutorial.cc | 2 |
13 files changed, 98 insertions, 34 deletions
diff --git a/crawl-ref/source/describe.h b/crawl-ref/source/describe.h index 875c86b8c0..892922e4ac 100644 --- a/crawl-ref/source/describe.h +++ b/crawl-ref/source/describe.h @@ -19,6 +19,8 @@ #include "externs.h" #include "enum.h" +// If you add any more description types, remember to also +// change item_description in externs.h enum item_description_type { IDESC_WANDS = 0, @@ -26,6 +28,7 @@ enum item_description_type IDESC_SCROLLS, // special field (like the others) IDESC_RINGS, IDESC_SCROLLS_II, + IDESC_STAVES, NUM_IDESC }; diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc index 2d71f47ed4..5d00413449 100644 --- a/crawl-ref/source/effects.cc +++ b/crawl-ref/source/effects.cc @@ -1869,7 +1869,7 @@ bool forget_inventory(bool quiet) case OBJ_BOOKS: case OBJ_STAVES: case OBJ_MISCELLANY: - // Don't forget identity of decks if it the player has + // Don't forget identity of decks if the player has // used any of its cards, or knows how many are left. if (!is_deck(item) || item.plus2 == 0) unset_ident_flags(item, ISFLAG_KNOW_TYPE); @@ -2360,6 +2360,8 @@ void handle_time( long time_delta ) if (random2(100) < total_skill) { item_def& item = you.inv[you.equip[EQ_WEAPON]]; + + set_ident_type( OBJ_STAVES, item.sub_type, ID_KNOWN_TYPE ); set_ident_flags( item, ISFLAG_IDENT_MASK ); mprf("You are wielding %s.", item.name(DESC_NOCAP_A).c_str()); diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 08ca29e614..b4dd6dd4c0 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -675,7 +675,7 @@ public: int total_skill_points; int exp_available; - FixedArray<unsigned char, 5, 50> item_description; + FixedArray<unsigned char, 6, 50> item_description; FixedVector<unique_item_status_type, 50> unique_items; FixedVector<bool, NUM_MONSTERS> unique_creatures; diff --git a/crawl-ref/source/it_use3.cc b/crawl-ref/source/it_use3.cc index 151bf4b0b9..017400b32b 100644 --- a/crawl-ref/source/it_use3.cc +++ b/crawl-ref/source/it_use3.cc @@ -564,6 +564,7 @@ bool evoke_wielded() if (!item_type_known(wpn)) { + set_ident_type( OBJ_STAVES, wpn.sub_type, ID_KNOWN_TYPE ); set_ident_flags( wpn, ISFLAG_KNOW_TYPE ); mprf("You are wielding %s.", diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 5298995774..a1220dd627 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -879,22 +879,33 @@ static const char* book_type_name(int booktype) } } +static const char* staff_secondary_string(int p) +{ + switch (p) // general descriptions + { + case 0: return "crooked "; + case 1: return "knobbly "; + case 2: return "heavily "; + case 3: return "gnarled "; + case 4: return "thin "; + case 5: return "curved "; + case 6: return "twisted "; + case 7: return "thick "; + case 8: return "long "; + case 9: return "short "; + default: return "buggily "; + } +} + static const char* staff_primary_string(int p) { - switch (p) + switch (p) // special attributes { - - case 0: return "curved"; - case 1: return "glowing"; - case 2: return "thick"; - case 3: return "thin"; - case 4: return "long"; - case 5: return "twisted"; - case 6: return "jewelled"; - case 7: return "runed"; - case 8: return "smoking"; - case 9: return "gnarled"; - default: return "buggy"; + case 0: return "glowing "; + case 1: return "jewelled "; + case 2: return "runed "; + case 3: return "smoking "; + default: return "buggy "; } } @@ -1517,8 +1528,9 @@ std::string item_def::name_aux( description_level_type desc, if (!know_type) { if (!basename) - buff << staff_primary_string(this->special) << " "; - + buff << staff_secondary_string(this->special / 4) + << staff_primary_string(this->special % 4); + buff << (item_is_rod( *this ) ? "rod" : "staff"); } else @@ -1526,7 +1538,8 @@ std::string item_def::name_aux( description_level_type desc, buff << (item_is_rod( *this ) ? "rod" : "staff") << " of " << staff_type_name(item_typ); - if (item_is_rod(*this) && !basename && !qualname && !dbname) + if (item_is_rod(*this) && know_pluses + && !basename && !qualname && !dbname) { buff << " (" << (this->plus / ROD_CHARGE_MULT) << "/" << (this->plus2 / ROD_CHARGE_MULT) @@ -1639,6 +1652,7 @@ static item_type_id_type objtype_to_idtype(object_class_type base_type) case OBJ_SCROLLS: return (IDTYPE_SCROLLS); case OBJ_JEWELLERY: return (IDTYPE_JEWELLERY); case OBJ_POTIONS: return (IDTYPE_POTIONS); + case OBJ_STAVES: return (IDTYPE_STAVES); default: return (NUM_IDTYPE); } } @@ -1754,12 +1768,13 @@ void check_item_knowledge() { std::vector<const item_def*> items; - const object_class_type idx_to_objtype[4] = { OBJ_WANDS, OBJ_SCROLLS, - OBJ_JEWELLERY, OBJ_POTIONS }; - const int idx_to_maxtype[4] = { NUM_WANDS, NUM_SCROLLS, - NUM_JEWELLERY, NUM_POTIONS }; + const object_class_type idx_to_objtype[5] = { OBJ_WANDS, OBJ_SCROLLS, + OBJ_JEWELLERY, OBJ_POTIONS, + OBJ_STAVES }; + const int idx_to_maxtype[5] = { NUM_WANDS, NUM_SCROLLS, + NUM_JEWELLERY, NUM_POTIONS, NUM_STAVES }; - for (int i = 0; i < 4; i++) + for (int i = 0; i < 5; i++) { for (int j = 0; j < idx_to_maxtype[i]; j++) { diff --git a/crawl-ref/source/itemname.h b/crawl-ref/source/itemname.h index 51e2367713..777c8d5697 100644 --- a/crawl-ref/source/itemname.h +++ b/crawl-ref/source/itemname.h @@ -28,6 +28,7 @@ enum item_type_id_type IDTYPE_SCROLLS, IDTYPE_JEWELLERY, IDTYPE_POTIONS, + IDTYPE_STAVES, NUM_IDTYPE }; diff --git a/crawl-ref/source/itemprop.h b/crawl-ref/source/itemprop.h index 6b98fbebe3..9744906312 100644 --- a/crawl-ref/source/itemprop.h +++ b/crawl-ref/source/itemprop.h @@ -397,7 +397,7 @@ enum stave_type STAFF_SUMMONING, STAFF_AIR, STAFF_EARTH, - STAFF_CHANNELING, + STAFF_CHANNELING, // 12 // rods STAFF_SMITING, // must be first rod! STAFF_SPELL_SUMMONING, @@ -409,8 +409,8 @@ enum stave_type STAFF_DISCOVERY, STAFF_DEMONOLOGY, STAFF_STRIKING, - STAFF_VENOM, - NUM_STAVES // must remain last member {dlb} + STAFF_VENOM, // 23 + NUM_STAVES // must remain last member {dlb} }; enum weapon_type diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index f36735c5ba..eeecee763e 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -703,6 +703,7 @@ void item_colour( item_def &item ) case OBJ_STAVES: item.colour = BROWN; + item.special = you.item_description[IDESC_STAVES][item.sub_type]; break; case OBJ_ORBS: @@ -2479,7 +2480,7 @@ static void generate_staff_item(item_def& item, int force_type) init_rod_mp( item ); // add different looks - item.special = random2(10); +// item.special = you.item_description[IDESC_STAVES][item.sub_type]; } static bool try_make_jewellery_unrandart(item_def& item, int force_type, diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc index c92c220046..e39ac15dd5 100644 --- a/crawl-ref/source/newgame.cc +++ b/crawl-ref/source/newgame.cc @@ -419,10 +419,18 @@ static void initialise_item_descriptions() you.item_description[IDESC_POTIONS][POT_WATER] = PDESCS(PDC_CLEAR); you.item_description[IDESC_POTIONS][POT_BLOOD] = PDESCS(PDC_RED); + // The order here must match that of IDESC in describe.h + // (I don't really know about scrolls, which is why I left the height value.) + const int max_item_number[6] = { NUM_WANDS, NUM_POTIONS, + you.item_description.height(), + NUM_JEWELLERY, + you.item_description.height(), + NUM_STAVES }; + for (int i = 0; i < NUM_IDESC; i++) { - // We really should only loop until NUM_WANDS, etc., here - for (int j = 0; j < you.item_description.height(); j++) + // only loop until NUM_WANDS etc. + for (int j = 0; j < max_item_number[i]; j++) { // Don't override predefines if (you.item_description[i][j] != 255) @@ -432,6 +440,7 @@ static void initialise_item_descriptions() while (true) { + // The numbers below are always secondary * primary (itemname.cc) switch (i) { case IDESC_WANDS: // wands @@ -454,6 +463,10 @@ static void initialise_item_descriptions() if (coinflip()) you.item_description[i][j] %= 13; break; + + case IDESC_STAVES: // staves and rods + you.item_description[i][j] = random2( 10 * 4 ); + break; } bool is_ok = true; @@ -2464,7 +2477,7 @@ static void make_rod(item_def &item, stave_type rod_type) item.base_type = OBJ_STAVES; item.sub_type = rod_type; item.quantity = 1; - item.special = 0; + item.special = you.item_description[IDESC_STAVES][rod_type]; item.colour = BROWN; init_rod_mp(item); diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc index 7625aab042..33e842d477 100644 --- a/crawl-ref/source/spl-book.cc +++ b/crawl-ref/source/spl-book.cc @@ -1413,9 +1413,20 @@ int staff_spell( int staff ) return (-1); } + bool need_id = false; if (!item_type_known(istaff)) { + set_ident_type( OBJ_STAVES, istaff.sub_type, ID_KNOWN_TYPE ); set_ident_flags( istaff, ISFLAG_KNOW_TYPE ); + need_id = true; + } + if (!item_ident( istaff, ISFLAG_KNOW_PLUSES)) + { + set_ident_flags( istaff, ISFLAG_KNOW_PLUSES ); + need_id = true; + } + if (need_id) + { mprf(MSGCH_EQUIPMENT, "%s", istaff.name(DESC_INVENTORY_EQUIP).c_str()); you.wield_change = true; } diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc index f206ab46f8..ab03c40274 100644 --- a/crawl-ref/source/tags.cc +++ b/crawl-ref/source/tags.cc @@ -71,6 +71,7 @@ #include "abl-show.h" #include "branch.h" +#include "describe.h" #include "dungeon.h" #include "enum.h" #include "externs.h" @@ -1016,10 +1017,10 @@ static void tag_construct_you_items(tagHeader &th) // item descrip for each type & subtype // how many types? - marshallByte(th, 5); + marshallByte(th, NUM_IDESC); // how many subtypes? marshallByte(th, 50); - for (i = 0; i < 5; ++i) + for (i = 0; i < NUM_IDESC; ++i) { for (j = 0; j < 50; ++j) marshallByte(th, you.item_description[i][j]); @@ -1429,6 +1430,9 @@ static void tag_read_you_items(tagHeader &th, char minorVersion) case IDTYPE_POTIONS: set_ident_type(OBJ_POTIONS, j, ch); break; + case IDTYPE_STAVES: + set_ident_type(OBJ_STAVES, j, ch); + break; } } } diff --git a/crawl-ref/source/tile1.cc b/crawl-ref/source/tile1.cc index 25c7352cc6..cdf12cdf45 100644 --- a/crawl-ref/source/tile1.cc +++ b/crawl-ref/source/tile1.cc @@ -1611,7 +1611,13 @@ int tileidx_item(const item_def &item) return TILE_BOOK_PAPYRUS; case OBJ_STAVES: - return TILE_STAFF_OFFSET + special % 10; +/* + if (id[ IDTYPE_STAVES ][type] == ID_KNOWN_TYPE + || (item.flags &ISFLAG_KNOW_TYPE )) + return TILE_STAFF_WIZARDRY + type; +*/ + // try to return an appropriate tile + return TILE_STAFF_OFFSET + (special / 4) % 10; case OBJ_CORPSES: if (item.sub_type == CORPSE_SKELETON) @@ -3972,6 +3978,13 @@ static int item_unid_type(const item_def &item) return 1; else return 0; + + case OBJ_STAVES: + id0 = id[ IDTYPE_STAVES ][s]; + if (id0 != ID_KNOWN_TYPE) + return 1; + else + return 0; } return 0; } diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc index a6318293b8..59a8ddf374 100644 --- a/crawl-ref/source/tutorial.cc +++ b/crawl-ref/source/tutorial.cc @@ -1,5 +1,5 @@ /* - * Created for Crawl Reference by JPEG on $Date: 2007-01-11$ + * Created for Crawl Reference by j-p-e-g on $Date: 2007-01-11$ */ #include "tutorial.h" |