Skip to content

Commit

Permalink
A16 update
Browse files Browse the repository at this point in the history
  • Loading branch information
Skullywag committed Jan 12, 2017
1 parent f0b2260 commit 2475de9
Show file tree
Hide file tree
Showing 17 changed files with 188 additions and 53 deletions.
2 changes: 1 addition & 1 deletion About/About.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
<ModMetaData>
<name>ReclaimFabric</name>
<author>Skullywag</author>
<targetVersion>0.14.1249</targetVersion>
<targetVersion>0.16.1393</targetVersion>
<description>Allows tailors to reclaim fabric from clothing.</description>
</ModMetaData>
Binary file modified Assemblies/ReclaimFabric.dll
Binary file not shown.
6 changes: 6 additions & 0 deletions Defs/Injectors/injector.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ReclaimFabric.Bootstrap>
<defName>ReclaimFabric</defName>
</ReclaimFabric.Bootstrap>
</Defs>
13 changes: 0 additions & 13 deletions Defs/ModHelperDefs/Injector.xml

This file was deleted.

Binary file modified Source/.vs/ReclaimFabric/v14/.suo
Binary file not shown.
29 changes: 29 additions & 0 deletions Source/ReclaimFabric/Bootstrap.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Reflection;
using Verse;
using RimWorld;

namespace ReclaimFabric
{
class Bootstrap : Def
{
private const BindingFlags UniversalBindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

static Bootstrap()
{
{
MethodInfo method3 = typeof(Thing).GetMethod("SmeltProducts", BindingFlags.Instance | BindingFlags.Public);
MethodInfo method4 = typeof(_Thing_ReclaimFabric).GetMethod("_SmeltProducts", BindingFlags.Static | BindingFlags.NonPublic);
Log.Message("Attempting detour from " + method3 + "to " + method4);
if (!Detours.TryDetourFromTo(method3, method4))
{
Log.Error("Reclaim Fabric Detour failed");
return;
}
Log.Message("Reclaim Fabric Detour Successful");
}

Assembly Assembly_CSharp = Assembly.Load("Assembly-CSharp.dll");
}
}
}
27 changes: 0 additions & 27 deletions Source/ReclaimFabric/DetourInjector.cs

This file was deleted.

118 changes: 118 additions & 0 deletions Source/ReclaimFabric/Detours.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain.We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors.We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to<http://unlicense.org/>
*/

using UnityEngine;
using System;
using System.Collections.Generic;
using System.Reflection;

namespace ReclaimFabric
{
public static class Detours
{

private static List<string> detoured = new List<string>();
private static List<string> destinations = new List<string>();

/**
This is a basic first implementation of the IL method 'hooks' (detours) made possible by RawCode's work;
https://ludeon.com/forums/index.php?topic=17143.0
Performs detours, spits out basic logs and warns if a method is detoured multiple times.
**/
public static unsafe bool TryDetourFromTo(MethodInfo source, MethodInfo destination)
{
// error out on null arguments
if (source == null)
{
Debug.LogError("Detours - Source MethodInfo is null");
return false;
}

if (destination == null)
{
Debug.LogError("Detours - Destination MethodInfo is null");
return false;
}

// keep track of detours and spit out some messaging
string sourceString = source.DeclaringType.FullName + "." + source.Name + " @ 0x" + source.MethodHandle.GetFunctionPointer().ToString("X" + (IntPtr.Size * 2).ToString());
string destinationString = destination.DeclaringType.FullName + "." + destination.Name + " @ 0x" + destination.MethodHandle.GetFunctionPointer().ToString("X" + (IntPtr.Size * 2).ToString());

detoured.Add(sourceString);
destinations.Add(destinationString);

if (IntPtr.Size == sizeof(Int64))
{
// 64-bit systems use 64-bit absolute address and jumps
// 12 byte destructive

// Get function pointers
long Source_Base = source.MethodHandle.GetFunctionPointer().ToInt64();
long Destination_Base = destination.MethodHandle.GetFunctionPointer().ToInt64();

// Native source address
byte* Pointer_Raw_Source = (byte*)Source_Base;

// Pointer to insert jump address into native code
long* Pointer_Raw_Address = (long*)(Pointer_Raw_Source + 0x02);

// Insert 64-bit absolute jump into native code (address in rax)
// mov rax, immediate64
// jmp [rax]
*(Pointer_Raw_Source + 0x00) = 0x48;
*(Pointer_Raw_Source + 0x01) = 0xB8;
*Pointer_Raw_Address = Destination_Base; // ( Pointer_Raw_Source + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 )
*(Pointer_Raw_Source + 0x0A) = 0xFF;
*(Pointer_Raw_Source + 0x0B) = 0xE0;

}
else
{
// 32-bit systems use 32-bit relative offset and jump
// 5 byte destructive

// Get function pointers
int Source_Base = source.MethodHandle.GetFunctionPointer().ToInt32();
int Destination_Base = destination.MethodHandle.GetFunctionPointer().ToInt32();

// Native source address
byte* Pointer_Raw_Source = (byte*)Source_Base;

// Pointer to insert jump address into native code
int* Pointer_Raw_Address = (int*)(Pointer_Raw_Source + 1);

// Jump offset (less instruction size)
int offset = (Destination_Base - Source_Base) - 5;

// Insert 32-bit relative jump into native code
*Pointer_Raw_Source = 0xE9;
*Pointer_Raw_Address = offset;
}

// done!
return true;
}

}

}
18 changes: 9 additions & 9 deletions Source/ReclaimFabric/ReclaimFabric.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
Expand All @@ -31,32 +32,31 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\..\..\RimWorld1232WinDev_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Community Core Library, Version=0.13.0.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="Assembly-CSharp, Version=0.15.6089.27073, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\Community Core Library\Assemblies\Community Core Library.dll</HintPath>
<HintPath>..\..\..\..\RimWorld1393Win_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="UnityEngine">
<HintPath>..\..\..\..\RimWorld1232WinDev_Data\Managed\UnityEngine.dll</HintPath>
<Reference Include="UnityEngine, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\RimWorld1393Win_Data\Managed\UnityEngine.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="DetourInjector.cs" />
<Compile Include="Bootstrap.cs" />
<Compile Include="Detours.cs" />
<Compile Include="Helper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SpecialThingFilterWorker_ReclaimAdvancedArmor.cs" />
<Compile Include="SpecialThingFilterWorker_ReclaimArmor.cs" />
<Compile Include="SpecialThingFilterWorker_ReclaimEnergyShields.cs" />
<Compile Include="SpecialThingFilterWorker_NoIngredients.cs" />
<Compile Include="_Thing.cs" />
<Compile Include="_Thing_ReclaimFabric.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@

namespace ReclaimFabric
{
public static class _Thing
public static class _Thing_ReclaimFabric
{
internal static IEnumerable<Thing> _SmeltProducts(this Thing _this, float efficiency)
{
var costListAdj = _this.CostListAdjusted();
if (_this.def.IsClothes() || _this.def.IsAdvancedArmor() || _this.def.IsArmor())
{
Pawn crafter = _this.Position.GetEdifice().InteractionCell.GetFirstPawn();
float skillPerc = ((float)crafter.skills.GetSkill(SkillDefOf.Crafting).level / 20);
Pawn crafter = _this.Position.GetEdifice(_this.Map).InteractionCell.GetFirstPawn(_this.Map);
float skillPerc = ((float)crafter.skills.GetSkill(SkillDefOf.Crafting).Level / 20);
float num = Mathf.Lerp(0.5f, 1.5f, skillPerc);
float healthPerc = ((float)_this.HitPoints / (float)_this.MaxHitPoints);
float num1 = Mathf.Lerp(0f, 0.4f, healthPerc);
Expand Down
Binary file modified Source/ReclaimFabric/bin/Debug/ReclaimFabric.dll
Binary file not shown.
Binary file modified Source/ReclaimFabric/bin/Debug/ReclaimFabric.pdb
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,25 @@ C:\Users\mjsku\Desktop\RimWorldAlpha14eWin\RimWorld1249Win\Mods\ReclaimFabric\So
C:\Users\mjsku\Desktop\RimWorldAlpha14eWin\RimWorld1249Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.csprojResolveAssemblyReference.cache
C:\Users\mjsku\Desktop\RimWorldAlpha14eWin\RimWorld1249Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.dll
C:\Users\mjsku\Desktop\RimWorldAlpha14eWin\RimWorld1249Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.pdb
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.csprojResolveAssemblyReference.cache
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\obj\Debug\ReclaimFabric.pdb
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\ReclaimFabric.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\ReclaimFabric.pdb
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\Assembly-CSharp.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\Community Core Library.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\UnityEngine.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\Assembly-CSharp-firstpass.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\NAudio.dll
C:\Users\mjsku\Desktop\RimWorldAlpha15cWin\RimWorld1284Win\Mods\ReclaimFabric\Source\ReclaimFabric\bin\Debug\NVorbis.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\obj\Debug\ReclaimFabric.csprojResolveAssemblyReference.cache
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\obj\Debug\ReclaimFabric.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\obj\Debug\ReclaimFabric.pdb
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\ReclaimFabric.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\ReclaimFabric.pdb
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\Assembly-CSharp.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\UnityEngine.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\Assembly-CSharp-firstpass.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\NAudio.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\NVorbis.dll
C:\Users\mjsku\Desktop\RimWorldAlpha16Win\RimWorld1393Win\Mods\ReclaimFabric - A16\Source\ReclaimFabric\bin\Debug\UnityEngine.xml
Binary file not shown.
Binary file modified Source/ReclaimFabric/obj/Debug/ReclaimFabric.dll
Binary file not shown.
Binary file modified Source/ReclaimFabric/obj/Debug/ReclaimFabric.pdb
Binary file not shown.

0 comments on commit 2475de9

Please sign in to comment.