The interface provides main() for Xconq; this allows maximum
flexibility in adapting to different environments. In a sense, the
kernel is a large library that the interface calls to do game-related
operations.
There is a standard set of calls that need to be made during initialization. The set changes from time to time, so the following extract from `skelconq' should not be taken as definitive:
init_library_path(NULL);
clear_game_modules();
init_data_structures();
parse_command_line(argc, argv, general_options);
load_all_modules();
check_game_validity();
parse_command_line(argc, argv, variant_options);
set_variants_from_options();
parse_command_line(argc, argv, player_options);
set_players_from_options();
parse_command_line(argc, argv, leftover_options);
make_trial_assignments();
calculate_globals();
run_synth_methods();
final_init();
assign_players_to_sides();
init_displays();
init_signal_handlers();
run_game(0);
Note that this sequence is only straight-through for a simple command
line option program; if you have one or more game setup dialogs, then
you choose which to call based on how the players have progressed
through the dialogs. The decision points more-or-less correspond to the
different parse_command_line calls in the example. You may also
need to interleave some interface-specific calls; for instance, if you
want to display side emblems in a player/side selection dialog, then you
will need to arrange for the emblem images to be loaded and displayable,
rather than doing it as part of opening displays.
Once a game is underway, the interface is basically self-contained,
needing only to call run_game periodically to keep the game
moving along. run_game takes one argument which can be -1, 0, or
1. If 1, then one unit gets to do one action, then the routine returns.
If 0, the calculations are gone through, but no units can act. If -1,
then all possible units will move before run_game returns. This
last case is not recommended for interactive programs, since moving all
units in a large game may take a very long time; several minutes
sometimes, and run_game may not necessarily call back to the
interface very often.