Difference between revisions of "Modding Tutorials/Writing custom code"
Jump to navigation
Jump to search
m (, to ;) |
(Added more in-depth info on each step) |
||
Line 8: | Line 8: | ||
## Enter a project name (solution name automatically updated); | ## Enter a project name (solution name automatically updated); | ||
## Choose a location, preferably:<br/><pre>(RimWorldInstallFolder)/Mods/(YourModName)/Source</pre> | ## Choose a location, preferably:<br/><pre>(RimWorldInstallFolder)/Mods/(YourModName)/Source</pre> | ||
− | ## Untick "Create a directory for solution"/"Create a project within the solution directory" | + | ## Untick "Create a directory for solution"/"Create a project within the solution directory", |
− | # In your project, add references to these | + | # In your project, add references to Assembly-CSharp.dll and UnityEngine.dll: |
− | # In your project properties, change the target framework to .NET 3.5; | + | ## Copy these files:<br/><pre>(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll (RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll</pre> |
− | # Create a new class in a new code file; | + | ## Place them in your project:<br/><pre>(RimWorldInstallFolder)/Mods/(YourModName)/Source/(YourSolutionName)/Source-DLLs</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 using AI; //RimWorld AI using Sound; //RimWorld sound subsystem using UI; //RimWorld GUI </pre> | + | ## In your IDE project file browser, right-click the "References" folder and "Add reference"; |
+ | ## Choose the ".NET Assembly Browser" tab and "Browse", go to the folder you placed the copied DLLs; | ||
+ | ## Choose both DLLs and click OK, | ||
+ | # In your project properties, change the target framework to .NET 3.5: | ||
+ | ## In your IDE project file browser, right-click Solution (YourSolutionName); | ||
+ | ## Choose Properties; | ||
+ | ## Go to the "Compiling" tab, "Output", "Target framework", "Change" and choose ".NET Framework 3.5", | ||
+ | # Create a new class in a new code file: | ||
+ | ## In your IDE project file browser, right-click (YourProjectName), Add -> New item -> C# or .NET -> Class; | ||
+ | ## Rename the class to what you want the class name to be, e.g DamageWorker_FlameExtension, | ||
+ | # You’ll want to add these namespace to the top of each of your .cs 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; | # Write your class; | ||
## [[Modding Tutorials/Decompiling source code|Decompile source code]] to take a look at the game's existing code; | ## [[Modding Tutorials/Decompiling source code|Decompile source code]] to take a look at the game's existing code; | ||
Line 18: | Line 28: | ||
# Compile your class into a .dll; | # Compile your class into a .dll; | ||
## Make sure your project's output type is "class library"; | ## Make sure your project's output type is "class library"; | ||
− | ## '' '''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 | + | ## '' '''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; | # 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; | # Reference the classes in your .dll from the xml data in the YourModName/Defs folder; |
Revision as of 08:58, 22 August 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 IDE of choice;
- Go to File -> New -> Solution;
- Go to C# or .NET -> Library or Class Library (NOT portable);
- Enter a project name (solution name automatically updated);
- Choose a location, preferably:
(RimWorldInstallFolder)/Mods/(YourModName)/Source
- Untick "Create a directory for solution"/"Create a project within the solution directory",
- In your project, add references to Assembly-CSharp.dll and UnityEngine.dll:
- Copy these files:
(RimWorldInstallFolder)/RimWorld_Data/Managed/Assembly-CSharp.dll (RimWorldInstallFolder)/RimWorld_Data/Managed/UnityEngine.dll
- Place them in your project:
(RimWorldInstallFolder)/Mods/(YourModName)/Source/(YourSolutionName)/Source-DLLs
- In your IDE project file browser, right-click the "References" folder and "Add reference";
- Choose the ".NET Assembly Browser" tab and "Browse", go to the folder you placed the copied DLLs;
- Choose both DLLs and click OK,
- Copy these files:
- In your project properties, change the target framework to .NET 3.5:
- In your IDE project file browser, right-click Solution (YourSolutionName);
- Choose Properties;
- Go to the "Compiling" tab, "Output", "Target framework", "Change" and choose ".NET Framework 3.5",
- Create a new class in a new code file:
- In your IDE project file browser, right-click (YourProjectName), Add -> New item -> C# or .NET -> Class;
- Rename the class to what you want the class name to be, e.g DamageWorker_FlameExtension,
- You’ll want to add these namespace to the top of each of your .cs 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;
- Decompile source code to take a look at the game's existing code;
- If you still get stuck on anything, 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: 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.
See also
- You can find a small tutorial project here: Modding Tutorials/Assembly Modding Example