Freeciv
Advertisement
Forums: Index > Development > Civil war and GameLoss figure


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)

Advertisement