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

From RimWorld Wiki
Jump to navigation Jump to search
(Added category)
(Made the numbered list easier to read; any comments on the current step are now sub-steps.)
Line 1: Line 1:
 
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#.
 
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#.
  
# Create a new class library project in your code editor of choice. I use Visual Studio, but MonoDevelop also works well.
+
# Create a new class library project in your code editor of choice;
 +
## Viable code editors include [https://www.visualstudio.com/ Visual Studio], [http://www.monodevelop.com/download/ MonoDevelop] and [http://www.icsharpcode.net/OpenSource/SD/Download/ SharpDevelop],
 
# In your project, add references to these DLLs:<br/><pre>(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll&#10;(RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll</pre>
 
# In your project, add references to these DLLs:<br/><pre>(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll&#10;(RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll</pre>
# In your project properties, change the target framework to .NET 3.5
+
# In your project properties, change the target framework to .NET 3.5;
# Create a new class in a new code file.
+
# Create a new class in a new code file;
# You’ll want to add these namespace to each of your source files as necessary.<br/><pre>using UnityEngine;  //For all Unity functionality, rendering, resource management&#10;using AI; //RimWorld AI&#10;using Sound;         //RimWorld sound subsystem&#10;using UI; //RimWorld GUI&#10;</pre>
+
# You’ll want to add these namespace to each of your source files as necessary;<br/><pre>using UnityEngine;  //For all Unity functionality, rendering, resource management&#10;using AI; //RimWorld AI&#10;using Sound;         //RimWorld sound subsystem&#10;using UI; //RimWorld GUI&#10;</pre>
# Write your class. Use [http://ilspy.net/ ILSpy] (Download Binaries) to open Assembly-CSharp.dll, which decompiles the game's source code. Any modding questions can be asked on the [https://ludeon.com/forums/index.php?board=14.0 subforum].
+
# Write your class;
# Compile your class into a .dll. Make sure your project's output type is "class library".<br/>''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.''
+
## [[Modding Tutorials/Decompiling source code|Decompile source code]] to take a look at the game's existing code;
# Place the .dll in the YourModeName/Assemblies folder of your mod.
+
## If you still get stuck on anything, any modding questions can be asked on the [https://ludeon.com/forums/index.php?board=14.0 subforum],
# 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.
+
# Compile your class into a .dll;
# The game should load your class now.
+
## Make sure your project's output type is "class library";
# If you wish, you should also release your source code in the YourModName/Source directory.
+
## '' '''Note:''' 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,''
 +
# Place the .dll in the YourModName/Assemblies folder of your mod;
 +
# Reference the classes in your .dll from the xml data in the YourModName/Defs folder;
 +
## '''Example:''' Create a new ThingDef with a <thingClass> that points to a class in your .dll,
 +
# The game should load your class now;
 +
# '''Optional:''' Release your source code.
 +
## Most mods include a YourModName/Source folder with the full C# project in it for other modders to check out;
 +
## Some mods include a Dropbox download link to their source code in the mod's topic. This is also a possibility.<br/><br/>
  
 +
==See also==
  
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]]
 
[[Category:Modding tutorials]]

Revision as of 14:46, 11 July 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;
    1. Viable code editors include Visual Studio, MonoDevelop and SharpDevelop,
  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;
    1. Decompile source code to take a look at the game's existing code;
    2. If you still get stuck on anything, any modding questions can be asked on the subforum,
  7. Compile your class into a .dll;
    1. Make sure your project's output type is "class library";
    2. Note: 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 YourModName/Assemblies folder of your mod;
  9. Reference the classes in your .dll from the xml data in the YourModName/Defs folder;
    1. Example: Create a new ThingDef with a <thingClass> that points to a class in your .dll,
  10. The game should load your class now;
  11. Optional: Release your source code.
    1. Most mods include a YourModName/Source folder with the full C# project in it for other modders to check out;
    2. Some mods include a Dropbox download link to their source code in the mod's topic. This is also a possibility.

See also