Tutorial · Dark Souls

Creating New Spells in Dark Souls 1 Using DSMapStudio

Tested on v1.11.1 Updated 2026-06-09

Creating New Spells in Dark Souls 1 Using DSMapStudio

A spell in Dark Souls 1 is several linked pieces, which is why "make a new spell" is a bigger job than editing a weapon. The item you attune is one param, the spell's behavior (cost, casts, what it does) is another, and the projectile it launches is a third. Link them correctly and you have a castable new sorcery, miracle, or pyromancy; miss a link and the spell either doesn't appear, can't be attuned, or fizzles. The reliable approach — as with every "new content" job here — is to clone an existing spell close to your goal and change only what differs. You'll need a Dark Souls 1 project open (Dark Souls setup); general workflow in the Param Editor hub.

What a spell is made of

Three params combine into one spell, in a chain:

  • EquipParamGoods — the spell item: what you find, hold, and attune at a bonfire. Carries slot cost, magic type, and a link to the behavior.
  • Magic — the behavior: number of casts, requirements, what it does when cast, and which projectile it fires.
  • Bullet — the projectile it spawns (the soul arrow, the fireball). The Magic entry points at a Bullet row for what actually flies out.

The chain: the good points at a Magic definition, which points at a Bullet. Make a new spell by creating a new link in each, or reusing an existing one where no change is needed.

Clone, don't build

Building from empty rows means setting dozens of interdependent fields correctly. Clone a spell that already works and you inherit all of it, changing only what you want. Pick an existing spell similar to your goal (a Soul Arrow for a new sorcery projectile) and duplicate its pieces to new IDs, then retune. A fully custom visual effect needs new SFX/FXR assets — a separate, advanced job; cloning reuses an existing spell's visuals while you change stats and behavior.

Creating a new sorcery

  1. Duplicate the spell item. In EquipParamGoods, find a sorcery similar to your goal and duplicate its row to a new unused ID. This is your spell item.
  2. Duplicate the Magic behavior. In Magic, duplicate that spell's behavior row to a new ID; edit casts, requirements, damage to taste.
  3. Link the good to your Magic row. On your new EquipParamGoods item, set its reference to point at your new Magic row, not the original's.
  4. (Optional) Customize the projectile. For different projectile behavior, duplicate the Bullet row the Magic entry fires, edit it, and point your Magic row at the new Bullet. Reusing the original projectile? Skip this.
  5. Set magic type and attunement. On the item, set the magic type and slot cost so it attunes as a sorcery (vs miracle or pyromancy).
  6. Name it in the Text Editor. Add the goods name and description at your new item's ID so it reads as its own spell.
  7. Make it obtainable. Add it to a shop or drop so you can get it in-game.

Each new ID must point at the right next piece: good → Magic → Bullet. That chain is the whole trick.

Sorceries, miracles, pyromancies

The three types share this structure but differ in casting and scaling: sorceries cast with a catalyst, scale with Intelligence; miracles with a talisman, Faith; pyromancies with a pyromancy flame (no stat scaling in DS1's design). Clone from a spell of the same type as your goal — clone a sorcery to make a sorcery — so the magic type, catalyst, and scaling are already correct and you only adjust specifics.

Save and test

Ctrl+S, point ModEngine2 at the project's mod folder, launch DS1. Acquire the spell, attune it at a bonfire, cast it to confirm item, behavior, and projectile all link up. Won't appear or won't attune? Recheck the references — almost every problem is a new ID still pointing at an original piece instead of your new one. Use modified in each param to confirm your new rows are present.

The same clone-and-relink pattern creates weapons (adding a weapon) and other items; for changes across many rows, CSV export/import; and the Param Editor hub covers the navigation and Modified filter this relies on.