diff --git a/1.4/Assemblies/0Harmony.dll b/1.4/Assemblies/0Harmony.dll
new file mode 100644
index 0000000..e182535
Binary files /dev/null and b/1.4/Assemblies/0Harmony.dll differ
diff --git a/1.4/Assemblies/0Harmony.xml b/1.4/Assemblies/0Harmony.xml
new file mode 100644
index 0000000..f1b9b4c
--- /dev/null
+++ b/1.4/Assemblies/0Harmony.xml
@@ -0,0 +1,3693 @@
+
+
+
+ 0Harmony
+
+
+
+ A factory to create delegate types
+
+
+ Default constructor
+
+
+ Creates a delegate type for a method
+ The method
+ The new delegate type
+
+
+
+ A getter delegate type
+ Type that getter gets field/property value from
+ Type of the value that getter gets
+ The instance get getter uses
+ An delegate
+
+
+
+ A setter delegate type
+ Type that setter sets field/property value for
+ Type of the value that setter sets
+ The instance the setter uses
+ The value the setter uses
+ An delegate
+
+
+
+ A constructor delegate type
+ Type that constructor creates
+ An delegate
+
+
+
+ A helper class for fast access to getters and setters
+
+
+ Creates an instantiation delegate
+ Type that constructor creates
+ The new instantiation delegate
+
+
+
+ Creates an getter delegate for a property
+ Type that getter reads property from
+ Type of the property that gets accessed
+ The property
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field
+ Type that getter reads field from
+ Type of the field that gets accessed
+ The field
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field (with a list of possible field names)
+ Type that getter reads field/property from
+ Type of the field/property that gets accessed
+ A list of possible field names
+ The new getter delegate
+
+
+
+ Creates an setter delegate
+ Type that setter assigns property value to
+ Type of the property that gets assigned
+ The property
+ The new setter delegate
+
+
+
+ Creates an setter delegate for a field
+ Type that setter assigns field value to
+ Type of the field that gets assigned
+ The field
+ The new getter delegate
+
+
+
+ A delegate to invoke a method
+ The instance
+ The method parameters
+ The method result
+
+
+ A helper class to invoke method with delegates
+
+
+ Creates a fast invocation handler from a method
+ The method to invoke
+ Controls if boxed value object is accessed/updated directly
+ The
+
+
+ The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array
+ passed to the fast invocation handler.
+ Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object.
+ Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array.
+ For example,
+
+ var val = 5;
+ var box = (object)val;
+ var arr = new object[] { box };
+ handler(arr); // for a method with parameter signature: ref/out/in int
+
+
+
+
+ If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called,
+ such that all references to the boxed object reflect the potentially updated value.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0]
+ now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object.
+
+
+ If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object,
+ such that potential updates to the value are reflected only in the arguments array.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10.
+
+
+
+
+ A low level memory helper
+
+
+
+ Mark method for no inlining (currently only works on Mono)
+ The method/constructor to change
+
+
+
+ Detours a method
+ The original method/constructor
+ The replacement method/constructor
+ An error string
+
+
+
+ Writes a jump to memory
+ The memory address
+ Jump destination
+ An error string
+
+
+
+ Gets the start of a method in memory
+ The method/constructor
+ [out] Details of the exception
+ The method start address
+
+
+
+ special parameter names that can be used in prefix and postfix methods
+
+
+ Patch function helpers
+
+
+ Sorts patch methods by their priority rules
+ The original method
+ Patches to sort
+ Use debug mode
+ The sorted patch methods
+
+
+
+ Creates new replacement method with the latest patches and detours the original method
+ The original method
+ Information describing the patches
+ The newly created replacement method
+
+
+
+ Creates a patch sorter
+ Array of patches that will be sorted
+ Use debugging
+
+
+ Sorts internal PatchSortingWrapper collection and caches the results.
+ After first run the result is provided from the cache.
+ The original method
+ The sorted patch methods
+
+
+ Checks if the sorter was created with the same patch list and as a result can be reused to
+ get the sorted order of the patches.
+ List of patches to check against
+ true if equal
+
+
+ Removes one unresolved dependency from the least important patch.
+
+
+ Outputs all unblocked patches from the waiting list to results list
+
+
+ Adds patch to both results list and handled patches set
+ Patch to add
+
+
+ Wrapper used over the Patch object to allow faster dependency access and
+ dependency removal in case of cyclic dependencies
+
+
+ Create patch wrapper object used for sorting
+ Patch to wrap
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+ Hash function
+ A hash code
+
+
+ Bidirectionally registers Patches as after dependencies
+ List of dependencies to register
+
+
+ Bidirectionally registers Patches as before dependencies
+ List of dependencies to register
+
+
+ Bidirectionally removes Patch from after dependencies
+ Patch to remove
+
+
+ Bidirectionally removes Patch from before dependencies
+ Patch to remove
+
+
+ Specifies the type of method
+
+
+
+ This is a normal method
+
+
+ This is a getter
+
+
+ This is a setter
+
+
+ This is a constructor
+
+
+ This is a static constructor
+
+
+ This targets the MoveNext method of the enumerator result
+
+
+ Specifies the type of argument
+
+
+
+ This is a normal argument
+
+
+ This is a reference argument (ref)
+
+
+ This is an out argument (out)
+
+
+ This is a pointer argument (&)
+
+
+ Specifies the type of patch
+
+
+
+ Any patch
+
+
+ A prefix patch
+
+
+ A postfix patch
+
+
+ A transpiler
+
+
+ A finalizer
+
+
+ A reverse patch
+
+
+ Specifies the type of reverse patch
+
+
+
+ Use the unmodified original method (directly from IL)
+
+
+ Use the original as it is right now including previous patches but excluding future ones
+
+
+ Specifies the type of method call dispatching mechanics
+
+
+
+ Call the method using dynamic dispatching if method is virtual (including overriden)
+
+
+ This is the built-in form of late binding (a.k.a. dynamic binding) and is the default dispatching mechanic in C#.
+ This directly corresponds with the instruction.
+
+
+ For virtual (including overriden) methods, the instance type's most-derived/overriden implementation of the method is called.
+ For non-virtual (including static) methods, same behavior as : the exact specified method implementation is called.
+
+
+ Note: This is not a fully dynamic dispatch, since non-virtual (including static) methods are still called non-virtually.
+ A fully dynamic dispatch in C# involves using
+ the dynamic type
+ (actually a fully dynamic binding, since even the name and overload resolution happens at runtime), which does not support.
+
+
+
+
+ Call the method using static dispatching, regardless of whether method is virtual (including overriden) or non-virtual (including static)
+
+
+ a.k.a. non-virtual dispatching, early binding, or static binding.
+ This directly corresponds with the instruction.
+
+
+ For both virtual (including overriden) and non-virtual (including static) methods, the exact specified method implementation is called, without virtual/override mechanics.
+
+
+
+
+ The base class for all Harmony annotations (not meant to be used directly)
+
+
+
+ The common information for all attributes
+
+
+ Annotation to define your Harmony patch methods
+
+
+
+ An empty annotation can be used together with TargetMethod(s)
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The full name of the declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ Annotation to define the original method for delegate injection
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies call dispatching mechanics for the delegate
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ Annotation to define your standin methods for reverse patching
+
+
+
+ An annotation that specifies the type of reverse patching
+ The of the reverse patch
+
+
+
+ A Harmony annotation to define that all methods in a class are to be patched
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define patch priority
+ The priority
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define that a patch comes before another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to define that a patch comes after another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to debug a patch (output uses to log to your Desktop)
+
+
+
+ Specifies the Prepare function in a patch class
+
+
+
+ Specifies the Cleanup function in a patch class
+
+
+
+ Specifies the TargetMethod function in a patch class
+
+
+
+ Specifies the TargetMethods function in a patch class
+
+
+
+ Specifies the Prefix function in a patch class
+
+
+
+ Specifies the Postfix function in a patch class
+
+
+
+ Specifies the Transpiler function in a patch class
+
+
+
+ Specifies the Finalizer function in a patch class
+
+
+
+ A Harmony annotation
+
+
+
+ The name of the original argument
+
+
+
+ The index of the original argument
+
+
+
+ The new name of the original argument
+
+
+
+ An annotation to declare injected arguments by name
+
+
+
+ An annotation to declare injected arguments by index
+ Zero-based index
+
+
+
+ An annotation to declare injected arguments by renaming them
+ Name of the original argument
+ New name
+
+
+
+ An annotation to declare injected arguments by index and renaming them
+ Zero-based index
+ New name
+
+
+
+ An abstract wrapper around OpCode and their operands. Used by transpilers
+
+
+
+ The opcode
+
+
+
+ The operand
+
+
+
+ All labels defined on this instruction
+
+
+
+ All exception block boundaries defined on this instruction
+
+
+
+ Creates a new CodeInstruction with a given opcode and optional operand
+ The opcode
+ The operand
+
+
+
+ Create a full copy (including labels and exception blocks) of a CodeInstruction
+ The to copy
+
+
+
+ Clones a CodeInstruction and resets its labels and exception blocks
+ A lightweight copy of this code instruction
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its opcode
+ The opcode
+ A copy of this CodeInstruction with a new opcode
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its operand
+ The operand
+ A copy of this CodeInstruction with a new operand
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Returns an instruction to call the specified closure
+ The delegate type to emit
+ The closure that defines the method to call
+ A that calls the closure as a method
+
+
+
+ Creates a CodeInstruction loading a field (LD[S]FLD[A])
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ Use address of field
+
+
+
+ Creates a CodeInstruction storing to a field (ST[S]FLD)
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+
+
+
+ Returns a string representation of the code instruction
+ A string representation of the code instruction
+
+
+
+ Exception block types
+
+
+
+ The beginning of an exception block
+
+
+
+ The beginning of a catch block
+
+
+
+ The beginning of an except filter block (currently not supported to use in a patch)
+
+
+
+ The beginning of a fault block
+
+
+
+ The beginning of a finally block
+
+
+
+ The end of an exception block
+
+
+
+ An exception block
+
+
+
+ Block type
+
+
+
+ Catch type
+
+
+
+ Creates an exception block
+ The
+ The catch type
+
+
+
+ The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain
+
+
+
+ The unique identifier
+
+
+
+ Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe"
+ This is for full debugging. To debug only specific patches, use the attribute
+
+
+
+ Creates a new Harmony instance
+ A unique identifier (you choose your own)
+ A Harmony instance
+
+
+
+ Searches the current assembly for Harmony annotations and uses them to create patches
+ This method can fail to use the correct assembly when being inlined. It calls StackTrace.GetFrame(1) which can point to the wrong method/assembly. If you are unsure or run into problems, use PatchAll(Assembly.GetExecutingAssembly())
instead.
+
+
+
+ Creates a empty patch processor for an original method
+ The original method/constructor
+ A new instance
+
+
+
+ Creates a patch class processor from an annotated class
+ The class/type
+ A new instance
+
+
+
+ Creates a reverse patcher for one of your stub methods
+ The original method/constructor
+ The stand-in stub method as
+ A new instance
+
+
+
+ Searches an assembly for Harmony annotations and uses them to create patches
+ The assembly
+
+
+
+ Creates patches by manually specifying the methods
+ The original method/constructor
+ An optional prefix method wrapped in a object
+ An optional postfix method wrapped in a object
+ An optional transpiler method wrapped in a object
+ An optional finalizer method wrapped in a object
+ The replacement method that was created to patch the original method
+
+
+
+ Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process
+ The original method/constructor you want to duplicate
+ Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates)
+ An optional transpiler as method that will be applied during the process
+ The replacement method that was created to patch the stub method
+
+
+
+ Unpatches methods by patching them with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+ This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The patch method as method to remove
+
+
+
+ Test for patches from a specific Harmony ID
+ The Harmony ID
+ True if patches for this ID exist
+
+
+
+ Gets patch information for a given original method
+ The original method/constructor
+ The patch information as
+
+
+
+ Gets the methods this instance has patched
+ An enumeration of original methods/constructors
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched original methods/constructors
+
+
+
+ Gets the original method from a given replacement method
+ A replacement method, for example from a stacktrace
+ The original method/constructor or null if not found
+
+
+
+ Tries to get the method from a stackframe including dynamic replacement methods
+ The
+ For normal frames, frame.GetMethod() is returned. For frames containing patched methods, the replacement method is returned or null if no method can be found
+
+
+
+ Gets the original method from the stackframe and uses original if method is a dynamic replacement
+ The
+ The original method from that stackframe
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly versions keyed by Harmony IDs
+
+
+
+ Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure
+
+
+
+ Default serialization constructor (not implemented)
+ The info
+ The context
+
+
+
+ Get a list of IL instructions in pairs of offset+code
+ A list of key/value pairs which represent an offset and the code at that offset
+
+
+
+ Get a list of IL instructions without offsets
+ A list of
+
+
+
+ Get the error offset of the errornous IL instruction
+ The offset
+
+
+
+ Get the index of the errornous IL instruction
+ The index into the list of instructions or -1 if not found
+
+
+
+ A wrapper around a method to use it as a patch (for example a Prefix)
+
+
+
+ The original method
+
+
+
+ Class/type declaring this patch
+
+
+
+ Patch method name
+
+
+
+ Optional patch
+
+
+
+ Array of argument types of the patch method
+
+
+
+ of the patch
+
+
+
+ Install this patch before patches with these Harmony IDs
+
+
+
+ Install this patch after patches with these Harmony IDs
+
+
+
+ Reverse patch type, see
+
+
+
+ Create debug output for this patch
+
+
+
+ Whether to use (true) or (false) mechanics
+ for -attributed delegate
+
+
+
+ Default constructor
+
+
+
+ Creates a patch from a given method
+ The original method
+
+
+
+ Creates a patch from a given method
+ The original method
+ The patch
+ A list of harmony IDs that should come after this patch
+ A list of harmony IDs that should come before this patch
+ Set to true to generate debug output
+
+
+
+ Creates a patch from a given method
+ The patch class/type
+ The patch method name
+ The optional argument types of the patch method (for overloaded methods)
+
+
+
+ Gets the names of all internal patch info fields
+ A list of field names
+
+
+
+ Merges annotations
+ The list of to merge
+ The merged
+
+
+
+ Returns a string that represents the annotation
+ A string representation
+
+
+
+ Annotation extensions
+
+
+
+ Copies annotation information
+ The source
+ The destination
+
+
+
+ Clones an annotation
+ The to clone
+ A copied
+
+
+
+ Merges annotations
+ The master
+ The detail
+ A new, merged
+
+
+
+ Gets all annotations on a class/type
+ The class/type
+ A list of all
+
+
+
+ Gets merged annotations on a class/type
+ The class/type
+ The merged
+
+
+
+ Gets all annotations on a method
+ The method/constructor
+ A list of
+
+
+
+ Gets merged annotations on a method
+ The method/constructor
+ The merged
+
+
+
+
+ A mutable representation of an inline signature, similar to Mono.Cecil's CallSite.
+ Used by the calli instruction, can be used by transpilers
+
+
+
+
+ See
+
+
+
+ See
+
+
+
+ See
+
+
+
+ The list of all parameter types or function pointer signatures received by the call site
+
+
+
+ The return type or function pointer signature returned by the call site
+
+
+
+ Returns a string representation of the inline signature
+ A string representation of the inline signature
+
+
+
+
+ A mutable representation of a parameter type with an attached type modifier,
+ similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq
+
+
+
+
+ Whether this is a modopt (optional modifier type) or a modreq (required modifier type)
+
+
+
+ The modifier type attached to the parameter type
+
+
+
+ The modified parameter type
+
+
+
+ Returns a string representation of the modifier type
+ A string representation of the modifier type
+
+
+
+ Patch serialization
+
+
+
+ Control the binding of a serialized object to a type
+ Specifies the assembly name of the serialized object
+ Specifies the type name of the serialized object
+ The type of the object the formatter creates a new instance of
+
+
+
+ Serializes a patch info
+ The
+ The serialized data
+
+
+
+ Deserialize a patch info
+ The serialized data
+ A
+
+
+
+ Compare function to sort patch priorities
+ The patch
+ Zero-based index
+ The priority
+ A standard sort integer (-1, 0, 1)
+
+
+
+ Serializable patch information
+
+
+
+ Prefixes as an array of
+
+
+
+ Postfixes as an array of
+
+
+
+ Transpilers as an array of
+
+
+
+ Finalizers as an array of
+
+
+
+ Returns if any of the patches wants debugging turned on
+
+
+
+ Adds prefixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a prefix
+
+
+ Removes prefixes
+ The owner of the prefixes, or * for all
+
+
+
+ Adds postfixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a postfix
+
+
+ Removes postfixes
+ The owner of the postfixes, or * for all
+
+
+
+ Adds transpilers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a transpiler
+
+
+ Removes transpilers
+ The owner of the transpilers, or * for all
+
+
+
+ Adds finalizers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a finalizer
+
+
+ Removes finalizers
+ The owner of the finalizers, or * for all
+
+
+
+ Removes a patch using its method
+ The method of the patch to remove
+
+
+
+ Gets a concatenated list of patches
+ The Harmony instance ID adding the new patches
+ The patches to add
+ The current patches
+
+
+
+ Gets a list of patches with any from the given owner removed
+ The owner of the methods, or * for all
+ The current patches
+
+
+
+ A serializable patch
+
+
+
+ Zero-based index
+
+
+
+ The owner (Harmony ID)
+
+
+
+ The priority, see
+
+
+
+ Keep this patch before the patches indicated in the list of Harmony IDs
+
+
+
+ Keep this patch after the patches indicated in the list of Harmony IDs
+
+
+
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ The method of the static patch method
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+ The priority, see
+ A list of Harmony IDs for patches that should run after this patch
+ A list of Harmony IDs for patches that should run before this patch
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+
+
+ Get the patch method or a DynamicMethod if original patch method is a patch factory
+ The original method/constructor
+ The method of the patch
+
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+
+ Hash function
+ A hash code
+
+
+
+ A PatchClassProcessor used to turn on a class/type into patches
+
+
+
+ Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes.
+ The Harmony instance
+ The class to process (need to have at least a [HarmonyPatch] attribute)
+
+
+
+ Applies the patches
+ A list of all created replacement methods or null if patch class is not annotated
+
+
+
+ A group of patches
+
+
+
+ A collection of prefix
+
+
+
+ A collection of postfix
+
+
+
+ A collection of transpiler
+
+
+
+ A collection of finalizer
+
+
+
+ Gets all owners (Harmony IDs) or all known patches
+ The patch owners
+
+
+
+ Creates a group of patches
+ An array of prefixes as
+ An array of postfixes as
+ An array of transpileres as
+ An array of finalizeres as
+
+
+
+ A PatchProcessor handles patches on a method/constructor
+
+
+
+ Creates an empty patch processor
+ The Harmony instance
+ The original method/constructor
+
+
+
+ Adds a prefix
+ The prefix as a
+ A for chaining calls
+
+
+
+ Adds a prefix
+ The prefix method
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix as a
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix method
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler as a
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler method
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer as a
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer method
+ A for chaining calls
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched method/constructor
+
+
+
+ Applies all registered patches
+ The generated replacement method
+
+
+
+ Unpatches patches of a given type and/or Harmony ID
+ The patch type
+ Harmony ID or * for any
+ A for chaining calls
+
+
+
+ Unpatches a specific patch
+ The method of the patch
+ A for chaining calls
+
+
+
+ Gets patch information on an original
+ The original method/constructor
+ The patch information as
+
+
+
+ Sort patch methods by their priority rules
+ The original method
+ Patches to sort
+ The sorted patch methods
+
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly version keyed by Harmony ID
+
+
+
+ Creates a new empty generator to use when reading method bodies
+ A new
+
+
+
+ Creates a new generator matching the method/constructor to use when reading method bodies
+ The original method/constructor to copy method information from
+ A new
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list containing all the original
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ A list containing all the original
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ Apply only the first count of transpilers
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list of
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ Apply only the first count of transpilers
+ A list of
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ All instructions as opcode/operand pairs
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ An existing generator that will be used to create all local variables and labels contained in the result
+ All instructions as opcode/operand pairs
+
+
+
+ A patch priority
+
+
+
+ Patch last
+
+
+
+ Patch with very low priority
+
+
+
+ Patch with low priority
+
+
+
+ Patch with lower than normal priority
+
+
+
+ Patch with normal priority
+
+
+
+ Patch with higher than normal priority
+
+
+
+ Patch with high priority
+
+
+
+ Patch with very high priority
+
+
+
+ Patch first
+
+
+
+ A reverse patcher
+
+
+
+ Creates a reverse patcher
+ The Harmony instance
+ The original method/constructor
+ Your stand-in stub method as
+
+
+
+ Applies the patch
+ The type of patch, see
+ The generated replacement method
+
+
+
+ A collection of commonly used transpilers
+
+
+
+ A transpiler that replaces all occurrences of a given method with another one using the same signature
+ The enumeration of to act on
+ Method or constructor to search for
+ Method or constructor to replace with
+ Modified enumeration of
+
+
+
+ A transpiler that alters instructions that match a predicate by calling an action
+ The enumeration of to act on
+ A predicate selecting the instructions to change
+ An action to apply to matching instructions
+ Modified enumeration of
+
+
+
+ A transpiler that logs a text at the beginning of the method
+ The instructions to act on
+ The log text
+ Modified enumeration of
+
+
+
+ A helper class for reflection related functions
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type
+
+
+
+ Enumerates all assemblies in the current app domain, excluding visual studio assemblies
+ An enumeration of
+
+
+ Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise
+ The name
+ A type or null if not found
+
+
+
+ Gets all successfully loaded types from a given assembly
+ The assembly
+ An array of types
+
+ This calls and returns , while catching any thrown .
+ If such an exception is thrown, returns the successfully loaded types (,
+ filtered for non-null values).
+
+
+
+
+ Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies
+ An enumeration of all in all assemblies, excluding visual studio assemblies
+
+
+ Applies a function going up the type hierarchy and stops at the first non-null result
+ Result type of func()
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+ The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces,
+ and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces).
+ The top-most type in the type hierarchy of all non-interface types (including value types) is .
+
+
+
+
+ Applies a function going into inner types and stops at the first non-null result
+ Generic type parameter
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+
+
+ Gets the reflection information for a directly declared field
+ The class/type where the field is defined
+ The name of the field
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field
+ The class/type where the field is declared
+ The zero-based index of the field inside the class definition
+ A field or null when type is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the Setter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The class/type
+ The name
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the method of an enumerator method
+ Enumerator method that creates the enumerator
+ The internal method of the enumerator or null if no valid enumerator is detected
+
+
+ Gets the names of all method that are declared in a type
+ The declaring class/type
+ A list of method names
+
+
+
+ Gets the names of all method that are declared in the type of the instance
+ An instance of the type to search in
+ A list of method names
+
+
+
+ Gets the names of all fields that are declared in a type
+ The declaring class/type
+ A list of field names
+
+
+
+ Gets the names of all fields that are declared in the type of the instance
+ An instance of the type to search in
+ A list of field names
+
+
+
+ Gets the names of all properties that are declared in a type
+ The declaring class/type
+ A list of property names
+
+
+
+ Gets the names of all properties that are declared in the type of the instance
+ An instance of the type to search in
+ A list of property names
+
+
+
+ Gets the type of any class member of
+ A member
+ The class/type of this member
+
+
+
+ Test if a class member is actually an concrete implementation
+ A member
+ True if the member is a declared
+
+
+
+ Gets the real implementation of a class member
+ A member
+ The member itself if its declared. Otherwise the member that is actually implemented in some base type
+
+
+
+ Gets the reflection information for a directly declared constructor
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the constructor
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the constructor cannot be found
+
+
+
+ Gets the reflection information for a constructor by searching the type and all its super types
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the method
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the method cannot be found
+
+
+
+ Gets reflection information for all declared constructors
+ The class/type where the constructors are declared
+ Optional parameters to only consider static constructors
+ A list of constructor infos
+
+
+
+ Gets reflection information for all declared methods
+ The class/type where the methods are declared
+ A list of methods
+
+
+
+ Gets reflection information for all declared properties
+ The class/type where the properties are declared
+ A list of properties
+
+
+
+ Gets reflection information for all declared fields
+ The class/type where the fields are declared
+ A list of fields
+
+
+
+ Gets the return type of a method or constructor
+ The method/constructor
+ The return type
+
+
+
+ Given a type, returns the first inner type matching a recursive search by name
+ The class/type to start searching at
+ The name of the inner type (case sensitive)
+ The inner type or null if type/name is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first inner type matching a recursive search with a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The inner type or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first method matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The method or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first constructor matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The constructor info or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first property matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The property or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Returns an array containing the type of each object in the given array
+ An array of objects
+ An array of types or an empty array if parameters is null (if an object is null, the type for it will be object)
+
+
+
+ Creates an array of input parameters for a given method and a given set of potential inputs
+ The method/constructor you are planing to call
+ The possible input parameters in any order
+ An object array matching the method signature
+
+
+
+ A readable/assignable reference delegate to an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The runtime instance to access the field (ignored and can be omitted for static fields)
+ A readable/assignable reference to the field
+ Null instance passed to a non-static field ref delegate
+
+ Instance of invalid type passed to a non-static field ref delegate
+ (this can happen if is a parent class or interface of the field's declaring type)
+
+
+
+ This delegate cannot be used for instance fields of structs, since a struct instance passed to the delegate would be passed by
+ value and thus would be a copy that only exists within the delegate's invocation. This is fine for a readonly reference,
+ but makes assignment futile. Use instead.
+
+
+ Note that is not required to be the field's declaring type. It can be a parent class (including ),
+ implemented interface, or a derived class of the field's declaring type ("instanceOfT is FieldDeclaringType" must be possible).
+ Specifically, must be assignable from OR to the field's declaring type.
+ Technically, this allows Nullable, although Nullable is only relevant for structs, and since only static fields of structs
+ are allowed for this delegate, and the instance passed to such a delegate is ignored, this hardly matters.
+
+
+ Similarly, is not required to be the field's field type, unless that type is a non-enum value type.
+ It can be a parent class (including object) or implemented interface of the field's field type. It cannot be a derived class.
+ This variance is not allowed for value types, since that would require boxing/unboxing, which is not allowed for ref values.
+ Special case for enum types: can also be the underlying integral type of the enum type.
+ Specifically, for reference types, must be assignable from
+ the field's field type; for non-enum value types, must be exactly the field's field type; for enum types,
+ must be either the field's field type or the underyling integral type of that field type.
+
+
+ This delegate supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and StaticFieldRefAccess methods that return it) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates an instance field reference for a specific instance of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+
+ The type that defines the field, or derived class of this type; must not be a struct type unless the field is static
+
+ The name of the field
+
+ A readable/assignable delegate with T=object
+ (for static fields, the instance delegate parameter is ignored)
+
+
+
+ This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T
+ in e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ Consider using (and other overloads) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+ type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable delegate with T=object
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and other overloads) instead for static fields.
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference for an instance field of a class
+
+ The type that defines the field; or a parent class (including ), implemented interface, or derived class of this type
+ ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ A readable/assignable reference delegate to an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A reference to the runtime instance to access the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+
+ Creates an instance field reference for a specific instance of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance).
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+
+
+
+ Creates a field reference for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance).
+
+
+
+
+
+ A readable/assignable reference delegate to a static field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type (can be class or struct) the field is defined in
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The type (can be class or struct) the field is defined in
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ An arbitrary type (by convention, the type the field is defined in)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable reference to the field
+
+ The type parameter is only used in exception messaging and to distinguish between this method overload
+ and the overload (which returns a rather than a reference).
+
+
+
+
+ Creates a static field reference delegate
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method to create a delegate from.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate for a given delegate definition, attributed with []
+ The delegate Type, attributed with []
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+ A delegate of given to the method specified via []
+ attributes on
+
+ This calls with the method and virtualCall arguments
+ determined from the [] attributes on ,
+ and the given (for closed instance delegates).
+
+
+
+
+ Returns who called the current method
+ The calling method/constructor (excluding the caller)
+
+
+
+ Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces)
+ The exception to rethrow
+
+
+
+ True if the current runtime is based on Mono, false otherwise (.NET)
+
+
+
+ True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed)
+
+
+
+ True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework)
+
+
+
+ Throws a missing member runtime exception
+ The type that is involved
+ A list of names
+
+
+
+ Gets default value for a specific type
+ The class/type
+ The default value
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+
+ A cache for the or similar Add methods for different types.
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created; for legacy reasons, this must be a class or interface
+ The original object
+ A copy of the original object but of type T
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created
+ The original object
+ [out] The copy of the original object
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+
+
+
+ Makes a deep copy of any object
+ The original object
+ The type of the instance that should be created
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+ The copy of the original object
+
+
+
+ Tests if a type is a struct
+ The type
+ True if the type is a struct
+
+
+
+ Tests if a type is a class
+ The type
+ True if the type is a class
+
+
+
+ Tests if a type is a value type
+ The type
+ True if the type is a value type
+
+
+
+ Tests if a type is an integer type
+ The type
+ True if the type represents some integer
+
+
+
+ Tests if a type is a floating point type
+ The type
+ True if the type represents some floating point
+
+
+
+ Tests if a type is a numerical type
+ The type
+ True if the type represents some number
+
+
+
+ Tests if a type is void
+ The type
+ True if the type is void
+
+
+
+ Test whether an instance is of a nullable type
+ Type of instance
+ An instance to test
+ True if instance is of nullable type, false if not
+
+
+
+ Tests whether a type or member is static, as defined in C#
+ The type or member
+ True if the type or member is static
+
+
+
+ Tests whether a type is static, as defined in C#
+ The type
+ True if the type is static
+
+
+
+ Tests whether a property is static, as defined in C#
+ The property
+ True if the property is static
+
+
+
+ Tests whether an event is static, as defined in C#
+ The event
+ True if the event is static
+
+
+
+ Calculates a combined hash code for an enumeration of objects
+ The objects
+ The hash code
+
+
+
+ A CodeInstruction match
+
+
+ The name of the match
+
+
+ The matched opcodes
+
+
+ The matched operands
+
+
+ The jumps from the match
+
+
+ The jumps to the match
+
+
+ The match predicate
+
+
+ Creates a code match
+ The optional opcode
+ The optional operand
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match
+ The CodeInstruction
+ An optional name
+
+
+
+ Creates a code match
+ The predicate
+ An optional name
+
+
+
+ Returns a string that represents the match
+ A string representation
+
+
+
+ A CodeInstruction matcher
+
+
+ The current position
+ The index or -1 if out of bounds
+
+
+
+ Gets the number of code instructions in this matcher
+ The count
+
+
+
+ Checks whether the position of this CodeMatcher is within bounds
+ True if this CodeMatcher is valid
+
+
+
+ Checks whether the position of this CodeMatcher is outside its bounds
+ True if this CodeMatcher is invalid
+
+
+
+ Gets the remaining code instructions
+ The remaining count
+
+
+
+ Gets the opcode at the current position
+ The opcode
+
+
+
+ Gets the operand at the current position
+ The operand
+
+
+
+ Gets the labels at the current position
+ The labels
+
+
+
+ Gets the exception blocks at the current position
+ The blocks
+
+
+
+ Creates an empty code matcher
+
+
+ Creates a code matcher from an enumeration of instructions
+ The instructions (transpiler argument)
+ An optional IL generator
+
+
+
+ Makes a clone of this instruction matcher
+ A copy of this matcher
+
+
+
+ Gets instructions at the current position
+ The instruction
+
+
+
+ Gets instructions at the current position with offset
+ The offset
+ The instruction
+
+
+
+ Gets all instructions
+ A list of instructions
+
+
+
+ Gets all instructions as an enumeration
+ A list of instructions
+
+
+
+ Gets some instructions counting from current position
+ Number of instructions
+ A list of instructions
+
+
+
+ Gets all instructions within a range
+ The start index
+ The end index
+ A list of instructions
+
+
+
+ Gets all instructions within a range (relative to current position)
+ The start offset
+ The end offset
+ A list of instructions
+
+
+
+ Gets a list of all distinct labels
+ The instructions (transpiler argument)
+ A list of Labels
+
+
+
+ Reports a failure
+ The method involved
+ The logger
+ True if current position is invalid and error was logged
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed)
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at current position
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the end
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the start
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the check function returns false
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Function that checks validity of current state. If it returns false, an exception is thrown
+ The same code matcher
+
+
+
+ Sets an instruction at current position
+ The instruction to set
+ The same code matcher
+
+
+
+ Sets instruction at current position and advances
+ The instruction
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position and advances
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode at current position and advances
+ The opcode
+ The same code matcher
+
+
+
+ Sets operand at current position and advances
+ The operand
+ The same code matcher
+
+
+
+ Creates a label at current position
+ [out] The label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The position
+ [out] The new label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The offset
+ [out] The new label
+ The same code matcher
+
+
+
+ Adds an enumeration of labels to current position
+ The labels
+ The same code matcher
+
+
+
+ Adds an enumeration of labels at a position
+ The position
+ The labels
+ The same code matcher
+
+
+
+ Sets jump to
+ Branch instruction
+ Destination for the jump
+ [out] The created label
+ The same code matcher
+
+
+
+ Inserts some instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Inserts some instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch and advances the position
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Removes current instruction
+ The same code matcher
+
+
+
+ Removes some instruction from current position by count
+ Number of instructions
+ The same code matcher
+
+
+
+ Removes the instructions in a range
+ The start
+ The end
+ The same code matcher
+
+
+
+ Removes the instructions in a offset range
+ The start offset
+ The end offset
+ The same code matcher
+
+
+
+ Advances the current position
+ The offset
+ The same code matcher
+
+
+
+ Moves the current position to the start
+ The same code matcher
+
+
+
+ Moves the current position to the end
+ The same code matcher
+
+
+
+ Searches forward with a predicate and advances position
+ The predicate
+ The same code matcher
+
+
+
+ Searches backwards with a predicate and reverses position
+ The predicate
+ The same code matcher
+
+
+
+ Matches forward and advances position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches forward and advances position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Repeats a match action until boundaries are met
+ The match action
+ An optional action that is executed when no match is found
+ The same code matcher
+
+
+
+ Gets a match by its name
+ The match name
+ An instruction
+
+
+
+ General extensions for common cases
+
+
+
+ Joins an enumeration with a value converter and a delimiter to a string
+ The inner type of the enumeration
+ The enumeration
+ An optional value converter (from T to string)
+ An optional delimiter
+ The values joined into a string
+
+
+
+ Converts an array of types (for example methods arguments) into a human readable form
+ The array of types
+ A human readable description including brackets
+
+
+
+ A full description of a type
+ The type
+ A human readable description
+
+
+
+ A a full description of a method or a constructor without assembly details but with generics
+ The method/constructor
+ A human readable description
+
+
+
+ A helper converting parameter infos to types
+ The array of parameter infos
+ An array of types
+
+
+
+ A helper to access a value via key from a dictionary
+ The key type
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist
+
+
+
+ A helper to access a value via key from a dictionary with extra casting
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist or cannot be cast to T
+
+
+
+ Escapes Unicode and ASCII non printable characters
+ The string to convert
+ The string to convert
+ A string literal surrounded by
+
+
+
+ Extensions for
+
+
+
+ Returns if an is initialized and valid
+ The
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand has the same type and is equal to the value
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand is equal to the value
+ This is an optimized version of for
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand is equal to the given operand
+ This is an optimized version of for
+
+
+
+ Tests for any form of Ldarg*
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Ldarga/Ldarga_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Starg/Starg_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Ldloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Stloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests if the code instruction branches
+ The
+ The label if the instruction is a branch operation or if not
+ True if the instruction branches
+
+
+
+ Tests if the code instruction calls the method/constructor
+ The
+ The method
+ True if the instruction calls the method or constructor
+
+
+
+ Tests if the code instruction loads a constant
+ The
+ True if the instruction loads a constant
+
+
+
+ Tests if the code instruction loads an integer constant
+ The
+ The integer constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a floating point constant
+ The
+ The floating point constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads an enum constant
+ The
+ The enum
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a string constant
+ The
+ The string
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a field
+ The
+ The field
+ Set to true if the address of the field is loaded
+ True if the instruction loads the field
+
+
+
+ Tests if the code instruction stores a field
+ The
+ The field
+ True if the instruction stores this field
+
+
+
+ Adds labels to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds labels to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all labels from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all labels from the code instruction to another one
+ The to move the labels from
+ The other to move the labels to
+ The code instruction labels were moved from (now empty)
+
+
+ Moves all labels from another code instruction to the current one
+ The to move the labels to
+ The other to move the labels from
+ The code instruction that received the labels
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all ExceptionBlocks from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all ExceptionBlocks from the code instruction to another one
+ The to move the ExceptionBlocks from
+ The other to move the ExceptionBlocks to
+ The code instruction blocks were moved from (now empty)
+
+
+ Moves all ExceptionBlocks from another code instruction to the current one
+ The to move the ExceptionBlocks to
+ The other to move the ExceptionBlocks from
+ The code instruction that received the blocks
+
+
+ General extensions for collections
+
+
+
+ A simple way to execute code for every element in a collection
+ The inner type of the collection
+ The collection
+ The action to execute
+
+
+
+ A simple way to execute code for elements in a collection matching a condition
+ The inner type of the collection
+ The collection
+ The predicate
+ The action to execute
+
+
+
+ A helper to add an item to a collection
+ The inner type of the collection
+ The collection
+ The item to add
+ The collection containing the item
+
+
+
+ A helper to add an item to an array
+ The inner type of the collection
+ The array
+ The item to add
+ The array containing the item
+
+
+
+ A helper to add items to an array
+ The inner type of the collection
+ The array
+ The items to add
+ The array containing the items
+
+
+
+ General extensions for collections
+
+
+
+ Tests a class member if it has an IL method body (external methods for example don't have a body)
+ The member to test
+ Returns true if the member has an IL body or false if not
+
+
+ A file log for debugging
+
+
+
+ Set this to make Harmony write its log content to this stream
+
+
+
+ Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop
+
+
+
+ The indent character. The default is tab
+
+
+
+ The current indent level
+
+
+
+ Changes the indentation level
+ The value to add to the indentation level
+
+
+
+ Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ The string to log
+
+
+
+ Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ A list of strings to log (they will not be re-indented)
+
+
+
+ Returns the log buffer and optionally empties it
+ True to empty the buffer
+ The buffer.
+
+
+
+ Replaces the buffer with new lines
+ The lines to store
+
+
+
+ Flushes the log buffer to disk (use in combination with LogBuffered)
+
+
+
+ Log a string directly to disk. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Log a string directly to disk if Harmony.DEBUG is true. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Resets and deletes the log
+
+
+
+ Logs some bytes as hex values
+ The pointer to some memory
+ The length of bytes to log
+
+
+
+ A helper class to retrieve reflection info for non-private methods
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The generic result type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ A reflection helper to read and write private elements
+ The result type defined by GetValue()
+
+
+
+ Creates a traverse instance from an existing instance
+ The existing instance
+
+
+
+ Gets/Sets the current value
+ The value to read or write
+
+
+
+ A reflection helper to read and write private elements
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+ A instance
+
+
+
+ Creates a new traverse instance from a class T
+ The class
+ A instance
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+ A instance
+
+
+
+ Creates a new traverse instance from a named type
+ The type name, for format see
+ A instance
+
+
+
+ Creates a new and empty traverse instance
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+
+
+
+ Gets the current value
+ The value
+
+
+
+ Gets the current value
+ The type of the value
+ The value
+
+
+
+ Invokes the current method with arguments and returns the result
+ The method arguments
+ The value returned by the method
+
+
+
+ Invokes the current method with arguments and returns the result
+ The type of the value
+ The method arguments
+ The value returned by the method
+
+
+
+ Sets a value of the current field or property
+ The value
+ The same traverse instance
+
+
+
+ Gets the type of the current field or property
+ The type
+
+
+
+ Moves the current traverse instance to a inner type
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the field
+ The type name
+ A traverse instance
+
+
+
+ Gets all fields of the current type
+ A list of field names
+
+
+
+ Moves the current traverse instance to a property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Gets all properties of the current type
+ A list of property names
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The arguments defining the argument types of the method overload
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The argument types of the method
+ The arguments for the method
+ A traverse instance
+
+
+
+ Gets all methods of the current type
+ A list of method names
+
+
+
+ Checks if the current traverse instance is for a field
+ True if its a field
+
+
+
+ Checks if the current traverse instance is for a property
+ True if its a property
+
+
+
+ Checks if the current traverse instance is for a method
+ True if its a method
+
+
+
+ Checks if the current traverse instance is for a type
+ True if its a type
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each field
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each field pair
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the field pair and the instances
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each property
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each property pair
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the property pair and the instances
+
+
+
+ A default field action that copies fields to fields
+
+
+
+ Returns a string that represents the current traverse
+ A string representation
+
+
+
+
diff --git a/1.4/Assemblies/0MultiplayerAPI.dll b/1.4/Assemblies/0MultiplayerAPI.dll
new file mode 100644
index 0000000..38b8a0e
Binary files /dev/null and b/1.4/Assemblies/0MultiplayerAPI.dll differ
diff --git a/1.4/Assemblies/Assembly-CSharp-firstpass.dll b/1.4/Assemblies/Assembly-CSharp-firstpass.dll
new file mode 100644
index 0000000..3110d7d
Binary files /dev/null and b/1.4/Assemblies/Assembly-CSharp-firstpass.dll differ
diff --git a/1.4/Assemblies/Assembly-CSharp.dll b/1.4/Assemblies/Assembly-CSharp.dll
new file mode 100644
index 0000000..9eaf3d3
Binary files /dev/null and b/1.4/Assemblies/Assembly-CSharp.dll differ
diff --git a/1.4/Assemblies/C0ffee's RJW Ideology Addons.dll b/1.4/Assemblies/C0ffee's RJW Ideology Addons.dll
new file mode 100644
index 0000000..4d92201
Binary files /dev/null and b/1.4/Assemblies/C0ffee's RJW Ideology Addons.dll differ
diff --git a/1.4/Assemblies/ISharpZipLib.dll b/1.4/Assemblies/ISharpZipLib.dll
new file mode 100644
index 0000000..bb15d24
Binary files /dev/null and b/1.4/Assemblies/ISharpZipLib.dll differ
diff --git a/1.4/Assemblies/NAudio.dll b/1.4/Assemblies/NAudio.dll
new file mode 100644
index 0000000..decb8dd
Binary files /dev/null and b/1.4/Assemblies/NAudio.dll differ
diff --git a/1.4/Assemblies/NVorbis.dll b/1.4/Assemblies/NVorbis.dll
new file mode 100644
index 0000000..89d7214
Binary files /dev/null and b/1.4/Assemblies/NVorbis.dll differ
diff --git a/1.4/Assemblies/RJW.dll b/1.4/Assemblies/RJW.dll
new file mode 100644
index 0000000..cd73522
Binary files /dev/null and b/1.4/Assemblies/RJW.dll differ
diff --git a/1.4/Assemblies/Unity.TextMeshPro.dll b/1.4/Assemblies/Unity.TextMeshPro.dll
new file mode 100644
index 0000000..ec29a4f
Binary files /dev/null and b/1.4/Assemblies/Unity.TextMeshPro.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AIModule.dll b/1.4/Assemblies/UnityEngine.AIModule.dll
new file mode 100644
index 0000000..78e7704
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AIModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ARModule.dll b/1.4/Assemblies/UnityEngine.ARModule.dll
new file mode 100644
index 0000000..faa2f92
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ARModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AccessibilityModule.dll b/1.4/Assemblies/UnityEngine.AccessibilityModule.dll
new file mode 100644
index 0000000..5229d35
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AccessibilityModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll b/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll
new file mode 100644
index 0000000..52d1ec4
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AnimationModule.dll b/1.4/Assemblies/UnityEngine.AnimationModule.dll
new file mode 100644
index 0000000..6243b6b
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AnimationModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AssetBundleModule.dll b/1.4/Assemblies/UnityEngine.AssetBundleModule.dll
new file mode 100644
index 0000000..4762681
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AssetBundleModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.AudioModule.dll b/1.4/Assemblies/UnityEngine.AudioModule.dll
new file mode 100644
index 0000000..04a092a
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.AudioModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ClothModule.dll b/1.4/Assemblies/UnityEngine.ClothModule.dll
new file mode 100644
index 0000000..e9a819d
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ClothModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ClusterInputModule.dll b/1.4/Assemblies/UnityEngine.ClusterInputModule.dll
new file mode 100644
index 0000000..6324fbb
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ClusterInputModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll b/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll
new file mode 100644
index 0000000..26ef8fa
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.CoreModule.dll b/1.4/Assemblies/UnityEngine.CoreModule.dll
new file mode 100644
index 0000000..83b2b0a
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.CoreModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.CrashReportingModule.dll b/1.4/Assemblies/UnityEngine.CrashReportingModule.dll
new file mode 100644
index 0000000..7d391bd
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.CrashReportingModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.DSPGraphModule.dll b/1.4/Assemblies/UnityEngine.DSPGraphModule.dll
new file mode 100644
index 0000000..eba8cc1
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.DSPGraphModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.DirectorModule.dll b/1.4/Assemblies/UnityEngine.DirectorModule.dll
new file mode 100644
index 0000000..5976cc5
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.DirectorModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.GameCenterModule.dll b/1.4/Assemblies/UnityEngine.GameCenterModule.dll
new file mode 100644
index 0000000..4797dbe
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.GameCenterModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.GridModule.dll b/1.4/Assemblies/UnityEngine.GridModule.dll
new file mode 100644
index 0000000..61c1ec4
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.GridModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.InputModule.dll b/1.4/Assemblies/UnityEngine.InputModule.dll
new file mode 100644
index 0000000..3be4fb9
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.InputModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll b/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll
new file mode 100644
index 0000000..cd1981f
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.LocalizationModule.dll b/1.4/Assemblies/UnityEngine.LocalizationModule.dll
new file mode 100644
index 0000000..292f854
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.LocalizationModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll b/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll
new file mode 100644
index 0000000..c570bbe
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll b/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll
new file mode 100644
index 0000000..faf6411
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.Physics2DModule.dll b/1.4/Assemblies/UnityEngine.Physics2DModule.dll
new file mode 100644
index 0000000..65dba8a
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.Physics2DModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.PhysicsModule.dll b/1.4/Assemblies/UnityEngine.PhysicsModule.dll
new file mode 100644
index 0000000..4a7a9a6
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.PhysicsModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll b/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll
new file mode 100644
index 0000000..4ec8198
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll b/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll
new file mode 100644
index 0000000..3de5b54
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll b/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll
new file mode 100644
index 0000000..b59a5b8
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.StreamingModule.dll b/1.4/Assemblies/UnityEngine.StreamingModule.dll
new file mode 100644
index 0000000..69068e5
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.StreamingModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.SubsystemsModule.dll b/1.4/Assemblies/UnityEngine.SubsystemsModule.dll
new file mode 100644
index 0000000..b5b7429
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.SubsystemsModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.TerrainModule.dll b/1.4/Assemblies/UnityEngine.TerrainModule.dll
new file mode 100644
index 0000000..18b193e
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.TerrainModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll b/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll
new file mode 100644
index 0000000..48119b4
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.TextCoreModule.dll b/1.4/Assemblies/UnityEngine.TextCoreModule.dll
new file mode 100644
index 0000000..e13a54d
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.TextCoreModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.TilemapModule.dll b/1.4/Assemblies/UnityEngine.TilemapModule.dll
new file mode 100644
index 0000000..6c43665
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.TilemapModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UI.dll b/1.4/Assemblies/UnityEngine.UI.dll
new file mode 100644
index 0000000..ea17de1
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UI.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UIElementsModule.dll b/1.4/Assemblies/UnityEngine.UIElementsModule.dll
new file mode 100644
index 0000000..8dc2716
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UIElementsModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UIModule.dll b/1.4/Assemblies/UnityEngine.UIModule.dll
new file mode 100644
index 0000000..e082dda
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UIModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UNETModule.dll b/1.4/Assemblies/UnityEngine.UNETModule.dll
new file mode 100644
index 0000000..0234fad
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UNETModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll b/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll
new file mode 100644
index 0000000..e3c39e8
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityConnectModule.dll b/1.4/Assemblies/UnityEngine.UnityConnectModule.dll
new file mode 100644
index 0000000..7ec2470
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityConnectModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll b/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll
new file mode 100644
index 0000000..0024d85
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll b/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll
new file mode 100644
index 0000000..d4f9220
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll b/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll
new file mode 100644
index 0000000..d8b643a
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll b/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll
new file mode 100644
index 0000000..b8b8314
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.VFXModule.dll b/1.4/Assemblies/UnityEngine.VFXModule.dll
new file mode 100644
index 0000000..0895120
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.VFXModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.VRModule.dll b/1.4/Assemblies/UnityEngine.VRModule.dll
new file mode 100644
index 0000000..ea9d6fe
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.VRModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.VehiclesModule.dll b/1.4/Assemblies/UnityEngine.VehiclesModule.dll
new file mode 100644
index 0000000..f7c1085
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.VehiclesModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.VideoModule.dll b/1.4/Assemblies/UnityEngine.VideoModule.dll
new file mode 100644
index 0000000..92c9898
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.VideoModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.WindModule.dll b/1.4/Assemblies/UnityEngine.WindModule.dll
new file mode 100644
index 0000000..8ac2232
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.WindModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.XRModule.dll b/1.4/Assemblies/UnityEngine.XRModule.dll
new file mode 100644
index 0000000..a58bf6a
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.XRModule.dll differ
diff --git a/1.4/Assemblies/UnityEngine.dll b/1.4/Assemblies/UnityEngine.dll
new file mode 100644
index 0000000..d45693c
Binary files /dev/null and b/1.4/Assemblies/UnityEngine.dll differ
diff --git a/1.4/Assemblies/com.rlabrecque.steamworks.net.dll b/1.4/Assemblies/com.rlabrecque.steamworks.net.dll
new file mode 100644
index 0000000..57edb49
Binary files /dev/null and b/1.4/Assemblies/com.rlabrecque.steamworks.net.dll differ
diff --git a/C0ffee's RJW Ideology Addons.csproj b/C0ffee's RJW Ideology Addons.csproj
index ca47b96..a6721be 100644
--- a/C0ffee's RJW Ideology Addons.csproj
+++ b/C0ffee's RJW Ideology Addons.csproj
@@ -9,15 +9,16 @@
Properties
C0ffee_s_RJW_Ideology_Addons
C0ffee%27s RJW Ideology Addons
- v4.7.2
+ v4.8
512
true
+
false
none
false
- 1.3\Assemblies\
+ 1.4\Assemblies\
DEBUG;TRACE
prompt
4
@@ -33,20 +34,17 @@
- ..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
- False
+ ..\..\..\..\workshop\content\294100\839005762\1.4\Assemblies\0Harmony.dll
..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
- False
..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll
False
- ..\rjw\1.3\Assemblies\RJW.dll
- False
+ ..\rjw\1.4\Assemblies\RJW.dll
@@ -58,11 +56,9 @@
..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
- False
..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
- False
diff --git a/CRIALactation/1.3/Assemblies/CRIALactation.dll b/CRIALactation/1.3/Assemblies/CRIALactation.dll
index 3351ee5..4612335 100644
Binary files a/CRIALactation/1.3/Assemblies/CRIALactation.dll and b/CRIALactation/1.3/Assemblies/CRIALactation.dll differ
diff --git a/CRIALactation/1.4/Assemblies/0Harmony.dll b/CRIALactation/1.4/Assemblies/0Harmony.dll
new file mode 100644
index 0000000..e182535
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/0Harmony.dll differ
diff --git a/CRIALactation/1.4/Assemblies/0Harmony.xml b/CRIALactation/1.4/Assemblies/0Harmony.xml
new file mode 100644
index 0000000..f1b9b4c
--- /dev/null
+++ b/CRIALactation/1.4/Assemblies/0Harmony.xml
@@ -0,0 +1,3693 @@
+
+
+
+ 0Harmony
+
+
+
+ A factory to create delegate types
+
+
+ Default constructor
+
+
+ Creates a delegate type for a method
+ The method
+ The new delegate type
+
+
+
+ A getter delegate type
+ Type that getter gets field/property value from
+ Type of the value that getter gets
+ The instance get getter uses
+ An delegate
+
+
+
+ A setter delegate type
+ Type that setter sets field/property value for
+ Type of the value that setter sets
+ The instance the setter uses
+ The value the setter uses
+ An delegate
+
+
+
+ A constructor delegate type
+ Type that constructor creates
+ An delegate
+
+
+
+ A helper class for fast access to getters and setters
+
+
+ Creates an instantiation delegate
+ Type that constructor creates
+ The new instantiation delegate
+
+
+
+ Creates an getter delegate for a property
+ Type that getter reads property from
+ Type of the property that gets accessed
+ The property
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field
+ Type that getter reads field from
+ Type of the field that gets accessed
+ The field
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field (with a list of possible field names)
+ Type that getter reads field/property from
+ Type of the field/property that gets accessed
+ A list of possible field names
+ The new getter delegate
+
+
+
+ Creates an setter delegate
+ Type that setter assigns property value to
+ Type of the property that gets assigned
+ The property
+ The new setter delegate
+
+
+
+ Creates an setter delegate for a field
+ Type that setter assigns field value to
+ Type of the field that gets assigned
+ The field
+ The new getter delegate
+
+
+
+ A delegate to invoke a method
+ The instance
+ The method parameters
+ The method result
+
+
+ A helper class to invoke method with delegates
+
+
+ Creates a fast invocation handler from a method
+ The method to invoke
+ Controls if boxed value object is accessed/updated directly
+ The
+
+
+ The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array
+ passed to the fast invocation handler.
+ Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object.
+ Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array.
+ For example,
+
+ var val = 5;
+ var box = (object)val;
+ var arr = new object[] { box };
+ handler(arr); // for a method with parameter signature: ref/out/in int
+
+
+
+
+ If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called,
+ such that all references to the boxed object reflect the potentially updated value.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0]
+ now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object.
+
+
+ If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object,
+ such that potential updates to the value are reflected only in the arguments array.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10.
+
+
+
+
+ A low level memory helper
+
+
+
+ Mark method for no inlining (currently only works on Mono)
+ The method/constructor to change
+
+
+
+ Detours a method
+ The original method/constructor
+ The replacement method/constructor
+ An error string
+
+
+
+ Writes a jump to memory
+ The memory address
+ Jump destination
+ An error string
+
+
+
+ Gets the start of a method in memory
+ The method/constructor
+ [out] Details of the exception
+ The method start address
+
+
+
+ special parameter names that can be used in prefix and postfix methods
+
+
+ Patch function helpers
+
+
+ Sorts patch methods by their priority rules
+ The original method
+ Patches to sort
+ Use debug mode
+ The sorted patch methods
+
+
+
+ Creates new replacement method with the latest patches and detours the original method
+ The original method
+ Information describing the patches
+ The newly created replacement method
+
+
+
+ Creates a patch sorter
+ Array of patches that will be sorted
+ Use debugging
+
+
+ Sorts internal PatchSortingWrapper collection and caches the results.
+ After first run the result is provided from the cache.
+ The original method
+ The sorted patch methods
+
+
+ Checks if the sorter was created with the same patch list and as a result can be reused to
+ get the sorted order of the patches.
+ List of patches to check against
+ true if equal
+
+
+ Removes one unresolved dependency from the least important patch.
+
+
+ Outputs all unblocked patches from the waiting list to results list
+
+
+ Adds patch to both results list and handled patches set
+ Patch to add
+
+
+ Wrapper used over the Patch object to allow faster dependency access and
+ dependency removal in case of cyclic dependencies
+
+
+ Create patch wrapper object used for sorting
+ Patch to wrap
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+ Hash function
+ A hash code
+
+
+ Bidirectionally registers Patches as after dependencies
+ List of dependencies to register
+
+
+ Bidirectionally registers Patches as before dependencies
+ List of dependencies to register
+
+
+ Bidirectionally removes Patch from after dependencies
+ Patch to remove
+
+
+ Bidirectionally removes Patch from before dependencies
+ Patch to remove
+
+
+ Specifies the type of method
+
+
+
+ This is a normal method
+
+
+ This is a getter
+
+
+ This is a setter
+
+
+ This is a constructor
+
+
+ This is a static constructor
+
+
+ This targets the MoveNext method of the enumerator result
+
+
+ Specifies the type of argument
+
+
+
+ This is a normal argument
+
+
+ This is a reference argument (ref)
+
+
+ This is an out argument (out)
+
+
+ This is a pointer argument (&)
+
+
+ Specifies the type of patch
+
+
+
+ Any patch
+
+
+ A prefix patch
+
+
+ A postfix patch
+
+
+ A transpiler
+
+
+ A finalizer
+
+
+ A reverse patch
+
+
+ Specifies the type of reverse patch
+
+
+
+ Use the unmodified original method (directly from IL)
+
+
+ Use the original as it is right now including previous patches but excluding future ones
+
+
+ Specifies the type of method call dispatching mechanics
+
+
+
+ Call the method using dynamic dispatching if method is virtual (including overriden)
+
+
+ This is the built-in form of late binding (a.k.a. dynamic binding) and is the default dispatching mechanic in C#.
+ This directly corresponds with the instruction.
+
+
+ For virtual (including overriden) methods, the instance type's most-derived/overriden implementation of the method is called.
+ For non-virtual (including static) methods, same behavior as : the exact specified method implementation is called.
+
+
+ Note: This is not a fully dynamic dispatch, since non-virtual (including static) methods are still called non-virtually.
+ A fully dynamic dispatch in C# involves using
+ the dynamic type
+ (actually a fully dynamic binding, since even the name and overload resolution happens at runtime), which does not support.
+
+
+
+
+ Call the method using static dispatching, regardless of whether method is virtual (including overriden) or non-virtual (including static)
+
+
+ a.k.a. non-virtual dispatching, early binding, or static binding.
+ This directly corresponds with the instruction.
+
+
+ For both virtual (including overriden) and non-virtual (including static) methods, the exact specified method implementation is called, without virtual/override mechanics.
+
+
+
+
+ The base class for all Harmony annotations (not meant to be used directly)
+
+
+
+ The common information for all attributes
+
+
+ Annotation to define your Harmony patch methods
+
+
+
+ An empty annotation can be used together with TargetMethod(s)
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The full name of the declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ Annotation to define the original method for delegate injection
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies call dispatching mechanics for the delegate
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ Annotation to define your standin methods for reverse patching
+
+
+
+ An annotation that specifies the type of reverse patching
+ The of the reverse patch
+
+
+
+ A Harmony annotation to define that all methods in a class are to be patched
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define patch priority
+ The priority
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define that a patch comes before another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to define that a patch comes after another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to debug a patch (output uses to log to your Desktop)
+
+
+
+ Specifies the Prepare function in a patch class
+
+
+
+ Specifies the Cleanup function in a patch class
+
+
+
+ Specifies the TargetMethod function in a patch class
+
+
+
+ Specifies the TargetMethods function in a patch class
+
+
+
+ Specifies the Prefix function in a patch class
+
+
+
+ Specifies the Postfix function in a patch class
+
+
+
+ Specifies the Transpiler function in a patch class
+
+
+
+ Specifies the Finalizer function in a patch class
+
+
+
+ A Harmony annotation
+
+
+
+ The name of the original argument
+
+
+
+ The index of the original argument
+
+
+
+ The new name of the original argument
+
+
+
+ An annotation to declare injected arguments by name
+
+
+
+ An annotation to declare injected arguments by index
+ Zero-based index
+
+
+
+ An annotation to declare injected arguments by renaming them
+ Name of the original argument
+ New name
+
+
+
+ An annotation to declare injected arguments by index and renaming them
+ Zero-based index
+ New name
+
+
+
+ An abstract wrapper around OpCode and their operands. Used by transpilers
+
+
+
+ The opcode
+
+
+
+ The operand
+
+
+
+ All labels defined on this instruction
+
+
+
+ All exception block boundaries defined on this instruction
+
+
+
+ Creates a new CodeInstruction with a given opcode and optional operand
+ The opcode
+ The operand
+
+
+
+ Create a full copy (including labels and exception blocks) of a CodeInstruction
+ The to copy
+
+
+
+ Clones a CodeInstruction and resets its labels and exception blocks
+ A lightweight copy of this code instruction
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its opcode
+ The opcode
+ A copy of this CodeInstruction with a new opcode
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its operand
+ The operand
+ A copy of this CodeInstruction with a new operand
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Returns an instruction to call the specified closure
+ The delegate type to emit
+ The closure that defines the method to call
+ A that calls the closure as a method
+
+
+
+ Creates a CodeInstruction loading a field (LD[S]FLD[A])
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ Use address of field
+
+
+
+ Creates a CodeInstruction storing to a field (ST[S]FLD)
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+
+
+
+ Returns a string representation of the code instruction
+ A string representation of the code instruction
+
+
+
+ Exception block types
+
+
+
+ The beginning of an exception block
+
+
+
+ The beginning of a catch block
+
+
+
+ The beginning of an except filter block (currently not supported to use in a patch)
+
+
+
+ The beginning of a fault block
+
+
+
+ The beginning of a finally block
+
+
+
+ The end of an exception block
+
+
+
+ An exception block
+
+
+
+ Block type
+
+
+
+ Catch type
+
+
+
+ Creates an exception block
+ The
+ The catch type
+
+
+
+ The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain
+
+
+
+ The unique identifier
+
+
+
+ Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe"
+ This is for full debugging. To debug only specific patches, use the attribute
+
+
+
+ Creates a new Harmony instance
+ A unique identifier (you choose your own)
+ A Harmony instance
+
+
+
+ Searches the current assembly for Harmony annotations and uses them to create patches
+ This method can fail to use the correct assembly when being inlined. It calls StackTrace.GetFrame(1) which can point to the wrong method/assembly. If you are unsure or run into problems, use PatchAll(Assembly.GetExecutingAssembly())
instead.
+
+
+
+ Creates a empty patch processor for an original method
+ The original method/constructor
+ A new instance
+
+
+
+ Creates a patch class processor from an annotated class
+ The class/type
+ A new instance
+
+
+
+ Creates a reverse patcher for one of your stub methods
+ The original method/constructor
+ The stand-in stub method as
+ A new instance
+
+
+
+ Searches an assembly for Harmony annotations and uses them to create patches
+ The assembly
+
+
+
+ Creates patches by manually specifying the methods
+ The original method/constructor
+ An optional prefix method wrapped in a object
+ An optional postfix method wrapped in a object
+ An optional transpiler method wrapped in a object
+ An optional finalizer method wrapped in a object
+ The replacement method that was created to patch the original method
+
+
+
+ Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process
+ The original method/constructor you want to duplicate
+ Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates)
+ An optional transpiler as method that will be applied during the process
+ The replacement method that was created to patch the stub method
+
+
+
+ Unpatches methods by patching them with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+ This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The patch method as method to remove
+
+
+
+ Test for patches from a specific Harmony ID
+ The Harmony ID
+ True if patches for this ID exist
+
+
+
+ Gets patch information for a given original method
+ The original method/constructor
+ The patch information as
+
+
+
+ Gets the methods this instance has patched
+ An enumeration of original methods/constructors
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched original methods/constructors
+
+
+
+ Gets the original method from a given replacement method
+ A replacement method, for example from a stacktrace
+ The original method/constructor or null if not found
+
+
+
+ Tries to get the method from a stackframe including dynamic replacement methods
+ The
+ For normal frames, frame.GetMethod() is returned. For frames containing patched methods, the replacement method is returned or null if no method can be found
+
+
+
+ Gets the original method from the stackframe and uses original if method is a dynamic replacement
+ The
+ The original method from that stackframe
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly versions keyed by Harmony IDs
+
+
+
+ Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure
+
+
+
+ Default serialization constructor (not implemented)
+ The info
+ The context
+
+
+
+ Get a list of IL instructions in pairs of offset+code
+ A list of key/value pairs which represent an offset and the code at that offset
+
+
+
+ Get a list of IL instructions without offsets
+ A list of
+
+
+
+ Get the error offset of the errornous IL instruction
+ The offset
+
+
+
+ Get the index of the errornous IL instruction
+ The index into the list of instructions or -1 if not found
+
+
+
+ A wrapper around a method to use it as a patch (for example a Prefix)
+
+
+
+ The original method
+
+
+
+ Class/type declaring this patch
+
+
+
+ Patch method name
+
+
+
+ Optional patch
+
+
+
+ Array of argument types of the patch method
+
+
+
+ of the patch
+
+
+
+ Install this patch before patches with these Harmony IDs
+
+
+
+ Install this patch after patches with these Harmony IDs
+
+
+
+ Reverse patch type, see
+
+
+
+ Create debug output for this patch
+
+
+
+ Whether to use (true) or (false) mechanics
+ for -attributed delegate
+
+
+
+ Default constructor
+
+
+
+ Creates a patch from a given method
+ The original method
+
+
+
+ Creates a patch from a given method
+ The original method
+ The patch
+ A list of harmony IDs that should come after this patch
+ A list of harmony IDs that should come before this patch
+ Set to true to generate debug output
+
+
+
+ Creates a patch from a given method
+ The patch class/type
+ The patch method name
+ The optional argument types of the patch method (for overloaded methods)
+
+
+
+ Gets the names of all internal patch info fields
+ A list of field names
+
+
+
+ Merges annotations
+ The list of to merge
+ The merged
+
+
+
+ Returns a string that represents the annotation
+ A string representation
+
+
+
+ Annotation extensions
+
+
+
+ Copies annotation information
+ The source
+ The destination
+
+
+
+ Clones an annotation
+ The to clone
+ A copied
+
+
+
+ Merges annotations
+ The master
+ The detail
+ A new, merged
+
+
+
+ Gets all annotations on a class/type
+ The class/type
+ A list of all
+
+
+
+ Gets merged annotations on a class/type
+ The class/type
+ The merged
+
+
+
+ Gets all annotations on a method
+ The method/constructor
+ A list of
+
+
+
+ Gets merged annotations on a method
+ The method/constructor
+ The merged
+
+
+
+
+ A mutable representation of an inline signature, similar to Mono.Cecil's CallSite.
+ Used by the calli instruction, can be used by transpilers
+
+
+
+
+ See
+
+
+
+ See
+
+
+
+ See
+
+
+
+ The list of all parameter types or function pointer signatures received by the call site
+
+
+
+ The return type or function pointer signature returned by the call site
+
+
+
+ Returns a string representation of the inline signature
+ A string representation of the inline signature
+
+
+
+
+ A mutable representation of a parameter type with an attached type modifier,
+ similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq
+
+
+
+
+ Whether this is a modopt (optional modifier type) or a modreq (required modifier type)
+
+
+
+ The modifier type attached to the parameter type
+
+
+
+ The modified parameter type
+
+
+
+ Returns a string representation of the modifier type
+ A string representation of the modifier type
+
+
+
+ Patch serialization
+
+
+
+ Control the binding of a serialized object to a type
+ Specifies the assembly name of the serialized object
+ Specifies the type name of the serialized object
+ The type of the object the formatter creates a new instance of
+
+
+
+ Serializes a patch info
+ The
+ The serialized data
+
+
+
+ Deserialize a patch info
+ The serialized data
+ A
+
+
+
+ Compare function to sort patch priorities
+ The patch
+ Zero-based index
+ The priority
+ A standard sort integer (-1, 0, 1)
+
+
+
+ Serializable patch information
+
+
+
+ Prefixes as an array of
+
+
+
+ Postfixes as an array of
+
+
+
+ Transpilers as an array of
+
+
+
+ Finalizers as an array of
+
+
+
+ Returns if any of the patches wants debugging turned on
+
+
+
+ Adds prefixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a prefix
+
+
+ Removes prefixes
+ The owner of the prefixes, or * for all
+
+
+
+ Adds postfixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a postfix
+
+
+ Removes postfixes
+ The owner of the postfixes, or * for all
+
+
+
+ Adds transpilers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a transpiler
+
+
+ Removes transpilers
+ The owner of the transpilers, or * for all
+
+
+
+ Adds finalizers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a finalizer
+
+
+ Removes finalizers
+ The owner of the finalizers, or * for all
+
+
+
+ Removes a patch using its method
+ The method of the patch to remove
+
+
+
+ Gets a concatenated list of patches
+ The Harmony instance ID adding the new patches
+ The patches to add
+ The current patches
+
+
+
+ Gets a list of patches with any from the given owner removed
+ The owner of the methods, or * for all
+ The current patches
+
+
+
+ A serializable patch
+
+
+
+ Zero-based index
+
+
+
+ The owner (Harmony ID)
+
+
+
+ The priority, see
+
+
+
+ Keep this patch before the patches indicated in the list of Harmony IDs
+
+
+
+ Keep this patch after the patches indicated in the list of Harmony IDs
+
+
+
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ The method of the static patch method
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+ The priority, see
+ A list of Harmony IDs for patches that should run after this patch
+ A list of Harmony IDs for patches that should run before this patch
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+
+
+ Get the patch method or a DynamicMethod if original patch method is a patch factory
+ The original method/constructor
+ The method of the patch
+
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+
+ Hash function
+ A hash code
+
+
+
+ A PatchClassProcessor used to turn on a class/type into patches
+
+
+
+ Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes.
+ The Harmony instance
+ The class to process (need to have at least a [HarmonyPatch] attribute)
+
+
+
+ Applies the patches
+ A list of all created replacement methods or null if patch class is not annotated
+
+
+
+ A group of patches
+
+
+
+ A collection of prefix
+
+
+
+ A collection of postfix
+
+
+
+ A collection of transpiler
+
+
+
+ A collection of finalizer
+
+
+
+ Gets all owners (Harmony IDs) or all known patches
+ The patch owners
+
+
+
+ Creates a group of patches
+ An array of prefixes as
+ An array of postfixes as
+ An array of transpileres as
+ An array of finalizeres as
+
+
+
+ A PatchProcessor handles patches on a method/constructor
+
+
+
+ Creates an empty patch processor
+ The Harmony instance
+ The original method/constructor
+
+
+
+ Adds a prefix
+ The prefix as a
+ A for chaining calls
+
+
+
+ Adds a prefix
+ The prefix method
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix as a
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix method
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler as a
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler method
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer as a
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer method
+ A for chaining calls
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched method/constructor
+
+
+
+ Applies all registered patches
+ The generated replacement method
+
+
+
+ Unpatches patches of a given type and/or Harmony ID
+ The patch type
+ Harmony ID or * for any
+ A for chaining calls
+
+
+
+ Unpatches a specific patch
+ The method of the patch
+ A for chaining calls
+
+
+
+ Gets patch information on an original
+ The original method/constructor
+ The patch information as
+
+
+
+ Sort patch methods by their priority rules
+ The original method
+ Patches to sort
+ The sorted patch methods
+
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly version keyed by Harmony ID
+
+
+
+ Creates a new empty generator to use when reading method bodies
+ A new
+
+
+
+ Creates a new generator matching the method/constructor to use when reading method bodies
+ The original method/constructor to copy method information from
+ A new
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list containing all the original
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ A list containing all the original
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ Apply only the first count of transpilers
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list of
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ Apply only the first count of transpilers
+ A list of
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ All instructions as opcode/operand pairs
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ An existing generator that will be used to create all local variables and labels contained in the result
+ All instructions as opcode/operand pairs
+
+
+
+ A patch priority
+
+
+
+ Patch last
+
+
+
+ Patch with very low priority
+
+
+
+ Patch with low priority
+
+
+
+ Patch with lower than normal priority
+
+
+
+ Patch with normal priority
+
+
+
+ Patch with higher than normal priority
+
+
+
+ Patch with high priority
+
+
+
+ Patch with very high priority
+
+
+
+ Patch first
+
+
+
+ A reverse patcher
+
+
+
+ Creates a reverse patcher
+ The Harmony instance
+ The original method/constructor
+ Your stand-in stub method as
+
+
+
+ Applies the patch
+ The type of patch, see
+ The generated replacement method
+
+
+
+ A collection of commonly used transpilers
+
+
+
+ A transpiler that replaces all occurrences of a given method with another one using the same signature
+ The enumeration of to act on
+ Method or constructor to search for
+ Method or constructor to replace with
+ Modified enumeration of
+
+
+
+ A transpiler that alters instructions that match a predicate by calling an action
+ The enumeration of to act on
+ A predicate selecting the instructions to change
+ An action to apply to matching instructions
+ Modified enumeration of
+
+
+
+ A transpiler that logs a text at the beginning of the method
+ The instructions to act on
+ The log text
+ Modified enumeration of
+
+
+
+ A helper class for reflection related functions
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type
+
+
+
+ Enumerates all assemblies in the current app domain, excluding visual studio assemblies
+ An enumeration of
+
+
+ Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise
+ The name
+ A type or null if not found
+
+
+
+ Gets all successfully loaded types from a given assembly
+ The assembly
+ An array of types
+
+ This calls and returns , while catching any thrown .
+ If such an exception is thrown, returns the successfully loaded types (,
+ filtered for non-null values).
+
+
+
+
+ Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies
+ An enumeration of all in all assemblies, excluding visual studio assemblies
+
+
+ Applies a function going up the type hierarchy and stops at the first non-null result
+ Result type of func()
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+ The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces,
+ and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces).
+ The top-most type in the type hierarchy of all non-interface types (including value types) is .
+
+
+
+
+ Applies a function going into inner types and stops at the first non-null result
+ Generic type parameter
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+
+
+ Gets the reflection information for a directly declared field
+ The class/type where the field is defined
+ The name of the field
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field
+ The class/type where the field is declared
+ The zero-based index of the field inside the class definition
+ A field or null when type is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the Setter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The class/type
+ The name
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the method of an enumerator method
+ Enumerator method that creates the enumerator
+ The internal method of the enumerator or null if no valid enumerator is detected
+
+
+ Gets the names of all method that are declared in a type
+ The declaring class/type
+ A list of method names
+
+
+
+ Gets the names of all method that are declared in the type of the instance
+ An instance of the type to search in
+ A list of method names
+
+
+
+ Gets the names of all fields that are declared in a type
+ The declaring class/type
+ A list of field names
+
+
+
+ Gets the names of all fields that are declared in the type of the instance
+ An instance of the type to search in
+ A list of field names
+
+
+
+ Gets the names of all properties that are declared in a type
+ The declaring class/type
+ A list of property names
+
+
+
+ Gets the names of all properties that are declared in the type of the instance
+ An instance of the type to search in
+ A list of property names
+
+
+
+ Gets the type of any class member of
+ A member
+ The class/type of this member
+
+
+
+ Test if a class member is actually an concrete implementation
+ A member
+ True if the member is a declared
+
+
+
+ Gets the real implementation of a class member
+ A member
+ The member itself if its declared. Otherwise the member that is actually implemented in some base type
+
+
+
+ Gets the reflection information for a directly declared constructor
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the constructor
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the constructor cannot be found
+
+
+
+ Gets the reflection information for a constructor by searching the type and all its super types
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the method
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the method cannot be found
+
+
+
+ Gets reflection information for all declared constructors
+ The class/type where the constructors are declared
+ Optional parameters to only consider static constructors
+ A list of constructor infos
+
+
+
+ Gets reflection information for all declared methods
+ The class/type where the methods are declared
+ A list of methods
+
+
+
+ Gets reflection information for all declared properties
+ The class/type where the properties are declared
+ A list of properties
+
+
+
+ Gets reflection information for all declared fields
+ The class/type where the fields are declared
+ A list of fields
+
+
+
+ Gets the return type of a method or constructor
+ The method/constructor
+ The return type
+
+
+
+ Given a type, returns the first inner type matching a recursive search by name
+ The class/type to start searching at
+ The name of the inner type (case sensitive)
+ The inner type or null if type/name is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first inner type matching a recursive search with a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The inner type or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first method matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The method or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first constructor matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The constructor info or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first property matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The property or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Returns an array containing the type of each object in the given array
+ An array of objects
+ An array of types or an empty array if parameters is null (if an object is null, the type for it will be object)
+
+
+
+ Creates an array of input parameters for a given method and a given set of potential inputs
+ The method/constructor you are planing to call
+ The possible input parameters in any order
+ An object array matching the method signature
+
+
+
+ A readable/assignable reference delegate to an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The runtime instance to access the field (ignored and can be omitted for static fields)
+ A readable/assignable reference to the field
+ Null instance passed to a non-static field ref delegate
+
+ Instance of invalid type passed to a non-static field ref delegate
+ (this can happen if is a parent class or interface of the field's declaring type)
+
+
+
+ This delegate cannot be used for instance fields of structs, since a struct instance passed to the delegate would be passed by
+ value and thus would be a copy that only exists within the delegate's invocation. This is fine for a readonly reference,
+ but makes assignment futile. Use instead.
+
+
+ Note that is not required to be the field's declaring type. It can be a parent class (including ),
+ implemented interface, or a derived class of the field's declaring type ("instanceOfT is FieldDeclaringType" must be possible).
+ Specifically, must be assignable from OR to the field's declaring type.
+ Technically, this allows Nullable, although Nullable is only relevant for structs, and since only static fields of structs
+ are allowed for this delegate, and the instance passed to such a delegate is ignored, this hardly matters.
+
+
+ Similarly, is not required to be the field's field type, unless that type is a non-enum value type.
+ It can be a parent class (including object) or implemented interface of the field's field type. It cannot be a derived class.
+ This variance is not allowed for value types, since that would require boxing/unboxing, which is not allowed for ref values.
+ Special case for enum types: can also be the underlying integral type of the enum type.
+ Specifically, for reference types, must be assignable from
+ the field's field type; for non-enum value types, must be exactly the field's field type; for enum types,
+ must be either the field's field type or the underyling integral type of that field type.
+
+
+ This delegate supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and StaticFieldRefAccess methods that return it) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates an instance field reference for a specific instance of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+
+ The type that defines the field, or derived class of this type; must not be a struct type unless the field is static
+
+ The name of the field
+
+ A readable/assignable delegate with T=object
+ (for static fields, the instance delegate parameter is ignored)
+
+
+
+ This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T
+ in e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ Consider using (and other overloads) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+ type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable delegate with T=object
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and other overloads) instead for static fields.
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference for an instance field of a class
+
+ The type that defines the field; or a parent class (including ), implemented interface, or derived class of this type
+ ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ A readable/assignable reference delegate to an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A reference to the runtime instance to access the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+
+ Creates an instance field reference for a specific instance of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance).
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+
+
+
+ Creates a field reference for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance).
+
+
+
+
+
+ A readable/assignable reference delegate to a static field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type (can be class or struct) the field is defined in
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The type (can be class or struct) the field is defined in
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ An arbitrary type (by convention, the type the field is defined in)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable reference to the field
+
+ The type parameter is only used in exception messaging and to distinguish between this method overload
+ and the overload (which returns a rather than a reference).
+
+
+
+
+ Creates a static field reference delegate
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method to create a delegate from.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate for a given delegate definition, attributed with []
+ The delegate Type, attributed with []
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+ A delegate of given to the method specified via []
+ attributes on
+
+ This calls with the method and virtualCall arguments
+ determined from the [] attributes on ,
+ and the given (for closed instance delegates).
+
+
+
+
+ Returns who called the current method
+ The calling method/constructor (excluding the caller)
+
+
+
+ Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces)
+ The exception to rethrow
+
+
+
+ True if the current runtime is based on Mono, false otherwise (.NET)
+
+
+
+ True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed)
+
+
+
+ True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework)
+
+
+
+ Throws a missing member runtime exception
+ The type that is involved
+ A list of names
+
+
+
+ Gets default value for a specific type
+ The class/type
+ The default value
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+
+ A cache for the or similar Add methods for different types.
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created; for legacy reasons, this must be a class or interface
+ The original object
+ A copy of the original object but of type T
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created
+ The original object
+ [out] The copy of the original object
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+
+
+
+ Makes a deep copy of any object
+ The original object
+ The type of the instance that should be created
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+ The copy of the original object
+
+
+
+ Tests if a type is a struct
+ The type
+ True if the type is a struct
+
+
+
+ Tests if a type is a class
+ The type
+ True if the type is a class
+
+
+
+ Tests if a type is a value type
+ The type
+ True if the type is a value type
+
+
+
+ Tests if a type is an integer type
+ The type
+ True if the type represents some integer
+
+
+
+ Tests if a type is a floating point type
+ The type
+ True if the type represents some floating point
+
+
+
+ Tests if a type is a numerical type
+ The type
+ True if the type represents some number
+
+
+
+ Tests if a type is void
+ The type
+ True if the type is void
+
+
+
+ Test whether an instance is of a nullable type
+ Type of instance
+ An instance to test
+ True if instance is of nullable type, false if not
+
+
+
+ Tests whether a type or member is static, as defined in C#
+ The type or member
+ True if the type or member is static
+
+
+
+ Tests whether a type is static, as defined in C#
+ The type
+ True if the type is static
+
+
+
+ Tests whether a property is static, as defined in C#
+ The property
+ True if the property is static
+
+
+
+ Tests whether an event is static, as defined in C#
+ The event
+ True if the event is static
+
+
+
+ Calculates a combined hash code for an enumeration of objects
+ The objects
+ The hash code
+
+
+
+ A CodeInstruction match
+
+
+ The name of the match
+
+
+ The matched opcodes
+
+
+ The matched operands
+
+
+ The jumps from the match
+
+
+ The jumps to the match
+
+
+ The match predicate
+
+
+ Creates a code match
+ The optional opcode
+ The optional operand
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match
+ The CodeInstruction
+ An optional name
+
+
+
+ Creates a code match
+ The predicate
+ An optional name
+
+
+
+ Returns a string that represents the match
+ A string representation
+
+
+
+ A CodeInstruction matcher
+
+
+ The current position
+ The index or -1 if out of bounds
+
+
+
+ Gets the number of code instructions in this matcher
+ The count
+
+
+
+ Checks whether the position of this CodeMatcher is within bounds
+ True if this CodeMatcher is valid
+
+
+
+ Checks whether the position of this CodeMatcher is outside its bounds
+ True if this CodeMatcher is invalid
+
+
+
+ Gets the remaining code instructions
+ The remaining count
+
+
+
+ Gets the opcode at the current position
+ The opcode
+
+
+
+ Gets the operand at the current position
+ The operand
+
+
+
+ Gets the labels at the current position
+ The labels
+
+
+
+ Gets the exception blocks at the current position
+ The blocks
+
+
+
+ Creates an empty code matcher
+
+
+ Creates a code matcher from an enumeration of instructions
+ The instructions (transpiler argument)
+ An optional IL generator
+
+
+
+ Makes a clone of this instruction matcher
+ A copy of this matcher
+
+
+
+ Gets instructions at the current position
+ The instruction
+
+
+
+ Gets instructions at the current position with offset
+ The offset
+ The instruction
+
+
+
+ Gets all instructions
+ A list of instructions
+
+
+
+ Gets all instructions as an enumeration
+ A list of instructions
+
+
+
+ Gets some instructions counting from current position
+ Number of instructions
+ A list of instructions
+
+
+
+ Gets all instructions within a range
+ The start index
+ The end index
+ A list of instructions
+
+
+
+ Gets all instructions within a range (relative to current position)
+ The start offset
+ The end offset
+ A list of instructions
+
+
+
+ Gets a list of all distinct labels
+ The instructions (transpiler argument)
+ A list of Labels
+
+
+
+ Reports a failure
+ The method involved
+ The logger
+ True if current position is invalid and error was logged
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed)
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at current position
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the end
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the start
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the check function returns false
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Function that checks validity of current state. If it returns false, an exception is thrown
+ The same code matcher
+
+
+
+ Sets an instruction at current position
+ The instruction to set
+ The same code matcher
+
+
+
+ Sets instruction at current position and advances
+ The instruction
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position and advances
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode at current position and advances
+ The opcode
+ The same code matcher
+
+
+
+ Sets operand at current position and advances
+ The operand
+ The same code matcher
+
+
+
+ Creates a label at current position
+ [out] The label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The position
+ [out] The new label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The offset
+ [out] The new label
+ The same code matcher
+
+
+
+ Adds an enumeration of labels to current position
+ The labels
+ The same code matcher
+
+
+
+ Adds an enumeration of labels at a position
+ The position
+ The labels
+ The same code matcher
+
+
+
+ Sets jump to
+ Branch instruction
+ Destination for the jump
+ [out] The created label
+ The same code matcher
+
+
+
+ Inserts some instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Inserts some instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch and advances the position
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Removes current instruction
+ The same code matcher
+
+
+
+ Removes some instruction from current position by count
+ Number of instructions
+ The same code matcher
+
+
+
+ Removes the instructions in a range
+ The start
+ The end
+ The same code matcher
+
+
+
+ Removes the instructions in a offset range
+ The start offset
+ The end offset
+ The same code matcher
+
+
+
+ Advances the current position
+ The offset
+ The same code matcher
+
+
+
+ Moves the current position to the start
+ The same code matcher
+
+
+
+ Moves the current position to the end
+ The same code matcher
+
+
+
+ Searches forward with a predicate and advances position
+ The predicate
+ The same code matcher
+
+
+
+ Searches backwards with a predicate and reverses position
+ The predicate
+ The same code matcher
+
+
+
+ Matches forward and advances position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches forward and advances position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Repeats a match action until boundaries are met
+ The match action
+ An optional action that is executed when no match is found
+ The same code matcher
+
+
+
+ Gets a match by its name
+ The match name
+ An instruction
+
+
+
+ General extensions for common cases
+
+
+
+ Joins an enumeration with a value converter and a delimiter to a string
+ The inner type of the enumeration
+ The enumeration
+ An optional value converter (from T to string)
+ An optional delimiter
+ The values joined into a string
+
+
+
+ Converts an array of types (for example methods arguments) into a human readable form
+ The array of types
+ A human readable description including brackets
+
+
+
+ A full description of a type
+ The type
+ A human readable description
+
+
+
+ A a full description of a method or a constructor without assembly details but with generics
+ The method/constructor
+ A human readable description
+
+
+
+ A helper converting parameter infos to types
+ The array of parameter infos
+ An array of types
+
+
+
+ A helper to access a value via key from a dictionary
+ The key type
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist
+
+
+
+ A helper to access a value via key from a dictionary with extra casting
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist or cannot be cast to T
+
+
+
+ Escapes Unicode and ASCII non printable characters
+ The string to convert
+ The string to convert
+ A string literal surrounded by
+
+
+
+ Extensions for
+
+
+
+ Returns if an is initialized and valid
+ The
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand has the same type and is equal to the value
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand is equal to the value
+ This is an optimized version of for
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand is equal to the given operand
+ This is an optimized version of for
+
+
+
+ Tests for any form of Ldarg*
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Ldarga/Ldarga_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Starg/Starg_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Ldloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Stloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests if the code instruction branches
+ The
+ The label if the instruction is a branch operation or if not
+ True if the instruction branches
+
+
+
+ Tests if the code instruction calls the method/constructor
+ The
+ The method
+ True if the instruction calls the method or constructor
+
+
+
+ Tests if the code instruction loads a constant
+ The
+ True if the instruction loads a constant
+
+
+
+ Tests if the code instruction loads an integer constant
+ The
+ The integer constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a floating point constant
+ The
+ The floating point constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads an enum constant
+ The
+ The enum
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a string constant
+ The
+ The string
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a field
+ The
+ The field
+ Set to true if the address of the field is loaded
+ True if the instruction loads the field
+
+
+
+ Tests if the code instruction stores a field
+ The
+ The field
+ True if the instruction stores this field
+
+
+
+ Adds labels to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds labels to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all labels from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all labels from the code instruction to another one
+ The to move the labels from
+ The other to move the labels to
+ The code instruction labels were moved from (now empty)
+
+
+ Moves all labels from another code instruction to the current one
+ The to move the labels to
+ The other to move the labels from
+ The code instruction that received the labels
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all ExceptionBlocks from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all ExceptionBlocks from the code instruction to another one
+ The to move the ExceptionBlocks from
+ The other to move the ExceptionBlocks to
+ The code instruction blocks were moved from (now empty)
+
+
+ Moves all ExceptionBlocks from another code instruction to the current one
+ The to move the ExceptionBlocks to
+ The other to move the ExceptionBlocks from
+ The code instruction that received the blocks
+
+
+ General extensions for collections
+
+
+
+ A simple way to execute code for every element in a collection
+ The inner type of the collection
+ The collection
+ The action to execute
+
+
+
+ A simple way to execute code for elements in a collection matching a condition
+ The inner type of the collection
+ The collection
+ The predicate
+ The action to execute
+
+
+
+ A helper to add an item to a collection
+ The inner type of the collection
+ The collection
+ The item to add
+ The collection containing the item
+
+
+
+ A helper to add an item to an array
+ The inner type of the collection
+ The array
+ The item to add
+ The array containing the item
+
+
+
+ A helper to add items to an array
+ The inner type of the collection
+ The array
+ The items to add
+ The array containing the items
+
+
+
+ General extensions for collections
+
+
+
+ Tests a class member if it has an IL method body (external methods for example don't have a body)
+ The member to test
+ Returns true if the member has an IL body or false if not
+
+
+ A file log for debugging
+
+
+
+ Set this to make Harmony write its log content to this stream
+
+
+
+ Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop
+
+
+
+ The indent character. The default is tab
+
+
+
+ The current indent level
+
+
+
+ Changes the indentation level
+ The value to add to the indentation level
+
+
+
+ Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ The string to log
+
+
+
+ Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ A list of strings to log (they will not be re-indented)
+
+
+
+ Returns the log buffer and optionally empties it
+ True to empty the buffer
+ The buffer.
+
+
+
+ Replaces the buffer with new lines
+ The lines to store
+
+
+
+ Flushes the log buffer to disk (use in combination with LogBuffered)
+
+
+
+ Log a string directly to disk. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Log a string directly to disk if Harmony.DEBUG is true. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Resets and deletes the log
+
+
+
+ Logs some bytes as hex values
+ The pointer to some memory
+ The length of bytes to log
+
+
+
+ A helper class to retrieve reflection info for non-private methods
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The generic result type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ A reflection helper to read and write private elements
+ The result type defined by GetValue()
+
+
+
+ Creates a traverse instance from an existing instance
+ The existing instance
+
+
+
+ Gets/Sets the current value
+ The value to read or write
+
+
+
+ A reflection helper to read and write private elements
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+ A instance
+
+
+
+ Creates a new traverse instance from a class T
+ The class
+ A instance
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+ A instance
+
+
+
+ Creates a new traverse instance from a named type
+ The type name, for format see
+ A instance
+
+
+
+ Creates a new and empty traverse instance
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+
+
+
+ Gets the current value
+ The value
+
+
+
+ Gets the current value
+ The type of the value
+ The value
+
+
+
+ Invokes the current method with arguments and returns the result
+ The method arguments
+ The value returned by the method
+
+
+
+ Invokes the current method with arguments and returns the result
+ The type of the value
+ The method arguments
+ The value returned by the method
+
+
+
+ Sets a value of the current field or property
+ The value
+ The same traverse instance
+
+
+
+ Gets the type of the current field or property
+ The type
+
+
+
+ Moves the current traverse instance to a inner type
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the field
+ The type name
+ A traverse instance
+
+
+
+ Gets all fields of the current type
+ A list of field names
+
+
+
+ Moves the current traverse instance to a property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Gets all properties of the current type
+ A list of property names
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The arguments defining the argument types of the method overload
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The argument types of the method
+ The arguments for the method
+ A traverse instance
+
+
+
+ Gets all methods of the current type
+ A list of method names
+
+
+
+ Checks if the current traverse instance is for a field
+ True if its a field
+
+
+
+ Checks if the current traverse instance is for a property
+ True if its a property
+
+
+
+ Checks if the current traverse instance is for a method
+ True if its a method
+
+
+
+ Checks if the current traverse instance is for a type
+ True if its a type
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each field
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each field pair
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the field pair and the instances
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each property
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each property pair
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the property pair and the instances
+
+
+
+ A default field action that copies fields to fields
+
+
+
+ Returns a string that represents the current traverse
+ A string representation
+
+
+
+
diff --git a/CRIALactation/1.4/Assemblies/0MultiplayerAPI.dll b/CRIALactation/1.4/Assemblies/0MultiplayerAPI.dll
new file mode 100644
index 0000000..38b8a0e
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/0MultiplayerAPI.dll differ
diff --git a/CRIALactation/1.4/Assemblies/Assembly-CSharp-firstpass.dll b/CRIALactation/1.4/Assemblies/Assembly-CSharp-firstpass.dll
new file mode 100644
index 0000000..3110d7d
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/Assembly-CSharp-firstpass.dll differ
diff --git a/CRIALactation/1.4/Assemblies/Assembly-CSharp.dll b/CRIALactation/1.4/Assemblies/Assembly-CSharp.dll
new file mode 100644
index 0000000..9eaf3d3
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/Assembly-CSharp.dll differ
diff --git a/CRIALactation/1.4/Assemblies/CRIALactation.dll b/CRIALactation/1.4/Assemblies/CRIALactation.dll
new file mode 100644
index 0000000..df8d0f8
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/CRIALactation.dll differ
diff --git a/CRIALactation/1.4/Assemblies/HugsLib.dll b/CRIALactation/1.4/Assemblies/HugsLib.dll
new file mode 100644
index 0000000..cbd145f
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/HugsLib.dll differ
diff --git a/CRIALactation/1.4/Assemblies/HugsLib.xml b/CRIALactation/1.4/Assemblies/HugsLib.xml
new file mode 100644
index 0000000..d156b74
--- /dev/null
+++ b/CRIALactation/1.4/Assemblies/HugsLib.xml
@@ -0,0 +1,1467 @@
+
+
+
+ HugsLib
+
+
+
+
+ Informs the player about a mod that requires a later version of HugsLib than the one running.
+ Also has button to open the download link in the Steam or system browser.
+
+
+
+
+ Entry point for the library.
+ Instantiated by the game at the start of DoPlayLoad().
+
+
+
+
+ Loads and stores textures from the HugsLib /Textures folder
+
+
+
+
+ Handles the key presses for key bindings added by HugsLib
+
+
+
+
+ Checks the current version of the library against the About.xml -> requiredLibraryVersion of all mods.
+ Shows a popup window () if one of the loaded mods requires a
+ more recent version of the library.
+
+
+
+
+ Ensures that the library comes after Core in the load order and displays a warning dialog otherwise.
+
+
+
+
+ Provides support for reading version information from Manifest.xml files.
+ These files are used in mods by Fluffy and a a few other authors.
+
+
+
+
+ Attempts to read and parse the manifest file for a mod.
+
+
+ Returns null if reading or parsing fails for any reason.
+
+
+
+
+ Reads and parses the manifest file for a mod.
+
+
+ Returns null if the file does not exist.
+
+
+
+
+ Checks for Dev mode and bypasses the Restart message box.
+ Holding Shift will prevent the automatic restart.
+
+
+
+
+ Provides an entry point for late controller setup during static constructor initialization.
+
+
+
+
+ Forwards ticks to the controller. Will not be saved and is never spawned.
+
+
+
+
+ Holds references to key binding defs used by the library.
+
+
+
+
+ A base for managers that save data in xml format, to be stored in the save data folder
+
+
+
+
+ This is added as a component to the GameObject on scene to forward events to the controller.
+
+
+
+
+ Represents the information stored in the About/Version.xml file.
+ Since we cannot update the version of the library assembly, we have to store the version externally.
+
+
+
+
+ A shorter, invariable alternative to System.Version in the format of major.minor.patch
+ Also known as a semantic version number.
+ System.Version can be implicitly cast to this type.
+ VersionShort is no longer used by HugsLib internally, and the type is retained for backwards compatibility.
+
+
+
+
+ The extended update news dialog, with filtering by mod and a menu button in entry headers for dev mode actions.
+
+
+
+
+ Handles the custom loading mechanics of s.
+
+
+
+
+ Filters s by their mod identifier.
+
+
+
+
+ Provides the options for the dev tools dropdown menu in the extended update news dialog.
+
+
+
+
+ Displays a list to update feature defs with basic image and formatting support. See for proper syntax.
+
+
+
+
+ Stores the highest displayed update news version for all mods that provide update news via .
+ Defs are loaded from the News folder in the root mod directory.
+
+
+
+
+ Shows the news dialog window when there are not yet displayed news items available.
+
+ Pass true to disable filtering based on what has
+ and has not been seen and open the dialog with all available news items.
+ true, if there have been found news items that were not displayed before, and the dialog has been opened
+
+
+
+ Rewire the main menu "Dev quicktest" button to trigger the HugsLib quickstarter.
+
+
+
+
+ Hooks into the flow of the vanilla MonoBehavior.OnGUI()
+ This allows to take advantage of automatic UI scaling and prevents GUI updates during a loading screen.
+
+
+
+
+ Adds an entry point to draw and additional debug button on the toolbar.
+ The infix is necessary to catch the WidgetRow that the stock buttons are drawn to.
+
+
+
+
+ Extends the width of the immediate window the dev toolbar buttons are drawn to to accommodate an additional button
+
+
+
+
+ Adds a hook for the early initialization of a Game.
+
+
+
+
+ Forces a game restart after a language change.
+ This is necessary to avoid creating problems for running mods caused by reloaded graphics and defs.
+
+
+
+
+ Adds a hook for discarding maps.
+
+
+
+
+ Adds extra buttons to the Log window.
+
+
+
+
+ Adds a hook to produce the WorldLoaded callback for ModBase mods.
+
+
+
+
+ Adds a hook to produce the MapGenerated callback for ModBase mods.
+
+
+
+
+ Adds a hook to produce the MapComponentsInitializing callback for ModBase mods.
+
+
+
+
+ Adds a hook to produce the MapLoaded callback for ModBase mods.
+
+
+
+
+ Restarts the game automatically, bypassing the message dialog, if changes in the mod configuration have been made and dev mode is on.
+ Holding Shift will prevent the restart, while allowing the config changes to still be saved.
+
+
+
+
+ Adds a hook to produce the DefsLoaded callback for ModBase mods.
+
+
+
+
+ Hooks into the flow of the vanilla MonoBehavior.Update()
+
+
+
+
+ Hooks into the flow of the vanilla MonoBehavior.OnGUI().
+ Unlike the patch, this hook also
+ allows to receive OnGUI events during loading screens.
+
+
+
+
+ Displays at game startup when the quickstarter is scheduled to run.
+ Shows the pending operation and allows to abort or disable the quickstart.
+
+
+
+
+ Allows to change settings related to the custom quickstart functionality.
+ Strings are not translated, since this is a tool exclusively for modders.
+
+
+
+
+ Manages the custom quickstart functionality.
+ Will trigger map loading and generation when the appropriate settings are present, and draws an additional dev toolbar button.
+
+
+
+
+ Wraps settings related to the Quickstart system for storage in a SettingHandle.
+
+
+
+
+ Caches the result of a string translation for performance.
+ Also caches the calculated size of the label that would accomodate the translated string.
+
+
+
+
+ Contains data used for the creation of a .
+
+
+
+
+ A name for the entry to show to the player.
+
+
+
+
+ The delegate that will be called when the menu entry is clicked.
+
+
+
+
+ Set to true to make a greyed-out, non-selectable menu entry.
+
+
+
+
+
+
+
+
+ Helper methods for drawing elements and controls that appear in the window.
+
+
+
+
+ Draws a hovering menu of 2 buttons: info and menu.
+
+
+ Text for the info button tooltip. Null to disable.
+ When false, the menu button is semi-transparent and non-interactable
+ When true, uses menu-with-plus-badge icon for the button
+ true if the menu button was clicked
+
+
+
+ Draws the menu button for the hovering menu.
+
+
+ When false, the button is semi-transparent and non-interactable
+ When true, uses menu-with-plus-badge icon for the button
+ true if the menu button was clicked
+
+
+
+ Used to preserve the state of the Mod Settings window between multiple openings.
+ State is not persisted between game restarts.
+
+
+
+
+ Utility methods for SettingHandleConvertible data objects.
+ These are useful for packing and unpacking your custom fields into a string without bothering with manual serialization.
+
+
+
+
+ Deserializes an XML string into an existing object instance.
+
+ The serialized values to fill the object with
+ The object to receive the deserialized values
+
+
+
+ Serializes an object into a compact XML string.
+ Whitespace and namespace declarations are omitted.
+ Make sure the object is annotated with SerializableAttribute and the fields to serialize with XmlElementAttribute.
+
+ The object to serialize
+
+
+
+ An options window for settings exposed by mods using the library
+
+
+
+
+ Base type for all custom SettingHandle types.
+ Allows complex data structures to be stored in setting values by converting them to and from their string representation.
+ See for an easy way to serialize complex types to XML.
+
+
+
+
+ Return false to prevent this object from serializing and being written to file.
+
+
+
+
+ Called when settings handles of this type load an existing value.
+ Should deserialize and restore the state of the object using the provided string.
+
+
+
+
+ Called when handles of this type are being saved, and only if return true.
+ Should serialize the state of the object into a string so it can be restored later.
+
+
+
+
+ A set of useful value constraints for use with SettingHandle
+
+
+
+
+ A group of settings values added by a mod. Each mod has their own ModSettingsPack.
+ Loaded values are stored until they are "claimed" by their mod by requesting a handle for a setting with the same name.
+
+
+
+
+ Identifier of the mod that owns this pack
+
+
+
+
+ The name of the owning mod that will display is the Mod Settings dialog
+
+
+
+
+ Additional context menu options for this entry in the mod settings dialog.
+ Will be shown when the hovering menu button for this entry is clicked.
+
+
+
+
+ Returns true if any handles retrieved from this pack have had their values changed.
+ Resets to false after the changes are saved.
+
+
+
+
+ Enumerates the handles that have been registered with this pack up to this point.
+
+
+
+
+ Retrieves an existing SettingHandle from the pack, or creates a new one.
+ Loaded settings will only display in the Mod Settings dialog after they have been claimed using this method.
+
+ The type of setting value you are creating.
+ Unique identifier for the setting. Must be unique for this specific pack only.
+ A display name for the setting that will show up next to it in the Mod Settings dialog. Recommended to keep this short.
+ A description for the setting that will appear in a tooltip when the player hovers over the setting in the Mod Settings dialog.
+ The value the setting will assume when newly created and when the player resets the setting to its default.
+ An optional delegate that will be called when a new value is about to be assigned to the handle. Receives a string argument and must return a bool to indicate if the passed value is valid for the setting.
+ Used only for Enum settings. Enum values are displayed in a readable format by the following method: Translate(prefix+EnumValueName)
+
+
+
+ Returns a handle that was already created.
+ Will return null if the handle does not exist yet.
+
+ Throws an exception if the referenced handle does not match the provided type
+ The name of the handle to retrieve
+
+
+
+ Attempts to retrieve a setting value by name.
+ If a handle for that value has already been created, returns that handle's StringValue.
+ Otherwise will return the unclaimed value that was loaded from the XML file.
+ Will return null if the value does not exist.
+
+ The name of the setting the value of which should be retrieved
+
+
+
+ Returns true, if there is a setting value that can be retrieved with PeekValue.
+ This includes already created handles and unclaimed values.
+
+ The name of the setting to check
+
+
+
+ Deletes a setting loaded from the xml file before it is claimed using GetHandle.
+ Useful for cleaning up settings that are no longer in use.
+
+ The identifier of the setting (handle identifier)
+
+
+
+ Prompts the to save changes if any or the registered
+ s have handles with unsaved changes
+
+
+
+
+ A central place for mods to store persistent settings. Individual settings are grouped by mod using ModSettingsPack
+
+
+
+
+ Fires when is called and changes are about to be saved.
+ Use and to identify changed packs,
+ and with to identify changed handles.
+
+
+
+
+ Fires when is called and the settings file has just been written to disk.
+
+
+
+
+ Enumerates the s that have been registered up to this point.
+
+
+
+
+ Returns true when there are handles with values that have changed since the last time settings were saved.
+
+
+
+
+ Retrieves the for a given mod identifier.
+
+ The unique identifier of the mod that owns the pack
+ If not null, assigns the property of the pack.
+ This will be displayed in the Mod Settings dialog as a header.
+
+
+
+ Saves all settings to disk and notifies all ModBase mods by calling SettingsChanged()
+
+
+
+
+ Removes a settings pack for a mod if it exists. Use SaveChanges to apply the change afterward.
+
+ The identifier of the mod owning the pack
+
+
+
+ An individual persistent setting owned by a mod.
+ The extra layer of inheritance allows for type abstraction and storing SettingHandles in lists.
+
+
+
+
+ Unique identifier of the setting.
+
+
+
+
+ Name displayed in the settings menu.
+
+
+
+
+ Displayed as a tooltip in the settings menu.
+
+
+
+
+ Should return true if the passed value is valid for this setting. Optional.
+
+
+
+
+ The string identifier prefix used to display enum values in the settings menu (e.g. "prefix_" for "prefix_EnumValue")
+
+
+
+
+ Return true to make this setting visible in the menu. Optional.
+ An invisible setting can still be reset to default using the Reset All button.
+
+
+
+
+ Draw a custom control for the settings menu entry. Entry name is already drawn when this is called.
+ Optional. Return value indicates if the handle value was changed during the drawer call.
+
+
+
+
+ Fully override the drawing of the settings menu entry for this handle.
+ This replaces both the title and the control half of the entry.
+ Optional. Return value indicates if the handle value was changed during the drawer call.
+
+
+ The following built-in handle drawing features are also disabled when this property is assigned:
+ hovering info/menu buttons ().
+
+
+
+
+ When true, setting will never appear. For serialized data.
+ No longer affects value resetting, see
+
+
+
+
+ When true (true by default), the setting can be reset to its default value by the player.
+ If the handle is visible, this can be done through the right-click menu, or using the "Reset all" button.
+ Disabling this is generally not recommended, except for specific use cases (for example, content unlocked by the player).
+
+
+
+
+ When true, will not save this setting to the xml file. Useful in conjunction with CustomDrawer for placing buttons in the settings menu.
+
+
+
+
+ Specifies by how much the + and - buttons should change a numeric setting.
+
+
+
+
+ When CustomDrawer is used, specifies the height of the row for the handle. Leave at 0 for default height.
+
+
+
+
+ Affects the order in which handles appear in the settings menu. Lower comes first, default is 0.
+
+
+
+
+ Returns true if the of this handle has been modified
+ after the creation of the handle or the last time its value was saved.
+ Automatically resets to false when saves changes.
+ Can be manually toggled when e.g. replacing null with an instance in a handle.
+
+
+
+
+ Additional context menu options for the entry of this handle in the mod settings dialog.
+ Will be shown when the hovering menu button for this entry is clicked.
+
+
+ The "Reset to default" option is always present, but will be disabled if is false.
+
+
+
+
+ Marks the handle as modified and forces all settings to be saved.
+ This is necessary for values, as changes in reference types cannot be automatically detected.
+
+
+
+
+ Dispatched after the Value of the handle changes.
+
+
+
+
+ Implicitly cast handles to the Value they carry.
+
+
+
+
+ Called when the Value of the handle changes. Optional.
+
+
+
+
+ The actual value of the setting.
+ This is converted to its string representation when settings are saved.
+ Assigning a new value will trigger the OnValueChanged delegate.
+
+
+
+
+ The value the setting assumes when initially created or reset.
+
+
+
+
+ Retrieves the string representation of the setting or assigns a new setting value using a string.
+ Will trigger the Validator delegate if assigned and change the Value property if the validation passes.
+
+
+
+
+ Returns the type of the handle Value property.
+
+
+
+
+ Assigns the default value to the Value property.
+ Ignores the property.
+
+
+
+
+ Returns true if the handle is set to its default value.
+
+
+
+
+
+ Keeps track of mod packageIds that ever were loaded together with HugsLib
+ by the player and the first/last time they were seen.
+
+
+
+
+ Sets the "first time seen" status of a packageId until the game is restarted.
+
+ Throws on null packageId
+
+
+
+ Returns true if the provided packageId was recorded for the first time during the current run.
+
+ Throws on null packageId
+
+
+
+ Returns true if the provided mod packageId was at any time seen running together with HugsLib.
+
+ Throws on null packageId
+
+
+
+ Used by to track mod packageIds loaded from the XML file.
+
+
+
+
+ Used to indicate that a type should be instantiated at the earliest moment possible.
+ Specifically, when classes are instantiated (see .DoPlayLoad()).
+ If is true, Harmony patching will also happen at that time.
+
+
+
+
+ The front-end for LogPublisher.
+ Shows the status of the upload operation, provides controls and shows the produced URL.
+
+
+
+
+ Collects the game logs and loaded mods and posts the information on GitHub as a gist.
+
+
+
+
+ Allows adding custom buttons to the EditWindow_Log window.
+
+
+
+
+ Alignment side for custom widgets.
+
+
+
+
+ Callback to draw log window widgets in.
+
+ The log window being dawn.
+ Window area for custom widgets.
+ The currently selected log message, or null.
+ Draw your widget using this to automatically align it with the others.
+
+
+
+ Adds a new drawing callback to the log window widget drawer.
+
+ The delegate called each OnGUI to draw the widget.
+ The side of the WidgetRow this widget should be drawn into.
+
+
+
+ Commands start a new process on the target machine using platform specific commands and args to pass to the shell.
+ Refer to the Microsoft documentation for dotNet 3.5 for more info on a process.
+ https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.90).aspx
+
+
+
+
+ A command to open a directory in the systems default file explorer.
+ Since Unity's OpenUrl() is broken on OS X, we can use a shell to do it correctly.
+
+
+
+
+ A Command to open the log file in the systems default text editor.
+
+
+
+
+ The hub of the library. Instantiates classes that extend ModBase and forwards some of the more useful events to them.
+ The assembly version of the library should reflect the current major Rimworld version, i.e.: 0.18.0.0 for B18.
+ This gives us the ability to release updates to the library without breaking compatibility with the mods that implement it.
+ See Core.HugsLibMod for the entry point.
+
+
+
+
+ The base class for all mods using HugsLib library. All classes extending ModBase will be instantiated
+ automatically by at game initialization.
+ Can be annotated with to initialize the mod at
+ initialization time and have be called.
+
+
+
+
+ This can be used to log messages specific to your mod.
+ It will prefix everything with your ModIdentifier.
+
+
+
+
+ The ModSettingsPack specific to your mod.
+ Use this to create settings handles that represent the values of saved settings.
+
+
+
+
+ Override this and return false to prevent a Harmony instance from being automatically created and scanning your assembly for patches.
+
+
+
+
+ The reference to Harmony instance that applied the patches in your assembly.
+
+
+
+
+ A unique identifier used both as and .
+ Override them separately if different identifiers are needed or no should be assigned to .
+ Must start with a letter and contain any of [A-z, 0-9, -, _, :] (identifier must be valid as an XML tag name).
+
+
+ This is no longer used to identify mods since 7.0 (Rimworld 1.1). Use ModBase.ModContentPack.PackageId to that end instead.
+
+
+
+
+ A unique identifier to use as a key when settings are stored for this mod by .
+ Must start with a letter and contain any of [A-z, 0-9, -, _, :] (identifier must be valid as an XML tag name).
+ By default uses the PackageId of the implementing mod.
+ Returning null will prevent the property from being assigned.
+
+
+
+
+ A readable identifier for the mod, used as a prefix by and in various error messages.
+ Appear as "[LogIdentifier] message" when using .
+ By default uses the non-lowercase PackageId of the implementing mod or the type name if that is not set.
+
+
+
+
+ The null-checked version of .
+ Returns the type name if is null.
+
+
+
+
+ The content pack for the mod containing the assembly this class belongs to
+
+
+
+
+ Can be false if the mod was enabled at game start and then disabled in the mods menu.
+ Always true, unless the of the declaring mod can't be
+ identified for some unexpected reason.
+
+
+
+
+ Contains the AssemblyVersion and AssemblyFileVersion of the mod. Used by .
+
+
+
+
+ Return the override version from the Version.xml file if specified,
+ or the higher one between AssemblyVersion and AssemblyFileVersion
+
+
+
+
+ Called during HugsLib instantiation, accounting for mod load order.
+ Load order among mods implementing is respected.
+ and only if the implementing class is annotated with .
+
+
+
+
+ Called when HugsLib receives the call.
+ Load order among mods implementing is respected.
+ Called after the static constructors for non-HugsLib mods have executed. Is not called again on def reload
+
+
+
+
+ An alias for , both or either can be used,
+ although makes for clearer code by indicating when the method is called.
+
+
+
+
+ Called on each tick when in Play scene
+
+ The sequential number of the tick being processed
+
+
+
+ Called each frame
+
+
+
+
+ Called each unity physics update
+
+
+
+
+ Called on each unity gui event, after UIRoot.UIRootOnGUI.
+ Respects UI scaling and screen fading. Will not be called during loading screens.
+ This is a good place to listen for hotkey events.
+
+
+
+
+ Called when GameState.Playing has been entered and the world is fully loaded in the Play scene.
+ Will not be called during world generation and landing site selection.
+
+
+
+
+ Called right after Map.ConstructComponents() (before MapLoaded)
+
+ The map being initialized
+
+
+
+ Called right after a new map has been generated.
+ This is the equivalent of MapComponent.MapGenerated().
+
+ The new map that has just finished generating
+
+
+
+ Called when the map was fully loaded
+
+ The map that has finished loading
+
+
+
+ Called after a map has been abandoned or otherwise made inaccessible.
+ Works on player bases, encounter maps, destroyed faction bases, etc.
+
+ The map that has been discarded
+
+
+
+ Called after each scene change
+
+ The scene that has been loaded
+
+
+
+ Called after settings menu changes have been confirmed.
+ This is called for all mods, regardless if their own settings have been modified, or not.
+
+
+
+
+ Called after StaticInitialize and when defs have been reloaded. This is a good place to inject defs.
+ Get your settings handles here, so that the labels will properly update on language change.
+ If the mod is disabled after being loaded, this method will STILL execute. Use ModIsActive to check.
+
+
+ There is no scenario in which defs are reloaded without the game restarting, save for a mod manually initiating a reload.
+ When def reloading is not an issue, anything done by this method can be safely done in StaticInitialize.
+
+
+
+
+ Called before the game process shuts down.
+ "Quit to OS", clicking the "X" button on the window, and pressing Alt+F4 all execute this event.
+ There are still ways to forcibly terminate the game process, so this callback is not 100% reliable.
+
+
+ Modified s are automatically saved after this call.
+
+
+
+
+ Describes a single update news item.
+ Recommended to be placed in the /News folder in the root directory of the mod.
+ Can be loaded from the /Defs folder, but any placed
+ in the /News folder will unload all s loaded from /Defs.
+
+
+
+
+ An optional unique identifier to reference the mod that adds this news item.
+ If not set, the PackageId of the mod will be used.
+ Must start with a letter and contain any of [A-z, 0-9, -, _, :]
+
+
+ Used to preserve compatibility with pre-RW1.1 HugsLib news data, such as already displayed news items and ignored news providers.
+ Previously used to reference a BodBase.ModIdentifier which had to be loaded for the defining news def to be displayed.
+
+
+
+
+ Displayed in the title of the news item
+
+
+
+
+ Optional complete replacement for the news item title
+
+
+
+
+ The version number associated with the news item. Format: major.minor.patch
+ Used to sort news items and determine which items have not been displayed yet.
+
+
+ For example, after an item with version 3.2.1 has been displayed, adding an item with version 3.2.0 will not cause the
+ New Mod Features dialog to automatically open. However, both items will still appear the next time the dialog is opened.
+ The version of the mod adding the news item is no longer required to be equal or higher for a news item to be displayed.
+
+
+
+
+ The text of the news item. Can contain text and images, supports Unity html markup (only recommended for highlighting).
+ The text can contain the following formatting markers:
+ | -> (pipe) splits the content into segments. A segment can be a paragraph or image sequence
+ img:name1,name2 -> Displays a horizontal image sequence. Image names are file names without the extension.
+ caption:text -> Attaches a text paragraph on the right side of the preceding image
+ Everything else is treated as plain text and creates a paragraph.
+
+ Paragraph1|Paragraph2|img:singleImage|caption:caption\ntext|img:sequence1,sequence2|More text
+
+
+
+ When set to true (true by default), leading and trailing whitespace characters (spaces, tabs, newlines)
+ are removed from content captions and paragraphs.
+ This makes it easier lay out your content and not have to cram everything into one line.
+
+
+
+
+ Optional link to a forum post/info page for this update, or the whole mod. Displayed in the news item title.
+
+
+
+
+ Specifies which players of the mod the news item should be only shown to- new players, returning players, or both.
+ Defaults to .
+
+
+
+
+ Returns the Id of the owning mod.
+ is used if defined, and ModContentPack.PackageId otherwise.
+
+
+
+
+ Provides a convenient way to read, compare and print out the assembly version and file version of assemblies.
+
+
+
+
+ Tries to read the file assembly version in addition to the already known assembly version.
+
+ The assembly to read
+ The full path to the assembly file, if is not set
+ An with only AssemblyVersion set if an exception was encountered
+
+
+
+ Reads assembly version information for a mod assembly.
+ Mod assemblies require special treatment, since they are loaded from byte arrays and their is null.
+
+ The assembly to read
+ The content pack the assembly was loaded from
+ See
+
+
+
+ A way to schedule single-use callbacks for an upcoming event.
+ Useful to break the stack and ensure code is run in the main thread.
+ Access via HugsLibController.Instance.DoLater
+
+
+
+
+ Schedule a callback to be executed at the start of the next tick
+
+
+
+
+ Schedule a callback to be executed at the start of the next frame
+
+
+
+
+ Schedule a callback to be executed at the start of the next OnGUI
+
+
+
+
+ Schedule a callback to be executed the next time a map has finished loading
+
+ The callback receives the map that has finished loading
+
+
+
+ A performance-friendly way to execute code at arbitrary tick intervals.
+ Optimized for one-off timed callbacks with variable callback delay.
+ Use DistributedTickScheduler instead if you have many recipients with recurring callbacks and constant time.
+ Callbacks are called at tick time, which means a game must be loaded and running for them to be processed.
+
+
+
+
+ Registers a delegate to be called in a given number of ticks.
+
+ The delegate to be called
+ The delay in ticks before the delegate is called
+ Optional owner of the delegate. Callback will not fire if the Thing is not spawned at call time.
+ If true, the callback will be rescheduled after each call until manually unscheduled
+
+
+
+ Manually remove a callback to abort a delay or clear a recurring callback.
+ Silently fails if the callback is not found.
+
+ The scheduled callback
+
+
+
+ Only for debug purposes
+
+
+
+
+ A compact confirm dialog with Esc and Enter key support.
+
+
+
+
+ A compact message dialog with a title and a custom close button label.
+
+
+
+ A title to display in the dialog
+ A message to display in the dialog
+ A custom label to the close button. Optional- when null, the default label will be used instead.
+ A callback to call when the dialog is closed
+
+
+
+ A ticking scheduler for things that require a tick only every so often.
+ Distributes tick calls uniformly over multiple frames to reduce the workload.
+ Optimized for many tick recipients with the same tick interval.
+
+
+
+
+ Registers a delegate to be called every tickInterval ticks.
+
+ The delegate that will be called
+ The interval between the calls (for example 30 to have the delegate be called 2 times a second)
+ The Thing the delegate is attached to. The callback will be automatically unregistered if the owner is found to be despawned at call time.
+
+
+
+ Manually removes a delegate to prevent further calls.
+
+ Throws if the provided owner is not registered. Use IsRegistered() to check.
+ The Thing the delegate was registered with
+
+
+
+ Returns true if the passed Thing is registered as the owner of a delegate.
+
+
+
+
+
+
+ Returns all registered tick recipients
+
+
+
+
+
+ Returns the number of calls issued across all intervals during the last tick
+
+
+
+
+ Returns the number of active tickers (intervals)
+
+
+
+
+ Tools for working with the Harmony library.
+
+
+
+
+ Produces a human-readable list of all methods patched by all Harmony instances and their respective patches.
+
+
+
+
+ Produces a human-readable list of all methods patched by a single Harmony instance and their respective patches.
+
+ A Harmony instance that can be queried for patch information.
+
+
+
+ Produces a human-readable list of Harmony patches on a given set of methods.
+
+
+
+
+ Produces a human-readable list of all Harmony versions present and their respective owners.
+
+ A Harmony instance that can be queried for version information.
+
+
+
+
+ Logs an error if any issues with Harmony patches are detected
+
+
+
+
+ A catch-all place for extension methods and other useful stuff
+
+
+
+
+ Returns true if the left or right Shift keys are currently pressed.
+
+
+
+
+ Returns true if the left or right Alt keys are currently pressed.
+
+
+
+
+ Returns true if the left or right Control keys are currently pressed.
+ Mac command keys are supported, as well.
+
+
+
+
+ Returns an enumerable as a comma-separated string.
+
+ A list of elements to string together
+
+
+
+ Returns an enumerable as a string, joined by a separator string. By default null values appear as an empty string.
+
+ A list of elements to string together
+ A string to inset between elements
+ If true, null elements will appear as "[null]"
+
+
+
+ Returns a version as major.minor.patch formatted string.
+
+
+
+
+ Checks if a Thing has a designation of a given def.
+
+
+ The designation def to check for
+
+
+
+ Adds or removes a designation of a given def on a Thing. Fails silently if designation is already in the desired state.
+
+ The thing to designate
+ The DesignationDef to apply or remove
+ True to add the designation, false to remove
+
+
+
+ Checks if a cell has a designation of a given def
+
+ The map position to check
+ The DesignationDef to detect
+ The map to look on. When null, defaults to VisibleMap.
+
+
+
+ Adds or removes a designation of a given def on a cell. Fails silently if designation is already in the desired state.
+
+ The position to designate
+ The DesignationDef to apply or remove
+ True to add the designation, false to remove
+ The map to operate on. When null, defaults to VisibleMap.
+
+
+
+ Returns true, if a MethodInfo matches the provided signature.
+
+ Note: instance methods always take their parent type as the first parameter.
+ The method to check
+ Expected return type of the checked method
+ Expected parameter types of the checked method
+
+
+
+ Returns an attribute from a member, if it exists.
+ Mods could include attributes from libraries that are not loaded, which would throw an exception, so error checking is included.
+
+ The type of the attribute to fetch
+ The member to fetch the attribute from
+
+
+
+ Enumerates all loaded assemblies, including stock and enabled mods.
+
+
+
+
+ Returns true if the mod with a matching name is currently loaded in the mod configuration.
+
+ The ModMetaData.Name to match
+
+
+
+ Copies a string to the system copy buffer and displays a confirmation message.
+
+
+
+
+ Expands a shorthand unix user directory path with its full system path.
+
+
+
+
+ Adds double quotes to the start and end of a string.
+
+
+
+
+ Attempts to return the path of the log file Unity is writing to.
+
+
+
+
+
+ Sends a constructed UnityWebRequest, waits for the result, and returns the data via callbacks.
+
+ Use UnityWebRequest or WWW to construct a request. Do not call Send().
+ Called with the response body if server replied with status 200.
+ Called with the error message in case of a network error or if server replied with status other than 200.
+ The expected status code in the response for the request to be considered successful
+ How long to wait before aborting the request
+
+
+
+ Tries to find the file handle for a given mod assembly name.
+
+ This is a replacement for mod assemblies are loaded from byte arrays.
+ The of the assembly
+ The content pack the assembly was presumably loaded from
+ Returns null if the file is not found
+
+
+
+ Same as but suppresses all exceptions.
+
+
+
+
+ Opens the Options dialog on the Mod Settings page.
+
+
+
+
+ Adds a hash to a manually instantiated def to avoid def collisions.
+
+
+
+
+ Give a short hash to a def created at runtime.
+ Short hashes are used for proper saving of defs in compressed maps within a save file.
+
+
+ The type of defs your def will be saved with. For example,
+ use typeof(ThingDef) if your def extends ThingDef.
+
+
+
+ Injects a map component into the current map if it does not already exist.
+ Required for new MapComponents that were not active at map creation.
+ The injection is performed at ExecuteWhenFinished to allow calling this method in MapComponent constructors.
+
+ The MapComponent that is expected to be present is the map's component list
+
+
+
+ Gets the map component of the given type from a map.
+ Will throw an exception if a component of the requested type is not found.
+
+ The type of your MapComponent
+ The map to get the component from
+
+
+
+ A logger that prefixes all messages with the identifier of the issuing mod.
+
+
+
+
+ Writes a message to the log, prefixing it with the issuing mod identifier.
+
+ The message to write
+ Optional substitution values for the message
+
+
+
+ Same as Message(), but the console will display the message as a warning.
+
+
+
+
+ Same as Message(), but the console will display the message as an error.
+ This will open the Log window in in Dev mode.
+
+
+
+
+ Writes a message only if Dev mode is enabled.
+ Message is written using Tracer.Trace with the addition of the ModIdentifier as the first value.
+
+ The strings to display
+
+
+
+ Same as Trace(), but formats the message and replaces substitution variables.
+
+
+
+
+ Writes an error to the log to report an exception.
+ The message will contain the name of the method that caused the exception if a location is not provided.
+
+ The exception that occurred
+ Optional identifier of the mod that caused the exception
+ True, if the exception should only be reported once for that specific location. Useful for errors that will trigger each frame or tick.
+ Optional name of the location where the exception occurred. Will display as "exception during (location)"
+
+
+
+ A tool to identify the platform the game is running on.
+
+
+
+
+ Utility methods for displaying debug messages during development.
+
+
+
+
+ Writes comma-separated log messages if the game is in Dev mode.
+ Any non-strings will be converted to strings, and null values will appear explicitly.
+
+ Messages to output
+
+
+
+ Similar to Trace, but feeds the messages through String.Format first.
+
+ The string to interpolate
+ Interpolation arguments
+
+
+
+ Base type for utility WorldObjects repurposed to store data. See UtilityWorldObjectManager for more info.
+
+
+
+
+ Handles utility WorldObjects of custom types.
+ Utility WorldObjects are a map-independent storage method for custom data.
+ All UWOs share the same def and aren't visible on the world, but are saved and loaded with it.
+
+
+
+
+ Returns an existing UWO or creates a new one, adding it to the world.
+
+ Your custom type that extends UtilityWorldObject
+
+
+
diff --git a/CRIALactation/1.4/Assemblies/ISharpZipLib.dll b/CRIALactation/1.4/Assemblies/ISharpZipLib.dll
new file mode 100644
index 0000000..bb15d24
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/ISharpZipLib.dll differ
diff --git a/CRIALactation/1.4/Assemblies/Milk.dll b/CRIALactation/1.4/Assemblies/Milk.dll
new file mode 100644
index 0000000..0e58733
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/Milk.dll differ
diff --git a/CRIALactation/1.4/Assemblies/NAudio.dll b/CRIALactation/1.4/Assemblies/NAudio.dll
new file mode 100644
index 0000000..decb8dd
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/NAudio.dll differ
diff --git a/CRIALactation/1.4/Assemblies/NVorbis.dll b/CRIALactation/1.4/Assemblies/NVorbis.dll
new file mode 100644
index 0000000..89d7214
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/NVorbis.dll differ
diff --git a/CRIALactation/1.4/Assemblies/RJW.dll b/CRIALactation/1.4/Assemblies/RJW.dll
new file mode 100644
index 0000000..cd73522
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/RJW.dll differ
diff --git a/CRIALactation/1.4/Assemblies/Unity.TextMeshPro.dll b/CRIALactation/1.4/Assemblies/Unity.TextMeshPro.dll
new file mode 100644
index 0000000..ec29a4f
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/Unity.TextMeshPro.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AIModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AIModule.dll
new file mode 100644
index 0000000..78e7704
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AIModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ARModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ARModule.dll
new file mode 100644
index 0000000..faa2f92
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ARModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AccessibilityModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AccessibilityModule.dll
new file mode 100644
index 0000000..5229d35
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AccessibilityModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll
new file mode 100644
index 0000000..52d1ec4
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AnimationModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AnimationModule.dll
new file mode 100644
index 0000000..6243b6b
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AnimationModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AssetBundleModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AssetBundleModule.dll
new file mode 100644
index 0000000..4762681
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AssetBundleModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.AudioModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.AudioModule.dll
new file mode 100644
index 0000000..04a092a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.AudioModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ClothModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ClothModule.dll
new file mode 100644
index 0000000..e9a819d
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ClothModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ClusterInputModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ClusterInputModule.dll
new file mode 100644
index 0000000..6324fbb
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ClusterInputModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll
new file mode 100644
index 0000000..26ef8fa
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.CoreModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.CoreModule.dll
new file mode 100644
index 0000000..83b2b0a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.CoreModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.CrashReportingModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.CrashReportingModule.dll
new file mode 100644
index 0000000..7d391bd
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.CrashReportingModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.DSPGraphModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.DSPGraphModule.dll
new file mode 100644
index 0000000..eba8cc1
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.DSPGraphModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.DirectorModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.DirectorModule.dll
new file mode 100644
index 0000000..5976cc5
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.DirectorModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.GameCenterModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.GameCenterModule.dll
new file mode 100644
index 0000000..4797dbe
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.GameCenterModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.GridModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.GridModule.dll
new file mode 100644
index 0000000..61c1ec4
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.GridModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.IMGUIModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.IMGUIModule.dll
new file mode 100644
index 0000000..b557b58
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.IMGUIModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ImageConversionModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ImageConversionModule.dll
new file mode 100644
index 0000000..79aa449
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ImageConversionModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.InputLegacyModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.InputLegacyModule.dll
new file mode 100644
index 0000000..1067ff9
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.InputLegacyModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.InputModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.InputModule.dll
new file mode 100644
index 0000000..3be4fb9
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.InputModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll
new file mode 100644
index 0000000..cd1981f
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.LocalizationModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.LocalizationModule.dll
new file mode 100644
index 0000000..292f854
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.LocalizationModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll
new file mode 100644
index 0000000..c570bbe
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll
new file mode 100644
index 0000000..faf6411
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.PerformanceReportingModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.Physics2DModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.Physics2DModule.dll
new file mode 100644
index 0000000..65dba8a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.Physics2DModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.PhysicsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.PhysicsModule.dll
new file mode 100644
index 0000000..4a7a9a6
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.PhysicsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll
new file mode 100644
index 0000000..4ec8198
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.ScreenCaptureModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.SharedInternalsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.SharedInternalsModule.dll
new file mode 100644
index 0000000..8a9c9eb
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.SharedInternalsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll
new file mode 100644
index 0000000..3de5b54
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll
new file mode 100644
index 0000000..b59a5b8
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.StreamingModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.StreamingModule.dll
new file mode 100644
index 0000000..69068e5
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.StreamingModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.SubsystemsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.SubsystemsModule.dll
new file mode 100644
index 0000000..b5b7429
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.SubsystemsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.TerrainModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.TerrainModule.dll
new file mode 100644
index 0000000..18b193e
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.TerrainModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll
new file mode 100644
index 0000000..48119b4
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.TextCoreModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.TextCoreModule.dll
new file mode 100644
index 0000000..e13a54d
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.TextCoreModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.TextRenderingModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.TextRenderingModule.dll
new file mode 100644
index 0000000..447239e
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.TextRenderingModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.TilemapModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.TilemapModule.dll
new file mode 100644
index 0000000..6c43665
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.TilemapModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UI.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UI.dll
new file mode 100644
index 0000000..ea17de1
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UI.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UIElementsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UIElementsModule.dll
new file mode 100644
index 0000000..8dc2716
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UIElementsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UIModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UIModule.dll
new file mode 100644
index 0000000..e082dda
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UIModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UNETModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UNETModule.dll
new file mode 100644
index 0000000..0234fad
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UNETModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll
new file mode 100644
index 0000000..e3c39e8
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityConnectModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityConnectModule.dll
new file mode 100644
index 0000000..7ec2470
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityConnectModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll
new file mode 100644
index 0000000..0024d85
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll
new file mode 100644
index 0000000..d4f9220
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll
new file mode 100644
index 0000000..b99842a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll
new file mode 100644
index 0000000..d8b643a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll
new file mode 100644
index 0000000..b8b8314
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.VFXModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.VFXModule.dll
new file mode 100644
index 0000000..0895120
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.VFXModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.VRModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.VRModule.dll
new file mode 100644
index 0000000..ea9d6fe
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.VRModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.VehiclesModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.VehiclesModule.dll
new file mode 100644
index 0000000..f7c1085
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.VehiclesModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.VideoModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.VideoModule.dll
new file mode 100644
index 0000000..92c9898
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.VideoModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.WindModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.WindModule.dll
new file mode 100644
index 0000000..8ac2232
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.WindModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.XRModule.dll b/CRIALactation/1.4/Assemblies/UnityEngine.XRModule.dll
new file mode 100644
index 0000000..a58bf6a
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.XRModule.dll differ
diff --git a/CRIALactation/1.4/Assemblies/UnityEngine.dll b/CRIALactation/1.4/Assemblies/UnityEngine.dll
new file mode 100644
index 0000000..d45693c
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/UnityEngine.dll differ
diff --git a/CRIALactation/1.4/Assemblies/com.rlabrecque.steamworks.net.dll b/CRIALactation/1.4/Assemblies/com.rlabrecque.steamworks.net.dll
new file mode 100644
index 0000000..57edb49
Binary files /dev/null and b/CRIALactation/1.4/Assemblies/com.rlabrecque.steamworks.net.dll differ
diff --git a/CRIALactation/CRIALactation.csproj b/CRIALactation/CRIALactation.csproj
index f52b555..9c93a0f 100644
--- a/CRIALactation/CRIALactation.csproj
+++ b/CRIALactation/CRIALactation.csproj
@@ -9,15 +9,16 @@
Properties
CRIALactation
CRIALactation
- v4.7.2
+ v4.8
512
true
+
false
none
false
- 1.3\Assemblies\
+ 1.4\Assemblies\
DEBUG;TRACE
prompt
4
@@ -32,24 +33,19 @@
- ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
- False
+ ..\..\..\..\..\workshop\content\294100\839005762\1.4\Assemblies\0Harmony.dll
..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
- False
- ..\..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll
- False
+ ..\..\..\..\..\workshop\content\294100\818773962\v1.4\Assemblies\HugsLib.dll
..\..\rjw-mc\1.3\Assemblies\Milk.dll
- False
- ..\..\rjw\1.3\Assemblies\RJW.dll
- False
+ ..\..\rjw\1.4\Assemblies\RJW.dll
@@ -61,17 +57,17 @@
..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
- False
..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
- False
+
+
diff --git a/CRIALactation/Defs/AbilityDefs/Abilities_Hucow.xml b/CRIALactation/Defs/AbilityDefs/Abilities_Hucow.xml
index d9e8216..41631d4 100644
--- a/CRIALactation/Defs/AbilityDefs/Abilities_Hucow.xml
+++ b/CRIALactation/Defs/AbilityDefs/Abilities_Hucow.xml
@@ -81,10 +81,10 @@
CompAbilityEffect_GiveHediff
- Hucow
+ InducingLactation
False
-
+
\ No newline at end of file
diff --git a/CRIALactation/Defs/PreceptDefs/Precepts_Lactating_Role.xml b/CRIALactation/Defs/PreceptDefs/Precepts_Lactating_Role.xml
index 366177c..c69663b 100644
--- a/CRIALactation/Defs/PreceptDefs/Precepts_Lactating_Role.xml
+++ b/CRIALactation/Defs/PreceptDefs/Precepts_Lactating_Role.xml
@@ -37,7 +37,7 @@
UI/Issues/Lactating
-
+
IdeoRole_HucowHandler
HucowHandling
@@ -147,6 +147,7 @@
ConvertToHucow
+ BeginInducingLactation
diff --git a/CRIALactation/Source/CompProperties/CompAbilityEffects/CompProperties_AbilityBeginInducingLactation.cs b/CRIALactation/Source/CompProperties/CompAbilityEffects/CompProperties_AbilityBeginInducingLactation.cs
new file mode 100644
index 0000000..7ba6f26
--- /dev/null
+++ b/CRIALactation/Source/CompProperties/CompAbilityEffects/CompProperties_AbilityBeginInducingLactation.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+using rjw;
+using Milk;
+using UnityEngine;
+
+
+namespace CRIALactation
+{
+ public class CompProperties_AbilityBeginInducingLactation : CompProperties_AbilityEffect
+ {
+
+ public CompProperties_AbilityBeginInducingLactation()
+ {
+ this.compClass = typeof(CompAbilityEffect_BeginInducingLactation);
+ }
+
+ }
+}
diff --git a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_BeginInducingLactation.cs b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_BeginInducingLactation.cs
index 3c530e5..17bded8 100644
--- a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_BeginInducingLactation.cs
+++ b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_BeginInducingLactation.cs
@@ -1,5 +1,6 @@
using RimWorld;
using RimWorld.Planet;
+using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -16,8 +17,10 @@ namespace CRIALactation
{
Pawn pawn = target.Pawn;
+
if (pawn == null) return false;
- if (!pawn.IsColonistPlayerControlled || !pawn.IsSlaveOfColony || !pawn.IsPrisonerOfColony) return false;
+ if (!(pawn.IsColonistPlayerControlled || pawn.IsSlaveOfColony || pawn.IsPrisonerOfColony)) return false;
+ if (!Genital_Helper.has_breasts(pawn) || Genital_Helper.has_male_breasts(pawn)) return false;
if (LactationUtility.IsLactating(pawn)) return false;
return true;
diff --git a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs
index 9d6d4cc..65b38f7 100644
--- a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs
+++ b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs
@@ -16,9 +16,9 @@ namespace CRIALactation
public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
{
Pawn pawn = target.Pawn;
- return pawn != null && AbilityUtility.ValidateMustBeHuman(pawn, throwMessages) &&
- AbilityUtility.ValidateNoMentalState(pawn, throwMessages) &&
- AbilityUtility.ValidateSameIdeo(this.parent.pawn, pawn, throwMessages) &&
+ return pawn != null && AbilityUtility.ValidateMustBeHuman(pawn, throwMessages, this.parent) &&
+ AbilityUtility.ValidateNoMentalState(pawn, throwMessages, this.parent) &&
+ AbilityUtility.ValidateSameIdeo(this.parent.pawn, pawn, throwMessages, this.parent) &&
LactationUtility.IsLactating(pawn) &&
!LactationUtility.IsHucow(pawn);
diff --git a/CRIALactation/Source/Comps/CompLactation.cs b/CRIALactation/Source/Comps/CompLactation.cs
index 3345473..56706c5 100644
--- a/CRIALactation/Source/Comps/CompLactation.cs
+++ b/CRIALactation/Source/Comps/CompLactation.cs
@@ -19,6 +19,20 @@ namespace CRIALactation
Scribe_Values.Look(ref this.lastHumanLactationIngestedTick, "lastHumanLactationIngestedTick", 0);
}
+
+ public override string CompInspectStringExtra()
+ {
+ if((parent as Pawn).health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation) != null
+ && (parent as Pawn).health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation).TryGetComp().canMassage())
+ {
+ return "Ready to stimulate breasts for lactation.";
+ }
+
+ else
+ {
+ return "";
+ }
+ }
}
diff --git a/CRIALactation/Source/Precepts/PreceptComp_Lactation.cs b/CRIALactation/Source/Precepts/PreceptComp_Lactation.cs
index 57e788c..def819c 100644
--- a/CRIALactation/Source/Precepts/PreceptComp_Lactation.cs
+++ b/CRIALactation/Source/Precepts/PreceptComp_Lactation.cs
@@ -13,9 +13,11 @@ namespace CRIALactation
public class PreceptComp_Lactation : PreceptComp
{
- public override void Notify_MemberGenerated(Pawn pawn, Precept precept)
+ public override void Notify_MemberGenerated(Pawn pawn, Precept precept, bool newborn)
{
+ if (newborn) return;
+
if((precept.def == PreceptDefOf_Lactation.Lactating_Essential
|| precept.def == PreceptDefOf_Lactation.Lactating_MandatoryHucow)
&& LactationUtility.HasMilkableBreasts(pawn))
diff --git a/CRIAOrgy/Assemblies/CRIAOrgy.dll b/CRIAOrgy/1.3/Assemblies/CRIAOrgy.dll
similarity index 100%
rename from CRIAOrgy/Assemblies/CRIAOrgy.dll
rename to CRIAOrgy/1.3/Assemblies/CRIAOrgy.dll
diff --git a/CRIAOrgy/1.4/Assemblies/0Harmony.dll b/CRIAOrgy/1.4/Assemblies/0Harmony.dll
new file mode 100644
index 0000000..e182535
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/0Harmony.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/0Harmony.xml b/CRIAOrgy/1.4/Assemblies/0Harmony.xml
new file mode 100644
index 0000000..f1b9b4c
--- /dev/null
+++ b/CRIAOrgy/1.4/Assemblies/0Harmony.xml
@@ -0,0 +1,3693 @@
+
+
+
+ 0Harmony
+
+
+
+ A factory to create delegate types
+
+
+ Default constructor
+
+
+ Creates a delegate type for a method
+ The method
+ The new delegate type
+
+
+
+ A getter delegate type
+ Type that getter gets field/property value from
+ Type of the value that getter gets
+ The instance get getter uses
+ An delegate
+
+
+
+ A setter delegate type
+ Type that setter sets field/property value for
+ Type of the value that setter sets
+ The instance the setter uses
+ The value the setter uses
+ An delegate
+
+
+
+ A constructor delegate type
+ Type that constructor creates
+ An delegate
+
+
+
+ A helper class for fast access to getters and setters
+
+
+ Creates an instantiation delegate
+ Type that constructor creates
+ The new instantiation delegate
+
+
+
+ Creates an getter delegate for a property
+ Type that getter reads property from
+ Type of the property that gets accessed
+ The property
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field
+ Type that getter reads field from
+ Type of the field that gets accessed
+ The field
+ The new getter delegate
+
+
+
+ Creates an getter delegate for a field (with a list of possible field names)
+ Type that getter reads field/property from
+ Type of the field/property that gets accessed
+ A list of possible field names
+ The new getter delegate
+
+
+
+ Creates an setter delegate
+ Type that setter assigns property value to
+ Type of the property that gets assigned
+ The property
+ The new setter delegate
+
+
+
+ Creates an setter delegate for a field
+ Type that setter assigns field value to
+ Type of the field that gets assigned
+ The field
+ The new getter delegate
+
+
+
+ A delegate to invoke a method
+ The instance
+ The method parameters
+ The method result
+
+
+ A helper class to invoke method with delegates
+
+
+ Creates a fast invocation handler from a method
+ The method to invoke
+ Controls if boxed value object is accessed/updated directly
+ The
+
+
+ The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array
+ passed to the fast invocation handler.
+ Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object.
+ Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array.
+ For example,
+
+ var val = 5;
+ var box = (object)val;
+ var arr = new object[] { box };
+ handler(arr); // for a method with parameter signature: ref/out/in int
+
+
+
+
+ If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called,
+ such that all references to the boxed object reflect the potentially updated value.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0]
+ now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object.
+
+
+ If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object,
+ such that potential updates to the value are reflected only in the arguments array.
+ In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10.
+
+
+
+
+ A low level memory helper
+
+
+
+ Mark method for no inlining (currently only works on Mono)
+ The method/constructor to change
+
+
+
+ Detours a method
+ The original method/constructor
+ The replacement method/constructor
+ An error string
+
+
+
+ Writes a jump to memory
+ The memory address
+ Jump destination
+ An error string
+
+
+
+ Gets the start of a method in memory
+ The method/constructor
+ [out] Details of the exception
+ The method start address
+
+
+
+ special parameter names that can be used in prefix and postfix methods
+
+
+ Patch function helpers
+
+
+ Sorts patch methods by their priority rules
+ The original method
+ Patches to sort
+ Use debug mode
+ The sorted patch methods
+
+
+
+ Creates new replacement method with the latest patches and detours the original method
+ The original method
+ Information describing the patches
+ The newly created replacement method
+
+
+
+ Creates a patch sorter
+ Array of patches that will be sorted
+ Use debugging
+
+
+ Sorts internal PatchSortingWrapper collection and caches the results.
+ After first run the result is provided from the cache.
+ The original method
+ The sorted patch methods
+
+
+ Checks if the sorter was created with the same patch list and as a result can be reused to
+ get the sorted order of the patches.
+ List of patches to check against
+ true if equal
+
+
+ Removes one unresolved dependency from the least important patch.
+
+
+ Outputs all unblocked patches from the waiting list to results list
+
+
+ Adds patch to both results list and handled patches set
+ Patch to add
+
+
+ Wrapper used over the Patch object to allow faster dependency access and
+ dependency removal in case of cyclic dependencies
+
+
+ Create patch wrapper object used for sorting
+ Patch to wrap
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+ Hash function
+ A hash code
+
+
+ Bidirectionally registers Patches as after dependencies
+ List of dependencies to register
+
+
+ Bidirectionally registers Patches as before dependencies
+ List of dependencies to register
+
+
+ Bidirectionally removes Patch from after dependencies
+ Patch to remove
+
+
+ Bidirectionally removes Patch from before dependencies
+ Patch to remove
+
+
+ Specifies the type of method
+
+
+
+ This is a normal method
+
+
+ This is a getter
+
+
+ This is a setter
+
+
+ This is a constructor
+
+
+ This is a static constructor
+
+
+ This targets the MoveNext method of the enumerator result
+
+
+ Specifies the type of argument
+
+
+
+ This is a normal argument
+
+
+ This is a reference argument (ref)
+
+
+ This is an out argument (out)
+
+
+ This is a pointer argument (&)
+
+
+ Specifies the type of patch
+
+
+
+ Any patch
+
+
+ A prefix patch
+
+
+ A postfix patch
+
+
+ A transpiler
+
+
+ A finalizer
+
+
+ A reverse patch
+
+
+ Specifies the type of reverse patch
+
+
+
+ Use the unmodified original method (directly from IL)
+
+
+ Use the original as it is right now including previous patches but excluding future ones
+
+
+ Specifies the type of method call dispatching mechanics
+
+
+
+ Call the method using dynamic dispatching if method is virtual (including overriden)
+
+
+ This is the built-in form of late binding (a.k.a. dynamic binding) and is the default dispatching mechanic in C#.
+ This directly corresponds with the instruction.
+
+
+ For virtual (including overriden) methods, the instance type's most-derived/overriden implementation of the method is called.
+ For non-virtual (including static) methods, same behavior as : the exact specified method implementation is called.
+
+
+ Note: This is not a fully dynamic dispatch, since non-virtual (including static) methods are still called non-virtually.
+ A fully dynamic dispatch in C# involves using
+ the dynamic type
+ (actually a fully dynamic binding, since even the name and overload resolution happens at runtime), which does not support.
+
+
+
+
+ Call the method using static dispatching, regardless of whether method is virtual (including overriden) or non-virtual (including static)
+
+
+ a.k.a. non-virtual dispatching, early binding, or static binding.
+ This directly corresponds with the instruction.
+
+
+ For both virtual (including overriden) and non-virtual (including static) methods, the exact specified method implementation is called, without virtual/override mechanics.
+
+
+
+
+ The base class for all Harmony annotations (not meant to be used directly)
+
+
+
+ The common information for all attributes
+
+
+ Annotation to define your Harmony patch methods
+
+
+
+ An empty annotation can be used together with TargetMethod(s)
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The full name of the declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ Annotation to define the original method for delegate injection
+
+
+
+ An annotation that specifies a class to patch
+ The declaring class/type
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The argument types of the method or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The
+ An array of argument types to target overloads
+ Array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The declaring class/type
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The name of the method, property or constructor to patch
+ The
+
+
+
+ An annotation that specifies call dispatching mechanics for the delegate
+ The
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ The
+ An array of argument types to target overloads
+ An array of
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+
+
+
+ An annotation that specifies a method, property or constructor to patch
+ An array of argument types to target overloads
+ An array of
+
+
+
+ Annotation to define your standin methods for reverse patching
+
+
+
+ An annotation that specifies the type of reverse patching
+ The of the reverse patch
+
+
+
+ A Harmony annotation to define that all methods in a class are to be patched
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define patch priority
+ The priority
+
+
+
+ A Harmony annotation
+
+
+
+ A Harmony annotation to define that a patch comes before another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to define that a patch comes after another patch
+ The array of harmony IDs of the other patches
+
+
+
+ A Harmony annotation
+
+
+ A Harmony annotation to debug a patch (output uses to log to your Desktop)
+
+
+
+ Specifies the Prepare function in a patch class
+
+
+
+ Specifies the Cleanup function in a patch class
+
+
+
+ Specifies the TargetMethod function in a patch class
+
+
+
+ Specifies the TargetMethods function in a patch class
+
+
+
+ Specifies the Prefix function in a patch class
+
+
+
+ Specifies the Postfix function in a patch class
+
+
+
+ Specifies the Transpiler function in a patch class
+
+
+
+ Specifies the Finalizer function in a patch class
+
+
+
+ A Harmony annotation
+
+
+
+ The name of the original argument
+
+
+
+ The index of the original argument
+
+
+
+ The new name of the original argument
+
+
+
+ An annotation to declare injected arguments by name
+
+
+
+ An annotation to declare injected arguments by index
+ Zero-based index
+
+
+
+ An annotation to declare injected arguments by renaming them
+ Name of the original argument
+ New name
+
+
+
+ An annotation to declare injected arguments by index and renaming them
+ Zero-based index
+ New name
+
+
+
+ An abstract wrapper around OpCode and their operands. Used by transpilers
+
+
+
+ The opcode
+
+
+
+ The operand
+
+
+
+ All labels defined on this instruction
+
+
+
+ All exception block boundaries defined on this instruction
+
+
+
+ Creates a new CodeInstruction with a given opcode and optional operand
+ The opcode
+ The operand
+
+
+
+ Create a full copy (including labels and exception blocks) of a CodeInstruction
+ The to copy
+
+
+
+ Clones a CodeInstruction and resets its labels and exception blocks
+ A lightweight copy of this code instruction
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its opcode
+ The opcode
+ A copy of this CodeInstruction with a new opcode
+
+
+
+ Clones a CodeInstruction, resets labels and exception blocks and sets its operand
+ The operand
+ A copy of this CodeInstruction with a new operand
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A code instruction that calls the method matching the arguments
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Creates a CodeInstruction calling a method (CALL)
+ The lambda expression using the method
+
+
+
+
+ Returns an instruction to call the specified closure
+ The delegate type to emit
+ The closure that defines the method to call
+ A that calls the closure as a method
+
+
+
+ Creates a CodeInstruction loading a field (LD[S]FLD[A])
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ Use address of field
+
+
+
+ Creates a CodeInstruction storing to a field (ST[S]FLD)
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+
+
+
+ Returns a string representation of the code instruction
+ A string representation of the code instruction
+
+
+
+ Exception block types
+
+
+
+ The beginning of an exception block
+
+
+
+ The beginning of a catch block
+
+
+
+ The beginning of an except filter block (currently not supported to use in a patch)
+
+
+
+ The beginning of a fault block
+
+
+
+ The beginning of a finally block
+
+
+
+ The end of an exception block
+
+
+
+ An exception block
+
+
+
+ Block type
+
+
+
+ Catch type
+
+
+
+ Creates an exception block
+ The
+ The catch type
+
+
+
+ The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain
+
+
+
+ The unique identifier
+
+
+
+ Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe"
+ This is for full debugging. To debug only specific patches, use the attribute
+
+
+
+ Creates a new Harmony instance
+ A unique identifier (you choose your own)
+ A Harmony instance
+
+
+
+ Searches the current assembly for Harmony annotations and uses them to create patches
+ This method can fail to use the correct assembly when being inlined. It calls StackTrace.GetFrame(1) which can point to the wrong method/assembly. If you are unsure or run into problems, use PatchAll(Assembly.GetExecutingAssembly())
instead.
+
+
+
+ Creates a empty patch processor for an original method
+ The original method/constructor
+ A new instance
+
+
+
+ Creates a patch class processor from an annotated class
+ The class/type
+ A new instance
+
+
+
+ Creates a reverse patcher for one of your stub methods
+ The original method/constructor
+ The stand-in stub method as
+ A new instance
+
+
+
+ Searches an assembly for Harmony annotations and uses them to create patches
+ The assembly
+
+
+
+ Creates patches by manually specifying the methods
+ The original method/constructor
+ An optional prefix method wrapped in a object
+ An optional postfix method wrapped in a object
+ An optional transpiler method wrapped in a object
+ An optional finalizer method wrapped in a object
+ The replacement method that was created to patch the original method
+
+
+
+ Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process
+ The original method/constructor you want to duplicate
+ Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates)
+ An optional transpiler as method that will be applied during the process
+ The replacement method that was created to patch the stub method
+
+
+
+ Unpatches methods by patching them with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+ This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The
+ The optional Harmony ID to restrict unpatching to a specific Harmony instance
+
+
+
+ Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global
+ The original method/constructor
+ The patch method as method to remove
+
+
+
+ Test for patches from a specific Harmony ID
+ The Harmony ID
+ True if patches for this ID exist
+
+
+
+ Gets patch information for a given original method
+ The original method/constructor
+ The patch information as
+
+
+
+ Gets the methods this instance has patched
+ An enumeration of original methods/constructors
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched original methods/constructors
+
+
+
+ Gets the original method from a given replacement method
+ A replacement method, for example from a stacktrace
+ The original method/constructor or null if not found
+
+
+
+ Tries to get the method from a stackframe including dynamic replacement methods
+ The
+ For normal frames, frame.GetMethod() is returned. For frames containing patched methods, the replacement method is returned or null if no method can be found
+
+
+
+ Gets the original method from the stackframe and uses original if method is a dynamic replacement
+ The
+ The original method from that stackframe
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly versions keyed by Harmony IDs
+
+
+
+ Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure
+
+
+
+ Default serialization constructor (not implemented)
+ The info
+ The context
+
+
+
+ Get a list of IL instructions in pairs of offset+code
+ A list of key/value pairs which represent an offset and the code at that offset
+
+
+
+ Get a list of IL instructions without offsets
+ A list of
+
+
+
+ Get the error offset of the errornous IL instruction
+ The offset
+
+
+
+ Get the index of the errornous IL instruction
+ The index into the list of instructions or -1 if not found
+
+
+
+ A wrapper around a method to use it as a patch (for example a Prefix)
+
+
+
+ The original method
+
+
+
+ Class/type declaring this patch
+
+
+
+ Patch method name
+
+
+
+ Optional patch
+
+
+
+ Array of argument types of the patch method
+
+
+
+ of the patch
+
+
+
+ Install this patch before patches with these Harmony IDs
+
+
+
+ Install this patch after patches with these Harmony IDs
+
+
+
+ Reverse patch type, see
+
+
+
+ Create debug output for this patch
+
+
+
+ Whether to use (true) or (false) mechanics
+ for -attributed delegate
+
+
+
+ Default constructor
+
+
+
+ Creates a patch from a given method
+ The original method
+
+
+
+ Creates a patch from a given method
+ The original method
+ The patch
+ A list of harmony IDs that should come after this patch
+ A list of harmony IDs that should come before this patch
+ Set to true to generate debug output
+
+
+
+ Creates a patch from a given method
+ The patch class/type
+ The patch method name
+ The optional argument types of the patch method (for overloaded methods)
+
+
+
+ Gets the names of all internal patch info fields
+ A list of field names
+
+
+
+ Merges annotations
+ The list of to merge
+ The merged
+
+
+
+ Returns a string that represents the annotation
+ A string representation
+
+
+
+ Annotation extensions
+
+
+
+ Copies annotation information
+ The source
+ The destination
+
+
+
+ Clones an annotation
+ The to clone
+ A copied
+
+
+
+ Merges annotations
+ The master
+ The detail
+ A new, merged
+
+
+
+ Gets all annotations on a class/type
+ The class/type
+ A list of all
+
+
+
+ Gets merged annotations on a class/type
+ The class/type
+ The merged
+
+
+
+ Gets all annotations on a method
+ The method/constructor
+ A list of
+
+
+
+ Gets merged annotations on a method
+ The method/constructor
+ The merged
+
+
+
+
+ A mutable representation of an inline signature, similar to Mono.Cecil's CallSite.
+ Used by the calli instruction, can be used by transpilers
+
+
+
+
+ See
+
+
+
+ See
+
+
+
+ See
+
+
+
+ The list of all parameter types or function pointer signatures received by the call site
+
+
+
+ The return type or function pointer signature returned by the call site
+
+
+
+ Returns a string representation of the inline signature
+ A string representation of the inline signature
+
+
+
+
+ A mutable representation of a parameter type with an attached type modifier,
+ similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq
+
+
+
+
+ Whether this is a modopt (optional modifier type) or a modreq (required modifier type)
+
+
+
+ The modifier type attached to the parameter type
+
+
+
+ The modified parameter type
+
+
+
+ Returns a string representation of the modifier type
+ A string representation of the modifier type
+
+
+
+ Patch serialization
+
+
+
+ Control the binding of a serialized object to a type
+ Specifies the assembly name of the serialized object
+ Specifies the type name of the serialized object
+ The type of the object the formatter creates a new instance of
+
+
+
+ Serializes a patch info
+ The
+ The serialized data
+
+
+
+ Deserialize a patch info
+ The serialized data
+ A
+
+
+
+ Compare function to sort patch priorities
+ The patch
+ Zero-based index
+ The priority
+ A standard sort integer (-1, 0, 1)
+
+
+
+ Serializable patch information
+
+
+
+ Prefixes as an array of
+
+
+
+ Postfixes as an array of
+
+
+
+ Transpilers as an array of
+
+
+
+ Finalizers as an array of
+
+
+
+ Returns if any of the patches wants debugging turned on
+
+
+
+ Adds prefixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a prefix
+
+
+ Removes prefixes
+ The owner of the prefixes, or * for all
+
+
+
+ Adds postfixes
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a postfix
+
+
+ Removes postfixes
+ The owner of the postfixes, or * for all
+
+
+
+ Adds transpilers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a transpiler
+
+
+ Removes transpilers
+ The owner of the transpilers, or * for all
+
+
+
+ Adds finalizers
+ An owner (Harmony ID)
+ The patch methods
+
+
+
+ Adds a finalizer
+
+
+ Removes finalizers
+ The owner of the finalizers, or * for all
+
+
+
+ Removes a patch using its method
+ The method of the patch to remove
+
+
+
+ Gets a concatenated list of patches
+ The Harmony instance ID adding the new patches
+ The patches to add
+ The current patches
+
+
+
+ Gets a list of patches with any from the given owner removed
+ The owner of the methods, or * for all
+ The current patches
+
+
+
+ A serializable patch
+
+
+
+ Zero-based index
+
+
+
+ The owner (Harmony ID)
+
+
+
+ The priority, see
+
+
+
+ Keep this patch before the patches indicated in the list of Harmony IDs
+
+
+
+ Keep this patch after the patches indicated in the list of Harmony IDs
+
+
+
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ The method of the static patch method
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+ The priority, see
+ A list of Harmony IDs for patches that should run after this patch
+ A list of Harmony IDs for patches that should run before this patch
+ A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future
+
+
+
+ Creates a patch
+ The method of the patch
+ Zero-based index
+ An owner (Harmony ID)
+
+
+ Get the patch method or a DynamicMethod if original patch method is a patch factory
+ The original method/constructor
+ The method of the patch
+
+
+
+ Determines whether patches are equal
+ The other patch
+ true if equal
+
+
+
+ Determines how patches sort
+ The other patch
+ integer to define sort order (-1, 0, 1)
+
+
+
+ Hash function
+ A hash code
+
+
+
+ A PatchClassProcessor used to turn on a class/type into patches
+
+
+
+ Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes.
+ The Harmony instance
+ The class to process (need to have at least a [HarmonyPatch] attribute)
+
+
+
+ Applies the patches
+ A list of all created replacement methods or null if patch class is not annotated
+
+
+
+ A group of patches
+
+
+
+ A collection of prefix
+
+
+
+ A collection of postfix
+
+
+
+ A collection of transpiler
+
+
+
+ A collection of finalizer
+
+
+
+ Gets all owners (Harmony IDs) or all known patches
+ The patch owners
+
+
+
+ Creates a group of patches
+ An array of prefixes as
+ An array of postfixes as
+ An array of transpileres as
+ An array of finalizeres as
+
+
+
+ A PatchProcessor handles patches on a method/constructor
+
+
+
+ Creates an empty patch processor
+ The Harmony instance
+ The original method/constructor
+
+
+
+ Adds a prefix
+ The prefix as a
+ A for chaining calls
+
+
+
+ Adds a prefix
+ The prefix method
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix as a
+ A for chaining calls
+
+
+
+ Adds a postfix
+ The postfix method
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler as a
+ A for chaining calls
+
+
+
+ Adds a transpiler
+ The transpiler method
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer as a
+ A for chaining calls
+
+
+
+ Adds a finalizer
+ The finalizer method
+ A for chaining calls
+
+
+
+ Gets all patched original methods in the appdomain
+ An enumeration of patched method/constructor
+
+
+
+ Applies all registered patches
+ The generated replacement method
+
+
+
+ Unpatches patches of a given type and/or Harmony ID
+ The patch type
+ Harmony ID or * for any
+ A for chaining calls
+
+
+
+ Unpatches a specific patch
+ The method of the patch
+ A for chaining calls
+
+
+
+ Gets patch information on an original
+ The original method/constructor
+ The patch information as
+
+
+
+ Sort patch methods by their priority rules
+ The original method
+ Patches to sort
+ The sorted patch methods
+
+
+
+ Gets Harmony version for all active Harmony instances
+ [out] The current Harmony version
+ A dictionary containing assembly version keyed by Harmony ID
+
+
+
+ Creates a new empty generator to use when reading method bodies
+ A new
+
+
+
+ Creates a new generator matching the method/constructor to use when reading method bodies
+ The original method/constructor to copy method information from
+ A new
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list containing all the original
+
+
+
+ Returns the methods unmodified list of code instructions
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ A list containing all the original
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ Apply only the first count of transpilers
+ Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used)
+ A list of
+
+
+
+ Returns the methods current list of code instructions after all existing transpilers have been applied
+ The original method/constructor
+ A new generator that now contains all local variables and labels contained in the result
+ Apply only the first count of transpilers
+ A list of
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ All instructions as opcode/operand pairs
+
+
+
+ A low level way to read the body of a method. Used for quick searching in methods
+ The original method
+ An existing generator that will be used to create all local variables and labels contained in the result
+ All instructions as opcode/operand pairs
+
+
+
+ A patch priority
+
+
+
+ Patch last
+
+
+
+ Patch with very low priority
+
+
+
+ Patch with low priority
+
+
+
+ Patch with lower than normal priority
+
+
+
+ Patch with normal priority
+
+
+
+ Patch with higher than normal priority
+
+
+
+ Patch with high priority
+
+
+
+ Patch with very high priority
+
+
+
+ Patch first
+
+
+
+ A reverse patcher
+
+
+
+ Creates a reverse patcher
+ The Harmony instance
+ The original method/constructor
+ Your stand-in stub method as
+
+
+
+ Applies the patch
+ The type of patch, see
+ The generated replacement method
+
+
+
+ A collection of commonly used transpilers
+
+
+
+ A transpiler that replaces all occurrences of a given method with another one using the same signature
+ The enumeration of to act on
+ Method or constructor to search for
+ Method or constructor to replace with
+ Modified enumeration of
+
+
+
+ A transpiler that alters instructions that match a predicate by calling an action
+ The enumeration of to act on
+ A predicate selecting the instructions to change
+ An action to apply to matching instructions
+ Modified enumeration of
+
+
+
+ A transpiler that logs a text at the beginning of the method
+ The instructions to act on
+ The log text
+ Modified enumeration of
+
+
+
+ A helper class for reflection related functions
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level
+
+
+
+ Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type
+
+
+
+ Enumerates all assemblies in the current app domain, excluding visual studio assemblies
+ An enumeration of
+
+
+ Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise
+ The name
+ A type or null if not found
+
+
+
+ Gets all successfully loaded types from a given assembly
+ The assembly
+ An array of types
+
+ This calls and returns , while catching any thrown .
+ If such an exception is thrown, returns the successfully loaded types (,
+ filtered for non-null values).
+
+
+
+
+ Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies
+ An enumeration of all in all assemblies, excluding visual studio assemblies
+
+
+ Applies a function going up the type hierarchy and stops at the first non-null result
+ Result type of func()
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+ The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces,
+ and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces).
+ The top-most type in the type hierarchy of all non-interface types (including value types) is .
+
+
+
+
+ Applies a function going into inner types and stops at the first non-null result
+ Generic type parameter
+ The class/type to start with
+ The evaluation function returning T
+ The first non-null result, or null if no match
+
+
+
+ Gets the reflection information for a directly declared field
+ The class/type where the field is defined
+ The name of the field
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The class/type where the field is defined
+ The name of the field (case sensitive)
+ A field or null when type/name is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a field by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A field or null when the field cannot be found
+
+
+
+ Gets the reflection information for a field
+ The class/type where the field is declared
+ The zero-based index of the field inside the class definition
+ A field or null when type is null or when the field cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a directly declared property
+ The class/type where the property is declared
+ The name of the property (case sensitive)
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the Setter method of a directly declared property
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The class/type
+ The name
+ A property or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A property or null when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the getter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The class/type
+ The name
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for the setter method of a property by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A method or null when type/name is null or when the property cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a directly declared method
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The class/type where the method is declared
+ The name of the method (case sensitive)
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when type/name is null or when the method cannot be found
+
+
+
+ Gets the reflection information for a method by searching the type and all its super types
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ Optional parameters to target a specific overload of the method
+ Optional list of types that define the generic version of the method
+ A method or null when the method cannot be found
+
+
+
+ Gets the method of an enumerator method
+ Enumerator method that creates the enumerator
+ The internal method of the enumerator or null if no valid enumerator is detected
+
+
+ Gets the names of all method that are declared in a type
+ The declaring class/type
+ A list of method names
+
+
+
+ Gets the names of all method that are declared in the type of the instance
+ An instance of the type to search in
+ A list of method names
+
+
+
+ Gets the names of all fields that are declared in a type
+ The declaring class/type
+ A list of field names
+
+
+
+ Gets the names of all fields that are declared in the type of the instance
+ An instance of the type to search in
+ A list of field names
+
+
+
+ Gets the names of all properties that are declared in a type
+ The declaring class/type
+ A list of property names
+
+
+
+ Gets the names of all properties that are declared in the type of the instance
+ An instance of the type to search in
+ A list of property names
+
+
+
+ Gets the type of any class member of
+ A member
+ The class/type of this member
+
+
+
+ Test if a class member is actually an concrete implementation
+ A member
+ True if the member is a declared
+
+
+
+ Gets the real implementation of a class member
+ A member
+ The member itself if its declared. Otherwise the member that is actually implemented in some base type
+
+
+
+ Gets the reflection information for a directly declared constructor
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the constructor
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the constructor cannot be found
+
+
+
+ Gets the reflection information for a constructor by searching the type and all its super types
+ The class/type where the constructor is declared
+ Optional parameters to target a specific overload of the method
+ Optional parameters to only consider static constructors
+ A constructor info or null when type is null or when the method cannot be found
+
+
+
+ Gets reflection information for all declared constructors
+ The class/type where the constructors are declared
+ Optional parameters to only consider static constructors
+ A list of constructor infos
+
+
+
+ Gets reflection information for all declared methods
+ The class/type where the methods are declared
+ A list of methods
+
+
+
+ Gets reflection information for all declared properties
+ The class/type where the properties are declared
+ A list of properties
+
+
+
+ Gets reflection information for all declared fields
+ The class/type where the fields are declared
+ A list of fields
+
+
+
+ Gets the return type of a method or constructor
+ The method/constructor
+ The return type
+
+
+
+ Given a type, returns the first inner type matching a recursive search by name
+ The class/type to start searching at
+ The name of the inner type (case sensitive)
+ The inner type or null if type/name is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first inner type matching a recursive search with a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The inner type or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first method matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The method or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first constructor matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The constructor info or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Given a type, returns the first property matching a predicate
+ The class/type to start searching at
+ The predicate to search with
+ The property or null if type/predicate is null or if a type with that name cannot be found
+
+
+
+ Returns an array containing the type of each object in the given array
+ An array of objects
+ An array of types or an empty array if parameters is null (if an object is null, the type for it will be object)
+
+
+
+ Creates an array of input parameters for a given method and a given set of potential inputs
+ The method/constructor you are planing to call
+ The possible input parameters in any order
+ An object array matching the method signature
+
+
+
+ A readable/assignable reference delegate to an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The runtime instance to access the field (ignored and can be omitted for static fields)
+ A readable/assignable reference to the field
+ Null instance passed to a non-static field ref delegate
+
+ Instance of invalid type passed to a non-static field ref delegate
+ (this can happen if is a parent class or interface of the field's declaring type)
+
+
+
+ This delegate cannot be used for instance fields of structs, since a struct instance passed to the delegate would be passed by
+ value and thus would be a copy that only exists within the delegate's invocation. This is fine for a readonly reference,
+ but makes assignment futile. Use instead.
+
+
+ Note that is not required to be the field's declaring type. It can be a parent class (including ),
+ implemented interface, or a derived class of the field's declaring type ("instanceOfT is FieldDeclaringType" must be possible).
+ Specifically, must be assignable from OR to the field's declaring type.
+ Technically, this allows Nullable, although Nullable is only relevant for structs, and since only static fields of structs
+ are allowed for this delegate, and the instance passed to such a delegate is ignored, this hardly matters.
+
+
+ Similarly, is not required to be the field's field type, unless that type is a non-enum value type.
+ It can be a parent class (including object) or implemented interface of the field's field type. It cannot be a derived class.
+ This variance is not allowed for value types, since that would require boxing/unboxing, which is not allowed for ref values.
+ Special case for enum types: can also be the underlying integral type of the enum type.
+ Specifically, for reference types, must be assignable from
+ the field's field type; for non-enum value types, must be exactly the field's field type; for enum types,
+ must be either the field's field type or the underyling integral type of that field type.
+
+
+ This delegate supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and StaticFieldRefAccess methods that return it) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates an instance field reference for a specific instance of a class
+ The class that defines the instance field, or derived class of this type
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+
+ The type that defines the field, or derived class of this type; must not be a struct type unless the field is static
+
+ The name of the field
+
+ A readable/assignable delegate with T=object
+ (for static fields, the instance delegate parameter is ignored)
+
+
+
+ This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T
+ in e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ Consider using (and other overloads) instead for static fields.
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+ type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable delegate with T=object
+
+
+ Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
+
+ An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ),
+ implemented interface, or derived class of this type ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+ This method supports static fields, even those defined in structs, for legacy reasons.
+ For such static fields, is effectively ignored.
+ Consider using (and other overloads) instead for static fields.
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ Creates a field reference for an instance field of a class
+
+ The type that defines the field; or a parent class (including ), implemented interface, or derived class of this type
+ ("instanceOfT is FieldDeclaringType" must be possible)
+
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance).
+
+
+ For backwards compatibility, there is no class constraint on .
+ Instead, the non-value-type check is done at runtime within the method.
+
+
+
+
+
+ A readable/assignable reference delegate to an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A reference to the runtime instance to access the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable delegate
+
+
+
+ Creates an instance field reference for a specific instance of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The name of the field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance).
+
+
+
+
+
+ Creates a field reference delegate for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+ This method is meant for cases where the field has already been obtained, avoiding the field searching cost in
+ e.g. .
+
+
+
+
+
+ Creates a field reference for an instance field of a struct
+ The struct that defines the instance field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The instance
+ The field
+ A readable/assignable reference to the field
+
+
+ This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
+ If you need to access a field's value for potentially multiple instances, use instead.
+ StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance).
+
+
+
+
+
+ A readable/assignable reference delegate to a static field
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type (can be class or struct) the field is defined in
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The type (can be class or struct) the field is defined in
+ The name of the field
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ The type of the field
+ The member in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+ A readable/assignable reference to the field
+
+
+
+ Creates a static field reference
+ An arbitrary type (by convention, the type the field is defined in)
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable reference to the field
+
+ The type parameter is only used in exception messaging and to distinguish between this method overload
+ and the overload (which returns a rather than a reference).
+
+
+
+
+ Creates a static field reference delegate
+
+ The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type),
+ a type that is assignable from that type; or if the field's type is an enum type,
+ either that type or the underlying integral type of that enum type
+
+ The field
+ A readable/assignable delegate
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method to create a delegate from.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate to a given method
+ The delegate Type
+ The method in the form TypeFullName:MemberName, where TypeFullName matches the form recognized by Type.GetType like Some.Namespace.Type.
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+
+ Only applies for instance methods. If true (default) and is virtual, invocation of the delegate
+ calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called);
+ else, invocation of the delegate calls the exact specified (this is useful for calling base class methods)
+ Note: if false and is an interface method, an ArgumentException is thrown.
+
+ A delegate of given to given
+
+
+ Delegate invocation is more performant and more convenient to use than
+ at a one-time setup cost.
+
+
+ Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods,
+ and both class and struct methods.
+
+
+
+
+
+ Creates a delegate for a given delegate definition, attributed with []
+ The delegate Type, attributed with []
+
+ Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate
+ where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound)
+ instance delegate where the delegate invocation always applies to the given .
+
+ A delegate of given to the method specified via []
+ attributes on
+
+ This calls with the method and virtualCall arguments
+ determined from the [] attributes on ,
+ and the given (for closed instance delegates).
+
+
+
+
+ Returns who called the current method
+ The calling method/constructor (excluding the caller)
+
+
+
+ Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces)
+ The exception to rethrow
+
+
+
+ True if the current runtime is based on Mono, false otherwise (.NET)
+
+
+
+ True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed)
+
+
+
+ True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework)
+
+
+
+ Throws a missing member runtime exception
+ The type that is involved
+ A list of names
+
+
+
+ Gets default value for a specific type
+ The class/type
+ The default value
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+ Creates an (possibly uninitialized) instance of a given type
+ The class/type
+ The new instance
+
+
+
+
+ A cache for the or similar Add methods for different types.
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created; for legacy reasons, this must be a class or interface
+ The original object
+ A copy of the original object but of type T
+
+
+
+ Makes a deep copy of any object
+ The type of the instance that should be created
+ The original object
+ [out] The copy of the original object
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+
+
+
+ Makes a deep copy of any object
+ The original object
+ The type of the instance that should be created
+ Optional value transformation function (taking a field name and src/dst instances)
+ The optional path root to start with
+ The copy of the original object
+
+
+
+ Tests if a type is a struct
+ The type
+ True if the type is a struct
+
+
+
+ Tests if a type is a class
+ The type
+ True if the type is a class
+
+
+
+ Tests if a type is a value type
+ The type
+ True if the type is a value type
+
+
+
+ Tests if a type is an integer type
+ The type
+ True if the type represents some integer
+
+
+
+ Tests if a type is a floating point type
+ The type
+ True if the type represents some floating point
+
+
+
+ Tests if a type is a numerical type
+ The type
+ True if the type represents some number
+
+
+
+ Tests if a type is void
+ The type
+ True if the type is void
+
+
+
+ Test whether an instance is of a nullable type
+ Type of instance
+ An instance to test
+ True if instance is of nullable type, false if not
+
+
+
+ Tests whether a type or member is static, as defined in C#
+ The type or member
+ True if the type or member is static
+
+
+
+ Tests whether a type is static, as defined in C#
+ The type
+ True if the type is static
+
+
+
+ Tests whether a property is static, as defined in C#
+ The property
+ True if the property is static
+
+
+
+ Tests whether an event is static, as defined in C#
+ The event
+ True if the event is static
+
+
+
+ Calculates a combined hash code for an enumeration of objects
+ The objects
+ The hash code
+
+
+
+ A CodeInstruction match
+
+
+ The name of the match
+
+
+ The matched opcodes
+
+
+ The matched operands
+
+
+ The jumps from the match
+
+
+ The jumps to the match
+
+
+ The match predicate
+
+
+ Creates a code match
+ The optional opcode
+ The optional operand
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match that calls a method
+ The lambda expression using the method
+ The optional name
+
+
+
+ Creates a code match
+ The CodeInstruction
+ An optional name
+
+
+
+ Creates a code match
+ The predicate
+ An optional name
+
+
+
+ Returns a string that represents the match
+ A string representation
+
+
+
+ A CodeInstruction matcher
+
+
+ The current position
+ The index or -1 if out of bounds
+
+
+
+ Gets the number of code instructions in this matcher
+ The count
+
+
+
+ Checks whether the position of this CodeMatcher is within bounds
+ True if this CodeMatcher is valid
+
+
+
+ Checks whether the position of this CodeMatcher is outside its bounds
+ True if this CodeMatcher is invalid
+
+
+
+ Gets the remaining code instructions
+ The remaining count
+
+
+
+ Gets the opcode at the current position
+ The opcode
+
+
+
+ Gets the operand at the current position
+ The operand
+
+
+
+ Gets the labels at the current position
+ The labels
+
+
+
+ Gets the exception blocks at the current position
+ The blocks
+
+
+
+ Creates an empty code matcher
+
+
+ Creates a code matcher from an enumeration of instructions
+ The instructions (transpiler argument)
+ An optional IL generator
+
+
+
+ Makes a clone of this instruction matcher
+ A copy of this matcher
+
+
+
+ Gets instructions at the current position
+ The instruction
+
+
+
+ Gets instructions at the current position with offset
+ The offset
+ The instruction
+
+
+
+ Gets all instructions
+ A list of instructions
+
+
+
+ Gets all instructions as an enumeration
+ A list of instructions
+
+
+
+ Gets some instructions counting from current position
+ Number of instructions
+ A list of instructions
+
+
+
+ Gets all instructions within a range
+ The start index
+ The end index
+ A list of instructions
+
+
+
+ Gets all instructions within a range (relative to current position)
+ The start offset
+ The end offset
+ A list of instructions
+
+
+
+ Gets a list of all distinct labels
+ The instructions (transpiler argument)
+ A list of Labels
+
+
+
+ Reports a failure
+ The method involved
+ The logger
+ True if current position is invalid and error was logged
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed)
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at current position
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the end
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the matches do not match at any point between current position and the start
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Some code matches
+ The same code matcher
+
+
+
+ Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed),
+ or if the check function returns false
+ Explanation of where/why the exception was thrown that will be added to the exception message
+ Function that checks validity of current state. If it returns false, an exception is thrown
+ The same code matcher
+
+
+
+ Sets an instruction at current position
+ The instruction to set
+ The same code matcher
+
+
+
+ Sets instruction at current position and advances
+ The instruction
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode and operand at current position and advances
+ The opcode
+ The operand
+ The same code matcher
+
+
+
+ Sets opcode at current position and advances
+ The opcode
+ The same code matcher
+
+
+
+ Sets operand at current position and advances
+ The operand
+ The same code matcher
+
+
+
+ Creates a label at current position
+ [out] The label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The position
+ [out] The new label
+ The same code matcher
+
+
+
+ Creates a label at a position
+ The offset
+ [out] The new label
+ The same code matcher
+
+
+
+ Adds an enumeration of labels to current position
+ The labels
+ The same code matcher
+
+
+
+ Adds an enumeration of labels at a position
+ The position
+ The labels
+ The same code matcher
+
+
+
+ Sets jump to
+ Branch instruction
+ Destination for the jump
+ [out] The created label
+ The same code matcher
+
+
+
+ Inserts some instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Inserts some instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts an enumeration of instructions and advances the position
+ The instructions
+ The same code matcher
+
+
+
+ Inserts a branch and advances the position
+ The branch opcode
+ Branch destination
+ The same code matcher
+
+
+
+ Removes current instruction
+ The same code matcher
+
+
+
+ Removes some instruction from current position by count
+ Number of instructions
+ The same code matcher
+
+
+
+ Removes the instructions in a range
+ The start
+ The end
+ The same code matcher
+
+
+
+ Removes the instructions in a offset range
+ The start offset
+ The end offset
+ The same code matcher
+
+
+
+ Advances the current position
+ The offset
+ The same code matcher
+
+
+
+ Moves the current position to the start
+ The same code matcher
+
+
+
+ Moves the current position to the end
+ The same code matcher
+
+
+
+ Searches forward with a predicate and advances position
+ The predicate
+ The same code matcher
+
+
+
+ Searches backwards with a predicate and reverses position
+ The predicate
+ The same code matcher
+
+
+
+ Matches forward and advances position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches forward and advances position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to beginning of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Matches backwards and reverses position to ending of matching sequence
+ Some code matches
+ The same code matcher
+
+
+
+ Repeats a match action until boundaries are met
+ The match action
+ An optional action that is executed when no match is found
+ The same code matcher
+
+
+
+ Gets a match by its name
+ The match name
+ An instruction
+
+
+
+ General extensions for common cases
+
+
+
+ Joins an enumeration with a value converter and a delimiter to a string
+ The inner type of the enumeration
+ The enumeration
+ An optional value converter (from T to string)
+ An optional delimiter
+ The values joined into a string
+
+
+
+ Converts an array of types (for example methods arguments) into a human readable form
+ The array of types
+ A human readable description including brackets
+
+
+
+ A full description of a type
+ The type
+ A human readable description
+
+
+
+ A a full description of a method or a constructor without assembly details but with generics
+ The method/constructor
+ A human readable description
+
+
+
+ A helper converting parameter infos to types
+ The array of parameter infos
+ An array of types
+
+
+
+ A helper to access a value via key from a dictionary
+ The key type
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist
+
+
+
+ A helper to access a value via key from a dictionary with extra casting
+ The value type
+ The dictionary
+ The key
+ The value for the key or the default value (of T) if that key does not exist or cannot be cast to T
+
+
+
+ Escapes Unicode and ASCII non printable characters
+ The string to convert
+ The string to convert
+ A string literal surrounded by
+
+
+
+ Extensions for
+
+
+
+ Returns if an is initialized and valid
+ The
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand has the same type and is equal to the value
+
+
+
+ Shortcut for testing whether the operand is equal to a non-null value
+ The
+ The value
+ True if the operand is equal to the value
+ This is an optimized version of for
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand
+
+
+
+ Shortcut for code.opcode == opcode && code.OperandIs(operand)
+ The
+ The
+ The operand value
+ True if the opcode is equal to the given opcode and the operand is equal to the given operand
+ This is an optimized version of for
+
+
+
+ Tests for any form of Ldarg*
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Ldarga/Ldarga_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for Starg/Starg_S
+ The
+ The (optional) index
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Ldloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests for any form of Stloc*
+ The
+ The optional local variable
+ True if it matches one of the variations
+
+
+
+ Tests if the code instruction branches
+ The
+ The label if the instruction is a branch operation or if not
+ True if the instruction branches
+
+
+
+ Tests if the code instruction calls the method/constructor
+ The
+ The method
+ True if the instruction calls the method or constructor
+
+
+
+ Tests if the code instruction loads a constant
+ The
+ True if the instruction loads a constant
+
+
+
+ Tests if the code instruction loads an integer constant
+ The
+ The integer constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a floating point constant
+ The
+ The floating point constant
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads an enum constant
+ The
+ The enum
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a string constant
+ The
+ The string
+ True if the instruction loads the constant
+
+
+
+ Tests if the code instruction loads a field
+ The
+ The field
+ Set to true if the address of the field is loaded
+ True if the instruction loads the field
+
+
+
+ Tests if the code instruction stores a field
+ The
+ The field
+ True if the instruction stores this field
+
+
+
+ Adds labels to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds labels to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all labels from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all labels from the code instruction to another one
+ The to move the labels from
+ The other to move the labels to
+ The code instruction labels were moved from (now empty)
+
+
+ Moves all labels from another code instruction to the current one
+ The to move the labels to
+ The other to move the labels from
+ The code instruction that received the labels
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ One or several to add
+ The same code instruction
+
+
+ Adds ExceptionBlocks to the code instruction and return it
+ The
+ An enumeration of
+ The same code instruction
+
+
+ Extracts all ExceptionBlocks from the code instruction and returns them
+ The
+ A list of
+
+
+ Moves all ExceptionBlocks from the code instruction to another one
+ The to move the ExceptionBlocks from
+ The other to move the ExceptionBlocks to
+ The code instruction blocks were moved from (now empty)
+
+
+ Moves all ExceptionBlocks from another code instruction to the current one
+ The to move the ExceptionBlocks to
+ The other to move the ExceptionBlocks from
+ The code instruction that received the blocks
+
+
+ General extensions for collections
+
+
+
+ A simple way to execute code for every element in a collection
+ The inner type of the collection
+ The collection
+ The action to execute
+
+
+
+ A simple way to execute code for elements in a collection matching a condition
+ The inner type of the collection
+ The collection
+ The predicate
+ The action to execute
+
+
+
+ A helper to add an item to a collection
+ The inner type of the collection
+ The collection
+ The item to add
+ The collection containing the item
+
+
+
+ A helper to add an item to an array
+ The inner type of the collection
+ The array
+ The item to add
+ The array containing the item
+
+
+
+ A helper to add items to an array
+ The inner type of the collection
+ The array
+ The items to add
+ The array containing the items
+
+
+
+ General extensions for collections
+
+
+
+ Tests a class member if it has an IL method body (external methods for example don't have a body)
+ The member to test
+ Returns true if the member has an IL body or false if not
+
+
+ A file log for debugging
+
+
+
+ Set this to make Harmony write its log content to this stream
+
+
+
+ Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop
+
+
+
+ The indent character. The default is tab
+
+
+
+ The current indent level
+
+
+
+ Changes the indentation level
+ The value to add to the indentation level
+
+
+
+ Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ The string to log
+
+
+
+ Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called
+ or else logging information is incomplete in case of a crash
+ A list of strings to log (they will not be re-indented)
+
+
+
+ Returns the log buffer and optionally empties it
+ True to empty the buffer
+ The buffer.
+
+
+
+ Replaces the buffer with new lines
+ The lines to store
+
+
+
+ Flushes the log buffer to disk (use in combination with LogBuffered)
+
+
+
+ Log a string directly to disk. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Log a string directly to disk if Harmony.DEBUG is true. Slower method that prevents missing information in case of a crash
+ The string to log.
+
+
+
+ Resets and deletes the log
+
+
+
+ Logs some bytes as hex values
+ The pointer to some memory
+ The length of bytes to log
+
+
+
+ A helper class to retrieve reflection info for non-private methods
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The generic type
+ The generic result type
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ Given a lambda expression that calls a method, returns the method info
+ The lambda expression using the method
+ The method in the lambda expression
+
+
+
+ A reflection helper to read and write private elements
+ The result type defined by GetValue()
+
+
+
+ Creates a traverse instance from an existing instance
+ The existing instance
+
+
+
+ Gets/Sets the current value
+ The value to read or write
+
+
+
+ A reflection helper to read and write private elements
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+ A instance
+
+
+
+ Creates a new traverse instance from a class T
+ The class
+ A instance
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+ A instance
+
+
+
+ Creates a new traverse instance from a named type
+ The type name, for format see
+ A instance
+
+
+
+ Creates a new and empty traverse instance
+
+
+
+ Creates a new traverse instance from a class/type
+ The class/type
+
+
+
+ Creates a new traverse instance from an instance
+ The object
+
+
+
+ Gets the current value
+ The value
+
+
+
+ Gets the current value
+ The type of the value
+ The value
+
+
+
+ Invokes the current method with arguments and returns the result
+ The method arguments
+ The value returned by the method
+
+
+
+ Invokes the current method with arguments and returns the result
+ The type of the value
+ The method arguments
+ The value returned by the method
+
+
+
+ Sets a value of the current field or property
+ The value
+ The same traverse instance
+
+
+
+ Gets the type of the current field or property
+ The type
+
+
+
+ Moves the current traverse instance to a inner type
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type name
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the field
+ The type name
+ A traverse instance
+
+
+
+ Gets all fields of the current type
+ A list of field names
+
+
+
+ Moves the current traverse instance to a property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a field
+ The type of the property
+ The type name
+ Optional property index
+ A traverse instance
+
+
+
+ Gets all properties of the current type
+ A list of property names
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The arguments defining the argument types of the method overload
+ A traverse instance
+
+
+
+ Moves the current traverse instance to a method
+ The name of the method
+ The argument types of the method
+ The arguments for the method
+ A traverse instance
+
+
+
+ Gets all methods of the current type
+ A list of method names
+
+
+
+ Checks if the current traverse instance is for a field
+ True if its a field
+
+
+
+ Checks if the current traverse instance is for a property
+ True if its a property
+
+
+
+ Checks if the current traverse instance is for a method
+ True if its a method
+
+
+
+ Checks if the current traverse instance is for a type
+ True if its a type
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each field
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each field pair
+
+
+
+ Iterates over all fields of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the field pair and the instances
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ The action receiving a instance for each property
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a pair of instances for each property pair
+
+
+
+ Iterates over all properties of the current type and executes a traverse action
+ Original object
+ Target object
+ The action receiving a dot path representing the property pair and the instances
+
+
+
+ A default field action that copies fields to fields
+
+
+
+ Returns a string that represents the current traverse
+ A string representation
+
+
+
+
diff --git a/CRIAOrgy/1.4/Assemblies/0MultiplayerAPI.dll b/CRIAOrgy/1.4/Assemblies/0MultiplayerAPI.dll
new file mode 100644
index 0000000..38b8a0e
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/0MultiplayerAPI.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll b/CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll
new file mode 100644
index 0000000..f8c3265
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/Milk.dll b/CRIAOrgy/1.4/Assemblies/Milk.dll
new file mode 100644
index 0000000..0e58733
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/Milk.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/RJW.dll b/CRIAOrgy/1.4/Assemblies/RJW.dll
new file mode 100644
index 0000000..cd73522
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/RJW.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.AIModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.AIModule.dll
new file mode 100644
index 0000000..78e7704
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.AIModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.ARModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.ARModule.dll
new file mode 100644
index 0000000..faa2f92
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.ARModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.AccessibilityModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.AccessibilityModule.dll
new file mode 100644
index 0000000..5229d35
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.AccessibilityModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll
new file mode 100644
index 0000000..52d1ec4
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.AndroidJNIModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.ClothModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClothModule.dll
new file mode 100644
index 0000000..e9a819d
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClothModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterInputModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterInputModule.dll
new file mode 100644
index 0000000..6324fbb
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterInputModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll
new file mode 100644
index 0000000..26ef8fa
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.ClusterRendererModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.CoreModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.CoreModule.dll
new file mode 100644
index 0000000..83b2b0a
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.CoreModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.CrashReportingModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.CrashReportingModule.dll
new file mode 100644
index 0000000..7d391bd
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.CrashReportingModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.DSPGraphModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.DSPGraphModule.dll
new file mode 100644
index 0000000..eba8cc1
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.DSPGraphModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.DirectorModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.DirectorModule.dll
new file mode 100644
index 0000000..5976cc5
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.DirectorModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.GameCenterModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.GameCenterModule.dll
new file mode 100644
index 0000000..4797dbe
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.GameCenterModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.GridModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.GridModule.dll
new file mode 100644
index 0000000..61c1ec4
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.GridModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.InputModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.InputModule.dll
new file mode 100644
index 0000000..3be4fb9
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.InputModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll
new file mode 100644
index 0000000..cd1981f
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.JSONSerializeModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.LocalizationModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.LocalizationModule.dll
new file mode 100644
index 0000000..292f854
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.LocalizationModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll
new file mode 100644
index 0000000..c570bbe
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.ParticleSystemModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll
new file mode 100644
index 0000000..3de5b54
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteMaskModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll
new file mode 100644
index 0000000..b59a5b8
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.SpriteShapeModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.StreamingModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.StreamingModule.dll
new file mode 100644
index 0000000..69068e5
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.StreamingModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.SubsystemsModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.SubsystemsModule.dll
new file mode 100644
index 0000000..b5b7429
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.SubsystemsModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainModule.dll
new file mode 100644
index 0000000..18b193e
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll
new file mode 100644
index 0000000..48119b4
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.TerrainPhysicsModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.TilemapModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.TilemapModule.dll
new file mode 100644
index 0000000..6c43665
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.TilemapModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UIElementsModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UIElementsModule.dll
new file mode 100644
index 0000000..8dc2716
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UIElementsModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UNETModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UNETModule.dll
new file mode 100644
index 0000000..0234fad
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UNETModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll
new file mode 100644
index 0000000..e3c39e8
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityAnalyticsModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityConnectModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityConnectModule.dll
new file mode 100644
index 0000000..7ec2470
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityConnectModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll
new file mode 100644
index 0000000..0024d85
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAssetBundleModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll
new file mode 100644
index 0000000..d4f9220
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestAudioModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll
new file mode 100644
index 0000000..b99842a
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll
new file mode 100644
index 0000000..d8b643a
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestTextureModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll
new file mode 100644
index 0000000..b8b8314
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.UnityWebRequestWWWModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.VFXModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.VFXModule.dll
new file mode 100644
index 0000000..0895120
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.VFXModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.VRModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.VRModule.dll
new file mode 100644
index 0000000..ea9d6fe
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.VRModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.VehiclesModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.VehiclesModule.dll
new file mode 100644
index 0000000..f7c1085
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.VehiclesModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.VideoModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.VideoModule.dll
new file mode 100644
index 0000000..92c9898
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.VideoModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.WindModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.WindModule.dll
new file mode 100644
index 0000000..8ac2232
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.WindModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.XRModule.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.XRModule.dll
new file mode 100644
index 0000000..a58bf6a
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.XRModule.dll differ
diff --git a/CRIAOrgy/1.4/Assemblies/UnityEngine.dll b/CRIAOrgy/1.4/Assemblies/UnityEngine.dll
new file mode 100644
index 0000000..d45693c
Binary files /dev/null and b/CRIAOrgy/1.4/Assemblies/UnityEngine.dll differ
diff --git a/CRIAOrgy/CRIAOrgy.csproj b/CRIAOrgy/CRIAOrgy.csproj
index 5d52a29..e08ba10 100644
--- a/CRIAOrgy/CRIAOrgy.csproj
+++ b/CRIAOrgy/CRIAOrgy.csproj
@@ -9,15 +9,16 @@
Properties
CRIAOrgy
CRIAOrgy
- v4.7.2
+ v4.8
512
true
+
false
none
false
- Assemblies\
+ 1.4\Assemblies\
DEBUG;TRACE
prompt
4
@@ -33,20 +34,17 @@
- ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll
- False
+ ..\..\..\..\..\workshop\content\294100\839005762\1.4\Assemblies\0Harmony.dll
..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
False
-
- ..\..\..\..\..\workshop\content\294100\818773962\v1.3\Assemblies\HugsLib.dll
- False
+
+ ..\..\rjw-mc\1.3\Assemblies\Milk.dll
- ..\..\rjw\1.3\Assemblies\RJW.dll
- False
+ ..\..\rjw\1.4\Assemblies\RJW.dll
@@ -58,11 +56,9 @@
..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
- False
..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
- False
@@ -73,8 +69,6 @@
-
-
-
+
\ No newline at end of file
diff --git a/LoadFolders.xml b/LoadFolders.xml
index 7e5931b..f003119 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -9,4 +9,13 @@
CRIAOrgy
CRIAOrgy/1.3
+
+ /
+ 1.4
+ CRIALactation
+ CRIALactation/1.4
+
+ CRIAOrgy
+ CRIAOrgy/1.4
+