From cf246315fc0d9706b500fbe0a41de8299db6e331 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Thu, 26 Dec 2019 14:50:16 +0200 Subject: [PATCH] reworked spawning from group --- src/mapgen.cpp | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 1e420957458b5..667a6a901b43b 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1127,8 +1127,8 @@ class jmapgen_monster_group : public jmapgen_piece } }; /** - * Place spawn points for a specific monster (not a group). - * "monster": id of the monster. + * Place spawn points for a specific monster. + * "monster": id of the monster. or "group": id of the monster group. * "friendly": whether the new monster is friendly to the player character. * "name": the name of the monster (if it has one). * "chance": the percentage chance of a monster, affected by spawn density @@ -1209,25 +1209,26 @@ class jmapgen_monster : public jmapgen_piece mission_id = dat.mission()->get_id(); } - if( m_id != mongroup_id::NULL_ID() ) { - // Spawn single monster from a group - dat.m.place_spawns( m_id, 1, point( x.get(), y.get() ), point( x.get(), y.get() ), 1.0f, true, - false, - name, mission_id ); - } else { - int spawn_count = roll_remainder( density_multiplier ); - if( one_or_none ) { // don't let high spawn density alone cause more than 1 to spawn. - spawn_count = std::min( spawn_count, 1 ); - } - if( raw_odds == 100 ) { // don't spawn less than 1 if odds were 100%, even with low spawn density. - spawn_count = std::max( spawn_count, 1 ); - } else { - if( !x_in_y( odds_after_density, 100 ) ) { - return; - } + + int spawn_count = roll_remainder( density_multiplier ); + + if( one_or_none ) { // don't let high spawn density alone cause more than 1 to spawn. + spawn_count = std::min( spawn_count, 1 ); + } + if( raw_odds == 100 ) { // don't spawn less than 1 if odds were 100%, even with low spawn density. + spawn_count = std::max( spawn_count, 1 ); + } else { + if( !x_in_y( odds_after_density, 100 ) ) { + return; } + } + if( m_id != mongroup_id::NULL_ID() ) { + MonsterGroupResult spawn_details = MonsterGroupManager::GetResultFromGroup( m_id ); + dat.m.add_spawn( spawn_details.name, spawn_count * pack_size.get(), point( x.get(), y.get() ), + friendly, -1, mission_id, name ); + } else { dat.m.add_spawn( *( ids.pick() ), spawn_count * pack_size.get(), point( x.get(), y.get() ), friendly, -1, mission_id, name ); }