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);
}
}
}