Home > Mods > Packaging Your Mod for Release

Packaging Your Mod for Release

In this tutorial we’re going to take a look at how to go about packaging your mod up into a nice clean, professional, form for release to other players.

We’ll look at how to build a .DAZIP package, how to create custom String entries in our module’s Talk Table, and how to go about adding a custom Icon for our module as well.

Make Sure Your Mod is Ready for Release

Take the time to double and triple check everything. Make sure that the mod is really ready to go out the door. Test it out in every possible way you can think of, and take the time to go through your code and clean it all up. Make sure to remove any debug code that you had in place so that the player doesn’t end up seeing it.

Make sure you have done everything you can to make the mod as compatible as possible. Use custom event overrides or PRCSCR files to inject your mod without having to override core files if at all possible.

Double check that you either have a custom “core” file for your module, or that you’ve set it to not have a core file if one isn’t needed.

Creating Custom Strings

We’re going to touch on this a bit briefly here, and then look at it a bit more in depth later. Most games, including Dragon Age, use a concept of “String Tables” to store text in, rather than storing the text directly. The reason for this is it allows translations into other languages. Instead of setting say, Module Name, to “My Mod”, it is set to say, StringID 100. At runtime the game looks up into a “Talk Table” to find out what stringID 100 is. This way you can have multiple talk tables for multiple languages, but your module name will always be in slot 100.

What we need to do is make a couple custom strings for our module’s properties. Before we actually create the strings though, we need to talk briefly about String ID Ranges. Just like any other IDs we deal with, we need to try and ensure that our String IDs are unique amongst every other module out there, as well as unique to the base game. Now its obviously impossible to be 100% certain you have unique strings, but there are a couple things you can do to make it pretty likely. First off, you don’t want a string ID any lower than 610 million. Anything below that is reserved for the game’s use. Also, don’t just start at like 650 million, or 700 million, because nice numbers like this are likely to be used by other people who are lazy. What you want to do is try to generate some form of unique ID prefix that you can use on all your strings. What I recommend is something like using your initials converted to numbers, and then padded if needed to get to a number that is higher than 1billion. For example, my initial, JWV, would map to 102,322. I could then add 4 zeros to that and have 1,023,220,000. The point is try and come up with something that is more likely to be unique. Lastly, keep a text file or something to keep track of the IDs you use in each module. If you use 1,023,220,000 – 1,023,220,004 in one module, you want to make sure your next one starts at 1,023,220,005. So keep track. For module information you will only need two or three strings.

Once you have some system in place for your IDs, you need to tell the toolset what range this module will use. To do this open your module properties, and you will see three properties; StringID Begin, StringID End, StringID Last Used.

Set the beginning ID to the first ID you want this module to use, and set the “Last Used” to that number minus one. The reason for this is when you create your first string, the toolset looks at Last Used and adds one to it. You only set this the very first time. After that the toolset keeps track each time you create a new string. Now count off a few numbers, like I said for just module properties you only need a few strings, and set the StringID End value for the end of the range you want for this module.

Once you’ve done that go ahead and close the properties window. Now its time to create some strings. To do this, click on the TOOLS menu and choose STRING EDITOR. This will open the editor and load your module’s custom Talk Table, which initially will be empty.

Right click on some empty space, and choose INSERT -> INSERT STRING. This will bring up the String Edit Window.

You need to choose a String Type, which for module properties should be Module Localized Text, and then you can enter your string in the first large box. Go ahead and enter a “Display Name” for your module, then click OK.

That is really all there is to creating strings. Go ahead and create a couple more. You’ll want one for Module Description, and Publisher.

Once you have entered all your strings, you need to export the talk table. To do this, just go to TOOLS->EXPORT->EXPORT TALK TABLE. This will export three talk tables. The third table is the Core talk table, and must be deleted. This is extremely important, so I will say it again. You must delete the exported Core Talk Table. If you don’t, then when you run the game you will find all text has vanished!

Simply go to:
Documents\Bioware\Dragon Age\Packages\Core\Override\Toolsetexport
and delete the .tlk file.

Now, back in the toolset we need to assign our new strings to our module properties. Keeping the string editor open (so you can reference it), open your module properties. In the properties you will see that each string property has a StringID property as well. For example, you have Description which is greyed out, but right under it is DescriptionStringID which can be edited, and defaults to -1. Adding in your description is as simple as replacing that -1 with the StringID that you made for your description. Do this for DisplayName and Publisher as well. When you first enter the new IDs, the text won’t show up. Simply close the properties and re-open them, and then you will see the text. Make sure you put the right ones in the right spots. and then you are done with that.

Adding a Module Icon

The last thing we want to do is add a custom icon for our module. This of course isn’t a required step, but it makes it look nicer. If you don’t have any art skills you can always skip this step.

The icon is 128×128 in size, and must be saved as a non-compressed DDS file. Each image editing program will be a bit different, but when you save the DDS you should be given a choice of formats. Do not choose one of the “DXT” formats, as these can cause graphic glitches and even game crashes. Choose a standard ARGB format. You can edit/create DDS files in GIMP, Paint.net, Adobe Photoshop, and probably others. I use Photoshop with the NVidia plugins for DDS files.

This tutorial isn’t about creating the icon, but once you have the icon, you want to make sure everything is saved in the toolset and then close the toolset completely. The reason for this is the toolset tends to cache the game resources, and sometimes if you put your new icon in place the toolset just doesn’t see it. This will save you a lot of grief. Trust me.

Once you have exited the toolset, and created your icon in DDS format, you need to put the icon file in:
Documents\Bioware\Dragon Age\AddIns\[your_addin]\core\override

Then start the toolset back up, and load your module. Once you are back in the toolset, open your module properties and click the 3 dots next to the Icon property. This will open a resource chooser listing all Core Game Resources that are valid for icons. Find you file in the list and select it. You should now see your icon.

Major, major thanks to Pheelon for helping me get all the details with icons straight!

At this point you want to be sure you re-export your module XML files. I say its best to re-export all your module resources at this point just to be sure you didn’t miss anything.

Clean Up Export Directories

We know the toolset likes to export far more than is needed. Especially to packages/core/override. Go through all your export directories and make sure there is nothing there that doesn’t need to be there. While you’re at it, make sure you’ve dropped in all GDA files that need to be in place, and delete any backup files you may have there. Don’t forget to delete the Core Talk Table!

Create a .DAZIP

Once you have cleaned everything up, and there are no extra files laying about, it is time to package everything up into the DAZIP package that your players can use to install the mod. Click on TOOLS->BUILDER->BUILDER TO PLAYER PACKAGE. The first window that comes up is going to ask you to select a Manifest File. Just click CANCEL to skip that. Then the main window will load. This is a bit confusing at first, but if you look closely it is really just a list of all files in your mod, and showing the full path to each file. In this window you can de-select certain files you don’t want included in the package. I generally de-select the NSS files which are the source files for your scripts, and I de-select the manifest.xml as it doesn’t really do anything. In this window you can also do one more check to make sure it isn’t including any additional files it shouldn’t be, especially in packages/core/override/toolsetexport. Once you are happy with the choices, click OK. It will ask where you want to save the DAZIP, so specify a filename and location, and click OK again. It will then ask if you want to save the manifest, I always say NO. If you save the manifest you can use it in the future to pre-select all your checkmarks. I usually don’t bother, but it is up to you.

Making a Final Distribution Package

At this point you could say you are done. Just upload the DAZip to your mod website of choice. I however like to take it a step further. Recently I have started taking the DAZip file and creating a standard ZIP file with that and a readme.txt file. In the readme I give all the fun details of the mod, as well as installation instructions.

By zipping the DAZip and a Readme up together, you make it easier for users in the future who might forget how to install mods. All they have to do is unzip the archive and instructions are right there. It also cuts down on PMs from players asking what to do with the DAZip file 🙂

Advertisements
Categories: Mods
  1. Pheelon
    November 24, 2009 at 6:59 pm

    very nice Tutorial – as usual 🙂

    3 lil remarks on my part though:

    1) maybe change this “Documents\Bioware\Dragon Age\AddIns\\core\override”
    to something like: “Documents\Bioware\Dragon Age\AddIns\\core\override”

    2) you got a typo at the end (saLe the manifest)

    3) a note on the manifest matter though: saving the manifest can be usefull – as it stores the files you select to publish with your mod (and thus you can select the same file again next time you need to publish a new version and just add any files that are new) – can be quite handy if your project gets larger.

  2. John Vanderbeck
    November 24, 2009 at 7:06 pm

    Bah..thats supposed to say AddIns\your_addins with brackets..the sofwtare is extracting it thinking its HTML. Let me fix that.

    • Pheelon
      November 24, 2009 at 7:16 pm

      ahh, lol just seeing that my brackets are gone too /o\

  3. November 25, 2009 at 6:24 am

    Great tutorial! Thanks a lot! 🙂

    Would it be possible to see a tutorial which explain how to translate the MOD in different languages?

  4. Innodil
    November 25, 2009 at 7:58 am

    copy your *.tlk file, append the locale you want on the filename, open it in toolset and translate all string. sav, export, you’re done..

    e.G.: inno_pp_en-us.tlk is my “english”/default talk table
    inno_pp_nl-be.tlk would be my “Belgian dutch” talk table
    inno_pp_de-de.tlk would be my german talk table

    etc….

  5. Stephen Hansen
    December 1, 2009 at 3:45 pm

    Testing?

    Do you have a recommended method of going out and -testing- your mod after you generate a dazip? I don’t quite like just sending things out and hoping they work 🙂 But since the toolset works directly “in” my Dragons Age installation, it seems difficult.

    I think? the only thing I can do is uninstall my pseudo-addin that the toolset made, and then install my new .dazip and see if things all work.

    • John Vanderbeck
      December 1, 2009 at 3:48 pm

      Originally I would backup my mod’s directory, then delete it, then hand edit the AddIns.xml file, then install the DAZIP to test. Until one day when I broke my AddIns.xml file :p

      Once DAModder is complete, the process will be a lot easier actually. Then you could just backup your mod’s directory, uninstall the mod with DAModder, then install the DAZip version.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: