diff --git a/src/veh_interact.cpp b/src/veh_interact.cpp index b141f97e62f6e..64154e768ec37 100644 --- a/src/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -795,14 +795,21 @@ bool veh_interact::update_part_requirements() nmsg += _( "Additional requirements:\n" ); + bool allow_more_eng = engines < 2 || player_character.has_trait( trait_DEBUG_HS ); + if( dif_eng > 0 ) { - if( player_character.get_skill_level( skill_mechanics ) < dif_eng ) { + if( !allow_more_eng || player_character.get_skill_level( skill_mechanics ) < dif_eng ) { ok = false; } - //~ %1$s represents the internal color name which shouldn't be translated, %2$s is skill name, and %3$i is skill level - nmsg += string_format( _( "> %1$s%2$s %3$i for extra engines." ), - status_color( player_character.get_skill_level( skill_mechanics ) >= dif_eng ), - skill_mechanics.obj().name(), dif_eng ) + "\n"; + if( allow_more_eng ) { + //~ %1$s represents the internal color name which shouldn't be translated, %2$s is skill name, and %3$i is skill level + nmsg += string_format( _( "> %1$s%2$s %3$i for extra engines." ), + status_color( player_character.get_skill_level( skill_mechanics ) >= dif_eng ), + skill_mechanics.obj().name(), dif_eng ) + "\n"; + } else { + nmsg += _( "> You cannot install any more engines on this vehicle." ) + + std::string( "\n" ); + } } if( dif_steering > 0 ) { @@ -2059,8 +2066,22 @@ int veh_interact::part_at( const point &d ) */ bool veh_interact::can_potentially_install( const vpart_info &vpart ) { - return get_player_character().has_trait( trait_DEBUG_HS ) || - vpart.install_requirements().can_make_with_inventory( crafting_inv, is_crafting_component ); + bool engine_reqs_met = true; + bool can_make = vpart.install_requirements().can_make_with_inventory( crafting_inv, + is_crafting_component ); + bool hammerspace = get_player_character().has_trait( trait_DEBUG_HS ); + + int engines = 0; + if( vpart.has_flag( VPFLAG_ENGINE ) && vpart.has_flag( "E_HIGHER_SKILL" ) ) { + for( const vpart_reference &vp : veh->get_avail_parts( "ENGINE" ) ) { + if( vp.has_feature( "E_HIGHER_SKILL" ) ) { + engines++; + } + } + engine_reqs_met = engines < 2; + } + + return hammerspace || ( can_make && engine_reqs_met ); } /**