Freeciv-3.1: /fast/freeciv/nightly/S3_1/common/tech.c File Reference

Freeciv-3.1

Loading...
Searching...
No Matches
Data Structures | Macros | Functions | Variables
tech.c File Reference
`#include <stdlib.h>`
`#include <string.h>`
`#include <math.h>`
`#include "fcintl.h"`
`#include "iterator.h"`
`#include "log.h"`
`#include "mem.h"`
`#include "shared.h"`
`#include "string_vector.h"`
`#include "support.h"`
`#include "game.h"`
`#include "research.h"`
`#include "tech.h"`

Go to the source code of this file.

## Data Structures

struct | advance_req_iter
struct | advance_root_req_iter

## Macros

#define | ADVANCE_REQ_ITER(it) ((struct advance_req_iter *) it)
#define | ADVANCE_ROOT_REQ_ITER(it) ((struct advance_root_req_iter *) it)

## Functions

const struct advance * | advance_array_last (void)
Tech_type_id | advance_count_real (void)
Tech_type_id | advance_index (const struct advance *padvance)
Tech_type_id | advance_number (const struct advance *padvance)
struct advance * | advance_by_number (const Tech_type_id atype)
Tech_type_id | advance_required (const Tech_type_id tech, enum tech_req require)
struct advance * | advance_requires (const struct advance *padvance, enum tech_req require)
struct advance * | valid_advance (struct advance *padvance)
struct advance * | valid_advance_by_number (const Tech_type_id id)
struct advance * | advance_by_translated_name (const char *name)
struct advance * | advance_by_rule_name (const char *name)
bool | advance_has_flag (Tech_type_id tech, enum tech_flag_id flag)
void | techs_precalc_data (void)
bool | is_future_tech (Tech_type_id tech)
const char * | advance_name_translation (const struct advance *padvance)
const char * | advance_rule_name (const struct advance *padvance)
void | tech_classes_init (void)
struct tech_class * | tech_class_by_number (const int idx)
const char * | tech_class_name_translation (const struct tech_class *ptclass)
const char * | tech_class_rule_name (const struct tech_class *ptclass)
struct tech_class * | tech_class_by_rule_name (const char *name)
void | user_tech_flags_init (void)
void | user_tech_flags_free (void)
void | set_user_tech_flag_name (enum tech_flag_id id, const char *name, const char *helptxt)
const char * | tech_flag_id_name_cb (enum tech_flag_id flag)
const char * | tech_flag_helptxt (enum tech_flag_id id)
bool | techs_have_fixed_costs (void)
void | techs_init (void)
static void | tech_free (Tech_type_id tech)
void | techs_free (void)
size_t | advance_req_iter_sizeof (void)
static void * | advance_req_iter_get (const struct iterator *it)
static void | advance_req_iter_next (struct iterator *it)
static bool | advance_req_iter_valid (const struct iterator *it)
struct iterator * | advance_req_iter_init (struct advance_req_iter *it, const struct advance *goal)
size_t | advance_root_req_iter_sizeof (void)
static void * | advance_root_req_iter_get (const struct iterator *it)
static bool | advance_root_req_iter_valid (const struct iterator *it)
static void | advance_root_req_iter_next (struct iterator *it)
struct iterator * | advance_root_req_iter_init (struct advance_root_req_iter *it, const struct advance *goal)

## Variables

struct advance | advances [A_ARRAY_SIZE]
struct tech_class | tech_classes [MAX_NUM_TECH_CLASSES]
static struct user_flag | user_tech_flags [MAX_NUM_USER_TECH_FLAGS]

## Macro Definition Documentation

## ◆ ADVANCE_REQ_ITER

#define ADVANCE_REQ_ITER | ( |  | it | ) | ((struct advance_req_iter *) it)

Definition at line 44 of file tech.c.

## ◆ ADVANCE_ROOT_REQ_ITER

#define ADVANCE_ROOT_REQ_ITER | ( |  | it | ) | ((struct advance_root_req_iter *) it)

Definition at line 52 of file tech.c.

## Function Documentation

## ◆ advance_array_last()

const struct advance * advance_array_last | ( | void |  | ) |

Return the last item of advances/technologies.

Definition at line 67 of file tech.c.

## ◆ advance_by_number()

struct advance * advance_by_number | ( | const Tech_type_id | atype | ) |

Return the advance for the given advance index.

Definition at line 107 of file tech.c.

Referenced by tab_tech::add_now(), advance_has_flag(), help_widget::anchor_clicked(), api_edit_give_technology(), api_find_tech_type(), boot_help_texts(), client_diplomacy_clause_string(), create_tech_info(), create_tech_tree(), dai_choose_paratrooper(), dai_goldequiv_clause(), dai_manage_government(), dai_manage_tech(), dai_select_tech(), do_tech_parasite_effect(), found_new_tech(), get_tooltip_unit(), handle_diplomacy_accept_treaty_req(), handle_ruleset_tech(), handle_ruleset_unit(), help_hyperlink_callback(), help_tech_tree_activated_callback(), help_update_tech(), helptext_advance(), helptext_extra(), helptext_nation(), init_tech(), tab_tech::initialize_new_tech(), load_ruleset_techs(), research_diagram::mouseMoveEvent(), popup_change_research_dialog(), popup_change_research_goal_dialog(), popup_diplomatic_objects(), popup_unit_info(), real_tech_log(), research_advance_name(), research_get_reachable(), research_get_root_reqs_known(), research_tech_lost(), research_update(), sanity_check_ruleset_data(), save_tech_list(), save_techs_ruleset(), help_widget::set_topic_unit(), side_right_click_science(), spy_steal_popup_shared(), steal_a_tech(), tech_researched(), technology_save(), universal_by_number(), universal_value_initial(), unpack_tech_req(), update_intel_dialog(), science_report::update_report(), and valid_advance_by_number().

## ◆ advance_by_rule_name()

struct advance * advance_by_rule_name | ( | const char * | name | ) |

Does a linear search of advances[].name.vernacular Returns NULL when none match.

Definition at line 200 of file tech.c.

Referenced by api_find_tech_type_by_name(), tab_tech::initialize_new_tech(), load_ruleset_terrain(), lookup_tech(), lookup_tech_list(), tab_tech::req1_menu(), tab_tech::req2_menu(), edit_utype::req_menu(), tab_tech::root_req_menu(), tab_tech::select_tech(), sg_load_game(), sg_load_game(), sg_load_researches(), sg_load_researches(), technology_load(), technology_load(), and universal_value_from_str().

## ◆ advance_by_translated_name()

struct advance * advance_by_translated_name | ( | const char * | name | ) |

Does a linear search of advances[].name.translated Returns NULL when none match.

Definition at line 185 of file tech.c.

Referenced by help_update_tech(), help_dialog::make_tree(), and help_widget::set_topic_tech().

## ◆ advance_count_real()

Tech_type_id advance_count_real | ( | void |  | ) |

Return the number of advances/technologies.

Definition at line 78 of file tech.c.

Referenced by advance_count().

## ◆ advance_has_flag()

bool advance_has_flag | ( | Tech_type_id | tech,
|  | enum tech_flag_id | flag
| ) |  |

Return TRUE if the tech has this flag otherwise FALSE

Definition at line 216 of file tech.c.

Referenced by found_new_tech(), helptext_advance(), research_update(), and save_techs_ruleset().

## ◆ advance_index()

Tech_type_id advance_index | ( | const struct advance * | padvance | ) |

Return the advance index.

Currently same as advance_number(), paired with advance_count() indicates use as an array index.

Definition at line 89 of file tech.c.

Referenced by can_player_build_unit_direct(), dai_choose_diplomat_defensive(), dai_choose_paratrooper(), dai_process_defender_want(), dai_tech_effect_values(), dai_wants_defender_against(), dai_wants_role_unit(), extviewer_refresh_widgets(), find_best_city_placement(), process_attacker_want(), real_tech_log(), tab_tech::refresh(), save_techs_ruleset(), sg_load_researches(), sg_save_savefile(), tileset_setup_tech_type(), and want_tech_for_improvement_effect().

## ◆ advance_name_translation()

const char * advance_name_translation | ( | const struct advance * | padvance | ) |

Return the (translated) name of the given advance/technology. You don't have to free the return pointer.

Definition at line 290 of file tech.c.

Referenced by advance_by_translated_name(), help_widget::anchor_clicked(), api_methods_tech_type_name_translation(), boot_help_texts(), client_diplomacy_clause_string(), go_act_menu::create(), create_clause_menu(), create_tech_info(), create_tech_tree(), extviewer_refresh_widgets(), get_tooltip_improvement(), get_tooltip_unit(), handle_diplomacy_accept_treaty_req(), help_hyperlink_callback(), help_tech_tree_activated_callback(), help_update_tech(), help_update_unit_type(), help_update_wonder(), helptext_advance(), helptext_building(), helptext_extra(), helptext_nation(), manual_command(), research_diagram::mouseMoveEvent(), popup_add_menu(), popup_change_research_dialog(), popup_change_research_goal_dialog(), popup_diplomatic_objects(), popup_impr_info(), popup_tech_info(), popup_unit_info(), real_menus_init(), real_menus_update(), req_text_insert(), help_widget::set_topic_building(), help_widget::set_topic_unit(), diplo_wdg::show_menu(), show_tech_gained_dialog(), side_right_click_science(), sort_advance_names(), spy_steal_popup_shared(), universal_name_translation(), update_intel_dialog(), science_report::update_report(), worklist_change_build_target(), and worklist_item_postpone_req_vec().

## ◆ advance_number()

Tech_type_id advance_number | ( | const struct advance * | padvance | ) |

Return the advance index.

Definition at line 98 of file tech.c.

Referenced by adjust_improvement_wants_by_effects(), adv_best_government(), advance_req_iter_next(), advance_required(), advance_root_req_iter_init(), advance_root_req_iter_next(), diplo_wdg::all_advances(), api_edit_give_technology(), api_methods_player_knows_tech(), can_player_build_unit_direct(), choose_tech_to_steal(), go_act_menu::create(), create_clause_menu(), create_select_tech_icon(), create_tech_info(), research_diagram::create_tooltip_help(), dai_gov_value(), dai_process_defender_want(), dai_tech_base_want(), dai_tech_effect_values(), dai_wants_defender_against(), dai_wants_role_unit(), diplomacy_dialog_tech_callback(), diplomacy_dialog_tech_callback(), draw_reqtree(), handle_ruleset_tech(), help_update_tech(), help_update_unit_type(), helptext_advance(), helptext_building(), is_tech_needed(), is_tech_req_active(), load_ruleset_terrain(), lookup_tech_list(), help_dialog::make_tree(), nation_has_initial_tech(), plr_widget::nation_selected(), node_rectangle_minimum_size(), player_tech_upkeep(), popup_add_menu(), popup_impr_info(), popup_unit_info(), process_attacker_want(), real_science_report_dialog_update(), real_tech_log(), recalculate_techs_researched(), tab_tech::req1_jump(), tab_tech::req2_jump(), research_get_reachable(), research_get_root_reqs_known(), research_goal_step(), research_update(), tab_tech::root_req_jump(), send_ruleset_techs(), send_ruleset_units(), help_widget::set_topic_tech(), sg_load_game(), sg_load_game(), sg_load_researches(), sg_load_researches(), diplo_wdg::show_menu(), spy_steal_popup_shared(), tech_can_be_stolen(), technology_load(), technology_load(), unit_goto_and_callback(), unit_goto_and_callback(), universal_number(), and worklist_change_build_target().

## ◆ advance_req_iter_get()

static void * advance_req_iter_get | ( | const struct iterator * | it | ) |

static

Return the current advance.

Definition at line 534 of file tech.c.

Referenced by advance_req_iter_init().

## ◆ advance_req_iter_init()

struct iterator * advance_req_iter_init | ( | struct advance_req_iter * | it,
|  | const struct advance * | goal
| ) |  |

Initialize an advance requirements iterator.

Definition at line 582 of file tech.c.

## ◆ advance_req_iter_next()

static void advance_req_iter_next | ( | struct iterator * | it | ) |

static

Jump to next advance requirement.

Definition at line 542 of file tech.c.

Referenced by advance_req_iter_init().

## ◆ advance_req_iter_sizeof()

size_t advance_req_iter_sizeof | ( | void |  | ) |

Return the size of the advance requirements iterator.

Definition at line 526 of file tech.c.

## ◆ advance_req_iter_valid()

static bool advance_req_iter_valid | ( | const struct iterator * | it | ) |

static

Return whether we finished to iterate or not.

Definition at line 572 of file tech.c.

Referenced by advance_req_iter_init().

## ◆ advance_required()

Tech_type_id advance_required | ( | const Tech_type_id | tech,
|  | enum tech_req | require
| ) |  |

Accessor for requirements.

Definition at line 121 of file tech.c.

Referenced by advance_root_req_iter_init(), advance_root_req_iter_next(), create_dummy_reqtree(), create_tech_info(), create_tech_tree(), create_tech_tree(), pick_random_tech_to_lose(), redraw_tech_tree_dlg(), research_get_reachable_rreqs(), research_update(), and tech_transfer().

## ◆ advance_requires()

struct advance * advance_requires | ( | const struct advance * | padvance,
|  | enum tech_req | require
| ) |  |

Accessor for requirements.

Definition at line 136 of file tech.c.

Referenced by advance_req_iter_next(), advance_root_req_iter_get(), advance_root_req_iter_next(), help_update_tech(), helptext_advance(), research_get_reachable(), and sanity_check_ruleset_data().

## ◆ advance_root_req_iter_get()

static void * advance_root_req_iter_get | ( | const struct iterator * | it | ) |

static

Return the current root_req.

Definition at line 610 of file tech.c.

Referenced by advance_root_req_iter_init().

## ◆ advance_root_req_iter_init()

struct iterator * advance_root_req_iter_init | ( | struct advance_root_req_iter * | it,
|  | const struct advance * | goal
| ) |  |

Initialize a root requirements iterator.

Definition at line 685 of file tech.c.

## ◆ advance_root_req_iter_next()

static void advance_root_req_iter_next | ( | struct iterator * | it | ) |

static

Jump to next advance which has a previously unseen root_req.

Definition at line 629 of file tech.c.

Referenced by advance_root_req_iter_init().

## ◆ advance_root_req_iter_sizeof()

size_t advance_root_req_iter_sizeof | ( | void |  | ) |

Return the size of the advance root requirements iterator.

Definition at line 602 of file tech.c.

## ◆ advance_root_req_iter_valid()

static bool advance_root_req_iter_valid | ( | const struct iterator * | it | ) |

static

Return whether we finished to iterate or not.

Definition at line 619 of file tech.c.

Referenced by advance_root_req_iter_init(), and advance_root_req_iter_next().

## ◆ advance_rule_name()

const char * advance_rule_name | ( | const struct advance * | padvance | ) |

Return the (untranslated) rule name of the advance/technology. You don't have to free the return pointer.

Definition at line 299 of file tech.c.

Referenced by advance_by_rule_name(), api_methods_tech_type_rule_name(), dai_choose_paratrooper(), dai_goldequiv_clause(), dai_select_tech(), tab_tech::delete_now(), tab_tech::edit_effects(), edit_tech::edit_tech(), handle_diplomacy_accept_treaty_req(), init_tech(), is_tech_needed(), load_ruleset_techs(), load_ruleset_units(), tab_tech::name_given(), real_tech_log(), tab_tech::refresh(), research_tech_lost(), research_update(), sanity_check_ruleset_data(), save_tech_list(), save_tech_ref(), sg_save_savefile(), tab_tech::tech_name(), technology_save(), tileset_setup_tech_type(), universal_kind_values(), and universal_rule_name().

## ◆ is_future_tech()

bool is_future_tech | ( | Tech_type_id | tech | ) |

Is the given tech a future tech.

Definition at line 281 of file tech.c.

Referenced by adv_data_phase_init(), api_edit_give_technology(), choose_tech(), dai_select_tech(), found_new_tech(), help_update_tech(), help_dialog::make_tree(), popup_change_research_dialog(), research_tech_lost(), research_total_bulbs_required(), science_report_update(), progress_bar::set_pixmap(), help_widget::set_topic_tech(), sg_load_sanitycheck(), sg_load_sanitycheck(), steal_a_tech(), update_bulbs(), and science_report::update_report().

## ◆ set_user_tech_flag_name()

void set_user_tech_flag_name | ( | enum tech_flag_id | id,
|  | const char * | name,
|  | const char * | helptxt
| ) |  |

Sets user defined name for tech flag.

Definition at line 394 of file tech.c.

Referenced by handle_ruleset_tech_flag(), and load_tech_names().

## ◆ tech_class_by_number()

struct tech_class * tech_class_by_number | ( | const int | idx | ) |

Return the tech_class for the given index.

Definition at line 320 of file tech.c.

Referenced by handle_ruleset_tech(), handle_ruleset_tech_class(), and tech_class_by_rule_name().

## ◆ tech_class_by_rule_name()

struct tech_class * tech_class_by_rule_name | ( | const char * | name | ) |

Does a linear search of tech_classes[].name.vernacular Returns NULL when none match.

Definition at line 351 of file tech.c.

Referenced by load_ruleset_techs().

## ◆ tech_class_name_translation()

const char * tech_class_name_translation | ( | const struct tech_class * | ptclass | ) |

Return the (translated) name of the given tech_class You must not free the return pointer.

Definition at line 333 of file tech.c.

Referenced by helptext_advance().

## ◆ tech_class_rule_name()

const char * tech_class_rule_name | ( | const struct tech_class * | ptclass | ) |

Return the (untranslated) rule name of tech_class You must not free the return pointer.

Definition at line 342 of file tech.c.

Referenced by save_techs_ruleset(), and tech_class_by_rule_name().

## ◆ tech_classes_init()

void tech_classes_init | ( | void |  | ) |

Initialize tech classes

Definition at line 307 of file tech.c.

Referenced by game_ruleset_init().

## ◆ tech_flag_helptxt()

const char * tech_flag_helptxt | ( | enum tech_flag_id | id | ) |

Return the (untranslated) helptxt of the user tech flag.

Definition at line 435 of file tech.c.

Referenced by helptext_advance(), save_techs_ruleset(), and send_ruleset_techs().

## ◆ tech_flag_id_name_cb()

const char * tech_flag_id_name_cb | ( | enum tech_flag_id | flag | ) |

Tech flag name callback, called from specenum code.

Definition at line 423 of file tech.c.

Referenced by save_techs_ruleset(), and send_ruleset_techs().

## ◆ tech_free()

static void tech_free | ( | Tech_type_id | tech | ) |

static

De-allocate resources associated with the given tech.

Definition at line 492 of file tech.c.

Referenced by techs_free().

## ◆ techs_free()

void techs_free | ( | void |  | ) |

De-allocate resources of all techs.

Definition at line 510 of file tech.c.

Referenced by game_ruleset_free().

## ◆ techs_have_fixed_costs()

bool techs_have_fixed_costs | ( | void |  | ) |

Returns true if the costs for the given technology will stay constant during the game. False otherwise.

Checking every tech_cost_style with fixed costs seems a waste of system resources, when we can check that it is not the one style without fixed costs.

Definition at line 450 of file tech.c.

Referenced by helptext_advance().

## ◆ techs_init()

void techs_init | ( | void |  | ) |

Initialize tech structures.

Definition at line 459 of file tech.c.

Referenced by game_ruleset_init().

## ◆ techs_precalc_data()

void techs_precalc_data | ( | void |  | ) |

Function to precalculate needed data for technologies.

Definition at line 225 of file tech.c.

Referenced by load_rulesetdir().

## ◆ user_tech_flags_free()

void user_tech_flags_free | ( | void |  | ) |

Frees the memory associated with all user tech flags

Definition at line 382 of file tech.c.

Referenced by game_ruleset_free().

## ◆ user_tech_flags_init()

void user_tech_flags_init | ( | void |  | ) |

Initialize user tech flags.

Definition at line 370 of file tech.c.

Referenced by game_ruleset_init().

## ◆ valid_advance()

struct advance * valid_advance | ( | struct advance * | padvance | ) |

Returns pointer when the advance "exists" in this game, returns NULL otherwise.

A tech doesn't exist if it has been flagged as removed by setting its require values to A_NEVER. Note that this function returns NULL if either of req values is A_NEVER, rather than both, to be on the safe side.

Definition at line 152 of file tech.c.

Referenced by advance_req_iter_next(), advance_root_req_iter_next(), load_ruleset_techs(), load_ruleset_units(), lookup_tech_list(), manual_command(), real_tech_log(), recalculate_techs_researched(), research_get_reachable(), send_ruleset_techs(), tileset_setup_tech_type(), and valid_advance_by_number().

## ◆ valid_advance_by_number()

struct advance * valid_advance_by_number | ( | const Tech_type_id | id | ) |

Returns pointer when the advance "exists" in this game, returns NULL otherwise.

In addition to valid_advance(), tests for id is out of range.

Definition at line 176 of file tech.c.

Referenced by add_clause(), boot_help_texts(), calc_civ_score(), create_dummy_reqtree(), create_tech_tree(), dai_select_tech(), diplomat_get_tech(), found_new_tech(), handle_player_research(), handle_player_tech_goal(), helptext_advance(), init_tech(), popup_tech_info(), research_allowed(), research_get_reachable(), research_get_reachable_rreqs(), research_goal_bulbs_required(), research_goal_step(), research_goal_tech_req(), research_goal_unknown_techs(), research_invention_gettable(), research_invention_reachable(), research_invention_set(), research_invention_state(), research_tech_lost(), research_total_bulbs_required(), research_update(), sanity_check_ruleset_data(), progress_bar::set_pixmap(), sg_load_player_unit(), sg_load_sanitycheck(), sg_load_sanitycheck(), sg_save_researches(), show_tech_gained_dialog(), simple_action_callback(), simple_action_callback(), steal_a_tech(), and unit_order_list_is_sane().

## Variable Documentation

## ◆ advances

struct advance advances[A_ARRAY_SIZE]

Definition at line 58 of file tech.c.

Referenced by advance_array_last(), advance_by_number(), advance_index(), advance_required(), tech_free(), techs_free(), and techs_init().

## ◆ tech_classes

struct tech_class tech_classes[MAX_NUM_TECH_CLASSES]

Definition at line 60 of file tech.c.

Referenced by tech_class_by_number(), and tech_classes_init().

## ◆ user_tech_flags

struct user_flag user_tech_flags[MAX_NUM_USER_TECH_FLAGS]

static

Definition at line 62 of file tech.c.

Referenced by set_user_tech_flag_name(), tech_flag_helptxt(), tech_flag_id_name_cb(), user_tech_flags_free(), and user_tech_flags_init().