Editing Modding Tutorials/XML file structure

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 78: Line 78:
  
 
'''Note that after update A15, abstracts have been directly inheritable from the core and from other mods. Redefining the core abstracts is common cause for mod compatibility issues, because any mod loaded after the abstract has been redefined will use the modified version instead of the core. Therefore, when defining abstracts for a mod, it's advisable to try to avoid overwriting the core abstracts and to instead use unique names that are unlikely to be accidentally used by other mods.'''
 
'''Note that after update A15, abstracts have been directly inheritable from the core and from other mods. Redefining the core abstracts is common cause for mod compatibility issues, because any mod loaded after the abstract has been redefined will use the modified version instead of the core. Therefore, when defining abstracts for a mod, it's advisable to try to avoid overwriting the core abstracts and to instead use unique names that are unlikely to be accidentally used by other mods.'''
 +
 +
Note that you can stop a child inheriting a specific tag's content by specifying ''Inherit="False"'' in the tag, like so:
 +
<source lang="xml">    <weaponTags Inherit="False">
 +
      <li>SniperRifle</li>
 +
    </weaponTags></source>
 +
The above example would only have ''SniperRifle'' as a weaponTag, none of the parent's weaponTags. This is particularly useful for lists.
  
 
===Basegun ThingDef===
 
===Basegun ThingDef===
Line 175: Line 181:
 
* '''<Defs>''' is the rootnode and this uniformity is enforced.
 
* '''<Defs>''' is the rootnode and this uniformity is enforced.
 
* '''<Def>''' has to have a specific name, matching a Type in C#.
 
* '''<Def>''' has to have a specific name, matching a Type in C#.
 
===Stopping inheritance===
 
There are cases where you don't want your child to use the values specified in the parent. You can tell your child not to inherit the content from its parent's tag by specifying ''Inherit="False"'' in the child's tag, like this example taken from the SniperRifle:
 
<source lang="xml">
 
<weaponTags Inherit="False">
 
  <li>SniperRifle</li>
 
</weaponTags></source>
 
The above example would only have ''SniperRifle'' as a weaponTag, none of the parent's weaponTags. This is particularly useful for lists, because lists add to the parent whereas other tags overwrite.
 
 
The advantage of this is that you can leave the parent intact and still inherit from it, but let the child select which properties to inherit.
 
 
====Example====
 
<source lang ="xml">
 
<ThingDef Name="ThingOne" Abstract="True">
 
  <comps>
 
    <li Class = "CompOne">
 
      <valueA>1</valueA>
 
    </li>
 
  </comps>
 
</ThingDef>
 
 
<ThingDef ParentName="ThingOne">
 
  <comps Inherit= "False"> <!-- This here means "don't use the comps from the parent -->
 
    <li Class = "CompOne"> <!-- since we just removed all comps from the parent, we gotta re-add them -->
 
      <valueA>2</valueA>  <!-- but we can use our own values! -->
 
    </li>
 
  </comps>
 
</ThingDef>
 
</source>
 
  
 
=Next up=
 
=Next up=

Please note that all contributions to RimWorld Wiki are considered to be released under the CC BY-SA 3.0 (see RimWorld Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)

Template used on this page: