Tools:
- DS Map Studio
- Yabber
- Darkscript3

Getting familiar with DSMapStudio

- download it here: DSMapStudio
- click "File" on the top left corner and select "New Project"
- choose a name, we'll go with "New Bonfires"
- pick your project directory (not the game directory!), this can be any folder you want, it will store the mod's files here.
- select your DS3 Executable by browsing to your game folder
- click "Create", you're done! Now you have a modding environment.

Keep in mind that your project will not override your game files. You need to load the project files with ModEngine or backup your game directory and copy the project files over your game files so it takes effect.

Preparing your project folder

Before we start, I'd like to recommend that you pick a map to work on, check its ID on DSMapStudio (On the Map Editor, left panel, there are maps with names and their respective IDs. For example: "m30_00_00_00" for High Wall of Lothric. We'll pick this one for this tutorial.)

1. Navigate to your DS3 Folder once again, find the following folders: "event", "script" and "menu".
2. Create 3 folders with the same name on your Mod folder. (The one you created before)
3. Your Mod folder should now have an "event" folder, a "script" folder and a "menu" folder.
4. Open the "script" folder and create yet another called "talk".
5. Open up the "script" folder on your DS3, go inside the "talk" folder and copy the file "m30_00_00_00.talkesdbnd.dcx" over to your new "talk" folder.
6. Now, open your game's event folder. "..\DARK SOULS III\Game\event"
7. Copy "m30_00_00_00.emevd.dcx" to your Mod's "event" folder.
8. Now, open up your Mod's menu folder and create one named "mapimage".
9. Navigate to your DS3 counterpart "..\DARK SOULS III\Game\menu\mapimage" and copy "01.tpf.dcx" to your Mod's "mapimage" folder.

You're now ready to start modding High Wall of Lothric. Every change will only be done in your project folder.

Overview for Bonfire objects

Go back to DSMapStudio, click on Map Editor, right click on "m30_00_00_00" and click Load Map.
This is High Wall! Hold right mouse button (RMB) to control the camera, WASD (while holding RMB) to move, CTRL to slow down and SHIFT to speed up. You can control each individual speed by using your scroll wheel.
Now, navigate to a place you know has a bonfire, for example the Tower on The Wall Bonfire.

Bonfires are comprised of the following things:
1. An "Object" (This is the "physical bonfire"): This is what you see in the game.
2. An "Enemy": This is the invisible "NPC" you talk to when you rest at a bonfire. This is usually shown in DSMapStudio as a red half sphere.
3. A "Spawnpoint": This is where you respawn after dying. It is shown as a yellow octahedron (Just 2 pyramids glued to each other).
4. A "Player": This is where you warp to. It's shown as a dark green Hexagonal Pyramid

Creating a bonfire!

Create the objects

1. In DS Map Studio, click on the red half-sphere and note down its "Talk ID". We will need this later.
2. Hold CTRL and click on all the items mentioned above, the "Object", "Enemy", "Player" and "Spawnpoint".
3. Press CTRL+D to duplicate, drag everything to the desired place (do not click anywhere else or you'll have to select all of it again). Alternatively you can enter the coordinates in each object.
4. Once that's done, find an object nearby and see which "CollisionName" it has.
5. Copy it to every item we just dragged (not all of it needs a "CollisionName", if the field doesn't exist then just ignore it). This will tell the game to render it when we're on top of that collision.
6. Select an unused Entity ID for the "enemy". As an example we'll go with 3000900. Again, this is the "enemy" EntityID.
7. Click on the "Object" and give it an ID that's equal to the "Enemy's ID + 1000". So in our case, "3001900".
8. Click on the "Spawnpoint" and give it an ID that's equal to the "Object's ID + 1000", in our case, "3002900".
9. Click on the "Player" and give it an ID equal to the "Enemy's ID + 20". In our case it would be "3000920".

Add the register event (so it's active in the map)

1. Open up your map event script with DarkScript3: "project folder\event\m30_00_00_00.emevd.dcx"
2. Search for the line "RegisterBonfire" (again, CTRL+F is your friend).
3. Look at the first number inside the parenthesis. Note down the highest one and search for the next one (So if our number is 13010000, we search for 13010001), if DarkScript3 doesn't find anything, we're good! Memorize that number.
4. Add a new line below or above them and write "RegisterBonfire(13010001, 3000900, 5, 180, 0);" [EXPLANATION: First number is the EventID, we just need to give it an unused number. Second number is your "Enemy" Entity ID. Third number is the distance at which the player can use the bonfire. Fourth number is the angle at which the player can use the bonfire. And the last number is the standard Kindling level of the bonfire.]
5. Save the file and exit DarkScript3.

Add the talk (so you can sit down and select options)

1. Open up your project talk folder: "project folder\script\talk"
2. Unpack your "m30_00_00_00.talkesdbnd.dcx" file with yabber by dragging it onto yabber.exe (or if you run "Yabber.Context.exe" it will be added to your "right-click of files" called context menu).
3. Open the folders until you reach all the ESD files.
4. Find the one with the number you wrote down in step 2.
5. Duplicate that one and give it a new name so change the last number to whatever the next one is, as long as it isn't used e.g. if our existing number is "300000" then we need to name it "t300001.esd" if that's taken, pick the next one. So on and so forth.]
6. Go back to the first level of the unpacked folder until you find your "_yabber-bnd4.xml".
7. Open it with any text editor and copy any entry. Copy from one <file> to the next </file> and paste it at the end.
8. Rename the ID inside of it to the next unused one. So if the last is 119, we name it 120.
9. Change this row "<path>script\talk\m30_00_00_00\t300000.esd</path>" to your Talk ID, remember that we picked one before. In our case it's "t300001.esd" so rename it to "<path>script\talk\m30_00_00_00\t300001.esd</path>".
10. Go back to the "talk" folder until you can see your "m30_00_00_00-talkesdbnd-dcx" folder.
11. Unpack it with Yabber by dragging it onto Yabber.exe (or with the context menu entry).

Add parameters, text and image (to select it in the warp menu)

1. Open up the "Param Editor" on DSMapStudio.
2. Find "BonfireWarpParam" and click on it.
3. Find a bonfire on the map you want and click on its entry.
4. CTRL+D to duplicate, rename it to whatever you want.
5. Change "LocationEventId" to the next unused number, so if the one you copied is "13000004" then type "13000005" on this field.
6. On the "WarpEventId" field, write the Entity ID of our "Enemy". So in our case, "3000900".
7. Now open up DSMapStudio's "Text Editor" and find the "MenuText" entry on the left panel.
8. Search for the name of a bonfire near the place you want, so if our map is High Wall of Lothric then we can search for Vordt for example.
9. Find an unused ID near this bonfire and rename it to whatever you want. We'll go with "Test Bonfire". Note down the ID.
10. Go back to the "Param Editor" and add that same ID to the "BonfireNameId" field.
11. On the next field "DescriptionTextId" we add an ID equal to "BonfireNameId + 400". So if our ID was "211200" then our new one is "211600".
12. For the picture ID: take a picture (or any picture honestly) of the area your bonfire is at.
13. Go to your project folder: "project folder\menu\mapimage"
14. Unpack the "XX.tpf.dcx" file corresponding to your map. For example, 01 is High Wall of Lothric and 02 is Foot of The High Wall and so on. You can check it in the "BonfireWarpParam" category.
15. Open the newly created folder and duplicate one of the images inside and rename it to the next available ID.
16. Open it with Paint.NET (I recommend this one. If you're on Linux then Gimp is fine.)
17. Add your picture on top of this one.
18. Open up "_yabber-tpf.xml". You should know what to do by now. Find the last entry, copy everything from the first <file> to the last </file> and paste it at the end.
Change the Name row to your new ID.
19. Repack the folder with Yabber.
20. Go back to your Params, find the PictureID field. Paste the ID we chose in here. In our case, "10026".
21. ListID tells the game where to put it in the menu. 1 is for High Wall of Lothric (same as the file we opened before).
22. "IsDisableQuickwarp" is better left unchecked, this is for Firelink Shrine only.
23. "CeremonyID" is fine left at -1 and "OnlineAreaID" is fine left as is. (If you copied one from the same area, otherwise just find it and copy from another bonfire nearby.)

Deleting a bonfire

If you want to "delete" another bonfire because you create other ones instead then simply open the "Map editor" in DS Map Studio and empty the "CollisionName" field for all related ojects.
This will simply disable the bonfire. It's bad practice to delete original content. Disabling it is the better way.