Map Editor · Enemies

How to Place Enemies in DSMapStudio

Tested on v1.11.1 Updated 2026-06-09

How to Place Enemies in DSMapStudio

Adding an enemy to a FromSoftware map isn't dropping a model into a scene — it's wiring four things correctly: the model, its NpcParam (stats and behavior), a unique entity ID so event scripts can address it, and matching draw groups so it actually renders and wakes. Miss one and you get the classic failures: an invisible enemy, one that falls through the floor, or two enemies sharing an ID that confuse the game's scripts.

The reliable move is to duplicate an existing enemy rather than build one from nothing — the copy inherits the correct collision binding and draw groups for that spot. You'll need a project open with a map loaded and a Vulkan GPU (first project setup, Map Editor hub).

How enemies are stored

In the map's MSB, enemies sit under Parts → Enemies (or Characters). Each enemy part is a bundle of references, not a standalone creature:

  • Model name — a c#### ID (e.g. c1000); what the enemy looks like.
  • NpcParam — the Param Editor row defining HP, damage, defenses, drops.
  • Think param — the AI behavior it runs.
  • Entity ID — the unique number event scripts use to reference this specific enemy.
  • Collision binding — the collision it's attached to, which keeps it on the floor.
  • Draw / display groups — the render/activation groups it belongs to.
  • Position and rotation.

Because all of these must stay internally consistent, copying a working enemy and editing a few fields beats assembling one field by field.

Step by step

  1. Load the map and expand Parts → Enemies.
  2. Select an enemy near your target spot, ideally one on the same floor — this donor's collision binding and draw groups are what you want to inherit.
  3. Duplicate with Ctrl + D. The copy appears with the same references and position as the original.
  4. Move it into place. Select it in the viewport, press W for the translate gizmo, drag it to the target; press F to frame the camera if it's off-screen.
  5. Assign a new, unique entity ID in properties. The copy inherited the donor's ID and two objects must never share one — change it now (Entity IDs).
  6. Confirm draw groups match the area — duplicating a nearby enemy means they should already be right; leave them unless the enemy turns out invisible.
  7. Save (Ctrl + S). DSMapStudio writes the modified MSB into your project's mod folder.

That's an enemy identical to the donor. To make it a different creature, continue below.

Turning it into a different enemy

This is the basis of "boss vs boss" swaps. Change its references on the right as a set:

  • Model name → the new creature's c####.
  • NpcParam → the new enemy's stats row (HP, damage, drops).
  • Think param → the matching AI, so it behaves like the new enemy, not the old one.

Mismatches here cause the classic weirdness — a boss model running a basic enemy's AI. Change model, NpcParam, and think param together. Some swaps also need the right animations and effects present for that model, which is why dropping a boss into an area it was never meant to appear in can take more than param edits.

The entity ID is non-negotiable

The entity ID is how EMEVD targets a specific enemy — "when entity 1000800 dies, open this fog gate." A duplicate carries the donor's ID, so until you change it two objects claim the same handle; DSMapStudio flags it, and scripts can fire on the wrong object. Assign a fresh ID that fits the map's numbering — formats and ranges in the entity IDs guide.

If the enemy is invisible — draw groups

A placed enemy that doesn't appear in-game is almost always draw/display groups: these decide which objects render and activate in which parts of a map, and an enemy whose draw groups don't overlap the collision it stands on simply won't show or won't wake. This is the single biggest reason to duplicate a nearby enemy — it inherits groups already correct for that spot. Move an enemy a long way, or build it from a distant donor, and you may need to copy draw groups from an enemy that belongs in the new area (draw groups explained).

Common mistakes

SymptomCauseFix
Invisible / never spawnsDraw groups don't match the areaCopy groups from an enemy that belongs there; or duplicate a nearby enemy
Falls through the floorWrong/missing collision bindingDuplicate an enemy already on that collision
Duplicate entity ID warningCopy kept the donor's IDAssign a new unique entity ID
Boss acts like a basic enemyModel changed but NpcParam/think param weren'tChange all three together
Crash on duplicateKnown issue on certain enemies/mapsCrash duplicating enemies
Edits don't appear in-gameModEngine2 not loading the mod folderPoint ModEngine2 at the project output

You can now place, move, and reskin enemies. Read the concept it all rests on next — entity IDs — and for the stats themselves head to the Param Editor hub or back to the Map Editor guide.