CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.64k stars 4.18k forks source link

fermenting times are 6 times more in-game then stated in the json #34373

Closed snipercup closed 5 years ago

snipercup commented 5 years ago

Describe the bug

Putting in 14 portions of unfermented vinegar (brew_vinegar) which is 1.75L turns into 0.22L vinegar. I don't know how the bewing process works but there is definitely a bug with the time. The current recipe for brew_vinegar is brewable with a ferment time of 7 hours (check the JSON). In game however, in the crafting menu it says it will brew for about 45 hours. If I change the ferment time in the JSON to 1 hour, in game it says the ferment time is 6 hours. The result is always tart white vinegar because it ferments too long according to the game, even if you remove it within 5 minutes of completing the fermentation.


item &brew_i = *items_here.begin();
    // Does the vat contain unfermented brew, or already fermented booze?
    // TODO: Allow "recursive brewing" to continue without player having to check on it
    if( brew_i.is_brewable() ) {
        add_msg( _( "There's a vat of %s set to ferment there." ), brew_i.tname() )

           // TODO: change brew_time to return time_duration
        const time_duration brew_time = brew_i.brewing_time();
        const time_duration progress = brew_i.age();
        if( progress < brew_time ) {
            int hours = to_hours<int>( brew_time - progress );
            if( hours < 1 ) {
                add_msg( _( "It will finish brewing in less than an hour." ) );
            } else {
                add_msg( ngettext( "It will finish brewing in about %d hour.",
                                   "It will finish brewing in about %d hours.",
                                   hours ), hours );
            }
            return;
        }

           if( query_yn( _( "Finish brewing?" ) ) ) {
            const auto results = brew_i.brewing_results();

           g->m.i_clear( examp );
            for( const auto &result : results ) {
                // TODO: Different age based on settings
                item booze( result, brew_i.birthday(), brew_i.charges );
                g->m.add_item( examp, booze );
                if( booze.made_of_from_type( LIQUID ) ) {
                    add_msg( _( "The %s is now ready for bottling." ), booze.tname() );
                }
            }

           p.moves -= to_moves<int>( 5_seconds );
            p.practice( skill_cooking, std::min( to_minutes<int>( brew_time ) / 10, 100 ) );
        }

return;
    } else {
        add_msg( _( "There's a vat of fermented %s there." ), brew_i.tname() );
    }

The issue is somewhere in this code, in iexamine.cpp is my guess. Anyone know how to fix it?

Steps To Reproduce

  1. Edit Json of brew_vinegar to brew for 1 hour
  2. Look up recipe in game
  3. Observe it will tell you 'will ferment for 6 hours'

Expected behavior

If I say 1 hour in json I expect it to be 1 hour in game.

Screenshots

image

image

Versions and configuration

Additional context

Mad it as a seperate issue but fixing this might fix #30298

Zireael07 commented 5 years ago

One more thing that wasn't updated with the turn duration changes, I believe?