Decompiled source of REPODuck v1.0.0

REPODuck.dll

Decompiled 3 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BoplFixedMath;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("REPODuck")]
[assembly: AssemblyConfiguration("release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("REPODuck")]
[assembly: AssemblyTitle("REPODuck")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace REPODuck;

[BepInPlugin("com.owen.bopl.repoduck", "REPODuck Mod", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	private void Awake()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		((BaseUnityPlugin)this).Logger.LogInfo((object)"REPODuck Mod loading...");
		new Harmony("com.owen.bopl.repoduck").PatchAll();
	}
}
public static class DuckTracker
{
	public static HashSet<int> duckInstanceIds = new HashSet<int>();

	public static Dictionary<int, Fix> duckLifespans = new Dictionary<int, Fix>();

	public static Dictionary<int, Vec2> duckPrevVelocities = new Dictionary<int, Vec2>();

	public static Dictionary<int, int> duckOwnerIds = new Dictionary<int, int>();

	public static bool IsDuck(GameObject go)
	{
		if ((Object)(object)go != (Object)null)
		{
			return duckInstanceIds.Contains(((Object)go).GetInstanceID());
		}
		return false;
	}

	public static void RegisterDuck(GameObject go, int ownerId = -1)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		int instanceID = ((Object)go).GetInstanceID();
		duckInstanceIds.Add(instanceID);
		duckLifespans[instanceID] = Fix.Zero;
		duckPrevVelocities[instanceID] = Vec2.zero;
		duckOwnerIds[instanceID] = ownerId;
	}

	public static void UnregisterDuck(GameObject go)
	{
		int instanceID = ((Object)go).GetInstanceID();
		duckInstanceIds.Remove(instanceID);
		duckLifespans.Remove(instanceID);
		duckPrevVelocities.Remove(instanceID);
		duckOwnerIds.Remove(instanceID);
	}

	public static int GetOwner(int instanceId)
	{
		if (!duckOwnerIds.TryGetValue(instanceId, out var value))
		{
			return -1;
		}
		return value;
	}
}
[HarmonyPatch(typeof(AbilityGrid), "Awake")]
public class REPODuckInjectionPatch
{
	private static bool hasInjected;

	private static Texture2D rawDuckTextureCache;

	private static Sprite rawDuckSpriteCache;

	private static Sprite compositedIconCache;

	public static void Prefix(AbilityGrid __instance)
	{
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0232: Unknown result type (might be due to invalid IL or missing references)
		//IL_0255: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		if (hasInjected)
		{
			return;
		}
		NamedSpriteList value = Traverse.Create((object)__instance).Field("abilityIcons").GetValue<NamedSpriteList>();
		if ((Object)(object)value == (Object)null || value.sprites == null)
		{
			return;
		}
		NamedSprite val = default(NamedSprite);
		bool flag = false;
		foreach (NamedSprite sprite in value.sprites)
		{
			if (sprite.name.ToLower().Contains("grenade") && !sprite.name.ToLower().Contains("smoke"))
			{
				val = sprite;
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			return;
		}
		GameObject val2 = Object.Instantiate<GameObject>(val.associatedGameObject);
		Object.DontDestroyOnLoad((Object)(object)val2);
		((Object)val2).name = "repoduck_spawner";
		Ability component = val2.GetComponent<Ability>();
		if ((Object)(object)component != (Object)null)
		{
			component.Cooldown *= (Fix)2L;
		}
		ThrowItem2 component2 = val2.GetComponent<ThrowItem2>();
		if ((Object)(object)component2 != (Object)null && (Object)(object)component2.ItemPrefab != (Object)null)
		{
			component2.ItemPrefab = PrototypeDuck(component2.ItemPrefab, val.sprite);
			if (val2.transform.childCount > 0)
			{
				SpriteRenderer[] componentsInChildren = ((Component)val2.transform.GetChild(0)).gameObject.GetComponentsInChildren<SpriteRenderer>(true);
				foreach (SpriteRenderer val3 in componentsInChildren)
				{
					if ((Object)(object)val3.sprite != (Object)null && ((Object)val3.sprite).name.ToLower().Contains("grenade"))
					{
						val3.sprite = LoadRawDuckSprite(val.sprite);
					}
				}
			}
			if (val2.transform.childCount > 1)
			{
				GameObject gameObject = ((Component)val2.transform.GetChild(1)).gameObject;
				SpriteAnimator[] componentsInChildren2 = gameObject.GetComponentsInChildren<SpriteAnimator>(true);
				for (int i = 0; i < componentsInChildren2.Length; i++)
				{
					Object.DestroyImmediate((Object)(object)componentsInChildren2[i]);
				}
				SpriteRenderer[] componentsInChildren = gameObject.GetComponentsInChildren<SpriteRenderer>(true);
				foreach (SpriteRenderer obj in componentsInChildren)
				{
					obj.sprite = LoadRawDuckSprite(val.sprite);
					obj.color = Color.white;
				}
			}
		}
		Sprite val4 = LoadCompositedIcon(val.sprite);
		NamedSprite item = default(NamedSprite);
		((NamedSprite)(ref item))..ctor("repoduck", val4, val2, true);
		value.sprites.Add(item);
		hasInjected = true;
	}

	private static Texture2D LoadRawDuckTexture()
	{
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Expected O, but got Unknown
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Expected O, but got Unknown
		//IL_00c5: Expected O, but got Unknown
		if ((Object)(object)rawDuckTextureCache != (Object)null)
		{
			return rawDuckTextureCache;
		}
		byte[] array = null;
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		string[] manifestResourceNames = executingAssembly.GetManifestResourceNames();
		foreach (string text in manifestResourceNames)
		{
			if (!text.EndsWith("Duck.png"))
			{
				continue;
			}
			using (Stream stream = executingAssembly.GetManifestResourceStream(text))
			{
				if (stream != null)
				{
					array = new byte[stream.Length];
					stream.Read(array, 0, array.Length);
				}
			}
			break;
		}
		if (array == null)
		{
			string path = Path.Combine(Path.GetDirectoryName(executingAssembly.Location), "Duck.png");
			if (File.Exists(path))
			{
				array = File.ReadAllBytes(path);
			}
		}
		if (array != null)
		{
			Texture2D val = new Texture2D(2, 2)
			{
				filterMode = (FilterMode)0
			};
			ImageConversion.LoadImage(val, array);
			rawDuckTextureCache = val;
			return val;
		}
		return null;
	}

	private static Sprite LoadRawDuckSprite(Sprite baseSprite = null)
	{
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)rawDuckSpriteCache != (Object)null)
		{
			return rawDuckSpriteCache;
		}
		Texture2D val = LoadRawDuckTexture();
		if ((Object)(object)val == (Object)null)
		{
			return null;
		}
		float num = 1200f;
		if ((Object)(object)baseSprite != (Object)null)
		{
			Rect rect = baseSprite.rect;
			if (((Rect)(ref rect)).width > 0f)
			{
				float num2 = ((Texture)val).width;
				rect = baseSprite.rect;
				num = num2 / ((Rect)(ref rect)).width * baseSprite.pixelsPerUnit * 0.765f;
			}
		}
		rawDuckSpriteCache = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), num);
		return rawDuckSpriteCache;
	}

	private static Sprite LoadCompositedIcon(Sprite baseSprite)
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Expected O, but got Unknown
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_0265: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0201: Unknown result type (might be due to invalid IL or missing references)
		//IL_0206: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)compositedIconCache != (Object)null)
		{
			return compositedIconCache;
		}
		Texture2D val = LoadRawDuckTexture();
		if ((Object)(object)val == (Object)null || (Object)(object)baseSprite == (Object)null)
		{
			return null;
		}
		Rect rect = baseSprite.rect;
		int num = (int)((Rect)(ref rect)).width;
		rect = baseSprite.rect;
		int num2 = (int)((Rect)(ref rect)).height;
		if (num <= 0)
		{
			num = 120;
		}
		if (num2 <= 0)
		{
			num2 = 120;
		}
		Texture2D val2 = new Texture2D(num, num2);
		Color[] array = (Color[])(object)new Color[num * num2];
		float num3 = (float)num / 2f;
		float num4 = (float)num2 / 2f;
		float num5 = (float)num * 0.38f;
		float num6 = (float)num * 0.33f;
		Color val3 = default(Color);
		((Color)(ref val3))..ctor(0.48f, 0.25f, 0.12f, 1f);
		Color val4 = default(Color);
		((Color)(ref val4))..ctor(0.5f, 0.5f, 0.5f, 1f);
		for (int i = 0; i < num2; i++)
		{
			for (int j = 0; j < num; j++)
			{
				float num7 = Vector2.Distance(new Vector2((float)j, (float)i), new Vector2(num3, num4));
				if (num7 < num6)
				{
					array[i * num + j] = val4;
				}
				else if (num7 < num5)
				{
					array[i * num + j] = val3;
				}
				else
				{
					array[i * num + j] = Color.clear;
				}
			}
		}
		int num8 = (int)((float)num * 0.55f);
		int num9 = (int)((float)num2 * 0.55f);
		int num10 = (int)(num3 - (float)num8 / 2f);
		int num11 = (int)(num4 - (float)num9 / 2f);
		for (int k = 0; k < num9; k++)
		{
			for (int l = 0; l < num8; l++)
			{
				float num12 = (float)l / (float)num8;
				float num13 = (float)k / (float)num9;
				Color pixelBilinear = val.GetPixelBilinear(num12, num13);
				if (pixelBilinear.a > 0.05f)
				{
					int num14 = num10 + l;
					int num15 = num11 + k;
					if (num14 >= 0 && num14 < num && num15 >= 0 && num15 < num2)
					{
						Color val5 = array[num15 * num + num14];
						array[num15 * num + num14] = Color.Lerp(val5, pixelBilinear, pixelBilinear.a);
					}
				}
			}
		}
		val2.SetPixels(array);
		((Texture)val2).filterMode = (FilterMode)0;
		val2.Apply();
		float num16 = baseSprite.pixelsPerUnit;
		if (num16 <= 0f)
		{
			num16 = 100f;
		}
		compositedIconCache = Sprite.Create(val2, new Rect(0f, 0f, (float)num, (float)num2), new Vector2(0.5f, 0.5f), num16);
		return compositedIconCache;
	}

	private static BoplBody PrototypeDuck(BoplBody baseGrenadePrefab, Sprite baseSprite = null)
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Expected O, but got Unknown
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject("REPODuck_PrefabHolder");
		Object.DontDestroyOnLoad((Object)(object)val);
		val.SetActive(false);
		GameObject val2 = Object.Instantiate<GameObject>(((Component)baseGrenadePrefab).gameObject, val.transform);
		((Object)val2).name = "REPODuck_Projectile";
		val2.SetActive(true);
		Grenade component = val2.GetComponent<Grenade>();
		if ((Object)(object)component != (Object)null)
		{
			component.timedExplosion = false;
			component.selfDestructDelay = (Fix)(-1L);
		}
		Projectile component2 = val2.GetComponent<Projectile>();
		if ((Object)(object)component2 != (Object)null)
		{
			Object.DestroyImmediate((Object)(object)component2);
		}
		SpriteAnimator[] componentsInChildren = val2.GetComponentsInChildren<SpriteAnimator>(true);
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			Object.DestroyImmediate((Object)(object)componentsInChildren[i]);
		}
		Sprite sprite = LoadRawDuckSprite(baseSprite);
		SpriteRenderer[] componentsInChildren2 = val2.GetComponentsInChildren<SpriteRenderer>(true);
		foreach (SpriteRenderer obj in componentsInChildren2)
		{
			obj.sprite = sprite;
			obj.color = Color.white;
		}
		BoplBody component3 = val2.GetComponent<BoplBody>();
		component3.bounciness = Fix.One;
		component3.gravityScale = Fix.One;
		return component3;
	}
}
[HarmonyPatch]
public class DuckGrenadeExplodePatch
{
	[CompilerGenerated]
	private sealed class <TargetMethods>d__0 : IEnumerable<MethodBase>, IEnumerable, IEnumerator<MethodBase>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private MethodBase <>2__current;

		private int <>l__initialThreadId;

		private Type <grenadeExplodeType>5__2;

		MethodBase IEnumerator<MethodBase>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <TargetMethods>d__0(int <>1__state)
		{
			this.<>1__state = <>1__state;
			<>l__initialThreadId = Environment.CurrentManagedThreadId;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<grenadeExplodeType>5__2 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			MethodInfo method2;
			MethodInfo method3;
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<grenadeExplodeType>5__2 = typeof(Grenade).Assembly.GetType("GrenadeExplode");
				if (<grenadeExplodeType>5__2 != null)
				{
					MethodInfo method = <grenadeExplodeType>5__2.GetMethod("OnCollide", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
					if (method != null)
					{
						<>2__current = method;
						<>1__state = 1;
						return true;
					}
					goto IL_0086;
				}
				goto IL_00c0;
			case 1:
				<>1__state = -1;
				goto IL_0086;
			case 2:
				<>1__state = -1;
				goto IL_00c0;
			case 3:
				{
					<>1__state = -1;
					break;
				}
				IL_00c0:
				method2 = typeof(Grenade).GetMethod("Detonate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (method2 != null)
				{
					<>2__current = method2;
					<>1__state = 3;
					return true;
				}
				break;
				IL_0086:
				method3 = <grenadeExplodeType>5__2.GetMethod("Detonate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
				if (method3 != null)
				{
					<>2__current = method3;
					<>1__state = 2;
					return true;
				}
				goto IL_00c0;
			}
			return false;
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}

		[DebuggerHidden]
		IEnumerator<MethodBase> IEnumerable<MethodBase>.GetEnumerator()
		{
			if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
			{
				<>1__state = 0;
				return this;
			}
			return new <TargetMethods>d__0(0);
		}

		[DebuggerHidden]
		IEnumerator IEnumerable.GetEnumerator()
		{
			return ((IEnumerable<MethodBase>)this).GetEnumerator();
		}
	}

	[IteratorStateMachine(typeof(<TargetMethods>d__0))]
	private static IEnumerable<MethodBase> TargetMethods()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <TargetMethods>d__0(-2);
	}

	public static bool Prefix(MonoBehaviour __instance)
	{
		if ((Object)(object)__instance != (Object)null && DuckTracker.IsDuck(((Component)__instance).gameObject))
		{
			return false;
		}
		return true;
	}
}
[HarmonyPatch(typeof(ThrowItem2), "SpawnGrenade")]
public class DuckSpawnPatch
{
	public static void Postfix(ThrowItem2 __instance, BoplBody ___grenadeBody)
	{
		if (!((Object)(object)___grenadeBody == (Object)null) && (Object)(object)__instance.ItemPrefab != (Object)null && ((Object)((Component)__instance.ItemPrefab).gameObject).name.Contains("REPODuck"))
		{
			Item component = ((Component)___grenadeBody).GetComponent<Item>();
			int ownerId = (((Object)(object)component != (Object)null) ? component.OwnerId : (-1));
			DuckTracker.RegisterDuck(((Component)___grenadeBody).gameObject, ownerId);
		}
	}
}
[HarmonyPatch(typeof(DestroyIfOutsideSceneBounds), "selfDestruct")]
public class DuckScreenBorderPatch
{
	public static bool Prefix(DestroyIfOutsideSceneBounds __instance)
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0185: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		//IL_018b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: Unknown result type (might be due to invalid IL or missing references)
		//IL_0155: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_015d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0162: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Unknown result type (might be due to invalid IL or missing references)
		//IL_020b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0210: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0198: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_019f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0213: Unknown result type (might be due to invalid IL or missing references)
		//IL_0218: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_0239: Unknown result type (might be due to invalid IL or missing references)
		//IL_023e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0243: Unknown result type (might be due to invalid IL or missing references)
		//IL_0249: Unknown result type (might be due to invalid IL or missing references)
		//IL_024e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_0259: Unknown result type (might be due to invalid IL or missing references)
		//IL_025e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_0268: Unknown result type (might be due to invalid IL or missing references)
		//IL_026a: Unknown result type (might be due to invalid IL or missing references)
		//IL_026c: Unknown result type (might be due to invalid IL or missing references)
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0270: Unknown result type (might be due to invalid IL or missing references)
		//IL_027c: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0283: Unknown result type (might be due to invalid IL or missing references)
		//IL_0287: Unknown result type (might be due to invalid IL or missing references)
		//IL_028c: Unknown result type (might be due to invalid IL or missing references)
		//IL_028e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0290: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		if (!DuckTracker.IsDuck(((Component)__instance).gameObject))
		{
			return true;
		}
		BoplBody component = ((Component)__instance).GetComponent<BoplBody>();
		if ((Object)(object)component == (Object)null)
		{
			return true;
		}
		try
		{
			Vec2 velocity = component.velocity;
			Vec2 position = component.position;
			if (velocity.x > Fix.Zero && position.x > Fix.Zero)
			{
				component.velocity = new Vec2(-Fix.Abs(velocity.x), velocity.y);
				component.position = new Vec2(position.x - (Fix)2L, position.y);
			}
			else if (velocity.x < Fix.Zero && position.x < Fix.Zero)
			{
				component.velocity = new Vec2(Fix.Abs(velocity.x), velocity.y);
				component.position = new Vec2(position.x + (Fix)2L, position.y);
			}
			velocity = component.velocity;
			if (velocity.y > Fix.Zero && position.y > Fix.Zero)
			{
				component.velocity = new Vec2(velocity.x, -Fix.Abs(velocity.y));
				component.position = new Vec2(component.position.x, position.y - (Fix)2L);
			}
			else if (velocity.y < Fix.Zero && position.y < Fix.Zero)
			{
				component.velocity = new Vec2(velocity.x, Fix.Abs(velocity.y));
				component.position = new Vec2(component.position.x, position.y + (Fix)2L);
			}
			Fix val = ((Random.Range(0, 50) != 0) ? ((Fix)Random.Range(1f, 1.5f)) : ((Fix)Random.Range(3f, 5f)));
			component.velocity *= val;
			Fix val2 = (Fix)50L;
			Fix val3 = component.velocity.x * component.velocity.x + component.velocity.y * component.velocity.y;
			if (val3 > val2 * val2)
			{
				Fix val4 = Fix.Sqrt(val3);
				component.velocity *= val2 / val4;
			}
		}
		catch
		{
		}
		return false;
	}
}
[HarmonyPatch(typeof(KillZone), "OnCollide")]
public class DuckWaterPatch
{
	public static bool Prefix(KillZone __instance, CollisionInformation collision)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: Unknown result type (might be due to invalid IL or missing references)
		//IL_0155: Unknown result type (might be due to invalid IL or missing references)
		//IL_015a: Unknown result type (might be due to invalid IL or missing references)
		//IL_015f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0164: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_016a: Unknown result type (might be due to invalid IL or missing references)
		//IL_016c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_017a: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0183: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018a: Unknown result type (might be due to invalid IL or missing references)
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)collision.colliderPP.fixTrans == (Object)null)
		{
			return true;
		}
		GameObject gameObject = ((Component)collision.colliderPP.fixTrans).gameObject;
		if (!DuckTracker.IsDuck(gameObject))
		{
			return true;
		}
		BoplBody component = gameObject.GetComponent<BoplBody>();
		if ((Object)(object)component != (Object)null)
		{
			try
			{
				Vec2 position = component.position;
				Fix val = (Fix)__instance.WaterHeight;
				if (position.y < val - (Fix)1L)
				{
					DuckTracker.UnregisterDuck(gameObject);
					Updater.DestroyFix(gameObject);
					return false;
				}
				Vec2 velocity = component.velocity;
				component.velocity = new Vec2(velocity.x, Fix.Abs(velocity.y) + (Fix)5L);
				component.position = new Vec2(position.x, val + (Fix)1L);
				Fix val2 = ((Random.Range(0, 50) != 0) ? ((Fix)Random.Range(1f, 1.5f)) : ((Fix)Random.Range(3f, 5f)));
				component.velocity *= val2;
				Fix val3 = (Fix)50L;
				Fix val4 = component.velocity.x * component.velocity.x + component.velocity.y * component.velocity.y;
				if (val4 > val3 * val3)
				{
					Fix val5 = Fix.Sqrt(val4);
					component.velocity *= val3 / val5;
				}
			}
			catch
			{
			}
		}
		return false;
	}
}
[HarmonyPatch(typeof(Grenade), "UpdateSim")]
public class DuckUpdatePatch
{
	private static readonly Fix MAX_SPEED = (Fix)50L;

	private static Fix SqrMag(Vec2 v)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		return v.x * v.x + v.y * v.y;
	}

	private static Fix SafeMag(Vec2 v)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		Fix val = v.x * v.x + v.y * v.y;
		if (val <= Fix.Zero)
		{
			return Fix.Zero;
		}
		return Fix.Sqrt(val);
	}

	private static void CapSpeed(BoplBody body, Fix maxSpeed)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		Fix val = body.velocity.x * body.velocity.x + body.velocity.y * body.velocity.y;
		if (val > maxSpeed * maxSpeed && val > Fix.Zero)
		{
			Fix val2 = Fix.Sqrt(val);
			if (val2 > Fix.Zero)
			{
				body.velocity *= maxSpeed / val2;
			}
		}
	}

	public static void Postfix(Grenade __instance, Fix simDeltaTime)
	{
		//IL_06ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_0440: Unknown result type (might be due to invalid IL or missing references)
		//IL_0445: Unknown result type (might be due to invalid IL or missing references)
		//IL_044a: Unknown result type (might be due to invalid IL or missing references)
		//IL_044c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0451: Unknown result type (might be due to invalid IL or missing references)
		//IL_0458: Unknown result type (might be due to invalid IL or missing references)
		//IL_045d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0462: Unknown result type (might be due to invalid IL or missing references)
		//IL_0464: Unknown result type (might be due to invalid IL or missing references)
		//IL_0469: Unknown result type (might be due to invalid IL or missing references)
		//IL_0473: Unknown result type (might be due to invalid IL or missing references)
		//IL_0475: Unknown result type (might be due to invalid IL or missing references)
		//IL_047a: Unknown result type (might be due to invalid IL or missing references)
		//IL_047c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0481: Unknown result type (might be due to invalid IL or missing references)
		//IL_0486: Unknown result type (might be due to invalid IL or missing references)
		//IL_0488: Unknown result type (might be due to invalid IL or missing references)
		//IL_048d: Unknown result type (might be due to invalid IL or missing references)
		//IL_048f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0494: Unknown result type (might be due to invalid IL or missing references)
		//IL_0499: Unknown result type (might be due to invalid IL or missing references)
		//IL_049e: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0501: Unknown result type (might be due to invalid IL or missing references)
		//IL_0503: Unknown result type (might be due to invalid IL or missing references)
		//IL_0508: Unknown result type (might be due to invalid IL or missing references)
		//IL_050a: Unknown result type (might be due to invalid IL or missing references)
		//IL_050f: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_054d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0554: Unknown result type (might be due to invalid IL or missing references)
		//IL_0563: Unknown result type (might be due to invalid IL or missing references)
		//IL_0565: Unknown result type (might be due to invalid IL or missing references)
		//IL_056a: Unknown result type (might be due to invalid IL or missing references)
		//IL_056c: Unknown result type (might be due to invalid IL or missing references)
		//IL_056d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0572: Unknown result type (might be due to invalid IL or missing references)
		//IL_0579: Unknown result type (might be due to invalid IL or missing references)
		//IL_057e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0580: Unknown result type (might be due to invalid IL or missing references)
		//IL_0582: Unknown result type (might be due to invalid IL or missing references)
		//IL_015e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_058e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0590: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0211: Unknown result type (might be due to invalid IL or missing references)
		//IL_0216: Unknown result type (might be due to invalid IL or missing references)
		//IL_021b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0222: Unknown result type (might be due to invalid IL or missing references)
		//IL_0229: Unknown result type (might be due to invalid IL or missing references)
		//IL_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_0238: Unknown result type (might be due to invalid IL or missing references)
		//IL_023d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0244: Unknown result type (might be due to invalid IL or missing references)
		//IL_059c: Unknown result type (might be due to invalid IL or missing references)
		//IL_059e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0256: Unknown result type (might be due to invalid IL or missing references)
		//IL_025b: Unknown result type (might be due to invalid IL or missing references)
		//IL_025d: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: Unknown result type (might be due to invalid IL or missing references)
		//IL_0266: Unknown result type (might be due to invalid IL or missing references)
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_05bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_05cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05da: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02da: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0300: Unknown result type (might be due to invalid IL or missing references)
		//IL_0305: Unknown result type (might be due to invalid IL or missing references)
		//IL_0307: Unknown result type (might be due to invalid IL or missing references)
		//IL_030c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0311: Unknown result type (might be due to invalid IL or missing references)
		//IL_0316: Unknown result type (might be due to invalid IL or missing references)
		//IL_0321: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_032f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0331: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0603: Unknown result type (might be due to invalid IL or missing references)
		//IL_0605: Unknown result type (might be due to invalid IL or missing references)
		//IL_0606: Unknown result type (might be due to invalid IL or missing references)
		//IL_0608: Unknown result type (might be due to invalid IL or missing references)
		//IL_060d: Unknown result type (might be due to invalid IL or missing references)
		//IL_060f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0611: Unknown result type (might be due to invalid IL or missing references)
		//IL_0616: Unknown result type (might be due to invalid IL or missing references)
		//IL_0618: Unknown result type (might be due to invalid IL or missing references)
		//IL_061d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0622: Unknown result type (might be due to invalid IL or missing references)
		//IL_0624: Unknown result type (might be due to invalid IL or missing references)
		//IL_0629: Unknown result type (might be due to invalid IL or missing references)
		//IL_062b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0630: Unknown result type (might be due to invalid IL or missing references)
		//IL_0635: Unknown result type (might be due to invalid IL or missing references)
		//IL_063f: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0402: Unknown result type (might be due to invalid IL or missing references)
		//IL_0340: Unknown result type (might be due to invalid IL or missing references)
		//IL_0342: Unknown result type (might be due to invalid IL or missing references)
		//IL_0347: Unknown result type (might be due to invalid IL or missing references)
		//IL_0349: Unknown result type (might be due to invalid IL or missing references)
		//IL_034e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0350: Unknown result type (might be due to invalid IL or missing references)
		//IL_0352: Unknown result type (might be due to invalid IL or missing references)
		//IL_0357: Unknown result type (might be due to invalid IL or missing references)
		//IL_035c: Unknown result type (might be due to invalid IL or missing references)
		//IL_035e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0360: Unknown result type (might be due to invalid IL or missing references)
		//IL_0373: Unknown result type (might be due to invalid IL or missing references)
		//IL_0375: Unknown result type (might be due to invalid IL or missing references)
		//IL_0377: Unknown result type (might be due to invalid IL or missing references)
		//IL_037c: Unknown result type (might be due to invalid IL or missing references)
		//IL_037e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0383: Unknown result type (might be due to invalid IL or missing references)
		//IL_0385: Unknown result type (might be due to invalid IL or missing references)
		//IL_038a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0394: Unknown result type (might be due to invalid IL or missing references)
		//IL_0399: Unknown result type (might be due to invalid IL or missing references)
		//IL_039b: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_036c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0371: Unknown result type (might be due to invalid IL or missing references)
		//IL_067c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0681: Unknown result type (might be due to invalid IL or missing references)
		//IL_0664: Unknown result type (might be due to invalid IL or missing references)
		//IL_0669: Unknown result type (might be due to invalid IL or missing references)
		//IL_0686: Unknown result type (might be due to invalid IL or missing references)
		//IL_068b: Unknown result type (might be due to invalid IL or missing references)
		//IL_068d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0698: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)__instance == (Object)null || ((MonoUpdatable)__instance).IsDestroyed)
		{
			return;
		}
		GameObject gameObject = ((Component)__instance).gameObject;
		if (!DuckTracker.IsDuck(gameObject) && ((Object)gameObject).name.Contains("REPODuck"))
		{
			Item component = gameObject.GetComponent<Item>();
			int ownerId = (((Object)(object)component != (Object)null) ? component.OwnerId : (-1));
			DuckTracker.RegisterDuck(gameObject, ownerId);
		}
		if (!DuckTracker.IsDuck(gameObject))
		{
			return;
		}
		__instance.DetonatesOnOwner = false;
		if (!__instance.hasBeenThrown)
		{
			return;
		}
		int instanceID = ((Object)gameObject).GetInstanceID();
		BoplBody body = __instance.body;
		if ((Object)(object)body == (Object)null)
		{
			return;
		}
		Vec2 position;
		Vec2 velocity;
		try
		{
			velocity = body.velocity;
			position = body.position;
		}
		catch
		{
			DuckTracker.UnregisterDuck(gameObject);
			return;
		}
		CapSpeed(body, MAX_SPEED);
		try
		{
			velocity = body.velocity;
		}
		catch
		{
			return;
		}
		Vec2 val = Vec2.zero;
		if (DuckTracker.duckPrevVelocities.ContainsKey(instanceID))
		{
			val = DuckTracker.duckPrevVelocities[instanceID];
		}
		Fix val2 = DuckTracker.duckLifespans[instanceID];
		val2 += simDeltaTime;
		DuckTracker.duckLifespans[instanceID] = val2;
		if (val2 > (Fix)15L)
		{
			DuckTracker.UnregisterDuck(gameObject);
			Updater.DestroyFix(gameObject);
			return;
		}
		PlayerPhysics[] array = Object.FindObjectsOfType<PlayerPhysics>();
		Vec2 val8 = default(Vec2);
		Vec2 val14 = default(Vec2);
		foreach (PlayerPhysics val3 in array)
		{
			if ((Object)(object)val3 == (Object)null)
			{
				continue;
			}
			PlayerBody playerBody = val3.GetPlayerBody();
			if ((Object)(object)playerBody == (Object)null || (val2 < (Fix)0.25f && (Object)(object)__instance.thrower != (Object)null && ((Object)(object)((Component)val3).transform == (Object)(object)((Component)__instance.thrower).transform || ((Component)val3).transform.IsChildOf(((Component)__instance.thrower).transform) || ((Component)__instance.thrower).transform.IsChildOf(((Component)val3).transform))) || !((position.x - playerBody.position.x) * (position.x - playerBody.position.x) + (position.y - playerBody.position.y) * (position.y - playerBody.position.y) < (Fix)4L))
			{
				continue;
			}
			Fix val4 = (Fix)15L;
			Fix val5 = val4 * val4;
			Fix val6 = (Fix)160L;
			PlayerPhysics[] array2 = Object.FindObjectsOfType<PlayerPhysics>();
			foreach (PlayerPhysics val7 in array2)
			{
				if (!((Object)(object)val7 != (Object)null) || !((Object)(object)val7.GetPlayerBody() != (Object)null))
				{
					continue;
				}
				((Vec2)(ref val8))..ctor(val7.GetPlayerBody().position.x - position.x, val7.GetPlayerBody().position.y - position.y);
				Fix val9 = val8.x * val8.x + val8.y * val8.y;
				val7.UnGround(false, false);
				if (val9 < val5 && val9 > Fix.Zero)
				{
					Fix val10 = Fix.Sqrt(val9);
					Fix val11 = Fix.One - val10 / val4;
					if (val11 < Fix.Zero)
					{
						val11 = Fix.Zero;
					}
					Vec2 val12 = val8 / val10 * val6 * val11;
					ref Fix y = ref val12.y;
					y += val6 * val11 * (Fix)0.5f;
					PlayerBody playerBody2 = val7.GetPlayerBody();
					playerBody2.selfImposedVelocity += val12;
				}
				else if (val9 == Fix.Zero)
				{
					PlayerBody playerBody3 = val7.GetPlayerBody();
					playerBody3.selfImposedVelocity += Vec2.up * val6;
				}
			}
			BoplBody[] array3 = Object.FindObjectsOfType<BoplBody>();
			foreach (BoplBody val13 in array3)
			{
				if ((Object)(object)val13 == (Object)(object)body)
				{
					continue;
				}
				try
				{
					((Vec2)(ref val14))..ctor(val13.position.x - position.x, val13.position.y - position.y);
					Fix val15 = val14.x * val14.x + val14.y * val14.y;
					if (val15 < val5 && val15 > Fix.Zero)
					{
						Fix val16 = Fix.Sqrt(val15);
						Fix val17 = Fix.One - val16 / val4;
						if (val17 < Fix.Zero)
						{
							val17 = Fix.Zero;
						}
						Vec2 val18 = val14 / val16;
						val13.velocity += val18 * val6 * val17;
					}
				}
				catch
				{
				}
			}
			DuckTracker.UnregisterDuck(gameObject);
			Updater.DestroyFix(gameObject);
			return;
		}
		if (val2 > (Fix)0.1f)
		{
			Fix val19 = SqrMag(val);
			Fix val20 = SqrMag(velocity);
			Fix val21 = (Fix)0.25f;
			if (val19 > val21 && val20 > val21)
			{
				Fix val22 = Fix.Sqrt((val19 > Fix.Zero) ? val19 : Fix.Zero);
				Fix val23 = Fix.Sqrt((val20 > Fix.Zero) ? val20 : Fix.Zero);
				if (val22 > Fix.Zero && val23 > Fix.Zero)
				{
					Vec2 val24 = val / val22;
					Vec2 val25 = velocity / val23;
					if (val24.x * val25.x + val24.y * val25.y < (Fix)0.95f)
					{
						Fix val26 = ((Random.Range(0, 50) != 0) ? ((Fix)Random.Range(1f, 1.5f)) : ((Fix)Random.Range(3f, 5f)));
						try
						{
							body.velocity *= val26;
							CapSpeed(body, MAX_SPEED);
						}
						catch
						{
						}
					}
				}
			}
		}
		DuckTracker.duckPrevVelocities[instanceID] = velocity;
	}
}