Difference between revisions of "Custom Characters"

From Wolfire Games Wiki
Jump to: navigation, search
(Moved out XML files to their own headings)
m (Fur Fins)
 
(24 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''TODO: Put this link graciously provided by Markuss in its appropriate section:'''<br />
+
{{About||custom character scripts|Character_Scripting}}
 +
'''TODO''': Put this link graciously provided by Markuss in its appropriate section:<br />
 
https://cdn.wolfire.com/techsupport/ExampleMan.zip<br />
 
https://cdn.wolfire.com/techsupport/ExampleMan.zip<br />
  
'''TODO: Write introduction'''
+
'''TODO''': Write introduction
  
 
== Overview ==
 
== Overview ==
 
 
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]
 
[[Image:custom_character_file_structure.png|right|thumb|caption|All required files and what they contain]]
  
Line 32: Line 32:
 
| OBJ || The 3D mesh used by the character
 
| OBJ || The 3D mesh used by the character
 
|-
 
|-
! Hull
+
! Hulls
 
| OBJ || The simplified collision to use for the character
 
| OBJ || The simplified collision to use for the character
 
|-
 
|-
Line 42: Line 42:
 
|}
 
|}
  
'''TODO: Link all the below steps to parts of this page'''
+
To create a character for Overgrowth you need to...
 +
# Model and texture the character ([[#Model_and_Texture_Considerations|Guidelines]])
 +
# Create an ''object XML'' linking the model and the texture ([[#Object_XML|Instructions]])
 +
# Rig the character using one of the included skeletons and export ''.phxbn'', ''.fzx'' and ''.obj'' ([[#Rigging_the_Character|Instructions]])
 +
# Create a ''rigging data XML'' linking the model and the skeleton ([[#Rigging_data_XML|Instructions]])
 +
# Create a ''character XML'' linking the rigging data XML and the object XML with a set of attacks and animations the character should use ([[#Character_XML|Instructions]])
 +
# Create a script XML linking the character XML with an AI script ([[#Script_XML|Instructions]])
 +
# Create a _hulls.obj model to allow for thrown weapons to hit the character
  
To create a character for Overgrowth you need to..
+
The script XML file is the file that's loaded in the game to create the character. This article goes through all the above steps.
# Model and texture the character
 
# Create a simplified hull model for collision '''TODO: Is this required?'''
 
# Rig the character using one of the included skeletons
 
# '''TODO: What do you need to export? The skeleton? Only the weight painted mesh?'''
 
# Create an object XML linking the model and the texture
 
# Create a rigging data XML linking the model and the skeleton
 
# Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use
 
# Create a script XML linking the character XML with an AI script
 
 
 
The final script XML is the file that's actually loaded in the game to create the character. This article goes through all the above steps.
 
  
 
== Model and Texture Considerations ==
 
== Model and Texture Considerations ==
[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has reset ]]
 
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.
 
 
 
It's extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: ''../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj''.
 
It's extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: ''../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj''.
  
 
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.
 
There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the [[3D_Objects#Shaders|3D Objects]] article.
  
[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]
+
The model and textures for the character have the same requirements as when creating any other [[3D Objects|3D Object]], but with a few extra considerations.
 
+
<div><ul>
== Rigging the Character ==
+
<li style="display: inline-block;">[[Image:ExampleMan_mesh.jpg|thumb|Character Model Faces Z-axis and has unaltered translation, scale and rotation]]</li>
Overgrowth uses a custom skeleton format for characters with the PHXBN (Phoenix Bone '''TODO: Is this correct?''') file ending. To create this file you need to use Wolfire's custom export addons for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.
+
<li style="display: inline-block;">[[Image:ExampleMan_Norm.jpg|thumb|This is what a Blank/Flat object-space normal map might look like]]</li>
 
+
</ul></div>
'''TODO: How do you set this up yourself, if you're not using Windows for instance?'''
+
=== Character texture channels ===
 
+
[[Image:Character_textures.png|480px|thumb|This is what all the texture channels for a character look like]]
This article won't teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.
+
==== Color texture channels ====
 +
<ul>
 +
<li>'''Red, Green, Blue''': They do what you'd expect - Albedo channels. It is the base "diffuse" texture. It doesn't seem to get gamma corrected in the shader source, so it may be assumed to be linear.
 +
Ambient occlusion can be baked in, since the engine doesn't enable screen space AO by default, nor supports a separate AO channel.</li>
 +
<li>'''Alpha''': This maps to "smoothness". It is basically an inverse of the typical "roughness" channel you might use in a physically-based-rendering workflow. It gets gamma corrected in the shader, so you might have to change your curves to accommodate this.</li>
 +
</ul>
 +
==== Normal map texture channels ====
 +
<ul>
 +
<li>'''Red''': The character's left-hand side is red</li>
 +
<li>'''Green''': The character's front side is green</li>
 +
<li>'''Blue''': The character's top side is blue</li>
 +
<li>'''Alpha''': The rim light that gets applied when the character is in silhouette is masked by the alpha channel. If the alpha channel is 1.0 (white), then the rim light is at full strength. If the alpha channel is at 0.0, then the rim light is disabled for that part of the model. Grey is somewhere between those. It gets gamma corrected in the shader, so you might have to change your curves to accommodate this.</li>
 +
</ul>
 +
<br clear=all>
 +
=== Fur Fins ===
 +
'''TODO:''' Write about how fur fins work
  
Here are the steps you need to take in Blender to create the PHXBN file:
+
'''TODO:''' The fur fin is just another model, triangulated, etc. The alpha channel for the fur fins is actual transparency.
  
# '''TODO: What file is supposed to be used as a base? It's probably already loaded by default in the custom Blender version that can be downloaded above, but what file is that actually? So people can set this up on their own if they want.'''
+
'''TODO:''' Are fur fins rigged? Not sure...
# Replace the white rabbit
 
#* Press '''File > Import > Wavefront (.obj)''' to import an obj file.
 
# Bind your own mesh to the skeleton
 
#* First select the mesh, then shift-select the skeleton to add it to your selection before you press Ctrl + P to bind them.
 
# Paint weights
 
#* You may want to look up a tutorial on painting weights in blender.
 
#* It is recommended that you test your character in engine with automatic weights to check that you have no errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on if the character is going to work in the engine.
 
# Export your files
 
#* With skeleton selected in object mode, export as .PHXBN, same for mesh but as .OBJ. Your model needs to be in rest position when doing this.
 
  
 
== Object XML ==
 
== Object XML ==
- A regular object file as described in the [[3D_Objects#Basics | 3D reference guide]].
+
This is a regular object file as described in the [[3D_Objects#Basics | 3D reference guide]]. Note that the ShaderName flags (like #TANGENT for instance) don't make any difference for characters since they use a pre-detemined path through the uber shader.
 
<pre>
 
<pre>
 
<?xml version="1.0"?>
 
<?xml version="1.0"?>
Line 94: Line 94:
 
     <ColorMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA</ColorMap>
 
     <ColorMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA</ColorMap>
 
     <NormalMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA</NormalMap>
 
     <NormalMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA</NormalMap>
     <ShaderName>cubemapobjchar</ShaderName>
+
     <ShaderName>envobject</ShaderName>
 
</Object>
 
</Object>
 
</pre>
 
</pre>
 +
 +
Once you have created this file for your character it's a good idea to see if everything is working so far by loading the ''object XML'' in the editor.
 +
 +
== Rigging the Character ==
 +
Overgrowth uses one of the custom [[Binary_File_Formats|binary file formats]], namely the [[Binary_File_Formats#PHXBN|PHXBN (Phoenix Bones) format]] to store skeletons. To export a skeleton to a PHXBN file you need to use Wolfire's custom export addon for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded [https://cdn.wolfire.com/techsupport/Blender-Overgrowth-Win.zip here]. You may need to restart the program once to get the export options to show up.
 +
 +
'''TODO''': How do you set this up yourself, if you're not using Windows for instance?
 +
 +
This article won't teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, [https://cgcookie.com CG Cookie] has a good free video tutorial series that introduces you to the software.
 +
 +
Here are the steps you need to take in Blender to create the .phxbn, .fzx and .obj files:
 +
 +
# Open '''Data\BlendFiles\rabbit_rig.blend''' in Blender 2.55 with the PHXBN-add-on installed
 +
:::'''Note:''' If you download Blender from the link provided at the top of this page, the right file is already loaded.
 +
# Replace the rabbit model in the scene with your own character
 +
#* Press '''File > Import > Wavefront (.obj)''' to import an obj file.
 +
# Bind your own mesh to the rig
 +
## Select the mesh, then shift-select the rig to add it to your selection before you press Ctrl + P and select '''Armature Deform → With Empty Groups/With Envelope Weights/With Automatic Weights''' depending on how you want
 +
##* It's recommended to test your character in engine with automatic weights to check that you have no  other errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on how the character is going to work in the engine
 +
## Unassign all vertices in your model from any bone in the rig that doesn't have ''DEF'' in the name
 +
### Go into editor mode on the model and select all vertices
 +
### In the ''Properties editor'', go to the ''Object Data'' tab and expand the ''Vertex Groups'' menu
 +
### Select a vertex group that doesn't have ''DEF'' in its name, click ''Remove'', then select the next vertex group that doesn't have ''DEF'' in its name, click ''Remove'' again and so on until there are no groups assigned that doesn't have ''DEF'' in their name
 +
## Edit the weight painting for your character if you need to
 +
# Export your files
 +
#* With rig selected and in rest mode in object mode, export as .PHXBN
 +
#* With mesh selected in object mode and with the rig in rest mode, export as .OBJ, replace the .OBJ you imported if you want, since it's no longer needed
 +
#* '''TODO''': how to create and export FZX? What is FZX actually used for? Is FZX required?
 +
 +
As long as everything went smoothly your character is now ready to be integrated into the game engine! The next step is to create the rigging data XML.
  
 
== Rigging data XML ==
 
== Rigging data XML ==
- Links to the .OBJ and .PHXBN files that the engine needs to rig the character.
+
Links to the .OBJ and .PHXBN files that the engine needs to rig the character.
 
<pre>
 
<pre>
 
<?xml version="1.0" ?>
 
<?xml version="1.0" ?>
Line 107: Line 137:
  
 
== Character XML ==
 
== Character XML ==
- Links to the first 2 files, and a load of animation files for each action.
+
Links to the object XML and rigging data XML files as well as the animations and attacks the character will use.
 +
 
 
<pre>
 
<pre>
 
<?xml version="1.0" ?>
 
<?xml version="1.0" ?>
Line 135: Line 166:
 
  </character>
 
  </character>
 
</pre>
 
</pre>
 +
 +
'''TODO''': How do you decide what animations to use?
 +
'''TODO''': How do you decide what attacks to use?
  
 
== Script XML ==
 
== Script XML ==
- Links to the third file and an AI script, this is the file you choose when loading a character.
+
Links to the character XML file and an AI script, this is the file you choose when loading a character.
 +
 
 
<pre>
 
<pre>
 
<?xml version="1.0" ?>
 
<?xml version="1.0" ?>
Line 146: Line 181:
 
</pre>
 
</pre>
  
== How to add a character to the spawner menu ==
+
Now you have everything you need to load the character into the game, so try loading this ''script XML'' file in the editor and see if it works!
 +
 
 +
At this point the character loads, but we are not finished yet! For the character to be able to be hit by thrown weapons you need to create a _hulls.obj model. This is covered in the next section.
 +
 
 +
=== Hulls ===
 +
To enable your character to be hit by thrown objects you need to create a _hulls.obj file for it. The _hulls.obj file is a simplified collision representationis used for checking when thrown weapons hit the character.
 +
 
 +
You might want to use one of the existing _hulls.obj files as a base for creating your own. These can be found in the same folder as the model they are for, so for instance, in "Overgrowth/Data/Models/Characters/IGF_Turner" there is a IGF_Turner_hulls.obj file that you can use.
 +
 
 +
Here are the steps for creating your _hulls.obj file:
 +
 
 +
# Import or create a single mesh object in Blender with several individual convex hulls in it, you might want to keep your model in the same scene to see how everything overlaps
 +
# '''TODO''': Do the convex hulls need to be weight painted to the bones?
 +
# Export the object as an .obj file into the same folder as the character's obj file, with the following naming convention: model_hulls.obj
 +
 
 +
So if the name of the character's model is "rabbit.obj", then the hulls.obj file needs to be named "rabbit_hulls.obj" to work.
 +
 
 +
To test out if your hull works, load up your character in the game and try throwing some weapons into them.
 +
 
 +
If you want to add your character to the spawner menu to make it easier for others to access, read the next section.
  
 +
== Adding Characters to the spawner menu ==
 
Short version:
 
Short version:
 
* You must add it in a mod.
 
* You must add it in a mod.
Line 153: Line 208:
  
 
In your mod.xml file, add this xml tag:
 
In your mod.xml file, add this xml tag:
('''TODO''': Make these paths more specific to characters)
+
'''TODO''': Make these paths more specific to characters
  
 
<pre><Item category="My Custom Mod Characters"
 
<pre><Item category="My Custom Mod Characters"
Line 166: Line 221:
  
 
See '''<code>GameInstallDir/Data/ExampleMods/mod_xml_specification.txt</code>''' for full information.
 
See '''<code>GameInstallDir/Data/ExampleMods/mod_xml_specification.txt</code>''' for full information.
 +
 +
== See also ==
 +
* [[Custom Animations]]
 +
* [[Custom Attacks]]
  
 
== TODOs ==
 
== TODOs ==
 
'''TODO: Make sure all these headings are covered in this or some other article that we link to'''
 
'''TODO: Make sure all these headings are covered in this or some other article that we link to'''
 
=== Character XML files ===
 
 
'''TODO''': Description of XML format
 
  
 
=== File path conventions ===
 
=== File path conventions ===
 
+
'''TODO''': Description of where to add files in mods so they don't conflict. Ala [[Hotspot_Scripting#File_path_conventions]]
'''TODO''': Description of where to add files in mods so they don't conflict. Ala [[Hotspots#File_path_conventions]]
 
 
 
=== Modeling ===
 
 
 
'''TODO''': Links to or docs on modeling, graphics features like fur fins, various texture channels and what their components (alpha etc) mean, UVs, object space normals, etc. Also, any export info that would be necessary.
 
 
 
=== Hull ===
 
 
 
'''TODO''': Links to or docs on character hulls
 
 
 
=== Animations ===
 
 
 
'''TODO''': Links to or docs on animations and export, tagging, etc
 
  
 
=== Morph targets ===
 
=== Morph targets ===
 
 
'''TODO''': Links to or docs on morph target animations for hands, face, etc
 
'''TODO''': Links to or docs on morph target animations for hands, face, etc
  
 
=== Eyes ===
 
=== Eyes ===
 
 
'''TODO''': Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)
 
'''TODO''': Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)
  
=== Attacks ===
+
=== Custom Sounds ===
 
+
'''TODO''': Links to or doocs on how to use custom character sounds for attacks/deaths etc.
'''TODO''': Links to or docs on attacks system and export, tagging, etc - related partly to animations.<br>
 
 
 
'''TODO''': Possibly also scripting attacks and animations, and character-bound input, etc - though maybe that should be in a different section?
 

Latest revision as of 09:24, 6 September 2018

TODO: Put this link graciously provided by Markuss in its appropriate section:
https://cdn.wolfire.com/techsupport/ExampleMan.zip

TODO: Write introduction

Overview

All required files and what they contain

Characters in overgrowth consist of the following files.

Name File format Description
Script XML Links the character xml with an AI script
Character XML Links an object xml with rigging data, animations and attacks
Object XML A regular object xml file, links to a model and textures
Rigging data XML Links a model and a skeleton together so the model can be animated
Textures TGA The textures used by the character
Model OBJ The 3D mesh used by the character
Hulls OBJ The simplified collision to use for the character
Skeleton PHXBN The bone structure used by the character for animation
Ragdoll collision FZX Convex hulls used for ragdoll physics

To create a character for Overgrowth you need to...

  1. Model and texture the character (Guidelines)
  2. Create an object XML linking the model and the texture (Instructions)
  3. Rig the character using one of the included skeletons and export .phxbn, .fzx and .obj (Instructions)
  4. Create a rigging data XML linking the model and the skeleton (Instructions)
  5. Create a character XML linking the rigging data XML and the object XML with a set of attacks and animations the character should use (Instructions)
  6. Create a script XML linking the character XML with an AI script (Instructions)
  7. Create a _hulls.obj model to allow for thrown weapons to hit the character

The script XML file is the file that's loaded in the game to create the character. This article goes through all the above steps.

Model and Texture Considerations

It's extra important for characters that the model is centered to the middle of the scene, standing on the grid floor with location and rotation set to zero, and scale set to one. It should loosely match the pose and proportions of the Overgrowth characters, you can use the following file for pose and size reference: ../Overgrowth/Data/Models/Characters/Rabbit/rabbit.obj.

There is no character shader that supports tangent space normal maps. If you want to use a tangent space normal map anyway, the cubemap shader can be used. Though doing so will make the object look a bit different in the engine. More information about these shaders can be found in the 3D Objects article.

The model and textures for the character have the same requirements as when creating any other 3D Object, but with a few extra considerations.

  • Character Model Faces Z-axis and has unaltered translation, scale and rotation
  • This is what a Blank/Flat object-space normal map might look like

Character texture channels

This is what all the texture channels for a character look like

Color texture channels

  • Red, Green, Blue: They do what you'd expect - Albedo channels. It is the base "diffuse" texture. It doesn't seem to get gamma corrected in the shader source, so it may be assumed to be linear. Ambient occlusion can be baked in, since the engine doesn't enable screen space AO by default, nor supports a separate AO channel.
  • Alpha: This maps to "smoothness". It is basically an inverse of the typical "roughness" channel you might use in a physically-based-rendering workflow. It gets gamma corrected in the shader, so you might have to change your curves to accommodate this.

Normal map texture channels

  • Red: The character's left-hand side is red
  • Green: The character's front side is green
  • Blue: The character's top side is blue
  • Alpha: The rim light that gets applied when the character is in silhouette is masked by the alpha channel. If the alpha channel is 1.0 (white), then the rim light is at full strength. If the alpha channel is at 0.0, then the rim light is disabled for that part of the model. Grey is somewhere between those. It gets gamma corrected in the shader, so you might have to change your curves to accommodate this.


Fur Fins

TODO: Write about how fur fins work

TODO: The fur fin is just another model, triangulated, etc. The alpha channel for the fur fins is actual transparency.

TODO: Are fur fins rigged? Not sure...

Object XML

This is a regular object file as described in the 3D reference guide. Note that the ShaderName flags (like #TANGENT for instance) don't make any difference for characters since they use a pre-detemined path through the uber shader.

<?xml version="1.0"?>
<Object>
    <Model>Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj</Model>
    <ColorMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Color.TGA</ColorMap>
    <NormalMap>Data/Custom/Markuss/ExampleMan/Textures/ExampleMan_Norm.TGA</NormalMap>
    <ShaderName>envobject</ShaderName>
</Object>

Once you have created this file for your character it's a good idea to see if everything is working so far by loading the object XML in the editor.

Rigging the Character

Overgrowth uses one of the custom binary file formats, namely the PHXBN (Phoenix Bones) format to store skeletons. To export a skeleton to a PHXBN file you need to use Wolfire's custom export addon for Blender. A repackaged version of Blender for Windows with the export addons and with the UI set up for this task can be downloaded here. You may need to restart the program once to get the export options to show up.

TODO: How do you set this up yourself, if you're not using Windows for instance?

This article won't teach you how to use Blender, it only gives the information essential to get a character into the game. If you need to learn the basics of Blender, CG Cookie has a good free video tutorial series that introduces you to the software.

Here are the steps you need to take in Blender to create the .phxbn, .fzx and .obj files:

  1. Open Data\BlendFiles\rabbit_rig.blend in Blender 2.55 with the PHXBN-add-on installed
Note: If you download Blender from the link provided at the top of this page, the right file is already loaded.
  1. Replace the rabbit model in the scene with your own character
    • Press File > Import > Wavefront (.obj) to import an obj file.
  2. Bind your own mesh to the rig
    1. Select the mesh, then shift-select the rig to add it to your selection before you press Ctrl + P and select Armature Deform → With Empty Groups/With Envelope Weights/With Automatic Weights depending on how you want
      • It's recommended to test your character in engine with automatic weights to check that you have no other errors before you start working on a final weight paint. It won’t look pretty, but will let you know early on how the character is going to work in the engine
    2. Unassign all vertices in your model from any bone in the rig that doesn't have DEF in the name
      1. Go into editor mode on the model and select all vertices
      2. In the Properties editor, go to the Object Data tab and expand the Vertex Groups menu
      3. Select a vertex group that doesn't have DEF in its name, click Remove, then select the next vertex group that doesn't have DEF in its name, click Remove again and so on until there are no groups assigned that doesn't have DEF in their name
    3. Edit the weight painting for your character if you need to
  3. Export your files
    • With rig selected and in rest mode in object mode, export as .PHXBN
    • With mesh selected in object mode and with the rig in rest mode, export as .OBJ, replace the .OBJ you imported if you want, since it's no longer needed
    • TODO: how to create and export FZX? What is FZX actually used for? Is FZX required?

As long as everything went smoothly your character is now ready to be integrated into the game engine! The next step is to create the rigging data XML.

Rigging data XML

Links to the .OBJ and .PHXBN files that the engine needs to rig the character.

<?xml version="1.0" ?>
<rig bone_path = "Data/Custom/Markuss/ExampleMan/Models/ExampleMan.phxbn"
     model_path = "Data/Custom/Markuss/ExampleMan/Models/ExampleMan.obj"/>

Character XML

Links to the object XML and rigging data XML files as well as the animations and attacks the character will use.

<?xml version="1.0" ?>
<character>
    <appearance obj_path = "Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_Object.xml"
                skeleton = "Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_RigFiles.xml"/>
    <animations idle = "Data/Animations/r_idle2.xml"
                jump = "Data/Animations/r_jump.xml"
                roll = "Data/Animations/r_roll.xml"
                movement = "Data/Animations/r_movement.xml"
                wall = "Data/Animations/r_wall.xml"
                ledge = "Data/Animations/r_ledge.anm"
                medrightblock = "Data/Animations/r_activeblockmedright.anm"
                medleftblock = "Data/Animations/r_activeblockmedleft.anm"
                highrightblock = "Data/Animations/r_activeblockhighright.anm"
                highleftblock = "Data/Animations/r_activeblockhighleft.anm"
                lowrightblock = "Data/Animations/r_activeblocklowright.anm"
                lowleftblock = "Data/Animations/r_activeblocklowleft.anm"
                blockflinch = "Data/Animations/r_activeblockflinch.anm"/>
    <attacks moving_close = "Data/Attacks/haymaker.xml"
             stationary_close = "Data/Attacks/thrustpunch.xml"
             moving = "Data/Attacks/spinkick.xml"
             stationary = "Data/Attacks/frontkick.xml"
             moving_low = "Data/Attacks/soccerkick.xml"
             low = "Data/Attacks/sweep.xml"
             air = "Data/Attacks/legcannon.xml" />
 </character>

TODO: How do you decide what animations to use? TODO: How do you decide what attacks to use?

Script XML

Links to the character XML file and an AI script, this is the file you choose when loading a character.

<?xml version="1.0" ?>
<Actor>
    <Character>Data/Custom/Markuss/ExampleMan/XMLFiles/ExampleMan_AnimList.xml</Character>
    <ControlScript>enemycontrol.as</ControlScript>
</Actor>

Now you have everything you need to load the character into the game, so try loading this script XML file in the editor and see if it works!

At this point the character loads, but we are not finished yet! For the character to be able to be hit by thrown weapons you need to create a _hulls.obj model. This is covered in the next section.

Hulls

To enable your character to be hit by thrown objects you need to create a _hulls.obj file for it. The _hulls.obj file is a simplified collision representationis used for checking when thrown weapons hit the character.

You might want to use one of the existing _hulls.obj files as a base for creating your own. These can be found in the same folder as the model they are for, so for instance, in "Overgrowth/Data/Models/Characters/IGF_Turner" there is a IGF_Turner_hulls.obj file that you can use.

Here are the steps for creating your _hulls.obj file:

  1. Import or create a single mesh object in Blender with several individual convex hulls in it, you might want to keep your model in the same scene to see how everything overlaps
  2. TODO: Do the convex hulls need to be weight painted to the bones?
  3. Export the object as an .obj file into the same folder as the character's obj file, with the following naming convention: model_hulls.obj

So if the name of the character's model is "rabbit.obj", then the hulls.obj file needs to be named "rabbit_hulls.obj" to work.

To test out if your hull works, load up your character in the game and try throwing some weapons into them.

If you want to add your character to the spawner menu to make it easier for others to access, read the next section.

Adding Characters to the spawner menu

Short version:

  • You must add it in a mod.
  • You can add as many characters to the spawner menu as you want in a single mod, you just need to follow the below instructions for each, and add multiple <Item> tags to your mod.xml file.

In your mod.xml file, add this xml tag: TODO: Make these paths more specific to characters

<Item category="My Custom Mod Characters"
      title="Some Character To Spawn"
      path="Data/Objects/example_item_pack/mod_item_example.xml"
      thumbnail="Data/UI/example_item_pack/thumbs/mod_item_example.png" />
  • category is the top level category where the character will show up, in the Load menu.
  • title is the name of the character, as it will show up in the spawner menu.
  • path is the path to the character XML that will get spawned. See the How to create a character section for which XML file to target (either the character XML itself, or a version you saved off that has modified default parameters). TODO: Be careful to advise which character XML to add to the spawner - there are multiple character XML files!
  • thumbnail is the image that will be used for a tooltip when you hover over your character in the spawner menu.

See GameInstallDir/Data/ExampleMods/mod_xml_specification.txt for full information.

See also

TODOs

TODO: Make sure all these headings are covered in this or some other article that we link to

File path conventions

TODO: Description of where to add files in mods so they don't conflict. Ala Hotspot_Scripting#File_path_conventions

Morph targets

TODO: Links to or docs on morph target animations for hands, face, etc

Eyes

TODO: Links to or docs on morph target animations for eyes (might roll this up into other sections/other pages?)

Custom Sounds

TODO: Links to or doocs on how to use custom character sounds for attacks/deaths etc.