void mdeath::blobsplit( monster &z ) { int speed = z.get_speed() - rng( 30, 50 ); g->m.spawn_item( z.pos(), "slime_scrap", 1, 0, calendar::turn ); if( z.get_speed() <= 0 ) { if( g->u.sees( z ) ) { // TODO: Add vermin-tagged tiny versions of the splattered blob :) add_msg( m_good, _( "The %s splatters apart." ), z.name() ); } return; } if( g->u.sees( z ) ) { if( z.type->dies.size() == 1 ) { add_msg( m_good, _( "The %s splits in two!" ), z.name() ); } else { add_msg( m_bad, _( "Two small blobs slither out of the corpse." ) ); } } std::vector <tripoint> valid; for( auto &&dest : g->m.points_in_radius( z.pos(), 1 ) ) { // *NOPAD* if( g->is_empty( dest ) && z.can_move_to( dest ) ) { valid.push_back( dest ); } } for( int s = 0; s < 2 && !valid.empty(); s++ ) { const tripoint target = random_entry_removed( valid ); if( monster *const blob = g->summon_mon( speed < 50 ? mon_blob_small : mon_blob, target ) ) { blob->make_ally( z ); blob->set_speed_base( speed ); blob->set_hp( speed ); } } }