Difference between revisions of "Modding Tutorials/Writing custom code"
Jump to navigation
Jump to search
(Added text about the project having to be a "class library" to compile it into a .dll file.) |
(Changed from actual numbers to a #numbered list, changed from space before text to <pre> and added 6. which elaborates on writing your class) |
||
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. | |
− | + | # In your project, add references to these DLLs:<br/><pre>(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll (RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll</pre> | |
− | + | # In your project properties, change the target framework to .NET 3.5 | |
− | + | # 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 using AI; //RimWorld AI using Sound; //RimWorld sound subsystem using UI; //RimWorld GUI </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]. | |
− | + | # 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.'' | |
− | + | # Place the .dll in the YourModeName/Assemblies folder of your mod. | |
− | + | # 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. | |
− | + | # The game should load your class now. | |
− | + | # 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]] | You can find a small tutorial project here: [[Modding Tutorials/Assembly Modding Example]] |
Revision as of 07:53, 15 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#.
- Create a new class library project in your code editor of choice. I use Visual Studio, but MonoDevelop also works well.
- In your project, add references to these DLLs:
(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll (RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll
- In your project properties, change the target framework to .NET 3.5
- Create a new class in a new code file.
- 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
- 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.
- 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. - Place the .dll in the YourModeName/Assemblies folder of your mod.
- 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.
- The game should load your class now.
- 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