Most of Daughters of Ash was created using tools developed by Wulf2k and a simple Python library I wrote called Pydses (PYthon Dark Souls Event Scripting). Pydses was a wrapper around the translated event script format developed by HotPocketRemix and allowed me to write Dark Souls events from scratch using readable Python syntax — a huge productivity boost over writing them in the numeric language with Notepad.

After DoA was released, I spent some time polishing the Pydses wrapper library into a genuine extension of the Python language called EVS (EVent Scripting) and released it as part of a Python package called Soulstruct. This package can freely convert event scripts between their binary form (EMEVD files), HotPocket’s numeric form (text files), and my new EVS form (Python files). The EVS form looks like valid Python syntax, which makes it convenient to use with a Python IDE like PyCharm, but when it is “compiled” by Soulstruct, any if and await statements are translated into the asynchronous register manipulations and conditional blocking calls used by the EMEVD language. Available registers are “checked out” by event script functions automatically, and these functions can be called with arguments to emulate the creation of an event script instance in EMEVD.

Soulstruct and EVS are the reason I was able to throw together a slapstick, “experimental” charity mod for LobosJr in two weeks back in May 2019. If you’re interested in making heavily event-based complex mods like DoA, I recommend checking it out. You’ll even get to learn Python as a side effect! Theoretically, it supports the extra event functions added by Dark Souls 3 and Bloodborne as well; I’ve confirmed that the vanilla event scripts in these games can be translated back and forth without changing, but I’m not aware of anyone who’s used it to make changes. (Or, if you’re looking for an event editing program that’s a little more self-contained and works for most FromSoft games, I recommend DarkScript by AinTunez.)

Over time, I added Python classes to Soulstruct for unpacking many other commonly-modified Dark Souls data formats: the MSB map files, GameParam file, DrawParam lighting files, FMG text files, and ESD state machine files. Then I put a Python GUI together that lets users load all of these formats at once in separate tabs that they can switch between, together with some useful searching functions and right-click contextual options. This is a “Soulstruct project.”

I’ve been intending to make video tutorials on Soulstruct and modding in general for quite some time, but everything else on my plate (plus the chaotic backdrop of 2020) has made that difficult. It’s hard to decide how I should split my time between creating new things and helping others create for themselves. I would hate for any fantastic Dark Souls mod ideas to fall to the wayside because of some overly intimidating or obtuse tools. If the demand is there, I’m happy to revisit this in the future.