Glossary

Mod

The engine has a concept called "mod"s which are, essentially, a collection of asset and MiniYaml files.

In most cases, OpenRA-based games will have a single "mod." Think of this in the context of the Tiberian Sun you could previously buy that included the Firestorm expansion. That would be a case of multiple "mod"s in a single game.

Note that "mod" is in quotes because you're actually working on games but OpenRA's history is tied to the 1st generation Westwood Studios RTSes (Tiberian Dawn, Red Alert, and Dune 2000) which were modified by players so the term "mod" is used throughout the OpenRA codebase, documentation, etc.

MiniYaml

A custom textual file format used for many things in OpenRA.

These files are what the engine reads to, for example:

  • determine which mod(s) are installed
  • locate asset files
  • determine stats for different unit/building/etc. types
  • build the UIs used in-game

Manifest

The mod.yaml MiniYaml file in the root of each mod.

This file is what declares a directory as a mod, it is required.

Asset

This is a generic term that encompasses image files, audio files, container files (such as .zip or .mix), and basically anything else that isn't MiniYaml.

Actor

An actor is the entity part of the entity-component-system.

Technically, an actor is a collection of traits.

In the real-world example in chapter 2 you can see the actor E1 defined with the following traits:

  • Buildable
  • Valued
  • Tooltip

Note that, for example, Queue (in that same example) is not a trait. It is a property of the Buildable trait.

Inherits technically isn't a trait, it is a MiniYaml mechanism that is explained in the chapter 2 link above.

TraitInfo

Technically a trait info is the component part of the entity-component-system architecture.

The properties of a TraitInfo can be set in MiniYaml.

Look at the linked actor definition and Valued.cs's ValuedInfo class together.

Do you see how ValuedInfo has a Cost property that is of type int?

Now back in the MiniYaml you'll find Cost: 100.

That node is read by the engine (via the FieldLoader class, which will be covered in a future chapter) and the Cost property of ValuedInfo is set to 100.

Trait

Conceptually a trait is simply a characteristic of an actor.

Let's look at Valued.cs, for example, which contains two classes:

  • ValuedInfo
  • Valued
    • A Trait implementation

Technically a trait is the system part of the entity-component-system architecture.

Systems might:

  • hold state (ex. "Current HP is 43")
  • interact with other systems (ex. "I just got healed, play a healing animation")

Armament

This is another word for "weapon."