saved games.
Bugs/issues:
I guess the equipment problem could be solved by yet another per-character save file similar to dolls.txt, so newgame.cc could read directly from this rather than have to open the save to calculate equipment tiles or any such insanity.
*) presumably because maxpagesize() assumes the entire screen is available for use by the menu
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10083 c06c8d41-db1a-0410-9941-cceddc491573
QFIV4YISNBTC5QXN7JYHEL3FBFWIQ2HKJ4YBDCZYTQ3PMPFE653AC
ZF6STV5NEMEP5O5S6QO52R2CS5JEAGUQA5OKSBI2BIWF3OLZP4CQC
DK76MINM4TMQKZ6HKMJZMZM7QPGQUO3YY3I226G7JDUYJJLWKWAQC
HBPUTW5HDHUEPB62DMJ6GGP2D2GLZB53O5VRTWDLQ4Z53NWB3MKQC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
PUQVSISR5TQFRV6UKOFREN45ZM4YSCST5QSJ2J5CHIHOSYK62MOQC
5RMVWNNF56I7AIBTRBTQAXIJND7JKLJL5OYYKNJOUQSRL5JY7C3QC
MK7MCWBPFRJSUWVXZ43LPFJ5Y2AYZZCREDYBT7AWJUMTQ2ET5AZQC
6ARBZEUSCIPVJUQJST5HG6TKQYQZPOHWYIIJO4OD2SUECPYMLVIQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
TW7QOMTSLYPGUUWHGHLY5G5LV6QQRQIKK4BSE64RY7RDGKVDHCEAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
JR2RAQ523LOWNDYJNK6AZVKI6WVMI622PIV72XWOVZYPXPUKSQWAC
IHOKNI4O7EEW4UBMKHP6XOZNEIQSW4AYOT4O3JXUIXNNR553IQAQC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
UKYGZDI6PYZPXDACCQGVPHANUP5ADCSNROOZIE7LYIZQWSNFHJZAC
VEHHZZFWDG5M4IXTCXXMKH3S2FSXTZ4CD23J6AYVFEPY7PBZ7GWQC
DWQDVEHZSTDVFS2GU24ZLIGJDA3M4767TB734JAQEAUVOOCLZ75AC
NMRKYZUPI6EOC4KONJKB2RHSCC6ONYJUOXQJ7PYJ7V4OBWPRO7AQC
RXZRRWQZH7H3E66ENDI6WTSDDTC5F7MDGIMZTEDYDE4YCUQN4CSAC
5CGIHK2MZLWM63N2VCQTALRO5AB6HV2GB6ERJFI3MKCISOVKSBKQC
6EJRFPJJRSIISDNDZWODH5A7U4PVIWH4YUCHEPB4V2GLGFG4DLBAC
AU3E5FTABBHFZAZHLGA3UUR5TCTRLDOEMAKTGGEWKCQVH77I3SYAC
UIVESOFZ4C262RYTFHSTFZIYTPTWSRJCFJAOZX7O2PQ35DFRDDEAC
cgotoxy(1,12);
formatted_string::parse_string(
" If you've never been here before, you might want to try out" EOL
" the Dungeon Crawl tutorial. To do this, press "
"<white>Ctrl-T</white> on the next" EOL
" screen.").display();
cgotoxy(1,12);
formatted_string::parse_string(
" If you've never been here before, you might want to try out" EOL
" the Dungeon Crawl tutorial. To do this, press "
"<white>Ctrl-T</white> on the next" EOL
" screen.").display();
MenuEntry *title = new MenuEntry("Or choose an existing character:");
title->colour = LIGHTCYAN;
char_menu.set_title( title );
for (unsigned int i = 0; i < existing_chars.size(); ++i)
{
std::string desc = " " + existing_chars[i].short_desc();
if (static_cast<int>(desc.length()) >= get_number_of_cols())
desc = desc.substr(0, get_number_of_cols() - 1);
MenuEntry *title = new MenuEntry("Or choose an existing character:");
title->colour = LIGHTCYAN;
char_menu.set_title( title );
for (unsigned int i = 0; i < existing_chars.size(); ++i)
{
std::string desc = " " + existing_chars[i].short_desc();
if (static_cast<int>(desc.length()) >= get_number_of_cols())
desc = desc.substr(0, get_number_of_cols() - 1);
MenuEntry *me = new MenuEntry(desc);
me->data = &existing_chars[i];
char_menu.add_entry(me);
}
char_menu.set_flags(MF_NOWRAP | MF_SINGLESELECT);
#ifdef USE_TILE
MenuEntry *me = new PlayerMenuEntry(desc);
#else
MenuEntry *me = new MenuEntry(desc);
#endif
me->data = &existing_chars[i];
char_menu.add_entry(me);
}
return (true);
}
bool PlayerMenuEntry::get_tiles(std::vector<tile_def>& tileset) const
{
if (!Options.tile_menu_icons)
return (false);
const player_save_info &player = *static_cast<player_save_info*>( data );
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(player.species, gender, player.experience_level,
equip_doll.parts);
int job = get_class_by_name(player.class_name.c_str());
if (job == -1)
job = JOB_FIGHTER;
tilep_job_default(job, gender, equip_doll.parts);
// FIXME: A lot of code duplication from DungeonRegion::pack_doll().
int p_order[TILEP_PART_MAX] =
{
TILEP_PART_SHADOW, // 0
TILEP_PART_HALO,
TILEP_PART_ENCH,
TILEP_PART_DRCWING,
TILEP_PART_CLOAK,
TILEP_PART_BASE, // 5
TILEP_PART_BOOTS,
TILEP_PART_LEG,
TILEP_PART_BODY,
TILEP_PART_ARM,
TILEP_PART_HAND1, // 10
TILEP_PART_HAND2,
TILEP_PART_HAIR,
TILEP_PART_BEARD,
TILEP_PART_HELM,
TILEP_PART_DRCHEAD // 15
};
int flags[TILEP_PART_MAX];
tilep_calc_flags(equip_doll.parts, flags);
// For skirts, boots go under the leg armour. For pants, they go over.
if (equip_doll.parts[TILEP_PART_LEG] < TILEP_LEG_SKIRT_OFS)
{
p_order[6] = TILEP_PART_BOOTS;
p_order[7] = TILEP_PART_LEG;
}
for (int i = 0; i < TILEP_PART_MAX; ++i)
{
const int p = p_order[i];
const int idx = equip_doll.parts[p];
if (idx == 0 || idx == TILEP_SHOW_EQUIP || flags[p] == TILEP_FLAG_HIDE)
continue;
ASSERT(idx >= TILE_MAIN_MAX && idx < TILEP_PLAYER_MAX);
#if 0
// FIXME: Is there any way to make this work with tile_def?
int ymax = TILE_Y;
if (flags[p] == TILEP_FLAG_CUT_CENTAUR
|| flags[p] == TILEP_FLAG_CUT_NAGA)
{
ymax = 18;
}
buf->add(doll.parts[p], x, y, 0, 0, true, ymax);
#endif
tileset.push_back(tile_def(idx, TEX_PLAYER));
}