49#define FORMAT_VERSION RSFORMAT_3_1
62 if (rsname != NULL && rsname[0] !=
'\0') {
63 fc_snprintf(buf,
sizeof(buf),
"%s %s data for Freeciv", rsname, rstype);
65 fc_snprintf(buf,
sizeof(buf),
"Template %s data for Freeciv", rstype);
80 int default_value,
const char *path,
const char *
entry)
82 if (value != default_value) {
85 "%s.%s", path,
entry);
99 bool default_value,
const char *path,
const char *
entry)
101 if ((value && !default_value)
102 || (!value && default_value)) {
105 "%s.%s", path,
entry);
122 struct entry *mod_entry;
132 "%s.rule_name", path);
142 const struct requirement_vector *
reqs,
143 const char *path,
const char *
entry)
146 bool includes_negated =
FALSE;
147 bool includes_surviving =
FALSE;
148 bool includes_quiet =
FALSE;
151 if (!preq->present) {
152 includes_negated =
TRUE;
154 if (preq->survives) {
155 includes_surviving =
TRUE;
158 includes_quiet =
TRUE;
165 universals_n_name(preq->source.kind),
166 "%s.%s%d.type", path,
entry, i);
169 "%s.%s%d.name", path,
entry, i);
171 req_range_name(preq->range),
172 "%s.%s%d.range", path,
entry, i);
174 if (includes_surviving) {
177 "%s.%s%d.survives", path,
entry, i);
180 if (includes_negated) {
183 "%s.%s%d.present", path,
entry, i);
186 if (includes_quiet) {
189 "%s.%s%d.quiet", path,
entry, i);
202 const char *path,
const char *
entry)
215 "%s.%s", path,
entry);
226 const char *path,
const char *
entry)
232 "%s.%s", path,
entry);
244 const char *path,
const char *
entry)
248 }
else if (save == pthis) {
252 "%s.%s", path,
entry);
263 const char *path,
const char *
entry)
275 const char *path,
const char *
entry)
288 "%s.%s", path,
entry);
299 const char *path,
const char *
entry)
312 "%s.%s", path,
entry);
322 bv_unit_classes *bits,
323 const char *path,
const char *
entry,
324 bool unreachable_only)
332 || !unreachable_only)) {
339 "%s.%s", path,
entry);
350 const char *path,
const char *
entry)
352 if (to_save != NULL) {
354 const char *sections[sect_count];
357 for (i = 0; i < sect_count; i++) {
391 if (!pb->ruledit_disabled) {
393 const char *flag_names[IF_COUNT];
397 fc_snprintf(path,
sizeof(path),
"building_%d", sect_idx++);
404 if (strcmp(pb->graphic_str,
"-")) {
407 if (strcmp(pb->graphic_alt,
"-")) {
410 if (strcmp(pb->soundtag,
"-")) {
413 if (strcmp(pb->soundtag_alt,
"-")) {
425 for (flagi = 0; flagi < IF_COUNT; flagi++) {
427 flag_names[set_count++] = impr_flag_id_name(flagi);
436 save_strvec(sfile, pb->helptext, path,
"helptext");
462 fc_snprintf(path,
sizeof(path),
"style_%d", sect_idx++);
473 fc_snprintf(path,
sizeof(path),
"citystyle_%d", sect_idx++);
479 if (strcmp(
city_styles[i].citizens_graphic,
"-")) {
481 "%s.citizens_graphic", path);
493 fc_snprintf(path,
sizeof(path),
"musicstyle_%d", sect_idx++);
512 const char *uflags_path,
513 bool (*unexpected_req)(
525 fc_assert(req->range == REQ_RANGE_LOCAL);
527 if (req->source.kind == VUT_UTFLAG) {
530 protecor_flag[i++] = req->source.value.unitflag;
531 }
else if (unexpected_req(req)) {
534 log_error(
"Can't handle action auto performer requirement %s",
547 log_error(
"%s: didn't save all unit type flags.", uflags_path);
563 const char *actions_path)
592 log_error(
"%s: didn't save all actions.", actions_path);
618 char uflags_path[100];
619 char action_path[100];
622 "missing_unit_upkeep.%s_protected",
item);
624 "missing_unit_upkeep.%s_unit_act",
item);
650 fc_snprintf(path,
sizeof(path),
"specialist_%d", sect_idx++);
656 "%s.short_name", path);
672 "parameters.celebrate_size_limit");
676 "parameters.add_to_size_limit");
680 "parameters.angry_citizens");
684 "parameters.changable_tax");
688 "parameters.forced_science");
692 "parameters.forced_luxury");
696 "parameters.forced_gold");
700 "parameters.vision_reveal_tiles");
704 "parameters.pop_report_zeroes");
708 "citizen.nationality");
712 "citizen.convert_speed");
716 "citizen.conquest_convert_pct");
720 "citizen.partisans_pct");
727 "missing_unit_upkeep.food_wipe");
734 "missing_unit_upkeep.gold_wipe");
741 "missing_unit_upkeep.shield_wipe");
771 effect_type_name(peffect->
type),
812 if (ui_name == NULL) {
941 "Forbid \"%s\" if any one of the listed actions are legal.",
953 action_vec[i] = blocker_id;
959 sfile, &action_vec, i, gen_action, comment,
"actions.%s",
962 log_error(
"Didn't save all %s blocking actions.",
979 char action_list_path[100];
991 fc_snprintf(action_list_path,
sizeof(action_list_path),
1020 action_vec[i] = act_id;
1027 log_error(
"Didn't save all of %s.", path);
1044 enum gameloss_style gs;
1045 const char *style_names[32];
1054 if (sfile == NULL) {
1060 "ruledit.description_file");
1065 "tileset.preferred");
1069 "soundset.preferred");
1073 "musicset.preferred");
1084 struct entry *mod_entry;
1094 "about.description");
1097 "about.description");
1103 "about.capabilities");
1109 "options",
"global_init_techs");
1111 "options",
"global_init_buildings");
1115 "options.popup_tech_help", NULL);
1118 "civstyle.base_pollution", NULL);
1121 for (gs = gameloss_style_begin(); gs != gameloss_style_end(); gs = gameloss_style_next(gs)) {
1123 style_names[set_count++] = gameloss_style_name(gs);
1127 if (set_count > 0) {
1129 "civstyle.gameloss_style");
1134 "civstyle.happy_cost", NULL);
1137 "civstyle.food_cost", NULL);
1140 "civstyle.civil_war_enabled", NULL);
1143 "civstyle.civil_war_bonus_celebrating", NULL);
1146 "civstyle.civil_war_bonus_unhappy", NULL);
1149 ACT_SUB_RES_MAY_EMBARK),
1151 "civstyle.paradrop_to_transport", NULL);
1154 "civstyle.base_bribe_cost", NULL);
1157 "civstyle.ransom_gold", NULL);
1160 "civstyle.pillage_select", NULL);
1163 "civstyle.tech_steal_allow_holes", NULL);
1166 "civstyle.tech_trade_allow_holes", NULL);
1169 "civstyle.tech_trade_loss_allow_holes", NULL);
1172 "civstyle.tech_parasite_allow_holes", NULL);
1175 "civstyle.tech_loss_allow_holes", NULL);
1178 "civstyle.upgrade_veteran_loss", NULL);
1181 "civstyle.autoupgrade_veteran_loss", NULL);
1185 "civstyle.granary_food_ini");
1189 "civstyle.granary_food_inc", NULL);
1195 "civstyle.min_city_center_%s",
1205 "civstyle.init_vis_radius_sq", NULL);
1208 "civstyle.init_city_radius_sq", NULL);
1213 "civstyle.gold_upkeep_style");
1216 1,
"civstyle.output_granularity", NULL);
1218 FALSE,
"civstyle.airlift_from_always_enabled", NULL);
1220 TRUE,
"civstyle.airlift_to_always_enabled", NULL);
1226 "wonder_visibility.small_wonders");
1231 "illness.illness_on", NULL);
1234 "illness.illness_base_factor", NULL);
1237 "illness.illness_min_size", NULL);
1240 "illness.illness_trade_infection", NULL);
1243 "illness.illness_pollution_factor", NULL);
1246 "incite_cost.base_incite_cost", NULL);
1249 "incite_cost.improvement_factor", NULL);
1252 "incite_cost.unit_factor", NULL);
1255 "incite_cost.total_factor", NULL);
1274 "auto_attack.attack_actions");
1277 "auto_attack",
"if_attacker");
1281 "actions.diplchance_initial_odds")) {
1287 ACTION_SPY_BRIBE_UNIT))) {
1288 log_error(
"Didn't save all post success forced actions.");
1294 log_error(
"Didn't save all post success forced actions.");
1299 "actions.escape_city")) {
1300 log_error(
"Didn't save all escape city forced actions.");
1305 "actions.unit_stack_death")) {
1306 log_error(
"Didn't save all escape unit stack death forced actions.");
1312 "actions.poison_empties_food_stock", NULL);
1316 "actions.steal_maps_reveals_all_cities", NULL);
1332 action_vec[i] = act;
1338 "actions.quiet_actions") != i) {
1339 log_error(
"Didn't save all quiet actions.");
1349 if (pae->ruledit_disabled) {
1353 fc_snprintf(path,
sizeof(path),
"actionenabler_%d", sect_idx++);
1364 "combat_rules.tired_attack", NULL);
1367 "combat_rules.only_killing_makes_veteran", NULL);
1370 "combat_rules.only_real_fight_makes_veteran", NULL);
1373 "combat_rules.combat_odds_scaled_veterancy", NULL);
1376 "combat_rules.damage_reduces_bombard_rate", NULL);
1378 "combat_rules.low_firepower_badwallattacker", NULL);
1380 "combat_rules.low_firepower_pearl_harbour", NULL);
1382 "combat_rules.low_firepower_combat_bonus", NULL);
1384 "combat_rules.low_firepower_nonnat_bombard", NULL);
1387 "combat_rules.nuke_pop_loss_pct", NULL);
1390 "combat_rules.nuke_defender_survival_chance_pct", NULL);
1393 "borders.radius_sq_city", NULL);
1396 "borders.size_effect", NULL);
1399 "borders.radius_sq_city_permanent", NULL);
1401 "research.tech_cost_style");
1404 "research.base_tech_cost", NULL);
1406 "research.tech_leakage");
1408 "research.tech_upkeep_style");
1411 "research.tech_upkeep_divider", NULL);
1413 "research.free_tech_method");
1417 "culture.victory_min_points", NULL);
1420 "culture.victory_lead_pct", NULL);
1423 "culture.migration_pml", NULL);
1426 "culture.history_interest_pml", NULL);
1430 "calendar.skip_year_0", NULL);
1433 "calendar.start_year", NULL);
1435 0,
"calendar.fragments", NULL);
1440 "calendar.fragment_name%d", i);
1446 "calendar.positive_label");
1450 "calendar.negative_label");
1459 rgbcolor_save(sfile, pcol,
"playercolors.colorlist%d", col_idx++);
1478 enum disaster_effect_id de;
1479 const char *effect_names[DE_COUNT];
1481 fc_snprintf(path,
sizeof(path),
"disaster_%d", sect_idx++);
1487 "%s.frequency", path);
1491 for (de = disaster_effect_id_begin();
1492 de != disaster_effect_id_end();
1493 de = disaster_effect_id_next(de)) {
1495 effect_names[set_count++] = disaster_effect_id_name(de);
1499 if (set_count > 0) {
1501 "%s.effects", path);
1511 fc_snprintf(path,
sizeof(path),
"achievement_%d", sect_idx++);
1525 0, path,
"culture");
1528 if (pach->cons_msg != NULL) {
1537 for (trt = 0; trt <
TRT_LAST; trt++) {
1545 "trade.settings%d", set_count++);
1552 "%s.cancelling", path);
1559 0,
"trade.min_trade_route_val", NULL);
1563 "trade.goods_selection");
1572 const char *flag_names[GF_COUNT];
1575 fc_snprintf(path,
sizeof(path),
"goods_%d", sect_idx++);
1586 for (flagi = 0; flagi < GF_COUNT; flagi++) {
1588 flag_names[set_count++] = goods_flag_id_name(flagi);
1592 if (set_count > 0) {
1597 save_strvec(sfile, pgood->helptext, path,
"helptext");
1604 for (i = 0; i < CLAUSE_COUNT; i++) {
1610 fc_snprintf(path,
sizeof(path),
"clause_%d", sect_idx++);
1631 "settings.set%d.name", set_count);
1635 "settings.set%d.value", set_count);
1639 "settings.set%d.value", set_count);
1643 "settings.set%d.value", set_count);
1648 "settings.set%d.value", set_count);
1653 "settings.set%d.value", set_count);
1658 "settings.set%d.value", set_count);
1664 "settings.set%d.lock", set_count);
1682 if (sfile == NULL) {
1687 "during_revolution");
1696 fc_snprintf(path,
sizeof(path),
"government_%d", sect_idx++);
1705 if (pg->ai.better != NULL) {
1710 ruler_title_hash_lookup(pg->ruler_titles, NULL,
1712 if (prtitle != NULL) {
1716 if (
title != NULL) {
1718 "%s.ruler_male_title", path);
1722 if (
title != NULL) {
1724 "%s.ruler_female_title", path);
1728 save_strvec(sfile, pg->helptext, path,
"helptext");
1736 if (!pmul->ruledit_disabled) {
1739 fc_snprintf(path,
sizeof(path),
"multiplier_%d", sect_idx++);
1754 save_strvec(sfile, pmul->helptext, path,
"helptext");
1767 const char *secname,
const char *field_prefix)
1774 const char *trait_names[] = {
1782 for (tr = trait_begin(); tr != trait_end() && trait_names[tr] != NULL;
1783 tr = trait_next(tr)) {
1784 int default_default;
1786 default_default = (traits[tr].
min + traits[tr].
max) / 2;
1789 || (default_traits != NULL && traits[tr].
min != default_traits[tr].
min)) {
1794 || (default_traits != NULL && traits[tr].max != default_traits[tr].max)) {
1798 if (default_default != traits[tr].fixed) {
1799 secfile_insert_int(sfile, traits[tr].fixed,
"%s.%s%s_default", secname, field_prefix,
1815 char *city_str[max_items];
1818 const char *list_items[max_items];
1822 fc_snprintf(path,
sizeof(path),
"nation_%d", sect_idx++);
1845 if (set_count > 0) {
1853 if (set_count > 0) {
1862 "%s.leaders%d.sex", path, subsect_idx++);
1870 sfile, path,
"trait_");
1876 if (pnat->
barb_type != NOT_A_BARBARIAN) {
1878 "%s.barbarian_type", path);
1892 if (ruler_title_hash_lookup(pgov->ruler_titles, pnat, &prtitle)) {
1894 "%s.ruler_titles%d.government", path, subsect_idx);
1896 "%s.ruler_titles%d.male_title", path, subsect_idx);
1898 "%s.ruler_titles%d.female_title", path, subsect_idx++);
1908 if (set_count > 0) {
1918 "%s.init_government", path);
1923 bool list_started =
FALSE;
1932 strcat(city_str[set_count],
" (!river");
1933 list_started =
TRUE;
1936 strcat(city_str[set_count],
" (river");
1937 list_started =
TRUE;
1944 const char *pref = NULL;
1960 strcat(city_str[set_count],
", ");
1962 strcat(city_str[set_count],
" (");
1963 list_started =
TRUE;
1965 strcat(city_str[set_count], pref);
1972 strcat(city_str[set_count],
")");
1975 list_items[set_count] = city_str[set_count];
1978 if (set_count > 0) {
1983 for (i = 0; i < set_count; i++) {
2001 if (sfile == NULL) {
2022 "ruledit.embedded_nations");
2028 "default_traits",
"");
2034 "compatibility.allowed_govs");
2039 "compatibility.allowed_terrains");
2044 "compatibility.allowed_styles");
2050 "compatibility.default_government");
2067 log_error(
"Embedded nation \"%s\" not found!",
2082 fc_snprintf(path,
sizeof(path),
"nset_%d", sect_idx++);
2097 fc_snprintf(path,
sizeof(path),
"ngroup_%d", sect_idx++);
2102 if (pgroup->hidden) {
2129 if (sfile == NULL) {
2137 if (flagname != NULL) {
2153 fc_snprintf(path,
sizeof(path),
"techclass_%d", sect_idx++);
2164 const char *flag_names[TF_COUNT];
2168 fc_snprintf(path,
sizeof(path),
"advance_%d", sect_idx++);
2173 if (pa->tclass != NULL) {
2189 if (strcmp(
"-", pa->graphic_alt)) {
2192 if (pa->bonus_message != NULL) {
2197 for (flagi = 0; flagi < TF_COUNT; flagi++) {
2199 flag_names[set_count++] = tech_flag_id_name(flagi);
2203 if (set_count > 0) {
2207 if (pa->cost >= 0) {
2211 save_strvec(sfile, pa->helptext, path,
"helptext");
2228 if (sfile == NULL) {
2236 if (flagname != NULL) {
2250 if (flagname != NULL) {
2257 "control.extra_flags%d.helptxt", i);
2263 "parameters.ocean_reclaim_requirement");
2267 "parameters.land_channel_requirement");
2271 "parameters.thaw_requirement");
2275 "parameters.freeze_requirement");
2279 "parameters.lake_max_size");
2283 "parameters.min_start_native_area");
2287 "parameters.move_fragments");
2291 "parameters.igter_cost");
2295 "parameters.pythagorean_diagonal");
2299 "parameters.ocean_resources");
2309 const char *flag_names[TER_USER_LAST];
2314 fc_snprintf(path,
sizeof(path),
"terrain_%d", sect_idx++);
2320 identifier[0] = pterr->identifier;
2321 identifier[1] =
'\0';
2331 if (pterr->output[o] != 0) {
2338 for (r = 0; pterr->resources[r] != NULL; r++) {
2343 const char *resource_names[r];
2345 for (r = 0; pterr->resources[r] != NULL; r++) {
2350 "%s.resources", path);
2354 if (pterr->road_output_incr_pct[o] != 0) {
2356 "%s.road_%s_incr_pct", path,
2365 "cultivate_result");
2367 "%s.cultivate_time", path);
2372 "%s.plant_time", path);
2375 "%s.irrigation_food_incr", path);
2377 "%s.irrigation_time", path);
2380 "%s.mining_shield_incr", path);
2382 "%s.mining_time", path);
2385 "transform_result");
2387 "%s.transform_time", path);
2389 if (pterr->animal != NULL) {
2398 "%s.placing_time", path);
2400 "%s.pillage_time", path);
2402 "%s.clean_pollution_time", path);
2404 "%s.clean_fallout_time", path);
2407 "warmer_wetter_result");
2409 "warmer_drier_result");
2411 "cooler_wetter_result");
2413 "cooler_drier_result");
2416 for (flagi = 0; flagi < TER_USER_LAST; flagi++) {
2418 flag_names[set_count++] = terrain_flag_id_name(flagi);
2422 if (set_count > 0) {
2428 enum mapgen_terrain_property mtp;
2430 for (mtp = mapgen_terrain_property_begin();
2431 mtp != mapgen_terrain_property_end();
2432 mtp = mapgen_terrain_property_next(mtp)) {
2433 if (pterr->property[mtp] != 0) {
2435 "%s.property_%s", path,
2436 mapgen_terrain_property_name(mtp));
2448 if (set_count > 0) {
2450 "%s.native_to", path);
2455 save_strvec(sfile, pterr->helptext, path,
"helptext");
2463 if (!pres->ruledit_disabled) {
2467 fc_snprintf(path,
sizeof(path),
"resource_%d", sect_idx++);
2473 if (pres->data.resource->output[o] != 0) {
2479 identifier[0] = pres->data.resource->id_old_save;
2480 identifier[1] =
'\0';
2486 "extraui.ui_name_base_fortress");
2488 "extraui.ui_name_base_airbase");
2495 const char *flag_names[EF_COUNT];
2496 const char *cause_names[EC_COUNT];
2504 fc_snprintf(path,
sizeof(path),
"extra_%d", sect_idx++);
2509 "%s.category", path);
2512 for (causei = 0; causei < EC_COUNT; causei++) {
2514 cause_names[set_count++] = extra_cause_name(causei);
2518 if (set_count > 0) {
2524 for (causei = 0; causei < ERM_COUNT; causei++) {
2526 cause_names[set_count++] = extra_rmcause_name(causei);
2530 if (set_count > 0) {
2532 "%s.rmcauses", path);
2535 if (strcmp(pextra->graphic_str,
"-")) {
2538 if (strcmp(pextra->graphic_alt,
"-")) {
2541 if (strcmp(pextra->activity_gfx,
"-")) {
2544 if (strcmp(pextra->act_gfx_alt,
"-")) {
2547 if (strcmp(pextra->act_gfx_alt2,
"-")) {
2550 if (strcmp(pextra->rmact_gfx,
"-")) {
2553 if (strcmp(pextra->rmact_gfx_alt,
"-")) {
2559 save_reqs_vector(sfile, &(pextra->appearance_reqs), path,
"appearance_reqs");
2560 save_reqs_vector(sfile, &(pextra->disappearance_reqs), path,
"disappearance_reqs");
2563 if ((!pextra->buildable && worker_cause)
2564 || (pextra->buildable && !worker_cause)) {
2567 if (!pextra->generated) {
2572 if (pextra->build_time_factor != 1) {
2575 if (pextra->removal_time_factor != 1) {
2576 secfile_insert_int(sfile, pextra->removal_time_factor,
"%s.removal_time_factor", path);
2578 if (pextra->infracost != 0) {
2581 if (pextra->defense_bonus != 0) {
2584 if (pextra->eus != EUS_NORMAL) {
2586 "%s.unit_seen", path);
2605 if (set_count > 0) {
2607 "%s.native_to", path);
2611 for (flagi = 0; flagi < EF_COUNT; flagi++) {
2613 flag_names[set_count++] = extra_flag_id_name(flagi);
2617 if (set_count > 0) {
2629 if (set_count > 0) {
2631 "%s.conflicts", path);
2641 if (set_count > 0) {
2643 "%s.hidden_by", path);
2653 if (set_count > 0) {
2655 "%s.bridged_over", path);
2658 save_strvec(sfile, pextra->helptext, path,
"helptext");
2666 if (!pextra->ruledit_disabled) {
2670 fc_snprintf(path,
sizeof(path),
"base_%d", sect_idx++);
2676 "%s.gui_type", path);
2697 if (!pextra->ruledit_disabled) {
2700 const char *flag_names[RF_COUNT];
2704 fc_snprintf(path,
sizeof(path),
"road_%d", sect_idx++);
2711 if (proad->
move_mode != RMM_FAST_ALWAYS) {
2713 "%s.move_mode", path);
2747 "%s.gui_type", path);
2750 for (flagi = 0; flagi < RF_COUNT; flagi++) {
2752 flag_names[set_count++] = road_flag_id_name(flagi);
2756 if (set_count > 0) {
2772 const char *vlist_name[vsystem->
levels];
2773 int vlist_power[vsystem->
levels];
2774 int vlist_raise[vsystem->
levels];
2775 int vlist_wraise[vsystem->
levels];
2776 int vlist_move[vsystem->
levels];
2779 for (i = 0; i < vsystem->
levels; i++) {
2788 "%s.veteran_names", path);
2790 "%s.veteran_power_fact", path);
2792 "%s.veteran_base_raise_chance", path);
2794 "%s.veteran_work_raise_chance", path);
2796 "%s.veteran_move_bonus", path);
2809 bool has_quiet =
FALSE;
2812 if (pbonus->quiet) {
2821 "%s.bonuses%d.flag", path, i);
2823 "%s.bonuses%d.type", path, i);
2825 "%s.bonuses%d.value", path, i);
2829 "%s.bonuses%d.quiet", path, i);
2847 if (sfile == NULL) {
2855 if (flagname != NULL) {
2869 if (flagname != NULL) {
2876 "control.class_flags%d.helptxt", i);
2887 const char *flag_names[UCF_COUNT];
2891 fc_snprintf(path,
sizeof(path),
"unitclass_%d", sect_idx++);
2896 "%s.min_speed", path);
2898 if (puc->non_native_def_pct != 100) {
2900 "%s.non_native_def_pct", path);
2904 for (flagi = 0; flagi < UCF_COUNT; flagi++) {
2906 flag_names[set_count++] = unit_class_flag_id_name(flagi);
2910 if (set_count > 0) {
2915 save_strvec(sfile, puc->helptext, path,
"helptext");
2923 if (!put->ruledit_disabled) {
2929 fc_snprintf(path,
sizeof(path),
"unit_%d", sect_idx++);
2936 save_tech_ref(sfile, put->require_advance, path,
"tech_req");
2943 if (preq->source.kind == VUT_GOVERNMENT) {
2945 "can't convert non player range to the rs format");
2947 "can't convert not present reqs to the rs format");
2950 "%s.gov_req", path);
2960 if (preq->source.kind == VUT_IMPROVEMENT) {
2962 "can't convert non player range to the rs format");
2964 "can't convert not present reqs to the rs format");
2967 "%s.impr_req", path);
2972 if (put->obsoleted_by != NULL) {
2974 "%s.obsolete_by", path);
2978 if (strcmp(
"-", put->graphic_alt)) {
2981 if (strcmp(
"-", put->sound_move)) {
2984 if (strcmp(
"-", put->sound_move_alt)) {
2987 if (strcmp(
"-", put->sound_fight)) {
2990 if (strcmp(
"-", put->sound_fight_alt)) {
3006 if (put->vlayer != V_MAIN) {
3008 "%s.vision_layer", path);
3017 if (put->upkeep[o] != 0) {
3023 if (put->converted_to != NULL) {
3025 "%s.convert_to", path);
3027 if (put->convert_time != 1) {
3034 if (put->veteran != NULL) {
3038 if (put->paratroopers_range != 0) {
3040 "%s.paratroopers_range", path);
3042 if (put->bombard_rate != 0) {
3044 "%s.bombard_rate", path);
3046 if (put->city_slots != 0) {
3048 "%s.city_slots", path);
3050 if (put->city_size != 1) {
3052 "%s.city_size", path);
3056 "%s.tp_defense", path);
3061 flag_names[set_count++] = unit_type_flag_id_name(flagi);
3065 if (set_count > 0) {
3073 flag_names[set_count++] = unit_role_id_name(flagi);
3077 if (set_count > 0) {
3082 save_strvec(sfile, put->helptext, path,
"helptext");
3095 if (buffer != NULL) {
3096 FILE *ffile =
fc_fopen(filename,
"w");
3097 int full_len = strlen(buffer);
3100 if (ffile != NULL) {
3101 len = fwrite(buffer, 1, full_len, ffile);
3103 if (
len != full_len) {
3134 bool success =
TRUE;
3138 fc_snprintf(filename,
sizeof(filename),
"%s/buildings.ruleset", path);
3143 fc_snprintf(filename,
sizeof(filename),
"%s/styles.ruleset", path);
3148 fc_snprintf(filename,
sizeof(filename),
"%s/cities.ruleset", path);
3153 fc_snprintf(filename,
sizeof(filename),
"%s/effects.ruleset", path);
3158 fc_snprintf(filename,
sizeof(filename),
"%s/game.ruleset", path);
3163 fc_snprintf(filename,
sizeof(filename),
"%s/governments.ruleset", path);
3168 fc_snprintf(filename,
sizeof(filename),
"%s/nations.ruleset", path);
3173 fc_snprintf(filename,
sizeof(filename),
"%s/techs.ruleset", path);
3178 fc_snprintf(filename,
sizeof(filename),
"%s/terrain.ruleset", path);
3183 fc_snprintf(filename,
sizeof(filename),
"%s/units.ruleset", path);
3188 fc_snprintf(filename,
sizeof(filename),
"%s/script.lua", path);
3193 fc_snprintf(filename,
sizeof(filename),
"%s/parser.lua", path);
3198 fc_snprintf(filename,
sizeof(filename),
"%s/luadata.txt", path);
3204 log_error(
_(
"Failed to create directory %s"), path);
#define achievements_iterate_end
#define achievements_iterate(_ach_)
const char * action_min_range_ruleset_var_name(int act)
void action_list_end(action_id *act_list, int size)
const char * action_blocked_by_ruleset_var_name(const struct action *act)
bool action_is_in_use(struct action *paction)
const char * action_post_success_forced_ruleset_var_name(const struct action *act)
const char * action_rule_name(const struct action *action)
const char * action_id_rule_name(action_id act_id)
const char * action_actor_consuming_always_ruleset_var_name(action_id act)
const char * action_max_range_ruleset_var_name(int act)
int action_min_range_default(enum action_result result)
const char * action_target_kind_ruleset_var_name(int act)
const char * action_ui_name_default(int act)
const struct action_auto_perf * action_auto_perf_by_number(const int num)
const char * action_ui_name_ruleset_var_name(int act)
int action_max_range_default(enum action_result result)
#define action_enablers_iterate_end
#define ACTION_AUTO_MOVED_ADJ
#define ACTION_AUTO_UPKEEP_GOLD
static struct action * action_by_number(action_id act_id)
#define ACTION_AUTO_ESCAPE_STACK
#define ACTION_AUTO_ESCAPE_CITY
#define ACTION_DISTANCE_UNLIMITED
#define ACTION_AUTO_UPKEEP_SHIELD
#define ACTION_AUTO_POST_BRIBE
#define action_iterate_end
#define action_enablers_iterate(_enabler_)
#define action_iterate(_act_)
#define ACTION_AUTO_UPKEEP_FOOD
#define ACTION_AUTO_POST_ATTACK
void astr_free(struct astring *astr)
#define BV_ISSET(bv, bit)
struct citystyle * city_styles
const char * get_output_identifier(Output_type_id output)
#define output_type_iterate(output)
#define output_type_iterate_end
struct clause_info * clause_info_get(enum clause_type type)
#define disaster_type_iterate(_p)
#define disaster_type_iterate_end
bool iterate_effect_cache(iec_cb cb, void *data)
#define MAX_NUM_NATION_SETS
#define MAX_NUM_BUILDING_LIST
#define MAX_CALENDAR_FRAGMENTS
#define MAX_NUM_NATION_GROUPS
#define MAX_NUM_UNIT_LIST
#define MAX_NUM_TECH_LIST
const char * skip_intl_qualifier_prefix(const char *str)
#define RS_DEFAULT_RANSOM_GOLD
#define RS_DEFAULT_CIVIL_WAR_UNHAPPY
#define RS_DEFAULT_NUKE_DEFENDER_SURVIVAL_CHANCE_PCT
#define RS_DEFAULT_NUKE_POP_LOSS_PCT
#define RS_DEFAULT_BASE_POLLUTION
#define RS_DEFAULT_INCITE_TOTAL_FCT
#define RS_DEFAULT_ILLNESS_BASE_FACTOR
#define RS_DEFAULT_NEG_YEAR_LABEL
#define RS_DEFAULT_INCITE_IMPROVEMENT_FCT
#define RS_ACTION_NO_MAX_DISTANCE
#define RS_DEFAULT_BASE_BRIBE_COST
#define RS_DEFAULT_TECH_UPKEEP_DIVIDER
#define RS_DEFAULT_HAPPY_COST
#define RS_DEFAULT_POISON_EMPTIES_FOOD_STOCK
#define RS_DEFAULT_GRANARY_FOOD_INC
#define RS_DEFAULT_ILLNESS_ON
#define GAME_DEFAULT_CELEBRATESIZE
#define RS_DEFAULT_STEAL_MAP_REVEALS_CITIES
#define RS_DEFAULT_CIVIL_WAR_CELEB
#define RS_DEFAULT_BASE_TECH_COST
#define RS_DEFAULT_UPGRADE_VETERAN_LOSS
#define RS_DEFAULT_CALENDAR_SKIP_0
#define RS_DEFAULT_CITY_RADIUS_SQ
#define GAME_DEFAULT_START_YEAR
#define RS_DEFAULT_BORDER_SIZE_EFFECT
#define RS_DEFAULT_PILLAGE_SELECT
#define RS_DEFAULT_POS_YEAR_LABEL
#define RS_DEFAULT_VIS_RADIUS_SQ
#define RS_DEFAULT_BORDER_RADIUS_SQ_CITY_PERMANENT
#define RS_DEFAULT_TIRED_ATTACK
#define RS_DEFAULT_ACTION_ACTOR_CONSUMING_ALWAYS
#define RS_DEFAULT_ILLNESS_TRADE_INFECTION_PCT
#define RS_DEFAULT_FOOD_COST
#define RS_DEFAULT_INCITE_UNIT_FCT
#define RS_DEFAULT_INCITE_BASE_COST
#define GAME_DEFAULT_ANGRYCITIZEN
#define RS_DEFAULT_CITY_CENTER_OUTPUT
#define RS_DEFAULT_ILLNESS_POLLUTION_PCT
#define RS_DEFAULT_ILLNESS_MIN_SIZE
#define RS_DEFAULT_BORDER_RADIUS_SQ_CITY
const char * ruler_title_female_untranslated_name(const struct ruler_title *pruler_title)
const char * ruler_title_male_untranslated_name(const struct ruler_title *pruler_title)
const char * government_rule_name(const struct government *pgovern)
#define governments_iterate(NAME_pgov)
#define governments_re_active_iterate(_p)
#define governments_re_active_iterate_end
#define governments_iterate_end
struct impr_type * improvement_by_number(const Impr_type_id id)
const char * improvement_rule_name(const struct impr_type *pimprove)
bool improvement_has_flag(const struct impr_type *pimprove, enum impr_flag_id flag)
#define improvement_re_active_iterate_end
#define improvement_re_active_iterate(_p)
#define fc_assert_msg(condition, message,...)
#define fc_assert(condition)
#define log_error(message,...)
struct terrain_misc terrain_control
#define multipliers_iterate(_mul_)
#define multipliers_iterate_end
static const char * rule_name_get(const struct name_translation *ptrans)
static const char * untranslated_name(const struct name_translation *ptrans)
const char * nation_city_name(const struct nation_city *pncity)
const char * nation_rule_name(const struct nation_type *pnation)
bool nation_leader_is_male(const struct nation_leader *pleader)
enum nation_city_preference nation_city_terrain_preference(const struct nation_city *pncity, const struct terrain *pterrain)
const char * nation_group_rule_name(const struct nation_group *pgroup)
const char * nation_set_untranslated_name(const struct nation_set *pset)
bool nation_is_in_group(const struct nation_type *pnation, const struct nation_group *pgroup)
bool nation_is_in_set(const struct nation_type *pnation, const struct nation_set *pset)
const char * nation_set_description(const struct nation_set *pset)
enum nation_city_preference nation_city_river_preference(const struct nation_city *pncity)
struct nation_type * nation_by_rule_name(const char *name)
const char * nation_leader_name(const struct nation_leader *pleader)
const char * nation_set_rule_name(const struct nation_set *pset)
#define nation_leader_list_iterate(leaderlist, pleader)
#define nation_list_iterate(nationlist, pnation)
#define nation_sets_iterate_end
#define nation_sets_iterate(NAME_pset)
#define nations_iterate_end
#define nation_city_list_iterate(citylist, pncity)
#define nation_list_iterate_end
#define nation_city_list_iterate_end
#define nations_iterate(NAME_pnation)
#define nation_leader_list_iterate_end
#define nation_groups_iterate(NAME_pgroup)
#define nation_groups_iterate_end
struct section_file * secfile_new(bool allow_duplicates)
const char * entry_name(const struct entry *pentry)
bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking)
bool secfile_save(const struct section_file *secfile, const char *filename, int compression_level, enum fz_method compression_method)
struct section * secfile_insert_include(struct section_file *secfile, const char *filename)
struct entry * secfile_insert_filereference(struct section_file *secfile, const char *filename, const char *path,...)
#define secfile_insert_int(secfile, value, path,...)
#define secfile_insert_enum_vec(secfile, enumerators, dim, specenum_type, path,...)
#define secfile_insert_enum(secfile, enumerator, specenum_type, path,...)
#define secfile_insert_int_vec(secfile, values, dim, path,...)
#define secfile_insert_str_vec(secfile, strings, dim, path,...)
#define secfile_insert_str(secfile, string, path,...)
#define secfile_insert_bool(secfile, value, path,...)
#define secfile_insert_enum_vec_comment(secfile, enumerators, dim, specenum_type, comment, path,...)
#define secfile_insert_enum_data(secfile, value, bitwise, name_fn, data, path,...)
const char * req_to_fstring(const struct requirement *req, struct astring *astr)
const char * universal_rule_name(const struct universal *psource)
#define requirement_vector_iterate_end
#define requirement_vector_iterate(req_vec, preq)
void rgbcolor_save(struct section_file *file, const struct rgbcolor *prgbcolor, char *path,...)
#define rgbcolor_list_iterate_end
#define rgbcolor_list_iterate(rgbcolorlist, prgbcolor)
bool road_has_flag(const struct road_type *proad, enum road_flag_id flag)
static bool save_reqs_vector(struct section_file *sfile, const struct requirement_vector *reqs, const char *path, const char *entry)
static bool save_tech_list(struct section_file *sfile, int *input, const char *path, const char *entry)
static bool save_name_translation(struct section_file *sfile, struct name_translation *name, const char *path)
static bool save_terrain_ref(struct section_file *sfile, const struct terrain *save, const struct terrain *pthis, const char *path, const char *entry)
static bool save_unit_list(struct section_file *sfile, struct unit_type **input, const char *path, const char *entry)
static bool save_nations_ruleset(const char *filename, const char *name, struct rule_data *data)
static bool save_action_kind(struct section_file *sfile, action_id act)
static bool save_action_actor_consuming_always(struct section_file *sfile, action_id act)
static bool save_action_max_range(struct section_file *sfile, action_id act)
static bool save_traits(struct trait_limits *traits, struct trait_limits *default_traits, struct section_file *sfile, const char *secname, const char *field_prefix)
bool save_ruleset(const char *path, const char *name, struct rule_data *data)
static bool save_cities_ruleset(const char *filename, const char *name)
static bool save_techs_ruleset(const char *filename, const char *name)
static bool save_uclass_vec(struct section_file *sfile, bv_unit_classes *bits, const char *path, const char *entry, bool unreachable_only)
static bool save_action_post_success_force(struct section_file *sfile, int performer_slot, struct action *paction)
static bool save_ruleset_file(struct section_file *sfile, const char *filename)
static bool save_veteran_system(struct section_file *sfile, const char *path, struct veteran_system *vsystem)
static bool save_bv_actions(struct section_file *sfile, bv_actions content, const char *path)
static bool save_default_bool(struct section_file *sfile, bool value, bool default_value, const char *path, const char *entry)
static bool effect_save(struct effect *peffect, void *data)
static bool save_game_ruleset(const char *filename, const char *name)
static bool save_buildings_ruleset(const char *filename, const char *name)
static bool save_action_auto_uflag_block(struct section_file *sfile, const int aap, const char *uflags_path, bool(*unexpected_req)(const struct requirement *preq))
static bool unexpected_non_otype(const struct requirement *req)
static bool save_building_list(struct section_file *sfile, int *input, const char *path, const char *entry)
static bool save_luadata(const char *filename)
static bool save_governments_ruleset(const char *filename, const char *name)
static bool save_action_blocked_by(struct section_file *sfile, struct action *paction)
static bool save_strvec(struct section_file *sfile, struct strvec *to_save, const char *path, const char *entry)
static bool save_units_ruleset(const char *filename, const char *name)
static bool save_terrain_ruleset(const char *filename, const char *name)
static bool save_muuk_action_auto(struct section_file *sfile, const int aap, const char *item)
static bool save_action_range(struct section_file *sfile, action_id act)
static bool save_gov_ref(struct section_file *sfile, const struct government *gov, const char *path, const char *entry)
static bool save_styles_ruleset(const char *filename, const char *name)
static struct section_file * create_ruleset_file(const char *rsname, const char *rstype)
static bool save_combat_bonuses(struct section_file *sfile, struct unit_type *put, char *path)
static bool save_effects_ruleset(const char *filename, const char *name)
static bool save_default_int(struct section_file *sfile, int value, int default_value, const char *path, const char *entry)
static bool save_nation(struct section_file *sfile, struct nation_type *pnat, int sect_idx)
static bool save_script_lua(const char *filename, const char *name, const char *buffer)
static bool save_action_auto_actions(struct section_file *sfile, const int aap, const char *actions_path)
static bool save_tech_ref(struct section_file *sfile, const struct advance *padv, const char *path, const char *entry)
static bool save_action_ui_name(struct section_file *sfile, int act, const char *entry_name)
char * get_parser_buffer(void)
char * get_script_buffer(void)
#define RS_DEFAULT_DAMAGE_REDUCES_BOMBARD_RATE
#define RS_DEFAULT_TECH_TRADE_LOSS_HOLES
#define RS_DEFAULT_EXTRA_APPEARANCE
#define RS_DEFAULT_TECH_PARASITE_HOLES
#define GAME_DEFAULT_ACH_VALUE
#define RS_DEFAULT_TECH_TRADE_HOLES
#define RS_DEFAULT_CULTURE_VIC_POINTS
#define RS_DEFAULT_CULTURE_MIGRATION_PML
#define RS_DEFAULT_SMALL_WONDER_VISIBILITY
#define RS_DEFAULT_ONLY_KILLING_VETERAN
#define RS_DEFAULT_TECH_LOSS_HOLES
#define RS_DEFAULT_HISTORY_INTEREST_PML
#define RS_DEFAULT_GOODS_SELECTION
#define RS_DEFAULT_PYTHAGOREAN_DIAGONAL
#define RS_DEFAULT_TECH_STEAL_HOLES
#define GAME_DEFAULT_ACH_UNIQUE
#define RS_DEFAULT_COMBAT_ODDS_SCALED_VETERANCY
#define RS_DEFAULT_MUUK_FOOD_WIPE
#define RS_DEFAULT_MUUK_GOLD_WIPE
#define RULESET_CAPABILITIES
#define GAME_DEFAULT_CHANGABLE_TAX
#define RS_DEFAULT_MUUK_SHIELD_WIPE
#define RS_DEFAULT_GOLD_UPKEEP_STYLE
#define GAME_DEFAULT_NATIONALITY
#define GAME_DEFAULT_ADDTOSIZE
#define RS_DEFAULT_ONLY_REAL_FIGHT_VETERAN
#define RS_DEFAULT_EXTRA_DISAPPEARANCE
#define GAME_DEFAULT_VISION_REVEAL_TILES
#define RS_DEFAULT_CULTURE_VIC_LEAD
#define GAME_DEFAULT_DISASTER_FREQ
#define GAME_DEFAULT_CONVERT_SPEED
int setting_int_get(struct setting *pset)
bool setting_locked(const struct setting *pset)
enum sset_type setting_type(const struct setting *pset)
const char * setting_enum_secfile_str(secfile_data_t data, int val)
enum setting_default_level setting_get_setdef(const struct setting *pset)
const char * setting_name(const struct setting *pset)
int setting_bitwise_get(struct setting *pset)
char * setting_str_get(struct setting *pset)
bool setting_bool_get(struct setting *pset)
const char * setting_bitwise_secfile_str(secfile_data_t data, int bit)
int read_enum_value(const struct setting *pset)
#define settings_iterate(_level, _pset)
#define settings_iterate_end
bool make_dir(const char *pathname)
struct specialist * specialist_by_number(const Specialist_type_id id)
#define specialist_type_iterate_end
#define specialist_type_iterate(sp)
const char * strvec_get(const struct strvec *psv, size_t svindex)
size_t strvec_size(const struct strvec *psv)
struct requirement_vector reqs
action_id alternatives[MAX_NUM_ACTIONS]
bool actor_consuming_always
enum action_result result
char ui_name[MAX_LEN_NAME]
enum action_target_kind target_kind
enum base_gui_type gui_type
struct civ_game::@29 rgame
struct rgbcolor_list * plr_colors
const char ** allowed_govs
struct rgbcolor * plr_bg_color
struct civ_game::@30::@34 server
struct packet_ruleset_control control
int global_init_techs[MAX_NUM_TECH_LIST]
struct packet_game_info info
int autoupgrade_veteran_loss
int incite_improvement_factor
struct section_file * luadata
int global_init_buildings[MAX_NUM_BUILDING_LIST]
struct civ_game::@30::@34::@39 ruledit
struct trait_limits default_traits[TRAIT_COUNT]
const char ** allowed_terrains
char * ruleset_description
const char ** allowed_styles
size_t embedded_nations_count
char * ruleset_capabilities
struct veteran_system * veteran
struct packet_calendar_info calendar
struct government * default_government
struct government * government_during_revolution
struct civ_map::@41::@43 server
struct requirement_vector receiver_reqs
struct requirement_vector giver_reqs
struct section_file * sfile
struct requirement_vector reqs
int init_buildings[MAX_NUM_BUILDING_LIST]
struct nation_list * conflicts_with
struct name_translation noun_plural
char flag_graphic_str[MAX_LEN_NAME]
struct name_translation adjective
struct trait_limits * traits
char flag_graphic_alt[MAX_LEN_NAME]
struct government * init_government
struct unit_type * init_units[MAX_NUM_UNIT_LIST]
struct nation_leader_list * leaders
enum barbarian_type barb_type
char * translation_domain
struct nation_type::@50::@52 server
struct nation_style * style
struct nation_city_list * default_cities
int init_techs[MAX_NUM_TECH_LIST]
struct nation_list * civilwar_nations
char positive_year_label[MAX_LEN_NAME]
char negative_year_label[MAX_LEN_NAME]
char calendar_fragment_name[MAX_CALENDAR_FRAGMENTS][MAX_LEN_NAME]
bool tech_steal_allow_holes
int illness_trade_infection
enum gameloss_style gameloss_style
int citizen_partisans_pct
enum goods_selection_method goods_selection
enum gold_upkeep_style gold_upkeep_style
bool damage_reduces_bombard_rate
int nuke_defender_survival_chance_pct
enum tech_upkeep_style tech_upkeep_style
bool tech_trade_loss_allow_holes
int granary_food_ini[MAX_GRANARY_INIS]
enum free_tech_method free_tech_method
bool steal_maps_reveals_all_cities
bool only_real_fight_makes_veteran
int low_firepower_pearl_harbour
int citizen_convert_speed
int illness_pollution_factor
enum tech_leakage_style tech_leakage
bool airlift_from_always_enabled
int civil_war_bonus_unhappy
bool only_killing_makes_veteran
bool poison_empties_food_stock
bool tech_loss_allow_holes
bv_actions diplchance_initial_odds
bool tech_trade_allow_holes
int low_firepower_nonnat_bombard
bool tech_parasite_allow_holes
int low_firepower_combat_bonus
int culture_migration_pml
int border_city_permanent_radius_sq
int low_firepower_badwallattacker
bool airlift_to_always_enabled
enum wonder_visib_type small_wonder_visibility
enum tech_cost_style tech_cost_style
bool combat_odds_scaled_veterancy
int civil_war_bonus_celebrating
int border_city_radius_sq
int min_city_center_output[O_LAST]
char preferred_soundset[MAX_LEN_NAME]
char version[MAX_LEN_NAME]
char preferred_tileset[MAX_LEN_NAME]
char alt_dir[MAX_LEN_NAME]
char preferred_musicset[MAX_LEN_NAME]
enum road_gui_type gui_type
enum road_move_mode move_mode
int tile_incr_const[O_LAST]
struct requirement_vector reqs
char graphic_alt[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
struct name_translation name
struct name_translation abbreviation
enum trade_route_bonus_type bonus_type
enum trade_route_illegal_cancelling cancelling
struct combat_bonus_list * bonuses
struct name_translation name
struct veteran_level * definitions
const char * style_rule_name(const struct nation_style *pstyle)
#define music_styles_iterate(_p)
#define music_styles_iterate_end
#define styles_re_active_iterate_end
#define styles_re_active_iterate(_p)
int fc_snprintf(char *str, size_t n, const char *format,...)
int fc_strcasecmp(const char *str0, const char *str1)
FILE * fc_fopen(const char *filename, const char *opentype)
struct team_slot * team_slot_by_number(int team_id)
const char * team_slot_rule_name(const struct team_slot *tslot)
struct advance * advance_by_number(const Tech_type_id atype)
const char * tech_flag_id_name_cb(enum tech_flag_id flag)
const char * tech_class_rule_name(const struct tech_class *ptclass)
bool advance_has_flag(Tech_type_id tech, enum tech_flag_id flag)
const char * advance_rule_name(const struct advance *padvance)
Tech_type_id advance_index(const struct advance *padvance)
const char * tech_flag_helptxt(enum tech_flag_id id)
#define advance_re_active_iterate(_p)
#define tech_class_iterate_end
#define MAX_NUM_USER_TECH_FLAGS
#define advance_re_active_iterate_end
#define tech_class_iterate(_p)
const char * terrain_flag_id_name_cb(enum terrain_flag_id flag)
const char * terrain_rule_name(const struct terrain *pterrain)
const char * terrain_flag_helptxt(enum terrain_flag_id id)
#define terrain_type_iterate(_p)
#define terrain_type_iterate_end
#define terrain_has_flag(terr, flag)
#define MAX_NUM_USER_TER_FLAGS
bool goods_has_flag(const struct goods_type *pgood, enum goods_flag_id flag)
const char * trade_route_type_name(enum trade_route_type type)
struct trade_route_settings * trade_route_settings_by_type(enum trade_route_type type)
const char * trade_route_cancelling_type_name(enum trade_route_illegal_cancelling type)
#define goods_type_re_active_iterate_end
#define goods_type_re_active_iterate(_p)
#define TRAIT_DEFAULT_VALUE
const char * unit_class_flag_helptxt(enum unit_class_flag_id id)
bool utype_has_role(const struct unit_type *punittype, int role)
const char * utype_rule_name(const struct unit_type *punittype)
const char * uclass_rule_name(const struct unit_class *pclass)
const char * unit_class_flag_id_name_cb(enum unit_class_flag_id flag)
const char * unit_type_flag_id_name_cb(enum unit_type_flag_id flag)
const char * unit_type_flag_helptxt(enum unit_type_flag_id id)
static bool uclass_has_flag(const struct unit_class *punitclass, enum unit_class_flag_id flag)
#define unit_type_re_active_iterate(_p)
#define combat_bonus_list_iterate_end
#define combat_bonus_list_iterate(bonuslist, pbonus)
#define unit_class_iterate(_p)
#define unit_class_re_active_iterate_end
#define MAX_NUM_USER_UNIT_FLAGS
static bool utype_has_flag(const struct unit_type *punittype, int flag)
#define UTYF_LAST_USER_FLAG
#define unit_class_re_active_iterate(_p)
#define uclass_index(_c_)
#define unit_class_iterate_end
#define MAX_NUM_USER_UCLASS_FLAGS
#define unit_type_re_active_iterate_end
const char * freeciv_datafile_version(void)