/* * Hack -- main Angband initialization entry point * * Verify some files, display the "news.txt" file, create * the high score file, initialize all internal arrays, and * load the basic "user pref files". * * Be very careful to keep track of the order in which things * are initialized, in particular, the only thing *known* to * be available when this function is called is the "z-term.c" * package, and that may not be fully initialized until the * end of this function, when the default "user pref files" * are loaded and "Term_xtra(TERM_XTRA_REACT,0)" is called. * * Note that this function attempts to verify the "news" file, * and the game aborts (cleanly) on failure, since without the * "news" file, it is likely that the "lib" folder has not been * correctly located. Otherwise, the news file is displayed for * the user. * * Note that this function attempts to verify (or create) the * "high score" file, and the game aborts (cleanly) on failure, * since one of the most common "extraction" failures involves * failing to extract all sub-directories (even empty ones), such * as by failing to use the "-d" option of "pkunzip", or failing * to use the "save empty directories" option with "Compact Pro". * This error will often be caught by the "high score" creation * code below, since the "lib/apex" directory, being empty in the * standard distributions, is most likely to be "lost", making it * impossible to create the high score file. * * Note that various things are initialized by this function, * including everything that was once done by "init_some_arrays". * * This initialization involves the parsing of special files * in the "lib/data" and sometimes the "lib/edit" directories. * * Note that the "template" files are initialized first, since they * often contain errors. This means that macros and message recall * and things like that are not available until after they are done. * * We load the default "user pref files" here in case any "color" * changes are needed before character creation. * * Note that the "graf-xxx.prf" file must be loaded separately, * if needed, in the first (?) pass through "TERM_XTRA_REACT". */ bool init_angband(void) { event_signal(EVENT_ENTER_INIT); /* Initialize the menus */ /* This must occur before preference files are read(?) */ init_cmd4_c(); /*** Initialize some arrays ***/ /* Initialize size info */ event_signal_string(EVENT_INITSTATUS, "Initializing array sizes..."); if (init_z_info()) quit("Cannot initialize sizes"); /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (features)"); if (init_f_info()) quit("Cannot initialize features"); /* Initialize object info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (objects)"); if (init_k_info()) quit("Cannot initialize objects"); /* Initialize ego-item info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (ego-items)"); if (init_e_info()) quit("Cannot initialize ego-items"); /* Initialize monster info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (monsters)"); if (init_r_info()) quit("Cannot initialize monsters"); /* Initialize artifact info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (artifacts)"); if (init_a_info()) quit("Cannot initialize artifacts"); /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (vaults)"); if (init_v_info()) quit("Cannot initialize vaults"); /* Initialize history info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (histories)"); if (init_h_info()) quit("Cannot initialize histories"); /* Initialize race info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (races)"); if (init_p_info()) quit("Cannot initialize races"); /* Initialize class info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (classes)"); if (init_c_info()) quit("Cannot initialize classes"); /* Initialize owner info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (owners)"); if (init_b_info()) quit("Cannot initialize owners"); /* Initialize flavor info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (flavors)"); if (init_flavor_info()) quit("Cannot initialize flavors"); /* Initialize spell info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (spells)"); if (init_s_info()) quit("Cannot initialize spells"); /* Initialize spellbook info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (spellbooks)"); init_books(); /* Initialise store stocking data */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (store stocks)"); init_stores(); /* Initialise random name data */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (random names)"); init_names(); /* Initialize some other arrays */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (other)"); if (init_other()) quit("Cannot initialize other stuff"); /* Initialize some other arrays */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (alloc)"); if (init_alloc()) quit("Cannot initialize alloc stuff"); /*** Load default user pref files ***/ /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Loading basic user pref file..."); /* Process that file */ (void)process_pref_file("pref.prf"); /* Done */ event_signal_string(EVENT_INITSTATUS, "Initialization complete"); /* Sneakily init command list */ cmd_init(); /* Ask for a "command" until we get one we like. */ while (1) { game_command command_req; cmd_get(CMD_INIT, &command_req, TRUE); if (command_req.command == CMD_QUIT) { quit(NULL); } else if (command_req.command == CMD_NEWGAME) { event_signal(EVENT_LEAVE_INIT); return TRUE; } else if (command_req.command == CMD_LOADFILE) { event_signal(EVENT_LEAVE_INIT); /* In future we might want to pass back or set the savefile path here. */ return FALSE; } } }
/* * Hack -- main Angband initialization entry point * * Verify some files, display the "news.txt" file, create * the high score file, initialize all internal arrays, and * load the basic "user pref files". * * Be very careful to keep track of the order in which things * are initialized, in particular, the only thing *known* to * be available when this function is called is the "z-term.c" * package, and that may not be fully initialized until the * end of this function, when the default "user pref files" * are loaded and "Term_xtra(TERM_XTRA_REACT,0)" is called. * * Note that this function attempts to verify the "news" file, * and the game aborts (cleanly) on failure, since without the * "news" file, it is likely that the "lib" folder has not been * correctly located. Otherwise, the news file is displayed for * the user. * * Note that this function attempts to verify (or create) the * "high score" file, and the game aborts (cleanly) on failure, * since one of the most common "extraction" failures involves * failing to extract all sub-directories (even empty ones), such * as by failing to use the "-d" option of "pkunzip", or failing * to use the "save empty directories" option with "Compact Pro". * This error will often be caught by the "high score" creation * code below, since the "lib/apex" directory, being empty in the * standard distributions, is most likely to be "lost", making it * impossible to create the high score file. * * Note that various things are initialized by this function, * including everything that was once done by "init_some_arrays". * * This initialization involves the parsing of special files * in the "lib/data" and sometimes the "lib/edit" directories. * * Note that the "template" files are initialized first, since they * often contain errors. This means that macros and message recall * and things like that are not available until after they are done. * * We load the default "user pref files" here in case any "color" * changes are needed before character creation. * * Note that the "graf-xxx.prf" file must be loaded separately, * if needed, in the first (?) pass through "TERM_XTRA_REACT". */ bool init_angband(void) { /* If we have a savefile, use that for game mode instead */ if (savefile[0]) { load_gamemode(); } /* Which game are we playing? */ if (game_mode == 0) { get_game_mode(); } event_signal(EVENT_ENTER_INIT); /*** Initialize some arrays ***/ /* Initialize size info */ event_signal_string(EVENT_INITSTATUS, "Initializing array sizes..."); if (init_z_info()) quit("Cannot initialize sizes"); /* Prepare some things according to the game being played */ init_game_mode(); /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (features)"); if (init_f_info()) quit("Cannot initialize features"); /* Initialize object info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (objects)"); if (init_k_info()) quit("Cannot initialize objects"); /* Initialize object info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (ghosts)"); if (init_t_info()) quit("Cannot initialize ghosts"); /* Initialize artifact info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (artifacts)"); if (init_a_info()) quit("Cannot initialize artifacts"); /* Initialize ego-item info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (ego-items)"); if (init_e_info()) quit("Cannot initialize ego-items"); /* Initialize monster info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (monsters)"); if (init_r_info()) quit("Cannot initialize monsters"); /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (vaults)"); if (init_v_info()) quit("Cannot initialize vaults"); /* Initialize history info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (histories)"); if (init_h_info()) quit("Cannot initialize histories"); /* Initialize race info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (races)"); if (init_p_info()) quit("Cannot initialize races"); /* Initialize class info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (classes)"); if (init_c_info()) quit("Cannot initialize classes"); /* Initialize owner info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (owners)"); if (init_b_info()) quit("Cannot initialize owners"); /* Initialize flavor info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (flavors)"); if (init_flavor_info()) quit("Cannot initialize flavors"); /* Initialize flavor info */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (quests)"); if (init_q_info()) quit("Cannot initialize quests"); /* Initialize some other arrays */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (other)"); if (init_other()) quit("Cannot initialize other stuff"); /* Initialize some other arrays */ event_signal_string(EVENT_INITSTATUS, "Initializing arrays... (alloc)"); if (init_alloc()) quit("Cannot initialize alloc stuff"); /*** Load default user pref files ***/ /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Loading basic user pref file..."); /* Process that file */ (void)process_pref_file("pref.prf"); /* Initialize feature info */ event_signal_string(EVENT_INITSTATUS, "Initializing Random Artifact Tables...]"); if (init_n_info()) quit("Cannot initialize random name generator list"); /*Build the randart probability tables based on the standard Artifact Set*/ build_randart_tables(); /* Done */ event_signal_string(EVENT_INITSTATUS, "Initialization complete"); /* Sneakily init command list */ cmd_init(); /* Ask for a "command" until we get one we like. */ while (1) { game_command command_req; cmd_get(CMD_INIT, &command_req, TRUE); if (command_req.command == CMD_QUIT) { quit(NULL); } else if (command_req.command == CMD_NEWGAME) { event_signal(EVENT_LEAVE_INIT); return TRUE; } else if (command_req.command == CMD_LOADFILE) { event_signal(EVENT_LEAVE_INIT); /* In future we might want to pass back or set the savefile path here. */ return FALSE; } } }