Skip to content

Instantly share code, notes, and snippets.

View pardeike's full-sized avatar
💭
Innovating 🛠

Andreas Pardeike pardeike

💭
Innovating 🛠
View GitHub Profile
@pardeike
pardeike / finalizers.cs
Created March 26, 2024 22:41
Multiple Finalizers seems broken
void Main()
{
var harmony = new Harmony("test");
Harmony.DEBUG = true;
harmony.PatchAll();
Class.Test();
}
[HarmonyPriority(Priority.High)]
[HarmonyPatch(typeof(Class), nameof(Class.Test))]
@pardeike
pardeike / innerfix.cs
Last active February 4, 2024 23:45
Harmony: A draft of how to patch inner methods with so called infixes
static void Main(string[] args)
{
var test = new Test();
Console.WriteLine($"--> OriginalMethod={test.OriginalMethod(0, "foobartest")}");
Console.WriteLine("");
Console.WriteLine($"--> OriginalMethod={test.OriginalMethod(123, "foobartest")}");
Console.WriteLine("");
// patching would happen here
@pardeike
pardeike / FilterBlockTest.cs
Created January 14, 2024 23:33
Creating a filter clause in Cecil
/*
The following code creates this class:
using System;
public static void Method1()
{
try
{
Console.WriteLine("code");
}
@pardeike
pardeike / DynamicWorkTypes.cs
Last active May 27, 2025 11:29
Some helper for RimWorld mods to add and remove work types at runtime
using HarmonyLib;
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using Verse;
namespace Brrainz
{
[StaticConstructorOnStartup]
@pardeike
pardeike / InstallMod.bat
Created August 16, 2023 19:26
Mod build and install script
REM ################ Mod build and install script (c) Andreas Pardeike 2020 ################
REM
REM Call this script from Visual Studio's Build Events post-build event command line box:
REM "$(ProjectDir)Install.bat" $(ConfigurationName) "$(ProjectDir)" "$(ProjectName)" "About Assemblies Languages Textures v1.1" "LoadFolders.xml"
REM
REM The project structure should look like this:
REM
REM Modname
REM +- .git
REM +- .vs
@pardeike
pardeike / Debouncer.cs
Last active August 4, 2023 10:20
A debouncer for RimWorld modding - delaying actions to a global tick method if necessary
using System;
using System.Collections.Generic;
using HarmonyLib;
using Verse;
public class Debouncer
{
private Debouncer() { }
private readonly int tickThrottle;
private readonly bool onlyWhenRunning;
@pardeike
pardeike / DoMainMenuControls.txt
Created June 1, 2023 18:59
MainMenuDrawer::DoMainMenuControls IL
### Patch: static System.Void RimWorld.MainMenuDrawer::DoMainMenuControls(UnityEngine.Rect rect, System.Boolean anyMapFiles)
### Replacement: static System.Void RimWorld.MainMenuDrawer::RimWorld.MainMenuDrawer.DoMainMenuControls_Patch0(UnityEngine.Rect rect, System.Boolean anyMapFiles)
IL_0000: Local var 0: UnityEngine.Rect
IL_0000: Local var 1: UnityEngine.Rect
IL_0000: Local var 2: System.Collections.Generic.List`1<Verse.ListableOption>
IL_0000: Local var 3: Verse.ListableOption
IL_0000: Local var 4: System.String
IL_0000: Local var 5: System.Action
IL_0000: Local var 6: System.Action
IL_0000: Local var 7: System.Collections.Generic.List`1<Verse.ListableOption>
using HarmonyLib;
using System.Runtime.CompilerServices;
namespace HarmonyTestbed;
public struct Class6Struct
{
public double d1;
public double d2;
public double d3;
@pardeike
pardeike / Persona.xml
Created April 27, 2023 00:52
The 5 year old
<Personality>
<azureVoice>en-US-AnaNeural</azureVoice>
<azureVoiceStyle>default</azureVoiceStyle>
<azureVoiceStyleDegree>0</azureVoiceStyleDegree>
<speechRate>0</speechRate>
<speechPitch>0</speechPitch>
<phrasesLimit>40</phrasesLimit>
<phraseBatchSize>20</phraseBatchSize>
<phraseDelayMin>1</phraseDelayMin>
<phraseDelayMax>1</phraseDelayMax>
@pardeike
pardeike / Persona.xml
Created April 27, 2023 00:35
In the style of Darkest Dungeon
<Personality>
<azureVoiceLanguage>English</azureVoiceLanguage>
<azureVoice>en-US-JasonNeural</azureVoice>
<azureVoiceStyle>default</azureVoiceStyle>
<azureVoiceStyleDegree>2</azureVoiceStyleDegree>
<speechLanguage></speechLanguage>
<speechRate>-0.12</speechRate>
<speechPitch>-0.269999981</speechPitch>
<phrasesLimit>40</phrasesLimit>
<phraseBatchSize>20</phraseBatchSize>