#include <phantasmal/log.h>
#include <phantasmal/lpc_names.h>
#include <type.h>
#include <gameconfig.h>
#include <config.h>
static void load_sould(void);
static int read_object_dir(string path);
static void create(void) {
string throwaway, mob_file;
/* Build game driver and set it */
throwaway = catch (find_object(GAME_DRIVER) ? nil
: compile_object(GAME_DRIVER));
if(find_object(GAME_DRIVER))
CONFIGD->set_game_driver(find_object(GAME_DRIVER));
/* Register a help directory for the HelpD to use */
HELPD->new_help_directory("/usr/game/help");
load_sould();
/* Load stuff into MAPD and EXITD */
if(read_object_dir(ROOM_DIR) >= 0) {
EXITD->add_deferred_exits();
MAPD->do_room_resolution(1);
} else {
error("Can't read object files! Dying!\n");
}
/* Load the mobilefile into MOBILED */
mob_file = read_file(MOB_FILE);
if(mob_file) {
MOBILED->add_unq_text_mobiles(mob_file, MOB_FILE);
} else {
error("Can't read mobile file! Dying!\n");
}
LOGD->write_syslog("Configured Phantasmal from /usr/game!");
}
static void load_sould(void) {
string file_tmp;
file_tmp = read_file("/usr/game/sould.unq");
SOULD->from_unq_text(file_tmp);
}
/* read_object_dir loads all rooms and exits from the specified directory,
which should be in canonical Phantasmal saved format. This is used to
restore saved data from %shutdown and from %datadump. */
static int read_object_dir(string path) {
mixed** dir;
int ctr;
string file;
dir = get_dir(path + "/zone*.unq");
if(!sizeof(dir[0])) {
LOGD->write_syslog("Can't find any '" + path
+ "/zone*.unq' files to load!", LOG_ERR);
return -1;
}
for(ctr = 0; ctr < sizeof(dir[0]); ctr++) {
/* Skip directories */
if(dir[1][ctr] == -2)
continue;
file = read_file(path + "/" + dir[0][ctr]);
if(!file || !strlen(file)) {
/* Nothing was read. Return error. */
return -1;
}
MAPD->add_unq_text_rooms(file, ROOM_DIR + "/" + dir[0][ctr]);
}
}