Creating Custom Spells with the Spellbook Injector

Creating Custom Spells

with the Spellbook Injector

A Custom Content guide byr3m

Last update: October 5th, 2019

This guide is meant for V1 of the Spellbook Injector. The Spellbook Injector’s

documentation and the mod itself are distributed under aCreative Commons

BY-NC-SA 4.0license.

Contents

  • 1 Introduction
    • 1.1 Requirements
    • 1.2 Prior Test
  • 2 The Custom Spells Snippet
  • 3 Tuning the Essentials
    • 3.1 Spell Tuning
    • 3.2 Unlock Loot Tuning
    • 3.3 Magic Tome
      • 3.3.1 Setting the object tuning
      • 3.3.2 Creating the magic tome object.
  • 4 Advanced Tuning
    • 4.1 Wild Magic
    • 4.2 Witch Interactions.
  • 5 Last Remarks
    • 5.1 Distributing your Mod.
    • 5.2 Troubleshooting
  • 6 Acknowledgements

1 Introduction

Hello, fellow creators and Simmers! In this tutorial, I will explain how to create

a custom spell that Spellcasters (as introduced in The Sims 4 Realm of Magic)

can learn and cast. To accomplish this we will use my Spellbook Injector, a mod

that allows CC creators to load custom spells into the game. With this utility mod

we avoid directly overriding EAxian tuning, thus making sure that custom spells

made by different modders are compatible.

Moreover, the Spellbook Injector takes care of all the scripting, so you as a

modder don’t have to worry about any Python coding. Instead you can focus on

the more creative aspects of creating a custom spell.

If you are already experienced with XML tuning and have previously worked

with Sims 4 Studio, skip toThe Custom Spells Snippet. If you’re starting out, you

can follow this tutorial. But be aware that this presupposes some familiarity with

modding and it’s not a step-by-step guide for beginners. You should know how

to read tuning descriptions, edit tuning files, create string tables, and understand

some modding lingo.

Before we start, I will summarize what the Spellbook Injector (V1) actually

does:

  • injects custom spells to the spellbook
  • allows these spells to be learned randomly through one of the following in- teractions: - ”Ask to Teach Spell” - ”Duel for Knowledge” - ”Practice Magic”
  • makes custom magic tomes purchaseable in Caster’s Alley’s market stall
  • allows custom magic tomes to be found through the ”Search for Tomes” in- teraction
  • adds custom spells to the list of spells sages know by default
  • allows injection of potential outcomes that result from the Curse of Scram- bled Spells
  • allows injection of interactions that are exclusive to spellcasters

Suggestions for new features are always welcome. If you want to discuss a

new feature, feel free to contact me atMTS.

Requirements

To follow through this tutorial the following tools are essential:

  • The Sims 4 & The Sims 4 Realm of Magic
  • Spellbook Injector
  • Sims 4 Studio*

Prior Test

Now, before anything else, make sure the Spellbook Injector is working in your

game! Placer3m_spells_test.package(included in the main Spellbook Injector

download) in your ”Mods” folder and make sure the spell is properly loaded. It

shouldshowupinthePracticalMagicsectionofthespellbook, haveacorrespond-

ing tome available at the market stall, and be able to be learnt randomly through

a duel, asking a sage, or self-practice.

Figure 1. The test spell properly being displayed in the spellbook

*Note: In this tutorial I will use Sims 4 Studio, but the same results can be accomplished com- bining other tools, likes4peandscumbumbo’s XML extractor. Feel free to use the tools you are most comfortable with.

2 The Custom Spells Snippet

The Custom Spells Snippet is an XML resource (type0x7DF2169C) that indicates which spells are injected. It allows modders certain configuration. For instance, you can choose to which school of magic the spells belong to, whether they can be learnt randomly, or where to place their entries in the spellbook. Code 1is an example of the snippet used to load the test spell that comes with the main Spellbook Injector download.

1 2 <Ic=“CustomSpells"i=“snippet"m=“spellbook_injector.spells"n=“r3m: injector_Spells_Test"s=” 16105992914124029764 “> 3 <Ln=“spells”> 4 5 <Tn=“spell”>10744959535505960091 6 <Un=“injection_data”> 7 <En=“spellbook_category”>WITCH_PRACTICAL_SPELL 8 <Un=“learning”> 9 <Tn=“allow_from_cheat”>False 10 <Tn=“allow_from_duel”>True 11 <Tn=“allow_from_practice”>True 12 <Tn=“allow_from_sage”>True 13 <Vn=“magic_tome"t=“enabled”> 14 <Un=“enabled”> 15 <Tn=“definition”>15930086131719699027 16 <Tn=“can_be_bought”>True 17 <Tn=“can_be_found”>True 18 19 20 <Tn=“min_rank_to_learn”>1 21 <Tn=“unlock_loot”>3129225024296920805</ T> 22 23 <Tn=“sort_index”>-1 24 25 26 27

Code 1. Custom Spells Snippet of a test spell

Let’s start analyzing what each line of that code means. Keep in mind that this is also detailed in the TDESC that I have provided with this tutorial. The TDESC can be viewed withscumbumbo’s tuning description browseror opened in any text editor software; however, the former is highly recommended.

The first two important fields that need tuning are shown highlighted in ma- genta in the second line ofCode 2. These specify the name of your snippet and its instance ID in decimal format. The recommended format for the name is your modderaliasfollowedbyacolonfollowedbythenameofyourcustomresource. In this example, the name I set (r3m:injector_Spells_Test) has the following FNV hash0xDF83FB38E1523F44, whichcorrespondsto 16105992914124029764 inthedec- imal system and is used as the instance ID.

1 2 <Ic=“CustomSpells"i=“snippet"m=“spellbook_injector.spells"n=“r3m: injector_Spells_Test"s=” 16105992914124029764 “>

27

Code 2. The instance element of a Custom Spells Snippet

Let’s continue. Now we start a list ofspellsas shown inCode 3. Note that one injector resource can handle multiple spells. Each entry specifies aspelltuning andinjection_datadata. TheSpell Tuningresource has information about the spell’s display name, description, and interactions it unlocks to the Spellcaster. Creating such resource will be covered later on. For now, let’s say that our tuning alreadyexistsandthatitsinstanceIDis 10744959535505960091 (i.e.,0x951DC3C4AFC76C9B in hex format orr3m:spells_Test, unhashed). Note that the text in violet is a com- ment, which is optional but serves as a useful pointer in case we forget where the big number came from.

3 <Ln=“spells”> 4 5 <Tn=“spell”> 10744959535505960091 6 <Un=“injection_data”>

24 25 26

Code 3. An entry in the list ofspells

Inside theinjection_datatuple, we can specify thespellbook_categoryand sort_index(seeCode 4). The former places the spell in the appropriate section ofthespellbook, whilethelatterisusedasanindextosortthespells. Theavailable spell categories are:

  • WITCH_PRACTICAL_SPELL
  • WITCH_MISCHIEF_SPELL
  • WITCH_UNTAMED_SPELL

Spells are sorted by required rank level from 0 to 5, so it is recommended to match the sort index with your spell’s minimum required rank. However, you are free to specify any number. For instance, in this example the value of-1is used

to place the spell before all other entries. In a similar fashion, a value of 6 or more would result in the spell being the last entry of its corresponding section.

6 <Un=“injection_data”> 7 <En=“spellbook_category”>WITCH_PRACTICAL_SPELL

23 <Tn=“sort_index”>- 1 24

Code 4. Setting thespellbook_categoryandsort_indexfields

Thelearningtuple contains all the information regarding how a custom spell is learnt through the existing game methods. The names here are pretty self- explanatory. For instance, ifallow_from_duelis set toTrue, Sims will be able to learn the spell as a result of winning a Magic Duel.

A magic tome is optional (since I assume modders will want to create certain spells that are learned by other means). If themagic_tometunable isenabled, then you should specify the instance ID of the object, so it can be properly bought in Caster’s Alley or found randomly in the bookshelves of the Magic HQ. More de- tails about creating a custom tome can be found in theMagic Tomesection of chapter 3.

Finally, for all of these injections to work you need to create a custom loot. This tuning, which in the injector is set asunlock_loot, contains a list of actions that are applied to a Sim when they unlock the spell. It can include a notification, the reaction of your familiar, XP gain, and so on. But most importantly it should actually unlock the spell! Creating this loot is explained in theUnlock Loot Tuning section.

8 <Un=“learning”> 9 <Tn=“allow_from_cheat”>False 10 <Tn=“allow_from_duel”>True 11 <Tn=“allow_from_practice”>True 12 <Tn=“allow_from_sage”>True 13 <Vn=“magic_tome"t=“enabled”> 14 <Un=“enabled”> 15 <Tn=“definition”> 15930086131719699027 16 <Tn=“can_be_found”>True 17 18 19 <Tn=“min_rank_to_learn”> 1 20 <Tn=“unlock_loot”> 3129225024296920805 </ T> 21

Code 5. Tuning thelearningtuple

That’s mostly it for the injector snippet. There’s more options, which will be discussed inchapter 4, but what’s in here is already enough to inject a custom spell.

3 Tuning the Essentials

Besides the Custom Spells Snippet, there are four essential resources needed for

a custom spell: the spell tuning, the unlock loot tuning, the magic tome, and the

casting interactions. The first three will be covered here. I won’t be discussing in-

teractions because the creation of these depends entirely on what you want your

spell to actually do. You can follow EA’s spell interactions as a base or completely

stray away from them and do something different! It’s up to you as a modder.

Spell Tuning

First resource we need to create is a Spell Tuning (type0x1F3413D9). The easiest

way to do this is to open Sims 4 Studio and select theExtract Tuning…option un-

der theToolsmenu. You will be prompted with a new window (Figure 2) where

you are able to look for an existing tuning resource by name. Type ”spells_” and

scroll down until you see the spell entries. Select any one of them, but preferably

one that matches what your spell is going to target. For instance, if your spell tar-

gets Sims, then pick Strangeify (namedspells_Mischief_5_ChangeAppearance); if

your spell targets terrain, go for Herbio (spells_Practical_4_GrowPlant); and so

forth. Once you’ve made your choice, add the selected tuning to your package.

Two resources will be added: the actual Spell Tuning and a Sim Data resource.

First thing to do with these resources is to give them new instance IDs, so they

don’t override EA’s tuning. Open theHash Generatorunder theToolsmenu. A

new window (Figure 3) will pop up. Go to the Text input box and type the name of

your resource. The recommended format is:

modder_name:resource_name_with_no_spaces

The resource’s name can be anything, but being descriptive is always a good

idea. For instance, EA’s spells state the school of magic and rank required for

the spell. Once you’re done typing, copy the FNV64 hash, a 16-digit hexadeci-

mal number, and use it as instance ID for both the SimData and the Spell Tuning

resource.

The Sim Data resource will be left mostly untouched, we only need to change

its name and instance ID. Note that the group ID (0x003413C6) of this resource

should not be changed! For other custom tuning resources group0x80000000is

recommended.

Figure 2. Sims 4 Studio’sExport Tuning…window

Figure 3. Sims 4 Studio’sHash Generatorwindow

In the Spell Tuning resource we need to specify display data for our spell (de-

scription, name, tooltip*, icon) and references to the interactions it adds to Sims,

objects, or terrain. Check an example inCode 6. I have highlighted in magenta the

things that need tuning. Highlighted in violet are optional things like comments,

which can be useful guides when you come back to the project and want to know

what is what.

Unlock Loot Tuning

Nextup, wehavetocreateanActionTuningresource(type0x0C772E27). Theseare

also known as loots and they indicate a series of actions that usually take place

during or after an interaction. Such actions can include the addition or removal

of moodlets, traits, perks, skills, etc. Loots are how the game handles effects and

*Note: currently, I don’t know where the tooltip is actually displayed, so for now I’m reusing the

description’s key.

1 2 <Ic=“Spell"i=“spell"m=“spells.spells"n=“r3m:spells_Test"s=” 10744959535505960091 “> 3 <Vn="_display_data"t=“enabled”> 4 <Un=“enabled”> 5 <Vn=“instance_display_description"t=“enabled”> 6 <Tn=“enabled”> 0 x6A541506 7 8 <Vn=“instance_display_icon"t=“enabled”> 9 <Tn=“enabled"p=“InGame\UI\Icons\Debug\missing_image.png”>2f7d0004:00000000: 30 f0846c783606f9 10 11 <Vn=“instance_display_name"t=“enabled”> 12 <Tn=“enabled”> 0 xF3740099 13 14 <Vn=“instance_display_tooltip"t=“enabled”> 15 <Tn=“enabled”> 0 x6A541506 16 17 18 19 <Vn=“locked_description"t=“enabled”> 20 <Tn=“enabled”>0x475B13B6 21 22 <Ln=“tags”> 23 Spell_Magic 24 25 <Ln=“target_super_affordances”> 26 27 <Tn=“affordance”> 7073122034773905024 28 <Tn=“allow_self”>True 29 30 31

Code 6. Spell Tuning of a test spell

it is no different for spells. When Sims finish reading a magic tome, ask the sages, win duels, or practice magic, they receive a loot so they unlock (i.e., learn) a spell. This loot also makes them receive a notification, some XP, and a buff. Such loot is required by the Spellbook Injector script, so we must create one. As before, the easiest way to do so is to copy an existing one and modify it.

Once again open theExtract Tuning…window. This time we’ll be looking for resources named ”loot_Spells_LearnSpell”. Once you find one, add it to your package and change its name and instance ID. Now go to theXMLtab and look for the reference to the unlocked spell and change it to yours. Don’t forget to change the icon too! InCode 7, I’ve highlighted the relevant bits that need tuning.

Magic Tome

Note that, although this section resides in theTuning the Essentialschapter, a magic tome is not strictly required. You can have your spell be unlocked by other means, such as using an existing or custom object, interacting with a sage, or whatever your imagination conceives! If you’re interested in an example, jump to theWitch Interactionssection of chapter 4.

1 2 <Ic=“LootActions"i=“action"m=“interactions.utils.loot"n=“r3m: loot_Spells_LearnSpell_Test"s=” 3129225024296920805 “> 3 <Ln=“loot_actions”> 4 <Vt=“unlock_item”> 5 <Un=“unlock_item”> 6 <Vn=“notification"t=“enabled”> 7 <Un=“enabled”>

13 <Vn=“icon"t=“enabled”> 14 <Vn=“enabled"t=“resource_key”> 15 <Un=“resource_key”> 16 <Tn=“key"p=“InGame\UI\Icons\Debug\missing_image.png”>2f7d :00000000: 30 f0846c783606f9 17 18 19

54 55 56 <Vn=“unlock_item"t=“unlock_spell”> 57 <Tn=“unlock_spell”> 10744959535505960091 58 59 60

77 78

Code 7. Unlock loot tuning of a test spell (condensed)

SETTING THE OBJECT TUNING

First things first, let’s clone an Object Tuning. You know the drill by now,Extract Tuning…, lookfor”book_Spells_MagicTome,”addtothecurrentpackage, andchange the name and instance ID. One thing to note though, make sure to clone a tome of the same rank as your spell’s.

The Object Tuning stores information about the object, such as the interac- tions it provides. All magic tomes share the same reading interactions, but their Object Tuning resources have overrides that change the outcomes so the appro- priate spell is learned when the book is finished. We have to look for these refer- ences and change them to our own spell and unlock loot tuning. InCode 8, you can see an example of the things we should be changing. Keep in mind that— for the sake of space—I’ve only highlighted a couple of references. but there are several ones that need to be edited.

CREATING THE MAGIC TOME OBJECT

Once you’re done with magic tome’s Object Tuning, we have to create our spell’s magic tome object. For this, we will clone one of EA’s tomes. Open a new Sims 4 Studio window, and select ”Selective Clone” under the ”Object” button in the main menu. Now click that ”Object” button and you will be taken to a new window where all the EAxian objects are displayed.

1 2 <Ic=“GameObject"i=“object"m=“objects.game_object"n=“r3m:book_Spells_MagicTome_Test” s=” 6544584380148954400 “>

21 <Un="_components”> 22 <Vn=“affordance_tuning"t=“enabled”> 23 <Un=“enabled”> 24 <Ln=“affordance_map”> 25 26 <Tn=“key”>213494 27 <Un=“value”>

48 <Vn=“outcome"t=“single”> 49 <Un=“single”> 50 <Un=“actions”> 51 <Ln=“loot_list”> 52 3129225024296920805 53 54 55 56 57 <Ln=“tests”> 58 59 <Vt=“unlock_tracker”> 60 <Un=“unlock_tracker”> 61 <Tn=“invert”>True 62 <Vn=“tooltip"t=“enabled”> 63 <Tn=“enabled”>0x7A9DA38 64 65 <Vn=“unlock_item"t=“unlock_spell”> 66 <Tn=“unlock_spell”> 10744959535505960091 </T

67 68 69 70 71 72 73

Code 8. Object Tuning of a custom magic tome (condensed)

Tick the ”Show Debug Items” box and search for the word ”tome,” as shown in Figure 4. Pick the one you’d like to clone and proceed to the next step by clicking ”Next.” You will be prompted with a new window (as depicted inFigure 5) where you can choose which components to clone. The ”Selective Clone” option lets us clone only the relevant components we need, which saves space if we don’t want to edit the book’s textures.

For this tutorial, I want to re-use the original textures, so I will only keep the ”Models,” ”Definitions,” and ”Catalogs” boxes ticked. If you also want to have Sims 4 Studio create the string table for you, then tick ”Strings.” When you’re ready, click ”Ok,” name your file, and go to the ”Warehouse” tab. Find the Object Definition resource. Here we will add the name of our Object Tuning resource and its instance ID (seeFigure 6).

Figure 4. Looking for an existing magic tome to clone

Save the changes and that’s it! Now you can merge your packages. With a

properly tuned Custom Spells Snippet, your spell can now be found in the spell-

book and the tome should be purchasable at Caster’s Alley. Test it and if it seems

to be working move on to create the spell interactions! Start by looking at the

ones EA has provided.

Figure 5. Components of a selective clone

Figure 6. Changing the Tuning andTuningIdof an Object Definition resource

4 Advanced Tuning

Wild Magic

From time to time, Spellcasters will get random curses. These affect your Sim in

various ways, but one of special interest is the Curse of Scrambled Spells. Sims

afflicted with this curse will sometimes cast a different spell than the one they

were directed to. For instance, you click on a dirty spot on the floor, command

your Sim to cast Scruberoo, and then unexpectedly food appears!

How does that work? Each spell’s Interaction Tuning specifies a list of tested

outcomes. Usually there’s four outcomes: failure, regular success, charged suc-

cess, and wild magic. Which outcome is played depends on different tests, in-

cluding your Spellcaster’s charge and perks. However, the last outcome will only

play if your Sim has the Curse of Scrambled Spells. If this outcome is selected,

then the Sim is forced to run a new interaction that has more outcomes to choose

from. Each one of these corresponds to the existing spells. With the Spell Injec-

tor, you can inject your own tested outcome to this list, thereby allowing cursed

Sims to inadvertently cast your custom spell.

For my weather changing spell I included a new wild magic outcome, let’s see

how it is injected (go toCode 9). So first I open awild_magic_outcomeslist inside

theinjectiontuple. This list can have up to four entries, each one corresponding

to one magictarget. There are four of these:

  • SELF
  • SIM
  • OBJECT
  • TERRAIN

Choosetheonethatmakesthemostsense. Ifyourinteractionisusuallycasted

on objects, then go forOBJECT. If your interaction can have multiple kinds of tar-

gets, then don’t forget that you can specify one tested outcome for each type of

target! For the weather changing spell, the most sensible option is to pickTERRAIN.

But I could have gone forSIMand then instead of casting Strangeify, my cursed

Sim would start a blizzard.

1 2 <Ic=“CustomSpells"i=“snippet"m=“spellbook_injector.spells"n=“r3m: injector_Spells_WeatherControl"s=” 1765726968530848803 “> 3 <Ln=“spells”> 4 5 <Tn=“spell”>7848844030009302832 6 <Un=“injection_data”>

18 <Ln=“wild_magic_outcomes”> 19 20 <En=“target”>TERRAIN 21 <Un=“tested_outcome”> 22 <Ln=“potential_outcomes”>

121 122 <Ln=“tests”>

158 159 160 161 162 163 164 165

Code 9. Custom Spells Snippet of a weather changing spell (condensed)

Next, wedefineatested_outcometuplethatwillhavealistofpotential_outcomes and a list oftests. If the Sim passes all the tests, then one of the outcomes listed in the former list will be selected. What types of test you say? Well, EA has this system whereby most spells give a hidden buff to your Sim. This is a short-lived buff tagged internally as a casting buff. It basically acts as a marker to record which spell your Sim is currently casting. So the tests usually blacklist the rel- evant buff, that way your Sim will actually have a random outcome and not the correct one. In the case of the weather changing spell, I included 27 interactions (one for each weather, season, and forecast) and each one had a buff associated to it. This meant that my wild magic outcome test should blacklist all these buffs. See a snippet below:

122 <Ln=“tests”> 123 124 <Vt=“buff”> 125 <Un=“buff”> 126 <Ln=“blacklist”> 127 16001462242011192410 128 7934363374955374061

154 155 156 157 158

Code 10. List oftestsfor a spell’s wild magic outcome (condensed)

The outcomes in the list ofpotential_outcomesoffer complete freedom. What goes in here is completely up to the modder. Most of the wild magic outcomes defined by EA include an animation, a broadcaster to induce a reaction to nearby Sims, some loot actions, sometimes a visual effect, etc. This part is completely up to you, so I recommend checking the TDESC to see how to properly format your outcome.

Check out the exampleCode 11. I included an animation, a loot list, along with some basic extras and a response (not shown).

22 <Ln=“potential_outcomes”> 23 24 <Un=“outcome”> 25 <Vt=“enabled"n=“animation_ref”> 26 <Un=“enabled”> 27 <Tn=“factory”>221913 28 29

75 <Ln=“loot_list”> 76 17253107515801545331 77 12541968560462589371 78 16775301027292946378 79 216187 80

119 120 121

Code 11. List ofpotential_outcomesfor a spell’s wild magic outcome (condensed)

Witch Interactions

An additional feature of the Spellbook Injector is the ability to inject interactions that are exclusive to Spellcasters. This feature, named ”witch_interactions,” al- lows you to inject:

  • super_affordances, self interactions exclusive to the Spellcaster life state;
  • target_super_affordances, interactions that Spellcasters can use on a list of filtered objects;
  • actor_mixers, social interactions available exclusively to Spellcasters, e.g., ”Offer Rite of Ascension”; and
  • provided_actor_mixers, social interactions available to any Sim targeting a Spellcaster, e.g., ”Ask For Rite of Ascension”.

Here’s an example. Suppose we have a special spell that we don’t want Sims to be randomly learning from sages or duels. Instead, we set a specific object to allow Sims to learn it. This is possible with some configuration of the injector. In Code 12a new vampire spell is loaded. You should notice that this spell cannot be learned randomly and doesn’t even have a tome associated with it. However, I use thewitch_interactionsto inject a custom learning interaction to ”The Ultimate Vampire Compendium,” an object that has theFunc_VampireTome_Ultimatetag. This interaction will only be available to witches, so we don’t have to worry about human Sims having the option to pick up the book and learn a spell.

1 2 <Ic=“SpellInjector"i=“snippet"m=“spell_injector"n=“r3m:injector_Spells_Vampire"s=” 15747652439790158722 “> 3 <Ln=“spells”> 4 5 <Tn=“spell”>3446185963808978939 6 <Un=“injection_data”> 7 <En=“spell_category”>WITCH_UNTAMED_SPELL 8 <Un=“learning”> 9 <Tn=“allow_from_duel”>False 10 <Tn=“allow_from_practice”>False 11 <Tn=“allow_from_sage”>False 12 <Tn=“unlock_loot”>17947254246011745321 13 14 <Tn=“sort_index”>4 15 16 17 18 <Vn=“witch_interactions"t=“enabled”> 19 <Un=“enabled”> 20 <Ln=“target_super_affordances”> 21 22 <Tn=“affordance”>15431937082800123009 23 <Vn=“object_filter"t=“filter_by_tags”> 24 <Un=“filter_by_tags”> 25 <Ln=“tags”> 26 Func_VampireTome_Ultimate 27 28 29 30 31 32 33 34

Code 12. Spell Injector snippet of a vampire spell

The possibilities here are countless! Read the Spellbook Injector TDESC to see what object filtering options are available and let your imagination (and Spell- casters) run wild.

5 Last Remarks

Distributing your Mod

The main purpose of the Spellbook Injector is to serve as a utility to load custom

spells into the game and remove the burden of scripting from other creators. For

this reason, youDO NOThave to include the Spellbook Injector package or script

in your release. Instead, direct your users to download the latest version. I will

make sure to keep it updated for recent patches.

Troubleshooting

Here’s a checklist of things to be on the lookout for if your spell is not being loaded

correctly to the spellbook.

  • Make sure your game is up-to-date and the Spellbook Injector is compatible with that game version.
  • Make sure the Spellbook Injector is properly installed! Does the test spell work?
  • Check if there was aLastException.txtorspellbook_injector.loggener- ated by the game. These are found in your ”The Sims 4” folder.
  • Check if your Custom Spells snippet is well-formed. Some tuning errors can be caught by scumbumbo’s Tuning Error Notifier (now maintained by Nisa). You can find the latest version at the#mod_newschannel inDeaderpool’s Dis- cord server.

Ifyou’restillstuck, headtotheModdingDiscussionforumofModTheSimsand

start a new thread. Feel free to link it to me (via PM), so I can offer help if possible.

6 Acknowledgements

The Spellbook Injector would not have been possible without the support and in-

valuable help of some members of the modding community. I would like to thank:

  • scumbumbo, for developing so many useful tools for modders and for all the precious resources he has shared and spread all over the ModTheSims forums;
  • fetusdip, for the reload script;
  • Kutto, for thoroughly testing my Vampirify spell;
  • fellow creators at Deaderpool’s Discord, for their continuous support and sharing of modding knowledge; and
  • the team behind Sims 4 Studio.