The Battle for Wesnoth  1.19.0-dev
Classes | Functions
attack.hpp File Reference

Various functions that implement attacks and attack calculations. More...

#include "attack_prediction.hpp"
#include "units/ptr.hpp"
#include "units/unit_alignments.hpp"
#include <vector>
Include dependency graph for attack.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  battle_context_unit_stats
 Structure describing the statistics of a unit involved in the battle. More...
 
class  battle_context
 Computes the statistics of a battle between an attacker and a defender unit. More...
 

Functions

unsigned swarm_blows (unsigned min_blows, unsigned max_blows, unsigned hp, unsigned max_hp)
 Calculates the number of blows resulting from swarm. More...
 
void attack_unit (const map_location &attacker, const map_location &defender, int attack_with, int defend_with, bool update_display=true)
 Performs an attack. More...
 
void attack_unit_and_advance (const map_location &attacker, const map_location &defender, int attack_with, int defend_with, bool update_display=true)
 Performs an attack, and advanced the units afterwards. More...
 
int under_leadership (const unit &u, const map_location &loc, const_attack_ptr weapon=nullptr, const_attack_ptr opp_weapon=nullptr)
 Tests if the unit at loc is currently affected by leadership. More...
 
int combat_modifier (const unit_map &units, const gamemap &map, const map_location &loc, unit_alignments::type alignment, bool is_fearless)
 Returns the amount that a unit's damage should be multiplied by due to the current time of day. More...
 
int combat_modifier (const time_of_day &effective_tod, unit_alignments::type alignment, bool is_fearless)
 Returns the amount that a unit's damage should be multiplied by due to the current time of day. More...
 
int generic_combat_modifier (int lawful_bonus, unit_alignments::type alignment, bool is_fearless, int max_liminal_bonus)
 Returns the amount that a unit's damage should be multiplied by due to a given lawful_bonus. More...
 
bool backstab_check (const map_location &attacker_loc, const map_location &defender_loc, const unit_map &units, const std::vector< team > &teams)
 Function to check if an attack will satisfy the requirements for backstab. More...
 

Detailed Description

Various functions that implement attacks and attack calculations.

Unit advancements are also included, as they usually occur as a result of combat.

Definition in file attack.hpp.

Function Documentation

◆ attack_unit()

void attack_unit ( const map_location attacker,
const map_location defender,
int  attack_with,
int  defend_with,
bool  update_display = true 
)

Performs an attack.

Definition at line 1546 of file attack.cpp.

Referenced by attack_unit_and_advance(), and ai::simulated_attack().

◆ attack_unit_and_advance()

void attack_unit_and_advance ( const map_location attacker,
const map_location defender,
int  attack_with,
int  defend_with,
bool  update_display = true 
)

Performs an attack, and advanced the units afterwards.

Definition at line 1556 of file attack.cpp.

References advance_unit_at(), attack_unit(), unit_map::find(), resources::gameboard, and game_board::units().

Referenced by ai::attack_result::do_execute(), and SYNCED_COMMAND_HANDLER_FUNCTION().

◆ backstab_check()

bool backstab_check ( const map_location attacker_loc,
const map_location defender_loc,
const unit_map units,
const std::vector< team > &  teams 
)

Function to check if an attack will satisfy the requirements for backstab.

Input:

  • the location from which the attack will occur,
  • the defending unit location,
  • the list of units on the map and
  • the list of teams. The defender and opposite units should be in place already. The attacking unit doesn't need to be, but if it isn't, an external check should be made to make sure the opposite unit isn't also the attacker.

Definition at line 1630 of file attack.cpp.

References unit_map::end(), unit_map::find(), get_adjacent_tiles(), and i.

Referenced by ai::ai_default_rca::aspect_attacks_base::do_attack_analysis().

◆ combat_modifier() [1/2]

int combat_modifier ( const time_of_day effective_tod,
unit_alignments::type  alignment,
bool  is_fearless 
)

Returns the amount that a unit's damage should be multiplied by due to the current time of day.

Definition at line 1593 of file attack.cpp.

References generic_combat_modifier(), tod_manager::get_max_liminal_bonus(), time_of_day::lawful_bonus, and resources::tod_manager.

◆ combat_modifier() [2/2]

int combat_modifier ( const unit_map units,
const gamemap map,
const map_location loc,
unit_alignments::type  alignment,
bool  is_fearless 
)

Returns the amount that a unit's damage should be multiplied by due to the current time of day.

Definition at line 1582 of file attack.cpp.

References tod_manager::get_illuminated_time_of_day(), and resources::tod_manager.

Referenced by attack_info(), battle_context_unit_stats::battle_context_unit_stats(), gui2::dialogs::attack_predictions::set_data(), and unit_alignment().

◆ generic_combat_modifier()

int generic_combat_modifier ( int  lawful_bonus,
unit_alignments::type  alignment,
bool  is_fearless,
int  max_liminal_bonus 
)

Returns the amount that a unit's damage should be multiplied by due to a given lawful_bonus.

Definition at line 1602 of file attack.cpp.

Referenced by battle_context_unit_stats::battle_context_unit_stats(), tod_manager::calculate_best_liminal_bonus(), combat_modifier(), help::generate_time_of_day_topics(), time_of_day_at(), and unit_box_at().

◆ swarm_blows()

unsigned swarm_blows ( unsigned  min_blows,
unsigned  max_blows,
unsigned  hp,
unsigned  max_hp 
)
inline

Calculates the number of blows resulting from swarm.

Definition at line 40 of file attack.hpp.

Referenced by attack_info(), and battle_context_unit_stats::calc_blows().

◆ under_leadership()

int under_leadership ( const unit u,
const map_location loc,
const_attack_ptr  weapon = nullptr,
const_attack_ptr  opp_weapon = nullptr 
)

Tests if the unit at loc is currently affected by leadership.

(i.e. has a higher-level unit with the 'leadership' ability next to it).

Returns the bonus percentage (possibly 0 if there's no leader adjacent).

Definition at line 1575 of file attack.cpp.

References unit::get_abilities_weapons(), and unit_abilities::effect::get_composite_value().

Referenced by attack_info(), battle_context_unit_stats::battle_context_unit_stats(), ai::ai_default_rca::aspect_attacks_base::do_attack_analysis(), and gui2::dialogs::attack_predictions::set_data().