diff options
-rw-r--r-- | crawl-ref/source/defines.h | 14 | ||||
-rw-r--r-- | crawl-ref/source/externs.h | 30 | ||||
-rw-r--r-- | crawl-ref/source/files.cc | 100 | ||||
-rw-r--r-- | crawl-ref/source/itemname.cc | 156 | ||||
-rw-r--r-- | crawl-ref/source/itemname.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/menu.cc | 7 | ||||
-rw-r--r-- | crawl-ref/source/newgame.cc | 24 | ||||
-rw-r--r-- | crawl-ref/source/player.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/player.h | 34 | ||||
-rw-r--r-- | crawl-ref/source/rltiles/dc-corpse.txt | 370 | ||||
-rw-r--r-- | crawl-ref/source/rltiles/dc-mon.txt | 4 | ||||
-rw-r--r-- | crawl-ref/source/tilepick.cc | 123 | ||||
-rw-r--r-- | crawl-ref/source/tilereg.cc | 35 | ||||
-rw-r--r-- | crawl-ref/source/tilereg.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/tiles.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/tiletex.cc | 2 |
16 files changed, 583 insertions, 328 deletions
diff --git a/crawl-ref/source/defines.h b/crawl-ref/source/defines.h index 0cff5e5a67..42f083ffb6 100644 --- a/crawl-ref/source/defines.h +++ b/crawl-ref/source/defines.h @@ -280,13 +280,13 @@ enum GotoRegion // Mouse modes (for tiles) enum mouse_mode { - MOUSE_MODE_NORMAL, - MOUSE_MODE_COMMAND, - MOUSE_MODE_TARGET, - MOUSE_MODE_TARGET_DIR, - MOUSE_MODE_TARGET_PATH, - MOUSE_MODE_MORE, - MOUSE_MODE_MACRO + MOUSE_MODE_NORMAL, + MOUSE_MODE_COMMAND, + MOUSE_MODE_TARGET, + MOUSE_MODE_TARGET_DIR, + MOUSE_MODE_TARGET_PATH, + MOUSE_MODE_MORE, + MOUSE_MODE_MACRO }; diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 2f0aa523a3..c2a0ec73be 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -28,18 +28,6 @@ #include "store.h" #ifdef USE_TILE -// This used to be in tiles.h. (jpeg) -#include "tiledef-main.h" -#include "tiledef-dngn.h" -#include "tiledef-player.h" - -struct dolls_data -{ - dolls_data() { memset(parts, 0, sizeof(parts)); } - - int parts[TILEP_PART_MAX]; -}; - struct tile_flavour { // The floor tile to use. @@ -1181,24 +1169,6 @@ protected: extern player you; -struct player_save_info -{ - std::string name; - unsigned long experience; - int experience_level; - bool wizard; - species_type species; - std::string class_name; - god_type religion; -#ifdef USE_TILE - dolls_data doll; -#endif - - player_save_info operator=(const player& rhs); - bool operator<(const player_save_info& rhs) const; - std::string short_desc() const; -}; - class monster_spells : public FixedVector<spell_type, NUM_MONSTER_SPELL_SLOTS> { public: diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc index 506530b621..47adcea3bb 100644 --- a/crawl-ref/source/files.cc +++ b/crawl-ref/source/files.cc @@ -65,6 +65,7 @@ REVISION("$Rev$"); #include "mon-util.h" #include "mstuff2.h" #include "mtransit.h" +#include "newgame.h" #include "notes.h" #include "output.h" #include "overmap.h" @@ -191,8 +192,8 @@ player_save_info read_character_info(const std::string &savefile) fromfile = you; you.copy_from(backup); } - fclose(charf); + return fromfile; } @@ -602,6 +603,57 @@ std::string get_savedir_path(const std::string &shortpath) #endif } +#ifdef USE_TILE +static void _fill_player_doll(player_save_info &p, const std::string &dollfile) +{ + dolls_data equip_doll; + for (unsigned int j = 0; j < TILEP_PART_MAX; ++j) + equip_doll.parts[j] = TILEP_SHOW_EQUIP; + + equip_doll.parts[TILEP_PART_BASE] + = tilep_species_to_base_tile(p.species, p.experience_level); + + bool success = false; + + FILE *fdoll = fopen(dollfile.c_str(), "r"); + if (fdoll) + { + char fbuf[1024]; + memset(fbuf, 0, sizeof(fbuf)); + if (fscanf(fdoll, "%s", fbuf) != EOF) + { + tilep_scan_parts(fbuf, equip_doll.parts); + tilep_race_default(p.species, + get_gender_from_tile(equip_doll.parts), + p.experience_level, + equip_doll.parts); + success = true; + + while (fscanf(fdoll, "%s", fbuf) != EOF) + { + if (strcmp(fbuf, "net") == 0) + p.held_in_net = true; +// else if (strncmp(fbuf, "floor=", 6) == 0) +// sscanf(fbuf, "floor=%d", &p.floor_tile); + } + } + fclose(fdoll); + } + + if (!success) // Use default doll instead. + { + int job = get_class_by_name(p.class_name.c_str()); + if (job == -1) + job = JOB_FIGHTER; + + int gender = coinflip(); + tilep_job_default(job, gender, equip_doll.parts); + } + p.doll = equip_doll; +} +#endif + + /* * Returns a list of the names of characters that are already saved for the * current user. @@ -646,9 +698,33 @@ std::vector<player_save_info> find_saved_characters() #endif if (is_save_file_name(filename)) { - player_save_info p=read_character_info(get_savedir_path(filename)); + const std::string path = get_savedir_path(filename); + player_save_info p = read_character_info(path); if (!p.name.empty()) + { +#ifdef USE_TILE + if (Options.tile_menu_icons) + { + const std::string dollname = basename + ".tdl"; + #ifdef LOAD_UNPACKAGE_CMD + snprintf( cmd_buff, sizeof(cmd_buff), + UNPACK_SPECIFIC_FILE_CMD, + zipname.c_str(), + dir.c_str(), + dollname.c_str() ); + system(cmd_buff); + #endif + const std::string dollpath = get_savedir_path(dollname); + _fill_player_doll(p, dollpath); + #ifdef LOAD_UNPACKAGE_CMD + // Throw away doll file. + if (file_exists(dollpath.c_str())) + unlink( dollpath.c_str() ); + #endif + } +#endif chars.push_back(p); + } } #ifdef LOAD_UNPACKAGE_CMD @@ -1517,6 +1593,26 @@ void save_game(bool leave_game, const char *farewellmsg) DO_CHMOD_PRIVATE(msgFile.c_str()); } + /* tile dolls (empty for ASCII)*/ + std::string dollFile = get_savedir_filename(you.your_name, "", "tdl"); +#ifdef USE_TILE + // Save the current equipment into a file. + FILE *dollf = fopen(dollFile.c_str(), "w+"); + if (dollf) + { + save_doll_file(dollf); + fclose(dollf); + DO_CHMOD_PRIVATE(dollFile.c_str()); + } +#else + // Don't overwrite old tile dolls. + if (!file_exists(dollFile)) + { + FILE *dollf = fopen(dollFile.c_str(), "wb"); + fclose(dollf); + } +#endif + std::string charFile = get_savedir_filename(you.your_name, "", "sav"); FILE *charf = fopen(charFile.c_str(), "wb"); if (!charf) diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 9d30e6f374..98ec4bc9ed 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -50,11 +50,11 @@ REVISION("$Rev$"); id_arr type_ids; -static bool is_random_name_space( char let ); -static bool is_random_name_vowel( char let ); +static bool _is_random_name_space( char let ); +static bool _is_random_name_vowel( char let ); -static char retvow(int sed); -static char retlet(int sed); +static char _random_vowel(int seed); +static char _random_cons(int seed); bool is_vowel( const char chr ) { @@ -1946,16 +1946,16 @@ bool check_item_knowledge(bool quiet) // Used for: Pandemonium demonlords, shopkeepers, scrolls, random artefacts -std::string make_name( unsigned long seed, bool all_cap ) +std::string make_name(unsigned long seed, bool all_cap, int maxlen, char start) { char name[ITEMNAME_SIZE]; - int numb[17]; + int numb[17]; // contains the random seeds used for the name int i = 0; - bool want_vowel = false; - bool has_space = false; + bool want_vowel = false; // Keep track of whether we want a vowel next. + bool has_space = false; // Keep track of whether the name contains a space. - for (i = 0; i < ITEMNAME_SIZE; i++) + for (i = 0; i < ITEMNAME_SIZE; ++i) name[i] = '\0'; const int var1 = (seed & 0xFF); @@ -1983,14 +1983,20 @@ std::string make_name( unsigned long seed, bool all_cap ) int len = 3 + numb[0] % 5 + ((numb[1] % 5 == 0) ? numb[2] % 6 : 1); - if (all_cap) + if (all_cap) // scrolls have longer names len += 6; + if (maxlen != -1 && len > maxlen) + len = maxlen; + + ASSERT(len > 0); + ASSERT(len <= ITEMNAME_SIZE); + int j = numb[3] % 17; const int k = numb[4] % 17; - int count = 0; - for (i = 0; i < len; i++) + int count = 0; + for (i = 0; i < len; ++i) { j = (j + 1) % 17; if (j == 0) @@ -2000,57 +2006,75 @@ std::string make_name( unsigned long seed, bool all_cap ) break; } - if (!has_space && i > 5 && i < len - 4 - && (numb[(k + 10 * j) % 17] % 5) != 3) + if (i == 0 && start != 0) + { + // Start the name with a predefined letter. + name[i] = start; + want_vowel = _is_random_name_vowel(start); + } + else if (!has_space && i > 5 && i < len - 4 + && (numb[(k + 10 * j) % 17] % 5) != 3) // 4/5 chance of a space { + // Hand out a space. want_vowel = true; name[i] = ' '; } else if (i > 0 - && (want_vowel - || (i > 1 - && is_random_name_vowel( name[i - 1] ) - && !is_random_name_vowel( name[i - 2] ) - && (numb[(k + 4 * j) % 17] % 5) <= 1 ))) + && (want_vowel + || (i > 1 + && _is_random_name_vowel( name[i - 1] ) + && !_is_random_name_vowel( name[i - 2] ) + && (numb[(k + 4 * j) % 17] % 5) <= 1 ))) // 2/5 chance { + // Place a vowel. want_vowel = true; - name[i] = retvow( numb[(k + 7 * j) % 17] ); + name[i] = _random_vowel( numb[(k + 7 * j) % 17] ); - if (is_random_name_space( name[i] )) + if (_is_random_name_space( name[i] )) { - if (i == 0) + if (i == 0) // Shouldn't happen. { want_vowel = false; - name[i] = retlet( numb[(k + 14 * j) % 17] ); + name[i] = _random_cons( numb[(k + 14 * j) % 17] ); } else if (len < 7 - || i <= 2 || i >= len - 3 - || is_random_name_space( name[i - 1] ) - || (i > 1 && is_random_name_space( name[i - 2] )) - || (i > 2 - && !is_random_name_vowel( name[i - 1] ) - && !is_random_name_vowel( name[i - 2] ))) + || i <= 2 || i >= len - 3 + || _is_random_name_space( name[i - 1] ) + || (i > 1 && _is_random_name_space( name[i - 2] )) + || i > 2 + && !_is_random_name_vowel( name[i - 1] ) + && !_is_random_name_vowel( name[i - 2] )) { + // Replace the space with something else if ... + // * the name is really short + // * we're close to the begin/end of the name + // * we just got a space, or + // * the last two letters were consonants i--; continue; } } else if (i > 1 - && name[i] == name[i - 1] - && (name[i] == 'y' || name[i] == 'i' - || (numb[(k + 12 * j) % 17] % 5) <= 1)) + && name[i] == name[i - 1] + && (name[i] == 'y' || name[i] == 'i' + || (numb[(k + 12 * j) % 17] % 5) <= 1)) { + // Replace the vowel with something else if the previous + // letter was the same, and it's a 'y', 'i' or with 2/5 chance. i--; continue; } } - else + else // We want a consonant. { + // Use one of number of predefined letter combinations. if ((len > 3 || i != 0) - && (numb[(k + 13 * j) % 17] % 7) <= 1 - && (i < len - 2 || (i > 0 && !is_random_name_space(name[i - 1])))) + && (numb[(k + 13 * j) % 17] % 7) <= 1 // 2/7 chance + && (i < len - 2 + || i > 0 && !_is_random_name_space(name[i - 1]))) { - const bool beg = ((i < 1) || is_random_name_space(name[i - 1])); + // Are we at start or end of the (sub) name? + const bool beg = (i < 1 || _is_random_name_space(name[i - 1])); const bool end = (i >= len - 2); const int first = (beg ? 0 : (end ? 14 : 0)); @@ -2060,6 +2084,11 @@ std::string make_name( unsigned long seed, bool all_cap ) i++; + // Pick a random combination of consonants from the set below. + // begin -> [0,27] + // middle -> [0,67] + // end -> [14,56] + switch (numb[(k + 11 * j) % 17] % num + first) { // start, middle @@ -2138,50 +2167,53 @@ std::string make_name( unsigned long seed, bool all_cap ) break; } } - else + else // Place a single letter instead. { if (i == 0) { + // Start with any letter. name[i] = 'a' + (numb[(k + 8 * j) % 17] % 26); - want_vowel = is_random_name_vowel( name[i] ); + want_vowel = _is_random_name_vowel( name[i] ); } else { - name[i] = retlet( numb[(k + 3 * j) % 17] ); + // Pick a random consonant. + name[i] = _random_cons( numb[(k + 3 * j) % 17] ); } } } + // No letter chosen? if (name[i] == '\0') { i--; continue; } - if (want_vowel && !is_random_name_vowel( name[i] ) - || (!want_vowel && is_random_name_vowel( name[i] ))) + // Picked wrong type? + if (want_vowel && !_is_random_name_vowel( name[i] ) + || !want_vowel && _is_random_name_vowel( name[i] )) { i--; continue; } - if (is_random_name_space( name[i] )) + if (_is_random_name_space( name[i] )) has_space = true; - if (!is_random_name_vowel( name[i] )) - want_vowel = true; - else - want_vowel = false; + // If we just got a vowel, we want a consonant next, and vice versa. + want_vowel = !_is_random_name_vowel(name[i]); } - // catch break and try to give a final letter + // Catch break and try to give a final letter. if (i > 0 - && !is_random_name_space( name[i - 1] ) + && !_is_random_name_space( name[i - 1] ) && name[i - 1] != 'y' - && is_random_name_vowel( name[i - 1] ) + && _is_random_name_vowel( name[i - 1] ) && (count > 9 || (i < 8 && numb[16] % 3))) { - name[i] = retlet( numb[j] ); + // 2/3 chance of ending in a consonant + name[i] = _random_cons( numb[j] ); } len = strlen( name ); @@ -2200,6 +2232,7 @@ std::string make_name( unsigned long seed, bool all_cap ) } } + // Fallback if the name was too short. if (len < 4) { strcpy(name, "plog"); @@ -2211,29 +2244,34 @@ std::string make_name( unsigned long seed, bool all_cap ) name[i] = toupper( name[i] ); return name; -} // end make_name() +} -bool is_random_name_space(char let) +static bool _is_random_name_space(char let) { return (let == ' '); } -static bool is_random_name_vowel( char let ) +// Returns true for vowels, 'y' or space. +static bool _is_random_name_vowel( char let ) { return (let == 'a' || let == 'e' || let == 'i' || let == 'o' || let == 'u' || let == 'y' || let == ' '); -} // end is_random_name_vowel() +} -static char retvow( int sed ) +// Returns a random vowel (a, e, i, o, u with equal probability) or space +// or 'y' with lower chances. +static char _random_vowel( int seed ) { static const char vowels[] = "aeiouaeiouaeiouy "; - return (vowels[ sed % (sizeof(vowels) - 1) ]); -} // end retvow() + return (vowels[ seed % (sizeof(vowels) - 1) ]); +} -static char retlet( int sed ) +// Returns a random consonant with not quite equal probability. +// Does not include 'y'. +static char _random_cons( int seed ) { static const char consonants[] = "bcdfghjklmnpqrstvwxzcdfghlmnrstlmnrst"; - return (consonants[ sed % (sizeof(consonants) - 1) ]); + return (consonants[ seed % (sizeof(consonants) - 1) ]); } bool is_interesting_item( const item_def& item ) diff --git a/crawl-ref/source/itemname.h b/crawl-ref/source/itemname.h index 0f8012e021..447892639a 100644 --- a/crawl-ref/source/itemname.h +++ b/crawl-ref/source/itemname.h @@ -94,7 +94,8 @@ bool is_bad_item(const item_def &item, bool temp = false); bool is_dangerous_item( const item_def& item, bool temp = false); bool is_useless_item(const item_def &item, bool temp = false); -std::string make_name( unsigned long seed, bool all_caps ); +std::string make_name(unsigned long seed, bool all_caps, int maxlen = -1, + char start = 0); const char* weapon_brand_name(const item_def& item, bool terse); diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index 9af8b1681c..f918a079a7 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -849,6 +849,10 @@ bool PlayerMenuEntry::get_tiles(std::vector<tile_def>& tileset) const const player_save_info &player = *static_cast<player_save_info*>( data ); dolls_data equip_doll = player.doll; +// int feat = player.floor_tile; +// if (feat > 0 && feat < TILE_MAIN_MAX) +// tileset.push_back(tile_def(feat, TEX_DUNGEON)); + // FIXME: A lot of code duplication from DungeonRegion::pack_doll(). int p_order[TILEP_PART_MAX] = { @@ -900,6 +904,9 @@ bool PlayerMenuEntry::get_tiles(std::vector<tile_def>& tileset) const tileset.push_back(tile_def(idx, TEX_PLAYER, ymax)); } + if (player.held_in_net) + tileset.push_back(tile_def(TILE_TRAP_NET, TEX_DEFAULT)); + return (true); } #endif diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc index 0b73143e9d..36605fd09b 100644 --- a/crawl-ref/source/newgame.cc +++ b/crawl-ref/source/newgame.cc @@ -3259,22 +3259,6 @@ static void _enter_player_name(bool blankOK) desc = desc.substr(0, get_number_of_cols() - 1); #ifdef USE_TILE - dolls_data equip_doll; - for (unsigned int j = 0; j < TILEP_PART_MAX; ++j) - equip_doll.parts[j] = TILEP_SHOW_EQUIP; - - const int gender = TILEP_GENDER_MALE; - tilep_race_default(existing_chars[i].species, gender, - existing_chars[i].experience_level, - equip_doll.parts); - - int job = get_class_by_name(existing_chars[i].class_name.c_str()); - if (job == -1) - job = JOB_FIGHTER; - - tilep_job_default(job, gender, equip_doll.parts); - existing_chars[i].doll = equip_doll; - MenuEntry *me = new PlayerMenuEntry(desc); #else MenuEntry *me = new MenuEntry(desc); @@ -3295,13 +3279,7 @@ static void _enter_player_name(bool blankOK) // If the player wants out, we bail out. if (!_read_player_name(name, kNameLen, existing_chars, char_menu)) end(0); -#if 0 -#ifdef USE_TILE - // What's this supposed to achieve? (jpeg) - clrscr(); - cgotoxy(1, 1); -#endif -#endif + // Laboriously trim the damn thing. std::string read_name = name; trim_string(read_name); diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 492e5219a5..0bbc88ac34 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -6057,6 +6057,11 @@ player_save_info player_save_info::operator=(const player& rhs) species = rhs.species; class_name = rhs.class_name; religion = rhs.religion; +#ifdef USE_TILE +// floor_tile = 0; + held_in_net = false; +#endif + return (*this); } diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h index 26600a22af..29930a22fd 100644 --- a/crawl-ref/source/player.h +++ b/crawl-ref/source/player.h @@ -13,6 +13,40 @@ #include "externs.h" #include "itemprop.h" +#ifdef USE_TILE +// This used to be in tiles.h. (jpeg) +#include "tiledef-main.h" +#include "tiledef-dngn.h" +#include "tiledef-player.h" + +struct dolls_data +{ + dolls_data() { memset(parts, 0, sizeof(parts)); } + + int parts[TILEP_PART_MAX]; +}; +#endif + +struct player_save_info +{ + std::string name; + unsigned long experience; + int experience_level; + bool wizard; + species_type species; + std::string class_name; + god_type religion; +#ifdef USE_TILE + dolls_data doll; +// int floor_tile; + bool held_in_net; +#endif + + player_save_info operator=(const player& rhs); + bool operator<(const player_save_info& rhs) const; + std::string short_desc() const; +}; + class monsters; struct item_def; diff --git a/crawl-ref/source/rltiles/dc-corpse.txt b/crawl-ref/source/rltiles/dc-corpse.txt index 4473de88cc..18c51333c6 100644 --- a/crawl-ref/source/rltiles/dc-corpse.txt +++ b/crawl-ref/source/rltiles/dc-corpse.txt @@ -1,216 +1,233 @@ -### dungeon crawl monster corpses +### Dungeon Crawl monster corpses +### (only lists monsters that actually leave a corpse) %sdir dc-mon %corpse 1 -%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -glowing_shapeshifter CORPSE_GLOWING_SHAPESHIFTER /* @ */ -hell_knight CORPSE_HELL_KNIGHT /* @ */ -human CORPSE_HUMAN /* @ */ -necromancer CORPSE_NECROMANCER /* @ */ -shapeshifter CORPSE_SHAPESHIFTER /* @ */ -wizard CORPSE_WIZARD /* @ */ +### Animals %sdir dc-mon/animals + +## Insects ('a') %back dc-misc/blood_green -boring_beetle CORPSE_BORING_BEETLE /* B */ -boulder_beetle CORPSE_BOULDER_BEETLE /* B */ -giant_beetle CORPSE_GIANT_BEETLE /* B */ +giant_cockroach CORPSE_GIANT_COCKROACH +giant_ant CORPSE_GIANT_ANT +soldier_ant CORPSE_SOLDIER_ANT -%sdir dc-mon +## Batty monsters ('b') +butterfly CORPSE_BUTTERFLY %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -cyclops CORPSE_CYCLOPS /* C */ -fire_giant CORPSE_FIRE_GIANT /* C */ -frost_giant CORPSE_FROST_GIANT /* C */ -hill_giant CORPSE_HILL_GIANT /* C */ -ettin CORPSE_ETTIN -stone_giant CORPSE_STONE_GIANT /* C */ -titan CORPSE_TITAN /* C */ - -dragon CORPSE_DRAGON /* D */ -golden_dragon CORPSE_GOLDEN_DRAGON /* D */ -hydra5 CORPSE_HYDRA /* D */ -ice_dragon CORPSE_ICE_DRAGON /* D */ -iron_dragon CORPSE_IRON_DRAGON /* D */ -quicksilver_dragon CORPSE_QUICKSILVER_DRAGON /* D */ -shadow_dragon CORPSE_SHADOW_DRAGON /* D */ -storm_dragon CORPSE_STORM_DRAGON /* D */ -swamp_dragon CORPSE_SWAMP_DRAGON /* D */ -wyvern CORPSE_WYVERN /* D */ +giant_bat CORPSE_GIANT_BAT -%sdir dc-mon/animals -blink_frog CORPSE_BLINK_FROG /* F */ -giant_brown_frog CORPSE_GIANT_BROWN_FROG /* F */ -giant_frog CORPSE_GIANT_FROG /* F */ -spiny_frog CORPSE_SPINY_FROG /* F */ - -%sdir dc-mon -eye_of_draining CORPSE_EYE_OF_DRAINING /* G */ -giant_eyeball CORPSE_GIANT_EYEBALL /* G */ -giant_orange_brain CORPSE_GIANT_ORANGE_BRAIN /* G */ -great_orb_of_eyes CORPSE_GREAT_ORB_OF_EYES /* G */ - -griffon CORPSE_GRIFFON /* H */ -hippogriff CORPSE_HIPPOGRIFF /* H */ - -giant_amoeba CORPSE_GIANT_AMOEBA /* J */ +## Hounds ('h') +jackal CORPSE_JACKAL +hound CORPSE_HOUND +warg CORPSE_WARG +war_dog CORPSE_WAR_DOG +wolf CORPSE_WOLF +hog CORPSE_HOG +## Bees ('k') %back dc-misc/blood_green -kobold CORPSE_KOBOLD /* K */ -big_kobold CORPSE_BIG_KOBOLD +bumblebee CORPSE_BUMBLEBEE +killer_bee CORPSE_KILLER_BEE +## Lizards ('l') %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -greater_naga CORPSE_GREATER_NAGA /* N */ -guardian_naga CORPSE_GUARDIAN_NAGA /* N */ -naga CORPSE_NAGA /* N */ -###naga_mage CORPSE_NAGA_MAGE /* N */ -###naga_warrior CORPSE_NAGA_WARRIOR /* N */ +giant_newt CORPSE_GIANT_NEWT +giant_gecko CORPSE_GIANT_GECKO +giant_iguana CORPSE_GIANT_IGUANA +giant_lizard CORPSE_GIANT_LIZARD +gila_monster CORPSE_GILA_MONSTER +komodo_dragon CORPSE_KOMODO_DRAGON + +## Slugs ('j') +%back dc-misc/blood_green +elephant_slug CORPSE_ELEPHANT_SLUG +giant_slug CORPSE_GIANT_SLUG +giant_snail CORPSE_GIANT_SNAIL + +## Rodents ('r') +rat CORPSE_RAT +quokka CORPSE_QUOKKA +grey_rat CORPSE_GREY_RAT +green_rat CORPSE_GREEN_RAT +orange_rat CORPSE_ORANGE_RAT + +## Spiders ('s') +%back dc-misc/blood_green +giant_centipede CORPSE_GIANT_CENTIPEDE +giant_mite CORPSE_GIANT_MITE +scorpion CORPSE_SCORPION +wolf_spider CORPSE_WOLF_SPIDER +trapdoor_spider CORPSE_TRAPDOOR_SPIDER +redback CORPSE_REDBACK + +## Worms ('w') +%sdir dc-mon/animals +killer_bee_larva CORPSE_ANT_LARVA +killer_bee_larva CORPSE_KILLER_BEE_LARVA +worm CORPSE_WORM +swamp_worm CORPSE_SWAMP_WORM +spiny_worm CORPSE_SPINY_WORM +brain_worm CORPSE_BRAIN_WORM + +## Wasps ('y') +giant_blowfly CORPSE_GIANT_BLOWFLY +giant_mosquito CORPSE_GIANT_MOSQUITO +yellow_wasp CORPSE_YELLOW_WASP +red_wasp CORPSE_RED_WASP + +## Beetles ('B') +%back dc-misc/blood_green +giant_beetle CORPSE_GIANT_BEETLE +boring_beetle CORPSE_BORING_BEETLE +boulder_beetle CORPSE_BOULDER_BEETLE -ogre CORPSE_OGRE /* O */ -two_headed_ogre CORPSE_TWO_HEADED_OGRE /* O */ +## Frogs ('F') +giant_frog CORPSE_GIANT_FROG +giant_brown_frog CORPSE_GIANT_BROWN_FROG +blink_frog CORPSE_BLINK_FROG +spiny_frog CORPSE_SPINY_FROG -%sdir dc-mon/animals +## Queen insects ('Q') %back dc-misc/blood_green -queen_ant CORPSE_QUEEN_ANT /* Q */ -queen_bee CORPSE_QUEEN_BEE /* Q */ +queen_ant CORPSE_QUEEN_ANT +queen_bee CORPSE_QUEEN_BEE +## Snakes ('S') %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -black_mamba CORPSE_BLACK_MAMBA /* S */ -water_moccasin CORPSE_WATER_MOCCASIN /* S */ -grey_snake CORPSE_GREY_SNAKE /* S */ -small_snake CORPSE_SMALL_SNAKE /* S */ -snake CORPSE_SNAKE /* S */ -viper CORPSE_VIPER /* S */ - +small_snake CORPSE_SMALL_SNAKE +snake CORPSE_SNAKE +black_mamba CORPSE_BLACK_MAMBA +water_moccasin CORPSE_WATER_MOCCASIN +grey_snake CORPSE_GREY_SNAKE +viper CORPSE_VIPER + +## Bears ('U') +bear CORPSE_BEAR +black_bear CORPSE_BLACK_BEAR +grizzly_bear CORPSE_GRIZZLY_BEAR +polar_bear CORPSE_POLAR_BEAR + +## Cattle ('Y') +sheep CORPSE_SHEEP +yak CORPSE_YAK +death_yak CORPSE_DEATH_YAK + + +### Non-animals %sdir dc-mon -deep_troll CORPSE_DEEP_TROLL /* T */ -iron_troll CORPSE_IRON_TROLL /* T */ -rock_troll CORPSE_ROCK_TROLL /* T */ -troll CORPSE_TROLL /* T */ -%sdir dc-mon/animals -bear CORPSE_BEAR /* U */ -black_bear CORPSE_BLACK_BEAR /* U */ -grizzly_bear CORPSE_GRIZZLY_BEAR /* U */ -polar_bear CORPSE_POLAR_BEAR /* U */ +## Centaurs ('c') +centaur CORPSE_CENTAUR +yaktaur CORPSE_YAKTAUR -death_yak CORPSE_DEATH_YAK /* Y */ -sheep CORPSE_SHEEP /* Y */ -yak CORPSE_YAK /* Y */ +## Elves ('e') +elf CORPSE_ELF -%sdir dc-mon/animals -%back dc-misc/blood_green -giant_ant CORPSE_GIANT_ANT /* a */ -giant_cockroach CORPSE_GIANT_COCKROACH /* a */ -soldier_ant CORPSE_SOLDIER_ANT /* a */ +## Goblins ('g') +goblin CORPSE_GOBLIN +hobgoblin CORPSE_HOBGOBLIN +gnoll CORPSE_GNOLL -butterfly CORPSE_BUTTERFLY /* b */ +## Merfolk ('m') %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -giant_bat CORPSE_GIANT_BAT /* b */ - -%sdir dc-mon -centaur CORPSE_CENTAUR /* c */ -###centaur_warrior CORPSE_CENTAUR_WARRIOR /* c */ -yaktaur CORPSE_YAKTAUR /* c */ -###yaktaur_captain CORPSE_YAKTAUR_CAPTAIN /* c */ - -firedrake CORPSE_FIREDRAKE /* d */ -lindwurm CORPSE_LINDWURM /* d */ -mottled_dragon CORPSE_MOTTLED_DRAGON /* d */ -steam_dragon CORPSE_STEAM_DRAGON /* d */ -swamp_drake CORPSE_SWAMP_DRAKE /* d */ -death_drake CORPSE_DEATH_DRAKE /* d */ - -##deep_elf_annihilator CORPSE_DEEP_ELF_ANNIHILATOR /* e */ -##deep_elf_conjurer CORPSE_DEEP_ELF_CONJURER /* e */ -##deep_elf_death_mage CORPSE_DEEP_ELF_DEATH_MAGE /* e */ -##deep_elf_demonologist CORPSE_DEEP_ELF_DEMONOLOGIST /* e */ -##deep_elf_fighter CORPSE_DEEP_ELF_FIGHTER /* e */ -##deep_elf_high_priest CORPSE_DEEP_ELF_HIGH_PRIEST /* e */ -##deep_elf_knight CORPSE_DEEP_ELF_KNIGHT /* e */ -##deep_elf_mage CORPSE_DEEP_ELF_MAGE /* e */ -##deep_elf_priest CORPSE_DEEP_ELF_PRIEST /* e */ -##deep_elf_soldier CORPSE_DEEP_ELF_SOLDIER /* e */ -##deep_elf_sorcerer CORPSE_DEEP_ELF_SORCERER /* e */ -##deep_elf_summoner CORPSE_DEEP_ELF_SUMMONER /* e */ -elf CORPSE_ELF /* e */ - -gnoll CORPSE_GNOLL /* g */ -goblin CORPSE_GOBLIN /* g */ -hobgoblin CORPSE_HOBGOBLIN /* g */ - -%sdir dc-mon/animals -jackal CORPSE_JACKAL /* h */ -hog CORPSE_HOG /* h */ -hound CORPSE_HOUND /* h */ -warg CORPSE_WARG /* h */ -war_dog CORPSE_WAR_DOG /* h */ -wolf CORPSE_WOLF /* h */ +merfolk_fighter_water CORPSE_MERFOLK_FIGHTER +mermaid_water CORPSE_MERMAID +siren_water CORPSE_SIREN +## Rotting monsters ('n') %back dc-misc/blood_green -bumblebee CORPSE_BUMBLEBEE /* k */ -killer_bee CORPSE_KILLER_BEE /* k */ +necrophage CORPSE_NECROPHAGE +ghoul CORPSE_GHOUL +## Orcs ('o') %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -giant_gecko CORPSE_GIANT_GECKO /* l */ -giant_iguana CORPSE_GIANT_IGUANA /* l */ -giant_lizard CORPSE_GIANT_LIZARD /* l */ -giant_newt CORPSE_GIANT_NEWT /* l */ -gila_monster CORPSE_GILA_MONSTER /* l */ -komodo_dragon CORPSE_KOMODO_DRAGON /* l */ +orc CORPSE_ORC -%back dc-misc/blood_green -elephant_slug CORPSE_ELEPHANT_SLUG /* m */ -giant_slug CORPSE_GIANT_SLUG /* m */ -giant_snail CORPSE_GIANT_SNAIL /* m */ -%sdir dc-mon -manticore CORPSE_MANTICORE /* m */ +## Minotaur ('t') %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -minotaur CORPSE_MINOTAUR /* m */ +minotaur CORPSE_MINOTAUR -%back dc-misc/blood_green -ghoul CORPSE_GHOUL /* n */ -necrophage CORPSE_NECROPHAGE /* n */ +## Ugly things ('u') +%sdir dc-mon/demons +ugly_thing CORPSE_UGLY_THING +very_ugly_thing CORPSE_VERY_UGLY_THING +## Giants ('C') +%sdir dc-mon %back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -orc CORPSE_ORC /* o */ -###orc_high_priest CORPSE_ORC_HIGH_PRIEST /* o */ -###orc_priest CORPSE_ORC_PRIEST /* o */ -###orc_sorcerer CORPSE_ORC_SORCERER /* o */ -###orc_warlord CORPSE_ORC_WARLORD /* o */ +hill_giant CORPSE_HILL_GIANT +ettin CORPSE_ETTIN +cyclops CORPSE_CYCLOPS +fire_giant CORPSE_FIRE_GIANT +frost_giant CORPSE_FROST_GIANT +stone_giant CORPSE_STONE_GIANT +titan CORPSE_TITAN + +## Drakes ('l') +swamp_drake CORPSE_SWAMP_DRAKE +firedrake CORPSE_FIREDRAKE +lindwurm CORPSE_LINDWURM +death_drake CORPSE_DEATH_DRAKE + +## Dragons ('D') +wyvern CORPSE_WYVERN +dragon CORPSE_DRAGON +hydra5 CORPSE_HYDRA +steam_dragon CORPSE_STEAM_DRAGON +ice_dragon CORPSE_ICE_DRAGON +swamp_dragon CORPSE_SWAMP_DRAGON +mottled_dragon CORPSE_MOTTLED_DRAGON +quicksilver_dragon CORPSE_QUICKSILVER_DRAGON +iron_dragon CORPSE_IRON_DRAGON +storm_dragon CORPSE_STORM_DRAGON +golden_dragon CORPSE_GOLDEN_DRAGON +shadow_dragon CORPSE_SHADOW_DRAGON + +## Eyes ('G') +giant_eyeball CORPSE_GIANT_EYEBALL +eye_of_draining CORPSE_EYE_OF_DRAINING +giant_orange_brain CORPSE_GIANT_ORANGE_BRAIN +great_orb_of_eyes CORPSE_GREAT_ORB_OF_EYES + +## Hybrids ('H') +hippogriff CORPSE_HIPPOGRIFF +griffon CORPSE_GRIFFON +manticore CORPSE_MANTICORE +harpy CORPSE_HARPY + +## Jellies ('J') +giant_amoeba CORPSE_GIANT_AMOEBA + +## Kobolds ('K') +%back dc-misc/blood_green +kobold CORPSE_KOBOLD +big_kobold CORPSE_BIG_KOBOLD -%sdir dc-mon/animals -green_rat CORPSE_GREEN_RAT /* r */ -grey_rat CORPSE_GREY_RAT /* r */ -orange_rat CORPSE_ORANGE_RAT /* r */ -quokka CORPSE_QUOKKA /* r */ -rat CORPSE_RAT /* r */ +## Nagas ('N') +%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 +naga CORPSE_NAGA +guardian_naga CORPSE_GUARDIAN_NAGA -%back dc-misc/blood_green -giant_centipede CORPSE_GIANT_CENTIPEDE /* s */ -giant_mite CORPSE_GIANT_MITE /* s */ -redback CORPSE_REDBACK /* s */ -scorpion CORPSE_SCORPION /* s */ -wolf_spider CORPSE_WOLF_SPIDER /* s */ -trapdoor_spider CORPSE_TRAPDOOR_SPIDER /* s */ +## Ogres ('O') +ogre CORPSE_OGRE +two_headed_ogre CORPSE_TWO_HEADED_OGRE -%sdir dc-mon/demons -ugly_thing CORPSE_UGLY_THING /* u */ -very_ugly_thing CORPSE_VERY_UGLY_THING /* u */ +## Trolls ('T') +troll CORPSE_TROLL +rock_troll CORPSE_ROCK_TROLL +iron_troll CORPSE_IRON_TROLL +deep_troll CORPSE_DEEP_TROLL -%sdir dc-mon/animals -killer_bee_larva CORPSE_ANT_LARVA /* w */ -brain_worm CORPSE_BRAIN_WORM /* w */ -killer_bee_larva CORPSE_KILLER_BEE_LARVA /* w */ -spiny_worm CORPSE_SPINY_WORM /* w */ -swamp_worm CORPSE_SWAMP_WORM /* w */ -worm CORPSE_WORM /* w */ - -giant_blowfly CORPSE_GIANT_BLOWFLY /* y */ -giant_mosquito CORPSE_GIANT_MOSQUITO /* y */ -red_wasp CORPSE_RED_WASP /* y */ -yellow_wasp CORPSE_YELLOW_WASP /* y */ +## Human shaped ('@') +%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 +human CORPSE_HUMAN +shapeshifter CORPSE_SHAPESHIFTER +glowing_shapeshifter CORPSE_GLOWING_SHAPESHIFTER +## Draconians ('d') %sdir player %start %compose drcwing/drcwing_black @@ -272,9 +289,4 @@ yellow_wasp CORPSE_YELLOW_WASP /* y */ %compose drchead/drchead_yellow %finish CORPSE_DRACONIAN_YELLOW -%sdir dc-mon -%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4 -mermaid_water CORPSE_MERMAID -merfolk_fighter_water CORPSE_MERFOLK_FIGHTER - %corpse 0 diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt index 3309d17c19..1a2f9e8d7c 100644 --- a/crawl-ref/source/rltiles/dc-mon.txt +++ b/crawl-ref/source/rltiles/dc-mon.txt @@ -74,9 +74,9 @@ brain_worm MONS_BRAIN_WORM rock_worm MONS_ROCK_WORM ## Flying insects ('y') -yellow_wasp MONS_YELLOW_WASP giant_blowfly MONS_GIANT_BLOWFLY giant_mosquito MONS_GIANT_MOSQUITO +yellow_wasp MONS_YELLOW_WASP red_wasp MONS_RED_WASP moth_of_wrath MONS_MOTH_OF_WRATH @@ -366,8 +366,8 @@ eye_of_devastation MONS_EYE_OF_DEVASTATION hippogriff MONS_HIPPOGRIFF manticore MONS_MANTICORE griffon MONS_GRIFFON -sphinx MONS_SPHINX harpy MONS_HARPY +sphinx MONS_SPHINX ## Ice beast only ice_beast MONS_ICE_BEAST /*'I'*/ diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 798cae7d30..5b151d5403 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -1528,24 +1528,31 @@ static int _tileidx_food(const item_def &item) // Parameter mon already holds the corpse type (monster species). static int _tileidx_corpse(int mon) { - switch (mon) - { + switch (mon) + { + // insects ('a') case MONS_GIANT_COCKROACH: return TILE_CORPSE_GIANT_COCKROACH; case MONS_GIANT_ANT: return TILE_CORPSE_GIANT_ANT; case MONS_SOLDIER_ANT: return TILE_CORPSE_SOLDIER_ANT; + + // batty monsters ('b') case MONS_GIANT_BAT: return TILE_CORPSE_GIANT_BAT; case MONS_BUTTERFLY: return TILE_CORPSE_BUTTERFLY; + + // centaurs ('c') case MONS_CENTAUR: case MONS_CENTAUR_WARRIOR: return TILE_CORPSE_CENTAUR; case MONS_YAKTAUR: case MONS_YAKTAUR_CAPTAIN: return TILE_CORPSE_YAKTAUR; + + // draconians ('d') case MONS_DRACONIAN: return TILE_CORPSE_DRACONIAN_BROWN; case MONS_BLACK_DRACONIAN: @@ -1572,6 +1579,8 @@ static int _tileidx_corpse(int mon) case MONS_DRACONIAN_KNIGHT: case MONS_DRACONIAN_SCORCHER: return TILE_CORPSE_DRACONIAN_BROWN; + + // elves ('e') case MONS_ELF: case MONS_DEEP_ELF_SOLDIER: case MONS_DEEP_ELF_FIGHTER: @@ -1588,12 +1597,16 @@ static int _tileidx_corpse(int mon) case MONS_DEEP_ELF_SORCERER: case MONS_DEEP_ELF_DEATH_MAGE: return TILE_CORPSE_ELF; + + // goblins ('g') case MONS_GOBLIN: return TILE_CORPSE_GOBLIN; case MONS_HOBGOBLIN: return TILE_CORPSE_HOBGOBLIN; case MONS_GNOLL: return TILE_CORPSE_GNOLL; + + // hounds ('h') case MONS_JACKAL: return TILE_CORPSE_JACKAL; case MONS_HOUND: @@ -1606,16 +1619,22 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_WAR_DOG; case MONS_HOG: return TILE_CORPSE_HOG; + + // slugs ('j') case MONS_ELEPHANT_SLUG: return TILE_CORPSE_ELEPHANT_SLUG; case MONS_GIANT_SLUG: return TILE_CORPSE_GIANT_SLUG; case MONS_GIANT_SNAIL: return TILE_CORPSE_GIANT_SNAIL; + + // bees ('k') case MONS_KILLER_BEE: return TILE_CORPSE_KILLER_BEE; case MONS_BUMBLEBEE: return TILE_CORPSE_BUMBLEBEE; + + // lizards ('l') case MONS_GIANT_NEWT: return TILE_CORPSE_GIANT_NEWT; case MONS_GIANT_GECKO: @@ -1628,6 +1647,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_GILA_MONSTER; case MONS_KOMODO_DRAGON: return TILE_CORPSE_KOMODO_DRAGON; + + // drakes (also 'l') case MONS_SWAMP_DRAKE: return TILE_CORPSE_SWAMP_DRAKE; case MONS_FIREDRAKE: @@ -1636,14 +1657,22 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_LINDWURM; case MONS_DEATH_DRAKE: return TILE_CORPSE_DEATH_DRAKE; + + // merfolk ('m') case MONS_MERFOLK: return TILE_CORPSE_MERFOLK_FIGHTER; case MONS_MERMAID: return TILE_CORPSE_MERMAID; + case MONS_SIREN: + return TILE_CORPSE_SIREN; + + // rotting monsters ('n') case MONS_NECROPHAGE: return TILE_CORPSE_NECROPHAGE; case MONS_GHOUL: return TILE_CORPSE_GHOUL; + + // orcs ('o') case MONS_ORC: case MONS_ORC_WIZARD: case MONS_ORC_PRIEST: @@ -1653,6 +1682,8 @@ static int _tileidx_corpse(int mon) case MONS_ORC_SORCERER: case MONS_ORC_HIGH_PRIEST: return TILE_CORPSE_ORC; + + // rodents ('r') case MONS_RAT: return TILE_CORPSE_RAT; case MONS_QUOKKA: @@ -1663,6 +1694,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_GREEN_RAT; case MONS_ORANGE_RAT: return TILE_CORPSE_ORANGE_RAT; + + // spiders ('s') case MONS_GIANT_MITE: return TILE_CORPSE_GIANT_MITE; case MONS_GIANT_CENTIPEDE: @@ -1671,42 +1704,54 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_SCORPION; case MONS_WOLF_SPIDER: return TILE_CORPSE_WOLF_SPIDER; - case MONS_REDBACK: - return TILE_CORPSE_REDBACK; case MONS_TRAPDOOR_SPIDER: return TILE_CORPSE_TRAPDOOR_SPIDER; + case MONS_REDBACK: + return TILE_CORPSE_REDBACK; + + // minotaur ('t') case MONS_MINOTAUR: return TILE_CORPSE_MINOTAUR; + + // ugly things ('u') case MONS_UGLY_THING: return TILE_CORPSE_UGLY_THING; case MONS_VERY_UGLY_THING: return TILE_CORPSE_VERY_UGLY_THING; + + // worms ('w') case MONS_KILLER_BEE_LARVA: return TILE_CORPSE_KILLER_BEE_LARVA; - case MONS_WORM: - return TILE_CORPSE_WORM; case MONS_ANT_LARVA: return TILE_CORPSE_ANT_LARVA; + case MONS_WORM: + return TILE_CORPSE_WORM; case MONS_BRAIN_WORM: return TILE_CORPSE_BRAIN_WORM; - case MONS_SPINY_WORM: - return TILE_CORPSE_SPINY_WORM; case MONS_SWAMP_WORM: return TILE_CORPSE_SWAMP_WORM; - case MONS_YELLOW_WASP: - return TILE_CORPSE_YELLOW_WASP; + case MONS_SPINY_WORM: + return TILE_CORPSE_SPINY_WORM; + + // wasps ('y') case MONS_GIANT_MOSQUITO: return TILE_CORPSE_GIANT_MOSQUITO; case MONS_GIANT_BLOWFLY: return TILE_CORPSE_GIANT_BLOWFLY; + case MONS_YELLOW_WASP: + return TILE_CORPSE_YELLOW_WASP; case MONS_RED_WASP: return TILE_CORPSE_RED_WASP; + + // beetles ('B') case MONS_GIANT_BEETLE: return TILE_CORPSE_GIANT_BEETLE; case MONS_BOULDER_BEETLE: return TILE_CORPSE_BOULDER_BEETLE; case MONS_BORING_BEETLE: return TILE_CORPSE_BORING_BEETLE; + + // giants ('C') case MONS_HILL_GIANT: return TILE_CORPSE_HILL_GIANT; case MONS_ETTIN: @@ -1721,6 +1766,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_STONE_GIANT; case MONS_TITAN: return TILE_CORPSE_TITAN; + + // dragons ('D') case MONS_WYVERN: return TILE_CORPSE_WYVERN; case MONS_DRAGON: @@ -1745,6 +1792,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_GOLDEN_DRAGON; case MONS_SHADOW_DRAGON: return TILE_CORPSE_SHADOW_DRAGON; + + // frogs ('F') case MONS_GIANT_FROG: return TILE_CORPSE_GIANT_FROG; case MONS_GIANT_BROWN_FROG: @@ -1753,6 +1802,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_SPINY_FROG; case MONS_BLINK_FROG: return TILE_CORPSE_BLINK_FROG; + + // eyes ('G') case MONS_GIANT_EYEBALL: return TILE_CORPSE_GIANT_EYEBALL; case MONS_EYE_OF_DRAINING: @@ -1761,46 +1812,64 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_GIANT_ORANGE_BRAIN; case MONS_GREAT_ORB_OF_EYES: return TILE_CORPSE_GREAT_ORB_OF_EYES; + + // hybrids ('H') case MONS_HIPPOGRIFF: return TILE_CORPSE_HIPPOGRIFF; case MONS_MANTICORE: return TILE_CORPSE_MANTICORE; case MONS_GRIFFON: return TILE_CORPSE_GRIFFON; + case MONS_HARPY: + return TILE_CORPSE_HARPY; + + // jellies ('J') case MONS_GIANT_AMOEBA: return TILE_CORPSE_GIANT_AMOEBA; + + // kobolds ('K') case MONS_KOBOLD: return TILE_CORPSE_KOBOLD; case MONS_BIG_KOBOLD: return TILE_CORPSE_BIG_KOBOLD; - case MONS_KOBOLD_DEMONOLOGIST: - return TILE_CORPSE_KOBOLD; + + // nagas ('N') case MONS_NAGA: - case MONS_GUARDIAN_NAGA: case MONS_NAGA_MAGE: case MONS_NAGA_WARRIOR: case MONS_GREATER_NAGA: return TILE_CORPSE_NAGA; + case MONS_GUARDIAN_NAGA: + return TILE_CORPSE_GUARDIAN_NAGA; + + // ogres ('O') case MONS_OGRE: + case MONS_OGRE_MAGE: return TILE_CORPSE_OGRE; case MONS_TWO_HEADED_OGRE: return TILE_CORPSE_TWO_HEADED_OGRE; + + // queen insects ('Q') case MONS_QUEEN_BEE: return TILE_CORPSE_QUEEN_BEE; case MONS_QUEEN_ANT: return TILE_CORPSE_QUEEN_ANT; + + // snakes ('S') case MONS_SMALL_SNAKE: return TILE_CORPSE_SMALL_SNAKE; case MONS_SNAKE: return TILE_CORPSE_SNAKE; + case MONS_GREY_SNAKE: + return TILE_CORPSE_GREY_SNAKE; case MONS_WATER_MOCCASIN: return TILE_CORPSE_WATER_MOCCASIN; case MONS_BLACK_MAMBA: return TILE_CORPSE_BLACK_MAMBA; case MONS_VIPER: return TILE_CORPSE_VIPER; - case MONS_GREY_SNAKE: - return TILE_CORPSE_GREY_SNAKE; + + // trolls ('T') case MONS_TROLL: return TILE_CORPSE_TROLL; case MONS_ROCK_TROLL: @@ -1809,6 +1878,8 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_IRON_TROLL; case MONS_DEEP_TROLL: return TILE_CORPSE_DEEP_TROLL; + + // bears ('U') case MONS_BEAR: return TILE_CORPSE_BEAR; case MONS_GRIZZLY_BEAR: @@ -1817,12 +1888,16 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_POLAR_BEAR; case MONS_BLACK_BEAR: return TILE_CORPSE_BLACK_BEAR; + + // cattle ('Y') case MONS_SHEEP: return TILE_CORPSE_SHEEP; case MONS_YAK: return TILE_CORPSE_YAK; case MONS_DEATH_YAK: return TILE_CORPSE_DEATH_YAK; + + // humans ('@') case MONS_HUMAN: case MONS_HELL_KNIGHT: case MONS_NECROMANCER: @@ -1832,13 +1907,10 @@ static int _tileidx_corpse(int mon) return TILE_CORPSE_SHAPESHIFTER; case MONS_GLOWING_SHAPESHIFTER: return TILE_CORPSE_GLOWING_SHAPESHIFTER; - case MONS_POLYPHEMUS: - return TILE_CORPSE_CYCLOPS; + default: return TILE_ERROR; - } - - return TILE_ERROR; + } } static int _tileidx_rune(const item_def &item) @@ -3204,6 +3276,8 @@ const int parts_saved[] ={ TILEP_PART_HAIR, TILEP_PART_BEARD, TILEP_PART_HELM, + TILEP_PART_HALO, + TILEP_PART_ENCH, -1 }; @@ -3216,13 +3290,13 @@ void tilep_scan_parts(char *fbuf, int *parts) int gcount = 0; int ccount = 0; - for (int i = 0; parts_saved[i] != -1; i++) + for (int i = 0; parts_saved[i] != -1; ++i) { ccount = 0; int p = parts_saved[i]; while (fbuf[gcount] != ':' && fbuf[gcount] != '\n' - && ccount < 4 && gcount < 48) + && ccount < 4 && gcount < (i+1)*4) { ibuf[ccount++] = fbuf[gcount++]; } @@ -3253,11 +3327,14 @@ void tilep_scan_parts(char *fbuf, int *parts) /* * format-print parts */ -void tilep_print_parts(char *fbuf, int *parts) +void tilep_print_parts(char *fbuf, int *parts, bool check_halo) { char *ptr = fbuf; for (unsigned i = 0; parts_saved[i] != -1; ++i) { + if (!check_halo && parts_saved[i] == TILEP_PART_HALO) + break; + int p = parts_saved[i]; if (p == TILEP_PART_BASE) // 0: female 1: male sprintf(ptr, "%03d", get_gender_from_tile(parts)); diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc index 6ac5035efa..1d99c60697 100644 --- a/crawl-ref/source/tilereg.cc +++ b/crawl-ref/source/tilereg.cc @@ -558,6 +558,37 @@ static void _fill_doll_equipment(dolls_data &result) result.parts[TILEP_PART_DRCHEAD] = 0; } +// Writes equipment information into per-character doll file. +void save_doll_file(FILE *dollf) +{ + ASSERT(dollf); + + dolls_data result = player_doll; + + const bool halo = inside_halo(you.pos()); + result.parts[TILEP_PART_HALO] = halo ? TILEP_HALO_TSO : 0; + result.parts[TILEP_PART_ENCH] = + (you.duration[DUR_LIQUID_FLAMES] ? TILEP_ENCH_STICKY_FLAME : 0); + + _fill_doll_equipment(result); + + // Write into file. + char fbuf[80]; + tilep_print_parts(fbuf, result.parts, true); + fprintf(dollf, "%s\n", fbuf); + +// const coord_def c = you.pos(); +// int feat = tileidx_feature(grd(c), c.x, c.y); +// if (feat == TILE_FLOOR_NORMAL) +// feat = env.tile_flv(c).floor; +// else if (feat == TILE_WALL_NORMAL) +// feat = env.tile_flv(c).wall; +// fprintf(dollf, "floor=%d\n", feat); + + if (you.attribute[ATTR_HELD] > 0) + fprintf(dollf, "net\n"); +} + // Allow player to choose between up to 10 premade dolls, or replace them // with the job default, using current equipment, or a random doll. // If the player makes any changes while browsing the selections, i.e. @@ -3330,8 +3361,12 @@ bool ImageManager::load_textures() if (!m_textures[TEX_PLAYER].load_texture("player.png", mip)) return (false); + if (!m_textures[TEX_DEFAULT].load_texture("main.png", mip)) + return (false); + m_textures[TEX_DUNGEON].set_info(TILE_DNGN_MAX, &tile_dngn_info); m_textures[TEX_PLAYER].set_info(TILEP_PLAYER_MAX, &tile_player_info); + m_textures[TEX_DEFAULT].set_info(TILE_MAIN_MAX, &tile_main_info); return (true); } diff --git a/crawl-ref/source/tilereg.h b/crawl-ref/source/tilereg.h index 15c7d3a886..4efce0130a 100644 --- a/crawl-ref/source/tilereg.h +++ b/crawl-ref/source/tilereg.h @@ -11,6 +11,7 @@ #include "AppHdr.h" #include "format.h" +#include "player.h" #include "tilebuf.h" #include "tiletex.h" #include "tiles.h" diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h index c7ad19a787..49833897b9 100644 --- a/crawl-ref/source/tiles.h +++ b/crawl-ref/source/tiles.h @@ -61,7 +61,7 @@ void tilep_part_to_str(int number, char *buf); int tilep_str_to_part(char *str); void tilep_scan_parts(char *fbuf, int *parts); -void tilep_print_parts(char *fbuf, int *parts); +void tilep_print_parts(char *fbuf, int *parts, bool check_halo = false); int tilep_equ_weapon(const item_def &item); int tilep_equ_shield(const item_def &item); @@ -123,6 +123,7 @@ void TileNewLevel(bool first_time); // edit player tile void TilePlayerEdit(); void init_player_doll(); +void save_doll_file(FILE *dollf); int item_unid_type(const item_def &item); int tile_known_weapon_brand(const item_def item); diff --git a/crawl-ref/source/tiletex.cc b/crawl-ref/source/tiletex.cc index faaf20f5b0..c42d3a168d 100644 --- a/crawl-ref/source/tiletex.cc +++ b/crawl-ref/source/tiletex.cc @@ -267,7 +267,7 @@ TilesTexture::TilesTexture() : void TilesTexture::set_info(int tile_max, tile_info_func *info_func) { - m_tile_max = tile_max; + m_tile_max = tile_max; m_info_func = info_func; } |