Modding Tutorials/Transpiler Hints

From RimWorld Wiki
Revision as of 18:02, 30 June 2019 by Lilwhitemouse (talk | contribs) (link)
Jump to navigation Jump to search

Debugging Transpilers can seem impossible. It's very difficult to count exactly correctly, and any mistakes will likely throw a system exception.

Helpful examples

One way to get an idea of how to use the Transpiler is to search github for Harmony Transpilers.

Useful debugging tools.

See what your IL code is

One thing that can potentially help is to print out your entire modified IL code, to make sure you've got it correct:

       public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator) {
           var l=XTranspiler(instructions, generator).ToList(); // name your actual transpiler XTranspiler
           string s="Code:";
           int i=0;
           foreach (var c in l) {
               if (c.opcode==OpCodes.Call ||
                   c.opcode==OpCodes.Callvirt) { // you can make certain operations more visible
                   Log.Warning(""+i+": "+c);
               } else {
                   Log.Message(""+i+": "+c);
               }
               s+="\n"+i+": "+c;
               i++;
               yield return c;
           }
           Log.Error(s); // or just print the entire thing out to copy to a text editor.
       }