Clean-up of hiscores.cc.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3794 c06c8d41-db1a-0410-9941-cceddc491573
WRPGGZRVGWWYCBWL5W5HMAM7CWLYICKZ6A36ZGQ3UEDW5O25FMOQC
VQFVTC262JZIE7VHTN3OZHJ3AZROBKSOYK2AD2SWNIGPLJZT5PSAC
2T77DOO37HCQ7SVMDKOEXUTWR3WIHFM2RLRYANM5YBZAK5CCZROAC
6OKX22MRDGVHJE334AIXTV6NE7VJDYJLREGTWEGOVFSBYFIVASRAC
TLDLODGU4NH47F32G3WS652E4AYA5ZGYS6TIOS6V2TEJJLNQ6WXQC
6O5667Y65C5GTP4V3NBKWUN22IRGCAXEELJ6MCANMYPBOKDUO75QC
2VVUGQRAV56RGTMOREX6ZQNJXDRYPLH5FS73JDZ4J46ECWV4CWAQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
Z3RI4XAN7J2GUABAQ5G6YIOQYMBOAEQFFGRBWHMUEB2A2QYXO5MQC
SVFEYUMU7YSZYB3B33RJYJZRRELJ2PJFJXX6NRUV3NSWKMBT56EQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC
OTHTO2GQ6S7DWMZ5BT7CB2OEK54XLL4NMH4G4DNCHEBGGCY6Y2XQC
GR6ZABTGAAQTKZBVA7PTOYQG6G3ACF62ITT5COLHTRN2HGIPRG2AC
YRY2TC3VHOYE47M23UJGUWDGF7H7WGU7WLWI4SUNM4EDNTGUPHGAC
LY3EVV7EUNULYH3WSDZDLZYPJM4LHLOJTT3WETKYIJTKUP7UQPZAC
6HG6JFO47Y3BZLU7Y6G3R2CX6JFGN4X5PKK6S5IGUXUYQ5GVZYFQC
DUN7EE7M7EH27OMYTBAAN2KIPQH4T375WLDSV2M3C7V54C4QOVXAC
TAVHZJPVNJBZR7CUURAOYNDZPNVQ3AGHTXDEP5K4JGYETBLQJDRQC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
M5ZDZJBTOJ7SWQPZZQPC24JYZKP26MWSRDHXBWQE2MPPL6WCXOIQC
ZBPZZ5A7AB2VFZKQ2UJXVDGUK22OCZJCEN2RWTGDGK3VXFCCDKVAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
XDJGQNFELURGXMUAOOVALQMSLAJVHMG63KPKVA33HTJFVZROGZ4AC
static FILE *hs_open(const char *mode, const std::string &filename);
static void hs_close(FILE *handle, const char *mode,
const std::string &filename);
static bool hs_read(FILE *scores, scorefile_entry &dest);
static void hs_write(FILE *scores, scorefile_entry &entry);
static time_t parse_time(const std::string &st);
static FILE *_hs_open(const char *mode, const std::string &filename);
static void _hs_close(FILE *handle, const char *mode,
const std::string &filename);
static bool _hs_read(FILE *scores, scorefile_entry &dest);
static void _hs_write(FILE *scores, scorefile_entry &entry);
static time_t _parse_time(const std::string &st);
return se.hiscore_line(
verbose?
scorefile_entry::DDV_VERBOSE
: scorefile_entry::DDV_NORMAL );
return se.hiscore_line( verbose ? scorefile_entry::DDV_VERBOSE
: scorefile_entry::DDV_NORMAL );
date.tm_mon = val_char( st[4] ) * 10 + val_char( st[5] );
date.tm_mday = val_char( st[6] ) * 10 + val_char( st[7] );
date.tm_hour = val_char( st[8] ) * 10 + val_char( st[9] );
date.tm_min = val_char( st[10] ) * 10 + val_char( st[11] );
date.tm_sec = val_char( st[12] ) * 10 + val_char( st[13] );
date.tm_mon = _val_char( st[4] ) * 10 + _val_char( st[5] );
date.tm_mday = _val_char( st[6] ) * 10 + _val_char( st[7] );
date.tm_hour = _val_char( st[8] ) * 10 + _val_char( st[9] );
date.tm_min = _val_char( st[10] ) * 10 + _val_char( st[11] );
date.tm_sec = _val_char( st[12] ) * 10 + _val_char( st[13] );
version = se.version;
points = se.points;
name = se.name;
uid = se.uid;
race = se.race;
cls = se.cls;
race_class_name = se.race_class_name;
lvl = se.lvl;
best_skill = se.best_skill;
best_skill_lvl = se.best_skill_lvl;
death_type = se.death_type;
death_source = se.death_source;
mon_num = se.mon_num;
version = se.version;
points = se.points;
name = se.name;
uid = se.uid;
race = se.race;
cls = se.cls;
race_class_name = se.race_class_name;
lvl = se.lvl;
best_skill = se.best_skill;
best_skill_lvl = se.best_skill_lvl;
death_type = se.death_type;
death_source = se.death_source;
mon_num = se.mon_num;
auxkilldata = se.auxkilldata;
dlvl = se.dlvl;
level_type = se.level_type;
branch = se.branch;
final_hp = se.final_hp;
final_max_hp = se.final_max_hp;
final_max_max_hp = se.final_max_max_hp;
damage = se.damage;
str = se.str;
intel = se.intel;
dex = se.dex;
god = se.god;
piety = se.piety;
penance = se.penance;
wiz_mode = se.wiz_mode;
birth_time = se.birth_time;
death_time = se.death_time;
real_time = se.real_time;
num_turns = se.num_turns;
num_diff_runes = se.num_diff_runes;
num_runes = se.num_runes;
auxkilldata = se.auxkilldata;
dlvl = se.dlvl;
level_type = se.level_type;
branch = se.branch;
final_hp = se.final_hp;
final_max_hp = se.final_max_hp;
final_max_max_hp = se.final_max_max_hp;
damage = se.damage;
str = se.str;
intel = se.intel;
dex = se.dex;
god = se.god;
piety = se.piety;
penance = se.penance;
wiz_mode = se.wiz_mode;
birth_time = se.birth_time;
death_time = se.death_time;
real_time = se.real_time;
num_turns = se.num_turns;
num_diff_runes = se.num_diff_runes;
num_runes = se.num_runes;
points = fields->long_field("sc");
name = fields->str_field("name");
uid = fields->int_field("uid");
race = str_to_species(fields->str_field("race"));
cls = get_class_by_name(fields->str_field("cls").c_str());
points = fields->long_field("sc");
auxkilldata = fields->str_field("kaux");
branch = str_to_branch(fields->str_field("br"), BRANCH_MAIN_DUNGEON);
dlvl = fields->int_field("lvl");
level_type = str_to_level_area_type(fields->str_field("ltyp"));
auxkilldata = fields->str_field("kaux");
final_hp = fields->int_field("hp");
final_max_hp = fields->int_field("mhp");
branch = str_to_branch(fields->str_field("br"), BRANCH_MAIN_DUNGEON);
dlvl = fields->int_field("lvl");
level_type = _str_to_level_area_type(fields->str_field("ltyp"));
final_hp = fields->int_field("hp");
final_max_hp = fields->int_field("mhp");
get_species_abbrev(race),
get_class_abbrev(cls));
fields->add_field("xl", "%d", lvl);
fields->add_field("sk", "%s", skill_name(best_skill));
get_species_abbrev(race), get_class_abbrev(cls));
fields->add_field("xl", "%d", lvl);
fields->add_field("sk", "%s", skill_name(best_skill));
place_name(get_packed_place(branch, dlvl, level_type),
false, true).c_str());
fields->add_field("br", "%s", short_branch_name(branch));
fields->add_field("lvl", "%d", dlvl);
place_name(get_packed_place(branch, dlvl, level_type),
false, true).c_str());
fields->add_field("br", "%s", _short_branch_name(branch));
fields->add_field("lvl", "%d", dlvl);
points = -1;
name[0] = 0;
uid = 0;
race = 0;
cls = 0;
lvl = 0;
race_class_name[0] = 0;
best_skill = 0;
best_skill_lvl = 0;
death_type = KILLED_BY_SOMETHING;
death_source = 0;
mon_num = 0;
points = -1;
name[0] = 0;
uid = 0;
race = 0;
cls = 0;
lvl = 0;
race_class_name[0] = 0;
best_skill = 0;
best_skill_lvl = 0;
death_type = KILLED_BY_SOMETHING;
death_source = 0;
mon_num = 0;
auxkilldata[0] = 0;
dlvl = 0;
level_type = LEVEL_DUNGEON;
branch = BRANCH_MAIN_DUNGEON;
final_hp = -1;
final_max_hp = -1;
final_max_max_hp = -1;
str = -1;
intel = -1;
dex = -1;
damage = -1;
god = GOD_NO_GOD;
piety = -1;
penance = -1;
wiz_mode = 0;
birth_time = 0;
death_time = 0;
real_time = -1;
num_turns = -1;
num_diff_runes = 0;
num_runes = 0;
auxkilldata[0] = 0;
dlvl = 0;
level_type = LEVEL_DUNGEON;
branch = BRANCH_MAIN_DUNGEON;
final_hp = -1;
final_max_hp = -1;
final_max_max_hp = -1;
str = -1;
intel = -1;
dex = -1;
damage = -1;
god = GOD_NO_GOD;
piety = -1;
penance = -1;
wiz_mode = 0;
birth_time = 0;
death_time = 0;
real_time = -1;
num_turns = -1;
num_diff_runes = 0;
num_runes = 0;
}
static int _award_modified_experience()
{
int xp = you.experience;
int result = 0;
if (xp <= 250000)
return ((xp * 7) / 10);
result += (250000 * 7) / 10;
xp -= 250000;
if (xp <= 750000)
{
result += (xp * 4) / 10;
return (result);
}
result += (750000 * 4) / 10;
xp -= 750000;
if (xp <= 2000000)
{
result += (xp * 2) / 10;
return (result);
}
result += (2000000 * 2) / 10;
xp -= 2000000;
result += (xp / 10);
return (result);
/*
* old scoring system:
*
* Gold
* + 0.7 * Experience
* + (distinct Runes +2)^2 * 1000, winners with distinct runes >= 3 only
* + value of Inventory, for winners only
*
*
* new scoring system, as suggested by Lemuel:
*
* Gold
* + 0.7 * Experience up to 250,000
* + 0.4 * Experience between 250,000 and 1,000,000
* + 0.2 * Experience between 1,000,000 and 3,000,000
* + 0.1 * Experience above 3,000,000
* + (distinct Runes +2)^2 * 1000, winners with distinct runes >= 3 only
* + value of Inventory, for winners only
* + (250,000 * distinct Runes) * (25,000/(turns/rune)), for winners only
*
*/
dlvl = player_branch_depth();
branch = you.where_are_you; // no adjustments necessary.
dlvl = player_branch_depth();
branch = you.where_are_you; // no adjustments necessary.
return make_stringf(
"%8ld %-10s %s-%02d%s", points, scname.c_str(),
char_desc.c_str(), lvl, (wiz_mode == 1) ? "W" : "" );
return make_stringf( "%8ld %-10s %s-%02d%s", points, scname.c_str(),
char_desc.c_str(), lvl, (wiz_mode == 1) ? "W" : "" );
(piety > 160) ? "the Champion" :
(piety >= 120) ? "a High Priest" :
(piety >= 100) ? "an Elder" :
(piety >= 75) ? "a Priest" :
(piety >= 50) ? "a Believer" :
(piety >= 30) ? "a Follower"
(piety > 160) ? "the Champion" :
(piety >= 120) ? "a High Priest" :
(piety >= 100) ? "an Elder" :
(piety >= 75) ? "a Priest" :
(piety >= 50) ? "a Believer" :
(piety >= 30) ? "a Follower"