diff --git a/src/monster.cpp b/src/monster.cpp index 455ec50546e63..d999a76f6ccae 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -307,6 +307,9 @@ monster::monster( const mtype_id &id ) : monster() faction = type->default_faction; upgrades = type->upgrades && ( type->half_life || type->age_grow ); reproduces = type->reproduces && type->baby_timer && !monster::has_flag( mon_flag_NO_BREED ); + if( reproduces && type->baby_timer ) { + baby_timer.emplace( calendar::turn + *type->baby_timer ); + } biosignatures = type->biosignatures; if( monster::has_flag( mon_flag_AQUATIC ) ) { fish_population = dice( 1, 20 ); @@ -561,12 +564,6 @@ void monster::try_reproduce() return; } - if( !baby_timer && has_eaten_enough() ) { - // Assume this is a freshly spawned monster (because baby_timer is not set yet), set the point when it reproduce to somewhere in the future. - // Monsters need to have eaten eat to start their pregnancy timer, but that's all. - baby_timer.emplace( calendar::turn + *type->baby_timer ); - } - bool season_spawn = false; bool season_match = true; diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 323e0f4ffb473..a2c11e559729f 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -2521,6 +2521,8 @@ void monster::load( const JsonObject &data ) data.read( "baby_timer", baby_timer ); if( baby_timer && *baby_timer == calendar::before_time_starts ) { baby_timer.reset(); + } else if( reproduces && type->baby_timer && !baby_timer ) { // Remove after 0.I + baby_timer.emplace( calendar::turn + *type->baby_timer ); } biosignatures = data.get_bool( "biosignatures", type->biosignatures );