Decompiled source of LethalCasino Extended v1.0.2

beanl.LethalCasinoExtended.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalCasinoExtended.Games;
using LethalCasinoExtended.Games.Slots.BassCompany;
using LethalCasinoExtended.Games.Slots.ScrapBandit;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.Networking;
using UnityEngine.UI;
using beanl.LethalCasinoExtended.NetcodePatcher;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("beanl.LethalCasinoExtended")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: AssemblyInformationalVersion("1.0.2+31a4611aeb4ac1ed1a10bcd3f18d280c408c176d")]
[assembly: AssemblyProduct("LethalCasino Extended")]
[assembly: AssemblyTitle("beanl.LethalCasinoExtended")]
[assembly: AssemblyVersion("1.0.2.0")]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace LethalCasinoExtended
{
	public class ArcadeCabinetVisuals : MonoBehaviour
	{
		public TextMeshPro MarqueeTextMesh;

		public Renderer MarqueeFaceRenderer;

		public Renderer[] MarqueeBorderRenderers;

		public Renderer[] NeonLetterRenderers;

		public Renderer[] FlickerLetterRenderers;

		public Renderer[] ButtonRenderers;

		public Transform PlayButtonTransform;

		public Renderer ScreenRenderer;

		public Renderer LeftTrimRenderer;

		public Renderer RightTrimRenderer;

		public Renderer LeftSideArtRenderer;

		public Renderer RightSideArtRenderer;

		public Renderer[] SideNeonRenderers;

		public Transform JoystickPivot;

		public Renderer JoystickBallRenderer;

		public Light MarqueeLight;

		public Light ScreenLight;

		public int VariantIndex;

		public Color CurrentNeonColor = new Color(1f, 0.15f, 0.58f);

		private Material marqueeTextMaterial;

		private Material marqueeFaceMaterial;

		private Material marqueeBorderMaterial;

		private Material[] buttonMaterials;

		private Material screenMaterial;

		private Terminal terminal;

		private float nextFlickerTime = 5.5f;

		private float flickerDuration = 0.2f;

		private float flickerTimer;

		private bool isFlickering;

		private Vector3 playButtonDefaultLocalPos;

		private float playButtonPressOffset;

		private bool isButtonPressed;

		private static readonly int PropColor = Shader.PropertyToID("_Color");

		private static readonly int PropBaseColor = Shader.PropertyToID("_BaseColor");

		private static readonly int PropFaceColor = Shader.PropertyToID("_FaceColor");

		private static readonly int PropGlowColor = Shader.PropertyToID("_GlowColor");

		private static readonly int PropEmissiveColor = Shader.PropertyToID("_EmissiveColor");

		private static readonly int PropEmissionColor = Shader.PropertyToID("_EmissionColor");

		public Renderer[] NeonBorderRenderers => MarqueeBorderRenderers;

		private void Awake()
		{
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Expected O, but got Unknown
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			terminal = ((Component)this).GetComponent<Terminal>();
			if ((Object)(object)MarqueeFaceRenderer != (Object)null)
			{
				marqueeFaceMaterial = MarqueeFaceRenderer.material;
			}
			if (MarqueeBorderRenderers != null && MarqueeBorderRenderers.Length != 0 && (Object)(object)MarqueeBorderRenderers[0] != (Object)null)
			{
				marqueeBorderMaterial = MarqueeBorderRenderers[0].material;
				for (int i = 1; i < MarqueeBorderRenderers.Length; i++)
				{
					if ((Object)(object)MarqueeBorderRenderers[i] != (Object)null)
					{
						MarqueeBorderRenderers[i].sharedMaterial = marqueeBorderMaterial;
					}
				}
			}
			if ((Object)(object)MarqueeTextMesh != (Object)null)
			{
				marqueeTextMaterial = new Material(((TMP_Text)MarqueeTextMesh).fontMaterial);
				((TMP_Text)MarqueeTextMesh).fontMaterial = marqueeTextMaterial;
			}
			if (SideNeonRenderers != null && SideNeonRenderers.Length != 0 && (Object)(object)marqueeBorderMaterial != (Object)null)
			{
				for (int j = 0; j < SideNeonRenderers.Length; j++)
				{
					if ((Object)(object)SideNeonRenderers[j] != (Object)null)
					{
						SideNeonRenderers[j].sharedMaterial = marqueeBorderMaterial;
					}
				}
			}
			if (ButtonRenderers != null && ButtonRenderers.Length != 0)
			{
				buttonMaterials = (Material[])(object)new Material[ButtonRenderers.Length];
				for (int k = 0; k < ButtonRenderers.Length; k++)
				{
					if ((Object)(object)ButtonRenderers[k] != (Object)null)
					{
						buttonMaterials[k] = ButtonRenderers[k].material;
					}
				}
			}
			if ((Object)(object)PlayButtonTransform != (Object)null)
			{
				playButtonDefaultLocalPos = PlayButtonTransform.localPosition;
			}
			if ((Object)(object)ScreenRenderer != (Object)null)
			{
				screenMaterial = ScreenRenderer.material;
			}
			ScheduleNextFlicker();
		}

		private void ScheduleNextFlicker()
		{
			nextFlickerTime = Time.time + Random.Range(5.5f, 10.5f);
			flickerDuration = Random.Range(0.14f, 0.26f);
			flickerTimer = 0f;
			isFlickering = false;
		}

		public void ApplyVariant(int index, Color? configColor = null)
		{
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: 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_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Expected O, but got Unknown
			//IL_0301: Unknown result type (might be due to invalid IL or missing references)
			//IL_0307: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0344: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			VariantIndex = Mathf.Abs(index);
			CurrentNeonColor = (Color)(((??)configColor) ?? ((Plugin.TerminalConfig != null) ? Plugin.TerminalConfig.GetNeonColor(VariantIndex) : new Color(1f, 0.15f, 0.58f)));
			ManualLogSource logger = Plugin.Logger;
			if (logger != null)
			{
				logger.LogInfo((object)$"Cabinet {VariantIndex} assigned neon color: #{ColorUtility.ToHtmlStringRGB(CurrentNeonColor)}");
			}
			float num = default(float);
			float num2 = default(float);
			float num3 = default(float);
			Color.RGBToHSV(CurrentNeonColor, ref num, ref num2, ref num3);
			Color val = Color.HSVToRGB(num, 0.18f, 0.07f);
			if ((Object)(object)marqueeFaceMaterial != (Object)null)
			{
				marqueeFaceMaterial.color = val;
				if (marqueeFaceMaterial.HasProperty("_BaseColor"))
				{
					marqueeFaceMaterial.SetColor("_BaseColor", val);
				}
			}
			if ((Object)(object)marqueeBorderMaterial != (Object)null)
			{
				SetMaterialEmission(marqueeBorderMaterial, CurrentNeonColor, 1.2f);
			}
			if ((Object)(object)MarqueeTextMesh != (Object)null)
			{
				if ((Object)(object)((TMP_Text)MarqueeTextMesh).font == (Object)null)
				{
					TMP_FontAsset gameTMPFont = TerminalUIManager.GetGameTMPFont();
					if ((Object)(object)gameTMPFont != (Object)null)
					{
						((TMP_Text)MarqueeTextMesh).font = gameTMPFont;
					}
				}
				((Graphic)MarqueeTextMesh).color = CurrentNeonColor;
				((TMP_Text)MarqueeTextMesh).faceColor = Color32.op_Implicit(CurrentNeonColor);
				((TMP_Text)MarqueeTextMesh).outlineColor = new Color32((byte)10, (byte)10, (byte)15, byte.MaxValue);
				if ((Object)(object)marqueeTextMaterial == (Object)null)
				{
					marqueeTextMaterial = new Material(((TMP_Text)MarqueeTextMesh).fontMaterial);
					((TMP_Text)MarqueeTextMesh).fontMaterial = marqueeTextMaterial;
				}
				ConfigureMarqueeTMPMaterial(marqueeTextMaterial, CurrentNeonColor);
				((TMP_Text)MarqueeTextMesh).ForceMeshUpdate(false, false);
			}
			int suitIndex = VariantIndex % 4;
			Texture2D suitTexture = ArcadeModelBuilder.GetSuitTexture(suitIndex);
			if ((Object)(object)LeftSideArtRenderer != (Object)null && (Object)(object)LeftSideArtRenderer.material != (Object)null)
			{
				LeftSideArtRenderer.material.mainTexture = (Texture)(object)suitTexture;
				if (LeftSideArtRenderer.material.HasProperty("_BaseColorMap"))
				{
					LeftSideArtRenderer.material.SetTexture("_BaseColorMap", (Texture)(object)suitTexture);
				}
			}
			if ((Object)(object)RightSideArtRenderer != (Object)null && (Object)(object)RightSideArtRenderer.material != (Object)null)
			{
				RightSideArtRenderer.material.mainTexture = (Texture)(object)suitTexture;
				if (RightSideArtRenderer.material.HasProperty("_BaseColorMap"))
				{
					RightSideArtRenderer.material.SetTexture("_BaseColorMap", (Texture)(object)suitTexture);
				}
			}
			if ((Object)(object)MarqueeLight != (Object)null)
			{
				MarqueeLight.color = CurrentNeonColor;
				MarqueeLight.intensity = 0.65f;
				MarqueeLight.range = 3.5f;
			}
			Color color = Color.Lerp(new Color(0.9f, 0.75f, 0.25f), CurrentNeonColor, 0.18f);
			if ((Object)(object)LeftTrimRenderer != (Object)null && (Object)(object)LeftTrimRenderer.material != (Object)null)
			{
				LeftTrimRenderer.material.color = color;
			}
			if ((Object)(object)RightTrimRenderer != (Object)null && (Object)(object)RightTrimRenderer.material != (Object)null)
			{
				RightTrimRenderer.material.color = color;
			}
			if ((Object)(object)JoystickBallRenderer != (Object)null && (Object)(object)JoystickBallRenderer.material != (Object)null)
			{
				JoystickBallRenderer.material.color = CurrentNeonColor;
				if (JoystickBallRenderer.material.HasProperty("_BaseColor"))
				{
					JoystickBallRenderer.material.SetColor("_BaseColor", CurrentNeonColor);
				}
			}
		}

		public static void ConfigureMarqueeTMPMaterial(Material mat, Color accent)
		{
			//IL_0033: 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_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: 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_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)mat == (Object)null))
			{
				mat.EnableKeyword("GLOW_ON");
				mat.EnableKeyword("OUTLINE_ON");
				if (mat.HasProperty("_Color"))
				{
					mat.SetColor("_Color", accent);
				}
				if (mat.HasProperty("_BaseColor"))
				{
					mat.SetColor("_BaseColor", accent);
				}
				if (mat.HasProperty("_FaceColor"))
				{
					mat.SetColor("_FaceColor", accent);
				}
				Color val = default(Color);
				((Color)(ref val))..ctor(0.04f, 0.04f, 0.06f, 1f);
				if (mat.HasProperty("_OutlineColor"))
				{
					mat.SetColor("_OutlineColor", val);
				}
				if (mat.HasProperty("_OutlineWidth"))
				{
					mat.SetFloat("_OutlineWidth", 0.12f);
				}
				if (mat.HasProperty("_GlowColor"))
				{
					mat.SetColor("_GlowColor", accent);
				}
				if (mat.HasProperty("_GlowOffset"))
				{
					mat.SetFloat("_GlowOffset", 0f);
				}
				if (mat.HasProperty("_GlowInner"))
				{
					mat.SetFloat("_GlowInner", 0.15f);
				}
				if (mat.HasProperty("_GlowOuter"))
				{
					mat.SetFloat("_GlowOuter", 0.45f);
				}
				if (mat.HasProperty("_GlowPower"))
				{
					mat.SetFloat("_GlowPower", 1f);
				}
				if (mat.HasProperty("_EmissiveColor"))
				{
					mat.SetColor("_EmissiveColor", accent * 1.4f);
				}
				if (mat.HasProperty("_EmissionColor"))
				{
					mat.SetColor("_EmissionColor", accent * 1.4f);
				}
			}
		}

		public void AnimatePlayButtonPress()
		{
			isButtonPressed = true;
			playButtonPressOffset = -0.015f;
		}

		private void Update()
		{
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: 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_00e3: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0406: 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_042c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0434: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0451: Unknown result type (might be due to invalid IL or missing references)
			//IL_0456: Unknown result type (might be due to invalid IL or missing references)
			//IL_03db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0537: Unknown result type (might be due to invalid IL or missing references)
			//IL_053c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0586: Unknown result type (might be due to invalid IL or missing references)
			//IL_058b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0598: Unknown result type (might be due to invalid IL or missing references)
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_0565: Unknown result type (might be due to invalid IL or missing references)
			//IL_0573: Unknown result type (might be due to invalid IL or missing references)
			//IL_0578: Unknown result type (might be due to invalid IL or missing references)
			if (!((Behaviour)this).isActiveAndEnabled)
			{
				return;
			}
			float time = Time.time;
			float num = 0.9f + 0.1f * Mathf.Sin(time * 2f);
			if (!isFlickering && time >= nextFlickerTime)
			{
				isFlickering = true;
				flickerTimer = 0f;
			}
			float num2 = 1f;
			if (isFlickering)
			{
				flickerTimer += Time.deltaTime;
				if (flickerTimer >= flickerDuration)
				{
					ScheduleNextFlicker();
				}
				else
				{
					float num3 = Mathf.PingPong(flickerTimer * 42f, 1f);
					num2 = ((num3 > 0.45f) ? 1f : ((num3 > 0.2f) ? 0.35f : 0.15f));
				}
			}
			float num4 = num * num2;
			if ((Object)(object)marqueeTextMaterial != (Object)null)
			{
				Color val = CurrentNeonColor * num4;
				Color val2 = CurrentNeonColor * (num4 * 1.25f);
				if (marqueeTextMaterial.HasProperty(PropColor))
				{
					marqueeTextMaterial.SetColor(PropColor, val);
				}
				if (marqueeTextMaterial.HasProperty(PropBaseColor))
				{
					marqueeTextMaterial.SetColor(PropBaseColor, val);
				}
				if (marqueeTextMaterial.HasProperty(PropFaceColor))
				{
					marqueeTextMaterial.SetColor(PropFaceColor, val);
				}
				if (marqueeTextMaterial.HasProperty(PropGlowColor))
				{
					marqueeTextMaterial.SetColor(PropGlowColor, val2);
				}
				if (marqueeTextMaterial.HasProperty(PropEmissiveColor))
				{
					marqueeTextMaterial.SetColor(PropEmissiveColor, val);
				}
				if (marqueeTextMaterial.HasProperty(PropEmissionColor))
				{
					marqueeTextMaterial.SetColor(PropEmissionColor, val);
				}
			}
			if ((Object)(object)marqueeBorderMaterial != (Object)null)
			{
				SetMaterialIntensity(marqueeBorderMaterial, num4 * 1.2f);
			}
			if ((Object)(object)MarqueeLight != (Object)null)
			{
				MarqueeLight.intensity = (0.55f + 0.1f * Mathf.Sin(time * 2f)) * (isFlickering ? (num2 * 0.7f + 0.3f) : 1f);
			}
			bool flag = (Object)(object)terminal != (Object)null && terminal.occupiedByClientId.Value != -1;
			if (buttonMaterials != null && buttonMaterials.Length != 0)
			{
				if (flag)
				{
					for (int i = 0; i < buttonMaterials.Length; i++)
					{
						if ((Object)(object)buttonMaterials[i] != (Object)null)
						{
							SetMaterialIntensity(buttonMaterials[i], 2f);
						}
					}
				}
				else
				{
					float num5 = 3.2f;
					float num6 = time * num5 % (float)buttonMaterials.Length;
					for (int j = 0; j < buttonMaterials.Length; j++)
					{
						if (!((Object)(object)buttonMaterials[j] == (Object)null))
						{
							float num7 = Mathf.Abs((float)j - num6);
							if (num7 > (float)buttonMaterials.Length / 2f)
							{
								num7 = (float)buttonMaterials.Length - num7;
							}
							float intensity = Mathf.Clamp01(1f - num7) * 2.2f + 0.45f;
							SetMaterialIntensity(buttonMaterials[j], intensity);
						}
					}
				}
			}
			if ((Object)(object)PlayButtonTransform != (Object)null && isButtonPressed)
			{
				playButtonPressOffset = Mathf.MoveTowards(playButtonPressOffset, 0f, Time.deltaTime * 0.06f);
				PlayButtonTransform.localPosition = playButtonDefaultLocalPos + new Vector3(0f, playButtonPressOffset, 0f);
				if (Mathf.Approximately(playButtonPressOffset, 0f))
				{
					isButtonPressed = false;
					PlayButtonTransform.localPosition = playButtonDefaultLocalPos;
				}
			}
			if ((Object)(object)screenMaterial != (Object)null)
			{
				screenMaterial.mainTextureOffset = new Vector2(0f, (0f - time) * 0.04f);
				Color col = Color.HSVToRGB(time * 0.06f % 1f, 0.75f, 1f);
				SetMaterialEmission(screenMaterial, col, 1.35f);
			}
			if (!((Object)(object)JoystickPivot != (Object)null))
			{
				return;
			}
			Vector2 zero = Vector2.zero;
			if ((Object)(object)terminal != (Object)null && terminal.IsOccupied)
			{
				Keyboard current = Keyboard.current;
				if (current != null)
				{
					if (((ButtonControl)current.wKey).isPressed || ((ButtonControl)current.upArrowKey).isPressed)
					{
						zero.y += 1f;
					}
					if (((ButtonControl)current.sKey).isPressed || ((ButtonControl)current.downArrowKey).isPressed)
					{
						zero.y -= 1f;
					}
					if (((ButtonControl)current.aKey).isPressed || ((ButtonControl)current.leftArrowKey).isPressed)
					{
						zero.x -= 1f;
					}
					if (((ButtonControl)current.dKey).isPressed || ((ButtonControl)current.rightArrowKey).isPressed)
					{
						zero.x += 1f;
					}
				}
			}
			Quaternion val3 = Quaternion.identity;
			if (((Vector2)(ref zero)).sqrMagnitude > 0.01f)
			{
				((Vector2)(ref zero)).Normalize();
				val3 = Quaternion.Euler(zero.y * 10f, 0f, (0f - zero.x) * 10f);
			}
			JoystickPivot.localRotation = Quaternion.Slerp(JoystickPivot.localRotation, val3, Time.deltaTime * 12f);
		}

		private static void SetMaterialEmission(Material mat, Color col, float intensity)
		{
			//IL_0020: 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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)mat == (Object)null))
			{
				mat.EnableKeyword("_EMISSION");
				mat.EnableKeyword("_EMISSIVE_COLOR_MAP");
				Color val = col * intensity;
				if (mat.HasProperty("_EmissiveColor"))
				{
					mat.SetColor("_EmissiveColor", val);
				}
				if (mat.HasProperty("_EmissiveColorLDR"))
				{
					mat.SetColor("_EmissiveColorLDR", val);
				}
				if (mat.HasProperty("_EmissionColor"))
				{
					mat.SetColor("_EmissionColor", val);
				}
				if (mat.HasProperty("_EmissiveIntensity"))
				{
					mat.SetFloat("_EmissiveIntensity", intensity);
				}
				if (mat.HasProperty("_UnlitColor"))
				{
					mat.SetColor("_UnlitColor", val);
				}
				if (mat.HasProperty("_BaseColor"))
				{
					mat.SetColor("_BaseColor", val);
				}
			}
		}

		private static void SetMaterialIntensity(Material mat, float intensity)
		{
			if (!((Object)(object)mat == (Object)null) && mat.HasProperty("_EmissiveIntensity"))
			{
				mat.SetFloat("_EmissiveIntensity", intensity);
			}
		}

		private void OnDisable()
		{
			if ((Object)(object)MarqueeLight != (Object)null)
			{
				MarqueeLight.intensity = 0f;
			}
			if ((Object)(object)ScreenLight != (Object)null)
			{
				ScreenLight.intensity = 0f;
			}
		}

		private void OnEnable()
		{
			if ((Object)(object)MarqueeLight != (Object)null)
			{
				MarqueeLight.intensity = 1.3f;
			}
			if ((Object)(object)ScreenLight != (Object)null)
			{
				ScreenLight.intensity = 0.5f;
			}
		}
	}
	public static class ArcadeModelBuilder
	{
		private static readonly FieldInfo GlobalObjectIdHashField = typeof(NetworkObject).GetField("GlobalObjectIdHash", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

		private static readonly FieldInfo PrefabGlobalObjectIdHashField = typeof(NetworkObject).GetField("PrefabGlobalObjectIdHash", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

		private static Sprite _defaultHoverIcon;

		private static Texture2D[] cachedSuitTextures = null;

		public static void SetNetworkObjectHash(NetworkObject netObj, uint hash)
		{
			if (!((Object)(object)netObj == (Object)null))
			{
				GlobalObjectIdHashField?.SetValue(netObj, hash);
				PrefabGlobalObjectIdHashField?.SetValue(netObj, hash);
			}
		}

		public static GameObject BuildTerminalTemplate()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Expected O, but got Unknown
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_035d: Unknown result type (might be due to invalid IL or missing references)
			//IL_038a: Unknown result type (might be due to invalid IL or missing references)
			//IL_039e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03df: Unknown result type (might be due to invalid IL or missing references)
			//IL_040c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0461: Unknown result type (might be due to invalid IL or missing references)
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_0524: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: Unknown result type (might be due to invalid IL or missing references)
			//IL_0565: Unknown result type (might be due to invalid IL or missing references)
			//IL_0592: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0614: Unknown result type (might be due to invalid IL or missing references)
			//IL_0628: Unknown result type (might be due to invalid IL or missing references)
			//IL_063e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0664: Unknown result type (might be due to invalid IL or missing references)
			//IL_0678: Unknown result type (might be due to invalid IL or missing references)
			//IL_068e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_11f2: Expected O, but got Unknown
			//IL_121b: Unknown result type (might be due to invalid IL or missing references)
			//IL_123b: Unknown result type (might be due to invalid IL or missing references)
			//IL_124c: Unknown result type (might be due to invalid IL or missing references)
			//IL_125e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1272: Unknown result type (might be due to invalid IL or missing references)
			//IL_1289: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_12d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_12e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_130e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1310: Unknown result type (might be due to invalid IL or missing references)
			//IL_1317: Unknown result type (might be due to invalid IL or missing references)
			//IL_1340: Unknown result type (might be due to invalid IL or missing references)
			//IL_1354: Unknown result type (might be due to invalid IL or missing references)
			//IL_1383: Unknown result type (might be due to invalid IL or missing references)
			//IL_1397: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_13da: Unknown result type (might be due to invalid IL or missing references)
			//IL_1409: Unknown result type (might be due to invalid IL or missing references)
			//IL_141d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1482: Unknown result type (might be due to invalid IL or missing references)
			//IL_1489: Expected O, but got Unknown
			//IL_14b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_14e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_1543: Unknown result type (might be due to invalid IL or missing references)
			//IL_154c: Unknown result type (might be due to invalid IL or missing references)
			//IL_154e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1565: Unknown result type (might be due to invalid IL or missing references)
			//IL_1584: Unknown result type (might be due to invalid IL or missing references)
			//IL_0741: Unknown result type (might be due to invalid IL or missing references)
			//IL_0746: Unknown result type (might be due to invalid IL or missing references)
			//IL_0752: Unknown result type (might be due to invalid IL or missing references)
			//IL_0759: Unknown result type (might be due to invalid IL or missing references)
			//IL_079e: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0832: Unknown result type (might be due to invalid IL or missing references)
			//IL_0837: Unknown result type (might be due to invalid IL or missing references)
			//IL_0843: Unknown result type (might be due to invalid IL or missing references)
			//IL_084a: Unknown result type (might be due to invalid IL or missing references)
			//IL_088f: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0923: Unknown result type (might be due to invalid IL or missing references)
			//IL_0928: Unknown result type (might be due to invalid IL or missing references)
			//IL_0934: Unknown result type (might be due to invalid IL or missing references)
			//IL_093b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0980: Unknown result type (might be due to invalid IL or missing references)
			//IL_0994: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_09cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_09db: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a27: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a3b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a71: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a76: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a87: Unknown result type (might be due to invalid IL or missing references)
			//IL_0acc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ad1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b27: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b2c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b38: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b84: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b98: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bdf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c75: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c7a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c86: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c8d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d21: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d34: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d79: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d8d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e34: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e79: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e8a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e91: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ed6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f25: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f31: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f38: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f7d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f91: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fbb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fcf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ffc: Unknown result type (might be due to invalid IL or missing references)
			//IL_1010: Unknown result type (might be due to invalid IL or missing references)
			//IL_15f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_15f7: Expected O, but got Unknown
			//IL_1602: Unknown result type (might be due to invalid IL or missing references)
			//IL_1617: Unknown result type (might be due to invalid IL or missing references)
			//IL_161e: Expected O, but got Unknown
			//IL_1648: Unknown result type (might be due to invalid IL or missing references)
			//IL_167d: Unknown result type (might be due to invalid IL or missing references)
			//IL_169a: Unknown result type (might be due to invalid IL or missing references)
			//IL_16a1: Expected O, but got Unknown
			//IL_16ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_16db: Unknown result type (might be due to invalid IL or missing references)
			//IL_16ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_1701: Unknown result type (might be due to invalid IL or missing references)
			//IL_172f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1743: Unknown result type (might be due to invalid IL or missing references)
			//IL_1771: Unknown result type (might be due to invalid IL or missing references)
			//IL_1785: Unknown result type (might be due to invalid IL or missing references)
			//IL_17b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_17c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_17ea: Expected O, but got Unknown
			//IL_1813: Unknown result type (might be due to invalid IL or missing references)
			//IL_1833: Unknown result type (might be due to invalid IL or missing references)
			//IL_1844: Unknown result type (might be due to invalid IL or missing references)
			//IL_1856: Unknown result type (might be due to invalid IL or missing references)
			//IL_186a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1898: Unknown result type (might be due to invalid IL or missing references)
			//IL_18ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_18da: Unknown result type (might be due to invalid IL or missing references)
			//IL_18ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_191c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1930: Unknown result type (might be due to invalid IL or missing references)
			//IL_195e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1972: Unknown result type (might be due to invalid IL or missing references)
			//IL_1990: Unknown result type (might be due to invalid IL or missing references)
			//IL_19a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_19ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_19e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a14: Expected O, but got Unknown
			//IL_1a3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a82: Unknown result type (might be due to invalid IL or missing references)
			//IL_1aa2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1aa9: Expected O, but got Unknown
			//IL_1ad2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1af2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b03: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b15: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b29: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b57: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b6b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b99: Unknown result type (might be due to invalid IL or missing references)
			//IL_1bad: Unknown result type (might be due to invalid IL or missing references)
			//IL_1be9: Unknown result type (might be due to invalid IL or missing references)
			//IL_1bfb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c02: Expected O, but got Unknown
			//IL_1c2c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c95: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ca9: Unknown result type (might be due to invalid IL or missing references)
			//IL_1cd2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ce6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d22: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d36: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d73: Unknown result type (might be due to invalid IL or missing references)
			//IL_1da1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1db5: Unknown result type (might be due to invalid IL or missing references)
			//IL_1dea: Unknown result type (might be due to invalid IL or missing references)
			//IL_1dfe: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e27: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e3b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e69: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e7d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1eb2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ec6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1eef: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f03: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f31: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f45: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f7a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1f8e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1fb7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1fcb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ff9: Unknown result type (might be due to invalid IL or missing references)
			//IL_200d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2042: Unknown result type (might be due to invalid IL or missing references)
			//IL_2056: Unknown result type (might be due to invalid IL or missing references)
			//IL_207f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2093: Unknown result type (might be due to invalid IL or missing references)
			//IL_20c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_20d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_211c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2123: Expected O, but got Unknown
			//IL_214c: Unknown result type (might be due to invalid IL or missing references)
			//IL_215d: Unknown result type (might be due to invalid IL or missing references)
			//IL_216f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2183: Unknown result type (might be due to invalid IL or missing references)
			//IL_21a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_21d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_21e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_220a: Unknown result type (might be due to invalid IL or missing references)
			//IL_221e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2247: Unknown result type (might be due to invalid IL or missing references)
			//IL_225b: Unknown result type (might be due to invalid IL or missing references)
			//IL_2289: Unknown result type (might be due to invalid IL or missing references)
			//IL_229d: Unknown result type (might be due to invalid IL or missing references)
			//IL_22ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_22de: Unknown result type (might be due to invalid IL or missing references)
			//IL_230b: Unknown result type (might be due to invalid IL or missing references)
			//IL_231f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1075: Unknown result type (might be due to invalid IL or missing references)
			//IL_1089: Unknown result type (might be due to invalid IL or missing references)
			//IL_10c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_10d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_110b: Unknown result type (might be due to invalid IL or missing references)
			//IL_111f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1156: Unknown result type (might be due to invalid IL or missing references)
			//IL_116a: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("ArcadeTerminalTemplate");
			((Object)val).hideFlags = (HideFlags)61;
			Object.DontDestroyOnLoad((Object)(object)val);
			int num = LayerMask.NameToLayer("InteractableObject");
			if (num == -1)
			{
				num = 9;
			}
			val.layer = num;
			val.tag = "InteractTrigger";
			BoxCollider val2 = val.AddComponent<BoxCollider>();
			val2.center = new Vector3(0f, 1.65f, 0f);
			val2.size = new Vector3(1.04f, 3.3f, 0.94f);
			((Collider)val2).isTrigger = false;
			GameObject val3 = new GameObject("InteractTrigger");
			val3.transform.SetParent(val.transform, false);
			val3.transform.localPosition = new Vector3(0f, 1.5f, 0.55f);
			val3.layer = num;
			val3.tag = "InteractTrigger";
			BoxCollider val4 = val3.AddComponent<BoxCollider>();
			val4.center = Vector3.zero;
			val4.size = new Vector3(1.35f, 2.9f, 1.35f);
			((Collider)val4).isTrigger = true;
			InteractTrigger trigger = val3.AddComponent<InteractTrigger>();
			ConfigureInteractTrigger(trigger);
			NetworkObject netObj = val.AddComponent<NetworkObject>();
			SetNetworkObjectHash(netObj, 2937752460u);
			Terminal terminal = val.AddComponent<Terminal>();
			ArcadeCabinetVisuals arcadeCabinetVisuals = val.AddComponent<ArcadeCabinetVisuals>();
			Color color = default(Color);
			((Color)(ref color))..ctor(0.18f, 0.07f, 0.08f, 1f);
			Color color2 = default(Color);
			((Color)(ref color2))..ctor(0.06f, 0.06f, 0.08f, 1f);
			Color color3 = default(Color);
			((Color)(ref color3))..ctor(0.88f, 0.72f, 0.22f, 1f);
			Color color4 = default(Color);
			((Color)(ref color4))..ctor(0.12f, 0.12f, 0.14f, 1f);
			Color color5 = default(Color);
			((Color)(ref color5))..ctor(0.7f, 0.65f, 0.5f, 1f);
			Color currentNeonColor = arcadeCabinetVisuals.CurrentNeonColor;
			Material material = CreateCabinetMaterial(color);
			Material val5 = CreateCabinetMaterial(color2);
			Material material2 = CreateCabinetMaterial(color3, (Color?)new Color(0.2f, 0.15f, 0.04f), (Texture2D)null);
			Material material3 = CreateCabinetMaterial(color4);
			Material material4 = CreateCabinetMaterial(color5);
			Material material5 = CreateCabinetMaterial(currentNeonColor, currentNeonColor * 2.2f);
			Material val6 = CreateCabinetMaterial(currentNeonColor, currentNeonColor * 2.2f);
			CreateChildPrimitive(val, "Base_FlaredLip", (PrimitiveType)3, new Vector3(0f, 0.05f, 0f), new Vector3(1.06f, 0.1f, 0.96f), material);
			CreateChildPrimitive(val, "Base_Plinth", (PrimitiveType)3, new Vector3(0f, 0.28f, 0f), new Vector3(0.98f, 0.36f, 0.88f), material);
			CreateChildPrimitive(val, "Base_KickPlate", (PrimitiveType)3, new Vector3(0f, 0.13f, 0.445f), new Vector3(0.84f, 0.22f, 0.05f), val5);
			CreateChildPrimitive(val, "Body_LowerBelly", (PrimitiveType)3, new Vector3(0f, 0.81f, 0f), new Vector3(0.92f, 0.7f, 0.8f), material);
			CreateChildPrimitive(val, "Body_DeckStep", (PrimitiveType)3, new Vector3(0f, 1.18f, 0.08f), new Vector3(0.92f, 0.12f, 0.9f), material);
			CreateChildPrimitive(val, "Body_UpperSpine", (PrimitiveType)3, new Vector3(0f, 2.24f, -0.18f), new Vector3(0.9f, 2.1f, 0.54f), material);
			CreateChildPrimitive(val, "Body_SideLower_L", (PrimitiveType)3, new Vector3(-0.465f, 0.81f, 0f), new Vector3(0.05f, 0.7f, 0.86f), material);
			CreateChildPrimitive(val, "Body_SideLower_R", (PrimitiveType)3, new Vector3(0.465f, 0.81f, 0f), new Vector3(0.05f, 0.7f, 0.86f), material);
			CreateChildPrimitive(val, "Body_SideDeck_L", (PrimitiveType)3, new Vector3(-0.465f, 1.2f, 0.09f), new Vector3(0.05f, 0.16f, 0.94f), material);
			CreateChildPrimitive(val, "Body_SideDeck_R", (PrimitiveType)3, new Vector3(0.465f, 1.2f, 0.09f), new Vector3(0.05f, 0.16f, 0.94f), material);
			CreateChildPrimitive(val, "Body_SideScreen_L", (PrimitiveType)3, new Vector3(-0.465f, 1.76f, -0.05f), new Vector3(0.05f, 0.96f, 0.66f), material);
			CreateChildPrimitive(val, "Body_SideScreen_R", (PrimitiveType)3, new Vector3(0.465f, 1.76f, -0.05f), new Vector3(0.05f, 0.96f, 0.66f), material);
			CreateChildPrimitive(val, "Body_SideCanopy_L", (PrimitiveType)3, new Vector3(-0.465f, 2.75f, 0.08f), new Vector3(0.05f, 1.02f, 0.72f), material);
			CreateChildPrimitive(val, "Body_SideCanopy_R", (PrimitiveType)3, new Vector3(0.465f, 2.75f, 0.08f), new Vector3(0.05f, 1.02f, 0.72f), material);
			CreateChildPrimitive(val, "Body_ChamferLeft", (PrimitiveType)3, new Vector3(-0.435f, 3.25f, -0.02f), new Vector3(0.1f, 0.08f, 0.72f), material, Quaternion.Euler(0f, 0f, 45f));
			CreateChildPrimitive(val, "Body_ChamferRight", (PrimitiveType)3, new Vector3(0.435f, 3.25f, -0.02f), new Vector3(0.1f, 0.08f, 0.72f), material, Quaternion.Euler(0f, 0f, -45f));
			CreateChildPrimitive(val, "Body_Roof", (PrimitiveType)3, new Vector3(0f, 3.28f, -0.02f), new Vector3(0.84f, 0.05f, 0.72f), material);
			List<Renderer> list = new List<Renderer>();
			Vector3 val7 = default(Vector3);
			for (int i = -1; i <= 1; i += 2)
			{
				string text = ((i == -1) ? "Left" : "Right");
				float num2 = (float)i * 0.49f;
				((Vector3)(ref val7))..ctor(0.016f, 1f, 0.024f);
				GameObject val8 = CreateChildPrimitive(val, "SideNeon_" + text + "_Plinth_Front", (PrimitiveType)3, new Vector3(num2, 0.28f, 0.405f), new Vector3(val7.x, 0.32f, val7.z), material5);
				list.Add((Renderer)(object)val8.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_PFront_Top", (PrimitiveType)3, new Vector3(num2, 0.445f, 0.405f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				CreateChildPrimitive(val, "Cap_" + text + "_PFront_Btm", (PrimitiveType)3, new Vector3(num2, 0.115f, 0.405f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val9 = CreateChildPrimitive(val, "SideNeon_" + text + "_Plinth_Back", (PrimitiveType)3, new Vector3(num2, 0.28f, -0.405f), new Vector3(val7.x, 0.32f, val7.z), material5);
				list.Add((Renderer)(object)val9.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_PBack_Top", (PrimitiveType)3, new Vector3(num2, 0.445f, -0.405f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				CreateChildPrimitive(val, "Cap_" + text + "_PBack_Btm", (PrimitiveType)3, new Vector3(num2, 0.115f, -0.405f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val10 = CreateChildPrimitive(val, "SideNeon_" + text + "_Belly_Front", (PrimitiveType)3, new Vector3(num2, 0.79f, 0.395f), new Vector3(val7.x, 0.64f, val7.z), material5);
				list.Add((Renderer)(object)val10.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_BFront_Btm", (PrimitiveType)3, new Vector3(num2, 0.465f, 0.395f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val11 = CreateChildPrimitive(val, "SideNeon_" + text + "_Belly_Back", (PrimitiveType)3, new Vector3(num2, 0.79f, -0.395f), new Vector3(val7.x, 0.64f, val7.z), material5);
				list.Add((Renderer)(object)val11.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_BBack_Btm", (PrimitiveType)3, new Vector3(num2, 0.465f, -0.395f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val12 = CreateChildPrimitive(val, "SideNeon_" + text + "_Step_Deck_Front", (PrimitiveType)3, new Vector3(num2, 1.12f, 0.46f), new Vector3(val7.x, 0.02f, 0.13f), material5);
				list.Add((Renderer)(object)val12.GetComponent<MeshRenderer>());
				GameObject val13 = CreateChildPrimitive(val, "SideNeon_" + text + "_Step_Deck_Back", (PrimitiveType)3, new Vector3(num2, 1.12f, -0.37f), new Vector3(val7.x, 0.02f, 0.05f), material5);
				list.Add((Renderer)(object)val13.GetComponent<MeshRenderer>());
				GameObject val14 = CreateChildPrimitive(val, "SideNeon_" + text + "_Deck_Front", (PrimitiveType)3, new Vector3(num2, 1.2f, 0.525f), new Vector3(val7.x, 0.14f, val7.z), material5);
				list.Add((Renderer)(object)val14.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_DFront_Top", (PrimitiveType)3, new Vector3(num2, 1.275f, 0.525f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val15 = CreateChildPrimitive(val, "SideNeon_" + text + "_Deck_Back", (PrimitiveType)3, new Vector3(num2, 1.2f, -0.345f), new Vector3(val7.x, 0.14f, val7.z), material5);
				list.Add((Renderer)(object)val15.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_DBack_Top", (PrimitiveType)3, new Vector3(num2, 1.275f, -0.345f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val16 = CreateChildPrimitive(val, "SideNeon_" + text + "_Screen_Front", (PrimitiveType)3, new Vector3(num2, 1.76f, 0.245f), new Vector3(val7.x, 0.94f, val7.z), material5);
				list.Add((Renderer)(object)val16.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_SFront_Btm", (PrimitiveType)3, new Vector3(num2, 1.285f, 0.245f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val17 = CreateChildPrimitive(val, "SideNeon_" + text + "_Screen_Back", (PrimitiveType)3, new Vector3(num2, 1.76f, -0.345f), new Vector3(val7.x, 0.94f, val7.z), material5);
				list.Add((Renderer)(object)val17.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_SBack_Btm", (PrimitiveType)3, new Vector3(num2, 1.285f, -0.345f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val18 = CreateChildPrimitive(val, "SideNeon_" + text + "_Step_Canopy_Front", (PrimitiveType)3, new Vector3(num2, 2.24f, 0.325f), new Vector3(val7.x, 0.02f, 0.16f), material5);
				list.Add((Renderer)(object)val18.GetComponent<MeshRenderer>());
				GameObject val19 = CreateChildPrimitive(val, "SideNeon_" + text + "_Step_Canopy_Back", (PrimitiveType)3, new Vector3(num2, 2.24f, -0.295f), new Vector3(val7.x, 0.02f, 0.1f), material5);
				list.Add((Renderer)(object)val19.GetComponent<MeshRenderer>());
				GameObject val20 = CreateChildPrimitive(val, "SideNeon_" + text + "_Canopy_Front", (PrimitiveType)3, new Vector3(num2, 2.74f, 0.405f), new Vector3(val7.x, 0.98f, val7.z), material5);
				list.Add((Renderer)(object)val20.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_CFront_Top", (PrimitiveType)3, new Vector3(num2, 3.24f, 0.405f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				GameObject val21 = CreateChildPrimitive(val, "SideNeon_" + text + "_Canopy_Back", (PrimitiveType)3, new Vector3(num2, 2.74f, -0.245f), new Vector3(val7.x, 0.98f, val7.z), material5);
				list.Add((Renderer)(object)val21.GetComponent<MeshRenderer>());
				CreateChildPrimitive(val, "Cap_" + text + "_CBack_Top", (PrimitiveType)3, new Vector3(num2, 3.24f, -0.245f), new Vector3(0.014f, 0.01f, 0.02f), material5);
				float num3 = (float)i * 0.4935f;
				Texture2D suitTexture = GetSuitTexture(0);
				Material material6 = CreateCabinetMaterial(Color.white, (Color?)new Color(0.12f, 0.1f, 0.08f), suitTexture);
				GameObject val22 = CreateChildPrimitive(val, "SideArt_" + text, (PrimitiveType)3, new Vector3(num3, 1.76f, -0.05f), new Vector3(0.006f, 0.56f, 0.44f), material6);
				if (i == -1)
				{
					arcadeCabinetVisuals.LeftSideArtRenderer = (Renderer)(object)val22.GetComponent<MeshRenderer>();
				}
				else
				{
					arcadeCabinetVisuals.RightSideArtRenderer = (Renderer)(object)val22.GetComponent<MeshRenderer>();
				}
				float num4 = (float)i * 0.494f;
				GameObject val23 = CreateChildPrimitive(val, "Frame_" + text + "_Top", (PrimitiveType)3, new Vector3(num4, 2.04f, -0.05f), new Vector3(0.003f, 0.004f, 0.44f), material5);
				GameObject val24 = CreateChildPrimitive(val, "Frame_" + text + "_Btm", (PrimitiveType)3, new Vector3(num4, 1.48f, -0.05f), new Vector3(0.003f, 0.004f, 0.44f), material5);
				GameObject val25 = CreateChildPrimitive(val, "Frame_" + text + "_Front", (PrimitiveType)3, new Vector3(num4, 1.76f, 0.17f), new Vector3(0.003f, 0.56f, 0.004f), material5);
				GameObject val26 = CreateChildPrimitive(val, "Frame_" + text + "_Back", (PrimitiveType)3, new Vector3(num4, 1.76f, -0.27f), new Vector3(0.003f, 0.56f, 0.004f), material5);
				list.Add((Renderer)(object)val23.GetComponent<MeshRenderer>());
				list.Add((Renderer)(object)val24.GetComponent<MeshRenderer>());
				list.Add((Renderer)(object)val25.GetComponent<MeshRenderer>());
				list.Add((Renderer)(object)val26.GetComponent<MeshRenderer>());
			}
			arcadeCabinetVisuals.SideNeonRenderers = list.ToArray();
			arcadeCabinetVisuals.LeftTrimRenderer = null;
			arcadeCabinetVisuals.RightTrimRenderer = null;
			GameObject val27 = new GameObject("Marquee_Section");
			val27.transform.SetParent(val.transform, false);
			val27.transform.localPosition = new Vector3(0f, 2.78f, 0.22f);
			val27.transform.localRotation = Quaternion.Euler(-8f, 0f, 0f);
			val27.transform.localScale = Vector3.one;
			CreateChildPrimitive(val27, "Marquee_Housing", (PrimitiveType)3, Vector3.zero, new Vector3(0.96f, 0.44f, 0.46f), material);
			float num5 = default(float);
			float num6 = default(float);
			float num7 = default(float);
			Color.RGBToHSV(currentNeonColor, ref num5, ref num6, ref num7);
			Color color6 = Color.HSVToRGB(num5, 0.18f, 0.07f);
			Material material7 = CreateCabinetMaterial(color6);
			GameObject val28 = CreateChildPrimitive(val27, "Marquee_DarkPanel", (PrimitiveType)3, new Vector3(0f, 0f, 0.233f), new Vector3(0.9f, 0.38f, 0.008f), material7);
			arcadeCabinetVisuals.MarqueeFaceRenderer = (Renderer)(object)val28.GetComponent<MeshRenderer>();
			Material material8 = CreateCabinetMaterial(currentNeonColor, currentNeonColor * 1.2f);
			GameObject val29 = CreateChildPrimitive(val27, "Marquee_Border_Top", (PrimitiveType)3, new Vector3(0f, 0.186f, 0.236f), new Vector3(0.89f, 0.008f, 0.008f), material8);
			GameObject val30 = CreateChildPrimitive(val27, "Marquee_Border_Btm", (PrimitiveType)3, new Vector3(0f, -0.186f, 0.236f), new Vector3(0.89f, 0.008f, 0.008f), material8);
			GameObject val31 = CreateChildPrimitive(val27, "Marquee_Border_Left", (PrimitiveType)3, new Vector3(-0.446f, 0f, 0.236f), new Vector3(0.008f, 0.38f, 0.008f), material8);
			GameObject val32 = CreateChildPrimitive(val27, "Marquee_Border_Right", (PrimitiveType)3, new Vector3(0.446f, 0f, 0.236f), new Vector3(0.008f, 0.38f, 0.008f), material8);
			arcadeCabinetVisuals.MarqueeBorderRenderers = (Renderer[])(object)new Renderer[4]
			{
				(Renderer)val29.GetComponent<MeshRenderer>(),
				(Renderer)val30.GetComponent<MeshRenderer>(),
				(Renderer)val31.GetComponent<MeshRenderer>(),
				(Renderer)val32.GetComponent<MeshRenderer>()
			};
			GameObject val33 = new GameObject("Marquee_Text", new Type[1] { typeof(RectTransform) });
			val33.transform.SetParent(val27.transform, false);
			val33.transform.localPosition = new Vector3(0f, 0f, 0.242f);
			val33.transform.localRotation = Quaternion.Euler(0f, 180f, 0f);
			val33.transform.localScale = Vector3.one;
			TextMeshPro val34 = val33.AddComponent<TextMeshPro>();
			TMP_FontAsset gameTMPFont = TerminalUIManager.GetGameTMPFont();
			if ((Object)(object)gameTMPFont != (Object)null)
			{
				((TMP_Text)val34).font = gameTMPFont;
			}
			((TMP_Text)val34).text = "ARCADE";
			((TMP_Text)val34).alignment = (TextAlignmentOptions)514;
			((TMP_Text)val34).enableAutoSizing = false;
			((TMP_Text)val34).enableWordWrapping = false;
			((TMP_Text)val34).overflowMode = (TextOverflowModes)0;
			((Graphic)val34).color = currentNeonColor;
			((TMP_Text)val34).faceColor = Color32.op_Implicit(currentNeonColor);
			((TMP_Text)val34).outlineColor = new Color32((byte)10, (byte)10, (byte)15, byte.MaxValue);
			RectTransform component = val33.GetComponent<RectTransform>();
			component.sizeDelta = new Vector2(0.85f, 0.35f);
			((TMP_Text)val34).fontSize = 2.4f;
			((TMP_Text)val34).ForceMeshUpdate(false, false);
			if (((TMP_Text)val34).preferredWidth > 0.05f)
			{
				float num8 = 0.72f;
				((TMP_Text)val34).fontSize = Mathf.Clamp(((TMP_Text)val34).fontSize * (num8 / ((TMP_Text)val34).preferredWidth), 1.2f, 3.2f);
				((TMP_Text)val34).ForceMeshUpdate(false, false);
			}
			Material mat = (((TMP_Text)val34).fontMaterial = new Material(((TMP_Text)val34).fontMaterial));
			ArcadeCabinetVisuals.ConfigureMarqueeTMPMaterial(mat, currentNeonColor);
			arcadeCabinetVisuals.MarqueeTextMesh = val34;
			GameObject val36 = new GameObject("Neon_PointLight");
			val36.transform.SetParent(val27.transform, false);
			val36.transform.localPosition = new Vector3(0f, 0f, 0.45f);
			Light val37 = val36.AddComponent<Light>();
			val37.type = (LightType)2;
			val37.range = 3.5f;
			val37.intensity = 0.65f;
			val37.color = currentNeonColor;
			val37.shadows = (LightShadows)0;
			arcadeCabinetVisuals.MarqueeLight = val37;
			GameObject val38 = new GameObject("Speaker_Section");
			val38.transform.SetParent(val.transform, false);
			val38.transform.localPosition = new Vector3(0f, 2.22f, 0.18f);
			val38.transform.localScale = Vector3.one;
			CreateChildPrimitive(val38, "Speaker_Grille_Plate", (PrimitiveType)3, Vector3.zero, new Vector3(0.86f, 0.075f, 0.1f), material);
			CreateChildPrimitive(val38, "Speaker_Slot_1", (PrimitiveType)3, new Vector3(0f, 0.02f, 0.052f), new Vector3(0.6f, 0.01f, 0.008f), val5);
			CreateChildPrimitive(val38, "Speaker_Slot_2", (PrimitiveType)3, new Vector3(0f, 0f, 0.052f), new Vector3(0.6f, 0.01f, 0.008f), val5);
			CreateChildPrimitive(val38, "Speaker_Slot_3", (PrimitiveType)3, new Vector3(0f, -0.02f, 0.052f), new Vector3(0.6f, 0.01f, 0.008f), val5);
			GameObject val39 = new GameObject("CRT_Section");
			val39.transform.SetParent(val.transform, false);
			val39.transform.localPosition = new Vector3(0f, 1.72f, 0.1f);
			val39.transform.localRotation = Quaternion.Euler(15f, 0f, 0f);
			val39.transform.localScale = Vector3.one;
			CreateChildPrimitive(val39, "CRT_Housing", (PrimitiveType)3, Vector3.zero, new Vector3(0.86f, 0.6f, 0.18f), material3);
			CreateChildPrimitive(val39, "CRT_FrameTop", (PrimitiveType)3, new Vector3(0f, 0.25f, 0.092f), new Vector3(0.7f, 0.025f, 0.015f), material2);
			CreateChildPrimitive(val39, "CRT_FrameBtm", (PrimitiveType)3, new Vector3(0f, -0.25f, 0.092f), new Vector3(0.7f, 0.025f, 0.015f), material2);
			CreateChildPrimitive(val39, "CRT_FrameLeft", (PrimitiveType)3, new Vector3(-0.33f, 0f, 0.092f), new Vector3(0.025f, 0.5f, 0.015f), material2);
			CreateChildPrimitive(val39, "CRT_FrameRight", (PrimitiveType)3, new Vector3(0.33f, 0f, 0.092f), new Vector3(0.025f, 0.5f, 0.015f), material2);
			Texture2D texture = CreateScreenTexture();
			Material material9 = CreateCabinetMaterial(Color.white, (Color?)new Color(0.45f, 0.75f, 0.95f), texture);
			GameObject val40 = CreateChildPrimitive(val39, "Screen_Display", (PrimitiveType)3, new Vector3(0f, 0f, 0.094f), new Vector3(0.64f, 0.48f, 0.008f), material9);
			arcadeCabinetVisuals.ScreenRenderer = (Renderer)(object)val40.GetComponent<MeshRenderer>();
			GameObject val41 = new GameObject("Screen_Light");
			val41.transform.SetParent(val39.transform, false);
			val41.transform.localPosition = new Vector3(0f, 0f, 0.25f);
			Light val42 = val41.AddComponent<Light>();
			val42.type = (LightType)2;
			val42.range = 2.4f;
			val42.intensity = 0.7f;
			val42.color = new Color(0.35f, 0.7f, 0.95f);
			val42.shadows = (LightShadows)0;
			arcadeCabinetVisuals.ScreenLight = val42;
			GameObject val43 = new GameObject("ControlDeck_Section");
			val43.transform.SetParent(val.transform, false);
			val43.transform.localPosition = new Vector3(0f, 1.18f, 0.26f);
			val43.transform.localRotation = Quaternion.Euler(15f, 0f, 0f);
			val43.transform.localScale = Vector3.one;
			CreateChildPrimitive(val43, "ControlDeck_Housing", (PrimitiveType)3, Vector3.zero, new Vector3(0.9f, 0.12f, 0.38f), material);
			CreateChildPrimitive(val43, "ControlDeck_FrontTrim", (PrimitiveType)3, new Vector3(0f, 0.061f, 0.19f), new Vector3(0.91f, 0.018f, 0.018f), material2);
			CreateChildPrimitive(val43, "Joystick_BaseDisc", (PrimitiveType)2, new Vector3(-0.22f, 0.0675f, 0.02f), new Vector3(0.065f, 0.0075f, 0.065f), val5);
			CreateTruncatedCone(val43, "Joystick_RubberBoot", 0.02f, 0.007f, 0.018f, new Vector3(-0.22f, 0.075f, 0.02f), val5);
			GameObject val44 = new GameObject("JoystickPivot");
			val44.transform.SetParent(val43.transform, false);
			val44.transform.localPosition = new Vector3(-0.22f, 0.075f, 0.02f);
			arcadeCabinetVisuals.JoystickPivot = val44.transform;
			CreateChildPrimitive(val44, "Joystick_Shaft", (PrimitiveType)2, new Vector3(0f, 0.0325f, 0f), new Vector3(0.012f, 0.0325f, 0.012f), material4);
			Material material10 = CreateCabinetMaterial(new Color(0.95f, 0.12f, 0.22f), (Color?)new Color(0.6f, 0.06f, 0.08f), (Texture2D)null);
			GameObject val45 = CreateChildPrimitive(val44, "Joystick_Ball", (PrimitiveType)0, new Vector3(0f, 0.082f, 0f), new Vector3(0.04f, 0.04f, 0.04f), material10);
			arcadeCabinetVisuals.JoystickBallRenderer = (Renderer)(object)val45.GetComponent<MeshRenderer>();
			List<Renderer> list2 = new List<Renderer>();
			Material material11 = CreateCabinetMaterial(new Color(0.95f, 0.18f, 0.18f), (Color?)new Color(1f, 0.2f, 0.2f), (Texture2D)null);
			CreateChildPrimitive(val43, "Bezel_Red", (PrimitiveType)2, new Vector3(0.13f, 0.063f, 0.07f), new Vector3(0.058f, 0.008f, 0.058f), val5);
			GameObject val46 = CreateChildPrimitive(val43, "Button_Red", (PrimitiveType)2, new Vector3(0.13f, 0.072f, 0.07f), new Vector3(0.046f, 0.022f, 0.046f), material11);
			list2.Add((Renderer)(object)val46.GetComponent<MeshRenderer>());
			Material material12 = CreateCabinetMaterial(new Color(0.98f, 0.85f, 0.18f), (Color?)new Color(1f, 0.85f, 0.2f), (Texture2D)null);
			CreateChildPrimitive(val43, "Bezel_Yellow", (PrimitiveType)2, new Vector3(0.24f, 0.063f, 0.07f), new Vector3(0.058f, 0.008f, 0.058f), val5);
			GameObject val47 = CreateChildPrimitive(val43, "Button_Yellow", (PrimitiveType)2, new Vector3(0.24f, 0.072f, 0.07f), new Vector3(0.046f, 0.022f, 0.046f), material12);
			list2.Add((Renderer)(object)val47.GetComponent<MeshRenderer>());
			Material material13 = CreateCabinetMaterial(new Color(0.18f, 0.95f, 0.35f), (Color?)new Color(0.2f, 1f, 0.3f), (Texture2D)null);
			CreateChildPrimitive(val43, "Bezel_Green", (PrimitiveType)2, new Vector3(0.13f, 0.063f, -0.03f), new Vector3(0.058f, 0.008f, 0.058f), val5);
			GameObject val48 = CreateChildPrimitive(val43, "Button_Green", (PrimitiveType)2, new Vector3(0.13f, 0.072f, -0.03f), new Vector3(0.046f, 0.022f, 0.046f), material13);
			list2.Add((Renderer)(object)val48.GetComponent<MeshRenderer>());
			Material material14 = CreateCabinetMaterial(new Color(0.2f, 0.6f, 0.98f), (Color?)new Color(0.2f, 0.6f, 1f), (Texture2D)null);
			CreateChildPrimitive(val43, "Bezel_Blue", (PrimitiveType)2, new Vector3(0.24f, 0.063f, -0.03f), new Vector3(0.058f, 0.008f, 0.058f), val5);
			GameObject val49 = CreateChildPrimitive(val43, "Button_Blue", (PrimitiveType)2, new Vector3(0.24f, 0.072f, -0.03f), new Vector3(0.046f, 0.022f, 0.046f), material14);
			list2.Add((Renderer)(object)val49.GetComponent<MeshRenderer>());
			Material material15 = CreateCabinetMaterial(new Color(0.98f, 0.9f, 0.4f), (Color?)new Color(1.2f, 0.95f, 0.45f), (Texture2D)null);
			CreateChildPrimitive(val43, "Bezel_Play", (PrimitiveType)2, new Vector3(0f, 0.064f, 0.02f), new Vector3(0.095f, 0.01f, 0.095f), material2);
			GameObject val50 = CreateChildPrimitive(val43, "Button_Play", (PrimitiveType)2, new Vector3(0f, 0.076f, 0.02f), new Vector3(0.078f, 0.026f, 0.078f), material15);
			list2.Add((Renderer)(object)val50.GetComponent<MeshRenderer>());
			arcadeCabinetVisuals.PlayButtonTransform = val50.transform;
			arcadeCabinetVisuals.ButtonRenderers = list2.ToArray();
			GameObject val51 = new GameObject("CoinDoor_Section");
			val51.transform.SetParent(val.transform, false);
			val51.transform.localPosition = new Vector3(0f, 0.8f, 0.38f);
			val51.transform.localScale = Vector3.one;
			CreateChildPrimitive(val51, "CoinDoor_Plate", (PrimitiveType)3, Vector3.zero, new Vector3(0.46f, 0.36f, 0.02f), val5);
			Texture2D texture2 = CreateScrapLabelTexture();
			Material material16 = CreateCabinetMaterial(Color.white, null, texture2);
			CreateChildPrimitive(val51, "Scrap_LabelPlate", (PrimitiveType)3, new Vector3(0.1f, 0.11f, 0.015f), new Vector3(0.1f, 0.028f, 0.006f), material16);
			Material material17 = CreateCabinetMaterial(new Color(1f, 0.65f, 0.15f), (Color?)new Color(1.4f, 0.8f, 0.2f), (Texture2D)null);
			CreateChildPrimitive(val51, "Scrap_GlowOutline", (PrimitiveType)3, new Vector3(0.1f, 0.04f, 0.016f), new Vector3(0.08f, 0.1f, 0.006f), material17);
			CreateChildPrimitive(val51, "Scrap_SlotSlit", (PrimitiveType)3, new Vector3(0.1f, 0.04f, 0.018f), new Vector3(0.014f, 0.065f, 0.006f), val5);
			CreateChildPrimitive(val, "Payout_Housing", (PrimitiveType)3, new Vector3(0f, 0.52f, 0.35f), new Vector3(0.44f, 0.2f, 0.16f), material4);
			CreateChildPrimitive(val, "Payout_Cavity", (PrimitiveType)3, new Vector3(0f, 0.52f, 0.4f), new Vector3(0.38f, 0.15f, 0.1f), val5);
			val.SetActive(false);
			return val;
		}

		public static Sprite GetDefaultHoverIcon()
		{
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_defaultHoverIcon != (Object)null && (Object)(object)_defaultHoverIcon.texture != (Object)null && ((Texture)_defaultHoverIcon.texture).width > 1)
			{
				return _defaultHoverIcon;
			}
			try
			{
				InteractTrigger[] array = Resources.FindObjectsOfTypeAll<InteractTrigger>();
				InteractTrigger[] array2 = array;
				foreach (InteractTrigger val in array2)
				{
					if ((Object)(object)val != (Object)null && (Object)(object)val.hoverIcon != (Object)null && (Object)(object)val.hoverIcon.texture != (Object)null && ((Texture)val.hoverIcon.texture).width > 1)
					{
						_defaultHoverIcon = val.hoverIcon;
						return _defaultHoverIcon;
					}
				}
			}
			catch
			{
			}
			if ((Object)(object)_defaultHoverIcon == (Object)null)
			{
				Texture2D val2 = new Texture2D(1, 1, (TextureFormat)4, false);
				val2.SetPixel(0, 0, Color.clear);
				val2.Apply();
				_defaultHoverIcon = Sprite.Create(val2, new Rect(0f, 0f, 1f, 1f), new Vector2(0.5f, 0.5f));
			}
			return _defaultHoverIcon;
		}

		private static void ConfigureInteractTrigger(InteractTrigger trigger)
		{
			if (!((Object)(object)trigger == (Object)null))
			{
				Sprite defaultHoverIcon = GetDefaultHoverIcon();
				trigger.hoverTip = "[E] Play Arcade";
				trigger.hoverIcon = defaultHoverIcon;
				trigger.disabledHoverIcon = defaultHoverIcon;
				trigger.interactable = true;
				trigger.holdInteraction = false;
				trigger.touchTrigger = false;
				trigger.oneHandedItemAllowed = true;
				trigger.twoHandedItemAllowed = true;
				trigger.triggerOnce = false;
				trigger.timeToHold = 0f;
			}
		}

		public static GameObject CreateChildPrimitive(GameObject parent, string name, PrimitiveType type, Vector3 localPos, Vector3 localScale, Material material, Quaternion? localRot = null)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.CreatePrimitive(type);
			((Object)val).name = name;
			Collider component = val.GetComponent<Collider>();
			if ((Object)(object)component != (Object)null)
			{
				Object.Destroy((Object)(object)component);
			}
			val.transform.SetParent(parent.transform, false);
			val.transform.localPosition = localPos;
			val.transform.localScale = localScale;
			if (localRot.HasValue)
			{
				val.transform.localRotation = localRot.Value;
			}
			MeshRenderer component2 = val.GetComponent<MeshRenderer>();
			if ((Object)(object)component2 != (Object)null && (Object)(object)material != (Object)null)
			{
				((Renderer)component2).sharedMaterial = material;
			}
			return val;
		}

		public static GameObject CreateTruncatedCone(GameObject parent, string name, float bottomRadius, float topRadius, float height, Vector3 localPos, Material mat)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_001f: 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_002f: Expected O, but got Unknown
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_00e5: 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_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: 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_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(name);
			val.transform.SetParent(parent.transform, false);
			val.transform.localPosition = localPos;
			int num = 24;
			Mesh val2 = new Mesh();
			((Object)val2).name = name + "_Mesh";
			Vector3[] array = (Vector3[])(object)new Vector3[(num + 1) * 2];
			Vector3[] array2 = (Vector3[])(object)new Vector3[array.Length];
			Vector2[] array3 = (Vector2[])(object)new Vector2[array.Length];
			int[] array4 = new int[num * 6];
			for (int i = 0; i <= num; i++)
			{
				float num2 = (float)i / (float)num * MathF.PI * 2f;
				float num3 = Mathf.Cos(num2);
				float num4 = Mathf.Sin(num2);
				array[i] = new Vector3(num3 * bottomRadius, 0f, num4 * bottomRadius);
				int num5 = i;
				Vector3 val3 = new Vector3(num3, 0.25f, num4);
				array2[num5] = ((Vector3)(ref val3)).normalized;
				array3[i] = new Vector2((float)i / (float)num, 0f);
				array[num + 1 + i] = new Vector3(num3 * topRadius, height, num4 * topRadius);
				int num6 = num + 1 + i;
				val3 = new Vector3(num3, 0.25f, num4);
				array2[num6] = ((Vector3)(ref val3)).normalized;
				array3[num + 1 + i] = new Vector2((float)i / (float)num, 1f);
			}
			int num7 = 0;
			for (int j = 0; j < num; j++)
			{
				int num8 = j;
				int num9 = j + 1;
				int num10 = num + 1 + j;
				int num11 = num + 1 + j + 1;
				array4[num7++] = num8;
				array4[num7++] = num10;
				array4[num7++] = num9;
				array4[num7++] = num9;
				array4[num7++] = num10;
				array4[num7++] = num11;
			}
			val2.vertices = array;
			val2.normals = array2;
			val2.uv = array3;
			val2.triangles = array4;
			val2.RecalculateBounds();
			MeshFilter val4 = val.AddComponent<MeshFilter>();
			val4.sharedMesh = val2;
			MeshRenderer val5 = val.AddComponent<MeshRenderer>();
			((Renderer)val5).sharedMaterial = mat;
			return val;
		}

		public static void ExportMarqueeScreenshots(string outputDir)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_004a: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Expected O, but got Unknown
			//IL_020e: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!Directory.Exists(outputDir))
				{
					Directory.CreateDirectory(outputDir);
				}
				GameObject val = BuildTerminalTemplate();
				ArcadeCabinetVisuals component = val.GetComponent<ArcadeCabinetVisuals>();
				GameObject val2 = new GameObject("MarqueeCaptureCamera");
				Camera val3 = val2.AddComponent<Camera>();
				val3.clearFlags = (CameraClearFlags)2;
				val3.backgroundColor = new Color(0.04f, 0.04f, 0.06f, 1f);
				val3.nearClipPlane = 0.05f;
				val3.farClipPlane = 40f;
				val3.fieldOfView = 48f;
				var array = new[]
				{
					new
					{
						Name = "term0_pink",
						Color = new Color(1f, 0.15f, 0.53f, 1f),
						Index = 0
					},
					new
					{
						Name = "term1_cyan",
						Color = new Color(0f, 0.94f, 1f, 1f),
						Index = 1
					}
				};
				Vector3 target = default(Vector3);
				((Vector3)(ref target))..ctor(0f, 2.78f, 0.22f);
				var array2 = new[]
				{
					new
					{
						Name = "front_2m",
						Pos = new Vector3(0f, 2.78f, 2.22f),
						Target = target
					},
					new
					{
						Name = "front_5m",
						Pos = new Vector3(0f, 2.78f, 5.22f),
						Target = target
					},
					new
					{
						Name = "angle30_2.5m",
						Pos = new Vector3(1.25f, 2.78f, 2.385f),
						Target = target
					}
				};
				int num = 1920;
				int num2 = 1080;
				var array3 = array;
				foreach (var anon in array3)
				{
					if ((Object)(object)component != (Object)null)
					{
						component.ApplyVariant(anon.Index, anon.Color);
					}
					var array4 = array2;
					foreach (var anon2 in array4)
					{
						((Component)val3).transform.position = anon2.Pos;
						((Component)val3).transform.LookAt(anon2.Target);
						RenderTexture val4 = (val3.targetTexture = RenderTexture.GetTemporary(num, num2, 24, (RenderTextureFormat)0));
						val3.Render();
						RenderTexture.active = val4;
						Texture2D val5 = new Texture2D(num, num2, (TextureFormat)3, false);
						val5.ReadPixels(new Rect(0f, 0f, (float)num, (float)num2), 0, 0);
						val5.Apply();
						RenderTexture.active = null;
						byte[] bytes = ImageConversion.EncodeToPNG(val5);
						Object.Destroy((Object)(object)val5);
						RenderTexture.ReleaseTemporary(val4);
						string text = "marquee_" + anon.Name + "_" + anon2.Name + ".png";
						string path = Path.Combine(outputDir, text);
						File.WriteAllBytes(path, bytes);
						ManualLogSource logger = Plugin.Logger;
						if (logger != null)
						{
							logger.LogInfo((object)("Exported verification screenshot: " + text));
						}
					}
				}
				Object.Destroy((Object)(object)val2);
				Object.Destroy((Object)(object)val);
			}
			catch (Exception arg)
			{
				ManualLogSource logger2 = Plugin.Logger;
				if (logger2 != null)
				{
					logger2.LogError((object)$"ExportMarqueeScreenshots failed: {arg}");
				}
			}
		}

		public static void ExportSideTrimScreenshots(string outputDir)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_004a: 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_00bd: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Expected O, but got Unknown
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!Directory.Exists(outputDir))
				{
					Directory.CreateDirectory(outputDir);
				}
				GameObject val = BuildTerminalTemplate();
				ArcadeCabinetVisuals component = val.GetComponent<ArcadeCabinetVisuals>();
				GameObject val2 = new GameObject("SideTrimCaptureCamera");
				Camera val3 = val2.AddComponent<Camera>();
				val3.clearFlags = (CameraClearFlags)2;
				val3.backgroundColor = new Color(0.04f, 0.04f, 0.06f, 1f);
				val3.nearClipPlane = 0.05f;
				val3.farClipPlane = 40f;
				val3.fieldOfView = 48f;
				var array = new[]
				{
					new
					{
						Name = "term0_pink",
						Color = new Color(1f, 0.15f, 0.53f, 1f),
						Index = 0
					},
					new
					{
						Name = "term1_cyan",
						Color = new Color(0f, 0.94f, 1f, 1f),
						Index = 1
					}
				};
				var array2 = new[]
				{
					new
					{
						Name = "side_left_2m",
						Pos = new Vector3(-2.2f, 1.76f, 0f),
						Target = new Vector3(0f, 1.76f, 0f)
					},
					new
					{
						Name = "side_right_2m",
						Pos = new Vector3(2.2f, 1.76f, 0f),
						Target = new Vector3(0f, 1.76f, 0f)
					},
					new
					{
						Name = "three_quarter_5m",
						Pos = new Vector3(3.5f, 2.2f, 3.5f),
						Target = new Vector3(0f, 1.6f, 0f)
					},
					new
					{
						Name = "corner_closeup",
						Pos = new Vector3(-0.95f, 1.3f, 0.75f),
						Target = new Vector3(-0.49f, 1.18f, 0.45f)
					}
				};
				int num = 1920;
				int num2 = 1080;
				var array3 = array;
				foreach (var anon in array3)
				{
					if ((Object)(object)component != (Object)null)
					{
						component.ApplyVariant(anon.Index, anon.Color);
					}
					var array4 = array2;
					foreach (var anon2 in array4)
					{
						((Component)val3).transform.position = anon2.Pos;
						((Component)val3).transform.LookAt(anon2.Target);
						RenderTexture val4 = (val3.targetTexture = RenderTexture.GetTemporary(num, num2, 24, (RenderTextureFormat)0));
						val3.Render();
						RenderTexture.active = val4;
						Texture2D val5 = new Texture2D(num, num2, (TextureFormat)3, false);
						val5.ReadPixels(new Rect(0f, 0f, (float)num, (float)num2), 0, 0);
						val5.Apply();
						RenderTexture.active = null;
						byte[] bytes = ImageConversion.EncodeToPNG(val5);
						Object.Destroy((Object)(object)val5);
						RenderTexture.ReleaseTemporary(val4);
						string text = "sidetrim_" + anon.Name + "_" + anon2.Name + ".png";
						string path = Path.Combine(outputDir, text);
						File.WriteAllBytes(path, bytes);
						ManualLogSource logger = Plugin.Logger;
						if (logger != null)
						{
							logger.LogInfo((object)("Exported verification screenshot: " + text));
						}
					}
				}
				Object.Destroy((Object)(object)val2);
				Object.Destroy((Object)(object)val);
			}
			catch (Exception arg)
			{
				ManualLogSource logger2 = Plugin.Logger;
				if (logger2 != null)
				{
					logger2.LogError((object)$"ExportSideTrimScreenshots failed: {arg}");
				}
			}
		}

		public static void ExportJoystickScreenshots(string outputDir)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_004a: 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_00bd: 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)
			//IL_00f6: 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_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: 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_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Expected O, but got Unknown
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!Directory.Exists(outputDir))
				{
					Directory.CreateDirectory(outputDir);
				}
				GameObject val = BuildTerminalTemplate();
				ArcadeCabinetVisuals component = val.GetComponent<ArcadeCabinetVisuals>();
				GameObject val2 = new GameObject("JoystickCaptureCamera");
				Camera val3 = val2.AddComponent<Camera>();
				val3.clearFlags = (CameraClearFlags)2;
				val3.backgroundColor = new Color(0.04f, 0.04f, 0.06f, 1f);
				val3.nearClipPlane = 0.01f;
				val3.farClipPlane = 20f;
				val3.fieldOfView = 45f;
				var array = new[]
				{
					new
					{
						Name = "term0_pink",
						Color = new Color(1f, 0.15f, 0.53f, 1f),
						Index = 0
					},
					new
					{
						Name = "term1_cyan",
						Color = new Color(0f, 0.94f, 1f, 1f),
						Index = 1
					}
				};
				Transform val4 = val.transform.Find("ControlDeck_Section/JoystickPivot/Joystick_Ball");
				Vector3 val5 = (Vector3)(((Object)(object)val4 != (Object)null) ? val4.position : new Vector3(-0.22f, 1.25f, 0.28f));
				var array2 = new[]
				{
					new
					{
						Name = "front_closeup",
						Pos = val5 + new Vector3(0f, 0.06f, 0.42f),
						Target = val5
					},
					new
					{
						Name = "side_left_closeup",
						Pos = val5 + new Vector3(-0.42f, 0.06f, 0f),
						Target = val5
					},
					new
					{
						Name = "top_down_clearance",
						Pos = val5 + new Vector3(0f, 0.48f, 0f),
						Target = val5
					}
				};
				int num = 1920;
				int num2 = 1080;
				var array3 = array;
				foreach (var anon in array3)
				{
					if ((Object)(object)component != (Object)null)
					{
						component.ApplyVariant(anon.Index, anon.Color);
					}
					var array4 = array2;
					foreach (var anon2 in array4)
					{
						((Component)val3).transform.position = anon2.Pos;
						((Component)val3).transform.LookAt(anon2.Target);
						RenderTexture val6 = (val3.targetTexture = RenderTexture.GetTemporary(num, num2, 24, (RenderTextureFormat)0));
						val3.Render();
						RenderTexture.active = val6;
						Texture2D val7 = new Texture2D(num, num2, (TextureFormat)3, false);
						val7.ReadPixels(new Rect(0f, 0f, (float)num, (float)num2), 0, 0);
						val7.Apply();
						RenderTexture.active = null;
						byte[] bytes = ImageConversion.EncodeToPNG(val7);
						Object.Destroy((Object)(object)val7);
						RenderTexture.ReleaseTemporary(val6);
						string text = "joystick_" + anon.Name + "_" + anon2.Name + ".png";
						string path = Path.Combine(outputDir, text);
						File.WriteAllBytes(path, bytes);
						ManualLogSource logger = Plugin.Logger;
						if (logger != null)
						{
							logger.LogInfo((object)("Exported verification screenshot: " + text));
						}
					}
				}
				Object.Destroy((Object)(object)val2);
				Object.Destroy((Object)(object)val);
			}
			catch (Exception arg)
			{
				ManualLogSource logger2 = Plugin.Logger;
				if (logger2 != null)
				{
					logger2.LogError((object)$"ExportJoystickScreenshots failed: {arg}");
				}
			}
		}

		public static Material CreateCabinetMaterial(Color color, Color? emission = null, Texture2D texture = null)
		{
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Expected O, but got Unknown
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			Shader val = Shader.Find("HDRP/Lit");
			if ((Object)(object)val == (Object)null)
			{
				Shader[] array = Resources.FindObjectsOfTypeAll<Shader>();
				foreach (Shader val2 in array)
				{
					if ((Object)(object)val2 != (Object)null && ((Object)val2).name == "HDRP/Lit")
					{
						val = val2;
						break;
					}
				}
			}
			if ((Object)(object)val == (Object)null)
			{
				val = Shader.Find("HDRP/Unlit");
			}
			if ((Object)(object)val == (Object)null)
			{
				Shader[] array2 = Resources.FindObjectsOfTypeAll<Shader>();
				foreach (Shader val3 in array2)
				{
					if ((Object)(object)val3 != (Object)null && ((Object)val3).name == "HDRP/Unlit")
					{
						val = val3;
						break;
					}
				}
			}
			if ((Object)(object)val == (Object)null)
			{
				MeshRenderer[] array3 = Object.FindObjectsOfType<MeshRenderer>();
				foreach (MeshRenderer val4 in array3)
				{
					if ((Object)(object)((Renderer)val4).sharedMaterial != (Object)null && (Object)(object)((Renderer)val4).sharedMaterial.shader != (Object)null && !((Object)((Renderer)val4).sharedMaterial.shader).name.Contains("Error"))
					{
						val = ((Renderer)val4).sharedMaterial.shader;
						break;
					}
				}
			}
			if ((Object)(object)val == (Object)null)
			{
				val = Shader.Find("Standard");
			}
			Material val5 = new Material(val);
			val5.color = color;
			if (val5.HasProperty("_BaseColor"))
			{
				val5.SetColor("_BaseColor", color);
			}
			if (val5.HasProperty("_Color"))
			{
				val5.SetColor("_Color", color);
			}
			if (val5.HasProperty("_UnlitColor"))
			{
				val5.SetColor("_UnlitColor", color);
			}
			if ((Object)(object)texture != (Object)null)
			{
				val5.mainTexture = (Texture)(object)texture;
				if (val5.HasProperty("_BaseColorMap"))
				{
					val5.SetTexture("_BaseColorMap", (Texture)(object)texture);
				}
				if (val5.HasProperty("_MainTex"))
				{
					val5.SetTexture("_MainTex", (Texture)(object)texture);
				}
			}
			if (emission.HasValue)
			{
				val5.EnableKeyword("_EMISSION");
				val5.EnableKeyword("_EMISSIVE_COLOR_MAP");
				if (val5.HasProperty("_UseEmissiveIntensity"))
				{
					val5.SetFloat("_UseEmissiveIntensity", 1f);
				}
				if (val5.HasProperty("_EmissiveIntensityUnit"))
				{
					val5.SetInt("_EmissiveIntensityUnit", 0);
				}
				if (val5.HasProperty("_EmissiveIntensity"))
				{
					val5.SetFloat("_EmissiveIntensity", 2f);
				}
				if (val5.HasProperty("_EmissiveColor"))
				{
					val5.SetColor("_EmissiveColor", emission.Value);
				}
				if (val5.HasProperty("_EmissiveColorLDR"))
				{
					val5.SetColor("_EmissiveColorLDR", emission.Value);
				}
				if (val5.HasProperty("_EmissionColor"))
				{
					val5.SetColor("_EmissionColor", emission.Value);
				}
			}
			return val5;
		}

		public static Texture2D CreateScreenTexture()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: 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_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: 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_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			int num = 128;
			int num2 = 128;
			Texture2D val = new Texture2D(num, num2, (TextureFormat)4, false);
			((Texture)val).filterMode = (FilterMode)0;
			Color[] array = (Color[])(object)new Color[num * num2];
			Color val2 = default(Color);
			((Color)(ref val2))..ctor(0.04f, 0.05f, 0.08f, 1f);
			Color color = default(Color);
			((Color)(ref color))..ctor(0.2f, 0.85f, 0.95f, 1f);
			Color color2 = default(Color);
			((Color)(ref color2))..ctor(0.98f, 0.82f, 0.22f, 1f);
			Color color3 = default(Color);
			((Color)(ref color3))..ctor(0.95f, 0.18f, 0.22f, 1f);
			Color color4 = default(Color);
			((Color)(ref color4))..ctor(0.08f, 0.1f, 0.14f, 1f);
			for (int i = 0; i < num2; i++)
			{
				for (int j = 0; j < num; j++)
				{
					array[i * num + j] = val2;
				}
			}
			DrawRect(array, num, 4, 4, num - 8, 2, color);
			DrawRect(array, num, 4, num2 - 6, num - 8, 2, color);
			DrawRect(array, num, 4, 4, 2, num2 - 8, color);
			DrawRect(array, num, num - 6, 4, 2, num2 - 8, color);
			int num3 = 28;
			int num4 = 34;
			int num5 = 56;
			int[] array2 = new int[3] { 14, 50, 86 };
			for (int k = 0; k < 3; k++)
			{
				DrawRect(array, num, array2[k], num5, num3, num4, color4);
				DrawRect(array, num, array2[k], num5, num3, 1, color2);
				DrawRect(array, num, array2[k], num5 + num4 - 1, num3, 1, color2);
				DrawRect(array, num, array2[k], num5, 1, num4, color2);
				DrawRect(array, num, array2[k] + num3 - 1, num5, 1, num4, color2);
			}
			DrawLuckySeven(array, num, array2[0] + 7, num5 + 6, color3);
			DrawStar(array, num, array2[1] + 14, num5 + 17, 8, color2);
			DrawDiamond(array, num, array2[2] + 14, num5 + 17, 9, color);
			DrawRect(array, num, 20, 102, 88, 12, color4);
			DrawRect(array, num, 24, 106, 80, 2, color2);
			DrawRect(array, num, 10, 14, 108, 26, new Color(0.18f, 0.08f, 0.02f, 1f));
			DrawRect(array, num, 10, 14, 108, 1, color2);
			DrawRect(array, num, 10, 39, 108, 1, color2);
			D