summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-08-19 15:22:26 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-08-19 15:22:26 +0000
commitdc1341888ccd8cfb3d6cd2518103670a12601745 (patch)
tree1932db5f18da82ab9206253a2db381b6bd222980
parent309425214082f560faa1d32b1d834644e0d4464d (diff)
downloadcrawl-ref-dc1341888ccd8cfb3d6cd2518103670a12601745.tar.gz
crawl-ref-dc1341888ccd8cfb3d6cd2518103670a12601745.zip
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
-rw-r--r--crawl-ref/source/rltiles/dc-player.txt5
-rw-r--r--crawl-ref/source/tilepick.cc21
-rw-r--r--crawl-ref/source/tilereg.cc44
-rw-r--r--crawl-ref/source/tiles.h1
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[]);