Modding Overview & Index

modding

#1

Most of the user interface can be fully customized and a variety of third party mods are available. Links to other #modding topics, download sites and basic instructions are below, along with chat scripting and customization guides and some intro tutorial links for people interested in developing mods.
As with most games, use of mods is at your own risk.

Forum Topics

There is a #modding tag (shared with AoC, so check for the red tip), which I encourage people to make use of. Some mods have official topics for announcements and troubleshooting, which worked well in TSW so expect this list to expand.

Unoffical topics may not be followed by all the modders involved or have more general subject matter:

Downloads

Almost all mods are on one of these sites, or will be shortly:
Curseforge SWL: New or updated for SWL. Most have active developers.
Curseforge TSW: Old TSW mods. [SWL] tagged ones should work. Older ones may have compatibility issues. Most are not currently maintained.

Installing

Twitch/Curse client should now correctly install most mods on the SWL Curseforge site. It does seem to have issues remembering they’re installed and updating or uninstalling them later. Mods with chat scripts will require additional work, and waypoint packs and legacy mods require manual installation.

Mods Requiring Manual Intervention

Clockwatcher - External viewer app is packaged separately
Lassie’s Waypoints - Waypoint pack, installs to different location
TSWACT - Supporting chat scripts will need to be moved, and ACT is installed separately

Flash (UI) mods can be installed manually by unzipping into [GameDir]\Data\Gui\Custom\Flash\ and restarting the client. Some older mods include the Flash folder in the archive.
Full default install paths by client type:
Steam: C:\Program Files (x86)\Steam\steamapps\common\Secret World Legends\Data\Gui\Custom\Flash\
Funcom: C:\Program Files (x86)\Funcom\Secret World Legends\Data\Gui\Custom\Flash\

Any \scripts folder contains supporting chat scripts which should be moved to [GameDir]\scripts\. Waypoint packs install to %localappdata%\Funcom\SWL\Prefs\[username]\Waypoints\, and usually have more detailed instructions.

Troubleshooting

Modders are not perfect. We make mistakes, we don’t always test everything, and sometimes we have the API rug pulled up from under us and put down again backwards. If you do run into problems with a mod, we’ll do our best to try and fix things.

Common Fixes
  • Mod isn’t working (at all): Usually an install problem of some sort:
    • Downloaded from Github: Make sure you have a release download (should have a .swf file in it, if there’s lots of .as files you’ve probably got the source code from the big green button. :dragon: has misled you, pay no attention to the big green button, instead look for “:label: releases” just above the mostly red line)
    • Downloaded with Twitch: Should now be working, but some mods may need to be updated, and a few need manual installs anyway (check the list above).
    • Other solutions:
      • Double check install path(s): As a mod may have custom install requirements, check the paths in any provided readme, substituting Custom as needed on older mods.
      • Ensure there’s only one copy: The game gets right confused when it runs into two Modules.xml files defining the same thing, even if they are exactly the same.
      • Delete .bxml files: In some upgrade situations the game will use these cached copies and miss changes made in the xml files. This may cause a mod to stop working, or to fail to save/load settings as expected. Deleting these files forces the game to rebuild the cache from the provided xml files.
Troubleshooting 101
  • Update: Check to see if there’s a more recent version of any of your mods. It can be really easy to miss a release. If you’re lucky your bug’s already been fixed, and there’s less work all around.
  • Reproduce: Try to find a method of forcing the bug to become obvious, preferably one that can be easilly done with a single person and doesn’t rely on random events. This will make everything much easier.
  • Isolate: Try to identify the source. Recently installed or updated mods are often good suspects, as are mods directly related to whatever is being buggy. Client updates have historically been quite good about not breaking mods, but do occasionally mess things up.
    • Disabling Mods: To avoid losing settings, disable mods by (temporarially) removing only the Modules.xml and Modules.bxml files. It may still be a good idea to backup the Prefs files, found in %localappdata%\Funcom\SWL in case something goes horribly wrong. If you have many mods, this may take some time, as the client will need to be closed and restarted with each change. To save time, it can be useful to do multiple mods at once while narrowing down the possibilities.
  • Report: Even if you can’t narrow it down completely the info is still helpful. Unknown problems are only fixed by accident. Try to be as detailed as possible A reliable method of reproduction is particularly helpful for actually tracking things down.
    • Maintained Mods: Most modders try to limit how many places they need to watch for their own sanity, so check the documentation. Official forum topics or the Curse or GitHub page are usually good. It may be possible to find some of us on discord in the modding channel or ingame, but messages there are more likely to be overlooked.
    • Unmaintained Mods: Most unmaintained mods are as is. The original devs are no longer active and many did not release their source code or distribution options. While there are methods of patching mods after the fact, they are all somewhat difficult to do cleanly. Regardlesss, if you run into a serious bug with one of these, make a post about it (tagging #modding would make it more obvious) and we’ll try to work out if it’s worth patching or rewriting the mod.
    • Unknown Mod: Sometimes it’s hard to find specific mods that are causing a bug. Often these sorts of issues end up in the Bug Reports forum with a dev failing to reproduce it on a stock client. We don’t like hearing about bugs in our mods from devs, it means that they were spending time analyzing and debugging our mess instead of working on new content and fixing bugs we can’t touch. If you suspect that a mod may be responsible, add the #modding tag to the topic and we’ll see if we can save them the work. Providing the versions of any installed mods will give us something to work with (and the devs something to point fingers at).

Chat Scripts

Files in [GameDir]\scripts\ can be triggered by typing /[filename] into chat. The contents are processed and output to chat. Can create pop-up windows, run multiple chat commands, or just save some typing. Many chat commands are localized in the language used by the client, so a script that works for the English client may require some translation before it will work in a French or German client.

auto_login (no file type suffix) is a special chat script which will run when your character logs in. This is a good way to join custom channels without having to remember to do it manually.

Sample auto_login script, credit to Hatkake and Mr-Pyre from the legacy forums
# Hashmarked lines are comments
# Delay in case chat system hasn't finished setup
/delay 5000
# Log combat for ACT (unsure if localized)
/logcombat on
# Join custom chat channels (English client, see below for other languages)
/chat join Event
/chat join LFG
/chat join Sanctuary

If using a non-English client, replace /chat join with:

  • French: /discussion rejoindre
  • German: /chat beitreten

TSWDB has a chat scripting guide with further details and examples. The original auto_login script information, along with some localized emote scripts, are still available on the legacy forums. MorionR has collected some additional public chat channels that could be added if desired.

Other Tricks

For Modders

These may help with getting started, but there’s a lot of information that hasn’t made it into a centralized location (or even been written down). Discord usually has a few lurkers in the modding channel who can answer questions. Poke at the source code of similar mods, and don’t be afraid to experiment; The worst you can (probably) do is crash your game.

I think the post has been made a community wiki to keep editing unlocked, so feel free to add your projects into the lists, or correct/clarify my rambling. I’ll continue to keep an eye on things anyway.


UI modifications for agent system
#2

#4

#5

I wanted to share a technique I’ve been using, which allows mod authors to avoid needing to create Delegate.as, and edit Signal.as, etc.

ActionScript 2.0 has a little-known feature called “intrinsic class declarations”, which are very similar in concept to header files in C/C++. By adding the intrinsic keyword to a class declaration, you can compile a class with only its method signatures; the actual implementation of the class’s methods is expected to be provided by another SWF file at runtime.

What intrinsic class declarations allows us to do is compile against the class and method signatures of the Secret World Legends API, and automatically use the latest implementations provided by the game’s default UI at runtime. This also neatly avoids the various compilation errors which can arise when attempting to compile the API’s source code.

(One caveat is, intrinsic class declarations might not work if your mod replaces SWF files from the default UI, since a replaced SWF file might be the only SWF file which includes the actual implementation of a part of the API.)

Intrinsic class declarations can be automatically generated from source files using FlashDevelop’s Tools/igen/igen.exe. I also have intrinsic class declarations for the Secret World Legends API available as a repository on GitHub, for convenient inclusion as a submodule in mod projects. I’ve been using this submodule all along in my “Reticle HUD” mod.

I’ve also included intrinsic class declarations for Scaleform GFx, but I haven’t had the time to try and see whether this technique works for Scaleform GFx components too.


#6

Another tip I have to share, is how to use the default UI’s fonts in your mod projects.

All of the default UI’s fonts are embedded in Data/Gui/Default/Flash/gfxfontlib.swf. By adding this SWF file as an asset in your mod project, you can reference the default UI’s fonts in ActionScript (for TextFormat instances, etc.) using their symbol name.

The symbol name of a font is different from its actual name. You can see the symbol name of fonts contained in gfxfontlib.swf after adding it to your project, by expanding the “gfxfontlib.swf” file in the project panel, and then expanding the “Symbols” folder.

I’ve put together a table which matches the symbol name of each font to its actual name…

Symbol Name Font
_StandardFont Futura Std Book Fix
_StandardFont_bold Futura Heavy Fix (Bold)
_StandardFont_italic Futura Std Book Fix (Italic)
_Headline Futura Heavy Fix (Bold)
_TimerFont Russel Square Std
_ComputerTerminal OCR A Std