Decompiled source of KizunaMod v0.11.0

plugins/KizunaMod.dll

Decompiled 14 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using HG.Reflection;
using KinematicCharacterController;
using On.RoR2.UI;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("KizunaMod")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("KizunaMod")]
[assembly: AssemblyTitle("KizunaMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace KizunaMod;

public static class KizunaSignals
{
	public const string SasukeShippudenFinisher = "SasukeShippuden.Finisher";

	public const string NarutoCloneGone = "NarutoShippuden.CloneGone";

	public const string TakaPerfectDodge = "SasukeMangekyou.PerfectDodge";

	public const string SageEnergyGained = "NarutoSage.EnergyGained";

	public const string SageKumiteHit = "NarutoSage.KumiteHit";

	public const string SasukeShippudenFinisherHit = "SasukeShippuden.FinisherHit";

	public const string MinatoAtClone = "Minato.AtClone";

	public const string NarutoSixPathsVolley = "NarutoSixPaths.Volley";

	public const string NarutoSixPathsOrbLanded = "NarutoSixPaths.OrbLanded";

	public const string NarutoSixPathsOrbStruck = "NarutoSixPaths.OrbStruck";

	public const string NarutoSixPathsShurikenHit = "NarutoSixPaths.ShurikenHit";

	public const string NarutoSixPathsBarrage = "NarutoSixPaths.Barrage";

	public const string SasukeRinneganSusanooBlow = "SasukeRinnegan.SusanooBlow";

	public const string SasukeRinneganChibaku = "SasukeRinnegan.Chibaku";

	public const string SasukeRinneganChibakuCaught = "SasukeRinnegan.ChibakuCaught";

	public const string SasukeRinneganAmaterasuHit = "SasukeRinnegan.AmaterasuHit";

	public const string NarutoShippudenRasengan = "NarutoShippuden.Rasengan";

	public const string SageArtHit = "NarutoSage.ArtHit";

	public const string SasukeShippudenKirin = "SasukeShippuden.Kirin";

	public const string MinatoArrived = "Minato.Arrived";
}
public static class KizunaChecks
{
	public const string TakaMarked = "SasukeMangekyou.Marked";

	public const string AmaterasuBurning = "SasukeMangekyou.Burning";

	public const string SageMeditating = "NarutoSage.Meditating";

	public const string NarutoClone = "NarutoShippuden.Clone";

	public const string MinatoMarked = "Minato.Marked";

	public const string MinatoFormulaClaim = "Minato.FormulaClaim";

	public const string RinneganBurning = "SasukeRinnegan.Burning";
}
public static class KizunaPlaces
{
	public const string MinatoKunai = "Minato.Kunai";
}
public static class KizunaShared
{
	public const string SageKumiteWave = "NarutoSage.KumiteWave";

	public const string SageEnergyStreak = "NarutoSage.EnergyStreak";

	public const string TakaSharinganFlash = "SasukeMangekyou.SharinganFlash";

	public const string MinatoFlash = "Minato.Flash";

	public const string MinatoSeal = "Minato.Seal";
}
public static class Kizuna
{
	private class Member
	{
		public Func<CharacterBody, bool> busy;

		public GameObject chargeEffect;
	}

	public struct Signal
	{
		public CharacterBody source;

		public CharacterBody other;

		public Vector3 point;

		public float value;
	}

	public const string NarutoShippuden = "NarutoShippudenBody";

	public const string NarutoSage = "NarutoSageBody";

	public const string SasukeShippuden = "SasukeShippudenBody";

	public const string SasukeMangekyou = "SasukeMangekyouBody";

	public const string Minato = "MinatoBody";

	public const string NarutoSixPaths = "NarutoSixPathsBody";

	public const string SasukeRinnegan = "SasukeRinneganBody";

	public static readonly string[] characters = new string[7] { "NarutoShippudenBody", "NarutoSageBody", "SasukeShippudenBody", "SasukeMangekyouBody", "MinatoBody", "NarutoSixPathsBody", "SasukeRinneganBody" };

	public static readonly string[] released = new string[3] { "NarutoSageBody", "SasukeMangekyouBody", "MinatoBody" };

	private static readonly Dictionary<BodyIndex, string> characterOf = new Dictionary<BodyIndex, string>();

	private static readonly Dictionary<string, Member> members = new Dictionary<string, Member>();

	private static readonly Dictionary<string, Type> parts = new Dictionary<string, Type>();

	private static readonly Dictionary<(string, string), (float, bool)> pairsNow = new Dictionary<(string, string), (float, bool)>();

	private static readonly Dictionary<string, Action<Signal>> listeners = new Dictionary<string, Action<Signal>>();

	private static readonly Dictionary<string, Func<CharacterBody, bool>> checks = new Dictionary<string, Func<CharacterBody, bool>>();

	private static readonly Dictionary<string, Func<CharacterBody, List<Vector3>>> places = new Dictionary<string, Func<CharacterBody, List<Vector3>>>();

	private static readonly Dictionary<string, GameObject> shared = new Dictionary<string, GameObject>();

	private static readonly Dictionary<(GameObject, string), Transform> anchors = new Dictionary<(GameObject, string), Transform>();

	internal static void Init()
	{
		RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad));
	}

	private static void OnLoad()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Invalid comparison between Unknown and I4
		//IL_0028: 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_005d: Invalid comparison between Unknown and I4
		characterOf.Clear();
		string[] array = characters;
		foreach (string text in array)
		{
			BodyIndex val = BodyCatalog.FindBodyIndex(text);
			if ((int)val != -1)
			{
				characterOf[val] = text;
			}
		}
		foreach (Type value in parts.Values)
		{
			if ((int)EntityStateCatalog.GetStateIndex(value) == -1)
			{
				Log.Error(value.FullName + " isn't in its mod's content pack: no other machine will see it");
			}
		}
	}

	public static string CharacterOf(CharacterBody body)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		if (!Object.op_Implicit((Object)(object)body) || !characterOf.TryGetValue(body.bodyIndex, out var value))
		{
			return null;
		}
		return value;
	}

	public static bool Is(CharacterBody body, string character)
	{
		if (character != null)
		{
			return CharacterOf(body) == character;
		}
		return false;
	}

	public static bool IsPerson(CharacterMaster master)
	{
		if (Object.op_Implicit((Object)(object)master))
		{
			if (!Object.op_Implicit((Object)(object)master.playerCharacterMasterController))
			{
				return Object.op_Implicit((Object)(object)((Component)master).GetComponent<KizunaTestAlly>());
			}
			return true;
		}
		return false;
	}

	private static bool Alive(CharacterBody body)
	{
		if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.healthComponent))
		{
			return body.healthComponent.alive;
		}
		return false;
	}

	public static List<CharacterBody> Partners(CharacterBody body, string character = null)
	{
		List<CharacterBody> list = new List<CharacterBody>();
		string text = CharacterOf(body);
		if (text == null || !IsPerson(body.master) || !Alive(body))
		{
			return list;
		}
		foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList)
		{
			if (!((Object)(object)readOnlyInstances == (Object)(object)body.master) && IsPerson(readOnlyInstances))
			{
				CharacterBody body2 = readOnlyInstances.GetBody();
				string text2 = CharacterOf(body2);
				if (text2 != null && !(text2 == text) && Alive(body2) && (character == null || text2 == character))
				{
					list.Add(body2);
				}
			}
		}
		return list;
	}

	public static bool ArePartners(CharacterBody a, CharacterBody b)
	{
		if (!Object.op_Implicit((Object)(object)a) || !Object.op_Implicit((Object)(object)b) || (Object)(object)a == (Object)(object)b || (Object)(object)a.master == (Object)(object)b.master)
		{
			return false;
		}
		string text = CharacterOf(a);
		string text2 = CharacterOf(b);
		if (text != null && text2 != null && text != text2 && IsPerson(a.master) && IsPerson(b.master) && Alive(a))
		{
			return Alive(b);
		}
		return false;
	}

	public static bool AnyPair(string first, string second)
	{
		float fixedTime = Time.fixedTime;
		if (pairsNow.TryGetValue((first, second), out var value) && value.Item1 == fixedTime)
		{
			return value.Item2;
		}
		bool flag = false;
		foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList)
		{
			CharacterBody body = (Object.op_Implicit((Object)(object)readOnlyInstances) ? readOnlyInstances.GetBody() : null);
			if (Is(body, first) && Partners(body, second).Count > 0)
			{
				flag = true;
				break;
			}
		}
		pairsNow[(first, second)] = (fixedTime, flag);
		return flag;
	}

	public static void RegisterCharacter(string character, Func<CharacterBody, bool> busy, GameObject chargeEffect)
	{
		members[character] = new Member
		{
			busy = busy,
			chargeEffect = chargeEffect
		};
	}

	public static void RegisterPart<T>(string combo, string character) where T : KizunaPart, new()
	{
		parts[combo + "|" + character] = typeof(T);
	}

	internal static bool Registered(string character)
	{
		if (character != null)
		{
			return members.ContainsKey(character);
		}
		return false;
	}

	internal static bool Busy(CharacterBody body)
	{
		string text = CharacterOf(body);
		if (text != null && members.TryGetValue(text, out var value))
		{
			if (value.busy != null)
			{
				return value.busy(body);
			}
			return false;
		}
		return true;
	}

	public static bool Transformed(CharacterBody body)
	{
		string text = CharacterOf(body);
		if (text != null && members.TryGetValue(text, out var value) && value.busy != null)
		{
			return value.busy(body);
		}
		return false;
	}

	internal static GameObject ChargeEffect(CharacterBody body)
	{
		string text = CharacterOf(body);
		if (text == null || !members.TryGetValue(text, out var value))
		{
			return null;
		}
		return value.chargeEffect;
	}

	internal static bool HasParts(KizunaCombo combo)
	{
		if (combo != null && parts.ContainsKey(combo.id + "|" + combo.a))
		{
			return parts.ContainsKey(combo.id + "|" + combo.b);
		}
		return false;
	}

	internal static KizunaPart CreatePart(KizunaCombo combo, string character)
	{
		if (!parts.TryGetValue(combo.id + "|" + character, out var value))
		{
			return null;
		}
		return (KizunaPart)Activator.CreateInstance(value);
	}

	public static void On(string signal, Action<Signal> listener)
	{
		listeners.TryGetValue(signal, out var value);
		listeners[signal] = (Action<Signal>)Delegate.Combine(value, listener);
	}

	public static void Raise(string signal, Signal data)
	{
		if (!NetworkServer.active || !listeners.TryGetValue(signal, out var value) || value == null)
		{
			return;
		}
		Delegate[] invocationList = value.GetInvocationList();
		for (int i = 0; i < invocationList.Length; i++)
		{
			Action<Signal> action = (Action<Signal>)invocationList[i];
			try
			{
				action(data);
			}
			catch (Exception arg)
			{
				Log.Error($"signal {signal}: {arg}");
			}
		}
	}

	public static void Raise(string signal, CharacterBody source, Vector3 point = default(Vector3))
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		Raise(signal, new Signal
		{
			source = source,
			point = point
		});
	}

	public static void RegisterCheck(string check, Func<CharacterBody, bool> answer)
	{
		checks[check] = answer;
	}

	public static bool Check(string check, CharacterBody body)
	{
		if (Object.op_Implicit((Object)(object)body) && checks.TryGetValue(check, out var value) && value != null)
		{
			return value(body);
		}
		return false;
	}

	public static void RegisterPlaces(string name, Func<CharacterBody, List<Vector3>> where)
	{
		places[name] = where;
	}

	public static List<Vector3> Places(string name, CharacterBody body)
	{
		if (!Object.op_Implicit((Object)(object)body) || !places.TryGetValue(name, out var value) || value == null)
		{
			return new List<Vector3>();
		}
		return value(body) ?? new List<Vector3>();
	}

	public static void Later(float seconds, Action action)
	{
		if (action != null && Object.op_Implicit((Object)(object)KizunaPlugin.instance))
		{
			((MonoBehaviour)KizunaPlugin.instance).StartCoroutine(After(seconds, action, Stage.instance));
		}
	}

	private static IEnumerator After(float seconds, Action action, Stage stage)
	{
		yield return (object)new WaitForSeconds(seconds);
		if ((Object)(object)Stage.instance != (Object)(object)stage)
		{
			yield break;
		}
		try
		{
			action();
		}
		catch (Exception arg)
		{
			Log.Error($"later: {arg}");
		}
	}

	public static void Share(string name, GameObject thing)
	{
		if (Object.op_Implicit((Object)(object)thing))
		{
			shared[name] = thing;
		}
	}

	public static GameObject Shared(string name)
	{
		if (!shared.TryGetValue(name, out var value))
		{
			return null;
		}
		return value;
	}

	public static void Publish(GameObject owner, string name, Transform thing)
	{
		if (Object.op_Implicit((Object)(object)owner))
		{
			anchors[(owner, name)] = thing;
		}
	}

	public static Transform Anchor(GameObject owner, string name)
	{
		if (!Object.op_Implicit((Object)(object)owner) || !anchors.TryGetValue((owner, name), out var value))
		{
			return null;
		}
		if (!Object.op_Implicit((Object)(object)value))
		{
			anchors.Remove((owner, name));
		}
		return value;
	}

	public static Vector3 Ground(Vector3 point, float above = 3f, float below = 12f)
	{
		//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_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_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: 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)
		RaycastHit val = default(RaycastHit);
		if (Physics.Raycast(point + Vector3.up * above, Vector3.down, ref val, above + below, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
		{
			return ((RaycastHit)(ref val)).point;
		}
		return point;
	}

	public static Vector3 Level(Vector3 direction, Vector3 fallback)
	{
		//IL_001c: 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_003c: Unknown result type (might be due to invalid IL or missing references)
		direction.y = 0f;
		if (((Vector3)(ref direction)).sqrMagnitude > 0.0001f)
		{
			return ((Vector3)(ref direction)).normalized;
		}
		fallback.y = 0f;
		if (!(((Vector3)(ref fallback)).sqrMagnitude > 0.0001f))
		{
			return Vector3.forward;
		}
		return ((Vector3)(ref fallback)).normalized;
	}
}
public static class KizunaBook
{
	public class Text
	{
		public string es;

		public string en;

		public string Now
		{
			get
			{
				if (!Spanish)
				{
					return en;
				}
				return es;
			}
		}

		public Text(string es, string en)
		{
			this.es = es;
			this.en = en;
		}
	}

	public class Bond
	{
		public string a;

		public string b;

		public Text name;

		public Text comboName;

		public Text combo;

		public Text halfA;

		public Text halfB;

		public Text Half(string character)
		{
			if (!(character == a))
			{
				return halfB;
			}
			return halfA;
		}

		public string Other(string character)
		{
			if (!(character == a))
			{
				return a;
			}
			return b;
		}
	}

	public static readonly Dictionary<string, string> fallbackNames = new Dictionary<string, string>
	{
		{ "NarutoShippudenBody", "Naruto" },
		{ "NarutoSageBody", "Naruto (Sage)" },
		{ "SasukeShippudenBody", "Sasuke" },
		{ "SasukeMangekyouBody", "Sasuke (Taka)" },
		{ "MinatoBody", "Minato" },
		{ "NarutoSixPathsBody", "Naruto (Six Paths)" },
		{ "SasukeRinneganBody", "Sasuke (Rinnegan)" }
	};

	private const string NS = "NarutoShippudenBody";

	private const string SG = "NarutoSageBody";

	private const string SS = "SasukeShippudenBody";

	private const string TK = "SasukeMangekyouBody";

	private const string MN = "MinatoBody";

	private const string N6 = "NarutoSixPathsBody";

	private const string SR = "SasukeRinneganBody";

	public static readonly Bond[] bonds = new Bond[21]
	{
		new Bond
		{
			a = "NarutoShippudenBody",
			b = "SasukeShippudenBody",
			name = new Text("Equipo 7", "Team 7"),
			halfA = new Text("Cada baja de Sasuke te da Experiencia (+6 % de velocidad de ataque, 8 s): +1, élite +3, jefe +5.", "Each of Sasuke's kills gives you Experience (+6% attack speed, 8 s): +1, elite +3, boss +5."),
			halfB = new Text("Al lanzar el remate de la Kusanagi, los clones libres de Naruto cerca de ti hacen su remate «¡U-zu-ma-ki!».", "Throwing Kusanagi's finisher makes Naruto's free clones near you perform their \"U-zu-ma-ki!\" finisher."),
			comboName = new Text("Rasengan × Chidori", "Rasengan × Chidori"),
			combo = new Text("Aparecen ante el objetivo y chocan el Rasengan y el Chidori en una cúpula de chakra que estalla: 2 × 3200 % en 15 m, aturde.", "Both appear before the target and clash Rasengan and Chidori into a chakra dome that bursts: 2 × 3200% in 15 m, stuns.")
		},
		new Bond
		{
			a = "NarutoSageBody",
			b = "SasukeMangekyouBody",
			name = new Text("Viento y llamas negras", "Wind and Black Flames"),
			halfA = new Text("A 30 m de Taka con el Susanoo listo, el golpe que te dejaría bajo el 30 % se bloquea: 2 s invencible con su costillar (su Susanoo se recarga).", "Within 30 m of Taka with Susanoo ready, a hit that would drop you below 30% is blocked: 2 s invincible in his ribcage (his Susanoo recharges)."),
			halfB = new Text("El Rasengan Gigante o el Rasen-Shuriken del Sage sobre un enemigo en llamas extiende tu Amaterasu a los 2 más cercanos, tan fuerte como haya crecido.", "The Sage's Giant Rasengan or Rasen-Shuriken on a burning enemy spreads your Amaterasu to the 2 nearest, as strong as it has grown."),
			comboName = new Text("Enton: Rasen-Shuriken", "Enton: Rasen-Shuriken"),
			combo = new Text("Taka prende el Rasen-Shuriken con Amaterasu: una esfera negra atrae y quema todo, y estalla: 2 × 2800 %.", "Taka sets the Rasen-Shuriken ablaze with Amaterasu: a black sphere pulls and burns everything, then bursts: 2 × 2800%.")
		},
		new Bond
		{
			a = "NarutoShippudenBody",
			b = "NarutoSageBody",
			name = new Text("Clones del monte Myōboku", "Mount Myōboku Clones"),
			halfA = new Text("Tus clones a 30 m del Sage golpean con el Kumite de la Rana (×1,5).", "Your clones within 30 m of the Sage strike with Frog Kumite (×1.5)."),
			halfB = new Text("Cada clon de Naruto que se deshace a 60 m te da +1 punto de energía natural y adelanta 3 s tus clones ocultos.", "Each of Naruto's clones dispelled within 60 m gives you +1 point of natural energy and speeds up your hidden clones by 3 s."),
			comboName = new Text("Chō Ōdama Rasen Tarengan", "Chō Ōdama Rasen Tarengan"),
			combo = new Text("8 clones de Naruto rodean al objetivo y cargan con Rasengan (225 % cada uno); después caen desde lo alto con la Ultra Gigante del Sage: 2 × 2500 %.", "8 of Naruto's clones surround the target and charge with Rasengan (225% each); then both dive with the Sage's Ultra Giant Rasengan: 2 × 2500%.")
		},
		new Bond
		{
			a = "SasukeShippudenBody",
			b = "SasukeMangekyouBody",
			name = new Text("Sangre Uchiha", "Uchiha Blood"),
			halfA = new Text("Lo que arde con el Amaterasu de Taka cuenta como ardiendo para tu calor; si arde en la zona de Kirin, +20 de calor.", "Whatever burns with Taka's Amaterasu counts as burning for your heat; burning inside Kirin's area, +20 heat."),
			halfB = new Text("Los golpes de Sasuke marcan con tu Sharingan 6 s: tu Amaterasu los busca y tus jutsus les hacen +20 %.", "Sasuke's hits mark enemies with your Sharingan for 6 s: your Amaterasu seeks them and your jutsu deal +20%."),
			comboName = new Text("Corte cruzado del halcón", "Hawk Cross Cut"),
			combo = new Text("8 tajos cruzados alrededor del objetivo (2 × 120 % cada uno) y un aspa final: 2 × 2500 %, aturde 2 s.", "8 crossing slashes around the target (2 × 120% each) and a final cross: 2 × 2500%, stuns for 2 s.")
		},
		new Bond
		{
			a = "NarutoShippudenBody",
			b = "SasukeMangekyouBody",
			name = new Text("Promesa", "Promise"),
			halfA = new Text("Tus clones hacen crítico siempre a los marcados por el Sharingan de Taka.", "Your clones always crit enemies marked by Taka's Sharingan."),
			halfB = new Text("Contraataque: cada esquiva perfecta manda los clones libres de Naruto (40 m) a por el atacante con Rasengan (250 %).", "Counterattack: every perfect dodge sends Naruto's free clones (40 m) after the attacker with Rasengan (250%)."),
			comboName = new Text("Fūma del Equipo 7", "Team 7 Fūma"),
			combo = new Text("Naruto se vuelve el Fūma y Taka lo lanza en llamas negras (400 % a cada enemigo, hasta 8); Naruto cae con un Rasengan: 2 × 2900 %.", "Naruto becomes the Fūma and Taka throws it in black flames (400% per enemy, up to 8); Naruto drops with a Rasengan: 2 × 2900%.")
		},
		new Bond
		{
			a = "NarutoSageBody",
			b = "SasukeShippudenBody",
			name = new Text("Senjutsu y sello maldito", "Senjutsu and Cursed Seal"),
			halfA = new Text("Mientras Sasuke está transformado, recoges el doble de energía natural: cargas y puntos.", "While Sasuke is transformed, you gather twice the natural energy: charges and points."),
			halfB = new Text("Cada carga de energía natural del Sage te llena un 5 % el sello; con un Sage meditando a 40 m, el sello se gasta al 20 %.", "Each natural energy charge the Sage gains fills 5% of your seal; with a Sage meditating within 40 m, the seal drains at 20%."),
			comboName = new Text("Arte Sabio: Goemon", "Sage Art: Goemon"),
			combo = new Text("Fukasaku y Shima, sobre el pergamino del Sage, escupen su aceite; el viento del Sage lo empuja y Sasuke lo prende con su Katon: una ola de aceite ardiendo arrasa la zona (6 × 100 % de cada uno) y estalla: 2 × 2500 %.", "Fukasaku and Shima, on the Sage's scroll, spit their oil; the Sage's wind drives it and Sasuke's Fire Style sets it alight: a wave of burning oil sweeps the area (6 × 100% each) and erupts: 2 × 2500%.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "NarutoShippudenBody",
			name = new Text("Padre e hijo", "Father and Son"),
			halfA = new Text("Los clones de Naruto son marcas del Hiraishin: al aparecer junto a uno, el clon lanza un Rasengan al enemigo más cercano.", "Naruto's clones are Hiraishin marks: flashing next to one makes it throw a Rasengan at the nearest enemy."),
			halfB = new Text("Tu Rasengan (o el de un clon) sobre un enemigo con sellos de Minato estalla otra vez, dorado: 75 % en 6 m.", "Your Rasengan (or a clone's) on an enemy carrying Minato's seals bursts again in gold: 75% in 6 m."),
			comboName = new Text("Rasengan doble", "Double Rasengan"),
			combo = new Text("Minato lanza dos kunai junto al objetivo, aparecen en ellos y clavan el Rasengan a la vez: 2 × 3200 % en 12 m.", "Minato throws two kunai beside the target, both flash to them and drive their Rasengan in at once: 2 × 3200% in 12 m.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "NarutoSageBody",
			name = new Text("La fórmula del maestro", "The Master's Formula"),
			halfA = new Text("Cada golpe del Kumite de la Rana del Sage escribe uno de tus sellos.", "Each of the Sage's Frog Kumite hits writes one of your seals."),
			halfB = new Text("Tu primer golpe sobre cada fórmula que puso Minato te da +3 puntos de energía natural y +1 carga.", "Your first hit on each formula Minato placed gives you +3 points of natural energy and +1 charge."),
			comboName = new Text("Rasen-Shuriken del Hiraishin", "Hiraishin Rasen-Shuriken"),
			combo = new Text("Minato atrapa el Rasen-Shuriken y lo lleva por 4 kunai (300 % cada estallido) antes de soltarlo sobre el objetivo: 2 × 2900 %.", "Minato catches the Rasen-Shuriken and flashes it across 4 kunai (300% per burst) before dropping it on the target: 2 × 2900%.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "SasukeShippudenBody",
			name = new Text("Pararrayos", "Lightning Rods"),
			halfA = new Text("El remate de la Kusanagi de Sasuke escribe 3 de tus sellos en todo lo que toca.", "Sasuke's Kusanagi finisher writes 3 of your seals on everything it hits."),
			halfB = new Text("Tu corriente (Kusanagi, Chidori) a 15 m de un kunai de Minato salta del kunai al enemigo más cercano (150 %).", "Your lightning (Kusanagi, Chidori) within 15 m of Minato's kunai arcs from it to the nearest enemy (150%)."),
			comboName = new Text("Jaula de rayos", "Lightning Cage"),
			combo = new Text("8 kunai en anillo; Sasuke clava el Chidori y la valla de rayos descarga mientras Minato corta de kunai en kunai; Kirin remata: 2 × 2500 %.", "8 kunai in a ring; Sasuke drives in his Chidori and the fence discharges while Minato slashes kunai to kunai; Kirin ends it: 2 × 2500%.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "SasukeMangekyouBody",
			name = new Text("Marcas compartidas", "Shared Marks"),
			halfA = new Text("Lo que marca el Sharingan de Taka cuenta como marca del Hiraishin.", "Whatever Taka's Sharingan marks counts as a Hiraishin mark."),
			halfB = new Text("Los sellos de Minato cuentan como marca de tu Sharingan: atraen tu Amaterasu y tus jutsus hacen +20 %.", "Minato's seals count as your Sharingan mark: they draw your Amaterasu and your jutsu deal +20%."),
			comboName = new Text("Kunai negro", "Black Kunai"),
			combo = new Text("Amaterasu prende el kunai de Minato; Senkō en estrella con Taka cortando detrás y un pilar de llamas negras: 2 × 2500 %.", "Amaterasu ignites Minato's kunai; a star of Senkō with Taka slashing behind and a pillar of black flames: 2 × 2500%.")
		},
		new Bond
		{
			a = "NarutoSixPathsBody",
			b = "SasukeRinneganBody",
			name = new Text("Sol y Luna", "Sun and Moon"),
			halfA = new Text("Cada golpe del Susanoo de Sasuke que acierta te da +1 chakra de bijū.", "Each blow of Sasuke's Susanoo that lands gives you +1 tailed beast chakra."),
			halfB = new Text("Cada ráfaga de tres Gudōdama de Naruto te da +1 Manifestación.", "Each volley of three of Naruto's Truth-Seeking Orbs gives you +1 Manifestation."),
			comboName = new Text("Indra y Ashura", "Indra and Ashura"),
			combo = new Text("Se alzan el avatar de Kurama y el Susanoo de Indra; la flecha de Indra sale con los dos Rasen-Shuriken de Ashura en la punta (flecha 600 %, cada Rasen-Shuriken 400 %) y estalla: 2 × 2500 % en 16 m.", "Kurama's avatar and Indra's Susanoo rise; Indra's Arrow flies with Ashura's two Rasen-Shuriken on its head (arrow 600%, each Rasen-Shuriken 400%) and bursts: 2 × 2500% in 16 m.")
		},
		new Bond
		{
			a = "NarutoSixPathsBody",
			b = "NarutoShippudenBody",
			name = new Text("El mismo camino ninja", "The Same Ninja Way"),
			halfA = new Text("Cada clon de sombra del Naruto joven que se deshace a 60 m te da +2 chakra de bijū.", "Each of young Naruto's shadow clones dispelled within 60 m gives you +2 tailed beast chakra."),
			halfB = new Text("Cuando el Naruto de los Seis Caminos lanza sus nueve Rasen-Shuriken, tus clones libres a 40 m de él embisten con su Rasengan.", "When Six Paths Naruto throws his nine Rasen-Shuriken, your free clones within 40 m of him charge in with their Rasengan."),
			comboName = new Text("Las nueve bestias", "The Nine Beasts"),
			combo = new Text("Ocho clones y Naruto saltan a por los nueve Rasen-Shuriken de las bestias con cola y caen con ellos uno tras otro (150 % + 90 % cada uno); el último, el de Kurama: 2 × 2500 %.", "Eight clones and Naruto leap for the nine tailed beasts' Rasen-Shuriken and dive with them one after another (150% + 90% each); the last one, Kurama's: 2 × 2500%.")
		},
		new Bond
		{
			a = "NarutoSixPathsBody",
			b = "NarutoSageBody",
			name = new Text("Arte Sabio de los Seis Caminos", "Six Paths Sage Art"),
			halfA = new Text("Los golpes del Kumite de la Rana del Sage cuentan la mitad para tus Gudōdama.", "The Sage's Frog Kumite hits count half toward your Truth-Seeking Orbs."),
			halfB = new Text("Cada Gudōdama de Naruto que acierta te da medio punto de energía natural.", "Each of Naruto's Truth-Seeking Orbs that lands gives you half a point of natural energy."),
			comboName = new Text("Kumite de Kurama", "Kurama's Kumite"),
			combo = new Text("El Sage carga a Naruto de energía natural y lanza su Kumite de la Rana; tras cada golpe suyo (3 × 300 %) cae en el mismo sitio una mano gigante del chakra de Kurama (3 × 300 %). Para el último, las dos manos se juntan y caen como un martillo: 2 × 2500 %.", "The Sage fills Naruto with natural energy and throws his Frog Kumite; behind each of his blows (3 × 300%) a giant hand of Kurama's chakra comes down on the same spot (3 × 300%). For the last, both hands join and fall as one hammer: 2 × 2500%.")
		},
		new Bond
		{
			a = "NarutoSixPathsBody",
			b = "SasukeShippudenBody",
			name = new Text("Rivales", "Rivals"),
			halfA = new Text("El remate de la Kusanagi de Sasuke lanza una ráfaga de tus Gudōdama.", "Sasuke's Kusanagi finisher launches a volley of your Truth-Seeking Orbs."),
			halfB = new Text("Los Rasen-Shuriken de Naruto avivan tu fuego: cada golpe suyo a un enemigo que arde te da calor.", "Naruto's Rasen-Shuriken fan your fire: each of their hits on a burning enemy gives you heat."),
			comboName = new Text("Viento y fuego", "Wind and Fire"),
			combo = new Text("El Rasen-Shuriken de Naruto abre un vórtice que atrae todo y la bola de fuego de Sasuke lo convierte en un torbellino de llamas (golpes de 90 %, quema), que revienta: 2 × 2500 %.", "Naruto's Rasen-Shuriken opens a vortex that pulls everything in and Sasuke's fireball turns it into a whirl of flames (90% hits, burning), which blows apart: 2 × 2500%.")
		},
		new Bond
		{
			a = "NarutoSixPathsBody",
			b = "SasukeMangekyouBody",
			name = new Text("Luz y oscuridad", "Light and Darkness"),
			halfA = new Text("Tus Gudōdama hacen crítico siempre a los marcados por el Sharingan de Taka.", "Your Truth-Seeking Orbs always crit enemies marked by Taka's Sharingan."),
			halfB = new Text("Los Rasen-Shuriken de Naruto avivan tus llamas: cada golpe suyo a un enemigo que arde con ellas les suma intensidad como uno tuyo.", "Naruto's Rasen-Shuriken fan your flames: each of their hits on an enemy burning with them adds intensity like a hit of yours."),
			comboName = new Text("Eclipse", "Eclipse"),
			combo = new Text("Naruto se alza como un sol y sus nueve Gudōdama, prendidas con Amaterasu, cierran un anillo de fuego negro que lo arrastra todo al centro (6 × 180 %) hasta formar un sol negro que estalla: 2 × 2500 %.", "Naruto rises like a sun and his nine Truth-Seeking Orbs, set ablaze by Amaterasu, close a ring of black fire that drags everything to the middle (6 × 180%) into a black sun that bursts: 2 × 2500%.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "NarutoSixPathsBody",
			name = new Text("Las dos mitades de Kurama", "Kurama's Two Halves"),
			halfA = new Text("Cada Gudōdama de Naruto escribe uno de tus sellos en lo que golpea.", "Each of Naruto's Truth-Seeking Orbs writes one of your seals on what it hits."),
			halfB = new Text("Cada llegada de Minato por Hiraishin junto a un enemigo lanza contra él una ráfaga de tus Gudōdama (una por segundo).", "Each time Minato flashes to an enemy by Hiraishin, a volley of your Truth-Seeking Orbs flies at it (one per second)."),
			comboName = new Text("Yin y Yang", "Yin and Yang"),
			combo = new Text("Cada uno forma su mitad de Kurama: Naruto un Rasen-Shuriken dorado, Minato uno oscuro. Minato aparece con el suyo sobre el objetivo (300 %) mientras Naruto lanza el dorado; giran uno en torno al otro (7 × 90 %) y Minato corta de kunai en kunai (4 × 150 %) hasta que se funden: 2 × 2500 %.", "Each forms his half of Kurama: Naruto a gold Rasen-Shuriken, Minato a dark one. Minato flashes over the target with his (300%) as Naruto throws the gold one; they circle each other (7 × 90%) while Minato cuts from kunai to kunai (4 × 150%) until they merge: 2 × 2500%.")
		},
		new Bond
		{
			a = "SasukeRinneganBody",
			b = "SasukeShippudenBody",
			name = new Text("El camino de Sasuke", "Sasuke's Path"),
			halfA = new Text("Cada Kirin del Sasuke joven te da Manifestaciones: 1 + 1 por cada 4 rayos de su tormenta.", "Each of young Sasuke's Kirin gives you Manifestations: 1 + 1 per 4 bolts of its storm."),
			halfB = new Text("Lo que arde con el Amaterasu del Sasuke del Rinnegan cuenta como ardiendo para tu calor.", "Whatever burns with Rinnegan Sasuke's Amaterasu counts as burning for your heat."),
			comboName = new Text("Chibaku Tensei: Kirin", "Chibaku Tensei: Kirin"),
			combo = new Text("El Chibaku Tensei levanta a los enemigos en una esfera de roca bajo la tormenta; cinco rayos (200 %) y el dragón de Kirin la parten, y todo cae: 2 × 2500 %, aturde 2 s.", "Chibaku Tensei lifts the enemies in a sphere of rock under the storm; five bolts (200%) and Kirin's dragon break it, and it all comes down: 2 × 2500%, stuns for 2 s.")
		},
		new Bond
		{
			a = "SasukeRinneganBody",
			b = "SasukeMangekyouBody",
			name = new Text("Los ojos de Itachi", "Itachi's Eyes"),
			halfA = new Text("Los golpes de tu Susanoo hacen crítico siempre a los marcados por el Sharingan de Taka.", "Your Susanoo's blows always crit enemies marked by Taka's Sharingan."),
			halfB = new Text("El Amaterasu del Sasuke del Rinnegan aviva tus llamas: +10 % de intensidad cada vez que alcanza a un enemigo que arde con ellas.", "Rinnegan Sasuke's Amaterasu fans your flames: +10% intensity each time it reaches an enemy burning with them."),
			comboName = new Text("Espada de Kagutsuchi", "Kagutsuchi's Blade"),
			combo = new Text("Amaterasu prende la espada del Susanoo: dos tajos que cruzan el objetivo (300 % + 200 % que prende) y estacas de llamas negras bajo lo que quede: 2 × 2500 %.", "Amaterasu sets the Susanoo's blade ablaze: two cuts across the target (300% + 200% that ignites) and stakes of black flame under whatever is left: 2 × 2500%.")
		},
		new Bond
		{
			a = "SasukeRinneganBody",
			b = "NarutoShippudenBody",
			name = new Text("El lazo que no se rompe", "The Unbroken Bond"),
			halfA = new Text("Cada Rasengan de Naruto o de sus clones que acierta te da +1 Manifestación (una cada 0,5 s).", "Each Rasengan of Naruto's or his clones' that lands gives you +1 Manifestation (one every 0.5 s)."),
			halfB = new Text("Cuando Sasuke lanza el Chibaku Tensei, tus clones libres a 30 m embisten la esfera con su Rasengan.", "When Sasuke casts Chibaku Tensei, your free clones within 30 m charge the sphere with their Rasengan."),
			comboName = new Text("Relevo de sombras", "Shadow Relay"),
			combo = new Text("Dos clones embisten con su Rasengan (400 % cada uno) mientras otros dos toman posición: uno salta sobre el objetivo y otro lo rodea. Sasuke cambia su sitio y el de Naruto por los de esos clones: Rasengan desde arriba y Chidori negro por la espalda a la vez (5 × 100 % de cada uno) y estalla: 2 × 2500 %.", "Two clones charge in with their Rasengan (400% each) while two more take position: one leaps over the target, one runs behind it. Sasuke swaps his place and Naruto's with those clones': Rasengan from above and black Chidori from behind at once (5 × 100% each), then it bursts: 2 × 2500%.")
		},
		new Bond
		{
			a = "SasukeRinneganBody",
			b = "NarutoSageBody",
			name = new Text("Sabio y Rinnegan", "Sage and Rinnegan"),
			halfA = new Text("Cada Arte Sabio del Sage que acierta te da +2 Manifestaciones.", "Each of the Sage's Sage Arts that lands gives you +2 Manifestations."),
			halfB = new Text("Cada enemigo que atrapa el Chibaku Tensei de Sasuke te da +3 puntos de energía natural.", "Each enemy Sasuke's Chibaku Tensei catches gives you +3 points of natural energy."),
			comboName = new Text("Rasen-Shuriken: Amenotejikara", "Rasen-Shuriken: Amenotejikara"),
			combo = new Text("Sasuke espera entre los enemigos; el Sage lanza el Rasen-Shuriken al cielo y Sasuke cambia su sitio con él: la esfera se abre en medio de todos (7 × 180 %) y él cae desde arriba con el puño del Susanoo: 2 × 2500 %.", "Sasuke waits among the enemies; the Sage throws the Rasen-Shuriken into the sky and Sasuke swaps places with it: the sphere opens in their midst (7 × 180%) and he dives from above with the Susanoo's fist: 2 × 2500%.")
		},
		new Bond
		{
			a = "MinatoBody",
			b = "SasukeRinneganBody",
			name = new Text("Espacio-tiempo", "Space-Time"),
			halfA = new Text("Las estacas del Amenotejikara de Sasuke escriben 4 de tus sellos en lo que empalan.", "The stakes of Sasuke's Amenotejikara write 4 of your seals on what they impale."),
			halfB = new Text("Cada llegada de Minato por Hiraishin junto a un enemigo te da +1 Manifestación (una por segundo).", "Each time Minato flashes to an enemy by Hiraishin gives you +1 Manifestation (one per second)."),
			comboName = new Text("Golpes fuera del tiempo", "Blows Out of Time"),
			combo = new Text("Los dos aparecen cuatro veces alrededor del objetivo, uno a cada lado, y se van; cuando ya le dan la espalda caen los ocho golpes (225 % cada uno) y todo estalla: 2 × 2500 %.", "Both flash four times around the target, one on either side, and leave; with their backs already turned the eight blows land (225% each) and it all bursts: 2 × 2500%.")
		}
	};

	public static bool Spanish => (Language.currentLanguageName ?? "").StartsWith("es");

	public static string Pick(string es, string en)
	{
		if (!Spanish)
		{
			return en;
		}
		return es;
	}

	public static Bond Of(string first, string second)
	{
		Bond[] array = bonds;
		foreach (Bond bond in array)
		{
			if ((bond.a == first && bond.b == second) || (bond.a == second && bond.b == first))
			{
				return bond;
			}
		}
		return null;
	}
}
public class KizunaCamera
{
	public enum Anchor
	{
		Target,
		A,
		B,
		Mid
	}

	public struct Shot
	{
		public float time;

		public Anchor anchor;

		public Vector3 eye;

		public Vector3 look;

		public float fov;

		public bool cut;

		public bool tilt;

		public Shot(float time, Anchor anchor, Vector3 eye, Vector3 look, float fov = 55f, bool cut = false)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			this.time = time;
			this.anchor = anchor;
			this.eye = eye;
			this.look = look;
			this.fov = fov;
			this.cut = cut;
			tilt = false;
		}
	}

	private class Stand : MonoBehaviour, ICameraStateProvider
	{
		private KizunaCamera owner;

		private GameObject body;

		public static Stand Create(KizunaCamera owner, GameObject body)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			Stand stand = new GameObject("KizunaCamera").AddComponent<Stand>();
			stand.owner = owner;
			stand.body = body;
			return stand;
		}

		private void Update()
		{
			if (!Object.op_Implicit((Object)(object)body))
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
		}

		public void GetCameraState(CameraRigController cameraRigController, ref CameraState cameraState)
		{
			owner.GetCameraState(ref cameraState);
		}

		public bool IsUserLookAllowed(CameraRigController cameraRigController)
		{
			return false;
		}

		public bool IsUserControlAllowed(CameraRigController cameraRigController)
		{
			return true;
		}

		public bool IsHudAllowed(CameraRigController cameraRigController)
		{
			return false;
		}
	}

	private static readonly FieldInfo lerpCameraState = typeof(CameraRigController).GetField("lerpCameraState", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

	private readonly GameObject body;

	private readonly Func<Anchor, Vector3> anchorPosition;

	private readonly Vector3 forward;

	private readonly Vector3 right;

	private readonly Shot[] shots;

	private CameraRigController rig;

	private Stand stand;

	private bool released;

	private float time;

	private const float groundProbe = 8f;

	public KizunaCamera(GameObject body, Func<Anchor, Vector3> anchorPosition, Vector3 forward, Shot[] shots)
	{
		//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_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_0039: 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)
		this.body = body;
		this.anchorPosition = anchorPosition;
		this.forward = Kizuna.Level(forward, Vector3.forward);
		Vector3 val = Vector3.Cross(Vector3.up, this.forward);
		right = ((Vector3)(ref val)).normalized;
		this.shots = shots ?? new Shot[0];
	}

	public void Update(float time)
	{
		this.time = time;
		if (Object.op_Implicit((Object)(object)rig) || released || shots.Length == 0)
		{
			return;
		}
		foreach (CameraRigController readOnlyInstances in CameraRigController.readOnlyInstancesList)
		{
			if (Object.op_Implicit((Object)(object)readOnlyInstances) && !((Object)(object)readOnlyInstances.target != (Object)(object)body) && !readOnlyInstances.hasOverride && Own(readOnlyInstances))
			{
				rig = readOnlyInstances;
				rig.enableFading = false;
				stand = Stand.Create(this, body);
				rig.SetOverrideCam((ICameraStateProvider)(object)stand, 0f);
				break;
			}
		}
	}

	private bool Own(CameraRigController candidate)
	{
		CharacterBody val = (Object.op_Implicit((Object)(object)candidate.viewer) ? candidate.viewer.GetCurrentBody() : null);
		if (Object.op_Implicit((Object)(object)val))
		{
			return (Object)(object)((Component)val).gameObject == (Object)(object)body;
		}
		return false;
	}

	public void Release(float blend)
	{
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: 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_0054: 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_0069: 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_00a5: 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_0094: Unknown result type (might be due to invalid IL or missing references)
		released = true;
		if (Object.op_Implicit((Object)(object)rig))
		{
			rig.enableFading = true;
			if (Object.op_Implicit((Object)(object)stand) && rig.IsOverrideCam((ICameraStateProvider)(object)stand))
			{
				CameraState currentCameraState = rig.currentCameraState;
				CameraState currentCameraState2 = currentCameraState;
				currentCameraState2.rotation = Quaternion.LookRotation(forward);
				rig.currentCameraState = currentCameraState2;
				rig.SetOverrideCam((ICameraStateProvider)null, blend);
				if (lerpCameraState != null)
				{
					lerpCameraState.SetValue(rig, currentCameraState);
				}
				rig.currentCameraState = currentCameraState;
			}
			rig = null;
		}
		if (Object.op_Implicit((Object)(object)stand))
		{
			Object.Destroy((Object)(object)((Component)stand).gameObject);
		}
		stand = null;
	}

	private void Place(Shot shot, out Vector3 eye, out Vector3 look)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: 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_0051: 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_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: 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_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: 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_00fa: 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_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: 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_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)
		eye = Place(shot.anchor, shot.eye);
		if (!shot.tilt)
		{
			look = Place(shot.anchor, shot.look);
			return;
		}
		Vector3 val = anchorPosition(shot.anchor) + right * shot.eye.x + forward * shot.eye.z + Vector3.up * shot.eye.y;
		look = anchorPosition(shot.anchor) + right * shot.look.x + forward * shot.look.z + Vector3.up * (shot.look.y + eye.y - val.y);
	}

	private Vector3 Place(Anchor anchor, Vector3 offset)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: 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_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_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_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_0038: 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_003a: 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_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: 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_0051: 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_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_007f: 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_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: 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_00b5: 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_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = anchorPosition(anchor) + right * offset.x + forward * offset.z;
		Vector3 val2 = val + Vector3.up * offset.y;
		if (Physics.Raycast(val2, Vector3.up, 8f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
		{
			return val2;
		}
		RaycastHit val3 = default(RaycastHit);
		if (Physics.Raycast(val2 + Vector3.up * 8f, Vector3.down, ref val3, 8f + offset.y, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1) && ((RaycastHit)(ref val3)).point.y > val.y)
		{
			val2.y = ((RaycastHit)(ref val3)).point.y + offset.y;
		}
		return val2;
	}

	private void GetCameraState(ref CameraState cameraState)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: 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_0083: 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_0089: 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_0032: 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)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: 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_00a3: 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_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_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: 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_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: 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)
		Sample(time, out var eye, out var look, out var fov);
		Vector3 val = eye - look;
		float magnitude = ((Vector3)(ref val)).magnitude;
		RaycastHit val2 = default(RaycastHit);
		if (magnitude > 0.01f && Physics.SphereCast(look, 0.3f, val / magnitude, ref val2, magnitude, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
		{
			eye = look + val / magnitude * Mathf.Max(0.8f, ((RaycastHit)(ref val2)).distance);
		}
		cameraState.position = eye;
		Vector3 val3 = look - eye;
		cameraState.rotation = Quaternion.LookRotation((((Vector3)(ref val3)).sqrMagnitude > 0.0001f) ? (look - eye) : forward);
		cameraState.fov = fov;
	}

	private void Sample(float t, out Vector3 eye, out Vector3 look, out float fov)
	{
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: 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)
		int i;
		for (i = 0; i < shots.Length && shots[i].time <= t; i++)
		{
		}
		Shot shot = shots[Mathf.Max(0, i - 1)];
		if (i == 0 || i >= shots.Length || shots[i].cut)
		{
			Place(shot, out eye, out look);
			fov = shot.fov;
			return;
		}
		Shot shot2 = shots[i];
		float num = Mathf.SmoothStep(0f, 1f, (t - shot.time) / Mathf.Max(0.001f, shot2.time - shot.time));
		Place(shot, out var eye2, out var look2);
		Place(shot2, out var eye3, out var look3);
		eye = Vector3.Lerp(eye2, eye3, num);
		look = Vector3.Lerp(look2, look3, num);
		fov = Mathf.Lerp(shot.fov, shot2.fov, num);
	}
}
public class KizunaCombo
{
	public string id;

	public string a;

	public string b;

	public float duration;

	public float damageCoefficient = 25f;

	public float radius = 15f;

	public Dictionary<string, float> numbers = new Dictionary<string, float>();

	public KizunaCamera.Shot[] shots = new KizunaCamera.Shot[0];

	public float this[string name]
	{
		get
		{
			if (numbers.TryGetValue(name, out var value))
			{
				return value;
			}
			Log.Warning(id + " has no number " + name);
			return 0f;
		}
	}

	public bool Has(string character)
	{
		if (!(character == a))
		{
			return character == b;
		}
		return true;
	}
}
public static class KizunaCombos
{
	public const string RasenganChidori = "RasenganChidori";

	public const string EntonRasenShuriken = "EntonRasenShuriken";

	public const string RasenTarengan = "RasenTarengan";

	public const string HawkCrossCut = "HawkCrossCut";

	public const string TeamSevenFuma = "TeamSevenFuma";

	public const string Goemon = "Goemon";

	public const string DoubleRasengan = "DoubleRasengan";

	public const string HiraishinRasenShuriken = "HiraishinRasenShuriken";

	public const string LightningCage = "LightningCage";

	public const string BlackKunai = "BlackKunai";

	public static readonly List<KizunaCombo> all = new List<KizunaCombo>
	{
		RasenganChidoriCombo(),
		EntonRasenShurikenCombo(),
		RasenTarenganCombo(),
		HawkCrossCutCombo(),
		TeamSevenFumaCombo(),
		GoemonCombo(),
		DoubleRasenganCombo(),
		HiraishinRasenShurikenCombo(),
		LightningCageCombo(),
		BlackKunaiCombo(),
		IndraAshuraCombo(),
		NineBeastsCombo(),
		KuramaKumiteCombo(),
		WindAndFireCombo(),
		EclipseCombo(),
		YinYangCombo(),
		ChibakuKirinCombo(),
		KagutsuchiBladeCombo(),
		ShadowSwapCombo(),
		SwapShurikenCombo(),
		OutOfTimeCombo()
	};

	public const int tarenganClones = 8;

	public const string IndraAshura = "IndraAshura";

	public const string NineBeasts = "NineBeasts";

	public const string KuramaKumite = "KuramaKumite";

	public const string WindAndFire = "WindAndFire";

	public const string Eclipse = "Eclipse";

	public const string YinYang = "YinYang";

	public const string ChibakuKirin = "ChibakuKirin";

	public const string KagutsuchiBlade = "KagutsuchiBlade";

	public const string ShadowSwap = "ShadowSwap";

	public const string SwapShuriken = "SwapShuriken";

	public const string OutOfTime = "OutOfTime";

	public const int nineClones = 8;

	public const int orbCount = 9;

	public const int swapClones = 4;

	public static KizunaCombo For(string first, string second)
	{
		foreach (KizunaCombo item in all)
		{
			if ((item.a == first && item.b == second) || (item.a == second && item.b == first))
			{
				return item;
			}
		}
		return null;
	}

	public static KizunaCombo Get(int index)
	{
		if (index < 0 || index >= all.Count)
		{
			return null;
		}
		return all[index];
	}

	public static Vector3 TarenganCloneSpot(KizunaCombo combo, Vector3 target, Vector3 forward, int i)
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: 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_002b: 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_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: 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_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: 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_0061: Unknown result type (might be due to invalid IL or missing references)
		float num = combo["fanArc"];
		Vector3 val = Quaternion.AngleAxis(0f - ((0f - num) * 0.5f + num * (float)i / 7f), Vector3.up) * -Kizuna.Level(forward, Vector3.forward);
		return Kizuna.Ground(target + val * combo["fanRadius"], 3f, 6f);
	}

	public static Vector3 HawkCutEnd(KizunaCombo combo, Vector3 target, Vector3 forward, int k)
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: 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_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = Quaternion.AngleAxis(combo["cutStep"] * (float)k + ((k % 2 == 1) ? 90f : 0f), Vector3.up) * Kizuna.Level(forward, Vector3.forward);
		return Kizuna.Ground(target + val * combo["cutRadius"], 3f, 6f);
	}

	private static Vector3 Round(Vector3 target, Vector3 forward, float radius, float degrees)
	{
		//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_000b: 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_001b: 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_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: 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)
		Vector3 val = Quaternion.AngleAxis(degrees, Vector3.up) * Kizuna.Level(forward, Vector3.forward);
		return Kizuna.Ground(target + val * radius, 3f, 6f);
	}

	public static Vector3 ShurikenStop(KizunaCombo combo, Vector3 target, Vector3 forward, int i)
	{
		//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_001b: Unknown result type (might be due to invalid IL or missing references)
		return Round(target, forward, combo["stopRadius"], -135f + 90f * (float)i);
	}

	public static Vector3 CageKunai(KizunaCombo combo, Vector3 target, Vector3 forward, int i)
	{
		//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_0035: Unknown result type (might be due to invalid IL or missing references)
		int num = Mathf.Max(1, Mathf.RoundToInt(combo["kunaiCount"]));
		return Round(target, forward, combo["ringRadius"], 360f / (float)num * ((float)i + 0.5f));
	}

	public static int CageCutEnd(KizunaCombo combo, int k)
	{
		int num = Mathf.Max(1, Mathf.RoundToInt(combo["kunaiCount"]));
		return 3 * (k + 1) % num;
	}

	public static Vector3 BlackKunaiHop(KizunaCombo combo, Vector3 target, Vector3 forward, int k)
	{
		//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_001b: Unknown result type (might be due to invalid IL or missing references)
		return Round(target, forward, combo["hopRadius"], 150f * (float)k + 15f);
	}

	public static Vector3 BlackKunaiCut(KizunaCombo combo, Vector3 target, Vector3 forward, int k)
	{
		//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_001b: Unknown result type (might be due to invalid IL or missing references)
		return Round(target, forward, combo["cutRadius"], 112.5f * (float)k + 80f);
	}

	public static int IndexOf(KizunaCombo combo)
	{
		return all.IndexOf(combo);
	}

	private static KizunaCombo RasenganChidoriCombo()
	{
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: 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_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0204: 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_0244: Unknown result type (might be due to invalid IL or missing references)
		//IL_0258: Unknown result type (might be due to invalid IL or missing references)
		//IL_0284: Unknown result type (might be due to invalid IL or missing references)
		//IL_0298: 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_02d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0304: Unknown result type (might be due to invalid IL or missing references)
		//IL_0318: Unknown result type (might be due to invalid IL or missing references)
		//IL_0345: Unknown result type (might be due to invalid IL or missing references)
		//IL_0359: Unknown result type (might be due to invalid IL or missing references)
		//IL_0386: Unknown result type (might be due to invalid IL or missing references)
		//IL_039a: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03db: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "RasenganChidori",
			a = "NarutoShippudenBody",
			b = "SasukeShippudenBody",
			duration = 4.5f,
			damageCoefficient = 32f
		};
		kizunaCombo.numbers["form"] = 0.05f;
		kizunaCombo.numbers["charge"] = 1.45f;
		kizunaCombo.numbers["clash"] = 2.05f;
		kizunaCombo.numbers["thrust"] = 2.95f;
		kizunaCombo.numbers["burst"] = 3.9f;
		kizunaCombo.numbers["standDistance"] = 7f;
		kizunaCombo.numbers["standSide"] = 0.55f;
		kizunaCombo.numbers["clashDistance"] = 1.6f;
		kizunaCombo.shots = new KizunaCamera.Shot[12]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.A, new Vector3(-1.35f, 1.3f, 1.8f), new Vector3(0f, 1f, 0f), 40f, cut: true),
			new KizunaCamera.Shot(0.72f, KizunaCamera.Anchor.A, new Vector3(-1.2f, 1.25f, 1.6f), new Vector3(0f, 1.05f, 0f), 38f),
			new KizunaCamera.Shot(0.75f, KizunaCamera.Anchor.B, new Vector3(1.35f, 0.6f, 1.7f), new Vector3(0f, 0.55f, 0f), 40f, cut: true),
			new KizunaCamera.Shot(1.42f, KizunaCamera.Anchor.B, new Vector3(1.15f, 0.75f, 1.5f), new Vector3(0f, 0.65f, 0f), 38f),
			new KizunaCamera.Shot(1.45f, KizunaCamera.Anchor.Mid, new Vector3(-5.5f, 1.5f, 0.6f), new Vector3(0f, 1f, 0.6f), 55f, cut: true),
			new KizunaCamera.Shot(2.05f, KizunaCamera.Anchor.Mid, new Vector3(-5.2f, 1.4f, 0.9f), new Vector3(0f, 1f, 0.9f)),
			new KizunaCamera.Shot(2.08f, KizunaCamera.Anchor.Mid, new Vector3(3f, 0.8f, 1f), new Vector3(0f, 1.15f, 0.2f), 50f, cut: true),
			new KizunaCamera.Shot(2.92f, KizunaCamera.Anchor.Mid, new Vector3(2.7f, 0.85f, 0.8f), new Vector3(0f, 1.2f, 0.2f), 46f),
			new KizunaCamera.Shot(2.95f, KizunaCamera.Anchor.Target, new Vector3(-13f, 8f, -18f), new Vector3(0f, 2.5f, 0f), 60f, cut: true),
			new KizunaCamera.Shot(3.85f, KizunaCamera.Anchor.Target, new Vector3(-15f, 9.5f, -21f), new Vector3(0f, 3.5f, 0f), 64f),
			new KizunaCamera.Shot(3.9f, KizunaCamera.Anchor.Target, new Vector3(0f, 1.4f, -6f), new Vector3(0f, 1.6f, 2f), 62f, cut: true),
			new KizunaCamera.Shot(4.5f, KizunaCamera.Anchor.Target, new Vector3(0f, 1.6f, -6.6f), new Vector3(0f, 1.5f, 2f), 60f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo EntonRasenShurikenCombo()
	{
		//IL_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: 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_01c1: 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_0201: Unknown result type (might be due to invalid IL or missing references)
		//IL_022d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0241: Unknown result type (might be due to invalid IL or missing references)
		//IL_026d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c1: 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_0301: Unknown result type (might be due to invalid IL or missing references)
		//IL_032d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0341: Unknown result type (might be due to invalid IL or missing references)
		//IL_036d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0381: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_0403: Unknown result type (might be due to invalid IL or missing references)
		//IL_0430: Unknown result type (might be due to invalid IL or missing references)
		//IL_0444: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "EntonRasenShuriken",
			a = "NarutoSageBody",
			b = "SasukeMangekyouBody",
			duration = 5f,
			damageCoefficient = 28f
		};
		kizunaCombo.numbers["form"] = 0.05f;
		kizunaCombo.numbers["eye"] = 1.3f;
		kizunaCombo.numbers["ignite"] = 1.95f;
		kizunaCombo.numbers["throw"] = 2.6f;
		kizunaCombo.numbers["release"] = 2.8f;
		kizunaCombo.numbers["burst"] = 3.1f;
		kizunaCombo.numbers["explode"] = 4.2f;
		kizunaCombo.numbers["standDistance"] = 16f;
		kizunaCombo.numbers["sageSide"] = -1f;
		kizunaCombo.numbers["takaSide"] = 1.6f;
		kizunaCombo.numbers["takaBack"] = 0.6f;
		kizunaCombo.numbers["sphereShare"] = 0.75f;
		kizunaCombo.numbers["ticks"] = 10f;
		kizunaCombo.shots = new KizunaCamera.Shot[12]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.A, new Vector3(2.4f, 1.3f, 3f), new Vector3(0f, 1.9f, 0f), 50f, cut: true),
			new KizunaCamera.Shot(1.25f, KizunaCamera.Anchor.A, new Vector3(2f, 1.5f, 3.4f), new Vector3(0f, 2.3f, 0f), 52f),
			new KizunaCamera.Shot(1.3f, KizunaCamera.Anchor.B, new Vector3(-0.4f, 1.6f, 1.15f), new Vector3(0.05f, 1.56f, 0f), 30f, cut: true),
			new KizunaCamera.Shot(1.93f, KizunaCamera.Anchor.B, new Vector3(-0.32f, 1.6f, 0.95f), new Vector3(0.05f, 1.57f, 0f), 28f),
			new KizunaCamera.Shot(1.95f, KizunaCamera.Anchor.Mid, new Vector3(-5f, 2.4f, 3.5f), new Vector3(-0.3f, 2.2f, 0f), 55f, cut: true),
			new KizunaCamera.Shot(2.57f, KizunaCamera.Anchor.Mid, new Vector3(-4f, 2.5f, 3.6f), new Vector3(-0.4f, 2.3f, 0f), 48f),
			new KizunaCamera.Shot(2.6f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 2.6f, -4.5f), new Vector3(0f, 2f, 10f), 58f, cut: true),
			new KizunaCamera.Shot(3.05f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 3.2f, -5.5f), new Vector3(0f, 1.5f, 14f), 60f),
			new KizunaCamera.Shot(3.1f, KizunaCamera.Anchor.Target, new Vector3(-17f, 8f, -15f), new Vector3(0f, 3f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(4.15f, KizunaCamera.Anchor.Target, new Vector3(-19f, 9f, -17f), new Vector3(0f, 3.5f, 0f), 64f),
			new KizunaCamera.Shot(4.2f, KizunaCamera.Anchor.Target, new Vector3(0f, 3f, -21f), new Vector3(0f, 3f, 0f), 64f, cut: true),
			new KizunaCamera.Shot(5f, KizunaCamera.Anchor.Target, new Vector3(0f, 3.6f, -23f), new Vector3(0f, 3f, 0f), 62f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo RasenTarenganCombo()
	{
		//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01df: 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_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_024b: 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_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_029f: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02df: Unknown result type (might be due to invalid IL or missing references)
		//IL_030b: Unknown result type (might be due to invalid IL or missing references)
		//IL_031f: Unknown result type (might be due to invalid IL or missing references)
		//IL_034b: Unknown result type (might be due to invalid IL or missing references)
		//IL_035f: Unknown result type (might be due to invalid IL or missing references)
		//IL_038b: Unknown result type (might be due to invalid IL or missing references)
		//IL_039f: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_03df: Unknown result type (might be due to invalid IL or missing references)
		//IL_040c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0420: Unknown result type (might be due to invalid IL or missing references)
		//IL_044d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0461: Unknown result type (might be due to invalid IL or missing references)
		//IL_048e: 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_04cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0510: Unknown result type (might be due to invalid IL or missing references)
		//IL_0524: Unknown result type (might be due to invalid IL or missing references)
		//IL_0551: 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_0592: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a6: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "RasenTarengan",
			a = "NarutoShippudenBody",
			b = "NarutoSageBody",
			duration = 5f
		};
		kizunaCombo.numbers["seal"] = 0.05f;
		kizunaCombo.numbers["clones"] = 0.3f;
		kizunaCombo.numbers["sage"] = 1.1f;
		kizunaCombo.numbers["form"] = 1.5f;
		kizunaCombo.numbers["waves"] = 1.9f;
		kizunaCombo.numbers["waveInterval"] = 0.25f;
		kizunaCombo.numbers["leap"] = 2.5f;
		kizunaCombo.numbers["apex"] = 3.2f;
		kizunaCombo.numbers["dive"] = 3.55f;
		kizunaCombo.numbers["impact"] = 3.9f;
		kizunaCombo.numbers["standDistance"] = 9f;
		kizunaCombo.numbers["standSide"] = 1.3f;
		kizunaCombo.numbers["fanRadius"] = 6f;
		kizunaCombo.numbers["fanArc"] = 150f;
		kizunaCombo.numbers["cloneCharge"] = 0.3f;
		kizunaCombo.numbers["apexHeight"] = 8f;
		kizunaCombo.numbers["cloneDamage"] = 2.25f;
		kizunaCombo.numbers["cloneRadius"] = 6f;
		kizunaCombo.shots = new KizunaCamera.Shot[16]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1f, 4.6f), new Vector3(0f, 1.3f, 0f), 50f, cut: true),
			new KizunaCamera.Shot(0.28f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.1f, 4.1f), new Vector3(0f, 1.3f, 0f), 50f),
			new KizunaCamera.Shot(0.32f, KizunaCamera.Anchor.Target, new Vector3(0f, 9f, -17f), new Vector3(0f, 1f, -1f), 60f, cut: true),
			new KizunaCamera.Shot(1.05f, KizunaCamera.Anchor.Target, new Vector3(0f, 8.5f, -16f), new Vector3(0f, 1f, -1f), 60f),
			new KizunaCamera.Shot(1.08f, KizunaCamera.Anchor.B, new Vector3(-1f, 1.65f, 2.2f), new Vector3(0f, 1.55f, 0f), 38f, cut: true),
			new KizunaCamera.Shot(1.45f, KizunaCamera.Anchor.B, new Vector3(-0.9f, 1.6f, 2f), new Vector3(0f, 1.55f, 0f), 36f),
			new KizunaCamera.Shot(1.5f, KizunaCamera.Anchor.Target, new Vector3(-11f, 2.5f, -4f), new Vector3(0f, 1.2f, -1f), 55f, cut: true),
			new KizunaCamera.Shot(1.88f, KizunaCamera.Anchor.Target, new Vector3(-10.5f, 2.4f, -3f), new Vector3(0f, 1.2f, -1f)),
			new KizunaCamera.Shot(1.9f, KizunaCamera.Anchor.Target, new Vector3(6f, 1.3f, 5f), new Vector3(0f, 1f, -2f), 64f, cut: true),
			new KizunaCamera.Shot(2.48f, KizunaCamera.Anchor.Target, new Vector3(6.5f, 1.6f, 6f), new Vector3(0f, 1f, -2f), 64f),
			new KizunaCamera.Shot(2.5f, KizunaCamera.Anchor.Target, new Vector3(-5f, 0.8f, -12f), new Vector3(0f, 6f, -4f), 62f, cut: true),
			new KizunaCamera.Shot(3.15f, KizunaCamera.Anchor.Target, new Vector3(-5f, 0.8f, -11f), new Vector3(0f, 8.5f, -1f), 62f),
			new KizunaCamera.Shot(3.2f, KizunaCamera.Anchor.Target, new Vector3(-3f, 0.6f, -5f), new Vector3(0f, 8.8f, -0.5f), 60f, cut: true),
			new KizunaCamera.Shot(3.53f, KizunaCamera.Anchor.Target, new Vector3(-2.8f, 0.6f, -4.6f), new Vector3(0f, 8.8f, -0.5f), 60f),
			new KizunaCamera.Shot(3.57f, KizunaCamera.Anchor.Target, new Vector3(-14f, 6f, -13f), new Vector3(0f, 2f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(4.4f, KizunaCamera.Anchor.Target, new Vector3(-15f, 7f, -14f), new Vector3(0f, 2f, 0f), 62f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo HawkCrossCutCombo()
	{
		//IL_01a1: 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_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0221: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: 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_0275: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b5: 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_02f5: 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_0335: Unknown result type (might be due to invalid IL or missing references)
		//IL_0361: 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_03a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e2: 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_0423: Unknown result type (might be due to invalid IL or missing references)
		//IL_0437: 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_0478: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "HawkCrossCut",
			a = "SasukeShippudenBody",
			b = "SasukeMangekyouBody",
			duration = 4.5f
		};
		kizunaCombo.numbers["flashA"] = 0.15f;
		kizunaCombo.numbers["flashB"] = 0.55f;
		kizunaCombo.numbers["cuts"] = 1f;
		kizunaCombo.numbers["cutInterval"] = 0.3f;
		kizunaCombo.numbers["cutCount"] = 8f;
		kizunaCombo.numbers["sheathe"] = 3.45f;
		kizunaCombo.numbers["cross"] = 3.6f;
		kizunaCombo.numbers["burst"] = 3.95f;
		kizunaCombo.numbers["backOffset"] = 0.4f;
		kizunaCombo.numbers["startBefore"] = 6f;
		kizunaCombo.numbers["cutRadius"] = 6f;
		kizunaCombo.numbers["cutStep"] = 112.5f;
		kizunaCombo.numbers["cutDamage"] = 1.2f;
		kizunaCombo.numbers["cutReach"] = 7.5f;
		kizunaCombo.numbers["endSide"] = 4f;
		kizunaCombo.numbers["endBefore"] = 1f;
		kizunaCombo.shots = new KizunaCamera.Shot[12]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.1f, -4.3f), new Vector3(0f, 1.15f, 0f), 50f, cut: true),
			new KizunaCamera.Shot(0.13f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.1f, -4.1f), new Vector3(0f, 1.15f, 0f), 50f),
			new KizunaCamera.Shot(0.15f, KizunaCamera.Anchor.Mid, new Vector3(-1.35f, 1.58f, 0.35f), new Vector3(-0.4f, 1.55f, 0f), 30f, cut: true),
			new KizunaCamera.Shot(0.52f, KizunaCamera.Anchor.Mid, new Vector3(-1.25f, 1.58f, 0.3f), new Vector3(-0.4f, 1.55f, 0f), 30f),
			new KizunaCamera.Shot(0.55f, KizunaCamera.Anchor.Mid, new Vector3(1.35f, 1.58f, 0.35f), new Vector3(0.4f, 1.55f, 0f), 30f, cut: true),
			new KizunaCamera.Shot(0.97f, KizunaCamera.Anchor.Mid, new Vector3(1.25f, 1.58f, 0.3f), new Vector3(0.4f, 1.55f, 0f), 30f),
			new KizunaCamera.Shot(1f, KizunaCamera.Anchor.Target, new Vector3(0f, 11f, -10f), new Vector3(0f, 0.5f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(3.4f, KizunaCamera.Anchor.Target, new Vector3(-5f, 11.5f, -8.5f), new Vector3(0f, 0.5f, 0f), 62f),
			new KizunaCamera.Shot(3.45f, KizunaCamera.Anchor.Target, new Vector3(0f, 1.4f, -10.5f), new Vector3(0f, 1.6f, 0f), 58f, cut: true),
			new KizunaCamera.Shot(3.92f, KizunaCamera.Anchor.Target, new Vector3(0f, 1.35f, -10f), new Vector3(0f, 1.6f, 0f), 58f),
			new KizunaCamera.Shot(3.95f, KizunaCamera.Anchor.Target, new Vector3(0f, 2.3f, -13.5f), new Vector3(0f, 2f, 0f), 64f, cut: true),
			new KizunaCamera.Shot(4.5f, KizunaCamera.Anchor.Target, new Vector3(0f, 2.6f, -14.5f), new Vector3(0f, 2f, 0f), 64f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo TeamSevenFumaCombo()
	{
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e2: 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_0222: Unknown result type (might be due to invalid IL or missing references)
		//IL_0236: Unknown result type (might be due to invalid IL or missing references)
		//IL_0262: Unknown result type (might be due to invalid IL or missing references)
		//IL_0276: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0322: Unknown result type (might be due to invalid IL or missing references)
		//IL_0336: Unknown result type (might be due to invalid IL or missing references)
		//IL_0362: Unknown result type (might be due to invalid IL or missing references)
		//IL_0376: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a2: 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_03e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0424: Unknown result type (might be due to invalid IL or missing references)
		//IL_0438: Unknown result type (might be due to invalid IL or missing references)
		//IL_0465: Unknown result type (might be due to invalid IL or missing references)
		//IL_0479: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "TeamSevenFuma",
			a = "NarutoShippudenBody",
			b = "SasukeMangekyouBody",
			duration = 4.5f
		};
		kizunaCombo.numbers["henge"] = 0.1f;
		kizunaCombo.numbers["throw"] = 0.45f;
		kizunaCombo.numbers["release"] = 0.8f;
		kizunaCombo.numbers["drill"] = 3f;
		kizunaCombo.numbers["impact"] = 3.35f;
		kizunaCombo.numbers["burst"] = 3.75f;
		kizunaCombo.numbers["standDistance"] = 11f;
		kizunaCombo.numbers["narutoSide"] = -1f;
		kizunaCombo.numbers["takaSide"] = 1.2f;
		kizunaCombo.numbers["loopRadius"] = 6f;
		kizunaCombo.numbers["loopTurns"] = 1.25f;
		kizunaCombo.numbers["flightHeight"] = 0.6f;
		kizunaCombo.numbers["maxHits"] = 8f;
		kizunaCombo.numbers["fumaDamage"] = 4f;
		kizunaCombo.numbers["drillHeight"] = 3f;
		kizunaCombo.radius = 10f;
		kizunaCombo.damageCoefficient = 29f;
		kizunaCombo.shots = new KizunaCamera.Shot[12]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.4f, 4.2f), new Vector3(0f, 1.3f, 0f), 50f, cut: true),
			new KizunaCamera.Shot(0.42f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.4f, 3.7f), new Vector3(0f, 1.3f, 0f), 50f),
			new KizunaCamera.Shot(0.45f, KizunaCamera.Anchor.B, new Vector3(2.8f, 1.5f, 1.8f), new Vector3(0f, 1.35f, 0.3f), 46f, cut: true),
			new KizunaCamera.Shot(0.82f, KizunaCamera.Anchor.B, new Vector3(2.6f, 1.5f, 1.6f), new Vector3(0f, 1.35f, 0.3f), 46f),
			new KizunaCamera.Shot(0.85f, KizunaCamera.Anchor.A, new Vector3(1.5f, 1.6f, -2.2f), new Vector3(0f, 1f, 0f), 42f, cut: true),
			new KizunaCamera.Shot(1.4f, KizunaCamera.Anchor.A, new Vector3(1.8f, 1.8f, -2.6f), new Vector3(0f, 1f, 0f), 44f),
			new KizunaCamera.Shot(1.45f, KizunaCamera.Anchor.A, new Vector3(0f, 3.8f, -6.5f), new Vector3(0f, 1f, 2f), 60f, cut: true),
			new KizunaCamera.Shot(2.95f, KizunaCamera.Anchor.A, new Vector3(0f, 4.2f, -7f), new Vector3(0f, 1f, 2f), 60f),
			new KizunaCamera.Shot(3f, KizunaCamera.Anchor.Target, new Vector3(-4f, 1.2f, -6f), new Vector3(0f, 2.8f, 0f), 58f, cut: true),
			new KizunaCamera.Shot(3.72f, KizunaCamera.Anchor.Target, new Vector3(-4.5f, 1.3f, -6.5f), new Vector3(0f, 1.6f, 0f), 58f),
			new KizunaCamera.Shot(3.75f, KizunaCamera.Anchor.Target, new Vector3(-11f, 6f, -13f), new Vector3(0f, 1.5f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(4.5f, KizunaCamera.Anchor.Target, new Vector3(-12f, 6.5f, -14f), new Vector3(0f, 1.5f, 0f), 62f)
		};
		return kizunaCombo;
	}

	public static float GoemonFront(KizunaCombo combo, float time)
	{
		float num = Mathf.Clamp01(time / Mathf.Max(0.1f, combo["flood"] - combo["wave"]));
		return Mathf.Lerp(0f - combo["standDistance"] + combo["waveStart"], combo["waveBeyond"], num);
	}

	private static KizunaCombo GoemonCombo()
	{
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_0196: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0202: 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_0242: 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_0282: Unknown result type (might be due to invalid IL or missing references)
		//IL_0296: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0302: 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_0342: Unknown result type (might be due to invalid IL or missing references)
		//IL_0356: Unknown result type (might be due to invalid IL or missing references)
		//IL_0382: Unknown result type (might be due to invalid IL or missing references)
		//IL_0396: 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_03d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0404: Unknown result type (might be due to invalid IL or missing references)
		//IL_0418: 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_0459: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "Goemon",
			a = "NarutoSageBody",
			b = "SasukeShippudenBody",
			duration = 4.7f,
			radius = 14f
		};
		kizunaCombo.numbers["toads"] = 0.1f;
		kizunaCombo.numbers["seals"] = 0.7f;
		kizunaCombo.numbers["oil"] = 1.25f;
		kizunaCombo.numbers["breath"] = 1.5f;
		kizunaCombo.numbers["wave"] = 1.6f;
		kizunaCombo.numbers["flood"] = 2.5f;
		kizunaCombo.numbers["burst"] = 3.6f;
		kizunaCombo.numbers["standDistance"] = 13f;
		kizunaCombo.numbers["standSide"] = 1.4f;
		kizunaCombo.numbers["waveStart"] = 3f;
		kizunaCombo.numbers["waveBeyond"] = 8f;
		kizunaCombo.numbers["waveWidth"] = 14f;
		kizunaCombo.numbers["ticks"] = 6f;
		kizunaCombo.numbers["tickDamage"] = 1f;
		kizunaCombo.shots = new KizunaCamera.Shot[12]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.A, new Vector3(0.7f, 1.9f, 3.8f), new Vector3(0f, 1.55f, 0f), 46f, cut: true),
			new KizunaCamera.Shot(0.67f, KizunaCamera.Anchor.A, new Vector3(0.5f, 1.8f, 3.2f), new Vector3(0f, 1.55f, 0f), 46f),
			new KizunaCamera.Shot(0.7f, KizunaCamera.Anchor.B, new Vector3(-1.6f, 1.5f, 2.4f), new Vector3(0f, 1.45f, 0f), 42f, cut: true),
			new KizunaCamera.Shot(1.22f, KizunaCamera.Anchor.B, new Vector3(-1.4f, 1.5f, 2.2f), new Vector3(0f, 1.45f, 0f), 42f),
			new KizunaCamera.Shot(1.25f, KizunaCamera.Anchor.Mid, new Vector3(5.5f, 1.3f, 4.5f), new Vector3(0f, 1.6f, 0.5f), 58f, cut: true),
			new KizunaCamera.Shot(1.57f, KizunaCamera.Anchor.Mid, new Vector3(6f, 1.4f, 4f), new Vector3(0f, 1.6f, 1.5f), 58f),
			new KizunaCamera.Shot(1.6f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 4.5f, -6f), new Vector3(0f, 0.5f, 10f), 62f, cut: true),
			new KizunaCamera.Shot(2.47f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 5.5f, -7.5f), new Vector3(0f, 0.5f, 13f), 62f),
			new KizunaCamera.Shot(2.5f, KizunaCamera.Anchor.Target, new Vector3(-18f, 7f, -7f), new Vector3(0f, 1.5f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(3.57f, KizunaCamera.Anchor.Target, new Vector3(-19.5f, 8f, -8f), new Vector3(0f, 2f, 0f), 62f),
			new KizunaCamera.Shot(3.6f, KizunaCamera.Anchor.Target, new Vector3(0f, 3.2f, -21f), new Vector3(0f, 4f, 0f), 64f, cut: true),
			new KizunaCamera.Shot(4.7f, KizunaCamera.Anchor.Target, new Vector3(0f, 3.8f, -23f), new Vector3(0f, 4f, 0f), 64f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo DoubleRasenganCombo()
	{
		//IL_0178: 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_01b8: 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_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_020c: 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_024c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0278: 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_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f8: 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_0338: Unknown result type (might be due to invalid IL or missing references)
		//IL_034c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0378: Unknown result type (might be due to invalid IL or missing references)
		//IL_038c: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "DoubleRasengan",
			a = "NarutoShippudenBody",
			b = "MinatoBody",
			duration = 4.6f,
			radius = 12f,
			damageCoefficient = 32f
		};
		kizunaCombo.numbers["throw"] = 0.1f;
		kizunaCombo.numbers["form"] = 0.55f;
		kizunaCombo.numbers["vanish"] = 1.5f;
		kizunaCombo.numbers["appear"] = 1.6f;
		kizunaCombo.numbers["clash"] = 1.95f;
		kizunaCombo.numbers["burst"] = 3f;
		kizunaCombo.numbers["standDistance"] = 9f;
		kizunaCombo.numbers["narutoSide"] = -0.6f;
		kizunaCombo.numbers["minatoSide"] = 0.15f;
		kizunaCombo.numbers["minatoBack"] = 0.45f;
		kizunaCombo.numbers["kunaiSide"] = 3.4f;
		kizunaCombo.numbers["clashSide"] = 1f;
		kizunaCombo.numbers["kunaiFlight"] = 0.35f;
		kizunaCombo.shots = new KizunaCamera.Shot[10]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.4f, 4.2f), new Vector3(0f, 1.3f, 0f), 50f, cut: true),
			new KizunaCamera.Shot(0.52f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.4f, 3.7f), new Vector3(0f, 1.3f, 0f), 50f),
			new KizunaCamera.Shot(0.55f, KizunaCamera.Anchor.Mid, new Vector3(-1.5f, 1f, 2.6f), new Vector3(0f, 1.25f, 0f), 42f, cut: true),
			new KizunaCamera.Shot(1.47f, KizunaCamera.Anchor.Mid, new Vector3(-1.3f, 1.1f, 2.3f), new Vector3(0f, 1.25f, 0f), 40f),
			new KizunaCamera.Shot(1.5f, KizunaCamera.Anchor.Target, new Vector3(-9f, 6f, -11f), new Vector3(0f, 1f, 0f), 58f, cut: true),
			new KizunaCamera.Shot(1.92f, KizunaCamera.Anchor.Target, new Vector3(-9.5f, 6.3f, -11.5f), new Vector3(0f, 1f, 0f), 58f),
			new KizunaCamera.Shot(1.95f, KizunaCamera.Anchor.Target, new Vector3(0f, 0.8f, -4.8f), new Vector3(0f, 1.3f, 0f), 58f, cut: true),
			new KizunaCamera.Shot(2.97f, KizunaCamera.Anchor.Target, new Vector3(0f, 0.75f, -4.2f), new Vector3(0f, 1.5f, 0f), 60f),
			new KizunaCamera.Shot(3f, KizunaCamera.Anchor.Target, new Vector3(-12f, 6f, -14f), new Vector3(0f, 1.5f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(4.6f, KizunaCamera.Anchor.Target, new Vector3(-13f, 7f, -15f), new Vector3(0f, 1.5f, 0f), 62f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo HiraishinRasenShurikenCombo()
	{
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0214: Unknown result type (might be due to invalid IL or missing references)
		//IL_0240: 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_0280: Unknown result type (might be due to invalid IL or missing references)
		//IL_0294: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d4: 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_0314: 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_0354: Unknown result type (might be due to invalid IL or missing references)
		//IL_0380: 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_03c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0400: Unknown result type (might be due to invalid IL or missing references)
		//IL_0414: Unknown result type (might be due to invalid IL or missing references)
		//IL_0441: Unknown result type (might be due to invalid IL or missing references)
		//IL_0455: Unknown result type (might be due to invalid IL or missing references)
		KizunaCombo kizunaCombo = new KizunaCombo
		{
			id = "HiraishinRasenShuriken",
			a = "NarutoSageBody",
			b = "MinatoBody",
			duration = 5f,
			damageCoefficient = 29f
		};
		kizunaCombo.numbers["form"] = 0.05f;
		kizunaCombo.numbers["kunai"] = 0.3f;
		kizunaCombo.numbers["throw"] = 1.4f;
		kizunaCombo.numbers["release"] = 1.6f;
		kizunaCombo.numbers["catch"] = 1.9f;
		kizunaCombo.numbers["hops"] = 2f;
		kizunaCombo.numbers["hopInterval"] = 0.32f;
		kizunaCombo.numbers["final"] = 3.3f;
		kizunaCombo.numbers["burst"] = 3.35f;
		kizunaCombo.numbers["explode"] = 4.4f;
		kizunaCombo.numbers["standDistance"] = 14f;
		kizunaCombo.numbers["sageSide"] = -1f;
		kizunaCombo.numbers["minatoSide"] = 1.4f;
		kizunaCombo.numbers["stopCount"] = 4f;
		kizunaCombo.numbers["stopRadius"] = 8f;
		kizunaCombo.numbers["kunaiFlight"] = 0.4f;
		kizunaCombo.numbers["smallDamage"] = 3f;
		kizunaCombo.numbers["smallRadius"] = 6f;
		kizunaCombo.numbers["sphereShare"] = 0.7f;
		kizunaCombo.numbers["ticks"] = 6f;
		kizunaCombo.shots = new KizunaCamera.Shot[10]
		{
			new KizunaCamera.Shot(0f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.6f, 5f), new Vector3(0f, 1.8f, 0f), 52f, cut: true),
			new KizunaCamera.Shot(1.37f, KizunaCamera.Anchor.Mid, new Vector3(0f, 1.7f, 4.5f), new Vector3(0f, 1.9f, 0f), 52f),
			new KizunaCamera.Shot(1.4f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 2.6f, -4.5f), new Vector3(0f, 2f, 10f), 58f, cut: true),
			new KizunaCamera.Shot(1.88f, KizunaCamera.Anchor.Mid, new Vector3(0.6f, 3f, -5.2f), new Vector3(0f, 1.6f, 12f), 60f),
			new KizunaCamera.Shot(1.9f, KizunaCamera.Anchor.Target, new Vector3(0f, 15f, -12f), new Vector3(0f, 0f, 0f), 64f, cut: true),
			new KizunaCamera.Shot(3.27f, KizunaCamera.Anchor.Target, new Vector3(-4f, 15.5f, -11f), new Vector3(0f, 0f, 0f), 64f),
			new KizunaCamera.Shot(3.3f, KizunaCamera.Anchor.Target, new Vector3(-15f, 7f, -14f), new Vector3(0f, 3f, 0f), 62f, cut: true),
			new KizunaCamera.Shot(4.35f, KizunaCamera.Anchor.Target, new Vector3(-17f, 8f, -16f), new Vector3(0f, 3.5f, 0f), 64f),
			new KizunaCamera.Shot(4.4f, KizunaCamera.Anchor.Target, new Vector3(0f, 3f, -20f), new Vector3(0f, 3f, 0f), 64f, cut: true),
			new KizunaCamera.Shot(5f, KizunaCamera.Anchor.Target, new Vector3(0f, 3.5f, -22f), new Vector3(0f, 3f, 0f), 62f)
		};
		return kizunaCombo;
	}

	private static KizunaCombo LightningCageCombo()
	{
		//IL_01e0: 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_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0234: Unknown result type (might be due to invalid IL or missing references)
		//IL_0260: 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_02a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e0: Unknown result type (might be due