Feature #1094 » 0064-Add-Civil-War-action-type.patch
| common/actions.c | ||
|---|---|---|
|
const int min_distance,
|
||
|
const int max_distance,
|
||
|
bool actor_consuming_always);
|
||
|
static struct action *
|
||
|
player_action_new(action_id id,
|
||
|
enum action_result result);
|
||
|
static bool is_enabler_active(const struct action_enabler *enabler,
|
||
|
const struct req_context *actor,
|
||
| ... | ... | |
|
MAK_FORCED,
|
||
|
1, 1, FALSE);
|
||
|
actions[ACTION_CIVIL_WAR] =
|
||
|
player_action_new(ACTION_CIVIL_WAR, ACTRES_ENABLER_CHECK);
|
||
|
/* The structure even for these need to be created, for
|
||
|
* the action_id_rule_name() to work on iterations. */
|
||
| ... | ... | |
|
return act;
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
|
Create a new action performed by a player actor.
|
||
|
**************************************************************************/
|
||
|
static struct action *
|
||
|
player_action_new(action_id id,
|
||
|
enum action_result result)
|
||
|
{
|
||
|
struct action *act = action_new(id, result,
|
||
|
0, 0, FALSE);
|
||
|
return act;
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
|
Returns TRUE iff the specified action ID refers to a valid action.
|
||
|
**************************************************************************/
|
||
| ... | ... | |
|
fc_assert_ret_val(target_tile_arg, NULL);
|
||
|
return target_tile_arg;
|
||
|
case ATK_SELF:
|
||
|
fc_assert_ret_val(actor_unit, NULL);
|
||
|
return unit_tile(actor_unit);
|
||
|
if (actor_unit != nullptr) {
|
||
|
return unit_tile(actor_unit);
|
||
|
}
|
||
|
return nullptr;
|
||
|
case ATK_COUNT:
|
||
|
/* Handled below. */
|
||
|
break;
|
||
| ... | ... | |
|
fc_assert_msg(FALSE, "Bad action target kind %d for action %s",
|
||
|
action_get_target_kind(act), action_rule_name(act));
|
||
|
return NULL;
|
||
|
return nullptr;
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
| ... | ... | |
|
fc_assert_ret_val(target_tile, NULL);
|
||
|
return tile_city(target_tile);
|
||
|
case ATK_SELF:
|
||
|
fc_assert_ret_val(actor_unit, NULL);
|
||
|
fc_assert_ret_val(unit_tile(actor_unit), NULL);
|
||
|
return tile_city(unit_tile(actor_unit));
|
||
|
if (actor_unit != nullptr) {
|
||
|
struct tile *ptile = unit_tile(actor_unit);
|
||
|
if (ptile != nullptr) {
|
||
|
return tile_city(ptile);
|
||
|
}
|
||
|
}
|
||
|
return nullptr;
|
||
|
case ATK_COUNT:
|
||
|
/* Handled below. */
|
||
|
break;
|
||
| ... | ... | |
|
unit_tile(actor_unit));
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
|
Returns TRUE if actor_plr can do wanted_action as far as
|
||
|
action enablers are concerned.
|
||
|
**************************************************************************/
|
||
|
bool is_action_enabled_player(const struct civ_map *nmap,
|
||
|
const action_id wanted_action,
|
||
|
const struct player *actor_plr)
|
||
|
{
|
||
|
return is_action_enabled(nmap, wanted_action,
|
||
|
&(const struct req_context) {
|
||
|
.player = actor_plr,
|
||
|
},
|
||
|
nullptr, nullptr, nullptr);
|
||
|
}
|
||
|
/**********************************************************************//**
|
||
|
Find out if the action is enabled, may be enabled or isn't enabled given
|
||
|
what the player owning the actor knowns.
|
||
| ... | ... | |
|
return "ui_name_user_action_4";
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
fc_assert(!action_id_is_internal(act)); /* Fail always */
|
||
|
break;
|
||
|
case ACTION_COUNT:
|
||
| ... | ... | |
|
return N_("%sGain Veterancy%s");
|
||
|
case ACTION_ESCAPE:
|
||
|
return N_("%sEscape%s");
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
return N_("%sCivil War%s");
|
||
|
case ACTION_COUNT:
|
||
|
fc_assert(act != ACTION_COUNT);
|
||
|
break;
|
||
| ... | ... | |
|
case ACTION_SPY_ESCAPE:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
/* Min range is not ruleset changeable */
|
||
|
return NULL;
|
||
|
case ACTION_NUKE:
|
||
| ... | ... | |
|
case ACTION_SPY_ESCAPE:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
/* Max range is not ruleset changeable */
|
||
|
return NULL;
|
||
|
case ACTION_HELP_WONDER:
|
||
| ... | ... | |
|
case ACTION_SPY_ESCAPE:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
/* Target kind is not ruleset changeable */
|
||
|
return NULL;
|
||
|
case ACTION_NUKE:
|
||
| ... | ... | |
|
case ACTION_SPY_ESCAPE:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
/* Actor consuming always is not ruleset changeable */
|
||
|
return NULL;
|
||
|
case ACTION_FOUND_CITY:
|
||
| ... | ... | |
|
case ACTION_HUT_FRIGHTEN3:
|
||
|
case ACTION_HUT_FRIGHTEN4:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_USER_ACTION1:
|
||
|
case ACTION_USER_ACTION2:
|
||
| ... | ... | |
|
case ACTION_SPY_ESCAPE:
|
||
|
case ACTION_GAIN_VETERANCY:
|
||
|
case ACTION_ESCAPE:
|
||
|
case ACTION_CIVIL_WAR:
|
||
|
case ACTION_USER_ACTION1:
|
||
|
case ACTION_USER_ACTION2:
|
||
|
case ACTION_USER_ACTION3:
|
||
| common/actions.h | ||
|---|---|---|
|
const action_id wanted_action,
|
||
|
const struct unit *actor_unit);
|
||
|
bool is_action_enabled_player(const struct civ_map *nmap,
|
||
|
const action_id wanted_action,
|
||
|
const struct player *actor_plr);
|
||
|
struct act_prob action_prob_vs_city(const struct civ_map *nmap,
|
||
|
const struct unit *actor,
|
||
|
const action_id act_id,
|
||
| common/game.h | ||
|---|---|---|
|
/* Defined in the ruleset. */
|
||
|
/* Game settings & other data. */
|
||
|
struct {
|
||
|
bool civil_war_enabled;
|
||
|
} deprecated;
|
||
|
enum city_names_mode allowed_city_names;
|
||
|
enum plrcolor_mode plrcolormode;
|
||
| common/networking/packets.def | ||
|---|---|---|
|
BOOL year_0_hack;
|
||
|
UINT8 top_cities_count;
|
||
|
UINT16 fragment_count;
|
||
|
BOOL civil_war_enabled;
|
||
|
UINT16 granularity;
|
||
|
WONDER_VISIB small_wonder_visibility;
|
||
|
end
|
||
| data/alien/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = FALSE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/civ1/actions.ruleset | ||
|---|---|---|
|
{ "type", "name", "range", "present"
|
||
|
"UnitTypeFlag", "NoVeteran", "Local", FALSE
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/civ1/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = FALSE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/civ2/actions.ruleset | ||
|---|---|---|
|
{ "type", "name", "range", "present"
|
||
|
"UnitTypeFlag", "NoVeteran", "Local", FALSE
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/civ2/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/civ2civ3/actions.ruleset | ||
|---|---|---|
|
{ "type", "name", "range", "present"
|
||
|
"UnitTypeFlag", "NoVeteran", "Local", FALSE
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/civ2civ3/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = FALSE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/classic/actions.ruleset | ||
|---|---|---|
|
[enabler_gain_veterancy]
|
||
|
action = "Gain Veterancy"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/classic/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/goldkeep/actions.ruleset | ||
|---|---|---|
|
[enabler_gain_veterancy]
|
||
|
action = "Gain Veterancy"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/goldkeep/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/granularity/actions.ruleset | ||
|---|---|---|
|
[enabler_gain_veterancy]
|
||
|
action = "Gain Veterancy"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/granularity/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/multiplayer/actions.ruleset | ||
|---|---|---|
|
[enabler_gain_veterancy]
|
||
|
action = "Gain Veterancy"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/multiplayer/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/sandbox/actions.ruleset | ||
|---|---|---|
|
{ "type", "name", "range", "present"
|
||
|
"UnitTypeFlag", "NoVeteran", "Local", FALSE
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/sandbox/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = FALSE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/stub/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = TRUE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| data/webperimental/actions.ruleset | ||
|---|---|---|
|
[enabler_gain_veterancy]
|
||
|
action = "Gain Veterancy"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
|
[enabler_civil_war]
|
||
|
action = "Civil War"
|
||
|
actor_reqs =
|
||
|
{ "type", "name", "range", "present"
|
||
|
}
|
||
| data/webperimental/game.ruleset | ||
|---|---|---|
|
; due to negative bulbs, if techlossforgiveness allows loss
|
||
|
tech_loss_allow_holes = FALSE
|
||
|
; Whether civil war is possible at all
|
||
|
civil_war_enabled = TRUE
|
||
|
; Comma separated list of things to happen, in addition to death
|
||
|
; of owner, when gameloss unit dies
|
||
|
; "CivilWar" - Part of the empire remains, controlled by a new player
|
||
| gen_headers/enums/actions_enums.def | ||
|---|---|---|
|
# Enabler checks only
|
||
|
ACTION_GAIN_VETERANCY "Gain Veterancy"
|
||
|
ACTION_ESCAPE "Escape"
|
||
|
ACTION_CIVIL_WAR "Civil War"
|
||
|
# User actions
|
||
|
ACTION_USER_ACTION1 "User Action 1"
|
||
| server/plrhand.c | ||
|---|---|---|
|
bool honour_server_option)
|
||
|
{
|
||
|
int n;
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
if (!game.info.civil_war_enabled) {
|
||
|
if (!is_action_enabled_player(nmap, ACTION_CIVIL_WAR, pplayer)) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
n = city_list_size(pplayer->cities);
|
||
|
if (n - (conquering_city?1:0) < GAME_MIN_CIVILWARSIZE) {
|
||
|
if (n - (conquering_city ? 1 : 0) < GAME_MIN_CIVILWARSIZE) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
if (honour_server_option) {
|
||
| server/ruleset/rscompat.c | ||
|---|---|---|
|
requirement_vector_append(&enabler->actor_reqs, e_req);
|
||
|
action_enabler_add(enabler);
|
||
|
if (game.server.deprecated.civil_war_enabled) {
|
||
|
enabler = action_enabler_new();
|
||
|
enabler->action = ACTION_CIVIL_WAR;
|
||
|
action_enabler_add(enabler);
|
||
|
}
|
||
|
/* Upgrade existing effects. Done before new effects are added to prevent
|
||
|
* the new effects from being upgraded by accident. */
|
||
|
iterate_effect_cache(effect_list_compat_cb, info);
|
||
| server/ruleset/ruleload.c | ||
|---|---|---|
|
RS_MIN_FOOD_COST,
|
||
|
RS_MAX_FOOD_COST,
|
||
|
"civstyle.food_cost");
|
||
|
game.info.civil_war_enabled
|
||
|
= secfile_lookup_bool_default(file, TRUE, "civstyle.civil_war_enabled");
|
||
|
if (compat->compat_mode && compat->version < RSFORMAT_3_3) {
|
||
|
game.server.deprecated.civil_war_enabled
|
||
|
= secfile_lookup_bool_default(file, TRUE, "civstyle.civil_war_enabled");
|
||
|
rscompat_civil_war_effects_3_3(file);
|
||
|
} else {
|
||
|
/* Avoid additional Civil War enabler */
|
||
|
game.server.deprecated.civil_war_enabled = FALSE;
|
||
|
}
|
||
|
game.info.base_bribe_cost
|
||
| tools/ruleutil/rulesave.c | ||
|---|---|---|
|
save_default_int(sfile, game.info.food_cost,
|
||
|
RS_DEFAULT_FOOD_COST,
|
||
|
"civstyle.food_cost", nullptr);
|
||
|
save_default_bool(sfile, game.info.civil_war_enabled,
|
||
|
TRUE,
|
||
|
"civstyle.civil_war_enabled", nullptr);
|
||
|
save_default_bool(sfile,
|
||
|
BV_ISSET(action_by_number(ACTION_PARADROP)->sub_results,
|
||
|
ACT_SUB_RES_MAY_EMBARK),
|
||
- « Previous
- 1
- 2
- Next »