/** * Determine what a funnel has filled out of game, using funnelcontainer.bday as a starting point. */ void retroactively_fill_from_funnel( item &it, const trap &tr, int startturn, int endturn, const tripoint &location ) { if( startturn > endturn || !tr.is_funnel() ) { return; } it.bday = endturn; // bday == last fill check auto data = sum_conditions( startturn, endturn, location ); // Technically 0.0 division is OK, but it will be cleaner without it if( data.rain_amount > 0 ) { const int rain = divide_roll_remainder( 1.0 / tr.funnel_turns_per_charge( data.rain_amount ), 1.0f ); it.add_rain_to_container( false, rain ); // add_msg(m_debug, "Retroactively adding %d water from turn %d to %d", rain, startturn, endturn); } if( data.acid_amount > 0 ) { const int acid = divide_roll_remainder( 1.0 / tr.funnel_turns_per_charge( data.acid_amount ), 1.0f ); it.add_rain_to_container( true, acid ); } }
void SkillLevel::train( int amount, bool skip_scaling ) { // Working off rust to regain levels goes twice as fast as reaching levels in the first place if( _level < _highestLevel ) { amount *= 2; } if( skip_scaling ) { _exercise += amount; } else { const double scaling = get_option<float>( "SKILL_TRAINING_SPEED" ); if( scaling > 0.0 ) { _exercise += divide_roll_remainder( amount * scaling, 1.0 ); } } if( _exercise >= 100 * ( _level + 1 ) * ( _level + 1 ) ) { _exercise = 0; ++_level; if( _level > _highestLevel ) { _highestLevel = _level; } } }