Property Lists (.prop) - emd4600/SporeModder-FX GitHub Wiki

Property lists are the most common file in Spore. They are used to describe properties and configurations of basically everything in the game: from spices to spacetools, parts, difficulty configuration, etc. Most mods require modifying these files.

In SporeModder FX, property lists are written in files with the .prop.prop_t extension. The structure of these files is very simple: it's just a bunch of properties, each one in a line. An example of a PROP file:

Properties are written following this structure:

type name value

For example, the property editorDefaultBrainLevel is of type int32. If we want to assign it a value of 3, we would write:

int32 editorDefaultBrainLevel 3

A property does not have any meaning by itself, it all depends on how Spore uses it. This means that if, for example, you use a property from space tools in your creature part, the property will do nothing. This also means that Spore expects a certain property to be from a certain type. If you use a float in a property that was meant to be an int, it will not behave correctly.

Spore does have two special properties that are always used, no matter the file:

  • key parent: Here you can specify the name of another property file that will act as parent: that is, by default our file will use all the property values of that parent PROP list.
  • string16 description: A text description for the file; it's only informative and never used for anything, so don't worry if you don't want to use it.

Arrays

Properties can be put in arrays, so that they hold more than one value. The types are the same as for single properties, but they end with an s. In array properties, each value goes in a separate line. Finally, a line that just contains end tells where the array ends.

For example, if we want to add two effects to a model:

keys modelEffect
    hash(myCustomEffect)
    0x5D646B3F
end

Property Types

  • bool: A boolean value, either true or false

  • int32: An integer value, so a number with no decimals. The number is a 32-bit signed integer, which means that it can go from -2147483648 to 2147483647; you can also put the value in hexadecimal, such as 0x04Ad7f3. Sometimes these properties are used as IDs; you can get the ID of a name using hash(), such as hash(cylinder)

  • uint32: Same as int32, but this one is unsigned, so it can go from 0 to 4294967295

  • float: A floating point number, also known as real numbers: basically a number with decimals, such as 1.4

  • key: Used to reference a file or resource. It has three elements: a group ID (the folder name), an instance ID (the file name, without the extension), and a type ID (the extension). They are formatted like group!instance.type. For example: creature_rigblock~!ce_grasper_radial_03.prop. Pro tip: If you hold Ctrl in the SMFX editor over a key value, you can click it to open the file it references.

  • string8: Text. Only supports ASCII characters.

  • string16: Text. This supports any unicode characters.

  • vector2: Two float numbers, inside parenthesis and separated by commas. For example, (0, 3.25)

  • vector3: Three float numbers, inside parenthesis and separated by commas. For example, (0, 3.25, 1.0)

  • colorRGB: Same as vector3, but this represents a color: the values are the red, green and blue channels respectively. Values usually range from 0 to 1. For example, the green color is (0, 1.0, 0)

  • vector4: Four float numbers, inside parenthesis and separated by commas. For example, (0, 3.25, 1.0, -25.3)

  • colorRGB: Same as vector4, but this represents a color with transparency: the values are the red, green, blue and alpha channels respectively. Values usually range from 0 to 1. For example, an opaque green color is (0, 1.0, 0, 1.0)

  • text: Represents a localized text. This property can only be used as an array, usually of just one value. Each value consists of two parts: the first one, optional, is the localization key, and it's written like (tableID!instanceID); the second part is the placeholder text, with "". For example: (SRNS_AdventureBrushes!0x00000001) "PLACEHOLDER text"

  • bbox: Represents a bounding box. This property can only be used as an array, usually of just one value. Each value consists of two 3-value vectors, separated by a whitespace: one for the minimum coordinates and the other for the maximum coordinates. For example: (-3.1, 0, -2) (2.3, 1.25, 0.7)

  • transform: Represents a transformation to an object. This property can only be used as an array. Each value is a combination of a position, scale and rotation, all optional. The rotation is in euler angles. For example, a value that does the three transforms: -offset (0, 1, 0) -scale 2.3 -rotateXYZ (0, -90, 0)

SMFX Editor Tips

SporeModder FX provides some useful tools when editing PROP files.

  • You can know information about the property by hovering its name in the SMFX editor:

  • When you start writing, a small popup will appear showing you all the recognized properties similar to what you are writing. If you click on one of these, it will autocomplete; in the most common properties, it will also complete the property type.

  • If you hover the mouse over a color value, a tooltip will appear displaying that color. If you Ctrl + Click on the color value, a color picker will appear to easily edit the color: