Skip to content

Commit

Permalink
Merge pull request #61507 from irwiss/translate-weakpoints
Browse files Browse the repository at this point in the history
Translate weakpoint names and effects
  • Loading branch information
dseguin authored Oct 7, 2022
2 parents f27fa5b + ee1d118 commit 2e49e16
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/creature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1152,7 +1152,7 @@ dealt_damage_instance Creature::deal_damage( Creature *source, bodypart_id bp,

dealt_damage_instance dealt_dams;
const weakpoint *wp = absorb_hit( attack_copy, bp, d );
dealt_dams.wp_hit = wp == nullptr ? "" : wp->name;
dealt_dams.wp_hit = wp == nullptr ? "" : wp->get_name();

// Add up all the damage units dealt
for( const damage_unit &it : d.damage_units ) {
Expand Down
18 changes: 14 additions & 4 deletions src/weakpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,11 @@ weakpoint_effect::weakpoint_effect() :
intensity( 0, 0 ),
damage_required( 0.0f, 100.0f ) {}

std::string weakpoint_effect::get_message() const
{
return message.translated();
}

void weakpoint_effect::apply_to( Creature &target, int total_damage,
const weakpoint_attack &attack ) const
{
Expand All @@ -273,8 +278,8 @@ void weakpoint_effect::apply_to( Creature &target, int total_damage,
time_duration::from_turns( rng( duration.first, duration.second ) ),
permanent, rng( intensity.first, intensity.second ) );

if( !message.empty() && attack.source != nullptr && attack.source->is_avatar() ) {
add_msg_if_player_sees( target, m_good, message, target.get_name() );
if( !get_message().empty() && attack.source != nullptr && attack.source->is_avatar() ) {
add_msg_if_player_sees( target, m_good, get_message(), target.get_name() );
}
}

Expand Down Expand Up @@ -433,10 +438,15 @@ void weakpoint::load( const JsonObject &jo )

// Set the ID to the name, if not provided.
if( !jo.has_string( "id" ) ) {
id = name;
assign( jo, "name", id );
}
}

std::string weakpoint::get_name() const
{
return name.translated();
}

void weakpoint::apply_to( resistances &resistances ) const
{
for( int i = 0; i < static_cast<int>( damage_type::NUM ); ++i ) {
Expand Down Expand Up @@ -512,7 +522,7 @@ const weakpoint *weakpoints::select_weakpoint( const weakpoint_attack &attack )
float hit_chance = new_reweighed - reweighed;
add_msg_debug( debugmode::DF_MONSTER,
"Weakpoint Selection: weakpoint %s, hit_chance %.4f",
weakpoint.name, hit_chance );
weakpoint.id, hit_chance );
if( idx < hit_chance ) {
return &weakpoint;
}
Expand Down
9 changes: 7 additions & 2 deletions src/weakpoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include "damage.h"
#include "optional.h"
#include "translation.h"
#include "type_id.h"

class Character;
Expand Down Expand Up @@ -67,9 +68,11 @@ struct weakpoint_effect {
// The range of damage, as a percentage of max health, required to the effect.
std::pair<float, float> damage_required;
// The message to print, if the player causes the effect.
std::string message;
translation message;

weakpoint_effect();
// Gets translated effect message
std::string get_message() const;
// Maybe apply an effect to the target.
void apply_to( Creature &target, int total_damage, const weakpoint_attack &attack ) const;
void load( const JsonObject &jo );
Expand Down Expand Up @@ -117,7 +120,7 @@ struct weakpoint {
// ID of the weakpoint. Equal to the name, if not provided.
std::string id;
// Name of the weakpoint. Can be empty.
std::string name;
translation name;
// Percent chance of hitting the weakpoint. Can be increased by skill.
float coverage = 100.0f;
// Multiplier for existing armor values. Defaults to 1.
Expand All @@ -138,6 +141,8 @@ struct weakpoint {
weakpoint_difficulty difficulty;

weakpoint();
// Gets translated name
std::string get_name() const;
// Apply the armor multipliers and offsets to a set of resistances.
void apply_to( resistances &resistances ) const;
// Apply the damage multipliers to a set of damage values.
Expand Down
12 changes: 6 additions & 6 deletions tests/weakpoint_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,19 +143,19 @@ TEST_CASE( "Check order of weakpoint set application", "[monster][weakpoint]" )
for( const weakpoint &wp : mon_test_zombie_cop->weakpoints.weakpoint_list ) {
if( wp.id == "test_head" ) {
has_wp_head = true;
CHECK( wp.name == "inline head" );
CHECK( wp.get_name() == "inline head" );
} else if( wp.id == "test_eye" ) {
has_wp_eye = true;
CHECK( wp.name == "humanoid eye" );
CHECK( wp.get_name() == "humanoid eye" );
} else if( wp.id == "test_neck" ) {
has_wp_neck = true;
CHECK( wp.name == "special neck" );
CHECK( wp.get_name() == "special neck" );
} else if( wp.id == "test_arm" ) {
has_wp_arm = true;
CHECK( wp.name == "inline arm" );
CHECK( wp.get_name() == "inline arm" );
} else if( wp.id == "test_leg" ) {
has_wp_leg = true;
CHECK( wp.name == "inline leg" );
CHECK( wp.get_name() == "inline leg" );
}
}
REQUIRE( has_wp_head );
Expand Down Expand Up @@ -259,4 +259,4 @@ TEST_CASE( "Check copy-from inheritance between sets and inline weakpoints",
for( const auto &found : wp_found ) {
CHECK( found.second.first == true );
}
}
}

0 comments on commit 2e49e16

Please sign in to comment.