Where is the fun in detonating a mine far away from the merc after he failed the skill check? No, I think the placement is working fine as it is.
The only downside I see currently is the need to put the mine into the mercs primary hand. However, we can't simply use a similar item from sector inventory because item status matters, you know? What we could do (maybe) is to "load" another item of that type from the mercs inventory into the primary hand. With that method you could place one mine after the other. You'd only need to load a bunch of mines on the merc.
Detection chance for mines is based on trap level which is based on the skills of the merc who placed them (unless pre-placed by map author). So better use someone with good explosives skill and experience to place mines. Demolitions trait increases trap level by 5 (default value) to a possible maximum of 13 currently.
However, there seems to be a bug, design error or something with the trap level.
The default trap level calculation (old traits) is:
pSoldier->inv[ HANDPOS ][0]->data.bTrap = __min( 10, ( EffectiveExplosive( pSoldier ) / 20) + (EffectiveExpLevel( pSoldier ) / 3) );
Even with a perfect merc you can't get higher than 8.
New traits modified this to:
pSoldier->inv[ HANDPOS ][0]->data.bTrap = __min( max( 10, (8 + gSkillTraitValues.ubDEPlacedBombLevelBonus)), (( EffectiveExplosive( pSoldier ) / 20) + (EffectiveExpLevel( pSoldier ) / 3) + gSkillTraitValues.ubDEPlacedBombLevelBonus) );
The max trap level is the old default 8 + demolition trait bonus. Again, why 8?
I'd say that the calculation with old and new traits should allow a reachable maximum of 10 or higher with demolition trait. For that we should replace the calculations with:
pSoldier->inv[ HANDPOS ][0]->data.bTrap = __min( 10, ( EffectiveExplosive( pSoldier ) / 20) + (EffectiveExpLevel( pSoldier ) / 2) );
and
pSoldier->inv[ HANDPOS ][0]->data.bTrap = __min( max( 10, (10 + gSkillTraitValues.ubDEPlacedBombLevelBonus)), (( EffectiveExplosive( pSoldier ) / 20) + (EffectiveExpLevel( pSoldier ) / 2) + gSkillTraitValues.ubDEPlacedBombLevelBonus) );
respectively.
Makes sense?