diff --git a/src/bionics.cpp b/src/bionics.cpp index 5670fd225c784..4cf6e7dfb66cf 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -902,9 +902,11 @@ bool Character::burn_fuel( int b, bool start ) mod_stored_kcal( -kcal_consumed ); mod_power_level( power_gain ); } else if( is_perpetual_fuel ) { - if( fuel == itype_id( "sunlight" ) ) { - const double modifier = g->natural_light_level( pos().z ) / default_daylight_level(); - mod_power_level( units::from_kilojoule( fuel_energy ) * modifier * effective_efficiency ); + if( fuel == itype_id( "sunlight" ) && g->is_in_sunlight( pos() ) ) { + const weather_type &wtype = current_weather( pos() ); + const float tick_sunlight = incident_sunlight( wtype, calendar::turn ); + const double intensity = tick_sunlight / default_daylight_level(); + mod_power_level( units::from_kilojoule( fuel_energy ) * intensity * effective_efficiency ); } else if( fuel == itype_id( "wind" ) ) { int vehwindspeed = 0; const optional_vpart_position vp = g->m.veh_at( pos() ); diff --git a/src/bionics_ui.cpp b/src/bionics_ui.cpp index 8ea1a69c4e56d..5e2c383cb00e0 100644 --- a/src/bionics_ui.cpp +++ b/src/bionics_ui.cpp @@ -63,10 +63,13 @@ static void draw_bionics_titlebar( const catacurses::window &window, player *p, bool found_fuel = false; fuel_string = _( "Available Fuel: " ); for( const bionic &bio : *p->my_bionics ) { - for( const itype_id fuel : p->get_fuel_available( bio.id ) ) { + for( const itype_id &fuel : p->get_fuel_available( bio.id ) ) { found_fuel = true; const item temp_fuel( fuel ) ; if( temp_fuel.has_flag( "PERPETUAL" ) ) { + if( fuel == itype_id( "sunlight" ) && !g->is_in_sunlight( p->pos() ) ) { + continue; + } fuel_string += colorize( temp_fuel.tname(), c_green ) + " "; continue; }