diff --git a/data/json/items/comestibles/drink.json b/data/json/items/comestibles/drink.json index 564934f366325..57c3d12aedaf1 100644 --- a/data/json/items/comestibles/drink.json +++ b/data/json/items/comestibles/drink.json @@ -1524,9 +1524,10 @@ "description": "Fresh, clean water. Truly the best thing to quench your thirst.", "container": "bottle_plastic", "sealed": true, - "revert_to": "water", + "color": "light_cyan", + "//": "Clean water becomes regular water in about 4 weeks if exposed to air (1 week if outdoors).", "properties": { "max_air_exposure_hours": "720" }, - "color": "light_cyan" + "revert_to": "water" }, { "id": "water_spring", diff --git a/src/item.cpp b/src/item.cpp index e57af2fd36b90..f6148b305114f 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -8025,12 +8025,13 @@ void item::calc_rot_while_processing( time_duration processing_duration ) last_temp_check += processing_duration; } -bool item::process_decay_in_air( Character *carrier, int max_air_exposure_hours, +bool item::process_decay_in_air( map& here, Character *carrier, const tripoint& pos, int max_air_exposure_hours, time_duration time_delta ) { if( !has_own_flag( flag_FROZEN ) ) { + double environment_multiplier = here.is_outside(pos) ? 2.0 : 1.0; time_duration new_air_exposure = time_duration::from_seconds( item_counter ) + time_delta * - rng_normal( 0.9, 1.1 ); + rng_normal( 0.9, 1.1 ) * environment_multiplier; if( new_air_exposure >= time_duration::from_hours( max_air_exposure_hours ) ) { convert( *type->revert_to, carrier ); return true; diff --git a/src/item.h b/src/item.h index c90af9fb877e2..0942c8ffcd9ed 100644 --- a/src/item.h +++ b/src/item.h @@ -3074,7 +3074,7 @@ class item : public visitable bool process_blackpowder_fouling( Character *carrier ); bool process_gun_cooling( Character *carrier ); bool process_tool( Character *carrier, const tripoint &pos ); - bool process_decay_in_air( Character *carrier, int max_air_exposure_hours, + bool process_decay_in_air( map& here, Character *carrier, const tripoint& pos, int max_air_exposure_hours, time_duration time_delta );