7HZNOHIDITNJ4EAKUYRYRIR7H53P7Q7EWBVRON2PUTQCUDHCZBRAC
P3DOLIF47OAWT6VFRTASS3Q3AXUI4SVPUHT4WF7PVBKVNVYWXF5QC
IJHYMJBOPNFORSDVM4RBZ5ZPLGSFSG6JRTPPYOD4YYWPT4YXNRLQC
3A5FX3Y4RPKWQEHKKXZKXZJ7RKV6RKWT7GTR4WFE5UBWKV2HT4RQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
HNXKX6ZDQJV33E7UKZOLBYWJMRZ4QLEMXVXJZNRCTOIG2KVRTIEAC
QXQE7C5XDYNF4JSHGDAVMS7HYLOC6YEZFOVFJ3RD7RB6U4AJSFIQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
C55G5JGGSVWMU7XVEJL6YZZLDXQZGRN7JQOAALS6WIKFPX3L2U6QC
GIDTM5YI3WHSH6CNS2MIQSQ3YZSNO3SZWNI4FUGSFDORFY6UDUAQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC
UBQTNLYGD3SNWMUNGWUPX7EXEGQXOXCFCPWIVWBFE7ID7DJLPFWAC
FQ7XALBL6NZAGBKKYIFHYQ7MUWIHR4TEU4TCS33EG4I3JTND5SQAC
PELXK6IIQWIBJZ47D4UFLEFTQH4TYG5W6VOORKZOINAXYOJ5UF7AC
MYOP4BDTEA4SQ3RUEGRY7PGRJ2ABSXHU42JBTR36G5XPV5YVQNMQC
ZW4PORTK3G7OJDTPXTXQLXTRCEN4ES2RTS22DSLEAPJALDMRWRVQC
PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC
MQ6XOFL5COAWZI6LU6O7TK2DCOEAK3BEK55YGUFPKGOCGVUKZW7AC
FKRLQJYHK3GB6HHSNNFQ7L57ZAR52LSTBG5B6SNJBYZ2LQ36P67AC
ZWYVZW5QFM5I2F6BLMNDDTV7FROJUHOO3O2BCBG7WSCKMKXUEMTQC
2C6B6QRTOK2ZMK2ZOF3EPSFUZTKG5B3IZXWBWIUYC4ZOVGQ2OV2QC
X7MFMKQTNZ2IWBFVGS6WQV7NRNKJ3DWQAW2X7IQMFQQXW24AHPZQC
VTIADUZCOEIR5Q237SWWO2OHAO5RIMHD223H7DYCCHLO6HGYZQKAC
SHQUW7EH2E2SGQ5ONR63MAKN2VGLKQDQ3HIC2Q6D4DFGPGIJXXJQC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
H3552BCIAVBLKAYKE4DHFLBLFW5RGRMYBMRRYHYEB5IPIJRUVU5QC
}
// Returns a Lua table of filenames in the named directory. The file names
// returned are unqualified. The directory must be a relative path, and will
// be resolved to an absolute path if necessary using datafile_path.
LUAFN(_file_datadir_files)
{
const std::string rawdir(luaL_checkstring(ls, 1));
// A filename suffix to match (such as ".des"). If empty, files
// will be unfiltered.
const std::string ext_filter(lua_isnoneornil(ls, 2) ? "" :
luaL_checkstring(ls, 2));
const std::string datadir(
datafile_path(rawdir, false, false, dir_exists));
if (datadir.empty())
luaL_error(ls, "Cannot find data directory: '%s'", rawdir.c_str());
const std::vector<std::string> files =
ext_filter.empty() ? get_dir_files(datadir) :
get_dir_files_ext(datadir, ext_filter);
return clua_stringtable(ls, files);
{ "marshall", file_marshall },
{ "marshall_meta", file_marshall_meta },
{ "unmarshall_meta", file_unmarshall_meta },
{ "unmarshall_number", file_unmarshall_number },
{ "unmarshall_string", file_unmarshall_string },
{ "unmarshall_fn", file_unmarshall_fn },
{ NULL, NULL }
{ "marshall", file_marshall },
{ "marshall_meta", file_marshall_meta },
{ "unmarshall_meta", file_unmarshall_meta },
{ "unmarshall_number", file_unmarshall_number },
{ "unmarshall_string", file_unmarshall_string },
{ "unmarshall_fn", file_unmarshall_fn },
{ "datadir_files", _file_datadir_files },
{ NULL, NULL }
std::string datafile_path(std::string basename,
bool croak_on_fail = true,
bool test_base_path = false);
std::string datafile_path(
std::string basename,
bool croak_on_fail = true,
bool test_base_path = false,
bool (*thing_exists)(const std::string&) = file_exists);
local des_files = {
-- The dummy vaults that define global vault generation odds.
"dummy.des",
-- Example vaults, included here so that Crawl will syntax-check them.
"didact.des",
local des_files = file.datadir_files("dat", ".des")
"arena.des",
"layout.des", "rooms.des",
-- Portal vaults.
"bazaar.des", "bailey.des", "icecave.des", "lab.des", "ossuary.des",
"sewer.des", "trove.des", "shrine.des", "volcano.des", "ziggurat.des",
-- Normal vaults.
"altar.des", "entry.des", "elf.des", "float.des", "hells.des", "hive.des",
"lair.des", "large.des", "mini.des", "orc.des", "pan.des", "shoals.des",
"temple.des", "vaults.des", "crypt.des", "zot.des"
}