summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilepick.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/tilepick.cc')
-rw-r--r--crawl-ref/source/tilepick.cc54
1 files changed, 42 insertions, 12 deletions
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 1a79526ac8..e736c2f5da 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -2716,9 +2716,7 @@ static inline void _finalize_tile(unsigned int *tile,
void tilep_calc_flags(const int parts[], int flag[])
{
- int i;
-
- for (i = 0; i < TILEP_PART_MAX; i++)
+ for (unsigned i = 0; i < TILEP_PART_MAX; i++)
flag[i] = TILEP_FLAG_NORMAL;
if (parts[TILEP_PART_HELM] - 1 >= TILEP_HELM_HELM_OFS)
@@ -2865,16 +2863,20 @@ void tilep_race_default(int race, int gender, int level, int *parts)
case SP_PURPLE_DRACONIAN:
case SP_MOTTLED_DRACONIAN:
case SP_PALE_DRACONIAN:
+ {
+ const int colour_offset = _draconian_colour(race, level);
+ result = TILEP_BASE_DRACONIAN + colour_offset * 2;
hair = 0;
+ int st = tile_player_part_start[TILEP_PART_DRCHEAD];
+ parts[TILEP_PART_DRCHEAD] = st + colour_offset;
+
if (player_mutation_level(MUT_BIG_WINGS))
{
- int st = tile_player_part_start[TILEP_PART_DRCWING];
- parts[TILEP_PART_DRCWING] = st + _draconian_colour(race, level);
+ st = tile_player_part_start[TILEP_PART_DRCWING];
+ parts[TILEP_PART_DRCWING] = st + colour_offset;
}
-
- result = TILEP_BASE_DRACONIAN + _draconian_colour(race, level) * 2;
break;
-
+ }
case SP_CENTAUR:
result = TILEP_BASE_CENTAUR;
break;
@@ -2930,6 +2932,7 @@ void tilep_race_default(int race, int gender, int level, int *parts)
if (gender == TILEP_GENDER_MALE)
result++;
+
parts[TILEP_PART_BASE] = result;
parts[TILEP_PART_HAIR] = hair;
parts[TILEP_PART_BEARD] = beard;
@@ -3251,7 +3254,6 @@ void tilep_scan_parts(char *fbuf, int *parts)
int ccount = 0;
for (int i = 0; parts_saved[i] != -1; i++)
{
- int idx;
ccount = 0;
int p = parts_saved[i];
@@ -3264,7 +3266,24 @@ void tilep_scan_parts(char *fbuf, int *parts)
ibuf[ccount] = '\0';
gcount++;
- idx = tilep_str_to_part(ibuf);
+ int idx = tilep_str_to_part(ibuf);
+ if (p == TILEP_PART_BASE)
+ parts[p] += idx % 2;
+ else if (idx == 0)
+ parts[p] = 0;
+ else if (idx == TILEP_SHOW_EQUIP)
+ continue;
+ else if (idx > tile_player_part_count[p])
+ parts[p] = tile_player_part_start[p];
+ else
+ {
+ int idx2 = tile_player_part_start[p] + idx - 1;
+ if (idx2 < TILE_MAIN_MAX || idx2 >= TILEP_PLAYER_MAX)
+ parts[p] = TILEP_SHOW_EQUIP;
+ else
+ parts[p] = idx2;
+ }
+/*
if (p == TILEP_PART_BASE)
{
int p0 = (parts[p]-1) & (0xfe);
@@ -3274,13 +3293,24 @@ void tilep_scan_parts(char *fbuf, int *parts)
}
else if (idx == TILEP_SHOW_EQUIP)
parts[p] = TILEP_SHOW_EQUIP;
+ else
+ parts[p] = 0;
+*/
+/*
+ else if (idx < TILE_MAIN_MAX)
+ parts[p] = TILE_MAIN_MAX;
+ else if (idx >= TILEP_PLAYER_MAX)
+ parts[p] = TILEP_PLAYER_MAX - 1;
else if (idx < 0)
parts[p] = 0;
// TODO enne - is this right? did the old count end at idx not just subtotal?
- else if (idx > tile_player_part_count[p])
- parts[p] = tile_player_part_count[p];
+ else if (idx >= tile_player_part_count[p])
+ parts[p] = tile_player_part_count[p] - 1;
+// else if (idx > tilep_parts_total[p]) // bound it
+// parts[p] = tilep_parts_total[p];
else
parts[p] = idx;
+*/
}
}