Project

General

Profile

Feature #219 ยป 0035-Keep-track-of-world-peace-start-turn.patch

Marko Lindqvist, 02/01/2024 04:44 AM

View differences:

common/game.c
game.info.trading_gold = GAME_DEFAULT_TRADING_GOLD;
game.info.trading_tech = GAME_DEFAULT_TRADING_TECH;
game.info.turn = 0;
game.info.warminglevel = 0; /* set later */
game.info.warminglevel = 0; /* Set later */
game.info.year_0_hack = FALSE;
game.info.year = GAME_DEFAULT_START_YEAR;
game.info.top_cities_count = GAME_DEFAULT_TOP_CITIES_COUNT;
......
game.server.unitwaittime = GAME_DEFAULT_UNITWAITTIME;
game.server.plr_colors = NULL;
game.server.random_move_time = NULL;
game.server.world_peace_start = 0;
} else {
/* Client side takes care of itself in client_main() */
}
common/game.h
* the server we need to remember the old setting */
bool last_updated_year; /* last_updated is still counted as year in this
* game. */
int world_peace_start;
char rulesetdir[MAX_LEN_NAME];
char demography[MAX_LEN_DEMOGRAPHY];
char allow_take[MAX_LEN_ALLOW_TAKE];
server/savegame/savecompat.c
secfile_insert_bool(loading->file, FALSE, "map.altitude");
/* World Peace has never started in the old savegame. */
game.info.turn = secfile_lookup_int_default(loading->file, 0, "game.turn");
secfile_insert_int(loading->file, game.info.turn, "game.world_peace_start");
{
int ssa_count;
......
secfile_insert_bool(loading->file, FALSE, "map.altitude");
/* World Peace has never started in the old savegame. */
game.info.turn
= secfile_lookup_int_default(loading->file, 0, "game.turn");
game.server.world_peace_start
= secfile_lookup_int_default(loading->file, game.info.turn,
"game.world_peace_start");
secfile_replace_int(loading->file, game.server.world_peace_start,
"game.world_peace_start");
/* Add actions for unit activities */
loading->activities.size
= secfile_lookup_int_default(loading->file, 0,
server/savegame/savegame2.c
= secfile_lookup_int_default(loading->file, 0, "game.turn");
sg_failure_ret(secfile_lookup_int(loading->file, &game.info.year,
"game.year"), "%s", secfile_error());
game.server.world_peace_start = game.info.turn;
game.info.year_0_hack
= secfile_lookup_bool_default(loading->file, FALSE, "game.year_0_hack");
server/savegame/savegame3.c
= secfile_lookup_int_default(loading->file, 0, "game.turn");
sg_failure_ret(secfile_lookup_int(loading->file, &game.info.year,
"game.year"), "%s", secfile_error());
sg_failure_ret(secfile_lookup_int(loading->file, &game.server.world_peace_start,
"game.world_peace_start"), "%s", secfile_error());
game.info.year_0_hack
= secfile_lookup_bool_default(loading->file, FALSE, "game.year_0_hack");
......
secfile_insert_int(saving->file, game.info.turn, "game.turn");
secfile_insert_int(saving->file, game.info.year, "game.year");
secfile_insert_int(saving->file, game.server.world_peace_start, "game.world_peace_start");
secfile_insert_bool(saving->file, game.info.year_0_hack,
"game.year_0_hack");
server/srv_main.c
static void handle_observer_ready(struct connection *pconn);
static void world_peace_update(void);
/* command-line arguments to server */
struct server_arguments srvarg;
......
} whole_map_iterate_end;
} extra_type_by_cause_iterate_end;
world_peace_update();
update_diplomatics();
make_history_report();
settings_turn();
......
}
while (server_sniff_all_input() == S_E_OTHERWISE) {
/* nothing */
/* Nothing */
}
between_turns = timer_renew(between_turns, TIMER_USER, TIMER_ACTIVE,
......
/* endturn was reached - rank users based on team scores */
rank_users(TRUE);
} else {
/* game ended for victory conditions - rank users based on survival */
/* Game ended for victory conditions - rank users based on survival */
rank_users(FALSE);
}
} else if (S_S_OVER == server_state()) {
/* game terminated by /endgame command - calculate team scores */
/* Game terminated by /endgame command - calculate team scores */
rank_users(TRUE);
}
}
......
}
}
}
/**********************************************************************//**
Does this turn count as world peace turn?
**************************************************************************/
static bool world_peace_turn(void)
{
players_iterate_alive(pplayer) {
bool contact = FALSE;
players_iterate_alive(other) {
if (pplayer != other) {
struct player_diplstate *dstate = player_diplstate_get(pplayer, other);
if (dstate->type == DS_WAR) {
return FALSE;
}
if (dstate->type != DS_NO_CONTACT) {
contact = TRUE;
}
}
} players_iterate_alive_end;
if (!contact) {
/* Peace only because there's nobody to show aggression against does not count. */
return FALSE;
}
} players_iterate_alive_end;
return TRUE;
}
/**********************************************************************//**
Update world peace data.
**************************************************************************/
static void world_peace_update(void)
{
if (!world_peace_turn()) {
/* Consecutive world peace turns begin *earliest* after this turn, overwrite older claims. */
game.server.world_peace_start = game.info.turn;
}
}
    (1-1/1)