RimWorld 1.5 Mod Updates

From RimWorld Wiki
Revision as of 19:31, 13 March 2024 by Aelanna (talk | contribs) (Initial commit)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Modding Tutorials

NOTICE: This is a repository of information for mod developers based on changes datamined from the unstable release for RimWorld 1.5. Information here should be considered non-final as features may change between now and launch. THERE MAY BE ANOMALY SPOILERS HERE.

For questions and clarifications, please come visit us at the #mod-development channel on the RimWorld Discord server.

General Tips

If you are updating a mod between RimWorld versions for the first time:

  1. Update your supportedVersions in your About.xml
  2. Try to recompile your assemblies. Use the actual game files as a reference instead of Kraf's Nuget until it can be updated. Address any issues that come up.
  3. Try to load your mod. Work the error list top to bottom.
  4. Check your mod functionality. This is a great time to create a functionality checklist for future updates if you haven't made one already!
  5. REMEMBER TO CHECK BACK AFTER ACTUAL RELEASE. - The game can still change between now and the actual release, and the Anomaly DLC may introduce new content with incompatibilities. Don't assume that working against the unstable version means it will work fine after full release!

Furniture and Buildings

  • There is a wall lamp in vanilla now. Where were you when the RimWorld changed forever? BuildingProperties has an isAttachment flag to support wall mounted items
  • Vanilla has a hidden conduit now as well.
  • Building_MultiTileDoor - used for ornate doors
  • Dialog_Rename has been changed to an abstract generic that works against IRenamable, look at Dialog_RenameArea for example
  • ShelfBase has been separated into StorageShelfBase and BookcaseBase
  • New haulable interface: IHaulEnroute -> allows for multiple pawns to haul to the same destination. Vanilla now allows multiple pawns to haul materials to a building blueprint/frame for example

Things

  • Thing.Draw is gone, now Thing.DynamicDrawPhase. Projectiles now using DrawAt
  • MapMeshFlags is now a Def
  • RimWorld.HiddenItemsManager for undiscovered items along with <hiddenWhileUndiscovered> tag. Undiscovered items won't show up in storage settings

Pawns

  • PawnRenderer has been completely overhauled, more details pending.
    • PawnRenderTree
    • RenderNodes
    • RenderNodeWorkers
  • Dynamically rendered items are now handled in PawnRenderUtility.DrawEquipmentAndApparelExtras instead of PawnRenderer itself
  • ApparelProperties have been dramatically changed
    • new: <renderSkipFlags>, <drawData>, <parentTagDef>
    • removed: <hatRenderedFrontOfFace>, <hatRenderedAboveBody>, <hatRenderedBehindHead>, <shellRenderedBehindHead>, <forceRenderUnderHair>, <coversHeadMiddle>, <shellCoversHead>, <countsAsMaskForBreathing>
  • Human BodyDef has been altered
    • Tongue coverage changed from 0 to 0.001
    • New tags added for eyes
    • flipGraphic tag added to left eye, left ear, left shoulder, clavicle, left arm, left hand
  • BodyPartDefs now have an <executionPartPriority> value to determine destruction order when a pawn is executed.
    • ExecutionUtility.ExecuteCutPart has been modified to use this value instead of a hardcoded list of parts
  • "Mirrored" tag has been added to many body parts
  • Traits have a possessions field under <degreeDatas> list items now, which allows colonists with the specified traits to grant extra items during new game startup
  • Backstories have had <baseDesc> removed and now use <description>. Skills now use custom XML parsing
    • Useful search and replace regexes:
    • \s*<key>(.*)</key>\s*<value>(.*)</value>\s*
    • <$1>$2</$1>
  • Corpse Defs now have the <race> props copied over from their source race. This can cause false positives if you previously only used def.race != null to check if a ThingDef was a race; you should also check !def.IsCorpse now
  • FleshTypeDef now has a <isOrganic> flag. This is now used by RaceProperties.IsFlesh instead of hardcoding against mechs.
  • RaceProperties changes
    • deathActionWorkerClass is now deathAction, which is a DeathActionProperties object for better caching
    • <doesntMove>
    • <renderTree> - new PawnRenderTreeDef
    • <startingAnimation> new AnimationDef
    • <linkedCorpseKind> - Allows a race to use the corpse from another race
    • <canOpenFactionlessDoors>
    • <alwaysAwake>
    • <alwaysViolent>
    • <isImmuneToInfection>
    • <bleedRateFactor> - default 1.0
    • <canBecomeShambler> - defaults to false
    • <disableIgniteVerb> - disallows this race from setting buildings on fire when hostile
    • <detritusLeavings> - list of possible things to spawn when a member of this race dies
    • <overrideShouldHaveAbilityTracker> - if set to true, creates an abilitytracker for his race even if it isn't humanlike or mechanoid
    • ShouldHaveAbilityTracker property - reads the above field in addition to Humanlike and IsMechanoid
    • <hasMeat> - if set to false, no meat def is generated for this race. (no more tank meat? heresy~)
    • <hasCorpse> - if set to false, then no corpse is generated for this race
    • <corpseHiddenWhileUndiscovered> - if set to true, then the corpse does not come up in lists until you see one. possibly used by many anomalies?
    • <soundMoving> - new field
    • Animal property now checks !IsAnomalyEntity (in addition to checking !ToolUser && IsFlesh)

Misc

  • StatDef new fields:
    • <offsetLabel>
    • <showOnEntities> (default true)
    • <showOnNonPowerPlants> (default true)
    • <overridesHideStats> (default false)
    • <displayMaxWhenAboveOrEqual> (default false)
    • OffsetLabel (property)
    • OffsetLabelCap (property) -> currently only used in CompFacility.CompInspectStringExtra