About this mod
Allows casting spells with the following weapons and hopefully makes them viable:
- Carian Knight's Sword (Sorceries)
- Miquellan Knight's Sword (Incantations)
- Lazuli Glintstone Sword (Sorceries on R1)
- Scepter of the All-Knowing (Sorceries & Incanations)
- Golden Order Seal (Sorceries & Incantations)
- Requirements
- Permissions and credits
- Changelogs
Mod version will always be the ER version I updated it for.
Weapon Catalysts
Carian Sorcery Sword
- Is now a somber weapon
- Buffed Int scaling and physical/magic base damage by roughly 10% each
Carian Knight's Sword
- Now casts sorceries on R2
- Changed Ash of War to Endure
- Adjusted scaling to focus on Int
Miquellan Knight's Sword
- Now casts incantations on R2
- Changed Ash of War to Endure
- Adjusted scaling to focus on Faith (mirrors Carian Knight's Sword)
Lazuli Glintstone Sword
- Now casts sorceries on R1 (!)
- Changed Ash of War to Square Off
- Adjusted scaling to strongly focus on Int
- AR might be too high, but keep in mind that you (usually) don't have R1s
Scepter of the All-Knowing
- Now casts sorceries AND incantations on R2
- Added Faith requirement and scaling (same as Int)
- Increased overall scaling - it's high, but it's also a hammer...
Golden Order Seal
- Now casts sorceries and incantations
- Changed Ash of War to Endure
- Added Faith requirement
- Slightly increased overall scaling (slightly behind prince of death staff)
Changelog
1.16.4: Weapon catalysts now perform their regular attacks while jumping
1.16.3: R1 weapon catalysts now prioritize cast over guard when held in left hand
1.16.2: Fixed issues with regular staffs and catalysts
Installation
Installation will be easiest with mod engine 2. Once setup, copy the WeaponCatalysts folder to <mod engine 2>/mod/ and modify the config_eldenring.toml to include the following line in curly braces. If you load other mods, make sure that each line is followed by a comma and be aware that for mods modifying the same files only the top one will work as expected.
mods = [
{ enabled = true, name = "WeaponCatalysts", path = "mod\\WeaponCatalysts" },
]
Adding new catalysts
New catalysts can be added by making minor param edits and adding new entries in the action/script/c0000.hks script file.
For the params, open the regulation.bin in Smithbox, select the EquipParamWeapon table, find your weapon and look for the respective param fields. Don't forget to save the modified params afterwards (File -> Save All Modified Params). You want to enable the following parameters:
- isWeaponCatalyst to enable casting
- enableMagic for casting sorceries
- enableMiracle for casting incantations
You can edit the c0000.hks with any text editor, but I'd suggest something like Notepad++ for convenience. Towards the end of the file (currently at line 26060) you will find a list used for identifying weapon catalysts. The first two entries are used for identifying a weapon, first by its spAttackCategory ID, then by its ash of war animation ID (see comments above for details). You can find these using Smithbox as well (spAttackCategory is on the weapon, the animation ID can be found in the SwordArtsParam table). The third entry is the button used for casting.
For example, if you wanted to make Death's Poker cast on R2, you would add an entry as follows:
{-1, 248, ACTION_ARM_R2},
Death's Poker uses a unique ash of war, so we can skip the spAttackCategory (-1) and fully rely on the the AOW ID (248). Don't forget the comma after the closing bracket!Casting on L1/L2 may or may not work, I barely tested it and there are some limitations from the game itself (see below).
What was modified
tl;dr
- EquipParamWeapon
- SpEffectParam
- (SwordArtsParam)
- Player Havok script
- Weapon models (added dummy polys)
- Item descriptions
It's a bit annoying how inaccessible souls modding is, so I want to give a small overview of where I started and what was modified.
Using Smithbox, I started by looking at anything unusual about the Carian Sorcery Sword (CSS) in the EquipParamWeapontable. It adds two passive effects to the player, but it seems they are unused (5025300 and 20018694). The parameters are otherwise unremarkable, except for its special motion category (spAtkcategory), where it has a dedicated entry (293 - Carian Sorcery Sword).
The special motion category parameter is used to override parts of a weapon's base moveset - aha! So I opened DSAnimStudio looking for TAE 293 in the c0000 animations file (the player character), and... nothing. That's weird, but Rodan's Juicy Elden Ring Doc confirms this.
Since it wasn't using custom animations or triggers, my next stop was the Ividyon's decompiled Havok script repository. Looking for 293... yep, one entry. Turns out the CSS has some custom scripting to catch its R2s and turn them into magic instead. I included the original from which I started so it's easier to see which lines were changed.
My plan was to have some catalysts cast on R1, some on R2 and some with a custom ash of war, but I also wanted to retain as much of a weapon's moveset as possible. However, there is no easy way to uniquely identify the weapon in each hand from inside the HKS. I tried using spEffects first, but they are not tightly coupled to the weapon. In the end I settled on a function that checks for unique combinations of special motion category and/or ash of war. This works at least for somber weapons. Alternatively, ElaDiDu's HKS data exposer could be used, but it needs to update the memory addresses on each update, so its a bit brittle.
This works for the most part; however, ashes of war won't work since the game only truly updates the selected spell in specific situations, and triggering an ash of war is not one of them. ElaDiDu has written a mod that would allow forcing an update from Havok, but it is not updated for 1.16 yet and I'm hesitant to rely on memory addresses. If you want to use the AOW, it works, but spells will only be updated after a weapon swing. The AOW's ID is 777.
When casting spells with a weapon, usually they will not show the casting seal and particle effects. However, looking at the casting animations in DSAnimStudio, I could see that all casts would spawn a VFX on the dummy poly with ID 181. After adding these to the weapon models in Smithbox, the seals showed up and I was happy. Lastly, I slightly adjusted the catalyst's descriptions.