summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilereg.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/tilereg.cc')
-rw-r--r--crawl-ref/source/tilereg.cc94
1 files changed, 83 insertions, 11 deletions
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index b7ee5377c7..32231aafec 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -14,6 +14,7 @@ REVISION("$Rev$");
#include "cio.h"
#include "debug.h"
#include "describe.h"
+#include "files.h"
#include "food.h"
#include "itemname.h"
#include "it_use2.h"
@@ -289,25 +290,98 @@ void DungeonRegion::pack_background(unsigned int bg, int x, int y)
m_buf_dngn.add(TILE_RAY_OUT_OF_RANGE, x, y);
}
-void DungeonRegion::pack_player(int x, int y)
+// static void _load_doll_data(const char *fn, dolls_data *dolls, int max,
+// int *mode, int *cur)
+static void _load_doll_data(const char *fn, dolls_data *doll)
+{
+ char fbuf[1024];
+ FILE *fp = NULL;
+
+ std::string dollsTxtString = datafile_path(fn, false, true);
+ const char *dollsTxt = (dollsTxtString.c_str()[0] == 0) ?
+ "dolls.txt" : dollsTxtString.c_str();
+
+ if ( (fp = fopen(dollsTxt, "r")) == NULL )
+ {
+ mpr("File not found.");
+ // File doesn't exist. By default, use equipment defaults.
+ // This will be saved out (if possible).
+
+ // Don't take gender too seriously. -- Enne
+ tilep_race_default(you.species, coinflip() ? 1 : 0,
+ you.experience_level, doll->parts);
+
+ doll->parts[TILEP_PART_SHADOW] = TILEP_SHADOW_SHADOW;
+
+#if 0
+ // For some reason I can't reset this although it's used identically
+ // elsewhere. (jpeg)
+ for (unsigned int j = 0; j < TILEP_PART_MAX; ++j)
+ doll->parts[j] = TILEP_SHOW_EQUIP;
+#endif
+ }
+ else
+ {
+ memset(fbuf, 0, sizeof(fbuf));
+ int cur = 0;
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+#if 0
+ mpr("Read MODE.");
+ if (strcmp(fbuf, "MODE=LOADING") == 0)
+ mode0 = TILEP_M_LOADING;
+#endif
+ }
+ if (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ if (strncmp(fbuf, "NUM=", 4) == 0)
+ {
+ sscanf(fbuf, "NUM=%d", &cur);
+ if (cur < 0 || cur > 10)
+ cur = 0;
+ }
+ }
+
+ int count = 0;
+ while (fscanf(fp, "%s", fbuf) != EOF)
+ {
+ if (cur == count++)
+ {
+ tilep_scan_parts(fbuf, doll->parts);
+ break;
+ }
+ }
+ if (cur >= count)
+ {
+ mprf(MSGCH_WARN, "Doll %d could not be found in '%s'.",
+ cur, dollsTxt);
+ }
+
+ fclose(fp);
+ }
+}
+
+static dolls_data player_doll;
+
+void init_player_doll()
{
dolls_data default_doll;
- dolls_data player_doll;
- dolls_data result;
- for (int i = 0; i < TILEP_PART_MAX; i++)
+ for (unsigned int i = 0; i < TILEP_PART_MAX; ++i)
default_doll.parts[i] = TILEP_SHOW_EQUIP;
- int gender = you.your_name[0] % 2;
+ int gender = coinflip();
tilep_race_default(you.species, gender, you.experience_level,
default_doll.parts);
- result = default_doll;
+ _load_doll_data("dolls.txt", &default_doll);
+ player_doll = default_doll;
+}
- result.parts[TILEP_PART_BASE] = default_doll.parts[TILEP_PART_BASE];
- result.parts[TILEP_PART_DRCHEAD] = default_doll.parts[TILEP_PART_DRCHEAD];
- result.parts[TILEP_PART_DRCWING] = default_doll.parts[TILEP_PART_DRCWING];
+void DungeonRegion::pack_player(int x, int y)
+{
+ dolls_data result = player_doll;
const bool halo = inside_halo(you.pos());
result.parts[TILEP_PART_HALO] = halo ? TILEP_HALO_TSO : 0;
@@ -740,7 +814,6 @@ void DungeonRegion::render()
// Draw text tags.
// TODO enne - be more intelligent about not covering stuff up
for (int y = 0; y < ENV_SHOW_DIAMETER; y++)
- {
for (int x = 0; x < ENV_SHOW_DIAMETER; x++)
{
coord_def ep(x, y);
@@ -760,7 +833,6 @@ void DungeonRegion::render()
m_tag_font->render_string(pc.x, pc.y, def.text,
min_pos, max_pos, WHITE, false);
}
- }
}
void DungeonRegion::clear()