Decompiled source of FlappyBirdWalls v1.1.3

Mods/FlappyBirdWalls.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using FlappyBirdWalls;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppRUMBLE.Managers;
using Il2CppRUMBLE.MoveSystem;
using Il2CppRUMBLE.Players.Subsystems;
using Il2CppRUMBLE.Pools;
using Il2CppRUMBLE.Poses;
using Il2CppRUMBLE.Utilities;
using Il2CppSystem.Collections.Generic;
using Il2CppTMPro;
using MelonLoader;
using RumbleModUI;
using RumbleModdingAPI;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(Main), "FlappyBirdWalls", "1.1.2", "UlvakSkillz", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: MelonColor(255, 195, 0, 255)]
[assembly: MelonAuthorColor(255, 195, 0, 255)]
[assembly: VerifyLoaderVersion(0, 6, 6, true)]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("FlappyBirdWalls")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+ad8faa27d97e2db844bc047f7bbeda55aeb0c883")]
[assembly: AssemblyProduct("FlappyBirdWalls")]
[assembly: AssemblyTitle("FlappyBirdWalls")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace FlappyBirdWalls;

[RegisterTypeInIl2Cpp]
public class FlappyBird : MonoBehaviour
{
	private class Bird
	{
		public bool isAlive = false;

		public int gameScore = 0;

		public float height = 0f;

		public float speedY = 0f;

		public Bird()
		{
			isAlive = true;
			gameScore = 0;
			height = 0f;
			speedY = 0f;
		}
	}

	[CompilerGenerated]
	private sealed class <GameLoop>d__21 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public FlappyBird <>4__this;

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

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

		[DebuggerHidden]
		public <GameLoop>d__21(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

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

		private bool MoveNext()
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				break;
			case 1:
				<>1__state = -1;
				break;
			}
			if (<>4__this.bird.isAlive && <>4__this.gameStarted)
			{
				<>4__this.CheckPipes();
				<>4__this.MovePipes();
				<>4__this.MoveBird();
				<>4__this.UpdatePositions();
				<>2__current = (object)new WaitForFixedUpdate();
				<>1__state = 1;
				return true;
			}
			<>4__this.gameStarted = false;
			return false;
		}

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

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

	[CompilerGenerated]
	private sealed class <StopGameIfStructureDestroyed>d__19 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public GameObject structure;

		public FlappyBird <>4__this;

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

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

		[DebuggerHidden]
		public <StopGameIfStructureDestroyed>d__19(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

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

		private bool MoveNext()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				break;
			case 1:
				<>1__state = -1;
				break;
			}
			if (structure.active)
			{
				<>2__current = (object)new WaitForFixedUpdate();
				<>1__state = 1;
				return true;
			}
			<>4__this.canvas.SetActive(false);
			<>4__this.bird.isAlive = false;
			return false;
		}

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

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

	private Bird bird = new Bird();

	private List<Vector2> pipes = new List<Vector2>
	{
		Vector2.zero,
		Vector2.zero
	};

	private Random random = new Random();

	private const int maxPipeHeight = 200;

	private const float halfScreenHeight = 400f;

	private const float halfScreenWidth = 250f;

	public bool gameStarted = false;

	private GameObject canvas;

	private GameObject birdMain;

	private GameObject birdUp;

	private GameObject birdFlat;

	private GameObject birdDown;

	private GameObject pipe1;

	private GameObject pipe2;

	private GameObject score1;

	private GameObject score2;

	private void Start()
	{
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_020b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
		Object.Destroy((Object)(object)val.GetComponent<MeshRenderer>());
		((Object)val).name = "FlappyBirdTrigger";
		val.transform.parent = ((Component)this).gameObject.transform;
		val.transform.localPosition = new Vector3(0f, 0f, -0.22f);
		val.transform.localRotation = Quaternion.identity;
		val.transform.localScale = new Vector3(1.1f, 1.9f, 0.01f);
		val.layer = 22;
		((Collider)val.GetComponent<BoxCollider>()).isTrigger = true;
		val.AddComponent<FlappyBirdStart>();
		canvas = Object.Instantiate<GameObject>(Main.ddolCanvas);
		score1 = ((Component)canvas.transform.GetChild(0).GetChild(0)).gameObject;
		score2 = ((Component)canvas.transform.GetChild(0).GetChild(1)).gameObject;
		pipe1 = ((Component)canvas.transform.GetChild(1).GetChild(0)).gameObject;
		pipe2 = ((Component)canvas.transform.GetChild(1).GetChild(1)).gameObject;
		birdMain = ((Component)canvas.transform.GetChild(2)).gameObject;
		birdUp = ((Component)canvas.transform.GetChild(2).GetChild(0)).gameObject;
		birdFlat = ((Component)canvas.transform.GetChild(2).GetChild(1)).gameObject;
		birdDown = ((Component)canvas.transform.GetChild(2).GetChild(2)).gameObject;
		canvas.transform.parent = ((Component)this).gameObject.transform;
		canvas.transform.localPosition = new Vector3(0f, 0f, -0.225f);
		canvas.transform.localRotation = Quaternion.identity;
		canvas.transform.localScale = new Vector3(0.0023f, 0.0023f, 0.0023f);
	}

	public void StartGame()
	{
		//IL_0035: 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)
		gameStarted = true;
		bird = new Bird();
		pipes = new List<Vector2>
		{
			new Vector2(275f, (float)random.Next(-200, 200)),
			new Vector2(575f, (float)random.Next(-200, 200))
		};
		canvas.SetActive(true);
		TextMeshProUGUI component = score1.GetComponent<TextMeshProUGUI>();
		((TMP_Text)component).text = "1";
		((TMP_Text)component).alignment = (TextAlignmentOptions)514;
		((TMP_Text)component).fontSize = 64f;
		TextMeshProUGUI component2 = score2.GetComponent<TextMeshProUGUI>();
		((TMP_Text)component2).text = "2";
		((TMP_Text)component2).alignment = (TextAlignmentOptions)514;
		((TMP_Text)component2).fontSize = 64f;
		MelonCoroutines.Start(StopGameIfStructureDestroyed(((Component)((Component)this).gameObject.transform.parent).gameObject));
		MelonCoroutines.Start(GameLoop());
	}

	[IteratorStateMachine(typeof(<StopGameIfStructureDestroyed>d__19))]
	private IEnumerator StopGameIfStructureDestroyed(GameObject structure)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <StopGameIfStructureDestroyed>d__19(0)
		{
			<>4__this = this,
			structure = structure
		};
	}

	public void Jump()
	{
		if (bird.speedY < 5f)
		{
			bird.speedY = 0f;
		}
		bird.speedY += 5f;
	}

	[IteratorStateMachine(typeof(<GameLoop>d__21))]
	private IEnumerator GameLoop()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <GameLoop>d__21(0)
		{
			<>4__this = this
		};
	}

	private void UpdatePositions()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: 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_007b: 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_009b: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
		birdMain.transform.localPosition = new Vector3(-125f, bird.height, 0f);
		pipe1.transform.localPosition = new Vector3(pipes[0].x, pipes[0].y, 0f);
		pipe2.transform.localPosition = new Vector3(pipes[1].x, pipes[1].y, 0f);
		score1.transform.parent = pipe1.transform;
		score1.transform.localPosition = Vector3.zero;
		score2.transform.parent = pipe2.transform;
		score2.transform.localPosition = Vector3.zero;
	}

	private void MoveBird()
	{
		bird.speedY -= 0.1f;
		bird.height += bird.speedY;
		if (Math.Abs(bird.speedY) < 1f)
		{
			if (!birdFlat.active)
			{
				birdFlat.SetActive(true);
				birdUp.SetActive(false);
				birdDown.SetActive(false);
			}
		}
		else if (0f < bird.speedY)
		{
			if (!birdUp.active)
			{
				birdUp.SetActive(true);
				birdFlat.SetActive(false);
				birdDown.SetActive(false);
			}
		}
		else if (bird.speedY < 0f && !birdDown.active)
		{
			birdDown.SetActive(true);
			birdUp.SetActive(false);
			birdFlat.SetActive(false);
		}
		if (bird.height < -400f)
		{
			bird.isAlive = false;
		}
		if (bird.height > 400f)
		{
			bird.isAlive = false;
		}
	}

	private void CheckPipes()
	{
		//IL_0010: 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)
		for (int i = 0; i < pipes.Count; i++)
		{
			if (pipes[i].x < -300f)
			{
				pipes[i] = new Vector2(300f, (float)random.Next(-200, 200));
				TextMeshProUGUI component = ((Component)((i == 0) ? pipe1 : pipe2).transform.GetChild(0)).gameObject.GetComponent<TextMeshProUGUI>();
				((TMP_Text)component).text = (int.Parse(((TMP_Text)component).text) + 2).ToString();
			}
		}
	}

	private void MovePipes()
	{
		//IL_0017: 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_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < pipes.Count; i++)
		{
			pipes[i] = new Vector2(pipes[i].x - 1f, pipes[i].y);
			if (Math.Abs(-125f - pipes[i].x) < 75f && 80f < Math.Abs(bird.height - pipes[i].y))
			{
				bird.isAlive = false;
			}
		}
	}
}
[RegisterTypeInIl2Cpp]
public class FlappyBirdStart : MonoBehaviour
{
	private FlappyBird gameToStart;

	public FlappyBirdStart()
	{
		gameToStart = ((Component)((Component)this).gameObject.transform.parent).GetComponent<FlappyBird>();
	}

	private void OnTriggerEnter(Collider other)
	{
		if (Main.touchPlay && (!(((Object)((Component)other).gameObject).name != "Bone_HandAlpha_L") || !(((Object)((Component)other).gameObject).name != "Bone_HandAlpha_R")))
		{
			if (!gameToStart.gameStarted)
			{
				gameToStart.StartGame();
			}
			else
			{
				gameToStart.Jump();
			}
		}
	}
}
internal class BuildInfo
{
	public const string ModName = "FlappyBirdWalls";

	public const string Author = "UlvakSkillz";

	public const string ModVersion = "1.1.2";
}
public class Main : MelonMod
{
	[HarmonyPatch(typeof(Structure), "Start")]
	public static class StructureSpawn
	{
		private static void Postfix(ref Structure __instance)
		{
			try
			{
				if (((Object)((Component)__instance.processableComponent).gameObject).name != "Wall")
				{
					return;
				}
			}
			catch (Exception ex)
			{
				MelonLogger.Msg((object)ex);
				return;
			}
			((Component)((Component)__instance.processableComponent).gameObject.transform.GetChild(0)).gameObject.AddComponent<FlappyBird>();
		}
	}

	[HarmonyPatch(typeof(PlayerPoseSystem), "OnPoseSetCompleted", new Type[] { typeof(PoseSet) })]
	private static class PosePatch
	{
		private static void Postfix(PoseSet set)
		{
			try
			{
				if (!kickPlay || !(((Object)set).name == "PoseSetKick"))
				{
					return;
				}
				GameObject val = SelectStructure(((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).gameObject.transform.GetChild(2).GetChild(0).GetChild(0));
				if (!((Object)(object)val == (Object)null) && !(((Object)val).name != "Wall"))
				{
					FlappyBird component = ((Component)val.transform.GetChild(0)).GetComponent<FlappyBird>();
					if (!component.gameStarted)
					{
						component.StartGame();
					}
					else
					{
						component.Jump();
					}
				}
			}
			catch
			{
			}
		}
	}

	public static GameObject ddolCanvas;

	private Mod FlappyBirdWalls = new Mod();

	public static bool touchPlay = true;

	public static bool kickPlay = true;

	private static List<PooledMonoBehaviour> pooledStructuresWall;

	private static List<PooledMonoBehaviour> pooledStructuresCube;

	private static List<PooledMonoBehaviour> pooledStructuresPillar;

	private static List<PooledMonoBehaviour> pooledStructuresBall;

	private static List<PooledMonoBehaviour> pooledStructuresDisc;

	private static List<PooledMonoBehaviour> pooledStructuresBoulder;

	private static List<PooledMonoBehaviour> pooledStructuresSmallRock;

	private static List<PooledMonoBehaviour> pooledStructuresTetherBall;

	public static GameObject SelectStructure(Transform playerPos)
	{
		//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0300: Unknown result type (might be due to invalid IL or missing references)
		//IL_0305: Unknown result type (might be due to invalid IL or missing references)
		//IL_031d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0327: Unknown result type (might be due to invalid IL or missing references)
		//IL_0332: Unknown result type (might be due to invalid IL or missing references)
		//IL_033c: Unknown result type (might be due to invalid IL or missing references)
		//IL_034f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0360: Unknown result type (might be due to invalid IL or missing references)
		//IL_036a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0375: Unknown result type (might be due to invalid IL or missing references)
		//IL_0385: Unknown result type (might be due to invalid IL or missing references)
		//IL_038f: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_03be: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0402: Unknown result type (might be due to invalid IL or missing references)
		//IL_0413: Unknown result type (might be due to invalid IL or missing references)
		//IL_0419: Unknown result type (might be due to invalid IL or missing references)
		//IL_041e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0423: Unknown result type (might be due to invalid IL or missing references)
		//IL_0427: Unknown result type (might be due to invalid IL or missing references)
		//IL_0436: Unknown result type (might be due to invalid IL or missing references)
		//IL_0438: Unknown result type (might be due to invalid IL or missing references)
		//IL_0547: Unknown result type (might be due to invalid IL or missing references)
		//IL_055e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0568: Unknown result type (might be due to invalid IL or missing references)
		//IL_0573: Unknown result type (might be due to invalid IL or missing references)
		//IL_0583: Unknown result type (might be due to invalid IL or missing references)
		//IL_058d: Unknown result type (might be due to invalid IL or missing references)
		List<GameObject> list = new List<GameObject>();
		List<GameObject> list2 = new List<GameObject>();
		List<float> list3 = new List<float>();
		List<PooledMonoBehaviour> val = new List<PooledMonoBehaviour>();
		for (int i = 0; i < pooledStructuresWall.Count; i++)
		{
			if (((Component)((Component)pooledStructuresWall[i]).transform).gameObject.active)
			{
				val.Add(pooledStructuresWall[i]);
			}
		}
		for (int j = 0; j < pooledStructuresCube.Count; j++)
		{
			if (((Component)((Component)pooledStructuresCube[j]).transform).gameObject.active)
			{
				val.Add(pooledStructuresCube[j]);
			}
		}
		for (int k = 0; k < pooledStructuresPillar.Count; k++)
		{
			if (((Component)((Component)pooledStructuresPillar[k]).transform).gameObject.active)
			{
				val.Add(pooledStructuresPillar[k]);
			}
		}
		for (int l = 0; l < pooledStructuresBall.Count; l++)
		{
			if (((Component)((Component)pooledStructuresBall[l]).transform).gameObject.active)
			{
				val.Add(pooledStructuresBall[l]);
			}
		}
		for (int m = 0; m < pooledStructuresDisc.Count; m++)
		{
			if (((Component)((Component)pooledStructuresDisc[m]).transform).gameObject.active)
			{
				val.Add(pooledStructuresDisc[m]);
			}
		}
		for (int n = 0; n < pooledStructuresBoulder.Count; n++)
		{
			if (((Component)((Component)pooledStructuresBoulder[n]).transform).gameObject.active)
			{
				val.Add(pooledStructuresBoulder[n]);
			}
		}
		for (int num = 0; num < pooledStructuresSmallRock.Count; num++)
		{
			if (((Component)((Component)pooledStructuresSmallRock[num]).transform).gameObject.active)
			{
				val.Add(pooledStructuresSmallRock[num]);
			}
		}
		for (int num2 = 0; num2 < pooledStructuresTetherBall.Count; num2++)
		{
			if (((Component)((Component)pooledStructuresTetherBall[num2]).transform).gameObject.active)
			{
				val.Add(pooledStructuresTetherBall[num2]);
			}
		}
		Vector2 val3 = default(Vector2);
		Vector2 val4 = default(Vector2);
		for (int num3 = 0; num3 < val.Count; num3++)
		{
			GameObject gameObject = ((Component)((Component)val[num3]).transform).gameObject;
			float item = Vector2.Distance(Vector2.op_Implicit(gameObject.transform.position), Vector2.op_Implicit(playerPos.position));
			float num4 = Vector2.Distance(new Vector2(0f, gameObject.transform.position.y), new Vector2(0f, playerPos.position.y));
			if (!(Vector2.Distance(new Vector2(gameObject.transform.position.x, gameObject.transform.position.z), new Vector2(((Component)playerPos).transform.position.x, ((Component)playerPos).transform.position.z)) < 2.5f) || !(num4 < 2.5f))
			{
				continue;
			}
			Vector3 val2 = playerPos.forward;
			float x = ((Vector3)(ref val2)).normalized.x;
			val2 = playerPos.forward;
			((Vector2)(ref val3))..ctor(x, ((Vector3)(ref val2)).normalized.z);
			val2 = gameObject.transform.position - playerPos.position;
			float x2 = ((Vector3)(ref val2)).normalized.x;
			val2 = gameObject.transform.position - playerPos.position;
			((Vector2)(ref val4))..ctor(x2, ((Vector3)(ref val2)).normalized.z);
			float num5 = Vector2.Dot(val3, val4);
			float num6 = Mathf.Acos(num5) * 57.29578f;
			if (num6 <= 90f)
			{
				list.Add(gameObject);
				if (num6 <= 30f)
				{
					list2.Add(gameObject);
					list3.Add(item);
				}
			}
		}
		if (list.Count > 0)
		{
			if (list2.Count > 0)
			{
				int index = -1;
				float num7 = 2.6f;
				for (int num8 = 0; num8 < list2.Count; num8++)
				{
					if (list3[num8] < num7)
					{
						index = num8;
						num7 = list3[num8];
					}
				}
				return list2[index];
			}
			int index2 = -1;
			float num9 = 2.6f;
			for (int num10 = 0; num10 < list.Count; num10++)
			{
				float num11 = Vector2.Distance(new Vector2(list[num10].transform.position.x, list[num10].transform.position.z), new Vector2(((Component)playerPos).transform.position.x, ((Component)playerPos).transform.position.z));
				if (num11 < num9)
				{
					index2 = num10;
					num9 = num11;
				}
			}
			return list[index2];
		}
		return null;
	}

	public override void OnLateInitializeMelon()
	{
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Expected O, but got Unknown
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Expected O, but got Unknown
		ddolCanvas = Object.Instantiate<GameObject>(Calls.LoadAssetFromStream<GameObject>((MelonMod)(object)this, "FlappyBirdWalls.flappybird", "Canvas"));
		((Object)ddolCanvas).name = "Flappy Bird Canvas";
		ddolCanvas.SetActive(false);
		Object.DontDestroyOnLoad((Object)(object)ddolCanvas);
		FlappyBirdWalls.ModName = "FlappyBirdWalls";
		FlappyBirdWalls.ModVersion = "1.1.2";
		FlappyBirdWalls.SetFolder("FlappyBirdWalls");
		FlappyBirdWalls.AddToList("Touch Play", true, 0, "Toggles Touching the Wall to Play", new Tags());
		FlappyBirdWalls.AddToList("Kick Play", true, 0, "Toggles Kicking the Wall to Play", new Tags());
		FlappyBirdWalls.GetFromFile();
		UI.instance.UI_Initialized += UIInit;
		FlappyBirdWalls.ModSaved += Save;
	}

	public override void OnSceneWasLoaded(int buildIndex, string sceneName)
	{
		if (sceneName == "Loader")
		{
			pooledStructuresWall = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("Wall")].PooledObjects;
			pooledStructuresCube = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("RockCube")].PooledObjects;
			pooledStructuresPillar = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("Pillar")].PooledObjects;
			pooledStructuresBall = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("Ball")].PooledObjects;
			pooledStructuresDisc = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("Disc")].PooledObjects;
			pooledStructuresBoulder = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("LargeRock")].PooledObjects;
			pooledStructuresSmallRock = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("SmallRock")].PooledObjects;
			pooledStructuresTetherBall = ((Il2CppArrayBase<Pool<PooledMonoBehaviour>>)(object)Singleton<PoolManager>.instance.availablePools)[Singleton<PoolManager>.instance.GetPoolIndex("BoulderBall")].PooledObjects;
		}
	}

	private void UIInit()
	{
		UI.instance.AddMod(FlappyBirdWalls);
	}

	private void Save()
	{
		touchPlay = (bool)FlappyBirdWalls.Settings[0].SavedValue;
		kickPlay = (bool)FlappyBirdWalls.Settings[1].SavedValue;
	}

	public GameObject LoadAssetBundle(string bundleName, string objectName)
	{
		using Stream stream = ((MelonBase)this).MelonAssembly.Assembly.GetManifestResourceStream(bundleName);
		byte[] array = new byte[stream.Length];
		stream.Read(array, 0, array.Length);
		Il2CppAssetBundle val = Il2CppAssetBundleManager.LoadFromMemory(Il2CppStructArray<byte>.op_Implicit(array));
		return Object.Instantiate<GameObject>(val.LoadAsset<GameObject>(objectName));
	}
}