Attempt to fix static de-initialization problems.

Some compilers are calling destructors for static objects before other
static objects use them in their destructors.  This patch initializes
static t_interned objects with new and intentionally doesn't call
delete in order to guarrantee their existence throughout the static
de-initialization phase.  It creates a new function
generate_safe_static_const_t_interned for this purpose.  It might
address bug #18666, although I can not duplicate the crash with gcc on
fedora 15.
This commit is contained in:
Thonsew 2011-09-20 21:21:31 +00:00
parent e59dc97260
commit 88b5546118
45 changed files with 1745 additions and 1738 deletions

View file

@ -52,95 +52,6 @@ static lg::log_domain log_config("config");
static lg::log_domain log_ai_testing("ai/testing");
#define LOG_AI_TESTING LOG_STREAM(info, log_ai_testing)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_id("id", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_placement("placement", false);
static const config::t_token z_map("map", false);
static const config::t_token z_recall("recall", false);
static const config::t_token z_leader_passable("leader_passable", false);
static const config::t_token z_side("side", false);
static const config::t_token z_player_id("player_id", false);
static const config::t_token z_faction_from_recruit("faction_from_recruit", false);
static const config::t_token z_animate("animate", false);
static const config::t_token z_prerecall("prerecall", false);
static const config::t_token z_prerecruit("prerecruit", false);
static const config::t_token z_recruit("recruit", false);
static const config::t_token z_checksum("checksum", false);
static const config::t_token z_map_passable("map_passable", false);
static const config::t_token z_leader("leader", false);
static const config::t_token z_leadership("leadership", false);
static const config::t_token z_value("value", false);
static const config::t_token z_not_living("not_living", false);
static const config::t_token z_slow("slow", false);
static const config::t_token z_drains("drains", false);
static const config::t_token z_petrifies("petrifies", false);
static const config::t_token z_poison("poison", false);
static const config::t_token z_berserk("berserk", false);
static const config::t_token z_firststrike("firststrike", false);
static const config::t_token z_plague("plague", false);
static const config::t_token z_null("null", false);
//static const config::t_token z_empty("", false);
static const config::t_token z_type("type", false);
static const config::t_token z_chance_to_hit("chance_to_hit", false);
static const config::t_token z_damage("damage", false);
static const config::t_token z_swarm("swarm", false);
static const config::t_token z_swarm_attacks_min("swarm_attacks_min", false);
static const config::t_token z_swarm_attacks_max("swarm_attacks_max", false);
static const config::t_token z_attacks("attacks", false);
static const config::t_token z_first("first", false);
static const config::t_token z_second("second", false);
static const config::t_token z_name("name", false);
static const config::t_token z_none("none", false);
static const config::t_token z_female("female", false);
static const config::t_token z_attack_end("attack_end", false);
static const config::t_token z_damage_inflicted("damage_inflicted", false);
static const config::t_token z_chance("chance", false);
static const config::t_token z_hits("hits", false);
static const config::t_token z_successful("successful", false);
static const config::t_token z_unsuccessful("unsucessful", false);
static const config::t_token z_poisoned("poisoned", false);
static const config::t_token z_slowed("slowed", false);
static const config::t_token z_petrified("petrified", false);
static const config::t_token z_female_poisoned("female^poisoned", false);
static const config::t_token z_female_slowed("female^slowed", false);
static const config::t_token z_female_petrified("female^petrified", false);
static const config::t_token z_dies("dies", false);
static const config::t_token z_die("die", false);
static const config::t_token z_last_breath("last breath", false);
static const config::t_token z_unit_hit("unit_hit", false);
static const config::t_token z_defender("defender", false);
static const config::t_token z_attacker("attacker", false);
static const config::t_token z_perished("perished", false);
static const config::t_token z_survived("survived", false);
static const config::t_token z_attacker_hits("attacker_hits", false);
static const config::t_token z_attacker_misses("attacker_misses", false);
static const config::t_token z_defender_hits("defender_hits", false);
static const config::t_token z_defender_misses("defender_misses", false);
static const config::t_token z_effect("effect", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_unhealable("unhealable", false);
static const config::t_token z_heals("heals", false);
static const config::t_token z_cured("cured", false);
static const config::t_token z_regenerate("regnerate", false);
static const config::t_token z_advance("advance", false);
static const config::t_token z_post_advance("post_advance", false);
static const config::t_token z_hides("hides", false);
static const config::t_token z_alert("alert", false);
static const config::t_token z_sighted("sighted", false);
static const config::t_token z_moveto("moveto", false);
static const config::t_token z_friends("friends", false);
static const config::t_token z_enemies("enemies", false);
static const config::t_token z_friendphrase("friendphrase", false);
static const config::t_token z_enemyphrase("enemyphrase", false);
static const config::t_token z_hotkey("hotkey", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_attack("attack", false);
}
struct castle_cost_calculator : pathfind::cost_calculator
{
castle_cost_calculator(const gamemap& map) : map_(map)
@ -287,15 +198,24 @@ unit_creator& unit_creator::allow_add_to_recall(bool b)
map_location unit_creator::find_location(const config &cfg, const unit* pass_check)
{
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_placement( generate_safe_static_const_t_interned(n_token::t_token("placement")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_map( generate_safe_static_const_t_interned(n_token::t_token("map")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_leader_passable( generate_safe_static_const_t_interned(n_token::t_token("leader_passable")) );
static const config::t_token & z_map_passable( generate_safe_static_const_t_interned(n_token::t_token("map_passable")) );
static const config::t_token & z_leader( generate_safe_static_const_t_interned(n_token::t_token("leader")) );
DBG_NG << "finding location for unit with id=["<<cfg[z_id]<<"] placement=["<<cfg[z_placement]<<"] x=["<<cfg[z_x]<<"] y=["<<cfg[z_y]<<"] for side " << team_.side() << "\n";
std::vector< std::string > placements = utils::split(cfg[z_placement]);
std::vector< config::t_token > placements = utils::split_attr(cfg[z_placement]);
placements.push_back(z_map);
placements.push_back(z_recall);
foreach(std::string place, placements) {
foreach(config::t_token place, placements) {
map_location loc;
bool pass((place == z_leader_passable) || (place == z_map_passable));
@ -336,12 +256,19 @@ map_location unit_creator::find_location(const config &cfg, const unit* pass_che
void unit_creator::add_unit(const config &cfg)
{
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_player_id( generate_safe_static_const_t_interned(n_token::t_token("player_id")) );
static const config::t_token & z_faction_from_recruit( generate_safe_static_const_t_interned(n_token::t_token("faction_from_recruit")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_animate( generate_safe_static_const_t_interned(n_token::t_token("animate")) );
config temp_cfg(cfg);
temp_cfg[z_side] = team_.side();
temp_cfg.remove_attribute(z_player_id);
temp_cfg.remove_attribute(z_faction_from_recruit);
const std::string& id =(cfg)[z_id];
const config::attribute_value& aid =(cfg)[z_id];
const config::t_token& id = aid.token();
bool animate = temp_cfg[z_animate].to_bool();
temp_cfg.remove_attribute(z_animate);
@ -659,6 +586,12 @@ void place_recruit(const unit &u, const map_location &recruit_location,
bool is_recall, bool show, bool fire_event, bool full_movement,
bool wml_triggered)
{
static const config::t_token & z_prerecall( generate_safe_static_const_t_interned(n_token::t_token("prerecall")) );
static const config::t_token & z_prerecruit( generate_safe_static_const_t_interned(n_token::t_token("prerecruit")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_recruit( generate_safe_static_const_t_interned(n_token::t_token("recruit")) );
static const config::t_token & z_checksum( generate_safe_static_const_t_interned(n_token::t_token("checksum")) );
LOG_NG << "placing new unit on location " << recruit_location << "\n";
assert(resources::units->count(recruit_location) == 0);
@ -758,6 +691,8 @@ void place_recruit(const unit &u, const map_location &recruit_location,
map_location under_leadership(const unit_map& units,
const map_location& loc, int* bonus)
{
static const config::t_token & z_leadership( generate_safe_static_const_t_interned(n_token::t_token("leadership")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
const unit_map::const_iterator un = units.find(loc);
if(un == units.end()) {
@ -1097,6 +1032,23 @@ battle_context_unit_stats::battle_context_unit_stats(const unit &u, const map_lo
swarm_max(0),
plague_type()
{
static const config::t_token & z_not_living( generate_safe_static_const_t_interned(n_token::t_token("not_living")) );
static const config::t_token & z_slow( generate_safe_static_const_t_interned(n_token::t_token("slow")) );
static const config::t_token & z_drains( generate_safe_static_const_t_interned(n_token::t_token("drains")) );
static const config::t_token & z_petrifies( generate_safe_static_const_t_interned(n_token::t_token("petrifies")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
static const config::t_token & z_berserk( generate_safe_static_const_t_interned(n_token::t_token("berserk")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_firststrike( generate_safe_static_const_t_interned(n_token::t_token("firststrike")) );
static const config::t_token & z_plague( generate_safe_static_const_t_interned(n_token::t_token("plague")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_chance_to_hit( generate_safe_static_const_t_interned(n_token::t_token("chance_to_hit")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z_swarm( generate_safe_static_const_t_interned(n_token::t_token("swarm")) );
static const config::t_token & z_swarm_attacks_min( generate_safe_static_const_t_interned(n_token::t_token("swarm_attacks_min")) );
static const config::t_token & z_swarm_attacks_max( generate_safe_static_const_t_interned(n_token::t_token("swarm_attacks_max")) );
static const config::t_token & z_attacks( generate_safe_static_const_t_interned(n_token::t_token("attacks")) );
// Get the current state of the unit.
if (attack_num >= 0) {
weapon = &u.attacks()[attack_num];
@ -1298,6 +1250,12 @@ class attack
void attack::fire_event(const config::t_token& n)
{
static const config::t_token & z_first( generate_safe_static_const_t_interned(n_token::t_token("first")) );
static const config::t_token & z_second( generate_safe_static_const_t_interned(n_token::t_token("second")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_none( generate_safe_static_const_t_interned(n_token::t_token("none")) );
static const config::t_token & z_attack_end( generate_safe_static_const_t_interned(n_token::t_token("attack_end")) );
LOG_NG << "firing " << n << " event\n";
//prepare the event data for weapon filtering
config ev_data;
@ -1470,6 +1428,35 @@ attack::attack(const map_location &attacker, const map_location &defender,
bool attack::perform_hit(bool attacker_turn, statistics::attack_context &stats)
{
static const config::t_token & z_damage_inflicted( generate_safe_static_const_t_interned(n_token::t_token("damage_inflicted")) );
static const config::t_token & z_chance( generate_safe_static_const_t_interned(n_token::t_token("chance")) );
static const config::t_token & z_hits( generate_safe_static_const_t_interned(n_token::t_token("hits")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z_successful( generate_safe_static_const_t_interned(n_token::t_token("successful")) );
static const config::t_token & z_unsuccessful( generate_safe_static_const_t_interned(n_token::t_token("unsuccessful")) );
static const config::t_token & z_dies( generate_safe_static_const_t_interned(n_token::t_token("dies")) );
static const config::t_token & z_unit_hit( generate_safe_static_const_t_interned(n_token::t_token("unit_hit")) );
static const config::t_token & z_defender( generate_safe_static_const_t_interned(n_token::t_token("defender")) );
static const config::t_token & z_attacker( generate_safe_static_const_t_interned(n_token::t_token("attacker")) );
static const config::t_token & z_perished( generate_safe_static_const_t_interned(n_token::t_token("perished")) );
static const config::t_token & z_survived( generate_safe_static_const_t_interned(n_token::t_token("survived")) );
static const config::t_token & z_attacker_hits( generate_safe_static_const_t_interned(n_token::t_token("attacker_hits")) );
static const config::t_token & z_defender_hits( generate_safe_static_const_t_interned(n_token::t_token("defender_hits")) );
static const config::t_token & z_attacker_misses( generate_safe_static_const_t_interned(n_token::t_token("attacker_misses")) );
static const config::t_token & z_defender_misses( generate_safe_static_const_t_interned(n_token::t_token("defender_misses")) );
static const config::t_token & z_attack_end( generate_safe_static_const_t_interned(n_token::t_token("attack_end")) );
static const config::t_token & z_first( generate_safe_static_const_t_interned(n_token::t_token("first")) );
static const config::t_token & z_second( generate_safe_static_const_t_interned(n_token::t_token("second")) );
static const config::t_token & z_last_breath( generate_safe_static_const_t_interned(n_token::t_token("last_breath")) );
static const config::t_token & z_die( generate_safe_static_const_t_interned(n_token::t_token("die")) );
static const config::t_token & z_null( generate_safe_static_const_t_interned(n_token::t_token("null")) );
static const config::t_token & z_effect( generate_safe_static_const_t_interned(n_token::t_token("effect")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_petrified( generate_safe_static_const_t_interned(n_token::t_token("petrified")) );
static const config::t_token & z_none( generate_safe_static_const_t_interned(n_token::t_token("none")) );
unit_info
&attacker = *(attacker_turn ? &a_ : &d_),
&defender = *(attacker_turn ? &d_ : &a_);
@ -1761,6 +1748,9 @@ bool attack::perform_hit(bool attacker_turn, statistics::attack_context &stats)
void attack::perform()
{
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
// Stop the user from issuing any commands while the units are fighting
const events::command_disabler disable_commands;
@ -1863,6 +1853,7 @@ void attack::perform()
defender_strikes_first = (d_stats_->firststrike && ! a_stats_->firststrike);
}
static const config::t_token & z_attack_end( generate_safe_static_const_t_interned(n_token::t_token("attack_end")) );
if (a_.n_attacks_ <= 0 && d_.n_attacks_ <= 0) {
fire_event(z_attack_end);
refresh_bc();
@ -1988,6 +1979,13 @@ struct unit_healing_struct {
void calculate_healing(int side, bool update_display)
{
static const config::t_token & z_unhealable( generate_safe_static_const_t_interned(n_token::t_token("unhealable")) );
static const config::t_token & z_heals( generate_safe_static_const_t_interned(n_token::t_token("heals")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
static const config::t_token & z_cured( generate_safe_static_const_t_interned(n_token::t_token("cured")) );
static const config::t_token & z_slowed( generate_safe_static_const_t_interned(n_token::t_token("slowed")) );
static const config::t_token & z_regenerate( generate_safe_static_const_t_interned(n_token::t_token("regenerate")) );
DBG_NG << "beginning of healing calculations\n";
unit_map &units = *resources::units;
@ -2216,6 +2214,9 @@ unit get_advanced_unit(const unit &u, const std::string& advance_to)
void advance_unit(map_location loc, const std::string &advance_to, const bool &fire_event)
{
static const config::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const config::t_token & z_post_advance( generate_safe_static_const_t_interned(n_token::t_token("post_advance")) );
unit_map::unit_iterator u = resources::units->find(loc);
if(!u.valid()) {
return;
@ -2453,6 +2454,17 @@ size_t move_unit(move_unit_spectator *move_spectator,
{
assert(route.empty() == false);
static const config::t_token & z_hides( generate_safe_static_const_t_interned(n_token::t_token("hides")) );
static const config::t_token & z_alert( generate_safe_static_const_t_interned(n_token::t_token("alert")) );
static const config::t_token & z_sighted( generate_safe_static_const_t_interned(n_token::t_token("sighted")) );
static const config::t_token & z_moveto( generate_safe_static_const_t_interned(n_token::t_token("moveto")) );
static const config::t_token & z_friends( generate_safe_static_const_t_interned(n_token::t_token("friends")) );
static const config::t_token & z_enemies( generate_safe_static_const_t_interned(n_token::t_token("enemies")) );
static const config::t_token & z_friendphrase( generate_safe_static_const_t_interned(n_token::t_token("friendphrase")) );
static const config::t_token & z_enemyphrase( generate_safe_static_const_t_interned(n_token::t_token("enemyphrase")) );
static const config::t_token & z_hotkey( generate_safe_static_const_t_interned(n_token::t_token("hotkey")) );
if (route.size() <= 2 && route.front() == route.back()) {
DBG_NG << "Ignore an unit trying to jump on its hex at " << route.front() << "\n";
}
@ -2502,7 +2514,7 @@ size_t move_unit(move_unit_spectator *move_spectator,
std::vector<map_location>::const_iterator step;
std::string ambushed_string;
static const config::t_token z_skirmisher("skirmisher", false);
static const config::t_token & z_skirmisher(generate_safe_static_const_t_interned(n_token::t_token("skirmisher")) );
for(step = route.begin()+1; step != route.end(); ++step) {
const bool skirmisher = ui->get_ability_bool(z_skirmisher,*step);
const t_translation::t_terrain terrain = map[*step];
@ -2889,6 +2901,7 @@ bool unit_can_move(const unit &u)
void apply_shroud_changes(undo_list &undos, int side)
{
static const config::t_token & z_sighted( generate_safe_static_const_t_interned(n_token::t_token("sighted")) );
team &tm = (*resources::teams)[side - 1];
// No need to do this if the team isn't using fog or shroud.
if (!tm.uses_shroud() && !tm.uses_fog())

View file

@ -57,14 +57,6 @@ static lg::log_domain log_ai("ai/general");
#pragma warning(disable:4250)
#endif
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_chance_to_hit("chance_to_hit", false);
static const config::t_token z_poison("poison", false);
static const config::t_token z_steadfast("steadfast", false);
}
namespace ai {
typedef util::array<map_location,6> adjacent_tiles_array;
@ -108,7 +100,7 @@ int idle_ai::get_recursion_count() const
void idle_ai::play_turn()
{
static const config::t_token z_ai_turn("ai turn", false);
static const config::t_token & z_ai_turn( generate_safe_static_const_t_interned(n_token::t_token("ai turn")) );
game_events::fire(z_ai_turn);
}
@ -366,6 +358,9 @@ int ai_default_recruitment_stage::average_resistance_against(const unit_type& a,
LOG_AI << "average defense of '" << a.id() << "': " << defense << "\n";
int sum = 0, weight_sum = 0;
static const config::t_token & z_chance_to_hit( generate_safe_static_const_t_interned(n_token::t_token("chance_to_hit")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
static const config::t_token & z_steadfast( generate_safe_static_const_t_interned(n_token::t_token("steadfast")) );
// calculation of the average damage taken
bool steadfast = a.has_ability_by_id(z_steadfast);

View file

@ -734,7 +734,7 @@ void manager::play_turn( side_number side ){
/*hack. @todo 1.9 rework via extended event system*/
get_ai_info().recent_attacks.clear();
interface& ai_obj = get_active_ai_for_side(side);
static const config::t_token z_ai_turn("ai turn", false);
static const config::t_token & z_ai_turn( generate_safe_static_const_t_interned(n_token::t_token("ai turn")) );
game_events::fire(z_ai_turn);
raise_turn_started();
ai_obj.new_turn();

View file

@ -41,14 +41,6 @@ static lg::log_domain log_ai_testing_aspect_attacks("ai/aspect/attacks");
#define ERR_AI LOG_STREAM(err, log_ai_testing_aspect_attacks)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_backstab("backstab", false);
static const config::t_token z_slow("slow", false);
static const config::t_token z_value("value", false);
}
aspect_attacks::aspect_attacks(readonly_context &context, const config &cfg, const std::string &id)
: typesafe_aspect<attacks_vector>(context,cfg,id)
, filter_own_()
@ -165,6 +157,10 @@ void aspect_attacks::do_attack_analysis(
unit_map::iterator unit_itor = units_.find(current_unit);
assert(unit_itor != units_.end());
static const config::t_token & z_backstab( generate_safe_static_const_t_interned(n_token::t_token("backstab")) );
static const config::t_token & z_slow( generate_safe_static_const_t_interned(n_token::t_token("slow")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
// See if the unit has the backstab ability.
// Units with backstab will want to try to have a
// friendly unit opposite the position they move to.

View file

@ -43,16 +43,6 @@ static lg::log_domain log_ai_testing_ai_default("ai/ca/testing_ai_default");
#define ERR_AI_TESTING_AI_DEFAULT LOG_STREAM(err, log_ai_testing_ai_default)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_chance_to_hit("chance_to_hit", false);
static const config::t_token z_poison("poison", false);
static const config::t_token z_guardian("guardian", false);
static const config::t_token z_steadfast("steadfast", false);
}
namespace ai {
namespace testing_ai_default {
@ -412,6 +402,10 @@ int recruitment_phase::average_resistance_against(const unit_type& a, const unit
int sum = 0, weight_sum = 0;
static const config::t_token & z_chance_to_hit( generate_safe_static_const_t_interned(n_token::t_token("chance_to_hit")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
static const config::t_token & z_steadfast( generate_safe_static_const_t_interned(n_token::t_token("steadfast")) );
// calculation of the average damage taken
bool steadfast = a.has_ability_by_id(z_steadfast);
bool living = !a.not_living();
@ -1038,6 +1032,8 @@ void get_villages_phase::find_villages(
vulnerability.insert(std::pair<map_location,double>(current_loc,threat));
}
static const config::t_token & z_guardian( generate_safe_static_const_t_interned(n_token::t_token("guardian")) );
const unit_map::const_iterator u = resources::units->find(j->second);
if (u == resources::units->end() || u->get_state(z_guardian)) {
continue;

View file

@ -32,11 +32,6 @@
#include <deque>
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_guardian("guardian", false);
}
namespace ai {
@ -297,6 +292,8 @@ std::pair<map_location,map_location> testing_move_to_targets_phase::choose_move(
return std::pair<map_location,map_location>();
}
static const config::t_token & z_guardian( generate_safe_static_const_t_interned(n_token::t_token("guardian")) );
//guardian units stay put
if (u->get_state(z_guardian)) {
LOG_AI << u->type_id() << " is guardian, staying still\n";

View file

@ -41,14 +41,7 @@
#include <iostream>
#include <map>
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_chance_to_hit("chance_to_hit", false);
static const config::t_token z_poison("poison", false);
static const config::t_token z_guardian("guardian", false);
static const config::t_token z_steadfast("steadfast", false);
}
namespace ai {
@ -292,6 +285,9 @@ static int average_resistance_against(const unit_type& a, const unit_type& b)
}
//LOG_AI << "average defense of '" << a.id() << "': " << defense << "\n";
static const config::t_token & z_chance_to_hit( generate_safe_static_const_t_interned(n_token::t_token("chance_to_hit")) );
static const config::t_token & z_poison( generate_safe_static_const_t_interned(n_token::t_token("poison")) );
static const config::t_token & z_steadfast( generate_safe_static_const_t_interned(n_token::t_token("steadfast")) );
int sum = 0, weight_sum = 0;

View file

@ -24,12 +24,6 @@
#include "resources.hpp"
#include "unit_abilities.hpp"
namespace {
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_damage("damage", false);
}
// Conversion routine for both unscathed and damage change percentage.
static void format_prob(char str_buf[10], double prob)
{
@ -156,6 +150,8 @@ void battle_prediction_pane::get_unit_strings(const battle_context_unit_stats& s
std::stringstream str;
char str_buf[10];
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
// With a weapon.
if(stats.weapon != NULL) {

View file

@ -34,36 +34,6 @@ static lg::log_domain log_engine("engine");
terrain_builder::building_ruleset terrain_builder::building_rules_;
const config* terrain_builder::rules_cfg_ = NULL;
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_invalid_tod("invalid_tod", false);
static const config::t_token z_image("image", false);
static const config::t_token z_layer("layer", false);
static const config::t_token z_base("base", false);
static const config::t_token z_center("center", false);
static const config::t_token z_variant("variant", false);
static const config::t_token z_name("name", false);
static const config::t_token z_variations("variations", false);
static const config::t_token z_tod("tod", false);
static const config::t_token z_random_start("random_start", false);
static const config::t_token z_type("type", false);
static const config::t_token z_has_flag("has_flag", false);
static const config::t_token z_set_no_flag("set_no_flag", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_probability("probability", false);
static const config::t_token z_map("map", false);
static const config::t_token z_tile("tile", false);
static const config::t_token z_loc("loc", false);
static const config::t_token z_pos("pos", false);
static const config::t_token z_set_flag("set_flag", false);
static const config::t_token z_no_flag("no_flag", false);
static const config::t_token z_rotations("rotations", false);
static const config::t_token z_precedence("precedence", false);
static const config::t_token z_terrain_graphics("terrain_graphics", false);
}
terrain_builder::rule_image::rule_image(int layer, int x, int y, bool global_image, int cx, int cy) :
layer(layer),
@ -80,9 +50,12 @@ terrain_builder::tile::tile() :
images(),
images_foreground(),
images_background(),
last_tod(z_invalid_tod),
last_tod(),
sorted_images(false)
{}
{
static const n_token::t_token & z_invalid_tod( generate_safe_static_const_t_interned(n_token::t_token("invalid_tod")) );
last_tod = z_invalid_tod;
}
void terrain_builder::tile::rebuild_cache(const n_token::t_token& tod, logs* log)
{
@ -123,6 +96,7 @@ void terrain_builder::tile::rebuild_cache(const n_token::t_token& tod, logs* log
void terrain_builder::tile::clear()
{
static const config::t_token & z_invalid_tod( generate_safe_static_const_t_interned(n_token::t_token("invalid_tod")) );
flags.clear();
images.clear();
sorted_images = false;
@ -184,7 +158,7 @@ terrain_builder::terrain_builder(const config& level,
tile_map_(map().w(), map().h()),
terrain_by_type_()
{
static const config::t_token z_cterrain("terrain/", false);
static const config::t_token & z_cterrain( generate_safe_static_const_t_interned(n_token::t_token("terrain/")) );
image::precache_file_existence(z_cterrain);
if(building_rules_.empty() && rules_cfg_){
@ -602,6 +576,16 @@ terrain_builder::rule_image_variant::rule_image_variant(const n_token::t_token &
void terrain_builder::add_images_from_config(rule_imagelist& images, const config &cfg, bool global, int dx, int dy)
{
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_layer( generate_safe_static_const_t_interned(n_token::t_token("layer")) );
static const config::t_token & z_base( generate_safe_static_const_t_interned(n_token::t_token("base")) );
static const config::t_token & z_center( generate_safe_static_const_t_interned(n_token::t_token("center")) );
static const config::t_token & z_variant( generate_safe_static_const_t_interned(n_token::t_token("variant")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_variations( generate_safe_static_const_t_interned(n_token::t_token("variations")) );
static const config::t_token & z_tod( generate_safe_static_const_t_interned(n_token::t_token("tod")) );
static const config::t_token & z_random_start( generate_safe_static_const_t_interned(n_token::t_token("random_start")) );
foreach (const config &img, cfg.child_range(z_image))
{
int layer = img[z_layer];
@ -680,6 +664,12 @@ void terrain_builder::add_constraints(terrain_builder::constraint_set &constrain
const map_location& loc, const config& cfg, const config& global_images)
{
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_set_flag( generate_safe_static_const_t_interned(n_token::t_token("set_flag")) );
static const config::t_token & z_has_flag( generate_safe_static_const_t_interned(n_token::t_token("has_flag")) );
static const config::t_token & z_no_flag( generate_safe_static_const_t_interned(n_token::t_token("no_flag")) );
static const config::t_token & z_set_no_flag( generate_safe_static_const_t_interned(n_token::t_token("set_no_flag")) );
terrain_constraint& constraint = add_constraints(constraints, loc,
t_translation::t_match(cfg[z_type], t_translation::WILDCARD), global_images);
@ -787,6 +777,20 @@ void terrain_builder::add_rotated_rules(building_ruleset &rules, building_rule &
void terrain_builder::parse_config(const config &cfg, bool local)
{
static const config::t_token & z_terrain_graphics( generate_safe_static_const_t_interned(n_token::t_token("terrain_graphics")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_probability( generate_safe_static_const_t_interned(n_token::t_token("probability")) );
static const config::t_token & z_map( generate_safe_static_const_t_interned(n_token::t_token("map")) );
static const config::t_token & z_tile( generate_safe_static_const_t_interned(n_token::t_token("tile")) );
static const config::t_token & z_loc( generate_safe_static_const_t_interned(n_token::t_token("loc")) );
static const config::t_token & z_pos( generate_safe_static_const_t_interned(n_token::t_token("pos")) );
static const config::t_token & z_set_flag( generate_safe_static_const_t_interned(n_token::t_token("set_flag")) );
static const config::t_token & z_no_flag( generate_safe_static_const_t_interned(n_token::t_token("no_flag")) );
static const config::t_token & z_has_flag( generate_safe_static_const_t_interned(n_token::t_token("has_flag")) );
static const config::t_token & z_set_no_flag( generate_safe_static_const_t_interned(n_token::t_token("set_no_flag")) );
static const config::t_token & z_rotations( generate_safe_static_const_t_interned(n_token::t_token("rotations")) );
static const config::t_token & z_precedence( generate_safe_static_const_t_interned(n_token::t_token("precedence")) );
log_scope("terrain_builder::parse_config");
// Parses the list of building rules (BRs)
@ -910,6 +914,18 @@ void terrain_builder::parse_config(const config &cfg, bool local)
void terrain_builder::add_off_map_rule(const n_token::t_token& image)
{
static const config::t_token & z_terrain_graphics( generate_safe_static_const_t_interned(n_token::t_token("terrain_graphics")) );
static const config::t_token & z_tile( generate_safe_static_const_t_interned(n_token::t_token("tile")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_layer( generate_safe_static_const_t_interned(n_token::t_token("layer")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_probability( generate_safe_static_const_t_interned(n_token::t_token("probability")) );
static const config::t_token & z_no_flag( generate_safe_static_const_t_interned(n_token::t_token("no_flag")) );
static const config::t_token & z_base( generate_safe_static_const_t_interned(n_token::t_token("base")) );
static const config::t_token & z_set_flag( generate_safe_static_const_t_interned(n_token::t_token("set_flag")) );
// Build a config object
config cfg;

View file

@ -142,6 +142,8 @@ int attack_type_callable::do_compare(const formula_callable* callable) const
variant unit_callable::get_value(const std::string& key) const
{
static const config::t_token & z_not_living( generate_safe_static_const_t_interned(n_token::t_token("not_living")) );
if(key == "x") {
if (loc_==map_location::null_location) {
return variant();
@ -171,7 +173,6 @@ variant unit_callable::get_value(const std::string& key) const
} else if(key == "leader") {
return variant(u_.can_recruit());
} else if(key == "undead") {
static const config::t_token z_not_living("not_living");
return variant(u_.get_state(z_not_living) ? 1 : 0);
} else if(key == "attacks") {
const std::vector<attack_type>& att = u_.attacks();

View file

@ -88,11 +88,11 @@ config::attribute_value &config::attribute_value::operator=(double v)
}
config::attribute_value &config::attribute_value::operator=(const t_token &v) {
static const config::t_token z_empty("", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_true("true", false);
static const config::t_token z_no("no", false);
static const config::t_token z_false("false", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_true( generate_safe_static_const_t_interned(n_token::t_token("true")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const config::t_token & z_false( generate_safe_static_const_t_interned(n_token::t_token("false")) );
if (v == z_empty) {
type_ = EMPTY;
is_bool_ = false; is_int_ = false; is_double_ = false; is_t_string_ = false; is_token_ =false;
@ -117,7 +117,7 @@ config::attribute_value &config::attribute_value::operator=(const t_token &v) {
}
config::attribute_value &config::attribute_value::operator=(const std::string &v) {
static const config::t_token z_empty("", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if (v.empty()) { return *this = z_empty;}
if (v == "yes" || v == "true") return *this = true;
if (v == "no" || v == "false") return *this = false;
@ -161,10 +161,10 @@ bool config::attribute_value::operator==(const config::attribute_value &other) c
}
bool operator==(const config::attribute_value &a, config::t_token const & b) {
static const config::t_token z_yes("yes", false);
static const config::t_token z_true("true", false);
static const config::t_token z_no("no", false);
static const config::t_token z_false("false", false);
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_true( generate_safe_static_const_t_interned(n_token::t_token("true")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const config::t_token & z_false( generate_safe_static_const_t_interned(n_token::t_token("false")) );
// if(a.type_ == a.EMPTY){return false;}
//note: having 4 different acceptable boolean string values has a cost
if ((a.type_ == a.BOOL) || ( a.is_bool_)){
@ -174,11 +174,11 @@ bool operator==(const config::attribute_value &a, config::t_token const & b) {
bool operator==(const config::attribute_value &a, t_string const & b) {
// if(a.type_ == a.EMPTY){return false;}
static const config::t_token z_empty("", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_true("true", false);
static const config::t_token z_no("no", false);
static const config::t_token z_false("false", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_true( generate_safe_static_const_t_interned(n_token::t_token("true")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const config::t_token & z_false( generate_safe_static_const_t_interned(n_token::t_token("false")) );
static const t_string tstring_empty(z_empty)
, tstring_true(z_true), tstring_false(z_false)
, tstring_yes(z_yes), tstring_no(z_no);
@ -219,11 +219,9 @@ double config::attribute_value::to_double(double def) const {
}
t_token const & config::attribute_value::token() const {
static const config::t_token z_empty("", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_true("true", false);
static const config::t_token z_no("no", false);
static const config::t_token z_false("false", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
if ((type_ == TOKEN) || ( is_token_)){ return token_value_; }
switch(type_){
@ -251,9 +249,9 @@ std::string const & config::attribute_value::str() const {
t_string const & config::attribute_value::t_str() const {
static const config::t_token z_empty("", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_no("no", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const t_string tstring_empty(z_empty)
, tstring_yes(z_yes), tstring_no(z_no);
@ -939,14 +937,14 @@ config config::get_diff(const config& c) const
}
void config::get_diff(const config& c, config& res) const {
static const config::t_token z_empty("", false);
static const config::t_token z_index("index", false);
static const t_token z_insert_child("insert_child", false);
static const t_token z_delete_child("delete_child", false);
static const t_token z_change_child("change_child", false);
static const t_token z_insert("insert", false);
static const t_token z_delete("delete", false);
static const t_token z_x("x", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_index( generate_safe_static_const_t_interned(n_token::t_token("index")) );
static const t_token & z_insert_child( generate_safe_static_const_t_interned(n_token::t_token("insert_child")) );
static const t_token & z_delete_child( generate_safe_static_const_t_interned(n_token::t_token("delete_child")) );
static const t_token & z_change_child( generate_safe_static_const_t_interned(n_token::t_token("change_child")) );
static const t_token & z_insert( generate_safe_static_const_t_interned(n_token::t_token("insert")) );
static const t_token & z_delete( generate_safe_static_const_t_interned(n_token::t_token("delete")) );
static const t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
check_valid(c);
check_valid(res);
@ -1055,16 +1053,16 @@ void config::get_diff(const config& c, config& res) const {
void config::apply_diff(const config& diff, bool track /* = false */)
{
static const config::t_token z_index("index", false);
static const t_token z_diff_track_attribute_("diff_track_attribute_", false);
static const t_token z_modified("modified", false);
static const t_token z_insert("insert", false);
static const t_token z_delete("delete", false);
static const t_token z_insert_child("insert_child", false);
static const t_token z_delete_child("delete_child", false);
static const t_token z_change_child("change_child", false);
static const t_token z_deleted("deleted", false);
static const t_token z_new("new", false);
static const config::t_token & z_index( generate_safe_static_const_t_interned(n_token::t_token("index")) );
static const t_token & z_diff_track_attribute_( generate_safe_static_const_t_interned(n_token::t_token("diff_track_attribute_")) );
static const t_token & z_modified( generate_safe_static_const_t_interned(n_token::t_token("modified")) );
static const t_token & z_insert( generate_safe_static_const_t_interned(n_token::t_token("insert")) );
static const t_token & z_delete( generate_safe_static_const_t_interned(n_token::t_token("delete")) );
static const t_token & z_insert_child( generate_safe_static_const_t_interned(n_token::t_token("insert_child")) );
static const t_token & z_delete_child( generate_safe_static_const_t_interned(n_token::t_token("delete_child")) );
static const t_token & z_change_child( generate_safe_static_const_t_interned(n_token::t_token("change_child")) );
static const t_token & z_deleted( generate_safe_static_const_t_interned(n_token::t_token("deleted")) );
static const t_token & z_new( generate_safe_static_const_t_interned(n_token::t_token("new")) );
check_valid(diff);
@ -1128,11 +1126,10 @@ void config::apply_diff(const config& diff, bool track /* = false */)
void config::clear_diff_track(const config& diff)
{
static const t_token z_diff_track_attribute_("diff_track_attribute_", false);
static const t_token z_delete("delete", false);
static const t_token z_index("index", false);
static const t_token z_delete_child("delete_child", false);
static const t_token z_change_child("change_child", false);
static const t_token & z_diff_track_attribute_( generate_safe_static_const_t_interned(n_token::t_token("diff_track_attribute_")) );
static const t_token & z_index( generate_safe_static_const_t_interned(n_token::t_token("index")) );
static const t_token & z_delete_child( generate_safe_static_const_t_interned(n_token::t_token("delete_child")) );
static const t_token & z_change_child( generate_safe_static_const_t_interned(n_token::t_token("change_child")) );
remove_attribute(z_diff_track_attribute_);
foreach (const config &i, diff.child_range(z_delete_child))
@ -1199,7 +1196,7 @@ void config::merge_with(const config& c)
bool config::matches(const config &filter) const
{
static const t_token z_not("not", false);
static const t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
check_valid(filter);

View file

@ -68,16 +68,14 @@ static lg::log_domain log_display("display");
static lg::log_domain log_config("config");
#define ERR_CF LOG_STREAM(err, log_config)
namespace{
static const config::t_token z_advance("advance", false);
static const config::t_token z_post_advance("post_advance", false);
static const config::t_token z_leader("leader", false);
}
namespace dialogs
{
int advance_unit_dialog(const map_location &loc)
{
static const n_token::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
unit_map::iterator u = resources::units->find(loc);
const std::vector<config::t_token>& options = u->advances_to();
@ -213,12 +211,14 @@ bool animate_unit_advancement(const map_location &loc, size_t choice, const bool
if (!resources::screen->video().update_locked()) {
unit_animator animator;
bool with_bars = true;
static const config::t_token z_levelout("levelout", false);
static const config::t_token & z_levelout( generate_safe_static_const_t_interned(n_token::t_token("levelout")) );
animator.add_animation(&*u, z_levelout, u->get_location(), map_location(), 0, with_bars);
animator.start_animations();
animator.wait_for_end();
}
static const n_token::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const n_token::t_token & z_post_advance( generate_safe_static_const_t_interned(n_token::t_token("post_advance")) );
if(choice < options.size()) {
// chosen_unit is not a reference, since the unit may disappear at any moment.
std::string chosen_unit = options[choice];
@ -250,7 +250,7 @@ bool animate_unit_advancement(const map_location &loc, size_t choice, const bool
if (u != resources::units->end() && !resources::screen->video().update_locked()) {
unit_animator animator;
static const config::t_token z_levelin("levelin", false);
static const config::t_token & z_levelin( generate_safe_static_const_t_interned(n_token::t_token("levelin")) );
animator.add_animation(&*u, z_levelin, u->get_location(), map_location(), 0, true);
animator.start_animations();
animator.wait_for_end();
@ -363,6 +363,8 @@ private:
void save_preview_pane::draw_contents()
{
static const n_token::t_token & z_leader( generate_safe_static_const_t_interned(n_token::t_token("leader")) );
if (size_t(index_) >= saves_.size() ){
return; }

View file

@ -22,16 +22,15 @@ namespace wml_interpolation {
typedef n_token::t_token t_token;
typedef std::vector<t_token> t_tokens;
//static const t_token z_empty("", false);
static const t_token z_dollar("$", false);
static const t_token z_bar("|", false);
static const t_token z_dot(".", false);
static const t_token z_lbracket("[", false);
static const t_token z_rbracket("]", false);
static const t_token z_lparen("(", false);
static const t_token z_rparen(")", false);
static const t_token z_single_quote("'", false);
static const t_token z_sharp("#", false);
static const t_token & z_dollar( generate_safe_static_const_t_interned(n_token::t_token("$")) );
static const t_token & z_bar( generate_safe_static_const_t_interned(n_token::t_token("|")) );
static const t_token & z_dot( generate_safe_static_const_t_interned(n_token::t_token(".")) );
static const t_token & z_lbracket( generate_safe_static_const_t_interned(n_token::t_token("[")) );
static const t_token & z_rbracket( generate_safe_static_const_t_interned(n_token::t_token("]")) );
static const t_token & z_lparen( generate_safe_static_const_t_interned(n_token::t_token("(")) );
static const t_token & z_rparen( generate_safe_static_const_t_interned(n_token::t_token(")")) );
static const t_token & z_single_quote( generate_safe_static_const_t_interned(n_token::t_token("'")) );
static const t_token & z_sharp( generate_safe_static_const_t_interned(n_token::t_token("#")) );
template <typename T>
@ -47,7 +46,7 @@ t_tokens const & t_tokenizer::tokenize(T const & in) {
return tokenize(); }
t_tokens const & t_tokenizer::tokenize() {
static const t_token z_empty("", false);
static const t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if(!is_done_){
tokens_.clear();
@ -267,7 +266,7 @@ t_instructions & t_parse::parse(){
}
t_token const & t_parse::peek_next(t_tokens::iterator const & curr_pos ){
static const t_token z_empty("", false);
static const t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
t_tokens::iterator next(curr_pos + 1);
return (next != tokens_.end() ) ? (*next) : z_empty; }
@ -291,7 +290,7 @@ t_tokens::iterator t_parse::do_parse_plain(t_tokens::iterator const & start_pos
curr_pos = do_parse_interp(++curr_pos); }
catch (game::wml_syntax_error & e) {
ERR_INTERP << e.what()<<"\n";
static const config::t_token z_caption(_("Invalid WML found"), false);
static const config::t_token & z_caption( generate_safe_static_const_t_interned(n_token::t_token(_("Invalid WML found"))) );
if(resources::screen) {
resources::screen->add_chat_message(time(NULL), z_caption, 0, e.what(),
events::chat_handler::MESSAGE_PUBLIC, false); }
@ -445,7 +444,7 @@ t_tokens::iterator t_parse::do_parse_formula(t_tokens::iterator const & start_po
int paren_nesting_level = 1;
bool in_string = false, in_comment = false;
static const t_token z_empty("", false);
static const t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const t_operation_ptr op_empty(new t_operation_push(z_empty));
complete_parse_.ops().push_back(op_empty);

View file

@ -179,13 +179,13 @@ namespace {
*/
static void put_wml_message(const n_token::t_token& logger, const std::string& message)
{
static const config::t_token z_err("err", false);
static const config::t_token z_error("error", false);
static const config::t_token z_warn("warn", false);
static const config::t_token z_wrn("wrn", false);
static const config::t_token z_warning("warning", false);
static const config::t_token z_debug("debug", false);
static const config::t_token z_dbg("dbg", false);
static const config::t_token & z_err( generate_safe_static_const_t_interned(n_token::t_token("err")) );
static const config::t_token & z_error( generate_safe_static_const_t_interned(n_token::t_token("error")) );
static const config::t_token & z_warn( generate_safe_static_const_t_interned(n_token::t_token("warn")) );
static const config::t_token & z_wrn( generate_safe_static_const_t_interned(n_token::t_token("wrn")) );
static const config::t_token & z_warning( generate_safe_static_const_t_interned(n_token::t_token("warning")) );
static const config::t_token & z_debug( generate_safe_static_const_t_interned(n_token::t_token("debug")) );
static const config::t_token & z_dbg( generate_safe_static_const_t_interned(n_token::t_token("dbg")) );
if (logger == z_err || logger == z_error) {
ERR_WML << message << "\n";
@ -330,7 +330,7 @@ static static_wml_action_map static_wml_actions;
{ \
wml_func_register_##pname() \
{ \
static const n_token::t_token z_##pname( #pname , false); \
static const config::t_token & z_##pname( generate_safe_static_const_t_interned(n_token::t_token( #pname )) ); \
static_wml_actions[z_##pname] = &wml_func_##pname; } \
}; \
static wml_func_register_##pname wml_func_register_##pname##_aux; \
@ -342,24 +342,24 @@ namespace game_events {
static bool internal_conditional_passed(const vconfig& cond, bool& backwards_compat)
{
static const config::t_token z_have_unit("have_unit", false);
static const config::t_token z_count("count", false);
static const config::t_token z_search_recall_list("search_recall_list", false);
static const config::t_token z_this_unit("this_unit", false);
static const config::t_token z_have_location("have_location", false);
static const config::t_token z_variable("variable", false);
static const config::t_token z_name("name", false);
static const config::t_token z_equals("equals", false);
static const config::t_token z_not_equals("not_equals", false);
static const config::t_token z_numerical_equals("numerical_equals", false);
static const config::t_token z_numerical_not_equals("numerical_not_equals", false);
static const config::t_token z_greater_than("greater_than", false);
static const config::t_token z_less_than("less_than", false);
static const config::t_token z_greater_than_equal_to("greater_than_equal_to", false);
static const config::t_token z_less_than_equal_to("less_than_equal_to", false);
static const config::t_token z_boolean_equals("boolean_equals", false);
static const config::t_token z_boolean_not_equals("boolean_not_equals", false);
static const config::t_token z_contains("contains", false);
static const config::t_token & z_have_unit( generate_safe_static_const_t_interned(n_token::t_token("have_unit")) );
static const config::t_token & z_count( generate_safe_static_const_t_interned(n_token::t_token("count")) );
static const config::t_token & z_search_recall_list( generate_safe_static_const_t_interned(n_token::t_token("search_recall_list")) );
static const config::t_token & z_this_unit( generate_safe_static_const_t_interned(n_token::t_token("this_unit")) );
static const config::t_token & z_have_location( generate_safe_static_const_t_interned(n_token::t_token("have_location")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_equals( generate_safe_static_const_t_interned(n_token::t_token("equals")) );
static const config::t_token & z_not_equals( generate_safe_static_const_t_interned(n_token::t_token("not_equals")) );
static const config::t_token & z_numerical_equals( generate_safe_static_const_t_interned(n_token::t_token("numerical_equals")) );
static const config::t_token & z_numerical_not_equals( generate_safe_static_const_t_interned(n_token::t_token("numerical_not_equals")) );
static const config::t_token & z_greater_than( generate_safe_static_const_t_interned(n_token::t_token("greater_than")) );
static const config::t_token & z_less_than( generate_safe_static_const_t_interned(n_token::t_token("less_than")) );
static const config::t_token & z_greater_than_equal_to( generate_safe_static_const_t_interned(n_token::t_token("greater_than_equal_to")) );
static const config::t_token & z_less_than_equal_to( generate_safe_static_const_t_interned(n_token::t_token("less_than_equal_to")) );
static const config::t_token & z_boolean_equals( generate_safe_static_const_t_interned(n_token::t_token("boolean_equals")) );
static const config::t_token & z_boolean_not_equals( generate_safe_static_const_t_interned(n_token::t_token("boolean_not_equals")) );
static const config::t_token & z_contains( generate_safe_static_const_t_interned(n_token::t_token("contains")) );
static std::vector<std::pair<int,int> > default_counts = utils::parse_ranges("1-99999");
@ -485,10 +485,10 @@ namespace game_events {
bool conditional_passed(const vconfig& cond, bool backwards_compat)
{
static const config::t_token z_backwards_compat("backwards_compat", false);
static const config::t_token z_and("and", false);
static const config::t_token z_or("or", false);
static const config::t_token z_not("not", false);
static const config::t_token & z_backwards_compat( generate_safe_static_const_t_interned(n_token::t_token("backwards_compat")) );
static const config::t_token & z_and( generate_safe_static_const_t_interned(n_token::t_token("and")) );
static const config::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
bool allow_backwards_compat = backwards_compat = backwards_compat &&
cond[z_backwards_compat].to_bool(true);
@ -546,8 +546,8 @@ namespace game_events {
void handle_wml_log_message(const config& cfg)
{
static const config::t_token z_logger("logger", false);
static const config::t_token z_message("message", false);
static const config::t_token & z_logger( generate_safe_static_const_t_interned(n_token::t_token("logger")) );
static const config::t_token & z_message( generate_safe_static_const_t_interned(n_token::t_token("message")) );
const config::attribute_value& logger = cfg[z_logger];
const config::attribute_value& msg = cfg[z_message];
@ -557,7 +557,7 @@ namespace game_events {
void handle_deprecated_message(const config& cfg)
{
static const config::t_token z_message("message", false);
static const config::t_token & z_message( generate_safe_static_const_t_interned(n_token::t_token("message")) );
// Note: no need to translate the string, since only used for deprecated things.
const config::attribute_value& message = cfg[z_message];
@ -566,9 +566,9 @@ namespace game_events {
std::set<int> get_sides_set(const vconfig& cfg, const bool only_ssf, const bool only_side)
{
static const config::t_token z_side("side", false);
static const config::t_token z_filter_side("filter_side", false);
static const config::t_token z_error("error", false);
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_filter_side( generate_safe_static_const_t_interned(n_token::t_token("filter_side")) );
static const config::t_token & z_error( generate_safe_static_const_t_interned(n_token::t_token("error")) );
if(only_ssf) {
side_filter filter(cfg);
@ -618,8 +618,8 @@ namespace {
static map_location cfg_to_loc(const vconfig& cfg,int defaultx = 0, int defaulty = 0)
{
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
int x = cfg[z_x].to_int(defaultx) - 1;
int y = cfg[z_y].to_int(defaulty) - 1;
@ -652,7 +652,7 @@ namespace {
* respects this class's buffering functionality.
*/
void add_event_handler(game_events::event_handler const & new_handler) {
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
if(buffering_) { insert_buffer_.push_back(new_handler); }
@ -675,8 +675,8 @@ namespace {
* buffering functionality.
*/
void remove_event_handler(config::t_token const & id) {
static const config::t_token z_id("id", false);
static const config::t_token z_empty("", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if(id == z_empty) { return; }
if(buffering_) { remove_buffer_.insert(id); }
@ -779,12 +779,12 @@ WML_HANDLER_FUNCTION(place_shroud, /*event_info*/,cfg)
WML_HANDLER_FUNCTION(tunnel, /*event_info*/, cfg)
{
static const config::t_token z_remove("remove", false);
static const config::t_token z_id("id", false);
static const config::t_token z_source("source", false);
static const config::t_token z_target("target", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_bidirectional("bidirectional", false);
static const config::t_token & z_remove( generate_safe_static_const_t_interned(n_token::t_token("remove")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_source( generate_safe_static_const_t_interned(n_token::t_token("source")) );
static const config::t_token & z_target( generate_safe_static_const_t_interned(n_token::t_token("target")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_bidirectional( generate_safe_static_const_t_interned(n_token::t_token("bidirectional")) );
const bool remove = utils::string_bool(cfg[z_remove], false);
if (remove) {
@ -810,10 +810,10 @@ WML_HANDLER_FUNCTION(tunnel, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(teleport, event_info, cfg)
{
static const config::t_token z_filter("filter", false);
static const config::t_token z_check_passability("check_passability", false);
static const config::t_token z_clear_shroud("clear_shroud", false);
static const config::t_token z_animate("animate", false);
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_check_passability( generate_safe_static_const_t_interned(n_token::t_token("check_passability")) );
static const config::t_token & z_clear_shroud( generate_safe_static_const_t_interned(n_token::t_token("clear_shroud")) );
static const config::t_token & z_animate( generate_safe_static_const_t_interned(n_token::t_token("animate")) );
unit_map::iterator u = resources::units->find(event_info.loc1);
@ -869,8 +869,8 @@ WML_HANDLER_FUNCTION(teleport, event_info, cfg)
WML_HANDLER_FUNCTION(volume, /*event_info*/, cfg)
{
static const config::t_token z_music("music", false);
static const config::t_token z_sound("sound", false);
static const config::t_token & z_music( generate_safe_static_const_t_interned(n_token::t_token("music")) );
static const config::t_token & z_sound( generate_safe_static_const_t_interned(n_token::t_token("sound")) );
int vol;
float rel;
@ -898,9 +898,9 @@ WML_HANDLER_FUNCTION(volume, /*event_info*/, cfg)
}
static void color_adjust(const vconfig& cfg) {
static const config::t_token z_red("red", false);
static const config::t_token z_green("green", false);
static const config::t_token z_blue("blue", false);
static const config::t_token & z_red( generate_safe_static_const_t_interned(n_token::t_token("red")) );
static const config::t_token & z_green( generate_safe_static_const_t_interned(n_token::t_token("green")) );
static const config::t_token & z_blue( generate_safe_static_const_t_interned(n_token::t_token("blue")) );
game_display &screen = *resources::screen;
screen.adjust_color_overlay(cfg[z_red], cfg[z_green], cfg[z_blue]);
@ -922,8 +922,8 @@ WML_HANDLER_FUNCTION(colour_adjust, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(scroll, /*event_info*/, cfg)
{
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
game_display &screen = *resources::screen;
screen.scroll(cfg[z_x], cfg[z_y]);
@ -935,9 +935,9 @@ WML_HANDLER_FUNCTION(scroll, /*event_info*/, cfg)
// or if the turn / time-of-day sequence mutates in a scenario.
WML_HANDLER_FUNCTION(store_time_of_day, /*event_info*/, cfg)
{
static const config::t_token z_turn("turn", false);
static const config::t_token z_variable("variable", false);
static const config::t_token z_time_of_day("time_of_day", false);
static const config::t_token & z_turn( generate_safe_static_const_t_interned(n_token::t_token("turn")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_time_of_day( generate_safe_static_const_t_interned(n_token::t_token("time_of_day")) );
const map_location loc = cfg_to_loc(cfg, -999, -999);
int turn = cfg[z_turn];
@ -974,21 +974,21 @@ WML_HANDLER_FUNCTION(modify_ai, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(modify_side, /*event_info*/, cfg)
{
static const config::t_token z_team_name("team_name", false);
static const config::t_token z_user_team_name("user_team_name", false);
static const config::t_token z_controller("controller", false);
static const config::t_token z_recruit("recruit", false);
static const config::t_token z_shroud_data("shroud_data", false);
static const config::t_token z_ai("ai", false);
static const config::t_token z_switch_ai("switch_ai", false);
static const config::t_token z_income("income", false);
static const config::t_token z_gold("gold", false);
static const config::t_token z_shroud("shroud", false);
static const config::t_token z_hidden("hidden", false);
static const config::t_token z_fog("fog", false);
static const config::t_token z_village_gold("village_gold", false);
static const config::t_token z_share_view("share_view", false);
static const config::t_token z_share_maps("share_maps", false);
static const config::t_token & z_team_name( generate_safe_static_const_t_interned(n_token::t_token("team_name")) );
static const config::t_token & z_user_team_name( generate_safe_static_const_t_interned(n_token::t_token("user_team_name")) );
static const config::t_token & z_controller( generate_safe_static_const_t_interned(n_token::t_token("controller")) );
static const config::t_token & z_recruit( generate_safe_static_const_t_interned(n_token::t_token("recruit")) );
static const config::t_token & z_shroud_data( generate_safe_static_const_t_interned(n_token::t_token("shroud_data")) );
static const config::t_token & z_ai( generate_safe_static_const_t_interned(n_token::t_token("ai")) );
static const config::t_token & z_switch_ai( generate_safe_static_const_t_interned(n_token::t_token("switch_ai")) );
static const config::t_token & z_income( generate_safe_static_const_t_interned(n_token::t_token("income")) );
static const config::t_token & z_gold( generate_safe_static_const_t_interned(n_token::t_token("gold")) );
static const config::t_token & z_shroud( generate_safe_static_const_t_interned(n_token::t_token("shroud")) );
static const config::t_token & z_hidden( generate_safe_static_const_t_interned(n_token::t_token("hidden")) );
static const config::t_token & z_fog( generate_safe_static_const_t_interned(n_token::t_token("fog")) );
static const config::t_token & z_village_gold( generate_safe_static_const_t_interned(n_token::t_token("village_gold")) );
static const config::t_token & z_share_view( generate_safe_static_const_t_interned(n_token::t_token("share_view")) );
static const config::t_token & z_share_maps( generate_safe_static_const_t_interned(n_token::t_token("share_maps")) );
std::vector<team> &teams = *resources::teams;
@ -1096,9 +1096,9 @@ WML_HANDLER_FUNCTION(modify_side, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(modify_turns, /*event_info*/, cfg)
{
static const config::t_token z_value("value", false);
static const config::t_token z_add("add", false);
static const config::t_token z_current("current", false);
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
static const config::t_token & z_current( generate_safe_static_const_t_interned(n_token::t_token("current")) );
config::attribute_value const & value = cfg[z_value];
config::attribute_value const & add = cfg[z_add];
@ -1127,16 +1127,16 @@ namespace {
game_display::fake_unit *create_fake_unit(const vconfig& cfg)
{
static const config::t_token z_type("type", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_image_mods("image_mods", false);
static const config::t_token z_side("side", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_effect("effect", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_name("name", false);
static const config::t_token z_image_mod("image_mod", false);
static const config::t_token z_add("add", false);
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_image_mods( generate_safe_static_const_t_interned(n_token::t_token("image_mods")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_effect( generate_safe_static_const_t_interned(n_token::t_token("effect")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_image_mod( generate_safe_static_const_t_interned(n_token::t_token("image_mod")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
config::attribute_value const & type = cfg[z_type];
config::attribute_value const & variation = cfg[z_variation];
@ -1235,8 +1235,8 @@ std::vector<map_location> fake_unit_path(const unit& fake_unit, const std::vecto
// that is just moving for the visual effect
WML_HANDLER_FUNCTION(move_unit_fake, /*event_info*/, cfg)
{
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
util::unique_ptr<unit> dummy_unit(create_fake_unit(cfg));
if(!dummy_unit.get())
@ -1255,10 +1255,10 @@ WML_HANDLER_FUNCTION(move_unit_fake, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(move_units_fake, /*event_info*/, cfg)
{
static const config::t_token z_fake_unit("fake_unit", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_skip_steps("skip_steps", false);
static const config::t_token & z_fake_unit( generate_safe_static_const_t_interned(n_token::t_token("fake_unit")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_skip_steps( generate_safe_static_const_t_interned(n_token::t_token("skip_steps")) );
LOG_NG << "Processing [move_units_fake]\n";
@ -1319,30 +1319,30 @@ WML_HANDLER_FUNCTION(move_units_fake, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(set_variable, /*event_info*/, cfg)
{
static const config::t_token z_empty("", false);
static const config::t_token z_name("name", false);
static const config::t_token z_literal("literal", false);
static const config::t_token z_value("value", false);
static const config::t_token z_to_variable("to_variable", false);
static const config::t_token z_add("add", false);
static const config::t_token z_sub("sub", false);
static const config::t_token z_multiply("multiply", false);
static const config::t_token z_divide("divide", false);
static const config::t_token z_modulo("modulo", false);
static const config::t_token z_round("round", false);
static const config::t_token z_ceil("ceil", false);
static const config::t_token z_floor("floor", false);
static const config::t_token z_ipart("ipart", false);
static const config::t_token z_fpart("fpart", false);
static const config::t_token z_string_length("string_length", false);
static const config::t_token z_time("time", false);
static const config::t_token z_stamp("stamp", false);
static const config::t_token z_rand("rand", false);
static const config::t_token z_join("join", false);
static const config::t_token z_variable("variable", false);
static const config::t_token z_separator("separator", false);
static const config::t_token z_key("key", false);
static const config::t_token z_remove_empty("remove_empty", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_literal( generate_safe_static_const_t_interned(n_token::t_token("literal")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_to_variable( generate_safe_static_const_t_interned(n_token::t_token("to_variable")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
static const config::t_token & z_sub( generate_safe_static_const_t_interned(n_token::t_token("sub")) );
static const config::t_token & z_multiply( generate_safe_static_const_t_interned(n_token::t_token("multiply")) );
static const config::t_token & z_divide( generate_safe_static_const_t_interned(n_token::t_token("divide")) );
static const config::t_token & z_modulo( generate_safe_static_const_t_interned(n_token::t_token("modulo")) );
static const config::t_token & z_round( generate_safe_static_const_t_interned(n_token::t_token("round")) );
static const config::t_token & z_ceil( generate_safe_static_const_t_interned(n_token::t_token("ceil")) );
static const config::t_token & z_floor( generate_safe_static_const_t_interned(n_token::t_token("floor")) );
static const config::t_token & z_ipart( generate_safe_static_const_t_interned(n_token::t_token("ipart")) );
static const config::t_token & z_fpart( generate_safe_static_const_t_interned(n_token::t_token("fpart")) );
static const config::t_token & z_string_length( generate_safe_static_const_t_interned(n_token::t_token("string_length")) );
static const config::t_token & z_time( generate_safe_static_const_t_interned(n_token::t_token("time")) );
static const config::t_token & z_stamp( generate_safe_static_const_t_interned(n_token::t_token("stamp")) );
static const config::t_token & z_rand( generate_safe_static_const_t_interned(n_token::t_token("rand")) );
static const config::t_token & z_join( generate_safe_static_const_t_interned(n_token::t_token("join")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_separator( generate_safe_static_const_t_interned(n_token::t_token("separator")) );
static const config::t_token & z_key( generate_safe_static_const_t_interned(n_token::t_token("key")) );
static const config::t_token & z_remove_empty( generate_safe_static_const_t_interned(n_token::t_token("remove_empty")) );
game_state *state_of_game = resources::state_of_game;
@ -1564,21 +1564,21 @@ WML_HANDLER_FUNCTION(set_variable, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(set_variables, /*event_info*/, cfg)
{
static const config::t_token z_name("name", false);
static const config::t_token z_mode("mode", false);
static const config::t_token z_extend("extend", false);
static const config::t_token z_append("append", false);
static const config::t_token z_merge("merge", false);
static const config::t_token z_insert("insert", false);
static const config::t_token z_value("value", false);
static const config::t_token z_literal("literal", false);
static const config::t_token z_split("split", false);
static const config::t_token z_to_variable("to_variable", false);
static const config::t_token z_list("list", false);
static const config::t_token z_separator("separator", false);
static const config::t_token z_key("key", false);
static const config::t_token z_remove_empty("remove_empty", false);
static const config::t_token z_replace("replace", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_mode( generate_safe_static_const_t_interned(n_token::t_token("mode")) );
static const config::t_token & z_extend( generate_safe_static_const_t_interned(n_token::t_token("extend")) );
static const config::t_token & z_append( generate_safe_static_const_t_interned(n_token::t_token("append")) );
static const config::t_token & z_merge( generate_safe_static_const_t_interned(n_token::t_token("merge")) );
static const config::t_token & z_insert( generate_safe_static_const_t_interned(n_token::t_token("insert")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_literal( generate_safe_static_const_t_interned(n_token::t_token("literal")) );
static const config::t_token & z_split( generate_safe_static_const_t_interned(n_token::t_token("split")) );
static const config::t_token & z_to_variable( generate_safe_static_const_t_interned(n_token::t_token("to_variable")) );
static const config::t_token & z_list( generate_safe_static_const_t_interned(n_token::t_token("list")) );
static const config::t_token & z_separator( generate_safe_static_const_t_interned(n_token::t_token("separator")) );
static const config::t_token & z_key( generate_safe_static_const_t_interned(n_token::t_token("key")) );
static const config::t_token & z_remove_empty( generate_safe_static_const_t_interned(n_token::t_token("remove_empty")) );
static const config::t_token & z_replace( generate_safe_static_const_t_interned(n_token::t_token("replace")) );
const config::attribute_value & name = cfg[z_name];
variable_info dest(name, true, variable_info::TYPE_CONTAINER);
@ -1701,10 +1701,10 @@ WML_HANDLER_FUNCTION(set_variables, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(role, /*event_info*/, cfg)
{
static const config::t_token z_role("role", false);
static const config::t_token z_type("type", false);
static const config::t_token z_side("side", false);
static const config::t_token z_this_unit("this_unit", false);
static const config::t_token & z_role( generate_safe_static_const_t_interned(n_token::t_token("role")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_this_unit( generate_safe_static_const_t_interned(n_token::t_token("this_unit")) );
bool found = false;
@ -1781,7 +1781,7 @@ WML_HANDLER_FUNCTION(sound_source, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(remove_sound_source, /*event_info*/, cfg)
{
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
resources::soundsources->remove(cfg[z_id]);
}
@ -1814,8 +1814,8 @@ void change_terrain(const map_location &loc, const t_translation::t_terrain &t,
// Creating a mask of the terrain
WML_HANDLER_FUNCTION(terrain_mask, /*event_info*/, cfg)
{
static const config::t_token z_mask("mask", false);
static const config::t_token z_border("border", false);
static const config::t_token & z_mask( generate_safe_static_const_t_interned(n_token::t_token("mask")) );
static const config::t_token & z_border( generate_safe_static_const_t_interned(n_token::t_token("border")) );
map_location loc = cfg_to_loc(cfg, 1, 1);
@ -1850,10 +1850,10 @@ static bool try_add_unit_to_recall_list(const map_location& loc, const unit& u)
// If we should spawn a new unit on the map somewhere
WML_HANDLER_FUNCTION(unit, /*event_info*/, cfg)
{
static const config::t_token z_to_variable("to_variable", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_side("side", false);
static const config::t_token & z_to_variable( generate_safe_static_const_t_interned(n_token::t_token("to_variable")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
config parsed_cfg = cfg.get_parsed_config();
@ -1897,13 +1897,13 @@ WML_HANDLER_FUNCTION(unit, /*event_info*/, cfg)
// If we should recall units that match a certain description
WML_HANDLER_FUNCTION(recall, /*event_info*/, cfg)
{
static const config::t_token z_x("x", false);
static const config::t_token z_recall("recall", false);
static const config::t_token z_y("y", false);
static const config::t_token z_this_unit("this_unit", false);
static const config::t_token z_check_passability("check_passability", false);
static const config::t_token z_show("show", false);
static const config::t_token z_fire_event("fire_event", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_this_unit( generate_safe_static_const_t_interned(n_token::t_token("this_unit")) );
static const config::t_token & z_check_passability( generate_safe_static_const_t_interned(n_token::t_token("check_passability")) );
static const config::t_token & z_show( generate_safe_static_const_t_interned(n_token::t_token("show")) );
static const config::t_token & z_fire_event( generate_safe_static_const_t_interned(n_token::t_token("fire_event")) );
LOG_NG << "recalling unit...\n";
bool unit_recalled = false;
@ -1958,16 +1958,16 @@ WML_HANDLER_FUNCTION(recall, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(object, event_info, cfg)
{
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_id("id", false);
static const config::t_token z_name("name", false);
static const config::t_token z_then("then", false);
static const config::t_token z_object("object", false);
static const config::t_token z_cannot_use_message("cannot_use_message", false);
static const config::t_token z_else("else", false);
static const config::t_token z_silent("silent", false);
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_then( generate_safe_static_const_t_interned(n_token::t_token("then")) );
static const config::t_token & z_object( generate_safe_static_const_t_interned(n_token::t_token("object")) );
static const config::t_token & z_cannot_use_message( generate_safe_static_const_t_interned(n_token::t_token("cannot_use_message")) );
static const config::t_token & z_else( generate_safe_static_const_t_interned(n_token::t_token("else")) );
static const config::t_token & z_silent( generate_safe_static_const_t_interned(n_token::t_token("silent")) );
const vconfig filter = cfg.child(z_filter);
@ -2035,12 +2035,12 @@ WML_HANDLER_FUNCTION(object, event_info, cfg)
WML_HANDLER_FUNCTION(print, /*event_info*/, cfg)
{
static const config::t_token z_text("text", false);
static const config::t_token z_size("size", false);
static const config::t_token z_duration("duration", false);
static const config::t_token z_red("red", false);
static const config::t_token z_green("green", false);
static const config::t_token z_blue("blue", false);
static const config::t_token & z_text( generate_safe_static_const_t_interned(n_token::t_token("text")) );
static const config::t_token & z_size( generate_safe_static_const_t_interned(n_token::t_token("size")) );
static const config::t_token & z_duration( generate_safe_static_const_t_interned(n_token::t_token("duration")) );
static const config::t_token & z_red( generate_safe_static_const_t_interned(n_token::t_token("red")) );
static const config::t_token & z_green( generate_safe_static_const_t_interned(n_token::t_token("green")) );
static const config::t_token & z_blue( generate_safe_static_const_t_interned(n_token::t_token("blue")) );
// Remove any old message.
if (floating_label)
@ -2115,15 +2115,15 @@ typedef boost::scoped_ptr<recursion_preventer> recursion_preventer_ptr;
WML_HANDLER_FUNCTION(kill, event_info, cfg)
{
static const config::t_token z_secondary_unit("secondary_unit", false);
static const config::t_token z_fire_event("fire_event", false);
static const config::t_token z_die("die", false);
static const config::t_token z_last_breath("last breath", false);
static const config::t_token z_animate("animate", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_recall("recall", false);
static const config::t_token z_this_unit("this_unit", false);
static const config::t_token & z_secondary_unit( generate_safe_static_const_t_interned(n_token::t_token("secondary_unit")) );
static const config::t_token & z_fire_event( generate_safe_static_const_t_interned(n_token::t_token("fire_event")) );
static const config::t_token & z_die( generate_safe_static_const_t_interned(n_token::t_token("die")) );
static const config::t_token & z_last_breath( generate_safe_static_const_t_interned(n_token::t_token("last breath")) );
static const config::t_token & z_animate( generate_safe_static_const_t_interned(n_token::t_token("animate")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_this_unit( generate_safe_static_const_t_interned(n_token::t_token("this_unit")) );
bool secondary_unit = cfg.has_child(z_secondary_unit);
game_events::entity_location killer_loc(map_location(0, 0));
@ -2246,13 +2246,13 @@ WML_HANDLER_FUNCTION(set_menu_item, /*event_info*/, cfg)
[/command]
[/set_menu_item]
*/
static const config::t_token z_id("id", false);
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token z_needs_select("needs_select", false);
static const config::t_token z_show_if("show_if", false);
static const config::t_token z_filter_location("filter_location", false);
static const config::t_token z_command("command", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_needs_select( generate_safe_static_const_t_interned(n_token::t_token("needs_select")) );
static const config::t_token & z_show_if( generate_safe_static_const_t_interned(n_token::t_token("show_if")) );
static const config::t_token & z_filter_location( generate_safe_static_const_t_interned(n_token::t_token("filter_location")) );
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
config::attribute_value const & id = cfg[z_id];
wml_menu_item*& mref = resources::state_of_game->wml_menu_items[id];
@ -2292,7 +2292,7 @@ struct unstore_unit_advance_choice: mp_sync::user_choice
virtual config query_user() const
{
static const config::t_token z_value("value", false);
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
int selected;
if (use_dialog) {
@ -2309,7 +2309,7 @@ struct unstore_unit_advance_choice: mp_sync::user_choice
virtual config random_choice(rand_rng::simple_rng &rng) const
{
static const config::t_token z_value("value", false);
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
config cfg;
cfg[z_value] = rng.get_next_random() % nb_options;
@ -2320,19 +2320,19 @@ struct unstore_unit_advance_choice: mp_sync::user_choice
// Unit serialization to variables
WML_HANDLER_FUNCTION(unstore_unit, /*event_info*/, cfg)
{
static const config::t_token z_variable("variable", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_advance("advance", false);
static const config::t_token z_find_vacant("find_vacant", false);
static const config::t_token z_check_passability("check_passability", false);
static const config::t_token z_text("text", false);
static const config::t_token z_red("red", false);
static const config::t_token z_green("green", false);
static const config::t_token z_blue("blue", false);
static const config::t_token z_choose("choose", false);
static const config::t_token z_value("value", false);
static const config::t_token z_fire_event("fire_event", false);
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const config::t_token & z_find_vacant( generate_safe_static_const_t_interned(n_token::t_token("find_vacant")) );
static const config::t_token & z_check_passability( generate_safe_static_const_t_interned(n_token::t_token("check_passability")) );
static const config::t_token & z_text( generate_safe_static_const_t_interned(n_token::t_token("text")) );
static const config::t_token & z_red( generate_safe_static_const_t_interned(n_token::t_token("red")) );
static const config::t_token & z_green( generate_safe_static_const_t_interned(n_token::t_token("green")) );
static const config::t_token & z_blue( generate_safe_static_const_t_interned(n_token::t_token("blue")) );
static const config::t_token & z_choose( generate_safe_static_const_t_interned(n_token::t_token("choose")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_fire_event( generate_safe_static_const_t_interned(n_token::t_token("fire_event")) );
const config &var = resources::state_of_game->get_variable_cfg(cfg[z_variable]);
@ -2449,10 +2449,10 @@ WML_HANDLER_FUNCTION(unstore_unit, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(store_starting_location, /*event_info*/, cfg)
{
static const config::t_token z_variable("variable", false);
static const config::t_token z_location("location", false);
static const config::t_token z_side("side", false);
static const config::t_token z_owner_side("owner_side", false);
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_location( generate_safe_static_const_t_interned(n_token::t_token("location")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_owner_side( generate_safe_static_const_t_interned(n_token::t_token("owner_side")) );
config::attribute_value variable = cfg[z_variable];
if (variable.empty()) {
@ -2479,10 +2479,10 @@ WML_HANDLER_FUNCTION(store_starting_location, /*event_info*/, cfg)
*/
WML_HANDLER_FUNCTION(store_villages, /*event_info*/, cfg)
{
static const config::t_token z_store_villages("store_villages", false);
static const config::t_token z_variable("variable", false);
static const config::t_token z_location("location", false);
static const config::t_token z_owner_side("owner_side", false);
static const config::t_token & z_store_villages( generate_safe_static_const_t_interned(n_token::t_token("store_villages")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
static const config::t_token & z_location( generate_safe_static_const_t_interned(n_token::t_token("location")) );
static const config::t_token & z_owner_side( generate_safe_static_const_t_interned(n_token::t_token("owner_side")) );
log_scope(z_store_villages);
config::attribute_value variable = cfg[z_variable];
@ -2515,21 +2515,21 @@ WML_HANDLER_FUNCTION(end_turn, /*event_info*/, /*cfg*/)
WML_HANDLER_FUNCTION(endlevel, /*event_info*/, cfg)
{
static const config::t_token z_next_scenario("next_scenario", false);
static const config::t_token z_end_text("end_text", false);
static const config::t_token z_end_text_duration("end_text_duration", false);
static const config::t_token z_result("result", false);
static const config::t_token z_victory("victory", false);
static const config::t_token z_defeat("defeat", false);
static const config::t_token z_music("music", false);
static const config::t_token z_carryover_report("carryover_report", false);
static const config::t_token z_save("save", false);
static const config::t_token z_replay_save("replay_save", false);
static const config::t_token z_linger_mode("linger_mode", false);
static const config::t_token z_reveal_map("reveal_map", false);
static const config::t_token z_bonus("bonus", false);
static const config::t_token z_carryover_percentage("carryover_percentage", false);
static const config::t_token z_carryover_add("carryover_add", false);
static const config::t_token & z_next_scenario( generate_safe_static_const_t_interned(n_token::t_token("next_scenario")) );
static const config::t_token & z_end_text( generate_safe_static_const_t_interned(n_token::t_token("end_text")) );
static const config::t_token & z_end_text_duration( generate_safe_static_const_t_interned(n_token::t_token("end_text_duration")) );
static const config::t_token & z_result( generate_safe_static_const_t_interned(n_token::t_token("result")) );
static const config::t_token & z_victory( generate_safe_static_const_t_interned(n_token::t_token("victory")) );
static const config::t_token & z_defeat( generate_safe_static_const_t_interned(n_token::t_token("defeat")) );
static const config::t_token & z_music( generate_safe_static_const_t_interned(n_token::t_token("music")) );
static const config::t_token & z_carryover_report( generate_safe_static_const_t_interned(n_token::t_token("carryover_report")) );
static const config::t_token & z_save( generate_safe_static_const_t_interned(n_token::t_token("save")) );
static const config::t_token & z_replay_save( generate_safe_static_const_t_interned(n_token::t_token("replay_save")) );
static const config::t_token & z_linger_mode( generate_safe_static_const_t_interned(n_token::t_token("linger_mode")) );
static const config::t_token & z_reveal_map( generate_safe_static_const_t_interned(n_token::t_token("reveal_map")) );
static const config::t_token & z_bonus( generate_safe_static_const_t_interned(n_token::t_token("bonus")) );
static const config::t_token & z_carryover_percentage( generate_safe_static_const_t_interned(n_token::t_token("carryover_percentage")) );
static const config::t_token & z_carryover_add( generate_safe_static_const_t_interned(n_token::t_token("carryover_add")) );
game_state *state_of_game = resources::state_of_game;
unit_map *units = resources::units;
@ -2591,7 +2591,7 @@ WML_HANDLER_FUNCTION(endlevel, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(redraw, /*event_info*/, cfg)
{
static const config::t_token z_side("side", false);
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
game_display &screen = *resources::screen;
@ -2627,16 +2627,16 @@ WML_HANDLER_FUNCTION(label, /*event_info*/, cfg)
WML_HANDLER_FUNCTION(heal_unit, event_info, cfg)
{
static const config::t_token z_filter_second("filter_second", false);
static const config::t_token z_heals("heals", false);
static const config::t_token z_amount("amount", false);
static const config::t_token z_moves("moves", false);
static const config::t_token z_restore_attacks("restore_attacks", false);
static const config::t_token z_restore_statuses("restore_statuses", false);
static const config::t_token z_animate("animate", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_full("full", false);
static const config::t_token z_heal_amount("heal_amount", false);
static const config::t_token & z_filter_second( generate_safe_static_const_t_interned(n_token::t_token("filter_second")) );
static const config::t_token & z_heals( generate_safe_static_const_t_interned(n_token::t_token("heals")) );
static const config::t_token & z_amount( generate_safe_static_const_t_interned(n_token::t_token("amount")) );
static const config::t_token & z_moves( generate_safe_static_const_t_interned(n_token::t_token("moves")) );
static const config::t_token & z_restore_attacks( generate_safe_static_const_t_interned(n_token::t_token("restore_attacks")) );
static const config::t_token & z_restore_statuses( generate_safe_static_const_t_interned(n_token::t_token("restore_statuses")) );
static const config::t_token & z_animate( generate_safe_static_const_t_interned(n_token::t_token("animate")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_full( generate_safe_static_const_t_interned(n_token::t_token("full")) );
static const config::t_token & z_heal_amount( generate_safe_static_const_t_interned(n_token::t_token("heal_amount")) );
unit_map* units = resources::units;
@ -2717,7 +2717,7 @@ WML_HANDLER_FUNCTION(allow_undo,/*event_info*/,/*cfg*/)
WML_HANDLER_FUNCTION(open_help, /*event_info*/, cfg)
{
static const config::t_token z_topic("topic", false);
static const config::t_token & z_topic( generate_safe_static_const_t_interned(n_token::t_token("topic")) );
game_display &screen = *resources::screen;
config::attribute_value topic_id = cfg[z_topic];
@ -2739,10 +2739,10 @@ unit_map::iterator handle_speaker(
const vconfig& cfg,
bool scroll)
{
static const config::t_token z_speaker("speaker", false);
static const config::t_token z_unit("unit", false);
static const config::t_token z_second_unit("second_unit", false);
static const config::t_token z_narrator("narrator", false);
static const config::t_token & z_speaker( generate_safe_static_const_t_interned(n_token::t_token("speaker")) );
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
static const config::t_token & z_second_unit( generate_safe_static_const_t_interned(n_token::t_token("second_unit")) );
static const config::t_token & z_narrator( generate_safe_static_const_t_interned(n_token::t_token("narrator")) );
unit_map *units = resources::units;
game_display &screen = *resources::screen;
@ -2792,7 +2792,7 @@ unit_map::iterator handle_speaker(
*/
config::t_token get_image(const vconfig& cfg, unit_map::iterator speaker)
{
static const config::t_token z_image("image", false);
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
config::attribute_value image = cfg[z_image];
if (image.empty() && speaker != resources::units->end())
@ -2817,7 +2817,7 @@ config::t_token get_image(const vconfig& cfg, unit_map::iterator speaker)
*/
config::t_token get_caption(const vconfig& cfg, unit_map::iterator speaker)
{
static const config::t_token z_caption("caption", false);
static const config::t_token & z_caption( generate_safe_static_const_t_interned(n_token::t_token("caption")) );
config::attribute_value caption = cfg[z_caption];
if (caption.empty() && speaker != resources::units->end()) {
@ -2847,11 +2847,11 @@ struct message_user_choice : mp_sync::user_choice
virtual config query_user() const
{
static const config::t_token z_label("label", false);
static const config::t_token z_text("text", false);
static const config::t_token z_max_length("max_length", false);
static const config::t_token z_message("message", false);
static const config::t_token z_value("value", false);
static const config::t_token & z_label( generate_safe_static_const_t_interned(n_token::t_token("label")) );
static const config::t_token & z_text( generate_safe_static_const_t_interned(n_token::t_token("text")) );
static const config::t_token & z_max_length( generate_safe_static_const_t_interned(n_token::t_token("max_length")) );
static const config::t_token & z_message( generate_safe_static_const_t_interned(n_token::t_token("message")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
std::string image = (*get_image(cfg, speaker));
config::t_token const & caption = get_caption(cfg, speaker);
@ -2911,20 +2911,20 @@ struct message_user_choice : mp_sync::user_choice
// Display a message dialog
WML_HANDLER_FUNCTION(message, event_info, cfg)
{
static const config::t_token z_option("option", false);
static const config::t_token z_text_input("text_input", false);
static const config::t_token z_side_for("side_for", false);
static const config::t_token z_scroll("scroll", false);
static const config::t_token z_speaker("speaker", false);
static const config::t_token z_narrator("narrator", false);
static const config::t_token z_message("message", false);
static const config::t_token z_show_if("show_if", false);
static const config::t_token z_command("command", false);
static const config::t_token z_sound("sound", false);
static const config::t_token z_input("input", false);
static const config::t_token z_value("value", false);
static const config::t_token z_text("text", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_option( generate_safe_static_const_t_interned(n_token::t_token("option")) );
static const config::t_token & z_text_input( generate_safe_static_const_t_interned(n_token::t_token("text_input")) );
static const config::t_token & z_side_for( generate_safe_static_const_t_interned(n_token::t_token("side_for")) );
static const config::t_token & z_scroll( generate_safe_static_const_t_interned(n_token::t_token("scroll")) );
static const config::t_token & z_speaker( generate_safe_static_const_t_interned(n_token::t_token("speaker")) );
static const config::t_token & z_narrator( generate_safe_static_const_t_interned(n_token::t_token("narrator")) );
static const config::t_token & z_message( generate_safe_static_const_t_interned(n_token::t_token("message")) );
static const config::t_token & z_show_if( generate_safe_static_const_t_interned(n_token::t_token("show_if")) );
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
static const config::t_token & z_sound( generate_safe_static_const_t_interned(n_token::t_token("sound")) );
static const config::t_token & z_input( generate_safe_static_const_t_interned(n_token::t_token("input")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_text( generate_safe_static_const_t_interned(n_token::t_token("text")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
// Check if there is any input to be made, if not the message may be skipped
const vconfig::child_list menu_items = cfg.get_children(z_option);
@ -3064,9 +3064,9 @@ WML_HANDLER_FUNCTION(message, event_info, cfg)
// Adding/removing new time_areas dynamically with Standard Location Filters.
WML_HANDLER_FUNCTION(time_area, /*event_info*/, cfg)
{
static const config::t_token z_time_area("time_area", false);
static const config::t_token z_remove("remove", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_time_area( generate_safe_static_const_t_interned(n_token::t_token("time_area")) );
static const config::t_token & z_remove( generate_safe_static_const_t_interned(n_token::t_token("remove")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
log_scope(z_time_area);
@ -3103,7 +3103,7 @@ WML_HANDLER_FUNCTION(time_area, /*event_info*/, cfg)
//Replacing the current time of day schedule
WML_HANDLER_FUNCTION(replace_schedule, /*event_info*/, cfg)
{
static const config::t_token z_time("time", false);
static const config::t_token & z_time( generate_safe_static_const_t_interned(n_token::t_token("time")) );
if(cfg.get_children(z_time).empty()) {
ERR_NG << "attempted to to replace ToD schedule with empty schedule\n";
@ -3127,9 +3127,9 @@ WML_HANDLER_FUNCTION(disallow_end_turn, /*event_info*/, /*cfg*/)
// Adding new events
WML_HANDLER_FUNCTION(event, /*event_info*/, cfg)
{
static const config::t_token z_remove("remove", false);
static const config::t_token z_id("id", false);
static const config::t_token z_delayed_variable_substitution("delayed_variable_substitution", false);
static const config::t_token & z_remove( generate_safe_static_const_t_interned(n_token::t_token("remove")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_delayed_variable_substitution( generate_safe_static_const_t_interned(n_token::t_token("delayed_variable_substitution")) );
if (cfg[z_remove].to_bool(false)) {
event_handlers.remove_event_handler(cfg[z_id].token());
@ -3143,9 +3143,9 @@ WML_HANDLER_FUNCTION(event, /*event_info*/, cfg)
// Experimental map replace
WML_HANDLER_FUNCTION(replace_map, /*event_info*/, cfg)
{
static const config::t_token z_map("map", false);
static const config::t_token z_expand("expand", false);
static const config::t_token z_shrink("shrink", false);
static const config::t_token & z_map( generate_safe_static_const_t_interned(n_token::t_token("map")) );
static const config::t_token & z_expand( generate_safe_static_const_t_interned(n_token::t_token("expand")) );
static const config::t_token & z_shrink( generate_safe_static_const_t_interned(n_token::t_token("shrink")) );
gamemap *game_map = resources::game_map;
gamemap map(*game_map);
@ -3213,9 +3213,9 @@ static void commit_new_handlers() {
event_handlers.commit_buffer();
}
static void commit_wmi_commands() {
static const config::t_token z_name("name", false);
static const config::t_token z_first_time_only("first_time_only", false);
static const config::t_token z_allow_undo("allow_undo", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_first_time_only( generate_safe_static_const_t_interned(n_token::t_token("first_time_only")) );
static const config::t_token & z_allow_undo( generate_safe_static_const_t_interned(n_token::t_token("allow_undo")) );
// Commit WML Menu Item command changes
while(wmi_command_changes.size() > 0) {
@ -3251,19 +3251,19 @@ static void commit_wmi_commands() {
static bool process_event(game_events::event_handler& handler, const game_events::queued_event& ev)
{
static const config::t_token z_unit("unit", false);
static const config::t_token z_second_unit("second_unit", false);
static const config::t_token z_weapon("weapon", false);
static const config::t_token z_first("first", false);
static const config::t_token z_second_weapon("second_weapon", false);
static const config::t_token z_second("second", false);
static const config::t_token z_filter_condition("filter_condition", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_filter_side("filter_side", false);
static const config::t_token z_filter_attack("filter_attack", false);
static const config::t_token z_filter_second("filter_second", false);
static const config::t_token z_filter_second_attack("filter_second_attack", false);
static const config::t_token z_select("select", false);
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
static const config::t_token & z_second_unit( generate_safe_static_const_t_interned(n_token::t_token("second_unit")) );
static const config::t_token & z_weapon( generate_safe_static_const_t_interned(n_token::t_token("weapon")) );
static const config::t_token & z_first( generate_safe_static_const_t_interned(n_token::t_token("first")) );
static const config::t_token & z_second_weapon( generate_safe_static_const_t_interned(n_token::t_token("second_weapon")) );
static const config::t_token & z_second( generate_safe_static_const_t_interned(n_token::t_token("second")) );
static const config::t_token & z_filter_condition( generate_safe_static_const_t_interned(n_token::t_token("filter_condition")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_filter_side( generate_safe_static_const_t_interned(n_token::t_token("filter_side")) );
static const config::t_token & z_filter_attack( generate_safe_static_const_t_interned(n_token::t_token("filter_attack")) );
static const config::t_token & z_filter_second( generate_safe_static_const_t_interned(n_token::t_token("filter_second")) );
static const config::t_token & z_filter_second_attack( generate_safe_static_const_t_interned(n_token::t_token("filter_second_attack")) );
static const config::t_token & z_select( generate_safe_static_const_t_interned(n_token::t_token("select")) );
if(handler.disabled())
return false;
@ -3383,7 +3383,7 @@ namespace game_events {
void event_handler::handle_event(const game_events::queued_event& event_info)
{
static const config::t_token z_name("name", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
if (first_time_only_)
{
@ -3398,7 +3398,7 @@ namespace game_events {
}
void handle_event_commands(const game_events::queued_event& event_info, const vconfig &cfg) {
static const config::t_token z_command("command", false);
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
resources::lua_kernel->run_wml_action(z_command, cfg, event_info);
}
@ -3420,7 +3420,7 @@ namespace game_events {
bool event_handler::matches_name(const config::t_token &tname) const
{
static const config::t_token z_name("name", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
std::string const & name(tname);
const config::attribute_value& t_my_names = cfg_[z_name];
@ -3483,9 +3483,9 @@ namespace game_events {
bool matches_special_filter(const config &cfg, const vconfig& filter)
{
static const config::t_token z_and("and", false);
static const config::t_token z_or("or", false);
static const config::t_token z_not("not", false);
static const config::t_token & z_and( generate_safe_static_const_t_interned(n_token::t_token("and")) );
static const config::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
if (!cfg) {
WRN_NG << "attempt to filter attack for an event with no attack data.\n";
@ -3533,9 +3533,9 @@ namespace game_events {
manager::manager(const config& cfg)
: variable_manager()
{
static const config::t_token z_event("event", false);
static const config::t_token z_unit_wml_ids("unit_wml_ids", false);
static const config::t_token z_used_items("used_items", false);
static const config::t_token & z_event( generate_safe_static_const_t_interned(n_token::t_token("event")) );
static const config::t_token & z_unit_wml_ids( generate_safe_static_const_t_interned(n_token::t_token("unit_wml_ids")) );
static const config::t_token & z_used_items( generate_safe_static_const_t_interned(n_token::t_token("used_items")) );
assert(!manager_running);
foreach (const config &ev, cfg.child_range(z_event)) {
@ -3574,9 +3574,9 @@ namespace game_events {
void write_events(config& cfg)
{
static const config::t_token z_event("event", false);
static const config::t_token z_used_items("used_items", false);
static const config::t_token z_unit_wml_ids("unit_wml_ids", false);
static const config::t_token & z_event( generate_safe_static_const_t_interned(n_token::t_token("event")) );
static const config::t_token & z_used_items( generate_safe_static_const_t_interned(n_token::t_token("used_items")) );
static const config::t_token & z_unit_wml_ids( generate_safe_static_const_t_interned(n_token::t_token("unit_wml_ids")) );
assert(manager_running);
foreach (const game_events::event_handler &eh, event_handlers) {
@ -3671,10 +3671,10 @@ bool fire(const n_token::t_token& event,
bool pump()
{
static const config::t_token z_x1("x1", false);
static const config::t_token z_y1("y1", false);
static const config::t_token z_x2("x2", false);
static const config::t_token z_y2("y2", false);
static const config::t_token & z_x1( generate_safe_static_const_t_interned(n_token::t_token("x1")) );
static const config::t_token & z_y1( generate_safe_static_const_t_interned(n_token::t_token("y1")) );
static const config::t_token & z_x2( generate_safe_static_const_t_interned(n_token::t_token("x2")) );
static const config::t_token & z_y2( generate_safe_static_const_t_interned(n_token::t_token("y2")) );
assert(manager_running);
if(!events_init())

View file

@ -61,6 +61,7 @@ static lg::log_domain log_engine_tc("engine/team_construction");
#define LOG_NG_TC LOG_STREAM(info, log_engine_tc)
#define DBG_NG_TC LOG_STREAM(debug, log_engine_tc)
namespace {
DEFAULT_TOKEN_BODY(z_NORMAL_default, "NORMAL");
DEFAULT_TOKEN_BODY(z_label_default, "label")
DEFAULT_TOKEN_BODY(z_parent_default, "parent")
@ -77,6 +78,7 @@ DEFAULT_TOKEN_BODY(z_completion_default, "completion")
DEFAULT_TOKEN_BODY(z_end_text_default, "end_text")
DEFAULT_TOKEN_BODY(z_end_text_duration_default, "end_text_duration")
DEFAULT_TOKEN_BODY(z_difficulty_default, "difficulty")
}
game_classification::game_classification():
savegame_config(),
@ -138,21 +140,21 @@ game_classification::game_classification(const game_classification& gc):
config game_classification::to_config() const
{
static const config::t_token z_label("label", false);
static const config::t_token z_parent("parent", false);
static const config::t_token z_version("version", false);
static const config::t_token z_campaign_type("campaign_type", false);
static const config::t_token z_campaign_define("campaign_define", false);
static const config::t_token z_campaign_extra_defines("campaign_extra_defines", false);
static const config::t_token z_campaign("campaign", false);
static const config::t_token z_history("history", false);
static const config::t_token z_abbrev("abbrev", false);
static const config::t_token z_scenario("scenario", false);
static const config::t_token z_next_scenario("next_scenario", false);
static const config::t_token z_completion("completion", false);
static const config::t_token z_end_text("end_text", false);
static const config::t_token z_end_text_duration("end_text_duration", false);
static const config::t_token z_difficulty("difficulty", false);
static const config::t_token & z_label( generate_safe_static_const_t_interned(n_token::t_token("label")) );
static const config::t_token & z_parent( generate_safe_static_const_t_interned(n_token::t_token("parent")) );
static const config::t_token & z_version( generate_safe_static_const_t_interned(n_token::t_token("version")) );
static const config::t_token & z_campaign_type( generate_safe_static_const_t_interned(n_token::t_token("campaign_type")) );
static const config::t_token & z_campaign_define( generate_safe_static_const_t_interned(n_token::t_token("campaign_define")) );
static const config::t_token & z_campaign_extra_defines( generate_safe_static_const_t_interned(n_token::t_token("campaign_extra_defines")) );
static const config::t_token & z_campaign( generate_safe_static_const_t_interned(n_token::t_token("campaign")) );
static const config::t_token & z_history( generate_safe_static_const_t_interned(n_token::t_token("history")) );
static const config::t_token & z_abbrev( generate_safe_static_const_t_interned(n_token::t_token("abbrev")) );
static const config::t_token & z_scenario( generate_safe_static_const_t_interned(n_token::t_token("scenario")) );
static const config::t_token & z_next_scenario( generate_safe_static_const_t_interned(n_token::t_token("next_scenario")) );
static const config::t_token & z_completion( generate_safe_static_const_t_interned(n_token::t_token("completion")) );
static const config::t_token & z_end_text( generate_safe_static_const_t_interned(n_token::t_token("end_text")) );
static const config::t_token & z_end_text_duration( generate_safe_static_const_t_interned(n_token::t_token("end_text_duration")) );
static const config::t_token & z_difficulty( generate_safe_static_const_t_interned(n_token::t_token("difficulty")) );
config cfg;
@ -194,18 +196,18 @@ game_state::game_state() :
void write_players(game_state& gamestate, config& cfg, const bool use_snapshot, const bool merge_side)
{
static const config::t_token z_player("player", false);
static const config::t_token z_side("side", false);
static const config::t_token z_save_id("save_id", false);
static const config::t_token z_id("id", false);
static const config::t_token z_gold("gold", false);
static const config::t_token z_gold_add("gold_add", false);
static const config::t_token z_previous_recruits("previous_recruits", false);
static const config::t_token z_can_recruit("can_recruit", false);
static const config::t_token z_name("name", false);
static const config::t_token z_current_player("current_player", false);
static const config::t_token z_color("color", false);
static const config::t_token z_unit("unit", false);
static const config::t_token & z_player( generate_safe_static_const_t_interned(n_token::t_token("player")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_save_id( generate_safe_static_const_t_interned(n_token::t_token("save_id")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_gold( generate_safe_static_const_t_interned(n_token::t_token("gold")) );
static const config::t_token & z_gold_add( generate_safe_static_const_t_interned(n_token::t_token("gold_add")) );
static const config::t_token & z_previous_recruits( generate_safe_static_const_t_interned(n_token::t_token("previous_recruits")) );
static const config::t_token & z_can_recruit( generate_safe_static_const_t_interned(n_token::t_token("can_recruit")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_current_player( generate_safe_static_const_t_interned(n_token::t_token("current_player")) );
static const config::t_token & z_color( generate_safe_static_const_t_interned(n_token::t_token("color")) );
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
// If there is already a player config available it means we are loading
// from a savegame. Don't do anything then, the information is already there
@ -303,17 +305,17 @@ game_state::game_state(const config& cfg, bool show_replay) :
phase_(INITIAL),
can_end_turn_(true)
{
static const config::t_token z_next_underlying_unit_id("next_underlying_unit_id", false);
static const config::t_token z_read_game("read_game", false);
static const config::t_token z_snapshot("snapshot", false);
static const config::t_token z_replay_start("replay_start", false);
static const config::t_token z_random_calls("random_calls", false);
static const config::t_token z_can_end_turn("can_end_turn", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_menu_item("menu_item", false);
static const config::t_token z_replay("replay", false);
static const config::t_token z_player("player", false);
static const config::t_token z_statistics("statistics", false);
static const config::t_token & z_next_underlying_unit_id( generate_safe_static_const_t_interned(n_token::t_token("next_underlying_unit_id")) );
static const config::t_token & z_read_game( generate_safe_static_const_t_interned(n_token::t_token("read_game")) );
static const config::t_token & z_snapshot( generate_safe_static_const_t_interned(n_token::t_token("snapshot")) );
static const config::t_token & z_replay_start( generate_safe_static_const_t_interned(n_token::t_token("replay_start")) );
static const config::t_token & z_random_calls( generate_safe_static_const_t_interned(n_token::t_token("random_calls")) );
static const config::t_token & z_can_end_turn( generate_safe_static_const_t_interned(n_token::t_token("can_end_turn")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_menu_item( generate_safe_static_const_t_interned(n_token::t_token("menu_item")) );
static const config::t_token & z_replay( generate_safe_static_const_t_interned(n_token::t_token("replay")) );
static const config::t_token & z_player( generate_safe_static_const_t_interned(n_token::t_token("player")) );
static const config::t_token & z_statistics( generate_safe_static_const_t_interned(n_token::t_token("statistics")) );
n_unit::id_manager::instance().set_save_id(cfg[z_next_underlying_unit_id]);
log_scope(z_read_game);
@ -381,34 +383,34 @@ game_state::game_state(const config& cfg, bool show_replay) :
void game_state::write_snapshot(config& cfg) const
{
static const config::t_token z_write_game("write_game", false);
static const config::t_token z_label("label", false);
static const config::t_token z_history("history", false);
static const config::t_token z_abbrev("abbrev", false);
static const config::t_token z_version("version", false);
static const config::t_token z_scenario("scenario", false);
static const config::t_token z_next_scenario("next_scenario", false);
static const config::t_token z_completion("completion", false);
static const config::t_token z_campaign("campaign", false);
static const config::t_token z_campaign_type("campaign_type", false);
static const config::t_token z_difficulty("difficulty", false);
static const config::t_token z_campaign_define("campaign_define", false);
static const config::t_token z_campaign_extra_defines("campaign_extra_defines", false);
static const config::t_token z_next_underlying_unit_id("next_underlying_unit_id", false);
static const config::t_token z_can_end_turn("can_end_turn", false);
static const config::t_token z_random_seed("random_seed", false);
static const config::t_token z_random_calls("random_calls", false);
static const config::t_token z_end_text("end_text", false);
static const config::t_token z_end_text_duration("end_text_duration", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_id("id", false);
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token z_needs_select("needs_select", false);
static const config::t_token z_show_if("show_if", false);
static const config::t_token z_filter_location("filter_location", false);
static const config::t_token z_command("command", false);
static const config::t_token z_menu_item("menu_item", false);
static const config::t_token & z_write_game( generate_safe_static_const_t_interned(n_token::t_token("write_game")) );
static const config::t_token & z_label( generate_safe_static_const_t_interned(n_token::t_token("label")) );
static const config::t_token & z_history( generate_safe_static_const_t_interned(n_token::t_token("history")) );
static const config::t_token & z_abbrev( generate_safe_static_const_t_interned(n_token::t_token("abbrev")) );
static const config::t_token & z_version( generate_safe_static_const_t_interned(n_token::t_token("version")) );
static const config::t_token & z_scenario( generate_safe_static_const_t_interned(n_token::t_token("scenario")) );
static const config::t_token & z_next_scenario( generate_safe_static_const_t_interned(n_token::t_token("next_scenario")) );
static const config::t_token & z_completion( generate_safe_static_const_t_interned(n_token::t_token("completion")) );
static const config::t_token & z_campaign( generate_safe_static_const_t_interned(n_token::t_token("campaign")) );
static const config::t_token & z_campaign_type( generate_safe_static_const_t_interned(n_token::t_token("campaign_type")) );
static const config::t_token & z_difficulty( generate_safe_static_const_t_interned(n_token::t_token("difficulty")) );
static const config::t_token & z_campaign_define( generate_safe_static_const_t_interned(n_token::t_token("campaign_define")) );
static const config::t_token & z_campaign_extra_defines( generate_safe_static_const_t_interned(n_token::t_token("campaign_extra_defines")) );
static const config::t_token & z_next_underlying_unit_id( generate_safe_static_const_t_interned(n_token::t_token("next_underlying_unit_id")) );
static const config::t_token & z_can_end_turn( generate_safe_static_const_t_interned(n_token::t_token("can_end_turn")) );
static const config::t_token & z_random_seed( generate_safe_static_const_t_interned(n_token::t_token("random_seed")) );
static const config::t_token & z_random_calls( generate_safe_static_const_t_interned(n_token::t_token("random_calls")) );
static const config::t_token & z_end_text( generate_safe_static_const_t_interned(n_token::t_token("end_text")) );
static const config::t_token & z_end_text_duration( generate_safe_static_const_t_interned(n_token::t_token("end_text_duration")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_needs_select( generate_safe_static_const_t_interned(n_token::t_token("needs_select")) );
static const config::t_token & z_show_if( generate_safe_static_const_t_interned(n_token::t_token("show_if")) );
static const config::t_token & z_filter_location( generate_safe_static_const_t_interned(n_token::t_token("filter_location")) );
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
static const config::t_token & z_menu_item( generate_safe_static_const_t_interned(n_token::t_token("menu_item")) );
log_scope(z_write_game);
cfg[z_label] = classification_.label;
@ -457,32 +459,32 @@ void game_state::write_snapshot(config& cfg) const
void extract_summary_from_config(config& cfg_save, config& cfg_summary)
{
static const config::t_token z_snapshot("snapshot", false);
static const config::t_token z_replay_start("replay_start", false);
static const config::t_token z_replay("replay", false);
static const config::t_token z_side("side", false);
static const config::t_token z_label("label", false);
static const config::t_token z_parent("parent", false);
static const config::t_token z_campaign_type("campaign_type", false);
static const config::t_token z_scenario("scenario", false);
static const config::t_token z_campaign("campaign", false);
static const config::t_token z_difficulty("difficulty", false);
static const config::t_token z_version("version", false);
static const config::t_token z_corrupt("corrupt", false);
static const config::t_token z_turn("turn", false);
static const config::t_token z_turn_at("turn_at", false);
static const config::t_token z_turns("turns", false);
static const config::t_token z_controller("controller", false);
static const config::t_token z_human("human", false);
static const config::t_token z_shroud("shroud", false);
static const config::t_token z_canrecruit("canrecruit", false);
static const config::t_token z_id("id", false);
static const config::t_token z_image("image", false);
static const config::t_token z_unit("unit", false);
static const config::t_token z_leader("leader", false);
static const config::t_token z_leader_image("leader_image", false);
static const config::t_token z_map_data("map_data", false);
static const config::t_token z_yes("yes", false);
static const config::t_token & z_snapshot( generate_safe_static_const_t_interned(n_token::t_token("snapshot")) );
static const config::t_token & z_replay_start( generate_safe_static_const_t_interned(n_token::t_token("replay_start")) );
static const config::t_token & z_replay( generate_safe_static_const_t_interned(n_token::t_token("replay")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_label( generate_safe_static_const_t_interned(n_token::t_token("label")) );
static const config::t_token & z_parent( generate_safe_static_const_t_interned(n_token::t_token("parent")) );
static const config::t_token & z_campaign_type( generate_safe_static_const_t_interned(n_token::t_token("campaign_type")) );
static const config::t_token & z_scenario( generate_safe_static_const_t_interned(n_token::t_token("scenario")) );
static const config::t_token & z_campaign( generate_safe_static_const_t_interned(n_token::t_token("campaign")) );
static const config::t_token & z_difficulty( generate_safe_static_const_t_interned(n_token::t_token("difficulty")) );
static const config::t_token & z_version( generate_safe_static_const_t_interned(n_token::t_token("version")) );
static const config::t_token & z_corrupt( generate_safe_static_const_t_interned(n_token::t_token("corrupt")) );
static const config::t_token & z_turn( generate_safe_static_const_t_interned(n_token::t_token("turn")) );
static const config::t_token & z_turn_at( generate_safe_static_const_t_interned(n_token::t_token("turn_at")) );
static const config::t_token & z_turns( generate_safe_static_const_t_interned(n_token::t_token("turns")) );
static const config::t_token & z_controller( generate_safe_static_const_t_interned(n_token::t_token("controller")) );
static const config::t_token & z_human( generate_safe_static_const_t_interned(n_token::t_token("human")) );
static const config::t_token & z_shroud( generate_safe_static_const_t_interned(n_token::t_token("shroud")) );
static const config::t_token & z_canrecruit( generate_safe_static_const_t_interned(n_token::t_token("canrecruit")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
static const config::t_token & z_leader( generate_safe_static_const_t_interned(n_token::t_token("leader")) );
static const config::t_token & z_leader_image( generate_safe_static_const_t_interned(n_token::t_token("leader_image")) );
static const config::t_token & z_map_data( generate_safe_static_const_t_interned(n_token::t_token("map_data")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
const config &cfg_snapshot = cfg_save.child(z_snapshot);
const config &cfg_replay_start = cfg_save.child(z_replay_start);
@ -733,7 +735,7 @@ void game_state::build_team_stage_two(team_builder_ptr tb_ptr)
void game_state::set_menu_items(const config::const_child_itors &menu_items)
{
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
clear_wmi(wml_menu_items);
foreach (const config &item, menu_items)
@ -750,22 +752,22 @@ void game_state::set_menu_items(const config::const_child_itors &menu_items)
void game_state::write_config(config_writer& out, bool write_variables) const
{
static const config::t_token z_multiplayer("multiplayer", false);
static const config::t_token z_random_seed("random_seed", false);
static const config::t_token z_random_calls("random_calls", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_menu_item("menu_item", false);
static const config::t_token z_id("id", false);
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token z_needs_select("needs_select", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_no("no", false);
static const config::t_token z_show_if("show_if", false);
static const config::t_token z_filter_location("filter_location", false);
static const config::t_token z_command("command", false);
static const config::t_token z_replay("replay", false);
static const config::t_token z_replay_start("replay_start", false);
static const config::t_token & z_multiplayer( generate_safe_static_const_t_interned(n_token::t_token("multiplayer")) );
static const config::t_token & z_random_seed( generate_safe_static_const_t_interned(n_token::t_token("random_seed")) );
static const config::t_token & z_random_calls( generate_safe_static_const_t_interned(n_token::t_token("random_calls")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_menu_item( generate_safe_static_const_t_interned(n_token::t_token("menu_item")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_needs_select( generate_safe_static_const_t_interned(n_token::t_token("needs_select")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const config::t_token & z_show_if( generate_safe_static_const_t_interned(n_token::t_token("show_if")) );
static const config::t_token & z_filter_location( generate_safe_static_const_t_interned(n_token::t_token("filter_location")) );
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
static const config::t_token & z_replay( generate_safe_static_const_t_interned(n_token::t_token("replay")) );
static const config::t_token & z_replay_start( generate_safe_static_const_t_interned(n_token::t_token("replay_start")) );
out.write(classification_.to_config());
if (classification_.campaign_type == z_multiplayer)
@ -815,12 +817,12 @@ wml_menu_item::wml_menu_item(const std::string& id, const config* cfg) :
temp << ' ' << id;
}
name = config::t_token(temp.str());
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token z_needs_select("needs_select", false);
static const config::t_token z_show_if("show_if", false);
static const config::t_token z_filter_location("filter_location", false);
static const config::t_token z_command("command", false);
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_needs_select( generate_safe_static_const_t_interned(n_token::t_token("needs_select")) );
static const config::t_token & z_show_if( generate_safe_static_const_t_interned(n_token::t_token("show_if")) );
static const config::t_token & z_filter_location( generate_safe_static_const_t_interned(n_token::t_token("filter_location")) );
static const config::t_token & z_command( generate_safe_static_const_t_interned(n_token::t_token("command")) );
if(cfg != NULL) {
image = (*cfg)[z_image].str();

View file

@ -42,9 +42,6 @@ static lg::log_domain log_lobby("lobby");
#define SCOPE_LB log_scope2(log_lobby, __func__)
namespace{
static const config::t_token z_diff_track_attribute_("diff_track_attribute_", false);
}
lobby_info::lobby_info(const config& game_config)
: game_config_(game_config)
, gamelist_()
@ -89,6 +86,7 @@ std::string dump_games_map(const lobby_info::game_info_map& games)
std::string dump_games_config(const config& gamelist)
{
static const config::t_token & z_diff_track_attribute_( generate_safe_static_const_t_interned(n_token::t_token("diff_track_attribute_")) );
std::stringstream ss;
foreach (const config& c, gamelist.child_range("game")) {
ss << "g" << c["id"] << "(" << c["name"] << ") " << c[z_diff_track_attribute_] << " ";
@ -118,6 +116,7 @@ void lobby_info::process_gamelist(const config &data)
bool lobby_info::process_gamelist_diff(const config &data)
{
static const config::t_token & z_diff_track_attribute_( generate_safe_static_const_t_interned(n_token::t_token("diff_track_attribute_")) );
SCOPE_LB;
if (!gamelist_initialized_) return false;
DBG_LB << "prediff " << dump_games_config(gamelist_.child("gamelist"));

View file

@ -182,8 +182,8 @@ std::string menu_handler::get_title_suffix(int side_num)
void menu_handler::objectives(int side_num)
{
static const config::t_token z__from_interface("_from_interface", false);
static const config::t_token z_show_objectives("show_objectives", false);
static const config::t_token & z__from_interface( generate_safe_static_const_t_interned(n_token::t_token("_from_interface")) );
static const config::t_token & z_show_objectives( generate_safe_static_const_t_interned(n_token::t_token("show_objectives")) );
config cfg;
cfg["side"] = str_cast(side_num);

View file

@ -614,7 +614,7 @@ void mouse_handler::select_hex(const map_location& hex, const bool browse) {
if (!browse && !commands_disabled && u->side() == gui().viewing_side()) {
sound::play_UI_sound("select-unit.wav");
u->set_selecting();
static const config::t_token z_select("select", false);
static const config::t_token & z_select( generate_safe_static_const_t_interned(n_token::t_token("select")) );
game_events::fire(z_select, hex);
}

View file

@ -272,7 +272,7 @@ void play_controller::init(CVideo& video){
init_managers();
// add era events for MP game
if (const config &era_cfg = level_.child("era")) {
static const config::t_token z_era_events("era_events", false);
static const config::t_token & z_era_events( generate_safe_static_const_t_interned(n_token::t_token("era_events")) );
game_events::add_events(era_cfg.child_range("event"), z_era_events);
}
@ -509,7 +509,7 @@ void play_controller::fire_prestart(bool execute)
// Run initialization scripts, even if loading from a snapshot.
resources::state_of_game->set_phase(game_state::PRELOAD);
resources::lua_kernel->initialize();
static const config::t_token z_preload("preload", false);
static const config::t_token & z_preload( generate_safe_static_const_t_interned(n_token::t_token("preload")) );
game_events::fire(z_preload);
// pre-start events must be executed before any GUI operation,
@ -517,7 +517,7 @@ void play_controller::fire_prestart(bool execute)
if (execute){
update_locker lock_display(gui_->video());
resources::state_of_game->set_phase(game_state::PRESTART);
static const config::t_token z_prestart("prestart", false);
static const config::t_token & z_prestart( generate_safe_static_const_t_interned(n_token::t_token("prestart")) );
game_events::fire(z_prestart);
check_end_level();
// prestart event may modify start turn with WML, reflect any changes.
@ -528,7 +528,7 @@ void play_controller::fire_prestart(bool execute)
void play_controller::fire_start(bool execute){
if(execute) {
resources::state_of_game->set_phase(game_state::START);
static const config::t_token z_start("start", false);
static const config::t_token & z_start( generate_safe_static_const_t_interned(n_token::t_token("start")) );
game_events::fire(z_start);
check_end_level();
// start event may modify start turn with WML, reflect any changes.
@ -591,13 +591,13 @@ void play_controller::do_init_side(const unsigned int team_index, bool is_replay
if (!loading_game_) {
if(it_is_a_new_turn_)
{
static const config::t_token z_new_turn("new turn", false);
static const config::t_token & z_new_turn( generate_safe_static_const_t_interned(n_token::t_token("new turn")) );
game_events::fire(config::t_token("turn " + turn_num));
game_events::fire(z_new_turn);
it_is_a_new_turn_ = false;
}
static const config::t_token z_side_turn("side turn", false);
static const config::t_token & z_side_turn( generate_safe_static_const_t_interned(n_token::t_token("side turn")) );
game_events::fire(z_side_turn);
game_events::fire(config::t_token("side " + side_num + " turn"));
game_events::fire(config::t_token("side turn " + turn_num));
@ -636,7 +636,7 @@ void play_controller::do_init_side(const unsigned int team_index, bool is_replay
}
if (!loading_game_) {
static const config::t_token z_turn_refresh("turn refresh", false);
static const config::t_token & z_turn_refresh( generate_safe_static_const_t_interned(n_token::t_token("turn refresh")) );
game_events::fire(z_turn_refresh);
game_events::fire(config::t_token( "side " + side_num + " turn refresh" ));
@ -722,7 +722,7 @@ void play_controller::finish_side_turn(){
const std::string turn_num = str_cast(turn());
const std::string side_num = str_cast(player_number_);
static const config::t_token z_side_turn_end("side turn end", false);
static const config::t_token & z_side_turn_end( generate_safe_static_const_t_interned(n_token::t_token("side turn end")) );
game_events::fire(z_side_turn_end);
game_events::fire(config::t_token( "side "+ side_num + " turn end"));
game_events::fire(config::t_token( "side turn " + turn_num + " end"));
@ -744,7 +744,7 @@ void play_controller::finish_turn()
{
const std::string turn_num = str_cast(turn());
const std::string side_num = str_cast(player_number_);
static const config::t_token z_turn_end("turn end", false);
static const config::t_token & z_turn_end( generate_safe_static_const_t_interned(n_token::t_token("turn end")) );
game_events::fire(z_turn_end);
game_events::fire(config::t_token( "turn " + turn_num + " end"));
}
@ -1324,7 +1324,7 @@ void play_controller::check_victory()
}
if (found_player) {
static const config::t_token z_enemies_defeated("enemies defeated", false);
static const config::t_token & z_enemies_defeated( generate_safe_static_const_t_interned(n_token::t_token("enemies defeated")) );
game_events::fire(z_enemies_defeated);
check_end_level();
}

View file

@ -52,14 +52,6 @@ static lg::log_domain log_engine("engine");
#define ERR_NG LOG_STREAM(err, log_engine)
#define LOG_NG LOG_STREAM(info, log_engine)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_defeat("defeat", false);
static const config::t_token z_victory("victory", false);
static const config::t_token z_time_over("time over", false);
}
playsingle_controller::playsingle_controller(const config& level,
game_state& state_of_game, const int ticks, const int num_turns,
const config& game_config, CVideo& video, bool skip_replay) :
@ -463,6 +455,9 @@ LEVEL_RESULT playsingle_controller::play_scenario(
}
}
static const config::t_token & z_defeat( generate_safe_static_const_t_interned(n_token::t_token("defeat")) );
static const config::t_token & z_victory( generate_safe_static_const_t_interned(n_token::t_token("victory")) );
if (end_level_result == QUIT) {
return QUIT;
}
@ -871,6 +866,7 @@ void playsingle_controller::handle_generic_event(const std::string& name){
}
void playsingle_controller::check_time_over(){
static const config::t_token & z_time_over( generate_safe_static_const_t_interned(n_token::t_token("time over")) );
bool b = tod_manager_.next_turn();
it_is_a_new_turn_ = true;
if(!b) {

View file

@ -27,24 +27,15 @@
#include "simple_rng.hpp"
namespace {
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_trait("trait", false);
static const config::t_token z_topic("topic", false);
static const config::t_token z_empty("", false);
static const config::t_token z_id("id", false);
static const config::t_token z_plural_name("plural_name", false);
static const config::t_token z_description("description", false);
static const config::t_token z_num_traits("num_traits", false);
static const config::t_token z_markov_chain_size("markov_chain_size", false);
static const config::t_token z_ignore_global_traits("ignore_global_traits", false);
static const config::t_token z_name("name", false);
static const config::t_token z_male_name("male_name", false);
static const config::t_token z_female_name("female_name", false);
static const config::t_token z_male_names("male_names", false);
static const config::t_token z_female_names("female_names", false);
static const config::t_token z_female("female", false);
static const config::t_token z_male("male", false);
DEFAULT_TOKEN_BODY(zf_trait, "trait");
DEFAULT_TOKEN_BODY(zf_topic, "topic");
DEFAULT_TOKEN_BODY(z_empty, "");
DEFAULT_TOKEN_BODY(zf_id, "id");
DEFAULT_TOKEN_BODY(zf_plural_name, "plural_name");
DEFAULT_TOKEN_BODY(zf_description, "description");
DEFAULT_TOKEN_BODY(zf_num_traits, "num_traits");
DEFAULT_TOKEN_BODY(zf_markov_chain_size, "markov_chain_size");
DEFAULT_TOKEN_BODY(zf_ignore_global_traits, "ignore_global_traits");
}
@ -166,26 +157,35 @@ unit_race::unit_race() :
description_(),
ntraits_(0),
chain_size_(0),
traits_(empty_traits().child_range(z_trait)),
topics_(empty_topics().child_range(z_topic)),
traits_(empty_traits().child_range(zf_trait())),
topics_(empty_topics().child_range(zf_topic())),
global_traits_(true)
{
name_[MALE] = z_empty;
name_[FEMALE] = z_empty;
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("empty")) );
name_[MALE] = z_empty;
name_[FEMALE] = z_empty;
}
unit_race::unit_race(const config& cfg) :
cfg_(cfg),
id_(cfg[z_id].token()),
plural_name_(cfg[z_plural_name].t_str()),
description_(cfg[z_description].t_str()),
ntraits_(cfg[z_num_traits]),
chain_size_(cfg[z_markov_chain_size]),
traits_(cfg.child_range(z_trait)),
topics_(cfg.child_range(z_topic)),
global_traits_(!cfg[z_ignore_global_traits].to_bool())
id_(cfg[zf_id()].token()),
plural_name_(cfg[zf_plural_name()].t_str()),
description_(cfg[zf_description()].t_str()),
ntraits_(cfg[zf_num_traits()]),
chain_size_(cfg[zf_markov_chain_size()]),
traits_(cfg.child_range(zf_trait())),
topics_(cfg.child_range(zf_topic())),
global_traits_(!cfg[zf_ignore_global_traits()].to_bool())
{
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_male_name( generate_safe_static_const_t_interned(n_token::t_token("male_name")) );
static const config::t_token & z_female_name( generate_safe_static_const_t_interned(n_token::t_token("female_name")) );
static const config::t_token & z_male_names( generate_safe_static_const_t_interned(n_token::t_token("male_names")) );
static const config::t_token & z_female_names( generate_safe_static_const_t_interned(n_token::t_token("female_names")) );
config::attribute_value const & a_name= cfg[z_name];
config::attribute_value const & a_male_name= cfg[z_male_name];
config::attribute_value const & a_female_name= cfg[z_female_name];
@ -239,14 +239,15 @@ const config::const_child_itors &unit_race::additional_topics() const
unsigned int unit_race::num_traits() const { return ntraits_; }
config::t_token const& gender_string(unit_race::GENDER gender) {
static const config::t_token female_string(z_female);
static const config::t_token male_string(z_male);
static const config::t_token & z_female_string( generate_safe_static_const_t_interned(n_token::t_token("female")) );
static const config::t_token & z_male_string( generate_safe_static_const_t_interned(n_token::t_token("male")) );
switch(gender) {
case unit_race::FEMALE:
return female_string;
return z_female_string;
default:
case unit_race::MALE:
return male_string;
return z_male_string;
}
}

View file

@ -55,12 +55,6 @@ static lg::log_domain log_random("random");
#define ERR_RND LOG_STREAM(err, log_random)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_sighted("sighted", false);
}
//functions to verify that the unit structure on both machines is identical
@ -756,12 +750,13 @@ bool do_replay(int side_num, replay *obj)
bool do_replay_handle(int side_num, const std::string &do_untill)
{
static const config::t_token & z_sighted( generate_safe_static_const_t_interned(n_token::t_token("sighted")) );
//a list of units that have promoted from the last attack
std::deque<map_location> advancing_units;
team &current_team = (*resources::teams)[side_num - 1];
for(;;) {
const config *cfg = get_replay_source().get_next_action();

View file

@ -34,13 +34,6 @@
#include <cassert>
#include <ctime>
namespace {
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_swarm("swarm", false);
static const config::t_token z_swarm_attacks_min("swarm_attacks_min", false);
static const config::t_token z_swarm_attacks_max("swarm_attacks_max", false);
}
static void add_text(config &report, const std::string &text,
const std::string &tooltip, const std::string &help = "")
@ -421,6 +414,10 @@ REPORT_GENERATOR(unit_weapons)
map_location displayed_unit_hex = resources::screen->displayed_unit_hex();
config res;
static const config::t_token & z_swarm( generate_safe_static_const_t_interned(n_token::t_token("swarm")) );
static const config::t_token & z_swarm_attacks_min( generate_safe_static_const_t_interned(n_token::t_token("swarm_attacks_min")) );
static const config::t_token & z_swarm_attacks_max( generate_safe_static_const_t_interned(n_token::t_token("swarm_attacks_max")) );
foreach (const attack_type &at, u->attacks())
{
at.set_specials_context(displayed_unit_hex, map_location(), *u);

View file

@ -127,12 +127,6 @@ static lg::log_domain log_engine("engine");
#endif /* _WIN32 */
namespace {
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_save("save", false);
}
namespace savegame {
const std::string save_info::format_time_local() const{
@ -376,6 +370,8 @@ config& save_index::save_summary(std::string save)
* a file. If not some parts of the code use the name with and some parts
* without the .gz suffix.
*/
static const config::t_token & z_save( generate_safe_static_const_t_interned(n_token::t_token("save")) );
if(save.length() < 3 || save.substr(save.length() - 3) != ".gz") {
save += ".gz";
}
@ -390,6 +386,7 @@ config& save_index::save_summary(std::string save)
}
config::t_child_range_index const save_index::indexed_summaries(){
static const config::t_token & z_save( generate_safe_static_const_t_interned(n_token::t_token("save")) );
return load().child_range_index(z_save, z_save);
}

View file

@ -100,8 +100,8 @@ parser::~parser() {
}
void parser::operator()() {
static const config::t_token z_empty("", false);
static const config::t_token z_tag("tag", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_tag( generate_safe_static_const_t_interned(n_token::t_token("tag")) );
cfg_.clear();
elements_.push(element(&cfg_, z_empty));
@ -193,8 +193,8 @@ void parser::parse_element() {
if(elements_.size() <= 1)
error(_("Unexpected closing tag"));
if(elname != elements_.top().name) {
static const config::t_token z_tag1("tag1", false);
static const config::t_token z_tag2("tag2", false);
static const config::t_token & z_tag1( generate_safe_static_const_t_interned(n_token::t_token("tag1")) );
static const config::t_token & z_tag2( generate_safe_static_const_t_interned(n_token::t_token("tag2")) );
utils::token_map i18n_symbols;
i18n_symbols[z_tag1] = elements_.top().name;
i18n_symbols[z_tag2] = elname;
@ -217,7 +217,7 @@ void parser::parse_element() {
void parser::parse_variable()
{
static const config::t_token z_empty("", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
assert(!elements_.empty());
assert(elements_.top().cfg);
@ -334,7 +334,7 @@ void parser::parse_variable()
*/
std::string parser::lineno_string(utils::token_map &i18n_symbols,
std::string const &lineno, const char *error_string) {
static const config::t_token z_pos("pos", false);
static const config::t_token & z_pos( generate_safe_static_const_t_interned(n_token::t_token("pos")) );
i18n_symbols[z_pos] = ::lineno_string(lineno);
std::string result = _(error_string);
@ -345,9 +345,9 @@ std::string parser::lineno_string(utils::token_map &i18n_symbols,
void parser::error(const std::string& error_type)
{
static const config::t_token z_error("error", false);
static const config::t_token z_value("value", false);
static const config::t_token z_previous_value("previous_value", false);
static const config::t_token & z_error( generate_safe_static_const_t_interned(n_token::t_token("error")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_previous_value( generate_safe_static_const_t_interned(n_token::t_token("previous_value")) );
utils::token_map i18n_symbols;
i18n_symbols[z_error] = error_type;
i18n_symbols[z_value] = tok_->current_token().value();

View file

@ -63,14 +63,14 @@ tokenizer::~tokenizer()
const token &tokenizer::next_token()
{
static const n_token::t_token z_LBRACKET("[", false);
static const n_token::t_token z_RBRACKET("]", false);
static const n_token::t_token z_SLASH("/", false);
static const n_token::t_token z_LF("\n", false);
static const n_token::t_token z_EQUALS("=", false);
static const n_token::t_token z_COMMA(",", false);
static const n_token::t_token z_PLUS("+", false);
static const n_token::t_token z_UNDERSCORE("_", false);
static const n_token::t_token & z_LBRACKET( generate_safe_static_const_t_interned(n_token::t_token("[")) );
static const n_token::t_token & z_RBRACKET( generate_safe_static_const_t_interned(n_token::t_token("]")) );
static const n_token::t_token & z_SLASH( generate_safe_static_const_t_interned(n_token::t_token("/")) );
static const n_token::t_token & z_LF( generate_safe_static_const_t_interned(n_token::t_token("\n")) );
static const n_token::t_token & z_EQUALS( generate_safe_static_const_t_interned(n_token::t_token("=")) );
static const n_token::t_token & z_COMMA( generate_safe_static_const_t_interned(n_token::t_token(",")) );
static const n_token::t_token & z_PLUS( generate_safe_static_const_t_interned(n_token::t_token("+")) );
static const n_token::t_token & z_UNDERSCORE( generate_safe_static_const_t_interned(n_token::t_token("_")) );
#if DEBUG

View file

@ -71,7 +71,7 @@ struct token {
std::vector<char> buffer_;
n_token::t_token const & value() const {
static const n_token::t_token z_empty("", false);
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if(!is_parsed_){
if(!buffer_.empty()){
value_.assign(buffer_.begin(), buffer_.end());

View file

@ -39,12 +39,6 @@ static lg::log_domain log_engine_enemies("engine/enemies");
#define WRN_NGE LOG_STREAM(warn, log_engine_enemies)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_capture("capture", false);
}
static std::vector<team> *&teams = resources::teams;
//static member initialization
@ -360,6 +354,7 @@ void team::write(config& cfg) const
bool team::get_village(const map_location& loc)
{
static const config::t_token & z_capture( generate_safe_static_const_t_interned(n_token::t_token("capture")) );
villages_.insert(loc);
return game_events::fire(z_capture,loc);
}

View file

@ -129,17 +129,17 @@ void team_builder::log_step(const char *s) const
void team_builder::init()
{
static const config::t_token z_side("side", false);
static const config::t_token z_controller("controller", false);
static const config::t_token z_human("human", false);
static const config::t_token z_network("network", false);
static const config::t_token z_network_ai("network_ai", false);
static const config::t_token z_human_ai("human_ai", false);
static const config::t_token z_persistent("persistent", false);
static const config::t_token z_player("player", false);
static const config::t_token z_save_id("save_id", false);
static const config::t_token z_true("true", false);
static const config::t_token z_false("false", false);
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_controller( generate_safe_static_const_t_interned(n_token::t_token("controller")) );
static const config::t_token & z_human( generate_safe_static_const_t_interned(n_token::t_token("human")) );
static const config::t_token & z_network( generate_safe_static_const_t_interned(n_token::t_token("network")) );
static const config::t_token & z_network_ai( generate_safe_static_const_t_interned(n_token::t_token("network_ai")) );
static const config::t_token & z_human_ai( generate_safe_static_const_t_interned(n_token::t_token("human_ai")) );
static const config::t_token & z_persistent( generate_safe_static_const_t_interned(n_token::t_token("persistent")) );
static const config::t_token & z_player( generate_safe_static_const_t_interned(n_token::t_token("player")) );
static const config::t_token & z_save_id( generate_safe_static_const_t_interned(n_token::t_token("save_id")) );
static const config::t_token & z_true( generate_safe_static_const_t_interned(n_token::t_token("true")) );
static const config::t_token & z_false( generate_safe_static_const_t_interned(n_token::t_token("false")) );
side_ = side_cfg_[z_side].to_int(1);
if (unsigned(side_ - 1) >= teams_.size() || teams_[side_ - 1].side() != 0)
@ -202,10 +202,9 @@ bool team_builder::use_player_cfg() const
void team_builder::gold()
{
static const config::t_token z_gold("gold", false);
static const config::t_token z_gold_add("gold_add", false);
static const config::t_token z_100("100", false);
static const config::t_token z_default_gold_qty(z_100, false);
static const config::t_token & z_gold( generate_safe_static_const_t_interned(n_token::t_token("gold")) );
static const config::t_token & z_gold_add( generate_safe_static_const_t_interned(n_token::t_token("gold_add")) );
static const config::t_token & z_default_gold_qty( generate_safe_static_const_t_interned(n_token::t_token("100")) );
log_step("gold");
@ -260,7 +259,7 @@ void team_builder::new_team()
void team_builder::objectives()
{
static const config::t_token z_objectives("objectives", false);
static const config::t_token & z_objectives( generate_safe_static_const_t_interned(n_token::t_token("objectives")) );
log_step("objectives");
// If this team has no objectives, set its objectives
@ -272,7 +271,7 @@ void team_builder::objectives()
void team_builder::previous_recruits()
{
static const config::t_token z_previous_recruits("previous_recruits", false);
static const config::t_token & z_previous_recruits( generate_safe_static_const_t_interned(n_token::t_token("previous_recruits")) );
log_step("previous recruits");
// If the game state specifies units that
@ -291,12 +290,12 @@ void team_builder::previous_recruits()
void team_builder::handle_unit(const config &u, const char *origin)
{
static const config::t_token z_type("type", false);
static const config::t_token z_id("id", false);
static const config::t_token z_placement("placement", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_side("side", false);
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_placement( generate_safe_static_const_t_interned(n_token::t_token("placement")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
DBG_NG_TC
<< "unit from "<<origin
@ -327,8 +326,8 @@ void team_builder::handle_unit(const config &u, const char *origin)
void team_builder::handle_leader(const config &leader)
{
static const config::t_token z_canrecruit("canrecruit", false);
static const config::t_token z_placement("placement", false);
static const config::t_token & z_canrecruit( generate_safe_static_const_t_interned(n_token::t_token("canrecruit")) );
static const config::t_token & z_placement( generate_safe_static_const_t_interned(n_token::t_token("placement")) );
leader_configs_.push_back(leader);
@ -342,10 +341,10 @@ void team_builder::handle_leader(const config &leader)
void team_builder::leader()
{
static const config::t_token z_no_leader("no_leader", false);
static const config::t_token z_controller("controller", false);
static const config::t_token z_null("null", false);
static const config::t_token z_leader("leader", false);
static const config::t_token & z_no_leader( generate_safe_static_const_t_interned(n_token::t_token("no_leader")) );
static const config::t_token & z_controller( generate_safe_static_const_t_interned(n_token::t_token("controller")) );
static const config::t_token & z_null( generate_safe_static_const_t_interned(n_token::t_token("null")) );
static const config::t_token & z_leader( generate_safe_static_const_t_interned(n_token::t_token("leader")) );
log_step("leader");
// If this side tag describes the leader of the side, we can simply add it to front of unit queue
@ -365,7 +364,7 @@ void team_builder::leader()
void team_builder::prepare_units()
{
static const config::t_token z_unit("unit", false);
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
log_step("prepare units");
if (use_player_cfg()) {
@ -388,50 +387,50 @@ void team_builder::prepare_units()
void team_builder::place_units()
{
static const config::t_token z_income("income", false);
static const config::t_token z_team_name("team_name", false);
static const config::t_token z_user_team_name("user_team_name", false);
static const config::t_token z_save_id("save_id", false);
static const config::t_token z_current_player("current_player", false);
static const config::t_token z_countdown_time("countdown_time", false);
static const config::t_token z_action_bonus_count("action_bonus_count", false);
static const config::t_token z_flag("flag", false);
static const config::t_token z_flag_icon("flag_icon", false);
static const config::t_token z_objectives("objectives", false);
static const config::t_token z_objectives_changed("objectives_changed", false);
static const config::t_token z_disallow_observers("disallow_observers", false);
static const config::t_token z_allow_player("allow_player", false);
static const config::t_token z_no_leader("no_leader", false);
static const config::t_token z_hidden("hidden", false);
static const config::t_token z_music("music", false);
static const config::t_token z_color("color", false);
static const config::t_token z_colour("colour", false);
static const config::t_token z_ai_config("ai_config", false);
static const config::t_token z_gold("gold", false);
static const config::t_token z_start_gold("start_gold", false);
static const config::t_token z_team_rgb("team_rgb", false);
static const config::t_token z_village_gold("village_gold", false);
static const config::t_token z_recall_cost("recall_cost", false);
static const config::t_token z_controller("controller", false);
static const config::t_token z_persistent("persistent", false);
static const config::t_token z_share_view("share_view", false);
static const config::t_token z_share_maps("share_maps", false);
static const config::t_token z_recruit("recruit", false);
static const config::t_token z_fog("fog", false);
static const config::t_token z_shroud("shroud", false);
static const config::t_token z_shroud_data("shroud_data", false);
static const config::t_token z_scroll_to_leader("scroll_to_leader", false);
static const config::t_token z_income_lock("income_lock", false);
static const config::t_token z_gold_lock("gold_lock", false);
static const config::t_token z_color_lock("color_lock", false);
static const config::t_token z_team_lock("team_lock", false);
static const config::t_token z_leader("leader", false);
static const config::t_token z_random_leader("random_leader", false);
static const config::t_token z_terrain_liked("terrain_liked", false);
static const config::t_token z_allow_changes("allow_changes", false);
static const config::t_token z_faction_name("faction_name", false);
static const config::t_token z_user_description("user_description", false);
static const config::t_token z_faction("faction", false);
static const config::t_token & z_income( generate_safe_static_const_t_interned(n_token::t_token("income")) );
static const config::t_token & z_team_name( generate_safe_static_const_t_interned(n_token::t_token("team_name")) );
static const config::t_token & z_user_team_name( generate_safe_static_const_t_interned(n_token::t_token("user_team_name")) );
static const config::t_token & z_save_id( generate_safe_static_const_t_interned(n_token::t_token("save_id")) );
static const config::t_token & z_current_player( generate_safe_static_const_t_interned(n_token::t_token("current_player")) );
static const config::t_token & z_countdown_time( generate_safe_static_const_t_interned(n_token::t_token("countdown_time")) );
static const config::t_token & z_action_bonus_count( generate_safe_static_const_t_interned(n_token::t_token("action_bonus_count")) );
static const config::t_token & z_flag( generate_safe_static_const_t_interned(n_token::t_token("flag")) );
static const config::t_token & z_flag_icon( generate_safe_static_const_t_interned(n_token::t_token("flag_icon")) );
static const config::t_token & z_objectives( generate_safe_static_const_t_interned(n_token::t_token("objectives")) );
static const config::t_token & z_objectives_changed( generate_safe_static_const_t_interned(n_token::t_token("objectives_changed")) );
static const config::t_token & z_disallow_observers( generate_safe_static_const_t_interned(n_token::t_token("disallow_observers")) );
static const config::t_token & z_allow_player( generate_safe_static_const_t_interned(n_token::t_token("allow_player")) );
static const config::t_token & z_no_leader( generate_safe_static_const_t_interned(n_token::t_token("no_leader")) );
static const config::t_token & z_hidden( generate_safe_static_const_t_interned(n_token::t_token("hidden")) );
static const config::t_token & z_music( generate_safe_static_const_t_interned(n_token::t_token("music")) );
static const config::t_token & z_color( generate_safe_static_const_t_interned(n_token::t_token("color")) );
static const config::t_token & z_colour( generate_safe_static_const_t_interned(n_token::t_token("colour")) );
static const config::t_token & z_ai_config( generate_safe_static_const_t_interned(n_token::t_token("ai_config")) );
static const config::t_token & z_gold( generate_safe_static_const_t_interned(n_token::t_token("gold")) );
static const config::t_token & z_start_gold( generate_safe_static_const_t_interned(n_token::t_token("start_gold")) );
static const config::t_token & z_team_rgb( generate_safe_static_const_t_interned(n_token::t_token("team_rgb")) );
static const config::t_token & z_village_gold( generate_safe_static_const_t_interned(n_token::t_token("village_gold")) );
static const config::t_token & z_recall_cost( generate_safe_static_const_t_interned(n_token::t_token("recall_cost")) );
static const config::t_token & z_controller( generate_safe_static_const_t_interned(n_token::t_token("controller")) );
static const config::t_token & z_persistent( generate_safe_static_const_t_interned(n_token::t_token("persistent")) );
static const config::t_token & z_share_view( generate_safe_static_const_t_interned(n_token::t_token("share_view")) );
static const config::t_token & z_share_maps( generate_safe_static_const_t_interned(n_token::t_token("share_maps")) );
static const config::t_token & z_recruit( generate_safe_static_const_t_interned(n_token::t_token("recruit")) );
static const config::t_token & z_fog( generate_safe_static_const_t_interned(n_token::t_token("fog")) );
static const config::t_token & z_shroud( generate_safe_static_const_t_interned(n_token::t_token("shroud")) );
static const config::t_token & z_shroud_data( generate_safe_static_const_t_interned(n_token::t_token("shroud_data")) );
static const config::t_token & z_scroll_to_leader( generate_safe_static_const_t_interned(n_token::t_token("scroll_to_leader")) );
static const config::t_token & z_income_lock( generate_safe_static_const_t_interned(n_token::t_token("income_lock")) );
static const config::t_token & z_gold_lock( generate_safe_static_const_t_interned(n_token::t_token("gold_lock")) );
static const config::t_token & z_color_lock( generate_safe_static_const_t_interned(n_token::t_token("color_lock")) );
static const config::t_token & z_team_lock( generate_safe_static_const_t_interned(n_token::t_token("team_lock")) );
static const config::t_token & z_leader( generate_safe_static_const_t_interned(n_token::t_token("leader")) );
static const config::t_token & z_random_leader( generate_safe_static_const_t_interned(n_token::t_token("random_leader")) );
static const config::t_token & z_terrain_liked( generate_safe_static_const_t_interned(n_token::t_token("terrain_liked")) );
static const config::t_token & z_allow_changes( generate_safe_static_const_t_interned(n_token::t_token("allow_changes")) );
static const config::t_token & z_faction_name( generate_safe_static_const_t_interned(n_token::t_token("faction_name")) );
static const config::t_token & z_user_description( generate_safe_static_const_t_interned(n_token::t_token("user_description")) );
static const config::t_token & z_faction( generate_safe_static_const_t_interned(n_token::t_token("faction")) );
static n_token::t_token const side_attrs[] = {
z_income, z_team_name, z_user_team_name, z_save_id,

View file

@ -30,33 +30,6 @@
static lg::log_domain log_engine("engine");
#define ERR_NG LOG_STREAM(err, log_engine)
namespace {
//Constant literal tokens
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_or("or", false);
static const config::t_token z_and("and", false);
static const config::t_token z_not("not", false);
static const config::t_token z_terrain("terrain", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_filter_adjacent_location("filter_adjacent_location", false);
static const config::t_token z_adjacent("adjacent", false);
static const config::t_token z_count("count", false);
static const config::t_token z_time_of_day("time_of_day", false);
static const config::t_token z_time_of_day_id("time_of_day_id", false);
static const config::t_token z_chaotic("chaotic", false);
static const config::t_token z_lawful("lawful", false);
static const config::t_token z_neutral("neutral", false);
static const config::t_token z_liminal("liminal", false);
static const config::t_token z_owner_side("owner_side", false);
static const config::t_token z_recall("recall", false);
static const config::t_token z_radius("radius", false);
static const config::t_token z_filter_radius("filter_radius", false);
static const config::t_token z_find_in("find_in", false);
//static const config::t_token z_("", false);
}
terrain_filter::~terrain_filter()
{
}
@ -122,6 +95,7 @@ terrain_filter& terrain_filter::operator=(const terrain_filter& other)
namespace {
struct cfg_isor {
bool operator() (std::pair<const config::t_token, const vconfig> val) {
static const n_token::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
return val.first == z_or;
}
};
@ -129,6 +103,22 @@ namespace {
bool terrain_filter::match_internal(const map_location& loc, const bool ignore_xy,gamemap const & game_map, t_teams const & teams, tod_manager const & tod_manager) const
{
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_terrain( generate_safe_static_const_t_interned(n_token::t_token("terrain")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_filter_adjacent_location( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent_location")) );
static const config::t_token & z_adjacent( generate_safe_static_const_t_interned(n_token::t_token("adjacent")) );
static const config::t_token & z_count( generate_safe_static_const_t_interned(n_token::t_token("count")) );
static const config::t_token & z_time_of_day( generate_safe_static_const_t_interned(n_token::t_token("time_of_day")) );
static const config::t_token & z_time_of_day_id( generate_safe_static_const_t_interned(n_token::t_token("time_of_day_id")) );
static const config::t_token & z_chaotic( generate_safe_static_const_t_interned(n_token::t_token("chaotic")) );
static const config::t_token & z_lawful( generate_safe_static_const_t_interned(n_token::t_token("lawful")) );
static const config::t_token & z_neutral( generate_safe_static_const_t_interned(n_token::t_token("neutral")) );
static const config::t_token & z_liminal( generate_safe_static_const_t_interned(n_token::t_token("liminal")) );
static const config::t_token & z_owner_side( generate_safe_static_const_t_interned(n_token::t_token("owner_side")) );
static const config::t_token & z_find_in( generate_safe_static_const_t_interned(n_token::t_token("find_in")) );
if(cfg_.has_attribute(z_terrain)) {
if(cache_.parsed_terrain == NULL) {
cache_.parsed_terrain = new t_translation::t_match(cfg_[z_terrain]);
@ -284,6 +274,15 @@ bool terrain_filter::match_internal(const map_location& loc, const bool ignore_x
bool terrain_filter::match(const map_location& loc, gamemap const & game_map, t_teams const & teams, tod_manager const & tod_manager) const
{
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
static const config::t_token & z_and( generate_safe_static_const_t_interned(n_token::t_token("and")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_radius( generate_safe_static_const_t_interned(n_token::t_token("radius")) );
static const config::t_token & z_filter_radius( generate_safe_static_const_t_interned(n_token::t_token("filter_radius")) );
if(cfg_[z_x] == z_recall && cfg_[z_y] == z_recall) {
return !game_map.on_board(loc);
}
@ -353,6 +352,16 @@ bool terrain_filter::match(const map_location& loc, gamemap const & game_map, t_
void terrain_filter::get_locations(t_maploc_set& locs, bool with_border, gamemap const & game_map, t_teams const & teams, tod_manager const & tod_manager) const
{
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
static const config::t_token & z_and( generate_safe_static_const_t_interned(n_token::t_token("and")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
static const config::t_token & z_filter_adjacent_location( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent_location")) );
static const config::t_token & z_radius( generate_safe_static_const_t_interned(n_token::t_token("radius")) );
static const config::t_token & z_filter_radius( generate_safe_static_const_t_interned(n_token::t_token("filter_radius")) );
static const config::t_token & z_find_in( generate_safe_static_const_t_interned(n_token::t_token("find_in")) );
std::vector<map_location> xy_vector =
parse_location_range(cfg_[z_x], cfg_[z_y], with_border);
t_maploc_set xy_set(xy_vector.begin(), xy_vector.end());

View file

@ -35,7 +35,7 @@ static lg::log_domain log_display("display");
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_tile_image("tile_image", false);
DEFAULT_TOKEN_BODY( zf_tile_image, "tile_image" );
}
namespace {
@ -297,7 +297,7 @@ theme::tborder::tborder(const config& cfg) :
size(cfg["border_size"].to_double()),
background_image(cfg["background_image"]),
tile_image(cfg[z_tile_image].token()),
tile_image(cfg[zf_tile_image()].token()),
corner_image_top_left(cfg["corner_image_top_left"]),
corner_image_bottom_left(cfg["corner_image_bottom_left"]),

View file

@ -21,33 +21,32 @@
#include "foreach.hpp"
#include "time_of_day.hpp"
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_lawful_bonus("lawful_bonus", false);
static const config::t_token z_name("name", false);
static const config::t_token z_id("id", false);
static const config::t_token z_time("time", false);
static const config::t_token z_image("image", false);
static const config::t_token z_mask("mask", false);
static const config::t_token z_red("red", false);
static const config::t_token z_green("green", false);
static const config::t_token z_blue("blue", false);
static const config::t_token z_sound("sound", false);
static const config::t_token z_NULL_TOD("NULL_TOD", false);
static const config::t_token z_nulltod("nulltod", false);
namespace {
//Create default value functions
DEFAULT_TOKEN_BODY(zf_lawful_bonus, "lawful_bonus");
DEFAULT_TOKEN_BODY(zf_name, "name");
DEFAULT_TOKEN_BODY(zf_id, "id");
DEFAULT_TOKEN_BODY(zf_time, "time");
DEFAULT_TOKEN_BODY(zf_image, "image");
DEFAULT_TOKEN_BODY(zf_mask, "mask");
DEFAULT_TOKEN_BODY(zf_red, "red");
DEFAULT_TOKEN_BODY(zf_green, "green");
DEFAULT_TOKEN_BODY(zf_blue, "blue");
DEFAULT_TOKEN_BODY(zf_sound, "sound");
DEFAULT_TOKEN_BODY(zf_NULL_TOD, "NULL_TOD");
DEFAULT_TOKEN_BODY(zf_nulltod, "nulltod");
}
time_of_day::time_of_day(const config& cfg):
lawful_bonus(cfg[z_lawful_bonus]),
lawful_bonus(cfg[zf_lawful_bonus()]),
bonus_modified(0),
image(cfg[z_image].token()), name(cfg[z_name].t_str()), id(cfg[z_id].token()),
image_mask(cfg[z_mask].token()),
red(cfg[z_red]), green(cfg[z_green]), blue(cfg[z_blue]),
sounds(cfg[z_sound].token())
image(cfg[zf_image()].token()), name(cfg[zf_name()].t_str()), id(cfg[zf_id()].token()),
image_mask(cfg[zf_mask()].token()),
red(cfg[zf_red()]), green(cfg[zf_green()]), blue(cfg[zf_blue()]),
sounds(cfg[zf_sound()].token())
{
}
@ -55,8 +54,8 @@ time_of_day::time_of_day()
: lawful_bonus(0)
, bonus_modified(0)
, image()
, name(z_NULL_TOD)
, id(z_nulltod)
, name(zf_NULL_TOD())
, id(zf_nulltod())
, image_mask()
, red(0)
, green(0)
@ -67,6 +66,16 @@ time_of_day::time_of_day()
void time_of_day::write(config& cfg) const
{
static const n_token::t_token & z_lawful_bonus( generate_safe_static_const_t_interned(n_token::t_token("lawful_bonus")) );
static const n_token::t_token & z_red( generate_safe_static_const_t_interned(n_token::t_token("red")) );
static const n_token::t_token & z_green( generate_safe_static_const_t_interned(n_token::t_token("green")) );
static const n_token::t_token & z_blue( generate_safe_static_const_t_interned(n_token::t_token("blue")) );
static const n_token::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const n_token::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const n_token::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const n_token::t_token & z_mask( generate_safe_static_const_t_interned(n_token::t_token("mask")) );
cfg[z_lawful_bonus] = lawful_bonus;
cfg[z_red] = red;
cfg[z_green] = green;
@ -79,6 +88,8 @@ void time_of_day::write(config& cfg) const
void time_of_day::parse_times(const config& cfg, std::vector<time_of_day>& normal_times)
{
static const n_token::t_token & z_time( generate_safe_static_const_t_interned(n_token::t_token("time")) );
foreach (const config &t, cfg.child_range(z_time)) {
normal_times.push_back(time_of_day(t));
}

View file

@ -28,24 +28,6 @@
static lg::log_domain log_engine("engine");
#define LOG_NG LOG_STREAM(info, log_engine)
namespace{
//Static tokens are replacements for string literals in code
//They allow for fast comparison operations.
static const config::t_token z_turn_at("turn_at", false);
static const config::t_token z_turns("turns", false);
static const config::t_token z_current_tod("current_tod", false);
static const config::t_token z_current_time("current_time", false);
static const config::t_token z_time("time", false);
static const config::t_token z_time_area("time_area", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_id("id", false);
static const config::t_token z_random_start_time("random_start_time", false);
static const config::t_token z_illuminates("illuminates", false);
static const config::t_token z_max_value("max_value", false);
static const config::t_token z_min_value("min_value", false);
static const config::t_token z_turn_number("turn_number", false);
}
tod_manager::tod_manager(const config& scenario_cfg, const int num_turns):
savegame_config(),
@ -55,6 +37,9 @@ tod_manager::tod_manager(const config& scenario_cfg, const int num_turns):
turn_(1),
num_turns_(num_turns)
{
static const config::t_token & z_turn_at( generate_safe_static_const_t_interned(n_token::t_token("turn_at")) );
static const config::t_token & z_current_tod( generate_safe_static_const_t_interned(n_token::t_token("current_tod")) );
const config::attribute_value& turn_at = scenario_cfg[z_turn_at];
if(!turn_at.blank()) {
turn_ = turn_at.to_int(1);
@ -88,6 +73,15 @@ tod_manager& tod_manager::operator=(const tod_manager& manager)
config tod_manager::to_config() const
{
static const config::t_token & z_turn_at( generate_safe_static_const_t_interned(n_token::t_token("turn_at")) );
static const config::t_token & z_turns( generate_safe_static_const_t_interned(n_token::t_token("turns")) );
static const config::t_token & z_current_tod( generate_safe_static_const_t_interned(n_token::t_token("current_tod")) );
static const config::t_token & z_current_time( generate_safe_static_const_t_interned(n_token::t_token("current_time")) );
static const config::t_token & z_time( generate_safe_static_const_t_interned(n_token::t_token("time")) );
static const config::t_token & z_time_area( generate_safe_static_const_t_interned(n_token::t_token("time_area")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
config cfg;
cfg[z_turn_at] = turn_;
cfg[z_turns] = num_turns_;
@ -164,6 +158,11 @@ void tod_manager::replace_schedule(const config& time_cfg)
void tod_manager::add_time_area(const config& cfg)
{
static const config::t_token & z_current_time( generate_safe_static_const_t_interned(n_token::t_token("current_time")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
areas_.push_back(area_time_of_day());
area_time_of_day &area = areas_.back();
area.id = cfg[z_id].token();
@ -204,6 +203,9 @@ void tod_manager::remove_time_area(const config::t_token& area_id)
int tod_manager::get_start_ToD(const config &level) const
{
static const config::t_token & z_current_tod( generate_safe_static_const_t_interned(n_token::t_token("current_tod")) );
static const config::t_token & z_random_start_time( generate_safe_static_const_t_interned(n_token::t_token("random_start_time")) );
const config::attribute_value& current_tod = level[z_current_tod];
if (!current_tod.blank())
{
@ -240,6 +242,10 @@ const time_of_day& tod_manager::get_time_of_day_turn(const std::vector<time_of_d
time_of_day tod_manager::get_time_of_day_with_areas_and_units(const map_location& loc, const int for_turn) const
{
static const n_token::t_token & z_illuminates( generate_safe_static_const_t_interned(n_token::t_token("illuminates")) );
static const n_token::t_token & z_max_value( generate_safe_static_const_t_interned(n_token::t_token("max_value")) );
static const n_token::t_token & z_min_value( generate_safe_static_const_t_interned(n_token::t_token("min_value")) );
const gamemap& map = *resources::game_map;
const unit_map& units = *resources::units;
int light_modif = map.get_terrain_info(map.get_terrain(loc)).light_modification();
@ -294,6 +300,7 @@ void tod_manager::set_number_of_turns(int num)
void tod_manager::set_turn(const int num, const bool increase_limit_if_needed)
{
static const n_token::t_token & z_turn_number( generate_safe_static_const_t_interned(n_token::t_token("turn_number")) );
const int new_turn = std::max<int>(num, 1);
LOG_NG << "changing current turn number from " << turn_ << " to " << new_turn << '\n';
// Correct ToD

View file

@ -41,7 +41,7 @@ namespace n_token {
The copying of tokens is faster than the creation of tokens, because a reference object isn't created.
Hence use static tokens as replacements for constant string literals in the code in a local scope, as follows:
static const t_token z_some_string("some_string", false);
static const n_token::t_token & z_label( generate_safe_static_const_t_interned(n_token::t_token("some text")) );
@see below on caveats in Static Initialization
@note It is intentionally inconvenient to convert to std::string. Allowing automatic conversion would allow

View file

@ -239,7 +239,7 @@ t_string_base::t_string_base(const std::string& string, const std::string& textd
last_untranslatable_(false)
{
if (string.empty()) {
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
value_ = z_empty;
translatable_ = false;
return;
@ -342,7 +342,7 @@ t_string_base& t_string_base::operator=(const t_string_base& string)
t_string_base& t_string_base::operator=(const t_token& string)
{
value_ = string;
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
translated_value_ = z_empty;
translation_timestamp_ = 0;
translatable_ = false;
@ -355,7 +355,7 @@ t_string_base& t_string_base::operator=(const std::string& string){ return opera
t_string_base& t_string_base::operator=(const char* string)
{
value_ = t_token(string);
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
translated_value_ = z_empty;
translation_timestamp_ = 0;
translatable_ = false;
@ -393,7 +393,7 @@ t_string_base t_string_base::operator+(const char* string) const
t_string_base& t_string_base::operator+=(const t_string_base& string)
{
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if (string.value_.empty())
return *this;
if (value_.empty()) {
@ -431,7 +431,7 @@ t_string_base& t_string_base::operator+=(const t_string_base& string)
t_string_base& t_string_base::operator+=(const t_token& string)
{
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if (string.empty())
return *this;
if (value_.empty()) {
@ -456,7 +456,7 @@ t_string_base& t_string_base::operator+=(const std::string& string) {return oper
t_string_base& t_string_base::operator+=(const char* string)
{
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if (string[0] == 0)
return *this;
if (value_.empty()) {
@ -500,7 +500,7 @@ bool t_string_base::operator<(const t_string_base &that) const
const t_string_base::t_token& t_string_base::token() const
{
static const n_token::t_token z_empty("");
static const n_token::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if(!translatable_)
return value_;

View file

@ -54,13 +54,6 @@ static lg::log_domain log_config("config");
namespace{
static const config::t_token z_advance("advance", false);
static const config::t_token z_trait("trait", false);
static const config::t_token z_object("object", false);
static const config::t_token ModificationTypes[] = { z_advance, z_trait, z_object };
static const size_t NumModificationTypes = sizeof(ModificationTypes)/
sizeof(*ModificationTypes);
/**
* Pointers to units which have data in their internal caches. The
* destructor of an unit removes itself from the cache, so the pointers are
@ -92,9 +85,9 @@ static unit_race::GENDER generate_gender(const std::string &type_id, bool random
}
static unit_race::GENDER generate_gender(const config &cfg, game_state *state) {
static const config::t_token z_gender("gender", false);
static const config::t_token z_type("type", false);
static const config::t_token z_random_gender("random_gender", false);
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_random_gender( generate_safe_static_const_t_interned(n_token::t_token("random_gender")) );
const config::attribute_value& gender = cfg[z_gender];
if(!gender.empty())
return string_gender(gender.token());
@ -274,81 +267,81 @@ unit::unit(const config &cfg, bool use_traits, game_state* state) :
modifications_(),
invisibility_cache_()
{
static const config::t_token z_empty("", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_type("type", false);
static const config::t_token z_id("id", false);
static const config::t_token z_name("name", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_canrecruit("canrecruit", false);
static const config::t_token z_role("role", false);
static const config::t_token z_ai_special("ai_special", false);
static const config::t_token z_side("side", false);
static const config::t_token z_underlying_id("underlying_id", false);
static const config::t_token z_overlays("overlays", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_facing("facing", false);
static const config::t_token z_modifications("modifications", false);
static const config::t_token z_race("race", false);
static const config::t_token z_level("level", false);
static const config::t_token z_undead_variation("undead_variation", false);
static const config::t_token z_max_attacks("max_attacks", false);
static const config::t_token z_attacks_left("attacks_left", false);
static const config::t_token z_alpha("alpha", false);
static const config::t_token z_zoc("zoc", false);
static const config::t_token z_flying("flying", false);
static const config::t_token z_description("description", false);
static const config::t_token z_cost("cost", false);
static const config::t_token z_halo("halo", false);
static const config::t_token z_profile("profile", false);
static const config::t_token z_small_profile("small_profile", false);
static const config::t_token z_max_hitpoints("max_hitpoints", false);
static const config::t_token z_max_moves("max_moves", false);
static const config::t_token z_max_experience("max_experience", false);
static const config::t_token z_advances_to("advances_to", false);
static const config::t_token z_null("null", false);
static const config::t_token z_ai("ai", false);
static const config::t_token z_formula("formula", false);
static const config::t_token z_loop_formula("loop_formula", false);
static const config::t_token z_priority("priority", false);
static const config::t_token z_vars("vars", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_movement_costs("movement_costs", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token z_status("status", false);
static const config::t_token z_healable("healable", false);
static const config::t_token z_unhealable("unhealable", false);
static const config::t_token z_guardian("guardian", false);
static const config::t_token z_hitpoints("hitpoints", false);
static const config::t_token z_goto_x("goto_x", false);
static const config::t_token z_goto_y("goto_y", false);
static const config::t_token z_moves("moves", false);
static const config::t_token z_experience("experience", false);
static const config::t_token z_resting("resting", false);
static const config::t_token z_unrenamable("unrenamable", false);
static const config::t_token z_alignment("alignment", false);
static const config::t_token z_lawful("lawful", false);
static const config::t_token z_neutral("neutral", false);
static const config::t_token z_chaotic("chaotic", false);
static const config::t_token z_liminal("liminal", false);
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_full("full", false);
static const config::t_token z_extra_recruit("extra_recruit", false);
static const config::t_token z_filter_recall("filter_recall", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_random_gender("random_gender", false);
static const config::t_token z_placement("placement", false);
static const config::t_token z_flag_rgb("flag_rgb", false);
static const config::t_token z_language_name("language_name", false);
static const config::t_token z_usage("usage", false);
static const config::t_token z_ellipse("ellipse", false);
static const config::t_token z_image("image", false);
static const config::t_token z_random_traits("random_traits", false);
static const config::t_token z_generate_name("generate_name", false);
static const config::t_token z_do_not_list("do_not_list", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_canrecruit( generate_safe_static_const_t_interned(n_token::t_token("canrecruit")) );
static const config::t_token & z_role( generate_safe_static_const_t_interned(n_token::t_token("role")) );
static const config::t_token & z_ai_special( generate_safe_static_const_t_interned(n_token::t_token("ai_special")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_underlying_id( generate_safe_static_const_t_interned(n_token::t_token("underlying_id")) );
static const config::t_token & z_overlays( generate_safe_static_const_t_interned(n_token::t_token("overlays")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_facing( generate_safe_static_const_t_interned(n_token::t_token("facing")) );
static const config::t_token & z_modifications( generate_safe_static_const_t_interned(n_token::t_token("modifications")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_level( generate_safe_static_const_t_interned(n_token::t_token("level")) );
static const config::t_token & z_undead_variation( generate_safe_static_const_t_interned(n_token::t_token("undead_variation")) );
static const config::t_token & z_max_attacks( generate_safe_static_const_t_interned(n_token::t_token("max_attacks")) );
static const config::t_token & z_attacks_left( generate_safe_static_const_t_interned(n_token::t_token("attacks_left")) );
static const config::t_token & z_alpha( generate_safe_static_const_t_interned(n_token::t_token("alpha")) );
static const config::t_token & z_zoc( generate_safe_static_const_t_interned(n_token::t_token("zoc")) );
static const config::t_token & z_flying( generate_safe_static_const_t_interned(n_token::t_token("flying")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_cost( generate_safe_static_const_t_interned(n_token::t_token("cost")) );
static const config::t_token & z_halo( generate_safe_static_const_t_interned(n_token::t_token("halo")) );
static const config::t_token & z_profile( generate_safe_static_const_t_interned(n_token::t_token("profile")) );
static const config::t_token & z_small_profile( generate_safe_static_const_t_interned(n_token::t_token("small_profile")) );
static const config::t_token & z_max_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("max_hitpoints")) );
static const config::t_token & z_max_moves( generate_safe_static_const_t_interned(n_token::t_token("max_moves")) );
static const config::t_token & z_max_experience( generate_safe_static_const_t_interned(n_token::t_token("max_experience")) );
static const config::t_token & z_advances_to( generate_safe_static_const_t_interned(n_token::t_token("advances_to")) );
static const config::t_token & z_null( generate_safe_static_const_t_interned(n_token::t_token("null")) );
static const config::t_token & z_ai( generate_safe_static_const_t_interned(n_token::t_token("ai")) );
static const config::t_token & z_formula( generate_safe_static_const_t_interned(n_token::t_token("formula")) );
static const config::t_token & z_loop_formula( generate_safe_static_const_t_interned(n_token::t_token("loop_formula")) );
static const config::t_token & z_priority( generate_safe_static_const_t_interned(n_token::t_token("priority")) );
static const config::t_token & z_vars( generate_safe_static_const_t_interned(n_token::t_token("vars")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_movement_costs( generate_safe_static_const_t_interned(n_token::t_token("movement_costs")) );
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const config::t_token & z_status( generate_safe_static_const_t_interned(n_token::t_token("status")) );
static const config::t_token & z_healable( generate_safe_static_const_t_interned(n_token::t_token("healable")) );
static const config::t_token & z_unhealable( generate_safe_static_const_t_interned(n_token::t_token("unhealable")) );
static const config::t_token & z_guardian( generate_safe_static_const_t_interned(n_token::t_token("guardian")) );
static const config::t_token & z_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("hitpoints")) );
static const config::t_token & z_goto_x( generate_safe_static_const_t_interned(n_token::t_token("goto_x")) );
static const config::t_token & z_goto_y( generate_safe_static_const_t_interned(n_token::t_token("goto_y")) );
static const config::t_token & z_moves( generate_safe_static_const_t_interned(n_token::t_token("moves")) );
static const config::t_token & z_experience( generate_safe_static_const_t_interned(n_token::t_token("experience")) );
static const config::t_token & z_resting( generate_safe_static_const_t_interned(n_token::t_token("resting")) );
static const config::t_token & z_unrenamable( generate_safe_static_const_t_interned(n_token::t_token("unrenamable")) );
static const config::t_token & z_alignment( generate_safe_static_const_t_interned(n_token::t_token("alignment")) );
static const config::t_token & z_lawful( generate_safe_static_const_t_interned(n_token::t_token("lawful")) );
static const config::t_token & z_neutral( generate_safe_static_const_t_interned(n_token::t_token("neutral")) );
static const config::t_token & z_chaotic( generate_safe_static_const_t_interned(n_token::t_token("chaotic")) );
static const config::t_token & z_liminal( generate_safe_static_const_t_interned(n_token::t_token("liminal")) );
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_full( generate_safe_static_const_t_interned(n_token::t_token("full")) );
static const config::t_token & z_extra_recruit( generate_safe_static_const_t_interned(n_token::t_token("extra_recruit")) );
static const config::t_token & z_filter_recall( generate_safe_static_const_t_interned(n_token::t_token("filter_recall")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_random_gender( generate_safe_static_const_t_interned(n_token::t_token("random_gender")) );
static const config::t_token & z_placement( generate_safe_static_const_t_interned(n_token::t_token("placement")) );
static const config::t_token & z_flag_rgb( generate_safe_static_const_t_interned(n_token::t_token("flag_rgb")) );
static const config::t_token & z_language_name( generate_safe_static_const_t_interned(n_token::t_token("language_name")) );
static const config::t_token & z_usage( generate_safe_static_const_t_interned(n_token::t_token("usage")) );
static const config::t_token & z_ellipse( generate_safe_static_const_t_interned(n_token::t_token("ellipse")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_random_traits( generate_safe_static_const_t_interned(n_token::t_token("random_traits")) );
static const config::t_token & z_generate_name( generate_safe_static_const_t_interned(n_token::t_token("generate_name")) );
static const config::t_token & z_do_not_list( generate_safe_static_const_t_interned(n_token::t_token("do_not_list")) );
if (type_.empty()) {
throw game::game_error("creating unit with an empty type field");
@ -695,8 +688,8 @@ unit::unit(const unit_type *t, int side, bool real_unit,
modifications_(),
invisibility_cache_()
{
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_full("full", false);
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_full( generate_safe_static_const_t_interned(n_token::t_token("full")) );
cfg_[z_upkeep]=z_full;
advance_to(t, real_unit);
@ -756,7 +749,7 @@ unit& unit::operator=(const unit& u)
void unit::set_game_context()
{
static const config::t_token z_event("event", false);
static const config::t_token & z_event( generate_safe_static_const_t_interned(n_token::t_token("event")) );
// In case the unit carries EventWML, apply it now
game_events::add_events(cfg_.child_range(z_event), type_);
@ -765,7 +758,7 @@ void unit::set_game_context()
void unit::generate_name(rand_rng::simple_rng* rng)
{
static const config::t_token z_generate_name("generate_name", false);
static const config::t_token & z_generate_name( generate_safe_static_const_t_interned(n_token::t_token("generate_name")) );
if (!name_.empty() || !cfg_[z_generate_name].to_bool(true)) return;
@ -787,13 +780,13 @@ void unit::generate_name(rand_rng::simple_rng* rng)
void unit::generate_traits(bool musthaveonly, game_state* state)
{
static const config::t_token z_type("type", false);
static const config::t_token z_trait("trait", false);
static const config::t_token z_id("id", false);
static const config::t_token z_availability("availability", false);
static const config::t_token z_musthave("musthave", false);
static const config::t_token z_any("any", false);
static const config::t_token z_random_traits("random_traits", false);
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_availability( generate_safe_static_const_t_interned(n_token::t_token("availability")) );
static const config::t_token & z_musthave( generate_safe_static_const_t_interned(n_token::t_token("musthave")) );
static const config::t_token & z_any( generate_safe_static_const_t_interned(n_token::t_token("any")) );
static const config::t_token & z_random_traits( generate_safe_static_const_t_interned(n_token::t_token("random_traits")) );
LOG_UT << "Generating a trait for unit type " << type_id() << " with musthaveonly " << musthaveonly << "\n";
const unit_type *type = unit_types.find(type_id());
@ -862,8 +855,8 @@ void unit::generate_traits(bool musthaveonly, game_state* state)
std::vector<config::t_token> unit::get_traits_list() const
{
static const config::t_token z_trait("trait", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
std::vector<config::t_token> res;
@ -895,25 +888,25 @@ void unit::advance_to(const config &old_cfg, const unit_type *t,
// Clear the stored config and replace it with the one from the unit type,
// except for a few attributes.
config new_cfg;
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_ellipse("ellipse", false);
static const config::t_token z_image("image", false);
static const config::t_token z_usage("usage", false);
static const config::t_token z_random_traits("random_traits", false);
static const config::t_token z_generate_name("generate_name", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_movement_type("movement_type", false);
static const config::t_token z_die_sound("die_sound", false);
static const config::t_token z_flies("flies", false);
static const config::t_token z_inherit("inherit", false);
static const config::t_token z_variation_name("variation_name", false);
static const config::t_token z_ignore_race_traits("ignore_race_traits", false);
static const config::t_token z_hide_help("hide_help", false);
static const config::t_token z_profile("profile", false);
static const config::t_token z_small_profile("small_profile", false);
static const config::t_token z_male("male", false);
static const config::t_token z_female("female", false);
static const config::t_token z_description("description", false);
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_ellipse( generate_safe_static_const_t_interned(n_token::t_token("ellipse")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_usage( generate_safe_static_const_t_interned(n_token::t_token("usage")) );
static const config::t_token & z_random_traits( generate_safe_static_const_t_interned(n_token::t_token("random_traits")) );
static const config::t_token & z_generate_name( generate_safe_static_const_t_interned(n_token::t_token("generate_name")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_movement_type( generate_safe_static_const_t_interned(n_token::t_token("movement_type")) );
static const config::t_token & z_die_sound( generate_safe_static_const_t_interned(n_token::t_token("die_sound")) );
static const config::t_token & z_flies( generate_safe_static_const_t_interned(n_token::t_token("flies")) );
static const config::t_token & z_inherit( generate_safe_static_const_t_interned(n_token::t_token("inherit")) );
static const config::t_token & z_variation_name( generate_safe_static_const_t_interned(n_token::t_token("variation_name")) );
static const config::t_token & z_ignore_race_traits( generate_safe_static_const_t_interned(n_token::t_token("ignore_race_traits")) );
static const config::t_token & z_hide_help( generate_safe_static_const_t_interned(n_token::t_token("hide_help")) );
static const config::t_token & z_profile( generate_safe_static_const_t_interned(n_token::t_token("profile")) );
static const config::t_token & z_small_profile( generate_safe_static_const_t_interned(n_token::t_token("small_profile")) );
static const config::t_token & z_male( generate_safe_static_const_t_interned(n_token::t_token("male")) );
static const config::t_token & z_female( generate_safe_static_const_t_interned(n_token::t_token("female")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static config::t_token const *persistent_attrs[] = { &z_upkeep, &z_ellipse,
&z_image, &z_usage, &z_random_traits, &z_generate_name };
@ -1029,8 +1022,8 @@ const unit_type* unit::type() const
config::t_token const & unit::big_profile() const
{
static const config::t_token z_profile("profile", false);
static const config::t_token z_unit_image("unit_image", false);
static const config::t_token & z_profile( generate_safe_static_const_t_interned(n_token::t_token("profile")) );
static const config::t_token & z_unit_image( generate_safe_static_const_t_interned(n_token::t_token("unit_image")) );
const config::attribute_value &prof = cfg_[z_profile];
if (!prof.empty() && prof != z_unit_image) {
@ -1042,8 +1035,8 @@ config::t_token const & unit::big_profile() const
config::t_token const & unit::small_profile() const
{
static const config::t_token z_small_profile("small_profile", false);
static const config::t_token z_unit_image("unit_image", false);
static const config::t_token & z_small_profile( generate_safe_static_const_t_interned(n_token::t_token("small_profile")) );
static const config::t_token & z_unit_image( generate_safe_static_const_t_interned(n_token::t_token("unit_image")) );
const config::attribute_value &prof = cfg_[z_small_profile];
if (!prof.empty() && prof != z_unit_image) {
return prof.token();
@ -1173,11 +1166,11 @@ void unit::end_turn()
}
void unit::new_scenario()
{
static const config::t_token z_empty("", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token z_duration("duration", false);
static const config::t_token z_forever("forever", false);
static const config::t_token z_prev_type("prev_type", false);
static const config::t_token & z_duration( generate_safe_static_const_t_interned(n_token::t_token("duration")) );
static const config::t_token & z_forever( generate_safe_static_const_t_interned(n_token::t_token("forever")) );
static const config::t_token & z_prev_type( generate_safe_static_const_t_interned(n_token::t_token("prev_type")) );
ai_special_ = z_empty;
@ -1186,13 +1179,12 @@ void unit::new_scenario()
bool rebuild_from_type = false;
for(unsigned int i = 0; i != NumModificationTypes; ++i) {
const std::string& mod_name = ModificationTypes[i];
foreach( const config::t_token& mod_name, modification_types()){
for (int j = modifications_.child_count(mod_name) - 1; j >= 0; --j)
{
const config &mod = modifications_.child(mod_name, j);
const std::string& duration = mod[z_duration];
if (!duration.empty() && duration != z_forever) {
const config::attribute_value & duration = mod[z_duration];
if (!duration.empty() && duration.token() != z_forever) {
if (const config::attribute_value *v = mod.get(z_prev_type)) {
type_ = v->token();
}
@ -1228,7 +1220,7 @@ void unit::heal(int amount)
const std::map<config::t_token,config::t_token> unit::get_states() const
{
static const config::t_token z_yes("yes", false);
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
std::map<config::t_token, config::t_token> all_states;
foreach (config::t_token const &s, states_) {
all_states[s] = z_yes;
@ -1275,12 +1267,12 @@ std::map<config::t_token, unit::state_t> unit::known_boolean_state_names_ = get_
std::map<config::t_token, unit::state_t> unit::get_known_boolean_state_names()
{
static const config::t_token z_slowed("slowed", false);
static const config::t_token z_poisoned("poisoned", false);
static const config::t_token z_petrified("petrified", false);
static const config::t_token z_uncovered("uncovered", false);
static const config::t_token z_not_moved("not_moved", false);
static const config::t_token z_unhealable("unhealable", false);
static const config::t_token & z_slowed( generate_safe_static_const_t_interned(n_token::t_token("slowed")) );
static const config::t_token & z_poisoned( generate_safe_static_const_t_interned(n_token::t_token("poisoned")) );
static const config::t_token & z_petrified( generate_safe_static_const_t_interned(n_token::t_token("petrified")) );
static const config::t_token & z_uncovered( generate_safe_static_const_t_interned(n_token::t_token("uncovered")) );
static const config::t_token & z_not_moved( generate_safe_static_const_t_interned(n_token::t_token("not_moved")) );
static const config::t_token & z_unhealable( generate_safe_static_const_t_interned(n_token::t_token("unhealable")) );
std::map<config::t_token, state_t> known_boolean_state_names_map;
known_boolean_state_names_map.insert(std::make_pair(z_slowed,STATE_SLOWED));
@ -1310,8 +1302,8 @@ void unit::set_state(const config::t_token &state, bool value)
bool unit::has_ability_by_id(const std::string& ability) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
if (const config &abil = cfg_.child(z_abilities))
{
@ -1325,8 +1317,8 @@ bool unit::has_ability_by_id(const std::string& ability) const
void unit::remove_ability_by_id(const std::string &ability)
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
if (config &abil = cfg_.child(z_abilities))
{
@ -1346,10 +1338,10 @@ bool unit::matches_filter(const vconfig& cfg, const map_location& loc, bool use_
t_teams const & teams, LuaKernel & lua_kernel,
tod_manager const & tod_manager) const
{
static const config::t_token z_this_unit("this_unit", false);
static const config::t_token z_and("and", false);
static const config::t_token z_or("or", false);
static const config::t_token z_not("not", false);
static const config::t_token & z_this_unit( generate_safe_static_const_t_interned(n_token::t_token("this_unit")) );
static const config::t_token & z_and( generate_safe_static_const_t_interned(n_token::t_token("and")) );
static const config::t_token & z_or( generate_safe_static_const_t_interned(n_token::t_token("or")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
bool matches = true;
@ -1396,38 +1388,38 @@ bool unit::internal_matches_filter(const vconfig& cfg, const map_location& loc,
t_teams const & teams, LuaKernel & lua_kernel,
tod_manager const & tod_manager) const
{
static const config::t_token z_name("name", false);
static const config::t_token z_id("id", false);
static const config::t_token z_speaker("speaker", false);
static const config::t_token z_filter_location("filter_location", false);
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_recall("recall", false);
static const config::t_token z_type("type", false);
static const config::t_token z_ability("ability", false);
static const config::t_token z_race("race", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_side("side", false);
static const config::t_token z_has_weapon("has_weapon", false);
static const config::t_token z_role("role", false);
static const config::t_token z_ai_special("ai_special", false);
static const config::t_token z_canrecruit("canrecruit", false);
static const config::t_token z_level("level", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_movement_cost("movement_cost", false);
static const config::t_token z_filter_wml("filter_wml", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_filter_vision("filter_vision", false);
static const config::t_token z_visible("visible", false);
static const config::t_token z_viewing_side("viewing_side", false);
static const config::t_token z_filter_adjacent("filter_adjacent", false);
static const config::t_token z_adjacent("adjacent", false);
static const config::t_token z_is_enemy("is_enemy", false);
static const config::t_token z_count("count", false);
static const config::t_token z_find_in("find_in", false);
static const config::t_token z_formula("formula", false);
static const config::t_token z_lua_function("lua_function", false);
static const config::t_token z_filter_side("filter_side", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_speaker( generate_safe_static_const_t_interned(n_token::t_token("speaker")) );
static const config::t_token & z_filter_location( generate_safe_static_const_t_interned(n_token::t_token("filter_location")) );
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_ability( generate_safe_static_const_t_interned(n_token::t_token("ability")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_has_weapon( generate_safe_static_const_t_interned(n_token::t_token("has_weapon")) );
static const config::t_token & z_role( generate_safe_static_const_t_interned(n_token::t_token("role")) );
static const config::t_token & z_ai_special( generate_safe_static_const_t_interned(n_token::t_token("ai_special")) );
static const config::t_token & z_canrecruit( generate_safe_static_const_t_interned(n_token::t_token("canrecruit")) );
static const config::t_token & z_level( generate_safe_static_const_t_interned(n_token::t_token("level")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_movement_cost( generate_safe_static_const_t_interned(n_token::t_token("movement_cost")) );
static const config::t_token & z_filter_wml( generate_safe_static_const_t_interned(n_token::t_token("filter_wml")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_filter_vision( generate_safe_static_const_t_interned(n_token::t_token("filter_vision")) );
static const config::t_token & z_visible( generate_safe_static_const_t_interned(n_token::t_token("visible")) );
static const config::t_token & z_viewing_side( generate_safe_static_const_t_interned(n_token::t_token("viewing_side")) );
static const config::t_token & z_filter_adjacent( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent")) );
static const config::t_token & z_adjacent( generate_safe_static_const_t_interned(n_token::t_token("adjacent")) );
static const config::t_token & z_is_enemy( generate_safe_static_const_t_interned(n_token::t_token("is_enemy")) );
static const config::t_token & z_count( generate_safe_static_const_t_interned(n_token::t_token("count")) );
static const config::t_token & z_find_in( generate_safe_static_const_t_interned(n_token::t_token("find_in")) );
static const config::t_token & z_formula( generate_safe_static_const_t_interned(n_token::t_token("formula")) );
static const config::t_token & z_lua_function( generate_safe_static_const_t_interned(n_token::t_token("lua_function")) );
static const config::t_token & z_filter_side( generate_safe_static_const_t_interned(n_token::t_token("filter_side")) );
config::attribute_value cfg_name = cfg[z_name];
if (!cfg_name.empty() && cfg_name.str() != name_) {
@ -1745,55 +1737,55 @@ bool unit::internal_matches_filter(const vconfig& cfg, const map_location& loc,
void unit::write(config& cfg) const
{
static const config::t_token z_description("description", false);
static const config::t_token z_hitpoints("hitpoints", false);
static const config::t_token z_max_hitpoints("max_hitpoints", false);
static const config::t_token z_experience("experience", false);
static const config::t_token z_max_experience("max_experience", false);
static const config::t_token z_side("side", false);
static const config::t_token z_type("type", false);
static const config::t_token z_ai("ai", false);
static const config::t_token z_formula("formula", false);
static const config::t_token z_loop_formula("loop_formula", false);
static const config::t_token z_priority("priority", false);
static const config::t_token z_vars("vars", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_role("role", false);
static const config::t_token z_ai_special("ai_special", false);
static const config::t_token z_flying("flying", false);
static const config::t_token z_variables("variables", false);
static const config::t_token z_status("status", false);
static const config::t_token z_overlays("overlays", false);
static const config::t_token z_name("name", false);
static const config::t_token z_id("id", false);
static const config::t_token z_underlying_id("underlying_id", false);
static const config::t_token z_canrecruit("canrecruit", false);
static const config::t_token z_extra_recruit("extra_recruit", false);
static const config::t_token z_facing("facing", false);
static const config::t_token z_goto_x("goto_x", false);
static const config::t_token z_goto_y("goto_y", false);
static const config::t_token z_moves("moves", false);
static const config::t_token z_max_moves("max_moves", false);
static const config::t_token z_resting("resting", false);
static const config::t_token z_advances_to("advances_to", false);
static const config::t_token z_race("race", false);
static const config::t_token z_language_name("language_name", false);
static const config::t_token z_undead_variation("undead_variation", false);
static const config::t_token z_level("level", false);
static const config::t_token z_alignment("alignment", false);
static const config::t_token z_lawful("lawful", false);
static const config::t_token z_neutral("neutral", false);
static const config::t_token z_chaotic("chaotic", false);
static const config::t_token z_flag_rgb("flag_rgb", false);
static const config::t_token z_unrenamable("unrenamable", false);
static const config::t_token z_alpha("alpha", false);
static const config::t_token z_attacks_left("attacks_left", false);
static const config::t_token z_max_attacks("max_attacks", false);
static const config::t_token z_zoc("zoc", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_cost("cost", false);
static const config::t_token z_modifications("modifications", false);
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("hitpoints")) );
static const config::t_token & z_max_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("max_hitpoints")) );
static const config::t_token & z_experience( generate_safe_static_const_t_interned(n_token::t_token("experience")) );
static const config::t_token & z_max_experience( generate_safe_static_const_t_interned(n_token::t_token("max_experience")) );
static const config::t_token & z_side( generate_safe_static_const_t_interned(n_token::t_token("side")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_ai( generate_safe_static_const_t_interned(n_token::t_token("ai")) );
static const config::t_token & z_formula( generate_safe_static_const_t_interned(n_token::t_token("formula")) );
static const config::t_token & z_loop_formula( generate_safe_static_const_t_interned(n_token::t_token("loop_formula")) );
static const config::t_token & z_priority( generate_safe_static_const_t_interned(n_token::t_token("priority")) );
static const config::t_token & z_vars( generate_safe_static_const_t_interned(n_token::t_token("vars")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_role( generate_safe_static_const_t_interned(n_token::t_token("role")) );
static const config::t_token & z_ai_special( generate_safe_static_const_t_interned(n_token::t_token("ai_special")) );
static const config::t_token & z_flying( generate_safe_static_const_t_interned(n_token::t_token("flying")) );
static const config::t_token & z_variables( generate_safe_static_const_t_interned(n_token::t_token("variables")) );
static const config::t_token & z_status( generate_safe_static_const_t_interned(n_token::t_token("status")) );
static const config::t_token & z_overlays( generate_safe_static_const_t_interned(n_token::t_token("overlays")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_underlying_id( generate_safe_static_const_t_interned(n_token::t_token("underlying_id")) );
static const config::t_token & z_canrecruit( generate_safe_static_const_t_interned(n_token::t_token("canrecruit")) );
static const config::t_token & z_extra_recruit( generate_safe_static_const_t_interned(n_token::t_token("extra_recruit")) );
static const config::t_token & z_facing( generate_safe_static_const_t_interned(n_token::t_token("facing")) );
static const config::t_token & z_goto_x( generate_safe_static_const_t_interned(n_token::t_token("goto_x")) );
static const config::t_token & z_goto_y( generate_safe_static_const_t_interned(n_token::t_token("goto_y")) );
static const config::t_token & z_moves( generate_safe_static_const_t_interned(n_token::t_token("moves")) );
static const config::t_token & z_max_moves( generate_safe_static_const_t_interned(n_token::t_token("max_moves")) );
static const config::t_token & z_resting( generate_safe_static_const_t_interned(n_token::t_token("resting")) );
static const config::t_token & z_advances_to( generate_safe_static_const_t_interned(n_token::t_token("advances_to")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_language_name( generate_safe_static_const_t_interned(n_token::t_token("language_name")) );
static const config::t_token & z_undead_variation( generate_safe_static_const_t_interned(n_token::t_token("undead_variation")) );
static const config::t_token & z_level( generate_safe_static_const_t_interned(n_token::t_token("level")) );
static const config::t_token & z_alignment( generate_safe_static_const_t_interned(n_token::t_token("alignment")) );
static const config::t_token & z_lawful( generate_safe_static_const_t_interned(n_token::t_token("lawful")) );
static const config::t_token & z_neutral( generate_safe_static_const_t_interned(n_token::t_token("neutral")) );
static const config::t_token & z_chaotic( generate_safe_static_const_t_interned(n_token::t_token("chaotic")) );
static const config::t_token & z_flag_rgb( generate_safe_static_const_t_interned(n_token::t_token("flag_rgb")) );
static const config::t_token & z_unrenamable( generate_safe_static_const_t_interned(n_token::t_token("unrenamable")) );
static const config::t_token & z_alpha( generate_safe_static_const_t_interned(n_token::t_token("alpha")) );
static const config::t_token & z_attacks_left( generate_safe_static_const_t_interned(n_token::t_token("attacks_left")) );
static const config::t_token & z_max_attacks( generate_safe_static_const_t_interned(n_token::t_token("max_attacks")) );
static const config::t_token & z_zoc( generate_safe_static_const_t_interned(n_token::t_token("zoc")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_cost( generate_safe_static_const_t_interned(n_token::t_token("cost")) );
static const config::t_token & z_modifications( generate_safe_static_const_t_interned(n_token::t_token("modifications")) );
cfg.append(cfg_);
const unit_type *ut = unit_types.find(type_id());
@ -1954,9 +1946,9 @@ const surface unit::still_image(bool scaled) const
}
void unit::set_standing(bool with_bars) {
static const config::t_token z_empty("", false);
static const config::t_token z_standing("standing", false);
static const config::t_token z__disabled_("_disabled_", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_standing( generate_safe_static_const_t_interned(n_token::t_token("standing")) );
static const config::t_token & z__disabled_( generate_safe_static_const_t_interned(n_token::t_token("_disabled_")) );
game_display *disp = game_display::get_singleton();
@ -1971,7 +1963,7 @@ void unit::set_standing(bool with_bars) {
void unit::set_ghosted(bool with_bars)
{
static const config::t_token z_ghosted("ghosted", false);
static const config::t_token & z_ghosted( generate_safe_static_const_t_interned(n_token::t_token("ghosted")) );
game_display *disp = game_display::get_singleton();
start_animation(INT_MAX, choose_animation(*disp, loc_, z_ghosted),
@ -1980,7 +1972,7 @@ void unit::set_ghosted(bool with_bars)
void unit::set_disabled_ghosted(bool with_bars)
{
static const config::t_token z_disabled_ghosted("disabled_ghosted", false);
static const config::t_token & z_disabled_ghosted( generate_safe_static_const_t_interned(n_token::t_token("disabled_ghosted")) );
game_display *disp = game_display::get_singleton();
start_animation(INT_MAX, choose_animation(*disp, loc_, z_disabled_ghosted),
@ -1989,8 +1981,8 @@ void unit::set_disabled_ghosted(bool with_bars)
void unit::set_idling()
{
static const config::t_token z_empty("", false);
static const config::t_token z_idling("idling", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_idling( generate_safe_static_const_t_interned(n_token::t_token("idling")) );
game_display *disp = game_display::get_singleton();
start_animation(INT_MAX, choose_animation(*disp, loc_, z_idling),
@ -1999,9 +1991,9 @@ void unit::set_idling()
void unit::set_selecting()
{
static const config::t_token z_empty("", false);
static const config::t_token z_selected("selected", false);
static const config::t_token z__disabled_selected_("_disabled_selected_", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_selected( generate_safe_static_const_t_interned(n_token::t_token("selected")) );
static const config::t_token & z__disabled_selected_( generate_safe_static_const_t_interned(n_token::t_token("_disabled_selected_")) );
const game_display *disp = game_display::get_singleton();
if (preferences::show_standing_animations() && !get_state(STATE_PETRIFIED)) {
@ -2300,10 +2292,10 @@ bool unit::invalidate(const map_location &loc)
int unit::upkeep() const
{
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_full("full", false);
static const config::t_token z_loyal("loyal", false);
static const config::t_token z_free("free", false);
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_full( generate_safe_static_const_t_interned(n_token::t_token("full")) );
static const config::t_token & z_loyal( generate_safe_static_const_t_interned(n_token::t_token("loyal")) );
static const config::t_token & z_free( generate_safe_static_const_t_interned(n_token::t_token("free")) );
// Leaders do not incur upkeep.
if(can_recruit()) {
@ -2323,9 +2315,9 @@ int unit::upkeep() const
bool unit::loyal() const
{
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_loyal("loyal", false);
static const config::t_token z_free("free", false);
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_loyal( generate_safe_static_const_t_interned(n_token::t_token("loyal")) );
static const config::t_token & z_free( generate_safe_static_const_t_interned(n_token::t_token("free")) );
return cfg_[z_upkeep] == z_loyal || cfg_[z_upkeep] == z_free;
}
@ -2360,12 +2352,12 @@ int unit::defense_modifier(t_translation::t_terrain terrain, gamemap const & gam
bool unit::resistance_filter_matches(const config& cfg, bool attacker, const std::string& damage_name, int res) const
{
static const config::t_token z_active_on("active_on", false);
static const config::t_token z_offense("offense", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token & z_active_on( generate_safe_static_const_t_interned(n_token::t_token("active_on")) );
static const config::t_token & z_offense( generate_safe_static_const_t_interned(n_token::t_token("offense")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token z_empty("", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
if(!(cfg[z_active_on]==z_empty || (attacker && cfg[z_active_on]==z_offense) || (!attacker && cfg[z_active_on]==z_defense))) {
return false;
}
@ -2391,8 +2383,8 @@ bool unit::resistance_filter_matches(const config& cfg, bool attacker, const std
int unit::resistance_against(const std::string& damage_name,bool attacker,const map_location& loc) const
{
static const config::t_token z_resistance("resistance", false);
static const config::t_token z_max_value("max_value", false);
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const config::t_token & z_max_value( generate_safe_static_const_t_interned(n_token::t_token("max_value")) );
int res = 0;
@ -2418,7 +2410,7 @@ int unit::resistance_against(const std::string& damage_name,bool attacker,const
utils::string_map unit::get_base_resistances() const
{
static const config::t_token z_resistance("resistance", false);
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
if (const config &resistance = cfg_.child(z_resistance))
{
@ -2458,8 +2450,8 @@ std::map<std::string,std::string> unit::advancement_icons() const
foreach (const config &adv, get_modification_advances())
{
static const config::t_token z_image("image", false);
static const config::t_token z_description("description", false);
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
config::attribute_value const & aimage = adv[z_image];
const config::t_token & image = aimage.token();
@ -2476,10 +2468,10 @@ std::map<std::string,std::string> unit::advancement_icons() const
}
std::vector<std::pair<std::string,std::string> > unit::amla_icons() const
{
static const config::t_token z_icon("icon", false);
static const config::t_token z_description("description", false);
static const config::t_token z_advance("advance", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_icon( generate_safe_static_const_t_interned(n_token::t_token("icon")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
std::vector<std::pair<std::string,std::string> > temp;
std::pair<std::string,std::string> icon; //<image,tooltip>
@ -2500,11 +2492,11 @@ std::vector<std::pair<std::string,std::string> > unit::amla_icons() const
std::vector<config> unit::get_modification_advances() const
{
static const config::t_token z_strict_amla("strict_amla", false);
static const config::t_token z_advance("advance", false);
static const config::t_token z_id("id", false);
static const config::t_token z_max_times("max_times", false);
static const config::t_token z_require_amla("require_amla", false);
static const config::t_token & z_strict_amla( generate_safe_static_const_t_interned(n_token::t_token("strict_amla")) );
static const config::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_max_times( generate_safe_static_const_t_interned(n_token::t_token("max_times")) );
static const config::t_token & z_require_amla( generate_safe_static_const_t_interned(n_token::t_token("require_amla")) );
std::vector<config> res;
foreach (const config &adv, modification_advancements())
@ -2543,7 +2535,7 @@ std::vector<config> unit::get_modification_advances() const
size_t unit::modification_count(const config::t_token& type, const std::string& id) const
{
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
size_t res = 0;
foreach (const config &item, modifications_.child_range(type)) {
@ -2571,60 +2563,60 @@ void unit::add_modification(const config::t_token& type, const config& mod, bool
tod_manager const & tod_manager)
{
static const config::t_token z_empty("", false);
static const config::t_token z_trait("trait", false);
static const config::t_token z_id("id", false);
static const config::t_token z_fearless("fearless", false);
static const config::t_token z_healthy("healthy", false);
static const config::t_token z_effect("effect", false);
static const config::t_token z_unit_type("unit_type", false);
static const config::t_token z_unit_gender("unit_gender", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_times("times", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_type("type", false);
static const config::t_token z_profile("profile", false);
static const config::t_token z_portrait("portrait", false);
static const config::t_token z_small_portrait("small_portrait", false);
static const config::t_token z_small_profile("small_profile", false);
static const config::t_token z_description("description", false);
static const config::t_token z_new_attack("new_attack", false);
static const config::t_token z_remove_attacks("remove_attacks", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_attack_list("attack_list", false);
static const config::t_token z_effect_description("effect_description", false);
static const config::t_token z_hitpoints("hitpoints", false);
static const config::t_token z_increase_total("increase_total", false);
static const config::t_token z_set("set", false);
static const config::t_token z_set_total("set_total", false);
static const config::t_token z_violate_maximum("violate_maximum", false);
static const config::t_token z_HP("HP", false);
static const config::t_token z_heal_full("heal_full", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_increase("increase", false);
static const config::t_token z_moves("moves", false);
static const config::t_token z_wesnoth("wesnoth", false);
static const config::t_token z_max_experience("max_experience", false);
static const config::t_token z_loyal("loyal", false);
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_status("status", false);
static const config::t_token z_add("add", false);
static const config::t_token z_remove("remove", false);
static const config::t_token z_movement_costs("movement_costs", false);
static const config::t_token z_replace("replace", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token z_zoc("zoc", false);
static const config::t_token z_value("value", false);
static const config::t_token z_new_ability("new_ability", false);
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_remove_ability("remove_ability", false);
static const config::t_token z_image_mod("image_mod", false);
static const config::t_token z_new_animation("new_animation", false);
static const config::t_token z_ellipse("ellipse", false);
static const config::t_token z_name("name", false);
static const config::t_token z_per_level("per level", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_fearless( generate_safe_static_const_t_interned(n_token::t_token("fearless")) );
static const config::t_token & z_healthy( generate_safe_static_const_t_interned(n_token::t_token("healthy")) );
static const config::t_token & z_effect( generate_safe_static_const_t_interned(n_token::t_token("effect")) );
static const config::t_token & z_unit_type( generate_safe_static_const_t_interned(n_token::t_token("unit_type")) );
static const config::t_token & z_unit_gender( generate_safe_static_const_t_interned(n_token::t_token("unit_gender")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_times( generate_safe_static_const_t_interned(n_token::t_token("times")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_profile( generate_safe_static_const_t_interned(n_token::t_token("profile")) );
static const config::t_token & z_portrait( generate_safe_static_const_t_interned(n_token::t_token("portrait")) );
static const config::t_token & z_small_portrait( generate_safe_static_const_t_interned(n_token::t_token("small_portrait")) );
static const config::t_token & z_small_profile( generate_safe_static_const_t_interned(n_token::t_token("small_profile")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_new_attack( generate_safe_static_const_t_interned(n_token::t_token("new_attack")) );
static const config::t_token & z_remove_attacks( generate_safe_static_const_t_interned(n_token::t_token("remove_attacks")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_attack_list( generate_safe_static_const_t_interned(n_token::t_token("attack_list")) );
static const config::t_token & z_effect_description( generate_safe_static_const_t_interned(n_token::t_token("effect_description")) );
static const config::t_token & z_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("hitpoints")) );
static const config::t_token & z_increase_total( generate_safe_static_const_t_interned(n_token::t_token("increase_total")) );
static const config::t_token & z_set( generate_safe_static_const_t_interned(n_token::t_token("set")) );
static const config::t_token & z_set_total( generate_safe_static_const_t_interned(n_token::t_token("set_total")) );
static const config::t_token & z_violate_maximum( generate_safe_static_const_t_interned(n_token::t_token("violate_maximum")) );
static const config::t_token & z_HP( generate_safe_static_const_t_interned(n_token::t_token("HP")) );
static const config::t_token & z_heal_full( generate_safe_static_const_t_interned(n_token::t_token("heal_full")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_increase( generate_safe_static_const_t_interned(n_token::t_token("increase")) );
static const config::t_token & z_moves( generate_safe_static_const_t_interned(n_token::t_token("moves")) );
static const config::t_token & z_wesnoth( generate_safe_static_const_t_interned(n_token::t_token("wesnoth")) );
static const config::t_token & z_max_experience( generate_safe_static_const_t_interned(n_token::t_token("max_experience")) );
static const config::t_token & z_loyal( generate_safe_static_const_t_interned(n_token::t_token("loyal")) );
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_status( generate_safe_static_const_t_interned(n_token::t_token("status")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
static const config::t_token & z_remove( generate_safe_static_const_t_interned(n_token::t_token("remove")) );
static const config::t_token & z_movement_costs( generate_safe_static_const_t_interned(n_token::t_token("movement_costs")) );
static const config::t_token & z_replace( generate_safe_static_const_t_interned(n_token::t_token("replace")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const config::t_token & z_zoc( generate_safe_static_const_t_interned(n_token::t_token("zoc")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_new_ability( generate_safe_static_const_t_interned(n_token::t_token("new_ability")) );
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_remove_ability( generate_safe_static_const_t_interned(n_token::t_token("remove_ability")) );
static const config::t_token & z_image_mod( generate_safe_static_const_t_interned(n_token::t_token("image_mod")) );
static const config::t_token & z_new_animation( generate_safe_static_const_t_interned(n_token::t_token("new_animation")) );
static const config::t_token & z_ellipse( generate_safe_static_const_t_interned(n_token::t_token("ellipse")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_per_level( generate_safe_static_const_t_interned(n_token::t_token("per level")) );
//some trait activate specific flags
if(type == z_trait) {
@ -3014,9 +3006,9 @@ void unit::add_modification(const config::t_token& type, const config& mod, bool
void unit::add_trait_description(const config& trait, const t_string& description)
{
static const config::t_token z_female_name("female_name", false);
static const config::t_token z_male_name("male_name", false);
static const config::t_token z_name("name", false);
static const config::t_token & z_female_name( generate_safe_static_const_t_interned(n_token::t_token("female_name")) );
static const config::t_token & z_male_name( generate_safe_static_const_t_interned(n_token::t_token("male_name")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
const config::t_token& gender_string = gender_ == unit_race::FEMALE ? z_female_name : z_male_name;
config::attribute_value const &gender_specific_name = trait[gender_string];
@ -3057,15 +3049,24 @@ const unit_animation* unit::choose_animation(const game_display& disp, const map
}
std::vector<config::t_token> const & unit::modification_types() const {
static const config::t_token & z_advance( generate_safe_static_const_t_interned(n_token::t_token("advance")) );
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_object( generate_safe_static_const_t_interned(n_token::t_token("object")) );
static const config::t_token ModificationTypes[] = { z_advance, z_trait, z_object };
static const std::vector<config::t_token> ModificationTypesV(ModificationTypes, ModificationTypes + sizeof(ModificationTypes) / sizeof(config::t_token));
return ModificationTypesV;
}
void unit::apply_modifications()
{
log_scope("apply mods");
for(size_t i = 0; i != NumModificationTypes; ++i) {
const config::t_token& mod = ModificationTypes[i];
foreach( const config::t_token& mod, modification_types()){
foreach (const config &m, modifications_.child_range(mod)) {
log_scope("add mod");
add_modification(ModificationTypes[i], m, true);
add_modification(mod , m, true);
}
}
@ -3089,7 +3090,7 @@ bool unit::invisible(const map_location& loc, bool see_all, unit_map const & uni
}
// Test hidden status
static const config::t_token z_hides("hides", false);
static const config::t_token & z_hides( generate_safe_static_const_t_interned(n_token::t_token("hides")) );
bool is_inv = !get_state(STATE_UNCOVERED) && get_ability_bool(z_hides,loc);
if(is_inv){
foreach (const unit &u, units)
@ -3138,7 +3139,7 @@ bool unit::is_visible_to_team(team const& team, bool const see_all, gamemap cons
}
void unit::set_underlying_id() {
static const config::t_token z_Unit("Unit", false);
static const config::t_token & z_Unit( generate_safe_static_const_t_interned(n_token::t_token("Unit")) );
if(underlying_id_ == 0){
underlying_id_ = n_unit::id_manager::instance().next_id();
@ -3161,7 +3162,7 @@ unit& unit::clone(bool is_temporary)
&& static_cast< std::string const &>(id_).find_first_not_of("0123456789", pos+1) == std::string::npos) {
// this appears to be a duplicate of a generic unit, so give it a new id
WRN_UT << "assigning new id to clone of generic unit " << id_ << "\n";
static const config::t_token z_empty("", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
id_ = z_empty;
set_underlying_id();
}
@ -3379,46 +3380,46 @@ std::string get_checksum(const unit& u) {
config unit_config;
config wcfg;
u.write(unit_config);
static const config::t_token z_empty("", false);
static const config::t_token z_advances_to("advances_to", false);
static const config::t_token z_alignment("alignment", false);
static const config::t_token z_cost("cost", false);
static const config::t_token z_experience("experience", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_hitpoints("hitpoints", false);
static const config::t_token z_ignore_race_traits("ignore_race_traits", false);
static const config::t_token z_ignore_global_traits("ignore_global_traits", false);
static const config::t_token z_level("level", false);
static const config::t_token z_max_attacks("max_attacks", false);
static const config::t_token z_max_experience("max_experience", false);
static const config::t_token z_max_hitpoints("max_hitpoints", false);
static const config::t_token z_max_moves("max_moves", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_movement_type("movement_type", false);
static const config::t_token z_race("race", false);
static const config::t_token z_random_traits("random_traits", false);
static const config::t_token z_resting("resting", false);
static const config::t_token z_undead_variation("undead_variation", false);
static const config::t_token z_upkeep("upkeep", false);
static const config::t_token z_zoc("zoc", false);
static const config::t_token z_name("name", false);
static const config::t_token z_type("type", false);
static const config::t_token z_range("range", false);
static const config::t_token z_damage("damage", false);
static const config::t_token z_number("number", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_specials("specials", false);
static const config::t_token z_description("description", false);
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_description_inactive("description_inactive", false);
static const config::t_token z_name_inactive("name_inactive", false);
static const config::t_token z_trait("trait", false);
static const config::t_token z_male_name("male_name", false);
static const config::t_token z_female_name("female_name", false);
static const config::t_token z_advance_from("advance_from", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_movement_costs("movement_costs", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token & z_advances_to( generate_safe_static_const_t_interned(n_token::t_token("advances_to")) );
static const config::t_token & z_alignment( generate_safe_static_const_t_interned(n_token::t_token("alignment")) );
static const config::t_token & z_cost( generate_safe_static_const_t_interned(n_token::t_token("cost")) );
static const config::t_token & z_experience( generate_safe_static_const_t_interned(n_token::t_token("experience")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("hitpoints")) );
static const config::t_token & z_ignore_race_traits( generate_safe_static_const_t_interned(n_token::t_token("ignore_race_traits")) );
static const config::t_token & z_ignore_global_traits( generate_safe_static_const_t_interned(n_token::t_token("ignore_global_traits")) );
static const config::t_token & z_level( generate_safe_static_const_t_interned(n_token::t_token("level")) );
static const config::t_token & z_max_attacks( generate_safe_static_const_t_interned(n_token::t_token("max_attacks")) );
static const config::t_token & z_max_experience( generate_safe_static_const_t_interned(n_token::t_token("max_experience")) );
static const config::t_token & z_max_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("max_hitpoints")) );
static const config::t_token & z_max_moves( generate_safe_static_const_t_interned(n_token::t_token("max_moves")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_movement_type( generate_safe_static_const_t_interned(n_token::t_token("movement_type")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_random_traits( generate_safe_static_const_t_interned(n_token::t_token("random_traits")) );
static const config::t_token & z_resting( generate_safe_static_const_t_interned(n_token::t_token("resting")) );
static const config::t_token & z_undead_variation( generate_safe_static_const_t_interned(n_token::t_token("undead_variation")) );
static const config::t_token & z_upkeep( generate_safe_static_const_t_interned(n_token::t_token("upkeep")) );
static const config::t_token & z_zoc( generate_safe_static_const_t_interned(n_token::t_token("zoc")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_range( generate_safe_static_const_t_interned(n_token::t_token("range")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z_number( generate_safe_static_const_t_interned(n_token::t_token("number")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_description_inactive( generate_safe_static_const_t_interned(n_token::t_token("description_inactive")) );
static const config::t_token & z_name_inactive( generate_safe_static_const_t_interned(n_token::t_token("name_inactive")) );
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_male_name( generate_safe_static_const_t_interned(n_token::t_token("male_name")) );
static const config::t_token & z_female_name( generate_safe_static_const_t_interned(n_token::t_token("female_name")) );
static const config::t_token & z_advance_from( generate_safe_static_const_t_interned(n_token::t_token("advance_from")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_movement_costs( generate_safe_static_const_t_interned(n_token::t_token("movement_costs")) );
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const n_token::t_token main_keys[] =
{ z_advances_to,

View file

@ -104,7 +104,7 @@ public:
config::t_token const & big_profile() const;
/** Information about the unit -- a detailed description of it */
t_string unit_description() const {
static const config::t_token z_description("description", false);
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
return cfg_[z_description].t_str(); }
int hitpoints() const { return hit_points_; }
@ -257,7 +257,7 @@ public:
std::vector<config> get_modification_advances() const;
config::const_child_itors modification_advancements() const {
static const config::t_token z_advancement("advancement", false);
static const config::t_token & z_advancement( generate_safe_static_const_t_interned(n_token::t_token("advancement")) );
return cfg_.child_range(z_advancement); }
size_t modification_count(const config::t_token& type, const std::string& id) const;
@ -284,21 +284,21 @@ public:
/** The name of the file to game_display (used in menus). */
config::t_token const & absolute_image() const {
static const config::t_token z_image("image", false);
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
return cfg_[z_image].token(); }
config::t_token const & image_halo() const {
static const config::t_token z_halo("halo", false);
static const config::t_token & z_halo( generate_safe_static_const_t_interned(n_token::t_token("halo")) );
return cfg_[z_halo].token(); }
config::t_token const & image_ellipse() const {
static const config::t_token z_ellipse("ellipse", false);
static const config::t_token & z_ellipse( generate_safe_static_const_t_interned(n_token::t_token("ellipse")) );
return cfg_[z_ellipse].token(); }
config &variables() { return variables_; }
const config &variables() const { return variables_; }
config::t_token usage() const {
static const config::t_token z_usage("usage", false);
static const config::t_token & z_usage( generate_safe_static_const_t_interned(n_token::t_token("usage")) );
return cfg_[z_usage].token(); }
unit_type::ALIGNMENT alignment() const { return alignment_; }
const unit_race* race() const { return race_; }
@ -348,6 +348,9 @@ public:
const std::string& get_priority_formula() const { return unit_priority_formula_; }
void backup_state();
private:
std::vector<config::t_token> const & modification_types() const;
public:
void apply_modifications();
void generate_traits(bool musthaveonly=false, game_state* state = 0);
void generate_name(rand_rng::simple_rng *rng = 0);

View file

@ -109,8 +109,8 @@ namespace unit_abilities {
static bool affects_side(const config& cfg, const t_teams& teams, size_t side, size_t other_side)
{
static const config::t_token z_affect_allies("affect_allies", false);
static const config::t_token z_affect_enemies("affect_enemies", false);
static const config::t_token & z_affect_allies( generate_safe_static_const_t_interned(n_token::t_token("affect_allies")) );
static const config::t_token & z_affect_enemies( generate_safe_static_const_t_interned(n_token::t_token("affect_enemies")) );
if (side == other_side)
return cfg[z_affect_allies].to_bool(true);
@ -125,7 +125,7 @@ static bool affects_side(const config& cfg, const t_teams& teams, size_t side, s
bool unit::get_ability_bool(const config::t_token& ability, const map_location& loc, gamemap const & game_map, unit_map const & units, t_teams const & teams, LuaKernel & lua_kernel, tod_manager const & tod_manager) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
if (const config &abilities = cfg_.child(z_abilities))
{
@ -159,7 +159,7 @@ bool unit::get_ability_bool(const config::t_token& ability, const map_location&
}
unit_ability_list unit::get_abilities(const config::t_token& ability, const map_location& loc) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
unit_ability_list res;
@ -196,8 +196,8 @@ unit_ability_list unit::get_abilities(const config::t_token& ability, const map_
std::vector<std::string> unit::get_ability_list() const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
std::vector<std::string> res;
@ -213,13 +213,13 @@ std::vector<std::string> unit::get_ability_list() const
std::vector<std::string> unit::ability_tooltips(bool force_active) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_female_name("female_name", false);
static const config::t_token z_name("name", false);
static const config::t_token z_description("description", false);
static const config::t_token z_female_name_inactive("female_name_inactive", false);
static const config::t_token z_name_inactive("name_inactive", false);
static const config::t_token z_description_inactive("description_inactive", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_female_name( generate_safe_static_const_t_interned(n_token::t_token("female_name")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_female_name_inactive( generate_safe_static_const_t_interned(n_token::t_token("female_name_inactive")) );
static const config::t_token & z_name_inactive( generate_safe_static_const_t_interned(n_token::t_token("name_inactive")) );
static const config::t_token & z_description_inactive( generate_safe_static_const_t_interned(n_token::t_token("description_inactive")) );
std::vector<std::string> res;
@ -261,7 +261,7 @@ std::vector<std::string> unit::ability_tooltips(bool force_active) const
*/
static bool cache_illuminates(int &cache, std::string const &ability)
{
static const config::t_token z_illuminates("illuminates", false);
static const config::t_token & z_illuminates( generate_safe_static_const_t_interned(n_token::t_token("illuminates")) );
if (cache < 0)
cache = (ability == z_illuminates);
@ -273,10 +273,10 @@ bool unit::ability_active(const std::string& ability,const config& cfg,const map
, t_teams const & teams, LuaKernel & lua_kernel
, tod_manager const & tod_manager) const
{
static const config::t_token z_filter("filter", false);
static const config::t_token z_filter_adjacent("filter_adjacent", false);
static const config::t_token z_adjacent("adjacent", false);
static const config::t_token z_filter_adjacent_location("filter_adjacent_location", false);
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_filter_adjacent( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent")) );
static const config::t_token & z_adjacent( generate_safe_static_const_t_interned(n_token::t_token("adjacent")) );
static const config::t_token & z_filter_adjacent_location( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent_location")) );
int illuminates = -1;
//assert(resources::units && resources::game_map && resources::teams && resources::tod_manager);
@ -335,15 +335,15 @@ bool unit::ability_affects_adjacent(const std::string& ability, const config& cf
tod_manager const & tod_manager
) const
{
static const config::t_token z_n("n", false);
static const config::t_token z_ne("ne", false);
static const config::t_token z_se("se", false);
static const config::t_token z_s("s", false);
static const config::t_token z_sw("sw", false);
static const config::t_token z_nw("nw", false);
static const config::t_token z_affect_adjacent("affect_adjacent", false);
static const config::t_token z_adjacent("adjacent", false);
static const config::t_token z_filter("filter", false);
static const config::t_token & z_n( generate_safe_static_const_t_interned(n_token::t_token("n")) );
static const config::t_token & z_ne( generate_safe_static_const_t_interned(n_token::t_token("ne")) );
static const config::t_token & z_se( generate_safe_static_const_t_interned(n_token::t_token("se")) );
static const config::t_token & z_s( generate_safe_static_const_t_interned(n_token::t_token("s")) );
static const config::t_token & z_sw( generate_safe_static_const_t_interned(n_token::t_token("sw")) );
static const config::t_token & z_nw( generate_safe_static_const_t_interned(n_token::t_token("nw")) );
static const config::t_token & z_affect_adjacent( generate_safe_static_const_t_interned(n_token::t_token("affect_adjacent")) );
static const config::t_token & z_adjacent( generate_safe_static_const_t_interned(n_token::t_token("adjacent")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
int illuminates = -1;
@ -373,8 +373,8 @@ bool unit::ability_affects_self(const std::string& ability,const config& cfg,con
, t_teams const & teams, LuaKernel & lua_kernel
, tod_manager const & tod_manager
) const {
static const config::t_token z_filter_self("filter_self", false);
static const config::t_token z_affect_self("affect_self", false);
static const config::t_token & z_filter_self( generate_safe_static_const_t_interned(n_token::t_token("filter_self")) );
static const config::t_token & z_affect_self( generate_safe_static_const_t_interned(n_token::t_token("affect_self")) );
int illuminates = -1;
const config &filter = cfg.child(z_filter_self);
@ -386,7 +386,7 @@ bool unit::ability_affects_self(const std::string& ability,const config& cfg,con
bool unit::has_ability_type(const config::t_token& ability) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
if (const config &list = cfg_.child(z_abilities)) {
config::const_child_itors itors = list.child_range(ability);
@ -402,7 +402,7 @@ bool unit_ability_list::empty() const
}
std::pair<int,map_location> unit_ability_list::highest(const config::t_token& key, int def) const {
static const config::t_token z_cumulative("cumulative", false);
static const config::t_token & z_cumulative( generate_safe_static_const_t_interned(n_token::t_token("cumulative")) );
if (cfgs.empty()) {
return std::make_pair(def, map_location());
}
@ -435,7 +435,7 @@ std::pair<int,map_location> unit_ability_list::highest(const config::t_token& ke
std::pair<int,map_location> unit_ability_list::lowest(const config::t_token& key, int def) const
{
static const config::t_token z_cumulative("cumulative", false);
static const config::t_token & z_cumulative( generate_safe_static_const_t_interned(n_token::t_token("cumulative")) );
if (cfgs.empty()) {
return std::make_pair(def, map_location());
@ -498,7 +498,7 @@ std::pair<int,map_location> unit_ability_list::lowest(const config::t_token& key
namespace {
bool get_special_children(std::vector<const config*>& result, const config& parent,
const config::t_token& id, bool just_peeking=false) {
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
foreach (const config::any_child &sp, parent.all_children_range())
{
@ -516,7 +516,7 @@ namespace {
bool attack_type::get_special_bool(const config::t_token& special,bool force) const
{
static const config::t_token z_specials("specials", false);
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
// log_scope("get_special_bool");
if (const config &specials = cfg_.child(z_specials))
@ -544,7 +544,7 @@ bool attack_type::get_special_bool(const config::t_token& special,bool force) co
}
unit_ability_list attack_type::get_specials(const config::t_token& special) const {
static const config::t_token z_specials("specials", false);
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
// log_scope("get_specials");
unit_ability_list res;
@ -569,11 +569,11 @@ unit_ability_list attack_type::get_specials(const config::t_token& special) cons
}
std::vector<t_string> attack_type::special_tooltips(bool force) const
{
static const config::t_token z_specials("specials", false);
static const config::t_token z_name("name", false);
static const config::t_token z_description("description", false);
static const config::t_token z_name_inactive("name_inactive", false);
static const config::t_token z_description_inactive("description_inactive", false);
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_name_inactive( generate_safe_static_const_t_interned(n_token::t_token("name_inactive")) );
static const config::t_token & z_description_inactive( generate_safe_static_const_t_interned(n_token::t_token("description_inactive")) );
// log_scope("special_tooltips");
std::vector<t_string> res;
@ -600,10 +600,10 @@ std::vector<t_string> attack_type::special_tooltips(bool force) const
}
config::t_token attack_type::weapon_specials(bool force) const
{
static const config::t_token z_specials("specials", false);
static const config::t_token z_empty("", false);
static const config::t_token z_name("name", false);
static const config::t_token z_name_inactive("name_inactive", false);
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_name_inactive( generate_safe_static_const_t_interned(n_token::t_token("name_inactive")) );
// log_scope("weapon_specials");
const config &specials = cfg_.child(z_specials);
@ -637,17 +637,17 @@ bool attack_type::special_active(gamemap const & game_map, unit_map const & unit
tod_manager const & tod_manager,
const config& cfg, bool self) const
{
static const config::t_token z_active_on("active_on", false);
static const config::t_token z_offense("offense", false);
static const config::t_token z_filter_self("filter_self", false);
static const config::t_token z_filter_weapon("filter_weapon", false);
static const config::t_token z_filter_opponent("filter_opponent", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_filter_attacker("filter_attacker", false);
static const config::t_token z_filter_defender("filter_defender", false);
static const config::t_token z_filter_adjacent("filter_adjacent", false);
static const config::t_token z_adjacent("adjacent", false);
static const config::t_token z_filter_adjacent_location("filter_adjacent_location", false);
static const config::t_token & z_active_on( generate_safe_static_const_t_interned(n_token::t_token("active_on")) );
static const config::t_token & z_offense( generate_safe_static_const_t_interned(n_token::t_token("offense")) );
static const config::t_token & z_filter_self( generate_safe_static_const_t_interned(n_token::t_token("filter_self")) );
static const config::t_token & z_filter_weapon( generate_safe_static_const_t_interned(n_token::t_token("filter_weapon")) );
static const config::t_token & z_filter_opponent( generate_safe_static_const_t_interned(n_token::t_token("filter_opponent")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_filter_attacker( generate_safe_static_const_t_interned(n_token::t_token("filter_attacker")) );
static const config::t_token & z_filter_defender( generate_safe_static_const_t_interned(n_token::t_token("filter_defender")) );
static const config::t_token & z_filter_adjacent( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent")) );
static const config::t_token & z_adjacent( generate_safe_static_const_t_interned(n_token::t_token("adjacent")) );
static const config::t_token & z_filter_adjacent_location( generate_safe_static_const_t_interned(n_token::t_token("filter_adjacent_location")) );
// log_scope("special_active");
assert(unitmap_ != NULL);
@ -798,11 +798,11 @@ bool attack_type::special_active(gamemap const & game_map, unit_map const & unit
*/
bool attack_type::special_affects_opponent(const config& cfg) const
{
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_both("both", false);
static const config::t_token z_opponent("opponent", false);
static const config::t_token z_defender("defender", false);
static const config::t_token z_attacker("attacker", false);
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_both( generate_safe_static_const_t_interned(n_token::t_token("both")) );
static const config::t_token & z_opponent( generate_safe_static_const_t_interned(n_token::t_token("opponent")) );
static const config::t_token & z_defender( generate_safe_static_const_t_interned(n_token::t_token("defender")) );
static const config::t_token & z_attacker( generate_safe_static_const_t_interned(n_token::t_token("attacker")) );
// log_scope("special_affects_opponent");
config::attribute_value const &apply_to = cfg[z_apply_to];
@ -825,11 +825,11 @@ bool attack_type::special_affects_opponent(const config& cfg) const
*/
bool attack_type::special_affects_self(const config& cfg) const
{
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_both("both", false);
static const config::t_token z_self("self", false);
static const config::t_token z_attacker("attacker", false);
static const config::t_token z_defender("defender", false);
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_both( generate_safe_static_const_t_interned(n_token::t_token("both")) );
static const config::t_token & z_self( generate_safe_static_const_t_interned(n_token::t_token("self")) );
static const config::t_token & z_attacker( generate_safe_static_const_t_interned(n_token::t_token("attacker")) );
static const config::t_token & z_defender( generate_safe_static_const_t_interned(n_token::t_token("defender")) );
// log_scope("special_affects_self");
config::attribute_value const &apply_to = cfg[z_apply_to];
@ -880,13 +880,13 @@ void individual_effect::set(value_modifier t, int val, const config *abil, const
bool filter_base_matches(const config& cfg, int def)
{
static const config::t_token z_filter_base_value("filter_base_value", false);
static const config::t_token z_equals("equals", false);
static const config::t_token z_not_equals("not_equals", false);
static const config::t_token z_less_than("less_than", false);
static const config::t_token z_greater_than("greater_than", false);
static const config::t_token z_greater_than_equal_to("greater_than_equal_to", false);
static const config::t_token z_less_than_equal_to("less_than_equal_to", false);
static const config::t_token & z_filter_base_value( generate_safe_static_const_t_interned(n_token::t_token("filter_base_value")) );
static const config::t_token & z_equals( generate_safe_static_const_t_interned(n_token::t_token("equals")) );
static const config::t_token & z_not_equals( generate_safe_static_const_t_interned(n_token::t_token("not_equals")) );
static const config::t_token & z_less_than( generate_safe_static_const_t_interned(n_token::t_token("less_than")) );
static const config::t_token & z_greater_than( generate_safe_static_const_t_interned(n_token::t_token("greater_than")) );
static const config::t_token & z_greater_than_equal_to( generate_safe_static_const_t_interned(n_token::t_token("greater_than_equal_to")) );
static const config::t_token & z_less_than_equal_to( generate_safe_static_const_t_interned(n_token::t_token("less_than_equal_to")) );
if (const config &apply_filter = cfg.child(z_filter_base_value)) {
config::attribute_value cond_eq = apply_filter[z_equals];
@ -909,15 +909,15 @@ effect::effect(const unit_ability_list& list, int def, bool backstab) :
effect_list_(),
composite_value_(0)
{
static const config::t_token z_id("id", false);
static const config::t_token z_name("name", false);
static const config::t_token z_backstab("backstab", false);
static const config::t_token z_value("value", false);
static const config::t_token z_cumulative("cumulative", false);
static const config::t_token z_add("add", false);
static const config::t_token z_sub("sub", false);
static const config::t_token z_multiply("multiply", false);
static const config::t_token z_divide("divide", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_backstab( generate_safe_static_const_t_interned(n_token::t_token("backstab")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_cumulative( generate_safe_static_const_t_interned(n_token::t_token("cumulative")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
static const config::t_token & z_sub( generate_safe_static_const_t_interned(n_token::t_token("sub")) );
static const config::t_token & z_multiply( generate_safe_static_const_t_interned(n_token::t_token("multiply")) );
static const config::t_token & z_divide( generate_safe_static_const_t_interned(n_token::t_token("divide")) );
int value_set = def;

View file

@ -30,30 +30,30 @@
struct tag_name_manager {
tag_name_manager() : names() {
static const config::t_token z_animation("animation", false);
static const config::t_token z_attack_anim("attack_anim", false);
static const config::t_token z_death("death", false);
static const config::t_token z_defend("defend", false);
static const config::t_token z_extra_anim("extra_anim", false);
static const config::t_token z_healed_anim("healed_anim", false);
static const config::t_token z_healing_anim("healing_anim", false);
static const config::t_token z_idle_anim("idle_anim", false);
static const config::t_token z_leading_anim("leading_anim", false);
static const config::t_token z_resistance_anim("resistance_anim", false);
static const config::t_token z_levelin_anim("levelin_anim", false);
static const config::t_token z_levelout_anim("levelout_anim", false);
static const config::t_token z_movement_anim("movement_anim", false);
static const config::t_token z_poison_anim("poison_anim", false);
static const config::t_token z_recruit_anim("recruit_anim", false);
static const config::t_token z_recruiting_anim("recruiting_anim", false);
static const config::t_token z_standing_anim("standing_anim", false);
static const config::t_token z_teleport_anim("teleport_anim", false);
static const config::t_token z_pre_movement_anim("pre_movement_anim", false);
static const config::t_token z_post_movement_anim("post_movement_anim", false);
static const config::t_token z_draw_weapon_anim("draw_weapon_anim", false);
static const config::t_token z_sheath_weapon_anim("sheath_weapon_anim", false);
static const config::t_token z_victory_anim("victory_anim", false);
static const config::t_token z__transparent("_transparent", false);
static const config::t_token & z_animation( generate_safe_static_const_t_interned(n_token::t_token("animation")) );
static const config::t_token & z_attack_anim( generate_safe_static_const_t_interned(n_token::t_token("attack_anim")) );
static const config::t_token & z_death( generate_safe_static_const_t_interned(n_token::t_token("death")) );
static const config::t_token & z_defend( generate_safe_static_const_t_interned(n_token::t_token("defend")) );
static const config::t_token & z_extra_anim( generate_safe_static_const_t_interned(n_token::t_token("extra_anim")) );
static const config::t_token & z_healed_anim( generate_safe_static_const_t_interned(n_token::t_token("healed_anim")) );
static const config::t_token & z_healing_anim( generate_safe_static_const_t_interned(n_token::t_token("healing_anim")) );
static const config::t_token & z_idle_anim( generate_safe_static_const_t_interned(n_token::t_token("idle_anim")) );
static const config::t_token & z_leading_anim( generate_safe_static_const_t_interned(n_token::t_token("leading_anim")) );
static const config::t_token & z_resistance_anim( generate_safe_static_const_t_interned(n_token::t_token("resistance_anim")) );
static const config::t_token & z_levelin_anim( generate_safe_static_const_t_interned(n_token::t_token("levelin_anim")) );
static const config::t_token & z_levelout_anim( generate_safe_static_const_t_interned(n_token::t_token("levelout_anim")) );
static const config::t_token & z_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("movement_anim")) );
static const config::t_token & z_poison_anim( generate_safe_static_const_t_interned(n_token::t_token("poison_anim")) );
static const config::t_token & z_recruit_anim( generate_safe_static_const_t_interned(n_token::t_token("recruit_anim")) );
static const config::t_token & z_recruiting_anim( generate_safe_static_const_t_interned(n_token::t_token("recruiting_anim")) );
static const config::t_token & z_standing_anim( generate_safe_static_const_t_interned(n_token::t_token("standing_anim")) );
static const config::t_token & z_teleport_anim( generate_safe_static_const_t_interned(n_token::t_token("teleport_anim")) );
static const config::t_token & z_pre_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("pre_movement_anim")) );
static const config::t_token & z_post_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("post_movement_anim")) );
static const config::t_token & z_draw_weapon_anim( generate_safe_static_const_t_interned(n_token::t_token("draw_weapon_anim")) );
static const config::t_token & z_sheath_weapon_anim( generate_safe_static_const_t_interned(n_token::t_token("sheath_weapon_anim")) );
static const config::t_token & z_victory_anim( generate_safe_static_const_t_interned(n_token::t_token("victory_anim")) );
static const config::t_token & z__transparent( generate_safe_static_const_t_interned(n_token::t_token("_transparent")) );
names.push_back(z_animation);
names.push_back(z_attack_anim);
@ -131,8 +131,8 @@ struct animation_cursor
static void prepare_single_animation(const config &anim_cfg, animation_branches &expanded_anims)
{
static const config::t_token z_if("if", false);
static const config::t_token z_else("else", false);
static const config::t_token & z_if( generate_safe_static_const_t_interned(n_token::t_token("if")) );
static const config::t_token & z_else( generate_safe_static_const_t_interned(n_token::t_token("else")) );
std::list<animation_cursor> anim_cursors;
anim_cursors.push_back(animation_cursor(anim_cfg));
@ -238,21 +238,21 @@ unit_animation::unit_animation(const config& cfg,const n_token::t_token& frame_s
play_offscreen_(true),
overlaped_hex_()
{
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_direction("direction", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_filter_second("filter_second", false);
static const config::t_token z_value("value", false);
static const config::t_token z_hits("hits", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_hit("hit", false);
static const config::t_token z_no("no", false);
static const config::t_token z_miss("miss", false);
static const config::t_token z_kill("kill", false);
static const config::t_token z_value_second("value_second", false);
static const config::t_token z_filter_attack("filter_attack", false);
static const config::t_token z_filter_second_attack("filter_second_attack", false);
static const config::t_token z_offscreen("offscreen", false);
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_direction( generate_safe_static_const_t_interned(n_token::t_token("direction")) );
static const config::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const config::t_token & z_filter_second( generate_safe_static_const_t_interned(n_token::t_token("filter_second")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_hits( generate_safe_static_const_t_interned(n_token::t_token("hits")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_hit( generate_safe_static_const_t_interned(n_token::t_token("hit")) );
static const config::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const config::t_token & z_miss( generate_safe_static_const_t_interned(n_token::t_token("miss")) );
static const config::t_token & z_kill( generate_safe_static_const_t_interned(n_token::t_token("kill")) );
static const config::t_token & z_value_second( generate_safe_static_const_t_interned(n_token::t_token("value_second")) );
static const config::t_token & z_filter_attack( generate_safe_static_const_t_interned(n_token::t_token("filter_attack")) );
static const config::t_token & z_filter_second_attack( generate_safe_static_const_t_interned(n_token::t_token("filter_second_attack")) );
static const config::t_token & z_offscreen( generate_safe_static_const_t_interned(n_token::t_token("offscreen")) );
// if(!cfg[z_debug].empty()) printf("DEBUG WML: FINAL\n%s\n\n",cfg.debug().c_str());
foreach (const config::any_child &fr, cfg.all_children_range())
@ -407,38 +407,38 @@ int unit_animation::matches(const game_display &disp,const map_location& loc,con
void unit_animation::fill_initial_animations( std::vector<unit_animation> & animations, const config & cfg)
{
static const config::t_token z_GS("~GS()", false);
static const config::t_token z_local_heal_wav("heal.wav", false);
static const config::t_token z_local_pois_sound("poison.ogg", false);
static const config::t_token z_image("image", false);
static const config::t_token z_default("default", false);
static const config::t_token z__disabled_("_disabled_", false);
static const config::t_token z__disabled_selected_("_disabled_selected_", false);
static const config::t_token z_standing("standing", false);
static const config::t_token z_ghosted("ghosted", false);
static const config::t_token z_disabled_ghosted("disabled_ghosted", false);
static const config::t_token z_selected("selected", false);
static const config::t_token z_recruited("recruited", false);
static const config::t_token z_levelin("levelin", false);
static const config::t_token z_levelout("levelout", false);
static const config::t_token z_pre_movement("pre_movement", false);
static const config::t_token z_post_movement("post_movement", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_defend("defend", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_range("range", false);
static const config::t_token z_melee("melee", false);
static const config::t_token z_ranged("ranged", false);
static const config::t_token z_death("death", false);
static const config::t_token z__death_sound("_death_sound", false);
static const config::t_token z_die_sound("die_sound", false);
static const config::t_token z_victory("victory", false);
static const config::t_token z_pre_teleport("pre_teleport", false);
static const config::t_token z_post_teleport("post_teleport", false);
static const config::t_token z_healed("healed", false);
static const config::t_token z__healed_sound("_healed_sound", false);
static const config::t_token z_poisoned("poisoned", false);
static const config::t_token z__poison_sound("_poison_sound", false);
static const config::t_token & z_GS( generate_safe_static_const_t_interned(n_token::t_token("~GS()")) );
static const config::t_token & z_local_heal_wav( generate_safe_static_const_t_interned(n_token::t_token("heal.wav")) );
static const config::t_token & z_local_pois_sound( generate_safe_static_const_t_interned(n_token::t_token("poison.ogg")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_default( generate_safe_static_const_t_interned(n_token::t_token("default")) );
static const config::t_token & z__disabled_( generate_safe_static_const_t_interned(n_token::t_token("_disabled_")) );
static const config::t_token & z__disabled_selected_( generate_safe_static_const_t_interned(n_token::t_token("_disabled_selected_")) );
static const config::t_token & z_standing( generate_safe_static_const_t_interned(n_token::t_token("standing")) );
static const config::t_token & z_ghosted( generate_safe_static_const_t_interned(n_token::t_token("ghosted")) );
static const config::t_token & z_disabled_ghosted( generate_safe_static_const_t_interned(n_token::t_token("disabled_ghosted")) );
static const config::t_token & z_selected( generate_safe_static_const_t_interned(n_token::t_token("selected")) );
static const config::t_token & z_recruited( generate_safe_static_const_t_interned(n_token::t_token("recruited")) );
static const config::t_token & z_levelin( generate_safe_static_const_t_interned(n_token::t_token("levelin")) );
static const config::t_token & z_levelout( generate_safe_static_const_t_interned(n_token::t_token("levelout")) );
static const config::t_token & z_pre_movement( generate_safe_static_const_t_interned(n_token::t_token("pre_movement")) );
static const config::t_token & z_post_movement( generate_safe_static_const_t_interned(n_token::t_token("post_movement")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_defend( generate_safe_static_const_t_interned(n_token::t_token("defend")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_range( generate_safe_static_const_t_interned(n_token::t_token("range")) );
static const config::t_token & z_melee( generate_safe_static_const_t_interned(n_token::t_token("melee")) );
static const config::t_token & z_ranged( generate_safe_static_const_t_interned(n_token::t_token("ranged")) );
static const config::t_token & z_death( generate_safe_static_const_t_interned(n_token::t_token("death")) );
static const config::t_token & z__death_sound( generate_safe_static_const_t_interned(n_token::t_token("_death_sound")) );
static const config::t_token & z_die_sound( generate_safe_static_const_t_interned(n_token::t_token("die_sound")) );
static const config::t_token & z_victory( generate_safe_static_const_t_interned(n_token::t_token("victory")) );
static const config::t_token & z_pre_teleport( generate_safe_static_const_t_interned(n_token::t_token("pre_teleport")) );
static const config::t_token & z_post_teleport( generate_safe_static_const_t_interned(n_token::t_token("post_teleport")) );
static const config::t_token & z_healed( generate_safe_static_const_t_interned(n_token::t_token("healed")) );
static const config::t_token & z__healed_sound( generate_safe_static_const_t_interned(n_token::t_token("_healed_sound")) );
static const config::t_token & z_poisoned( generate_safe_static_const_t_interned(n_token::t_token("poisoned")) );
static const config::t_token & z__poison_sound( generate_safe_static_const_t_interned(n_token::t_token("_poison_sound")) );
const image::locator default_image = image::locator(cfg[z_image].token());
std::vector<unit_animation> animation_base;
@ -457,7 +457,7 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(unit_animation(0,frame_builder().image(default_image).duration(1),z__disabled_,0));
{
static const config::t_token z_local_blend("0.0~0.3:100,0.3~0.0:200", false);
static const config::t_token & z_local_blend( generate_safe_static_const_t_interned(n_token::t_token("0.0~0.3:100,0.3~0.0:200")) );
animations.push_back(unit_animation(0,frame_builder().image(default_image).duration(300).
blend(z_local_blend,display::rgb(255,255,255)),z__disabled_selected_,0));
}
@ -474,22 +474,22 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_ghosted);
static const config::t_token z_local_0p9("0.9", false);
static const config::t_token & z_local_0p9( generate_safe_static_const_t_interned(n_token::t_token("0.9")) );
animations.back().unit_anim_.override(0,animations.back().unit_anim_.get_animation_duration(),particule::UNSET,z_local_0p9,n_token::t_token::z_empty(),0,n_token::t_token::z_empty(),n_token::t_token::z_empty(), z_GS);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_disabled_ghosted);
static const config::t_token z_local_0p4("0.4", false);
static const config::t_token & z_local_0p4( generate_safe_static_const_t_interned(n_token::t_token("0.4")) );
animations.back().unit_anim_.override(0,1,particule::UNSET,z_local_0p4 ,n_token::t_token::z_empty(),0,n_token::t_token::z_empty(),n_token::t_token::z_empty(),z_GS);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_selected);
static const config::t_token z_local_t1("0.0~0.3:100,0.3~0.0:200", false);
static const config::t_token & z_local_t1( generate_safe_static_const_t_interned(n_token::t_token("0.0~0.3:100,0.3~0.0:200")) );
animations.back().unit_anim_.override(0,300,particule::UNSET,n_token::t_token::z_empty(),z_local_t1,display::rgb(255,255,255));
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_recruited);
static const config::t_token z_local_0_1_600("0~1:600", false);
static const config::t_token & z_local_0_1_600( generate_safe_static_const_t_interned(n_token::t_token("0~1:600")) );
animations.back().unit_anim_.override(0,600,particule::NO_CYCLE, z_local_0_1_600);
animations.push_back(*itor);
@ -498,7 +498,7 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_levelout);
static const config::t_token z_local_0_1_600_1("0~1:600,1", false);
static const config::t_token & z_local_0_1_600_1( generate_safe_static_const_t_interned(n_token::t_token("0~1:600,1")) );
animations.back().unit_anim_.override(0,600,particule::NO_CYCLE,n_token::t_token::z_empty(), z_local_0_1_600_1,display::rgb(255,255,255));
animations.push_back(*itor);
@ -509,13 +509,13 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_movement);
static const config::t_token z_local_try_and_parse_me("0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,", false);
static const n_token::t_token z_local_move_layer(lexical_cast<std::string>(display::LAYER_UNIT_MOVE_DEFAULT-display::LAYER_UNIT_FIRST), false);
static const config::t_token & z_local_try_and_parse_me( generate_safe_static_const_t_interned(n_token::t_token("0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,")) );
static const n_token::t_token & z_local_move_layer( generate_safe_static_const_t_interned(n_token::t_token(lexical_cast<std::string>(display::LAYER_UNIT_MOVE_DEFAULT-display::LAYER_UNIT_FIRST)) ) );
animations.back().unit_anim_.override(0,6800,particule::NO_CYCLE,n_token::t_token::z_empty(),n_token::t_token::z_empty(),0,z_local_try_and_parse_me , z_local_move_layer);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_defend);
static const config::t_token z_local_t2("0.0,0.5:75,0.0:75,0.5:75,0.0", false);
static const config::t_token & z_local_t2( generate_safe_static_const_t_interned(n_token::t_token("0.0,0.5:75,0.0:75,0.5:75,0.0")) );
animations.back().unit_anim_.override(0,animations.back().unit_anim_.get_animation_duration(),particule::NO_CYCLE,n_token::t_token::z_empty(), z_local_t2,game_display::rgb(255,0,0));
animations.back().hits_.push_back(HIT);
animations.back().hits_.push_back(KILL);
@ -525,7 +525,7 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_attack);
static const config::t_token z_local_t4("0~0.6:150,0.6~0:150", false);
static const config::t_token & z_local_t4( generate_safe_static_const_t_interned(n_token::t_token("0~0.6:150,0.6~0:150")) );
animations.back().unit_anim_.override(-150,300,particule::NO_CYCLE,n_token::t_token::z_empty(),n_token::t_token::z_empty(),0, z_local_t4,z_local_move_layer);
animations.back().primary_attack_filter_.push_back(config());
animations.back().primary_attack_filter_.back()[z_range] = z_melee;
@ -538,7 +538,7 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_death);
static const config::t_token z_local_1_0_600("1~0:600", false);
static const config::t_token & z_local_1_0_600( generate_safe_static_const_t_interned(n_token::t_token("1~0:600")) );
animations.back().unit_anim_.override(0,600,particule::NO_CYCLE, z_local_1_0_600);
animations.back().sub_anims_[z__death_sound] = particule();
animations.back().sub_anims_[z__death_sound].add_frame(1,frame_builder());
@ -548,18 +548,18 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.back().event_ = utils::split_token(z_victory);
animations.push_back(*itor);
static const config::t_token z_local_pretele("1~0:150", false);
static const config::t_token & z_local_pretele( generate_safe_static_const_t_interned(n_token::t_token("1~0:150")) );
animations.back().unit_anim_.override(0,150,particule::NO_CYCLE,z_local_pretele);
animations.back().event_ = utils::split_token(z_pre_teleport);
animations.push_back(*itor);
static const config::t_token z_local_posttele("0~1:150,1", false);
static const config::t_token & z_local_posttele( generate_safe_static_const_t_interned(n_token::t_token("0~1:150,1")) );
animations.back().unit_anim_.override(0,150,particule::NO_CYCLE, z_local_posttele);
animations.back().event_ = utils::split_token(z_post_teleport);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_healed);
static const config::t_token z_local_healed("0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30", false);
static const config::t_token & z_local_healed( generate_safe_static_const_t_interned(n_token::t_token("0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30")) );
animations.back().unit_anim_.override(0,300,particule::NO_CYCLE,n_token::t_token::z_empty(),z_local_healed,display::rgb(255,255,255));
animations.back().sub_anims_[z__healed_sound] = particule();
animations.back().sub_anims_[z__healed_sound].add_frame(1,frame_builder());
@ -567,7 +567,7 @@ static const config::t_token z_local_pois_sound("poison.ogg", false);
animations.push_back(*itor);
animations.back().event_ = utils::split_token(z_poisoned);
static const config::t_token z_local_pois("0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30", false);
static const config::t_token & z_local_pois( generate_safe_static_const_t_interned(n_token::t_token("0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30,0.5:30,0:30")) );
animations.back().unit_anim_.override(0,300,particule::NO_CYCLE,n_token::t_token::z_empty(), z_local_pois,display::rgb(0,255,0));
animations.back().sub_anims_[z__poison_sound] = particule();
animations.back().sub_anims_[z__poison_sound].add_frame(1,frame_builder());
@ -581,9 +581,9 @@ static void add_simple_anim(std::vector<unit_animation> &animations, const confi
display::tdrawing_layer layer = display::LAYER_UNIT_DEFAULT,
bool offscreen = true)
{
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_offscreen("offscreen", false);
static const config::t_token z_layer("layer", false);
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_offscreen( generate_safe_static_const_t_interned(n_token::t_token("offscreen")) );
static const config::t_token & z_layer( generate_safe_static_const_t_interned(n_token::t_token("layer")) );
foreach (const animation_branch &ab, prepare_animation(cfg, tag_name))
{
@ -600,72 +600,72 @@ static void add_simple_anim(std::vector<unit_animation> &animations, const confi
}
void unit_animation::add_anims( std::vector<unit_animation> & animations, const config & cfg) {
static const config::t_token z_animation("animation", false);
static const config::t_token z_resistance_anim("resistance_anim", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token z_leading_anim("leading_anim", false);
static const config::t_token z_leading("leading", false);
static const config::t_token z_recruit_anim("recruit_anim", false);
static const config::t_token z_recruited("recruited", false);
static const config::t_token z_recruiting_anim("recruiting_anim", false);
static const config::t_token z_recruiting("recruiting", false);
static const config::t_token z_idle_anim("idle_anim", false);
static const config::t_token z_idling("idling", false);
static const config::t_token z_levelin_anim("levelin_anim", false);
static const config::t_token z_levelin("levelin", false);
static const config::t_token z_levelout_anim("levelout_anim", false);
static const config::t_token z_levelout("levelout", false);
static const config::t_token z_standing_anim("standing_anim", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_standing_c_default("standing,default", false);
static const config::t_token z_cycles("cycles", false);
static const config::t_token z_true("true", false);
static const config::t_token z_layer("layer", false);
static const config::t_token z_offscreen("offscreen", false);
static const config::t_token z_healing_anim("healing_anim", false);
static const config::t_token z_healing("healing", false);
static const config::t_token z_value("value", false);
static const config::t_token z_healed_anim("healed_anim", false);
static const config::t_token z_healed("healed", false);
static const config::t_token z__healed_sound("_healed_sound", false);
static const config::t_token z_local_heal_wav("local_heal_wav", false);
static const config::t_token z_poison_anim("poison_anim", false);
static const config::t_token z_poisoned("poisoned", false);
static const config::t_token z_damage("damage", false);
static const config::t_token z__poison_sound("_poison_sound", false);
static const config::t_token z_local_pois_sound("local_pois_sound", false);
static const config::t_token z_pre_movement_anim("pre_movement_anim", false);
static const config::t_token z_pre_movement("pre_movement", false);
static const config::t_token z_movement_anim("movement_anim", false);
static const config::t_token z_offset("offset", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_post_movement_anim("post_movement_anim", false);
static const config::t_token z_post_movement("post_movement", false);
static const config::t_token z_defend("defend", false);
static const config::t_token z_hits("hits", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_hit("hit", false);
static const config::t_token z_kill("kill", false);
static const config::t_token z_draw_weapon_anim("draw_weapon_anim", false);
static const config::t_token z_draw_weapon("draw_weapon", false);
static const config::t_token z_sheath_weapon_anim("sheath_weapon_anim", false);
static const config::t_token z_sheath_weapon("sheath_weapon", false);
static const config::t_token z_attack_anim("attack_anim", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_missile_frame("missile_frame", false);
static const config::t_token z_missile_offset("missile_offset", false);
static const config::t_token z_missile_layer("missile_layer", false);
static const config::t_token z_duration("duration", false);
static const config::t_token z_death("death", false);
static const config::t_token z_die_sound("die_sound", false);
static const config::t_token z__death_sound("_death_sound", false);
static const config::t_token z_victory_anim("victory_anim", false);
static const config::t_token z_victory("victory", false);
static const config::t_token z_extra_anim("extra_anim", false);
static const config::t_token z_flag("flag", false);
static const config::t_token z_teleport_anim("teleport_anim", false);
static const config::t_token z_pre_teleport("pre_teleport", false);
static const config::t_token z_post_teleport("post_teleport", false);
static const config::t_token & z_animation( generate_safe_static_const_t_interned(n_token::t_token("animation")) );
static const config::t_token & z_resistance_anim( generate_safe_static_const_t_interned(n_token::t_token("resistance_anim")) );
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const config::t_token & z_leading_anim( generate_safe_static_const_t_interned(n_token::t_token("leading_anim")) );
static const config::t_token & z_leading( generate_safe_static_const_t_interned(n_token::t_token("leading")) );
static const config::t_token & z_recruit_anim( generate_safe_static_const_t_interned(n_token::t_token("recruit_anim")) );
static const config::t_token & z_recruited( generate_safe_static_const_t_interned(n_token::t_token("recruited")) );
static const config::t_token & z_recruiting_anim( generate_safe_static_const_t_interned(n_token::t_token("recruiting_anim")) );
static const config::t_token & z_recruiting( generate_safe_static_const_t_interned(n_token::t_token("recruiting")) );
static const config::t_token & z_idle_anim( generate_safe_static_const_t_interned(n_token::t_token("idle_anim")) );
static const config::t_token & z_idling( generate_safe_static_const_t_interned(n_token::t_token("idling")) );
static const config::t_token & z_levelin_anim( generate_safe_static_const_t_interned(n_token::t_token("levelin_anim")) );
static const config::t_token & z_levelin( generate_safe_static_const_t_interned(n_token::t_token("levelin")) );
static const config::t_token & z_levelout_anim( generate_safe_static_const_t_interned(n_token::t_token("levelout_anim")) );
static const config::t_token & z_levelout( generate_safe_static_const_t_interned(n_token::t_token("levelout")) );
static const config::t_token & z_standing_anim( generate_safe_static_const_t_interned(n_token::t_token("standing_anim")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_standing_c_default( generate_safe_static_const_t_interned(n_token::t_token("standing,default")) );
static const config::t_token & z_cycles( generate_safe_static_const_t_interned(n_token::t_token("cycles")) );
static const config::t_token & z_true( generate_safe_static_const_t_interned(n_token::t_token("true")) );
static const config::t_token & z_layer( generate_safe_static_const_t_interned(n_token::t_token("layer")) );
static const config::t_token & z_offscreen( generate_safe_static_const_t_interned(n_token::t_token("offscreen")) );
static const config::t_token & z_healing_anim( generate_safe_static_const_t_interned(n_token::t_token("healing_anim")) );
static const config::t_token & z_healing( generate_safe_static_const_t_interned(n_token::t_token("healing")) );
static const config::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const config::t_token & z_healed_anim( generate_safe_static_const_t_interned(n_token::t_token("healed_anim")) );
static const config::t_token & z_healed( generate_safe_static_const_t_interned(n_token::t_token("healed")) );
static const config::t_token & z__healed_sound( generate_safe_static_const_t_interned(n_token::t_token("_healed_sound")) );
static const config::t_token & z_local_heal_wav( generate_safe_static_const_t_interned(n_token::t_token("local_heal_wav")) );
static const config::t_token & z_poison_anim( generate_safe_static_const_t_interned(n_token::t_token("poison_anim")) );
static const config::t_token & z_poisoned( generate_safe_static_const_t_interned(n_token::t_token("poisoned")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z__poison_sound( generate_safe_static_const_t_interned(n_token::t_token("_poison_sound")) );
static const config::t_token & z_local_pois_sound( generate_safe_static_const_t_interned(n_token::t_token("local_pois_sound")) );
static const config::t_token & z_pre_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("pre_movement_anim")) );
static const config::t_token & z_pre_movement( generate_safe_static_const_t_interned(n_token::t_token("pre_movement")) );
static const config::t_token & z_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("movement_anim")) );
static const config::t_token & z_offset( generate_safe_static_const_t_interned(n_token::t_token("offset")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_post_movement_anim( generate_safe_static_const_t_interned(n_token::t_token("post_movement_anim")) );
static const config::t_token & z_post_movement( generate_safe_static_const_t_interned(n_token::t_token("post_movement")) );
static const config::t_token & z_defend( generate_safe_static_const_t_interned(n_token::t_token("defend")) );
static const config::t_token & z_hits( generate_safe_static_const_t_interned(n_token::t_token("hits")) );
static const config::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const config::t_token & z_hit( generate_safe_static_const_t_interned(n_token::t_token("hit")) );
static const config::t_token & z_kill( generate_safe_static_const_t_interned(n_token::t_token("kill")) );
static const config::t_token & z_draw_weapon_anim( generate_safe_static_const_t_interned(n_token::t_token("draw_weapon_anim")) );
static const config::t_token & z_draw_weapon( generate_safe_static_const_t_interned(n_token::t_token("draw_weapon")) );
static const config::t_token & z_sheath_weapon_anim( generate_safe_static_const_t_interned(n_token::t_token("sheath_weapon_anim")) );
static const config::t_token & z_sheath_weapon( generate_safe_static_const_t_interned(n_token::t_token("sheath_weapon")) );
static const config::t_token & z_attack_anim( generate_safe_static_const_t_interned(n_token::t_token("attack_anim")) );
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const config::t_token & z_missile_frame( generate_safe_static_const_t_interned(n_token::t_token("missile_frame")) );
static const config::t_token & z_missile_offset( generate_safe_static_const_t_interned(n_token::t_token("missile_offset")) );
static const config::t_token & z_missile_layer( generate_safe_static_const_t_interned(n_token::t_token("missile_layer")) );
static const config::t_token & z_duration( generate_safe_static_const_t_interned(n_token::t_token("duration")) );
static const config::t_token & z_death( generate_safe_static_const_t_interned(n_token::t_token("death")) );
static const config::t_token & z_die_sound( generate_safe_static_const_t_interned(n_token::t_token("die_sound")) );
static const config::t_token & z__death_sound( generate_safe_static_const_t_interned(n_token::t_token("_death_sound")) );
static const config::t_token & z_victory_anim( generate_safe_static_const_t_interned(n_token::t_token("victory_anim")) );
static const config::t_token & z_victory( generate_safe_static_const_t_interned(n_token::t_token("victory")) );
static const config::t_token & z_extra_anim( generate_safe_static_const_t_interned(n_token::t_token("extra_anim")) );
static const config::t_token & z_flag( generate_safe_static_const_t_interned(n_token::t_token("flag")) );
static const config::t_token & z_teleport_anim( generate_safe_static_const_t_interned(n_token::t_token("teleport_anim")) );
static const config::t_token & z_pre_teleport( generate_safe_static_const_t_interned(n_token::t_token("pre_teleport")) );
static const config::t_token & z_post_teleport( generate_safe_static_const_t_interned(n_token::t_token("post_teleport")) );
foreach (const animation_branch &ab, prepare_animation(cfg, z_animation)) {
animations.push_back(unit_animation(ab.merge())); }
@ -753,7 +753,7 @@ void unit_animation::add_anims( std::vector<unit_animation> & animations, const
animations.push_back(unit_animation(anim));
anim[z_hits] = true;
animations.push_back(unit_animation(anim));
static const config::t_token z_local_blend("0.0,0.5:75,0.0:75,0.5:75,0.0", false);
static const config::t_token & z_local_blend( generate_safe_static_const_t_interned(n_token::t_token("0.0,0.5:75,0.0:75,0.5:75,0.0")) );
animations.back().add_frame(225,frame_builder()
.image(animations.back().get_last_frame().parameters(0).image)
.duration(225)
@ -768,7 +768,7 @@ void unit_animation::add_anims( std::vector<unit_animation> & animations, const
tmp[z_hits] = hit_type;
animations.push_back(unit_animation(tmp));
if(hit_type == z_yes || hit_type == z_hit || hit_type==z_kill) {
static const config::t_token z_local_blend("0.0,0.5:75,0.0:75,0.5:75,0.0", false);
static const config::t_token & z_local_blend( generate_safe_static_const_t_interned(n_token::t_token("0.0,0.5:75,0.0:75,0.5:75,0.0")) );
animations.back().add_frame(225,frame_builder()
.image(animations.back().get_last_frame().parameters(0).image)
.duration(225)
@ -787,12 +787,12 @@ void unit_animation::add_anims( std::vector<unit_animation> & animations, const
anim[z_apply_to] = z_attack;
if (anim[z_layer].empty()) anim[z_layer] = move_layer;
config::const_child_itors missile_fs = anim.child_range(z_missile_frame);
static const config::t_token z_local_missile_t1("0~0.6,0.6~0", false);
static const config::t_token & z_local_missile_t1( generate_safe_static_const_t_interned(n_token::t_token("0~0.6,0.6~0")) );
if (anim[z_offset].empty() && missile_fs.first == missile_fs.second) {
anim[z_offset] = z_local_missile_t1;
}
if (missile_fs.first != missile_fs.second) {
static const config::t_token z_local_missile_t2("0~0.8", false);
static const config::t_token & z_local_missile_t2( generate_safe_static_const_t_interned(n_token::t_token("0~0.8")) );
if (anim[z_missile_offset].empty()) anim[z_missile_offset] = z_local_missile_t2;
if (anim[z_missile_layer].empty()) anim[z_missile_layer] = missile_layer;
config tmp;
@ -811,7 +811,7 @@ void unit_animation::add_anims( std::vector<unit_animation> & animations, const
if (anim[z_layer].empty()) anim[z_layer] = default_layer;
animations.push_back(unit_animation(anim));
image::locator image_loc = animations.back().get_last_frame().parameters(0).image;
static const config::t_token z_local_1_0_600("1~0:600", false);
static const config::t_token & z_local_1_0_600( generate_safe_static_const_t_interned(n_token::t_token("1~0:600")) );
animations.back().add_frame(600,frame_builder().image(image_loc).duration(600).highlight(z_local_1_0_600));
if(!cfg[z_die_sound].empty()) {
animations.back().sub_anims_[z__death_sound] = particule();
@ -901,10 +901,10 @@ unit_animation::particule::particule(
last_frame_begin_time_(0),
cycles_(false)
{
static const config::t_token z_frame("frame", false);
static const config::t_token z_start_time("start_time", false);
static const config::t_token z_begin("begin", false);
static const config::t_token z_cycles("cycles", false);
static const config::t_token & z_frame( generate_safe_static_const_t_interned(n_token::t_token("frame")) );
static const config::t_token & z_start_time( generate_safe_static_const_t_interned(n_token::t_token("start_time")) );
static const config::t_token & z_begin( generate_safe_static_const_t_interned(n_token::t_token("begin")) );
static const config::t_token & z_cycles( generate_safe_static_const_t_interned(n_token::t_token("cycles")) );
config::const_child_itors range = cfg.child_range(frame_string+z_frame);
@ -1014,7 +1014,7 @@ void unit_animation::start_animation(int start_time
dst_ = dst;
unit_anim_.start_animation(start_time);
if(!text.empty()) {
static const config::t_token z__add_text("_add_text", false);
static const config::t_token & z__add_text( generate_safe_static_const_t_interned(n_token::t_token("_add_text")) );
particule crude_build;
crude_build.add_frame(1,frame_builder());

View file

@ -29,53 +29,11 @@
#define LOG_DP LOG_STREAM(info, display)
namespace {
//Static tokens are replacements for string literals in code
//They allow for fast comparison, copying and hashing operations.
static const config::t_token z_red("red", false);
static const config::t_token z_green("green", false);
static const config::t_token z_blue("blue", false);
static const config::t_token z_pre_teleport("pre_teleport", false);
static const config::t_token z_post_teleport("post_teleport", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_pre_movement("pre_movement", false);
static const config::t_token z_post_movement("post_movement", false);
static const config::t_token z_draw_weapon("draw_weapon", false);
static const config::t_token z_sheath_weapon("sheath_weapon", false);
static const config::t_token z_death("death", false);
static const config::t_token z_victory("victory", false);
static const config::t_token z_unit_attack("unit_attack", false);
static const config::t_token z_leadership("leadership", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token z_attack("attack", false);
static const config::t_token z_defend("defend", false);
static const config::t_token z_leading("leading", false);
static const config::t_token z_recruiting("recruiting", false);
static const config::t_token z_recruited("recruited", false);
static const config::t_token z_healing("healing", false);
static const config::t_token z_poisoned("poisoned", false);
static const config::t_token z_healed("healed", false);
static const config::t_token z_filter("filter", false);
static const config::t_token z_primary_attack("primary_attack", false);
static const config::t_token z_secondary_attack("secondary_attack", false);
static const config::t_token z_hits("hits", false);
static const config::t_token z_yes("yes", false);
static const config::t_token z_hit("hit", false);
static const config::t_token z_no("no", false);
static const config::t_token z_miss("miss", false);
static const config::t_token z_kill("kill", false);
static const config::t_token z_facing("facing", false);
static const config::t_token z_flag("flag", false);
static const config::t_token z_value("value", false);
static const config::t_token z_with_bars("with_bars", false);
static const config::t_token z_text("text", false);
static const config::t_token z_value_second("value_second", false);
static const config::t_token z_animate("animate", false);
}
static void teleport_unit_between( const map_location& a, const map_location& b, unit& temp_unit)
{
static const n_token::t_token & z_pre_teleport( generate_safe_static_const_t_interned(n_token::t_token("pre_teleport")) );
static const n_token::t_token & z_post_teleport( generate_safe_static_const_t_interned(n_token::t_token("post_teleport")) );
game_display* disp = game_display::get_singleton();
if(!disp || disp->video().update_locked() || disp->video().faked() || (disp->fogged(a) && disp->fogged(b))) {
return;
@ -110,6 +68,7 @@ static void teleport_unit_between( const map_location& a, const map_location& b,
static void move_unit_between(const map_location& a, const map_location& b, unit& temp_unit,unsigned int step_num,unsigned int step_left)
{
static const n_token::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
game_display* disp = game_display::get_singleton();
if(!disp || disp->video().update_locked() || disp->video().faked() || (disp->fogged(a) && disp->fogged(b))) {
return;
@ -212,6 +171,8 @@ void move_unit(const std::vector<map_location>& path, unit& u,
disp->draw(true);
// extra immobile mvt anim for take-off
static const n_token::t_token & z_pre_movement( generate_safe_static_const_t_interned(n_token::t_token("pre_movement")) );
temp_unit.set_location(path[0]);
disp->invalidate(temp_unit.get_location());
temp_unit.set_facing(path[0].get_relative_dir(path[1]));
@ -220,6 +181,7 @@ void move_unit(const std::vector<map_location>& path, unit& u,
animator.start_animations();
animator.wait_for_end();
static const n_token::t_token & z_post_movement( generate_safe_static_const_t_interned(n_token::t_token("post_movement")) );
for(size_t i = 0; i+1 < path.size(); ++i) {
invisible = teams[temp_unit.side()-1].is_enemy(int(disp->viewing_team()+1)) &&
@ -276,6 +238,7 @@ void reset_helpers(const unit *attacker,const unit *defender);
void unit_draw_weapon(const map_location& loc, unit& attacker,
const attack_type* attack,const attack_type* secondary_attack, const map_location& defender_loc,unit* defender)
{
static const n_token::t_token & z_draw_weapon( generate_safe_static_const_t_interned(n_token::t_token("draw_weapon")) );
game_display* disp = game_display::get_singleton();
if(!disp ||disp->video().update_locked() || disp->video().faked() || disp->fogged(loc) || preferences::show_combat() == false) {
return;
@ -292,6 +255,7 @@ void unit_draw_weapon(const map_location& loc, unit& attacker,
void unit_sheath_weapon(const map_location& primary_loc, unit* primary_unit,
const attack_type* primary_attack,const attack_type* secondary_attack, const map_location& secondary_loc,unit* secondary_unit)
{
static const n_token::t_token & z_sheath_weapon( generate_safe_static_const_t_interned(n_token::t_token("sheath_weapon")) );
game_display* disp = game_display::get_singleton();
if(!disp ||disp->video().update_locked() || disp->video().faked() || disp->fogged(primary_loc) || preferences::show_combat() == false) {
return;
@ -322,6 +286,8 @@ void unit_sheath_weapon(const map_location& primary_loc, unit* primary_unit,
void unit_die(const map_location& loc, unit& loser,
const attack_type* attack,const attack_type* secondary_attack, const map_location& winner_loc,unit* winner)
{
static const n_token::t_token & z_death( generate_safe_static_const_t_interned(n_token::t_token("death")) );
static const n_token::t_token & z_victory( generate_safe_static_const_t_interned(n_token::t_token("victory")) );
game_display* disp = game_display::get_singleton();
if(!disp ||disp->video().update_locked() || disp->video().faked() || disp->fogged(loc) || preferences::show_combat() == false) {
return;
@ -348,6 +314,12 @@ void unit_attack(
const attack_type& attack, const attack_type* secondary_attack,
int swing,std::string hit_text,bool drain,std::string att_text)
{
static const n_token::t_token & z_unit_attack( generate_safe_static_const_t_interned(n_token::t_token("unit_attack")) );
static const n_token::t_token & z_leadership( generate_safe_static_const_t_interned(n_token::t_token("leadership")) );
static const n_token::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
static const n_token::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
static const n_token::t_token & z_defend( generate_safe_static_const_t_interned(n_token::t_token("defend")) );
static const n_token::t_token & z_leading( generate_safe_static_const_t_interned(n_token::t_token("leading")) );
game_display* disp = game_display::get_singleton();
if(!disp ||disp->video().update_locked() || disp->video().faked() ||
(disp->fogged(a) && disp->fogged(b)) || preferences::show_combat() == false) {
@ -457,6 +429,8 @@ void unit_attack(
// private helper function, set all helpers to default position
void reset_helpers(const unit *attacker,const unit *defender)
{
static const n_token::t_token & z_leadership( generate_safe_static_const_t_interned(n_token::t_token("leadership")) );
static const n_token::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
game_display* disp = game_display::get_singleton();
unit_map& units = disp->get_units();
if(attacker) {
@ -480,6 +454,8 @@ void reset_helpers(const unit *attacker,const unit *defender)
void unit_recruited(const map_location& loc,const map_location& leader_loc)
{
static const n_token::t_token & z_recruiting( generate_safe_static_const_t_interned(n_token::t_token("recruiting")) );
static const n_token::t_token & z_recruited( generate_safe_static_const_t_interned(n_token::t_token("recruited")) );
game_display* disp = game_display::get_singleton();
if(!disp || disp->video().update_locked() || disp->video().faked() ||disp->fogged(loc)) return;
unit_map::iterator u = disp->get_units().find(loc);
@ -509,6 +485,9 @@ void unit_recruited(const map_location& loc,const map_location& leader_loc)
void unit_healing(unit &healed, const map_location &healed_loc,
const std::vector<unit *> &healers, int healing)
{
static const n_token::t_token & z_healing( generate_safe_static_const_t_interned(n_token::t_token("healing")) );
static const n_token::t_token & z_poisoned( generate_safe_static_const_t_interned(n_token::t_token("poisoned")) );
static const n_token::t_token & z_healed( generate_safe_static_const_t_interned(n_token::t_token("healed")) );
game_display* disp = game_display::get_singleton();
if(!disp || disp->video().update_locked() || disp->video().faked() || disp->fogged(healed_loc)) return;
if(healing==0) return;
@ -548,6 +527,25 @@ void wml_animation(const vconfig &cfg, const map_location &default_location)
void wml_animation_internal(unit_animator &animator, const vconfig &cfg, const map_location &default_location)
{
static const n_token::t_token & z_filter( generate_safe_static_const_t_interned(n_token::t_token("filter")) );
static const n_token::t_token & z_primary_attack( generate_safe_static_const_t_interned(n_token::t_token("primary_attack")) );
static const n_token::t_token & z_secondary_attack( generate_safe_static_const_t_interned(n_token::t_token("secondary_attack")) );
static const n_token::t_token & z_hits( generate_safe_static_const_t_interned(n_token::t_token("hits")) );
static const n_token::t_token & z_yes( generate_safe_static_const_t_interned(n_token::t_token("yes")) );
static const n_token::t_token & z_hit( generate_safe_static_const_t_interned(n_token::t_token("hit")) );
static const n_token::t_token & z_no( generate_safe_static_const_t_interned(n_token::t_token("no")) );
static const n_token::t_token & z_miss( generate_safe_static_const_t_interned(n_token::t_token("miss")) );
static const n_token::t_token & z_kill( generate_safe_static_const_t_interned(n_token::t_token("kill")) );
static const n_token::t_token & z_red( generate_safe_static_const_t_interned(n_token::t_token("red")) );
static const n_token::t_token & z_green( generate_safe_static_const_t_interned(n_token::t_token("green")) );
static const n_token::t_token & z_blue( generate_safe_static_const_t_interned(n_token::t_token("blue")) );
static const n_token::t_token & z_facing( generate_safe_static_const_t_interned(n_token::t_token("facing")) );
static const n_token::t_token & z_value_second( generate_safe_static_const_t_interned(n_token::t_token("value_second")) );
static const n_token::t_token & z_flag( generate_safe_static_const_t_interned(n_token::t_token("flag")) );
static const n_token::t_token & z_value( generate_safe_static_const_t_interned(n_token::t_token("value")) );
static const n_token::t_token & z_text( generate_safe_static_const_t_interned(n_token::t_token("text")) );
static const n_token::t_token & z_with_bars( generate_safe_static_const_t_interned(n_token::t_token("with_bars")) );
static const n_token::t_token & z_animate( generate_safe_static_const_t_interned(n_token::t_token("animate")) );
unit_map::iterator u = resources::units->find(default_location);
// Search for a valid unit filter,

View file

@ -265,14 +265,14 @@ frame_builder::frame_builder(const config& cfg,const n_token::t_token& frame_str
primary_frame_(t_unset),
drawing_layer_(cfg[frame_string + z_layer_default()].token())
{
static const config::t_token z_auto_vflip("auto_vflip", false);
static const config::t_token z_auto_hflip("auto_hflip", false);
static const config::t_token z_primary("primary", false);
static const config::t_token z_text_color("text_color", false);
static const config::t_token z_duration("duration", false);
static const config::t_token z_end("end", false);
static const config::t_token z_begin("begin", false);
static const config::t_token z_blend_color("blend_color", false);
static const config::t_token & z_auto_vflip( generate_safe_static_const_t_interned(n_token::t_token("auto_vflip")) );
static const config::t_token & z_auto_hflip( generate_safe_static_const_t_interned(n_token::t_token("auto_hflip")) );
static const config::t_token & z_primary( generate_safe_static_const_t_interned(n_token::t_token("primary")) );
static const config::t_token & z_text_color( generate_safe_static_const_t_interned(n_token::t_token("text_color")) );
static const config::t_token & z_duration( generate_safe_static_const_t_interned(n_token::t_token("duration")) );
static const config::t_token & z_end( generate_safe_static_const_t_interned(n_token::t_token("end")) );
static const config::t_token & z_begin( generate_safe_static_const_t_interned(n_token::t_token("begin")) );
static const config::t_token & z_blend_color( generate_safe_static_const_t_interned(n_token::t_token("blend_color")) );
if(!cfg.has_attribute(frame_string + z_auto_vflip)) {
auto_vflip_ = t_unset;
} else if(cfg[frame_string + z_auto_vflip].to_bool()) {

View file

@ -106,11 +106,11 @@ config::t_token attack_type::accuracy_parry_description() const
bool attack_type::matches_filter(const config& cfg,bool self) const
{
static const config::t_token z_range("range", false);
static const config::t_token z_damage("damage", false);
static const config::t_token z_name("name", false);
static const config::t_token z_type("type", false);
static const config::t_token z_special("special", false);
static const config::t_token & z_range( generate_safe_static_const_t_interned(n_token::t_token("range")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_special( generate_safe_static_const_t_interned(n_token::t_token("special")) );
const std::vector<config::t_token>& filter_range = utils::split_attr(cfg[z_range]);
const config::attribute_value& filter_damage = cfg[z_damage];
const std::vector<config::t_token> filter_name = utils::split_attr(cfg[z_name]);
@ -138,28 +138,28 @@ bool attack_type::matches_filter(const config& cfg,bool self) const
std::pair<bool, config::t_token> attack_type::apply_modification(const config& cfg)
{
static const config::t_token z_set_name("set_name", false);
static const config::t_token z_set_description("set_description", false);
static const config::t_token z_set_type("set_type", false);
static const config::t_token z_remove_specials("remove_specials", false);
static const config::t_token z_set_specials("set_specials", false);
static const config::t_token z_increase_damage("increase_damage", false);
static const config::t_token z_increase_attacks("increase_attacks", false);
static const config::t_token z_attack_weight("attack_weight", false);
static const config::t_token z_defense_weight("defense_weight", false);
static const config::t_token z_increase_accuracy("increase_accuracy", false);
static const config::t_token z_increase_parry("increase_parry", false);
static const config::t_token z_name("name", false);
static const config::t_token z_description("description", false);
static const config::t_token z_type("type", false);
static const config::t_token z_specials("specials", false);
static const config::t_token z_id("id", false);
static const config::t_token z_mode("mode", false);
static const config::t_token z_append("append", false);
static const config::t_token z_damage("damage", false);
static const config::t_token z_number("number", false);
static const config::t_token z_accuracy("accuracy", false);
static const config::t_token z_parry("parry", false);
static const config::t_token & z_set_name( generate_safe_static_const_t_interned(n_token::t_token("set_name")) );
static const config::t_token & z_set_description( generate_safe_static_const_t_interned(n_token::t_token("set_description")) );
static const config::t_token & z_set_type( generate_safe_static_const_t_interned(n_token::t_token("set_type")) );
static const config::t_token & z_remove_specials( generate_safe_static_const_t_interned(n_token::t_token("remove_specials")) );
static const config::t_token & z_set_specials( generate_safe_static_const_t_interned(n_token::t_token("set_specials")) );
static const config::t_token & z_increase_damage( generate_safe_static_const_t_interned(n_token::t_token("increase_damage")) );
static const config::t_token & z_increase_attacks( generate_safe_static_const_t_interned(n_token::t_token("increase_attacks")) );
static const config::t_token & z_attack_weight( generate_safe_static_const_t_interned(n_token::t_token("attack_weight")) );
static const config::t_token & z_defense_weight( generate_safe_static_const_t_interned(n_token::t_token("defense_weight")) );
static const config::t_token & z_increase_accuracy( generate_safe_static_const_t_interned(n_token::t_token("increase_accuracy")) );
static const config::t_token & z_increase_parry( generate_safe_static_const_t_interned(n_token::t_token("increase_parry")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_specials( generate_safe_static_const_t_interned(n_token::t_token("specials")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_mode( generate_safe_static_const_t_interned(n_token::t_token("mode")) );
static const config::t_token & z_append( generate_safe_static_const_t_interned(n_token::t_token("append")) );
static const config::t_token & z_damage( generate_safe_static_const_t_interned(n_token::t_token("damage")) );
static const config::t_token & z_number( generate_safe_static_const_t_interned(n_token::t_token("number")) );
static const config::t_token & z_accuracy( generate_safe_static_const_t_interned(n_token::t_token("accuracy")) );
static const config::t_token & z_parry( generate_safe_static_const_t_interned(n_token::t_token("parry")) );
if(!matches_filter(cfg,0)) {
return std::make_pair(false, n_token::t_token::z_empty()); }
@ -277,8 +277,8 @@ std::pair<bool, config::t_token> attack_type::apply_modification(const config& c
// Same as above, except only update the descriptions
std::pair<bool, config::t_token> attack_type::describe_modification(const config& cfg)
{
static const config::t_token z_increase_damage("increase_damage", false);
static const config::t_token z_increase_attacks("increase_attacks", false);
static const config::t_token & z_increase_damage( generate_safe_static_const_t_interned(n_token::t_token("increase_damage")) );
static const config::t_token & z_increase_attacks( generate_safe_static_const_t_interned(n_token::t_token("increase_attacks")) );
if(!matches_filter(cfg,0)) {
return std::make_pair(false, n_token::t_token::z_empty()); }
@ -313,11 +313,11 @@ unit_movement_type::unit_movement_type(const config& cfg, const unit_movement_ty
//so we filter to keep only keys related to movement_type
//FIXME: This helps but it's still not clean, both cfg use a "name" key
static const config::t_token z_name("name", false);
static const config::t_token z_flies("flies", false);
static const config::t_token z_movement_costs("movement_costs", false);
static const config::t_token z_defense("defense", false);
static const config::t_token z_resistance("resistance", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_flies( generate_safe_static_const_t_interned(n_token::t_token("flies")) );
static const config::t_token & z_movement_costs( generate_safe_static_const_t_interned(n_token::t_token("movement_costs")) );
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
const config::attribute_value& name = cfg[z_name];
if (!name.empty())
@ -342,7 +342,7 @@ unit_movement_type::unit_movement_type(): moveCosts_(), defenseMods_(), parent_(
config::t_token unit_movement_type::name() const
{
static const config::t_token z_name("name", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
if (!cfg_.has_attribute(z_name) && parent_)
return parent_->name();
@ -354,7 +354,7 @@ config::t_token unit_movement_type::name() const
int unit_movement_type::resistance_against(const attack_type& attack) const
{
static const config::t_token z_resistance("resistance", false);
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
bool result_found = false;
int res = 100;
@ -376,7 +376,7 @@ int unit_movement_type::resistance_against(const attack_type& attack) const
utils::string_map unit_movement_type::damage_table() const
{
static const config::t_token z_resistance("resistance", false);
static const config::t_token & z_resistance( generate_safe_static_const_t_interned(n_token::t_token("resistance")) );
utils::string_map res;
if(parent_ != NULL)
@ -394,7 +394,7 @@ utils::string_map unit_movement_type::damage_table() const
bool unit_movement_type::is_flying() const
{
static const config::t_token z_flies("flies", false);
static const config::t_token & z_flies( generate_safe_static_const_t_interned(n_token::t_token("flies")) );
if (!cfg_.has_attribute(z_flies) && parent_)
return parent_->is_flying();
@ -454,7 +454,7 @@ int movement_cost_internal(t_move_cost_cache& move_costs,
bool result_found = false;
int res = impassable;
static const config::t_token z_movement_costs("movement_costs", false);
static const config::t_token & z_movement_costs( generate_safe_static_const_t_interned(n_token::t_token("movement_costs")) );
if (const config& movement_costs = cfg.child(z_movement_costs)) {
if (underlying.size() != 1) {
@ -501,7 +501,7 @@ const defense_range &defense_range_modifier_internal(defense_cache &defense_mods
const t_translation::t_list& underlying = map.underlying_def_terrain(terrain);
assert(!underlying.empty());
static const config::t_token z_defense("defense", false);
static const config::t_token & z_defense( generate_safe_static_const_t_interned(n_token::t_token("defense")) );
if (underlying.size() != 1 || underlying.front() != terrain) {
bool revert = underlying.front() == t_translation::MINUS;
if(recurse_count >= 90) {
@ -702,22 +702,22 @@ unit_type::~unit_type()
void unit_type::build_full(const movement_type_map &mv_types,
const race_map &races, const config::const_child_itors &traits)
{
static const config::t_token z_trait("trait", false);
static const config::t_token z_variation("variation", false);
static const config::t_token z_inherit("inherit", false);
static const config::t_token z_variation_name("variation_name", false);
static const config::t_token z_alignment("alignment", false);
static const config::t_token z_lawful("lawful", false);
static const config::t_token z_chaotic("chaotic", false);
static const config::t_token z_neutral("neutral", false);
static const config::t_token z_ignore_race_traits("ignore_race_traits", false);
static const config::t_token z_id("id", false);
static const config::t_token z_fearless("fearless", false);
static const config::t_token z_zoc("zoc", false);
static const config::t_token z_alpha("alpha", false);
static const config::t_token z_movement_type("movement_type", false);
static const config::t_token z_flag_rgb("flag_rgb", false);
static const config::t_token z_portrait("portrait", false);
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
static const config::t_token & z_variation( generate_safe_static_const_t_interned(n_token::t_token("variation")) );
static const config::t_token & z_inherit( generate_safe_static_const_t_interned(n_token::t_token("inherit")) );
static const config::t_token & z_variation_name( generate_safe_static_const_t_interned(n_token::t_token("variation_name")) );
static const config::t_token & z_alignment( generate_safe_static_const_t_interned(n_token::t_token("alignment")) );
static const config::t_token & z_lawful( generate_safe_static_const_t_interned(n_token::t_token("lawful")) );
static const config::t_token & z_chaotic( generate_safe_static_const_t_interned(n_token::t_token("chaotic")) );
static const config::t_token & z_neutral( generate_safe_static_const_t_interned(n_token::t_token("neutral")) );
static const config::t_token & z_ignore_race_traits( generate_safe_static_const_t_interned(n_token::t_token("ignore_race_traits")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_fearless( generate_safe_static_const_t_interned(n_token::t_token("fearless")) );
static const config::t_token & z_zoc( generate_safe_static_const_t_interned(n_token::t_token("zoc")) );
static const config::t_token & z_alpha( generate_safe_static_const_t_interned(n_token::t_token("alpha")) );
static const config::t_token & z_movement_type( generate_safe_static_const_t_interned(n_token::t_token("movement_type")) );
static const config::t_token & z_flag_rgb( generate_safe_static_const_t_interned(n_token::t_token("flag_rgb")) );
static const config::t_token & z_portrait( generate_safe_static_const_t_interned(n_token::t_token("portrait")) );
if (build_status_ == NOT_BUILT || build_status_ == CREATED)
build_help_index(mv_types, races, traits);
@ -821,28 +821,28 @@ void unit_type::build_full(const movement_type_map &mv_types,
void unit_type::build_help_index(const movement_type_map &mv_types,
const race_map &races, const config::const_child_itors &traits)
{
static const config::t_token z_empty("", false);
static const config::t_token z_name("name", false);
static const config::t_token z_description("description", false);
static const config::t_token z_hitpoints("hitpoints", false);
static const config::t_token z_level("level", false);
static const config::t_token z_movement("movement", false);
static const config::t_token z_attacks("attacks", false);
static const config::t_token z_cost("cost", false);
static const config::t_token z_usage("usage", false);
static const config::t_token z_undead_variation("undead_variation", false);
static const config::t_token z_image("image", false);
static const config::t_token z_small_profile("small_profile", false);
static const config::t_token z_profile("profile", false);
static const config::t_token z_race("race", false);
static const config::t_token z_num_traits("num_traits", false);
static const config::t_token z_gender("gender", false);
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_advancement("advancement", false);
static const config::t_token z_effect("effect", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_new_ability("new_ability", false);
static const config::t_token z_hide_help("hide_help", false);
static const config::t_token & z_empty( generate_safe_static_const_t_interned(n_token::t_token("")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_description( generate_safe_static_const_t_interned(n_token::t_token("description")) );
static const config::t_token & z_hitpoints( generate_safe_static_const_t_interned(n_token::t_token("hitpoints")) );
static const config::t_token & z_level( generate_safe_static_const_t_interned(n_token::t_token("level")) );
static const config::t_token & z_movement( generate_safe_static_const_t_interned(n_token::t_token("movement")) );
static const config::t_token & z_attacks( generate_safe_static_const_t_interned(n_token::t_token("attacks")) );
static const config::t_token & z_cost( generate_safe_static_const_t_interned(n_token::t_token("cost")) );
static const config::t_token & z_usage( generate_safe_static_const_t_interned(n_token::t_token("usage")) );
static const config::t_token & z_undead_variation( generate_safe_static_const_t_interned(n_token::t_token("undead_variation")) );
static const config::t_token & z_image( generate_safe_static_const_t_interned(n_token::t_token("image")) );
static const config::t_token & z_small_profile( generate_safe_static_const_t_interned(n_token::t_token("small_profile")) );
static const config::t_token & z_profile( generate_safe_static_const_t_interned(n_token::t_token("profile")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_num_traits( generate_safe_static_const_t_interned(n_token::t_token("num_traits")) );
static const config::t_token & z_gender( generate_safe_static_const_t_interned(n_token::t_token("gender")) );
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_advancement( generate_safe_static_const_t_interned(n_token::t_token("advancement")) );
static const config::t_token & z_effect( generate_safe_static_const_t_interned(n_token::t_token("effect")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_new_ability( generate_safe_static_const_t_interned(n_token::t_token("new_ability")) );
static const config::t_token & z_hide_help( generate_safe_static_const_t_interned(n_token::t_token("hide_help")) );
if (build_status_ == NOT_BUILT)
build_created(mv_types, races, traits);
@ -927,12 +927,12 @@ void unit_type::build_help_index(const movement_type_map &mv_types,
void unit_type::build_created(const movement_type_map &mv_types,
const race_map &races, const config::const_child_itors &traits)
{
static const config::t_token z_male("male", false);
static const config::t_token z_inherit("inherit", false);
static const config::t_token z_female("female", false);
static const config::t_token z_advances_to("advances_to", false);
static const config::t_token z_null("null", false);
static const config::t_token z_experience("experience", false);
static const config::t_token & z_male( generate_safe_static_const_t_interned(n_token::t_token("male")) );
static const config::t_token & z_inherit( generate_safe_static_const_t_interned(n_token::t_token("inherit")) );
static const config::t_token & z_female( generate_safe_static_const_t_interned(n_token::t_token("female")) );
static const config::t_token & z_advances_to( generate_safe_static_const_t_interned(n_token::t_token("advances_to")) );
static const config::t_token & z_null( generate_safe_static_const_t_interned(n_token::t_token("null")) );
static const config::t_token & z_experience( generate_safe_static_const_t_interned(n_token::t_token("experience")) );
gender_types_[0] = NULL;
gender_types_[1] = NULL;
@ -980,8 +980,8 @@ void unit_type::build_created(const movement_type_map &mv_types,
const unit_type& unit_type::get_gender_unit_type(config::t_token const & gender) const
{
static const config::t_token z_female("female", false);
static const config::t_token z_male("male", false);
static const config::t_token & z_female( generate_safe_static_const_t_interned(n_token::t_token("female")) );
static const config::t_token & z_male( generate_safe_static_const_t_interned(n_token::t_token("male")) );
if (gender == z_female) return get_gender_unit_type(unit_race::FEMALE);
else if (gender == z_male) return get_gender_unit_type(unit_race::MALE);
@ -1034,7 +1034,7 @@ const std::vector<unit_animation>& unit_type::animations() const {
std::vector<attack_type> unit_type::attacks() const
{
static const config::t_token z_attack("attack", false);
static const config::t_token & z_attack( generate_safe_static_const_t_interned(n_token::t_token("attack")) );
std::vector<attack_type> res;
foreach (const config &att, cfg_.child_range(z_attack)) {
@ -1091,8 +1091,8 @@ const char* unit_type::alignment_id(unit_type::ALIGNMENT align)
bool unit_type::has_ability_by_id(const config::t_token& ability) const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
if (const config &abil = cfg_.child(z_abilities))
{
@ -1106,8 +1106,8 @@ bool unit_type::has_ability_by_id(const config::t_token& ability) const
std::vector<config::t_token> unit_type::get_ability_list() const
{
static const config::t_token z_abilities("abilities", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_abilities( generate_safe_static_const_t_interned(n_token::t_token("abilities")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
std::vector<config::t_token> res;
@ -1129,7 +1129,7 @@ bool unit_type::hide_help() const {
void unit_type::add_advancement(const unit_type &to_unit,int xp)
{
static const config::t_token z_id("id", false);
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
const config::attribute_value &to_id = to_unit.cfg_[z_id];
const config::attribute_value &from_id = cfg_[z_id];
@ -1233,14 +1233,14 @@ unit_type_data::unit_type_data() :
void unit_type_data::set_config(config &cfg)
{
static const config::t_token z_name("name", false);
static const config::t_token z_movetype("movetype", false);
static const config::t_token z_race("race", false);
static const config::t_token z_unit_type("unit_type", false);
static const config::t_token z_id("id", false);
static const config::t_token z_base_unit("base_unit", false);
static const config::t_token z_hide_help("hide_help", false);
static const config::t_token z_all("all", false);
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_movetype( generate_safe_static_const_t_interned(n_token::t_token("movetype")) );
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_unit_type( generate_safe_static_const_t_interned(n_token::t_token("unit_type")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
static const config::t_token & z_base_unit( generate_safe_static_const_t_interned(n_token::t_token("base_unit")) );
static const config::t_token & z_hide_help( generate_safe_static_const_t_interned(n_token::t_token("hide_help")) );
static const config::t_token & z_all( generate_safe_static_const_t_interned(n_token::t_token("all")) );
DBG_UT << "unit_type_data::set_config, name: " << cfg[z_name] << "\n";
@ -1290,7 +1290,7 @@ void unit_type_data::set_config(config &cfg)
const unit_type *unit_type_data::find(const config::t_token& key, unit_type::BUILD_STATUS status) const
{
static const config::t_token z_random("random", false);
static const config::t_token & z_random( generate_safe_static_const_t_interned(n_token::t_token("random")) );
if (key.empty() || key == z_random) return NULL;
@ -1321,8 +1321,8 @@ void unit_type_data::check_types(const std::vector<config::t_token>& types) cons
const config& unit_type_data::find_config(const config::t_token& key) const
{
static const config::t_token z_unit_type("unit_type", false);
static const config::t_token z_id("id", false);
static const config::t_token & z_unit_type( generate_safe_static_const_t_interned(n_token::t_token("unit_type")) );
static const config::t_token & z_id( generate_safe_static_const_t_interned(n_token::t_token("id")) );
const config &cfg = unit_cfg_->find_child(z_unit_type, z_id, key);
@ -1365,7 +1365,7 @@ void unit_type_data::build_all(unit_type::BUILD_STATUS status)
unit_type &unit_type_data::build_unit_type(const unit_type_map::iterator &ut, unit_type::BUILD_STATUS status) const
{
static const config::t_token z_trait("trait", false);
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
DBG_UT << "Building unit type " << ut->first << ", level " << status << '\n';
@ -1389,10 +1389,10 @@ unit_type &unit_type_data::build_unit_type(const unit_type_map::iterator &ut, un
void unit_type_data::read_hide_help(const config& cfg)
{
static const config::t_token z_race("race", false);
static const config::t_token z_type("type", false);
static const config::t_token z_type_adv_tree("type_adv_tree", false);
static const config::t_token z_not("not", false);
static const config::t_token & z_race( generate_safe_static_const_t_interned(n_token::t_token("race")) );
static const config::t_token & z_type( generate_safe_static_const_t_interned(n_token::t_token("type")) );
static const config::t_token & z_type_adv_tree( generate_safe_static_const_t_interned(n_token::t_token("type_adv_tree")) );
static const config::t_token & z_not( generate_safe_static_const_t_interned(n_token::t_token("not")) );
if (!cfg)
return;
@ -1437,9 +1437,9 @@ bool unit_type_data::hide_help(const config::t_token& type, const config::t_toke
void unit_type_data::add_advancement(unit_type& to_unit) const
{
static const config::t_token z_advancefrom("advancefrom", false);
static const config::t_token z_unit("unit", false);
static const config::t_token z_experience("experience", false);
static const config::t_token & z_advancefrom( generate_safe_static_const_t_interned(n_token::t_token("advancefrom")) );
static const config::t_token & z_unit( generate_safe_static_const_t_interned(n_token::t_token("unit")) );
static const config::t_token & z_experience( generate_safe_static_const_t_interned(n_token::t_token("experience")) );
const config& cfg = to_unit.get_cfg();
@ -1475,15 +1475,15 @@ const unit_race *unit_type_data::find_race(const config::t_token &key) const
// a particular unit is living or not, use get_state("not_living") for that.
bool unit_type::not_living() const
{
static const config::t_token z_availability("availability", false);
static const config::t_token z_musthave("musthave", false);
static const config::t_token z_effect("effect", false);
static const config::t_token z_unit_type("unit_type", false);
static const config::t_token z_apply_to("apply_to", false);
static const config::t_token z_status("status", false);
static const config::t_token z_add("add", false);
static const config::t_token z_not_living("not_living", false);
static const config::t_token z_remove("remove", false);
static const config::t_token & z_availability( generate_safe_static_const_t_interned(n_token::t_token("availability")) );
static const config::t_token & z_musthave( generate_safe_static_const_t_interned(n_token::t_token("musthave")) );
static const config::t_token & z_effect( generate_safe_static_const_t_interned(n_token::t_token("effect")) );
static const config::t_token & z_unit_type( generate_safe_static_const_t_interned(n_token::t_token("unit_type")) );
static const config::t_token & z_apply_to( generate_safe_static_const_t_interned(n_token::t_token("apply_to")) );
static const config::t_token & z_status( generate_safe_static_const_t_interned(n_token::t_token("status")) );
static const config::t_token & z_add( generate_safe_static_const_t_interned(n_token::t_token("add")) );
static const config::t_token & z_not_living( generate_safe_static_const_t_interned(n_token::t_token("not_living")) );
static const config::t_token & z_remove( generate_safe_static_const_t_interned(n_token::t_token("remove")) );
// If a unit hasn't been modified it starts out as living.
bool not_living = false;

View file

@ -62,7 +62,7 @@ public:
std::pair<bool, config::t_token> describe_modification(const config& cfg);
int movement_used() const {
static const config::t_token z_movement_used("movement_used", false);
static const config::t_token & z_movement_used( generate_safe_static_const_t_interned(n_token::t_token("movement_used")) );
return cfg_[z_movement_used].to_int(100000); }
config& get_cfg() { return cfg_; }
@ -215,7 +215,7 @@ public:
const std::vector<config::t_token> advances_from() const;
config::const_child_itors modification_advancements() const {
static const config::t_token z_advancement("advancement", false);
static const config::t_token & z_advancement( generate_safe_static_const_t_interned(n_token::t_token("advancement")) );
return cfg_.child_range(z_advancement); }
const unit_type& get_gender_unit_type(config::t_token const & gender) const;
@ -286,7 +286,7 @@ public:
std::vector<config::t_token> get_ability_list() const;
config::const_child_itors possible_traits() const {
static const config::t_token z_trait("trait", false);
static const config::t_token & z_trait( generate_safe_static_const_t_interned(n_token::t_token("trait")) );
return possibleTraits_.child_range(z_trait); }
bool has_random_traits() const;

View file

@ -169,7 +169,7 @@ private:
@note usage inside a function body type and zzz with be a safe copy of yyy
static const T & zzz = generate_safe_static_const_t_interned.get( yyy )
@note Do not use this to create objects that are not static
@note Do not use this to create objects that are not static, that will be a memory leak
*/
@ -288,9 +288,6 @@ void t_interned_token<T, T_hasher>::dec_ref() {
template <typename T, typename T_hasher >
bool t_interned_token<T, T_hasher>::valid() const { return true; }
// static t_stash & the_stash_ = the_stash();
// return iter_ != the_stash_.end(); }
template <typename T>

View file

@ -250,9 +250,9 @@ vconfig& vconfig::operator=(const vconfig& cfg)
}
const config vconfig::get_parsed_config() const {
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_name("name", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
config res;
foreach (const config::attribute &i, cfg_->attribute_range()) {
@ -302,9 +302,9 @@ const config vconfig::get_parsed_config() const {
}
vconfig::child_list vconfig::get_children(const config::t_token& key) const {
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_name("name", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
vconfig::child_list res;
@ -343,9 +343,9 @@ vconfig::child_list vconfig::get_children(const std::string& key) const {return
vconfig vconfig::child(const config::t_token& key) const
{
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_name("name", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
if (const config &natural = cfg_->child(key)) {
return vconfig(&natural, cache_key_);
@ -368,8 +368,8 @@ vconfig vconfig::child(const std::string& key) const {return child(t_token(key))
bool vconfig::has_child(const config::t_token& key) const
{
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_name("name", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
if (cfg_->child(key)) {
return true;
@ -415,8 +415,8 @@ vconfig::all_children_iterator::all_children_iterator(const Itor &i, const confi
}
vconfig::all_children_iterator& vconfig::all_children_iterator::operator++() {
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
if (inner_index_ >= 0 && i_->key == z_insert_tag)
{
@ -454,8 +454,8 @@ vconfig::all_children_iterator::pointer vconfig::all_children_iterator::operator
config::t_token vconfig::all_children_iterator::get_key() const
{
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_name("name", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_name( generate_safe_static_const_t_interned(n_token::t_token("name")) );
const config::t_token &key = i_->key;
if (inner_index_ >= 0 && key == z_insert_tag) {
@ -467,8 +467,8 @@ config::t_token vconfig::all_children_iterator::get_key() const
vconfig vconfig::all_children_iterator::get_child() const
{
static const config::t_token z_insert_tag("insert_tag", false);
static const config::t_token z_variable("variable", false);
static const config::t_token & z_insert_tag( generate_safe_static_const_t_interned(n_token::t_token("insert_tag")) );
static const config::t_token & z_variable( generate_safe_static_const_t_interned(n_token::t_token("variable")) );
if (inner_index_ >= 0 && i_->key == z_insert_tag)
{
@ -547,8 +547,8 @@ scoped_wml_variable::~scoped_wml_variable()
void scoped_xy_unit::activate()
{
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
map_location loc = map_location(x_, y_);
unit_map::const_iterator itor = umap_.find(loc);
@ -572,9 +572,9 @@ void scoped_weapon_info::activate()
void scoped_recall_unit::activate()
{
static const config::t_token z_x("x", false);
static const config::t_token z_y("y", false);
static const config::t_token z_recall("recall", false);
static const config::t_token & z_x( generate_safe_static_const_t_interned(n_token::t_token("x")) );
static const config::t_token & z_y( generate_safe_static_const_t_interned(n_token::t_token("y")) );
static const config::t_token & z_recall( generate_safe_static_const_t_interned(n_token::t_token("recall")) );
const t_teams& teams = teams_manager::get_teams();
t_teams::const_iterator team_it;
@ -603,10 +603,6 @@ void scoped_recall_unit::activate()
namespace {
static const config::t_token z_dot(".", false);
static const config::t_token z_lbracket("[", false);
static const config::t_token z_rbracket("]", false);
typedef config::t_token t_token;
struct t_parsed {
@ -734,9 +730,9 @@ void activate_scope_variable(t_parsed_tokens const & tokens)
void variable_info::init(const config::t_token& varname, bool force_valid) {
static const config::t_token z_length("length", false);
static const config::t_token z___array("__array", false);
static const config::t_token z___value("__value", false);
static const config::t_token & z_length( generate_safe_static_const_t_interned(n_token::t_token("length")) );
static const config::t_token & z___array( generate_safe_static_const_t_interned(n_token::t_token("__array")) );
static const config::t_token & z___value( generate_safe_static_const_t_interned(n_token::t_token("__value")) );
try {
//an example varname is "unit_store.modifications.trait[0]"