diff --git a/data/json/flags.json b/data/json/flags.json
index f5d65763318b7..a2e7b76c6c387 100644
--- a/data/json/flags.json
+++ b/data/json/flags.json
@@ -377,7 +377,7 @@
"type": "json_flag",
"context": [ "ARMOR", "TOOL_ARMOR" ],
"description": "Prevents the item from participating in the encumbrance system when worn.",
- "info": "It seems partially intangible, and can occupy the same space as other things."
+ "info": "It seems partially intangible, and can occupy the same space as other things when worn."
},
{
"id": "SHEATH_KNIFE",
diff --git a/src/player.cpp b/src/player.cpp
index 38b9768391daa..849529396e790 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -10218,7 +10218,8 @@ bool player::wearing_something_on( body_part bp ) const
bool player::natural_attack_restricted_on( body_part bp ) const
{
for( auto &i : worn ) {
- if( i.covers( bp ) && !i.has_flag( "ALLOWS_NATURAL_ATTACKS" ) ) {
+ if( i.covers( bp ) && !i.has_flag( "ALLOWS_NATURAL_ATTACKS" ) && !i.has_flag( "SEMITANGIBLE" ) &&
+ !i.has_flag( "PERSONAL" ) && !i.has_flag( "AURA" ) ) {
return true;
}
}
@@ -10232,9 +10233,9 @@ bool player::is_wearing_shoes( const side &which_side ) const
if( which_side == side::LEFT || which_side == side::BOTH ) {
left = false;
for( const item &worn_item : worn ) {
- if( worn_item.covers( bp_foot_l ) &&
- !worn_item.has_flag( "BELTED" ) &&
- !worn_item.has_flag( "SKINTIGHT" ) ) {
+ if( worn_item.covers( bp_foot_l ) && !worn_item.has_flag( "BELTED" ) &&
+ !worn_item.has_flag( "PERSONAL" ) && !worn_item.has_flag( "AURA" ) &&
+ !worn_item.has_flag( "SEMITANGIBLE" ) && !worn_item.has_flag( "SKINTIGHT" ) ) {
left = true;
break;
}
@@ -10243,9 +10244,9 @@ bool player::is_wearing_shoes( const side &which_side ) const
if( which_side == side::RIGHT || which_side == side::BOTH ) {
right = false;
for( const item &worn_item : worn ) {
- if( worn_item.covers( bp_foot_r ) &&
- !worn_item.has_flag( "BELTED" ) &&
- !worn_item.has_flag( "SKINTIGHT" ) ) {
+ if( worn_item.covers( bp_foot_r ) && !worn_item.has_flag( "BELTED" ) &&
+ !worn_item.has_flag( "PERSONAL" ) && !worn_item.has_flag( "AURA" ) &&
+ !worn_item.has_flag( "SEMITANGIBLE" ) && !worn_item.has_flag( "SKINTIGHT" ) ) {
right = true;
break;
}
@@ -10257,9 +10258,8 @@ bool player::is_wearing_shoes( const side &which_side ) const
bool player::is_wearing_helmet() const
{
for( const item &i : worn ) {
- if( i.covers( bp_head ) &&
- !i.has_flag( "HELMET_COMPAT" ) &&
- !i.has_flag( "SKINTIGHT" ) &&
+ if( i.covers( bp_head ) && !i.has_flag( "HELMET_COMPAT" ) && !i.has_flag( "SKINTIGHT" ) &&
+ !i.has_flag( "PERSONAL" ) && !i.has_flag( "AURA" ) && !i.has_flag( "SEMITANGIBLE" ) &&
!i.has_flag( "OVERSIZE" ) ) {
return true;
}
@@ -10272,8 +10272,8 @@ int player::head_cloth_encumbrance() const
int ret = 0;
for( auto &i : worn ) {
const item *worn_item = &i;
- if( i.covers( bp_head ) && ( worn_item->has_flag( "HELMET_COMPAT" ) ||
- worn_item->has_flag( "SKINTIGHT" ) ) ) {
+ if( i.covers( bp_head ) && !i.has_flag( "SEMITANGIBLE" ) &&
+ ( worn_item->has_flag( "HELMET_COMPAT" ) || worn_item->has_flag( "SKINTIGHT" ) ) ) {
ret += worn_item->get_encumber( *this );
}
}