How to convert a replacer mod to .ssz format
Jan 15, 2016 19:25:36 GMT
janedew26, arrow2015, and 3 more like this
Post by eternity on Jan 15, 2016 19:25:36 GMT
This tutorial will teach you how convert "normal replacer mods" (non tpf mods) into "new character" mods (.ssz) that can be installed by SS Mod Installer.
Requeriments: a mod that have at least an .emo or .emb file; notepad++. (no, please, DON'T use the notepad that comes with windows to write the xml), and an archive program that can make .zip files (Winrar, winzip, 7-zip, etc).
The guide is primarily intended for modders wanting to create mods in .ssz format, but it could also be used for users that want to convert those mods to .ssz format if the modder doesn't provide one.
The guide will use as example converting "Evil Saga with god armor" to the ssz format.
SSZ Format
First of all. What are the .ssz files that SS Mod Installer uses? .ssz files are nothing more than .zip files renamed with the .ssz extension, with a .xml file inside called "sszmod.xml" with all the information needed to create the new character, the four main files of a character models (.emo, .emm, .emb and .2ry), and optionally a folder called "resource" that contains additional files in case the mod needs them (such as custom effects, etc)
In case you are wondering why I'm renaming an existing format extension, there are two good reasons (and none of them are "because it is cool"):
1: If the mods used the .zip extension, they would confuse users, because they would think they need to extract the .zip file. By using the .ssz extension, this prevents accidental extraction.
The problem becomes worse when you want to have a collection of mods in .zip format. Let's say I want to package all my Hildas in zip format. And the .zip containts several .ssz files inside.
That's fine, the user extracts that .zip and then install the .ssz files inside. Buf if I hadn't renamed the .extension, it would have been a .zip file with other .zip files inside, and the brains of most users would explode with that.
2: To distinguish the files from regular .zip files and have a dedicated extension. A regular .zip file may contain or not contain the xml, or other info. A .ssz is supossed to contain that info. This would prevent the user from trying to install .zip files that don't really contain mod information, the user will know that a mod is a mod for SS Mod Installer if it has the .ssz extension.
Step 1: preparing the main files
Create a folder somewhere and call it whatever you want. You will be using this folder for the rest of the guide.
Copy inside the .emo, .emb, .emm and .2ry of the mod. If your mod doesn't come with one of these files (for example, if your mod only replaces textures and only comes with an .emb), you can get the remaining files from the game files (extracted resource.cpk)
Remove the "_00", (or any other number from the file names). In our example, we rename the files SGG_00.emo, SGG_00.emm, SGG_00.emb and SGG_00.2ry to SGG.emo, SGG.emm, SGG.emb and SGG.2ry.
Step 2: writing the basic information of the xml
Open Notepad++ and create a new file (file->new). Before even doing anything, save the file as "sszmod.xml" in the folder where you have the other files.
Now go to encoding menu and set "Encode in UTF-8 without BOM".
Now paste the following text into the file:
Now I will be explaining every value with detail.
SSZ_FORMAT_VERSION: This is the version of the .ssz format. Put 2.0 here, which is the latest version.
This value serves two purposes:
- To avoid older version of SS Mod Installer from trying to install your mod (which may use features that are only available in a later version) and instead display a message about that.
- Thanks to this value, ssz mods installer can recognize new features in new versions without affecting compatibility with old mods.
So, when in doubt, just always specify what this guide tells you, which in this case is 2.31. (note: in some examples you will see 2.0, that's because they were done back then, but if you are reading this, you should set version to the latest!)
MOD_NAME: This is the name of your mod. This is not necessarily the name of the character (although usually you will want to call it like that). This value is only used by SS Mod Installer, to display that information to the user. This information will also be used in the machine-generated comments of the game xml files (cmn_model_spec.cms.xml, slots_data.slf.xml, etc). But it won't be used by the game at all. As of current version, there is no way to specify a specific new character name for the game. But in the feature, when this feature appears, it will use a separate value, not this one. This value will remain always only to identify the mod in a user-friendly form.
In our example, we write:
MOD_AUTHOR: If you're the author of the mod, you should put your name in there. Otherwise, put the name of the mod author.
In our example, we write:
MOD_VERSION: This is the version of the mod. Initially you would usually set it to 1.0 (although you may put whatever you want, like 199.0 ). And increase in the way you want in future versions. SS Mod Installer will use this information to let the user update the mod in the same slot they initially used. So it is important that you increase the value with every new version of your mod. How you increase it, is up to you.
In our example, we write:
MOD_GUID: This is a very important field. A guid is a 128 bits number used to uniquely identify something. In this case, SS Mod Installer identifies mods by the guid, not by the name (the name is purely cosmetic, for the user). For example, two modders may call their different mods "Black Pegasus", but it is the guid what SS Mod Installer uses to know they are actually different mods.
Go to this page and click on "generate some GUID". And just paste the value.
Whenever you update the same mod, you must keep the same guid. Otherwise, SS Mod Installer won't know it is a new version of the same mod. Of course, for every different mod (different character, even if it is is a different variant), you should use a different guid.
Please, don't have the "brilliant idea" of generating the guid yourself using something dumb like 0000000-0000-0000-0000-000000000000. Use the page provided to generate it.
In our example, we write:
CMS_ENTRY: Set this value to the same base name as your .emo/.emb/.emm/.2ry. In our example, this would be "SGG".
You may be tempted to write your own values that don't exist, like "EVIL_SAGA". Don't do that. This value must be an existing value. Like ATG, SEY, SGG, etc, which also matches an exiting folder name of the game. You should know two things:
1: whatever you specify here, it will be the folder where the installer will install your main files (emo, emb, emm, 2ry). (The final names of these ones are calculated by the installer, to avoid collision with game files or other mods).
2: The game will position itself in this directory when loading your character. This is important because some of the relative paths of the ModelSpec entry are relative to that folder.
Anyway, whatever you specify, it must match the name of the .emo/.emb/.emm/.2ry that you put in step 1.
But if that was too much info (sorry), just use this logic: "the mod had a file called DSE_03.emb" -> "DSE"; my mod had a file called "SNA_00" -> "SNA".
In our example, we write:
So, after finishing this step, our .xml file looks like this.
Step 3: writing the character info in the xml.
Now it is where we will write the real information that the game will use for our character. Don't worry, most of the time we will just be copy-pasting things from the game .xml files.
Step 3.1: the ModelSpec.
So,you may have noticed that folder called docs that is in SS Mod Installer directory. That folder contains original game files decompiled in .xml format and with some nice machine-generated comments. You should treat these files as if they were read-only, you won't modify anything in them, you will just be copy-pasting values from here to the sszmod.xml file, and any modifications will be done in your sszmod.xml file.
So, open the file cmn_model_spec.cms.xml, and search for your character model spec. If your replacer was replacing DSE_02, then search for "DSE_02". You will also find the original character name next to it. Select the full ModelSpec that is below. (this is anything from <ModelSpec> to </ModelSpec>, including both tags), and copy paste it to sszmod.xml. (just after the line of <CMS_ENTRY..., in a new line)
Now, let's remove some entries from here: remove "<EMO", "<EMB", "<EMM", "<TWORY", "<IDX" and "<MODEL_ID".
Let me explain why are removing these (and this explanation is also true for the next steps, for whenever I say to remove something). These all are entries that must be calculated by the installer, to avoid conflict with other mods and with vanilla characters. For example, the installer will chose the final name of the .emo, .emb, etc files by appending a number to it, and the installer will make sure it doesn't conflict with any other mods. And same goes for the other files, and most importantly, for IDX and MODEL_ID, which are two very fragile values that just can't be left to a human.
If you don't remove these, nothing will happen. The parser will ignore them anyway. But for the sake of not having things in the xml that are not gonna be used, we are removing them.
What can you customize from here? Well, remember the guide about changing the aura? You could do that here. Note, however, that the field "U_DC" is not longer there because it has been renamed as COSMO. We will not be doing it in our example, but if you want the cosmo and aura of other character for your new character, just find their values and put them here.
In the ModelSpec, we can also do some other things, like changing the effects, although that also needs you to put files in a resource folder.... but that will be addressed in Step 4.
So, after finishing this step, our xml looks like this.
Step 3.2: the ModelEntry
This time open the file chara_data.cdc.xml. Find like before the entry of the character in which yours was based. And copy paste from <ModelEntry to </ModelEntry>
Now delete the id= "..." thing, so that the line stays like "<ModelEntry>"
Remove the following lines: <CMS_ENTRY, <CMS_MODEL_SPEC_IDX, <U_14 and <IS_DLC
What can you customize from here? Really nothing... the values here may not be used, or if they are, they may not be used in all places (some of these values have "twins" in the Slot entry thaat are actually used, those will be discussed later).
So, after finishing this step, the xml in our example looks like this.
Step 3.3: the ModelPosEntry
This time, open the file CharacterSelectPosition.csp.xml. And like before, search for the entry of the character your one is based. Copy paste from <ModelPosEntry> to </ModelPosEntry>.
Remove <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
Now you may be wondering what is all this rubbish... well this file seems to control the position in which the character is when you select it. But also, apparently, it controls the position of the character in the fight. Chance are that some of these values are 3d coordinates.
It also controls the phrases that the character may say in selection screen, and at beginning of battle.
So far, the only documented value is SELECT_PHRASE_ID, which is the identifier ofthe phrase that the character says when he is selected.
So after finishing this step, the xml of our example looks so far like this.
Step 3.4: the ModelRpdEntry
And now, open the file ResultPositionData.rpd.xml. Like before, search for the charcter your one is based. And copy from <ModelRpdEntry to </ModelRpdEntry>
Like, it was done in the <ModelEntry> of step 3.2, remove the id="..." thing, leaving that line like "<ModelRpdEntry>"
Remove the lines <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
You may have noticed the <NAME field. Well, don't bother changing that. It seems that the game totally ignores that info, so just leave it like it was.
As for the rest of values, they are undocumented. The ModelRpdEntry controls the position of the character at the end of the battle. And apparently, it may also control their phrases. If you saw the video of "Overflow of Hildas", at the end of the video you could see Freya in a weird camera mode and not saying her line. That was caused, because back then, the rpd data wasn't being patched.
After finishing this step, the xml of our example looks so far like this.
Step 3.5: the Slot data.
So now open the file slots_data.slf.xml.
This file is actually a compendium of data that is stored inside the .exe (what I call "pre-baked") Some of the data is directly related with information associated to the slot, and other info is unrelated but I put everything together to avoid having infinite files. Don't worry about that, all that sh*t is handled by sssspatcher.
Just like before, search for the data of the chracters yours is based. And copy from <Slot> to </Slot>
Remove <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
So, what can you modify from here? You could change the "ICON_ID", "SIGN_NAME_ID", "SELECT_NAMES_ID", "ROBES_NAME_ID", "SELECT2_NAME_ID", "AVATAR_ID", "BATTLE_NAME_ID", "GWT_BANNER_NAME_ID", "GWT_BANNER_ID", "GWR_NAME_ID", "GWR_ICON_ID".
If you are gonna use a custom item (avatar, battle name, etc, that is discussed in Step 5), then that specific value here is not important, because sssspatcher will use the custom items. But otherwise, you should use the values here copied from other character. (in our example, we just use the normal god saga values, except for AVATAR_ID, ICON_ID, and GWR_ICON_ID: we are using the ones of helmetless gold Saga, aka SGA_00, because those are closer in aspect).
In case you wonder what are all these different things (battle name, select name, icon), they are explained in step 5. And if you wonder about the difference of ICON_ID, and GWR_ICON_ID, well, they are same image, but they have different id (ICON_ID is for selection screen and galaxian wars selection scree, and GWR_ICON_ID is used for icon in galaxian wars result).
And now an interesting field, the CATEGORIES. This controls how your character may be identified by other characters. The information may or may not be used at all places, but it is worh filling anyway. A character can belong to multiple categories, just put them separated by ",". Valid categories are all that you find in that file. You can't make your own category or anything like that.
The order doesn't matter at all.
When in doubt, consult the values of original characters. For example, notice how gold saints without gold armor are not in GOLD_ARMOR category. Or notice how gold saint spectres are in category "HADES_AND_SERVANTS", where Hades, Thanatos, Hypnos and the 3 judges are too.
In our example, we will add the GEMINI_EVIL_SAGA_SAINT category to the original values of God Gold Gemini. You can put any combination. If you want to say that your character is an Athena and and Hades, then so be it. As far as you use valid strings, the program will be fine, and sssspatcher will patch the lists that the game keeps for this information.
So, after finishing this step, our xml looks like this.
Step 3.6: the GpdEntry (optional)
This substep is optional. This substep will allow your characters to be selectable by the cpu for galaxian wars tournaments (as cpu participants).
If you don't do it, your characters won't be able to be selected for tournament by the cpu (it can still be used by human players, of course). That is perfectly normal, since there are also several vanilla characters that the game never chooses for tournaments.
Basically, the game keeps a list of characters that it can choose for each tournaments, and it randomly select 8-N (where N is the number of human players) from the list. Each one of the 48 tournaments has a separate list.
Open the file GW_POSITION_DATA.gpd.xml.
This file stores data related with the characters that the cpu can choose for galaxian wars tournaments. Initially, copy the GpdEntry from the character that yours is based. Delete the "id" next to GpdEntry, and also delete CMS_ENTRY, CMS_MODEL_SPEC_IDX and "U_00".
The others values are unknown (so just keep them like you copied them), but the real deal here is the GWD_TOURNAMENTS field. In this field, you put the names of the tournaments you want your character to be allowed to be selected by the cpu. There is a total of 48 tournaments in the game. You can specify any combination of them.
Anyway, please, use common sense to choose the tournaments. Take a look at other characters. Also, take a look at the file GW_DATA.gwd.xml. (That file is only provided for documentation, you don't have to copy anything from there. This file stores the opposite information, the list of characters that participate in each tournament, and it can be useful when choosing the tournaments.).
You may notice that several vanilla characters have an empty list there. That's normal, those are characters that can't be chosen by the cpu for tournament. (and there is more, there are some characters like Athena OCE that don't even have a GpdEntry! those can't be chosen by the cpu either).
But in your case, if you don't want your charcter to be chosen by the cpu in tournaments, just don't specify the GpdEntry at all, and it will be fine.
Otherwise, do it, and use common sense when choosing the tournaments. Don't just randomly add your character to all tournaments (that's allowed of course, but you should try to be consistent with the game).
Aaanyway, in our example, the values of the normal God Saga are fine. So we just would write:
<GpdEntry>
<F_08 value="-0.600000024" />
<F_0C value="-1.33000004" />
<F_10 value="-1.0" />
<F_14 value="-0.25" />
<U_18 value="0x18" />
<U_1C value="0x13b6" />
<U_20 value="0x0" />
<U_24 value="0x0" />
<U_28 value="0x0" />
<U_2C value="0x0" />
<U_30 value="0x0" />
<U_34 value="0x0" />
<U_38 value="0x0" />
<U_3C value="0x0" />
<GWD_TOURNAMENTS value="GOD_RESURRECTED_GOLDEN_COSMO, GOD_WINGED_FIGHTERS, GOD_FINAL_BATTLE" />
</GpdEntry>
And done. Don't forget that the minimum version to use this feature is 2.3.
Step 4: Adding additional files (optional)
Firstly, a philosophy lesson. The philosofy of new characters mod is to ADD, not REPLACE. Technically you could use the feature of ssz files that will be discused in this step, to replace existing files. But you shouldn't do it unless you have a valid reason, which in most case it won't be valid
So, just stick to add new files, when possible.
Let's say we want to make our Evil Saga God armor mod to have different visual effects than the original Saga God armor. This is not the case of my Evil Saga mod, but for the sake of this example, let's assume it is the case.
We could use the guide of netus01 to change color effects of VfxSGAEfct.emb.
But following our philosofy of ADD, not REPLACE, we would save the changes in a file that doesn't exist in vanilla game. For example VfxMyEvilSagaEfct.emb.
Then, in the folder where we have sszmod.xml, the emo, etc, we create a folder called resource. Then inside the resource folder, we create a folder called vfx. And inside vfx, we create a folder called CHARA (basically we reconstruct the game folder structure), and inside that, we put our VfxMyEvilSagaEfct.emb.
Now we must tell the game our character uses that file. Remember the beautiful ModelSpec that we added in step 3.1? So now, we change the <VFX line to
You could follow same logic to change other files, like the .tdb file (it contains the text the character says in battle), etc.
You can also find an example in my Pandora mod: my pandora needs a different fce file than Hilda. But as we don't want to overwrite Hilda one, I used this feature of .ssz mod to copy additional files, and I specified the .fce file in the FCE of <ModelSpec>
Basically: anything you have in the resource folder (if it exists) of your .ssz mod, the installer will blindly copy it to the resource folder of the game (except for empty folders). You could technically put the full game data in there, and the installer would copy it... but don't that
Step 5: adding extra game data: avatars, icons, and names (optional)
This step is divided into several sub-steps, for each item. Please note that not only this step is optional, but also every substep is optional and independent of each other. You could have avatars but not names, icons. Or have only names. Or have all. Or have nothing, any combination.
It is also worth to mention, that you should only use avatars/icons/names, etc if your character really needs a custom one. If your character has a item (avatar, icon, name, robes name, etc) identical to a vanilla character, you should just specify it in the <Slot> section of step 3.5. Otherwise, when you really need a new item, follow the substeps of this section.
Before starting with the substep, you should familiarize yourself with the naming convention that will be used in this section for every item. And for that, nothing better than images:
Step 5.1: avatar
If your mod needs a custom avatar, you can include one here. Note that if you just want your character to have one of the vanilla avatars, you shouldn't use this step. Instead just set the AVATAR_ID in the Slot entry.
Including an avatar is easy, just put the .dds file with the name "avatar.dds" in the same folder where you have the .emo, .emb, etc.
SS Mods Installer / sssspatcher don't check the format of the image, but remember that the game uses 256x256 files, in DX5 without mip maps, file size should be 65664 bytes.
Step 5.2: icon
If your mod needs a custom icon, add one (otherwise, set ICON_ID and GWR_ICON_ID in <Slot> section to those of a similar character and skip this step).
The icon is used in the places shown in the images: if your character is the first one instaled in one of the new extra slots (random slots), it will be used there. It will be used too in the selection screen of galaxian wars (see first image above), and in the result image of galaxian wars (see last image above)
So, the icon is actually two icons. One with a size of 42x42, and another with a size of 63x63. The format of both are in .dds file, with DX5 format and without mip maps. The file sizes of the .dds must be 2064 bytes for the small icon, and 4224 bytes for the big icon.
Both icons must be included: if you include the big one and not the small one, ssmins will complain. If you include the small but not the big one, ssmins will assume there is no icon.
The filenames should be icon_big.dds and icon_small.dds (in lower case), and should be put in the main folder of your mod. (where the .xml, .emo, etc are).
In the docs folder of SSMINS, you can see the original ones of the game extracted (note that those are in png, though).
Step 5.3: battle_name
The battle name is the name shown below the life bar in the battle. They are two textures (one aligned to left and another aligned to right), with a size of 384x60 (in the docs folder, you can see a png version of the ones used by the game, you could use them as reference to know the style and alignment, and to extract the letters).
The file format of texture is dds DX5 without mip maps.
For battle name right, it is suggested that after your're done creating the image, you copy paste it to a 1024x2048 transparent image. This is way to avoid a weird quality degradation that affects only the battle name right.
Of course, if your character doesn't need a new name, just use one of the available in the <BATTLE_NAME_ID of <Slot> entry and skip this step.
Otherwise, let's continue.
First, create a folder called "battle_name" in your mod main folder. And inside there, put your files like this:
left_EN.dds
right_EN.dds
left_SP.dds
right_SP.dds
left_IT.dds
right_IT.dds
....
and it is like that for the rest of languages that the game supports (JP = japansese, EN = english, FR = french, IT = italian, SP = spanish, BR = brazilian, NS = latin spanish, CH = chinese).
Note that the filenames are case-sensitive. The name of the language must be in upper case, and the rest in lower case.
Only the english language is mandatory. If you omit a language, sssspatcher will use the english one for that language. If you omit english language, SS Mods Installer will consider that your mod doesn't have battle names.
So, for example, if you include only english and french files, the english one will be used for all languages, except for french. You can have any number of language, provided that at least english one is there too. Both, left and right images must exist. If left image exists, but right doesn't ,ssmins will complain. If right image exists but left one doesn't, ssmins will ignore it.
Specific notes for spanish: since there are two different spanish in the game, if you are gonna include a spanish name, it would be advised that you provide a version for the other spanish too, usually you would just copy the same file with a different name.
Step 5.4: select_name
The select name is the character name you see in first image above. It is a 510x84 texture in DDS DX5 format without mip maps. File size should be 43136 bytes. You have png versions of the vanilla ones in the doc folder.
select_name textures go in a folder called cha_sel. Filenames are like this:
select_name_EN.dds
select_name_JP.dds
... etc for remaining languages.
The same considerations about languages that were explained in battle names apply here, so I won't repeat them.
Step 5.5: select2_name
The select2_name is the name you see in the galaxian wars selection, in the top-right corner (see first image above). They are 246x39 textures in dds DX5 without mip maps, and file size should be 10048 bytes. You can see the extracted vanilla ones in png format in the doc folder.
select2_name go in the folder cha_sel, with following names:
select2_name_EN.dds
select2_JP.dds
... etc for remaining languages
Same consideration about languages that were discuseed in battle name apply here too.
Please, look that the file name is select2_name_.., not select_name2. With my crystal ball I can already predict some people making this mistake.
Step 5.6: gw result name
The gw result name is the name that appears in the results of the galaxian wars tournament (see last image of the above)
It is a 384x60 texture, in dds DX5 format without mip maps. File size should be 23168 bytes. You have examples of vanilla ones in png format in the doc folder.
These ones go inside a folder called "gw". Filenames are like this:
result_name_EN.dds
result_name_JP.dds
... etc for remaining languages.
Same considerations about languages that were explained before remain true here.
Step 5.7: galaxian wars banner
The galaxian wars banner is... well, see the third image. It is a texture of 96x423 in dds DX5 wtihout mip maps. File size should be 40832 bytes. You have examples of vanilla ones (in png, though) in the doc folder.
These one go inside a folder called "gw". Filename is banner.dds
Step 5.8: galaxian wars banner name
The galaxian wars banner name is the name that the game renders inside the banner, but it is a separate texture, see third image. It is a texture of 48x384, dds DX5 without mip maps. You have examples of vanilla ones (in png) in the doc folder.
These ones also go inside a folder called "gw". Filenames are like this:
banner_name_EN.dds
banner_name_JP.dds
... etc for the rest of languages.
As always, same considerations about languages that were explained before apply here.
Step 5.9: sign name.
The sign name is... uhm, Aries, Taurus, Pegasus, Polaris, Megres, etc.
Before doing this step, please check if the name you want to use, exists here.
If it exists, you don't need to do this step, instead just use the code in the <Slot> section.
Otherwise, we can set a custom one here. Unlike previous texts, this one is actually plain text, not a texture, so this data goes in the .xml.
First of all: remember that at the beginning I told you to set the encoding in Notepad++ to UTF8? Well, if you didn't do it because you are not fuc*ing reading this, do it now, because it is now where this becomes more important.
Create a new section called <Text> in the xml, and terminated by </Text> (put it after </Slot>)
Now, the strings go like this (since in our example, Gemini already exists, we are gonna assume for the sake of the tutorial, that we want to set the sign name to "cockroach")
<SIGN_NAME_EN value="Cockroach" />
And it is like that for rest of the languages (<SIGN_NAME_SP, <SIGN_NAME_JP, etc) Same considerations about language that were discussed in battle_name apply here: only english is mandatory, if a language is not included, sssspatcher will use the information from the english one.
After following this step (and the next one) for english and the two spanish, our xml would look like this.
(Note: SIGN_NAME and ROBES_NAME are independent of each other, if you only need to set one of them, just omit the other, it is perfecly valid).
For exampe, this would be perfectly valid:
<Text>
<SIGN_NAME_EN value="Cockroach" />
<SIGN_NAME_SP value="Cucaracha" />
<SIGN_NAME_NS value="Cucaracha" />
</Text>
Step 5.10: robes name
Robes name are... the robes name. Like before, first look here to see if the robes name you want to specify exists there. If it does, omit this step and just set the id in <Slot> entry.
Otherwise, we set a custom one. For the sake of the example, we are gonna assume we want to make our Saga a steel saint... it is just for the sake of tutorial, since steel armors are robes that don't exist in game. This would look like this:
<ROBES_NAME_EN value="Steel armor" />
And etc for the remaining languages.
An example of how our xml would look like after following this (and previous) step for english and spanish language is here.
Like it was said in the above section, robes_name and sign_name are independent. If you only want to set robes_name but not sign_name, the next is perfectly valid:
<Text>
<ROBES_NAME_EN value="Steel armor" />
<ROBES_NAME_SP value="Armadura de acero" />
<ROBES_NAME_NS value="Armadura de acero" />
</Text>
Step 5.11: summary of files
This is not a real step, it is just a summary of how the file tree of a mod that uses all the features of the .ssz format, with absolutely all languages would look like, I hope it can help if you didn't get some point. (the + symbol indicates a directory, the -------- means that they are children of the previous directory)
+ resource (directory, optional)
-------- (other files or directories here, optional)
+ battle_name (directory, optional)
-------- left_EN.dds (file, optional)
-------- left_JP.dds (file, optional)
-------- left_SP.dds (file, optional)
-------- left_NS.dds (file, optional)
-------- left_IT.dds (file, optional)
-------- left_FR.dds (file, optional)
-------- left_CH.dds (file, optional)
-------- left_BR.dds (file, optional)
-------- right_EN.dds (file, optional)
-------- right_JP.dds (file, optional)
-------- right_SP.dds (file, optional)
-------- right_NS.dds (file, optional)
-------- right_IT.dds (file, optional)
-------- right_FR.dds (file, optional)
-------- right_CH.dds (file, optional)
-------- right_BR.dds (file, optional)
+ cha_sel (directory, optional)
-------- select_name_EN.dds (file, optional)
-------- select_name_JP.dds (file, optional)
-------- select_name_SP.dds (file, optional)
-------- select_name_NS.dds (file, optional)
-------- select_name_IT.dds (file, optional)
-------- select_name_FR.dds (file, optional)
-------- select_name_CH.dds (file, optional)
-------- select_name_BR.dds (file, optional)
-------- select2_name_EN.dds (file, optional)
-------- select2_name_JP.dds (file, optional)
-------- select2_name_SP.dds (file, optional)
-------- select2_name_NS.dds (file, optional)
-------- select2_name_IT.dds (file, optional)
-------- select2_name_FR.dds (file, optional)
-------- select2_name_CH.dds (file, optional)
-------- select2_name_BR.dds (file, optional)
+ gw (directory, optional)
-------- banner.dds (file, optional)
-------- banner_name_EN.dds (file, optional)
-------- banner_name_JP.dds (file, optional)
-------- banner_name_SP.dds (file, optional)
-------- banner_name_NS.dds (file, optional)
-------- banner_name_IT.dds (file, optional)
-------- banner_name_FR.dds (file, optional)
-------- banner_name_CH.dds (file, optional)
-------- banner_name_BR.dds (file, optional)
-------- result_name_EN.dds (file, optional)
-------- result_name_JP.dds (file, optional)
-------- result_name_SP.dds (file, optional)
-------- result_name_NS.dds (file, optional)
-------- result_name_IT.dds (file, optional)
-------- result_name_FR.dds (file, optional)
-------- result_name_CH.dds (file, optional)
-------- result_name_BR.dds (file, optional)
XXX.emo (file, mandatory)
XXX.emb (file, mandatory)
XXX.emm (file, mandatory)
XXX.2ry (file, mandatory)
sszmod.xml (file, mandatory)
avatar.dds (file, optional)
icon_big.dds (file, optional)
icon_small.dds (file, optional)
preview.png (file, optional)
And that's it. I know that I said it before, but I will repeat it here. File names are case-sensitive. They must be like they are shown here.
Step 6: adding a preview image (optional)
You can add a preview image to your mod, by including a file called "preview.png" in your package. This is totally optional.
SS Mods Installer will usually display the image with an aspect ratio of 1:2, this is, the height is the double of the width.
You should try to keep your image with that ratio, when possible. (for example, 419x838, 450x900, 540x1080, etc). It is not a strict requirement because the installer will stretch the image anyway, but the closer you are to the 1:2 aspect ratio, the less weird the image will look on both, the preview window and in the mods list preview.
Step 7: creating the zip and renaming it to .ssz.
This step will use WinRAR as example, but it is similar in other programs. Select all your files in the file explorer: the .emo, the .emb, the .emm, the .2ry, sszmod.xml, and, if they exist, the resource folder, the preview.png file, and all other optional files or folder you may have, and click right button and select "Add to archive..." (not add to "XXX.rar" or "XXX.7z) In the window that it pops up, select .zip as format (not rar, .7z or anything else). Use the name you want for the file, but make sure to put the .ssz extension instead of .zip.
And that's it. your mod is ready to deploy. Just make sure to test it before uploading it, you may have made some silly mistake in the way.
(Please, don't compress the outer folder where your files are, instead you must select all the files like I said in this step, I can foresee that this will be a very tipical mistake).
Requeriments: a mod that have at least an .emo or .emb file; notepad++. (no, please, DON'T use the notepad that comes with windows to write the xml), and an archive program that can make .zip files (Winrar, winzip, 7-zip, etc).
The guide is primarily intended for modders wanting to create mods in .ssz format, but it could also be used for users that want to convert those mods to .ssz format if the modder doesn't provide one.
The guide will use as example converting "Evil Saga with god armor" to the ssz format.
SSZ Format
First of all. What are the .ssz files that SS Mod Installer uses? .ssz files are nothing more than .zip files renamed with the .ssz extension, with a .xml file inside called "sszmod.xml" with all the information needed to create the new character, the four main files of a character models (.emo, .emm, .emb and .2ry), and optionally a folder called "resource" that contains additional files in case the mod needs them (such as custom effects, etc)
In case you are wondering why I'm renaming an existing format extension, there are two good reasons (and none of them are "because it is cool"):
1: If the mods used the .zip extension, they would confuse users, because they would think they need to extract the .zip file. By using the .ssz extension, this prevents accidental extraction.
The problem becomes worse when you want to have a collection of mods in .zip format. Let's say I want to package all my Hildas in zip format. And the .zip containts several .ssz files inside.
That's fine, the user extracts that .zip and then install the .ssz files inside. Buf if I hadn't renamed the .extension, it would have been a .zip file with other .zip files inside, and the brains of most users would explode with that.
2: To distinguish the files from regular .zip files and have a dedicated extension. A regular .zip file may contain or not contain the xml, or other info. A .ssz is supossed to contain that info. This would prevent the user from trying to install .zip files that don't really contain mod information, the user will know that a mod is a mod for SS Mod Installer if it has the .ssz extension.
Step 1: preparing the main files
Create a folder somewhere and call it whatever you want. You will be using this folder for the rest of the guide.
Copy inside the .emo, .emb, .emm and .2ry of the mod. If your mod doesn't come with one of these files (for example, if your mod only replaces textures and only comes with an .emb), you can get the remaining files from the game files (extracted resource.cpk)
Remove the "_00", (or any other number from the file names). In our example, we rename the files SGG_00.emo, SGG_00.emm, SGG_00.emb and SGG_00.2ry to SGG.emo, SGG.emm, SGG.emb and SGG.2ry.
Step 2: writing the basic information of the xml
Open Notepad++ and create a new file (file->new). Before even doing anything, save the file as "sszmod.xml" in the folder where you have the other files.
Now go to encoding menu and set "Encode in UTF-8 without BOM".
Now paste the following text into the file:
<?xml version="1.0" encoding="utf-8"?>
<SSZ>
<SSZ_FORMAT_VERSION value="2.31" />
<MOD_NAME value="" />
<MOD_AUTHOR value="" />
<MOD_VERSION value="" />
<MOD_GUID value="" />
<CMS_ENTRY value="" />
</SSZ>
Now I will be explaining every value with detail.
SSZ_FORMAT_VERSION: This is the version of the .ssz format. Put 2.0 here, which is the latest version.
This value serves two purposes:
- To avoid older version of SS Mod Installer from trying to install your mod (which may use features that are only available in a later version) and instead display a message about that.
- Thanks to this value, ssz mods installer can recognize new features in new versions without affecting compatibility with old mods.
So, when in doubt, just always specify what this guide tells you, which in this case is 2.31. (note: in some examples you will see 2.0, that's because they were done back then, but if you are reading this, you should set version to the latest!)
MOD_NAME: This is the name of your mod. This is not necessarily the name of the character (although usually you will want to call it like that). This value is only used by SS Mod Installer, to display that information to the user. This information will also be used in the machine-generated comments of the game xml files (cmn_model_spec.cms.xml, slots_data.slf.xml, etc). But it won't be used by the game at all. As of current version, there is no way to specify a specific new character name for the game. But in the feature, when this feature appears, it will use a separate value, not this one. This value will remain always only to identify the mod in a user-friendly form.
In our example, we write:
<MOD_NAME value="Evil Saga with God armor" />
MOD_AUTHOR: If you're the author of the mod, you should put your name in there. Otherwise, put the name of the mod author.
In our example, we write:
<MOD_AUTHOR value="eternity" />
MOD_VERSION: This is the version of the mod. Initially you would usually set it to 1.0 (although you may put whatever you want, like 199.0 ). And increase in the way you want in future versions. SS Mod Installer will use this information to let the user update the mod in the same slot they initially used. So it is important that you increase the value with every new version of your mod. How you increase it, is up to you.
In our example, we write:
<MOD_VERSION value="1.0" />
MOD_GUID: This is a very important field. A guid is a 128 bits number used to uniquely identify something. In this case, SS Mod Installer identifies mods by the guid, not by the name (the name is purely cosmetic, for the user). For example, two modders may call their different mods "Black Pegasus", but it is the guid what SS Mod Installer uses to know they are actually different mods.
Go to this page and click on "generate some GUID". And just paste the value.
Whenever you update the same mod, you must keep the same guid. Otherwise, SS Mod Installer won't know it is a new version of the same mod. Of course, for every different mod (different character, even if it is is a different variant), you should use a different guid.
Please, don't have the "brilliant idea" of generating the guid yourself using something dumb like 0000000-0000-0000-0000-000000000000. Use the page provided to generate it.
In our example, we write:
<MOD_GUID value="0a363ca3-b8b7-4fd7-b45f-800ed792f70b" />
CMS_ENTRY: Set this value to the same base name as your .emo/.emb/.emm/.2ry. In our example, this would be "SGG".
You may be tempted to write your own values that don't exist, like "EVIL_SAGA". Don't do that. This value must be an existing value. Like ATG, SEY, SGG, etc, which also matches an exiting folder name of the game. You should know two things:
1: whatever you specify here, it will be the folder where the installer will install your main files (emo, emb, emm, 2ry). (The final names of these ones are calculated by the installer, to avoid collision with game files or other mods).
2: The game will position itself in this directory when loading your character. This is important because some of the relative paths of the ModelSpec entry are relative to that folder.
Anyway, whatever you specify, it must match the name of the .emo/.emb/.emm/.2ry that you put in step 1.
But if that was too much info (sorry), just use this logic: "the mod had a file called DSE_03.emb" -> "DSE"; my mod had a file called "SNA_00" -> "SNA".
In our example, we write:
<CMS_ENTRY value="SGG" />
So, after finishing this step, our .xml file looks like this.
Step 3: writing the character info in the xml.
Now it is where we will write the real information that the game will use for our character. Don't worry, most of the time we will just be copy-pasting things from the game .xml files.
Step 3.1: the ModelSpec.
So,you may have noticed that folder called docs that is in SS Mod Installer directory. That folder contains original game files decompiled in .xml format and with some nice machine-generated comments. You should treat these files as if they were read-only, you won't modify anything in them, you will just be copy-pasting values from here to the sszmod.xml file, and any modifications will be done in your sszmod.xml file.
So, open the file cmn_model_spec.cms.xml, and search for your character model spec. If your replacer was replacing DSE_02, then search for "DSE_02". You will also find the original character name next to it. Select the full ModelSpec that is below. (this is anything from <ModelSpec> to </ModelSpec>, including both tags), and copy paste it to sszmod.xml. (just after the line of <CMS_ENTRY..., in a new line)
Now, let's remove some entries from here: remove "<EMO", "<EMB", "<EMM", "<TWORY", "<IDX" and "<MODEL_ID".
Let me explain why are removing these (and this explanation is also true for the next steps, for whenever I say to remove something). These all are entries that must be calculated by the installer, to avoid conflict with other mods and with vanilla characters. For example, the installer will chose the final name of the .emo, .emb, etc files by appending a number to it, and the installer will make sure it doesn't conflict with any other mods. And same goes for the other files, and most importantly, for IDX and MODEL_ID, which are two very fragile values that just can't be left to a human.
If you don't remove these, nothing will happen. The parser will ignore them anyway. But for the sake of not having things in the xml that are not gonna be used, we are removing them.
What can you customize from here? Well, remember the guide about changing the aura? You could do that here. Note, however, that the field "U_DC" is not longer there because it has been renamed as COSMO. We will not be doing it in our example, but if you want the cosmo and aura of other character for your new character, just find their values and put them here.
In the ModelSpec, we can also do some other things, like changing the effects, although that also needs you to put files in a resource folder.... but that will be addressed in Step 4.
So, after finishing this step, our xml looks like this.
Step 3.2: the ModelEntry
This time open the file chara_data.cdc.xml. Find like before the entry of the character in which yours was based. And copy paste from <ModelEntry to </ModelEntry>
Now delete the id= "..." thing, so that the line stays like "<ModelEntry>"
Remove the following lines: <CMS_ENTRY, <CMS_MODEL_SPEC_IDX, <U_14 and <IS_DLC
What can you customize from here? Really nothing... the values here may not be used, or if they are, they may not be used in all places (some of these values have "twins" in the Slot entry thaat are actually used, those will be discussed later).
So, after finishing this step, the xml in our example looks like this.
Step 3.3: the ModelPosEntry
This time, open the file CharacterSelectPosition.csp.xml. And like before, search for the entry of the character your one is based. Copy paste from <ModelPosEntry> to </ModelPosEntry>.
Remove <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
Now you may be wondering what is all this rubbish... well this file seems to control the position in which the character is when you select it. But also, apparently, it controls the position of the character in the fight. Chance are that some of these values are 3d coordinates.
It also controls the phrases that the character may say in selection screen, and at beginning of battle.
So far, the only documented value is SELECT_PHRASE_ID, which is the identifier ofthe phrase that the character says when he is selected.
So after finishing this step, the xml of our example looks so far like this.
Step 3.4: the ModelRpdEntry
And now, open the file ResultPositionData.rpd.xml. Like before, search for the charcter your one is based. And copy from <ModelRpdEntry to </ModelRpdEntry>
Like, it was done in the <ModelEntry> of step 3.2, remove the id="..." thing, leaving that line like "<ModelRpdEntry>"
Remove the lines <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
You may have noticed the <NAME field. Well, don't bother changing that. It seems that the game totally ignores that info, so just leave it like it was.
As for the rest of values, they are undocumented. The ModelRpdEntry controls the position of the character at the end of the battle. And apparently, it may also control their phrases. If you saw the video of "Overflow of Hildas", at the end of the video you could see Freya in a weird camera mode and not saying her line. That was caused, because back then, the rpd data wasn't being patched.
After finishing this step, the xml of our example looks so far like this.
Step 3.5: the Slot data.
So now open the file slots_data.slf.xml.
This file is actually a compendium of data that is stored inside the .exe (what I call "pre-baked") Some of the data is directly related with information associated to the slot, and other info is unrelated but I put everything together to avoid having infinite files. Don't worry about that, all that sh*t is handled by sssspatcher.
Just like before, search for the data of the chracters yours is based. And copy from <Slot> to </Slot>
Remove <CMS_ENTRY and <CMS_MODEL_SPEC_IDX.
So, what can you modify from here? You could change the "ICON_ID", "SIGN_NAME_ID", "SELECT_NAMES_ID", "ROBES_NAME_ID", "SELECT2_NAME_ID", "AVATAR_ID", "BATTLE_NAME_ID", "GWT_BANNER_NAME_ID", "GWT_BANNER_ID", "GWR_NAME_ID", "GWR_ICON_ID".
If you are gonna use a custom item (avatar, battle name, etc, that is discussed in Step 5), then that specific value here is not important, because sssspatcher will use the custom items. But otherwise, you should use the values here copied from other character. (in our example, we just use the normal god saga values, except for AVATAR_ID, ICON_ID, and GWR_ICON_ID: we are using the ones of helmetless gold Saga, aka SGA_00, because those are closer in aspect).
In case you wonder what are all these different things (battle name, select name, icon), they are explained in step 5. And if you wonder about the difference of ICON_ID, and GWR_ICON_ID, well, they are same image, but they have different id (ICON_ID is for selection screen and galaxian wars selection scree, and GWR_ICON_ID is used for icon in galaxian wars result).
And now an interesting field, the CATEGORIES. This controls how your character may be identified by other characters. The information may or may not be used at all places, but it is worh filling anyway. A character can belong to multiple categories, just put them separated by ",". Valid categories are all that you find in that file. You can't make your own category or anything like that.
The order doesn't matter at all.
When in doubt, consult the values of original characters. For example, notice how gold saints without gold armor are not in GOLD_ARMOR category. Or notice how gold saint spectres are in category "HADES_AND_SERVANTS", where Hades, Thanatos, Hypnos and the 3 judges are too.
In our example, we will add the GEMINI_EVIL_SAGA_SAINT category to the original values of God Gold Gemini. You can put any combination. If you want to say that your character is an Athena and and Hades, then so be it. As far as you use valid strings, the program will be fine, and sssspatcher will patch the lists that the game keeps for this information.
So, after finishing this step, our xml looks like this.
Step 3.6: the GpdEntry (optional)
This substep is optional. This substep will allow your characters to be selectable by the cpu for galaxian wars tournaments (as cpu participants).
If you don't do it, your characters won't be able to be selected for tournament by the cpu (it can still be used by human players, of course). That is perfectly normal, since there are also several vanilla characters that the game never chooses for tournaments.
Basically, the game keeps a list of characters that it can choose for each tournaments, and it randomly select 8-N (where N is the number of human players) from the list. Each one of the 48 tournaments has a separate list.
Open the file GW_POSITION_DATA.gpd.xml.
This file stores data related with the characters that the cpu can choose for galaxian wars tournaments. Initially, copy the GpdEntry from the character that yours is based. Delete the "id" next to GpdEntry, and also delete CMS_ENTRY, CMS_MODEL_SPEC_IDX and "U_00".
The others values are unknown (so just keep them like you copied them), but the real deal here is the GWD_TOURNAMENTS field. In this field, you put the names of the tournaments you want your character to be allowed to be selected by the cpu. There is a total of 48 tournaments in the game. You can specify any combination of them.
Anyway, please, use common sense to choose the tournaments. Take a look at other characters. Also, take a look at the file GW_DATA.gwd.xml. (That file is only provided for documentation, you don't have to copy anything from there. This file stores the opposite information, the list of characters that participate in each tournament, and it can be useful when choosing the tournaments.).
You may notice that several vanilla characters have an empty list there. That's normal, those are characters that can't be chosen by the cpu for tournament. (and there is more, there are some characters like Athena OCE that don't even have a GpdEntry! those can't be chosen by the cpu either).
But in your case, if you don't want your charcter to be chosen by the cpu in tournaments, just don't specify the GpdEntry at all, and it will be fine.
Otherwise, do it, and use common sense when choosing the tournaments. Don't just randomly add your character to all tournaments (that's allowed of course, but you should try to be consistent with the game).
Aaanyway, in our example, the values of the normal God Saga are fine. So we just would write:
<GpdEntry>
<F_08 value="-0.600000024" />
<F_0C value="-1.33000004" />
<F_10 value="-1.0" />
<F_14 value="-0.25" />
<U_18 value="0x18" />
<U_1C value="0x13b6" />
<U_20 value="0x0" />
<U_24 value="0x0" />
<U_28 value="0x0" />
<U_2C value="0x0" />
<U_30 value="0x0" />
<U_34 value="0x0" />
<U_38 value="0x0" />
<U_3C value="0x0" />
<GWD_TOURNAMENTS value="GOD_RESURRECTED_GOLDEN_COSMO, GOD_WINGED_FIGHTERS, GOD_FINAL_BATTLE" />
</GpdEntry>
And done. Don't forget that the minimum version to use this feature is 2.3.
Step 4: Adding additional files (optional)
Firstly, a philosophy lesson. The philosofy of new characters mod is to ADD, not REPLACE. Technically you could use the feature of ssz files that will be discused in this step, to replace existing files. But you shouldn't do it unless you have a valid reason, which in most case it won't be valid
So, just stick to add new files, when possible.
Let's say we want to make our Evil Saga God armor mod to have different visual effects than the original Saga God armor. This is not the case of my Evil Saga mod, but for the sake of this example, let's assume it is the case.
We could use the guide of netus01 to change color effects of VfxSGAEfct.emb.
But following our philosofy of ADD, not REPLACE, we would save the changes in a file that doesn't exist in vanilla game. For example VfxMyEvilSagaEfct.emb.
Then, in the folder where we have sszmod.xml, the emo, etc, we create a folder called resource. Then inside the resource folder, we create a folder called vfx. And inside vfx, we create a folder called CHARA (basically we reconstruct the game folder structure), and inside that, we put our VfxMyEvilSagaEfct.emb.
Now we must tell the game our character uses that file. Remember the beautiful ModelSpec that we added in step 3.1? So now, we change the <VFX line to
<VFX value="VfxMyEvilSagaEfct.emb" />
You could follow same logic to change other files, like the .tdb file (it contains the text the character says in battle), etc.
You can also find an example in my Pandora mod: my pandora needs a different fce file than Hilda. But as we don't want to overwrite Hilda one, I used this feature of .ssz mod to copy additional files, and I specified the .fce file in the FCE of <ModelSpec>
Basically: anything you have in the resource folder (if it exists) of your .ssz mod, the installer will blindly copy it to the resource folder of the game (except for empty folders). You could technically put the full game data in there, and the installer would copy it... but don't that
Step 5: adding extra game data: avatars, icons, and names (optional)
This step is divided into several sub-steps, for each item. Please note that not only this step is optional, but also every substep is optional and independent of each other. You could have avatars but not names, icons. Or have only names. Or have all. Or have nothing, any combination.
It is also worth to mention, that you should only use avatars/icons/names, etc if your character really needs a custom one. If your character has a item (avatar, icon, name, robes name, etc) identical to a vanilla character, you should just specify it in the <Slot> section of step 3.5. Otherwise, when you really need a new item, follow the substeps of this section.
Before starting with the substep, you should familiarize yourself with the naming convention that will be used in this section for every item. And for that, nothing better than images:
Step 5.1: avatar
If your mod needs a custom avatar, you can include one here. Note that if you just want your character to have one of the vanilla avatars, you shouldn't use this step. Instead just set the AVATAR_ID in the Slot entry.
Including an avatar is easy, just put the .dds file with the name "avatar.dds" in the same folder where you have the .emo, .emb, etc.
SS Mods Installer / sssspatcher don't check the format of the image, but remember that the game uses 256x256 files, in DX5 without mip maps, file size should be 65664 bytes.
Step 5.2: icon
If your mod needs a custom icon, add one (otherwise, set ICON_ID and GWR_ICON_ID in <Slot> section to those of a similar character and skip this step).
The icon is used in the places shown in the images: if your character is the first one instaled in one of the new extra slots (random slots), it will be used there. It will be used too in the selection screen of galaxian wars (see first image above), and in the result image of galaxian wars (see last image above)
So, the icon is actually two icons. One with a size of 42x42, and another with a size of 63x63. The format of both are in .dds file, with DX5 format and without mip maps. The file sizes of the .dds must be 2064 bytes for the small icon, and 4224 bytes for the big icon.
Both icons must be included: if you include the big one and not the small one, ssmins will complain. If you include the small but not the big one, ssmins will assume there is no icon.
The filenames should be icon_big.dds and icon_small.dds (in lower case), and should be put in the main folder of your mod. (where the .xml, .emo, etc are).
In the docs folder of SSMINS, you can see the original ones of the game extracted (note that those are in png, though).
Step 5.3: battle_name
The battle name is the name shown below the life bar in the battle. They are two textures (one aligned to left and another aligned to right), with a size of 384x60 (in the docs folder, you can see a png version of the ones used by the game, you could use them as reference to know the style and alignment, and to extract the letters).
The file format of texture is dds DX5 without mip maps.
For battle name right, it is suggested that after your're done creating the image, you copy paste it to a 1024x2048 transparent image. This is way to avoid a weird quality degradation that affects only the battle name right.
Of course, if your character doesn't need a new name, just use one of the available in the <BATTLE_NAME_ID of <Slot> entry and skip this step.
Otherwise, let's continue.
First, create a folder called "battle_name" in your mod main folder. And inside there, put your files like this:
left_EN.dds
right_EN.dds
left_SP.dds
right_SP.dds
left_IT.dds
right_IT.dds
....
and it is like that for the rest of languages that the game supports (JP = japansese, EN = english, FR = french, IT = italian, SP = spanish, BR = brazilian, NS = latin spanish, CH = chinese).
Note that the filenames are case-sensitive. The name of the language must be in upper case, and the rest in lower case.
Only the english language is mandatory. If you omit a language, sssspatcher will use the english one for that language. If you omit english language, SS Mods Installer will consider that your mod doesn't have battle names.
So, for example, if you include only english and french files, the english one will be used for all languages, except for french. You can have any number of language, provided that at least english one is there too. Both, left and right images must exist. If left image exists, but right doesn't ,ssmins will complain. If right image exists but left one doesn't, ssmins will ignore it.
Specific notes for spanish: since there are two different spanish in the game, if you are gonna include a spanish name, it would be advised that you provide a version for the other spanish too, usually you would just copy the same file with a different name.
Step 5.4: select_name
The select name is the character name you see in first image above. It is a 510x84 texture in DDS DX5 format without mip maps. File size should be 43136 bytes. You have png versions of the vanilla ones in the doc folder.
select_name textures go in a folder called cha_sel. Filenames are like this:
select_name_EN.dds
select_name_JP.dds
... etc for remaining languages.
The same considerations about languages that were explained in battle names apply here, so I won't repeat them.
Step 5.5: select2_name
The select2_name is the name you see in the galaxian wars selection, in the top-right corner (see first image above). They are 246x39 textures in dds DX5 without mip maps, and file size should be 10048 bytes. You can see the extracted vanilla ones in png format in the doc folder.
select2_name go in the folder cha_sel, with following names:
select2_name_EN.dds
select2_JP.dds
... etc for remaining languages
Same consideration about languages that were discuseed in battle name apply here too.
Please, look that the file name is select2_name_.., not select_name2. With my crystal ball I can already predict some people making this mistake.
Step 5.6: gw result name
The gw result name is the name that appears in the results of the galaxian wars tournament (see last image of the above)
It is a 384x60 texture, in dds DX5 format without mip maps. File size should be 23168 bytes. You have examples of vanilla ones in png format in the doc folder.
These ones go inside a folder called "gw". Filenames are like this:
result_name_EN.dds
result_name_JP.dds
... etc for remaining languages.
Same considerations about languages that were explained before remain true here.
Step 5.7: galaxian wars banner
The galaxian wars banner is... well, see the third image. It is a texture of 96x423 in dds DX5 wtihout mip maps. File size should be 40832 bytes. You have examples of vanilla ones (in png, though) in the doc folder.
These one go inside a folder called "gw". Filename is banner.dds
Step 5.8: galaxian wars banner name
The galaxian wars banner name is the name that the game renders inside the banner, but it is a separate texture, see third image. It is a texture of 48x384, dds DX5 without mip maps. You have examples of vanilla ones (in png) in the doc folder.
These ones also go inside a folder called "gw". Filenames are like this:
banner_name_EN.dds
banner_name_JP.dds
... etc for the rest of languages.
As always, same considerations about languages that were explained before apply here.
Step 5.9: sign name.
The sign name is... uhm, Aries, Taurus, Pegasus, Polaris, Megres, etc.
Before doing this step, please check if the name you want to use, exists here.
If it exists, you don't need to do this step, instead just use the code in the <Slot> section.
Otherwise, we can set a custom one here. Unlike previous texts, this one is actually plain text, not a texture, so this data goes in the .xml.
First of all: remember that at the beginning I told you to set the encoding in Notepad++ to UTF8? Well, if you didn't do it because you are not fuc*ing reading this, do it now, because it is now where this becomes more important.
Create a new section called <Text> in the xml, and terminated by </Text> (put it after </Slot>)
Now, the strings go like this (since in our example, Gemini already exists, we are gonna assume for the sake of the tutorial, that we want to set the sign name to "cockroach")
<SIGN_NAME_EN value="Cockroach" />
And it is like that for rest of the languages (<SIGN_NAME_SP, <SIGN_NAME_JP, etc) Same considerations about language that were discussed in battle_name apply here: only english is mandatory, if a language is not included, sssspatcher will use the information from the english one.
After following this step (and the next one) for english and the two spanish, our xml would look like this.
(Note: SIGN_NAME and ROBES_NAME are independent of each other, if you only need to set one of them, just omit the other, it is perfecly valid).
For exampe, this would be perfectly valid:
<Text>
<SIGN_NAME_EN value="Cockroach" />
<SIGN_NAME_SP value="Cucaracha" />
<SIGN_NAME_NS value="Cucaracha" />
</Text>
Step 5.10: robes name
Robes name are... the robes name. Like before, first look here to see if the robes name you want to specify exists there. If it does, omit this step and just set the id in <Slot> entry.
Otherwise, we set a custom one. For the sake of the example, we are gonna assume we want to make our Saga a steel saint... it is just for the sake of tutorial, since steel armors are robes that don't exist in game. This would look like this:
<ROBES_NAME_EN value="Steel armor" />
And etc for the remaining languages.
An example of how our xml would look like after following this (and previous) step for english and spanish language is here.
Like it was said in the above section, robes_name and sign_name are independent. If you only want to set robes_name but not sign_name, the next is perfectly valid:
<Text>
<ROBES_NAME_EN value="Steel armor" />
<ROBES_NAME_SP value="Armadura de acero" />
<ROBES_NAME_NS value="Armadura de acero" />
</Text>
Step 5.11: summary of files
This is not a real step, it is just a summary of how the file tree of a mod that uses all the features of the .ssz format, with absolutely all languages would look like, I hope it can help if you didn't get some point. (the + symbol indicates a directory, the -------- means that they are children of the previous directory)
+ resource (directory, optional)
-------- (other files or directories here, optional)
+ battle_name (directory, optional)
-------- left_EN.dds (file, optional)
-------- left_JP.dds (file, optional)
-------- left_SP.dds (file, optional)
-------- left_NS.dds (file, optional)
-------- left_IT.dds (file, optional)
-------- left_FR.dds (file, optional)
-------- left_CH.dds (file, optional)
-------- left_BR.dds (file, optional)
-------- right_EN.dds (file, optional)
-------- right_JP.dds (file, optional)
-------- right_SP.dds (file, optional)
-------- right_NS.dds (file, optional)
-------- right_IT.dds (file, optional)
-------- right_FR.dds (file, optional)
-------- right_CH.dds (file, optional)
-------- right_BR.dds (file, optional)
+ cha_sel (directory, optional)
-------- select_name_EN.dds (file, optional)
-------- select_name_JP.dds (file, optional)
-------- select_name_SP.dds (file, optional)
-------- select_name_NS.dds (file, optional)
-------- select_name_IT.dds (file, optional)
-------- select_name_FR.dds (file, optional)
-------- select_name_CH.dds (file, optional)
-------- select_name_BR.dds (file, optional)
-------- select2_name_EN.dds (file, optional)
-------- select2_name_JP.dds (file, optional)
-------- select2_name_SP.dds (file, optional)
-------- select2_name_NS.dds (file, optional)
-------- select2_name_IT.dds (file, optional)
-------- select2_name_FR.dds (file, optional)
-------- select2_name_CH.dds (file, optional)
-------- select2_name_BR.dds (file, optional)
+ gw (directory, optional)
-------- banner.dds (file, optional)
-------- banner_name_EN.dds (file, optional)
-------- banner_name_JP.dds (file, optional)
-------- banner_name_SP.dds (file, optional)
-------- banner_name_NS.dds (file, optional)
-------- banner_name_IT.dds (file, optional)
-------- banner_name_FR.dds (file, optional)
-------- banner_name_CH.dds (file, optional)
-------- banner_name_BR.dds (file, optional)
-------- result_name_EN.dds (file, optional)
-------- result_name_JP.dds (file, optional)
-------- result_name_SP.dds (file, optional)
-------- result_name_NS.dds (file, optional)
-------- result_name_IT.dds (file, optional)
-------- result_name_FR.dds (file, optional)
-------- result_name_CH.dds (file, optional)
-------- result_name_BR.dds (file, optional)
XXX.emo (file, mandatory)
XXX.emb (file, mandatory)
XXX.emm (file, mandatory)
XXX.2ry (file, mandatory)
sszmod.xml (file, mandatory)
avatar.dds (file, optional)
icon_big.dds (file, optional)
icon_small.dds (file, optional)
preview.png (file, optional)
And that's it. I know that I said it before, but I will repeat it here. File names are case-sensitive. They must be like they are shown here.
Step 6: adding a preview image (optional)
You can add a preview image to your mod, by including a file called "preview.png" in your package. This is totally optional.
SS Mods Installer will usually display the image with an aspect ratio of 1:2, this is, the height is the double of the width.
You should try to keep your image with that ratio, when possible. (for example, 419x838, 450x900, 540x1080, etc). It is not a strict requirement because the installer will stretch the image anyway, but the closer you are to the 1:2 aspect ratio, the less weird the image will look on both, the preview window and in the mods list preview.
Step 7: creating the zip and renaming it to .ssz.
This step will use WinRAR as example, but it is similar in other programs. Select all your files in the file explorer: the .emo, the .emb, the .emm, the .2ry, sszmod.xml, and, if they exist, the resource folder, the preview.png file, and all other optional files or folder you may have, and click right button and select "Add to archive..." (not add to "XXX.rar" or "XXX.7z) In the window that it pops up, select .zip as format (not rar, .7z or anything else). Use the name you want for the file, but make sure to put the .ssz extension instead of .zip.
And that's it. your mod is ready to deploy. Just make sure to test it before uploading it, you may have made some silly mistake in the way.
(Please, don't compress the outer folder where your files are, instead you must select all the files like I said in this step, I can foresee that this will be a very tipical mistake).