Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate weakpoint names and effects #61507

Merged
merged 2 commits into from
Oct 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 );
}
}
}