@@ -3196,51 +3196,39 @@ void item::gun_info( const item *mod, std::vector<iteminfo> &info, const iteminf
3196
3196
3197
3197
if( parts->test( iteminfo_parts::GUN_DAMAGE ) ) {
3198
3198
insert_separation_line( info );
3199
- info.emplace_back( "GUN", _( "<bold>Ranged damage</bold>: " ), "", iteminfo::no_newline,
3200
- mod->gun_damage( false ).total_damage() );
3199
+ info.emplace_back( "GUN", colorize( _( "Ranged damage" ), c_bold ) + ": ", iteminfo::no_newline );
3201
3200
}
3202
3201
3203
3202
if( mod->ammo_required() ) {
3204
- // ammo_damage, sum_of_damage, and ammo_mult not shown so don't need to translate.
3205
- float dmg_mult = 1.0f;
3206
- for( const damage_unit &dmg : curammo->ammo->damage.damage_units ) {
3207
- dmg_mult *= dmg.unconditional_damage_mult;
3208
- }
3209
- if( dmg_mult != 1.0f ) {
3210
- if( parts->test( iteminfo_parts::GUN_DAMAGE_AMMOPROP ) ) {
3211
- info.emplace_back( "GUN", "ammo_mult", "*",
3212
- iteminfo::no_newline | iteminfo::no_name | iteminfo::is_decimal, dmg_mult );
3213
- }
3203
+ // some names are not shown, so no need to translate them
3204
+
3205
+ const int gun_damage = loaded_mod->gun_damage( true, false ).total_damage();
3206
+ int pellet_damage = 0;
3207
+ const bool pellets = curammo->ammo->count > 1;
3208
+ if( parts->test( iteminfo_parts::GUN_DAMAGE_PELLETS ) && pellets ) {
3209
+ pellet_damage = loaded_mod->gun_damage( true, true ).total_damage();
3210
+
3211
+ // if shotgun, gun_damage is your point blank damage, and anything further is pellets x damage of a single pellet
3212
+ info.emplace_back( "GUN", _( "<bold>Point blank damage:</bold> " ), "<num>", iteminfo::no_flags,
3213
+ gun_damage );
3214
+ info.emplace_back( "GUN", "damage_per_pellet", _( "<num> per pellet" ),
3215
+ iteminfo::no_newline | iteminfo::no_name, pellet_damage );
3216
+ info.emplace_back( "GUN", ", ", iteminfo::no_newline );
3217
+ info.emplace_back( "GUN", "amount_of_pellets", _( "<num> pellets" ),
3218
+ iteminfo::no_newline | iteminfo::no_name, curammo->ammo->count );
3219
+ info.emplace_back( "GUN", " = ", iteminfo::no_newline );
3214
3220
} else {
3215
- if( parts->test( iteminfo_parts::GUN_DAMAGE_LOADEDAMMO ) ) {
3216
- damage_instance ammo_dam = curammo->ammo->damage;
3217
- int bullet_damage = ammo_dam.total_damage();
3218
- if( mod->barrel_length().value() > 0 ) {
3219
- bullet_damage = ammo_dam.di_considering_length( mod->barrel_length() ).total_damage();
3220
- }
3221
- info.emplace_back( "GUN", "ammo_damage", "",
3222
- iteminfo::no_newline | iteminfo::no_name |
3223
- iteminfo::show_plus, bullet_damage );
3224
- }
3225
- }
3226
3221
3227
- const int gun_damage = loaded_mod->gun_damage( true ).total_damage();
3228
- if( damage() > 0 ) {
3229
- item intact_mod( *loaded_mod );
3230
- intact_mod.set_degradation( 0 );
3231
- intact_mod.set_damage( 0 );
3232
- const int intact_damage = intact_mod.gun_damage( true ).total_damage();
3233
- if( intact_damage != gun_damage ) {
3234
- const int dmg_penalty = gun_damage - intact_damage;
3235
- info.emplace_back( "GUN", "damaged_weapon_penalty", "",
3236
- iteminfo::no_newline | iteminfo::no_name, dmg_penalty );
3237
- }
3238
3222
}
3239
3223
3240
3224
if( parts->test( iteminfo_parts::GUN_DAMAGE_TOTAL ) ) {
3241
- info.emplace_back( "GUN", "sum_of_damage", _( " = <num>" ),
3242
- iteminfo::no_newline | iteminfo::no_name, gun_damage );
3225
+ info.emplace_back( "GUN", "final_damage", "<num>",
3226
+ iteminfo::no_newline | iteminfo::no_name,
3227
+ pellets ? pellet_damage * curammo->ammo->count : gun_damage );
3243
3228
}
3229
+ } else {
3230
+ info.emplace_back( "GUN", "final_damage", "<num>", iteminfo::no_newline | iteminfo::no_name,
3231
+ mod->gun_damage( false ).total_damage() );
3244
3232
}
3245
3233
info.back().bNewLine = true;
3246
3234
@@ -3268,73 +3256,42 @@ void item::gun_info( const item *mod, std::vector<iteminfo> &info, const iteminf
3268
3256
3269
3257
// TODO: This doesn't cover multiple damage types
3270
3258
3259
+ int ammo_pierce = 0;
3260
+ if( mod->ammo_required() ) {
3261
+ ammo_pierce = get_ranged_pierce( *curammo->ammo );
3262
+ }
3263
+
3271
3264
if( parts->test( iteminfo_parts::GUN_ARMORPIERCE ) ) {
3272
3265
info.emplace_back( "GUN", _( "Armor-pierce: " ), "",
3273
- iteminfo::no_newline, get_ranged_pierce( gun ) );
3274
- }
3275
- if( mod->ammo_required() ) {
3276
- int ammo_pierce = get_ranged_pierce( *curammo->ammo );
3277
- // ammo_armor_pierce and sum_of_armor_pierce don't need to translate.
3278
- if( parts->test( iteminfo_parts::GUN_ARMORPIERCE_LOADEDAMMO ) ) {
3279
- info.emplace_back( "GUN", "ammo_armor_pierce", "",
3280
- iteminfo::no_newline | iteminfo::no_name |
3281
- iteminfo::show_plus, ammo_pierce );
3282
- }
3283
- if( parts->test( iteminfo_parts::GUN_ARMORPIERCE_TOTAL ) ) {
3284
- info.emplace_back( "GUN", "sum_of_armor_pierce", _( " = <num>" ),
3285
- iteminfo::no_name,
3286
- get_ranged_pierce( gun ) + ammo_pierce );
3287
- }
3266
+ iteminfo::no_newline, get_ranged_pierce( gun ) + ammo_pierce );
3288
3267
}
3289
3268
info.back().bNewLine = true;
3290
3269
3270
+ double gun_dispersion = mod->gun_dispersion( false, false ) / 100.0;
3271
+ if( mod->ammo_required() ) {
3272
+ gun_dispersion = loaded_mod->gun_dispersion( true, false ) / 100.0;
3273
+ }
3291
3274
if( parts->test( iteminfo_parts::GUN_DISPERSION ) ) {
3292
- info.emplace_back( "GUN", _( "Dispersion: " ), "" ,
3275
+ info.emplace_back( "GUN", _( "Dispersion: " ), _( "<num> MOA" ) ,
3293
3276
iteminfo::is_decimal | iteminfo::lower_is_better | iteminfo::no_newline,
3294
- mod->gun_dispersion( false, false ) / 100.0 );
3295
- }
3296
- if( mod->ammo_required() ) {
3297
- int ammo_dispersion = curammo->ammo->dispersion_considering_length( barrel_length() );
3298
- // ammo_dispersion and sum_of_dispersion don't need to translate.
3299
- if( parts->test( iteminfo_parts::GUN_DISPERSION_LOADEDAMMO ) ) {
3300
- info.emplace_back( "GUN", "ammo_dispersion", "",
3301
- iteminfo::is_decimal | iteminfo::lower_is_better | iteminfo::no_name | iteminfo::no_newline |
3302
- iteminfo::show_plus,
3303
- ammo_dispersion / 100.0 );
3304
- }
3305
- if( parts->test( iteminfo_parts::GUN_DISPERSION_TOTAL ) ) {
3306
- info.emplace_back( "GUN", "sum_of_dispersion", _( " = <num> MOA" ),
3307
- iteminfo::is_decimal | iteminfo::lower_is_better | iteminfo::no_name,
3308
- loaded_mod->gun_dispersion( true, false ) / 100.0 );
3309
- }
3277
+ gun_dispersion );
3310
3278
}
3311
3279
info.back().bNewLine = true;
3312
3280
3313
3281
// if effective sight dispersion differs from actual sight dispersion display both
3314
3282
std::pair<int, int> disp = mod->sight_dispersion( player_character );
3315
- int act_disp = disp.first;
3316
- int eff_disp = disp.second;
3317
- int adj_disp = eff_disp - act_disp;
3318
- int point_shooting_limit = player_character.point_shooting_limit( *mod );
3283
+ const int eff_disp = disp.second;
3284
+ const int point_shooting_limit = player_character.point_shooting_limit( *mod );
3319
3285
3320
3286
if( parts->test( iteminfo_parts::GUN_DISPERSION_SIGHT ) ) {
3321
3287
if( point_shooting_limit <= eff_disp ) {
3322
- info.emplace_back( "GUN", _( "Sight dispersion (point shooting): " ), "" ,
3288
+ info.emplace_back( "GUN", _( "Sight dispersion (point shooting): " ), _( "<num> MOA" ) ,
3323
3289
iteminfo::is_decimal | iteminfo::no_newline | iteminfo::lower_is_better,
3324
3290
point_shooting_limit / 100.0 );
3325
3291
} else {
3326
- info.emplace_back( "GUN", _( "Sight dispersion: " ), "" ,
3292
+ info.emplace_back( "GUN", _( "Sight dispersion: " ), _( "<num> MOA" ) ,
3327
3293
iteminfo::is_decimal | iteminfo::no_newline | iteminfo::lower_is_better,
3328
- act_disp / 100.0 );
3329
-
3330
- if( adj_disp ) {
3331
- info.emplace_back( "GUN", "sight_adj_disp", "",
3332
- iteminfo::is_decimal | iteminfo::no_newline | iteminfo::lower_is_better |
3333
- iteminfo::no_name | iteminfo::show_plus, adj_disp / 100.0 );
3334
- info.emplace_back( "GUN", "sight_eff_disp", _( " = <num> MOA" ),
3335
- iteminfo::is_decimal | iteminfo::lower_is_better | iteminfo::no_name,
3336
- eff_disp / 100.0 );
3337
- }
3294
+ eff_disp / 100.0 );
3338
3295
}
3339
3296
}
3340
3297
0 commit comments