From dc1341888ccd8cfb3d6cd2518103670a12601745 Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Wed, 19 Aug 2009 15:22:26 +0000 Subject: Fix draconians not being handled correctly in the doll edit screen. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10579 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/rltiles/dc-player.txt | 5 +++- crawl-ref/source/tilepick.cc | 21 ++++++++-------- crawl-ref/source/tilereg.cc | 44 +++++++++++++++++++++++++--------- crawl-ref/source/tiles.h | 1 + 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/crawl-ref/source/rltiles/dc-player.txt b/crawl-ref/source/rltiles/dc-player.txt index d452cbbf2e..1394b2542d 100644 --- a/crawl-ref/source/rltiles/dc-player.txt +++ b/crawl-ref/source/rltiles/dc-player.txt @@ -42,13 +42,15 @@ ogre_f OGRE ogre_m troll_f TROLL troll_m + +# draconians draconian_f DRACONIAN draconian_m draconian_black_f DRACONIAN_BLACK draconian_black_m draconian_gold_f DRACONIAN_GOLD draconian_gold_m -draconian_gray_f DRACONIAN_GRAY +draconian_gray_f DRACONIAN_GREY draconian_gray_m draconian_green_f DRACONIAN_GREEN draconian_green_m @@ -864,6 +866,7 @@ hood_green HOOD_GREEN ninja_black MASK_NINJA_BLACK %end +# draconian wings and heads, need same order as draconians %parts_ctg DRCWING %sdir player/drcwing drcwing_brown BROWN diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index a7138bb9c7..9a529e3aef 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -2902,6 +2902,16 @@ int tilep_species_to_base_tile(int sp, int level) } } +void tilep_draconian_init(int sp, int level, int &base, int &head, int &wing) +{ + const int colour_offset = _draconian_colour(sp, level); + base = TILEP_BASE_DRACONIAN + colour_offset * 2; + head = tile_player_part_start[TILEP_PART_DRCHEAD] + colour_offset; + + if (player_mutation_level(MUT_BIG_WINGS)) + wing = tile_player_part_start[TILEP_PART_DRCWING] + colour_offset; +} + void tilep_race_default(int sp, int gender, int level, int *parts) { if (gender == -1) @@ -2964,17 +2974,8 @@ void tilep_race_default(int sp, int gender, int level, int *parts) case SP_MOTTLED_DRACONIAN: case SP_PALE_DRACONIAN: { - const int colour_offset = _draconian_colour(sp, level); - result = TILEP_BASE_DRACONIAN + colour_offset * 2; + tilep_draconian_init(sp, level, result, head, wing); hair = 0; - int st = tile_player_part_start[TILEP_PART_DRCHEAD]; - head = st + colour_offset; - - if (player_mutation_level(MUT_BIG_WINGS)) - { - st = tile_player_part_start[TILEP_PART_DRCWING]; - wing = st + colour_offset; - } break; } case SP_MINOTAUR: diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc index a22d1b6654..f56ef9b8d4 100644 --- a/crawl-ref/source/tilereg.cc +++ b/crawl-ref/source/tilereg.cc @@ -613,13 +613,24 @@ static void _fill_doll_equipment(dolls_data &result) result.parts[TILEP_PART_ENCH] = (you.duration[DUR_LIQUID_FLAMES] ? TILEP_ENCH_STICKY_FLAME : 0); } + // Draconian head/wings + if (player_genus(GENPC_DRACONIAN)) + { + int base = 0; + int head = 0; + int wing = 0; + tilep_draconian_init(you.species, you.experience_level, base, head, wing); + + if (result.parts[TILEP_PART_DRCHEAD] == TILEP_SHOW_EQUIP) + result.parts[TILEP_PART_DRCHEAD] = head; + if (result.parts[TILEP_PART_DRCWING] == TILEP_SHOW_EQUIP) + result.parts[TILEP_PART_DRCWING] = wing; + } // Various other slots. for (int i = 0; i < TILEP_PART_MAX; i++) - { if (result.parts[i] == TILEP_SHOW_EQUIP) result.parts[i] = 0; - } } // Writes equipment information into per-character doll file. @@ -3269,7 +3280,11 @@ void DollEditRegion::clear() // shadow tile if it's the last species. static int _get_next_species_tile() { - switch (you.species) + int sp = you.species; + if (player_genus(GENPC_DRACONIAN) && you.experience_level < 7) + sp = SP_BASE_DRACONIAN; + + switch (sp) { case SP_HUMAN: return TILEP_BASE_ELF; @@ -3289,17 +3304,24 @@ static int _get_next_species_tile() case SP_TROLL: return TILEP_BASE_DRACONIAN; case SP_BASE_DRACONIAN: - return TILEP_BASE_DRACONIAN_RED; - case SP_RED_DRACONIAN: - case SP_WHITE_DRACONIAN: - case SP_GREEN_DRACONIAN: + return TILEP_BASE_DRACONIAN_BLACK; + case SP_BLACK_DRACONIAN: + return TILEP_BASE_DRACONIAN_GOLD; case SP_YELLOW_DRACONIAN: + return TILEP_BASE_DRACONIAN_GREY; case SP_GREY_DRACONIAN: - case SP_BLACK_DRACONIAN: - case SP_PURPLE_DRACONIAN: + return TILEP_BASE_DRACONIAN_GREEN; + case SP_GREEN_DRACONIAN: + return TILEP_BASE_DRACONIAN_MOTTLED; case SP_MOTTLED_DRACONIAN: - return tilep_species_to_base_tile(you.species + 1); + return TILEP_BASE_DRACONIAN_PALE; case SP_PALE_DRACONIAN: + return TILEP_BASE_DRACONIAN_PURPLE; + case SP_PURPLE_DRACONIAN: + return TILEP_BASE_DRACONIAN_RED; + case SP_RED_DRACONIAN: + return TILEP_BASE_DRACONIAN_WHITE; + case SP_WHITE_DRACONIAN: return TILEP_BASE_CENTAUR; case SP_CENTAUR: case SP_DEMIGOD: @@ -3331,7 +3353,7 @@ static int _get_next_part(int cat, int part, int inc) if (cat == TILEP_PART_BASE) { - offset = tilep_species_to_base_tile(you.species); + offset = tilep_species_to_base_tile(you.species, you.experience_level); max_part = _get_next_species_tile() - offset; } diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h index e2a9eedd63..d1fdfc3f23 100644 --- a/crawl-ref/source/tiles.h +++ b/crawl-ref/source/tiles.h @@ -53,6 +53,7 @@ int tileidx_monster(const monsters *mon, bool detected = false); int get_gender_from_tile(int parts[]); int tilep_species_to_base_tile(int sp = you.species, int level = you.experience_level); +void tilep_draconian_init(int sp, int level, int &base, int &head, int &wing); void tilep_race_default(int sp, int gender, int level, int *parts); void tilep_job_default(int job, int gender, int *parts); void tilep_calc_flags(const int parts[], int flag[]); -- cgit v1.2.3-54-g00ecf