The Data Editor is used to manage a complex set of game data that controls how the StarCraft II Engine functions. The Data Editor GUI represents this data in a similarly complex fashion in order to expose the full set of functionality available in custom mods and maps.
The GUI uses a data driven system to control the layout. As new features and improvements are added to the game engine, many data types and fields could be changed after each patch. That is why Blizzard generates it using XML files and localization data stored in text files.
The latest data files for a patch will be located in the folder "Versions\Base<highest_number>\"
- Shared data like XML files are stored in patch.SC2Archive
- Localized data like text files are stored in patch-enGB.SC2Archive (enUS for US, etc.)
- The Data Editor's most important and complex XML file is patch.SC2Archive -> EditorCategories.xml
- The Data Editor's main localized text file (enGB): patch-enGB.SC2Archive -> EditorCatalogStrings.txt
To begin to understand the Data Editor GUI, we start with looking at it from a higher point of view.
Terminology (words we need to learn)
General Type of Data like Units, Behavior
Every Data Type will be sorted into different Editor Categories. They can also share a Category like Race. For example Behavior:
<objectUsage type="Behavior"> <objects> <usage source="External">Race</usage> <usage source="EntryType"></usage> </objects> <fields> <usage source="External">FieldType</usage> </fields> </objectUsage>
In the object tag, there are two lines: Race and EntryType. And if you create a new behavior, you will see two ListBox where you can select Race and the Child Class for behavior. Now we know that "object" in the xml means: how you can sort your object.
I would call ObjectType UnitType. It will be only used by DataType:Unit.
I would call ObjectFamily UnitFamiily. It will be only used by DataType:Unit.
- Choice: Melee,Campaign,Storymode
FieldType is special. It is inside the "fields" Tag in the upper example. It indicates that all entry on the right side could be separated using FieldType.
Field Path Categories
To understand field path categories, first you have to understand how a field path works. The first part of the path is always the entry type and the second part is always a field, separated by an underscore. If the field is a complex structure like for Command Card data, then the path may specify one of more child fields.
Let's look at an example field path category to get an idea of what that all means.
<fieldVal path="CEffectDamage_Amount"> <value category="FieldType">Combat</value> </fieldVal>
We can see, the Amount field for the CEffectDamage entry type has a Field Type of Combat. This means it will be displayed in the Combat tab in the Data Editor.
Let's break down ""CEffectDamage_Amount" to make it very clear.
This is a prefix applied to all entry types and is just a naming convention.
This is the first word begins with a uppercase character. It is the base entry type of all objects in the Effect Data Type.
This is the name of a child entry type from CEffect. CEffectDamage will inherit all fields from CEffect.
This is the field name.
Entry Type Inheritance
If you want to create a damage effect, it will have all the fields from CEffect plus all fields from CEffectDamage. But it will not have all the field from "Apply Behavior Effect". This concept is called Inheritance and is a well understood concept of many programming languages.
Let's look at an example of a complex field, where there will be fields separated with an underscore:
<fieldVal path="CEffectDamage_ExcludeArray"> <value category="FieldType">Search</value> </fieldVal> <fieldVal path="CEffectDamage_ExcludeArray_Effect"> <value category="FieldType">Search</value> </fieldVal> <fieldVal path="CEffectDamage_ExcludeArray_Value"> <value category="FieldType">Search</value> </fieldVal>
In the Data Editor the Effect and Value fields will show as separate arrays of values if the Combine Structure Values toggle is turned off. They will be displayed as normal fields using the categories assigned here.
With Combine Structure Values enabled, you will only see the Exclude Array field and it will use the category it has assigned. When you edit this field it will use the categories for Effect and Value to split them into separate tabs if the categories are different.
How does the editor know to display CEffectDamage_Amount with a textbox for float number?
Every field has an internal type that the Data Editor and game engine use to store that value. Each type has a method to be converted from a string value for when it is read from XML or when a value is entered in raw data mode. It also can be converted back to a string for writing the XML files and for displaying the value in raw data mode. The Data Editor generally uses the same GUI for editing that type of field regardless of which Data Type the field belongs to.
Name Hint alias Localization
The Galaxy Editor has different language. If the Editor has the the internal name of the field "CEffectDamage_Amount, it will search name and hint in the EditorCatalogStrings.txt from the mpq file enGB.SC2Data
EDSTR_FIELDNAME_CEffectDamage_Amount=Amount EDSTR_FIELDHINT_CEffectDamage_Amount=Amount of damage dealt by the effect
What can we do?
If you start a new wiki page for CEffectDamage.
- go to EditorCategories.xml
- find all lines with
- find all lines with
- use the whole path name like "CEffectDamage_Amount" and search it in EditorCatalogStrings.txt
- But you are NOT DONE, make examples and post some screenshot.
- Write your thought down, add links for some tutorials.
Learning by Teaching
Table of contents
- 1 Terminology (words we need to learn)
- 2 Field Path Categories
- 3 Name Hint alias Localization
- 4 What can we do?
- 5 Learning by Teaching
- Date created
- Jan 10, 2011
- Last updated
- Mar 16, 2011