-
Notifications
You must be signed in to change notification settings - Fork 0
Creating A New Character
Note: This guide walks through creating a character and playing Vanilla. If you want to make your character compatible with other mods that add character's you will need to work with other modders.
- Allowing Model Exports
- Enabling AllCharacterAvailable under [Hacks] in Memoria.ini
- Numpad (For Model Viewer)
Please follow Creating and publishing a mod down to the description. You do not have to publish your mod but at least make the structure it requires to be read from Memoria. For now, create the following structure inside of your FFIX folder:
MyMod/
├── DictionaryPatch.txt
├── ModDescription.xml
First, pick a character you would like to make playable and then find the character you would like that one to imitate. In this example I will be using Haagen
who will be imitating Blank
. Launch HadesWorkshop and go to the Party
-> Stats
section
Make note the last ID is for Beatrix
which is 11
. Right Click
on Blank
and select Add
. Base
refers to what base model you want to copy, and the ID is for how the character will be recognized which here is 12
. You can change the Default Name
if you would like, but it will be later defined in the DictionaryPatch.txt
. Set some commands and initial equipment for the character to use, and make sure to add those items also to the Equipments
section so the character can actually use them.
Select the Change Advanced Parameters
and you will see the setup Blank has, has been copied over to this new section. For now change the Model
and Trance Model
to Pluto KnightA
which is Haagen
then hit okay, then relaunch the Change Advanced Parameters
. You will see the Battle Animations
on the right is empty. In the image below there are several fields we have to adjust.
Name Keyword: HAGN
<--- This can be whatever you want it to
Avatar Sprite: face13
<--- Best to choose the latest (12 is used by beatrix) or any higher number
No Trance: 🔲
or ✅
<--- Up to you
Trance Color: 255
160
128
<--- Uses RGB that you can make from https://encycolorpedia.com/ Color Space Conversions section
Attack Sequence: 116 <--- Uses the ef116 folder for the given character (helpful especially for garnet Racket due to less animations on attack) refer to Battle SFX Sequence here for more information
Attack Sounds: 902
63
<--- Replicates the sound for when Blank hits the target
Weapon Bone: 14
<--- Where the weapon will be equipped to (later in Model Viewer section)
Status Icons: 5 sets of 3
<--- Uses the face bone for where the status will overlay
Battle Animations: ____
<--- Set these to random animations the model should have, just make sure every slot is filled or the game will crash/soft lock
Once set, hit okay go to File
-> Save Mod
and save it on your desktop for example as MyMod_v1
. Every time we go back and save this mod again append a letter to it like a
, then b
, etc. until the finished product (helps so if it corrupts you just open the last prev working one).
Next save again as a Steam Mod
, browse to MyMod
in the FFIX folder and keep the options Spreadsheets (Memoria)
and Raw Assets
. If you happen to get an error about ItemEquipPatch.txt
, in HWS go to Inventory and change for example Hammer
description to remove the period and re-add it, then try saving again.
Your MyMod
should now look like this
MyMod
├── FF9_Data
├── StreamingAssets
├── DictionaryPatch.txt
└── ModDescription.xml
Next is to create the Atlas directory where we will need to grab the Face Atlas
file and Face Atlas.tpsheet
(Easy one to grab is from the PlayableCharacterPack
mod).
Portrait size is 132x190
(For this put the Picture over the first one) and in the tpsheet if using the PCP mod it already will be set to face13
.
MyMod
├── FF9_Data
│ └── embeddedasset
│ └── UI
│ └── Atlas
│ ├── Face Atlas
│ └── Face Atlas.tpsheet
├── StreamingAssets
├── DictionaryPatch.txt
└── ModDescription.xml
In your DictionaryPatch.txt
add the following lines and save it.
CharacterDefaultName 12 US Haagen
CharacterDefaultName 12 UK Haagen
CharacterDefaultName 12 JP Haagen
CharacterDefaultName 12 GR Haagen
CharacterDefaultName 12 FR Haagen
CharacterDefaultName 12 IT Haagen
CharacterDefaultName 12 ES Haagen
Enable your mod and when you load into your save and either go into Form Party
in the menu or hit Alt + F2
you should see the character appear.
- Launch
FF9_Launcher.exe
- Select
Advanced
thenModel Viewer
- Find your two models
Haagen (Pluto Knight)
Category: ACTORS
Model#: 25/43
Model Name: GEO_SUB_F0_SSB
AnimationFolder: (5488)
Blank
Category: ACTORS (MAIN)
Model#: 16/83
Model Name: GEO_MAIN_B0_015
AnimationFolder: (42)
- On Haagen's model Anim 1/24 (T-Pose), Press
B
to show the bones and zoom in/out to where you can see all the bones properly and take a screenshot for later use, then pressE
and your Text Editor should open providing you with theBone hierarchy
and theExportPath
- Make sure to copy the
Bone hierarchy
to a separate notepad with the characters name; Do the same with Blank (T-Pose) and then add a final section calledHaagen into Blank
withBlank's
Bone hierarchy
there as well. In the end it should look like below:
The next step is to now identify the bones. If you read carefully the paths of both Haagen and Blank's bones, they seem to be going deeper into a path like how you do with folder structures. Now look at each of their bones in the screenshots you took before and you see they have a pattern. For Example
bone000/bone001/bone002
bone000/bone001/bone002/bone003
bone000/bone001/bone002/bone003/bone004
bone000/bone001/bone002/bone003/bone004/bone005
These lead up to Haagen's left arm. For Blank
bone000/bone001/bone005
bone000/bone001/bone005/bone006
bone000/bone001/bone005/bone006/bone007
bone000/bone001/bone005/bone006/bone007/bone008
bone000/bone001/bone005/bone006/bone007/bone008/bone009
He has more bones but ultimately it also leads to his left arm. We will talk more about extra bones later.
It is good to then label the sections of where the Left Arm
, Right Arm
, Left Leg
, Right Leg
, and Head
ends for each character. Some characters also have additional bones, like weapon bones, Zidane's Tail
, Garnets' Ponytail
and/or Pendant
. for Blank and a lot of main cast characters, he also has weapon bones bone009
& bone014
and a head bone bone004
. Example below of Labeling the bones.
What is next is to copy over the same paths of Haagen's bones into Blank'. For example Haagen's bone path for his Right Arm
needs to be pasted over the same path as Blank' Right Arm
, but since Blank' Right Arm
has 5 paths starting at bone002
to the ending bone006
compared to Haagen's 4 paths starting at bone008
to the ending bone011
we will need to delete 1 lines from there, keeping the line breaks in there (This is very important).
What you end up with is below. The reason why blank line breaks are needed are to follow the same path, but you are telling Haagen to not use that bone path. Deleting the line break will warp results.
Create the folder structure below using the Animation folder specified earlier
MyMod/
├── FF9_Data/
│ ├── embeddedasset/
│ │ ├── UI/
│ │ │ ├── Atlas/
│ │ │ │ ├── Face Atlas
│ │ │ │ └── Face Atlas.tpsheet
├── StreamingAssets/
│ ├── Assets/
│ │ ├── Resources/
│ │ │ ├── Animations/
│ │ │ │ └── 5488/
├── DictionaryPatch.txt
├── ModDescription.xml
For the DictionaryPatch.txt
We will be using the template below. Please NOTE the 3DModelAnimation lines are only to view them in the model viewer
CharacterDefaultName {ID} US {Name}
CharacterDefaultName {ID} UK {Name}
CharacterDefaultName {ID} JP {Name}
CharacterDefaultName {ID} GR {Name}
CharacterDefaultName {ID} FR {Name}
CharacterDefaultName {ID} IT {Name}
CharacterDefaultName {ID} ES {Name}
3DModelAnimation {Anim#} {ModelName}_BTL_IDLE
3DModelAnimation {Anim#} {ModelName}_BTL_STAND_READY
3DModelAnimation {Anim#} {ModelName}_BTL_STAND_WEAK
3DModelAnimation {Anim#} {ModelName}_BTL_READY_STAND
3DModelAnimation {Anim#} {ModelName}_BTL_IDLEREADY
3DModelAnimation {Anim#} {ModelName}_BTL_WEAK_STAND
3DModelAnimation {Anim#} {ModelName}_BTL_WEAK_READY
3DModelAnimation {Anim#} {ModelName}_BTL_IDLEWEAK
3DModelAnimation {Anim#} {ModelName}_BTL_WEAK_KO
3DModelAnimation {Anim#} {ModelName}_BTL_KO_WEAK
3DModelAnimation {Anim#} {ModelName}_BTL_IDLEKO
3DModelAnimation {Anim#} {ModelName}_BTL_MOVEFORWARD
3DModelAnimation {Anim#} {ModelName}_BTL_MOVEBACKWARD
3DModelAnimation {Anim#} {ModelName}_BTL_READY_ATTACK
3DModelAnimation {Anim#} {ModelName}_BTL_ATTACKRUN
3DModelAnimation {Anim#} {ModelName}_BTL_ATTACK1
3DModelAnimation {Anim#} {ModelName}_BTL_ATTACK2
3DModelAnimation {Anim#} {ModelName}_BTL_JUMPBACK1
3DModelAnimation {Anim#} {ModelName}_BTL_JUMPBACK2
3DModelAnimation {Anim#} {ModelName}_BTL_READY_CAST
3DModelAnimation {Anim#} {ModelName}_BTL_IDLE_CAST
3DModelAnimation {Anim#} {ModelName}_BTL_CAST_STAND
3DModelAnimation {Anim#} {ModelName}_BTL_ITEM
3DModelAnimation {Anim#} {ModelName}_BTL_HIT
3DModelAnimation {Anim#} {ModelName}_BTL_HITSTRONG
3DModelAnimation {Anim#} {ModelName}_BTL_READY_DEFEND
3DModelAnimation {Anim#} {ModelName}_BTL_IDLEDEFEND
3DModelAnimation {Anim#} {ModelName}_BTL_DEFEND_STAND
3DModelAnimation {Anim#} {ModelName}_BTL_COVER
3DModelAnimation {Anim#} {ModelName}_BTL_DODGE
3DModelAnimation {Anim#} {ModelName}_BTL_FLEE
3DModelAnimation {Anim#} {ModelName}_BTL_VICTORY
3DModelAnimation {Anim#} {ModelName}_BTL_VICTORYLOOP
3DModelAnimation {Anim#} {ModelName}_BTL_SPECIAL_CAST
This order of Animation follows Hades Workshop's
order to avoid confusion (seen earlier). Let's start with one animation and confirm everything works, the 3DModelAnimation {Anim#} {ModelName}_BTL_IDLE
which is stance the character will have in battle. (You can name it BTL_*** whatever you want)
Relaunch Model Viewer and go to Blank
model again and find his idle battle stance you would see in game which is ANH_MAIN_B0_015_000
and Press E
which should open your text editor with his bone hierarchy
like we did earlier, except this time we want to take our new bone pattern that we did earlier and paste it over his bones and also change the Export path to our new location. Be sure to change the animation to something that you can understand. For example, ANH_SUB_F0_SSB_BTL_ATKTONORMAL.anim
or ANH_SUB_F0_SSB_BTL_JUMPBACK2.anim
Save the file, then go back to the model viewer and press E
again and it should save the animation file to the location MyMod\StreamingAssets\Assets\Resources\Animations\5488\25466.anim
. You then open your DictionaryPatch.txt
file and adjust
3DModelAnimation {Anim#} {ModelName}_BTL_IDLE
to 3DModelAnimation 25466 ANH_SUB_F0_SSB_BTL_IDLE
and save; you will then be able to see it in the model viewer.
Re-open your mod in HWS and go to Haagen's Change Advanced Parameters
. Add the ANH_SUB_F0_SSB_BTL_IDLE
into the field where Stand
is and hit Ok
. Save as a "Steam Mod" again and confirm in battle that your character is now copying Blank's animation. Now repeat those steps for each animation. Don't forget to also change the weapon bone to the correct position Bone011
and adjust the Status Icons
from 3
to 7
(Haagen's face). All that is left is to now set the weapon to the proper location
Due to the 3DModelAnimation
added in the DictionaryPatch.txt
, you should see the new animations appear for Haagen. Refer to the Model Viewer Wiki for keyboard shortcuts. When getting the weapon to the proper placement, on your NUMPAD (Not the top row keys), press 5
and inside your memoria.log should appear the weapon position which looks something like this:
29.11.2024 08:34:57 |M| [WEAPON] GEO_WEP_B1_027.offset = (-10.200000000, -10.600000000, 31.000000000, 285.076600000, 113.683500000, 244.101400000)
Position: -10.200000000, -10.600000000, 31.000000000
Rotation: 285.076600000, 113.683500000, 244.101400000
We need to set these coordinates in your MyMod/StreamingAssets/Data/Characters/BattleParameters.csv
which should originally look like this:
#! IncludeWeaponSound
# This file define battle parameters of characters.
# -----------------------------------------------
# Id;AvatarSprite;ModelId;TranceModelId;TranceGlowingColor;MP_IDLE_NORMAL;MP_IDLE_DYING;MP_DAMAGE1;MP_DAMAGE2;MP_DISABLE;MP_GET_UP_DYING;MP_GET_UP_DISABLE;MP_DOWN_DYING;MP_DOWN_DISABLE;MP_IDLE_CMD;MP_NORMAL_TO_CMD;MP_DYING_TO_CMD;MP_IDLE_TO_DEF;MP_DEFENCE;MP_DEF_TO_IDLE;MP_COVER;MP_AVOID;MP_ESCAPE;MP_WIN;MP_WIN_LOOP;MP_SET;MP_RUN;MP_RUN_TO_ATTACK;MP_ATTACK;MP_BACK;MP_ATK_TO_NORMAL;MP_IDLE_TO_CHANT;MP_CHANT;MP_MAGIC;MP_STEP_FORWARD;MP_STEP_BACK;MP_ITEM1;MP_CMD_TO_NORMAL;MP_SPECIAL;AttackSequence;WeaponBone;ShadowData;StatusBones;StatusOffsetsY;StatusOffsetsZ;WeaponSounds
# Int32;String;String;String;UInt8[];String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;Int32;UInt8;UInt8[];UInt8[];Int8[];Int8[];Int32[]
# -----------------------------------------------
19;face13;GEO_SUB_F0_SSB;GEO_SUB_F0_SSB;255, 160, 128;ANH_SUB_F0_SSB_BTL_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_RUN;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;116;14;16, 20, 140, 144, 0;3, 3, 3, 3, 3, 1;-12, 0, -8, -2, -8, -19;-1, -1, -8, -8, -5, 0;902, 63;# Custom battle parameters 19
What needs to be added is the #! IncludeWeaponOffsets
field, 1, 1, 1;
at the end of the line (this is for the scaling of the weapon), then finally after the coordinates -10.200000000, -10.600000000, 31.000000000; 285.076600000, 113.683500000, 244.101400000;
with the end result being:
#! IncludeWeaponSound
# This file define battle parameters of characters.
# -----------------------------------------------
# Id;AvatarSprite;ModelId;TranceModelId;TranceGlowingColor;MP_IDLE_NORMAL;MP_IDLE_DYING;MP_DAMAGE1;MP_DAMAGE2;MP_DISABLE;MP_GET_UP_DYING;MP_GET_UP_DISABLE;MP_DOWN_DYING;MP_DOWN_DISABLE;MP_IDLE_CMD;MP_NORMAL_TO_CMD;MP_DYING_TO_CMD;MP_IDLE_TO_DEF;MP_DEFENCE;MP_DEF_TO_IDLE;MP_COVER;MP_AVOID;MP_ESCAPE;MP_WIN;MP_WIN_LOOP;MP_SET;MP_RUN;MP_RUN_TO_ATTACK;MP_ATTACK;MP_BACK;MP_ATK_TO_NORMAL;MP_IDLE_TO_CHANT;MP_CHANT;MP_MAGIC;MP_STEP_FORWARD;MP_STEP_BACK;MP_ITEM1;MP_CMD_TO_NORMAL;MP_SPECIAL;AttackSequence;WeaponBone;ShadowData;StatusBones;StatusOffsetsY;StatusOffsetsZ;WeaponSounds
# Int32;String;String;String;UInt8[];String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;String;Int32;UInt8;UInt8[];UInt8[];Int8[];Int8[];Int32[]
# -----------------------------------------------
#! IncludeWeaponOffsets
19;face13;GEO_SUB_F0_SSB;GEO_SUB_F0_SSB;255, 160, 128;ANH_SUB_F0_SSB_BTL_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_RUN;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;ANH_SUB_F0_SSB_IDLE;116;14;16, 20, 140, 144, 0;3, 3, 3, 3, 3, 1;-12, 0, -8, -2, -8, -19;-1, -1, -8, -8, -5, 0;902, 63;1, 1, 1;-10.200000000, -10.600000000, 31.000000000; 285.076600000, 113.683500000, 244.101400000;# Custom battle parameters 19
That should be it. Your character is now playable.
IMPORTANT NOTE: Because Hades Workshop does not have the option to put in weapon offsets yet, every time you use Save Steam Mod
it will overwrite your BattleParameters.csv
, so make sure to have the adjustments saved as a backup.
- Video from DV - FF9 Modding - How to create a new character (Memoria/HW)
- List of Models and Animations
- My Public GitLab Repo (WarpedEdge) for anyone to grab files from