Difference between revisions of "Modding Tutorials/Writing custom code"

From RimWorld Wiki
Jump to navigation Jump to search
(Changed from actual numbers to a #numbered list, changed from space before text to <pre> and added 6. which elaborates on writing your class)
(Added category)
Line 15: Line 15:
  
 
You can find a small tutorial project here: [[Modding Tutorials/Assembly Modding Example]]
 
You can find a small tutorial project here: [[Modding Tutorials/Assembly Modding Example]]
 +
 +
 +
[[Category:Modding tutorials]]

Revision as of 20:01, 18 June 2015

In addition to creating data for the game to use, you can also write code. You could probably write in any .NET language, but I’ve only tested C#.

  1. Create a new class library project in your code editor of choice. I use Visual Studio, but MonoDevelop also works well.
  2. In your project, add references to these DLLs:
    (RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll
    (RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll
  3. In your project properties, change the target framework to .NET 3.5
  4. Create a new class in a new code file.
  5. You’ll want to add these namespace to each of your source files as necessary.
    using UnityEngine;  	//For all Unity functionality, rendering, resource management
    using AI;		//RimWorld AI
    using Sound;	        //RimWorld sound subsystem
    using UI;		//RimWorld GUI
    
  6. Write your class. Use ILSpy (Download Binaries) to open Assembly-CSharp.dll, which decompiles the game's source code. Any modding questions can be asked on the subforum.
  7. Compile your class into a .dll. Make sure your project's output type is "class library".
    Note that by default, Visual Studio will compile all the references of the project as well, so you’ll get a copy of UnityEngine.dll and Assembly-CSharp.dll and some others. You don’t need these. Just take YourModName.dll.
  8. Place the .dll in the YourModeName/Assemblies folder of your mod.
  9. Reference the classes in your .dll from the xml data in the YourModName/Defs folder. For example, you could create a new ThingDef with a <thingClass> that points to a class in your .dll.
  10. The game should load your class now.
  11. If you wish, you should also release your source code in the YourModName/Source directory.


You can find a small tutorial project here: Modding Tutorials/Assembly Modding Example