Hi, I'm playing on freeciv-2.4.0-beta1 and the ruleset has a GameLoss figure.
When I capture an enemy city with a Palace, there is civil war and a new player with new nation and own capital city appears. All right so far, but the new player does not have a GameLoss figure.
Is this a bug that will be fixed, or is thie a feature?
Further, in the Ancients-modpack I found an entry "gameloss_stype=1", which doesn't work, there is no code for that.
When I kill an enemies GameLoss figure, the whole empire vanishes without a trace as if it would never existed.
Nothing to loot, no techs to steal, no fun ... .
So I modified the code so that at least there is civil war and a new player with about half of the cities.
Here is the code, if anyone should be interested, it's really not much, only the code in bold is added.
In plrhand.c:
/**************************************************************************
Murder a player in cold blood.
Called from srv_main kill_dying_players() and edit packet handler
handle_edit_player_remove().
**************************************************************************/
void kill_player(struct player *pplayer)
{
bool palace;
pplayer->is_alive = FALSE;
/* reset player status */
player_status_reset(pplayer);
/* Remove shared vision from dead player to friends. */
players_iterate(aplayer) {
if (gives_shared_vision(pplayer, aplayer)) {
remove_shared_vision(pplayer, aplayer);
}
} players_iterate_end;
cancel_all_meetings(pplayer);
/* Show entire map for players who are *not* in a team if revealmap is set
* to REVEAL_MAP_DEAD. */
if (game.server.revealmap & REVEAL_MAP_DEAD
&& player_list_size(team_members(pplayer->team)) == 1) {
map_know_and_see_all(pplayer);
}
if (!is_barbarian(pplayer)) {
notify_player(NULL, NULL, E_DESTROYED, ftc_server,
_("The %s are no more!"),
nation_plural_for_player(pplayer));
}
/* Transfer back all cities not originally owned by player to their
rightful owners, if they are still around */
palace = game.server.savepalace;
game.server.savepalace = FALSE; /* moving it around is dumb */
city_list_iterate(pplayer->cities, pcity) {
if (pcity->original != pplayer && pcity->original->is_alive) {
/* Transfer city to original owner, kill all its units outside of
a radius of 3, give verbose messages of every unit transferred,
and raze buildings according to raze chance (also removes palace) */
transfer_city(pcity->original, pcity, 3, TRUE, TRUE, TRUE);
}
} city_list_iterate_end;
/* let there be civil war --- new */
if (!is_barbarian(pplayer) && (city_list_size(pplayer->cities)>=2)) {
log_normal("Civil war strikes the remaining empire of %s", pplayer->name);
/* out of sheer cruelty we reanimate the player so he can behold what happens to his empire */
pplayer->is_alive = TRUE;
(void) civil_war(pplayer);
pplayer->is_alive = FALSE;
}
/* Remove all units that are still ours */
unit_list_iterate_safe(pplayer->units, punit) {
wipe_unit(punit, ULR_PLAYER_DIED);
} unit_list_iterate_safe_end;
/* Destroy any remaining cities */
city_list_iterate(pplayer->cities, pcity) {
remove_city(pcity);
} city_list_iterate_end;
game.server.savepalace = palace;
/* Remove ownership of tiles */
whole_map_iterate(ptile) {
if (tile_owner(ptile) == pplayer) {
map_claim_ownership(ptile, NULL, NULL);
}
} whole_map_iterate_end;
/* Ensure this dead player doesn't win with a spaceship.
* Now that would be truly unbelievably dumb - Per */
spaceship_init(&pplayer->spaceship);
send_spaceship_info(pplayer, NULL);
send_player_info_c(pplayer, game.est_connections);
}
95.112.204.172 16:36, January 16, 2013 (UTC)