Map Editor · Enemies
How to Place Enemies in DSMapStudio
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
- Load the map and expand Parts → Enemies.
- 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.
- Duplicate with
Ctrl + D. The copy appears with the same references and position as the original. - 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.
- 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).
- Confirm draw groups match the area — duplicating a nearby enemy means they should already be right; leave them unless the enemy turns out invisible.
- Save (
Ctrl + S). DSMapStudio writes the modified MSB into your project'smodfolder.
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
| Symptom | Cause | Fix |
|---|---|---|
| Invisible / never spawns | Draw groups don't match the area | Copy groups from an enemy that belongs there; or duplicate a nearby enemy |
| Falls through the floor | Wrong/missing collision binding | Duplicate an enemy already on that collision |
| Duplicate entity ID warning | Copy kept the donor's ID | Assign a new unique entity ID |
| Boss acts like a basic enemy | Model changed but NpcParam/think param weren't | Change all three together |
| Crash on duplicate | Known issue on certain enemies/maps | Crash duplicating enemies |
| Edits don't appear in-game | ModEngine2 not loading the mod folder | Point 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.