Decompiled source of Steve And Villager v1.0.0

SteveCC.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using Alexandria.BreakableAPI;
using Alexandria.ItemAPI;
using Alexandria.Misc;
using Alexandria.SoundAPI;
using BepInEx;
using Gungeon;
using Microsoft.CodeAnalysis;
using SteveCC;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Mod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Mod")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d6d7a494-722e-4763-959b-c2d6b6a42b01")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Mod
{
	public class ExamplePassive : PassiveItem
	{
		public static void Register()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			string text = "Example Item Name";
			string text2 = "SteveCC/Resources/example_item_sprite";
			GameObject val = new GameObject(text);
			ExamplePassive examplePassive = val.AddComponent<ExamplePassive>();
			ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null);
			string text3 = "Example Short Desc.";
			string text4 = "Example Long Description\n\nWow this description is really looooooooooong!";
			ItemBuilder.SetupItem((PickupObject)(object)examplePassive, text3, text4, "example");
			ItemBuilder.AddPassiveStatModifier((PickupObject)(object)examplePassive, (StatType)3, 1f, (ModifyMethod)0);
			ItemBuilder.AddPassiveStatModifier((PickupObject)(object)examplePassive, (StatType)4, 1f, (ModifyMethod)0);
			((PickupObject)examplePassive).quality = (ItemQuality)2;
		}

		public override void Pickup(PlayerController player)
		{
			((PassiveItem)this).Pickup(player);
			Plugin.Log("Player picked up " + ((PickupObject)this).DisplayName);
		}

		public override void DisableEffect(PlayerController player)
		{
			Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).DisplayName);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("fenix.etg.stevecc", "Steve CC", "0.0.1")]
	public class Plugin : BaseUnityPlugin
	{
		public const string GUID = "fenix.etg.stevecc";

		public const string NAME = "Steve CC";

		public const string VERSION = "0.0.1";

		public const string TEXT_COLOR = "#00FFFF";

		public void Start()
		{
			ETGModMainBehaviour.WaitForGameManagerStart((Action<GameManager>)GMStart);
		}

		public void GMStart(GameManager g)
		{
			SoundManager.LoadSoundbanksFromAssembly((Assembly)null);
			Looting.Init();
			SplashPot.Init();
			BowGun.Add();
			Emerald.Add();
			HeroOfTheVillage.Init();
			Villager_launcher.Add();
			TotemOfUndying.Add();
			TntCannon.Add();
			Log("Steve CC v0.0.1 started successfully.", "#00FFFF");
		}

		public static void Log(string text, string color = "#FFFFFF")
		{
			ETGModConsole.Log((object)("<color=" + color + ">" + text + "</color>"), false);
		}
	}
}
namespace SteveCC
{
	public class BowGun : GunBehaviour
	{
		public static void Add()
		{
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: 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_0226: 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_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: 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_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Expected O, but got Unknown
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			Gun val = Databases.Items.NewGun("Minecraft Bow", "sccbow");
			Game.Items.Rename("outdated_gun_mods:minecraft_bow", "scc:sccbow");
			((Component)val).gameObject.AddComponent<BowGun>();
			GunExt.SetShortDescription((PickupObject)(object)val, "Bulseye!");
			GunExt.SetLongDescription((PickupObject)(object)val, "A simple ranged weapon crafted of 3 sticks and 3 string\n\ntrusty ranged weaponry");
			GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccbow_idle_001", 1);
			GunExt.SetAnimationFPS(val, val.shootAnimation, 18);
			GunExt.SetAnimationFPS(val, val.reloadAnimation, 5);
			PickupObject byId = PickupObjectDatabase.GetById(8);
			Gun val2 = (Gun)(object)((byId is Gun) ? byId : null);
			GunExt.AddProjectileModuleFrom(val, val2, true, false);
			Projectile val3 = Object.Instantiate<Projectile>(val.DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			((BraveBehaviour)val3).transform.parent = val.barrelOffset;
			val.DefaultModule.ammoCost = 1;
			val.DefaultModule.shootStyle = (ShootStyle)0;
			val.DefaultModule.cooldownTime = 0.4f;
			val.DefaultModule.numberOfShotsInClip = 8;
			val.reloadTime = 1f;
			val.InfiniteAmmo = true;
			val.SetBaseMaxAmmo(0);
			val.PreventNormalFireAudio = true;
			val.DefaultModule.ammoType = (AmmoType)14;
			val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Arrow Ammo", "SteveCC/Resources/CustomGunAmmoTypes/mcarrow_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/mcarrow_clipempty");
			val3.baseData.damage = 5f;
			val3.baseData.speed = 22f;
			val3.baseData.force = 8f;
			val3.baseData.range = 20f;
			val3.AdditionalScaleMultiplier = 1f;
			val.DefaultModule.angleVariance = 5f;
			GunTools.SetProjectileSpriteRight(val3, "bow_arrow", 16, 5, false, (Anchor)4, (int?)16, (int?)7, true, false, (int?)null, (int?)null, (Projectile)null);
			GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccarrow.png", true, 1f, 1f, 0f, 0f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject;
			val3.hitEffects = new ProjectileImpactVFXPool
			{
				suppressHitEffectsIfOffscreen = false,
				suppressMidairDeathVfx = false,
				overrideMidairZHeight = -1,
				overrideEarlyDeathVfx = gameObject,
				overrideMidairDeathVFX = gameObject,
				midairInheritsVelocity = true,
				midairInheritsFlip = true,
				midairInheritsRotation = true,
				alwaysUseMidair = true,
				CenterDeathVFXOnProjectile = false,
				HasProjectileDeathVFX = true
			};
			val.DefaultModule.projectiles[0] = val3;
			((PickupObject)val).quality = (ItemQuality)(-100);
			((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_bow";
			Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY");
		}

		public override void OnPostFired(PlayerController player, Gun gun)
		{
			((GunBehaviour)this).OnPostFired(player, gun);
			gun.PreventNormalFireAudio = true;
			AkSoundEngine.PostEvent("sccbow_fire", ((Component)gun).gameObject);
		}

		public override void OnReloadPressed(PlayerController player, Gun gun, bool manual)
		{
			((GunBehaviour)this).OnReloadPressed(player, gun, manual);
			if (gun.ClipShotsRemaining < gun.ClipCapacity)
			{
				AkSoundEngine.PostEvent("sccbow_reload", ((Component)gun).gameObject);
			}
		}

		public override void PostProcessProjectile(Projectile projectile)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			((GunBehaviour)this).PostProcessProjectile(projectile);
			string[] arrowLandClips = new string[4] { "arrow_land_000", "arrow_land_001", "arrow_land_002", "arrow_land_003" };
			SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody;
			specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate
			{
				AkSoundEngine.PostEvent(arrowLandClips[Random.Range(0, arrowLandClips.Length)], ((Component)projectile).gameObject);
			});
			string[] arrowHitClips = new string[1] { "arrow_hit_000" };
			Projectile obj = projectile;
			obj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(obj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed)
			{
				AkSoundEngine.PostEvent(arrowHitClips[Random.Range(0, arrowHitClips.Length)], ((Component)proj).gameObject);
			});
		}

		public override void Update()
		{
			((GunBehaviour)this).Update();
			if ((Object)(object)base.gun != (Object)null)
			{
				base.gun.PreventNormalFireAudio = true;
			}
		}

		public override void OnPlayerPickup(PlayerController playerOwner)
		{
			((GunBehaviour)this).OnPlayerPickup(playerOwner);
			AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject);
		}
	}
	public class Emerald : GunBehaviour
	{
		public static void Add()
		{
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: 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_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: 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_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Expected O, but got Unknown
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			Gun val = Databases.Items.NewGun("Emerald", "sccemerald");
			Game.Items.Rename("outdated_gun_mods:emerald", "scc:emerald");
			((Component)val).gameObject.AddComponent<Emerald>();
			GunExt.SetShortDescription((PickupObject)(object)val, "Star Trader!");
			GunExt.SetLongDescription((PickupObject)(object)val, "simple monetary currency, now in gun form\n\nwould you like to trade?");
			GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccemerald_idle_001", 1);
			GunExt.SetAnimationFPS(val, val.shootAnimation, 25);
			GunExt.SetAnimationFPS(val, val.reloadAnimation, 2);
			PickupObject byId = PickupObjectDatabase.GetById(8);
			Gun val2 = (Gun)(object)((byId is Gun) ? byId : null);
			GunExt.AddProjectileModuleFrom(val, val2, true, false);
			Projectile val3 = Object.Instantiate<Projectile>(val.DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			((BraveBehaviour)val3).transform.parent = val.barrelOffset;
			val.DefaultModule.ammoCost = 1;
			val.DefaultModule.shootStyle = (ShootStyle)0;
			val.DefaultModule.cooldownTime = 0.3f;
			val.DefaultModule.numberOfShotsInClip = 16;
			val.reloadTime = 0.8f;
			val.InfiniteAmmo = true;
			val.SetBaseMaxAmmo(0);
			val.PreventNormalFireAudio = true;
			val.DefaultModule.ammoType = (AmmoType)14;
			val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Emerald Ammo", "SteveCC/Resources/CustomGunAmmoTypes/mcemerald_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/mcemerald_clipempty");
			val3.baseData.damage = 6f;
			val3.baseData.speed = 22f;
			val3.baseData.force = 8f;
			val3.baseData.range = 20f;
			val3.AdditionalScaleMultiplier = 1f;
			val.DefaultModule.angleVariance = 5f;
			GunTools.SetProjectileSpriteRight(val3, "sccemerald", 16, 16, false, (Anchor)4, (int?)16, (int?)16, true, false, (int?)null, (int?)null, (Projectile)null);
			GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccemerald.png", true, 1f, 1f, 540f, 180f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject;
			val3.hitEffects = new ProjectileImpactVFXPool
			{
				suppressHitEffectsIfOffscreen = false,
				suppressMidairDeathVfx = false,
				overrideMidairZHeight = -1,
				overrideEarlyDeathVfx = gameObject,
				overrideMidairDeathVFX = gameObject,
				midairInheritsVelocity = true,
				midairInheritsFlip = true,
				midairInheritsRotation = true,
				alwaysUseMidair = true,
				CenterDeathVFXOnProjectile = false,
				HasProjectileDeathVFX = true
			};
			val.DefaultModule.projectiles[0] = val3;
			((PickupObject)val).quality = (ItemQuality)(-100);
			((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_emerald";
			Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY");
		}

		public override void OnPostFired(PlayerController player, Gun gun)
		{
			((GunBehaviour)this).OnPostFired(player, gun);
			gun.PreventNormalFireAudio = true;
			AkSoundEngine.PostEvent("Snes_pop", ((Component)gun).gameObject);
		}

		public override void OnReloadPressed(PlayerController player, Gun gun, bool manual)
		{
			((GunBehaviour)this).OnReloadPressed(player, gun, manual);
			if (gun.ClipShotsRemaining < gun.ClipCapacity)
			{
				AkSoundEngine.PostEvent("sccbow_reload", ((Component)gun).gameObject);
			}
		}

		public override void PostProcessProjectile(Projectile projectile)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			((GunBehaviour)this).PostProcessProjectile(projectile);
			string[] arrowLandClips = new string[1] { "Random_break" };
			SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody;
			specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate
			{
				AkSoundEngine.PostEvent(arrowLandClips[Random.Range(0, arrowLandClips.Length)], ((Component)projectile).gameObject);
			});
			string[] arrowHitClips = new string[4] { "Amethyst_Cluster_break1", "Amethyst_Cluster_break2", "Amethyst_Cluster_break3", "Amethyst_Cluster_break4" };
			Projectile obj = projectile;
			obj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(obj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed)
			{
				AkSoundEngine.PostEvent(arrowHitClips[Random.Range(0, arrowHitClips.Length)], ((Component)proj).gameObject);
			});
		}

		public override void Update()
		{
			((GunBehaviour)this).Update();
			if ((Object)(object)base.gun != (Object)null)
			{
				base.gun.PreventNormalFireAudio = true;
			}
		}

		public override void OnPlayerPickup(PlayerController playerOwner)
		{
			((GunBehaviour)this).OnPlayerPickup(playerOwner);
			AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject);
		}
	}
	internal class Looting : PassiveItem
	{
		public float chanceToActivate = 0.3f;

		public int CurrencyToGiveMin = 0;

		public int CurrencyToGiveMax = 4;

		public static void Init()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			string text = "Looting";
			string text2 = "SteveCC/Resources/Looting";
			GameObject val = new GameObject(text);
			Looting looting = val.AddComponent<Looting>();
			ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null);
			string text3 = "Lucky!";
			string text4 = "Enemies drop casings when they die \n \n Last I checked you couldnt put this on a ranged weapon";
			ItemBuilder.SetupItem((PickupObject)(object)looting, text3, text4, "scc");
			((PickupObject)looting).quality = (ItemQuality)(-100);
		}

		public override void Pickup(PlayerController player)
		{
			if (!base.m_pickedUp)
			{
				((PassiveItem)this).Pickup(player);
				player.OnKilledEnemyContext += OnKilledEnemyContext;
			}
		}

		private void OnKilledEnemyContext(PlayerController player, HealthHaver healthHaver)
		{
			//IL_003b: 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_0040: 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)
			if (!(Random.value > chanceToActivate))
			{
				Vector2 position = (((Object)(object)((BraveBehaviour)healthHaver).specRigidbody != (Object)null) ? ((BraveBehaviour)healthHaver).specRigidbody.UnitCenter : Vector2.op_Implicit(((BraveBehaviour)healthHaver).transform.position));
				SpawnCasings(player, position);
			}
		}

		private void SpawnCasings(PlayerController player, Vector2 position)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			int num = Random.Range(CurrencyToGiveMin, CurrencyToGiveMax);
			if (num > 0)
			{
				AkSoundEngine.PostEvent("Play_OBJ_coin_spill_01", ((Component)this).gameObject);
				LootEngine.SpawnCurrency(position, num, false);
			}
		}

		public override DebrisObject Drop(PlayerController player)
		{
			DebrisObject result = ((PassiveItem)this).Drop(player);
			player.OnKilledEnemyContext -= OnKilledEnemyContext;
			return result;
		}
	}
	internal class SplashPot : PlayerItem
	{
		public static void Init()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			string text = "Splash Potion of Health";
			string text2 = "SteveCC/Resources/SplashPot";
			GameObject val = new GameObject(text);
			SplashPot splashPot = val.AddComponent<SplashPot>();
			ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null);
			string text3 = "Local Brewery";
			string text4 = "Heals half a heart of damage\n\nthis feels like cheating";
			ItemBuilder.SetupItem((PickupObject)(object)splashPot, text3, text4, "scc");
			((PickupObject)splashPot).quality = (ItemQuality)(-100);
			ItemBuilder.SetCooldownType((PlayerItem)(object)splashPot, (CooldownType)1, 500f);
			((PlayerItem)splashPot).consumable = false;
		}

		public override void DoEffect(PlayerController user)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_0061: 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_00af: Expected O, but got Unknown
			((BraveBehaviour)user).healthHaver.ApplyHealing(0.5f);
			string[] array = new string[3] { "Glass_dig1", "Glass_dig2", "Glass_dig3" };
			AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)user).gameObject);
			GameObject val = new GameObject("silencer");
			SilencerInstance val2 = val.AddComponent<SilencerInstance>();
			val2.TriggerSilencer(((BraveBehaviour)user).specRigidbody.UnitCenter, 20f, 10f, (GameObject)BraveResources.Load("Global VFX/BlankVFX_Ghost", ".prefab"), 0f, 3f, 3f, 3f, 30f, 3f, 0.25f, user, false, false);
		}
	}
	public class TntCannon : GunBehaviour
	{
		public static ExplosionData tntBoom;

		public static void Add()
		{
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: 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_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: 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_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: 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_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: 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_02bd: Expected O, but got Unknown
			//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
			Gun val = Databases.Items.NewGun("Mini TNT cannon", "tnt_cannon");
			Game.Items.Rename("outdated_gun_mods:mini_tnt_cannon", "scc:tnt_cannon");
			((Component)val).gameObject.AddComponent<TntCannon>();
			GunExt.SetShortDescription((PickupObject)(object)val, "BANG!");
			GunExt.SetLongDescription((PickupObject)(object)val, "TNT powered TNT launcher\n\nbase bustin' fun");
			GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "tnt_cannon_idle_001", 1);
			GunExt.SetAnimationFPS(val, val.shootAnimation, 20);
			GunExt.SetAnimationFPS(val, val.reloadAnimation, 15);
			PickupObject byId = PickupObjectDatabase.GetById(8);
			Gun val2 = (Gun)(object)((byId is Gun) ? byId : null);
			GunExt.AddProjectileModuleFrom(val, val2, true, false);
			Projectile val3 = Object.Instantiate<Projectile>(val.DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			((BraveBehaviour)val3).transform.parent = val.barrelOffset;
			val.DefaultModule.ammoCost = 1;
			val.DefaultModule.shootStyle = (ShootStyle)0;
			val.DefaultModule.cooldownTime = 1f;
			val.DefaultModule.numberOfShotsInClip = 9;
			val.reloadTime = 2f;
			val.InfiniteAmmo = false;
			val.SetBaseMaxAmmo(64);
			val.PreventNormalFireAudio = true;
			val.DefaultModule.ammoType = (AmmoType)14;
			val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("TNT Ammo", "SteveCC/Resources/CustomGunAmmoTypes/TNT_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/TNT_clipempty");
			val3.baseData.damage = 8f;
			val3.baseData.speed = 17f;
			val3.baseData.force = 8f;
			val3.baseData.range = 18f;
			val.DefaultModule.angleVariance = 8f;
			GunTools.SetProjectileSpriteRight(val3, "tnt_grenade", 9, 9, false, (Anchor)4, (int?)9, (int?)9, true, false, (int?)null, (int?)null, (Projectile)null);
			tntBoom = new ExplosionData
			{
				effect = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultSmallExplosionData.effect,
				ignoreList = new List<SpeculativeRigidbody>(),
				ss = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData.ss,
				damageRadius = 2.5f,
				damageToPlayer = 0f,
				doDamage = true,
				damage = 7f,
				doDestroyProjectiles = false,
				doForce = true,
				debrisForce = 15f,
				preventPlayerForce = true,
				explosionDelay = 0.1f,
				usesComprehensiveDelay = false,
				doScreenShake = true,
				playDefaultSFX = true,
				force = 20f,
				breakSecretWalls = true,
				secretWallsRadius = 3.5f
			};
			ExplosiveModifier orAddComponent = GameObjectExtensions.GetOrAddComponent<ExplosiveModifier>(((Component)val3).gameObject);
			orAddComponent.explosionData = tntBoom;
			orAddComponent.doExplosion = true;
			val.DefaultModule.projectiles[0] = val3;
			((PickupObject)val).quality = (ItemQuality)(-100);
			((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_tnt_cannon";
			Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY");
		}

		public override void OnPostFired(PlayerController player, Gun gun)
		{
			((GunBehaviour)this).OnPostFired(player, gun);
			string[] array = new string[1] { "Fuse" };
			gun.PreventNormalFireAudio = true;
			AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject);
		}

		public override void OnReloadPressed(PlayerController player, Gun gun, bool manual)
		{
			((GunBehaviour)this).OnReloadPressed(player, gun, manual);
			string[] array = new string[4] { "Grass_dig1", "Grass_dig2", "Grass_dig3", "Grass_dig4" };
			if (gun.ClipShotsRemaining < gun.ClipCapacity)
			{
				AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject);
			}
		}

		public override void PostProcessProjectile(Projectile projectile)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			((GunBehaviour)this).PostProcessProjectile(projectile);
			string[] landClips = new string[4] { "Explosion1", "Explosion2", "Explosion3", "Explosion4" };
			SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody;
			specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate
			{
				AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)projectile).gameObject);
			});
			Projectile obj = projectile;
			obj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(obj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed)
			{
				AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)proj).gameObject);
			});
		}

		public override void Update()
		{
			((GunBehaviour)this).Update();
			if ((Object)(object)base.gun != (Object)null)
			{
				base.gun.PreventNormalFireAudio = true;
			}
		}

		public override void OnPlayerPickup(PlayerController playerOwner)
		{
			((GunBehaviour)this).OnPlayerPickup(playerOwner);
			AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject);
		}
	}
	public class TotemOfUndying : PlayerItem
	{
		public static int TotemOfUndyingItemID;

		private PlayerController m_owner;

		public static void Add()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			string text = "Totem of Undying";
			GameObject val = new GameObject(text);
			TotemOfUndying totemOfUndying = val.AddComponent<TotemOfUndying>();
			ItemBuilder.AddSpriteToObject(text, "SteveCC/Resources/Totemofundying_icon", val, (Assembly)null);
			ItemBuilder.SetupItem((PickupObject)(object)totemOfUndying, "Postmortal!", "Revives you, but only once (also can revive your friend)", "scc");
			ItemBuilder.SetCooldownType((PlayerItem)(object)totemOfUndying, (CooldownType)1, 0f);
			((PlayerItem)totemOfUndying).consumable = false;
			((PickupObject)totemOfUndying).quality = (ItemQuality)3;
			TotemOfUndyingItemID = ((PickupObject)totemOfUndying).PickupObjectId;
		}

		private void ModifyDamage(HealthHaver player, ModifyDamageEventArgs args)
		{
			if (!((Object)(object)m_owner == (Object)null) && PlayerUtility.NextHitWillKillPlayer(m_owner, args.InitialDamage))
			{
				args.ModifiedDamage = 0f;
				Trigger();
			}
		}

		private void OnPreDeath(Vector2 damageDirection)
		{
			Trigger();
		}

		private void Trigger()
		{
			if (!((Object)(object)m_owner == (Object)null))
			{
				((BraveBehaviour)m_owner).healthHaver.OnPreDeath -= OnPreDeath;
				HealthHaver healthHaver = ((BraveBehaviour)m_owner).healthHaver;
				healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Remove(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(ModifyDamage));
				float maxHealth = ((BraveBehaviour)m_owner).healthHaver.GetMaxHealth();
				((BraveBehaviour)m_owner).healthHaver.ApplyHealing(maxHealth);
				m_owner.ForceBlank(25f, 0.5f, false, true, (Vector2?)null, true, -1f);
				AkSoundEngine.PostEvent("totem_pop", ((Component)m_owner).gameObject);
				m_owner.RemoveActiveItem(((PickupObject)this).PickupObjectId);
			}
		}

		public override void DoEffect(PlayerController user)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			if ((int)GameManager.Instance.CurrentGameType == 1)
			{
				PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(user);
				if ((Object)(object)otherPlayer != (Object)null && ((BraveBehaviour)otherPlayer).healthHaver.IsDead)
				{
					otherPlayer.ResurrectFromBossKill();
					AkSoundEngine.PostEvent("totem_pop", ((Component)user).gameObject);
					user.RemoveActiveItem(((PickupObject)this).PickupObjectId);
				}
			}
		}

		public override bool CanBeUsed(PlayerController user)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			if ((int)GameManager.Instance.CurrentGameType == 1)
			{
				PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(user);
				return (Object)(object)otherPlayer != (Object)null && ((BraveBehaviour)otherPlayer).healthHaver.IsDead;
			}
			return false;
		}

		public override void Pickup(PlayerController player)
		{
			m_owner = player;
			((BraveBehaviour)player).healthHaver.OnPreDeath += OnPreDeath;
			HealthHaver healthHaver = ((BraveBehaviour)player).healthHaver;
			healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Combine(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(ModifyDamage));
			((PlayerItem)this).Pickup(player);
		}

		public override void OnDestroy()
		{
			if ((Object)(object)m_owner != (Object)null)
			{
				((BraveBehaviour)m_owner).healthHaver.OnPreDeath -= OnPreDeath;
				HealthHaver healthHaver = ((BraveBehaviour)m_owner).healthHaver;
				healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Remove(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(ModifyDamage));
			}
			((PlayerItem)this).OnDestroy();
		}
	}
	internal class HeroOfTheVillage : PassiveItem
	{
		public static void Init()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			string text = "Hero Of The Village";
			string text2 = "SteveCC/Resources/Hero_of_the_Village";
			GameObject val = new GameObject(text);
			HeroOfTheVillage heroOfTheVillage = val.AddComponent<HeroOfTheVillage>();
			ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null);
			string text3 = "Hero Of The Village!";
			string text4 = "Reduced trading prices\n\nWould you like to trade?";
			ItemBuilder.SetupItem((PickupObject)(object)heroOfTheVillage, text3, text4, "scc");
			ItemBuilder.AddPassiveStatModifier((PickupObject)(object)heroOfTheVillage, (StatType)13, -0.15f, (ModifyMethod)0);
			((PickupObject)heroOfTheVillage).quality = (ItemQuality)(-100);
		}
	}
	public class Villager_launcher : GunBehaviour
	{
		public static ExplosionData villagerBoom;

		public static void Add()
		{
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: 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_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: 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_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_0274: Expected O, but got Unknown
			//IL_0274: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: 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_02a3: 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_02cd: 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_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: 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_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: 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_033c: Unknown result type (might be due to invalid IL or missing references)
			//IL_034c: Expected O, but got Unknown
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			Gun val = Databases.Items.NewGun("Villager Launcher", "sccvillager");
			Game.Items.Rename("outdated_gun_mods:villager_launcher", "scc:villager_launcher");
			((Component)val).gameObject.AddComponent<Villager_launcher>();
			GunExt.SetShortDescription((PickupObject)(object)val, "Du Du DU du, Villager news");
			GunExt.SetLongDescription((PickupObject)(object)val, "This towering, timber-trimmed, trigger-twitching, tube-bodied testificate throws terrified testificates through the turbulent, thunderous, treacherous skies, the talking launcher itself being Villager #27, tirelessly tossing its teammates until they touch terrain and terminate in tremendous, totally theatrical explosions.\n\nTradition tells that this terrifying, triumphantly terrible tool was thoughtfully tinkered together by Villagers #13 and #4, transforming #27 into the tireless throwing titan that to this day transports testificates toward their thunderous, terminal touchdowns.");
			GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccvillager_idle_001", 1);
			GunExt.SetAnimationFPS(val, val.shootAnimation, 20);
			GunExt.SetAnimationFPS(val, val.reloadAnimation, 15);
			PickupObject byId = PickupObjectDatabase.GetById(39);
			Gun val2 = (Gun)(object)((byId is Gun) ? byId : null);
			GunExt.AddProjectileModuleFrom(val, val2, true, false);
			Projectile val3 = Object.Instantiate<Projectile>(val.DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			((BraveBehaviour)val3).transform.parent = val.barrelOffset;
			val.DefaultModule.ammoCost = 1;
			val.DefaultModule.shootStyle = (ShootStyle)0;
			val.DefaultModule.cooldownTime = 1f;
			val.DefaultModule.numberOfShotsInClip = 1;
			val.reloadTime = 1.5f;
			val.InfiniteAmmo = false;
			val.SetBaseMaxAmmo(128);
			val.PreventNormalFireAudio = true;
			val.DefaultModule.ammoType = (AmmoType)14;
			val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Villager Ammo", "SteveCC/Resources/CustomGunAmmoTypes/villager_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/villager_clipempty");
			val3.baseData.damage = 15f;
			val3.baseData.speed = 17f;
			val3.baseData.force = 8f;
			val3.baseData.range = 20f;
			val.DefaultModule.angleVariance = 2f;
			GunTools.SetProjectileSpriteRight(val3, "sccvillager", 32, 16, false, (Anchor)4, (int?)30, (int?)7, true, false, (int?)null, (int?)null, (Projectile)null);
			GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccvillager.png", true, 1f, 1f, 0f, 0f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject;
			val3.hitEffects = new ProjectileImpactVFXPool
			{
				suppressHitEffectsIfOffscreen = false,
				suppressMidairDeathVfx = false,
				overrideMidairZHeight = -1,
				overrideEarlyDeathVfx = gameObject,
				overrideMidairDeathVFX = gameObject,
				midairInheritsVelocity = true,
				midairInheritsFlip = true,
				midairInheritsRotation = true,
				alwaysUseMidair = true,
				CenterDeathVFXOnProjectile = false,
				HasProjectileDeathVFX = true
			};
			villagerBoom = new ExplosionData
			{
				effect = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultSmallExplosionData.effect,
				ignoreList = new List<SpeculativeRigidbody>(),
				ss = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData.ss,
				damageRadius = 2.5f,
				damageToPlayer = 0f,
				doDamage = true,
				damage = 10f,
				doDestroyProjectiles = false,
				doForce = true,
				debrisForce = 15f,
				preventPlayerForce = true,
				explosionDelay = 0.1f,
				usesComprehensiveDelay = false,
				doScreenShake = true,
				playDefaultSFX = true,
				force = 20f,
				breakSecretWalls = true,
				secretWallsRadius = 3.5f
			};
			ExplosiveModifier orAddComponent = GameObjectExtensions.GetOrAddComponent<ExplosiveModifier>(((Component)val3).gameObject);
			orAddComponent.explosionData = villagerBoom;
			orAddComponent.doExplosion = true;
			val.DefaultModule.projectiles[0] = val3;
			((PickupObject)val).quality = (ItemQuality)(-100);
			((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_villager_launcher";
			Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY");
		}

		public override void OnPostFired(PlayerController player, Gun gun)
		{
			((GunBehaviour)this).OnPostFired(player, gun);
			string[] array = new string[2] { "vn_bang1", "vn_bang2" };
			gun.PreventNormalFireAudio = true;
			AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject);
		}

		public override void OnReloadPressed(PlayerController player, Gun gun, bool manual)
		{
			((GunBehaviour)this).OnReloadPressed(player, gun, manual);
			string[] array = new string[1] { "vn_reloading" };
			if (gun.ClipShotsRemaining < gun.ClipCapacity)
			{
				AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject);
			}
		}

		public override void PostProcessProjectile(Projectile projectile)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Expected O, but got Unknown
			((GunBehaviour)this).PostProcessProjectile(projectile);
			string[] landClips = new string[6] { "vn_explode1", "vn_explode2", "vn_ow2", "vn_ow3", "vn_ow4", "vn_ow5" };
			SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody;
			specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate
			{
				AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)projectile).gameObject);
			});
			string[] hitClips = new string[1] { "vn_yay" };
			Projectile obj = projectile;
			obj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(obj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed)
			{
				AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)proj).gameObject);
				AkSoundEngine.PostEvent(hitClips[Random.Range(0, hitClips.Length)], ((Component)proj).gameObject);
			});
		}

		public override void Update()
		{
			((GunBehaviour)this).Update();
			if ((Object)(object)base.gun != (Object)null)
			{
				base.gun.PreventNormalFireAudio = true;
			}
		}

		public override void OnPlayerPickup(PlayerController playerOwner)
		{
			((GunBehaviour)this).OnPlayerPickup(playerOwner);
			AkSoundEngine.PostEvent("villager_news", ((Component)base.gun).gameObject);
		}
	}
}