Decompiled source of PintoBoy v2.0.3

PintoBoy.dll

Decompiled 4 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using PintoMod;
using PintoMod.Assets.Scripts;
using PintoMod.Assets.Scripts.FacilityDash;
using PintoMod.Assets.Scripts.LethalJumpany;
using PintoMod.Properties;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Pinto_Mod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Pinto_Mod")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ff99ad61-38a5-4085-a181-d080e129d86e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyInformationalVersion("1.0.0+63493ffadcc7e18e83efc4af948140b940a7788b")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
internal class <Module>
{
	static <Module>()
	{
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<float>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<float>();
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<Color32>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals<Color32>();
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<FDHallwayState>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals<FDHallwayState>();
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<FDPlayerState>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals<FDPlayerState>();
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.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;
		}
	}
}
public enum PintoEnemyType
{
	Spider,
	Slime,
	Lootbug
}
public class LJEnemy : NetworkBehaviour
{
	public PintoEnemyType enemyType;

	public float speed = 5f;

	private float distance;

	public LethalJumpany game;

	public UnityEvent<LJEnemy> onDeath = new UnityEvent<LJEnemy>();

	public Animator animator;

	public bool paused = false;

	public bool killedPlayer = false;

	private AudioClip[] movementSounds;

	private float currentMovementSoundTimer = 0f;

	private int currentMovementSoundIndex = 0;

	public NetworkVariable<int> parentNetworkID = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

	private void Awake()
	{
		distance = 10f;
		animator = ((Component)this).GetComponent<Animator>();
	}

	private void Update()
	{
		//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_0064: 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)
		if (!((GrabbableObject)game).isBeingUsed)
		{
			return;
		}
		if (killedPlayer)
		{
			if (enemyType == PintoEnemyType.Spider)
			{
				((Behaviour)animator).enabled = false;
			}
			return;
		}
		float num = speed * Time.deltaTime;
		Transform transform = ((Component)this).transform;
		transform.position += Vector3.left * num;
		distance -= num;
		if (distance < 0f)
		{
			onDeath.Invoke(this);
		}
		currentMovementSoundTimer -= Time.deltaTime;
		if (currentMovementSoundTimer < 0f)
		{
			game.PlaySound(movementSounds[currentMovementSoundIndex]);
			currentMovementSoundIndex++;
			if (currentMovementSoundIndex >= movementSounds.Length)
			{
				currentMovementSoundIndex = 0;
			}
			currentMovementSoundTimer = movementSounds[currentMovementSoundIndex].length;
		}
	}

	private void OnTriggerEnter2D(Collider2D collision)
	{
		if (((Component)collision).gameObject.CompareTag("Player") && (Object)(object)game != (Object)null)
		{
			game.PlayerGotHit();
		}
	}

	public void SetMovementSounds(AudioClip[] audioClips)
	{
		movementSounds = audioClips;
		currentMovementSoundTimer = movementSounds[0].length;
		game.PlaySound(movementSounds[0]);
	}

	protected override void __initializeVariables()
	{
		if (parentNetworkID == null)
		{
			throw new Exception("LJEnemy.parentNetworkID cannot be null. All NetworkVariableBase instances must be initialized.");
		}
		((NetworkVariableBase)parentNetworkID).Initialize((NetworkBehaviour)(object)this);
		((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)parentNetworkID, "parentNetworkID");
		base.NetworkVariableFields.Add((NetworkVariableBase)(object)parentNetworkID);
		((NetworkBehaviour)this).__initializeVariables();
	}

	protected internal override string __getTypeName()
	{
		return "LJEnemy";
	}
}
public enum FadeState
{
	FadeOff,
	FadeOn,
	FadeIn,
	FadeOut
}
public class PintoBoy : GrabbableObject
{
	private AudioSource audioSource;

	private bool isButtonPressing = false;

	protected bool isHoldingButton = false;

	public GameObject cam;

	private Transform trCam2DScene;

	private GameObject modelScreen;

	private Transform cartridgeLocation;

	private Animator animButton;

	private ScanNodeProperties scanNodeProperties;

	private float hideStartHoldTime = 0.2f;

	private float hideStartHoldTimer = 0f;

	public bool pressButton = false;

	private bool spawnScreen = true;

	private Material matRenderTex = null;

	private RenderTexture texRenderTex = null;

	public bool isActive;

	public bool isPaused;

	public bool isInGame;

	public bool wasInitialized = false;

	private Renderer rendModelScreen;

	private float newGameOffset = 20f;

	private Coroutine coroutineButtonBeingPressed;

	public NetworkVariable<float> highScore = new NetworkVariable<float>(0f, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1);

	public NetworkVariable<float> currentScore = new NetworkVariable<float>(0f, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1);

	public NetworkVariable<int> health = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1);

	public NetworkVariable<Color32> color = new NetworkVariable<Color32>(default(Color32), (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1);

	private Color32 bodyColor;

	private bool colorSet = false;

	private bool testcolor = false;

	protected void PintoAwake()
	{
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e8: 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_01fe: Expected O, but got Unknown
		//IL_024a: Unknown result type (might be due to invalid IL or missing references)
		//IL_024f: 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_026a: Unknown result type (might be due to invalid IL or missing references)
		audioSource = ((Component)this).GetComponent<AudioSource>();
		Debug.Log((object)"PintoBoy Awake");
		base.propColliders = (Collider[])(object)new Collider[2];
		base.propColliders[0] = ((Component)this).GetComponent<Collider>();
		base.propColliders[1] = ((Component)((Component)this).transform.Find("ScanNode")).GetComponent<Collider>();
		Debug.Log((object)(((Object)this).name + " propColliders Length:" + base.propColliders.Length));
		Debug.Log((object)(((Object)this).name + " propColliders Length:" + base.propColliders.Length + ", item 0:" + (object)base.propColliders[0]));
		base.mainObjectRenderer = ((Component)((Component)this).transform.Find("Model")).GetComponent<MeshRenderer>();
		base.originalScale = new Vector3(0.25f, 0.25f, 0.25f);
		Debug.Log((object)(((Object)this).name + " mainObjectRenderer: " + ((Object)base.mainObjectRenderer).name));
		scanNodeProperties = ((Component)this).GetComponentInChildren<ScanNodeProperties>();
		if ((Object)(object)scanNodeProperties == (Object)null)
		{
			Debug.Log((object)"scanNodePoperties null af tbh");
		}
		base.useCooldown = 0.1f;
		base.grabbable = true;
		base.parentObject = ((Component)this).transform;
		Debug.Log((object)"scannode start");
		base.grabbableToEnemies = true;
		Debug.Log((object)"scannode done");
		modelScreen = ((Component)((Component)this).transform.Find("Model/Screen")).gameObject;
		animButton = ((Component)((Component)this).transform.Find("Model/Button")).GetComponent<Animator>();
		base.startFallingPosition = new Vector3(0f, 0f, 0f);
		base.targetFloorPosition = new Vector3(0f, 0f, 0f);
		base.insertedBattery = new Battery(false, 1f);
		((GrabbableObject)this).EnableItemMeshes(true);
		cartridgeLocation = ((Component)base.mainObjectRenderer).transform.Find("Cartridge");
		Debug.Log((object)("cartLoc.childcount:" + cartridgeLocation.childCount));
		if (Color32.op_Implicit(color.Value) != Color.black)
		{
			SetBodyColor(color.Value);
		}
	}

	protected void PintoBoyUpdate()
	{
		//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_0018: 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_0197: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fc: 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_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: 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_0110: 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_0271: Unknown result type (might be due to invalid IL or missing references)
		((GrabbableObject)this).Update();
		if (Color32.op_Implicit(color.Value) != Color.black)
		{
			SetBodyColor(color.Value);
		}
		if (((NetworkBehaviour)this).IsServer && (!colorSet || testcolor))
		{
			Debug.Log((object)"PintoBoy: setting body color");
			string[] array = new string[10] { "#FFFFFF", "#575757", "#FF6B6B", "#FFDAB9", "#FFFFCC", "#98FF98", "#008080", "#5999BE", "#CBCBFF", "#D9AEDD" };
			Color32[] array2 = (Color32[])(object)new Color32[array.Length];
			Color val = default(Color);
			for (int i = 0; i < array.Length; i++)
			{
				ColorUtility.TryParseHtmlString(array[i], ref val);
				array2[i] = Color32.op_Implicit(val);
			}
			ChangeBodyColorServerRpc(Color32.op_Implicit(array2[Random.Range(0, array2.Length)]));
			colorSet = true;
			testcolor = false;
		}
		if (spawnScreen)
		{
			SpawnScreen();
			Debug.Log((object)$"PintoBoy: spawning screen. cam: {cam}");
			spawnScreen = false;
			cam.transform.parent = null;
			cam.GetComponent<Camera>().orthographicSize = 1.5f;
			cam.transform.position = ((Component)this).transform.position + Vector3.down * 400f;
			cam.transform.rotation = Quaternion.identity;
			cam.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f);
			if (cam.transform.position.x == 0f || cam.transform.position.z == 0f)
			{
				cam.transform.position = new Vector3(Random.Range(-500f, 500f), cam.transform.position.y, Random.Range(-500f, 500f));
			}
			SetScreenToOffTexture();
			base.isBeingUsed = true;
			TurnOff(checkBeingUsed: true);
		}
		if (!base.isBeingUsed)
		{
			return;
		}
		isHoldingButton = false;
		if (base.isBeingUsed)
		{
			if (isButtonPressing)
			{
				if (hideStartHoldTimer > 0f)
				{
					hideStartHoldTimer -= Time.deltaTime;
				}
				else
				{
					isHoldingButton = true;
				}
			}
			GameUpdate();
		}
		if (pressButton)
		{
			ButtonPress();
			pressButton = false;
		}
	}

	public virtual void GameUpdate()
	{
	}

	public virtual void TurnedOn()
	{
	}

	public virtual void InitializeObjects(Transform gameRoot)
	{
		//IL_001f: 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_0037: Unknown result type (might be due to invalid IL or missing references)
		Debug.Log((object)("Intiailizing PintoBoyGame: " + ((Object)this).name));
		wasInitialized = true;
		gameRoot.localPosition = Vector3.zero;
		gameRoot.localRotation = Quaternion.identity;
		gameRoot.localScale = Vector3.one;
	}

	public override void ItemInteractLeftRight(bool right)
	{
		((GrabbableObject)this).ItemInteractLeftRight(right);
		if (!right)
		{
			ToggleOnOff();
		}
	}

	public override void DiscardItem()
	{
		((GrabbableObject)this).DiscardItem();
		base.isBeingUsed = false;
	}

	public override void EquipItem()
	{
		((GrabbableObject)this).EquipItem();
		base.playerHeldBy.equippedUsableItemQE = true;
	}

	public virtual void ButtonPress()
	{
	}

	public virtual void ButtonRelease(float timeHeld)
	{
	}

	public override void UseUpBatteries()
	{
		Debug.Log((object)"PintoBoy battery used up");
		((GrabbableObject)this).UseUpBatteries();
		TurnOff(checkBeingUsed: false);
	}

	private void TogglePause()
	{
		if (isPaused)
		{
			UnPause();
		}
		else
		{
			Pause();
		}
	}

	private void Pause()
	{
		if (base.isBeingUsed)
		{
			isPaused = true;
			SetScreenToOffTexture();
			audioSource.Stop();
		}
	}

	private void UnPause()
	{
		if (!base.isBeingUsed)
		{
			isPaused = false;
		}
	}

	private void ToggleOnOff()
	{
		if (!base.isBeingUsed)
		{
			TurnOn();
		}
		else
		{
			TurnOff(checkBeingUsed: true);
		}
	}

	private void TurnOff(bool checkBeingUsed)
	{
		if (!(!base.isBeingUsed && checkBeingUsed))
		{
			base.isBeingUsed = false;
			SetScreenToOffTexture();
			audioSource.Stop();
			ResetGame();
		}
	}

	private void TurnOn()
	{
		if (!base.isBeingUsed)
		{
			base.isBeingUsed = true;
			SetScreenToRenderTexture();
		}
	}

	public override void ItemActivate(bool used, bool buttonDown = true)
	{
		((GrabbableObject)this).ItemActivate(used, buttonDown);
		isButtonPressing = buttonDown;
		if (buttonDown)
		{
			animButton.SetBool("Press", true);
			ButtonPress();
			if (coroutineButtonBeingPressed != null)
			{
				((MonoBehaviour)this).StopCoroutine(coroutineButtonBeingPressed);
			}
			coroutineButtonBeingPressed = ((MonoBehaviour)this).StartCoroutine(ButtonBeingPressed());
		}
	}

	private IEnumerator ButtonBeingPressed()
	{
		Debug.Log((object)("Pinto Button being pressed" + Time.time));
		float buttonStartPress = Time.time;
		yield return (object)new WaitUntil((Func<bool>)(() => !isButtonPressing || !base.isHeld));
		Debug.Log((object)("Pinto Button end press " + Time.deltaTime));
		animButton.SetBool("Press", false);
		if (base.isBeingUsed)
		{
			ButtonRelease(Time.time - buttonStartPress);
		}
	}

	public void PlaySound(AudioClip clip)
	{
		audioSource.PlayOneShot(clip);
	}

	public void StopSounds()
	{
		audioSource.Stop();
	}

	public void MakeScreenNOTSpawnable()
	{
		spawnScreen = false;
	}

	[ServerRpc]
	private void SpawnScreenServerRpc()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2495713638u, val, (RpcDelivery)0);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2495713638u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			Debug.Log((object)"SpawnScreenServerRpc Called");
			int currentId = Pinto_ModBase.Instance.Value.currentId;
			PintoBoy[] array = (PintoBoy[])(object)Object.FindObjectsByType(typeof(PintoBoy), (FindObjectsSortMode)0);
			for (int i = currentId; i < array.Length + currentId; i++)
			{
				Debug.Log((object)"SpawnScreenServerRpc Called");
			}
			Pinto_ModBase.Instance.Value.currentId += array.Length;
			SpawnScreenClientRpc();
		}
	}

	[ClientRpc]
	private void SpawnScreenClientRpc()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: 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)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(491405224u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 491405224u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				Debug.Log((object)"SpawnScreenClientRpc Called");
				SpawnScreen();
			}
		}
	}

	private void SpawnScreen()
	{
		Debug.Log((object)"Trying spawn screen");
		if (!((Object)(object)cam != (Object)null))
		{
			Debug.Log((object)"Spawning Screen");
			cam = ((Component)((Component)this).transform.Find("2D Cam")).gameObject;
			cam.AddComponent<PintoCam>();
			if ((Object)(object)cam == (Object)null)
			{
				Debug.Log((object)"Screen in Pintoboy is null even after instantiate");
			}
			SetScreenToRenderTexture();
			trCam2DScene = cam.transform.Find("2D Scene");
			Debug.Log((object)"Initializing currentGame");
			InitializeObjects(cam.transform.Find("2D Scene/Game"));
			spawnScreen = false;
		}
	}

	private void GetChildRecursive(Transform obj, int level)
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Expected O, but got Unknown
		if ((Object)null == (Object)(object)obj)
		{
			return;
		}
		foreach (Transform item in ((Component)obj).transform)
		{
			Transform val = item;
			if (!((Object)null == (Object)(object)val))
			{
				Debug.Log((object)string.Concat(string.Concat(Enumerable.Repeat("*", level)), ((Object)obj).name));
				GetChildRecursive(((Component)val).transform, level++);
			}
		}
	}

	private void SetScreenToRenderTexture()
	{
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		Debug.Log((object)"SetScreenRendTex: checking if texRenderTex null");
		if ((Object)(object)texRenderTex == (Object)null)
		{
			Debug.Log((object)("SetScreenRendTex: texRenderTex is null. Setting. cam:" + (object)cam));
			texRenderTex = new RenderTexture(120, 120, 16);
			((Object)texRenderTex).name = "PintoBoyScreen";
			((Texture)texRenderTex).filterMode = (FilterMode)0;
			cam.GetComponent<Camera>().targetTexture = texRenderTex;
		}
		Debug.Log((object)"SetScreenRendTex: checking if matRenderTex null");
		if ((Object)(object)matRenderTex == (Object)null)
		{
			Debug.Log((object)"SetScreenRendTex: matRenderTex is null. Setting");
			matRenderTex = Object.Instantiate<Material>(Pinto_ModBase.matOnScreen);
			matRenderTex.SetTexture("_MainTex", (Texture)(object)texRenderTex);
			matRenderTex.mainTexture = (Texture)(object)texRenderTex;
		}
		Debug.Log((object)"SetScreenRendTex: checking if rendModelScreen is null");
		if ((Object)(object)rendModelScreen == (Object)null)
		{
			Debug.Log((object)"SetScreenRendTex: rendModelScreen is null");
			rendModelScreen = modelScreen.GetComponent<Renderer>();
		}
		Debug.Log((object)"SetScreenRendTex: setting rendModelScreen to matRenderTex");
		rendModelScreen.material = matRenderTex;
	}

	private void SetScreenToOffTexture()
	{
		if ((Object)(object)rendModelScreen == (Object)null)
		{
			rendModelScreen = modelScreen.GetComponent<Renderer>();
		}
		rendModelScreen.material = Pinto_ModBase.matOffScreen;
		ResetGame();
	}

	public virtual void ResetGame()
	{
	}

	[ServerRpc]
	private void ChangeBodyColorServerRpc(Color newColor)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Invalid comparison between Unknown and I4
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Unknown result type (might be due to invalid IL or missing references)
		//IL_015f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: 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_00b3: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1860633010u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe(ref newColor);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1860633010u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			((Renderer)base.mainObjectRenderer).materials[0].color = newColor;
			Debug.Log((object)("PintoBoy: server body color to:" + ((object)(Color)(ref newColor)).ToString()));
			color.Value = Color32.op_Implicit(newColor);
			SetBodyColorClientRpc(newColor.r, newColor.g, newColor.b);
		}
	}

	[ClientRpc]
	private void SetBodyColorClientRpc(float r, float g, float b)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(724987829u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref r, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref g, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref b, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 724987829u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				Debug.Log((object)"PintoBoy: client body color");
				((Renderer)base.mainObjectRenderer).materials[0].color = new Color(r, g, b);
			}
		}
	}

	private void SetBodyColor(Color32 newColor)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		((Renderer)base.mainObjectRenderer).materials[0].color = Color32.op_Implicit(newColor);
	}

	protected override void __initializeVariables()
	{
		if (highScore == null)
		{
			throw new Exception("PintoBoy.highScore cannot be null. All NetworkVariableBase instances must be initialized.");
		}
		((NetworkVariableBase)highScore).Initialize((NetworkBehaviour)(object)this);
		((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)highScore, "highScore");
		((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)highScore);
		if (currentScore == null)
		{
			throw new Exception("PintoBoy.currentScore cannot be null. All NetworkVariableBase instances must be initialized.");
		}
		((NetworkVariableBase)currentScore).Initialize((NetworkBehaviour)(object)this);
		((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)currentScore, "currentScore");
		((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)currentScore);
		if (health == null)
		{
			throw new Exception("PintoBoy.health cannot be null. All NetworkVariableBase instances must be initialized.");
		}
		((NetworkVariableBase)health).Initialize((NetworkBehaviour)(object)this);
		((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)health, "health");
		((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)health);
		if (color == null)
		{
			throw new Exception("PintoBoy.color cannot be null. All NetworkVariableBase instances must be initialized.");
		}
		((NetworkVariableBase)color).Initialize((NetworkBehaviour)(object)this);
		((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)color, "color");
		((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)color);
		((GrabbableObject)this).__initializeVariables();
	}

	[RuntimeInitializeOnLoadMethod]
	internal static void InitializeRPCS_PintoBoy()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Expected O, but got Unknown
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Expected O, but got Unknown
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Expected O, but got Unknown
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Expected O, but got Unknown
		NetworkManager.__rpc_func_table.Add(2495713638u, new RpcReceiveHandler(__rpc_handler_2495713638));
		NetworkManager.__rpc_func_table.Add(491405224u, new RpcReceiveHandler(__rpc_handler_491405224));
		NetworkManager.__rpc_func_table.Add(1860633010u, new RpcReceiveHandler(__rpc_handler_1860633010));
		NetworkManager.__rpc_func_table.Add(724987829u, new RpcReceiveHandler(__rpc_handler_724987829));
	}

	private static void __rpc_handler_2495713638(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0023: 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_0029: 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_008c: 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_0055: Invalid comparison between Unknown and I4
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
		{
			if ((int)networkManager.LogLevel <= 1)
			{
				Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
			}
		}
		else
		{
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((PintoBoy)(object)target).SpawnScreenServerRpc();
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_491405224(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0029: 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)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			target.__rpc_exec_stage = (__RpcExecStage)2;
			((PintoBoy)(object)target).SpawnScreenClientRpc();
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_1860633010(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0023: 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_0029: 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_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: 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_0055: Invalid comparison between Unknown and I4
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
		{
			if ((int)networkManager.LogLevel <= 1)
			{
				Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
			}
		}
		else
		{
			Color newColor = default(Color);
			((FastBufferReader)(ref reader)).ReadValueSafe(ref newColor);
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((PintoBoy)(object)target).ChangeBodyColorServerRpc(newColor);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_724987829(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_002f: 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_004a: 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_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			float r = default(float);
			((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref r, default(ForPrimitives));
			float g = default(float);
			((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref g, default(ForPrimitives));
			float b = default(float);
			((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref b, default(ForPrimitives));
			target.__rpc_exec_stage = (__RpcExecStage)2;
			((PintoBoy)(object)target).SetBodyColorClientRpc(r, g, b);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	protected internal override string __getTypeName()
	{
		return "PintoBoy";
	}
}
namespace PintoMod
{
	[BepInPlugin("Pinta.PintoBoy", "PintoBoy", "2.0.0")]
	public class Pinto_ModBase : BaseUnityPlugin
	{
		public const string MODGUID = "Pinta.PintoBoy";

		public const string MODNAME = "PintoBoy";

		public const string MODVERSION = "2.0.0";

		private readonly Harmony harmony = new Harmony("Pinta.PintoBoy");

		public ManualLogSource logger;

		public static ConfigEntry<float> config_PintoBoyLethalJumpanyRarity;

		public static ConfigEntry<float> config_PintoBoyFacilityDashRarity;

		public static ConfigEntry<float> config_PintoBoy;

		public static readonly Lazy<Pinto_ModBase> Instance = new Lazy<Pinto_ModBase>(() => new Pinto_ModBase());

		public static AssetBundle pintoBundle;

		public static Item itemPintoBoyPrefab;

		public static Material matOffScreen;

		public static Material matOnScreen;

		public static Item itemPintoBoyLJ;

		public static Item itemLJCartridgePrefab;

		public static LethalJumpany gameLethalJumpanyPrefab;

		public static GameObject ljSpiderPrefab;

		public static GameObject ljSlimePrefab;

		public static GameObject ljLootbugPrefab;

		public static Item itemPintoBoyFD;

		public static Item itemFDCartridgePrefab;

		public static FacilityDash gameFacilityDashPrefab;

		public static GameObject fdBrackenPrefab;

		public static GameObject fdBunkerSpiderPrefab;

		public static GameObject fdLootBugPrefab;

		public static GameObject fdNutcrackerPrefab;

		public static GameObject fdSnareFleaPrefab;

		public static GameObject fdThumperPrefab;

		public int currentId = 0;

		public static string basePath = "assets/pintoboy";

		public static string devicePath = basePath + "/device";

		public static string gamesPath = basePath + "/games";

		public static string ljBasePath = gamesPath + "/lethal jumpany";

		public static string ljAudioPath = ljBasePath + "/audio/";

		public static string ljSpritesPath = ljBasePath + "/2d";

		public static string fdBasePath = gamesPath + "/facility dash";

		public static string fdAudioPath = fdBasePath + "/audio/";

		public static string fdSpritesPath = fdBasePath + "/sprites/monsters";

		private void Awake()
		{
			logger = Logger.CreateLogSource("Pinto Mod");
			ConfigSetup();
			LoadBundle();
			SetVariables();
			harmony.PatchAll(typeof(Pinto_ModBase));
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
			Debug.Log((object)"Pintoboy initialized");
		}

		private void ConfigSetup()
		{
			config_PintoBoyLethalJumpanyRarity = ((BaseUnityPlugin)this).Config.Bind<float>("Lethal Jumpany PintoBoy", "Value", 25f, "How rare is the PintoBoy with Lethal Jumpany");
			config_PintoBoyFacilityDashRarity = ((BaseUnityPlugin)this).Config.Bind<float>("Facility Dash PintoBoy", "Value", 12f, "How rare is the PintoBoy with Facility Dash");
		}

		private void SetVariables()
		{
			NetworkPrefabs.RegisterNetworkPrefab(itemPintoBoyPrefab.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(itemPintoBoyLJ.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(itemPintoBoyFD.spawnPrefab);
			Items.RegisterScrap(itemPintoBoyLJ, (int)config_PintoBoyLethalJumpanyRarity.Value, (LevelTypes)(-1));
			Items.RegisterScrap(itemPintoBoyFD, (int)config_PintoBoyFacilityDashRarity.Value, (LevelTypes)(-1));
		}

		private void LoadBundle()
		{
			pintoBundle = AssetBundle.LoadFromMemory(Resources.pintobund);
			if ((Object)(object)pintoBundle == (Object)null)
			{
				throw new Exception("Failed to load Pinto Bundle!");
			}
			itemPintoBoyPrefab = pintoBundle.LoadAsset<Item>(basePath + "/pintoboy.asset");
			if ((Object)(object)itemPintoBoyPrefab == (Object)null)
			{
				throw new Exception("Failed to load Pinto Item!");
			}
			PintoBoy pintoBoy = itemPintoBoyPrefab.spawnPrefab.AddComponent<PintoBoy>();
			if ((Object)(object)pintoBoy == (Object)null)
			{
				throw new Exception("Failed to load Pinto Boy!");
			}
			((GrabbableObject)pintoBoy).itemProperties = itemPintoBoyPrefab;
			matOffScreen = pintoBundle.LoadAsset<Material>(devicePath + "/off screen.mat");
			if ((Object)(object)matOffScreen == (Object)null)
			{
				throw new Exception("Failed to load off screen material!");
			}
			matOnScreen = pintoBundle.LoadAsset<Material>("Screen Mat.mat");
			if ((Object)(object)matOnScreen == (Object)null)
			{
				throw new Exception("Failed to load Screen Mat material!");
			}
			GameObject val = pintoBundle.LoadAsset<GameObject>(ljSpritesPath + "/spider/spider.prefab");
			if ((Object)(object)val == (Object)null)
			{
				throw new Exception("Failed to load Spider Prefab Object!");
			}
			val.AddComponent<LJEnemy>();
			ljSpiderPrefab = val;
			if ((Object)(object)ljSpiderPrefab == (Object)null)
			{
				throw new Exception("Failed to load Spider Prefab!");
			}
			GameObject val2 = pintoBundle.LoadAsset<GameObject>(ljSpritesPath + "/slime/slime.prefab");
			if ((Object)(object)val2 == (Object)null)
			{
				throw new Exception("Failed to load Slime Prefab Object!");
			}
			val2.AddComponent<LJEnemy>();
			ljSlimePrefab = val2;
			if ((Object)(object)ljSlimePrefab == (Object)null)
			{
				throw new Exception("Failed to load Slime Prefab!");
			}
			GameObject val3 = pintoBundle.LoadAsset<GameObject>(ljSpritesPath + "/loot bug/loot bug.prefab");
			if ((Object)(object)val3 == (Object)null)
			{
				throw new Exception("Failed to load Lootbug Prefab Object!");
			}
			val3.AddComponent<LJEnemy>();
			ljLootbugPrefab = val3;
			if ((Object)(object)ljLootbugPrefab == (Object)null)
			{
				throw new Exception("Failed to load Lootbug Prefab!");
			}
			string text = "";
			AudioClip audioClip = GetAudioClip(fdAudioPath + "67_knock (Player hit)");
			text = "Bracken";
			fdBrackenPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdBrackenPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			fdBrackenPrefab.AddComponent<FD_Bracken>();
			text = "Bunker Spider";
			fdBunkerSpiderPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdBunkerSpiderPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			fdBunkerSpiderPrefab.AddComponent<FD_BunkerSpider>();
			text = "Loot Bug";
			fdLootBugPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdLootBugPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			fdLootBugPrefab.AddComponent<FD_LootBug>();
			text = "Snare Flea";
			fdSnareFleaPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdSnareFleaPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			fdSnareFleaPrefab.AddComponent<FD_SnareFlea>();
			text = "Thumper";
			fdThumperPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdThumperPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			FD_Thumper fD_Thumper = fdThumperPrefab.AddComponent<FD_Thumper>();
			fD_Thumper.acEntrance = GetAudioClip(fdAudioPath + "monster sounds/thumper yell");
			fD_Thumper.acDefaultAttack = audioClip;
			text = "Nutcracker";
			fdNutcrackerPrefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + text + ".prefab");
			if ((Object)(object)fdNutcrackerPrefab == (Object)null)
			{
				throw new Exception("PintoBoy FD: Failed to load " + text + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + text + " Prefab"));
			fdNutcrackerPrefab.AddComponent<FD_Nutcracker>();
			itemPintoBoyLJ = pintoBundle.LoadAsset<Item>(basePath + "/pintoboy lj.asset");
			if ((Object)(object)itemPintoBoyLJ == (Object)null)
			{
				throw new Exception("Failed to load Pinto LJ Item!");
			}
			PintoBoy pintoBoy2 = itemPintoBoyLJ.spawnPrefab.AddComponent<LethalJumpany>();
			if ((Object)(object)pintoBoy2 == (Object)null)
			{
				throw new Exception("Failed to load Pinto Boy!");
			}
			((GrabbableObject)pintoBoy2).itemProperties = itemPintoBoyLJ;
			itemPintoBoyFD = pintoBundle.LoadAsset<Item>(basePath + "/pintoboy fd.asset");
			if ((Object)(object)itemPintoBoyFD == (Object)null)
			{
				throw new Exception("Failed to load Pinto FD Item!");
			}
			FacilityDash facilityDash = itemPintoBoyFD.spawnPrefab.AddComponent<FacilityDash>();
			if ((Object)(object)facilityDash == (Object)null)
			{
				throw new Exception("Failed to load Pinto Boy!");
			}
			((GrabbableObject)facilityDash).itemProperties = itemPintoBoyFD;
			facilityDash.prefabBracken = fdBrackenPrefab;
			facilityDash.prefabBunkerSpider = fdBunkerSpiderPrefab;
			facilityDash.prefabLootBug = fdLootBugPrefab;
			facilityDash.prefabNutcracker = fdNutcrackerPrefab;
			facilityDash.prefabSnareFlea = fdSnareFleaPrefab;
			facilityDash.prefabThumper = fdThumperPrefab;
		}

		private GameObject LoadFDPrefab(MonoBehaviour component, string prefabName)
		{
			GameObject val = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + prefabName + ".prefab");
			if ((Object)(object)val == (Object)null)
			{
				throw new Exception("Failed to load " + prefabName + " Prefab Object!");
			}
			Debug.Log((object)("PintoBoy FD: Loading " + prefabName + " Prefab. Component type is:" + ((object)component).GetType()));
			val.AddComponent(((object)component).GetType());
			return val;
		}

		private void LoadPrefabObject(GameObject prefab, MonoBehaviour component, string prefabName)
		{
			prefab = pintoBundle.LoadAsset<GameObject>(fdSpritesPath + "/" + prefabName + ".prefab");
			if ((Object)(object)prefab == (Object)null)
			{
				throw new Exception("Failed to load " + prefabName + " Prefab Object!");
			}
			prefab.AddComponent(((object)component).GetType());
			if ((Object)(object)prefab == (Object)null)
			{
				throw new Exception("Failed to load " + prefabName + " Prefab!");
			}
		}

		public static AudioClip GetAudioClip(string path)
		{
			AudioClip val = pintoBundle.LoadAsset<AudioClip>(path + ".wav");
			if ((Object)(object)val == (Object)null)
			{
				val = pintoBundle.LoadAsset<AudioClip>(path + ".mp3");
			}
			if ((Object)(object)val == (Object)null)
			{
				throw new Exception("Failed to load Audio Clip " + path);
			}
			return val;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(RoundManager), "CollectNewScrapForThisRound")]
		public static void PintoBoyAddedToShip(GrabbableObject scrapObject)
		{
			if (scrapObject is PintoBoy)
			{
				PintoBoy pintoBoy = (PintoBoy)(object)scrapObject;
				pintoBoy.MakeScreenNOTSpawnable();
				Debug.Log((object)"PintoBoy added to ship and screen not spawned");
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")]
		public static void DespawnPintoBoyScreens(RoundManager __instance, ref bool despawnAllItems)
		{
			if (!((NetworkBehaviour)__instance).IsServer)
			{
				return;
			}
			PintoBoy[] array = Object.FindObjectsOfType<PintoBoy>();
			for (int i = 0; i < array.Length; i++)
			{
				if (despawnAllItems || (!((GrabbableObject)array[i]).isHeld && !((GrabbableObject)array[i]).isInShipRoom))
				{
					if (((GrabbableObject)array[i]).isHeld && (Object)(object)((GrabbableObject)array[i]).playerHeldBy != (Object)null)
					{
						((GrabbableObject)array[i]).playerHeldBy.DropAllHeldItemsAndSync();
					}
					NetworkObject component = ((Component)array[i]).gameObject.GetComponent<NetworkObject>();
					if ((Object)(object)component != (Object)null && component.IsSpawned)
					{
						Object.Destroy((Object)(object)array[i].cam.gameObject);
						((Component)array[i]).gameObject.GetComponent<NetworkObject>().Despawn(true);
					}
					else
					{
						Debug.Log((object)("Error/warning: prop '" + ((Object)((Component)array[i]).gameObject).name + "' was not spawned or did not have a NetworkObject component! Skipped despawning and destroyed it instead."));
						Object.Destroy((Object)(object)array[i].cam.gameObject);
						Object.Destroy((Object)(object)((Component)array[i]).gameObject);
					}
				}
				else
				{
					((GrabbableObject)array[i]).scrapPersistedThroughRounds = true;
				}
				if (__instance.spawnedSyncedObjects.Contains(((Component)array[i]).gameObject))
				{
					__instance.spawnedSyncedObjects.Remove(((Component)array[i]).gameObject);
				}
			}
		}
	}
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resource
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("PintoMod.Resource", typeof(Resource).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resource()
		{
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "Pinto Mod";

		public const string PLUGIN_NAME = "Pinto Mod";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace PintoMod.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("PintoMod.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal static byte[] pintobund
		{
			get
			{
				object @object = ResourceManager.GetObject("pintobund", resourceCulture);
				return (byte[])@object;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace PintoMod.Assets.Scripts
{
	[HarmonyPatch(typeof(GrabbableObject))]
	public static class GrabbableObject_Patches
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(GrabbableObject), "Start")]
		private static void Start(GrabbableObject __instance)
		{
			if (((Object)__instance).name == "Pinto")
			{
				Debug.Log((object)"Instance is Pinto");
				PintoBoy pintoBoy = (PintoBoy)(object)__instance;
			}
		}
	}
	[HarmonyPatch]
	public class NetworkHandler
	{
		private static GameObject pintoObject;

		private static GameObject ljObject;

		[HarmonyPrefix]
		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		private static void Init()
		{
			Debug.Log((object)"Pintoboy NetworkHandler Init starting");
			Debug.Log((object)"Pintoboy NetworkHandler Init ending");
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "Awake")]
		private static void SpawnNetworkPrefab()
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (NetworkManager.Singleton.IsServer)
				{
					Debug.Log((object)"Trying to spawn PintoBoy test objs");
					pintoObject = Object.Instantiate<GameObject>(Pinto_ModBase.itemPintoBoyPrefab.spawnPrefab);
					pintoObject.GetComponent<NetworkObject>().Spawn(true);
					pintoObject.transform.position = new Vector3(3.0792f, 0.2899f, -14.6918f);
					Debug.Log((object)"PintoBoy test obj 1 hopefully spawned");
					ljObject = Object.Instantiate<GameObject>(Pinto_ModBase.itemLJCartridgePrefab.spawnPrefab);
					ljObject.GetComponent<NetworkObject>().Spawn(true);
					ljObject.transform.position = new Vector3(2.6302f, 0.2875f, -14.4498f);
					Debug.Log((object)"PintoBoy test objs hopefully spawned");
				}
			}
			catch
			{
				Pinto_ModBase.Instance.Value.logger.LogError((object)"Failed to instantiate network prefab!");
			}
		}
	}
	public abstract class PintoBoyGame : MonoBehaviour
	{
		public PintoBoy pintoBoy;

		public bool isActive;

		public bool isPaused;

		public bool isInGame;

		public bool isHoldingButton;

		public bool wasInitialized = false;

		public virtual void ButtonPress()
		{
		}

		public virtual void ButtonRelease(float timeHeld)
		{
		}

		public virtual void GameUpdate()
		{
		}

		public virtual void UnPause()
		{
		}

		public virtual void Pause()
		{
		}

		public virtual void TurnedOff()
		{
		}

		public virtual void TurnedOn()
		{
		}

		public virtual void InitializeObjects(Transform gameRoot)
		{
			Debug.Log((object)("Intiailizing PintoBoyGame: " + ((Object)this).name));
			wasInitialized = true;
		}

		public virtual void TakenOutPintoBoy()
		{
			pintoBoy = null;
			DisableChildren();
		}

		public virtual void DisableChildren()
		{
			for (int i = 0; i < ((Component)this).transform.childCount; i++)
			{
				((Component)((Component)this).transform.GetChild(i)).gameObject.SetActive(false);
			}
		}

		public virtual void EnableChildren()
		{
			for (int i = 0; i < ((Component)this).transform.childCount; i++)
			{
				((Component)((Component)this).transform.GetChild(i)).gameObject.SetActive(true);
			}
		}

		public virtual void StopSounds()
		{
			pintoBoy.StopSounds();
		}

		public void PlaySound(AudioClip clip)
		{
			pintoBoy.PlaySound(clip);
		}
	}
	public class PintoCam : MonoBehaviour
	{
		private int timeToCheck = 30;

		private float timer = 2f;

		private Collider col;

		private void Awake()
		{
			CheckColliders();
		}

		private void Update()
		{
			if (timer > 0f)
			{
				timer -= Time.deltaTime;
				return;
			}
			CheckColliders();
			timer = timeToCheck;
		}

		private void CheckColliders()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"PintoBoy Cam: checking if any PintoBoy Cams intersect with this one");
			Collider[] array = Physics.OverlapBox(((Component)this).transform.position, Vector3.one * 10f);
			if ((Object)(object)col == (Object)null)
			{
				col = ((Component)this).GetComponent<Collider>();
			}
			for (int i = 0; i < array.Length; i++)
			{
				if ((Object)(object)array[i] != (Object)(object)col)
				{
					CheckCollider(array[i]);
				}
			}
		}

		private void CheckCollider(Collider collision)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: 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_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"PintoBoy Cam: moving to stop intersecting");
			Vector3 val;
			if (((Component)collision).transform.position.x > ((Component)this).transform.position.x)
			{
				val = Vector3.right * (-50f - Random.value);
				Debug.Log((object)("PintoBoy Cam: moving " + ((object)(Vector3)(ref val)).ToString()));
				((Component)this).transform.position = ((Component)this).transform.position + Vector3.right * (-50f - Random.value);
				CheckColliders();
			}
			else
			{
				val = Vector3.right * (50f + Random.value);
				Debug.Log((object)("PintoBoy Cam: moving " + ((object)(Vector3)(ref val)).ToString()));
				((Component)this).transform.position = ((Component)this).transform.position + Vector3.right * (50f + Random.value);
				CheckColliders();
			}
		}
	}
}
namespace PintoMod.Assets.Scripts.LethalJumpany
{
	public enum LJState
	{
		MainMenu,
		InGame,
		Paused,
		Lost
	}
	public class LethalJumpany : PintoBoy
	{
		private Animator fadeAnim;

		private LJState gameState = LJState.MainMenu;

		private Transform mainMenu;

		private Animator mainMenuAnim;

		private float mainmenuTime = 2f;

		private float mainmenuTimer = 0f;

		private float mainmenuWaitTime = 1.5f;

		private float mainmenuWaitTimer = 0f;

		private string SelectedString = "Selected";

		private string FadeString = "Fade";

		private string DoAnimString = "DoAnim";

		private Transform inGame;

		private Vector3 playerStart;

		private GameObject player;

		private Rigidbody2D playerRb;

		private Collider2D playerCol;

		private Animator playerAnim;

		private SpriteRenderer playerSprite;

		private int[] playerPositions = new int[4] { 0, 5, 10, 15 };

		private Vector3 brackenStart;

		private GameObject bracken;

		private Animator brackenAnim;

		private Collider2D groundCol;

		private Animator groundAnim;

		private string InAirString = "InAir";

		private string DeathString = "Death";

		private string ResetString = "Reset";

		public float jumpHeight = 8f;

		public float fastFallSpeed = 15f;

		public float rayCastDistance = 0.25f;

		public float rayCastOffset = -0.05f;

		private bool isGrounded = false;

		private bool doOnce = false;

		private Transform paused;

		private Transform playerSpawnpoint;

		private Transform topSpawnpoint;

		private Transform midSpawnpoint;

		private Transform bottomSpawnpoint;

		private TMP_Text scoreText;

		private TMP_Text endScreenText;

		public GameObject spiderPrefab;

		public GameObject lootbugPrefab;

		public GameObject slimePrefab;

		private float spiderSpeed = 2.5f;

		private float lootbugSpeed = 3f;

		private float slimeSpeed = 2f;

		private float spiderLootBugSpawnChance = 0.4f;

		private float spiderLootBugDistance = 2.75f;

		private float scoreIncreaseRate = 15f;

		private float increaseSpeedAddition = 0.25f;

		private float increaseAdditionRate = 100f;

		private int speedAdditionMultiplier = 1;

		private int speedAdditionMultiplierDefault = 1;

		private int timesIncreased = 0;

		private float spawnEnemyEveryMin = 40f;

		private float spawnEnemyEveryMax = 100f;

		private float lastTimeSpawned = 0f;

		private List<LJEnemy> enemies = new List<LJEnemy>();

		private bool invincible = false;

		private float invincibleTime = 2f;

		private float invincibleTimer = 0f;

		private bool dead;

		private bool deadHitGround;

		private bool deadAnimStarted;

		private bool endScreenShown;

		private float deathAnimTime = 2.5f;

		private float deathAnimTimer = 0f;

		private int deathAnimIndex = 0;

		public AudioClip acPlayerStep1;

		public AudioClip acPlayerStep2;

		public AudioClip acPlayerJump;

		public AudioClip acSnapNeck;

		public AudioClip acSnapNeckLand;

		public AudioClip acSpiderStep1;

		public AudioClip acSpiderStep2;

		public AudioClip acSpiderStep3;

		public AudioClip acSpiderStep4;

		public AudioClip acLootbugStep;

		public AudioClip acSlimeStep;

		public AudioClip acConfirm;

		public AudioClip acNewHighscore;

		public AudioClip acNoHighscore;

		public AudioClip acBackgroundSong;

		private float stepSoundTimer = 0f;

		private float stepSoundTime = 0.25f;

		private int stepSoundIndex = 0;

		private float backgroundMusicTimer = 0f;

		private float backgroundMusicTime = 0f;

		public bool jump = false;

		public Transform trGameRoot;

		private float jumpTimer = 0f;

		private float maxJumpTime = 0.5f;

		private float jumpForce = 8f;

		private bool jumping = false;

		private void Awake()
		{
			PintoAwake();
			acPlayerStep1 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "21_walk1 (player step 1)");
			acPlayerStep2 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "22_walk2 (player step 2)");
			acPlayerJump = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "23_ladder (player land)");
			acSnapNeck = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "12_exchange (snap neck)");
			acSnapNeckLand = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "67_knock (fall after neck snap)");
			acSpiderStep1 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "52_step1 (spider movement)");
			acSpiderStep2 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "53_step2 (spider movement)");
			acSpiderStep3 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "54_step3 (spider movement)");
			acSpiderStep4 = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "55_step4 (spider movement)");
			acLootbugStep = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "47_grass (lootbug movement)");
			acSlimeStep = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "30_triangle (slime movement)");
			acConfirm = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "59_confirm (start game)");
			acNewHighscore = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "24_levelclear (new highscore)");
			acNoHighscore = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "64_lose2 (no highscore)");
			acBackgroundSong = Pinto_ModBase.GetAudioClip(Pinto_ModBase.ljAudioPath + "danger_streets");
			backgroundMusicTime = acBackgroundSong.length;
			spiderPrefab = Pinto_ModBase.ljSpiderPrefab;
			lootbugPrefab = Pinto_ModBase.ljLootbugPrefab;
			slimePrefab = Pinto_ModBase.ljSlimePrefab;
			mainmenuWaitTimer = mainmenuWaitTime;
		}

		private void Update()
		{
			PintoBoyUpdate();
			if (jump)
			{
				ButtonPress();
				jump = false;
			}
		}

		public override void GameUpdate()
		{
			base.GameUpdate();
			if (fadeAnim.GetBool(DoAnimString))
			{
				fadeAnim.SetBool(DoAnimString, false);
			}
			switch (gameState)
			{
			case LJState.MainMenu:
				if (mainmenuWaitTimer > 0f)
				{
					mainmenuWaitTimer -= Time.deltaTime;
				}
				if (mainmenuTimer > 0f)
				{
					mainmenuTimer -= Time.deltaTime;
				}
				if (mainmenuTimer > 1f && !doOnce)
				{
					SetFade(FadeState.FadeOut);
					doOnce = true;
				}
				if (mainmenuTimer <= 1f && mainmenuTimer > 0f && doOnce)
				{
					mainmenuTimer = 0f;
					StartGame();
					SetFade(FadeState.FadeIn);
					doOnce = false;
				}
				break;
			case LJState.InGame:
				LJinGameUpdate();
				break;
			case LJState.Paused:
				break;
			case LJState.Lost:
				break;
			}
		}

		private void LJinGameUpdate()
		{
			//IL_002d: 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_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: 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_0346: Unknown result type (might be due to invalid IL or missing references)
			//IL_036e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: Unknown result type (might be due to invalid IL or missing references)
			//IL_0496: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e2: Unknown result type (might be due to invalid IL or missing references)
			if (endScreenShown)
			{
				return;
			}
			if (!deadAnimStarted)
			{
				RaycastHit2D val = Physics2D.Raycast(Vector2.op_Implicit(player.transform.position - rayCastOffset * Vector3.down), Vector2.down, rayCastDistance);
				if ((Object)(object)((RaycastHit2D)(ref val)).collider == (Object)(object)groundCol)
				{
					isGrounded = true;
					Debug.DrawRay(player.transform.position - rayCastOffset * Vector3.down, Vector2.op_Implicit(Vector2.down * rayCastDistance), Color.green);
					playerAnim.SetBool(InAirString, false);
					deadHitGround = true;
				}
				else
				{
					isGrounded = false;
					Debug.DrawRay(player.transform.position - rayCastOffset * Vector3.down, Vector2.op_Implicit(Vector2.down * rayCastDistance), Color.red);
					playerAnim.SetBool(InAirString, true);
					deadHitGround = false;
				}
			}
			if (dead)
			{
				if (deadHitGround)
				{
					PlayDeathAnim();
				}
				if (deadAnimStarted)
				{
					deathAnimTimer -= Time.deltaTime;
					if (deathAnimTimer <= 0f)
					{
						deadAnimStarted = false;
						ShowEndScreen();
					}
					else if (deathAnimTimer < deathAnimTime - 0.25f && deathAnimIndex == 0)
					{
						deathAnimIndex++;
						PlaySound(acSnapNeck);
					}
					else if (deathAnimTimer < deathAnimTime - 1.75f && deathAnimIndex == 1)
					{
						deathAnimIndex++;
						PlaySound(acSnapNeckLand);
					}
				}
				return;
			}
			if (((NetworkBehaviour)this).IsOwner)
			{
				NetworkVariable<float> obj = currentScore;
				obj.Value += scoreIncreaseRate * Time.deltaTime;
			}
			if (currentScore.Value > (float)speedAdditionMultiplier * increaseAdditionRate && speedAdditionMultiplier > timesIncreased)
			{
				timesIncreased++;
				speedAdditionMultiplier++;
			}
			if (((NetworkBehaviour)this).IsOwner && currentScore.Value > lastTimeSpawned + Random.Range(spawnEnemyEveryMin, spawnEnemyEveryMax))
			{
				SpawnRandomEnemyServerRpc();
				lastTimeSpawned = currentScore.Value;
			}
			scoreText.text = Mathf.Round(currentScore.Value).ToString();
			if (player.transform.localPosition.y < playerStart.y - 0.5f || player.transform.localPosition.y > playerStart.y + 100f)
			{
				player.transform.localPosition = playerSpawnpoint.localPosition;
			}
			if (invincible)
			{
				invincibleTimer -= Time.deltaTime;
				if (invincibleTimer <= 0f)
				{
					invincible = false;
					((Renderer)playerSprite).enabled = true;
				}
				else if (invincibleTimer % 0.25f < 0.05f)
				{
					((Renderer)playerSprite).enabled = !((Renderer)playerSprite).enabled;
				}
			}
			if (health.Value > -1)
			{
				player.transform.localPosition = new Vector3(playerSpawnpoint.localPosition.x + (float)playerPositions[health.Value], player.transform.localPosition.y, 0f);
				bracken.transform.localPosition = new Vector3(playerSpawnpoint.localPosition.x - (float)(playerPositions[health.Value] * 3), brackenStart.y, 0f);
			}
			if (isGrounded && !jumping)
			{
				PlayStepSound();
				jumpTimer = 0f;
			}
			else if (isHoldingButton)
			{
				if (jumpTimer > 0f)
				{
					jumpTimer -= Time.deltaTime;
				}
			}
			else
			{
				jumpTimer = 0f;
			}
			if (backgroundMusicTimer > 0f)
			{
				backgroundMusicTimer -= Time.deltaTime;
				return;
			}
			backgroundMusicTimer = backgroundMusicTime;
			if ((Object)(object)acBackgroundSong != (Object)null)
			{
				PlaySound(acBackgroundSong);
			}
			else
			{
				Debug.Log((object)"PintoBoy LJ: acBackgroundSong is null");
			}
		}

		[ServerRpc]
		private void SpawnRandomEnemyServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1051520683u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1051520683u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				switch (Random.Range(0, 3))
				{
				case 0:
					SpawnSpider();
					break;
				case 1:
					SpawnLootbug();
					break;
				case 2:
					SpawnSlime();
					break;
				}
			}
		}

		public void SetFade(FadeState state)
		{
			switch (state)
			{
			case FadeState.FadeOff:
				fadeAnim.SetInteger(FadeString, 0);
				fadeAnim.SetBool(DoAnimString, true);
				break;
			case FadeState.FadeOn:
				fadeAnim.SetInteger(FadeString, 1);
				fadeAnim.SetBool(DoAnimString, true);
				break;
			case FadeState.FadeIn:
				fadeAnim.SetInteger(FadeString, 2);
				fadeAnim.SetBool(DoAnimString, true);
				break;
			case FadeState.FadeOut:
				fadeAnim.SetInteger(FadeString, 3);
				fadeAnim.SetBool(DoAnimString, true);
				break;
			}
		}

		public void EnableFade(bool enabled)
		{
			((Behaviour)fadeAnim).enabled = enabled;
		}

		private LJEnemy EnumToJumpanyEnemy(PintoEnemyType enemyType)
		{
			LJEnemy result = new LJEnemy();
			switch (enemyType)
			{
			case PintoEnemyType.Spider:
				result = Pinto_ModBase.ljSpiderPrefab.GetComponent<LJEnemy>();
				break;
			case PintoEnemyType.Slime:
				result = Pinto_ModBase.ljSlimePrefab.GetComponent<LJEnemy>();
				break;
			case PintoEnemyType.Lootbug:
				result = Pinto_ModBase.ljLootbugPrefab.GetComponent<LJEnemy>();
				break;
			}
			return result;
		}

		private Transform EnumToEnemySpawnPoint(PintoEnemyType enemyType)
		{
			Transform result = null;
			switch (enemyType)
			{
			case PintoEnemyType.Spider:
				result = topSpawnpoint;
				break;
			case PintoEnemyType.Lootbug:
				result = midSpawnpoint;
				break;
			case PintoEnemyType.Slime:
				result = bottomSpawnpoint;
				break;
			}
			return result;
		}

		private AudioClip[] EnumToEnemySounds(PintoEnemyType enemyType)
		{
			AudioClip[] result = null;
			switch (enemyType)
			{
			case PintoEnemyType.Spider:
				result = (AudioClip[])(object)new AudioClip[4] { acSpiderStep1, acSpiderStep2, acSpiderStep3, acSpiderStep4 };
				break;
			case PintoEnemyType.Slime:
				result = (AudioClip[])(object)new AudioClip[1] { acSlimeStep };
				break;
			case PintoEnemyType.Lootbug:
				result = (AudioClip[])(object)new AudioClip[1] { acLootbugStep };
				break;
			}
			return result;
		}

		[ServerRpc]
		private void SpawnEnemyServerRpc(float speed, string enemy)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3307819638u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref speed, default(ForPrimitives));
				bool flag = enemy != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(enemy, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3307819638u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				Debug.Log((object)"PintoBoy LJ: Spawning enemy serverside");
				PintoEnemyType pintoEnemyType = Enum.Parse<PintoEnemyType>(enemy);
				SpawnEnemy(EnumToJumpanyEnemy(pintoEnemyType), EnumToEnemySpawnPoint(pintoEnemyType), 0f, speed, pintoEnemyType, EnumToEnemySounds(pintoEnemyType));
				SpawnEnemyClientRpc(speed, enemy);
			}
		}

		[ServerRpc]
		private void SpawnEnemyServerRpc(float speed, float distance, string enemy)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: 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_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(806374586u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref speed, default(ForPrimitives));
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref distance, default(ForPrimitives));
				bool flag = enemy != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(enemy, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 806374586u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				Debug.Log((object)"PintoBoy LJ: Spawning enemy serverside");
				PintoEnemyType pintoEnemyType = Enum.Parse<PintoEnemyType>(enemy);
				SpawnEnemy(EnumToJumpanyEnemy(pintoEnemyType), EnumToEnemySpawnPoint(pintoEnemyType), distance, speed, pintoEnemyType, EnumToEnemySounds(pintoEnemyType));
				SpawnEnemyClientRpc(speed, enemy);
			}
		}

		[ClientRpc]
		private void SpawnEnemyClientRpc(float speed, string enemy)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3997892232u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref speed, default(ForPrimitives));
				bool flag = enemy != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(enemy, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3997892232u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				Debug.Log((object)"PintoBoy LJ: Spawning enemy clientside");
				PintoEnemyType pintoEnemyType = Enum.Parse<PintoEnemyType>(enemy);
				if (!((NetworkBehaviour)this).IsServer)
				{
					SpawnEnemy(EnumToJumpanyEnemy(pintoEnemyType), EnumToEnemySpawnPoint(pintoEnemyType), 0f, speed, pintoEnemyType, EnumToEnemySounds(pintoEnemyType));
				}
			}
		}

		private LJEnemy SpawnEnemy(LJEnemy prefab, Transform position, float spawnOffset, float speed, PintoEnemyType enemy, AudioClip[] audioClips)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: 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_002b: Unknown result type (might be due to invalid IL or missing references)
			LJEnemy lJEnemy = Object.Instantiate<LJEnemy>(prefab, position.position, Quaternion.identity, position);
			Transform transform = ((Component)lJEnemy).transform;
			transform.position += Vector3.right * spawnOffset;
			lJEnemy.speed = speed + increaseSpeedAddition * (float)speedAdditionMultiplier;
			lJEnemy.game = this;
			lJEnemy.onDeath.AddListener((UnityAction<LJEnemy>)OnEnemyDeath);
			lJEnemy.enemyType = enemy;
			lJEnemy.SetMovementSounds(audioClips);
			enemies.Add(lJEnemy);
			return lJEnemy;
		}

		private void OnEnemyDeath(LJEnemy enemy)
		{
			enemies.Remove(enemy);
			enemy.onDeath.RemoveListener((UnityAction<LJEnemy>)OnEnemyDeath);
			Object.Destroy((Object)(object)((Component)enemy).gameObject);
		}

		private void SpawnSpider()
		{
			SpawnEnemyServerRpc(spiderSpeed, PintoEnemyType.Spider.ToString());
		}

		private void SpawnLootbug()
		{
			SpawnEnemyServerRpc(lootbugSpeed, PintoEnemyType.Lootbug.ToString());
			if (currentScore.Value > 700f)
			{
				float value = Random.value;
				Debug.Log((object)"PintoBoy LJ: rolling for Spider after lootbug");
				if (value < spiderLootBugSpawnChance)
				{
					Debug.Log((object)"PintoBoy LJ: spider rolled");
					SpawnEnemyServerRpc(spiderSpeed, spiderLootBugDistance, PintoEnemyType.Spider.ToString());
				}
			}
		}

		private void SpawnSlime()
		{
			SpawnEnemyServerRpc(slimeSpeed, PintoEnemyType.Slime.ToString());
		}

		public override void ButtonPress()
		{
			if (!((GrabbableObject)this).isBeingUsed)
			{
				return;
			}
			switch (gameState)
			{
			case LJState.MainMenu:
				if (mainmenuWaitTimer <= 0f && mainmenuTimer <= 0f)
				{
					StartFromTitleScreen();
				}
				break;
			case LJState.InGame:
				if (dead)
				{
					if (!endScreenShown)
					{
						ShowEndScreen();
					}
					else
					{
						ShowTitleScreen();
					}
				}
				else
				{
					Jump();
				}
				break;
			case LJState.Paused:
				break;
			case LJState.Lost:
				break;
			}
		}

		private void StartFromTitleScreen()
		{
			mainMenuAnim.SetTrigger(SelectedString);
			mainmenuTimer = mainmenuTime;
			PlaySound(acConfirm);
		}

		private void ShowTitleScreen()
		{
			SwitchState(LJState.MainMenu);
			mainmenuWaitTimer = mainmenuWaitTime;
		}

		[ServerRpc]
		private void StartGameServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1034126670u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1034126670u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				StartGame();
				StartGameClientRpc();
			}
		}

		[ClientRpc]
		private void StartGameClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1479370155u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1479370155u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					StartGame();
				}
			}
		}

		private void StartGame()
		{
			SwitchState(LJState.InGame);
			playerRb.bodyType = (RigidbodyType2D)0;
			speedAdditionMultiplier = speedAdditionMultiplierDefault;
			brackenAnim.SetTrigger(ResetString);
			playerAnim.SetTrigger(ResetString);
			ClearEnemies();
			((Behaviour)groundAnim).enabled = true;
			dead = false;
			endScreenText.text = "";
			deadAnimStarted = false;
			endScreenShown = false;
			deathAnimTimer = 0f;
			if (((NetworkBehaviour)this).IsOwner)
			{
				health.Value = 3;
				currentScore.Value = 0f;
			}
			timesIncreased = 0;
			lastTimeSpawned = 0f;
			deathAnimIndex = 0;
			backgroundMusicTimer = 0f;
		}

		private void ClearEnemies()
		{
			if (enemies.Count <= 0)
			{
				return;
			}
			foreach (LJEnemy enemy in enemies)
			{
				Object.Destroy((Object)(object)((Component)enemy).gameObject);
			}
			enemies.Clear();
		}

		private void ClearEnemiesExcept(LJEnemy enemy)
		{
			if (enemies.Count <= 0)
			{
				return;
			}
			foreach (LJEnemy enemy2 in enemies)
			{
				if (!((Object)(object)enemy2 == (Object)(object)enemy))
				{
					Object.Destroy((Object)(object)((Component)enemy2).gameObject);
					enemies.Remove(enemy2);
				}
			}
		}

		[ServerRpc]
		private void SwitchStateServerRpc(LJState newState)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: 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_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1886143849u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<LJState>(ref newState, default(ForEnums));
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1886143849u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				SwitchState(newState);
				SwitchStateClientRpc(newState);
			}
		}

		[ClientRpc]
		private void SwitchStateClientRpc(LJState newState)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4275040666u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<LJState>(ref newState, default(ForEnums));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4275040666u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					SwitchState(newState);
				}
			}
		}

		private void SwitchState(LJState newState)
		{
			switch (newState)
			{
			case LJState.MainMenu:
				((Component)mainMenu).gameObject.SetActive(true);
				((Component)inGame).gameObject.SetActive(false);
				((Component)paused).gameObject.SetActive(false);
				doOnce = false;
				break;
			case LJState.InGame:
				((Component)mainMenu).gameObject.SetActive(false);
				((Component)inGame).gameObject.SetActive(true);
				((Component)paused).gameObject.SetActive(false);
				break;
			case LJState.Paused:
				((Component)mainMenu).gameObject.SetActive(false);
				((Component)inGame).gameObject.SetActive(false);
				((Component)paused).gameObject.SetActive(true);
				break;
			case LJState.Lost:
				((Component)mainMenu).gameObject.SetActive(false);
				((Component)inGame).gameObject.SetActive(false);
				((Component)paused).gameObject.SetActive(false);
				break;
			}
			gameState = newState;
		}

		private void Jump()
		{
			//IL_0065: 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)
			if (isGrounded)
			{
				playerRb.velocity = new Vector2(0f, jumpHeight);
				isGrounded = false;
				jumpTimer = maxJumpTime;
				jumping = true;
				PlaySound(acPlayerJump);
			}
			else
			{
				playerRb.velocity = new Vector2(0f, 0f - fastFallSpeed);
				PlaySound(acPlayerJump);
			}
		}

		public override void ButtonRelease(float timeHeld)
		{
			//IL_0007: 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_0039: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			if (playerRb.velocity.y > 0f)
			{
				playerRb.velocity = new Vector2(playerRb.velocity.x, playerRb.velocity.y / 4f);
			}
			jumping = false;
			if (!isGrounded && !(playerRb.velocity.y > 0.1f))
			{
			}
		}

		public override void TurnedOn()
		{
			EnableAllAnimators();
			ClearEnemies();
			ShowTitleScreen();
		}

		public override void ResetGame()
		{
			base.ResetGame();
		}

		private void EnableAllAnimators()
		{
			((Behaviour)groundAnim).enabled = true;
			((Behaviour)brackenAnim).enabled = true;
			((Behaviour)mainMenuAnim).enabled = true;
			((Behaviour)playerAnim).enabled = true;
			EnableFade(enabled: true);
			for (int i = 0; i < enemies.Count; i++)
			{
				((Behaviour)enemies[i].animator).enabled = true;
				enemies[i].paused = true;
			}
		}

		private void DisableAllAnimators()
		{
			((Behaviour)groundAnim).enabled = false;
			((Behaviour)brackenAnim).enabled = false;
			((Behaviour)mainMenuAnim).enabled = false;
			((Behaviour)playerAnim).enabled = false;
			EnableFade(enabled: false);
			for (int i = 0; i < enemies.Count; i++)
			{
				((Behaviour)enemies[i].animator).enabled = false;
				enemies[i].paused = false;
			}
		}

		public void PlayerGotHit()
		{
			if (((NetworkBehaviour)this).IsOwner && !invincible)
			{
				NetworkVariable<int> obj = health;
				int value = obj.Value;
				obj.Value = value - 1;
				if (health.Value <= 0)
				{
					DieServerRpc();
					return;
				}
				invincible = true;
				invincibleTimer = invincibleTime;
			}
		}

		[ServerRpc]
		public void DieServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Invalid comparison between Unknown and I4
			//IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Invalid comparison between Unknown and I4
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
				{
					if ((int)networkManager.LogLevel <= 1)
					{
						Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
					}
					return;
				}
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1600077284u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1600077284u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				Die();
				DieClientRpc();
			}
		}

		[ClientRpc]
		public void DieClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1025572591u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1025572591u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					Die();
				}
			}
		}

		public void Die()
		{
			//IL_004e: 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_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			((Behaviour)groundAnim).enabled = false;
			dead = true;
			for (int i = 0; i < enemies.Count; i++)
			{
				enemies[i].killedPlayer = true;
			}
			if (Mathf.Abs(player.transform.localPosition.x - playerSpawnpoint.localPosition.x) < 5f)
			{
				playerRb.velocity = new Vector2(0f, 0f);
				player.transform.localPosition = new Vector3(player.transform.localPosition.x, playerSpawnpoint.localPosition.y, 0f);
			}
		}

		public void PlayDeathAnim()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			player.transform.localPosition = playerSpawnpoint.localPosition;
			brackenAnim.SetTrigger(DeathString);
			playerAnim.SetTrigger(DeathString);
			deathAnimTimer = deathAnimTime;
			deadAnimStarted = true;
			deadHitGround = false;
			deathAnimIndex = 0;
			StopSounds();
		}

		private void ShowEndScreen()
		{
			if (currentScore.Value > highScore.Value)
			{
				endScreenText.text = "New Best!\n" + $"{Mathf.Round(currentScore.Value)}\n" + "Last Best\n" + $"{Mathf.Round(highScore.Value)}";
				if (((NetworkBehaviour)this).IsOwner)
				{
					highScore.Value = currentScore.Value;
				}
				PlaySound(acNewHighscore);
			}
			else
			{
				endScreenText.text = "Score\n" + $"{Mathf.Round(currentScore.Value)}\n" + "Best\n" + $"{Mathf.Round(highScore.Value)}";
				PlaySound(acNoHighsco