Modding Tutorials/Modifying classes

From RimWorld Wiki
Revision as of 15:22, 1 February 2019 by Mehni (talk | contribs) (→‎Using Harmony to override a non-overridden method)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Modding Tutorials

Changing methods[edit]

Use Harmony.

Adding fields or methods to classes[edit]

You can't. Not even with Harmony. Maybe you want to subclass instead?

Adding fields to Defs[edit]

You can. The game support something called a DefModExtension. If you have a Def, you can get your mod extension from it. This allows you to add any custom field to any def.

Adding behaviour to the Thing class[edit]

If it's a ThingWithComps, you can add a ThingComp instead. Almost all Things are a ThingWithComps. ThingComps can also be used to store whatever data you need.

Adding behaviour to the Hediff class[edit]

HediffWithComps also support comps. HediffComps are different from ThingComps, but their general use is the same.

Using Harmony to override a non-overridden method[edit]

You can't. Harmony can only patch methods which are actually implemented. You can't patch what isn't there.

Alternatives:

  • Patch the base class instead, then check for the instance.
  • Subclass, and then replace it wherever it's created with Harmony.

Patching the base class of a subclass[edit]

Harmony can only patch methods that actually have IL code. What you can do is patch the parent class. Let your patch take the __instance of the parent and pattern match.

if (!(__instance is SubClass))
    return;