using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using Microsoft.CodeAnalysis; using Sensus.Audio; using Sensus.Captions; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("UnityEngine.AnimationModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.AudioModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.CoreModule")] [assembly: IgnoresAccessChecksTo("UnityEngine")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.UIModule")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Sensus")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Sensus")] [assembly: AssemblyTitle("Sensus")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Sensus { internal static class LanguagePolicy { internal const string ChinesePluginGuid = "Aueser.LCChineseProject"; internal const string LegacyChinesePluginGuid = "cn.codex.v81testchn"; internal static bool UseChinese(string preference, IEnumerable loadedPluginGuids) { if (string.Equals(preference, "Chinese", StringComparison.OrdinalIgnoreCase)) { return true; } if (string.Equals(preference, "English", StringComparison.OrdinalIgnoreCase)) { return false; } foreach (string loadedPluginGuid in loadedPluginGuids) { if (string.Equals(loadedPluginGuid, "Aueser.LCChineseProject", StringComparison.OrdinalIgnoreCase) || string.Equals(loadedPluginGuid, "cn.codex.v81testchn", StringComparison.OrdinalIgnoreCase)) { return true; } } return false; } } internal static class LethalConfigIntegration { [MethodImpl(MethodImplOptions.NoInlining)] internal static Action Register(SensusSettings settings, bool chinese) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Expected O, but got Unknown //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown //IL_0180: Expected O, but got Unknown //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Expected O, but got Unknown //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Expected O, but got Unknown //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Expected O, but got Unknown //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Expected O, but got Unknown //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Expected O, but got Unknown //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Expected O, but got Unknown //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Expected O, but got Unknown //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Expected O, but got Unknown //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Expected O, but got Unknown //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Expected O, but got Unknown //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Expected O, but got Unknown //IL_02ed: Expected O, but got Unknown //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Expected O, but got Unknown //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Expected O, but got Unknown //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Expected O, but got Unknown //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Expected O, but got Unknown //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Expected O, but got Unknown //IL_0370: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Expected O, but got Unknown //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Expected O, but got Unknown //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Expected O, but got Unknown //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Expected O, but got Unknown //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Expected O, but got Unknown //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_0414: Expected O, but got Unknown //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0443: Expected O, but got Unknown //IL_0443: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Expected O, but got Unknown //IL_0454: Unknown result type (might be due to invalid IL or missing references) //IL_0459: Unknown result type (might be due to invalid IL or missing references) //IL_0460: Expected O, but got Unknown //IL_0460: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Expected O, but got Unknown //IL_048e: Expected O, but got Unknown //IL_048e: Unknown result type (might be due to invalid IL or missing references) //IL_0498: Expected O, but got Unknown //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04c7: Expected O, but got Unknown //IL_04c7: Unknown result type (might be due to invalid IL or missing references) //IL_04d1: Expected O, but got Unknown //IL_04d8: Unknown result type (might be due to invalid IL or missing references) //IL_0500: Expected O, but got Unknown //IL_0500: Unknown result type (might be due to invalid IL or missing references) //IL_050a: Expected O, but got Unknown //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0539: Expected O, but got Unknown //IL_0539: Unknown result type (might be due to invalid IL or missing references) //IL_0543: Expected O, but got Unknown //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_0572: Expected O, but got Unknown //IL_0572: Unknown result type (might be due to invalid IL or missing references) //IL_057c: Expected O, but got Unknown LethalConfigManager.SkipAutoGen(); List> labels = new List>(); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.SpokenSubtitles, Describe(new BoolCheckBoxOptions(), "Dialogue", "音频对白", "Spoken subtitles", "音频对白字幕", "Independent of event display mode. LC Chinese Project owns dialogue when loaded (including manual English mode). Manage its subtitles in its settings; provider readiness is not verified.", "独立于事件显示模式。安装汉化时对白由 LC-Chinese-Project 管理(含 Sensus 手动英文模式),请在汉化设置中调整。检测到插件不代表已验证字幕服务就绪。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.Enabled, Describe(new BoolCheckBoxOptions(), "General", "常规", "Enabled", "启用提示", "Enable local creature sound captions and peripheral cues.", "启用本地生物声音字幕与周边提示。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new TextDropDownConfigItem(settings.DisplayMode, Describe(new TextDropDownOptions(Array.Empty()), "Peripheral", "周边声音", "Display mode", "显示模式", "Captions: subtitles only. Peripheral: indicators only. Hybrid: both. Applies immediately.", "Captions:仅字幕;Peripheral:仅周边提示;Hybrid:字幕与提示同时显示。即时生效。提示旁的名称仍由“显示声音标签”控制。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.RingSize, Describe(new FloatSliderOptions(), "Peripheral", "周边声音", "Ring size", "方向环范围", "Move markers closer to or farther from the center without changing hearing range.", "调整标记距画面中心的范围,不改变听域。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.MarkerScale, Describe(new FloatSliderOptions(), "Peripheral", "周边声音", "Marker size", "标记大小", "Scale symbols and their sound labels.", "缩放声音图形及名称标签。"))); ConfigEntry markerCount = settings.MarkerCount; IntInputFieldOptions val = new IntInputFieldOptions(); ((BaseRangeOptions)val).Min = 0; ((BaseRangeOptions)val).Max = int.MaxValue; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(markerCount, Describe(val, "Peripheral", "周边声音", "Maximum markers", "详细标记上限", "0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority.", "0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.MarkerLabels, Describe(new BoolCheckBoxOptions(), "Peripheral", "周边声音", "Sound labels", "显示声音标签", "Keep names visible while learning sound symbols.", "学习图形含义时保留声音名称。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.LowMotion, Describe(new BoolCheckBoxOptions(), "Peripheral", "周边声音", "Low motion", "低动态模式", "No decorative pulse or smooth movement; directions still update.", "关闭装饰性扩张和平滑移动;方向仍正常更新。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new TextDropDownConfigItem(settings.Language, Describe(new TextDropDownOptions(Array.Empty()), "General", "常规", "Language", "语言", "Auto detects LC Chinese Project by GUID only. Changes apply live; reopen the menu to refresh its labels.", "Auto 按汉化插件 GUID 自动切换,不受版本号影响;Chinese/English 可手动覆盖。提示立即切换,重新打开菜单刷新名称。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.Preview, Describe(new BoolCheckBoxOptions(), "Preview", "预览", "Show preview", "显示演示字幕", "Close the menu in a round to see a labelled native-style example. Turn off after testing.", "进入游戏回合并关闭菜单后显示原生样式演示字幕。它不代表真实怪物;测试后请关闭。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.UnlocatedIndicators, Describe(new BoolCheckBoxOptions(), "Peripheral", "周边声音", "Unlocated indicators", "显示无方向提示", "Optional fixed tray for sounds without a reliable bearing. Off by default.", "为无法可靠定位的声音显示固定提示栏,默认关闭,不影响字幕。"))); ConfigEntry unlocatedCount = settings.UnlocatedCount; IntInputFieldOptions val2 = new IntInputFieldOptions(); ((BaseRangeOptions)val2).Min = 0; ((BaseRangeOptions)val2).Max = int.MaxValue; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(unlocatedCount, Describe(val2, "Peripheral", "周边声音", "Maximum unlocated", "无方向提示上限", "0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority.", "0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.UnlocatedText, Describe(new BoolCheckBoxOptions(), "Peripheral", "周边声音", "Show Unlocated text", "显示“无方向”文字", "Append Unlocated to fixed-tray labels. Off by default; does not toggle indicators.", "在右下角提示名称后显示“无方向”文字,默认关闭;不影响无方向提示本身,即时生效。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.Scale, Describe(new FloatSliderOptions(), "Layout", "布局", "Caption scale", "字幕缩放", "Scale the game's native text style, applied immediately.", "缩放游戏原生文字样式,即时生效。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.BottomAligned, Describe(new BoolCheckBoxOptions(), "Layout", "布局", "Dock to bottom", "底部等距对齐", "Match bottom and right margins; turn off to use manual vertical position.", "底部与右侧等距;关闭后恢复手动纵向位置,即时生效。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.VerticalPosition, Describe(new FloatSliderOptions(), "Layout", "布局", "Vertical position", "纵向位置", "0 is the bottom of the screen; 1 is the top. Applied immediately.", "0 为屏幕底部,1 为顶部;即时生效。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.ShowDirection, Describe(new BoolCheckBoxOptions(), "Captions", "字幕", "Show directions", "显示声音方向", "Coarse directions for spatial sounds. Unclear directions are labelled.", "空间声音显示粗略方位;不明确时会标注。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.CaptionDuration, Describe(new FloatSliderOptions(), "Captions", "字幕", "Hold seconds", "字幕保留时间", "Retain past sounds with frozen directions. This does not mean the danger ended.", "保留刚才听到的声音,方向冻结;不代表危险解除。"))); ConfigEntry maxCaptions = settings.MaxCaptions; IntInputFieldOptions val3 = new IntInputFieldOptions(); ((BaseRangeOptions)val3).Min = 0; ((BaseRangeOptions)val3).Max = int.MaxValue; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(maxCaptions, Describe(val3, "Captions", "字幕", "Maximum rows", "最大显示条数", "0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority.", "0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.MinimumGain, Describe(new FloatSliderOptions(), "Advanced", "高级", "Audibility threshold", "可感知阈值", "Prototype estimated gain threshold. Lower values include quieter sounds; listening calibration is pending.", "原型的估计音量阈值;越低越容易显示轻声,尚需试听校准。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.Diagnostics, Describe(new BoolCheckBoxOptions(), "Advanced", "高级", "Diagnostic counters", "诊断计数", "Write summary counts every ten seconds. Does not record audio or voice.", "每十秒记录汇总计数,不录制声音或语音。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(settings.ShowBackground, Describe(new BoolCheckBoxOptions(), "Layout", "布局", "Show backgrounds", "显示声音背景板", "Show solid backgrounds behind captions and peripheral labels. Text and symbols stay visible when off.", "显示字幕和周边标签的纯色背景板;关闭后文字与图形仍显示。即时生效。"))); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(settings.BackgroundOpacity, Describe(new FloatSliderOptions(), "Layout", "布局", "Background opacity", "声音背景板不透明度", "0 is transparent; 1 is opaque. Applies to captions and peripheral labels, without changing text opacity.", "0 全透明,1 不透明;同时用于字幕与周边标签,不影响文字透明度。即时生效。"))); Refresh(chinese); return Refresh; T Describe(T options, string sectionEn, string sectionZh, string en, string zh, string descriptionEn, string descriptionZh) where T : notnull, BaseOptions { ((BaseOptions)options).RequiresRestart = false; Apply(chinese); labels.Add(Apply); return options; void Apply(bool cn) { ((BaseOptions)options).Section = (cn ? sectionZh : sectionEn); ((BaseOptions)options).Name = (cn ? zh : en); ((BaseOptions)options).Description = (cn ? descriptionZh : descriptionEn); } } void Refresh(bool cn) { foreach (Action item in labels) { item(cn); } LethalConfigManager.SetModDescription(cn ? "V81 生物听觉辅助:分类配色与图形、周边声音方向、短字幕与持续反馈。原生 UGUI 风格;逐事件实机与声学校准仍需验证。" : "V81 creature hearing assistance: category colors and shapes, peripheral directions and captions. Native UGUI style; per-event runtime and acoustic validation pending."); } } } internal sealed class NativeCaptionPresenter { private readonly ManualLogSource log; private HUDManager? owner; private RectTransform? panel; private Canvas? canvas; private TextMeshProUGUI? header; private TextMeshProUGUI? caption; private Image? background; private float startupRemaining = 4f; private float nextDiagnostic; private bool firstLiveReported; private string lastLoggedState = ""; private TMP_FontAsset? checkedFont; private string measuredText = ""; private string measuredTitle = ""; private float measuredWidth; private float measuredUnit; private float measuredBodyHeight; private float measuredTitleHeight; private float measuredContentWidth; private TMP_FontAsset? measuredFont; private readonly PeripheralPresenter peripheral; private readonly Vector3[] slotCorners = (Vector3[])(object)new Vector3[4]; private const string ChinesePreview = "左侧 · 上弦音乐\n右前方 · 枪声"; private const string EnglishPreview = "Left · Winding music\nFront-right · Gunshot"; internal string Status { get; private set; } = "waiting-for-hud"; internal NativeCaptionPresenter(ManualLogSource log) { this.log = log; peripheral = new PeripheralPresenter(log); } internal void Tick(SensusSettings settings, bool chinese, string liveCaptions, bool captureReady, SoundField field, string spoken = "") { //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Expected O, but got Unknown //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_0367: 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_05b6: Unknown result type (might be due to invalid IL or missing references) //IL_05e0: Unknown result type (might be due to invalid IL or missing references) //IL_061c: Unknown result type (might be due to invalid IL or missing references) //IL_061e: Unknown result type (might be due to invalid IL or missing references) //IL_07b5: Unknown result type (might be due to invalid IL or missing references) //IL_079b: Unknown result type (might be due to invalid IL or missing references) //IL_07ba: Unknown result type (might be due to invalid IL or missing references) //IL_07cf: Unknown result type (might be due to invalid IL or missing references) //IL_07d4: Unknown result type (might be due to invalid IL or missing references) //IL_07d7: Unknown result type (might be due to invalid IL or missing references) //IL_07e4: Unknown result type (might be due to invalid IL or missing references) //IL_07f1: Unknown result type (might be due to invalid IL or missing references) //IL_07f8: Unknown result type (might be due to invalid IL or missing references) //IL_0905: Unknown result type (might be due to invalid IL or missing references) //IL_090c: 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_093c: Unknown result type (might be due to invalid IL or missing references) //IL_0941: Unknown result type (might be due to invalid IL or missing references) //IL_094c: Unknown result type (might be due to invalid IL or missing references) //IL_0951: Unknown result type (might be due to invalid IL or missing references) //IL_09af: Unknown result type (might be due to invalid IL or missing references) //IL_09b4: Unknown result type (might be due to invalid IL or missing references) //IL_09c2: Unknown result type (might be due to invalid IL or missing references) //IL_09c7: Unknown result type (might be due to invalid IL or missing references) //IL_09d1: Unknown result type (might be due to invalid IL or missing references) //IL_09e5: Unknown result type (might be due to invalid IL or missing references) //IL_09f5: Unknown result type (might be due to invalid IL or missing references) //IL_0a07: Unknown result type (might be due to invalid IL or missing references) //IL_0a0c: Unknown result type (might be due to invalid IL or missing references) //IL_0a10: Unknown result type (might be due to invalid IL or missing references) HUDManager instance = HUDManager.Instance; if ((Object)(object)owner != (Object)(object)instance) { Clear(); owner = instance; startupRemaining = 4f; firstLiveReported = false; } if ((Object)(object)instance == (Object)null) { SetState("waiting-for-hud", settings); return; } PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; bool menuOpen = (Object)(object)val != (Object)null && (val.inTerminalMenu || ((Object)(object)val.quickMenuManager != (Object)null && val.quickMenuManager.isMenuOpen)); CaptionDisplayMode captionDisplayMode = CaptionDisplayPolicy.Select(settings.Enabled.Value, (Object)(object)val != (Object)null && val.isPlayerControlled, (Object)(object)val != (Object)null && val.isPlayerDead, menuOpen, instance.hudHidden, settings.Preview.Value, !string.IsNullOrEmpty(spoken) || !string.IsNullOrEmpty(liveCaptions) || (settings.DisplayMode.Value != "Captions" && field.HasSignals), startup: false); if ((uint)(captionDisplayMode - 6) > 2u) { peripheral.Hide(); if ((Object)(object)panel != (Object)null) { ((Component)panel).gameObject.SetActive(false); } if (captionDisplayMode == CaptionDisplayMode.Disabled) { startupRemaining = 4f; } SetState(captionDisplayMode.ToString(), settings); return; } if ((Object)(object)panel == (Object)null && !CreatePanel(instance)) { SetState("waiting-for-native-templates", settings); return; } if ((Object)(object)canvas == (Object)null || !((Behaviour)canvas).isActiveAndEnabled) { SetState("native-canvas-inactive", settings); return; } if ((Object)(object)instance.tipsPanelBody == (Object)null || (Object)(object)instance.tipsPanelHeader == (Object)null) { SetState("native-font-source-unavailable", settings); return; } bool flag = captionDisplayMode == CaptionDisplayMode.Preview; bool flag2 = captionDisplayMode == CaptionDisplayMode.Startup; bool flag3 = settings.DisplayMode.Value != "Captions"; float num = Mathf.Max(14f, ((TMP_Text)instance.tipsPanelBody).fontSize) * settings.Scale.Value * 0.85f; RectTransform val2 = (RectTransform)((Component)canvas).transform; Rect val3 = CaptionArea(instance, val2, num); float yMax = ((Rect)(ref val3)).yMax; float yMin = ((Rect)(ref val3)).yMin; Rect rect = val2.rect; ((Rect)(ref val3)).yMax = Mathf.Min(yMax, yMin + ((Rect)(ref rect)).height * 0.48f); if (flag3 && !flag2) { peripheral.Tick(canvas, instance.tipsPanelBody, field, settings, chinese, flag, val3); } else { peripheral.Hide(); } peripheral.MeasureUnlocated(val3, Mathf.Max(14f, ((TMP_Text)instance.tipsPanelBody).fontSize) * settings.MarkerScale.Value * 0.85f); float num2 = num * 0.5f; float num3; if (!settings.BottomAligned.Value) { rect = val2.rect; float yMin2 = ((Rect)(ref rect)).yMin; rect = val2.rect; num3 = yMin2 + ((Rect)(ref rect)).height * settings.VerticalPosition.Value; } else { num3 = ((Rect)(ref val3)).yMin; } float bottom = Mathf.Clamp(num3, ((Rect)(ref val3)).yMin, ((Rect)(ref val3)).yMax - peripheral.UnlocatedHeight); PeripheralPresenter peripheralPresenter = peripheral; Rect safe = val3; rect = val2.rect; peripheralPresenter.ArrangeUnlocated(safe, bottom, ((Rect)(ref rect)).center); if (settings.DisplayMode.Value == "Peripheral" && spoken.Length == 0) { ((Component)panel).gameObject.SetActive(false); SetState("indicators-only", settings); return; } string text = ((!flag) ? ((!flag2) ? ((spoken.Length == 0) ? liveCaptions : (spoken + ((liveCaptions.Length == 0) ? "" : ("\n" + liveCaptions)))) : ((!captureReady) ? (chinese ? "声音采集未就绪,请查看日志" : "Sound capture unavailable; check the log") : (chinese ? "声音字幕已启用" : "Sound captions enabled"))) : (chinese ? "左侧 · 上弦音乐\n右前方 · 枪声" : "Left · Winding music\nFront-right · Gunshot")); if (flag && flag3) { text = (chinese ? "转头查看方向 · 后方低吼每隔数秒消退" : "Turn to see directions · rear growl fades periodically"); } if (!flag && liveCaptions.Length > 0) { AudioCapture current = AudioCapture.Current; if (current != null && current.OmittedCaptions > 0) { text += (chinese ? $"\n另有 {current.OmittedCaptions} 项 · 轮换显示" : $"\n{current.OmittedCaptions} more · rotating"); } } if (string.IsNullOrEmpty(text)) { ((Component)panel).gameObject.SetActive(false); return; } string text2 = ((!flag) ? (chinese ? "SENSUS / 声音线索" : "SENSUS / SOUND CUES") : (chinese ? "SENSUS / 界面演示 · 非真实事件" : "SENSUS / UI PREVIEW · NOT LIVE")); if (flag && !captureReady) { text2 += (chinese ? " · 采集未就绪" : " · CAPTURE UNAVAILABLE"); } ((Component)panel).gameObject.SetActive(true); SyncStyle(header, instance.tipsPanelHeader); SyncStyle(caption, instance.tipsPanelBody); bool flag4 = flag || flag2; ((Component)header).gameObject.SetActive(flag4); ((TMP_Text)header).text = text2; ((TMP_Text)caption).text = text; ((TMP_Text)header).fontSize = num * 0.65f; ((TMP_Text)caption).fontSize = num; ((Graphic)header).color = new Color(1f, 0.62f, 0.22f, 1f); ((Graphic)caption).color = new Color(0.96f, 0.96f, 0.92f, 1f); ((Graphic)background).color = new Color(0.02f, 0.025f, 0.02f, settings.BackgroundOpacity.Value); ((Component)background).gameObject.SetActive(settings.ShowBackground.Value && settings.BackgroundOpacity.Value > 0f); Rect val4 = val3; if (peripheral.UnlocatedHeight > 0f) { ((Rect)(ref val4)).yMax = ((Rect)(ref val4)).yMax - (peripheral.UnlocatedHeight + num2); } AudioCapture current2 = AudioCapture.Current; if (current2 != null) { current2.CaptionScreenBudget = Mathf.Max(1, DisplayCapacity.Rows(((Rect)(ref val4)).height - num * 3f - ((spoken.Length > 0) ? (num * 4f) : 0f), num * 3f)); } float num4 = Mathf.Min(num * (float)(flag4 ? 18 : 14), ((Rect)(ref val4)).width); if (num4 <= num * 3f) { ((Component)panel).gameObject.SetActive(false); SetState("native-canvas-layout-pending", settings); return; } float num5 = num * (flag3 ? 0.4f : 0.7f); string text3 = (flag4 ? text2 : ""); if (measuredText != text || measuredTitle != text3 || measuredWidth != num4 - num5 * 2f || measuredUnit != num || (Object)(object)measuredFont != (Object)(object)((TMP_Text)caption).font) { measuredText = text; measuredTitle = text3; measuredWidth = num4 - num5 * 2f; measuredUnit = num; measuredFont = ((TMP_Text)caption).font; Vector2 val5 = (flag4 ? ((TMP_Text)header).GetPreferredValues(text2, measuredWidth, float.PositiveInfinity) : Vector2.zero); Vector2 preferredValues = ((TMP_Text)caption).GetPreferredValues(text, measuredWidth, float.PositiveInfinity); measuredTitleHeight = val5.y; measuredBodyHeight = preferredValues.y; measuredContentWidth = Mathf.Max(val5.x, preferredValues.x); } if (((Rect)(ref val4)).height < num5 * 2f + num * 2f) { ((Component)panel).gameObject.SetActive(false); SetState("native-canvas-layout-pending", settings); return; } float num6 = Mathf.Min(measuredTitleHeight, ((Rect)(ref val4)).height * 0.3f); float num7 = (flag4 ? (num * 0.3f) : 0f); float num8 = Mathf.Min(Mathf.Max(num * 1.2f, measuredBodyHeight), ((Rect)(ref val4)).height - num5 * 2f - num6 - num7); ((TMP_Text)caption).enableAutoSizing = measuredBodyHeight > num8; ((TMP_Text)caption).fontSizeMin = num * 0.55f; ((TMP_Text)caption).fontSizeMax = num; float num9 = num5 * 2f + num6 + num7 + num8; RectTransform? obj = panel; RectTransform? obj2 = panel; Vector2 val6 = default(Vector2); ((Vector2)(ref val6))..ctor(0f, 0f); obj2.anchorMax = val6; obj.anchorMin = val6; panel.pivot = new Vector2(1f, 0.5f); float num10; if (!settings.BottomAligned.Value) { rect = val2.rect; float yMin3 = ((Rect)(ref rect)).yMin; rect = val2.rect; num10 = yMin3 + ((Rect)(ref rect)).height * settings.VerticalPosition.Value; } else { num10 = ((Rect)(ref val4)).yMin + num9 * 0.5f; } float num11 = Mathf.Clamp(num10, ((Rect)(ref val4)).yMin + num9 * 0.5f, ((Rect)(ref val4)).yMax - num9 * 0.5f); RectTransform? obj3 = panel; float xMax = ((Rect)(ref val4)).xMax; rect = val2.rect; float num12 = xMax - ((Rect)(ref rect)).xMin; rect = val2.rect; obj3.anchoredPosition = new Vector2(num12, num11 - ((Rect)(ref rect)).yMin); panel.sizeDelta = new Vector2(num4, num9); PeripheralPresenter peripheralPresenter2 = peripheral; Rect safe2 = val3; float bottom2 = num11 + num9 * 0.5f + num2; rect = val2.rect; peripheralPresenter2.ArrangeUnlocated(safe2, bottom2, ((Rect)(ref rect)).center); Place(((TMP_Text)header).rectTransform, num5, num5, num4 - 2f * num5, num6); Place(((TMP_Text)caption).rectTransform, num5, num5 + num6 + num7, num4 - 2f * num5, num8); if (chinese && (Object)(object)((TMP_Text)caption).font != (Object)null && (Object)(object)checkedFont != (Object)(object)((TMP_Text)caption).font) { checkedFont = ((TMP_Text)caption).font; uint[] array = default(uint[]); if (!((TMP_Text)caption).font.HasCharacters("左侧 · 上弦音乐\n右前方 · 枪声" + text2, ref array, true, true)) { log.LogWarning((object)"Sensus native font is missing Chinese glyphs; check LC Chinese Project font support or select English."); } } SetState($"visible-{captionDisplayMode}", settings); if (flag2) { startupRemaining = Mathf.Max(0f, startupRemaining - Time.unscaledDeltaTime); } if (captionDisplayMode == CaptionDisplayMode.Live && !firstLiveReported) { firstLiveReported = true; log.LogInfo((object)"First live sound caption submitted to the Sensus panel. Visual confirmation is still required."); } if (settings.Diagnostics.Value && Time.unscaledTime >= nextDiagnostic) { nextDiagnostic = Time.unscaledTime + 10f; log.LogInfo((object)$"UI: state={Status}, active={((Component)panel).gameObject.activeInHierarchy}, canvas={((Behaviour)canvas).isActiveAndEnabled}, alpha={caption.canvasRenderer.GetInheritedAlpha():F2}, glyphs={((TMP_Text)caption).textInfo.characterCount}, size={num4:F0}x{num9:F0}."); } } private bool CreatePanel(HUDManager hud) { //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0194: 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_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hud.tipsPanelBody == (Object)null || (Object)(object)hud.tipsPanelHeader == (Object)null || (Object)(object)hud.HUDContainer == (Object)null) { return false; } Canvas componentInParent = hud.HUDContainer.GetComponentInParent(); canvas = ((componentInParent != null) ? componentInParent.rootCanvas : null); Image componentInParent2 = ((Component)hud.tipsPanelBody).GetComponentInParent(); if ((Object)(object)canvas == (Object)null || (Object)(object)componentInParent2 == (Object)null) { return false; } GameObject val = new GameObject("SensusCaptionPanel", new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val.SetActive(false); val.transform.SetParent(((Component)canvas).transform, false); panel = val.GetComponent(); CanvasGroup component = val.GetComponent(); component.alpha = 1f; component.interactable = false; component.blocksRaycasts = false; background = NativeUiTemplates.CloneImage(componentInParent2, (Transform)(object)panel, "Background"); ((Graphic)background).rectTransform.anchorMin = Vector2.zero; ((Graphic)background).rectTransform.anchorMax = Vector2.one; RectTransform rectTransform = ((Graphic)background).rectTransform; Vector2 offsetMin = (((Graphic)background).rectTransform.offsetMax = Vector2.zero); rectTransform.offsetMin = offsetMin; header = NativeUiTemplates.CloneText(hud.tipsPanelHeader, (Transform)(object)panel, "Heading"); caption = NativeUiTemplates.CloneText(hud.tipsPanelBody, (Transform)(object)panel, "CaptionRows"); TextMeshProUGUI? obj = header; TextMeshProUGUI? obj2 = caption; TextAlignmentOptions alignment = (TextAlignmentOptions)514; ((TMP_Text)obj2).alignment = (TextAlignmentOptions)514; ((TMP_Text)obj).alignment = alignment; TextMeshProUGUI? obj3 = header; TextMeshProUGUI? obj4 = caption; TextOverflowModes overflowMode = (TextOverflowModes)1; ((TMP_Text)obj4).overflowMode = (TextOverflowModes)1; ((TMP_Text)obj3).overflowMode = overflowMode; log.LogInfo((object)("Sensus UI created from native UGUI templates under Canvas '" + ((Object)canvas).name + "'; independent panel, original controls retained.")); return true; } private Rect CaptionArea(HUDManager hud, RectTransform canvasRect, float unit) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: 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_017b: 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_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) Rect val = canvasRect.rect; Camera val2 = (((int)canvas.renderMode == 0) ? null : canvas.worldCamera); Rect safeArea = Screen.safeArea; Vector2 val3 = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, ((Rect)(ref safeArea)).min, val2, ref val3)) { safeArea = Screen.safeArea; Vector2 val4 = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, ((Rect)(ref safeArea)).max, val2, ref val4)) { val = Rect.MinMaxRect(Mathf.Max(((Rect)(ref val)).xMin, val3.x), Mathf.Max(((Rect)(ref val)).yMin, val3.y), Mathf.Min(((Rect)(ref val)).xMax, val4.x), Mathf.Min(((Rect)(ref val)).yMax, val4.y)); } } float num = Mathf.Max(10f, unit * 0.6f); Rect result = Rect.MinMaxRect(((Rect)(ref val)).xMin + num, ((Rect)(ref val)).yMin + num, ((Rect)(ref val)).xMax - num, ((Rect)(ref val)).yMax - num); float num2 = Mathf.Max(((Rect)(ref result)).xMin, ((Rect)(ref result)).xMax - ((Rect)(ref val)).width * 0.32f); float num3 = float.NegativeInfinity; float num4 = float.NegativeInfinity; if (hud.itemSlotIconFrames != null) { Image[] itemSlotIconFrames = hud.itemSlotIconFrames; foreach (Image val5 in itemSlotIconFrames) { if (!((Object)(object)val5 == (Object)null) && ((Component)val5).gameObject.activeInHierarchy) { ((Graphic)val5).rectTransform.GetWorldCorners(slotCorners); Vector3[] array = slotCorners; foreach (Vector3 val6 in array) { Vector3 val7 = ((Transform)canvasRect).InverseTransformPoint(val6); num3 = Mathf.Max(num3, val7.x); num4 = Mathf.Max(num4, val7.y); } } } } if (num3 + num > num2) { if (((Rect)(ref result)).xMax - num3 - num >= unit * 7f) { num2 = num3 + num; } else { ((Rect)(ref result)).yMin = Mathf.Max(((Rect)(ref result)).yMin, num4 + num); } } ((Rect)(ref result)).xMin = num2; return result; } private static void SyncStyle(TextMeshProUGUI copy, TextMeshProUGUI template) { if ((Object)(object)((TMP_Text)copy).font != (Object)(object)((TMP_Text)template).font) { ((TMP_Text)copy).font = ((TMP_Text)template).font; } if ((Object)(object)((TMP_Text)copy).fontSharedMaterial != (Object)(object)((TMP_Text)template).fontSharedMaterial) { ((TMP_Text)copy).fontSharedMaterial = ((TMP_Text)template).fontSharedMaterial; } copy.canvasRenderer.SetAlpha(1f); ((TMP_Text)copy).alpha = 1f; } private static void Place(RectTransform rect, float left, float top, float width, float height) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0f, 1f); rect.anchorMax = val; rect.anchorMin = val; rect.pivot = new Vector2(0f, 1f); rect.anchoredPosition = new Vector2(left, 0f - top); rect.sizeDelta = new Vector2(width, height); } private void SetState(string state, SensusSettings settings) { Status = state; if (state == lastLoggedState) { return; } if (!settings.Diagnostics.Value) { switch (state) { case "visible-Preview": case "visible-Startup": case "waiting-for-native-templates": goto IL_0057; } if (!state.StartsWith("native-")) { goto IL_0072; } } goto IL_0057; IL_0072: lastLoggedState = state; return; IL_0057: log.LogInfo((object)("Sensus UI state: " + state + ".")); goto IL_0072; } internal void Clear() { peripheral.Clear(); if ((Object)(object)panel != (Object)null) { Object.Destroy((Object)(object)((Component)panel).gameObject); } panel = null; canvas = null; background = null; header = (caption = null); checkedFont = null; measuredFont = null; measuredText = (measuredTitle = ""); owner = null; } } internal static class NativeUiTemplates { internal static TextMeshProUGUI CloneText(TextMeshProUGUI template, Transform parent, string name) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI val = Object.Instantiate(template, parent, false); Clean(((Component)val).gameObject, (Component)(object)val); ((Object)val).name = name; ((Behaviour)val).enabled = true; ((Graphic)val).raycastTarget = false; ((MaskableGraphic)val).maskable = false; ((TMP_Text)val).enableAutoSizing = false; ((TMP_Text)val).enableVertexGradient = false; ((TMP_Text)val).enableWordWrapping = true; ((TMP_Text)val).overflowMode = (TextOverflowModes)0; ((TMP_Text)val).margin = Vector4.zero; ((TMP_Text)val).maxVisibleCharacters = int.MaxValue; ((TMP_Text)val).maxVisibleWords = int.MaxValue; ((TMP_Text)val).maxVisibleLines = int.MaxValue; ((TMP_Text)val).firstVisibleCharacter = 0; ((TMP_Text)val).alpha = 1f; val.canvasRenderer.SetAlpha(1f); val.canvasRenderer.cull = false; ((TMP_Text)val).text = ""; ((Component)val).gameObject.SetActive(true); ResetTransform(((TMP_Text)val).rectTransform); return val; } internal static Image CloneImage(Image template, Transform parent, string name) { Image val = Object.Instantiate(template, parent, false); Clean(((Component)val).gameObject, (Component)(object)val); ((Object)val).name = name; ((Behaviour)val).enabled = true; ((Graphic)val).raycastTarget = false; ((MaskableGraphic)val).maskable = false; val.overrideSprite = null; val.sprite = null; ((Graphic)val).material = null; val.type = (Type)0; val.preserveAspect = false; ((Graphic)val).canvasRenderer.SetAlpha(1f); ((Graphic)val).canvasRenderer.cull = false; ((Component)val).gameObject.SetActive(true); ResetTransform(((Graphic)val).rectTransform); return val; } private static void Clean(GameObject copy, Component keep) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Component[] components = copy.GetComponents(); foreach (Component val in components) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val == (Object)(object)keep) && !(val is RectTransform) && !(val is CanvasRenderer)) { Behaviour val2 = (Behaviour)(object)((val is Behaviour) ? val : null); if (val2 != null) { val2.enabled = false; } CanvasGroup val3 = (CanvasGroup)(object)((val is CanvasGroup) ? val : null); if (val3 != null) { val3.alpha = 1f; val3.blocksRaycasts = false; } Button val4 = (Button)(object)((val is Button) ? val : null); if (val4 != null) { val4.onClick = new ButtonClickedEvent(); } Object.Destroy((Object)(object)val); } } for (int j = 0; j < copy.transform.childCount; j++) { GameObject gameObject = ((Component)copy.transform.GetChild(j)).gameObject; gameObject.SetActive(false); Object.Destroy((Object)(object)gameObject); } } private static void ResetTransform(RectTransform rect) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) ((Transform)rect).localPosition = Vector3.zero; ((Transform)rect).localRotation = Quaternion.identity; ((Transform)rect).localScale = Vector3.one; } } internal sealed class PeripheralPresenter { private sealed class Marker { internal RectTransform Root; internal SoundMarkerGraphic Graphic; internal TextMeshProUGUI Label; internal Image Backing; internal int Id; internal float Angle; internal float Sector; internal bool Initialized; internal Vector2 Position; internal float OrbitAngle; internal float OrbitOffset; internal float DisplayOffset; internal float OffsetVelocity; internal Cue LabelCue = (Cue)(-1); internal bool LabelChinese; internal bool LabelRear; internal bool LabelUnlocatedText; internal float LabelUnit; internal TMP_FontAsset? LabelFont; internal string TrayText = ""; internal float TrayWidth = -1f; internal float TrayUnit; internal float NaturalWidth; internal float TextHeight; internal TMP_FontAsset? TrayFont; } private RectTransform? root; private readonly List markers = new List(); private readonly List overflow = new List(); private readonly List tray = new List(); private readonly float[] placed = new float[64]; private int placedCount; private readonly SoundField demo = new SoundField(); private int positionCount; private bool previewing; private float previewYaw; private float previewStart; private readonly ManualLogSource log; private bool firstRealMarker; private float trayWidth; private float trayRowHeight; private float trayGap; private float trayUnit; private int trayCount; internal float UnlocatedHeight { get { if (trayCount != 0) { return (float)trayCount * trayRowHeight + (float)(trayCount - 1) * trayGap; } return 0f; } } internal PeripheralPresenter(ManualLogSource log) { this.log = log; } internal void Tick(Canvas canvas, TextMeshProUGUI template, SoundField field, SensusSettings settings, bool chinese, bool preview, Rect fullSafe) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Expected O, but got Unknown //IL_03ca: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_042d: Unknown result type (might be due to invalid IL or missing references) //IL_0448: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Expected O, but got Unknown //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_0399: 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_0e21: Unknown result type (might be due to invalid IL or missing references) //IL_0e53: Unknown result type (might be due to invalid IL or missing references) //IL_0e58: Unknown result type (might be due to invalid IL or missing references) //IL_0e61: Unknown result type (might be due to invalid IL or missing references) //IL_0e71: Unknown result type (might be due to invalid IL or missing references) //IL_0e8d: Unknown result type (might be due to invalid IL or missing references) //IL_0ea5: Unknown result type (might be due to invalid IL or missing references) //IL_0eb5: Unknown result type (might be due to invalid IL or missing references) //IL_0ed1: Unknown result type (might be due to invalid IL or missing references) //IL_0ee9: 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_076e: Unknown result type (might be due to invalid IL or missing references) //IL_08e2: Unknown result type (might be due to invalid IL or missing references) //IL_08e7: Unknown result type (might be due to invalid IL or missing references) //IL_0972: Unknown result type (might be due to invalid IL or missing references) //IL_0985: Unknown result type (might be due to invalid IL or missing references) //IL_094c: Unknown result type (might be due to invalid IL or missing references) //IL_0962: Unknown result type (might be due to invalid IL or missing references) //IL_09fe: Unknown result type (might be due to invalid IL or missing references) //IL_087c: Unknown result type (might be due to invalid IL or missing references) //IL_0881: 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_0b13: Unknown result type (might be due to invalid IL or missing references) //IL_0d29: Unknown result type (might be due to invalid IL or missing references) //IL_0d30: Unknown result type (might be due to invalid IL or missing references) //IL_0be0: Unknown result type (might be due to invalid IL or missing references) //IL_0be5: Unknown result type (might be due to invalid IL or missing references) //IL_0d7c: Unknown result type (might be due to invalid IL or missing references) //IL_0c00: Unknown result type (might be due to invalid IL or missing references) //IL_0beb: Unknown result type (might be due to invalid IL or missing references) //IL_0c6a: Unknown result type (might be due to invalid IL or missing references) //IL_0c82: Unknown result type (might be due to invalid IL or missing references) //IL_0ca0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)root == (Object)null) { GameObject val = new GameObject("SensusPeripheralSounds", new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val.SetActive(false); val.transform.SetParent(((Component)canvas).transform, false); root = val.GetComponent(); root.anchorMin = Vector2.zero; root.anchorMax = Vector2.one; RectTransform? obj = root; Vector2 offsetMin = (root.offsetMax = Vector2.zero); obj.offsetMin = offsetMin; CanvasGroup component = val.GetComponent(); component.blocksRaycasts = false; component.interactable = false; Image componentInParent = ((Component)template).GetComponentInParent(); if ((Object)(object)componentInParent == (Object)null) { Clear(); return; } for (int i = 0; i < 8; i++) { overflow.Add(Create(template, componentInParent, "AdditionalSoundDirection", root)); } log.LogInfo((object)"Sensus peripheral UGUI created: pooled sound symbols, native labels and critical overflow arcs."); } ((Component)root).gameObject.SetActive(true); if (((Transform)root).GetSiblingIndex() != ((Transform)root).parent.childCount - 1) { ((Transform)root).SetAsLastSibling(); } Camera val2 = GameNetworkManager.Instance?.localPlayerController?.gameplayCamera; float yaw = (((Object)(object)val2 != (Object)null) ? ((Component)val2).transform.eulerAngles.y : 0f); float unscaledTime = Time.unscaledTime; if (preview != previewing) { foreach (Marker marker3 in markers) { marker3.Initialized = false; } } if (preview) { if (!previewing) { previewStart = unscaledTime; previewYaw = yaw; demo.Clear(); } demo.Observe(-1, Cue.Music, unscaledTime, previewYaw - 90f, known: true, continuous: true, 0.2f, localMovement: false, WindingEnvelope.At((unscaledTime - previewStart) % 43f), (unscaledTime - previewStart) % 43f); demo.Observe(-2, Cue.Reload, unscaledTime, previewYaw + 90f, known: true, continuous: true, 0.5f); if ((unscaledTime - previewStart) % 8f < 5f) { demo.Observe(-3, Cue.Growl, unscaledTime, previewYaw + 180f, known: true, continuous: true, 0.1f); } field = demo; } previewing = preview; float num = Mathf.Max(14f, ((TMP_Text)template).fontSize) * settings.MarkerScale.Value; Rect rect = ((RectTransform)((Component)canvas).transform).rect; Rect val3 = rect; Camera val4 = (((int)canvas.renderMode == 0) ? null : canvas.worldCamera); RectTransform val5 = (RectTransform)((Component)canvas).transform; Rect safeArea = Screen.safeArea; Vector2 val6 = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(val5, ((Rect)(ref safeArea)).min, val4, ref val6)) { RectTransform val7 = (RectTransform)((Component)canvas).transform; safeArea = Screen.safeArea; Vector2 val8 = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(val7, ((Rect)(ref safeArea)).max, val4, ref val8)) { val3 = Rect.MinMaxRect(Mathf.Max(((Rect)(ref rect)).xMin, val6.x), Mathf.Max(((Rect)(ref rect)).yMin, val6.y), Mathf.Min(((Rect)(ref rect)).xMax, val8.x), Mathf.Min(((Rect)(ref rect)).yMax, val8.y)); } } float num2 = num * 0.5f; float num3 = Mathf.Max(1f, Mathf.Min(((Rect)(ref rect)).width * 0.5f * settings.RingSize.Value, Mathf.Min(((Rect)(ref rect)).center.x - ((Rect)(ref val3)).xMin, ((Rect)(ref val3)).xMax - ((Rect)(ref rect)).center.x) - num * 3.75f - num2)); float num4 = Mathf.Max(1f, Mathf.Min(((Rect)(ref rect)).height * 0.5f * settings.RingSize.Value, Mathf.Min(((Rect)(ref rect)).center.y - ((Rect)(ref val3)).yMin, ((Rect)(ref val3)).yMax - ((Rect)(ref rect)).center.y) - num * 5.1f - num2)); positionCount = DisplayCapacity.Rows(MathF.PI * 2f * Mathf.Min(num3, num4), num * 8.6f); int num5 = DisplayCapacity.Resolve(settings.MarkerCount.Value, positionCount); int available = DisplayCapacity.Rows(((Rect)(ref fullSafe)).height * 0.45f, num * 3.3f * 0.85f); int num6 = (settings.UnlocatedIndicators.Value ? DisplayCapacity.Resolve(settings.UnlocatedCount.Value, available) : 0); field.Update(unscaledTime, num5, yaw, num6); Image componentInParent2 = ((Component)template).GetComponentInParent(); if ((Object)(object)componentInParent2 == (Object)null) { return; } Grow(markers, field.Visible.Count, template, componentInParent2, "Sound"); Grow(tray, field.Unlocated.Count, template, componentInParent2, "UnlocatedSound"); field.Update(unscaledTime, Mathf.Min(num5, markers.Count), yaw, Mathf.Min(num6, tray.Count)); Match(markers, field.Visible); Match(tray, field.Unlocated); placedCount = 0; for (int j = 0; j < markers.Count + tray.Count; j++) { bool flag = j >= markers.Count; int num7 = (flag ? (j - markers.Count) : j); Marker marker = (flag ? tray[num7] : markers[num7]); IReadOnlyList readOnlyList = (flag ? field.Unlocated : field.Visible); if ((flag && !settings.UnlocatedIndicators.Value) || num7 >= readOnlyList.Count || (!flag && !settings.ShowDirection.Value)) { ((Component)marker.Root).gameObject.SetActive(false); marker.Initialized = false; continue; } SoundField.Signal signal = readOnlyList[num7]; if (flag && !SoundField.CanUnlocate(signal)) { ((Component)marker.Root).gameObject.SetActive(false); continue; } if (!flag && !preview && !firstRealMarker && SoundField.IsLive(signal, unscaledTime)) { firstRealMarker = true; log.LogInfo((object)"First real audible direction submitted to the Sensus peripheral UI; visual confirmation is still required."); } float num8 = SoundField.Relative(signal.Bearing, yaw); bool flag2 = !marker.Initialized || marker.Id != signal.Id; if (flag2) { marker.Id = signal.Id; marker.Initialized = true; marker.Sector = (float)CueText.DirectionIndex(num8) * 45f; marker.Angle = num8; } if (SoundField.IsLive(signal, unscaledTime)) { marker.Sector = SoundField.SectorAngle(num8, marker.Sector); marker.Angle = IndicatorDetail.Follow(marker.Angle, num8, Time.unscaledDeltaTime, settings.LowMotion.Value); } bool flag3 = false; Place(marker, rect, marker.Angle, 0, num, settings.RingSize.Value); if (!flag) { float gap = 360f / (float)Mathf.Max(1, positionCount); if (flag2) { marker.OrbitOffset = 0f; marker.OffsetVelocity = 0f; } marker.OrbitOffset = StableOrbit.Offset(signal.Bearing, marker.OrbitOffset, placed, placedCount, gap); if (flag2) { marker.DisplayOffset = marker.OrbitOffset; } else { marker.DisplayOffset = StableOrbit.Ease(marker.DisplayOffset, marker.OrbitOffset, ref marker.OffsetVelocity, Time.unscaledDeltaTime, settings.LowMotion.Value); } float num9 = marker.Angle + marker.DisplayOffset; marker.OrbitAngle = (flag2 ? num9 : IndicatorDetail.Follow(marker.OrbitAngle, num9, Time.unscaledDeltaTime, settings.LowMotion.Value)); marker.Position = Orbit(marker.OrbitAngle, num3, num4); marker.Root.anchoredPosition = marker.Position; placed[placedCount++] = signal.Bearing + marker.OrbitOffset; ((Transform)marker.Root).SetAsLastSibling(); } float num10 = SoundField.Alpha(signal, unscaledTime); Color color = SoundMarkerGraphic.Tint(signal.Cue, num10); float num11 = WindingEnvelope.Urgency(signal.WindingSeconds); if (signal.Cue == Cue.Music && signal.WindingSeconds >= 0f) { ((Color)(ref color))..ctor(1f, 0.8f - 0.55f * num11, 0.25f - 0.03f * num11, num10); } if (signal.Cue == Cue.Music) { ((Graphic)marker.Graphic).color = Color.white; ((Graphic)marker.Graphic).canvasRenderer.SetColor(color); } else { ((Graphic)marker.Graphic).color = color; ((Graphic)marker.Graphic).canvasRenderer.SetColor(Color.white); } marker.Graphic.Set(flag ? 0f : marker.Angle, signal.Cue, signal.Strength, flag3, !flag); ((TMP_Text)marker.Label).font = ((TMP_Text)template).font; ((TMP_Text)marker.Label).fontSharedMaterial = ((TMP_Text)template).fontSharedMaterial; ((Graphic)marker.Label).color = new Color(0.96f, 0.96f, 0.92f, num10); bool flag4 = !flag && CueText.DirectionIndex(marker.Angle) == 4; bool flag5 = flag && settings.UnlocatedText.Value; bool num12 = marker.LabelCue != signal.Cue || marker.LabelChinese != chinese || marker.LabelRear != flag4 || marker.LabelUnit != num || (Object)(object)marker.LabelFont != (Object)(object)((TMP_Text)template).font || marker.LabelUnlocatedText != flag5; bool flag6 = settings.MarkerLabels.Value && !flag3; ((Component)marker.Label).gameObject.SetActive(flag6); ((Component)marker.Backing).gameObject.SetActive(flag6 && settings.ShowBackground.Value && settings.BackgroundOpacity.Value > 0f); ((Graphic)marker.Backing).color = new Color(0.015f, 0.02f, 0.015f, settings.BackgroundOpacity.Value * num10); if (num12) { ((TMP_Text)marker.Label).enableAutoSizing = false; ((TMP_Text)marker.Label).fontSize = num * 0.8f; ((TMP_Text)marker.Label).text = IndicatorDetail.Label(signal.Cue, chinese, flag4, flag5); marker.LabelCue = signal.Cue; marker.LabelChinese = chinese; marker.LabelRear = flag4; marker.LabelUnit = num; marker.LabelFont = ((TMP_Text)template).font; marker.LabelUnlocatedText = flag5; float num13 = (flag ? Mathf.Min(num * 8f, ((Rect)(ref rect)).width * 0.27f) : (num * 6.5f)); Vector2 preferredValues = ((TMP_Text)marker.Label).GetPreferredValues(((TMP_Text)marker.Label).text, num13, float.PositiveInfinity); float num14 = (flag ? preferredValues.y : Mathf.Min(preferredValues.y, num * 3.2f)); ((TMP_Text)marker.Label).enableWordWrapping = true; ((TMP_Text)marker.Label).enableAutoSizing = !flag; ((TMP_Text)marker.Label).fontSizeMin = num * 0.55f; ((TMP_Text)marker.Label).fontSizeMax = num * 0.8f; ((TMP_Text)marker.Label).overflowMode = (TextOverflowModes)1; ((TMP_Text)marker.Label).rectTransform.sizeDelta = new Vector2(num13, num14); ((Graphic)marker.Backing).rectTransform.sizeDelta = new Vector2(Mathf.Min(num13, preferredValues.x) + num * 0.5f, num14 + num * 0.35f); } float age = unscaledTime - signal.Started; float num15 = CueVisual.OnsetScale(signal.Cue, age, settings.LowMotion.Value); bool flag7 = SoundField.IsLive(signal, unscaledTime); if (signal.Cue == Cue.Music) { num15 = ((settings.LowMotion.Value || !flag7) ? 1f : (1f + (0.1f + 0.22f * num11) * signal.MusicEnvelope)); } ((Transform)((Graphic)marker.Graphic).rectTransform).localScale = Vector3.one * num15; ((Transform)((Graphic)marker.Graphic).rectTransform).localRotation = Quaternion.Euler(0f, 0f, (signal.Cue == Cue.Music) ? WindingEnvelope.Shake(signal.WindingSeconds, flag7, settings.LowMotion.Value) : 0f); } for (int k = 0; k < overflow.Count; k++) { Marker marker2 = overflow[k]; bool flag8 = settings.ShowDirection.Value && ((Rect)(ref val3)).width > num * 3f && ((Rect)(ref val3)).height > num * 3f && (field.OverflowDirections & (1 << k)) != 0; ((Component)marker2.Root).gameObject.SetActive(flag8); if (flag8) { Place(marker2, rect, k * 45, 0, num, Mathf.Min(0.88f, settings.RingSize.Value + 0.06f)); Vector2 anchoredPosition = marker2.Root.anchoredPosition; marker2.Root.anchoredPosition = new Vector2(Mathf.Clamp(anchoredPosition.x, ((Rect)(ref val3)).xMin - ((Rect)(ref rect)).center.x + num * 1.5f, ((Rect)(ref val3)).xMax - ((Rect)(ref rect)).center.x - num * 1.5f), Mathf.Clamp(anchoredPosition.y, ((Rect)(ref val3)).yMin - ((Rect)(ref rect)).center.y + num * 1.5f, ((Rect)(ref val3)).yMax - ((Rect)(ref rect)).center.y - num * 1.5f)); ((Component)marker2.Label).gameObject.SetActive(false); ((Component)marker2.Backing).gameObject.SetActive(false); ((Graphic)marker2.Graphic).color = SoundMarkerGraphic.Tint(Cue.Gunshot, 0.8f); marker2.Graphic.Set(k * 45, Cue.Gunshot, 1, arcOnly: true); } } } internal void MeasureUnlocated(Rect safe, float unit) { //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) trayCount = 0; trayUnit = unit; trayGap = unit * 0.35f; if ((Object)(object)root == (Object)null || !((Component)root).gameObject.activeSelf) { return; } trayWidth = unit * 2.8f; for (int i = 0; i < tray.Count; i++) { Marker marker = tray[i]; if (((Component)marker.Root).gameObject.activeSelf) { trayCount++; ((TMP_Text)marker.Label).enableAutoSizing = false; ((TMP_Text)marker.Label).fontSize = unit * 0.8f; if (marker.TrayText != ((TMP_Text)marker.Label).text || (Object)(object)marker.TrayFont != (Object)(object)((TMP_Text)marker.Label).font || marker.TrayUnit != unit) { marker.TrayText = ((TMP_Text)marker.Label).text; marker.TrayFont = ((TMP_Text)marker.Label).font; marker.TrayUnit = unit; marker.TrayWidth = -1f; marker.NaturalWidth = ((TMP_Text)marker.Label).GetPreferredValues(((TMP_Text)marker.Label).text, float.PositiveInfinity, float.PositiveInfinity).x; } if (((Component)marker.Label).gameObject.activeSelf) { trayWidth = Mathf.Max(trayWidth, marker.NaturalWidth + unit * 3.2f); } } } trayWidth = Mathf.Min(trayWidth, ((Rect)(ref safe)).width); float num = Mathf.Max(1f, trayWidth - unit * 3.2f); trayRowHeight = unit * 2.6f; for (int j = 0; j < tray.Count; j++) { Marker marker2 = tray[j]; if (((Component)marker2.Root).gameObject.activeSelf && ((Component)marker2.Label).gameObject.activeSelf) { if (marker2.TrayWidth != num) { marker2.TrayWidth = num; marker2.TextHeight = ((TMP_Text)marker2.Label).GetPreferredValues(((TMP_Text)marker2.Label).text, num, float.PositiveInfinity).y; } trayRowHeight = Mathf.Max(trayRowHeight, Mathf.Min(marker2.TextHeight, unit * 2.4f) + unit * 0.8f); } } if (trayCount > 0) { trayRowHeight = Mathf.Min(trayRowHeight, Mathf.Max(1f, (((Rect)(ref safe)).height * 0.45f - (float)(trayCount - 1) * trayGap) / (float)trayCount)); } } internal void ArrangeUnlocated(Rect safe, float bottom, Vector2 canvasCenter) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0193: 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_0256: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0278: 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_028b: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Min(((Rect)(ref safe)).yMax, Mathf.Max(((Rect)(ref safe)).yMin, bottom) + UnlocatedHeight); int num2 = 0; Vector2 val = default(Vector2); for (int i = 0; i < tray.Count; i++) { Marker marker = tray[i]; if (((Component)marker.Root).gameObject.activeSelf) { marker.Root.pivot = new Vector2(1f, 0.5f); marker.Root.anchoredPosition = new Vector2(((Rect)(ref safe)).xMax, num - trayRowHeight * 0.5f - (float)num2++ * (trayRowHeight + trayGap)) - canvasCenter; marker.Root.sizeDelta = new Vector2(trayWidth, trayRowHeight); float num3 = Mathf.Min(trayUnit * 2.2f, trayRowHeight * 0.85f); RectTransform rectTransform = ((Graphic)marker.Graphic).rectTransform; ((Vector2)(ref val))..ctor(0f, 0.5f); rectTransform.anchorMax = val; rectTransform.anchorMin = val; rectTransform.anchoredPosition = new Vector2(trayUnit * 0.4f + num3 * 0.5f, 0f); rectTransform.sizeDelta = new Vector2(num3, num3); RectTransform rectTransform2 = ((TMP_Text)marker.Label).rectTransform; ((Vector2)(ref val))..ctor(0f, 0.5f); rectTransform2.anchorMax = val; rectTransform2.anchorMin = val; rectTransform2.pivot = new Vector2(0f, 0.5f); rectTransform2.anchoredPosition = new Vector2(trayUnit * 2.8f, 0f); rectTransform2.sizeDelta = new Vector2(Mathf.Max(1f, trayWidth - trayUnit * 3.2f), Mathf.Max(1f, trayRowHeight - trayUnit * 0.8f)); ((TMP_Text)marker.Label).alignment = (TextAlignmentOptions)514; ((TMP_Text)marker.Label).overflowMode = (TextOverflowModes)1; ((TMP_Text)marker.Label).enableAutoSizing = true; ((TMP_Text)marker.Label).fontSizeMin = trayUnit * 0.55f; ((TMP_Text)marker.Label).fontSizeMax = trayUnit * 0.8f; RectTransform rectTransform3 = ((Graphic)marker.Backing).rectTransform; if (((Transform)rectTransform3).GetSiblingIndex() != 0) { ((Transform)rectTransform3).SetAsFirstSibling(); } rectTransform3.anchorMin = Vector2.zero; rectTransform3.anchorMax = Vector2.one; rectTransform3.pivot = new Vector2(0.5f, 0.5f); val = (rectTransform3.offsetMin = (rectTransform3.offsetMax = Vector2.zero)); } } } private static Vector2 Orbit(float angle, float rx, float ry) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) return new Vector2(IndicatorDetail.OrbitX(angle, rx), IndicatorDetail.OrbitY(angle, ry)); } private static void Match(List pool, IReadOnlyList signals) { for (int i = 0; i < signals.Count && i < pool.Count; i++) { if (pool[i].Id == signals[i].Id) { continue; } for (int j = i + 1; j < pool.Count; j++) { if (pool[j].Id == signals[i].Id) { Marker value = pool[i]; pool[i] = pool[j]; pool[j] = value; break; } } } } private void Grow(List pool, int count, TextMeshProUGUI template, Image imageTemplate, string name) { int num = Mathf.Min(count, pool.Count + 4); while (pool.Count < num) { pool.Add(Create(template, imageTemplate, name, root)); } } private static Marker Create(TextMeshProUGUI template, Image imageTemplate, string name, RectTransform parent) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, new Type[1] { typeof(RectTransform) }); val.SetActive(false); val.transform.SetParent((Transform)(object)parent, false); RectTransform component = val.GetComponent(); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0.5f, 0.5f); component.anchorMax = val2; component.anchorMin = val2; GameObject val3 = new GameObject("DirectionAndSound", new Type[1] { typeof(RectTransform) }); val3.transform.SetParent((Transform)(object)component, false); SoundMarkerGraphic soundMarkerGraphic = val3.AddComponent(); ((Graphic)soundMarkerGraphic).raycastTarget = false; ((MaskableGraphic)soundMarkerGraphic).maskable = false; Image backing = NativeUiTemplates.CloneImage(imageTemplate, (Transform)(object)component, "LabelContrast"); TextMeshProUGUI val4 = NativeUiTemplates.CloneText(template, (Transform)(object)component, "SoundLabel"); ((TMP_Text)val4).alignment = (TextAlignmentOptions)258; return new Marker { Root = component, Graphic = soundMarkerGraphic, Label = val4, Backing = backing }; } private static void Place(Marker marker, Rect rect, float angle, int lane, float unit, float radius) { //IL_00ff: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_020d: 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_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) ((Component)marker.Root).gameObject.SetActive(true); float num = angle * (MathF.PI / 180f); float num2 = Mathf.Max(unit * 3f, ((Rect)(ref rect)).width * 0.5f * radius - (float)lane * unit * 4.8f); float num3 = Mathf.Max(unit * 3f, ((Rect)(ref rect)).height * 0.5f * radius - (float)lane * unit * 3.8f); float num4 = Mathf.Max(0f, ((Rect)(ref rect)).width * 0.5f - unit * 4.75f - 8f); float num5 = (0f - ((Rect)(ref rect)).height) * 0.5f + unit * 4.2f + 8f; float num6 = Mathf.Max(num5, ((Rect)(ref rect)).height * 0.5f - unit * 1.5f - 8f); marker.Root.anchoredPosition = new Vector2(Mathf.Clamp(Mathf.Sin(num) * num2, 0f - num4, num4), Mathf.Clamp(Mathf.Cos(num) * num3, num5, num6)); marker.Root.sizeDelta = new Vector2(unit * 9f, unit * 4f); ((Graphic)marker.Graphic).rectTransform.sizeDelta = new Vector2(unit * 2.8f, unit * 2.8f); RectTransform rectTransform = ((Graphic)marker.Graphic).rectTransform; RectTransform rectTransform2 = ((Graphic)marker.Graphic).rectTransform; Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0.5f, 0.5f); rectTransform2.anchorMax = val; rectTransform.anchorMin = val; ((Graphic)marker.Graphic).rectTransform.pivot = new Vector2(0.5f, 0.5f); ((Graphic)marker.Graphic).rectTransform.anchoredPosition = Vector2.zero; RectTransform rectTransform3 = ((TMP_Text)marker.Label).rectTransform; ((Vector2)(ref val))..ctor(0.5f, 0.5f); rectTransform3.anchorMax = val; rectTransform3.anchorMin = val; rectTransform3.pivot = new Vector2(0.5f, 1f); rectTransform3.anchoredPosition = new Vector2(0f, (0f - unit) * 1.4f); RectTransform rectTransform4 = ((Graphic)marker.Backing).rectTransform; val = (rectTransform4.anchorMin = (rectTransform4.anchorMax = rectTransform3.anchorMin)); rectTransform4.pivot = rectTransform3.pivot; rectTransform4.anchoredPosition = rectTransform3.anchoredPosition + new Vector2(0f, unit * 0.15f); } internal void Hide() { trayCount = 0; if ((Object)(object)root != (Object)null) { ((Component)root).gameObject.SetActive(false); } previewing = false; } internal void Clear() { if ((Object)(object)root != (Object)null) { Object.Destroy((Object)(object)((Component)root).gameObject); } root = null; markers.Clear(); tray.Clear(); overflow.Clear(); demo.Clear(); previewing = false; firstRealMarker = false; } } [BepInPlugin("Auuueser.Sensus", "Sensus", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class Plugin : BaseUnityPlugin { public const string Guid = "Auuueser.Sensus"; public const string PluginVersion = "1.0.0"; private SensusSettings settings; private NativeCaptionPresenter presenter; private Action? updateConfigLanguage; private bool chinese; private int settingsDirty = 1; private bool reportedPresentationFailure; private bool reportedCaptureFailure; private AudioCapture capture; private readonly Harmony harmony = new Harmony("Auuueser.Sensus"); private bool firstFrame = true; private bool shuttingDown; private long measuredTicks; private long worstTicks; private int measuredFrames; private float reportPerformanceAt; private void Awake() { settings = new SensusSettings(((BaseUnityPlugin)this).Config); presenter = new NativeCaptionPresenter(((BaseUnityPlugin)this).Logger); capture = new AudioCapture(settings, ((BaseUnityPlugin)this).Logger); try { if (!RuntimeBaseline.Matches()) { ((BaseUnityPlugin)this).Logger.LogWarning((object)"Game assembly differs from the audited V81 baseline; sound capture stays disabled. Update the audit before enabling new game versions."); } else { PlaybackHooks.Install(harmony, ((BaseUnityPlugin)this).Logger); capture.Ready = true; } } catch (Exception arg) { harmony.UnpatchSelf(); ((BaseUnityPlugin)this).Logger.LogError((object)$"Playback observers were not installed; capture stays disabled: {arg}"); } chinese = LanguagePolicy.UseChinese(settings.Language.Value, Chainloader.PluginInfos.Keys); ((BaseUnityPlugin)this).Config.SettingChanged += OnSettingChanged; if (Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig")) { try { updateConfigLanguage = LethalConfigIntegration.Register(settings, chinese); } catch (Exception arg2) { ((BaseUnityPlugin)this).Logger.LogWarning((object)$"LethalConfig registration failed; CFG remains available: {arg2}"); } } ((BaseUnityPlugin)this).Logger.LogInfo((object)string.Format("Sensus {0} loaded; language={1}; sound capture ready={2}. V81 creature audio adapters; per-event live validation pending.", "1.0.0", chinese ? "Chinese" : "English", capture.Ready)); Application.quitting += Shutdown; RuntimeFramePump.Install(harmony, this, ((BaseUnityPlugin)this).Logger); } private void OnSettingChanged(object sender, SettingChangedEventArgs e) { Interlocked.Exchange(ref settingsDirty, 1); } [MethodImpl(MethodImplOptions.NoInlining)] internal void TickFrame() { if (firstFrame) { firstFrame = false; ((BaseUnityPlugin)this).Logger.LogInfo((object)$"Sensus first frame entered: settingsReady={settings != null}, presenterReady={presenter != null}."); } if (settings == null || presenter == null) { return; } if (Interlocked.Exchange(ref settingsDirty, 0) != 0) { reportedPresentationFailure = false; reportedCaptureFailure = false; chinese = LanguagePolicy.UseChinese(settings.Language.Value, Chainloader.PluginInfos.Keys); try { updateConfigLanguage?.Invoke(chinese); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Could not refresh config labels: " + ex.Message)); } ((BaseUnityPlugin)this).Logger.LogInfo((object)string.Format("Settings applied: enabled={0}, preview={1}, language={2}, scale={3}, position={4}.", settings.Enabled.Value, settings.Preview.Value, chinese ? "Chinese" : "English", settings.Scale.Value, settings.VerticalPosition.Value)); } long num = (settings.Diagnostics.Value ? Stopwatch.GetTimestamp() : 0); if (!reportedCaptureFailure) { try { capture.Tick(chinese); } catch (Exception arg) { reportedCaptureFailure = true; ((BaseUnityPlugin)this).Logger.LogError((object)$"Sound capture stopped until a setting changes; UI preview remains available: {arg}"); } } if (reportedPresentationFailure) { return; } try { presenter.Tick(settings, chinese, reportedCaptureFailure ? "" : capture.Text, capture.Ready && !reportedCaptureFailure, capture.Field, reportedCaptureFailure ? "" : capture.SpokenText); } catch (Exception arg2) { presenter.Clear(); if (!reportedPresentationFailure) { reportedPresentationFailure = true; ((BaseUnityPlugin)this).Logger.LogError((object)$"Caption presentation stopped until a setting changes: {arg2}"); } } if (num != 0L) { long num2 = Stopwatch.GetTimestamp() - num; measuredTicks += num2; worstTicks = Math.Max(worstTicks, num2); measuredFrames++; if (Time.unscaledTime >= reportPerformanceAt) { reportPerformanceAt = Time.unscaledTime + 10f; double num3 = 1000.0 / (double)Stopwatch.Frequency; ((BaseUnityPlugin)this).Logger.LogInfo((object)$"Sensus frame work: frames={measuredFrames}, mean={(double)measuredTicks * num3 / (double)measuredFrames:F3}ms, max={(double)worstTicks * num3:F3}ms, registeredSources={AudioRegistry.SourceCount}; excludes native render/audio and playback callbacks."); measuredTicks = (worstTicks = 0L); measuredFrames = 0; } } } private void OnDestroy() { if (!shuttingDown) { ((BaseUnityPlugin)this).Logger.LogWarning((object)"Sensus plugin component destroyed before application quit; preserving sound observers, settings and native UI frame pump."); } } private void Shutdown() { if (!shuttingDown) { shuttingDown = true; Application.quitting -= Shutdown; RuntimeFramePump.Detach(this); ((BaseUnityPlugin)this).Config.SettingChanged -= OnSettingChanged; presenter?.Clear(); capture?.Dispose(); harmony.UnpatchSelf(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Sensus runtime shut down on application quit."); } } } internal static class RuntimeFramePump { private static Plugin? owner; private static ManualLogSource? log; private static int lastFrame = -1; private static bool failed; internal static void Install(Harmony harmony, Plugin plugin, ManualLogSource logger) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown owner = plugin; log = logger; lastFrame = -1; failed = false; HarmonyMethod val = new HarmonyMethod(AccessTools.Method(typeof(RuntimeFramePump), "Pump", (Type[])null, (Type[])null)); harmony.Patch((MethodBase)AccessTools.Method(typeof(MenuManager), "Update", (Type[])null, (Type[])null), (HarmonyMethod)null, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(HUDManager), "Update", (Type[])null, (Type[])null), (HarmonyMethod)null, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); logger.LogInfo((object)"Sensus frame pump installed on native menu and HUD updates."); } private static void Pump() { if (owner == null || log == null || failed || lastFrame == Time.frameCount) { return; } lastFrame = Time.frameCount; try { owner.TickFrame(); } catch (Exception arg) { failed = true; log.LogError((object)$"Sensus frame entry failed: {arg}"); } } internal static void Detach(Plugin plugin) { if (owner == plugin) { owner = null; log = null; } } } internal sealed class SensusSettings { internal const string CountHelpEn = "0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority."; internal const string CountHelpZh = "0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。"; internal const string CountHelp = "0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority. / 0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。"; internal ConfigEntry SpokenSubtitles { get; } internal ConfigEntry Enabled { get; } internal ConfigEntry Language { get; } internal ConfigEntry Preview { get; } internal ConfigEntry UnlocatedIndicators { get; } internal ConfigEntry UnlocatedText { get; } internal ConfigEntry Scale { get; } internal ConfigEntry BottomAligned { get; } internal ConfigEntry VerticalPosition { get; } internal ConfigEntry ShowDirection { get; } internal ConfigEntry CaptionDuration { get; } internal ConfigEntry MaxCaptions { get; } internal ConfigEntry MinimumGain { get; } internal ConfigEntry Diagnostics { get; } internal ConfigEntry BackgroundOpacity { get; } internal ConfigEntry ShowBackground { get; } internal ConfigEntry DisplayMode { get; } internal ConfigEntry RingSize { get; } internal ConfigEntry MarkerScale { get; } internal ConfigEntry MarkerCount { get; } internal ConfigEntry UnlocatedCount { get; } internal ConfigEntry MarkerLabels { get; } internal ConfigEntry LowMotion { get; } internal SensusSettings(ConfigFile config) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Expected O, but got Unknown //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Expected O, but got Unknown //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Expected O, but got Unknown //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Expected O, but got Unknown //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Expected O, but got Unknown //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Expected O, but got Unknown //IL_03e8: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Expected O, but got Unknown SpokenSubtitles = config.Bind("Dialogue", "Enabled", true, "Timed spoken subtitles, independent of event display mode. With LC Chinese Project loaded, dialogue is managed there; Sensus does not change its settings or claim it is ready. / 音频对白字幕,独立于事件显示模式;安装 LC-Chinese-Project 时交由汉化管理,不修改其设置,也不保证其字幕服务已就绪。"); DisplayMode = config.Bind("Peripheral", "DisplayMode", "Hybrid", new ConfigDescription("Hybrid: captions and indicators. Captions: subtitles only. Peripheral: indicators only. / Hybrid:字幕与提示;Captions:仅字幕;Peripheral:仅周边提示。", (AcceptableValueBase)(object)new AcceptableValueList(new string[3] { "Hybrid", "Captions", "Peripheral" }), Array.Empty())); RingSize = config.Bind("Peripheral", "RingSize", 0.65f, new ConfigDescription("Direction marker distance from screen center, as a fraction of half the screen. / 周边标记距中心的范围,占屏幕半径比例。", (AcceptableValueBase)(object)new AcceptableValueRange(0.45f, 0.82f), Array.Empty())); MarkerScale = config.Bind("Peripheral", "MarkerScale", 1f, new ConfigDescription("Size of direction symbols and their labels. / 方向图形与标签大小。", (AcceptableValueBase)(object)new AcceptableValueRange(0.75f, 1.75f), Array.Empty())); MarkerCount = config.Bind("Peripheral", "MaximumMarkers", 10, new ConfigDescription("0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority. / 0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。", (AcceptableValueBase)(object)new AcceptableValueRange(0, int.MaxValue), Array.Empty())); UnlocatedCount = config.Bind("Peripheral", "MaximumUnlocated", 3, new ConfigDescription("0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority. / 0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。", (AcceptableValueBase)(object)new AcceptableValueRange(0, int.MaxValue), Array.Empty())); MarkerLabels = config.Bind("Peripheral", "ShowLabels", true, "Show sound names beside direction symbols. / 在方向图形旁显示声音名称。"); LowMotion = config.Bind("Peripheral", "LowMotion", false, "Disable decorative pulses and smooth transitions. / 关闭装饰性扩张与平滑过渡,保留方向变化。"); Enabled = config.Bind("General", "Enabled", true, "Enable sound captions and preview. / 启用声音字幕与预览。"); Language = config.Bind("General", "Language", "Auto", new ConfigDescription("Auto detects LC Chinese Project by GUID, independent of version. English / Chinese override it. / Auto 按 GUID 检测汉化,不比较版本;English 强制英文,Chinese 强制中文。", (AcceptableValueBase)(object)new AcceptableValueList(new string[3] { "Auto", "English", "Chinese" }), Array.Empty())); Preview = config.Bind("Preview", "ShowPreview", false, "Show a labelled demonstration after closing menus. This is not a detected monster. / 关闭菜单后显示标注为演示的字幕,不代表检测到怪物;测试完请关闭。"); UnlocatedIndicators = config.Bind("Peripheral", "ShowUnlocated", false, "Show a fixed tray for genuinely unlocated sounds. Off by default; captions remain available. / 显示无法定位声音的固定提示栏,默认关闭;字幕仍可用。"); UnlocatedText = config.Bind("Peripheral", "ShowUnlocatedText", false, "Append Unlocated to names in the fixed tray. Does not enable the tray itself. / 在右下角提示名称后显示“无方向”,默认关闭;不影响提示本身的开关。"); Scale = config.Bind("Layout", "CaptionScale", 1f, new ConfigDescription("Scale the native text style. / 原生字幕样式缩放。", (AcceptableValueBase)(object)new AcceptableValueRange(0.75f, 2f), Array.Empty())); BottomAligned = config.Bind("Layout", "BottomAligned", true, "Align bottom and right margins; disable to use manual vertical position. / 底部与右侧等距,关闭后使用手动纵向位置。"); VerticalPosition = config.Bind("Layout", "VerticalPosition", 0.24f, new ConfigDescription("Vertical screen position: 0 bottom, 1 top. / 屏幕纵向位置:0 底部,1 顶部。", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 0.85f), Array.Empty())); ShowDirection = config.Bind("Captions", "ShowDirection", true, "Show coarse directions for spatial sounds. / 为空间声音显示粗略方向。"); CaptionDuration = config.Bind("Captions", "HoldSeconds", 2.5f, new ConfigDescription("How long to retain a heard event after it becomes inaudible. / 停止听见后保留字幕的秒数。", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 8f), Array.Empty())); MaxCaptions = config.Bind("Captions", "MaxRows", 5, new ConfigDescription("0 = unlimited; positive values set a display limit. Large counts may reduce FPS and readability. Screen space and overload protection still apply; excess events rotate by priority. / 0=无上限,正数为显示上限。数量过多可能降低帧率和可读性;仍受屏幕空间与过载保护约束,放不下的事件按优先级轮换。", (AcceptableValueBase)(object)new AcceptableValueRange(0, int.MaxValue), Array.Empty())); MinimumGain = config.Bind("Advanced", "MinimumEstimatedGain", 0.015f, new ConfigDescription("Prototype audibility threshold; requires listening calibration. / 原型可感知阈值,需要试听校准。", (AcceptableValueBase)(object)new AcceptableValueRange(0.005f, 0.1f), Array.Empty())); Diagnostics = config.Bind("Advanced", "Diagnostics", false, "Log bounded counters every 10 seconds; no audio recording. / 每 10 秒记录汇总计数,不录音。"); ShowBackground = config.Bind("Layout", "ShowBackground", true, "Show solid backgrounds behind captions and peripheral sound labels. / 显示字幕与周边声音标签的纯色背景板。"); BackgroundOpacity = config.Bind("Layout", "BackgroundOpacity", 0.65f, new ConfigDescription("Background opacity for captions and sound labels: 0 transparent, 1 opaque. Text stays visible. / 字幕与声音标签底板不透明度:0 全透明,1 不透明;不影响文字。", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 1f), Array.Empty())); } } internal sealed class SoundMarkerGraphic : MaskableGraphic { private float angle; private Cue cue; private int strength; private bool compact; private bool directional = true; internal static Color Tint(Cue cue, float alpha) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) Color result = (Color)(CueText.Priority(cue) switch { 3 => new Color(1f, 0.25f, 0.22f), 2 => new Color(1f, 0.8f, 0.25f), _ => new Color(0.96f, 0.96f, 0.92f), }); result.a = alpha; return result; } internal void Set(float bearing, Cue value, int level, bool arcOnly, bool hasDirection = true) { if (angle != bearing || cue != value || strength != level || compact != arcOnly || directional != hasDirection) { angle = bearing; cue = value; strength = level; compact = arcOnly; directional = hasDirection; ((Graphic)this).SetVerticesDirty(); } } public override void OnPopulateMesh(VertexHelper vh) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_23b0: Unknown result type (might be due to invalid IL or missing references) //IL_23c2: Unknown result type (might be due to invalid IL or missing references) //IL_23e1: Unknown result type (might be due to invalid IL or missing references) //IL_23f3: Unknown result type (might be due to invalid IL or missing references) //IL_0235: 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_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_0405: Unknown result type (might be due to invalid IL or missing references) //IL_0424: Unknown result type (might be due to invalid IL or missing references) //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04b9: Unknown result type (might be due to invalid IL or missing references) //IL_04d8: Unknown result type (might be due to invalid IL or missing references) //IL_04ea: Unknown result type (might be due to invalid IL or missing references) //IL_0509: Unknown result type (might be due to invalid IL or missing references) //IL_051b: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_054c: Unknown result type (might be due to invalid IL or missing references) //IL_056b: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Unknown result type (might be due to invalid IL or missing references) //IL_05bd: Unknown result type (might be due to invalid IL or missing references) //IL_05cf: Unknown result type (might be due to invalid IL or missing references) //IL_0629: Unknown result type (might be due to invalid IL or missing references) //IL_063b: Unknown result type (might be due to invalid IL or missing references) //IL_06bc: Unknown result type (might be due to invalid IL or missing references) //IL_06ce: Unknown result type (might be due to invalid IL or missing references) //IL_06e0: Unknown result type (might be due to invalid IL or missing references) //IL_06ff: Unknown result type (might be due to invalid IL or missing references) //IL_0711: Unknown result type (might be due to invalid IL or missing references) //IL_0730: Unknown result type (might be due to invalid IL or missing references) //IL_0742: Unknown result type (might be due to invalid IL or missing references) //IL_0785: Unknown result type (might be due to invalid IL or missing references) //IL_0797: Unknown result type (might be due to invalid IL or missing references) //IL_07b6: Unknown result type (might be due to invalid IL or missing references) //IL_07c8: Unknown result type (might be due to invalid IL or missing references) //IL_07e7: Unknown result type (might be due to invalid IL or missing references) //IL_07f9: Unknown result type (might be due to invalid IL or missing references) //IL_0818: Unknown result type (might be due to invalid IL or missing references) //IL_082a: Unknown result type (might be due to invalid IL or missing references) //IL_0849: Unknown result type (might be due to invalid IL or missing references) //IL_085b: Unknown result type (might be due to invalid IL or missing references) //IL_089e: Unknown result type (might be due to invalid IL or missing references) //IL_08b0: Unknown result type (might be due to invalid IL or missing references) //IL_08cf: Unknown result type (might be due to invalid IL or missing references) //IL_08e1: Unknown result type (might be due to invalid IL or missing references) //IL_0900: Unknown result type (might be due to invalid IL or missing references) //IL_0912: Unknown result type (might be due to invalid IL or missing references) //IL_0931: Unknown result type (might be due to invalid IL or missing references) //IL_0943: Unknown result type (might be due to invalid IL or missing references) //IL_0962: Unknown result type (might be due to invalid IL or missing references) //IL_0974: Unknown result type (might be due to invalid IL or missing references) //IL_0993: Unknown result type (might be due to invalid IL or missing references) //IL_09a5: Unknown result type (might be due to invalid IL or missing references) //IL_09e8: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Unknown result type (might be due to invalid IL or missing references) //IL_0a19: Unknown result type (might be due to invalid IL or missing references) //IL_0a2b: Unknown result type (might be due to invalid IL or missing references) //IL_0a4a: Unknown result type (might be due to invalid IL or missing references) //IL_0a5c: Unknown result type (might be due to invalid IL or missing references) //IL_0a7b: Unknown result type (might be due to invalid IL or missing references) //IL_0a8d: Unknown result type (might be due to invalid IL or missing references) //IL_0aac: Unknown result type (might be due to invalid IL or missing references) //IL_0abe: Unknown result type (might be due to invalid IL or missing references) //IL_0add: Unknown result type (might be due to invalid IL or missing references) //IL_0aef: Unknown result type (might be due to invalid IL or missing references) //IL_0b32: Unknown result type (might be due to invalid IL or missing references) //IL_0b44: Unknown result type (might be due to invalid IL or missing references) //IL_0b63: Unknown result type (might be due to invalid IL or missing references) //IL_0b75: Unknown result type (might be due to invalid IL or missing references) //IL_0c28: Unknown result type (might be due to invalid IL or missing references) //IL_0c3a: Unknown result type (might be due to invalid IL or missing references) //IL_0c59: Unknown result type (might be due to invalid IL or missing references) //IL_0c6b: Unknown result type (might be due to invalid IL or missing references) //IL_0c8a: Unknown result type (might be due to invalid IL or missing references) //IL_0c9c: Unknown result type (might be due to invalid IL or missing references) //IL_0cbb: Unknown result type (might be due to invalid IL or missing references) //IL_0ccd: Unknown result type (might be due to invalid IL or missing references) //IL_0cec: Unknown result type (might be due to invalid IL or missing references) //IL_0cfe: Unknown result type (might be due to invalid IL or missing references) //IL_0f49: Unknown result type (might be due to invalid IL or missing references) //IL_0f5b: Unknown result type (might be due to invalid IL or missing references) //IL_0f7a: Unknown result type (might be due to invalid IL or missing references) //IL_0f8c: Unknown result type (might be due to invalid IL or missing references) //IL_0fab: Unknown result type (might be due to invalid IL or missing references) //IL_0fbd: Unknown result type (might be due to invalid IL or missing references) //IL_0fdc: Unknown result type (might be due to invalid IL or missing references) //IL_0fee: Unknown result type (might be due to invalid IL or missing references) //IL_100d: Unknown result type (might be due to invalid IL or missing references) //IL_101f: Unknown result type (might be due to invalid IL or missing references) //IL_103e: Unknown result type (might be due to invalid IL or missing references) //IL_1050: Unknown result type (might be due to invalid IL or missing references) //IL_1074: Unknown result type (might be due to invalid IL or missing references) //IL_1086: Unknown result type (might be due to invalid IL or missing references) //IL_1098: Unknown result type (might be due to invalid IL or missing references) //IL_10b7: Unknown result type (might be due to invalid IL or missing references) //IL_10c9: Unknown result type (might be due to invalid IL or missing references) //IL_10db: Unknown result type (might be due to invalid IL or missing references) //IL_10fa: Unknown result type (might be due to invalid IL or missing references) //IL_110c: Unknown result type (might be due to invalid IL or missing references) //IL_111e: Unknown result type (might be due to invalid IL or missing references) //IL_119f: Unknown result type (might be due to invalid IL or missing references) //IL_11b1: Unknown result type (might be due to invalid IL or missing references) //IL_11c3: Unknown result type (might be due to invalid IL or missing references) //IL_11e2: Unknown result type (might be due to invalid IL or missing references) //IL_11f4: Unknown result type (might be due to invalid IL or missing references) //IL_1213: Unknown result type (might be due to invalid IL or missing references) //IL_1225: Unknown result type (might be due to invalid IL or missing references) //IL_1244: Unknown result type (might be due to invalid IL or missing references) //IL_1256: Unknown result type (might be due to invalid IL or missing references) //IL_12b5: Unknown result type (might be due to invalid IL or missing references) //IL_12c7: Unknown result type (might be due to invalid IL or missing references) //IL_12e6: Unknown result type (might be due to invalid IL or missing references) //IL_12f8: 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_1329: Unknown result type (might be due to invalid IL or missing references) //IL_1348: Unknown result type (might be due to invalid IL or missing references) //IL_135a: Unknown result type (might be due to invalid IL or missing references) //IL_1379: Unknown result type (might be due to invalid IL or missing references) //IL_138b: Unknown result type (might be due to invalid IL or missing references) //IL_13aa: Unknown result type (might be due to invalid IL or missing references) //IL_13bc: Unknown result type (might be due to invalid IL or missing references) //IL_143d: Unknown result type (might be due to invalid IL or missing references) //IL_144f: Unknown result type (might be due to invalid IL or missing references) //IL_146e: Unknown result type (might be due to invalid IL or missing references) //IL_1480: Unknown result type (might be due to invalid IL or missing references) //IL_149f: Unknown result type (might be due to invalid IL or missing references) //IL_14b1: Unknown result type (might be due to invalid IL or missing references) //IL_14d5: Unknown result type (might be due to invalid IL or missing references) //IL_14e7: Unknown result type (might be due to invalid IL or missing references) //IL_1506: Unknown result type (might be due to invalid IL or missing references) //IL_1518: Unknown result type (might be due to invalid IL or missing references) //IL_1537: Unknown result type (might be due to invalid IL or missing references) //IL_1549: Unknown result type (might be due to invalid IL or missing references) //IL_1568: Unknown result type (might be due to invalid IL or missing references) //IL_157a: Unknown result type (might be due to invalid IL or missing references) //IL_1599: Unknown result type (might be due to invalid IL or missing references) //IL_15ab: Unknown result type (might be due to invalid IL or missing references) //IL_15bd: Unknown result type (might be due to invalid IL or missing references) //IL_1600: Unknown result type (might be due to invalid IL or missing references) //IL_1612: Unknown result type (might be due to invalid IL or missing references) //IL_1631: Unknown result type (might be due to invalid IL or missing references) //IL_1643: Unknown result type (might be due to invalid IL or missing references) //IL_1662: Unknown result type (might be due to invalid IL or missing references) //IL_1674: Unknown result type (might be due to invalid IL or missing references) //IL_1693: Unknown result type (might be due to invalid IL or missing references) //IL_16a5: Unknown result type (might be due to invalid IL or missing references) //IL_16c4: Unknown result type (might be due to invalid IL or missing references) //IL_16d6: Unknown result type (might be due to invalid IL or missing references) //IL_16f5: Unknown result type (might be due to invalid IL or missing references) //IL_1707: Unknown result type (might be due to invalid IL or missing references) //IL_1726: Unknown result type (might be due to invalid IL or missing references) //IL_1738: Unknown result type (might be due to invalid IL or missing references) //IL_1757: Unknown result type (might be due to invalid IL or missing references) //IL_1769: Unknown result type (might be due to invalid IL or missing references) //IL_17ac: Unknown result type (might be due to invalid IL or missing references) //IL_17be: Unknown result type (might be due to invalid IL or missing references) //IL_17dd: Unknown result type (might be due to invalid IL or missing references) //IL_17ef: Unknown result type (might be due to invalid IL or missing references) //IL_180e: Unknown result type (might be due to invalid IL or missing references) //IL_1820: Unknown result type (might be due to invalid IL or missing references) //IL_183f: Unknown result type (might be due to invalid IL or missing references) //IL_1851: Unknown result type (might be due to invalid IL or missing references) //IL_1870: Unknown result type (might be due to invalid IL or missing references) //IL_1882: Unknown result type (might be due to invalid IL or missing references) //IL_1894: Unknown result type (might be due to invalid IL or missing references) //IL_1915: Unknown result type (might be due to invalid IL or missing references) //IL_1927: Unknown result type (might be due to invalid IL or missing references) //IL_1946: Unknown result type (might be due to invalid IL or missing references) //IL_1958: Unknown result type (might be due to invalid IL or missing references) //IL_1977: Unknown result type (might be due to invalid IL or missing references) //IL_1989: Unknown result type (might be due to invalid IL or missing references) //IL_19a8: Unknown result type (might be due to invalid IL or missing references) //IL_19ba: Unknown result type (might be due to invalid IL or missing references) //IL_1a16: Unknown result type (might be due to invalid IL or missing references) //IL_1a28: Unknown result type (might be due to invalid IL or missing references) //IL_1a47: Unknown result type (might be due to invalid IL or missing references) //IL_1a59: Unknown result type (might be due to invalid IL or missing references) //IL_1a78: Unknown result type (might be due to invalid IL or missing references) //IL_1a8a: Unknown result type (might be due to invalid IL or missing references) //IL_1aa9: Unknown result type (might be due to invalid IL or missing references) //IL_1abb: Unknown result type (might be due to invalid IL or missing references) //IL_1ada: Unknown result type (might be due to invalid IL or missing references) //IL_1aec: Unknown result type (might be due to invalid IL or missing references) //IL_1b2f: Unknown result type (might be due to invalid IL or missing references) //IL_1b41: Unknown result type (might be due to invalid IL or missing references) //IL_1b60: Unknown result type (might be due to invalid IL or missing references) //IL_1b72: Unknown result type (might be due to invalid IL or missing references) //IL_1b91: Unknown result type (might be due to invalid IL or missing references) //IL_1ba3: Unknown result type (might be due to invalid IL or missing references) //IL_1bc2: Unknown result type (might be due to invalid IL or missing references) //IL_1bd4: Unknown result type (might be due to invalid IL or missing references) //IL_1bf3: Unknown result type (might be due to invalid IL or missing references) //IL_1c05: Unknown result type (might be due to invalid IL or missing references) //IL_1c24: Unknown result type (might be due to invalid IL or missing references) //IL_1c36: Unknown result type (might be due to invalid IL or missing references) //IL_1c55: Unknown result type (might be due to invalid IL or missing references) //IL_1c67: Unknown result type (might be due to invalid IL or missing references) //IL_1cc9: Unknown result type (might be due to invalid IL or missing references) //IL_1cdb: Unknown result type (might be due to invalid IL or missing references) //IL_1cfa: Unknown result type (might be due to invalid IL or missing references) //IL_1d0c: Unknown result type (might be due to invalid IL or missing references) //IL_1d2b: Unknown result type (might be due to invalid IL or missing references) //IL_1d3d: Unknown result type (might be due to invalid IL or missing references) //IL_1d5c: Unknown result type (might be due to invalid IL or missing references) //IL_1d6e: Unknown result type (might be due to invalid IL or missing references) //IL_1e0e: Unknown result type (might be due to invalid IL or missing references) //IL_1e20: Unknown result type (might be due to invalid IL or missing references) //IL_1e32: Unknown result type (might be due to invalid IL or missing references) //IL_1e51: Unknown result type (might be due to invalid IL or missing references) //IL_1e63: Unknown result type (might be due to invalid IL or missing references) //IL_1e75: Unknown result type (might be due to invalid IL or missing references) //IL_1e99: Unknown result type (might be due to invalid IL or missing references) //IL_1eab: Unknown result type (might be due to invalid IL or missing references) //IL_1eca: Unknown result type (might be due to invalid IL or missing references) //IL_1edc: Unknown result type (might be due to invalid IL or missing references) //IL_1efb: Unknown result type (might be due to invalid IL or missing references) //IL_1f0d: Unknown result type (might be due to invalid IL or missing references) //IL_1f2c: Unknown result type (might be due to invalid IL or missing references) //IL_1f3e: Unknown result type (might be due to invalid IL or missing references) //IL_1f5d: Unknown result type (might be due to invalid IL or missing references) //IL_1f6f: 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_1fa0: Unknown result type (might be due to invalid IL or missing references) //IL_1fbf: Unknown result type (might be due to invalid IL or missing references) //IL_1fd1: Unknown result type (might be due to invalid IL or missing references) //IL_1ff0: Unknown result type (might be due to invalid IL or missing references) //IL_2002: Unknown result type (might be due to invalid IL or missing references) //IL_2021: Unknown result type (might be due to invalid IL or missing references) //IL_2033: Unknown result type (might be due to invalid IL or missing references) //IL_2076: Unknown result type (might be due to invalid IL or missing references) //IL_2088: Unknown result type (might be due to invalid IL or missing references) //IL_20a7: Unknown result type (might be due to invalid IL or missing references) //IL_20b9: Unknown result type (might be due to invalid IL or missing references) //IL_20d8: Unknown result type (might be due to invalid IL or missing references) //IL_20ea: Unknown result type (might be due to invalid IL or missing references) //IL_2109: Unknown result type (might be due to invalid IL or missing references) //IL_211b: Unknown result type (might be due to invalid IL or missing references) //IL_213a: Unknown result type (might be due to invalid IL or missing references) //IL_214c: Unknown result type (might be due to invalid IL or missing references) //IL_216b: Unknown result type (might be due to invalid IL or missing references) //IL_217d: Unknown result type (might be due to invalid IL or missing references) //IL_21bd: Unknown result type (might be due to invalid IL or missing references) //IL_21cf: Unknown result type (might be due to invalid IL or missing references) //IL_21e1: Unknown result type (might be due to invalid IL or missing references) //IL_2200: Unknown result type (might be due to invalid IL or missing references) //IL_2212: Unknown result type (might be due to invalid IL or missing references) //IL_2224: Unknown result type (might be due to invalid IL or missing references) //IL_2243: Unknown result type (might be due to invalid IL or missing references) //IL_2255: Unknown result type (might be due to invalid IL or missing references) //IL_2267: Unknown result type (might be due to invalid IL or missing references) //IL_22c9: Unknown result type (might be due to invalid IL or missing references) //IL_22db: Unknown result type (might be due to invalid IL or missing references) //IL_22fa: Unknown result type (might be due to invalid IL or missing references) //IL_230c: Unknown result type (might be due to invalid IL or missing references) //IL_232b: Unknown result type (might be due to invalid IL or missing references) //IL_233d: Unknown result type (might be due to invalid IL or missing references) //IL_235c: Unknown result type (might be due to invalid IL or missing references) //IL_236e: Unknown result type (might be due to invalid IL or missing references) //IL_250b: Unknown result type (might be due to invalid IL or missing references) //IL_251d: Unknown result type (might be due to invalid IL or missing references) //IL_253c: Unknown result type (might be due to invalid IL or missing references) //IL_254e: Unknown result type (might be due to invalid IL or missing references) //IL_256d: Unknown result type (might be due to invalid IL or missing references) //IL_257f: Unknown result type (might be due to invalid IL or missing references) //IL_259e: Unknown result type (might be due to invalid IL or missing references) //IL_25b0: Unknown result type (might be due to invalid IL or missing references) //IL_25cf: Unknown result type (might be due to invalid IL or missing references) //IL_25e1: Unknown result type (might be due to invalid IL or missing references) //IL_2600: Unknown result type (might be due to invalid IL or missing references) //IL_2612: Unknown result type (might be due to invalid IL or missing references) //IL_2631: Unknown result type (might be due to invalid IL or missing references) //IL_2643: Unknown result type (might be due to invalid IL or missing references) //IL_2672: Unknown result type (might be due to invalid IL or missing references) //IL_2684: Unknown result type (might be due to invalid IL or missing references) //IL_26de: Unknown result type (might be due to invalid IL or missing references) //IL_26f0: Unknown result type (might be due to invalid IL or missing references) //IL_270f: Unknown result type (might be due to invalid IL or missing references) //IL_2721: Unknown result type (might be due to invalid IL or missing references) //IL_2740: Unknown result type (might be due to invalid IL or missing references) //IL_2752: Unknown result type (might be due to invalid IL or missing references) //IL_2416: Unknown result type (might be due to invalid IL or missing references) //IL_242c: Unknown result type (might be due to invalid IL or missing references) //IL_243e: Unknown result type (might be due to invalid IL or missing references) //IL_2468: Unknown result type (might be due to invalid IL or missing references) //IL_247a: Unknown result type (might be due to invalid IL or missing references) //IL_2499: Unknown result type (might be due to invalid IL or missing references) //IL_24ab: Unknown result type (might be due to invalid IL or missing references) //IL_24ca: Unknown result type (might be due to invalid IL or missing references) //IL_24dc: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_031f: 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_0baa: Unknown result type (might be due to invalid IL or missing references) //IL_0bc7: Unknown result type (might be due to invalid IL or missing references) //IL_0bd9: Unknown result type (might be due to invalid IL or missing references) //IL_0d83: Unknown result type (might be due to invalid IL or missing references) //IL_0d95: Unknown result type (might be due to invalid IL or missing references) //IL_0db2: Unknown result type (might be due to invalid IL or missing references) //IL_0dc4: Unknown result type (might be due to invalid IL or missing references) //IL_0e3b: Unknown result type (might be due to invalid IL or missing references) //IL_0e4b: Unknown result type (might be due to invalid IL or missing references) //IL_0e68: Unknown result type (might be due to invalid IL or missing references) //IL_0e7a: Unknown result type (might be due to invalid IL or missing references) //IL_0e99: Unknown result type (might be due to invalid IL or missing references) //IL_0ea9: Unknown result type (might be due to invalid IL or missing references) //IL_0ec6: Unknown result type (might be due to invalid IL or missing references) //IL_0ed8: Unknown result type (might be due to invalid IL or missing references) //IL_2781: Unknown result type (might be due to invalid IL or missing references) //IL_2793: Unknown result type (might be due to invalid IL or missing references) //IL_27a5: Unknown result type (might be due to invalid IL or missing references) //IL_27c4: Unknown result type (might be due to invalid IL or missing references) //IL_27d6: Unknown result type (might be due to invalid IL or missing references) //IL_27e8: Unknown result type (might be due to invalid IL or missing references) //IL_2807: Unknown result type (might be due to invalid IL or missing references) //IL_2819: Unknown result type (might be due to invalid IL or missing references) //IL_282b: Unknown result type (might be due to invalid IL or missing references) //IL_284a: Unknown result type (might be due to invalid IL or missing references) //IL_285c: Unknown result type (might be due to invalid IL or missing references) //IL_287b: Unknown result type (might be due to invalid IL or missing references) //IL_288d: Unknown result type (might be due to invalid IL or missing references) //IL_28ac: Unknown result type (might be due to invalid IL or missing references) //IL_28be: Unknown result type (might be due to invalid IL or missing references) //IL_28dd: Unknown result type (might be due to invalid IL or missing references) //IL_28ef: Unknown result type (might be due to invalid IL or missing references) //IL_290e: Unknown result type (might be due to invalid IL or missing references) //IL_2920: Unknown result type (might be due to invalid IL or missing references) //IL_dddb: Unknown result type (might be due to invalid IL or missing references) //IL_ddf0: Unknown result type (might be due to invalid IL or missing references) //IL_297c: Unknown result type (might be due to invalid IL or missing references) //IL_298e: Unknown result type (might be due to invalid IL or missing references) //IL_29ad: Unknown result type (might be due to invalid IL or missing references) //IL_29bf: Unknown result type (might be due to invalid IL or missing references) //IL_29de: Unknown result type (might be due to invalid IL or missing references) //IL_29f0: Unknown result type (might be due to invalid IL or missing references) //IL_2a0f: Unknown result type (might be due to invalid IL or missing references) //IL_2a21: Unknown result type (might be due to invalid IL or missing references) //IL_2a33: Unknown result type (might be due to invalid IL or missing references) //IL_2a52: Unknown result type (might be due to invalid IL or missing references) //IL_2a64: Unknown result type (might be due to invalid IL or missing references) //IL_2a83: Unknown result type (might be due to invalid IL or missing references) //IL_2a95: Unknown result type (might be due to invalid IL or missing references) //IL_2ab4: Unknown result type (might be due to invalid IL or missing references) //IL_2ac6: Unknown result type (might be due to invalid IL or missing references) //IL_2ae5: Unknown result type (might be due to invalid IL or missing references) //IL_2af7: Unknown result type (might be due to invalid IL or missing references) //IL_2b16: Unknown result type (might be due to invalid IL or missing references) //IL_2b28: Unknown result type (might be due to invalid IL or missing references) //IL_2bb1: Unknown result type (might be due to invalid IL or missing references) //IL_2bc3: Unknown result type (might be due to invalid IL or missing references) //IL_2be2: Unknown result type (might be due to invalid IL or missing references) //IL_2bf4: Unknown result type (might be due to invalid IL or missing references) //IL_2c13: Unknown result type (might be due to invalid IL or missing references) //IL_2c25: Unknown result type (might be due to invalid IL or missing references) //IL_2c44: Unknown result type (might be due to invalid IL or missing references) //IL_2c56: Unknown result type (might be due to invalid IL or missing references) //IL_2ca1: Unknown result type (might be due to invalid IL or missing references) //IL_2cb3: Unknown result type (might be due to invalid IL or missing references) //IL_2cd2: Unknown result type (might be due to invalid IL or missing references) //IL_2ce4: Unknown result type (might be due to invalid IL or missing references) //IL_2d03: Unknown result type (might be due to invalid IL or missing references) //IL_2d15: Unknown result type (might be due to invalid IL or missing references) //IL_2d34: Unknown result type (might be due to invalid IL or missing references) //IL_2d46: Unknown result type (might be due to invalid IL or missing references) //IL_2d65: Unknown result type (might be due to invalid IL or missing references) //IL_2d77: Unknown result type (might be due to invalid IL or missing references) //IL_2dc2: Unknown result type (might be due to invalid IL or missing references) //IL_2dd4: Unknown result type (might be due to invalid IL or missing references) //IL_2df3: Unknown result type (might be due to invalid IL or missing references) //IL_2e05: Unknown result type (might be due to invalid IL or missing references) //IL_2e24: Unknown result type (might be due to invalid IL or missing references) //IL_2e36: Unknown result type (might be due to invalid IL or missing references) //IL_2e55: Unknown result type (might be due to invalid IL or missing references) //IL_2e67: Unknown result type (might be due to invalid IL or missing references) //IL_2e86: Unknown result type (might be due to invalid IL or missing references) //IL_2e98: Unknown result type (might be due to invalid IL or missing references) //IL_2eb7: Unknown result type (might be due to invalid IL or missing references) //IL_2ec9: Unknown result type (might be due to invalid IL or missing references) //IL_2f22: Unknown result type (might be due to invalid IL or missing references) //IL_2f34: Unknown result type (might be due to invalid IL or missing references) //IL_2f53: Unknown result type (might be due to invalid IL or missing references) //IL_2f65: Unknown result type (might be due to invalid IL or missing references) //IL_312c: Unknown result type (might be due to invalid IL or missing references) //IL_313e: Unknown result type (might be due to invalid IL or missing references) //IL_315d: Unknown result type (might be due to invalid IL or missing references) //IL_316f: Unknown result type (might be due to invalid IL or missing references) //IL_318e: Unknown result type (might be due to invalid IL or missing references) //IL_31a0: Unknown result type (might be due to invalid IL or missing references) //IL_3039: Unknown result type (might be due to invalid IL or missing references) //IL_304b: Unknown result type (might be due to invalid IL or missing references) //IL_306a: Unknown result type (might be due to invalid IL or missing references) //IL_307c: Unknown result type (might be due to invalid IL or missing references) //IL_309b: Unknown result type (might be due to invalid IL or missing references) //IL_30ad: Unknown result type (might be due to invalid IL or missing references) //IL_30cc: Unknown result type (might be due to invalid IL or missing references) //IL_30de: Unknown result type (might be due to invalid IL or missing references) //IL_2f8f: Unknown result type (might be due to invalid IL or missing references) //IL_2fa1: Unknown result type (might be due to invalid IL or missing references) //IL_2fb3: Unknown result type (might be due to invalid IL or missing references) //IL_2fd2: Unknown result type (might be due to invalid IL or missing references) //IL_2fe4: Unknown result type (might be due to invalid IL or missing references) //IL_3003: Unknown result type (might be due to invalid IL or missing references) //IL_3015: Unknown result type (might be due to invalid IL or missing references) //IL_3564: Unknown result type (might be due to invalid IL or missing references) //IL_3576: Unknown result type (might be due to invalid IL or missing references) //IL_3588: Unknown result type (might be due to invalid IL or missing references) //IL_35a7: Unknown result type (might be due to invalid IL or missing references) //IL_35b9: Unknown result type (might be due to invalid IL or missing references) //IL_35cb: Unknown result type (might be due to invalid IL or missing references) //IL_35ea: Unknown result type (might be due to invalid IL or missing references) //IL_35fc: Unknown result type (might be due to invalid IL or missing references) //IL_361b: Unknown result type (might be due to invalid IL or missing references) //IL_362d: Unknown result type (might be due to invalid IL or missing references) //IL_364c: Unknown result type (might be due to invalid IL or missing references) //IL_365e: Unknown result type (might be due to invalid IL or missing references) //IL_367d: Unknown result type (might be due to invalid IL or missing references) //IL_368f: Unknown result type (might be due to invalid IL or missing references) //IL_3490: Unknown result type (might be due to invalid IL or missing references) //IL_34a2: Unknown result type (might be due to invalid IL or missing references) //IL_34c1: Unknown result type (might be due to invalid IL or missing references) //IL_34d3: Unknown result type (might be due to invalid IL or missing references) //IL_34f2: Unknown result type (might be due to invalid IL or missing references) //IL_3504: Unknown result type (might be due to invalid IL or missing references) //IL_3523: Unknown result type (might be due to invalid IL or missing references) //IL_3535: Unknown result type (might be due to invalid IL or missing references) //IL_33f8: Unknown result type (might be due to invalid IL or missing references) //IL_340a: Unknown result type (might be due to invalid IL or missing references) //IL_3429: Unknown result type (might be due to invalid IL or missing references) //IL_343b: Unknown result type (might be due to invalid IL or missing references) //IL_345a: Unknown result type (might be due to invalid IL or missing references) //IL_346c: Unknown result type (might be due to invalid IL or missing references) //IL_36be: Unknown result type (might be due to invalid IL or missing references) //IL_36d0: Unknown result type (might be due to invalid IL or missing references) //IL_36e2: Unknown result type (might be due to invalid IL or missing references) //IL_3701: Unknown result type (might be due to invalid IL or missing references) //IL_3713: Unknown result type (might be due to invalid IL or missing references) //IL_3725: Unknown result type (might be due to invalid IL or missing references) //IL_31eb: Unknown result type (might be due to invalid IL or missing references) //IL_31fd: Unknown result type (might be due to invalid IL or missing references) //IL_3216: Unknown result type (might be due to invalid IL or missing references) //IL_322e: Unknown result type (might be due to invalid IL or missing references) //IL_3247: Unknown result type (might be due to invalid IL or missing references) //IL_325f: Unknown result type (might be due to invalid IL or missing references) //IL_3748: Unknown result type (might be due to invalid IL or missing references) //IL_375a: Unknown result type (might be due to invalid IL or missing references) //IL_3777: Unknown result type (might be due to invalid IL or missing references) //IL_3789: Unknown result type (might be due to invalid IL or missing references) //IL_37b4: Unknown result type (might be due to invalid IL or missing references) //IL_37c6: Unknown result type (might be due to invalid IL or missing references) //IL_37e5: Unknown result type (might be due to invalid IL or missing references) //IL_37f7: Unknown result type (might be due to invalid IL or missing references) //IL_3816: Unknown result type (might be due to invalid IL or missing references) //IL_3828: Unknown result type (might be due to invalid IL or missing references) //IL_3865: Unknown result type (might be due to invalid IL or missing references) //IL_3877: Unknown result type (might be due to invalid IL or missing references) //IL_3889: Unknown result type (might be due to invalid IL or missing references) //IL_38a8: Unknown result type (might be due to invalid IL or missing references) //IL_38ba: Unknown result type (might be due to invalid IL or missing references) //IL_38cc: Unknown result type (might be due to invalid IL or missing references) //IL_38eb: Unknown result type (might be due to invalid IL or missing references) //IL_38fd: Unknown result type (might be due to invalid IL or missing references) //IL_390f: Unknown result type (might be due to invalid IL or missing references) //IL_392e: Unknown result type (might be due to invalid IL or missing references) //IL_3940: Unknown result type (might be due to invalid IL or missing references) //IL_3952: Unknown result type (might be due to invalid IL or missing references) //IL_3a14: Unknown result type (might be due to invalid IL or missing references) //IL_3a26: Unknown result type (might be due to invalid IL or missing references) //IL_3a45: Unknown result type (might be due to invalid IL or missing references) //IL_3a57: Unknown result type (might be due to invalid IL or missing references) //IL_397c: Unknown result type (might be due to invalid IL or missing references) //IL_398e: Unknown result type (might be due to invalid IL or missing references) //IL_39ad: Unknown result type (might be due to invalid IL or missing references) //IL_39bf: Unknown result type (might be due to invalid IL or missing references) //IL_39de: Unknown result type (might be due to invalid IL or missing references) //IL_39f0: Unknown result type (might be due to invalid IL or missing references) //IL_3a9e: Unknown result type (might be due to invalid IL or missing references) //IL_3ab0: Unknown result type (might be due to invalid IL or missing references) //IL_3acf: Unknown result type (might be due to invalid IL or missing references) //IL_3ae1: Unknown result type (might be due to invalid IL or missing references) //IL_3b00: Unknown result type (might be due to invalid IL or missing references) //IL_3b12: Unknown result type (might be due to invalid IL or missing references) //IL_3b31: Unknown result type (might be due to invalid IL or missing references) //IL_3b43: Unknown result type (might be due to invalid IL or missing references) //IL_3b62: Unknown result type (might be due to invalid IL or missing references) //IL_3b74: Unknown result type (might be due to invalid IL or missing references) //IL_3b93: Unknown result type (might be due to invalid IL or missing references) //IL_3ba5: Unknown result type (might be due to invalid IL or missing references) //IL_3bc4: Unknown result type (might be due to invalid IL or missing references) //IL_3bd6: Unknown result type (might be due to invalid IL or missing references) //IL_3bf5: Unknown result type (might be due to invalid IL or missing references) //IL_3c07: Unknown result type (might be due to invalid IL or missing references) //IL_3c26: Unknown result type (might be due to invalid IL or missing references) //IL_3c38: Unknown result type (might be due to invalid IL or missing references) //IL_40b7: Unknown result type (might be due to invalid IL or missing references) //IL_40c9: Unknown result type (might be due to invalid IL or missing references) //IL_40e8: Unknown result type (might be due to invalid IL or missing references) //IL_40fa: Unknown result type (might be due to invalid IL or missing references) //IL_3d28: Unknown result type (might be due to invalid IL or missing references) //IL_3d3a: Unknown result type (might be due to invalid IL or missing references) //IL_3d59: Unknown result type (might be due to invalid IL or missing references) //IL_3d6b: Unknown result type (might be due to invalid IL or missing references) //IL_3c62: Unknown result type (might be due to invalid IL or missing references) //IL_3c74: Unknown result type (might be due to invalid IL or missing references) //IL_3c93: Unknown result type (might be due to invalid IL or missing references) //IL_3ca5: Unknown result type (might be due to invalid IL or missing references) //IL_3cc4: Unknown result type (might be due to invalid IL or missing references) //IL_3cd6: Unknown result type (might be due to invalid IL or missing references) //IL_3cf5: Unknown result type (might be due to invalid IL or missing references) //IL_3d07: Unknown result type (might be due to invalid IL or missing references) //IL_417c: Unknown result type (might be due to invalid IL or missing references) //IL_418e: Unknown result type (might be due to invalid IL or missing references) //IL_41eb: Unknown result type (might be due to invalid IL or missing references) //IL_41fd: Unknown result type (might be due to invalid IL or missing references) //IL_421c: Unknown result type (might be due to invalid IL or missing references) //IL_422e: Unknown result type (might be due to invalid IL or missing references) //IL_424d: Unknown result type (might be due to invalid IL or missing references) //IL_425f: Unknown result type (might be due to invalid IL or missing references) //IL_427e: Unknown result type (might be due to invalid IL or missing references) //IL_4290: Unknown result type (might be due to invalid IL or missing references) //IL_4319: Unknown result type (might be due to invalid IL or missing references) //IL_432b: Unknown result type (might be due to invalid IL or missing references) //IL_434a: Unknown result type (might be due to invalid IL or missing references) //IL_435c: Unknown result type (might be due to invalid IL or missing references) //IL_411d: Unknown result type (might be due to invalid IL or missing references) //IL_412f: Unknown result type (might be due to invalid IL or missing references) //IL_4141: Unknown result type (might be due to invalid IL or missing references) //IL_43a7: Unknown result type (might be due to invalid IL or missing references) //IL_43b9: Unknown result type (might be due to invalid IL or missing references) //IL_43d8: Unknown result type (might be due to invalid IL or missing references) //IL_43ea: Unknown result type (might be due to invalid IL or missing references) //IL_4409: Unknown result type (might be due to invalid IL or missing references) //IL_441b: Unknown result type (might be due to invalid IL or missing references) //IL_443a: Unknown result type (might be due to invalid IL or missing references) //IL_444c: Unknown result type (might be due to invalid IL or missing references) //IL_3e6f: Unknown result type (might be due to invalid IL or missing references) //IL_3e81: Unknown result type (might be due to invalid IL or missing references) //IL_3da9: Unknown result type (might be due to invalid IL or missing references) //IL_3dbb: Unknown result type (might be due to invalid IL or missing references) //IL_3dda: Unknown result type (might be due to invalid IL or missing references) //IL_3dec: Unknown result type (might be due to invalid IL or missing references) //IL_3e0b: Unknown result type (might be due to invalid IL or missing references) //IL_3e1d: Unknown result type (might be due to invalid IL or missing references) //IL_3e3c: Unknown result type (might be due to invalid IL or missing references) //IL_3e4e: Unknown result type (might be due to invalid IL or missing references) //IL_44a8: Unknown result type (might be due to invalid IL or missing references) //IL_44ba: Unknown result type (might be due to invalid IL or missing references) //IL_44cc: Unknown result type (might be due to invalid IL or missing references) //IL_3ea8: Unknown result type (might be due to invalid IL or missing references) //IL_3eba: Unknown result type (might be due to invalid IL or missing references) //IL_3ecc: Unknown result type (might be due to invalid IL or missing references) //IL_4631: Unknown result type (might be due to invalid IL or missing references) //IL_4643: Unknown result type (might be due to invalid IL or missing references) //IL_4662: Unknown result type (might be due to invalid IL or missing references) //IL_4674: Unknown result type (might be due to invalid IL or missing references) //IL_4686: Unknown result type (might be due to invalid IL or missing references) //IL_46a5: Unknown result type (might be due to invalid IL or missing references) //IL_46b7: Unknown result type (might be due to invalid IL or missing references) //IL_46c9: Unknown result type (might be due to invalid IL or missing references) //IL_46e8: Unknown result type (might be due to invalid IL or missing references) //IL_46fa: Unknown result type (might be due to invalid IL or missing references) //IL_470c: Unknown result type (might be due to invalid IL or missing references) //IL_472b: Unknown result type (might be due to invalid IL or missing references) //IL_473d: Unknown result type (might be due to invalid IL or missing references) //IL_474f: Unknown result type (might be due to invalid IL or missing references) //IL_476e: Unknown result type (might be due to invalid IL or missing references) //IL_4780: Unknown result type (might be due to invalid IL or missing references) //IL_45bf: Unknown result type (might be due to invalid IL or missing references) //IL_45d1: Unknown result type (might be due to invalid IL or missing references) //IL_45f0: Unknown result type (might be due to invalid IL or missing references) //IL_4602: Unknown result type (might be due to invalid IL or missing references) //IL_44f6: Unknown result type (might be due to invalid IL or missing references) //IL_4508: Unknown result type (might be due to invalid IL or missing references) //IL_4527: Unknown result type (might be due to invalid IL or missing references) //IL_4539: Unknown result type (might be due to invalid IL or missing references) //IL_4558: Unknown result type (might be due to invalid IL or missing references) //IL_456a: Unknown result type (might be due to invalid IL or missing references) //IL_4589: Unknown result type (might be due to invalid IL or missing references) //IL_459b: Unknown result type (might be due to invalid IL or missing references) //IL_3ef8: Unknown result type (might be due to invalid IL or missing references) //IL_3f0a: Unknown result type (might be due to invalid IL or missing references) //IL_3f29: Unknown result type (might be due to invalid IL or missing references) //IL_3f3b: Unknown result type (might be due to invalid IL or missing references) //IL_3f67: Unknown result type (might be due to invalid IL or missing references) //IL_3f79: Unknown result type (might be due to invalid IL or missing references) //IL_3f98: Unknown result type (might be due to invalid IL or missing references) //IL_3faa: Unknown result type (might be due to invalid IL or missing references) //IL_4879: Unknown result type (might be due to invalid IL or missing references) //IL_488b: Unknown result type (might be due to invalid IL or missing references) //IL_489d: Unknown result type (might be due to invalid IL or missing references) //IL_48bc: Unknown result type (might be due to invalid IL or missing references) //IL_48ce: Unknown result type (might be due to invalid IL or missing references) //IL_48e0: Unknown result type (might be due to invalid IL or missing references) //IL_48ff: Unknown result type (might be due to invalid IL or missing references) //IL_4911: Unknown result type (might be due to invalid IL or missing references) //IL_4930: Unknown result type (might be due to invalid IL or missing references) //IL_4942: Unknown result type (might be due to invalid IL or missing references) //IL_4961: Unknown result type (might be due to invalid IL or missing references) //IL_4973: Unknown result type (might be due to invalid IL or missing references) //IL_3fd6: Unknown result type (might be due to invalid IL or missing references) //IL_3fe8: Unknown result type (might be due to invalid IL or missing references) //IL_4007: Unknown result type (might be due to invalid IL or missing references) //IL_4019: Unknown result type (might be due to invalid IL or missing references) //IL_49a2: Unknown result type (might be due to invalid IL or missing references) //IL_49b4: Unknown result type (might be due to invalid IL or missing references) //IL_49c6: Unknown result type (might be due to invalid IL or missing references) //IL_49e5: Unknown result type (might be due to invalid IL or missing references) //IL_49f7: Unknown result type (might be due to invalid IL or missing references) //IL_4a09: Unknown result type (might be due to invalid IL or missing references) //IL_4a28: Unknown result type (might be due to invalid IL or missing references) //IL_4a3a: Unknown result type (might be due to invalid IL or missing references) //IL_4a4c: Unknown result type (might be due to invalid IL or missing references) //IL_4a6b: Unknown result type (might be due to invalid IL or missing references) //IL_4a7d: Unknown result type (might be due to invalid IL or missing references) //IL_4a8f: Unknown result type (might be due to invalid IL or missing references) //IL_4aae: Unknown result type (might be due to invalid IL or missing references) //IL_4ac0: Unknown result type (might be due to invalid IL or missing references) //IL_4048: Unknown result type (might be due to invalid IL or missing references) //IL_405a: Unknown result type (might be due to invalid IL or missing references) //IL_4079: Unknown result type (might be due to invalid IL or missing references) //IL_408b: Unknown result type (might be due to invalid IL or missing references) //IL_4b42: Unknown result type (might be due to invalid IL or missing references) //IL_4b64: Unknown result type (might be due to invalid IL or missing references) //IL_4d23: Unknown result type (might be due to invalid IL or missing references) //IL_4d35: Unknown result type (might be due to invalid IL or missing references) //IL_4d47: Unknown result type (might be due to invalid IL or missing references) //IL_4d66: Unknown result type (might be due to invalid IL or missing references) //IL_4d78: Unknown result type (might be due to invalid IL or missing references) //IL_4d8a: Unknown result type (might be due to invalid IL or missing references) //IL_4b99: Unknown result type (might be due to invalid IL or missing references) //IL_4bab: Unknown result type (might be due to invalid IL or missing references) //IL_4bca: Unknown result type (might be due to invalid IL or missing references) //IL_4bdc: Unknown result type (might be due to invalid IL or missing references) //IL_4bfb: Unknown result type (might be due to invalid IL or missing references) //IL_4c0d: Unknown result type (might be due to invalid IL or missing references) //IL_4db2: Unknown result type (might be due to invalid IL or missing references) //IL_4dc2: Unknown result type (might be due to invalid IL or missing references) //IL_4ddf: Unknown result type (might be due to invalid IL or missing references) //IL_4df1: Unknown result type (might be due to invalid IL or missing references) //IL_4e10: Unknown result type (might be due to invalid IL or missing references) //IL_4e20: Unknown result type (might be due to invalid IL or missing references) //IL_4e3d: Unknown result type (might be due to invalid IL or missing references) //IL_4e4f: Unknown result type (might be due to invalid IL or missing references) //IL_4eb3: Unknown result type (might be due to invalid IL or missing references) //IL_4ec5: Unknown result type (might be due to invalid IL or missing references) //IL_4ee4: Unknown result type (might be due to invalid IL or missing references) //IL_4ef6: Unknown result type (might be due to invalid IL or missing references) //IL_4f21: Unknown result type (might be due to invalid IL or missing references) //IL_4f33: Unknown result type (might be due to invalid IL or missing references) //IL_4f45: Unknown result type (might be due to invalid IL or missing references) //IL_4f64: Unknown result type (might be due to invalid IL or missing references) //IL_4f76: Unknown result type (might be due to invalid IL or missing references) //IL_4c45: Unknown result type (might be due to invalid IL or missing references) //IL_4c55: Unknown result type (might be due to invalid IL or missing references) //IL_4c72: Unknown result type (might be due to invalid IL or missing references) //IL_4c84: Unknown result type (might be due to invalid IL or missing references) //IL_4ca1: Unknown result type (might be due to invalid IL or missing references) //IL_4cb1: Unknown result type (might be due to invalid IL or missing references) //IL_510a: Unknown result type (might be due to invalid IL or missing references) //IL_511c: Unknown result type (might be due to invalid IL or missing references) //IL_515a: Unknown result type (might be due to invalid IL or missing references) //IL_516c: Unknown result type (might be due to invalid IL or missing references) //IL_518b: Unknown result type (might be due to invalid IL or missing references) //IL_519d: Unknown result type (might be due to invalid IL or missing references) //IL_508e: Unknown result type (might be due to invalid IL or missing references) //IL_50a0: Unknown result type (might be due to invalid IL or missing references) //IL_4fda: Unknown result type (might be due to invalid IL or missing references) //IL_4fec: Unknown result type (might be due to invalid IL or missing references) //IL_500b: Unknown result type (might be due to invalid IL or missing references) //IL_501d: Unknown result type (might be due to invalid IL or missing references) //IL_503c: Unknown result type (might be due to invalid IL or missing references) //IL_504e: Unknown result type (might be due to invalid IL or missing references) //IL_5226: Unknown result type (might be due to invalid IL or missing references) //IL_5238: Unknown result type (might be due to invalid IL or missing references) //IL_5257: Unknown result type (might be due to invalid IL or missing references) //IL_5269: Unknown result type (might be due to invalid IL or missing references) //IL_5288: Unknown result type (might be due to invalid IL or missing references) //IL_529a: Unknown result type (might be due to invalid IL or missing references) //IL_52b9: Unknown result type (might be due to invalid IL or missing references) //IL_52cb: Unknown result type (might be due to invalid IL or missing references) //IL_5324: Unknown result type (might be due to invalid IL or missing references) //IL_5336: Unknown result type (might be due to invalid IL or missing references) //IL_5483: Unknown result type (might be due to invalid IL or missing references) //IL_5495: Unknown result type (might be due to invalid IL or missing references) //IL_54b4: Unknown result type (might be due to invalid IL or missing references) //IL_54c6: Unknown result type (might be due to invalid IL or missing references) //IL_54e5: Unknown result type (might be due to invalid IL or missing references) //IL_54f7: Unknown result type (might be due to invalid IL or missing references) //IL_5516: Unknown result type (might be due to invalid IL or missing references) //IL_5528: Unknown result type (might be due to invalid IL or missing references) //IL_5547: Unknown result type (might be due to invalid IL or missing references) //IL_5559: Unknown result type (might be due to invalid IL or missing references) //IL_5578: Unknown result type (might be due to invalid IL or missing references) //IL_558a: Unknown result type (might be due to invalid IL or missing references) //IL_55a9: Unknown result type (might be due to invalid IL or missing references) //IL_55bb: Unknown result type (might be due to invalid IL or missing references) //IL_55da: Unknown result type (might be due to invalid IL or missing references) //IL_55ec: Unknown result type (might be due to invalid IL or missing references) //IL_53c4: Unknown result type (might be due to invalid IL or missing references) //IL_53d6: Unknown result type (might be due to invalid IL or missing references) //IL_53f5: Unknown result type (might be due to invalid IL or missing references) //IL_5407: Unknown result type (might be due to invalid IL or missing references) //IL_5426: Unknown result type (might be due to invalid IL or missing references) //IL_5438: Unknown result type (might be due to invalid IL or missing references) //IL_535d: Unknown result type (might be due to invalid IL or missing references) //IL_536f: Unknown result type (might be due to invalid IL or missing references) //IL_538e: Unknown result type (might be due to invalid IL or missing references) //IL_53a0: Unknown result type (might be due to invalid IL or missing references) //IL_5637: Unknown result type (might be due to invalid IL or missing references) //IL_5649: Unknown result type (might be due to invalid IL or missing references) //IL_5668: Unknown result type (might be due to invalid IL or missing references) //IL_567a: Unknown result type (might be due to invalid IL or missing references) //IL_5699: Unknown result type (might be due to invalid IL or missing references) //IL_56ab: Unknown result type (might be due to invalid IL or missing references) //IL_56f6: Unknown result type (might be due to invalid IL or missing references) //IL_5708: Unknown result type (might be due to invalid IL or missing references) //IL_5727: Unknown result type (might be due to invalid IL or missing references) //IL_5739: Unknown result type (might be due to invalid IL or missing references) //IL_5758: Unknown result type (might be due to invalid IL or missing references) //IL_576a: Unknown result type (might be due to invalid IL or missing references) //IL_5789: Unknown result type (might be due to invalid IL or missing references) //IL_579b: Unknown result type (might be due to invalid IL or missing references) //IL_57e9: Unknown result type (might be due to invalid IL or missing references) //IL_57fb: Unknown result type (might be due to invalid IL or missing references) //IL_581a: Unknown result type (might be due to invalid IL or missing references) //IL_582c: Unknown result type (might be due to invalid IL or missing references) //IL_584b: Unknown result type (might be due to invalid IL or missing references) //IL_585d: Unknown result type (might be due to invalid IL or missing references) //IL_587c: Unknown result type (might be due to invalid IL or missing references) //IL_588e: Unknown result type (might be due to invalid IL or missing references) //IL_58ad: Unknown result type (might be due to invalid IL or missing references) //IL_58bf: Unknown result type (might be due to invalid IL or missing references) //IL_58de: Unknown result type (might be due to invalid IL or missing references) //IL_58f0: Unknown result type (might be due to invalid IL or missing references) //IL_590f: Unknown result type (might be due to invalid IL or missing references) //IL_5921: Unknown result type (might be due to invalid IL or missing references) //IL_5950: Unknown result type (might be due to invalid IL or missing references) //IL_5962: Unknown result type (might be due to invalid IL or missing references) //IL_5974: Unknown result type (might be due to invalid IL or missing references) //IL_5993: Unknown result type (might be due to invalid IL or missing references) //IL_59a5: Unknown result type (might be due to invalid IL or missing references) //IL_59b7: Unknown result type (might be due to invalid IL or missing references) //IL_5a52: Unknown result type (might be due to invalid IL or missing references) //IL_5a64: Unknown result type (might be due to invalid IL or missing references) //IL_5a76: Unknown result type (might be due to invalid IL or missing references) //IL_5b14: Unknown result type (might be due to invalid IL or missing references) //IL_5b26: Unknown result type (might be due to invalid IL or missing references) //IL_5b45: Unknown result type (might be due to invalid IL or missing references) //IL_5b57: Unknown result type (might be due to invalid IL or missing references) //IL_5b76: Unknown result type (might be due to invalid IL or missing references) //IL_5b88: Unknown result type (might be due to invalid IL or missing references) //IL_5ba7: Unknown result type (might be due to invalid IL or missing references) //IL_5bb9: Unknown result type (might be due to invalid IL or missing references) //IL_5bd8: Unknown result type (might be due to invalid IL or missing references) //IL_5bea: Unknown result type (might be due to invalid IL or missing references) //IL_5c19: Unknown result type (might be due to invalid IL or missing references) //IL_5c2b: Unknown result type (might be due to invalid IL or missing references) //IL_5c4a: Unknown result type (might be due to invalid IL or missing references) //IL_5c5c: Unknown result type (might be due to invalid IL or missing references) //IL_5c7b: Unknown result type (might be due to invalid IL or missing references) //IL_5c8d: Unknown result type (might be due to invalid IL or missing references) //IL_5cac: Unknown result type (might be due to invalid IL or missing references) //IL_5cbe: Unknown result type (might be due to invalid IL or missing references) //IL_5cdd: Unknown result type (might be due to invalid IL or missing references) //IL_5cef: Unknown result type (might be due to invalid IL or missing references) //IL_5d0e: Unknown result type (might be due to invalid IL or missing references) //IL_5d20: Unknown result type (might be due to invalid IL or missing references) //IL_5d3f: Unknown result type (might be due to invalid IL or missing references) //IL_5d51: Unknown result type (might be due to invalid IL or missing references) //IL_5d70: Unknown result type (might be due to invalid IL or missing references) //IL_5d82: Unknown result type (might be due to invalid IL or missing references) //IL_5da1: Unknown result type (might be due to invalid IL or missing references) //IL_5db3: Unknown result type (might be due to invalid IL or missing references) //IL_5dd2: Unknown result type (might be due to invalid IL or missing references) //IL_5de4: Unknown result type (might be due to invalid IL or missing references) //IL_5e03: Unknown result type (might be due to invalid IL or missing references) //IL_5e15: Unknown result type (might be due to invalid IL or missing references) //IL_5e34: Unknown result type (might be due to invalid IL or missing references) //IL_5e46: Unknown result type (might be due to invalid IL or missing references) //IL_5e65: Unknown result type (might be due to invalid IL or missing references) //IL_5e77: Unknown result type (might be due to invalid IL or missing references) //IL_5e96: Unknown result type (might be due to invalid IL or missing references) //IL_5ea8: Unknown result type (might be due to invalid IL or missing references) //IL_5ef3: Unknown result type (might be due to invalid IL or missing references) //IL_5f05: Unknown result type (might be due to invalid IL or missing references) //IL_5f24: Unknown result type (might be due to invalid IL or missing references) //IL_5f36: Unknown result type (might be due to invalid IL or missing references) //IL_5f55: Unknown result type (might be due to invalid IL or missing references) //IL_5f67: Unknown result type (might be due to invalid IL or missing references) //IL_5f86: Unknown result type (might be due to invalid IL or missing references) //IL_5f98: Unknown result type (might be due to invalid IL or missing references) //IL_60a6: Unknown result type (might be due to invalid IL or missing references) //IL_60b8: Unknown result type (might be due to invalid IL or missing references) //IL_60d7: Unknown result type (might be due to invalid IL or missing references) //IL_60e9: Unknown result type (might be due to invalid IL or missing references) //IL_6108: Unknown result type (might be due to invalid IL or missing references) //IL_611a: Unknown result type (might be due to invalid IL or missing references) //IL_6139: Unknown result type (might be due to invalid IL or missing references) //IL_614b: Unknown result type (might be due to invalid IL or missing references) //IL_616a: Unknown result type (might be due to invalid IL or missing references) //IL_617c: Unknown result type (might be due to invalid IL or missing references) //IL_619b: Unknown result type (might be due to invalid IL or missing references) //IL_61ad: Unknown result type (might be due to invalid IL or missing references) //IL_61f8: Unknown result type (might be due to invalid IL or missing references) //IL_620a: Unknown result type (might be due to invalid IL or missing references) //IL_6229: Unknown result type (might be due to invalid IL or missing references) //IL_623b: Unknown result type (might be due to invalid IL or missing references) //IL_625a: Unknown result type (might be due to invalid IL or missing references) //IL_626c: Unknown result type (might be due to invalid IL or missing references) //IL_628b: Unknown result type (might be due to invalid IL or missing references) //IL_629d: Unknown result type (might be due to invalid IL or missing references) //IL_62bc: Unknown result type (might be due to invalid IL or missing references) //IL_62ce: Unknown result type (might be due to invalid IL or missing references) //IL_5fc6: Unknown result type (might be due to invalid IL or missing references) //IL_5fd8: Unknown result type (might be due to invalid IL or missing references) //IL_6000: Unknown result type (might be due to invalid IL or missing references) //IL_601b: Unknown result type (might be due to invalid IL or missing references) //IL_6043: Unknown result type (might be due to invalid IL or missing references) //IL_605e: Unknown result type (might be due to invalid IL or missing references) //IL_6335: Unknown result type (might be due to invalid IL or missing references) //IL_6347: Unknown result type (might be due to invalid IL or missing references) //IL_63b4: Unknown result type (might be due to invalid IL or missing references) //IL_63c6: Unknown result type (might be due to invalid IL or missing references) //IL_63e5: Unknown result type (might be due to invalid IL or missing references) //IL_63f7: Unknown result type (might be due to invalid IL or missing references) //IL_6445: Unknown result type (might be due to invalid IL or missing references) //IL_6457: Unknown result type (might be due to invalid IL or missing references) //IL_6476: Unknown result type (might be due to invalid IL or missing references) //IL_6488: Unknown result type (might be due to invalid IL or missing references) //IL_64a7: Unknown result type (might be due to invalid IL or missing references) //IL_64b9: Unknown result type (might be due to invalid IL or missing references) //IL_64d8: Unknown result type (might be due to invalid IL or missing references) //IL_64ea: Unknown result type (might be due to invalid IL or missing references) //IL_6509: Unknown result type (might be due to invalid IL or missing references) //IL_651b: Unknown result type (might be due to invalid IL or missing references) //IL_654a: Unknown result type (might be due to invalid IL or missing references) //IL_655c: Unknown result type (might be due to invalid IL or missing references) //IL_657b: Unknown result type (might be due to invalid IL or missing references) //IL_658d: Unknown result type (might be due to invalid IL or missing references) //IL_65ac: Unknown result type (might be due to invalid IL or missing references) //IL_65be: Unknown result type (might be due to invalid IL or missing references) //IL_65dd: Unknown result type (might be due to invalid IL or missing references) //IL_65ef: Unknown result type (might be due to invalid IL or missing references) //IL_660e: Unknown result type (might be due to invalid IL or missing references) //IL_6620: Unknown result type (might be due to invalid IL or missing references) //IL_663f: Unknown result type (might be due to invalid IL or missing references) //IL_6651: Unknown result type (might be due to invalid IL or missing references) //IL_6670: Unknown result type (might be due to invalid IL or missing references) //IL_6682: Unknown result type (might be due to invalid IL or missing references) //IL_66a1: Unknown result type (might be due to invalid IL or missing references) //IL_66b3: Unknown result type (might be due to invalid IL or missing references) //IL_66d2: Unknown result type (might be due to invalid IL or missing references) //IL_66e4: Unknown result type (might be due to invalid IL or missing references) //IL_6703: Unknown result type (might be due to invalid IL or missing references) //IL_6715: Unknown result type (might be due to invalid IL or missing references) //IL_6727: Unknown result type (might be due to invalid IL or missing references) //IL_6772: Unknown result type (might be due to invalid IL or missing references) //IL_6784: Unknown result type (might be due to invalid IL or missing references) //IL_67a3: Unknown result type (might be due to invalid IL or missing references) //IL_67b5: Unknown result type (might be due to invalid IL or missing references) //IL_67d4: Unknown result type (might be due to invalid IL or missing references) //IL_67e6: Unknown result type (might be due to invalid IL or missing references) //IL_6843: Unknown result type (might be due to invalid IL or missing references) //IL_6855: Unknown result type (might be due to invalid IL or missing references) //IL_6874: Unknown result type (might be due to invalid IL or missing references) //IL_6886: Unknown result type (might be due to invalid IL or missing references) //IL_68a5: Unknown result type (might be due to invalid IL or missing references) //IL_68b7: Unknown result type (might be due to invalid IL or missing references) //IL_68e6: Unknown result type (might be due to invalid IL or missing references) //IL_68f8: Unknown result type (might be due to invalid IL or missing references) //IL_6917: Unknown result type (might be due to invalid IL or missing references) //IL_6929: Unknown result type (might be due to invalid IL or missing references) //IL_6948: Unknown result type (might be due to invalid IL or missing references) //IL_695a: Unknown result type (might be due to invalid IL or missing references) //IL_6979: Unknown result type (might be due to invalid IL or missing references) //IL_698b: Unknown result type (might be due to invalid IL or missing references) //IL_69aa: Unknown result type (might be due to invalid IL or missing references) //IL_69bc: Unknown result type (might be due to invalid IL or missing references) //IL_6a16: Unknown result type (might be due to invalid IL or missing references) //IL_6a28: Unknown result type (might be due to invalid IL or missing references) //IL_6a47: Unknown result type (might be due to invalid IL or missing references) //IL_6a59: Unknown result type (might be due to invalid IL or missing references) //IL_6a78: Unknown result type (might be due to invalid IL or missing references) //IL_6a8a: Unknown result type (might be due to invalid IL or missing references) //IL_6ab9: Unknown result type (might be due to invalid IL or missing references) //IL_6acb: Unknown result type (might be due to invalid IL or missing references) //IL_6aea: Unknown result type (might be due to invalid IL or missing references) //IL_6afc: Unknown result type (might be due to invalid IL or missing references) //IL_6b1b: Unknown result type (might be due to invalid IL or missing references) //IL_6b2d: Unknown result type (might be due to invalid IL or missing references) //IL_6b4c: Unknown result type (might be due to invalid IL or missing references) //IL_6b5e: Unknown result type (might be due to invalid IL or missing references) //IL_6b7d: Unknown result type (might be due to invalid IL or missing references) //IL_6b8f: Unknown result type (might be due to invalid IL or missing references) //IL_6bae: Unknown result type (might be due to invalid IL or missing references) //IL_6bc0: Unknown result type (might be due to invalid IL or missing references) //IL_6bdf: Unknown result type (might be due to invalid IL or missing references) //IL_6bf1: Unknown result type (might be due to invalid IL or missing references) //IL_6c55: Unknown result type (might be due to invalid IL or missing references) //IL_6c67: Unknown result type (might be due to invalid IL or missing references) //IL_6c79: Unknown result type (might be due to invalid IL or missing references) //IL_6d07: Unknown result type (might be due to invalid IL or missing references) //IL_6d19: Unknown result type (might be due to invalid IL or missing references) //IL_6d38: Unknown result type (might be due to invalid IL or missing references) //IL_6d4a: Unknown result type (might be due to invalid IL or missing references) //IL_6ca0: Unknown result type (might be due to invalid IL or missing references) //IL_6cb2: Unknown result type (might be due to invalid IL or missing references) //IL_6cd1: Unknown result type (might be due to invalid IL or missing references) //IL_6ce3: Unknown result type (might be due to invalid IL or missing references) //IL_6d74: Unknown result type (might be due to invalid IL or missing references) //IL_6d86: Unknown result type (might be due to invalid IL or missing references) //IL_6dff: Unknown result type (might be due to invalid IL or missing references) //IL_6e2d: Unknown result type (might be due to invalid IL or missing references) //IL_6e5b: Unknown result type (might be due to invalid IL or missing references) //IL_6eab: Unknown result type (might be due to invalid IL or missing references) //IL_6ecd: Unknown result type (might be due to invalid IL or missing references) //IL_6f53: Unknown result type (might be due to invalid IL or missing references) //IL_6f65: Unknown result type (might be due to invalid IL or missing references) //IL_6f84: Unknown result type (might be due to invalid IL or missing references) //IL_6f96: Unknown result type (might be due to invalid IL or missing references) //IL_6fbc: Unknown result type (might be due to invalid IL or missing references) //IL_6fd1: Unknown result type (might be due to invalid IL or missing references) //IL_6fe5: Unknown result type (might be due to invalid IL or missing references) //IL_709d: Unknown result type (might be due to invalid IL or missing references) //IL_70af: Unknown result type (might be due to invalid IL or missing references) //IL_70ce: Unknown result type (might be due to invalid IL or missing references) //IL_70e0: Unknown result type (might be due to invalid IL or missing references) //IL_70ff: Unknown result type (might be due to invalid IL or missing references) //IL_7111: Unknown result type (might be due to invalid IL or missing references) //IL_713b: Unknown result type (might be due to invalid IL or missing references) //IL_714d: Unknown result type (might be due to invalid IL or missing references) //IL_716c: Unknown result type (might be due to invalid IL or missing references) //IL_717e: Unknown result type (might be due to invalid IL or missing references) //IL_719d: Unknown result type (might be due to invalid IL or missing references) //IL_71af: Unknown result type (might be due to invalid IL or missing references) //IL_71ce: Unknown result type (might be due to invalid IL or missing references) //IL_71e0: Unknown result type (might be due to invalid IL or missing references) //IL_7260: Unknown result type (might be due to invalid IL or missing references) //IL_7272: Unknown result type (might be due to invalid IL or missing references) //IL_7284: Unknown result type (might be due to invalid IL or missing references) //IL_72a3: Unknown result type (might be due to invalid IL or missing references) //IL_72b5: Unknown result type (might be due to invalid IL or missing references) //IL_705d: Unknown result type (might be due to invalid IL or missing references) //IL_706d: Unknown result type (might be due to invalid IL or missing references) //IL_74cc: Unknown result type (might be due to invalid IL or missing references) //IL_74de: Unknown result type (might be due to invalid IL or missing references) //IL_74fd: Unknown result type (might be due to invalid IL or missing references) //IL_750f: Unknown result type (might be due to invalid IL or missing references) //IL_752e: Unknown result type (might be due to invalid IL or missing references) //IL_7540: Unknown result type (might be due to invalid IL or missing references) //IL_755f: Unknown result type (might be due to invalid IL or missing references) //IL_7571: Unknown result type (might be due to invalid IL or missing references) //IL_7590: Unknown result type (might be due to invalid IL or missing references) //IL_75a2: Unknown result type (might be due to invalid IL or missing references) //IL_75c1: Unknown result type (might be due to invalid IL or missing references) //IL_75d3: Unknown result type (might be due to invalid IL or missing references) //IL_7343: Unknown result type (might be due to invalid IL or missing references) //IL_7355: Unknown result type (might be due to invalid IL or missing references) //IL_7374: Unknown result type (might be due to invalid IL or missing references) //IL_7386: Unknown result type (might be due to invalid IL or missing references) //IL_72dc: Unknown result type (might be due to invalid IL or missing references) //IL_72ee: Unknown result type (might be due to invalid IL or missing references) //IL_730d: Unknown result type (might be due to invalid IL or missing references) //IL_731f: Unknown result type (might be due to invalid IL or missing references) //IL_765c: Unknown result type (might be due to invalid IL or missing references) //IL_766e: Unknown result type (might be due to invalid IL or missing references) //IL_768d: Unknown result type (might be due to invalid IL or missing references) //IL_769f: Unknown result type (might be due to invalid IL or missing references) //IL_7709: Unknown result type (might be due to invalid IL or missing references) //IL_771b: Unknown result type (might be due to invalid IL or missing references) //IL_772d: Unknown result type (might be due to invalid IL or missing references) //IL_774c: Unknown result type (might be due to invalid IL or missing references) //IL_775e: Unknown result type (might be due to invalid IL or missing references) //IL_77a9: Unknown result type (might be due to invalid IL or missing references) //IL_77bb: Unknown result type (might be due to invalid IL or missing references) //IL_77cd: Unknown result type (might be due to invalid IL or missing references) //IL_77ec: Unknown result type (might be due to invalid IL or missing references) //IL_77fe: Unknown result type (might be due to invalid IL or missing references) //IL_7810: Unknown result type (might be due to invalid IL or missing references) //IL_782f: Unknown result type (might be due to invalid IL or missing references) //IL_7841: Unknown result type (might be due to invalid IL or missing references) //IL_7870: Unknown result type (might be due to invalid IL or missing references) //IL_7882: Unknown result type (might be due to invalid IL or missing references) //IL_7894: Unknown result type (might be due to invalid IL or missing references) //IL_78b3: Unknown result type (might be due to invalid IL or missing references) //IL_78c5: Unknown result type (might be due to invalid IL or missing references) //IL_7a13: Unknown result type (might be due to invalid IL or missing references) //IL_7a25: Unknown result type (might be due to invalid IL or missing references) //IL_7a44: Unknown result type (might be due to invalid IL or missing references) //IL_7a56: Unknown result type (might be due to invalid IL or missing references) //IL_7a75: Unknown result type (might be due to invalid IL or missing references) //IL_7a87: Unknown result type (might be due to invalid IL or missing references) //IL_78e7: Unknown result type (might be due to invalid IL or missing references) //IL_78f7: Unknown result type (might be due to invalid IL or missing references) //IL_7914: Unknown result type (might be due to invalid IL or missing references) //IL_7924: Unknown result type (might be due to invalid IL or missing references) //IL_7ab6: Unknown result type (might be due to invalid IL or missing references) //IL_7ac8: Unknown result type (might be due to invalid IL or missing references) //IL_7ada: Unknown result type (might be due to invalid IL or missing references) //IL_7af9: Unknown result type (might be due to invalid IL or missing references) //IL_7b0b: Unknown result type (might be due to invalid IL or missing references) //IL_7b2a: Unknown result type (might be due to invalid IL or missing references) //IL_7b3c: Unknown result type (might be due to invalid IL or missing references) //IL_7b5b: Unknown result type (might be due to invalid IL or missing references) //IL_7b6d: Unknown result type (might be due to invalid IL or missing references) //IL_7bcb: Unknown result type (might be due to invalid IL or missing references) //IL_7bdd: Unknown result type (might be due to invalid IL or missing references) //IL_7c1c: Unknown result type (might be due to invalid IL or missing references) //IL_7c2c: Unknown result type (might be due to invalid IL or missing references) //IL_7c57: Unknown result type (might be due to invalid IL or missing references) //IL_7c69: Unknown result type (might be due to invalid IL or missing references) //IL_7c7b: Unknown result type (might be due to invalid IL or missing references) //IL_7e16: Unknown result type (might be due to invalid IL or missing references) //IL_7e28: Unknown result type (might be due to invalid IL or missing references) //IL_7e3a: Unknown result type (might be due to invalid IL or missing references) //IL_7e59: Unknown result type (might be due to invalid IL or missing references) //IL_7e6b: Unknown result type (might be due to invalid IL or missing references) //IL_7e7d: Unknown result type (might be due to invalid IL or missing references) //IL_7e9c: Unknown result type (might be due to invalid IL or missing references) //IL_7eae: Unknown result type (might be due to invalid IL or missing references) //IL_7ecd: Unknown result type (might be due to invalid IL or missing references) //IL_7edf: Unknown result type (might be due to invalid IL or missing references) //IL_7efe: Unknown result type (might be due to invalid IL or missing references) //IL_7f10: Unknown result type (might be due to invalid IL or missing references) //IL_7f2f: Unknown result type (might be due to invalid IL or missing references) //IL_7f41: Unknown result type (might be due to invalid IL or missing references) //IL_7f60: Unknown result type (might be due to invalid IL or missing references) //IL_7f72: Unknown result type (might be due to invalid IL or missing references) //IL_7d0e: Unknown result type (might be due to invalid IL or missing references) //IL_7d23: Unknown result type (might be due to invalid IL or missing references) //IL_7d3f: Unknown result type (might be due to invalid IL or missing references) //IL_7d54: Unknown result type (might be due to invalid IL or missing references) //IL_7d76: Unknown result type (might be due to invalid IL or missing references) //IL_7d85: Unknown result type (might be due to invalid IL or missing references) //IL_7da4: Unknown result type (might be due to invalid IL or missing references) //IL_7db6: Unknown result type (might be due to invalid IL or missing references) //IL_7dd5: Unknown result type (might be due to invalid IL or missing references) //IL_7de7: Unknown result type (might be due to invalid IL or missing references) //IL_7ff3: Unknown result type (might be due to invalid IL or missing references) //IL_8005: Unknown result type (might be due to invalid IL or missing references) //IL_8072: Unknown result type (might be due to invalid IL or missing references) //IL_8084: Unknown result type (might be due to invalid IL or missing references) //IL_8096: Unknown result type (might be due to invalid IL or missing references) //IL_80b5: Unknown result type (might be due to invalid IL or missing references) //IL_80c7: Unknown result type (might be due to invalid IL or missing references) //IL_80d9: Unknown result type (might be due to invalid IL or missing references) //IL_8167: Unknown result type (might be due to invalid IL or missing references) //IL_8179: Unknown result type (might be due to invalid IL or missing references) //IL_8198: Unknown result type (might be due to invalid IL or missing references) //IL_81aa: Unknown result type (might be due to invalid IL or missing references) //IL_81c9: Unknown result type (might be due to invalid IL or missing references) //IL_81db: Unknown result type (might be due to invalid IL or missing references) //IL_81fa: Unknown result type (might be due to invalid IL or missing references) //IL_820c: Unknown result type (might be due to invalid IL or missing references) //IL_822b: Unknown result type (might be due to invalid IL or missing references) //IL_823d: Unknown result type (might be due to invalid IL or missing references) //IL_82b7: Unknown result type (might be due to invalid IL or missing references) //IL_82d9: Unknown result type (might be due to invalid IL or missing references) //IL_8308: Unknown result type (might be due to invalid IL or missing references) //IL_832a: Unknown result type (might be due to invalid IL or missing references) //IL_837d: Unknown result type (might be due to invalid IL or missing references) //IL_838f: Unknown result type (might be due to invalid IL or missing references) //IL_83a1: Unknown result type (might be due to invalid IL or missing references) //IL_83c0: Unknown result type (might be due to invalid IL or missing references) //IL_83d2: Unknown result type (might be due to invalid IL or missing references) //IL_83e4: Unknown result type (might be due to invalid IL or missing references) //IL_8403: Unknown result type (might be due to invalid IL or missing references) //IL_8415: Unknown result type (might be due to invalid IL or missing references) //IL_8427: Unknown result type (might be due to invalid IL or missing references) //IL_8446: Unknown result type (might be due to invalid IL or missing references) //IL_8458: Unknown result type (might be due to invalid IL or missing references) //IL_846a: Unknown result type (might be due to invalid IL or missing references) //IL_84b7: Unknown result type (might be due to invalid IL or missing references) //IL_84c9: Unknown result type (might be due to invalid IL or missing references) //IL_8588: Unknown result type (might be due to invalid IL or missing references) //IL_859a: Unknown result type (might be due to invalid IL or missing references) //IL_84f0: Unknown result type (might be due to invalid IL or missing references) //IL_8502: Unknown result type (might be due to invalid IL or missing references) //IL_8521: Unknown result type (might be due to invalid IL or missing references) //IL_8533: Unknown result type (might be due to invalid IL or missing references) //IL_8552: Unknown result type (might be due to invalid IL or missing references) //IL_8564: Unknown result type (might be due to invalid IL or missing references) //IL_8601: Unknown result type (might be due to invalid IL or missing references) //IL_8613: Unknown result type (might be due to invalid IL or missing references) //IL_8632: Unknown result type (might be due to invalid IL or missing references) //IL_8644: Unknown result type (might be due to invalid IL or missing references) //IL_8663: Unknown result type (might be due to invalid IL or missing references) //IL_8675: Unknown result type (might be due to invalid IL or missing references) //IL_8687: Unknown result type (might be due to invalid IL or missing references) //IL_86eb: Unknown result type (might be due to invalid IL or missing references) //IL_86fd: Unknown result type (might be due to invalid IL or missing references) //IL_871c: Unknown result type (might be due to invalid IL or missing references) //IL_872e: Unknown result type (might be due to invalid IL or missing references) //IL_8779: Unknown result type (might be due to invalid IL or missing references) //IL_878b: Unknown result type (might be due to invalid IL or missing references) //IL_87e8: Unknown result type (might be due to invalid IL or missing references) //IL_87fa: Unknown result type (might be due to invalid IL or missing references) //IL_8819: Unknown result type (might be due to invalid IL or missing references) //IL_882b: Unknown result type (might be due to invalid IL or missing references) //IL_884a: Unknown result type (might be due to invalid IL or missing references) //IL_885c: Unknown result type (might be due to invalid IL or missing references) //IL_893e: Unknown result type (might be due to invalid IL or missing references) //IL_8950: Unknown result type (might be due to invalid IL or missing references) //IL_8962: Unknown result type (might be due to invalid IL or missing references) //IL_8981: Unknown result type (might be due to invalid IL or missing references) //IL_8993: Unknown result type (might be due to invalid IL or missing references) //IL_89a5: Unknown result type (might be due to invalid IL or missing references) //IL_89c4: Unknown result type (might be due to invalid IL or missing references) //IL_89d6: Unknown result type (might be due to invalid IL or missing references) //IL_89f5: Unknown result type (might be due to invalid IL or missing references) //IL_8a07: Unknown result type (might be due to invalid IL or missing references) //IL_8a33: Unknown result type (might be due to invalid IL or missing references) //IL_8a45: Unknown result type (might be due to invalid IL or missing references) //IL_8a64: Unknown result type (might be due to invalid IL or missing references) //IL_8a76: Unknown result type (might be due to invalid IL or missing references) //IL_8a95: Unknown result type (might be due to invalid IL or missing references) //IL_8aa7: Unknown result type (might be due to invalid IL or missing references) //IL_8ac6: Unknown result type (might be due to invalid IL or missing references) //IL_8ad8: Unknown result type (might be due to invalid IL or missing references) //IL_8af7: Unknown result type (might be due to invalid IL or missing references) //IL_8b09: Unknown result type (might be due to invalid IL or missing references) //IL_8b28: Unknown result type (might be due to invalid IL or missing references) //IL_8b3a: Unknown result type (might be due to invalid IL or missing references) //IL_8b59: Unknown result type (might be due to invalid IL or missing references) //IL_8b6b: Unknown result type (might be due to invalid IL or missing references) //IL_8b8a: Unknown result type (might be due to invalid IL or missing references) //IL_8b9c: Unknown result type (might be due to invalid IL or missing references) //IL_8bbb: Unknown result type (might be due to invalid IL or missing references) //IL_8bcd: Unknown result type (might be due to invalid IL or missing references) //IL_8bec: Unknown result type (might be due to invalid IL or missing references) //IL_8bfe: Unknown result type (might be due to invalid IL or missing references) //IL_8c10: Unknown result type (might be due to invalid IL or missing references) //IL_8c2f: Unknown result type (might be due to invalid IL or missing references) //IL_8c41: Unknown result type (might be due to invalid IL or missing references) //IL_8c53: Unknown result type (might be due to invalid IL or missing references) //IL_88c6: Unknown result type (might be due to invalid IL or missing references) //IL_88d6: Unknown result type (might be due to invalid IL or missing references) //IL_88f3: Unknown result type (might be due to invalid IL or missing references) //IL_8903: Unknown result type (might be due to invalid IL or missing references) //IL_8c7f: Unknown result type (might be due to invalid IL or missing references) //IL_8c91: Unknown result type (might be due to invalid IL or missing references) //IL_8cb0: Unknown result type (might be due to invalid IL or missing references) //IL_8cc2: Unknown result type (might be due to invalid IL or missing references) //IL_8cfd: Unknown result type (might be due to invalid IL or missing references) //IL_8d0f: Unknown result type (might be due to invalid IL or missing references) //IL_8d2e: Unknown result type (might be due to invalid IL or missing references) //IL_8d40: Unknown result type (might be due to invalid IL or missing references) //IL_8d5f: Unknown result type (might be due to invalid IL or missing references) //IL_8d71: Unknown result type (might be due to invalid IL or missing references) //IL_8d90: Unknown result type (might be due to invalid IL or missing references) //IL_8da2: Unknown result type (might be due to invalid IL or missing references) //IL_8dc1: Unknown result type (might be due to invalid IL or missing references) //IL_8dd3: Unknown result type (might be due to invalid IL or missing references) //IL_8df2: Unknown result type (might be due to invalid IL or missing references) //IL_8e04: Unknown result type (might be due to invalid IL or missing references) //IL_8e23: Unknown result type (might be due to invalid IL or missing references) //IL_8e35: Unknown result type (might be due to invalid IL or missing references) //IL_8e54: Unknown result type (might be due to invalid IL or missing references) //IL_8e66: Unknown result type (might be due to invalid IL or missing references) //IL_8eb1: Unknown result type (might be due to invalid IL or missing references) //IL_8ec3: Unknown result type (might be due to invalid IL or missing references) //IL_8ee2: Unknown result type (might be due to invalid IL or missing references) //IL_8ef4: Unknown result type (might be due to invalid IL or missing references) //IL_8f2f: Unknown result type (might be due to invalid IL or missing references) //IL_8f41: Unknown result type (might be due to invalid IL or missing references) //IL_8f60: Unknown result type (might be due to invalid IL or missing references) //IL_8f72: Unknown result type (might be due to invalid IL or missing references) //IL_8f91: Unknown result type (might be due to invalid IL or missing references) //IL_8fa3: Unknown result type (might be due to invalid IL or missing references) //IL_8ff9: Unknown result type (might be due to invalid IL or missing references) //IL_900b: Unknown result type (might be due to invalid IL or missing references) //IL_902a: Unknown result type (might be due to invalid IL or missing references) //IL_903c: Unknown result type (might be due to invalid IL or missing references) //IL_905b: Unknown result type (might be due to invalid IL or missing references) //IL_906d: Unknown result type (might be due to invalid IL or missing references) //IL_9096: Unknown result type (might be due to invalid IL or missing references) //IL_90a8: Unknown result type (might be due to invalid IL or missing references) //IL_90c7: Unknown result type (might be due to invalid IL or missing references) //IL_90d9: Unknown result type (might be due to invalid IL or missing references) //IL_9100: Unknown result type (might be due to invalid IL or missing references) //IL_9112: Unknown result type (might be due to invalid IL or missing references) //IL_9131: Unknown result type (might be due to invalid IL or missing references) //IL_9143: Unknown result type (might be due to invalid IL or missing references) //IL_9162: Unknown result type (might be due to invalid IL or missing references) //IL_9174: Unknown result type (might be due to invalid IL or missing references) //IL_9254: Unknown result type (might be due to invalid IL or missing references) //IL_9266: Unknown result type (might be due to invalid IL or missing references) //IL_9285: Unknown result type (might be due to invalid IL or missing references) //IL_9297: Unknown result type (might be due to invalid IL or missing references) //IL_92b6: Unknown result type (might be due to invalid IL or missing references) //IL_92c8: Unknown result type (might be due to invalid IL or missing references) //IL_92da: Unknown result type (might be due to invalid IL or missing references) //IL_919b: Unknown result type (might be due to invalid IL or missing references) //IL_91ad: Unknown result type (might be due to invalid IL or missing references) //IL_91cc: Unknown result type (might be due to invalid IL or missing references) //IL_91de: Unknown result type (might be due to invalid IL or missing references) //IL_9385: Unknown result type (might be due to invalid IL or missing references) //IL_9397: Unknown result type (might be due to invalid IL or missing references) //IL_93b6: Unknown result type (might be due to invalid IL or missing references) //IL_93c8: Unknown result type (might be due to invalid IL or missing references) //IL_93ef: Unknown result type (might be due to invalid IL or missing references) //IL_9404: Unknown result type (might be due to invalid IL or missing references) //IL_9316: Unknown result type (might be due to invalid IL or missing references) //IL_9328: Unknown result type (might be due to invalid IL or missing references) //IL_933a: Unknown result type (might be due to invalid IL or missing references) //IL_9462: Unknown result type (might be due to invalid IL or missing references) //IL_9474: Unknown result type (might be due to invalid IL or missing references) //IL_9493: Unknown result type (might be due to invalid IL or missing references) //IL_94a5: Unknown result type (might be due to invalid IL or missing references) //IL_94c4: Unknown result type (might be due to invalid IL or missing references) //IL_94d6: Unknown result type (might be due to invalid IL or missing references) //IL_94f5: Unknown result type (might be due to invalid IL or missing references) //IL_9507: Unknown result type (might be due to invalid IL or missing references) //IL_9526: Unknown result type (might be due to invalid IL or missing references) //IL_9538: Unknown result type (might be due to invalid IL or missing references) //IL_9557: Unknown result type (might be due to invalid IL or missing references) //IL_9569: Unknown result type (might be due to invalid IL or missing references) //IL_95a3: Unknown result type (might be due to invalid IL or missing references) //IL_95b5: Unknown result type (might be due to invalid IL or missing references) //IL_95d4: Unknown result type (might be due to invalid IL or missing references) //IL_95e6: Unknown result type (might be due to invalid IL or missing references) //IL_9605: Unknown result type (might be due to invalid IL or missing references) //IL_9617: Unknown result type (might be due to invalid IL or missing references) //IL_9629: Unknown result type (might be due to invalid IL or missing references) //IL_9648: Unknown result type (might be due to invalid IL or missing references) //IL_965a: Unknown result type (might be due to invalid IL or missing references) //IL_9679: Unknown result type (might be due to invalid IL or missing references) //IL_968b: Unknown result type (might be due to invalid IL or missing references) //IL_96ae: Unknown result type (might be due to invalid IL or missing references) //IL_96be: Unknown result type (might be due to invalid IL or missing references) //IL_9776: Unknown result type (might be due to invalid IL or missing references) //IL_9788: Unknown result type (might be due to invalid IL or missing references) //IL_97a7: Unknown result type (might be due to invalid IL or missing references) //IL_97b9: Unknown result type (might be due to invalid IL or missing references) //IL_97d8: Unknown result type (might be due to invalid IL or missing references) //IL_97ea: Unknown result type (might be due to invalid IL or missing references) //IL_9809: Unknown result type (might be due to invalid IL or missing references) //IL_981b: Unknown result type (might be due to invalid IL or missing references) //IL_983a: Unknown result type (might be due to invalid IL or missing references) //IL_984c: Unknown result type (might be due to invalid IL or missing references) //IL_986b: Unknown result type (might be due to invalid IL or missing references) //IL_987d: Unknown result type (might be due to invalid IL or missing references) //IL_989c: Unknown result type (might be due to invalid IL or missing references) //IL_98ae: Unknown result type (might be due to invalid IL or missing references) //IL_98c0: Unknown result type (might be due to invalid IL or missing references) //IL_96f1: Unknown result type (might be due to invalid IL or missing references) //IL_9703: Unknown result type (might be due to invalid IL or missing references) //IL_9722: Unknown result type (might be due to invalid IL or missing references) //IL_9734: Unknown result type (might be due to invalid IL or missing references) //IL_98fd: Unknown result type (might be due to invalid IL or missing references) //IL_990f: Unknown result type (might be due to invalid IL or missing references) //IL_992e: Unknown result type (might be due to invalid IL or missing references) //IL_9940: Unknown result type (might be due to invalid IL or missing references) //IL_99ab: Unknown result type (might be due to invalid IL or missing references) //IL_99bd: Unknown result type (might be due to invalid IL or missing references) //IL_99dc: Unknown result type (might be due to invalid IL or missing references) //IL_99ee: Unknown result type (might be due to invalid IL or missing references) //IL_9a0d: Unknown result type (might be due to invalid IL or missing references) //IL_9a1f: Unknown result type (might be due to invalid IL or missing references) //IL_9a3e: Unknown result type (might be due to invalid IL or missing references) //IL_9a50: Unknown result type (might be due to invalid IL or missing references) //IL_9a62: Unknown result type (might be due to invalid IL or missing references) //IL_9a91: Unknown result type (might be due to invalid IL or missing references) //IL_9aa3: Unknown result type (might be due to invalid IL or missing references) //IL_9ab5: Unknown result type (might be due to invalid IL or missing references) //IL_9ad4: Unknown result type (might be due to invalid IL or missing references) //IL_9ae6: Unknown result type (might be due to invalid IL or missing references) //IL_9af8: Unknown result type (might be due to invalid IL or missing references) //IL_9b17: Unknown result type (might be due to invalid IL or missing references) //IL_9b29: Unknown result type (might be due to invalid IL or missing references) //IL_9b48: Unknown result type (might be due to invalid IL or missing references) //IL_9b5a: Unknown result type (might be due to invalid IL or missing references) //IL_9b79: Unknown result type (might be due to invalid IL or missing references) //IL_9b8b: Unknown result type (might be due to invalid IL or missing references) //IL_9baa: Unknown result type (might be due to invalid IL or missing references) //IL_9bbc: Unknown result type (might be due to invalid IL or missing references) //IL_9963: Unknown result type (might be due to invalid IL or missing references) //IL_9973: Unknown result type (might be due to invalid IL or missing references) //IL_9beb: Unknown result type (might be due to invalid IL or missing references) //IL_9bfd: Unknown result type (might be due to invalid IL or missing references) //IL_9c1c: Unknown result type (might be due to invalid IL or missing references) //IL_9c2e: Unknown result type (might be due to invalid IL or missing references) //IL_9c4d: Unknown result type (might be due to invalid IL or missing references) //IL_9c5f: Unknown result type (might be due to invalid IL or missing references) //IL_9c7e: Unknown result type (might be due to invalid IL or missing references) //IL_9c90: Unknown result type (might be due to invalid IL or missing references) //IL_9caf: Unknown result type (might be due to invalid IL or missing references) //IL_9cc1: Unknown result type (might be due to invalid IL or missing references) //IL_9ce0: Unknown result type (might be due to invalid IL or missing references) //IL_9cf2: Unknown result type (might be due to invalid IL or missing references) //IL_9d11: Unknown result type (might be due to invalid IL or missing references) //IL_9d23: Unknown result type (might be due to invalid IL or missing references) //IL_9d42: Unknown result type (might be due to invalid IL or missing references) //IL_9d54: Unknown result type (might be due to invalid IL or missing references) //IL_9d73: Unknown result type (might be due to invalid IL or missing references) //IL_9d85: Unknown result type (might be due to invalid IL or missing references) //IL_9da4: Unknown result type (might be due to invalid IL or missing references) //IL_9db6: Unknown result type (might be due to invalid IL or missing references) //IL_9de5: Unknown result type (might be due to invalid IL or missing references) //IL_9df7: Unknown result type (might be due to invalid IL or missing references) //IL_9e16: Unknown result type (might be due to invalid IL or missing references) //IL_9e28: Unknown result type (might be due to invalid IL or missing references) //IL_9e47: Unknown result type (might be due to invalid IL or missing references) //IL_9e59: Unknown result type (might be due to invalid IL or missing references) //IL_9e78: Unknown result type (might be due to invalid IL or missing references) //IL_9e8a: Unknown result type (might be due to invalid IL or missing references) //IL_9ea9: Unknown result type (might be due to invalid IL or missing references) //IL_9ebb: Unknown result type (might be due to invalid IL or missing references) //IL_9eda: Unknown result type (might be due to invalid IL or missing references) //IL_9eec: Unknown result type (might be due to invalid IL or missing references) //IL_9f0b: Unknown result type (might be due to invalid IL or missing references) //IL_9f1d: Unknown result type (might be due to invalid IL or missing references) //IL_9f3c: Unknown result type (might be due to invalid IL or missing references) //IL_9f4e: Unknown result type (might be due to invalid IL or missing references) //IL_9f6d: Unknown result type (might be due to invalid IL or missing references) //IL_9f7f: Unknown result type (might be due to invalid IL or missing references) //IL_9f9e: Unknown result type (might be due to invalid IL or missing references) //IL_9fb0: Unknown result type (might be due to invalid IL or missing references) //IL_9fcf: Unknown result type (might be due to invalid IL or missing references) //IL_9fe1: Unknown result type (might be due to invalid IL or missing references) //IL_a000: Unknown result type (might be due to invalid IL or missing references) //IL_a012: Unknown result type (might be due to invalid IL or missing references) //IL_a031: Unknown result type (might be due to invalid IL or missing references) //IL_a043: Unknown result type (might be due to invalid IL or missing references) //IL_a062: Unknown result type (might be due to invalid IL or missing references) //IL_a074: Unknown result type (might be due to invalid IL or missing references) //IL_a093: Unknown result type (might be due to invalid IL or missing references) //IL_a0a5: Unknown result type (might be due to invalid IL or missing references) //IL_a0c4: Unknown result type (might be due to invalid IL or missing references) //IL_a0d6: Unknown result type (might be due to invalid IL or missing references) //IL_a0f5: Unknown result type (might be due to invalid IL or missing references) //IL_a107: Unknown result type (might be due to invalid IL or missing references) //IL_a126: Unknown result type (might be due to invalid IL or missing references) //IL_a138: Unknown result type (might be due to invalid IL or missing references) //IL_a167: Unknown result type (might be due to invalid IL or missing references) //IL_a179: Unknown result type (might be due to invalid IL or missing references) //IL_a198: Unknown result type (might be due to invalid IL or missing references) //IL_a1aa: Unknown result type (might be due to invalid IL or missing references) //IL_a1c9: Unknown result type (might be due to invalid IL or missing references) //IL_a1db: Unknown result type (might be due to invalid IL or missing references) //IL_a2aa: Unknown result type (might be due to invalid IL or missing references) //IL_a2bc: Unknown result type (might be due to invalid IL or missing references) //IL_a2ce: Unknown result type (might be due to invalid IL or missing references) //IL_a2ed: Unknown result type (might be due to invalid IL or missing references) //IL_a2ff: Unknown result type (might be due to invalid IL or missing references) //IL_a311: Unknown result type (might be due to invalid IL or missing references) //IL_a330: Unknown result type (might be due to invalid IL or missing references) //IL_a342: Unknown result type (might be due to invalid IL or missing references) //IL_a354: Unknown result type (might be due to invalid IL or missing references) //IL_a3d0: Unknown result type (might be due to invalid IL or missing references) //IL_a3e2: Unknown result type (might be due to invalid IL or missing references) //IL_a401: Unknown result type (might be due to invalid IL or missing references) //IL_a413: Unknown result type (might be due to invalid IL or missing references) //IL_a442: Unknown result type (might be due to invalid IL or missing references) //IL_a454: Unknown result type (might be due to invalid IL or missing references) //IL_a473: Unknown result type (might be due to invalid IL or missing references) //IL_a485: Unknown result type (might be due to invalid IL or missing references) //IL_a497: Unknown result type (might be due to invalid IL or missing references) //IL_a4b6: Unknown result type (might be due to invalid IL or missing references) //IL_a4c8: Unknown result type (might be due to invalid IL or missing references) //IL_a4da: Unknown result type (might be due to invalid IL or missing references) //IL_a4f9: Unknown result type (might be due to invalid IL or missing references) //IL_a50b: Unknown result type (might be due to invalid IL or missing references) //IL_a52a: Unknown result type (might be due to invalid IL or missing references) //IL_a53c: Unknown result type (might be due to invalid IL or missing references) //IL_a55b: Unknown result type (might be due to invalid IL or missing references) //IL_a56d: Unknown result type (might be due to invalid IL or missing references) //IL_a58c: Unknown result type (might be due to invalid IL or missing references) //IL_a59e: Unknown result type (might be due to invalid IL or missing references) //IL_a5bd: Unknown result type (might be due to invalid IL or missing references) //IL_a5cf: Unknown result type (might be due to invalid IL or missing references) //IL_a1fe: Unknown result type (might be due to invalid IL or missing references) //IL_a20e: Unknown result type (might be due to invalid IL or missing references) //IL_a238: Unknown result type (might be due to invalid IL or missing references) //IL_a24a: Unknown result type (might be due to invalid IL or missing references) //IL_a269: Unknown result type (might be due to invalid IL or missing references) //IL_a27b: Unknown result type (might be due to invalid IL or missing references) //IL_a60c: Unknown result type (might be due to invalid IL or missing references) //IL_a61e: Unknown result type (might be due to invalid IL or missing references) //IL_a63d: Unknown result type (might be due to invalid IL or missing references) //IL_a64f: Unknown result type (might be due to invalid IL or missing references) //IL_a66e: Unknown result type (might be due to invalid IL or missing references) //IL_a680: Unknown result type (might be due to invalid IL or missing references) //IL_a69f: Unknown result type (might be due to invalid IL or missing references) //IL_a6b1: Unknown result type (might be due to invalid IL or missing references) //IL_a6d0: Unknown result type (might be due to invalid IL or missing references) //IL_a6e2: Unknown result type (might be due to invalid IL or missing references) //IL_a6f4: Unknown result type (might be due to invalid IL or missing references) //IL_a713: Unknown result type (might be due to invalid IL or missing references) //IL_a725: Unknown result type (might be due to invalid IL or missing references) //IL_a737: Unknown result type (might be due to invalid IL or missing references) //IL_a804: Unknown result type (might be due to invalid IL or missing references) //IL_a816: Unknown result type (might be due to invalid IL or missing references) //IL_a828: Unknown result type (might be due to invalid IL or missing references) //IL_a847: Unknown result type (might be due to invalid IL or missing references) //IL_a859: Unknown result type (might be due to invalid IL or missing references) //IL_a878: Unknown result type (might be due to invalid IL or missing references) //IL_a88a: Unknown result type (might be due to invalid IL or missing references) //IL_a8a9: Unknown result type (might be due to invalid IL or missing references) //IL_a8bb: Unknown result type (might be due to invalid IL or missing references) //IL_a8da: Unknown result type (might be due to invalid IL or missing references) //IL_a8ec: Unknown result type (might be due to invalid IL or missing references) //IL_a90b: Unknown result type (might be due to invalid IL or missing references) //IL_a91d: Unknown result type (might be due to invalid IL or missing references) //IL_a93c: Unknown result type (might be due to invalid IL or missing references) //IL_a94e: Unknown result type (might be due to invalid IL or missing references) //IL_a761: Unknown result type (might be due to invalid IL or missing references) //IL_a773: Unknown result type (might be due to invalid IL or missing references) //IL_a792: Unknown result type (might be due to invalid IL or missing references) //IL_a7a4: Unknown result type (might be due to invalid IL or missing references) //IL_a7c3: Unknown result type (might be due to invalid IL or missing references) //IL_a7d5: Unknown result type (might be due to invalid IL or missing references) //IL_a99c: Unknown result type (might be due to invalid IL or missing references) //IL_a9ae: Unknown result type (might be due to invalid IL or missing references) //IL_a9c0: Unknown result type (might be due to invalid IL or missing references) //IL_a9df: Unknown result type (might be due to invalid IL or missing references) //IL_a9f1: Unknown result type (might be due to invalid IL or missing references) //IL_aa10: Unknown result type (might be due to invalid IL or missing references) //IL_aa22: Unknown result type (might be due to invalid IL or missing references) //IL_aa41: Unknown result type (might be due to invalid IL or missing references) //IL_aa53: Unknown result type (might be due to invalid IL or missing references) //IL_aa72: Unknown result type (might be due to invalid IL or missing references) //IL_aa84: Unknown result type (might be due to invalid IL or missing references) //IL_aaa3: Unknown result type (might be due to invalid IL or missing references) //IL_aab5: Unknown result type (might be due to invalid IL or missing references) //IL_aad4: Unknown result type (might be due to invalid IL or missing references) //IL_aae6: Unknown result type (might be due to invalid IL or missing references) //IL_ab05: Unknown result type (might be due to invalid IL or missing references) //IL_ab17: Unknown result type (might be due to invalid IL or missing references) //IL_ab46: Unknown result type (might be due to invalid IL or missing references) //IL_ab58: Unknown result type (might be due to invalid IL or missing references) //IL_ab6a: Unknown result type (might be due to invalid IL or missing references) //IL_ab89: Unknown result type (might be due to invalid IL or missing references) //IL_ab9b: Unknown result type (might be due to invalid IL or missing references) //IL_abba: Unknown result type (might be due to invalid IL or missing references) //IL_abcc: Unknown result type (might be due to invalid IL or missing references) //IL_abde: Unknown result type (might be due to invalid IL or missing references) //IL_abfd: Unknown result type (might be due to invalid IL or missing references) //IL_ac0f: Unknown result type (might be due to invalid IL or missing references) //IL_ac2e: Unknown result type (might be due to invalid IL or missing references) //IL_ac40: Unknown result type (might be due to invalid IL or missing references) //IL_ad2b: Unknown result type (might be due to invalid IL or missing references) //IL_ad3d: Unknown result type (might be due to invalid IL or missing references) //IL_ad5c: Unknown result type (might be due to invalid IL or missing references) //IL_ad6e: Unknown result type (might be due to invalid IL or missing references) //IL_add8: Unknown result type (might be due to invalid IL or missing references) //IL_adea: Unknown result type (might be due to invalid IL or missing references) //IL_ae09: Unknown result type (might be due to invalid IL or missing references) //IL_ae1b: Unknown result type (might be due to invalid IL or missing references) //IL_ae3a: Unknown result type (might be due to invalid IL or missing references) //IL_ae4c: Unknown result type (might be due to invalid IL or missing references) //IL_ac63: Unknown result type (might be due to invalid IL or missing references) //IL_ac73: Unknown result type (might be due to invalid IL or missing references) //IL_ac9d: Unknown result type (might be due to invalid IL or missing references) //IL_acaf: Unknown result type (might be due to invalid IL or missing references) //IL_acce: Unknown result type (might be due to invalid IL or missing references) //IL_ace0: Unknown result type (might be due to invalid IL or missing references) //IL_ae94: Unknown result type (might be due to invalid IL or missing references) //IL_aea6: Unknown result type (might be due to invalid IL or missing references) //IL_aec5: Unknown result type (might be due to invalid IL or missing references) //IL_aed7: Unknown result type (might be due to invalid IL or missing references) //IL_aef6: Unknown result type (might be due to invalid IL or missing references) //IL_af08: Unknown result type (might be due to invalid IL or missing references) //IL_af27: Unknown result type (might be due to invalid IL or missing references) //IL_af39: Unknown result type (might be due to invalid IL or missing references) //IL_af58: Unknown result type (might be due to invalid IL or missing references) //IL_af6a: Unknown result type (might be due to invalid IL or missing references) //IL_af89: Unknown result type (might be due to invalid IL or missing references) //IL_af9b: Unknown result type (might be due to invalid IL or missing references) //IL_afc2: Unknown result type (might be due to invalid IL or missing references) //IL_afd8: Unknown result type (might be due to invalid IL or missing references) //IL_b03b: Unknown result type (might be due to invalid IL or missing references) //IL_b04d: Unknown result type (might be due to invalid IL or missing references) //IL_b06c: Unknown result type (might be due to invalid IL or missing references) //IL_b07e: Unknown result type (might be due to invalid IL or missing references) //IL_b09d: Unknown result type (might be due to invalid IL or missing references) //IL_b0af: Unknown result type (might be due to invalid IL or missing references) //IL_b0ce: Unknown result type (might be due to invalid IL or missing references) //IL_b0e0: Unknown result type (might be due to invalid IL or missing references) //IL_b0ff: Unknown result type (might be due to invalid IL or missing references) //IL_b111: Unknown result type (might be due to invalid IL or missing references) //IL_b130: Unknown result type (might be due to invalid IL or missing references) //IL_b142: Unknown result type (might be due to invalid IL or missing references) //IL_b161: Unknown result type (might be due to invalid IL or missing references) //IL_b173: Unknown result type (might be due to invalid IL or missing references) //IL_b192: Unknown result type (might be due to invalid IL or missing references) //IL_b1a4: Unknown result type (might be due to invalid IL or missing references) //IL_b23b: Unknown result type (might be due to invalid IL or missing references) //IL_b24d: Unknown result type (might be due to invalid IL or missing references) //IL_b26c: Unknown result type (might be due to invalid IL or missing references) //IL_b27e: Unknown result type (might be due to invalid IL or missing references) //IL_b29d: Unknown result type (might be due to invalid IL or missing references) //IL_b2af: Unknown result type (might be due to invalid IL or missing references) //IL_b2fa: Unknown result type (might be due to invalid IL or missing references) //IL_b30c: Unknown result type (might be due to invalid IL or missing references) //IL_b32b: Unknown result type (might be due to invalid IL or missing references) //IL_b33d: Unknown result type (might be due to invalid IL or missing references) //IL_b444: Unknown result type (might be due to invalid IL or missing references) //IL_b456: Unknown result type (might be due to invalid IL or missing references) //IL_b475: Unknown result type (might be due to invalid IL or missing references) //IL_b487: Unknown result type (might be due to invalid IL or missing references) //IL_b3ac: Unknown result type (might be due to invalid IL or missing references) //IL_b3be: Unknown result type (might be due to invalid IL or missing references) //IL_b3dd: Unknown result type (might be due to invalid IL or missing references) //IL_b3ef: Unknown result type (might be due to invalid IL or missing references) //IL_b40e: Unknown result type (might be due to invalid IL or missing references) //IL_b420: Unknown result type (might be due to invalid IL or missing references) //IL_b563: Unknown result type (might be due to invalid IL or missing references) //IL_b575: Unknown result type (might be due to invalid IL or missing references) //IL_b594: Unknown result type (might be due to invalid IL or missing references) //IL_b5a6: Unknown result type (might be due to invalid IL or missing references) //IL_b4bc: Unknown result type (might be due to invalid IL or missing references) //IL_b4ce: Unknown result type (might be due to invalid IL or missing references) //IL_b5cb: Unknown result type (might be due to invalid IL or missing references) //IL_b5db: Unknown result type (might be due to invalid IL or missing references) //IL_b5f8: Unknown result type (might be due to invalid IL or missing references) //IL_b60a: Unknown result type (might be due to invalid IL or missing references) //IL_b4f8: Unknown result type (might be due to invalid IL or missing references) //IL_b50a: Unknown result type (might be due to invalid IL or missing references) //IL_b65c: Unknown result type (might be due to invalid IL or missing references) //IL_b66e: Unknown result type (might be due to invalid IL or missing references) //IL_b68d: Unknown result type (might be due to invalid IL or missing references) //IL_b69f: Unknown result type (might be due to invalid IL or missing references) //IL_b6be: Unknown result type (might be due to invalid IL or missing references) //IL_b6d0: Unknown result type (might be due to invalid IL or missing references) //IL_b6ef: Unknown result type (might be due to invalid IL or missing references) //IL_b701: Unknown result type (might be due to invalid IL or missing references) //IL_b769: Unknown result type (might be due to invalid IL or missing references) //IL_b77b: Unknown result type (might be due to invalid IL or missing references) //IL_b79a: Unknown result type (might be due to invalid IL or missing references) //IL_b7ac: Unknown result type (might be due to invalid IL or missing references) //IL_b7cb: Unknown result type (might be due to invalid IL or missing references) //IL_b7dd: Unknown result type (might be due to invalid IL or missing references) //IL_b729: Unknown result type (might be due to invalid IL or missing references) //IL_b739: Unknown result type (might be due to invalid IL or missing references) //IL_bc01: Unknown result type (might be due to invalid IL or missing references) //IL_bc13: Unknown result type (might be due to invalid IL or missing references) //IL_bc25: Unknown result type (might be due to invalid IL or missing references) //IL_bc44: Unknown result type (might be due to invalid IL or missing references) //IL_bc56: Unknown result type (might be due to invalid IL or missing references) //IL_bc68: Unknown result type (might be due to invalid IL or missing references) //IL_bc87: Unknown result type (might be due to invalid IL or missing references) //IL_bc99: Unknown result type (might be due to invalid IL or missing references) //IL_bcab: Unknown result type (might be due to invalid IL or missing references) //IL_bcca: Unknown result type (might be due to invalid IL or missing references) //IL_bcdc: Unknown result type (might be due to invalid IL or missing references) //IL_bcee: Unknown result type (might be due to invalid IL or missing references) //IL_bd0d: Unknown result type (might be due to invalid IL or missing references) //IL_bd1f: Unknown result type (might be due to invalid IL or missing references) //IL_bd31: Unknown result type (might be due to invalid IL or missing references) //IL_bd50: Unknown result type (might be due to invalid IL or missing references) //IL_bd62: Unknown result type (might be due to invalid IL or missing references) //IL_bd81: Unknown result type (might be due to invalid IL or missing references) //IL_bd93: Unknown result type (might be due to invalid IL or missing references) //IL_bdb2: Unknown result type (might be due to invalid IL or missing references) //IL_bdc4: Unknown result type (might be due to invalid IL or missing references) //IL_bdd6: Unknown result type (might be due to invalid IL or missing references) //IL_b83e: Unknown result type (might be due to invalid IL or missing references) //IL_b850: Unknown result type (might be due to invalid IL or missing references) //IL_b862: Unknown result type (might be due to invalid IL or missing references) //IL_b881: Unknown result type (might be due to invalid IL or missing references) //IL_b893: Unknown result type (might be due to invalid IL or missing references) //IL_b8a5: Unknown result type (might be due to invalid IL or missing references) //IL_b945: Unknown result type (might be due to invalid IL or missing references) //IL_b957: Unknown result type (might be due to invalid IL or missing references) //IL_b976: Unknown result type (might be due to invalid IL or missing references) //IL_b988: Unknown result type (might be due to invalid IL or missing references) //IL_b8c8: Unknown result type (might be due to invalid IL or missing references) //IL_b8d8: Unknown result type (might be due to invalid IL or missing references) //IL_b8f5: Unknown result type (might be due to invalid IL or missing references) //IL_b905: Unknown result type (might be due to invalid IL or missing references) //IL_b9f5: Unknown result type (might be due to invalid IL or missing references) //IL_ba07: Unknown result type (might be due to invalid IL or missing references) //IL_ba26: Unknown result type (might be due to invalid IL or missing references) //IL_ba38: Unknown result type (might be due to invalid IL or missing references) //IL_c17b: Unknown result type (might be due to invalid IL or missing references) //IL_c18d: Unknown result type (might be due to invalid IL or missing references) //IL_c1ac: Unknown result type (might be due to invalid IL or missing references) //IL_c1be: Unknown result type (might be due to invalid IL or missing references) //IL_c1dd: Unknown result type (might be due to invalid IL or missing references) //IL_c1ef: Unknown result type (might be due to invalid IL or missing references) //IL_c20e: Unknown result type (might be due to invalid IL or missing references) //IL_c220: Unknown result type (might be due to invalid IL or missing references) //IL_c23f: Unknown result type (might be due to invalid IL or missing references) //IL_c251: Unknown result type (might be due to invalid IL or missing references) //IL_c270: Unknown result type (might be due to invalid IL or missing references) //IL_c282: Unknown result type (might be due to invalid IL or missing references) //IL_c2a1: Unknown result type (might be due to invalid IL or missing references) //IL_c2b3: Unknown result type (might be due to invalid IL or missing references) //IL_be59: Unknown result type (might be due to invalid IL or missing references) //IL_be6b: Unknown result type (might be due to invalid IL or missing references) //IL_be8a: Unknown result type (might be due to invalid IL or missing references) //IL_be9c: Unknown result type (might be due to invalid IL or missing references) //IL_bebb: Unknown result type (might be due to invalid IL or missing references) //IL_becd: Unknown result type (might be due to invalid IL or missing references) //IL_beec: Unknown result type (might be due to invalid IL or missing references) //IL_befe: Unknown result type (might be due to invalid IL or missing references) //IL_bb2d: Unknown result type (might be due to invalid IL or missing references) //IL_bb3f: Unknown result type (might be due to invalid IL or missing references) //IL_bb5e: Unknown result type (might be due to invalid IL or missing references) //IL_bb70: Unknown result type (might be due to invalid IL or missing references) //IL_bb8f: Unknown result type (might be due to invalid IL or missing references) //IL_bba1: Unknown result type (might be due to invalid IL or missing references) //IL_bbc0: Unknown result type (might be due to invalid IL or missing references) //IL_bbd2: Unknown result type (might be due to invalid IL or missing references) //IL_ba67: Unknown result type (might be due to invalid IL or missing references) //IL_ba79: Unknown result type (might be due to invalid IL or missing references) //IL_ba8b: Unknown result type (might be due to invalid IL or missing references) //IL_baaa: Unknown result type (might be due to invalid IL or missing references) //IL_babc: Unknown result type (might be due to invalid IL or missing references) //IL_badb: Unknown result type (might be due to invalid IL or missing references) //IL_baed: Unknown result type (might be due to invalid IL or missing references) //IL_c029: Unknown result type (might be due to invalid IL or missing references) //IL_c03b: Unknown result type (might be due to invalid IL or missing references) //IL_bf2d: Unknown result type (might be due to invalid IL or missing references) //IL_bf3f: Unknown result type (might be due to invalid IL or missing references) //IL_bf5e: Unknown result type (might be due to invalid IL or missing references) //IL_bf70: Unknown result type (might be due to invalid IL or missing references) //IL_c13d: Unknown result type (might be due to invalid IL or missing references) //IL_c14f: Unknown result type (might be due to invalid IL or missing references) //IL_c065: Unknown result type (might be due to invalid IL or missing references) //IL_c077: Unknown result type (might be due to invalid IL or missing references) //IL_c096: Unknown result type (might be due to invalid IL or missing references) //IL_c0a8: Unknown result type (might be due to invalid IL or missing references) //IL_c0ba: Unknown result type (might be due to invalid IL or missing references) //IL_c0d9: Unknown result type (might be due to invalid IL or missing references) //IL_c0eb: Unknown result type (might be due to invalid IL or missing references) //IL_c0fd: Unknown result type (might be due to invalid IL or missing references) //IL_c352: Unknown result type (might be due to invalid IL or missing references) //IL_c364: Unknown result type (might be due to invalid IL or missing references) //IL_c376: Unknown result type (might be due to invalid IL or missing references) //IL_bf93: Unknown result type (might be due to invalid IL or missing references) //IL_bfa3: Unknown result type (might be due to invalid IL or missing references) //IL_c43d: Unknown result type (might be due to invalid IL or missing references) //IL_c452: Unknown result type (might be due to invalid IL or missing references) //IL_c473: Unknown result type (might be due to invalid IL or missing references) //IL_c488: Unknown result type (might be due to invalid IL or missing references) //IL_c4d2: Unknown result type (might be due to invalid IL or missing references) //IL_c4e4: Unknown result type (might be due to invalid IL or missing references) //IL_c503: Unknown result type (might be due to invalid IL or missing references) //IL_c515: Unknown result type (might be due to invalid IL or missing references) //IL_c534: Unknown result type (might be due to invalid IL or missing references) //IL_c546: Unknown result type (might be due to invalid IL or missing references) //IL_c565: Unknown result type (might be due to invalid IL or missing references) //IL_c577: Unknown result type (might be due to invalid IL or missing references) //IL_c596: Unknown result type (might be due to invalid IL or missing references) //IL_c5a8: Unknown result type (might be due to invalid IL or missing references) //IL_c5c7: Unknown result type (might be due to invalid IL or missing references) //IL_c5d9: Unknown result type (might be due to invalid IL or missing references) //IL_c5f8: Unknown result type (might be due to invalid IL or missing references) //IL_c60a: Unknown result type (might be due to invalid IL or missing references) //IL_c629: Unknown result type (might be due to invalid IL or missing references) //IL_c63b: Unknown result type (might be due to invalid IL or missing references) //IL_c67a: Unknown result type (might be due to invalid IL or missing references) //IL_c68c: Unknown result type (might be due to invalid IL or missing references) //IL_c6ab: Unknown result type (might be due to invalid IL or missing references) //IL_c6bd: Unknown result type (might be due to invalid IL or missing references) //IL_c6dc: Unknown result type (might be due to invalid IL or missing references) //IL_c6ee: Unknown result type (might be due to invalid IL or missing references) //IL_c70d: Unknown result type (might be due to invalid IL or missing references) //IL_c71f: Unknown result type (might be due to invalid IL or missing references) //IL_c73e: Unknown result type (might be due to invalid IL or missing references) //IL_c750: Unknown result type (might be due to invalid IL or missing references) //IL_c7ba: Unknown result type (might be due to invalid IL or missing references) //IL_c7cc: Unknown result type (might be due to invalid IL or missing references) //IL_c7eb: Unknown result type (might be due to invalid IL or missing references) //IL_c7fd: Unknown result type (might be due to invalid IL or missing references) //IL_c828: Unknown result type (might be due to invalid IL or missing references) //IL_c83a: Unknown result type (might be due to invalid IL or missing references) //IL_c84c: Unknown result type (might be due to invalid IL or missing references) //IL_c86b: Unknown result type (might be due to invalid IL or missing references) //IL_c87d: Unknown result type (might be due to invalid IL or missing references) //IL_c88f: Unknown result type (might be due to invalid IL or missing references) //IL_c8ae: Unknown result type (might be due to invalid IL or missing references) //IL_c8c0: Unknown result type (might be due to invalid IL or missing references) //IL_c8d2: Unknown result type (might be due to invalid IL or missing references) //IL_c92b: Unknown result type (might be due to invalid IL or missing references) //IL_c93d: Unknown result type (might be due to invalid IL or missing references) //IL_c95c: Unknown result type (might be due to invalid IL or missing references) //IL_c96e: Unknown result type (might be due to invalid IL or missing references) //IL_c98d: Unknown result type (might be due to invalid IL or missing references) //IL_c99f: Unknown result type (might be due to invalid IL or missing references) //IL_c9b1: Unknown result type (might be due to invalid IL or missing references) //IL_c9d0: Unknown result type (might be due to invalid IL or missing references) //IL_c9e2: Unknown result type (might be due to invalid IL or missing references) //IL_ca01: Unknown result type (might be due to invalid IL or missing references) //IL_ca13: Unknown result type (might be due to invalid IL or missing references) //IL_caa8: Unknown result type (might be due to invalid IL or missing references) //IL_caba: Unknown result type (might be due to invalid IL or missing references) //IL_cad9: Unknown result type (might be due to invalid IL or missing references) //IL_caeb: Unknown result type (might be due to invalid IL or missing references) //IL_cb0a: Unknown result type (might be due to invalid IL or missing references) //IL_cb1c: Unknown result type (might be due to invalid IL or missing references) //IL_cb3b: Unknown result type (might be due to invalid IL or missing references) //IL_cb4d: Unknown result type (might be due to invalid IL or missing references) //IL_cb6c: Unknown result type (might be due to invalid IL or missing references) //IL_cb7e: Unknown result type (might be due to invalid IL or missing references) //IL_ca3a: Unknown result type (might be due to invalid IL or missing references) //IL_ca4c: Unknown result type (might be due to invalid IL or missing references) //IL_ca6b: Unknown result type (might be due to invalid IL or missing references) //IL_ca7d: Unknown result type (might be due to invalid IL or missing references) //IL_ccb5: Unknown result type (might be due to invalid IL or missing references) //IL_ccc7: Unknown result type (might be due to invalid IL or missing references) //IL_cce6: Unknown result type (might be due to invalid IL or missing references) //IL_ccf8: Unknown result type (might be due to invalid IL or missing references) //IL_cd17: Unknown result type (might be due to invalid IL or missing references) //IL_cd29: Unknown result type (might be due to invalid IL or missing references) //IL_cd48: Unknown result type (might be due to invalid IL or missing references) //IL_cd5a: Unknown result type (might be due to invalid IL or missing references) //IL_cd86: Unknown result type (might be due to invalid IL or missing references) //IL_cd98: Unknown result type (might be due to invalid IL or missing references) //IL_cdb7: Unknown result type (might be due to invalid IL or missing references) //IL_cdc9: Unknown result type (might be due to invalid IL or missing references) //IL_cde8: Unknown result type (might be due to invalid IL or missing references) //IL_cdfa: Unknown result type (might be due to invalid IL or missing references) //IL_ce19: Unknown result type (might be due to invalid IL or missing references) //IL_ce2b: Unknown result type (might be due to invalid IL or missing references) //IL_ce4a: Unknown result type (might be due to invalid IL or missing references) //IL_ce5c: Unknown result type (might be due to invalid IL or missing references) //IL_cbda: Unknown result type (might be due to invalid IL or missing references) //IL_cbed: Unknown result type (might be due to invalid IL or missing references) //IL_cc0d: Unknown result type (might be due to invalid IL or missing references) //IL_cc26: Unknown result type (might be due to invalid IL or missing references) //IL_ce88: Unknown result type (might be due to invalid IL or missing references) //IL_ce9a: Unknown result type (might be due to invalid IL or missing references) //IL_ceac: Unknown result type (might be due to invalid IL or missing references) //IL_cf09: Unknown result type (might be due to invalid IL or missing references) //IL_cf1b: Unknown result type (might be due to invalid IL or missing references) //IL_cc5b: Unknown result type (might be due to invalid IL or missing references) //IL_cc6d: Unknown result type (might be due to invalid IL or missing references) //IL_cf47: Unknown result type (might be due to invalid IL or missing references) //IL_cf59: Unknown result type (might be due to invalid IL or missing references) //IL_cf78: Unknown result type (might be due to invalid IL or missing references) //IL_cf8a: Unknown result type (might be due to invalid IL or missing references) //IL_cf9c: Unknown result type (might be due to invalid IL or missing references) //IL_cfbb: Unknown result type (might be due to invalid IL or missing references) //IL_cfcd: Unknown result type (might be due to invalid IL or missing references) //IL_cfec: Unknown result type (might be due to invalid IL or missing references) //IL_cffe: Unknown result type (might be due to invalid IL or missing references) //IL_d01d: Unknown result type (might be due to invalid IL or missing references) //IL_d02f: Unknown result type (might be due to invalid IL or missing references) //IL_d05b: Unknown result type (might be due to invalid IL or missing references) //IL_d06d: Unknown result type (might be due to invalid IL or missing references) //IL_d07f: Unknown result type (might be due to invalid IL or missing references) //IL_d09e: Unknown result type (might be due to invalid IL or missing references) //IL_d0b0: Unknown result type (might be due to invalid IL or missing references) //IL_d0c2: Unknown result type (might be due to invalid IL or missing references) //IL_d0e1: Unknown result type (might be due to invalid IL or missing references) //IL_d0f3: Unknown result type (might be due to invalid IL or missing references) //IL_d112: Unknown result type (might be due to invalid IL or missing references) //IL_d124: Unknown result type (might be due to invalid IL or missing references) //IL_d143: Unknown result type (might be due to invalid IL or missing references) //IL_d155: Unknown result type (might be due to invalid IL or missing references) //IL_d1a0: Unknown result type (might be due to invalid IL or missing references) //IL_d1b2: Unknown result type (might be due to invalid IL or missing references) //IL_d1c4: Unknown result type (might be due to invalid IL or missing references) //IL_d1e3: Unknown result type (might be due to invalid IL or missing references) //IL_d1f5: Unknown result type (might be due to invalid IL or missing references) //IL_d221: Unknown result type (might be due to invalid IL or missing references) //IL_d233: Unknown result type (might be due to invalid IL or missing references) //IL_d252: Unknown result type (might be due to invalid IL or missing references) //IL_d264: Unknown result type (might be due to invalid IL or missing references) //IL_d283: Unknown result type (might be due to invalid IL or missing references) //IL_d295: Unknown result type (might be due to invalid IL or missing references) //IL_d2b4: Unknown result type (might be due to invalid IL or missing references) //IL_d2c6: Unknown result type (might be due to invalid IL or missing references) //IL_d2e5: Unknown result type (might be due to invalid IL or missing references) //IL_d2f7: Unknown result type (might be due to invalid IL or missing references) //IL_d3e0: Unknown result type (might be due to invalid IL or missing references) //IL_d3f2: Unknown result type (might be due to invalid IL or missing references) //IL_d411: Unknown result type (might be due to invalid IL or missing references) //IL_d423: Unknown result type (might be due to invalid IL or missing references) //IL_d442: Unknown result type (might be due to invalid IL or missing references) //IL_d454: Unknown result type (might be due to invalid IL or missing references) //IL_d473: Unknown result type (might be due to invalid IL or missing references) //IL_d485: Unknown result type (might be due to invalid IL or missing references) //IL_d4a4: Unknown result type (might be due to invalid IL or missing references) //IL_d4b6: Unknown result type (might be due to invalid IL or missing references) //IL_d387: Unknown result type (might be due to invalid IL or missing references) //IL_d3a9: Unknown result type (might be due to invalid IL or missing references) //IL_d7b6: Unknown result type (might be due to invalid IL or missing references) //IL_d7c8: Unknown result type (might be due to invalid IL or missing references) //IL_d7e7: Unknown result type (might be due to invalid IL or missing references) //IL_d7f9: Unknown result type (might be due to invalid IL or missing references) //IL_d926: Unknown result type (might be due to invalid IL or missing references) //IL_d938: Unknown result type (might be due to invalid IL or missing references) //IL_d957: Unknown result type (might be due to invalid IL or missing references) //IL_d969: Unknown result type (might be due to invalid IL or missing references) //IL_d988: Unknown result type (might be due to invalid IL or missing references) //IL_d99a: Unknown result type (might be due to invalid IL or missing references) //IL_d9b9: Unknown result type (might be due to invalid IL or missing references) //IL_d9cb: Unknown result type (might be due to invalid IL or missing references) //IL_d9f7: Unknown result type (might be due to invalid IL or missing references) //IL_da09: Unknown result type (might be due to invalid IL or missing references) //IL_da1b: Unknown result type (might be due to invalid IL or missing references) //IL_da3a: Unknown result type (might be due to invalid IL or missing references) //IL_da4c: Unknown result type (might be due to invalid IL or missing references) //IL_da5e: Unknown result type (might be due to invalid IL or missing references) //IL_da7d: Unknown result type (might be due to invalid IL or missing references) //IL_da8f: Unknown result type (might be due to invalid IL or missing references) //IL_daa1: Unknown result type (might be due to invalid IL or missing references) //IL_dac0: Unknown result type (might be due to invalid IL or missing references) //IL_dad2: Unknown result type (might be due to invalid IL or missing references) //IL_dae4: Unknown result type (might be due to invalid IL or missing references) //IL_db03: Unknown result type (might be due to invalid IL or missing references) //IL_db15: Unknown result type (might be due to invalid IL or missing references) //IL_db27: Unknown result type (might be due to invalid IL or missing references) //IL_db46: Unknown result type (might be due to invalid IL or missing references) //IL_db58: Unknown result type (might be due to invalid IL or missing references) //IL_db6a: Unknown result type (might be due to invalid IL or missing references) //IL_d866: Unknown result type (might be due to invalid IL or missing references) //IL_d88e: Unknown result type (might be due to invalid IL or missing references) //IL_d532: Unknown result type (might be due to invalid IL or missing references) //IL_d544: Unknown result type (might be due to invalid IL or missing references) //IL_d563: Unknown result type (might be due to invalid IL or missing references) //IL_d575: Unknown result type (might be due to invalid IL or missing references) //IL_db96: Unknown result type (might be due to invalid IL or missing references) //IL_dba8: Unknown result type (might be due to invalid IL or missing references) //IL_dbc7: Unknown result type (might be due to invalid IL or missing references) //IL_dbd9: Unknown result type (might be due to invalid IL or missing references) //IL_dbf8: Unknown result type (might be due to invalid IL or missing references) //IL_dc0a: Unknown result type (might be due to invalid IL or missing references) //IL_dc29: Unknown result type (might be due to invalid IL or missing references) //IL_dc3b: Unknown result type (might be due to invalid IL or missing references) //IL_dc5a: Unknown result type (might be due to invalid IL or missing references) //IL_dc6c: Unknown result type (might be due to invalid IL or missing references) //IL_d599: Unknown result type (might be due to invalid IL or missing references) //IL_d5ab: Unknown result type (might be due to invalid IL or missing references) //IL_d5ca: Unknown result type (might be due to invalid IL or missing references) //IL_d5dc: Unknown result type (might be due to invalid IL or missing references) //IL_dd0d: Unknown result type (might be due to invalid IL or missing references) //IL_dd1f: Unknown result type (might be due to invalid IL or missing references) //IL_dd3e: Unknown result type (might be due to invalid IL or missing references) //IL_dd50: Unknown result type (might be due to invalid IL or missing references) //IL_dd6f: Unknown result type (might be due to invalid IL or missing references) //IL_dd81: Unknown result type (might be due to invalid IL or missing references) //IL_d600: Unknown result type (might be due to invalid IL or missing references) //IL_d612: Unknown result type (might be due to invalid IL or missing references) //IL_d631: Unknown result type (might be due to invalid IL or missing references) //IL_d643: Unknown result type (might be due to invalid IL or missing references) //IL_d66d: Unknown result type (might be due to invalid IL or missing references) //IL_d67f: Unknown result type (might be due to invalid IL or missing references) //IL_d69e: Unknown result type (might be due to invalid IL or missing references) //IL_d6b0: Unknown result type (might be due to invalid IL or missing references) //IL_d6cf: Unknown result type (might be due to invalid IL or missing references) //IL_d6e1: Unknown result type (might be due to invalid IL or missing references) //IL_dcbc: Unknown result type (might be due to invalid IL or missing references) //IL_dcde: Unknown result type (might be due to invalid IL or missing references) //IL_d766: Unknown result type (might be due to invalid IL or missing references) //IL_d778: Unknown result type (might be due to invalid IL or missing references) //IL_d78a: Unknown result type (might be due to invalid IL or missing references) vh.Clear(); Rect rect = ((Graphic)this).rectTransform.rect; float width = ((Rect)(ref rect)).width; rect = ((Graphic)this).rectTransform.rect; float scale = Mathf.Min(width, ((Rect)(ref rect)).height) / 64f; Cue cue = CreatureSoundCatalog.Basis(this.cue); CreatureShape creatureShape = CreatureSoundCatalog.Shape(this.cue); bool flag = this.cue == Cue.DetailBaboonBirdAIFootsteps; if (flag) { creatureShape = CreatureShape.None; } float glyphScale = 1f; float offset = 0f; float fringe = 1f / Mathf.Max(0.01f, (((Object)(object)((Graphic)this).canvas != (Object)null) ? ((Graphic)this).canvas.scaleFactor : 1f) * ((Transform)((Graphic)this).rectTransform).localScale.x); Color clear = ((Graphic)this).color; clear.a = 0f; if (directional) { for (int i = 0; i < 24; i++) { Line(Arc(65f - angle + (float)i * 50f / 24f), Arc(65f - angle + (float)(i + 1) * 50f / 24f), (CueText.Priority(cue) == 3) ? 4 : 3); } } if (compact) { return; } SoundFamily soundFamily = CueVisual.Family(cue); if (creatureShape != CreatureShape.None) { glyphScale = 0.44f; offset = -18f; switch (creatureShape) { case CreatureShape.MouthDogAI: { Curve(P(-16f, 8f), P(-8f, 20f), P(13f, 5f)); Line(P(13f, 5f), P(-11f, 0f)); Line(P(-11f, 0f), P(12f, -9f)); Line(P(12f, -9f), P(-9f, -15f)); for (int m = -7; m <= 7; m += 7) { Line(P(m, 2f), P(m, -3f)); } break; } case CreatureShape.SandWormAI: Oval(0f, 10f, 12f, 7f); Curve(P(-12f, 10f), P(-17f, -11f), P(8f, -17f)); Curve(P(12f, 10f), P(9f, -4f), P(8f, -17f)); Line(P(-6f, 12f), P(0f, 5f)); Line(P(0f, 5f), P(6f, 12f)); break; case CreatureShape.JesterAI: Box(-13f, -17f, 26f, 21f); Line(P(-13f, 4f), P(-7f, 17f)); Line(P(-7f, 17f), P(0f, 7f)); Line(P(0f, 7f), P(9f, 17f)); Line(P(9f, 17f), P(13f, 4f)); Line(P(13f, -5f), P(19f, -5f)); Line(P(19f, -5f), P(19f, 1f)); break; case CreatureShape.NutcrackerEnemyAI: Box(-10f, 5f, 20f, 13f); Line(P(-14f, 4f), P(14f, 4f)); Box(-9f, -14f, 18f, 17f); Oval(0f, -3f, 3f, 3f); Line(P(-7f, -10f), P(7f, -10f)); break; case CreatureShape.CaveDwellerAI: Oval(0f, 3f, 14f, 16f); Oval(-6f, 5f, 3f, 4f); Oval(6f, 5f, 3f, 4f); Curve(P(-6f, -7f), P(0f, -12f), P(6f, -7f)); Line(P(-12f, -9f), P(-18f, -16f)); Line(P(12f, -9f), P(18f, -16f)); break; case CreatureShape.DressGirlAI: Oval(0f, 10f, 6f, 8f); Line(P(-6f, 12f), P(-12f, -1f)); Line(P(6f, 12f), P(12f, -1f)); Line(P(0f, 2f), P(-12f, -16f)); Line(P(-12f, -16f), P(12f, -16f)); Line(P(12f, -16f), P(0f, 2f)); break; case CreatureShape.ClaySurgeonAI: Oval(0f, 11f, 5f, 7f); Line(P(0f, 4f), P(0f, -12f)); Line(P(-12f, 0f), P(12f, 0f)); Line(P(0f, -12f), P(-9f, -20f)); Line(P(0f, -12f), P(9f, -20f)); Line(P(9f, 0f), P(17f, 8f)); Line(P(9f, 8f), P(17f, 0f)); break; case CreatureShape.SpringManAI: Oval(0f, 12f, 7f, 7f); Line(P(-6f, 5f), P(6f, -1f)); Line(P(6f, -1f), P(-6f, -6f)); Line(P(-6f, -6f), P(6f, -11f)); Line(P(-12f, -12f), P(12f, -12f)); Line(P(-8f, -12f), P(-8f, -19f)); Line(P(8f, -12f), P(8f, -19f)); break; case CreatureShape.FlowermanAI: { Oval(0f, 1f, 7f, 12f); Line(P(-4f, 4f), P(-1f, 4f)); Line(P(1f, 4f), P(4f, 4f)); for (int l = -12; l <= 12; l += 8) { Line(P(-6f, l), P(-15f, l + 5)); Line(P(6f, l), P(15f, l + 5)); } break; } case CreatureShape.CrawlerAI: Oval(0f, 8f, 8f, 7f); Line(P(-8f, 2f), P(-16f, -11f)); Line(P(-16f, -11f), P(-7f, -17f)); Line(P(8f, 2f), P(16f, -11f)); Line(P(16f, -11f), P(7f, -17f)); Line(P(0f, 1f), P(0f, -12f)); break; case CreatureShape.CentipedeAI: { Oval(0f, 10f, 7f, 7f); Oval(0f, -3f, 6f, 6f); Oval(0f, -14f, 4f, 4f); for (int k = -12; k <= 10; k += 8) { Line(P(-6f, k), P(-13f, k - 4)); Line(P(6f, k), P(13f, k - 4)); } break; } case CreatureShape.SandSpiderAI: { Oval(0f, -3f, 7f, 10f); Oval(0f, 10f, 5f, 5f); for (int j = -12; j <= 12; j += 8) { Line(P(-5f, j / 2), P(-15f, j)); Line(P(-15f, j), P(-19f, j - 5)); Line(P(5f, j / 2), P(15f, j)); Line(P(15f, j), P(19f, j - 5)); } break; } case CreatureShape.HoarderBugAI: Oval(0f, -3f, 9f, 12f); Oval(0f, 11f, 5f, 5f); Line(P(-3f, 15f), P(-9f, 21f)); Line(P(3f, 15f), P(9f, 21f)); Line(P(-8f, 2f), P(-15f, -4f)); Line(P(8f, 2f), P(15f, -4f)); Line(P(-5f, -14f), P(-9f, -19f)); Line(P(5f, -14f), P(9f, -19f)); break; case CreatureShape.BlobAI: Curve(P(-17f, -12f), P(-12f, 21f), P(0f, 10f)); Curve(P(0f, 10f), P(15f, 22f), P(18f, -12f)); Curve(P(18f, -12f), P(0f, -19f), P(-17f, -12f)); Oval(-5f, 0f, 2f, 3f); Oval(5f, 0f, 2f, 3f); break; case CreatureShape.PufferAI: Oval(-3f, 0f, 11f, 12f); Curve(P(8f, 0f), P(21f, 15f), P(18f, -10f)); Line(P(-8f, 10f), P(-11f, 18f)); Line(P(-5f, -10f), P(-13f, -16f)); Line(P(4f, -9f), P(9f, -16f)); break; case CreatureShape.ButlerEnemyAI: Oval(0f, 11f, 6f, 7f); Box(-11f, -18f, 22f, 21f); Line(P(0f, -1f), P(-6f, 2f)); Line(P(-6f, 2f), P(-6f, -4f)); Line(P(-6f, -4f), P(6f, 2f)); Line(P(6f, 2f), P(6f, -4f)); Line(P(6f, -4f), P(0f, -1f)); Line(P(0f, -7f), P(0f, -14f)); break; case CreatureShape.ButlerBeesEnemyAI: Oval(0f, -3f, 5f, 11f); Oval(-9f, 6f, 6f, 4f); Oval(9f, 6f, 6f, 4f); Line(P(-4f, -12f), P(0f, -20f)); Line(P(0f, -20f), P(4f, -12f)); Line(P(-4f, -2f), P(4f, -2f)); break; case CreatureShape.StingrayAI: Line(P(0f, 14f), P(-18f, -2f)); Line(P(-18f, -2f), P(0f, -9f)); Line(P(0f, -9f), P(18f, -2f)); Line(P(18f, -2f), P(0f, 14f)); Curve(P(0f, -9f), P(16f, -21f), P(-2f, -19f)); break; case CreatureShape.ForestGiantAI: Oval(0f, 9f, 8f, 9f); Line(P(-7f, 1f), P(-13f, -17f)); Line(P(7f, 1f), P(13f, -17f)); Line(P(-13f, -17f), P(-3f, -13f)); Line(P(-3f, -13f), P(0f, -2f)); Line(P(0f, -2f), P(3f, -13f)); Line(P(3f, -13f), P(13f, -17f)); Line(P(-10f, -4f), P(-18f, -8f)); Line(P(10f, -4f), P(18f, -8f)); break; case CreatureShape.BaboonBirdAI: Oval(-3f, 5f, 10f, 11f); Line(P(5f, 11f), P(18f, 4f)); Line(P(18f, 4f), P(5f, 0f)); Line(P(-9f, 14f), P(-5f, 21f)); Line(P(-5f, 21f), P(0f, 15f)); Curve(P(-12f, -3f), P(0f, -23f), P(10f, -7f)); break; case CreatureShape.RedLocustBees: Oval(0f, -2f, 7f, 12f); Oval(-11f, 7f, 6f, 5f); Oval(11f, 7f, 6f, 5f); Line(P(-6f, 1f), P(6f, 1f)); Line(P(-6f, -5f), P(6f, -5f)); Line(P(-3f, 10f), P(-8f, 17f)); Line(P(3f, 10f), P(8f, 17f)); break; case CreatureShape.RadMechAI: Box(-8f, 9f, 16f, 10f); Box(-13f, -6f, 26f, 13f); Line(P(-13f, 2f), P(-19f, -8f)); Line(P(13f, 2f), P(19f, -8f)); Line(P(-7f, -6f), P(-10f, -19f), 4f); Line(P(7f, -6f), P(10f, -19f), 4f); Line(P(-5f, 14f), P(5f, 14f)); break; case CreatureShape.PumaAI: Oval(0f, 0f, 12f, 13f); Line(P(-11f, 5f), P(-14f, 19f)); Line(P(-14f, 19f), P(-4f, 12f)); Line(P(11f, 5f), P(14f, 19f)); Line(P(14f, 19f), P(4f, 12f)); Line(P(-6f, 2f), P(-2f, 0f)); Line(P(2f, 0f), P(6f, 2f)); Line(P(-3f, -6f), P(3f, -6f)); break; case CreatureShape.GiantKiwiAI: Oval(-3f, -2f, 12f, 13f); Oval(6f, 11f, 6f, 6f); Line(P(11f, 12f), P(21f, 6f)); Line(P(21f, 6f), P(10f, 8f)); Line(P(-8f, -13f), P(-10f, -20f)); Line(P(3f, -14f), P(6f, -20f)); break; case CreatureShape.FlowerSnakeEnemy: Oval(0f, 8f, 4f, 4f); Oval(0f, 16f, 4f, 5f); Oval(-8f, 8f, 5f, 4f); Oval(8f, 8f, 5f, 4f); Curve(P(0f, 3f), P(-16f, -17f), P(8f, -17f)); Curve(P(8f, -17f), P(16f, -16f), P(13f, -10f)); break; case CreatureShape.DoublewingAI: Line(P(0f, -12f), P(0f, 12f)); Line(P(0f, 6f), P(-17f, 16f)); Line(P(-17f, 16f), P(-12f, 0f)); Line(P(0f, 6f), P(17f, 16f)); Line(P(17f, 16f), P(12f, 0f)); Line(P(0f, -4f), P(-17f, -1f)); Line(P(-17f, -1f), P(-10f, -14f)); Line(P(0f, -4f), P(17f, -1f)); Line(P(17f, -1f), P(10f, -14f)); break; case CreatureShape.DocileLocustBeesAI: Oval(0f, 0f, 4f, 13f); Line(P(-3f, 6f), P(-16f, 12f)); Line(P(3f, 6f), P(16f, 12f)); Line(P(-3f, -2f), P(-13f, -8f)); Line(P(-13f, -8f), P(-7f, -16f)); Line(P(3f, -2f), P(13f, -8f)); Line(P(13f, -8f), P(7f, -16f)); break; case CreatureShape.DepositItemsDesk: Box(-16f, -16f, 32f, 12f); Curve(P(-10f, -4f), P(-20f, 21f), P(-3f, 14f)); Curve(P(-3f, 14f), P(7f, 4f), P(1f, -4f)); Curve(P(10f, -4f), P(22f, 15f), P(7f, 20f)); break; case CreatureShape.SnowmanSimpleAI: Oval(0f, -7f, 12f, 12f); Oval(0f, 11f, 7f, 7f); Line(P(-11f, 16f), P(11f, 16f)); Line(P(12f, -5f), P(20f, 4f)); Line(P(-12f, -5f), P(-20f, 4f)); Line(P(0f, 11f), P(9f, 8f)); break; } glyphScale = 0.68f; offset = 9f; } if (cue == Cue.SpringRetract) { Line(P(-15f, 10f), P(7f, 10f)); Line(P(-15f, -14f), P(7f, -14f)); for (int n = -11; n < 8; n += 5) { Curve(P(-11f, n), P(11f, (float)n + 2.5f), P(-11f, n + 5), 2.2f); } Line(P(16f, 14f), P(16f, -9f)); Line(P(11f, -3f), P(16f, -9f)); Line(P(16f, -9f), P(21f, -3f)); } else if (cue == Cue.NutcrackerKick) { Line(P(-13f, 15f), P(-6f, -4f), 5f); Line(P(-6f, -4f), P(10f, -4f), 5f); Line(P(10f, -4f), P(14f, -11f), 4f); Line(P(14f, -11f), P(-7f, -11f), 4f); Line(P(16f, 2f), P(22f, 6f)); Line(P(17f, -3f), P(23f, -3f)); Line(P(16f, -15f), P(21f, -19f)); } else if (cue == Cue.NutcrackerFall) { Line(P(-18f, -16f), P(18f, -16f)); Box(-12f, -11f, 19f, 10f); Oval(12f, -5f, 5f, 5f); Line(P(-15f, 9f), P(-6f, 1f)); Line(P(0f, 14f), P(0f, 4f)); Line(P(15f, 12f), P(10f, 4f)); } else if (cue == Cue.SlimeHit) { Curve(P(-17f, -12f), P(-13f, 14f), P(0f, 7f)); Curve(P(0f, 7f), P(9f, 18f), P(17f, -12f)); Curve(P(17f, -12f), P(0f, -18f), P(-17f, -12f)); Line(P(1f, 3f), P(7f, -3f)); Line(P(7f, 3f), P(1f, -3f)); Line(P(-17f, 13f), P(-12f, 8f)); Line(P(4f, 20f), P(4f, 14f)); Line(P(15f, 12f), P(21f, 17f)); } else if ((cue == Cue.NeckSnap || cue == Cue.OtherNeckSnap) ? true : false) { Oval(-6f, 10f, 7f, 8f); Line(P(-10f, 9f), P(-7f, 8f)); Line(P(-3f, 4f), P(3f, 0f)); Line(P(4f, -7f), P(7f, -17f), 4f); Curve(P(-15f, -19f), P(4f, -9f), P(18f, -19f)); Line(P(-2f, -5f), P(7f, -1f)); Line(P(7f, -1f), P(2f, -8f)); Line(P(2f, -8f), P(11f, -4f)); Line(P(11f, 8f), P(17f, 12f)); Line(P(13f, 3f), P(21f, 3f)); } else if (cue == Cue.CruiserHood) { Box(-15f, -8f, 30f, 10f); Oval(-9f, -12f, 3f, 3f); Oval(9f, -12f, 3f, 3f); Line(P(-14f, 4f), P(-3f, 19f)); Line(P(-3f, 19f), P(13f, 11f)); Line(P(0f, 6f), P(0f, 15f)); Line(P(-4f, 11f), P(0f, 15f)); } else if (cue == Cue.CruiserDoor) { Box(-15f, -15f, 17f, 28f); Line(P(2f, 13f), P(16f, 7f)); Line(P(16f, 7f), P(16f, -18f)); Line(P(16f, -18f), P(2f, -15f)); Line(P(-11f, 8f), P(-3f, 8f)); Line(P(10f, -3f), P(13f, -3f)); } else if (cue == Cue.CruiserRearDoor) { Box(-16f, -15f, 32f, 30f); Line(P(-15f, 7f), P(15f, 7f)); Line(P(-15f, 1f), P(15f, 1f)); Line(P(-15f, -5f), P(15f, -5f)); Line(P(-5f, 18f), P(0f, 23f)); Line(P(0f, 23f), P(5f, 18f)); Line(P(0f, 13f), P(0f, 23f)); } else if ((uint)(cue - 248) <= 1u) { Box(-12f, -9f, 24f, 18f); Line(P(-6f, 13f), P(6f, 13f)); Line(P(-17f, -4f), P(-17f, 4f)); if (cue == Cue.CruiserIgnition) { Curve(P(-13f, -16f), P(15f, -23f), P(17f, -7f)); Line(P(17f, -7f), P(10f, -10f)); Line(P(17f, -7f), P(20f, -14f)); } else { Line(P(-6f, 0f), P(-1f, -5f)); Line(P(-1f, -5f), P(7f, 5f)); Line(P(16f, 8f), P(21f, 14f)); Line(P(-16f, 8f), P(-21f, 14f)); } } else if (cue == Cue.CruiserKey) { Oval(-7f, 8f, 7f, 7f); Line(P(-2f, 3f), P(13f, -12f), 4f); Line(P(7f, -6f), P(12f, -1f)); Line(P(12f, -11f), P(17f, -6f)); } else if (flag) { for (int num = 0; num < 2; num++) { float num2 = ((num == 0) ? (-9) : 9); float num3 = ((num == 0) ? (-8) : 4); Line(P(num2, num3 - 7f), P(num2, num3 + 9f), 3.5f); Line(P(num2, num3), P(num2 - 7f, num3 + 6f), 3.5f); Line(P(num2, num3), P(num2 + 7f, num3 + 6f), 3.5f); Oval(num2, num3, 2f, 2f, 40, filled: true); } } else if (cue == Cue.WolfFootsteps) { for (int num4 = 0; num4 < 2; num4++) { float num5 = ((num4 == 0) ? (-10) : 10); float num6 = ((num4 == 0) ? (-13) : 0); Oval(num5, num6, 4f, 2.8f, 40, filled: true); Oval(num5 - 7.5f, num6 + 6f, 1f, 1.7f, 40, filled: true); Oval(num5 - 2.6f, num6 + 10f, 1f, 1.8f, 40, filled: true); Oval(num5 + 2.6f, num6 + 10f, 1f, 1.8f, 40, filled: true); Oval(num5 + 7.5f, num6 + 6f, 1f, 1.7f, 40, filled: true); } } else if ((uint)(cue - 234) <= 1u) { Oval(-4f, -3f, 8f, 8f); Oval(-6f, 0f, 2f, 2f); if (cue == Cue.MeteorApproach) { Line(P(-6f, 9f), P(7f, 20f)); Line(P(2f, 8f), P(17f, 20f)); Line(P(7f, 1f), P(20f, 13f)); } else { Line(P(-19f, -15f), P(19f, -15f)); Line(P(-14f, -7f), P(-20f, -1f)); Line(P(7f, -6f), P(17f, 1f)); Line(P(7f, 5f), P(12f, 14f)); } } else if (cue == Cue.PlantClear) { Curve(P(-9f, -7f), P(-19f, 10f), P(2f, 16f)); Curve(P(2f, 16f), P(8f, -2f), P(-9f, -7f)); Line(P(-10f, -16f), P(-6f, -7f)); Line(P(-3f, -2f), P(3f, 9f)); Line(P(7f, -8f), P(18f, 3f)); Line(P(7f, 3f), P(18f, -8f)); } else if (cue == Cue.BloomChestOpen) { Curve(P(-3f, 16f), P(-23f, 1f), P(-5f, -17f)); Curve(P(3f, 16f), P(23f, 1f), P(5f, -17f)); for (int num7 = -9; num7 <= 9; num7 += 6) { Line(P(-5f, num7), P(-12f, num7 + 3)); Line(P(5f, num7), P(12f, num7 + 3)); } Line(P(0f, 13f), P(3f, 5f)); Line(P(3f, 5f), P(-3f, -3f)); Line(P(-3f, -3f), P(0f, -13f)); } else if ((uint)(cue - 239) <= 1u) { Curve(P(-17f, 12f), P(-4f, 17f), P(-7f, 4f)); Curve(P(-17f, -1f), P(-7f, -6f), P(-7f, 4f)); Curve(P(-7f, 4f), P(18f, 14f), P(16f, -5f), 4f); Curve(P(16f, -5f), P(14f, -13f), P(5f, -9f), 4f); if (cue == Cue.WolfPull) { Line(P(5f, -16f), P(-9f, -16f)); Line(P(-3f, -11f), P(-9f, -16f)); Line(P(-3f, -21f), P(-9f, -16f)); } else { Line(P(14f, 9f), P(22f, 13f)); Line(P(18f, 3f), P(23f, 3f)); } } else if (((uint)(cue - 236) <= 2u || (uint)(cue - 241) <= 2u) ? true : false) { Line(P(-12f, 3f), P(-14f, 17f)); Line(P(-14f, 17f), P(-4f, 10f)); Line(P(-4f, 10f), P(4f, 10f)); Line(P(4f, 10f), P(14f, 17f)); Line(P(14f, 17f), P(12f, 3f)); Line(P(-12f, 3f), P(-8f, -8f)); Line(P(-8f, -8f), P(0f, -15f)); Line(P(0f, -15f), P(8f, -8f)); Line(P(8f, -8f), P(12f, 3f)); if (cue == Cue.WolfDeath) { Line(P(-8f, 5f), P(-3f, 0f)); Line(P(-8f, 0f), P(-3f, 5f)); Line(P(3f, 5f), P(8f, 0f)); Line(P(3f, 0f), P(8f, 5f)); } else { Line(P(-8f, 4f), P(-4f, 2f)); Line(P(4f, 2f), P(8f, 4f)); } if ((cue == Cue.WolfSnarl || cue == Cue.WolfAttack) ? true : false) { Line(P(-5f, -3f), P(-3f, -9f)); Line(P(-3f, -9f), P(0f, -4f)); Line(P(0f, -4f), P(3f, -9f)); Line(P(3f, -9f), P(5f, -3f)); } else { Line(P(-3f, -5f), P(3f, -5f)); } switch (cue) { case Cue.WolfCall: Curve(P(17f, 6f), P(24f, 0f), P(17f, -6f)); break; case Cue.WolfGrowl: Line(P(-16f, -13f), P(-11f, -17f)); Line(P(11f, -17f), P(16f, -13f)); break; case Cue.WolfSnarl: Line(P(-20f, 0f), P(-16f, -4f)); Line(P(16f, -4f), P(20f, 0f)); break; case Cue.WolfAttack: Line(P(-19f, -11f), P(-13f, -20f)); Line(P(-14f, -11f), P(-8f, -20f)); break; case Cue.WolfHit: Line(P(14f, -11f), P(21f, -8f)); Line(P(16f, -15f), P(22f, -18f)); break; } } else if (cue == Cue.Spring) { Line(P(-12f, 17f), P(12f, 17f)); Line(P(-12f, -17f), P(12f, -17f)); for (int num8 = -14; num8 < 14; num8 += 7) { Curve(P(-8f, num8), P(20f, num8 + 4), P(-8f, num8 + 7)); } } else if (cue == Cue.DiscoMusic) { Line(P(0f, 20f), P(0f, 14f)); Oval(0f, 0f, 14f, 14f); Oval(0f, 0f, 6f, 14f); Line(P(-13f, 5f), P(13f, 5f)); Line(P(-13f, -5f), P(13f, -5f)); Line(P(-20f, 12f), P(-16f, 9f)); Line(P(20f, 12f), P(16f, 9f)); } else if (cue == Cue.CarHood) { Box(-14f, -7f, 28f, 12f); Oval(-8f, -11f, 3f, 3f); Oval(8f, -11f, 3f, 3f); Line(P(-13f, 6f), P(-3f, 18f)); Line(P(-3f, 18f), P(13f, 9f)); } else if (cue == Cue.CabinetDoor) { Box(-15f, -17f, 30f, 34f); Line(P(0f, -17f), P(0f, 17f)); Line(P(-5f, -2f), P(-5f, 4f)); Line(P(5f, -2f), P(5f, 4f)); Line(P(-15f, -10f), P(15f, -10f)); } else if ((uint)(cue - 223) <= 1u) { Oval(0f, 0f, 12f, 12f); Curve(P(-7f, 9f), P(5f, 1f), P(-5f, -10f)); if (cue == Cue.ShipTravel) { Line(P(-19f, 16f), P(-4f, 16f)); Line(P(-8f, 20f), P(-4f, 16f)); Line(P(4f, -16f), P(19f, -16f)); Line(P(15f, -20f), P(19f, -16f)); } else { Line(P(7f, -11f), P(12f, -16f), 4f); Line(P(12f, -16f), P(21f, -6f), 4f); } } else if (cue == Cue.PlantGrowth) { Line(P(0f, -16f), P(0f, 6f)); Curve(P(0f, 0f), P(-19f, 3f), P(-12f, 13f)); Curve(P(-12f, 13f), P(1f, 15f), P(0f, 0f)); Curve(P(0f, 5f), P(1f, 20f), P(13f, 15f)); Curve(P(13f, 15f), P(15f, 5f), P(0f, 5f)); Line(P(-10f, -16f), P(10f, -16f)); } else if (cue == Cue.SporeCloud) { Oval(-8f, 3f, 7f, 5f); Oval(1f, 9f, 7f, 6f); Oval(10f, 2f, 6f, 5f); Oval(-7f, -9f, 2f, 2f); Oval(2f, -12f, 2f, 2f); Oval(12f, -8f, 2f, 2f); } else if (cue == Cue.BloomTreatment) { Curve(P(-11f, -11f), P(-20f, 9f), P(1f, 14f)); Curve(P(1f, 14f), P(4f, -8f), P(-11f, -11f)); Line(P(-12f, -12f), P(-4f, 6f)); Line(P(7f, -3f), P(19f, -3f), 4f); Line(P(13f, -9f), P(13f, 3f), 4f); } else if (cue == Cue.BloomBreath) { Curve(P(-2f, 13f), P(-24f, -2f), P(-7f, -12f)); Curve(P(-7f, -12f), P(0f, -13f), P(-2f, 13f)); Curve(P(2f, 13f), P(24f, -2f), P(7f, -12f)); Curve(P(7f, -12f), P(0f, -13f), P(2f, 13f)); Line(P(0f, 17f), P(0f, 8f)); } else if ((uint)(cue - 226) <= 2u) { Oval(0f, 0f, 9f, 11f); for (int num9 = 0; num9 < 6; num9++) { float num10 = (float)num9 * MathF.PI / 3f; Line(P(13f * Mathf.Cos(num10), 13f * Mathf.Sin(num10)), P(19f * Mathf.Cos(num10), 19f * Mathf.Sin(num10))); } switch (cue) { case Cue.BloomBurst: Line(P(-5f, 6f), P(1f, 1f)); Line(P(1f, 1f), P(-3f, -6f)); Line(P(-3f, -6f), P(6f, -2f)); break; case Cue.BloomChomp: { for (int num11 = -4; num11 <= 4; num11 += 4) { Line(P(num11 - 2, 7f), P(num11, 1f)); Line(P(num11, 1f), P(num11 + 2, 7f)); Line(P(num11, -7f), P(num11, -3f)); } break; } default: Oval(0f, 0f, 3f, 6f); break; } } else if ((cue == Cue.Bite || cue == Cue.CreatureAttack) ? true : false) { Curve(P(-15f, 7f), P(0f, 20f), P(15f, 7f)); Curve(P(-15f, -7f), P(0f, -20f), P(15f, -7f)); for (int num12 = -9; num12 <= 9; num12 += 9) { Line(P(num12 - 3, 10f), P(num12, 2f)); Line(P(num12, 2f), P(num12 + 3, 10f)); Line(P(num12 - 3, -10f), P(num12, -2f)); Line(P(num12, -2f), P(num12 + 3, -10f)); } } else if (cue == Cue.CreatureDeath) { Oval(0f, 3f, 13f, 12f); for (int num13 = -6; num13 <= 6; num13 += 12) { Line(P(num13 - 2, 7f), P(num13 + 2, 3f)); Line(P(num13 + 2, 7f), P(num13 - 2, 3f)); } Curve(P(-5f, -4f), P(0f, -1f), P(5f, -4f)); Line(P(-15f, -14f), P(15f, -14f)); } else if ((uint)(cue - 201) <= 1u) { Box(-14f, -15f, 28f, 30f); if (cue == Cue.BreakerDoor) { Line(P(-7f, 15f), P(7f, 10f)); Line(P(7f, 10f), P(7f, -10f)); Line(P(7f, -10f), P(-7f, -15f)); } else { Box(-8f, -9f, 16f, 18f); Line(P(-4f, -2f), P(5f, 7f), 4f); Oval(5f, 7f, 2f, 2f, 40, filled: true); } } else if (cue == Cue.ElevatorMusic) { Box(-15f, -15f, 30f, 30f); Line(P(-10f, 10f), P(-10f, -9f)); Oval(0f, -6f, 4f, 3f, 40, filled: true); Line(P(4f, -6f), P(4f, 9f)); Line(P(4f, 9f), P(10f, 7f)); } else if (cue == Cue.VehicleJump) { Box(-13f, -4f, 26f, 11f); Oval(-8f, -9f, 3f, 3f); Oval(8f, -9f, 3f, 3f); Line(P(-14f, -17f), P(14f, -17f)); Line(P(0f, 9f), P(0f, 20f)); Line(P(-4f, 16f), P(0f, 20f)); Line(P(0f, 20f), P(4f, 16f)); } else if ((uint)(cue - 206) <= 1u) { Box(-7f, -13f, 14f, 24f); Line(P(-4f, 14f), P(4f, 14f)); if (cue == Cue.TzpEmpty) { Line(P(-4f, -5f), P(4f, 3f)); Line(P(-4f, 3f), P(4f, -5f)); } else { Line(P(11f, 0f), P(20f, 0f)); Line(P(16f, 4f), P(20f, 0f)); Line(P(20f, 0f), P(16f, -4f)); } } else if (cue == Cue.FurniturePlace) { Box(-12f, -8f, 24f, 9f); Line(P(-12f, 1f), P(-12f, 8f)); Line(P(-12f, 8f), P(12f, 8f)); Line(P(12f, 8f), P(12f, 1f)); Line(P(-9f, -8f), P(-9f, -14f)); Line(P(9f, -8f), P(9f, -14f)); Line(P(0f, 20f), P(0f, 11f)); Line(P(-4f, 15f), P(0f, 11f)); Line(P(0f, 11f), P(4f, 15f)); } else if (cue == Cue.Fridge) { Box(-12f, -17f, 24f, 34f); Line(P(-12f, 4f), P(12f, 4f)); Line(P(-7f, 8f), P(-7f, 12f)); Line(P(-7f, -3f), P(-7f, -9f)); } else if (cue == Cue.MicrowaveDoor) { Box(-17f, -12f, 34f, 24f); Line(P(7f, -12f), P(7f, 12f)); Line(P(-13f, 8f), P(1f, 4f)); Line(P(1f, 4f), P(1f, -8f)); Line(P(1f, -8f), P(-13f, -12f)); Oval(12f, 4f, 1.5f, 1.5f, 40, filled: true); } else if (cue == Cue.ChairShock) { Line(P(-12f, 14f), P(-12f, -7f), 4f); Line(P(-12f, -7f), P(8f, -7f), 4f); Line(P(-9f, -7f), P(-9f, -16f)); Line(P(6f, -7f), P(6f, -16f)); Line(P(9f, 17f), P(1f, 5f)); Line(P(1f, 5f), P(12f, 5f)); Line(P(12f, 5f), P(5f, -3f)); } else if (cue == Cue.ZedDog) { Curve(P(-10f, 11f), P(-23f, 10f), P(-15f, -3f), 4f); Curve(P(10f, 11f), P(23f, 10f), P(15f, -3f), 4f); Oval(0f, 0f, 12f, 13f); Oval(-5f, 5f, 1.5f, 1.5f, 40, filled: true); Oval(5f, 5f, 1.5f, 1.5f, 40, filled: true); Oval(0f, -1f, 3f, 2f, 40, filled: true); Curve(P(-5f, -5f), P(0f, -10f), P(5f, -5f)); } else if (cue == Cue.Drowning) { Wave(-14f, -8f); Oval(0f, 5f, 7f, 7f); Oval(12f, 13f, 2f, 2f); } else if (cue == Cue.MudSink) { Wave(-14f, -13f); Line(P(-8f, 14f), P(-3f, -5f), 5f); Line(P(-3f, -5f), P(6f, -5f), 5f); Line(P(12f, 12f), P(12f, -2f)); Line(P(8f, 2f), P(12f, -2f)); Line(P(12f, -2f), P(16f, 2f)); } else if (cue == Cue.ShipLanding) { Line(P(-12f, 3f), P(12f, 3f)); Line(P(12f, 3f), P(16f, -7f)); Line(P(16f, -7f), P(10f, -11f)); Line(P(10f, -11f), P(-10f, -11f)); Line(P(-10f, -11f), P(-16f, -7f)); Line(P(-16f, -7f), P(-12f, 3f)); Line(P(-7f, -2f), P(7f, -2f), 2.5f); Line(P(-11f, -10f), P(-15f, -16f)); Line(P(11f, -10f), P(15f, -16f)); Line(P(-20f, -16f), P(-10f, -16f)); Line(P(10f, -16f), P(20f, -16f)); Line(P(0f, 20f), P(0f, 9f)); Line(P(-5f, 14f), P(0f, 9f)); Line(P(0f, 9f), P(5f, 14f)); } else if (cue == Cue.ShipTakeoff) { Box(-15f, -3f, 23f, 12f); Line(P(8f, -3f), P(16f, -3f)); Line(P(16f, -3f), P(16f, 5f)); Line(P(16f, 5f), P(8f, 9f)); Line(P(-18f, -14f), P(18f, -14f)); float num14 = ((cue != Cue.ShipLanding) ? 1 : (-1)); Line(P(0f, 11f), P(0f, 21f)); Line(P(-4f, 16f - num14 * 5f), P(0f, 16f + num14 * 5f)); Line(P(0f, 16f + num14 * 5f), P(4f, 16f - num14 * 5f)); } else if (cue == Cue.ItemDrop) { Box(-8f, -6f, 16f, 13f); Line(P(0f, 20f), P(0f, 10f)); Line(P(-4f, 14f), P(0f, 10f)); Line(P(0f, 10f), P(4f, 14f)); Line(P(-16f, -14f), P(16f, -14f)); Line(P(-12f, -8f), P(-16f, -4f)); Line(P(12f, -8f), P(16f, -4f)); } else if (cue == Cue.CanShake) { Box(-8f, -13f, 16f, 24f); Line(P(-4f, 14f), P(4f, 14f)); Line(P(-17f, -7f), P(-17f, 8f)); Line(P(-20f, 4f), P(-17f, 8f)); Line(P(17f, 7f), P(17f, -8f)); Line(P(14f, -4f), P(17f, -8f)); } else if (cue == Cue.ToyTrain) { Box(-15f, -6f, 29f, 15f); Box(-11f, 9f, 12f, 7f); Line(P(8f, 9f), P(8f, 16f), 5f); Oval(-9f, -11f, 4f, 4f); Oval(9f, -11f, 4f, 4f); } else if (cue == Cue.LaserSwitch) { Line(P(-15f, -8f), P(-3f, -2f), 6f); Line(P(-1f, 0f), P(18f, 10f), 2f); Oval(20f, 11f, 2f, 2f, 40, filled: true); } else if (cue == Cue.KnifeAttack) { Line(P(-12f, -13f), P(-3f, -4f), 5f); Line(P(-6f, -1f), P(0f, -7f)); Line(P(-3f, -4f), P(12f, 15f)); Line(P(12f, 15f), P(10f, 1f)); Line(P(10f, 1f), P(-3f, -4f)); } else if (cue == Cue.SuitChange) { Line(P(-6f, 13f), P(-16f, 8f)); Line(P(-16f, 8f), P(-12f, -1f)); Line(P(-12f, -1f), P(-8f, 2f)); Line(P(-8f, 2f), P(-8f, -14f)); Line(P(-8f, -14f), P(8f, -14f)); Line(P(8f, -14f), P(8f, 2f)); Line(P(8f, 2f), P(12f, -1f)); Line(P(12f, -1f), P(16f, 8f)); Line(P(16f, 8f), P(6f, 13f)); Curve(P(-6f, 13f), P(0f, 2f), P(6f, 13f)); } else if (cue == Cue.VehicleBoost) { Box(-6f, -5f, 24f, 12f); Line(P(-2f, 7f), P(2f, 14f)); Line(P(2f, 14f), P(12f, 14f)); Line(P(12f, 14f), P(16f, 7f)); Oval(0f, -9f, 3f, 3f); Oval(13f, -9f, 3f, 3f); Line(P(-11f, 4f), P(-20f, 8f)); Line(P(-11f, 0f), P(-22f, 0f)); Line(P(-11f, -4f), P(-20f, -8f)); } else if (cue == Cue.VehicleRefuel) { Line(P(-17f, 12f), P(-8f, 19f)); Line(P(-8f, 19f), P(1f, 9f)); Line(P(1f, 9f), P(-8f, 2f)); Line(P(-8f, 2f), P(-17f, 12f)); Line(P(1f, 9f), P(6f, 6f)); Oval(8f, 1f, 2f, 3f, 40, filled: true); Box(-4f, -15f, 20f, 7f); Line(P(-4f, -8f), P(3f, -4f)); Line(P(3f, -4f), P(12f, -4f)); Line(P(12f, -4f), P(16f, -8f)); } else if (cue == Cue.SeatEject) { Line(P(-11f, 6f), P(-11f, -9f), 4f); Line(P(-11f, -9f), P(9f, -9f), 4f); Line(P(-8f, -10f), P(-8f, -16f)); Line(P(8f, -10f), P(8f, -16f)); Line(P(2f, -3f), P(2f, 17f)); Line(P(-4f, 11f), P(2f, 17f)); Line(P(2f, 17f), P(8f, 11f)); } else if ((cue == Cue.CreatureHit || (uint)(cue - 179) <= 1u) ? true : false) { Oval(0f, 6f, 5f, 5f); Curve(P(-11f, -12f), P(0f, 2f), P(11f, -12f)); if (cue == Cue.BodyCrush) { Line(P(-15f, 17f), P(15f, 17f), 4f); Line(P(-15f, -16f), P(15f, -16f), 4f); } else { Line(P(11f, 12f), P(16f, 17f)); Line(P(13f, 6f), P(20f, 6f)); if (cue == Cue.DeathSound) { Line(P(-10f, -15f), P(10f, -15f), 4f); } } } else if (cue == Cue.Fan) { Oval(0f, 0f, 3f, 3f); for (int num15 = 0; num15 < 3; num15++) { float num16 = (float)(num15 * 2) * MathF.PI / 3f; Curve(P(3f * Mathf.Cos(num16), 3f * Mathf.Sin(num16)), P(24f * Mathf.Cos(num16 + 0.4f), 24f * Mathf.Sin(num16 + 0.4f)), P(8f * Mathf.Cos(num16 + 1f), 8f * Mathf.Sin(num16 + 1f)), 5f); } } else if (cue == Cue.Web) { for (int num17 = 0; num17 < 6; num17++) { float num18 = (float)num17 * MathF.PI / 3f; Line(P(0f, 0f), P(17f * Mathf.Cos(num18), 17f * Mathf.Sin(num18)), 2f); } Oval(0f, 0f, 7f, 7f); Oval(0f, 0f, 13f, 13f); } else if ((cue == Cue.Spray || cue == Cue.Steam) ? true : false) { Line(P(-17f, -9f), P(-17f, 6f)); Line(P(-17f, 6f), P(-8f, 6f)); for (int num19 = 0; num19 < 3; num19++) { Curve(P(-5f, 7 - num19 * 7), P(5f, 14 - num19 * 7), P(18f, 7 - num19 * 7)); } } else if (((uint)(cue - 184) <= 1u || cue == Cue.ShipDoor) ? true : false) { Box(-15f, -15f, 30f, 30f); if (cue == Cue.ShutterDoor) { for (int num20 = -9; num20 < 14; num20 += 6) { Line(P(-11f, num20), P(11f, num20)); } } else { Line(P(0f, -15f), P(0f, 15f)); Line(P(-10f, 0f), P(-4f, 0f)); Line(P(4f, 0f), P(10f, 0f)); if (cue == Cue.PressureDoor) { Line(P(-7f, 4f), P(-11f, 0f)); Line(P(-11f, 0f), P(-7f, -4f)); Line(P(7f, 4f), P(11f, 0f)); Line(P(11f, 0f), P(7f, -4f)); } else { Oval(0f, 7f, 4f, 4f); } } } else if ((uint)(cue - 186) <= 1u) { Oval(0f, -7f, 16f, 5f); Curve(P(-13f, -5f), P(0f, 13f), P(13f, -5f)); Line(P(0f, 17f), P(0f, 9f)); if (cue == Cue.MinePress) { Line(P(-4f, 13f), P(0f, 9f)); Line(P(0f, 9f), P(4f, 13f)); } else { Line(P(-10f, 15f), P(-13f, 18f)); Line(P(10f, 15f), P(13f, 18f)); } } else if (cue == Cue.Plushie) { Oval(-7f, 14f, 3f, 3f); Oval(7f, 14f, 3f, 3f); Oval(0f, 6f, 9f, 8f); Oval(-3f, 8f, 1f, 1f, 40, filled: true); Oval(3f, 8f, 1f, 1f, 40, filled: true); Oval(0f, 3f, 2f, 1.5f, 40, filled: true); Oval(0f, -8f, 6f, 7f); Oval(-7f, -14f, 3f, 2f); Oval(7f, -14f, 3f, 2f); Line(P(-20f, -2f), P(-12f, -2f)); Line(P(-16f, 2f), P(-12f, -2f)); Line(P(-12f, -2f), P(-16f, -6f)); Line(P(20f, -2f), P(12f, -2f)); Line(P(16f, 2f), P(12f, -2f)); Line(P(12f, -2f), P(16f, -6f)); } else if (cue == Cue.RecordPlayer) { Box(-16f, -14f, 32f, 28f); Oval(-3f, 0f, 10f, 10f); Oval(-3f, 0f, 2f, 2f); Line(P(12f, 10f), P(12f, 0f)); Line(P(12f, 0f), P(5f, -6f)); } else if (cue == Cue.Toilet) { Box(-13f, 1f, 11f, 14f); Oval(4f, -1f, 12f, 4f); Curve(P(-6f, -3f), P(-6f, -14f), P(8f, -13f)); Line(P(8f, -13f), P(9f, -4f)); } else if (cue == Cue.Candle) { Box(-5f, -14f, 10f, 17f); Curve(P(0f, 17f), P(-10f, 5f), P(0f, 6f)); Curve(P(0f, 6f), P(9f, 7f), P(0f, 17f)); Line(P(-11f, -16f), P(11f, -16f)); } else if (cue == Cue.Shower) { Curve(P(-13f, -12f), P(-19f, 18f), P(4f, 14f)); Line(P(-3f, 9f), P(10f, 9f), 4f); for (int num21 = -1; num21 <= 9; num21 += 5) { Line(P(num21, 3f), P(num21, -2f), 2f); Line(P(num21, -7f), P(num21, -12f), 2f); } } else if (cue == Cue.Microwave) { Box(-17f, -12f, 34f, 26f); Box(-13f, -8f, 21f, 18f); Oval(13f, 6f, 1.5f, 1.5f, 40, filled: true); Wave(-12f, 0f); } else if (cue == Cue.Pumpkin) { Oval(0f, -1f, 16f, 12f); Oval(0f, -1f, 7f, 12f); Line(P(0f, 11f), P(4f, 17f), 4f); Line(P(-9f, -1f), P(-6f, -1f)); Line(P(6f, -1f), P(9f, -1f)); } else if (cue == Cue.WaterSplash) { Curve(P(-17f, -6f), P(0f, -17f), P(17f, -6f)); Line(P(-11f, 2f), P(-15f, 9f)); Line(P(11f, 2f), P(15f, 9f)); Line(P(0f, 3f), P(0f, 14f)); } else if ((cue == Cue.GroundRadioVoice || cue == Cue.RadioSignal || cue == Cue.RadioRelay) ? true : false) { Box(-10f, -14f, 17f, 23f); Line(P(-6f, 9f), P(-6f, 18f)); Box(-6f, 0f, 9f, 5f); for (int num22 = -5; num22 >= -10; num22 -= 5) { Line(P(-5f, num22), P(2f, num22), 2f); } Curve(P(11f, 11f), P(18f, 5f), P(11f, -1f)); } else if ((cue == Cue.Teleport || cue == Cue.InverseTeleport) ? true : false) { Oval(0f, -12f, 15f, 4f); Oval(0f, 12f, 15f, 4f); float num23 = ((cue != Cue.InverseTeleport) ? 1 : (-1)); Line(P(0f, -6f * num23), P(0f, 6f * num23)); Line(P(-5f, num23), P(0f, 6f * num23)); Line(P(0f, 6f * num23), P(5f, num23)); Line(P(-14f, -6f), P(-14f, 6f), 2f); Line(P(14f, -6f), P(14f, 6f), 2f); } else if (cue == Cue.LightSwitch) { Curve(P(-6f, -5f), P(-19f, 13f), P(0f, 14f)); Curve(P(0f, 14f), P(19f, 13f), P(6f, -5f)); Line(P(-6f, -5f), P(6f, -5f)); Line(P(-5f, -10f), P(5f, -10f)); Line(P(-3f, -14f), P(3f, -14f)); Line(P(-17f, 12f), P(-21f, 15f), 2f); Line(P(17f, 12f), P(21f, 15f), 2f); } else if ((cue == Cue.RadarPing || cue == Cue.RadarSwitch) ? true : false) { Oval(0f, 0f, 15f, 15f); Oval(0f, 0f, 7f, 7f); Line(P(0f, 0f), P(10f, 11f)); Oval(-9f, -6f, 2f, 2f, 40, filled: true); } else if (cue == Cue.WorldHeartbeat) { Oval(0f, 0f, 7f, 11f); Curve(P(-13f, -9f), P(-21f, 0f), P(-13f, 9f)); Curve(P(13f, -9f), P(21f, 0f), P(13f, 9f)); } else if (cue == Cue.Environment) { Wave(-15f, 9f); Wave(-15f, 0f); Wave(-15f, -9f); } else if (cue == Cue.Television) { Box(-16f, -9f, 32f, 22f); Line(P(-8f, -14f), P(8f, -14f)); Line(P(0f, -9f), P(0f, -14f)); Line(P(-4f, -3f), P(-4f, 7f)); Line(P(-4f, 7f), P(6f, 2f)); Line(P(6f, 2f), P(-4f, -3f)); } else if ((cue == Cue.Burst || cue == Cue.Explosion) ? true : false) { for (int num24 = 0; num24 < 8; num24++) { float num25 = (float)num24 * MathF.PI / 4f; float num26 = num25 + MathF.PI / 8f; float num27 = num25 + MathF.PI / 4f; Line(P(Mathf.Cos(num25) * 17f, Mathf.Sin(num25) * 17f), P(Mathf.Cos(num26) * 8f, Mathf.Sin(num26) * 8f)); Line(P(Mathf.Cos(num26) * 8f, Mathf.Sin(num26) * 8f), P(Mathf.Cos(num27) * 17f, Mathf.Sin(num27) * 17f)); } } else if ((cue == Cue.Fire || cue == Cue.VehicleFire || cue == Cue.AmbientFire) ? true : false) { Curve(P(0f, 17f), P(-2f, 2f), P(-9f, 4f)); Curve(P(-9f, 4f), P(-18f, -15f), P(0f, -15f)); Curve(P(0f, -15f), P(20f, -13f), P(10f, 7f)); Curve(P(10f, 7f), P(6f, 0f), P(0f, 17f)); } else if (cue == Cue.Charging || cue == Cue.BatteryWarning) { Box(-15f, -9f, 27f, 18f); Line(P(15f, -4f), P(15f, 4f), 4f); if (cue == Cue.Charging) { Line(P(1f, 6f), P(-5f, -1f)); Line(P(-5f, -1f), P(2f, -1f)); Line(P(2f, -1f), P(-2f, -6f)); } else { Line(P(-2f, 5f), P(-2f, -1f)); Oval(-2f, -5f, 1f, 1f, 40, filled: true); } } else if (cue == Cue.PowerHum) { Box(-10f, -5f, 20f, 15f); Line(P(-6f, 10f), P(-6f, 17f)); Line(P(6f, 10f), P(6f, 17f)); Curve(P(0f, -5f), P(-8f, -17f), P(10f, -14f)); } else if (cue == Cue.Apparatus) { Box(-10f, -12f, 20f, 24f); Box(-5f, -6f, 10f, 12f); Line(P(-15f, 7f), P(-10f, 7f)); Line(P(10f, -7f), P(15f, -7f)); } else if (cue == Cue.ToyRobot) { Box(-11f, -11f, 22f, 24f); Line(P(0f, 13f), P(0f, 18f)); Oval(-5f, 5f, 2f, 2f, 40, filled: true); Oval(5f, 5f, 2f, 2f, 40, filled: true); Line(P(-5f, -5f), P(5f, -5f)); Line(P(-16f, -6f), P(-16f, 6f)); Line(P(16f, -6f), P(16f, 6f)); } else if (cue == Cue.Remote) { Box(-8f, -16f, 16f, 30f); Oval(0f, 8f, 2f, 2f, 40, filled: true); for (int num28 = 0; num28 >= -10; num28 -= 5) { Line(P(-4f, num28), P(-3f, num28), 2f); Line(P(3f, num28), P(4f, num28), 2f); } } else if (cue == Cue.WeedSpray) { Curve(P(0f, -12f), P(-19f, 9f), P(12f, 13f)); Curve(P(12f, 13f), P(18f, -6f), P(0f, -12f)); Line(P(-3f, -16f), P(9f, 9f)); Line(P(-7f, 7f), P(4f, 0f), 2f); } else if (cue == Cue.ItemNoise) { Line(P(-10f, 8f), P(0f, 13f)); Line(P(0f, 13f), P(10f, 8f)); Line(P(-10f, 8f), P(0f, 3f)); Line(P(0f, 3f), P(10f, 8f)); Line(P(-10f, 8f), P(-10f, -9f)); Line(P(-10f, -9f), P(0f, -14f)); Line(P(0f, -14f), P(10f, -9f)); Line(P(10f, -9f), P(10f, 8f)); Line(P(0f, 3f), P(0f, -14f)); Curve(P(-16f, 7f), P(-21f, 0f), P(-16f, -7f)); Curve(P(16f, 7f), P(21f, 0f), P(16f, -7f)); } else if (cue == Cue.Elevator) { Line(P(-11f, -17f), P(-11f, 17f)); Line(P(11f, -17f), P(11f, 17f)); Box(-11f, -11f, 22f, 23f); Line(P(-10f, 6f), P(10f, 6f)); Line(P(0f, 6f), P(0f, -11f)); Line(P(-19f, -8f), P(-19f, 10f)); Line(P(-23f, 6f), P(-19f, 10f)); Line(P(-19f, 10f), P(-15f, 6f)); Line(P(19f, 8f), P(19f, -10f)); Line(P(15f, -6f), P(19f, -10f)); Line(P(19f, -10f), P(23f, -6f)); } else if (cue == Cue.Cabinet) { Box(-14f, 2f, 28f, 14f); Line(P(-14f, 2f), P(-18f, -10f)); Line(P(14f, 2f), P(18f, -10f)); Box(-18f, -17f, 36f, 7f); Line(P(-18f, -10f), P(18f, -10f)); Line(P(-5f, -13f), P(5f, -13f)); Line(P(-5f, 9f), P(5f, 9f)); } else if ((uint)(cue - 15) <= 4u) { Box(-14f, 0f, 26f, 9f); Line(P(-12f, 0f), P(-12f, -12f), 5f); Line(P(-12f, -12f), P(-5f, -12f)); Line(P(-5f, -12f), P(-3f, 0f)); if (cue == Cue.Gunshot || cue == Cue.Ricochet) { Line(P(16f, 8f), P(21f, 12f)); Line(P(16f, 3f), P(22f, 3f)); } if (cue == Cue.Reload) { Line(P(9f, -14f), P(9f, -3f)); Line(P(5f, -7f), P(9f, -3f)); Line(P(9f, -3f), P(13f, -7f)); } if (cue == Cue.Aim) { Line(P(1f, 12f), P(1f, 17f), 2f); Line(P(-3f, 15f), P(5f, 15f), 2f); } } else { bool flag2; switch (cue) { case Cue.Growl: case Cue.Roar: case Cue.Screaming: case Cue.Crying: case Cue.Cackle: case Cue.Howl: case Cue.Laughter: flag2 = true; break; default: flag2 = false; break; } if (flag2) { Oval(-3f, 0f, 9f, 13f); Line(P(-8f, 6f), P(2f, 6f)); Line(P(-8f, -6f), P(2f, -6f)); Curve(P(10f, -6f), P(17f, 0f), P(10f, 6f)); if ((cue == Cue.Roar || cue == Cue.Screaming || cue == Cue.Howl) ? true : false) { Curve(P(15f, -11f), P(25f, 0f), P(15f, 11f)); } } else if (cue == Cue.Voice) { Oval(0f, 3f, 15f, 10f); Line(P(-9f, -5f), P(-12f, -13f)); Line(P(-12f, -13f), P(-1f, -7f)); for (int num29 = 0; num29 < 3; num29++) { Line(P(-7 + num29 * 7, 3f), P(-6 + num29 * 7, 3f), 2.5f); } } else { switch (cue) { case Cue.Thunder: case Cue.StaticWarning: case Cue.Charging: case Cue.PowerHum: case Cue.Zap: flag2 = true; break; default: flag2 = false; break; } if (flag2) { Line(P(3f, 17f), P(-10f, -1f)); Line(P(-10f, -1f), P(3f, -1f)); Line(P(3f, -1f), P(-3f, -16f)); Line(P(-3f, -16f), P(13f, 5f)); Line(P(13f, 5f), P(2f, 5f)); Line(P(2f, 5f), P(3f, 17f)); } else if ((uint)(cue - 94) <= 1u) { Line(P(-16f, -13f), P(-16f, 12f)); Line(P(16f, -13f), P(16f, 12f)); Curve(P(-16f, 12f), P(0f, -3f), P(16f, 12f)); Line(P(-16f, -5f), P(-3f, -5f)); Line(P(3f, -5f), P(16f, -5f)); for (int num30 = -10; num30 <= 10; num30 += 5) { Line(P(num30, 3f), P(num30, -5f)); } if (cue == Cue.BridgeCollapse) { Line(P(-3f, -5f), P(0f, -12f)); Line(P(3f, -5f), P(6f, -11f)); } } else if ((cue == Cue.Horn || (uint)(cue - 160) <= 1u) ? true : false) { Line(P(-14f, 5f), P(-5f, 5f)); Line(P(-5f, 5f), P(6f, 12f)); Line(P(6f, 12f), P(6f, -10f)); Line(P(6f, -10f), P(-5f, -4f)); Line(P(-5f, -4f), P(-14f, -4f)); Line(P(-14f, -4f), P(-14f, 5f)); Curve(P(11f, 8f), P(18f, 1f), P(11f, -6f)); } else if ((cue == Cue.Ladder || cue == Cue.LadderClimb) ? true : false) { Line(P(-9f, -14f), P(-9f, 15f)); Line(P(9f, -14f), P(9f, 15f)); for (int num31 = -10; num31 <= 12; num31 += 7) { Line(P(-9f, num31), P(9f, num31)); } } else if (cue == Cue.ToolSwing) { Line(P(-11f, -13f), P(5f, 7f), 4f); Line(P(1f, 7f), P(7f, 14f), 5f); Line(P(7f, 14f), P(14f, 8f), 5f); Curve(P(-12f, 13f), P(-2f, 18f), P(3f, 16f), 2f); } else if (cue == Cue.CounterBell) { Curve(P(-15f, -5f), P(-13f, 15f), P(0f, 15f)); Curve(P(0f, 15f), P(13f, 15f), P(15f, -5f)); Line(P(-18f, -6f), P(18f, -6f)); Line(P(-13f, -11f), P(13f, -11f)); Line(P(0f, 15f), P(0f, 19f)); Line(P(-4f, 19f), P(4f, 19f)); } else if (cue == Cue.AccessHatch) { Line(P(-18f, -13f), P(11f, -13f)); Line(P(11f, -13f), P(19f, -3f)); Line(P(19f, -3f), P(-10f, -3f)); Line(P(-10f, -3f), P(-18f, -13f)); Line(P(-10f, -3f), P(-10f, 14f)); Line(P(-10f, 14f), P(19f, 14f)); Line(P(19f, 14f), P(19f, -3f)); Line(P(-5f, 8f), P(14f, 8f)); Line(P(-5f, 3f), P(14f, 3f)); Line(P(-2f, -7f), P(4f, -7f)); } else if (cue == Cue.WarehouseDoor) { Line(P(-20f, -7f), P(-20f, 15f)); Line(P(-20f, 15f), P(20f, 15f)); Line(P(20f, 15f), P(20f, -7f)); Line(P(-15f, 10f), P(-5f, 10f)); Line(P(-5f, 10f), P(-5f, -6f)); Line(P(-5f, -6f), P(-15f, -6f)); Line(P(-15f, -6f), P(-15f, 10f)); Line(P(5f, 10f), P(15f, 10f)); Line(P(15f, 10f), P(15f, -6f)); Line(P(15f, -6f), P(5f, -6f)); Line(P(5f, -6f), P(5f, 10f)); Line(P(-9f, 4f), P(-9f, 0f), 2f); Line(P(9f, 4f), P(9f, 0f), 2f); Line(P(-15f, -15f), P(15f, -15f), 2.5f); Line(P(-10f, -10f), P(-15f, -15f), 2.5f); Line(P(-15f, -15f), P(-10f, -20f), 2.5f); Line(P(10f, -10f), P(15f, -15f), 2.5f); Line(P(15f, -15f), P(10f, -20f), 2.5f); } else if (cue == Cue.CounterShutter) { Line(P(-17f, -14f), P(-17f, 15f)); Line(P(-17f, 15f), P(17f, 15f)); Line(P(17f, 15f), P(17f, -14f)); for (int num32 = 10; num32 >= 0; num32 -= 5) { Line(P(-12f, num32), P(12f, num32)); } Line(P(-21f, -13f), P(21f, -13f)); Line(P(-10f, -18f), P(10f, -18f)); } else if (cue == Cue.CounterAttack) { Curve(P(-14f, -16f), P(-18f, 8f), P(-5f, 10f), 6f); Curve(P(-5f, 10f), P(12f, 17f), P(13f, 4f), 4f); Curve(P(13f, 4f), P(11f, -4f), P(5f, 0f), 2f); Oval(-10f, -6f, 1.5f, 1.5f); Oval(-9f, 1f, 1.5f, 1.5f); Oval(-4f, 6f, 1.5f, 1.5f); Line(P(16f, 12f), P(21f, 16f)); Line(P(18f, 3f), P(23f, 3f)); } else if (cue == Cue.CounterGrab) { Line(P(-5f, 18f), P(-5f, 2f), 4f); Curve(P(-5f, 2f), P(-8f, -14f), P(5f, -14f), 4f); Curve(P(5f, -14f), P(18f, -13f), P(12f, -2f), 4f); Line(P(12f, -2f), P(7f, -5f)); Line(P(-19f, -8f), P(-12f, -8f)); Line(P(-12f, -8f), P(-12f, -17f)); Line(P(-12f, -17f), P(-19f, -17f)); Line(P(-19f, -17f), P(-19f, -8f)); } else if ((uint)(cue - 387) <= 1u) { Line(P(-17f, -15f), P(-17f, 15f)); Line(P(-17f, 15f), P(-7f, 15f)); Line(P(-17f, 1f), P(-9f, 1f)); Line(P(-17f, -15f), P(-7f, -15f)); Curve(P(-2f, 9f), P(7f, 0f), P(-2f, -9f)); Curve(P(7f, 14f), P(19f, 0f), P(7f, -14f)); if (cue == Cue.CounterWarning) { Line(P(-12f, 11f), P(-7f, 6f)); Line(P(-7f, 6f), P(-12f, 0f)); Line(P(-12f, 0f), P(-7f, -6f)); } } else if (cue == Cue.CounterSnore) { Curve(P(-18f, -3f), P(-9f, -12f), P(0f, -3f)); Line(P(-2f, 2f), P(5f, 2f)); Line(P(5f, 2f), P(-2f, -5f)); Line(P(-2f, -5f), P(5f, -5f)); Line(P(8f, 15f), P(18f, 15f)); Line(P(18f, 15f), P(8f, 5f)); Line(P(8f, 5f), P(18f, 5f)); } else if (cue == Cue.BodyImpact) { Oval(-5f, 12f, 4f, 4f); Curve(P(-7f, 6f), P(-13f, 0f), P(-8f, -5f)); Line(P(-4f, 6f), P(0f, -4f)); Line(P(0f, -4f), P(-7f, -14f)); Line(P(0f, -4f), P(6f, -12f)); Line(P(-4f, 4f), P(4f, 0f)); Line(P(12f, 14f), P(12f, -14f)); Line(P(4f, 7f), P(8f, 5f)); Line(P(5f, -4f), P(8f, -5f)); } else if (cue == Cue.PoolFloaty) { Curve(P(-15f, -10f), P(-20f, 0f), P(-12f, 11f)); Line(P(-12f, 11f), P(10f, 11f)); Curve(P(10f, 11f), P(19f, 6f), P(15f, -10f)); Line(P(15f, -10f), P(-15f, -10f)); Line(P(-12f, 5f), P(12f, 5f)); for (int num33 = -8; num33 <= 8; num33 += 8) { Line(P(num33, 1f), P(num33, -6f)); } Line(P(-20f, 8f), P(-23f, 11f)); Line(P(20f, 9f), P(23f, 12f)); } else if (cue == Cue.Cushion) { Oval(0f, -3f, 15f, 8f); Line(P(2f, 5f), P(5f, 12f)); Line(P(5f, 12f), P(10f, 12f)); } else if (cue == Cue.Jetpack) { Oval(-7f, 3f, 5f, 12f); Oval(7f, 3f, 5f, 12f); Line(P(-3f, 9f), P(3f, 9f)); Line(P(-7f, -11f), P(-9f, -17f)); Line(P(7f, -11f), P(9f, -17f)); } else if ((cue == Cue.SprayPaint || cue == Cue.Inhaling || cue == Cue.WeedSpray) ? true : false) { Line(P(-8f, -9f), P(-8f, 11f)); Line(P(-8f, 11f), P(6f, 11f)); Line(P(6f, 11f), P(6f, -9f)); Line(P(6f, -9f), P(-8f, -9f)); Line(P(0f, 11f), P(0f, 16f)); Line(P(0f, 16f), P(7f, 16f)); for (int num34 = 0; num34 < 3; num34++) { Line(P(10f, 10 - num34 * 7), P(19f, 13 - num34 * 9), 2f); } } else { switch (cue) { case Cue.VehicleDelivery: case Cue.VehicleEngine: case Cue.Skidding: case Cue.VehicleImpact: case Cue.VehicleFire: case Cue.VehicleInteraction: case Cue.VehicleRattle: flag2 = true; break; default: flag2 = false; break; } if (flag2) { Line(P(-16f, -7f), P(-16f, 2f)); Line(P(-16f, 2f), P(-8f, 5f)); Line(P(-8f, 5f), P(-4f, 12f)); Line(P(-4f, 12f), P(8f, 12f)); Line(P(8f, 12f), P(13f, 3f)); Line(P(13f, 3f), P(17f, 1f)); Line(P(17f, 1f), P(17f, -7f)); Line(P(-16f, -7f), P(17f, -7f)); Oval(-9f, -9f, 3f, 3f); Oval(10f, -9f, 3f, 3f); } else if ((uint)(cue - 115) <= 1u) { Oval(-7f, 5f, 6f, 6f); Line(P(-2f, 1f), P(12f, -12f), 4f); Line(P(7f, -7f), P(11f, -3f)); Line(P(11f, -11f), P(15f, -7f)); } else if (cue == Cue.Clock) { Oval(0f, 0f, 15f, 15f); Line(P(0f, 10f), P(0f, 0f)); Line(P(0f, 0f), P(8f, -4f)); } else if ((cue == Cue.EggCall || (uint)(cue - 217) <= 2u) ? true : false) { Oval(0f, 0f, 11f, 15f); if (cue == Cue.EggBreak) { Line(P(-10f, 3f), P(-3f, -2f)); Line(P(-3f, -2f), P(3f, 4f)); Line(P(3f, 4f), P(10f, -1f)); } else { Line(P(14f, 5f), P(19f, 9f)); Line(P(15f, -3f), P(21f, -3f)); if ((uint)(cue - 217) <= 1u) { Line(P(-14f, 5f), P(-19f, 9f)); } if (cue == Cue.EggScream) { Line(P(0f, 8f), P(0f, 1f), 4f); Oval(0f, -5f, 2f, 2f, 40, filled: true); } } } else if ((uint)(cue - 126) <= 1u) { Line(P(-17f, 12f), P(17f, 12f)); Line(P(-17f, -13f), P(17f, -13f)); for (int num35 = -12; num35 <= 12; num35 += 12) { Line(P(num35 - 4, 11f), P(num35, -4f)); Line(P(num35, -4f), P(num35 + 4, 11f)); } } else if ((cue == Cue.Vent || cue == Cue.Elevator || cue == Cue.Cabinet) ? true : false) { Line(P(-14f, -14f), P(-14f, 14f)); Line(P(-14f, 14f), P(14f, 14f)); Line(P(14f, 14f), P(14f, -14f)); Line(P(14f, -14f), P(-14f, -14f)); if (cue == Cue.Vent) { for (int num36 = -9; num36 <= 9; num36 += 6) { Line(P(-9f, num36), P(9f, num36)); } } else { Line(P(0f, -14f), P(0f, 14f)); Line(P(-5f, -2f), P(-5f, 3f)); Line(P(5f, -2f), P(5f, 3f)); } } else { switch (cue) { case Cue.Breaker: case Cue.Terminal: case Cue.Lever: case Cue.Teeth: case Cue.Hairdryer: case Cue.Phone: flag2 = true; break; default: flag2 = false; break; } if (flag2) { switch (cue) { case Cue.Teeth: { Curve(P(-14f, 9f), P(0f, 15f), P(14f, 9f)); Curve(P(-14f, -9f), P(0f, -15f), P(14f, -9f)); for (int num37 = -10; num37 <= 10; num37 += 5) { Line(P(num37, 10f), P(num37, 3f)); Line(P(num37, -10f), P(num37, -3f)); } break; } case Cue.Breaker: case Cue.Lever: Line(P(-13f, -12f), P(13f, -12f), 4f); Line(P(0f, -12f), P(8f, 10f), 4f); Oval(9f, 12f, 4f, 4f); break; case Cue.Hairdryer: Oval(0f, 7f, 13f, 7f); Line(P(2f, 0f), P(-3f, -13f), 5f); Line(P(14f, 8f), P(20f, 8f)); break; case Cue.Phone: Curve(P(-12f, -9f), P(-13f, 10f), P(9f, 12f), 5f); Line(P(-13f, -8f), P(-4f, -12f), 6f); Line(P(7f, 12f), P(12f, 4f), 6f); break; default: Box(-14f, -8f, 28f, 21f); Line(P(-9f, 8f), P(-4f, 4f)); Line(P(-4f, 4f), P(-9f, 0f)); Line(P(1f, 0f), P(8f, 0f)); Line(P(-17f, -13f), P(17f, -13f), 4f); break; } } else if (cue == Cue.DuckQuack) { Curve(P(-17f, 0f), P(-11f, -20f), P(7f, -11f)); Curve(P(7f, -11f), P(13f, -8f), P(10f, 1f)); Curve(P(10f, 1f), P(17f, 12f), P(6f, 15f)); Curve(P(6f, 15f), P(-3f, 15f), P(0f, 3f)); Curve(P(0f, 3f), P(-8f, -3f), P(-17f, 0f)); Line(P(12f, 7f), P(20f, 5f)); Line(P(20f, 5f), P(12f, 2f)); Curve(P(-10f, -4f), P(-4f, -11f), P(2f, -6f)); Oval(8f, 10f, 1.5f, 1.5f, 40, filled: true); } else if ((uint)(cue - 163) <= 3u) { switch (cue) { case Cue.FlashlightSwitch: Box(-12f, -5f, 17f, 10f); Line(P(5f, -5f), P(11f, -9f)); Line(P(11f, -9f), P(11f, 9f)); Line(P(11f, 9f), P(5f, 5f)); Line(P(16f, 0f), P(21f, 0f)); break; case Cue.BagZip: { Line(P(-4f, -15f), P(-4f, 10f), 2f); Line(P(4f, -15f), P(4f, 10f), 2f); for (int num38 = -13; num38 <= 2; num38 += 5) { Line(P(-3f, num38), P(3f, num38), 2f); } Box(-6f, 4f, 12f, 8f); Oval(0f, 14f, 3f, 5f); break; } default: Box(-13f, -12f, 26f, 20f); Line(P(-15f, 10f), P(15f, 10f)); if (cue == Cue.GiftOpen) { Line(P(0f, -12f), P(0f, 10f)); Curve(P(0f, 10f), P(-17f, 23f), P(-10f, 10f)); Curve(P(0f, 10f), P(17f, 23f), P(10f, 10f)); } else { Box(-8f, 10f, 16f, 7f); Line(P(-6f, -6f), P(6f, -6f)); } break; } } else if (cue == Cue.SupplyLanding) { Line(P(-12f, 3f), P(12f, 3f)); Line(P(12f, 3f), P(12f, -13f)); Line(P(12f, -13f), P(-12f, -13f)); Line(P(-12f, -13f), P(-12f, 3f)); Line(P(0f, 17f), P(0f, 7f)); Line(P(-5f, 12f), P(0f, 7f)); Line(P(0f, 7f), P(5f, 12f)); } else if ((cue == Cue.MaskSound || cue == Cue.MaskInfection || cue == Cue.MaskLaugh) ? true : false) { Oval(0f, 0f, 11f, 15f); Oval(-5f, 4f, 2f, 2f, 40, filled: true); Oval(5f, 4f, 2f, 2f, 40, filled: true); Curve(P(-6f, -4f), P(0f, -12f), P(6f, -4f)); } else if (cue == Cue.SkitterFootsteps) { Shoe(-10f, 8f, -12f, 0.8f); Shoe(9f, 0f, 15f, 0.8f); Shoe(-6f, -12f, -12f, 0.65f); } else if ((cue == Cue.OtherCling || cue == Cue.Crawling) ? true : false) { Oval(0f, 0f, 4f, 12f); for (int num39 = 0; num39 < 3; num39++) { Line(P(-3f, 6 - num39 * 6), P(-12f, 9 - num39 * 6)); Line(P(3f, 6 - num39 * 6), P(12f, 9 - num39 * 6)); } } else if ((cue == Cue.Door || (uint)(cue - 75) <= 1u) ? true : false) { Line(P(-13f, -14f), P(-13f, 14f)); Line(P(-13f, 14f), P(10f, 14f)); Line(P(10f, 14f), P(10f, -14f)); Line(P(-16f, -14f), P(15f, -14f)); Line(P(-10f, 11f), P(3f, 6f)); Line(P(3f, 6f), P(3f, -13f)); Line(P(-10f, 11f), P(-10f, -13f)); Line(P(-2f, -3f), P(-1f, -3f), 2.5f); } else if ((cue == Cue.Alarm || (uint)(cue - 98) <= 2u) ? true : false) { Line(P(0f, 16f), P(-15f, -12f)); Line(P(-15f, -12f), P(15f, -12f)); Line(P(15f, -12f), P(0f, 16f)); Line(P(0f, 7f), P(0f, -2f)); Line(P(0f, -7f), P(0f, -8f), 3.5f); } else if (cue == Cue.Snip) { Oval(-7f, -8f, 4f, 4f, 12); Oval(7f, -8f, 4f, 4f, 12); Line(P(-5f, -5f), P(11f, 13f)); Line(P(5f, -5f), P(-11f, 13f)); } else if (cue == Cue.Breathing) { Curve(P(-18f, 8f), P(-4f, 17f), P(4f, 8f)); Curve(P(-18f, 0f), P(1f, 9f), P(15f, 0f)); Curve(P(-13f, -9f), P(6f, -1f), P(20f, -9f)); } else if ((uint)(cue - 28) <= 1u) { Oval(0f, 4f, 13f, 5f); Line(P(-13f, 4f), P(-13f, -11f)); Line(P(13f, 4f), P(13f, -11f)); Curve(P(-13f, -11f), P(0f, -19f), P(13f, -11f)); Line(P(-16f, 19f), P(-3f, 9f)); Line(P(16f, 19f), P(3f, 9f)); if (cue == Cue.March) { Line(P(-17f, -20f), P(-7f, -20f)); Line(P(7f, -20f), P(17f, -20f)); } } else if (cue == Cue.Lunge) { Line(P(-18f, 0f), P(17f, 0f), 4f); Line(P(5f, 12f), P(17f, 0f), 4f); Line(P(17f, 0f), P(5f, -12f), 4f); Line(P(-16f, 9f), P(-4f, 9f)); Line(P(-16f, -9f), P(-4f, -9f)); } else if ((cue == Cue.Clicking || cue == Cue.Chitter || cue == Cue.Rattle) ? true : false) { for (int num40 = 0; num40 < 3; num40++) { float num41 = num40 % 2 * 8 - 4; Line(P(-15 + num40 * 12, num41 + 5f), P(-10 + num40 * 12, num41)); Line(P(-10 + num40 * 12, num41), P(-15 + num40 * 12, num41 - 5f)); } if (cue == Cue.Rattle) { Line(P(-13f, -15f), P(13f, -15f)); } } else { switch (cue) { case Cue.Engine: Box(-12f, -10f, 24f, 18f); Line(P(-6f, 13f), P(6f, 13f)); Line(P(-17f, -5f), P(-17f, 3f)); Line(P(12f, 2f), P(19f, 2f)); Line(P(19f, 2f), P(19f, -7f)); break; case Cue.Electric: Line(P(4f, 19f), P(-10f, -2f), 4f); Line(P(-10f, -2f), P(4f, -2f), 4f); Line(P(4f, -2f), P(-4f, -19f), 4f); Line(P(-18f, 9f), P(-13f, 5f)); Line(P(13f, -5f), P(18f, -9f)); break; case Cue.Spit: Curve(P(-17f, -7f), P(-2f, 16f), P(17f, 5f)); Oval(14f, -4f, 3f, 4f); Oval(7f, -12f, 2f, 3f); Line(P(-17f, -7f), P(-9f, -7f)); break; case Cue.Sliding: Line(P(-17f, -12f), P(17f, -12f)); Curve(P(-13f, 2f), P(0f, -6f), P(13f, 2f)); Line(P(6f, 9f), P(16f, 9f)); Line(P(11f, 14f), P(16f, 9f)); Line(P(16f, 9f), P(11f, 4f)); break; case Cue.Flopping: Curve(P(-13f, -4f), P(0f, 18f), P(13f, -4f)); Curve(P(-13f, -4f), P(0f, -14f), P(13f, -4f)); Line(P(-17f, -12f), P(-21f, -5f)); Line(P(17f, -12f), P(21f, -5f)); Line(P(-7f, -18f), P(7f, -18f)); break; case Cue.Whining: Oval(-6f, 0f, 7f, 10f); Curve(P(5f, 10f), P(21f, 0f), P(5f, -10f)); Line(P(13f, -16f), P(20f, -16f)); break; default: switch (soundFamily) { case SoundFamily.Music: Line(P(-6f, -8f), P(-6f, 12f)); Line(P(-6f, 12f), P(10f, 16f)); Line(P(10f, 16f), P(10f, -4f)); Line(P(-13f, -9f), P(-5f, -9f), 6f); Line(P(3f, -5f), P(11f, -5f), 6f); break; case SoundFamily.Mechanical: { Oval(0f, 0f, 10f, 10f); Oval(0f, 0f, 3f, 3f); for (int num48 = 0; num48 < 8; num48++) { float num49 = (float)num48 * MathF.PI / 4f; Line(P(Mathf.Cos(num49) * 11f, Mathf.Sin(num49) * 11f), P(Mathf.Cos(num49) * 17f, Mathf.Sin(num49) * 17f), 4f); } break; } case SoundFamily.Ground: Line(P(-15f, -4f), P(-7f, 4f)); Line(P(-7f, 4f), P(0f, -7f)); Line(P(0f, -7f), P(8f, 5f)); Line(P(8f, 5f), P(15f, -4f)); Line(P(-14f, -13f), P(14f, -13f)); break; case SoundFamily.Movement: { float size = ((cue == Cue.SmallFootsteps) ? 0.65f : 1f); Shoe(-8f, -2f, 10f, size); Shoe(8f, 6f, -10f, size); if (cue == Cue.DragFootsteps) { Line(P(-17f, -15f), P(-4f, -15f), 2f); Line(P(4f, -9f), P(17f, -9f), 2f); } if (cue == Cue.HeavyFootsteps) { Line(P(-15f, -16f), P(-3f, -16f), 4f); Line(P(3f, -10f), P(15f, -10f), 4f); } if (cue == Cue.Running) { Line(P(-18f, 5f), P(-13f, 5f), 2f); Line(P(13f, -7f), P(19f, -7f), 2f); } if (cue == Cue.BootFootsteps) { Line(P(-15f, -16f), P(-3f, -16f), 4f); Line(P(3f, -10f), P(15f, -10f), 4f); Line(P(-16f, 3f), P(-16f, 10f)); } if (cue == Cue.BareFootsteps) { for (int num47 = 0; num47 < 3; num47++) { Oval(-12 + num47 * 3, 12f, 1f, 1f, 40, filled: true); Oval(4 + num47 * 3, 19f, 1f, 1f, 40, filled: true); } } if (cue == Cue.SkippingFootsteps) { Curve(P(-17f, 7f), P(0f, 23f), P(17f, 12f), 2f); } break; } case SoundFamily.Liquid: { Line(P(0f, 15f), P(-9f, -1f)); Line(P(0f, 15f), P(9f, -1f)); for (int num44 = 0; num44 < 12; num44++) { float num45 = MathF.PI + (float)num44 * MathF.PI / 12f; float num46 = MathF.PI + (float)(num44 + 1) * MathF.PI / 12f; Line(P(Mathf.Cos(num45) * 9f, -1f + Mathf.Sin(num45) * 10f), P(Mathf.Cos(num46) * 9f, -1f + Mathf.Sin(num46) * 10f)); } break; } case SoundFamily.Insects: Oval(-9f, 5f, 6f, 5f); Oval(9f, 5f, 6f, 5f); Oval(0f, -4f, 2f, 7f, 40, filled: true); Line(P(-4f, 3f), P(-12f, 7f), 1.5f); Line(P(4f, 3f), P(12f, 7f), 1.5f); Line(P(-2f, 11f), P(-5f, 15f)); Line(P(2f, 11f), P(5f, 15f)); break; case SoundFamily.Air: Curve(P(0f, -3f), P(-6f, 15f), P(-19f, 10f)); Curve(P(-19f, 10f), P(-14f, -5f), P(-3f, -6f)); Curve(P(0f, -3f), P(6f, 15f), P(19f, 10f)); Curve(P(19f, 10f), P(14f, -5f), P(3f, -6f)); Curve(P(-14f, 6f), P(-10f, 0f), P(-5f, -2f), 1.5f); Curve(P(14f, 6f), P(10f, 0f), P(5f, -2f), 1.5f); break; case SoundFamily.Personal: Line(P(-15f, 0f), P(-7f, 0f)); Line(P(-7f, 0f), P(-3f, 10f)); Line(P(-3f, 10f), P(3f, -10f)); Line(P(3f, -10f), P(7f, 0f)); Line(P(7f, 0f), P(15f, 0f)); break; case SoundFamily.Impact: { for (int num42 = 0; num42 < 6; num42++) { float num43 = (float)num42 * MathF.PI / 3f; Line(P(Mathf.Cos(num43) * 5f, Mathf.Sin(num43) * 5f), P(Mathf.Cos(num43) * 16f, Mathf.Sin(num43) * 16f)); } break; } default: Line(P(-13f, -9f), P(-9f, 10f)); Line(P(-2f, -12f), P(1f, 13f)); Line(P(9f, -9f), P(13f, 10f)); break; } break; } } } } } } glyphScale = 1f; offset = 0f; for (int num50 = 0; num50 < strength; num50++) { float num51 = ((float)num50 - (float)(strength - 1) * 0.5f) * 7f; Line(P(num51 - 1.5f, -22f), P(num51 + 1.5f, -22f), 2.5f); } Vector2 Arc(float degrees) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) return P(Mathf.Cos(degrees * (MathF.PI / 180f)) * 28f, Mathf.Sin(degrees * (MathF.PI / 180f)) * 28f); } void Box(float x, float y, float w, float h) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) Line(P(x, y), P(x + w, y)); Line(P(x + w, y), P(x + w, y + h)); Line(P(x + w, y + h), P(x, y + h)); Line(P(x, y + h), P(x, y)); } void Curve(Vector2 a, Vector2 control, Vector2 b, float width2 = 2.5f) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) Vector2 a2 = a; for (int num52 = 1; num52 <= 24; num52++) { float num53 = (float)num52 / 24f; Vector2 val = (1f - num53) * (1f - num53) * a + 2f * (1f - num53) * num53 * control + num53 * num53 * b; Line(a2, val, width2); a2 = val; } } void Line(Vector2 a, Vector2 b, float num52 = 3f) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00df: 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_00e6: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_011d: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0136: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_014f: 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_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017e: 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_0180: 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) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: 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_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) Vector2 val = b - a; Vector2 normalized = ((Vector2)(ref val)).normalized; Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0f - normalized.y, normalized.x); Vector2 val3 = val2 * num52 * scale * glyphScale * 0.5f; Vector2 val4 = val3 + val2 * fringe; Quad(a - val3, a + val3, b + val3, b - val3, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color); Quad(a + val3, a + val4, b + val4, b + val3, ((Graphic)this).color, clear, clear, ((Graphic)this).color); Quad(a - val4, a - val3, b - val3, b - val4, clear, ((Graphic)this).color, ((Graphic)this).color, clear); Quad(a - val4 - normalized * fringe, a + val4 - normalized * fringe, a + val3, a - val3, clear, clear, ((Graphic)this).color, ((Graphic)this).color); Quad(b - val3, b + val3, b + val4 + normalized * fringe, b - val4 + normalized * fringe, ((Graphic)this).color, ((Graphic)this).color, clear, clear); } void Oval(float x, float y, float rx, float ry, int segments = 40, bool filled = false) { //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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_0104: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_00f3: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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_0136: 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_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014f: 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_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: 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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019e: 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_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: 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_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: 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_0206: Unknown result type (might be due to invalid IL or missing references) segments = Mathf.Max(40, segments); for (int num52 = 0; num52 < segments; num52++) { float num53 = (float)(num52 * 2) * MathF.PI / (float)segments; float num54 = (float)((num52 + 1) * 2) * MathF.PI / (float)segments; Vector2 val = P(x + Mathf.Cos(num53) * rx, y + Mathf.Sin(num53) * ry); Vector2 val2 = P(x + Mathf.Cos(num54) * rx, y + Mathf.Sin(num54) * ry); Vector2 val3 = new Vector2(Mathf.Cos(num53) / rx, Mathf.Sin(num53) / ry); Vector2 normalized = ((Vector2)(ref val3)).normalized; val3 = new Vector2(Mathf.Cos(num54) / rx, Mathf.Sin(num54) / ry); Vector2 normalized2 = ((Vector2)(ref val3)).normalized; float num55 = 1.25f * scale * glyphScale; Vector2 val4 = (filled ? P(x, y) : (val - normalized * num55)); Vector2 val5 = (filled ? P(x, y) : (val2 - normalized2 * num55)); Quad(val4, val + normalized * num55, val2 + normalized2 * num55, val5, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color); Quad(val + normalized * num55, val + normalized * (num55 + fringe), val2 + normalized2 * (num55 + fringe), val2 + normalized2 * num55, ((Graphic)this).color, clear, clear, ((Graphic)this).color); if (!filled) { Quad(val4 - normalized * fringe, val4, val5, val5 - normalized2 * fringe, clear, ((Graphic)this).color, ((Graphic)this).color, clear); } } } Vector2 P(float x, float y) { //IL_0017: 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) return new Vector2(x * glyphScale + offset, y * glyphScale) * scale; } void Quad(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Color ca, Color cb, Color cc, Color cd) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) int currentVertCount = vh.currentVertCount; vh.AddVert(Vector2.op_Implicit(a), Color32.op_Implicit(ca), Vector4.op_Implicit(Vector2.zero)); vh.AddVert(Vector2.op_Implicit(b), Color32.op_Implicit(cb), Vector4.op_Implicit(Vector2.zero)); vh.AddVert(Vector2.op_Implicit(c), Color32.op_Implicit(cc), Vector4.op_Implicit(Vector2.zero)); vh.AddVert(Vector2.op_Implicit(d), Color32.op_Implicit(cd), Vector4.op_Implicit(Vector2.zero)); vh.AddTriangle(currentVertCount, currentVertCount + 1, currentVertCount + 2); vh.AddTriangle(currentVertCount, currentVertCount + 2, currentVertCount + 3); } void Shoe(float x, float y, float rotation, float num54 = 1f) { //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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_00e7: 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) //IL_00ff: 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_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0157: 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_015e: 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_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: 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_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019f: 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_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: 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_01dd: Unknown result type (might be due to invalid IL or missing references) float cos = Mathf.Cos(rotation * (MathF.PI / 180f)); float sin = Mathf.Sin(rotation * (MathF.PI / 180f)); for (int num52 = 0; num52 < 2; num52++) { bool flag3 = num52 == 1; float num53 = ((!flag3) ? 1 : (-9)); Vector2 val = P(x - num54 * num53 * sin, y + num54 * num53 * cos); for (int num55 = 0; num55 < 48; num55++) { float num56 = (float)(num55 * 2) * MathF.PI / 48f; float num57 = (float)((num55 + 1) * 2) * MathF.PI / 48f; Vector2 val2 = Point(num56, flag3); Vector2 val3 = Point(num57, flag3); Vector2 val4 = Point(num56 + 0.01f, flag3) - Point(num56 - 0.01f, flag3); Vector2 val5 = Point(num57 + 0.01f, flag3) - Point(num57 - 0.01f, flag3); Vector2 val6 = new Vector2(0f - val4.y, val4.x); Vector2 val7 = ((Vector2)(ref val6)).normalized * fringe; val6 = new Vector2(0f - val5.y, val5.x); Vector2 val8 = ((Vector2)(ref val6)).normalized * fringe; Quad(val, val2, val3, val, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color, ((Graphic)this).color); Quad(val2, val2 + val7, val3 + val8, val3, ((Graphic)this).color, clear, clear, ((Graphic)this).color); } } Vector2 Point(float t, bool heel) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) float num58 = Mathf.Sin(t) * (heel ? 3f : (4.2f + 0.7f * Mathf.Cos(t))); float num59 = (heel ? Mathf.Min(-6.5f, -9f + 3.5f * Mathf.Cos(t)) : Mathf.Max(-4f, 7f * Mathf.Cos(t))); return P(x + num54 * (num58 * cos - num59 * sin), y + num54 * (num58 * sin + num59 * cos)); } } void Wave(float x, float y) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) Curve(P(x, y), P(x + 7f, y + 5f), P(x + 14f, y)); Curve(P(x + 14f, y), P(x + 21f, y - 5f), P(x + 28f, y)); } } } } namespace Sensus.Captions { internal static class AcousticDetails { internal static Cue Resolve(string name) { switch (name) { case "PoolFloatyHit1": case "PoolFloatyHit2": return Cue.PoolFloaty; case "Cruiser_Turbulence": return Cue.VehicleRattle; case "Cruiser_OpenHood": case "Cruiser_ShutHood": return Cue.CruiserHood; case "RevEngine1": case "Cruiser_EngineRev": return Cue.CruiserIgnition; case "Cruiser_EngineStart": return Cue.CruiserStarted; case "Cruiser_InsertKey": case "Cruiser_TwistKey": return Cue.CruiserKey; case "MeteorApproachingA": case "MeteorApproachingB": case "MeteorApproachingC": case "MeteorScream1": return Cue.MeteorApproach; case "MeteorLandClose": case "MeteorLandFar": case "MeteorLandInFactory": return Cue.MeteorImpact; case "BWStep1": case "BWStep2": case "BWStep3": case "BWStep4": case "BWStep5": case "BWStep6": return Cue.WolfFootsteps; case "BWCall3": case "BWCall4": case "BWCall3Far": case "BWCall4Far": return Cue.WolfCall; case "BWGrowl2": case "BWGrowl4": case "BWGrowl5": case "BWGrowl6": return Cue.WolfGrowl; case "BWGrowlDragging1": return Cue.WolfSnarl; case "BushWolfTongueShoot": return Cue.WolfTongue; case "TonguePull": return Cue.WolfPull; case "BushWolfKill": return Cue.WolfAttack; case "HitBushWolf": return Cue.WolfHit; case "BushWolfDie": return Cue.WolfDeath; case "CarHoodOpen": return Cue.CarHood; case "CarHoodClose": return Cue.CarHood; case "SwingCupboardOpen": return Cue.CabinetDoor; case "SwingCupboardOpen2": return Cue.CabinetDoor; case "SwingCupboardClose": return Cue.CabinetDoor; case "CadaverBloomPlantFeetHit": return Cue.GroundImpact; case "BeautifulBloomB": return Cue.TensionMusic; case "CadaverBloomBreathing": return Cue.BloomBreath; case "BloomedPlayerHeadBurst": return Cue.BloomBurst; case "ChestBurst": return Cue.BloomChestOpen; case "ChestChomperSnapping": return Cue.BloomChomp; case "BloomBitePlayer": return Cue.BloomChomp; case "BloomRoar1": return Cue.BloomRoar; case "BloomRoar2": return Cue.BloomRoar; case "BloomRoar3": return Cue.BloomRoar; case "PlantGrow": return Cue.PlantGrowth; case "PlantSpores": return Cue.SporeCloud; case "SporeDamage": return Cue.BloomTreatment; case "SporeDamageB": return Cue.BloomTreatment; case "SporeDamageC": return Cue.BloomTreatment; case "SporeDamageD": return Cue.BloomTreatment; case "CupboardOpen": case "CupboardClose": return Cue.CabinetDoor; case "BreakerBoxOpen": return Cue.BreakerDoor; case "BreakerBoxClose": return Cue.BreakerDoor; case "BreakerLever1": return Cue.BreakerSwitch; case "BreakerLever2": return Cue.BreakerSwitch; case "BreakerLever3": return Cue.BreakerSwitch; case "FridgeOpen": return Cue.Fridge; case "FridgeClose": return Cue.Fridge; case "ElectricChairShock": return Cue.ChairShock; case "ScrapZedDogPickup": return Cue.ZedDog; case "SinkIntoMud": return Cue.MudSink; case "MoveShipObjectBig": return Cue.FurniturePlace; case "MoveShipObjectPaper": return Cue.FurniturePlace; case "BabyBirdPeep2": return Cue.EggCall; case "BabyBirdScream2": return Cue.EggCry; case "BabyBirdScream3": return Cue.EggScream; case "CrackEgg": return Cue.EggBreak; case "BaboonStab": return Cue.CreatureAttack; case "BaboonKill": return Cue.CreatureAttack; case "GhostDeviceFullyCharged": case "GhostDeviceTurnOff": return Cue.RadarSwitch; case "TurnTVOn": case "TurnTVOff": return Cue.Television; case "ExplodeHeadSecondarySFX": case "ExplodeHead": case "KillPlayerSpring": return Cue.DeathSound; case "ShakeSpraycan": case "ShakeSpraycanFull1": case "ShakeSpraycanFull2": case "ShakeSpraycanFull3": case "ShakeSpraycanFull4": return Cue.CanShake; case "GrabToyTrain": case "DropToyTrain": return Cue.ToyTrain; case "DuckQuack": case "DropRubberDuck": return Cue.DuckQuack; case "ceilingFan": case "LargeFanRoom": return Cue.Fan; case "Fireplace": return Cue.AmbientFire; case "PlushieSqueeze": return Cue.Plushie; case "RecordScratch1": case "RecordScratch2": case "RecordPlayerJazz": return Cue.RecordPlayer; case "ToiletFlush": return Cue.Toilet; case "LightCandle": case "LightCandleBlow": case "CandleFlame": return Cue.Candle; case "ShowerOn": return Cue.Shower; case "MicrowaveWhir": return Cue.Microwave; case "MicrowaveOpen": case "MicrowaveClose": return Cue.MicrowaveDoor; case "JackOLanternHit": return Cue.Pumpkin; case "HangarDoorShut": case "HangarDoorOpen1": case "HangarDoorOpening": case "ShipDoorOpenPressurize": return Cue.ShipDoor; case "ShipTeleporterSpinInverse": return Cue.InverseTeleport; case "BigDoorOpen": case "BigDoorClose": return Cue.PressureDoor; case "GarageDoorMove": case "GarageDoorShut": case "GarageDoorShut2": case "GarageDoorSlide1": case "GarageDoorSlide2": case "GarageDoorSlide3": case "GarageDoorSlam": return Cue.ShutterDoor; case "DoorOpen1": case "DoorOpen2": case "OpenMineDoor1": case "OpenMineDoor2": case "OpenDoorWooden1": case "OpenDoorWooden2": case "OpenDoorWooden3": case "SteelDoorOpen1new": case "SteelDoorOpen2new": case "SteelDoorOpen3new": return Cue.DoorOpen; case "DoorClose1": case "DoorClose2": case "CloseMineDoor1": case "CloseMineDoor2": case "CloseDoorWooden1": case "CloseDoorWooden2": case "CloseDoorWooden3": case "SteelDoorClose1New": case "SteelDoorClose2new": return Cue.DoorClose; case "ShowerDoor1": case "ShowerDoor2": return Cue.Door; case "CupboardSlideIn": case "CupboardSlideIn2": case "CupboardSlideOut": case "CupboardSlideOut2": case "CupboardSlideOut3": return Cue.Cabinet; case "MineBeep": return Cue.MineBeep; case "MineTrigger": case "PressLandmine": return Cue.MinePress; case "CrushGore": return Cue.BodyCrush; case "ButlerStab1": case "KnifeStab": case "KnifeStab2": return Cue.KnifeAttack; case "WaterSplash1": case "WaterSplash2": case "WaterSplash3": case "WaterSplash4": case "WaterSplash5": case "WaterSplashSmall1": case "WaterSplashSmall2": case "WaterSplashSmall3": case "FallInWater": case "HitWater": case "MoveThroughWater": return Cue.WaterSplash; case "ChangeSuit": return Cue.SuitChange; case "PipeBurstBlowingSteam": return Cue.Steam; case "ElevatorRunningNoBass": case "MineshaftElevatorTravel": case "MineshaftElevatorStartUpward": case "MineshaftElevatorStartDownward": case "MineshaftElevatorFinish": return Cue.Elevator; case "ElevatorJingle": case "ElevatorJingle1": case "ElevatorJingle2": case "ElevatorJingle3": case "ElevatorJingle5": case "ElevatorJingle1Loop": case "ElevatorJingle2Loop": case "ElevatorJingle3Loop": case "ElevatorJingle5Loop": return Cue.ElevatorMusic; case "AirHorn1": case "AirHornFar": return Cue.AirHorn; case "ClownHorn1": case "ClownHornFar": return Cue.ClownHorn; case "CashRegisterDing": return Cue.CashRegister; case "BabyFootstep1": case "BabyFootstep2": case "BabyFootstep3": return Cue.SmallFootsteps; case "BareFootstep1": case "BareFootstep2": case "BareFootstep3": case "BareFootstep4": return Cue.BareFootsteps; case "BugWalk1": case "BugWalk2": case "BugWalk3": case "BugWalk4": return Cue.SkitterFootsteps; case "SkipWalk1": case "SkipWalk2": case "SkipWalk3": case "SkipWalk4": case "SkipWalk5": case "SkipWalk6": return Cue.SkippingFootsteps; case "BootStomp1": case "BootStomp2": case "BootStomp3": return Cue.BootFootsteps; case "JesterStomp1": case "JesterStomp2": case "JesterStomp3": return Cue.HeavyFootsteps; case "TurnCrank1": case "TurnCrank2": case "TurnCrank3": return Cue.MechanicalTurn; case "MetalSqueak1": case "MetalSqueak2": case "MetalSqueak3": case "MetalSqueak4": return Cue.MechanicalTurn; default: return Cue.Creature; } } } internal static class AudibilityMath { internal static bool DirectionKnown(float blend, bool radio, float horizontalSquared) { if (blend > 0.1f && !radio) { return horizontalSquared >= 0.0001f; } return false; } internal static float Linear(float distance, float min, float max) { if (!(max <= min)) { return Math.Max(0f, Math.Min(1f, (max - distance) / (max - min))); } if (!(distance <= min)) { return 0f; } return 1f; } internal static float Logarithmic(float distance, float min, float max) { return Math.Max(0.001f, min) / Math.Max(Math.Max(0.001f, min), Math.Min(distance, Math.Max(min, max))); } internal static float Gain(float sourceVolume, float oneShotScale, float spatialBlend, float distanceGain, float gameDecibels) { return Math.Max(0f, sourceVolume) * Math.Max(0f, oneShotScale) * (1f - spatialBlend + spatialBlend * Math.Max(0f, distanceGain)) * (float)Math.Pow(10.0, Math.Min(0f, gameDecibels) / 20f); } } internal enum Cue { Growl, Roar, Breathing, Lunge, Impact, Creature, Underground, GroundRumble, Emerge, GroundImpact, Music, BoxOpen, Screaming, MechanicalTurn, MechanicalAlert, Aim, Reload, Gunshot, Ricochet, GunClick, Footsteps, Crying, Clicking, Rustling, Transformation, Bite, Liquid, Heartbeat, March, Drum, Snip, Spring, Crack, Cling, Web, Chitter, Wings, Slime, Spray, Rattle, Sweeping, Buzz, Burst, TensionMusic, Flopping, Sliding, Spit, VisorHit, Whining, HeadRustling, Fire, Cackle, Electric, Broadcast, Launch, Explosion, Engine, Howl, Climbing, Scratch, Peck, BirdCall, DoorImpact, Alarm, WallRumble, Door, MaskSound, Laughter, HeavyFootsteps, NeckSnap, PipeFlow, PipeBurst, Steam, Jump, Landing, DoorOpen, DoorClose, OtherCling, OtherNeckSnap, MaskAttachLocal, MaskInfection, LocalMaskInfection, MaskLaugh, Voice, RadioVoice, GroundRadioVoice, ItemNoise, ItemDrop, SupplyLanding, VehicleDelivery, VehicleEngine, RadioSignal, Thunder, StaticWarning, BridgeCreak, BridgeCollapse, Horn, Jetpack, EquipmentWarning, BatteryWarning, PinPull, Ladder, ToolSwing, SprayPaint, Skidding, VehicleImpact, VehicleFire, RadioMusic, ItemMusic, Cushion, BuzzAlert, BuzzAttack, RadioRelay, Running, LadderClimb, LockPicking, Unlock, Vent, Charging, Elevator, Apparatus, Remote, Clock, Breaker, PowerHum, Terminal, SpikeSlam, SpikeCreak, Inhaling, Zap, ShipHum, ShipMechanism, Cabinet, Lever, WeedSpray, Flies, Teeth, Hairdryer, Phone, ToyRobot, EggCall, Crawling, Mechanism, VehicleInteraction, DragFootsteps, Injury, BodyImpact, Underwater, WorldHeartbeat, Environment, LightSwitch, Teleport, RadarPing, UiFeedback, UiWarning, EarRinging, PoisonFeedback, BackgroundMusic, Television, ItemPickup, AirHorn, ClownHorn, DuckQuack, CashRegister, GiftOpen, BagZip, FlashlightSwitch, SmallFootsteps, BareFootsteps, SkitterFootsteps, SkippingFootsteps, BootFootsteps, CreatureHit, CanShake, ToyTrain, LaserSwitch, KnifeAttack, SuitChange, SeatEject, BodyCrush, DeathSound, Fan, WaterSplash, RadarSwitch, PressureDoor, ShutterDoor, MineBeep, MinePress, Plushie, RecordPlayer, Toilet, Candle, Shower, Microwave, Pumpkin, InverseTeleport, ShipDoor, VehicleBoost, VehicleRefuel, AmbientFire, ElevatorMusic, BreakerDoor, BreakerSwitch, VehicleJump, CreatureAttack, CreatureDeath, TzpEmpty, TzpRelease, FurniturePlace, Fridge, MicrowaveDoor, ChairShock, ZedDog, Drowning, MudSink, ShipLanding, ShipTakeoff, EggCry, EggScream, EggBreak, DiscoMusic, CarHood, CabinetDoor, ShipTravel, ShipArrival, BloomBreath, BloomBurst, BloomChomp, BloomRoar, BloomTreatment, PlantGrowth, SporeCloud, BloomChestOpen, PlantClear, MeteorApproach, MeteorImpact, WolfCall, WolfGrowl, WolfSnarl, WolfTongue, WolfPull, WolfAttack, WolfHit, WolfDeath, WolfFootsteps, CruiserHood, CruiserDoor, CruiserRearDoor, CruiserIgnition, CruiserStarted, CruiserKey, DetailBaboonBirdAICackle, DetailBaboonBirdAICreatureAttack, DetailBaboonBirdAICreatureDeath, DetailBaboonBirdAICreatureHit, DetailBaboonBirdAIFootsteps, DetailBaboonBirdAIScreaming, DetailBlobAILiquid, DetailBlobAISlime, DetailButlerBeesEnemyAIBuzz, DetailButlerBeesEnemyAIElectric, DetailButlerEnemyAIBurst, DetailButlerEnemyAIBuzz, DetailButlerEnemyAIFootsteps, DetailButlerEnemyAIRustling, DetailButlerEnemyAISweeping, DetailButlerEnemyAIToolSwing, DetailCaveDwellerAIBite, DetailCaveDwellerAIBreathing, DetailCaveDwellerAIClicking, DetailCaveDwellerAICreatureDeath, DetailCaveDwellerAICrying, DetailCaveDwellerAIFootsteps, DetailCaveDwellerAIGrowl, DetailCaveDwellerAILiquid, DetailCaveDwellerAIRustling, DetailCaveDwellerAIScreaming, DetailCaveDwellerAISmallFootsteps, DetailCentipedeAICreatureDeath, DetailCentipedeAIFootsteps, DetailCentipedeAIImpact, DetailCentipedeAIScreaming, DetailClaySurgeonAIDrum, DetailClaySurgeonAIMarch, DetailClaySurgeonAISnip, DetailCrawlerAICreatureDeath, DetailCrawlerAICreatureHit, DetailCrawlerAIHeavyFootsteps, DetailCrawlerAIImpact, DetailCrawlerAIRoar, DetailDepositItemsDeskGroundRumble, DetailDocileLocustBeesAIBuzz, DetailDoublewingAIBirdCall, DetailDoublewingAICreatureDeath, DetailDoublewingAICreatureHit, DetailDoublewingAIImpact, DetailDoublewingAIWings, DetailDressGirlAIBreathing, DetailDressGirlAIFootsteps, DetailDressGirlAILaughter, DetailDressGirlAISkippingFootsteps, DetailFlowerSnakeEnemyLaughter, DetailFlowerSnakeEnemyLunge, DetailFlowerSnakeEnemyWings, DetailFlowermanAIFootsteps, DetailForestGiantAIBite, DetailForestGiantAICreatureHit, DetailForestGiantAIFire, DetailForestGiantAIGroundImpact, DetailForestGiantAIHeavyFootsteps, DetailForestGiantAIRoar, DetailGiantKiwiAIBirdCall, DetailGiantKiwiAIBreathing, DetailGiantKiwiAICreatureAttack, DetailGiantKiwiAICreatureDeath, DetailGiantKiwiAIDoorImpact, DetailGiantKiwiAIFootsteps, DetailGiantKiwiAIPeck, DetailHoarderBugAIChitter, DetailHoarderBugAICreatureDeath, DetailHoarderBugAIScreaming, DetailHoarderBugAISkitterFootsteps, DetailHoarderBugAIWings, DetailJesterAIHeavyFootsteps, DetailJesterAIMechanicalTurn, DetailJesterAIScreaming, DetailMouthDogAIBreathing, DetailMouthDogAIGrowl, DetailMouthDogAIHeavyFootsteps, DetailMouthDogAILunge, DetailNutcrackerEnemyAIBootFootsteps, DetailNutcrackerEnemyAICreatureHit, DetailNutcrackerEnemyAIGrowl, DetailNutcrackerEnemyAIImpact, DetailNutcrackerEnemyAIMechanicalAlert, DetailNutcrackerEnemyAIMechanicalTurn, DetailPufferAIChitter, DetailPufferAIImpact, DetailPufferAIRattle, DetailPufferAISpray, DetailPumaAIBreathing, DetailPumaAIClimbing, DetailPumaAICreatureDeath, DetailPumaAICreatureHit, DetailPumaAIFootsteps, DetailPumaAIGrowl, DetailPumaAIImpact, DetailPumaAIRustling, DetailPumaAIScratch, DetailPumaAIScreaming, DetailRadMechAIEngine, DetailRadMechAIExplosion, DetailRadMechAIFire, DetailRadMechAIHeavyFootsteps, DetailRadMechAIMechanicalAlert, DetailRedLocustBeesBuzz, DetailRedLocustBeesElectric, DetailSandSpiderAIBite, DetailSandSpiderAICreatureDeath, DetailSandSpiderAICreatureHit, DetailSandSpiderAIRustling, DetailSandSpiderAISkitterFootsteps, DetailSandWormAIEmerge, DetailSandWormAIGroundImpact, DetailSandWormAIGroundRumble, DetailSandWormAIRoar, DetailSandWormAIUnderground, DetailSnowmanSimpleAIImpact, DetailSnowmanSimpleAILaughter, DetailSpringManAIBareFootsteps, DetailSpringManAISpring, DetailStingrayAICreatureAttack, DetailStingrayAICreatureDeath, DetailStingrayAIFlopping, DetailStingrayAISliding, DetailStingrayAISpit, DetailStingrayAIWhining, SpringRetract, NutcrackerKick, NutcrackerFall, SlimeHit, PoolFloaty, VehicleRattle, CounterBell, CounterShutter, CounterGrab, CounterAttack, CounterWarning, CounterAmbience, CounterSnore, AccessHatch, WarehouseDoor } internal static class CueText { private static readonly string[] English = new string[20] { "Growling", "Roaring", "Heavy breathing", "Lunging sound", "Impact", "Creature sound", "Underground rumbling", "Loud ground rumbling", "Ground breaking", "Heavy ground impact", "Winding music", "Box bursting open", "Screaming", "Mechanical turning", "Mechanical sound", "Mechanical aiming sound", "Reloading", "Gunshot", "Ricochet", "Gun mechanism clicking" }; private static readonly string[] Chinese = new string[20] { "低吼声", "咆哮声", "急促呼吸声", "扑动声", "撞击声", "生物声", "地下轰鸣", "强烈地面隆响", "破土声", "沉重落地声", "上弦音乐", "箱体爆开声", "尖叫声", "机械转动声", "机械声", "机械瞄准声", "装填声", "枪声", "跳弹声", "枪械咔嗒声" }; private static readonly string[] DirectionsEn = new string[8] { "Front", "Front-right", "Right", "Back-right", "Behind", "Back-left", "Left", "Front-left" }; private static readonly string[] DirectionsZh = new string[8] { "前方", "右前方", "右侧", "右后方", "后方", "左后方", "左侧", "左前方" }; internal static string Name(Cue cue, bool chinese) { object obj = CreatureSoundCatalog.Label(cue, chinese); if (obj == null) { if ((int)cue >= English.Length) { return ExtendedCueText.Name(cue, chinese); } obj = (chinese ? Chinese : English)[(int)cue]; } return (string)obj; } internal static string Direction(int direction, bool chinese) { if (direction >= 0) { return (chinese ? DirectionsZh : DirectionsEn)[direction]; } if (!chinese) { return "Direction unclear"; } return "方位不明"; } internal static int DirectionIndex(float angle) { return (int)Math.Floor(((angle % 360f + 360f) % 360f + 22.5f) / 45f) % 8; } internal static int Priority(Cue cue) { return cue switch { Cue.CounterWarning => 2, Cue.CounterAttack => 3, _ => BasePriority(CreatureSoundCatalog.Basis(cue)), }; } private static int BasePriority(Cue cue) { bool flag; switch (cue) { case Cue.Roar: case Cue.GroundRumble: case Cue.BoxOpen: case Cue.Aim: case Cue.Gunshot: case Cue.Transformation: case Cue.Cling: case Cue.VisorHit: case Cue.Launch: case Cue.Explosion: case Cue.DoorImpact: case Cue.Alarm: case Cue.NeckSnap: case Cue.PipeBurst: case Cue.OtherCling: case Cue.OtherNeckSnap: case Cue.MaskInfection: case Cue.LocalMaskInfection: case Cue.StaticWarning: case Cue.BridgeCollapse: case Cue.EquipmentWarning: case Cue.VehicleFire: case Cue.BuzzAttack: case Cue.SpikeSlam: case Cue.Injury: case Cue.UiWarning: case Cue.PoisonFeedback: case Cue.BodyCrush: case Cue.DeathSound: case Cue.MinePress: case Cue.ChairShock: case Cue.Drowning: case Cue.EggScream: case Cue.BloomBurst: case Cue.BloomChomp: case Cue.BloomChestOpen: case Cue.MeteorImpact: case Cue.WolfTongue: case Cue.WolfPull: case Cue.WolfAttack: case Cue.NutcrackerKick: flag = true; break; default: flag = false; break; } if (flag) { return 3; } bool flag2; switch (cue) { case Cue.Growl: case Cue.Underground: case Cue.Music: case Cue.Screaming: case Cue.Reload: case Cue.Crying: case Cue.Bite: case Cue.Heartbeat: case Cue.Drum: case Cue.Snip: case Cue.TensionMusic: case Cue.Spit: case Cue.HeadRustling: case Cue.Fire: case Cue.Electric: case Cue.MaskSound: case Cue.HeavyFootsteps: case Cue.Steam: case Cue.Voice: case Cue.RadioVoice: case Cue.GroundRadioVoice: case Cue.SupplyLanding: case Cue.VehicleDelivery: case Cue.BridgeCreak: case Cue.BatteryWarning: case Cue.PinPull: case Cue.VehicleImpact: case Cue.BuzzAlert: case Cue.RadioRelay: case Cue.Running: case Cue.SpikeCreak: case Cue.Zap: case Cue.DragFootsteps: case Cue.BootFootsteps: case Cue.CreatureHit: case Cue.KnifeAttack: case Cue.SeatEject: case Cue.MineBeep: case Cue.VehicleBoost: case Cue.VehicleJump: case Cue.CreatureAttack: case Cue.MudSink: case Cue.EggCry: case Cue.BloomRoar: case Cue.PlantGrowth: case Cue.SporeCloud: case Cue.MeteorApproach: case Cue.WolfGrowl: case Cue.WolfSnarl: case Cue.WolfHit: case Cue.SlimeHit: flag2 = true; break; default: flag2 = false; break; } return (!flag2) ? 1 : 2; } } internal sealed class CaptionBuffer { internal sealed class Entry { internal int Source; internal Cue Cue; internal float LastHeard; internal float FirstHeard; internal int Direction; internal bool Spatial; internal bool Live; internal bool Continuous; internal bool LocalMovement; internal bool Fallback; internal string Speaker = ""; } private readonly List entries = new List(); private readonly List visible = new List(); private readonly StringBuilder text = new StringBuilder(); internal int Count => entries.Count; internal int Omitted { get; private set; } internal void BeginFrame() { foreach (Entry entry in entries) { entry.Live = false; } } internal void Observe(int source, Cue cue, float now, int direction, bool spatial, bool continuous, bool localMovement = false, string speaker = "", bool captionFallback = false) { Cue cue2 = CreatureSoundCatalog.Basis(cue); if ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false) { foreach (Entry entry2 in entries) { if (entry2.Source == source && entry2.Cue == Cue.DragFootsteps && now - entry2.LastHeard < 0.85f) { return; } } } cue2 = CreatureSoundCatalog.Basis(cue); if ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false) { for (int num = entries.Count - 1; num >= 0; num--) { bool flag = entries[num].Source == source && CreatureSoundCatalog.Basis(entries[num].Cue) != CreatureSoundCatalog.Basis(cue); if (flag) { cue2 = CreatureSoundCatalog.Basis(entries[num].Cue); bool flag2 = ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false); flag = flag2; } if (flag) { entries.RemoveAt(num); } } } if (cue == Cue.DragFootsteps) { for (int num2 = entries.Count - 1; num2 >= 0; num2--) { bool flag = entries[num2].Source == source; if (flag) { cue2 = CreatureSoundCatalog.Basis(entries[num2].Cue); bool flag2 = ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false); flag = flag2; } if (flag) { entries.RemoveAt(num2); } } } Entry entry = null; foreach (Entry entry3 in entries) { if (entry3.Source == source && CreatureSoundCatalog.Basis(entry3.Cue) == CreatureSoundCatalog.Basis(cue)) { entry = entry3; break; } } if (entry == null) { if (entries.Count >= 64) { int index = 0; for (int i = 1; i < entries.Count; i++) { if (CueText.Priority(entries[i].Cue) < CueText.Priority(entries[index].Cue) || (CueText.Priority(entries[i].Cue) == CueText.Priority(entries[index].Cue) && entries[i].LastHeard < entries[index].LastHeard)) { index = i; } } if (CueText.Priority(entries[index].Cue) > CueText.Priority(cue)) { return; } entries.RemoveAt(index); } entry = new Entry { Source = source, Cue = cue, FirstHeard = now }; entries.Add(entry); } entry.Cue = EventIdentity.Display(entry.Cue, cue, now - entry.LastHeard); entry.LastHeard = now; entry.Direction = direction; entry.Spatial = spatial; entry.Continuous = continuous; entry.Live = true; entry.LocalMovement = localMovement; entry.Fallback = captionFallback; entry.Speaker = speaker; } internal string Compose(float now, float holdSeconds, int maxRows, bool chinese, bool directions, bool compact = false) { entries.RemoveAll((Entry e) => now - e.LastHeard > holdSeconds); visible.Clear(); foreach (Entry entry3 in entries) { bool flag = now - entry3.LastHeard > 0.65f; if (flag) { bool flag2; switch (CreatureSoundCatalog.Basis(entry3.Cue)) { case Cue.Footsteps: case Cue.Jump: case Cue.Landing: case Cue.Voice: case Cue.RadioVoice: case Cue.GroundRadioVoice: case Cue.Running: case Cue.LadderClimb: case Cue.Clock: flag2 = true; break; default: flag2 = false; break; } flag = flag2; } if (flag || (compact && ((!entry3.Fallback && !CuePresentation.Caption(entry3.Cue, entry3.LocalMovement)) || (now - entry3.LastHeard > 0.65f && CueText.Priority(entry3.Cue) < 2)))) { continue; } bool flag3 = false; if (compact) { for (int num = 0; num < visible.Count; num++) { if (visible[num].Cue == entry3.Cue && visible[num].Speaker == entry3.Speaker) { Entry entry = visible[num]; if ((entry3.Live && !entry.Live) || (entry3.Live == entry.Live && entry3.LastHeard > entry.LastHeard)) { visible[num] = entry3; } flag3 = true; break; } } } if (!flag3) { visible.Add(entry3); } } visible.Sort(delegate(Entry a, Entry b) { int num8 = CueText.Priority(b.Cue).CompareTo(CueText.Priority(a.Cue)); return (num8 == 0) ? a.FirstHeard.CompareTo(b.FirstHeard) : num8; }); maxRows = DisplayCapacity.Resolve(maxRows, visible.Count); Omitted = Math.Max(0, visible.Count - maxRows); text.Clear(); for (int num2 = 0; num2 < Math.Min(maxRows, visible.Count); num2++) { int num3 = num2; int num4 = num2 + 1; int num5 = CueText.Priority(visible[num2].Cue); while (num3 > 0 && CueText.Priority(visible[num3 - 1].Cue) == num5) { num3--; } for (; num4 < visible.Count && CueText.Priority(visible[num4].Cue) == num5; num4++) { } int num6 = num4 - num3; int num7 = ((num4 > maxRows) ? ((int)(Math.Max(0.0, now) / 3.0 % (double)num6)) : 0); Entry entry2 = visible[num3 + (num2 - num3 + num7) % num6]; if (num2 != 0) { text.Append('\n'); } if (!entry2.LocalMovement && directions && entry2.Spatial) { text.Append(CueText.Direction(entry2.Direction, chinese)).Append(" · "); } if (entry2.Speaker.Length > 0) { text.Append(entry2.Speaker).Append(chinese ? ":" : ": "); } text.Append(CueText.Name(entry2.Cue, chinese)); } return text.ToString(); } internal void Clear() { entries.Clear(); visible.Clear(); Omitted = 0; } } internal enum CaptionDisplayMode { Disabled, WaitingForPlayer, Dead, Menu, HiddenHud, Idle, Preview, Startup, Live } internal static class CaptionDisplayPolicy { internal static CaptionDisplayMode Select(bool enabled, bool playerReady, bool dead, bool menuOpen, bool hudHidden, bool preview, bool hasCaptions, bool startup) { if (!enabled) { return CaptionDisplayMode.Disabled; } if (!playerReady) { return CaptionDisplayMode.WaitingForPlayer; } if (dead) { return CaptionDisplayMode.Dead; } if (menuOpen) { return CaptionDisplayMode.Menu; } if (hasCaptions && !hudHidden) { return CaptionDisplayMode.Live; } if (preview) { return CaptionDisplayMode.Preview; } if (hudHidden) { return CaptionDisplayMode.HiddenHud; } if (!startup) { return CaptionDisplayMode.Idle; } return CaptionDisplayMode.Startup; } } internal static class CompanySoundRules { internal static Cue Resolve(string clip, bool counter, bool hatch, bool warehouse) { switch (clip) { case "BellDinger": return Cue.CounterBell; case "SmallHatchDoorOpen": case "DoorShut": if (counter) { return Cue.CounterShutter; } break; case "TakeItems1": case "TakeItems2": case "TakeItems3": if (counter) { return Cue.CounterGrab; } break; case "TentaclesAttack": case "WallRumbleVoice": if (counter) { return Cue.CounterAttack; } break; case "WallRumble": case "AngerAtDesk": case "AngerAtDesk2": if (counter) { return Cue.CounterWarning; } break; case "CalmBehindDoor": case "DangerousMoodAmbience": if (counter) { return Cue.CounterAmbience; } break; case "Snoring": if (counter) { return Cue.CounterSnore; } break; case "MetalHatchClose": case "MetalHatchOpen": if (hatch) { return Cue.AccessHatch; } break; case "GarageDoorShut2": case "BigDoorOpen": case "BigDoorClose": case "GarageDoorShut": case "GarageDoorMove": if (warehouse) { return Cue.WarehouseDoor; } break; } return Cue.Creature; } internal static bool DoorClip(string clip) { switch (clip) { case "GarageDoorMove": case "MetalHatchOpen": case "GarageDoorShut": case "GarageDoorShut2": case "MetalHatchClose": case "BigDoorOpen": case "BigDoorClose": return true; default: return false; } } } internal enum CreatureShape { None, MouthDogAI, SandWormAI, JesterAI, NutcrackerEnemyAI, CaveDwellerAI, DressGirlAI, ClaySurgeonAI, SpringManAI, FlowermanAI, CrawlerAI, CentipedeAI, SandSpiderAI, HoarderBugAI, BlobAI, PufferAI, ButlerEnemyAI, ButlerBeesEnemyAI, StingrayAI, ForestGiantAI, BaboonBirdAI, RedLocustBees, RadMechAI, PumaAI, GiantKiwiAI, FlowerSnakeEnemy, DoublewingAI, DocileLocustBeesAI, DepositItemsDesk, SnowmanSimpleAI } internal static class CreatureSoundCatalog { private readonly struct Detail { internal readonly Cue Basis; internal readonly CreatureShape Shape; internal readonly string Zh; internal readonly string En; internal Detail(Cue basis, CreatureShape shape, string zh, string en) { Basis = basis; Shape = shape; Zh = zh; En = en; } } private static readonly Detail[] details = new Detail[126] { new Detail(Cue.Cackle, CreatureShape.BaboonBirdAI, "咯咯叫声", "Cackling"), new Detail(Cue.CreatureAttack, CreatureShape.BaboonBirdAI, "攻击声", "Attack sound"), new Detail(Cue.CreatureDeath, CreatureShape.BaboonBirdAI, "倒下声", "Falling sound"), new Detail(Cue.CreatureHit, CreatureShape.BaboonBirdAI, "受击声", "Hit sound"), new Detail(Cue.Footsteps, CreatureShape.BaboonBirdAI, "脚步声", "Footsteps"), new Detail(Cue.Screaming, CreatureShape.BaboonBirdAI, "尖叫声", "Screaming"), new Detail(Cue.Liquid, CreatureShape.BlobAI, "液体声", "Liquid sound"), new Detail(Cue.Slime, CreatureShape.BlobAI, "黏液蠕动声", "Sloshing"), new Detail(Cue.Buzz, CreatureShape.ButlerBeesEnemyAI, "嗡鸣声", "Buzzing"), new Detail(Cue.Electric, CreatureShape.ButlerBeesEnemyAI, "电击声", "Electrical crackle"), new Detail(Cue.Burst, CreatureShape.ButlerEnemyAI, "爆裂声", "Bursting"), new Detail(Cue.Buzz, CreatureShape.ButlerEnemyAI, "嗡鸣声", "Buzzing"), new Detail(Cue.Footsteps, CreatureShape.ButlerEnemyAI, "脚步声", "Footsteps"), new Detail(Cue.Rustling, CreatureShape.ButlerEnemyAI, "窸窣声", "Rustling"), new Detail(Cue.Sweeping, CreatureShape.ButlerEnemyAI, "扫地声", "Sweeping"), new Detail(Cue.ToolSwing, CreatureShape.ButlerEnemyAI, "工具挥动声", "Tool swinging"), new Detail(Cue.Bite, CreatureShape.CaveDwellerAI, "撕咬声", "Biting sound"), new Detail(Cue.Breathing, CreatureShape.CaveDwellerAI, "急促呼吸声", "Heavy breathing"), new Detail(Cue.Clicking, CreatureShape.CaveDwellerAI, "咔嗒声", "Clicking"), new Detail(Cue.CreatureDeath, CreatureShape.CaveDwellerAI, "倒下声", "Falling sound"), new Detail(Cue.Crying, CreatureShape.CaveDwellerAI, "哭声", "Crying"), new Detail(Cue.Footsteps, CreatureShape.CaveDwellerAI, "脚步声", "Footsteps"), new Detail(Cue.Growl, CreatureShape.CaveDwellerAI, "低吼声", "Growling"), new Detail(Cue.Liquid, CreatureShape.CaveDwellerAI, "液体声", "Liquid sound"), new Detail(Cue.Rustling, CreatureShape.CaveDwellerAI, "窸窣声", "Rustling"), new Detail(Cue.Screaming, CreatureShape.CaveDwellerAI, "尖叫声", "Screaming"), new Detail(Cue.SmallFootsteps, CreatureShape.CaveDwellerAI, "细小脚步声", "Tiny footsteps"), new Detail(Cue.CreatureDeath, CreatureShape.CentipedeAI, "倒下声", "Falling sound"), new Detail(Cue.Footsteps, CreatureShape.CentipedeAI, "脚步声", "Footsteps"), new Detail(Cue.Impact, CreatureShape.CentipedeAI, "撞击声", "Impact"), new Detail(Cue.Screaming, CreatureShape.CentipedeAI, "尖叫声", "Screaming"), new Detail(Cue.Drum, CreatureShape.ClaySurgeonAI, "鼓声", "Drumming"), new Detail(Cue.March, CreatureShape.ClaySurgeonAI, "行进音乐", "Marching music"), new Detail(Cue.Snip, CreatureShape.ClaySurgeonAI, "剪切声", "Snipping"), new Detail(Cue.CreatureDeath, CreatureShape.CrawlerAI, "倒下声", "Falling sound"), new Detail(Cue.CreatureHit, CreatureShape.CrawlerAI, "受击声", "Hit sound"), new Detail(Cue.HeavyFootsteps, CreatureShape.CrawlerAI, "沉重脚步声", "Heavy footsteps"), new Detail(Cue.Impact, CreatureShape.CrawlerAI, "撞击声", "Impact"), new Detail(Cue.Roar, CreatureShape.CrawlerAI, "咆哮声", "Roaring"), new Detail(Cue.GroundRumble, CreatureShape.DepositItemsDesk, "强烈地面隆响", "Loud ground rumbling"), new Detail(Cue.Buzz, CreatureShape.DocileLocustBeesAI, "嗡鸣声", "Buzzing"), new Detail(Cue.BirdCall, CreatureShape.DoublewingAI, "鸣叫声", "Calling"), new Detail(Cue.CreatureDeath, CreatureShape.DoublewingAI, "倒下声", "Falling sound"), new Detail(Cue.CreatureHit, CreatureShape.DoublewingAI, "受击声", "Hit sound"), new Detail(Cue.Impact, CreatureShape.DoublewingAI, "撞击声", "Impact"), new Detail(Cue.Wings, CreatureShape.DoublewingAI, "振翅声", "Wings flapping"), new Detail(Cue.Breathing, CreatureShape.DressGirlAI, "急促呼吸声", "Heavy breathing"), new Detail(Cue.Footsteps, CreatureShape.DressGirlAI, "脚步声", "Footsteps"), new Detail(Cue.Laughter, CreatureShape.DressGirlAI, "笑声", "Laughter"), new Detail(Cue.SkippingFootsteps, CreatureShape.DressGirlAI, "跳步声", "Skipping footsteps"), new Detail(Cue.Laughter, CreatureShape.FlowerSnakeEnemy, "笑声", "Laughter"), new Detail(Cue.Lunge, CreatureShape.FlowerSnakeEnemy, "扑动声", "Lunging sound"), new Detail(Cue.Wings, CreatureShape.FlowerSnakeEnemy, "振翅声", "Wings flapping"), new Detail(Cue.Footsteps, CreatureShape.FlowermanAI, "脚步声", "Footsteps"), new Detail(Cue.Bite, CreatureShape.ForestGiantAI, "撕咬声", "Biting sound"), new Detail(Cue.CreatureHit, CreatureShape.ForestGiantAI, "受击声", "Hit sound"), new Detail(Cue.Fire, CreatureShape.ForestGiantAI, "火焰声", "Flames"), new Detail(Cue.GroundImpact, CreatureShape.ForestGiantAI, "沉重落地声", "Heavy ground impact"), new Detail(Cue.HeavyFootsteps, CreatureShape.ForestGiantAI, "沉重脚步声", "Heavy footsteps"), new Detail(Cue.Roar, CreatureShape.ForestGiantAI, "咆哮声", "Roaring"), new Detail(Cue.BirdCall, CreatureShape.GiantKiwiAI, "鸣叫声", "Calling"), new Detail(Cue.Breathing, CreatureShape.GiantKiwiAI, "急促呼吸声", "Heavy breathing"), new Detail(Cue.CreatureAttack, CreatureShape.GiantKiwiAI, "攻击声", "Attack sound"), new Detail(Cue.CreatureDeath, CreatureShape.GiantKiwiAI, "倒下声", "Falling sound"), new Detail(Cue.DoorImpact, CreatureShape.GiantKiwiAI, "撞门声", "Door pounding"), new Detail(Cue.Footsteps, CreatureShape.GiantKiwiAI, "脚步声", "Footsteps"), new Detail(Cue.Peck, CreatureShape.GiantKiwiAI, "啄击声", "Pecking"), new Detail(Cue.Chitter, CreatureShape.HoarderBugAI, "吱叫声", "Chittering"), new Detail(Cue.CreatureDeath, CreatureShape.HoarderBugAI, "倒下声", "Falling sound"), new Detail(Cue.Screaming, CreatureShape.HoarderBugAI, "尖叫声", "Screaming"), new Detail(Cue.SkitterFootsteps, CreatureShape.HoarderBugAI, "密集脚步声", "Skittering footsteps"), new Detail(Cue.Wings, CreatureShape.HoarderBugAI, "振翅声", "Wings flapping"), new Detail(Cue.HeavyFootsteps, CreatureShape.JesterAI, "沉重脚步声", "Heavy footsteps"), new Detail(Cue.MechanicalTurn, CreatureShape.JesterAI, "机械转动声", "Mechanical turning"), new Detail(Cue.Screaming, CreatureShape.JesterAI, "尖叫声", "Screaming"), new Detail(Cue.Breathing, CreatureShape.MouthDogAI, "急促呼吸声", "Heavy breathing"), new Detail(Cue.Growl, CreatureShape.MouthDogAI, "低吼声", "Growling"), new Detail(Cue.HeavyFootsteps, CreatureShape.MouthDogAI, "沉重脚步声", "Heavy footsteps"), new Detail(Cue.Lunge, CreatureShape.MouthDogAI, "扑动声", "Lunging sound"), new Detail(Cue.BootFootsteps, CreatureShape.NutcrackerEnemyAI, "靴子踏步声", "Boot stomps"), new Detail(Cue.CreatureHit, CreatureShape.NutcrackerEnemyAI, "受击声", "Hit sound"), new Detail(Cue.Growl, CreatureShape.NutcrackerEnemyAI, "低吼声", "Growling"), new Detail(Cue.Impact, CreatureShape.NutcrackerEnemyAI, "撞击声", "Impact"), new Detail(Cue.MechanicalAlert, CreatureShape.NutcrackerEnemyAI, "机械声", "Mechanical sound"), new Detail(Cue.MechanicalTurn, CreatureShape.NutcrackerEnemyAI, "机械转动声", "Mechanical turning"), new Detail(Cue.Chitter, CreatureShape.PufferAI, "吱叫声", "Chittering"), new Detail(Cue.Impact, CreatureShape.PufferAI, "撞击声", "Impact"), new Detail(Cue.Rattle, CreatureShape.PufferAI, "沙沙响声", "Rattling"), new Detail(Cue.Spray, CreatureShape.PufferAI, "喷气声", "Puffing"), new Detail(Cue.Breathing, CreatureShape.PumaAI, "急促呼吸声", "Heavy breathing"), new Detail(Cue.Climbing, CreatureShape.PumaAI, "攀爬摩擦声", "Climbing rustle"), new Detail(Cue.CreatureDeath, CreatureShape.PumaAI, "倒下声", "Falling sound"), new Detail(Cue.CreatureHit, CreatureShape.PumaAI, "受击声", "Hit sound"), new Detail(Cue.Footsteps, CreatureShape.PumaAI, "脚步声", "Footsteps"), new Detail(Cue.Growl, CreatureShape.PumaAI, "低吼声", "Growling"), new Detail(Cue.Impact, CreatureShape.PumaAI, "撞击声", "Impact"), new Detail(Cue.Rustling, CreatureShape.PumaAI, "窸窣声", "Rustling"), new Detail(Cue.Scratch, CreatureShape.PumaAI, "抓挠声", "Scratching"), new Detail(Cue.Screaming, CreatureShape.PumaAI, "尖叫声", "Screaming"), new Detail(Cue.Engine, CreatureShape.RadMechAI, "引擎声", "Engine"), new Detail(Cue.Explosion, CreatureShape.RadMechAI, "爆炸声", "Explosion"), new Detail(Cue.Fire, CreatureShape.RadMechAI, "火焰声", "Flames"), new Detail(Cue.HeavyFootsteps, CreatureShape.RadMechAI, "沉重脚步声", "Heavy footsteps"), new Detail(Cue.MechanicalAlert, CreatureShape.RadMechAI, "机械声", "Mechanical sound"), new Detail(Cue.Buzz, CreatureShape.RedLocustBees, "嗡鸣声", "Buzzing"), new Detail(Cue.Electric, CreatureShape.RedLocustBees, "电击声", "Electrical crackle"), new Detail(Cue.Bite, CreatureShape.SandSpiderAI, "撕咬声", "Biting sound"), new Detail(Cue.CreatureDeath, CreatureShape.SandSpiderAI, "倒下声", "Falling sound"), new Detail(Cue.CreatureHit, CreatureShape.SandSpiderAI, "受击声", "Hit sound"), new Detail(Cue.Rustling, CreatureShape.SandSpiderAI, "窸窣声", "Rustling"), new Detail(Cue.SkitterFootsteps, CreatureShape.SandSpiderAI, "密集脚步声", "Skittering footsteps"), new Detail(Cue.Emerge, CreatureShape.SandWormAI, "破土声", "Ground breaking"), new Detail(Cue.GroundImpact, CreatureShape.SandWormAI, "沉重落地声", "Heavy ground impact"), new Detail(Cue.GroundRumble, CreatureShape.SandWormAI, "强烈地面隆响", "Loud ground rumbling"), new Detail(Cue.Roar, CreatureShape.SandWormAI, "咆哮声", "Roaring"), new Detail(Cue.Underground, CreatureShape.SandWormAI, "地下轰鸣", "Underground rumbling"), new Detail(Cue.Impact, CreatureShape.SnowmanSimpleAI, "撞击声", "Impact"), new Detail(Cue.Laughter, CreatureShape.SnowmanSimpleAI, "笑声", "Laughter"), new Detail(Cue.BareFootsteps, CreatureShape.SpringManAI, "赤足拍地声", "Barefoot slaps"), new Detail(Cue.Spring, CreatureShape.SpringManAI, "弹簧响声", "Spring rattling"), new Detail(Cue.CreatureAttack, CreatureShape.StingrayAI, "攻击声", "Attack sound"), new Detail(Cue.CreatureDeath, CreatureShape.StingrayAI, "倒下声", "Falling sound"), new Detail(Cue.Flopping, CreatureShape.StingrayAI, "扑动声", "Flopping"), new Detail(Cue.Sliding, CreatureShape.StingrayAI, "滑动声", "Sliding"), new Detail(Cue.Spit, CreatureShape.StingrayAI, "喷吐声", "Spitting"), new Detail(Cue.Whining, CreatureShape.StingrayAI, "哀鸣声", "Whining") }; internal const int First = 251; internal const int Count = 126; private static readonly Dictionary variants = new Dictionary(StringComparer.Ordinal) { ["Breathe1"] = Cue.DetailMouthDogAIBreathing, ["Lunge1"] = Cue.DetailMouthDogAILunge, ["Stomp1double"] = Cue.DetailMouthDogAIHeavyFootsteps, ["Stomp2double"] = Cue.DetailMouthDogAIHeavyFootsteps, ["Stomp3double"] = Cue.DetailMouthDogAIHeavyFootsteps, ["growl"] = Cue.DetailMouthDogAIGrowl, ["BurrowingGrowl1"] = Cue.DetailSandWormAIGroundRumble, ["BurrowingRumble1"] = Cue.DetailSandWormAIUnderground, ["BurrowingRumble2"] = Cue.DetailSandWormAIUnderground, ["BurrowingRumble3"] = Cue.DetailSandWormAIUnderground, ["BurrowingRumbleLoud1"] = Cue.DetailSandWormAIGroundRumble, ["EmergeFromGround1"] = Cue.DetailSandWormAIEmerge, ["SandWormRoar"] = Cue.DetailSandWormAIRoar, ["SandWormRoar2"] = Cue.DetailSandWormAIRoar, ["TunnelIntoGround1"] = Cue.DetailSandWormAIGroundImpact, ["JesterStomp1"] = Cue.DetailJesterAIHeavyFootsteps, ["JesterStomp2"] = Cue.DetailJesterAIHeavyFootsteps, ["JesterStomp3"] = Cue.DetailJesterAIHeavyFootsteps, ["Scream1"] = Cue.DetailJesterAIScreaming, ["TurnCrank1"] = Cue.DetailJesterAIMechanicalTurn, ["TurnCrank2"] = Cue.DetailJesterAIMechanicalTurn, ["TurnCrank3"] = Cue.DetailJesterAIMechanicalTurn, ["BootStomp1"] = Cue.DetailNutcrackerEnemyAIBootFootsteps, ["BootStomp2"] = Cue.DetailNutcrackerEnemyAIBootFootsteps, ["BootStomp3"] = Cue.DetailNutcrackerEnemyAIBootFootsteps, ["HeadGoUp"] = Cue.DetailNutcrackerEnemyAIMechanicalAlert, ["Kick"] = Cue.DetailNutcrackerEnemyAIImpact, ["MetalSqueak1"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["MetalSqueak2"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["MetalSqueak3"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["MetalSqueak4"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["NutcrackerAngry"] = Cue.DetailNutcrackerEnemyAIGrowl, ["NutcrackerHitEye"] = Cue.DetailNutcrackerEnemyAICreatureHit, ["NutcrackerTurn"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["StopTurning1"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["StopTurning2"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["StopTurning3"] = Cue.DetailNutcrackerEnemyAIMechanicalTurn, ["BabyCry4"] = Cue.DetailCaveDwellerAICrying, ["BabyCry5b"] = Cue.DetailCaveDwellerAICrying, ["BabyCryFake"] = Cue.DetailCaveDwellerAICrying, ["BabyCryFake2"] = Cue.DetailCaveDwellerAICrying, ["BabyFootstep1"] = Cue.DetailCaveDwellerAISmallFootsteps, ["BabyFootstep2"] = Cue.DetailCaveDwellerAISmallFootsteps, ["BabyFootstep3"] = Cue.DetailCaveDwellerAISmallFootsteps, ["BabyPuke"] = Cue.DetailCaveDwellerAILiquid, ["BabySquirm"] = Cue.DetailCaveDwellerAIRustling, ["Buzzing 1"] = Cue.DetailCaveDwellerAIClicking, ["CaveDwellerAdultMove"] = Cue.DetailCaveDwellerAIFootsteps, ["CaveDwellerInhale"] = Cue.DetailCaveDwellerAIGrowl, ["ClickingMandibles"] = Cue.DetailCaveDwellerAIClicking, ["CooldownBreathing"] = Cue.DetailCaveDwellerAIBreathing, ["EatScrap"] = Cue.DetailCaveDwellerAIBite, ["KillCaveDweller"] = Cue.DetailCaveDwellerAICreatureDeath, ["LeapScreamV2"] = Cue.DetailCaveDwellerAIScreaming, ["Breath1"] = Cue.DetailDressGirlAIBreathing, ["Breath2"] = Cue.DetailDressGirlAIBreathing, ["Breath3"] = Cue.DetailDressGirlAIBreathing, ["Breathing"] = Cue.DetailDressGirlAIBreathing, ["Laugh2"] = Cue.DetailDressGirlAILaughter, ["SkipWalk"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk1"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk2"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk3"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk4"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk5"] = Cue.DetailDressGirlAISkippingFootsteps, ["SkipWalk6"] = Cue.DetailDressGirlAISkippingFootsteps, ["Stepping1"] = Cue.DetailDressGirlAIFootsteps, ["Wheeze"] = Cue.DetailDressGirlAIBreathing, ["ParadeMarch1"] = Cue.DetailClaySurgeonAIMarch, ["ParadeMarch2"] = Cue.DetailClaySurgeonAIMarch, ["ParadeMarch3"] = Cue.DetailClaySurgeonAIMarch, ["ParadeMarch4"] = Cue.DetailClaySurgeonAIMarch, ["ParadeMarch5"] = Cue.DetailClaySurgeonAIMarch, ["ScissorsSnip"] = Cue.DetailClaySurgeonAISnip, ["SnareBuildup"] = Cue.DetailClaySurgeonAIDrum, ["BareFootstep2"] = Cue.DetailSpringManAIBareFootsteps, ["BareFootstep3"] = Cue.DetailSpringManAIBareFootsteps, ["BareFootstep4"] = Cue.DetailSpringManAIBareFootsteps, ["EnterCooldown"] = Cue.DetailSpringManAISpring, ["Spring1"] = Cue.DetailSpringManAISpring, ["Spring2"] = Cue.DetailSpringManAISpring, ["Spring3"] = Cue.DetailSpringManAISpring, ["SpringWobble1"] = Cue.DetailSpringManAISpring, ["SpringWobble2"] = Cue.DetailSpringManAISpring, ["Rustle1"] = Cue.DetailFlowermanAIFootsteps, ["Rustle2"] = Cue.DetailFlowermanAIFootsteps, ["Rustle3"] = Cue.DetailFlowermanAIFootsteps, ["Rustle4"] = Cue.DetailFlowermanAIFootsteps, ["CrawlerDie"] = Cue.DetailCrawlerAICreatureDeath, ["HitCrawler"] = Cue.DetailCrawlerAICreatureHit, ["HitCrawler2"] = Cue.DetailCrawlerAICreatureHit, ["LongRoar1"] = Cue.DetailCrawlerAIRoar, ["LongRoar2"] = Cue.DetailCrawlerAIRoar, ["LongRoar3"] = Cue.DetailCrawlerAIRoar, ["Ram1"] = Cue.DetailCrawlerAIImpact, ["Ram2"] = Cue.DetailCrawlerAIImpact, ["Ram3"] = Cue.DetailCrawlerAIImpact, ["ShortRoar1"] = Cue.DetailCrawlerAIRoar, ["Stomp1"] = Cue.DetailCrawlerAIHeavyFootsteps, ["Stomp2"] = Cue.DetailCrawlerAIHeavyFootsteps, ["Stomp3"] = Cue.DetailCrawlerAIHeavyFootsteps, ["StunCrawler"] = Cue.DetailCrawlerAICreatureHit, ["CentipedeWalk"] = Cue.DetailCentipedeAIFootsteps, ["DeathShriek"] = Cue.DetailCentipedeAICreatureDeath, ["Shriek1"] = Cue.DetailCentipedeAIScreaming, ["Shriek2"] = Cue.DetailCentipedeAIScreaming, ["SlamGround"] = Cue.DetailCentipedeAIImpact, ["monsterNoise"] = Cue.DetailCentipedeAIScreaming, ["monsterNoise2"] = Cue.DetailCentipedeAIScreaming, ["monsterNoiseB"] = Cue.DetailCentipedeAIScreaming, ["HangPlayerOnCeiling"] = Cue.DetailSandSpiderAIRustling, ["SpiderAttack"] = Cue.DetailSandSpiderAIBite, ["SpiderDie"] = Cue.DetailSandSpiderAICreatureDeath, ["SpiderHit"] = Cue.DetailSandSpiderAICreatureHit, ["SpoolPlayerInWeb"] = Cue.DetailSandSpiderAIRustling, ["Step5"] = Cue.DetailSandSpiderAISkitterFootsteps, ["Step6"] = Cue.DetailSandSpiderAISkitterFootsteps, ["StunSpider"] = Cue.DetailSandSpiderAICreatureHit, ["Angry"] = Cue.DetailHoarderBugAIChitter, ["AngryScreech"] = Cue.DetailHoarderBugAIScreaming, ["AngryScreech2"] = Cue.DetailHoarderBugAIScreaming, ["BugDie"] = Cue.DetailHoarderBugAICreatureDeath, ["BugWalk1"] = Cue.DetailHoarderBugAISkitterFootsteps, ["BugWalk2"] = Cue.DetailHoarderBugAISkitterFootsteps, ["BugWalk3"] = Cue.DetailHoarderBugAISkitterFootsteps, ["BugWalk4"] = Cue.DetailHoarderBugAISkitterFootsteps, ["Chitter1"] = Cue.DetailHoarderBugAIChitter, ["Chitter2"] = Cue.DetailHoarderBugAIChitter, ["Chitter3"] = Cue.DetailHoarderBugAIChitter, ["Fly"] = Cue.DetailHoarderBugAIWings, ["HoarderBugCry"] = Cue.DetailHoarderBugAICreatureDeath, ["HitSlime"] = Cue.DetailBlobAISlime, ["SlimeAngry"] = Cue.DetailBlobAISlime, ["SlimeDance"] = Cue.DetailBlobAISlime, ["SlimeIdle"] = Cue.DetailBlobAISlime, ["SlimeKillPlayer"] = Cue.DetailBlobAILiquid, ["Angry1"] = Cue.DetailPufferAIChitter, ["Frighten1"] = Cue.DetailPufferAIChitter, ["Frighten3"] = Cue.DetailPufferAIChitter, ["Nervous"] = Cue.DetailPufferAIChitter, ["PuffSFX"] = Cue.DetailPufferAISpray, ["RattleTail"] = Cue.DetailPufferAIRattle, ["Stomp"] = Cue.DetailPufferAIImpact, ["BalloonPop"] = Cue.DetailButlerEnemyAIBurst, ["BalloonPopReverb"] = Cue.DetailButlerEnemyAIBurst, ["BroomSweep1"] = Cue.DetailButlerEnemyAISweeping, ["BroomSweep2"] = Cue.DetailButlerEnemyAISweeping, ["BroomSweep3"] = Cue.DetailButlerEnemyAISweeping, ["BroomSweep4"] = Cue.DetailButlerEnemyAISweeping, ["ButlerBlowUp"] = Cue.DetailButlerEnemyAIBurst, ["ButlerBuzzingAmbience"] = Cue.DetailButlerEnemyAIBuzz, ["ButlerStep1"] = Cue.DetailButlerEnemyAIFootsteps, ["ButlerStep2"] = Cue.DetailButlerEnemyAIFootsteps, ["ButlerStep3"] = Cue.DetailButlerEnemyAIFootsteps, ["ButlerStep4"] = Cue.DetailButlerEnemyAIFootsteps, ["ButlerStep5"] = Cue.DetailButlerEnemyAIFootsteps, ["ButlerSuitRustle"] = Cue.DetailButlerEnemyAIRustling, ["ButlerUntuckKnifeSFX"] = Cue.DetailButlerEnemyAIToolSwing, ["BeeZapConstant"] = Cue.DetailButlerBeesEnemyAIElectric, ["ButlerBeeSwarm"] = Cue.DetailButlerBeesEnemyAIBuzz, ["StabPoison"] = Cue.DetailStingrayAICreatureAttack, ["StingrayDie"] = Cue.DetailStingrayAICreatureDeath, ["StingrayFlopping"] = Cue.DetailStingrayAIFlopping, ["StingrayFloppingNoVocals"] = Cue.DetailStingrayAIFlopping, ["StingraySlideSpit"] = Cue.DetailStingrayAISliding, ["StingraySpitLong"] = Cue.DetailStingrayAISpit, ["StingraySting"] = Cue.DetailStingrayAICreatureAttack, ["StingrayWhining2"] = Cue.DetailStingrayAIWhining, ["DistantRumble1"] = Cue.DetailForestGiantAIHeavyFootsteps, ["DistantRumble2"] = Cue.DetailForestGiantAIHeavyFootsteps, ["DistantRumble3"] = Cue.DetailForestGiantAIHeavyFootsteps, ["FGiantEatPlayerSFX"] = Cue.DetailForestGiantAIBite, ["ForestGiantBurn"] = Cue.DetailForestGiantAIFire, ["ForestGiantDie"] = Cue.DetailForestGiantAIRoar, ["ForestGiantFall"] = Cue.DetailForestGiantAIGroundImpact, ["GiantStomp1"] = Cue.DetailForestGiantAIHeavyFootsteps, ["GiantStomp2"] = Cue.DetailForestGiantAIHeavyFootsteps, ["GiantStomp3"] = Cue.DetailForestGiantAIHeavyFootsteps, ["GiantStomp4"] = Cue.DetailForestGiantAIHeavyFootsteps, ["GiantStomp5"] = Cue.DetailForestGiantAIHeavyFootsteps, ["StunGiant"] = Cue.DetailForestGiantAICreatureHit, ["BaboonEnterFight"] = Cue.DetailBaboonBirdAICreatureAttack, ["BaboonKill"] = Cue.DetailBaboonBirdAICreatureAttack, ["BaboonStab"] = Cue.DetailBaboonBirdAICreatureAttack, ["BaboonTakeDamage"] = Cue.DetailBaboonBirdAICreatureHit, ["Caw1"] = Cue.DetailBaboonBirdAICackle, ["CawScream1"] = Cue.DetailBaboonBirdAIScreaming, ["CawScream2"] = Cue.DetailBaboonBirdAIScreaming, ["CawScream3"] = Cue.DetailBaboonBirdAIScreaming, ["CawScream4"] = Cue.DetailBaboonBirdAIScreaming, ["CawScream5"] = Cue.DetailBaboonBirdAIScreaming, ["Footstep1"] = Cue.DetailBaboonBirdAIFootsteps, ["Footstep2"] = Cue.DetailBaboonBirdAIFootsteps, ["Footstep3"] = Cue.DetailBaboonBirdAIFootsteps, ["Footstep4"] = Cue.DetailBaboonBirdAIFootsteps, ["Footstep5"] = Cue.DetailBaboonBirdAIFootsteps, ["KillBaboon"] = Cue.DetailBaboonBirdAICreatureDeath, ["Squeak2"] = Cue.DetailBaboonBirdAICackle, ["BeeHiveIdle"] = Cue.DetailRedLocustBeesBuzz, ["BeeZap1"] = Cue.DetailRedLocustBeesElectric, ["BeeZap2"] = Cue.DetailRedLocustBeesElectric, ["BeeZap3"] = Cue.DetailRedLocustBeesElectric, ["BeeZap4"] = Cue.DetailRedLocustBeesElectric, ["BeeZap5"] = Cue.DetailRedLocustBeesElectric, ["BeeZap6"] = Cue.DetailRedLocustBeesElectric, ["BeeZapConstantB"] = Cue.DetailRedLocustBeesElectric, ["AirConditionerSwitch"] = Cue.DetailRadMechAIMechanicalAlert, ["ChargeForward"] = Cue.DetailRadMechAIEngine, ["Flamethrower"] = Cue.DetailRadMechAIFire, ["FlyingFar"] = Cue.DetailRadMechAIEngine, ["MissileExplosion"] = Cue.DetailRadMechAIExplosion, ["MissileExplosion2"] = Cue.DetailRadMechAIExplosion, ["NeonLightFlicker"] = Cue.DetailRadMechAIMechanicalAlert, ["RadMechAmbientSFX"] = Cue.DetailRadMechAIEngine, ["RadMechStomp1"] = Cue.DetailRadMechAIHeavyFootsteps, ["RadMechStomp2"] = Cue.DetailRadMechAIHeavyFootsteps, ["RadMechStomp3"] = Cue.DetailRadMechAIHeavyFootsteps, ["RadMechStomp4"] = Cue.DetailRadMechAIHeavyFootsteps, ["RadMechWake"] = Cue.DetailRadMechAIEngine, ["ShipThrusterClose"] = Cue.DetailRadMechAIEngine, ["SpotlightOn"] = Cue.DetailRadMechAIMechanicalAlert, ["StartChargeForward"] = Cue.DetailRadMechAIEngine, ["StartChargeForwardFar"] = Cue.DetailRadMechAIEngine, ["HitPuma"] = Cue.DetailPumaAICreatureHit, ["PumaClimbTree"] = Cue.DetailPumaAIClimbing, ["PumaClimbTree2"] = Cue.DetailPumaAIClimbing, ["PumaDie"] = Cue.DetailPumaAICreatureDeath, ["PumaDrop"] = Cue.DetailPumaAIImpact, ["PumaGrowl1"] = Cue.DetailPumaAIGrowl, ["PumaGrowl2"] = Cue.DetailPumaAIGrowl, ["PumaLeap1"] = Cue.DetailPumaAIRustling, ["PumaLeap2"] = Cue.DetailPumaAIRustling, ["PumaPurr"] = Cue.DetailPumaAIBreathing, ["PumaScreamStunned"] = Cue.DetailPumaAICreatureHit, ["PumaScreamingB"] = Cue.DetailPumaAIScreaming, ["PumaScreamingBFaraway"] = Cue.DetailPumaAIScreaming, ["PumaStepQuiet1"] = Cue.DetailPumaAIFootsteps, ["PumaStepQuiet2"] = Cue.DetailPumaAIFootsteps, ["PumaStepQuiet3"] = Cue.DetailPumaAIFootsteps, ["PumaStepQuiet4"] = Cue.DetailPumaAIFootsteps, ["ScratchB"] = Cue.DetailPumaAIScratch, ["ScratchC"] = Cue.DetailPumaAIScratch, ["ScratchD"] = Cue.DetailPumaAIScratch, ["BirdChirp1"] = Cue.DetailGiantKiwiAIBirdCall, ["BirdWakeUp"] = Cue.DetailGiantKiwiAIBirdCall, ["GiantKiwiBreakAndEnter"] = Cue.DetailGiantKiwiAIDoorImpact, ["GiantKiwiDie"] = Cue.DetailGiantKiwiAICreatureDeath, ["GiantKiwiPeckTree"] = Cue.DetailGiantKiwiAIPeck, ["GiantKiwiSleep"] = Cue.DetailGiantKiwiAIBreathing, ["KiwiStep1"] = Cue.DetailGiantKiwiAIFootsteps, ["KiwiStep1Bass"] = Cue.DetailGiantKiwiAIFootsteps, ["KiwiStep2"] = Cue.DetailGiantKiwiAIFootsteps, ["KiwiStep2Bass"] = Cue.DetailGiantKiwiAIFootsteps, ["KiwiStep4"] = Cue.DetailGiantKiwiAIFootsteps, ["KiwiStep4Bass"] = Cue.DetailGiantKiwiAIFootsteps, ["Screech1Echo"] = Cue.DetailGiantKiwiAIBirdCall, ["Screech2Echo"] = Cue.DetailGiantKiwiAIBirdCall, ["Screech3Echo"] = Cue.DetailGiantKiwiAIBirdCall, ["Stab1"] = Cue.DetailGiantKiwiAICreatureAttack, ["Stab2b"] = Cue.DetailGiantKiwiAICreatureAttack, ["Stab3b"] = Cue.DetailGiantKiwiAICreatureAttack, ["Stab4b"] = Cue.DetailGiantKiwiAICreatureAttack, ["Chuckle1"] = Cue.DetailFlowerSnakeEnemyLaughter, ["Chuckle3"] = Cue.DetailFlowerSnakeEnemyLaughter, ["Chuckle4"] = Cue.DetailFlowerSnakeEnemyLaughter, ["Chuckle5"] = Cue.DetailFlowerSnakeEnemyLaughter, ["FlapWings"] = Cue.DetailFlowerSnakeEnemyWings, ["FlapWings2"] = Cue.DetailFlowerSnakeEnemyWings, ["FlowerSnakeScurry"] = Cue.DetailFlowerSnakeEnemyWings, ["Leap1"] = Cue.DetailFlowerSnakeEnemyLunge, ["Leap2"] = Cue.DetailFlowerSnakeEnemyLunge, ["Leap3"] = Cue.DetailFlowerSnakeEnemyLunge, ["BirdScreech1"] = Cue.DetailDoublewingAIBirdCall, ["BirdScreech2"] = Cue.DetailDoublewingAIBirdCall, ["DoublewingFlap1"] = Cue.DetailDoublewingAIWings, ["DoublewingFlap2"] = Cue.DetailDoublewingAIWings, ["DoublewingFlap3"] = Cue.DetailDoublewingAIWings, ["DoublewingFlapConstant"] = Cue.DetailDoublewingAIWings, ["HitGround1"] = Cue.DetailDoublewingAIImpact, ["KillDoublewing"] = Cue.DetailDoublewingAICreatureDeath, ["StunDoublewing"] = Cue.DetailDoublewingAICreatureHit, ["DocileLocustBees"] = Cue.DetailDocileLocustBeesAIBuzz, ["DocileLocustBeesEvade"] = Cue.DetailDocileLocustBeesAIBuzz, ["WallRumble"] = Cue.DetailDepositItemsDeskGroundRumble, ["SnowmanBreak1"] = Cue.DetailSnowmanSimpleAIImpact, ["SnowmanLaugh1"] = Cue.DetailSnowmanSimpleAILaughter, ["SnowmanLaugh2"] = Cue.DetailSnowmanSimpleAILaughter }; private static bool Contains(Cue cue) { if (cue >= Cue.DetailBaboonBirdAICackle) { return cue < Cue.SpringRetract; } return false; } internal static Cue Basis(Cue cue) { if (!Contains(cue)) { return cue; } return details[(int)(cue - 251)].Basis; } internal static CreatureShape Shape(Cue cue) { if (!Contains(cue)) { return CreatureShape.None; } return details[(int)(cue - 251)].Shape; } internal static string? Label(Cue cue, bool chinese) { if (!Contains(cue)) { return null; } if (!chinese) { return details[(int)(cue - 251)].En; } return details[(int)(cue - 251)].Zh; } internal static Cue Refine(string clip, Cue original) { if (!variants.TryGetValue(clip, out var value)) { return original; } if (original != Cue.Creature && original != Basis(value)) { return original; } return value; } internal static bool TryBase(string clip, out Cue cue) { if (variants.TryGetValue(clip, out var value)) { cue = Basis(value); return true; } cue = Cue.Creature; return false; } } internal static class CuePresentation { internal static bool Unlocated(Cue cue) { bool flag = Indicator(cue); if (flag) { Cue cue2 = CreatureSoundCatalog.Basis(cue); bool flag2 = ((cue2 == Cue.ItemNoise || cue2 == Cue.Mechanism) ? true : false); flag = !flag2; } return flag; } internal static bool Indicator(Cue cue, bool localMovement = false) { bool flag = !localMovement; if (flag) { bool flag2; switch (CreatureSoundCatalog.Basis(cue)) { case Cue.Creature: case Cue.Heartbeat: case Cue.Cling: case Cue.TensionMusic: case Cue.VisorHit: case Cue.HeadRustling: case Cue.Broadcast: case Cue.NeckSnap: case Cue.MaskAttachLocal: case Cue.LocalMaskInfection: case Cue.RadioVoice: case Cue.Terminal: case Cue.ShipHum: case Cue.Injury: case Cue.Underwater: case Cue.UiFeedback: case Cue.UiWarning: case Cue.EarRinging: case Cue.PoisonFeedback: case Cue.BackgroundMusic: case Cue.ItemPickup: case Cue.Drowning: case Cue.ShipTravel: case Cue.ShipArrival: flag2 = true; break; default: flag2 = false; break; } flag = !flag2; } return flag; } internal static bool ActorFeedback(Cue cue) { switch (CreatureSoundCatalog.Basis(cue)) { case Cue.BodyImpact: case Cue.WaterSplash: case Cue.MudSink: case Cue.BloomTreatment: case Cue.PlantClear: return true; default: return false; } } internal static bool Personal(Cue cue, bool held, bool riding) { bool flag = riding && cue == Cue.VehicleRattle; if (!flag) { bool flag2 = held; if (flag2) { bool flag3; switch (CreatureSoundCatalog.Basis(cue)) { case Cue.Impact: case Cue.Reload: case Cue.Gunshot: case Cue.GunClick: case Cue.ItemNoise: case Cue.RadioSignal: case Cue.Jetpack: case Cue.EquipmentWarning: case Cue.BatteryWarning: case Cue.PinPull: case Cue.Ladder: case Cue.ToolSwing: case Cue.SprayPaint: case Cue.ItemMusic: case Cue.Remote: case Cue.Inhaling: case Cue.Zap: case Cue.WeedSpray: case Cue.Teeth: case Cue.Hairdryer: case Cue.Phone: case Cue.ToyRobot: case Cue.AirHorn: case Cue.ClownHorn: case Cue.DuckQuack: case Cue.CashRegister: case Cue.GiftOpen: case Cue.BagZip: case Cue.FlashlightSwitch: case Cue.CanShake: case Cue.ToyTrain: case Cue.LaserSwitch: case Cue.RadarSwitch: case Cue.TzpEmpty: case Cue.TzpRelease: case Cue.ZedDog: flag3 = true; break; default: flag3 = false; break; } flag2 = flag3; } flag = flag2; } bool flag4 = flag; if (!flag4) { bool flag2 = riding; if (flag2) { bool flag3; switch (CreatureSoundCatalog.Basis(cue)) { case Cue.Horn: case Cue.EquipmentWarning: case Cue.Skidding: case Cue.VehicleImpact: case Cue.VehicleFire: case Cue.RadioMusic: case Cue.VehicleInteraction: case Cue.SeatEject: case Cue.VehicleBoost: case Cue.VehicleJump: case Cue.CruiserHood: case Cue.CruiserDoor: case Cue.CruiserRearDoor: case Cue.CruiserIgnition: case Cue.CruiserStarted: case Cue.CruiserKey: flag3 = true; break; default: flag3 = false; break; } flag2 = flag3; } flag4 = flag2; } return flag4; } internal static bool Ambient(Cue cue) { switch (CreatureSoundCatalog.Basis(cue)) { case Cue.RadioMusic: case Cue.ItemMusic: case Cue.Clock: case Cue.PowerHum: case Cue.Flies: case Cue.WorldHeartbeat: case Cue.Environment: case Cue.Television: case Cue.Fan: case Cue.RecordPlayer: case Cue.Candle: case Cue.Shower: case Cue.AmbientFire: case Cue.ElevatorMusic: case Cue.DiscoMusic: return true; default: return false; } } internal static bool Both(Cue cue) { Cue cue2 = CreatureSoundCatalog.Basis(cue); if (cue2 == Cue.GroundRadioVoice || (uint)(cue2 - 88) <= 1u) { return true; } return false; } internal static bool Caption(Cue cue, bool localMovement = false) { if (Indicator(cue, localMovement)) { return Both(cue); } return true; } } internal enum SoundFamily { Creature, Movement, Music, Mechanical, Ground, Liquid, Insects, Air, Personal, Impact } internal static class CueVisual { internal static SoundFamily Family(Cue cue) { switch (CreatureSoundCatalog.Basis(cue)) { case Cue.CounterBell: case Cue.CounterShutter: case Cue.AccessHatch: case Cue.WarehouseDoor: return SoundFamily.Mechanical; case Cue.CounterGrab: case Cue.CounterAttack: return SoundFamily.Impact; case Cue.CounterWarning: case Cue.CounterAmbience: return SoundFamily.Ground; case Cue.CounterSnore: return SoundFamily.Creature; case Cue.PoolFloaty: return SoundFamily.Impact; case Cue.SpringRetract: case Cue.VehicleRattle: return SoundFamily.Mechanical; case Cue.NutcrackerKick: case Cue.NutcrackerFall: case Cue.SlimeHit: return SoundFamily.Impact; case Cue.KnifeAttack: case Cue.BodyCrush: case Cue.DeathSound: return SoundFamily.Impact; case Cue.WaterSplash: case Cue.Toilet: case Cue.Shower: return SoundFamily.Liquid; case Cue.CruiserHood: case Cue.CruiserDoor: case Cue.CruiserRearDoor: case Cue.CruiserIgnition: case Cue.CruiserStarted: case Cue.CruiserKey: return SoundFamily.Mechanical; case Cue.WolfFootsteps: return SoundFamily.Movement; case Cue.DiscoMusic: return SoundFamily.Music; case Cue.MeteorApproach: case Cue.WolfTongue: case Cue.WolfPull: return SoundFamily.Air; case Cue.BloomChestOpen: case Cue.PlantClear: case Cue.MeteorImpact: case Cue.WolfAttack: case Cue.WolfHit: case Cue.WolfDeath: return SoundFamily.Impact; case Cue.WolfCall: case Cue.WolfGrowl: case Cue.WolfSnarl: return SoundFamily.Creature; case Cue.CarHood: case Cue.CabinetDoor: case Cue.ShipTravel: case Cue.ShipArrival: return SoundFamily.Mechanical; case Cue.BloomBreath: case Cue.BloomChomp: case Cue.BloomRoar: return SoundFamily.Creature; case Cue.BloomBurst: case Cue.BloomTreatment: return SoundFamily.Impact; case Cue.PlantGrowth: return SoundFamily.Ground; case Cue.SporeCloud: return SoundFamily.Air; case Cue.AmbientFire: case Cue.CreatureAttack: case Cue.CreatureDeath: case Cue.ChairShock: return SoundFamily.Impact; case Cue.MudSink: return SoundFamily.Ground; case Cue.Drowning: return SoundFamily.Personal; case Cue.ElevatorMusic: return SoundFamily.Music; case Cue.ZedDog: case Cue.EggCry: case Cue.EggScream: case Cue.EggBreak: return SoundFamily.Creature; case Cue.BreakerDoor: case Cue.BreakerSwitch: case Cue.VehicleJump: case Cue.TzpEmpty: case Cue.TzpRelease: case Cue.FurniturePlace: case Cue.Fridge: case Cue.MicrowaveDoor: case Cue.ShipLanding: case Cue.ShipTakeoff: return SoundFamily.Mechanical; case Cue.VehicleBoost: return SoundFamily.Air; case Cue.VehicleRefuel: return SoundFamily.Liquid; case Cue.Fan: return SoundFamily.Air; case Cue.CanShake: case Cue.ToyTrain: case Cue.LaserSwitch: case Cue.SuitChange: case Cue.SeatEject: case Cue.RadarSwitch: case Cue.PressureDoor: case Cue.ShutterDoor: case Cue.MineBeep: case Cue.MinePress: case Cue.Plushie: case Cue.RecordPlayer: case Cue.Candle: case Cue.Microwave: case Cue.Pumpkin: case Cue.InverseTeleport: case Cue.ShipDoor: return SoundFamily.Mechanical; case Cue.SmallFootsteps: case Cue.BareFootsteps: case Cue.SkitterFootsteps: case Cue.SkippingFootsteps: case Cue.BootFootsteps: return SoundFamily.Movement; case Cue.CreatureHit: return SoundFamily.Impact; case Cue.AirHorn: case Cue.ClownHorn: case Cue.CashRegister: case Cue.GiftOpen: case Cue.BagZip: case Cue.FlashlightSwitch: return SoundFamily.Mechanical; case Cue.DuckQuack: return SoundFamily.Creature; case Cue.WorldHeartbeat: return SoundFamily.Mechanical; case Cue.BackgroundMusic: case Cue.Television: return SoundFamily.Music; case Cue.Environment: return SoundFamily.Air; case Cue.Injury: case Cue.Underwater: case Cue.EarRinging: case Cue.PoisonFeedback: return SoundFamily.Personal; case Cue.BodyImpact: return SoundFamily.Impact; case Cue.LightSwitch: case Cue.Teleport: case Cue.RadarPing: case Cue.UiFeedback: case Cue.UiWarning: return SoundFamily.Mechanical; case Cue.Running: case Cue.LadderClimb: case Cue.Crawling: case Cue.DragFootsteps: return SoundFamily.Movement; case Cue.Flies: return SoundFamily.Insects; case Cue.Inhaling: case Cue.WeedSpray: case Cue.Hairdryer: return SoundFamily.Air; case Cue.EggCall: return SoundFamily.Creature; case Cue.SpikeSlam: case Cue.SpikeCreak: return SoundFamily.Impact; case Cue.LockPicking: case Cue.Unlock: case Cue.Vent: case Cue.Charging: case Cue.Elevator: case Cue.Apparatus: case Cue.Remote: case Cue.Clock: case Cue.Breaker: case Cue.PowerHum: case Cue.Terminal: case Cue.Zap: case Cue.ShipHum: case Cue.ShipMechanism: case Cue.Cabinet: case Cue.Lever: case Cue.Teeth: case Cue.Phone: case Cue.ToyRobot: case Cue.Mechanism: case Cue.VehicleInteraction: return SoundFamily.Mechanical; case Cue.Thunder: case Cue.StaticWarning: case Cue.VehicleImpact: case Cue.VehicleFire: return SoundFamily.Impact; case Cue.BridgeCreak: case Cue.BridgeCollapse: return SoundFamily.Ground; case Cue.Horn: case Cue.EquipmentWarning: case Cue.BatteryWarning: case Cue.PinPull: case Cue.Ladder: case Cue.RadioRelay: return SoundFamily.Mechanical; case Cue.Jetpack: case Cue.SprayPaint: return SoundFamily.Air; case Cue.ToolSwing: case Cue.Skidding: return SoundFamily.Movement; case Cue.RadioMusic: case Cue.ItemMusic: return SoundFamily.Music; case Cue.BuzzAlert: case Cue.BuzzAttack: return SoundFamily.Insects; case Cue.Cushion: return SoundFamily.Air; case Cue.SupplyLanding: case Cue.VehicleDelivery: case Cue.VehicleEngine: return SoundFamily.Mechanical; case Cue.MaskSound: case Cue.OtherCling: case Cue.MaskAttachLocal: case Cue.MaskInfection: case Cue.LocalMaskInfection: return SoundFamily.Personal; case Cue.OtherNeckSnap: case Cue.ItemDrop: return SoundFamily.Impact; case Cue.Music: case Cue.March: case Cue.Drum: case Cue.TensionMusic: return SoundFamily.Music; case Cue.MechanicalTurn: case Cue.MechanicalAlert: case Cue.Aim: case Cue.Reload: case Cue.Gunshot: case Cue.Ricochet: case Cue.GunClick: case Cue.Snip: case Cue.Spring: case Cue.Broadcast: case Cue.Engine: case Cue.Alarm: case Cue.Door: case Cue.DoorOpen: case Cue.DoorClose: return SoundFamily.Mechanical; case Cue.Underground: case Cue.GroundRumble: case Cue.Emerge: case Cue.GroundImpact: case Cue.WallRumble: return SoundFamily.Ground; case Cue.Liquid: case Cue.Slime: case Cue.Flopping: case Cue.Sliding: case Cue.Spit: return SoundFamily.Liquid; case Cue.Chitter: case Cue.Rattle: case Cue.Buzz: return SoundFamily.Insects; case Cue.Wings: case Cue.Spray: case Cue.BirdCall: case Cue.Steam: return SoundFamily.Air; case Cue.Heartbeat: case Cue.Cling: case Cue.VisorHit: case Cue.HeadRustling: return SoundFamily.Personal; case Cue.Footsteps: case Cue.Rustling: case Cue.Sweeping: case Cue.Climbing: case Cue.Peck: case Cue.HeavyFootsteps: case Cue.Jump: case Cue.Landing: return SoundFamily.Movement; case Cue.Impact: case Cue.Crack: case Cue.Burst: case Cue.Fire: case Cue.Electric: case Cue.Launch: case Cue.Explosion: case Cue.Scratch: case Cue.DoorImpact: case Cue.NeckSnap: case Cue.PipeBurst: return SoundFamily.Impact; case Cue.PipeFlow: return SoundFamily.Liquid; default: return SoundFamily.Creature; } } internal static float OnsetScale(Cue cue, float age, bool lowMotion) { if (lowMotion || age < 0f || age >= 0.24f) { return 1f; } float num = ((CueText.Priority(cue) == 3) ? 0.12f : 0.05f); return 1f + num * (float)Math.Sin((double)(age / 0.24f) * Math.PI); } } internal static class DisplayCapacity { internal struct Slot { internal float X; internal float Y; internal float Angle; } internal const int SignalSafety = 64; internal static int Resolve(int requested, int available) { return Math.Min((requested <= 0) ? available : requested, Math.Max(0, available)); } internal static int Rows(float height, float rowHeight) { if (!float.IsNaN(height) && !float.IsInfinity(height) && !float.IsNaN(rowHeight) && !float.IsInfinity(rowHeight) && !(rowHeight <= 0f) && !(height <= 0f)) { return (int)Math.Min(64.0, Math.Floor(height / rowHeight)); } return 0; } internal static int Perimeter(Slot[] slots, float width, float height, float cellWidth, float cellHeight, float reserveLeft, float reserveBottom, float reserveRight, float reserveTop) { int num = Rows(width, cellWidth); int num2 = Rows(height, cellHeight); int num3 = 0; if (slots.Length == 0 || num < 2 || num2 < 2) { return 0; } if (num > 2 && num % 2 == 0) { num--; } for (int i = 0; i < num2; i++) { for (int j = 0; j < num; j++) { if (j != 0 && i != 0 && j != num - 1 && i != num2 - 1) { continue; } float num4 = ((float)j - (float)(num - 1) * 0.5f) * cellWidth; float num5 = ((float)i - (float)(num2 - 1) * 0.5f) * cellHeight; if (!(num4 + cellWidth * 0.5f > reserveLeft) || !(num4 - cellWidth * 0.5f < reserveRight) || !(num5 + cellHeight * 0.5f > reserveBottom) || !(num5 - cellHeight * 0.5f < reserveTop)) { slots[num3++] = new Slot { X = num4, Y = num5, Angle = (float)(Math.Atan2(num4, num5) * 180.0 / Math.PI) }; if (num3 == slots.Length) { return num3; } } } } return num3; } } internal static class EventIdentity { internal static Cue Display(Cue prior, Cue current, float gap) { if (!(gap <= 0.8f) || CreatureSoundCatalog.Basis(prior) != CreatureSoundCatalog.Basis(current) || CreatureSoundCatalog.Shape(prior) == CreatureShape.None || CreatureSoundCatalog.Shape(current) != CreatureShape.None) { return current; } return prior; } } internal static class ExtendedCueText { internal static string Name(Cue cue, bool cn) { return cue switch { Cue.CounterBell => cn ? "柜台铃声" : "Counter bell", Cue.CounterShutter => cn ? "柜台窗口开合声" : "Counter shutter", Cue.CounterGrab => cn ? "钩爪收物声" : "Hook collecting items", Cue.CounterAttack => cn ? "触手挥击声" : "Tentacle striking", Cue.CounterWarning => cn ? "墙后轰响声" : "Rumbling behind wall", Cue.CounterAmbience => cn ? "墙后响动" : "Sounds behind wall", Cue.CounterSnore => cn ? "鼾声" : "Snoring", Cue.AccessHatch => cn ? "地面舱盖开合声" : "Access hatch", Cue.WarehouseDoor => cn ? "仓库大门运行声" : "Warehouse door moving", Cue.PoolFloaty => cn ? "气垫挤压声" : "Pool float squeaking", Cue.VehicleRattle => cn ? "车辆颠簸声" : "Vehicle rattling", Cue.SpringRetract => cn ? "弹簧收缩声" : "Spring retracting", Cue.NutcrackerKick => cn ? "踢击声" : "Kicking impact", Cue.NutcrackerFall => cn ? "倒地撞击声" : "Falling impact", Cue.SlimeHit => cn ? "黏液受击声" : "Slime impact", Cue.DiscoMusic => cn ? "迪斯科球音乐" : "Disco ball music", Cue.CarHood => cn ? "汽车引擎盖声" : "Car hood", Cue.CruiserHood => cn ? "Cruiser引擎盖声" : "Cruiser hood", Cue.CruiserDoor => cn ? "Cruiser车门声" : "Cruiser cabin door", Cue.CruiserRearDoor => cn ? "Cruiser车厢后门声" : "Cruiser cargo door", Cue.CruiserIgnition => cn ? "Cruiser打火声" : "Cruiser cranking", Cue.CruiserStarted => cn ? "Cruiser引擎启动声" : "Cruiser engine starting", Cue.CruiserKey => cn ? "车辆钥匙操作声" : "Vehicle ignition key", Cue.BloomChestOpen => cn ? "胸口张裂声" : "Chest opening", Cue.PlantClear => cn ? "植株清除声" : "Plant clearing", Cue.MeteorApproach => cn ? "陨石呼啸声" : "Meteor rushing", Cue.MeteorImpact => cn ? "陨石撞击声" : "Meteor impact", Cue.WolfFootsteps => cn ? "脚步声" : "Footsteps", Cue.WolfCall => cn ? "呼叫声" : "Calling", Cue.WolfGrowl => cn ? "低吼声" : "Growling", Cue.WolfSnarl => cn ? "咆哮声" : "Snarling", Cue.WolfTongue => cn ? "长舌弹射声" : "Tongue launching", Cue.WolfPull => cn ? "长舌拖拽声" : "Tongue pulling", Cue.WolfAttack => cn ? "撕咬声" : "Mauling", Cue.WolfHit => cn ? "受击声" : "Hurt", Cue.WolfDeath => cn ? "倒下声" : "Dying", Cue.CabinetDoor => cn ? "柜门开合声" : "Cabinet door", Cue.ShipTravel => cn ? "飞船航行声" : "Ship travelling", Cue.ShipArrival => cn ? "抵达星球声" : "Planet arrival", Cue.BloomBreath => cn ? "呼吸声" : "Breathing", Cue.BloomBurst => cn ? "转化爆裂声" : "Transformation burst", Cue.BloomChomp => cn ? "胸口巨口咬合声" : "Chest maw snapping", Cue.BloomRoar => cn ? "嘶吼声" : "Roaring", Cue.BloomTreatment => cn ? "除草剂治疗反应声" : "Weed killer treatment reaction", Cue.PlantGrowth => cn ? "植株生长声" : "Plant growth", Cue.SporeCloud => cn ? "孢子喷散声" : "Spores dispersing", Cue.AmbientFire => cn ? "壁炉火焰声" : "Fireplace crackling", Cue.ElevatorMusic => cn ? "电梯音乐" : "Elevator music", Cue.BreakerDoor => cn ? "配电箱门声" : "Breaker box door", Cue.BreakerSwitch => cn ? "配电箱开关声" : "Breaker switch", Cue.VehicleJump => cn ? "车辆弹跳声" : "Vehicle hop", Cue.CreatureAttack => cn ? "攻击声" : "Attack sound", Cue.CreatureDeath => cn ? "倒下声" : "Falling sound", Cue.TzpEmpty => cn ? "TZP 空罐声" : "TZP empty can", Cue.TzpRelease => cn ? "移开 TZP 罐声" : "TZP can removed", Cue.FurniturePlace => cn ? "家具放置声" : "Furniture placement", Cue.Fridge => cn ? "冰箱门声" : "Refrigerator door", Cue.MicrowaveDoor => cn ? "微波炉门声" : "Microwave door", Cue.ChairShock => cn ? "电椅电击声" : "Electric chair shock", Cue.ZedDog => cn ? "吱叫声" : "Squeaking", Cue.Drowning => cn ? "水下氧气不足警报" : "Low underwater oxygen alert", Cue.MudSink => cn ? "陷入泥沼声" : "Sinking into mud", Cue.ShipLanding => cn ? "飞船降落声" : "Ship landing", Cue.ShipTakeoff => cn ? "飞船起飞声" : "Ship takeoff", Cue.EggCry => cn ? "急促鸣叫声" : "Urgent chirping", Cue.EggScream => cn ? "尖叫声" : "Screaming", Cue.EggBreak => cn ? "蛋壳破裂声" : "Egg cracking", Cue.VehicleBoost => cn ? "车辆喷射加速声" : "Vehicle boost jet", Cue.VehicleRefuel => cn ? "车辆注入除草剂声" : "Vehicle weed killer refill", Cue.CanShake => cn ? "喷漆罐摇晃声" : "Spray can shaking", Cue.ToyTrain => cn ? "玩具火车声" : "Toy train", Cue.LaserSwitch => cn ? "镭射指示器开关声" : "Laser pointer switch", Cue.KnifeAttack => cn ? "刀刺声" : "Knife strike", Cue.SuitChange => cn ? "更换工服声" : "Suit changing", Cue.SeatEject => cn ? "座椅弹射声" : "Seat ejection", Cue.BodyCrush => cn ? "身体碾压声" : "Body crushing", Cue.DeathSound => cn ? "致命撞击声" : "Fatal impact sound", Cue.Fan => cn ? "风扇转动声" : "Fan whirring", Cue.WaterSplash => cn ? "入水泼溅声" : "Water splash", Cue.RadarSwitch => cn ? "雷达增幅器交互声" : "Radar booster interaction", Cue.PressureDoor => cn ? "气压门运行声" : "Pressure door", Cue.ShutterDoor => cn ? "升降门运行声" : "Shutter door", Cue.MineBeep => cn ? "地雷哔声" : "Landmine beep", Cue.MinePress => cn ? "地雷触发声" : "Landmine trigger", Cue.Plushie => cn ? "毛绒玩偶挤压声" : "Plushie squeak", Cue.RecordPlayer => cn ? "唱片机声" : "Record player", Cue.Toilet => cn ? "马桶冲水声" : "Toilet flush", Cue.Candle => cn ? "蜡烛声" : "Candle", Cue.Shower => cn ? "淋浴流水声" : "Shower water", Cue.Microwave => cn ? "微波炉声" : "Microwave", Cue.Pumpkin => cn ? "南瓜敲击声" : "Pumpkin tapping", Cue.InverseTeleport => cn ? "逆向传送装置声" : "Inverse teleporter", Cue.ShipDoor => cn ? "飞船门运行声" : "Ship door", Cue.ItemPickup => cn ? "拾取声" : "Item pickup", Cue.AirHorn => cn ? "空气喇叭声" : "Air horn", Cue.ClownHorn => cn ? "小丑喇叭声" : "Clown horn", Cue.DuckQuack => cn ? "嘎嘎声" : "Quacking", Cue.CashRegister => cn ? "收银机叮响" : "Cash register ding", Cue.GiftOpen => cn ? "礼盒拆开声" : "Gift unwrapping", Cue.BagZip => cn ? "腰包拉链声" : "Bag zipper", Cue.FlashlightSwitch => cn ? "手电开关声" : "Flashlight switch", Cue.SmallFootsteps => cn ? "细小脚步声" : "Tiny footsteps", Cue.BareFootsteps => cn ? "赤足拍地声" : "Barefoot slaps", Cue.SkitterFootsteps => cn ? "密集脚步声" : "Skittering footsteps", Cue.SkippingFootsteps => cn ? "跳步声" : "Skipping footsteps", Cue.BootFootsteps => cn ? "靴子踏步声" : "Boot stomps", Cue.CreatureHit => cn ? "受击声" : "Hurt sound", Cue.DragFootsteps => cn ? "拖行脚步声" : "Dragging footsteps", Cue.BackgroundMusic => cn ? "背景音乐" : "Background music", Cue.Television => cn ? "电视节目声" : "Television audio", Cue.Injury => cn ? "受伤反馈声" : "Injury feedback", Cue.BodyImpact => cn ? "身体碰撞声" : "Body impact", Cue.Underwater => cn ? "水下呼吸声" : "Underwater breathing", Cue.WorldHeartbeat => cn ? "物品跳动声" : "Pulsating item", Cue.Environment => cn ? "环境响动" : "Ambient sound", Cue.LightSwitch => cn ? "灯具响动" : "Light mechanism", Cue.Teleport => cn ? "传送装置声" : "Teleporter", Cue.RadarPing => cn ? "雷达增幅器提示音" : "Radar booster ping", Cue.UiFeedback => cn ? "界面反馈音" : "Interface feedback", Cue.UiWarning => cn ? "系统警告音" : "System warning", Cue.EarRinging => cn ? "耳鸣声" : "Ringing ears", Cue.PoisonFeedback => cn ? "中毒反馈声" : "Poison feedback", Cue.VehicleInteraction => cn ? "车辆交互声" : "Vehicle mechanism", Cue.Running => cn ? "奔跑脚步声" : "Running footsteps", Cue.LadderClimb => cn ? "攀梯声" : "Ladder climbing", Cue.LockPicking => cn ? "开锁作业声" : "Lock picking", Cue.Unlock => cn ? "解锁声" : "Unlocking", Cue.Vent => cn ? "通风管道响动" : "Vent rattling", Cue.Charging => cn ? "物品充电声" : "Item charging", Cue.Elevator => cn ? "电梯运行声" : "Elevator mechanism", Cue.Apparatus => cn ? "核心装置声" : "Apparatus", Cue.Remote => cn ? "遥控器按键声" : "Remote button", Cue.Clock => cn ? "钟表滴答声" : "Clock ticking", Cue.Breaker => cn ? "配电开关声" : "Breaker switch", Cue.PowerHum => cn ? "电气嗡鸣" : "Electrical hum", Cue.Terminal => cn ? "终端操作声" : "Terminal operation", Cue.SpikeSlam => cn ? "尖刺陷阱撞击" : "Spike trap slam", Cue.SpikeCreak => cn ? "尖刺陷阱吱响" : "Spike trap creaking", Cue.Inhaling => cn ? "TZP吸入声" : "TZP inhaling", Cue.Zap => cn ? "电击枪声音" : "Zap gun", Cue.ShipHum => cn ? "飞船环境嗡鸣" : "Ship ambience", Cue.ShipMechanism => cn ? "飞船机械声" : "Ship mechanism", Cue.Cabinet => cn ? "抽屉滑动声" : "Drawer sliding", Cue.Lever => cn ? "拉杆声" : "Lever", Cue.WeedSpray => cn ? "除草剂喷洒声" : "Weed killer spray", Cue.Flies => cn ? "细密嗡鸣声" : "Fine buzzing", Cue.Teeth => cn ? "牙齿咔嗒声" : "Chattering teeth", Cue.Hairdryer => cn ? "吹风机声" : "Hairdryer", Cue.Phone => cn ? "电话音效" : "Phone sound", Cue.ToyRobot => cn ? "机器人玩具声" : "Robot toy", Cue.EggCall => cn ? "鸣叫声" : "Chirping", Cue.Crawling => cn ? "蠕动摩擦声" : "Crawling rustle", Cue.Mechanism => cn ? "装置交互声" : "Mechanism", Cue.RadioRelay => cn ? "对讲机重放声" : "Radio playback", Cue.Thunder => cn ? "雷声" : "Thunder", Cue.StaticWarning => cn ? "静电噼啪声" : "Static crackling", Cue.BridgeCreak => cn ? "桥梁吱响" : "Bridge creaking", Cue.BridgeCollapse => cn ? "桥梁坍塌声" : "Bridge collapsing", Cue.Horn => cn ? "喇叭声" : "Horn", Cue.Jetpack => cn ? "喷气背包声" : "Jetpack", Cue.EquipmentWarning => cn ? "设备警示音" : "Equipment warning", Cue.BatteryWarning => cn ? "电量警示音" : "Battery warning", Cue.PinPull => cn ? "拔销声" : "Pin pulled", Cue.Ladder => cn ? "梯子伸缩声" : "Ladder mechanism", Cue.ToolSwing => cn ? "工具挥动声" : "Tool swinging", Cue.SprayPaint => cn ? "喷漆声" : "Spray paint", Cue.Skidding => cn ? "轮胎摩擦声" : "Tire friction", Cue.VehicleImpact => cn ? "车辆碰撞声" : "Vehicle impact", Cue.VehicleFire => cn ? "车辆燃烧声" : "Vehicle burning", Cue.RadioMusic => cn ? "车载广播声" : "Car radio", Cue.ItemMusic => cn ? "音响音乐" : "Boombox music", Cue.Cushion => cn ? "放屁垫声" : "Whoopie cushion", Cue.BuzzAlert => cn ? "急促嗡鸣" : "Intense buzzing", Cue.BuzzAttack => cn ? "猛烈嗡鸣" : "Aggressive buzzing", Cue.DoorOpen => cn ? "开门声" : "Door opening", Cue.DoorClose => cn ? "关门声" : "Door closing", Cue.OtherCling => cn ? "缠附声" : "Clinging sound", Cue.OtherNeckSnap => cn ? "颈部折断声" : "Neck snapping", Cue.MaskAttachLocal => cn ? "面具附着声" : "Mask attaching", Cue.MaskInfection => cn ? "袭击声" : "Attack sound", Cue.LocalMaskInfection => cn ? "袭击声" : "Attack sound", Cue.MaskLaugh => cn ? "面具笑声" : "Mask laughter", Cue.Voice => cn ? "说话声" : "Speaking", Cue.RadioVoice => cn ? "正在通过对讲机说话" : "Speaking over radio", Cue.GroundRadioVoice => cn ? "正在通过对讲机说话" : "Speaking over radio", Cue.ItemNoise => cn ? "物品发声" : "Item sound", Cue.ItemDrop => cn ? "物品落地声" : "Item dropped", Cue.SupplyLanding => cn ? "补给船到达" : "Supply ship arrival", Cue.VehicleDelivery => cn ? "Cruiser 配送声" : "Cruiser delivery", Cue.VehicleEngine => cn ? "Cruiser 引擎声" : "Cruiser engine", Cue.RadioSignal => cn ? "对讲机收发声" : "Radio transmission tone", Cue.Jump => cn ? "起跳声" : "Jumping", Cue.Landing => cn ? "落地声" : "Landing", Cue.HeavyFootsteps => cn ? "沉重脚步声" : "Heavy footsteps", Cue.NeckSnap => cn ? "颈部折断声" : "Neck snapping", Cue.PipeFlow => cn ? "管道流动声" : "Pipe flowing", Cue.PipeBurst => cn ? "管道爆裂声" : "Pipe bursting", Cue.Steam => cn ? "蒸汽喷泄声" : "Steam hissing", Cue.Footsteps => cn ? "脚步声" : "Footsteps", Cue.Crying => cn ? "哭声" : "Crying", Cue.Clicking => cn ? "咔嗒声" : "Clicking", Cue.Rustling => cn ? "窸窣声" : "Rustling", Cue.Transformation => cn ? "剧烈变形声" : "Loud contorting sound", Cue.Bite => cn ? "撕咬声" : "Biting sound", Cue.Liquid => cn ? "液体声" : "Liquid sound", Cue.Heartbeat => cn ? "心跳声" : "Heartbeat", Cue.March => cn ? "行进音乐" : "Marching music", Cue.Drum => cn ? "鼓声" : "Drumming", Cue.Snip => cn ? "剪切声" : "Snipping", Cue.Spring => cn ? "弹簧响声" : "Spring rattling", Cue.Crack => cn ? "断裂声" : "Cracking", Cue.Cling => cn ? "缠附声" : "Clinging sound", Cue.Web => cn ? "丝网拉扯声" : "Web straining", Cue.Chitter => cn ? "吱叫声" : "Chittering", Cue.Wings => cn ? "振翅声" : "Wings flapping", Cue.Slime => cn ? "黏液蠕动声" : "Sloshing", Cue.Spray => cn ? "喷气声" : "Puffing", Cue.Rattle => cn ? "沙沙响声" : "Rattling", Cue.Sweeping => cn ? "扫地声" : "Sweeping", Cue.Buzz => cn ? "嗡鸣声" : "Buzzing", Cue.Burst => cn ? "爆裂声" : "Bursting", Cue.TensionMusic => cn ? "紧张音乐" : "Tense music", Cue.Flopping => cn ? "扑动声" : "Flopping", Cue.Sliding => cn ? "滑动声" : "Sliding", Cue.Spit => cn ? "喷吐声" : "Spitting", Cue.VisorHit => cn ? "液体击中面罩" : "Liquid hits visor", Cue.Whining => cn ? "哀鸣声" : "Whining", Cue.HeadRustling => cn ? "头部窸窣声" : "Rustling near head", Cue.Fire => cn ? "火焰声" : "Flames", Cue.Cackle => cn ? "咯咯叫声" : "Cackling", Cue.Electric => cn ? "电击声" : "Electrical crackle", Cue.Broadcast => cn ? "广播声" : "Broadcast", Cue.Launch => cn ? "发射声" : "Launching", Cue.Explosion => cn ? "爆炸声" : "Explosion", Cue.Engine => cn ? "引擎声" : "Engine", Cue.Howl => cn ? "嚎叫声" : "Howling", Cue.Climbing => cn ? "攀爬摩擦声" : "Climbing rustle", Cue.Scratch => cn ? "抓挠声" : "Scratching", Cue.Peck => cn ? "啄击声" : "Pecking", Cue.BirdCall => cn ? "鸣叫声" : "Calling", Cue.DoorImpact => cn ? "撞门声" : "Door pounding", Cue.Alarm => cn ? "警报声" : "Alarm", Cue.WallRumble => cn ? "墙后隆响" : "Rumbling behind wall", Cue.Door => cn ? "门窗声" : "Door mechanism", Cue.MaskSound => cn ? "面具附着声" : "Mask attaching", Cue.Laughter => cn ? "笑声" : "Laughter", _ => cn ? "生物声" : "Creature sound", }; } } internal struct FootstepCadence { private float last; private int quickIntervals; private bool heard; internal Cue Observe(float now) { float num = now - last; if (heard && num < 0.08f) { if (quickIntervals < 2) { return Cue.Footsteps; } return Cue.Running; } quickIntervals = ((heard && num <= 0.38f) ? Math.Min(2, quickIntervals + 1) : 0); heard = true; last = now; if (quickIntervals < 2) { return Cue.Footsteps; } return Cue.Running; } } internal static class IndicatorDetail { internal static string Label(Cue cue, bool chinese, bool rear, bool unlocated) { return CueText.Name(cue, chinese) + ((!unlocated) ? ((!rear) ? "" : (chinese ? "\n后方" : "\nBehind")) : (chinese ? "\n无方向" : "\nUnlocated")); } internal static float Follow(float angle, float target, float seconds, bool reducedMotion) { if (reducedMotion) { return SoundField.Relative(target, 0f); } float num = SoundField.Relative(target, angle); return SoundField.Relative(angle + num * (1f - (float)Math.Exp((0f - Math.Max(0f, Math.Min(0.25f, seconds))) / 0.07f)), 0f); } internal static bool Carried(Cue cue, bool localItem, bool radioReplay) { bool flag = localItem && !radioReplay && CuePresentation.Indicator(cue); if (flag) { bool flag2; switch (CreatureSoundCatalog.Basis(cue)) { case Cue.Footsteps: case Cue.Jump: case Cue.Landing: case Cue.ItemDrop: case Cue.Running: case Cue.LadderClimb: case Cue.DragFootsteps: case Cue.BodyImpact: case Cue.DeathSound: case Cue.WaterSplash: case Cue.MudSink: flag2 = true; break; default: flag2 = false; break; } flag = !flag2; } return flag; } internal static bool CrossesCorner(float ax, float ay, float bx, float by, float left, float top) { float num = 0f; float num2 = 1f; float num3 = bx - ax; float num4 = by - ay; if (Math.Abs(num3) < 0.0001f) { if (ax <= left) { return false; } } else if (num3 > 0f) { num = Math.Max(num, (left - ax) / num3); } else { num2 = Math.Min(num2, (left - ax) / num3); } if (Math.Abs(num4) < 0.0001f) { if (ay >= top) { return false; } } else if (num4 < 0f) { num = Math.Max(num, (top - ay) / num4); } else { num2 = Math.Min(num2, (top - ay) / num4); } if (num < num2 - 0.0001f && num2 > 0f) { return num < 1f; } return false; } internal static float OrbitX(float angle, float radius) { return (float)Math.Sin((double)angle * Math.PI / 180.0) * radius; } internal static float OrbitY(float angle, float radius) { return (float)Math.Cos((double)angle * Math.PI / 180.0) * radius; } } internal sealed class PlaybackClock { private float lastSample; internal float Elapsed { get; private set; } internal PlaybackClock(float now) { lastSample = now; } internal void Reset(float now) { lastSample = now; Elapsed = 0f; } internal void Sample(float now, float pitch, bool paused) { if (!paused) { Elapsed += Math.Max(0f, now - lastSample) * Math.Abs(pitch); } lastSample = now; } } internal static class ScanBudget { internal static int For(int count, int minimum) { if (count > 0) { return Math.Min(count, Math.Min(128, Math.Max(minimum, (count + 7) / 8))); } return 0; } } internal sealed class SoundField { internal sealed class Signal { internal int Id; internal int Source; internal Cue Cue; internal float Bearing; internal float LastHeard; internal float Started; internal float LastRelative; internal bool DirectionKnown; internal bool Continuous; internal bool CarriedItem; internal int Strength; internal float Gain; internal float MusicEnvelope; internal float WindingSeconds = -1f; internal float AdmittedAt; internal float LastShown = -1000f; } private readonly List signals = new List(); private readonly List selected = new List(); private readonly List unlocated = new List(3); private int sequence; private float replaceAt; private float unlocatedReplaceAt; private int[]? layoutSectors; internal IReadOnlyList Visible => selected; internal IReadOnlyList Unlocated => unlocated; internal bool HasSignals => signals.Count > 0; internal int OverflowDirections { get; private set; } internal int TrayCapacity { get; private set; } = 3; internal bool CanDisplaySector(int sector) { if (layoutSectors != null) { if (sector >= 0 && sector < 8) { return layoutSectors[sector] > 0; } return false; } return true; } internal void Observe(int source, Cue cue, float now, float bearing, bool known, bool continuous, float gain, bool localMovement = false, float musicEnvelope = 0f, float windingSeconds = -1f, bool carriedItem = false) { if (!CuePresentation.Indicator(cue, localMovement)) { return; } if (carriedItem) { known = false; } Cue cue2 = CreatureSoundCatalog.Basis(cue); if ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false) { foreach (Signal signal3 in signals) { if (signal3.Source == source && signal3.Cue == Cue.DragFootsteps && now - signal3.LastHeard < 0.85f) { return; } } } cue2 = CreatureSoundCatalog.Basis(cue); if ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false) { for (int num = signals.Count - 1; num >= 0; num--) { bool flag = signals[num].Source == source && CreatureSoundCatalog.Basis(signals[num].Cue) != CreatureSoundCatalog.Basis(cue); if (flag) { cue2 = CreatureSoundCatalog.Basis(signals[num].Cue); bool flag2 = ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false); flag = flag2; } if (flag) { selected.Remove(signals[num]); unlocated.Remove(signals[num]); signals.RemoveAt(num); } } } if (cue == Cue.DragFootsteps) { for (int num2 = signals.Count - 1; num2 >= 0; num2--) { bool flag = signals[num2].Source == source; if (flag) { cue2 = CreatureSoundCatalog.Basis(signals[num2].Cue); bool flag2 = ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false); flag = flag2; } if (flag) { selected.Remove(signals[num2]); unlocated.Remove(signals[num2]); signals.RemoveAt(num2); } } } Signal signal = null; foreach (Signal signal4 in signals) { if (signal4.Source == source && CreatureSoundCatalog.Basis(signal4.Cue) == CreatureSoundCatalog.Basis(cue)) { signal = signal4; break; } } if (signal == null) { if (signals.Count >= 64) { Signal signal2 = signals[0]; foreach (Signal signal5 in signals) { if (CueText.Priority(signal5.Cue) < CueText.Priority(signal2.Cue) || (CueText.Priority(signal5.Cue) == CueText.Priority(signal2.Cue) && signal5.LastHeard < signal2.LastHeard)) { signal2 = signal5; } } if (CueText.Priority(signal2.Cue) > CueText.Priority(cue)) { return; } signals.Remove(signal2); selected.Remove(signal2); } signal = new Signal { Id = ++sequence, Source = source, Cue = cue, Started = now }; signals.Add(signal); } signal.Cue = EventIdentity.Display(signal.Cue, cue, now - signal.LastHeard); if (now - signal.LastHeard > 0.3f) { signal.Started = now; } if (signal.LastHeard != now || signal.CarriedItem != carriedItem || ((!signal.DirectionKnown || known) && (signal.DirectionKnown != known || !(signal.Gain > gain)))) { signal.Gain = gain; signal.CarriedItem = carriedItem; signal.MusicEnvelope = musicEnvelope; signal.WindingSeconds = windingSeconds; signal.LastHeard = now; signal.Bearing = bearing; signal.DirectionKnown = known; signal.Continuous = continuous; signal.Strength = ((gain >= 0.3f) ? 3 : ((!(gain >= 0.08f)) ? 1 : 2)); } } internal static bool IsLive(Signal s, float now) { return now - s.LastHeard <= 0.12f; } internal static float Alpha(Signal s, float now) { float num = (s.Continuous ? 0.12f : 0.65f); return Math.Max(0f, Math.Min(1f, 1f - (now - s.LastHeard - num) / 0.35f)); } internal static float Relative(float bearing, float yaw) { float num = (bearing - yaw) % 360f; if (num >= 180f) { num -= 360f; } if (num < -180f) { num += 360f; } return num; } internal static float SectorAngle(float angle, float previous) { if (Math.Abs(Relative(angle, previous)) < 27.5f) { return previous; } return (float)CueText.DirectionIndex(angle) * 45f; } internal void Update(float now, int budget, float yaw, int unlocatedBudget = 3, int[]? sectorBudgets = null) { layoutSectors = sectorBudgets; TrayCapacity = Math.Max(0, unlocatedBudget); for (int num = signals.Count - 1; num >= 0; num--) { if (Alpha(signals[num], now) <= 0f) { signals.RemoveAt(num); } } foreach (Signal signal in signals) { if (IsLive(signal, now)) { signal.LastRelative = Relative(signal.Bearing, yaw); } } for (int num2 = selected.Count - 1; num2 >= 0; num2--) { if (!signals.Contains(selected[num2]) || !selected[num2].DirectionKnown) { selected.RemoveAt(num2); } } budget = Math.Max(0, Math.Min(64, budget)); unlocatedBudget = Math.Max(0, Math.Min(64, unlocatedBudget)); while (selected.Count > budget) { selected.RemoveAt(selected.Count - 1); } if (sectorBudgets != null) { for (int num3 = selected.Count - 1; num3 >= 0; num3--) { if (!Room(selected[num3], selected, selected[num3], sectorBudgets)) { selected.RemoveAt(num3); } } } foreach (Signal signal2 in signals) { if (!signal2.DirectionKnown || budget == 0 || selected.Contains(signal2)) { continue; } if (selected.Count < budget && Room(signal2, selected, null, sectorBudgets)) { selected.Add(signal2); signal2.AdmittedAt = now; signal2.LastShown = now; continue; } int num4 = -1; for (int i = 0; i < selected.Count; i++) { if (Room(signal2, selected, selected[i], sectorBudgets) && (num4 < 0 || CueText.Priority(selected[i].Cue) < CueText.Priority(selected[num4].Cue) || (CueText.Priority(selected[i].Cue) == CueText.Priority(selected[num4].Cue) && selected[i].AdmittedAt < selected[num4].AdmittedAt))) { num4 = i; } } if (num4 >= 0) { int num5 = CueText.Priority(signal2.Cue); int num6 = CueText.Priority(selected[num4].Cue); if (((num5 == 3 && num6 == 3 && signal2.Started > selected[num4].Started) || num5 > num6) && (num5 >= 3 || !(now < replaceAt))) { selected[num4].LastShown = now; selected[num4] = signal2; signal2.AdmittedAt = now; signal2.LastShown = now; replaceAt = now + 0.5f; } } } RotatePeer(selected, located: true, now, ref replaceAt, sectorBudgets); OverflowDirections = 0; foreach (Signal signal3 in signals) { if (!selected.Contains(signal3) && signal3.DirectionKnown && CueText.Priority(signal3.Cue) == 3) { OverflowDirections |= 1 << CueText.DirectionIndex(signal3.LastRelative); } } for (int num7 = unlocated.Count - 1; num7 >= 0; num7--) { if (!signals.Contains(unlocated[num7]) || unlocated[num7].DirectionKnown) { unlocated.RemoveAt(num7); } } while (unlocated.Count > unlocatedBudget) { unlocated.RemoveAt(unlocated.Count - 1); } foreach (Signal signal4 in signals) { if (unlocatedBudget == 0 || signal4.DirectionKnown || !CanUnlocate(signal4) || unlocated.Contains(signal4)) { continue; } int num8 = -1; for (int j = 0; j < unlocated.Count; j++) { if (unlocated[j].Cue == signal4.Cue) { num8 = j; break; } } if (num8 >= 0) { if (signal4.LastHeard > unlocated[num8].LastHeard) { signal4.AdmittedAt = unlocated[num8].AdmittedAt; signal4.LastShown = unlocated[num8].LastShown; unlocated[num8] = signal4; } continue; } if (unlocated.Count < unlocatedBudget) { unlocated.Add(signal4); signal4.AdmittedAt = now; signal4.LastShown = now; continue; } int index = 0; for (int k = 1; k < unlocated.Count; k++) { if (CueText.Priority(unlocated[k].Cue) < CueText.Priority(unlocated[index].Cue) || (CueText.Priority(unlocated[k].Cue) == CueText.Priority(unlocated[index].Cue) && unlocated[k].AdmittedAt < unlocated[index].AdmittedAt)) { index = k; } } int num9 = CueText.Priority(signal4.Cue); int num10 = CueText.Priority(unlocated[index].Cue); if (num9 > num10) { unlocated[index].LastShown = now; unlocated[index] = signal4; signal4.AdmittedAt = now; signal4.LastShown = now; unlocatedReplaceAt = now + 0.5f; } } RotatePeer(unlocated, located: false, now, ref unlocatedReplaceAt); } private static bool Room(Signal candidate, List slots, Signal? removing, int[]? budgets) { if (budgets == null) { return true; } int num = CueText.DirectionIndex(candidate.LastRelative); int num2 = 0; foreach (Signal slot in slots) { if (slot != removing && CueText.DirectionIndex(slot.LastRelative) == num) { num2++; } } return num2 < budgets[num]; } private void RotatePeer(List slots, bool located, float now, ref float nextReplacement, int[]? sectorBudgets = null) { if (slots.Count == 0 || now < nextReplacement) { return; } int index = -1; Signal signal = null; foreach (Signal signal3 in signals) { if (signal3.DirectionKnown != located || slots.Contains(signal3) || !IsLive(signal3, now) || CueText.Priority(signal3.Cue) >= 3) { continue; } if (!located) { if (!CanUnlocate(signal3)) { continue; } bool flag = false; foreach (Signal slot in slots) { if (slot.Cue == signal3.Cue) { flag = true; break; } } if (flag) { continue; } } for (int i = 0; i < slots.Count; i++) { Signal signal2 = slots[i]; if (CueText.Priority(signal2.Cue) == CueText.Priority(signal3.Cue) && !(now - signal2.AdmittedAt < 2f) && !(signal3.LastShown > signal2.AdmittedAt) && Room(signal3, slots, signal2, located ? sectorBudgets : null) && (signal == null || signal3.LastShown < signal.LastShown || (signal3 == signal && signal2.AdmittedAt < slots[index].AdmittedAt))) { signal = signal3; index = i; } } } if (signal != null) { slots[index].LastShown = now; slots[index] = signal; signal.AdmittedAt = now; signal.LastShown = now; nextReplacement = now + 0.5f; } } internal void Clear() { signals.Clear(); selected.Clear(); unlocated.Clear(); OverflowDirections = 0; replaceAt = (unlocatedReplaceAt = 0f); layoutSectors = null; TrayCapacity = 3; } internal static bool CanUnlocate(Signal s) { if (!s.CarriedItem) { return CuePresentation.Unlocated(s.Cue); } return true; } } internal static class SpeechText { internal static bool Active(bool local, bool dead, bool speaking, bool muted, float volume, float amplitude) { if (!local && !dead && speaking && !muted && volume > 0f) { return amplitude > 0.0005f; } return false; } internal static string SafeName(string raw) { StringBuilder stringBuilder = new StringBuilder(32); foreach (char c in raw) { if (stringBuilder.Length >= 32) { break; } bool flag = char.IsControl(c); if (!flag) { bool flag2 = ((c == '<' || c == '>') ? true : false); flag = flag2; } if (!flag && (c < '\u202a' || c > '\u202e') && (c < '\u2066' || c > '\u2069')) { stringBuilder.Append(c); } } if (stringBuilder.Length != 0) { return stringBuilder.ToString(); } return "Player"; } } internal sealed class SpokenFrame { private string first = ""; private string second = ""; private string cachedFirst = ""; private string cachedSecond = ""; private string cachedText = ""; private int firstRank; private int secondRank; private int firstId; private int secondId; internal string Text { get { if (first != cachedFirst || second != cachedSecond) { cachedFirst = first; cachedSecond = second; cachedText = ((second.Length == 0) ? first : (first + "\n" + second)); } return cachedText; } } internal void Clear() { first = (second = ""); firstRank = (secondRank = 0); } internal void Observe(int id, int rank, string text) { if (text.Length != 0) { if (first.Length > 0 && id == firstId) { first = text; } else if (second.Length > 0 && id == secondId) { second = text; } else if (first.Length == 0 || rank > firstRank || (rank == firstRank && id < firstId)) { second = first; secondRank = firstRank; secondId = firstId; first = text; firstRank = rank; firstId = id; } else if (second.Length == 0 || rank > secondRank || (rank == secondRank && id < secondId)) { second = text; secondRank = rank; secondId = id; } } } } internal static class SpokenTracks { internal readonly struct Line { internal readonly string Clip; internal readonly string Chinese; internal readonly string English; internal readonly float Start; internal readonly float End; internal Line(string clip, float start, float end, string cn, string en) { Clip = clip; Start = start; End = end; Chinese = cn; English = en; } } internal static readonly Line[] Lines = new Line[43] { new Line("IntroCompanySpeech", 0f, 5f, "[公司提示音]", "[Company chime]"), new Line("IntroCompanySpeech", 7.31f, 10.05f, "欢迎来到上班第一天!", "Welcome to your first day on the job!"), new Line("IntroCompanySpeech", 10.14f, 12.35f, "这是配发给你们的自动驾驶飞船,", "This is your very own autopilot ship,"), new Line("IntroCompanySpeech", 12.44f, 15.2f, "合同期间,你们将在这里用餐和休息。", "where you will eat and sleep for the duration of your contract."), new Line("IntroCompanySpeech", 15.28f, 19.75f, "[高速播放的模糊语音]", "[Rapid, indistinct speech]"), new Line("IntroCompanySpeech", 19.94f, 21.6f, "请把这里当作自己的家。", "Make yourself at home."), new Line("IntroCompanySpeech", 21.69f, 23.7f, "要完成入职流程,", "To complete the onboarding process,"), new Line("IntroCompanySpeech", 23.77f, 25.6f, "请查看操作手册,", "please read the instruction manual"), new Line("IntroCompanySpeech", 25.65f, 28.2f, "并登录飞船上的电脑终端。", "and sign into your ship's computer terminal."), new Line("IntroCompanySpeech", 28.29f, 31f, "我们相信,你会成为公司的宝贵资产。", "We trust you will be a great asset to the Company."), new Line("IntroCompanySpeech", 31.035f, 32.75f, "宝贵……公司的宝贵资产……", "Great asset… great asset to the Company…"), new Line("IntroCompanySpeech", 32.83f, 35.1f, "资产……宝贵……宝贵……公司的宝贵资产……", "Asset… great… great… great asset to the Company…"), new Line("IntroCompanySpeech", 35.235f, 37.129f, "宝贵……资……资产……", "Great… asset… asset…"), new Line("0DaysLeftAlert", 0f, 4.8f, "[公司提示音]", "[Company chime]"), new Line("0DaysLeftAlert", 4.969f, 7.1f, "请立即前往公司大楼,", "Please report to the Company building immediately"), new Line("0DaysLeftAlert", 7.189f, 9.6f, "出售废料和其他物品。", "to sell your scrap metal and other goods."), new Line("0DaysLeftAlert", 9.758f, 13f, "距离完成利润指标的期限只剩零天。", "You have zero days left to meet the profit quota."), new Line("0DaysLeftAlert", 13.085f, 14.8f, "你可以通过终端,", "You can use the terminal"), new Line("0DaysLeftAlert", 14.874f, 17.061f, "让自动驾驶系统前往公司大楼。", "to route the autopilot to the Company building."), new Line("FiredVoiceline", 0.15f, 2.18f, "由于你们未能完成利润指标,", "Because you did not meet the profit quota,"), new Line("FiredVoiceline", 2.2f, 4.3f, "工作表现被评定为低于标准。", "your performance has been rated below standard."), new Line("FiredVoiceline", 5.47f, 7.52f, "欢迎进入公司的惩戒流程。", "Welcome to the Company's disciplinary process."), new Line("SnareFleaTipChannel", 0.33f, 2.75f, "如果某个实体接触了船员,", "If an entity comes into contact with a crew member,"), new Line("SnareFleaTipChannel", 2.83f, 5.2f, "请不要立即采取自卫措施。", "do not immediately take defensive action."), new Line("SnareFleaTipChannel", 5.3f, 7.4f, "请先询问该船员以下问题:", "First, ask the crew member these questions:"), new Line("SnareFleaTipChannel", 7.495f, 9.32f, "“这个实体有攻击性吗?”", "\"Is this entity aggressive?\""), new Line("SnareFleaTipChannel", 9.41f, 10.58f, "“你受伤了吗?”", "\"Are you injured?\""), new Line("SnareFleaTipChannel", 10.635f, 11.67f, "“你需要帮助吗?”", "\"Do you need help?\""), new Line("SnareFleaTipChannel", 11.73f, 13.84f, "如果这些问题的答案都是“是”,", "If the answer to all these questions is yes,"), new Line("SnareFleaTipChannel", 13.92f, 15.82f, "再开始采取自卫措施。", "then take defensive action."), new Line("SnareFleaTipChannel", 15.9f, 17.12f, "如果船员感到紧张,", "If the crew member is anxious,"), new Line("SnareFleaTipChannel", 17.19f, 19.54f, "可以问一句:“今天过得怎么样?”", "you can ask: \"How was your day?\""), new Line("SnareFleaTipChannel", 19.62f, 22.147f, "感谢配合,祝你旅途愉快!", "Thank you for your cooperation. Have a safe journey!"), new Line("Mic1", 0f, 9999f, "你们的工作让公司十分满意。", "Your work keeps the Company happy."), new Line("Mic2", 0f, 9999f, "我们重视你们的投入。", "We value your commitment."), new Line("Mic4", 0f, 9999f, "你们的辛勤工作对公司极具价值。", "Your hard work is invaluable to the Company."), new Line("Mic9", 0f, 9999f, "你们诚实的工作对公司极具价值。", "Your honest work is invaluable to the Company."), new Line("Mic10", 0f, 9999f, "你们是真正的专业人士。", "You are true professionals."), new Line("Mic3", 0f, 9999f, "我们需要你们…… [信号故障]", "We need you… [Signal glitch]"), new Line("Mic6", 0f, 9999f, "[失真的喊声]", "[Distorted shouting]"), new Line("Mic7", 0f, 9999f, "公司必须保持满意……公司必…… [信号中断]", "The Company must stay happy… [Signal cuts out]"), new Line("Mic8", 0f, 9999f, "这面墙无法困住…… [信号故障]", "These walls cannot contain… [Signal glitch]"), new Line("Mic11", 0f, 9999f, "让我们的投资者满意。", "Keep our investors happy.") }; internal static bool MatchesLength(string clip, float length) { return clip switch { "SnareFleaTipChannel" => Math.Abs(length - 22.146833f) < 0.1f, "0DaysLeftAlert" => Math.Abs(length - 17.061417f) < 0.1f, "IntroCompanySpeech" => Math.Abs(length - 37.128708f) < 0.1f, "FiredVoiceline" => Math.Abs(length - 10.540292f) < 0.1f, "Mic9" => Math.Abs(length - 3.311063f) < 0.1f, "Mic2" => Math.Abs(length - 1.575125f) < 0.1f, "Mic1" => Math.Abs(length - 1.971229f) < 0.1f, "Mic4" => Math.Abs(length - 2.111625f) < 0.1f, "Mic6" => Math.Abs(length - 0.799833f) < 0.1f, "Mic7" => Math.Abs(length - 2.572854f) < 0.1f, "Mic11" => Math.Abs(length - 1.598521f) < 0.1f, "Mic10" => Math.Abs(length - 1.625937f) < 0.1f, "Mic8" => Math.Abs(length - 5.318687f) < 0.1f, "Mic3" => Math.Abs(length - 2.527583f) < 0.1f, _ => false, }; } internal static bool Known(string clip) { Line[] lines = Lines; for (int i = 0; i < lines.Length; i++) { if (lines[i].Clip == clip) { return true; } } return false; } internal static string At(string clip, float time, bool chinese) { Line[] lines = Lines; for (int i = 0; i < lines.Length; i++) { Line line = lines[i]; if (line.Clip == clip && time >= line.Start && time < line.End) { if (!chinese) { return line.English; } return line.Chinese; } } return ""; } } internal static class StableOrbit { internal static float Offset(float bearing, float previous, float[] admitted, int count, float gap) { if (Free(bearing + previous, admitted, count, gap * 0.85f)) { return previous; } float result = previous; float num = float.MaxValue; for (int i = 0; i < count; i++) { for (int j = -1; j <= 1; j += 2) { float num2 = admitted[i] + (float)j * gap; float num3 = SoundField.Relative(num2, bearing); float num4 = Math.Abs(SoundField.Relative(num3, previous)); if (num4 < num && Free(num2, admitted, count, gap)) { result = num3; num = num4; } } } if (num < float.MaxValue) { return result; } return previous; } internal static float Ease(float current, float target, ref float velocity, float seconds, bool reducedMotion) { if (reducedMotion) { velocity = 0f; return SoundField.Relative(target, 0f); } float num = Math.Max(0f, Math.Min(0.1f, seconds)); float num2 = SoundField.Relative(target, current); float num3 = Math.Max(-90f, Math.Min(90f, num2 / 0.25f)); velocity += (num3 - velocity) * (1f - (float)Math.Exp((0f - num) / 0.12f)); float num4 = velocity * num; if (num4 * num2 >= 0f && Math.Abs(num4) >= Math.Abs(num2)) { num4 = num2; velocity = 0f; } return SoundField.Relative(current + num4, 0f); } private static bool Free(float angle, float[] admitted, int count, float gap) { for (int i = 0; i < count; i++) { if (Math.Abs(SoundField.Relative(angle, admitted[i])) < gap - 0.001f) { return false; } } return true; } } internal static class StreamEvidence { internal static bool HasModulation(float[] samples) { if (samples.Length < 16) { return false; } double num = 0.0; double num2 = 0.0; foreach (float num3 in samples) { if (float.IsNaN(num3) || float.IsInfinity(num3)) { return false; } num += (double)num3; num2 += (double)num3 * (double)num3; } double num4 = num / (double)samples.Length; double num5 = num2 / (double)samples.Length; double num6 = Math.Max(0.0, num5 - num4 * num4); if (num6 > 1E-08) { return num4 * num4 < num6 * 4.0; } return false; } } internal static class WindingEnvelope { private static readonly byte[] Levels = Convert.FromBase64String("WXd/m/+vcFdFOigdFgsugXxTMqCIZlhHNyYXFxMPEQsUvIp2VG7PmoRZ4LZzTFTPjnFDqoafekktLiMeFBgTDCbHU5dU/72BrmdTKzIrHBwWIZxtYl+1m35tUDclIx0gHRYc25dzaf/SlnZNNCslHhcPCQcGBQMb7JpwfVszHyAjGRQQDAYEBAQDAgmskqWFTC4wKCEWGh1rVl1e65mCalI7LCoeExMu/86JotWffMWvjGitlH1q4bPMik06OCQdKCA392i6zP+ix1tiNkQmLx+KlJZv8qOSZUE9NCwgFSrftoXfy5ByVUYvGhQPCwcGBRiUWjtGNRoUEw8JDAoFBAQCFtt9YE4sGTmNYzJDRkJ77JxsQyghdHNAL4ZbQf+8hYKBWXL7pmyPaWS8ml9GLCJBw619gZtmyoFXPCMkQv+ygsqMbNKTVy8iG3vGiWGYb4SzaTonGxuWbjl0dXHGg1E7JRh5e0cuHRB9xYNLMCx+fktCbVyX9ZhyQCtzbUZSa1WmeFduZFH1q2V9YFj/tJxlPWfOvF7jh9WqgkkvJcnVnmVBWeyHV0E1g39Xk5+L5odXjGyZlGA5IBnlvpxcOICVWzYsMdePRzsjXlc5NShQln9njWm1a1GAVaysgFM3iv+C2reusXdCQz2CUikbGWyXTqRtpJtXh0ihx2e6XMBzem/Tq/+BxnKbaU0vLWeRbIR0lI1JNjGXjapbXpJdTnesv7uRYoeEYW+Go7jOYXK3fY9uhKnltKv/lm15XpWdoNfa2myQh5Gd9NL6tZt1fZGJn5awsYBpTIeLo4BUmWs9N2tmfWI1hV5Nhf+itKN/e3p9aNWqh4edanJenJWboVOXd2Nv+vbBeZqPo3eZrMuBZaN/d//f4bR8tZVWZ5aHpn10ll45bmt/VmuMZ1x3fIVOa4VUXnSPkXmagXNco7uZk413gYjAhf+BhLqCZc2kgX+Xco5ujcRweZ+IUGSFnH13c4llfIaDZHVuzojt/YOws4F05JaftHFGp8GbqJCCepCYq6yXhZiAboKae3SNc4v/nGufcE57fl9tcGtMXmJWVVVhlpt7m4Z0ov+IosKEiqiufnSSl22Fi3GwmpyajGuskZd4q7fJnrOGm2aNk2CgsYqJiZKcgpOQf7aHeKu3gcSg9e6ru9W7o45xdG9fgoNwe3CzeG+diHKKhHyXeYTEtnf/nHmsn2CftnShfGx7qLq2pcDBx+vQwZeSr4WQjJWNam53V2OWgHSTeH6Yk42FhLiGldK2dL2UZ5CPgX13anyOvIasdcPIgP/MicW2b6RzbnBRUl5LOkc2ND06NzMyIyEcFRcaGR0ZHRoZGRUPDhIgIB0QCQYEAgIBAQEBAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); internal static float At(float seconds) { if (float.IsNaN(seconds) || seconds < 0f || seconds >= 42.864037f) { return 0f; } float num = seconds * 25f; int num2 = (int)num; if (num2 >= Levels.Length) { return 0f; } float num3 = (float)(int)Levels[num2] / 255f; float num4 = (float)(int)Levels[Math.Min(num2 + 1, Levels.Length - 1)] / 255f; return num3 + (num4 - num3) * (num - (float)num2); } internal static float Urgency(float seconds) { if (!float.IsNaN(seconds)) { return Math.Max(0f, Math.Min(1f, seconds / 42.864037f)); } return 0f; } internal static float Shake(float seconds, bool live, bool lowMotion) { if (!lowMotion && live && !(seconds < 0f)) { return (2f + 12f * Urgency(seconds)) * (float)Math.Sin(Math.PI * 2.0 * (double)(2f * seconds + 0.08f * seconds * seconds)); } return 0f; } internal static float Scale(float envelope, bool live, bool lowMotion) { if (!lowMotion && live) { return 1f + 0.14f * Math.Max(0f, Math.Min(1f, envelope)); } return 1f; } } internal static class WorldSoundPolicy { internal static bool ClockSpace(bool inShip, bool itemInside, bool listenerInside) { if (!inShip) { return itemInside == listenerInside; } return true; } internal static float DeviceBlend(bool authoredSpatial, float distance, float maxDistance, float actualBlend) { if (!authoredSpatial || !(distance <= maxDistance)) { return actualBlend; } return 1f; } } } namespace Sensus.Audio { internal static class AnimationAudioBindings { internal static void Register(Component component) { PlayAudioAnimationEvent val = (PlayAudioAnimationEvent)(object)((component is PlayAudioAnimationEvent) ? component : null); if (val != null) { EnemyAI componentInParent = ((Component)val).GetComponentInParent(); if ((componentInParent is SpringManAI || componentInParent is CrawlerAI || componentInParent is HoarderBugAI || componentInParent is JesterAI || componentInParent is NutcrackerEnemyAI || componentInParent is BushWolfEnemy || componentInParent is MouthDogAI || componentInParent is PufferAI) ? true : false) { Cue cue = ((componentInParent is BushWolfEnemy) ? Cue.WolfFootsteps : ((componentInParent is JesterAI) ? Cue.MechanicalTurn : ((componentInParent is NutcrackerEnemyAI) ? Cue.BootFootsteps : ((componentInParent is HoarderBugAI) ? Cue.SkitterFootsteps : ((componentInParent is SpringManAI) ? Cue.BareFootsteps : ((!(componentInParent is CrawlerAI) && !(componentInParent is MouthDogAI)) ? Cue.Footsteps : Cue.HeavyFootsteps)))))); Cue cue2 = cue; AudioRegistry.Clips(val.randomClips, cue2); AudioRegistry.Source(val.audioToPlay, cue2, (Component)(object)componentInParent, merge: true); AudioRegistry.ContextClips(val.audioToPlay, val.randomClips, cue2); } if (componentInParent is JesterAI) { AudioRegistry.Clips(val.randomClips2, Cue.HeavyFootsteps); AudioRegistry.Clips(val.audioClip, Cue.BareFootsteps); } if (componentInParent is CaveDwellerAI) { AudioRegistry.Clips(val.randomClips, Cue.SmallFootsteps); AudioRegistry.Source(val.audioToPlay, Cue.SmallFootsteps, (Component)(object)componentInParent, merge: true); } else if (componentInParent is ForestGiantAI) { AudioRegistry.Clips(val.randomClips, Cue.HeavyFootsteps); AudioRegistry.Clips(val.randomClips2, Cue.HeavyFootsteps); AudioRegistry.Clips(val.audioClip, Cue.Roar); AudioRegistry.Clips(val.audioClip2, Cue.Bite); AudioRegistry.Source(val.audioToPlay, Cue.HeavyFootsteps, (Component)(object)componentInParent, merge: true); AudioRegistry.Source(val.audioToPlayB, Cue.HeavyFootsteps, (Component)(object)componentInParent, merge: true); } else if (componentInParent is DressGirlAI) { AudioRegistry.Clips(val.randomClips, Cue.SkippingFootsteps); AudioRegistry.Source(val.audioToPlay, Cue.Creature, (Component)(object)componentInParent, merge: true); } else if (componentInParent is FlowermanAI) { AudioRegistry.Clips(val.randomClips, Cue.Rustling); AudioRegistry.Clips(val.randomClips2, Cue.Footsteps); AudioRegistry.Clips(val.audioClip, Cue.Creature); } } } } internal static class AudioCallTokens { private static readonly Dictionary Codes = CreateCodes(); private static Dictionary CreateCodes() { Dictionary dictionary = new Dictionary(); FieldInfo[] fields = typeof(OpCodes).GetFields(BindingFlags.Static | BindingFlags.Public); foreach (FieldInfo fieldInfo in fields) { if (fieldInfo.FieldType == typeof(OpCode)) { OpCode value = (OpCode)fieldInfo.GetValue(null); dictionary[value.Value] = value; } } return dictionary; } internal static IEnumerable Read(byte[] il) { int size; for (int at = 0; at < il.Length; at += size) { short num = il[at++]; if (num == 254) { if (at == il.Length) { throw new InvalidOperationException("Truncated IL opcode."); } num = (short)(0xFE00 | il[at++]); } if (!Codes.TryGetValue(num, out var value)) { throw new InvalidOperationException("Unknown IL opcode."); } switch (value.OperandType) { case OperandType.InlineNone: size = 0; break; case OperandType.ShortInlineBrTarget: case OperandType.ShortInlineI: case OperandType.ShortInlineVar: size = 1; break; case OperandType.InlineVar: size = 2; break; case OperandType.InlineI8: case OperandType.InlineR: size = 8; break; case OperandType.InlineSwitch: { if (at + 4 > il.Length) { throw new InvalidOperationException("Truncated switch."); } int num2 = BitConverter.ToInt32(il, at); if (num2 < 0 || num2 > (il.Length - at - 4) / 4) { throw new InvalidOperationException("Invalid switch length."); } size = 4 + num2 * 4; break; } default: size = 4; break; } if (size > il.Length - at) { throw new InvalidOperationException("Truncated IL operand."); } if (value == OpCodes.Call || value == OpCodes.Callvirt) { yield return BitConverter.ToInt32(il, at); } } } } internal sealed class AudioCapture : IDisposable { private sealed class Playback { internal AudioSource Source; internal AudioClip Clip; internal Cue Cue; internal bool Personal; internal bool PersonalMovement; internal bool MaskedStep; internal bool CadenceObserved; internal float Scale; internal int SpokenRank; internal string SpokenClip = ""; internal PlaybackClock Clock = new PlaybackClock(0f); internal bool OneShot; internal bool Loop; internal bool Paused; internal bool Explained; internal bool HadDirection; internal bool DeviceSpatial; internal float LastBearing; internal int Group; internal bool Radio; internal OccludeAudio? Occlusion; internal VehicleController? Vehicle; internal ItemDropship? Delivery; internal GrabbableObject? Item; internal AnimationCurve? Rolloff; internal AnimationCurve? SpatialCurve; internal float RefreshCurveAt; } private readonly Dictionary maskedCadences = new Dictionary(); private readonly SpokenFrame spoken = new SpokenFrame(); private readonly bool externalDialogue; private bool spokenChinese; private readonly List playing = new List(); private readonly List ambientSources = new List(); private readonly HashSet trackedSources = new HashSet(); private Playback? ambientBest; private int ambientCursor; private readonly Stack pool = new Stack(); private readonly HashSet resolvedReported = new HashSet(); private readonly HashSet filteredReported = new HashSet(); private readonly HashSet audibleReported = new HashSet(); private float nextPrune; private readonly CaptionBuffer captions = new CaptionBuffer(); private readonly VoiceActivity voices = new VoiceActivity(); private readonly Dictionary voiceSamples = new Dictionary(); private readonly SensusSettings settings; private readonly ManualLogSource log; private int playbackCalls; private int received; private int unresolved; private int rejected; private int observed; private float nextDiagnostic; private float nextTick; private string listenerState = "not-ready"; private int listenerId; private bool observerError; private bool reportedEmptyPlantAudio; private readonly Queue<(float time, AudioSource source, AudioClip clip)> recentPlantAudio = new Queue<(float, AudioSource, AudioClip)>(); private float nextPlantTrace; private CadaverGrowthAI? plantTraceGrowth; private SprayPaintItem? plantTraceSprayer; private float plantTraceStarted; private int plantTraceStage; private int plantTraceEvents; private bool plantTraceLocal; private double tickMilliseconds; private double peakTickMilliseconds; private int timedTicks; private readonly HashSet explicitPlaying = new HashSet(); internal string SpokenText { get; private set; } = ""; internal int CaptionScreenBudget { get; set; } = 5; internal int OmittedCaptions => captions.Omitted; internal static AudioCapture? Current { get; private set; } internal bool Ready { get; set; } internal string Text { get; private set; } = ""; internal SoundField Field { get; } = new SoundField(); internal bool BeginPlantTrace(CadaverGrowthAI growth, SprayPaintItem sprayer) { if (!settings.Diagnostics.Value || Time.unscaledTime < nextPlantTrace) { return false; } nextPlantTrace = Time.unscaledTime + 5f; plantTraceGrowth = growth; plantTraceSprayer = sprayer; plantTraceStarted = Time.unscaledTime; plantTraceStage = 0; plantTraceEvents = 0; plantTraceLocal = FeedbackFifth.LocalClearing; WritePlantTrace("before", growth, sprayer); return true; } internal void WritePlantTrace(string phase, CadaverGrowthAI growth, SprayPaintItem sprayer) { //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) try { AudioSource destroyAudio = growth.destroyAudio; ManualLogSource obj = log; object[] obj2 = new object[6] { phase, Time.frameCount, plantTraceLocal, null, null, null }; object obj3; if (destroyAudio == null) { obj3 = null; } else { AudioClip clip = destroyAudio.clip; obj3 = ((clip != null) ? ((Object)clip).name : null); } if (obj3 == null) { obj3 = ""; } obj2[3] = obj3; obj2[4] = (Object)(object)destroyAudio != (Object)null && destroyAudio.isPlaying; AudioSource sprayAudio = sprayer.sprayAudio; object obj4; if (sprayAudio == null) { obj4 = null; } else { AudioClip clip2 = sprayAudio.clip; obj4 = ((clip2 != null) ? ((Object)clip2).name : null); } if (obj4 == null) { obj4 = ""; } obj2[5] = obj4; obj.LogInfo((object)string.Format("Cadaver clear trace {0}: frame={1}, local={2}, destroyClip={3}, playing={4}, sprayClip={5}", obj2)); TracePlantSource("destroy", destroyAudio); TracePlantSource("spore ambience", growth.sporeAmbienceSource); TracePlantSource("plant", growth.plantAudio); TracePlantSource("vines", growth.vinesInHeadAudio); TracePlantSource("spray", sprayer.sprayAudio); foreach (var item in recentPlantAudio) { if (Time.unscaledTime - item.time <= 2f && (Object)(object)item.source != (Object)null && (Object)(object)item.clip != (Object)null) { ManualLogSource obj5 = log; object[] obj6 = new object[6] { Time.unscaledTime - item.time, ((Object)item.clip).name, ((Object)item.source).name, null, null, null }; Transform parent = ((Component)item.source).transform.parent; obj6[3] = ((parent != null) ? ((Object)parent).name : null); obj6[4] = item.source.isPlaying; obj6[5] = Vector3.Distance(((Component)item.source).transform.position, ((Component)sprayer).transform.position); obj5.LogInfo((object)string.Format("Cadaver clear nearby playback: age={0:F3}, clip={1}, source={2}, parent={3}, playing={4}, distance={5:F1}", obj6)); } } } catch (Exception e) { ObserverFailure(e); } } private void TracePlantSource(string role, AudioSource? source) { if (!((Object)(object)source == (Object)null)) { ManualLogSource obj = log; object[] obj2 = new object[7] { role, null, null, null, null, null, null }; AudioClip clip = source.clip; obj2[1] = ((clip != null) ? ((Object)clip).name : null) ?? ""; obj2[2] = source.isPlaying; obj2[3] = ((Behaviour)source).isActiveAndEnabled; obj2[4] = source.volume; obj2[5] = source.pitch; obj2[6] = source.timeSamples; obj.LogInfo((object)string.Format("Cadaver source state: role={0}, clip={1}, playing={2}, enabled={3}, volume={4:F3}, pitch={5:F3}, samples={6}", obj2)); } } private void TickPlantTrace(float now) { if ((Object)(object)plantTraceGrowth == (Object)null) { return; } if (!settings.Diagnostics.Value || (Object)(object)plantTraceSprayer == (Object)null) { plantTraceGrowth = null; plantTraceSprayer = null; return; } float num = ((plantTraceStage == 0) ? 0.25f : ((plantTraceStage == 1) ? 1f : 2f)); if (!(now - plantTraceStarted < num)) { WritePlantTrace($"delayed +{now - plantTraceStarted:F2}s", plantTraceGrowth, plantTraceSprayer); if (++plantTraceStage >= 3) { plantTraceGrowth = null; plantTraceSprayer = null; } } } internal bool HasLoop(AudioSource source) { return trackedSources.Contains(source); } internal AudioCapture(SensusSettings settings, ManualLogSource log) { this.settings = settings; this.log = log; externalDialogue = LanguagePolicy.UseChinese("Auto", Chainloader.PluginInfos.Keys); log.LogInfo((object)(externalDialogue ? "Dialogue owner: LC-Chinese-Project (GUID detected; readiness unverified). Sensus dialogue rendering withheld; translation settings untouched." : "Dialogue owner: Sensus. Timed English/Chinese tracks enabled by Dialogue.Enabled.")); Current = this; SceneManager.sceneUnloaded += SceneUnloaded; } private void SceneUnloaded(Scene scene) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) recentPlantAudio.Clear(); nextPlantTrace = 0f; plantTraceGrowth = null; plantTraceSprayer = null; explicitPlaying.RemoveWhere(delegate(AudioSource s) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)s == (Object)null)) { Scene scene2 = ((Component)s).gameObject.scene; return ((Scene)(ref scene2)).handle == ((Scene)(ref scene)).handle; } return true; }); playing.RemoveAll(delegate(Playback p) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)p.Source == (Object)null)) { Scene scene2 = ((Component)p.Source).gameObject.scene; return ((Scene)(ref scene2)).handle == ((Scene)(ref scene)).handle; } return true; }); trackedSources.RemoveWhere(delegate(AudioSource s) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)s == (Object)null)) { Scene scene2 = ((Component)s).gameObject.scene; return ((Scene)(ref scene2)).handle == ((Scene)(ref scene)).handle; } return true; }); ambientSources.RemoveAll(delegate(Playback p) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)p.Source == (Object)null)) { Scene scene2 = ((Component)p.Source).gameObject.scene; return ((Scene)(ref scene2)).handle == ((Scene)(ref scene)).handle; } return true; }); ambientBest = null; captions.Clear(); Field.Clear(); voices.Clear(); voiceSamples.Clear(); Text = ""; SpokenText = ""; spoken.Clear(); resolvedReported.Clear(); filteredReported.Clear(); audibleReported.Clear(); } internal static void Record(AudioSource source, AudioClip clip, float scale, bool oneShot, bool humanFootstep = false) { AudioCapture current = Current; if (current == null || !current.Ready) { return; } try { current.playbackCalls++; current.Add(source, clip, scale, oneShot, humanFootstep); } catch (Exception e) { current.ObserverFailure(e); } } internal static void RecordPlay(AudioSource source, bool explicitPlay = false) { AudioCapture current = Current; if (current == null || !current.Ready) { return; } try { if ((Object)(object)source == (Object)null) { return; } if ((Object)(object)source.clip == (Object)null) { if (explicitPlay && current.settings.Diagnostics.Value && !current.reportedEmptyPlantAudio) { Component? obj = AudioRegistry.Owner(source); CadaverGrowthAI val = (CadaverGrowthAI)(object)((obj is CadaverGrowthAI) ? obj : null); if (val != null && (Object)(object)source == (Object)(object)val.destroyAudio) { current.reportedEmptyPlantAudio = true; current.log.LogInfo((object)"Cadaver destroyAudio has no assigned clip; this playback entry cannot emit its assigned recording. Other simultaneous sources are not excluded."); } } } else { if (!explicitPlay && AudioRegistry.IsSurfaceStep(source.clip)) { return; } if (AudioRegistry.Owner(source) is MicrowaveItem || ((Object)source.clip).name == "MicrowaveWhir" || FeedbackFifth.RequiresExplicitPlay(source)) { if (explicitPlay && current.explicitPlaying.Count < 128) { current.explicitPlaying.Add(source); } if (!current.explicitPlaying.Contains(source)) { return; } } current.playbackCalls++; current.Add(source, source.clip, 1f, oneShot: false); } } catch (Exception e) { current.ObserverFailure(e); } } private void ObserverFailure(Exception e) { if (!observerError) { observerError = true; log.LogWarning((object)("Sound observation failed; original playback was preserved: " + e.Message)); } } private void Add(AudioSource source, AudioClip clip, float scale, bool oneShot, bool humanFootstep = false) { if (settings.Diagnostics.Value && (Object)(object)source != (Object)null && (Object)(object)clip != (Object)null) { if ((Object)(object)plantTraceGrowth != (Object)null && Time.unscaledTime - plantTraceStarted <= 2f && plantTraceEvents++ < 32) { ManualLogSource obj = log; object[] obj2 = new object[6] { Time.unscaledTime - plantTraceStarted, ((Object)clip).name, ((Object)source).name, null, null, null }; Transform parent = ((Component)source).transform.parent; obj2[3] = ((parent != null) ? ((Object)parent).name : null); obj2[4] = oneShot; obj2[5] = source.volume; obj.LogInfo((object)string.Format("Cadaver post-clear playback: dt={0:F3}, clip={1}, source={2}, parent={3}, oneShot={4}, volume={5:F3}", obj2)); } if (recentPlantAudio.Count >= 32) { recentPlantAudio.Dequeue(); } recentPlantAudio.Enqueue((Time.unscaledTime, source, clip)); } if ((Object)(object)source == (Object)null || (Object)(object)clip == (Object)null || !((Behaviour)source).isActiveAndEnabled || FeedbackFourth.StartupVehicle(source, clip)) { return; } if (!CueResolver.TryResolve(source, clip, out var cue) && !humanFootstep) { unresolved++; return; } bool flag = oneShot && (humanFootstep || AudioRegistry.IsSurfaceStep(clip)) && (Object)(object)((Component)source).GetComponentInParent() != (Object)null; if (flag) { cue = Cue.Footsteps; } else if (humanFootstep || (AudioRegistry.IsSurfaceStep(clip) && oneShot && (Object)(object)((Component)source).GetComponentInParent() != (Object)null)) { cue = ((scale > 0.8f) ? Cue.Running : Cue.Footsteps); } bool flag2; if ((cue == Cue.Footsteps || cue == Cue.Running) ? true : false) { for (int num = playing.Count - 1; num >= 0; num--) { flag2 = (Object)(object)playing[num].Source == (Object)(object)source; if (flag2) { Cue cue2 = CreatureSoundCatalog.Basis(playing[num].Cue); bool flag3 = ((cue2 == Cue.Footsteps || cue2 == Cue.Running) ? true : false); flag2 = flag3; } if (flag2) { Retire(num); } } } WalkieTalkie componentInParent = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && cue != Cue.RadioSignal && ((Object)(object)source == (Object)(object)componentInParent.target || componentInParent.audioSourcesReceiving.ContainsValue(source))) { cue = Cue.RadioRelay; } if (cue == Cue.ItemDrop && !InteractionAudio.RecentDrop(((Component)source).GetComponentInParent())) { return; } cue = CreatureSoundCatalog.Refine(((Object)clip).name, cue); bool flag4 = cue == Cue.Flies; if (flag4) { foreach (Playback ambientSource in ambientSources) { if ((Object)(object)ambientSource.Source == (Object)(object)source) { return; } } if (ambientSources.Count >= 1024) { return; } } if (!oneShot) { for (int num2 = playing.Count - 1; num2 >= 0; num2--) { if ((Object)(object)playing[num2].Source == (Object)(object)source && !playing[num2].OneShot) { Retire(num2); } } } if (!flag4 && playing.Count >= 128) { int index = 0; for (int i = 1; i < playing.Count; i++) { if (CueText.Priority(playing[i].Cue) < CueText.Priority(playing[index].Cue)) { index = i; } } if (CueText.Priority(playing[index].Cue) > CueText.Priority(cue)) { return; } Retire(index); } int num3 = SpokenSource.Rank(source, clip, oneShot); if (num3 > 0) { for (int num4 = playing.Count - 1; num4 >= 0; num4--) { if ((Object)(object)playing[num4].Source == (Object)(object)source && playing[num4].SpokenRank > 0) { Retire(num4); } } } Playback playback = ((pool.Count > 0) ? pool.Pop() : new Playback()); playback.SpokenRank = num3; playback.SpokenClip = ((num3 > 0) ? ((Object)clip).name : ""); ref VehicleController? vehicle = ref playback.Vehicle; Component? obj3 = AudioRegistry.Owner(source); vehicle = (VehicleController?)(((object)((obj3 is VehicleController) ? obj3 : null)) ?? ((object)((Component)source).GetComponentInParent())); ref ItemDropship? delivery = ref playback.Delivery; Component? obj4 = AudioRegistry.Owner(source); delivery = (ItemDropship?)(object)((obj4 is ItemDropship) ? obj4 : null); playback.Item = ((Component)source).GetComponentInParent(); PlayerControllerB componentInParent2 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null && (Object)(object)source == (Object)(object)componentInParent2.itemAudio) { playback.Item = (((Object)(object)componentInParent2.currentlyGrabbingObject != (Object)null) ? componentInParent2.currentlyGrabbingObject : componentInParent2.currentlyHeldObjectServer); } playback.PersonalMovement = ((Object)(object)componentInParent2 != (Object)null && (Object)(object)componentInParent2 == (Object)(object)GameNetworkManager.Instance?.localPlayerController) || (cue == Cue.WaterSplash && FeedbackFourth.LocalSplash) || (cue == Cue.PlantClear && FeedbackFifth.LocalClearing); playback.Personal = (Object)(object)playback.Item != (Object)null && (Object)(object)playback.Item.playerHeldBy != (Object)null && (Object)(object)playback.Item.playerHeldBy == (Object)(object)GameNetworkManager.Instance?.localPlayerController; flag2 = (Object)(object)componentInParent2 != (Object)null && (Object)(object)componentInParent2 == (Object)(object)GameNetworkManager.Instance?.localPlayerController && (Object)(object)source == (Object)(object)componentInParent2.itemAudio; if (flag2) { bool flag3 = ((cue == Cue.DuckQuack || cue == Cue.ToyTrain || cue == Cue.ZedDog) ? true : false); flag2 = flag3; } if (flag2) { playback.Personal = true; } playback.MaskedStep = flag; playback.CadenceObserved = false; playback.Source = source; playback.Clip = clip; playback.Cue = cue; playback.Scale = scale; playback.OneShot = oneShot; playback.Loop = !oneShot && source.loop; playback.Paused = false; playback.Explained = false; playback.HadDirection = false; playback.Clock.Reset(Time.unscaledTime); playback.Occlusion = ((Component)source).GetComponent(); playback.Rolloff = null; playback.RefreshCurveAt = 0f; playback.SpatialCurve = source.GetCustomCurve((AudioSourceCurveType)1); playback.DeviceSpatial = FeedbackFourth.DeviceDirection(cue) && playback.SpatialCurve != null && playback.SpatialCurve.length > 1 && playback.SpatialCurve.Evaluate(1f) > 0.1f; playback.Group = FeedbackFifth.Group(source, cue); playback.Radio = false; if (!oneShot || flag4) { trackedSources.Add(source); } if (flag4) { playback.Group = -2147483647; ambientSources.Add(playback); return; } playing.Add(playback); if (settings.Diagnostics.Value && resolvedReported.Add(cue)) { log.LogInfo((object)$"Cue resolved: {cue}, clip={((Object)clip).name}, source={((Object)source).name}, loop={playback.Loop}, scale={scale:F2}, explicitFootstep={humanFootstep}."); } received++; if (received == 1) { log.LogInfo((object)"First supported audio playback received by Sensus."); } if (CanListen(out Transform listener)) { Observe(playback, listener, Time.unscaledTime); } } private void Retire(int index) { Playback playback = playing[index]; playing.RemoveAt(index); if (!playback.OneShot) { trackedSources.Remove(playback.Source); } playback.Source = null; playback.Clip = null; playback.Occlusion = null; playback.Rolloff = null; playback.SpatialCurve = null; playback.Vehicle = null; playback.Delivery = null; playback.Item = null; if (pool.Count < 128) { pool.Push(playback); } } internal static void Change(AudioSource source, int action) { AudioCapture current = Current; if (current == null) { return; } try { if (action == 0) { current.explicitPlaying.Remove(source); for (int num = current.playing.Count - 1; num >= 0; num--) { if ((Object)(object)current.playing[num].Source == (Object)(object)source) { current.Retire(num); } } return; } foreach (Playback item in current.playing) { if ((Object)(object)item.Source == (Object)(object)source) { item.Clock.Sample(Time.unscaledTime, source.pitch, item.Paused || (AudioListener.pause && !source.ignoreListenerPause)); item.Paused = action == 1; } } } catch (Exception e) { current.ObserverFailure(e); } } private bool CanListen(out Transform listener) { listener = null; if (!Ready) { listenerState = "capture-not-ready"; return false; } if (!settings.Enabled.Value) { listenerState = "disabled"; return false; } if ((Object)(object)GameNetworkManager.Instance == (Object)null || GameNetworkManager.Instance.isDisconnecting || (Object)(object)StartOfRound.Instance == (Object)null) { listenerState = "not-in-round"; return false; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null || localPlayerController.isPlayerDead || !localPlayerController.isPlayerControlled || (Object)(object)StartOfRound.Instance.audioListener == (Object)null) { listenerState = "local-player-or-listener-unavailable"; return false; } listenerState = "ready"; listener = ((Component)StartOfRound.Instance.audioListener).transform; if (listenerId != ((Object)listener).GetInstanceID()) { captions.Clear(); Field.Clear(); voices.Clear(); voiceSamples.Clear(); maskedCadences.Clear(); listenerId = ((Object)listener).GetInstanceID(); log.LogInfo((object)"Sensus local sound listener ready."); } return true; } internal void Tick(bool chinese) { float unscaledTime = Time.unscaledTime; if (unscaledTime < nextTick) { return; } long num = (settings.Diagnostics.Value ? Stopwatch.GetTimestamp() : 0); nextTick = unscaledTime + 1f / 30f; TickPlantTrace(unscaledTime); spoken.Clear(); spokenChinese = chinese; if (unscaledTime >= nextPrune) { nextPrune = unscaledTime + 2f; AudioRegistry.Prune(); InteractionAudio.Prune(); SupplementalAudio.Prune(); PlaybackHooks.PruneRegistrations(); FeedbackFourth.Prune(); trackedSources.RemoveWhere((AudioSource s) => (Object)(object)s == (Object)null); for (int num2 = ambientSources.Count - 1; num2 >= 0; num2--) { if ((Object)(object)ambientSources[num2].Source == (Object)null) { ambientSources.RemoveAt(num2); } } } NativeAudioDiscovery.Tick(); captions.BeginFrame(); Transform listener; bool flag = CanListen(out listener); if (flag) { AudioRegistry.RecoverLoops(this); } if (!flag) { captions.Clear(); Field.Clear(); voices.Clear(); voiceSamples.Clear(); } for (int num3 = playing.Count - 1; num3 >= 0; num3--) { Playback playback = playing[num3]; if ((Object)(object)playback.Source == (Object)null || (Object)(object)playback.Clip == (Object)null || !((Behaviour)playback.Source).isActiveAndEnabled) { Retire(num3); } else { bool flag2 = playback.Paused || (AudioListener.pause && !playback.Source.ignoreListenerPause); playback.Clock.Sample(unscaledTime, playback.Source.pitch, flag2); bool num4 = !playback.Loop && playback.Clock.Elapsed >= playback.Clip.length; bool flag3 = !playback.OneShot && (Object)(object)playback.Source.clip != (Object)(object)playback.Clip; if (num4 || flag3 || (!flag2 && !playback.Source.isPlaying && playback.Clock.Elapsed > 0.15f)) { Retire(num3); } else if (flag && !flag2) { Observe(playback, listener, unscaledTime); } } } if (flag) { voices.Tick(this); SampleAmbient(listener, unscaledTime); } SpokenText = ((flag && settings.SpokenSubtitles.Value && !externalDialogue) ? spoken.Text : ""); bool flag4 = settings.DisplayMode.Value == "Hybrid"; Text = ((flag && settings.DisplayMode.Value != "Peripheral") ? captions.Compose(unscaledTime, settings.CaptionDuration.Value, DisplayCapacity.Resolve(settings.MaxCaptions.Value, CaptionScreenBudget), chinese, settings.ShowDirection.Value && !flag4, flag4) : ""); if (num != 0L) { double num5 = (double)(Stopwatch.GetTimestamp() - num) * 1000.0 / (double)Stopwatch.Frequency; tickMilliseconds += num5; peakTickMilliseconds = Math.Max(peakTickMilliseconds, num5); timedTicks++; } if (settings.Diagnostics.Value && unscaledTime >= nextDiagnostic) { nextDiagnostic = unscaledTime + 10f; log.LogInfo((object)$"Capture: listener={listenerState}, playbackCalls={playbackCalls}, resolved={received}, unresolved={unresolved}, filteredSamples={rejected}, audibleSamples={observed}, active={playing.Count}, flySources={ambientSources.Count}, voiceSources={voiceSamples.Count}, captions={captions.Count}; acoustic calibration remains pending."); log.LogInfo((object)$"Capture tick CPU: meanMs={((timedTicks > 0) ? (tickMilliseconds / (double)timedTicks) : 0.0):F3}, maxMs={peakTickMilliseconds:F3}, ticks={timedTicks}, flyBudget={ScanBudget.For(ambientSources.Count, 16)}, registeredSources={AudioRegistry.SourceCount}; excludes UI and asynchronous audio callbacks."); tickMilliseconds = (peakTickMilliseconds = 0.0); timedTicks = 0; } } internal void ObserveVoice(AudioSource source, Cue cue, int speakerId, string speaker, float volume, bool radio) { if (!CanListen(out Transform listener)) { return; } int instanceID = ((Object)source).GetInstanceID(); if (!voiceSamples.TryGetValue(instanceID, out Playback value) || (Object)(object)value.Source != (Object)(object)source) { if (voiceSamples.Count >= 128) { voiceSamples.Clear(); } value = new Playback { Source = source, SpatialCurve = source.GetCustomCurve((AudioSourceCurveType)1), Occlusion = ((Component)source).GetComponent() }; voiceSamples[instanceID] = value; } value.Cue = cue; value.Group = ((cue == Cue.GroundRadioVoice) ? ((Object)source).GetInstanceID() : speakerId); value.Scale = volume; value.Loop = true; value.Radio = radio; Observe(value, listener, Time.unscaledTime, speaker); } private void SampleAmbient(Transform listener, float now) { float num = (((Object)(object)ambientBest?.Source != (Object)null) ? Observe(ambientBest, listener, now, "", publish: false) : 0f); if (num <= 0f) { ambientBest = null; } int i = 0; for (int num2 = ScanBudget.For(ambientSources.Count, 16); i < num2; i++) { if (ambientCursor >= ambientSources.Count) { ambientCursor = 0; } Playback playback = ambientSources[ambientCursor++]; if (!((Object)(object)playback.Source == (Object)null)) { float num3 = Observe(playback, listener, now, "", publish: false); if (num3 > num * 1.1f) { num = num3; ambientBest = playback; } } } if (ambientBest != null && num > 0f) { Observe(ambientBest, listener, now); } } private float Observe(Playback p, Transform listener, float now, string speaker = "", bool publish = true) { //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Invalid comparison between Unknown and I4 //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_05ac: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05b7: Unknown result type (might be due to invalid IL or missing references) //IL_05bc: Unknown result type (might be due to invalid IL or missing references) //IL_05c1: Unknown result type (might be due to invalid IL or missing references) //IL_05c6: Unknown result type (might be due to invalid IL or missing references) //IL_05dd: Unknown result type (might be due to invalid IL or missing references) //IL_05e2: 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_05ec: Unknown result type (might be due to invalid IL or missing references) //IL_05ee: Unknown result type (might be due to invalid IL or missing references) //IL_0763: Unknown result type (might be due to invalid IL or missing references) //IL_076a: Unknown result type (might be due to invalid IL or missing references) //IL_07b9: Unknown result type (might be due to invalid IL or missing references) AudioSource source = p.Source; PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if (p.Cue == Cue.Clock && (Object)(object)p.Item != (Object)null && (Object)(object)val != (Object)null && !LocallyCarried(p.Item, val)) { PlayerControllerB playerHeldBy = p.Item.playerHeldBy; bool flag = p.Item.isHeld && (Object)(object)playerHeldBy != (Object)null; if (!WorldSoundPolicy.ClockSpace(flag ? playerHeldBy.isInHangarShipRoom : p.Item.isInShipRoom, flag ? playerHeldBy.isInsideFactory : p.Item.isInFactory, val.isInsideFactory)) { return 0f; } } Cue cue = p.Cue; bool flag2 = ((cue == Cue.Teleport || cue == Cue.InverseTeleport) ? true : false); if (flag2 && (Object)(object)val != (Object)null && val.isInHangarShipRoom && (Object)(object)((Component)source).GetComponentInParent() == (Object)null) { return 0f; } if (p.Cue == Cue.Microwave && !p.OneShot && !explicitPlaying.Contains(source)) { return 0f; } if (p.Cue == Cue.LockPicking) { GrabbableObject? item = p.Item; LockPicker val2 = (LockPicker)(object)((item is LockPicker) ? item : null); if (val2 != null && (!val2.isOnDoor || !val2.isPickingLock)) { return 0f; } } if (p.Cue == Cue.SupplyLanding && ((Object)(object)p.Delivery == (Object)null || !p.Delivery.shipLanded)) { return 0f; } bool flag3 = (Object)(object)p.Vehicle != (Object)null && (Object)(object)val != (Object)null && ((Object)(object)p.Vehicle.currentDriver == (Object)(object)val || (Object)(object)p.Vehicle.currentPassenger == (Object)(object)val || ((Object)(object)p.Vehicle.physicsRegion != (Object)null && (Object)(object)val.physicsParent == (Object)(object)p.Vehicle.physicsRegion.physicsTransform)); if (p.Cue == Cue.VehicleEngine && flag3) { return 0f; } if (!((Behaviour)source).isActiveAndEnabled || !source.isPlaying || source.isVirtual || source.mute || Mathf.Abs(source.pitch) < 0.001f || (AudioListener.pause && !source.ignoreListenerPause)) { Reject(p, "not-playing/virtual/muted/paused"); return 0f; } float num = Vector3.Distance(listener.position, ((Component)source).transform.position); AnimationCurve spatialCurve = p.SpatialCurve; float num2 = (p.Radio ? 0f : ((spatialCurve != null && spatialCurve.length > 1) ? Mathf.Clamp01(spatialCurve.Evaluate(Mathf.Clamp01(num / Mathf.Max(0.01f, source.maxDistance)))) : source.spatialBlend)); float distanceGain; if ((int)source.rolloffMode == 1) { distanceGain = AudibilityMath.Linear(num, source.minDistance, source.maxDistance); } else if ((int)source.rolloffMode == 0) { distanceGain = AudibilityMath.Logarithmic(num, source.minDistance, source.maxDistance); } else { if (p.Rolloff == null || now >= p.RefreshCurveAt) { p.Rolloff = source.GetCustomCurve((AudioSourceCurveType)0); p.RefreshCurveAt = now + 0.25f; } AnimationCurve rolloff = p.Rolloff; if (rolloff == null || rolloff.length == 0) { Reject(p, "missing-rolloff"); return 0f; } distanceGain = Mathf.Max(0f, rolloff.Evaluate(Mathf.Clamp01(num / Mathf.Max(0.01f, source.maxDistance)))); } SoundManager instance = SoundManager.Instance; float gameDecibels = (((Object)(object)instance != (Object)null && (Object)(object)source.outputAudioMixerGroup != (Object)null && (Object)(object)source.outputAudioMixerGroup.audioMixer == (Object)(object)instance.diageticMixer) ? Mathf.Min(0f, instance.currentDiageticVolume) : 0f); float num3 = AudibilityMath.Gain(source.volume, p.Scale, num2, distanceGain, gameDecibels); if (float.IsNaN(num3) || float.IsInfinity(num3) || num3 < ((p.Cue == Cue.Clock) ? Mathf.Min(settings.MinimumGain.Value, 0.005f) : settings.MinimumGain.Value)) { Reject(p, "below-audibility-threshold"); return 0f; } if (!publish) { return num3; } bool flag4 = p.SpokenRank > 0 && settings.SpokenSubtitles.Value && !externalDialogue; if (flag4) { float time = (p.OneShot ? p.Clock.Elapsed : source.time); spoken.Observe(p.Group, p.SpokenRank, SpokenTracks.At(p.SpokenClip, time, spokenChinese)); } if (p.MaskedStep && !p.CadenceObserved) { int instanceID = ((Object)source).GetInstanceID(); if (maskedCadences.Count >= 128 && !maskedCadences.ContainsKey(instanceID)) { maskedCadences.Clear(); } maskedCadences.TryGetValue(instanceID, out var value); p.Cue = value.Observe(now); maskedCadences[instanceID] = value; p.CadenceObserved = true; } if (p.Cue == Cue.TensionMusic && p.Explained) { return num3; } float num4 = WorldSoundPolicy.DeviceBlend(p.DeviceSpatial, num, source.maxDistance, num2); bool flag5 = num4 > 0.1f && !p.Radio; bool flag6 = (Object)(object)p.Occlusion != (Object)null && p.Occlusion.occluded; Vector3 val3 = Vector3.ProjectOnPlane(((Component)source).transform.position - listener.position, Vector3.up); int num5 = ((!AudibilityMath.DirectionKnown(num4, p.Radio, ((Vector3)(ref val3)).sqrMagnitude)) ? (-1) : CueText.DirectionIndex(Vector3.SignedAngle(Vector3.ProjectOnPlane(listener.forward, Vector3.up), val3, Vector3.up))); PlayerControllerB val4 = GameNetworkManager.Instance?.localPlayerController; bool flag7 = ((Object)(object)val4 != (Object)null && ((Object)(object)source == (Object)(object)val4.movementAudio || (Object)(object)source == (Object)(object)val4.slimeSlipAudio)) || (p.Cue == Cue.ItemDrop && InteractionAudio.LocalDrop(p.Item)); bool flag8 = (((Object)(object)p.Item != (Object)null) ? LocallyCarried(p.Item, val) : p.Personal); cue = p.Cue; flag2 = flag8; bool flag9 = p.Radio; if (!flag9) { Cue cue2 = p.Cue; bool flag10 = (((uint)(cue2 - 84) <= 1u || cue2 == Cue.RadioRelay) ? true : false); flag9 = flag10; } bool flag11 = IndicatorDetail.Carried(cue, flag2, flag9); flag9 = flag7 || (p.PersonalMovement && CuePresentation.ActorFeedback(p.Cue)); if (!flag9) { flag2 = p.PersonalMovement; if (flag2) { bool flag10; switch (CreatureSoundCatalog.Basis(p.Cue)) { case Cue.Footsteps: case Cue.Jump: case Cue.Landing: case Cue.Running: case Cue.LadderClimb: case Cue.DragFootsteps: flag10 = true; break; default: flag10 = false; break; } flag2 = flag10; } flag9 = flag2; } flag7 = flag9 || CuePresentation.Personal(p.Cue, flag8, flag3); if (flag11) { flag7 = false; num5 = -1; flag5 = false; p.HadDirection = false; } float num6 = Mathf.Atan2(val3.x, val3.z) * 57.29578f; if (num5 >= 0) { p.HadDirection = true; p.LastBearing = num6; } else if (flag5 && p.HadDirection && ((Vector3)(ref val3)).sqrMagnitude < 0.04f) { num6 = p.LastBearing; num5 = CueText.DirectionIndex(num6 - listener.eulerAngles.y); } p.Explained = true; if (!flag4) { captions.Observe(p.Group, p.Cue, now, num5, flag5, p.Loop, flag7, speaker, (num5 >= 0) ? (!Field.CanDisplaySector(num5)) : (!settings.UnlocatedIndicators.Value || Field.TrayCapacity == 0 || (!flag11 && !CuePresentation.Unlocated(p.Cue)))); } float num7 = ((p.Cue == Cue.Music && !p.OneShot && ((Object)p.Clip).name == "JackInTheBoxTheme" && p.Clip.frequency == 44100 && p.Clip.samples == 1890304) ? ((float)p.Source.timeSamples / (float)p.Clip.frequency) : (-1f)); Field.Observe(p.Group, p.Cue, now, num6, num5 >= 0, p.Loop, num3, flag7, WindingEnvelope.At(num7), num7, flag11); if (settings.Diagnostics.Value && audibleReported.Add(p.Cue)) { ManualLogSource obj = log; object[] obj2 = new object[6] { p.Cue, null, null, null, null, null }; AudioClip clip = p.Clip; obj2[1] = ((clip != null) ? ((Object)clip).name : null) ?? "voice-stream"; obj2[2] = num3; obj2[3] = num2; obj2[4] = flag6; obj2[5] = num5 >= 0; obj.LogInfo((object)string.Format("Cue audible: {0}, clip={1}, gain={2:F3}, blend={3:F2}, occluded={4}, directionKnown={5}.", obj2)); } if (++observed == 1) { log.LogInfo((object)"First supported sound passed the Sensus audibility filter."); } return num3; } private static bool LocallyCarried(GrabbableObject item, PlayerControllerB? local) { if ((Object)(object)local == (Object)null || (Object)(object)item == (Object)null) { return false; } if (local.ItemSlots != null) { GrabbableObject[] itemSlots = local.ItemSlots; for (int i = 0; i < itemSlots.Length; i++) { if ((Object)(object)itemSlots[i] == (Object)(object)item) { return true; } } } if (item.isHeld) { return (Object)(object)item.playerHeldBy == (Object)(object)local; } return false; } private void Reject(Playback p, string reason) { rejected++; if (settings.Diagnostics.Value && filteredReported.Add(p.Cue)) { ManualLogSource obj = log; object[] obj2 = new object[4] { p.Cue, null, null, null }; AudioClip clip = p.Clip; obj2[1] = ((clip != null) ? ((Object)clip).name : null) ?? "voice-stream"; obj2[2] = reason; obj2[3] = p.Source.volume; obj.LogInfo((object)string.Format("Cue sample filtered: {0}, clip={1}, reason={2}, volume={3:F3}. Later samples may become audible.", obj2)); } } public void Dispose() { recentPlantAudio.Clear(); plantTraceGrowth = null; plantTraceSprayer = null; SceneManager.sceneUnloaded -= SceneUnloaded; trackedSources.Clear(); maskedCadences.Clear(); explicitPlaying.Clear(); playing.Clear(); ambientSources.Clear(); ambientBest = null; ambientCursor = 0; pool.Clear(); AudioRegistry.Clear(); FeedbackFourth.Clear(); InteractionAudio.Clear(); SupplementalAudio.Clear(); captions.Clear(); Field.Clear(); voices.Clear(); voiceSamples.Clear(); NativeAudioDiscovery.Clear(); PlaybackHooks.ClearRegistrations(); Text = ""; Ready = false; SpokenText = ""; spoken.Clear(); if (Current == this) { Current = null; } } } internal static class AudioRegistry { private sealed class Binding { internal AudioSource Source; internal Component Owner; internal Cue Default; internal bool Merge; internal Dictionary? Context; } private static readonly Dictionary sources = new Dictionary(); private static readonly Dictionary clips = new Dictionary(); private static readonly List retired = new List(); private static readonly List recovery = new List(); private static readonly List pending = new List(); private static int recoveryCursor; private static bool footstepsRegistered; private static readonly HashSet surfaceSteps = new HashSet(); internal static int SourceCount => sources.Count; internal static bool IsSurfaceStep(AudioClip clip) { return surfaceSteps.Contains(clip); } internal static Component? Owner(AudioSource source) { if (!sources.TryGetValue(((Object)source).GetInstanceID(), out Binding value) || !((Object)(object)value.Source == (Object)(object)source)) { return null; } return value.Owner; } internal static void ContextClips(AudioSource? source, AudioClip[]? values, Cue cue) { if ((Object)(object)source == (Object)null || values == null || !sources.TryGetValue(((Object)source).GetInstanceID(), out Binding value)) { return; } Binding binding = value; if (binding.Context == null) { binding.Context = new Dictionary(); } foreach (AudioClip val in values) { if ((Object)(object)val != (Object)null && value.Context.Count < 128) { value.Context[((Object)val).GetInstanceID()] = (val, cue); } } } internal static bool ContextCue(AudioSource source, AudioClip clip, out Cue cue) { cue = Cue.Creature; if (sources.TryGetValue(((Object)source).GetInstanceID(), out Binding value) && (Object)(object)value.Source == (Object)(object)source && value.Context != null && value.Context.TryGetValue(((Object)clip).GetInstanceID(), out (AudioClip, Cue) value2) && (Object)(object)value2.Item1 == (Object)(object)clip) { cue = value2.Item2; return true; } return false; } internal static bool KnownSource(AudioSource source, AudioClip clip, out Cue cue) { cue = Cue.Creature; if (!sources.TryGetValue(((Object)source).GetInstanceID(), out Binding value) || (Object)(object)value.Source != (Object)(object)source || (Object)(object)value.Owner == (Object)null) { return false; } Component owner = value.Owner; if ((owner is MouthDogAI || owner is SandWormAI || owner is JesterAI || owner is NutcrackerEnemyAI || owner is FlowermanAI) ? true : false) { return false; } int group; return Resolve(source, clip, out cue, out group); } internal static void RegisterFootsteps() { if (footstepsRegistered || (Object)(object)StartOfRound.Instance == (Object)null || StartOfRound.Instance.footstepSurfaces == null) { return; } FootstepSurface[] footstepSurfaces = StartOfRound.Instance.footstepSurfaces; foreach (FootstepSurface val in footstepSurfaces) { Clips(val.clips, Cue.Footsteps); if (val.clips != null) { AudioClip[] array = val.clips; foreach (AudioClip val2 in array) { if ((Object)(object)val2 != (Object)null) { surfaceSteps.Add(val2); } } } Clips(val.jumpLandSFX, Cue.Landing); Clips(val.hitSurfaceSFX, Cue.Impact); } Clips(StartOfRound.Instance.playerJumpSFX, Cue.Jump); Clips(StartOfRound.Instance.playerHitGroundSoft, Cue.Landing); Clips(StartOfRound.Instance.playerHitGroundHard, Cue.Landing); Clips(StartOfRound.Instance.playerDragFootSFX, Cue.DragFootsteps); if ((Object)(object)StartOfRound.Instance.unlockablesList != (Object)null) { foreach (UnlockableItem unlockable in StartOfRound.Instance.unlockablesList.unlockables) { Clips(unlockable.jumpAudio, Cue.Jump); } } footstepsRegistered = true; } internal static int Group(AudioSource source) { ShipTeleporter componentInParent = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { return ((Object)componentInParent).GetInstanceID(); } MineshaftElevatorController componentInParent2 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null) { return ((Object)componentInParent2).GetInstanceID(); } Transform val = ((Component)source).transform; while ((Object)(object)val != (Object)null) { if (((Object)val).name == "SpikeSlamBodyStickyPoint" || ((Object)val).name == "SpikeSlamBodyStickyPoint(Clone)") { return ((Object)val).GetInstanceID(); } val = val.parent; } int instanceID = ((Object)source).GetInstanceID(); if (!sources.TryGetValue(instanceID, out Binding value) || !((Object)(object)value.Source == (Object)(object)source) || !((Object)(object)value.Owner != (Object)null) || !value.Merge) { return instanceID; } return ((Object)value.Owner).GetInstanceID(); } internal static void Source(AudioSource? source, Cue cue, Component owner, bool merge) { if ((Object)(object)source == (Object)null) { return; } int instanceID = ((Object)source).GetInstanceID(); Binding value; bool flag = !sources.TryGetValue(instanceID, out value) || (Object)(object)value.Source != (Object)(object)source; if (flag && sources.Count >= 2048) { Prune(); if (sources.Count >= 2048) { return; } } if (flag) { sources[instanceID] = new Binding { Source = source, Owner = owner, Default = cue, Merge = merge }; recovery.Add(source); pending.Add(source); } else { value.Default = cue; value.Merge = merge; value.Owner = owner; } if (source.loop) { Clips(source.clip, cue); } } internal static void Prime() { foreach (AudioSource item in pending) { if ((Object)(object)item != (Object)null && item.isPlaying && (Object)(object)item.clip != (Object)null) { AudioCapture.RecordPlay(item); } } pending.Clear(); } internal static void Clips(AudioClip[]? values, Cue cue) { if (values != null) { for (int i = 0; i < values.Length; i++) { Clips(values[i], cue); } } } internal static void Clips(AudioClip? clip, Cue cue) { if ((Object)(object)clip == (Object)null) { return; } int instanceID = ((Object)clip).GetInstanceID(); bool item = false; if (clips.TryGetValue(instanceID, out (AudioClip, Cue, bool) value) && (Object)(object)value.Item1 == (Object)(object)clip) { if (value.Item3 || value.Item2 == cue || cue == Cue.Creature) { return; } if (value.Item2 != Cue.Creature) { cue = Cue.Creature; item = true; } } else if (clips.Count >= 4096) { return; } clips[instanceID] = (clip, cue, item); } internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue, out int group) { group = ((Object)source).GetInstanceID(); Binding value; bool flag = sources.TryGetValue(group, out value) && value != null && (Object)(object)value.Source == (Object)(object)source && (Object)(object)value.Owner != (Object)null; if (clips.TryGetValue(((Object)clip).GetInstanceID(), out (AudioClip, Cue, bool) value2) && (Object)(object)value2.Item1 == (Object)(object)clip) { cue = ((value2.Item3 && flag) ? value.Default : value2.Item2); } else { if (!flag) { cue = Cue.Creature; return false; } cue = value.Default; } if (flag && value.Merge && source.spatialBlend > 0.1f) { group = ((Object)value.Owner).GetInstanceID(); } return true; } internal static void Prune() { retired.Clear(); foreach (KeyValuePair source in sources) { if ((Object)(object)source.Value.Source == (Object)null || (Object)(object)source.Value.Owner == (Object)null) { retired.Add(source.Key); } } foreach (int item in retired) { sources.Remove(item); } retired.Clear(); foreach (KeyValuePair clip in clips) { if ((Object)(object)clip.Value.Item1 == (Object)null) { retired.Add(clip.Key); } } foreach (int item2 in retired) { clips.Remove(item2); } retired.Clear(); for (int num = recovery.Count - 1; num >= 0; num--) { if ((Object)(object)recovery[num] == (Object)null) { recovery.RemoveAt(num); } } } internal static void RecoverLoops(AudioCapture capture) { int i = 0; for (int num = ScanBudget.For(recovery.Count, 8); i < num; i++) { if (recoveryCursor >= recovery.Count) { recoveryCursor = 0; } AudioSource val = recovery[recoveryCursor++]; if ((Object)(object)val != (Object)null) { Component? obj = Owner(val); LockPicker val2 = (LockPicker)(object)((obj is LockPicker) ? obj : null); if (val2 != null && (!val2.isOnDoor || !val2.isPickingLock)) { continue; } } if ((Object)(object)val != (Object)null && (val.loop || Owner(val) is ItemDropship) && ((Behaviour)val).isActiveAndEnabled && val.isPlaying && !val.mute && val.volume > 0f && !capture.HasLoop(val)) { AudioCapture.RecordPlay(val); } } } internal static void Clear() { sources.Clear(); clips.Clear(); surfaceSteps.Clear(); retired.Clear(); recovery.Clear(); pending.Clear(); recoveryCursor = 0; footstepsRegistered = false; } } internal static class AuditAudioBindings { internal static void Register(Component component) { AudioReverbTrigger val = (AudioReverbTrigger)(object)((component is AudioReverbTrigger) ? component : null); if (val != null && val.audioChanges != null) { switchToAudio[] audioChanges = val.audioChanges; foreach (switchToAudio val2 in audioChanges) { if ((Object)(object)val2.audio != (Object)null && (Object)(object)AudioRegistry.Owner(val2.audio) == (Object)null) { AudioClip val3 = (((Object)(object)val2.changeToClip != (Object)null) ? val2.changeToClip : val2.audio.clip); Cue cue = Cue.Environment; if ((Object)(object)val3 != (Object)null && !NativeClip(val3, out cue) && !SupplementalAudio.Clip(val3, out cue)) { cue = Cue.Environment; } AudioRegistry.Source(val2.audio, cue, (Component)(object)val, merge: false); } } } SoundManager val4 = (SoundManager)(object)((component is SoundManager) ? component : null); if (val4 != null && (Object)(object)val4.currentLevelAmbience != (Object)null) { LevelAmbienceLibrary currentLevelAmbience = val4.currentLevelAmbience; AudioRegistry.Clips(currentLevelAmbience.insideAmbience, Cue.Environment); AudioRegistry.Clips(currentLevelAmbience.outsideAmbience, Cue.Environment); AudioRegistry.Clips(currentLevelAmbience.shipAmbience, Cue.Environment); AudioRegistry.Clips(currentLevelAmbience.insanityMusicAudios, Cue.TensionMusic); RegisterAmbient(currentLevelAmbience.insideAmbienceInsanity); RegisterAmbient(currentLevelAmbience.outsideAmbienceInsanity); RegisterAmbient(currentLevelAmbience.shipAmbienceInsanity); } } private static void RegisterAmbient(RandomAudioClip[] clips) { if (clips != null) { for (int i = 0; i < clips.Length; i++) { AudioRegistry.Clips(clips[i].audioClip, Cue.Environment); } } } internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { Component val = AudioRegistry.Owner(source); cue = Cue.Creature; CaveDwellerAI val2 = (CaveDwellerAI)(object)((val is CaveDwellerAI) ? val : null); if (val2 != null && Contains(val2.scaredBabyVoiceSFX, clip)) { cue = Cue.Crying; return true; } BaboonBirdAI val3 = (BaboonBirdAI)(object)((val is BaboonBirdAI) ? val : null); if (val3 != null && Contains(val3.cawLaughSFX, clip)) { cue = Cue.Cackle; return true; } ExtensionLadderItem val4 = (ExtensionLadderItem)(object)((val is ExtensionLadderItem) ? val : null); if (val4 != null && ((Object)(object)clip == (Object)(object)val4.hitWall || (Object)(object)clip == (Object)(object)val4.hitRoof)) { cue = Cue.Impact; return true; } LoopShapeKey val5 = (LoopShapeKey)(object)((val is LoopShapeKey) ? val : null); if (val5 != null && (Object)(object)source == (Object)(object)val5.repeatingAudioSource && ((Object)(object)clip == (Object)(object)val5.audioOn || (Object)(object)clip == (Object)(object)val5.audioOff)) { cue = Cue.WorldHeartbeat; return true; } SoundManager instance = SoundManager.Instance; if (instance != null) { if ((Object)(object)source == (Object)(object)instance.ambienceAudio) { cue = Cue.Environment; return true; } if ((Object)(object)source == (Object)(object)instance.ambienceAudioNonDiagetic) { cue = Cue.TensionMusic; return true; } } return false; } private static bool Contains(AudioClip[] clips, AudioClip clip) { if (clips != null) { for (int i = 0; i < clips.Length; i++) { if ((Object)(object)clips[i] == (Object)(object)clip) { return true; } } } return false; } internal static bool NativeClip(AudioClip clip, out Cue cue) { if (CreatureSoundCatalog.TryBase(((Object)clip).name, out cue)) { return true; } Cue cue2; switch (((Object)clip).name) { case "LightOff": case "LightFlicker": case "NeonLightOff": case "NeonLightFlicker": case "LightOn": case "NeonLightOn": cue2 = Cue.LightSwitch; break; case "MaskLaugh1": case "MaskLaugh2": case "MaskLaugh3": case "Laugh1": cue2 = Cue.MaskLaugh; break; case "MaskCry1": case "MaskCry2": case "MaskCry3": case "MaskCry4": cue2 = Cue.Crying; break; case "BunnyHop": cue2 = Cue.Jump; break; case "GiantKiwiDie2": case "KillBloomEnemy": cue2 = Cue.CreatureDeath; break; case "BalloonPopReverb": case "BalloonPop": cue2 = Cue.Burst; break; case "WavesHitting": case "WavesHitting2": cue2 = Cue.Liquid; break; case "UVLightHum": case "BigMachineRoom3": cue2 = Cue.PowerHum; break; case "MeteorLandFar": case "MeteorLandClose": case "MeteorLandInFactory": cue2 = Cue.MeteorImpact; break; case "MeteorScream1": case "MeteorApproachingA": case "MeteorApproachingB": case "MeteorApproachingC": cue2 = Cue.MeteorApproach; break; case "Blizzard": case "LowJungleAmbient": case "StormyRain": case "Forest": case "WaterAmbience": case "EclipseAmbience": case "CalmWater": case "CaveWaterAmbience": case "NighttimeAmbientDesert1": case "NighttimeAmbientForest1": case "Rain": case "NighttimeAmbientForestSwamp": cue2 = Cue.Environment; break; case "WaterTrickle": case "WaterDroplet": case "PoolWaterQuiet": case "WaterfallInside": case "Waterfall": case "CaveWaterTrickle1": case "CaveWaterTrickle2": cue2 = Cue.Liquid; break; default: cue2 = Cue.Creature; break; } cue = cue2; return cue != Cue.Creature; } } internal static class CompanyAudio { internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { bool counter = AudioRegistry.Owner(source) is DepositItemsDesk; bool flag = false; bool flag2 = false; if (CompanySoundRules.DoorClip(((Object)clip).name)) { Transform val = ((Component)source).transform; while ((Object)(object)val != (Object)null) { bool flag3 = flag; string name = ((Object)val).name; bool flag4 = ((name == "TrapDoor" || name == "TrapDoor(Clone)") ? true : false); flag = flag3 || flag4; flag4 = flag2; name = ((Object)val).name; flag3 = ((name == "GarageDoorsContainer" || name == "GarageDoorsContainer(Clone)") ? true : false); flag2 = flag4 || flag3; val = val.parent; } } cue = CompanySoundRules.Resolve(((Object)clip).name, counter, flag, flag2); return cue != Cue.Creature; } internal static int Group(AudioSource source, Cue cue) { if ((uint)(cue - 386) <= 1u) { Component? obj = AudioRegistry.Owner(source); DepositItemsDesk val = (DepositItemsDesk)(object)((obj is DepositItemsDesk) ? obj : null); if (val != null) { return ((Object)val).GetInstanceID(); } } return AudioRegistry.Group(source); } } internal static class CreatureBindings { internal static void Register(Component component) { MouthDogAI val = (MouthDogAI)(object)((component is MouthDogAI) ? component : null); if (val == null) { SandWormAI val2 = (SandWormAI)(object)((component is SandWormAI) ? component : null); if (val2 == null) { JesterAI val3 = (JesterAI)(object)((component is JesterAI) ? component : null); if (val3 == null) { NutcrackerEnemyAI val4 = (NutcrackerEnemyAI)(object)((component is NutcrackerEnemyAI) ? component : null); if (val4 == null) { CaveDwellerAI val5 = (CaveDwellerAI)(object)((component is CaveDwellerAI) ? component : null); if (val5 == null) { DressGirlAI val6 = (DressGirlAI)(object)((component is DressGirlAI) ? component : null); if (val6 == null) { ClaySurgeonAI val7 = (ClaySurgeonAI)(object)((component is ClaySurgeonAI) ? component : null); if (val7 == null) { SpringManAI val8 = (SpringManAI)(object)((component is SpringManAI) ? component : null); if (val8 == null) { FlowermanAI val9 = (FlowermanAI)(object)((component is FlowermanAI) ? component : null); if (val9 == null) { CrawlerAI val10 = (CrawlerAI)(object)((component is CrawlerAI) ? component : null); if (val10 == null) { CentipedeAI val11 = (CentipedeAI)(object)((component is CentipedeAI) ? component : null); if (val11 == null) { SandSpiderAI val12 = (SandSpiderAI)(object)((component is SandSpiderAI) ? component : null); if (val12 == null) { HoarderBugAI val13 = (HoarderBugAI)(object)((component is HoarderBugAI) ? component : null); if (val13 == null) { BlobAI val14 = (BlobAI)(object)((component is BlobAI) ? component : null); if (val14 == null) { PufferAI val15 = (PufferAI)(object)((component is PufferAI) ? component : null); if (val15 == null) { ButlerEnemyAI val16 = (ButlerEnemyAI)(object)((component is ButlerEnemyAI) ? component : null); if (val16 == null) { ButlerBeesEnemyAI val17 = (ButlerBeesEnemyAI)(object)((component is ButlerBeesEnemyAI) ? component : null); if (val17 == null) { MaskedPlayerEnemy val18 = (MaskedPlayerEnemy)(object)((component is MaskedPlayerEnemy) ? component : null); if (val18 == null) { StingrayAI val19 = (StingrayAI)(object)((component is StingrayAI) ? component : null); if (val19 == null) { CadaverGrowthAI val20 = (CadaverGrowthAI)(object)((component is CadaverGrowthAI) ? component : null); if (val20 == null) { CadaverBloomAI val21 = (CadaverBloomAI)(object)((component is CadaverBloomAI) ? component : null); if (val21 == null) { ForestGiantAI val22 = (ForestGiantAI)(object)((component is ForestGiantAI) ? component : null); if (val22 == null) { BaboonBirdAI val23 = (BaboonBirdAI)(object)((component is BaboonBirdAI) ? component : null); if (val23 == null) { RedLocustBees val24 = (RedLocustBees)(object)((component is RedLocustBees) ? component : null); if (val24 == null) { RadMechAI val25 = (RadMechAI)(object)((component is RadMechAI) ? component : null); if (val25 == null) { BushWolfEnemy val26 = (BushWolfEnemy)(object)((component is BushWolfEnemy) ? component : null); if (val26 == null) { PumaAI val27 = (PumaAI)(object)((component is PumaAI) ? component : null); if (val27 == null) { GiantKiwiAI val28 = (GiantKiwiAI)(object)((component is GiantKiwiAI) ? component : null); if (val28 == null) { FlowerSnakeEnemy val29 = (FlowerSnakeEnemy)(object)((component is FlowerSnakeEnemy) ? component : null); if (val29 == null) { DoublewingAI val30 = (DoublewingAI)(object)((component is DoublewingAI) ? component : null); if (val30 == null) { DocileLocustBeesAI val31 = (DocileLocustBeesAI)(object)((component is DocileLocustBeesAI) ? component : null); if (val31 == null) { DepositItemsDesk val32 = (DepositItemsDesk)(object)((component is DepositItemsDesk) ? component : null); if (val32 == null) { if (component is SnowmanSimpleAI) { return; } KiwiBabyItem val33 = (KiwiBabyItem)(object)((component is KiwiBabyItem) ? component : null); if (val33 == null) { HauntedMaskItem val34 = (HauntedMaskItem)(object)((component is HauntedMaskItem) ? component : null); if (val34 == null) { SandSpiderWebTrap val35 = (SandSpiderWebTrap)(object)((component is SandSpiderWebTrap) ? component : null); if (val35 == null) { PlayerControllerB val36 = (PlayerControllerB)(object)((component is PlayerControllerB) ? component : null); if (val36 == null) { RoundManager val37 = (RoundManager)(object)((component is RoundManager) ? component : null); if (val37 == null) { HighAndLowAltitudeAudio val38 = (HighAndLowAltitudeAudio)(object)((component is HighAndLowAltitudeAudio) ? component : null); if (val38 == null) { PhysicsKnockbackOnHit val39 = (PhysicsKnockbackOnHit)(object)((component is PhysicsKnockbackOnHit) ? component : null); if (val39 == null) { TimeOfDay val40 = (TimeOfDay)(object)((component is TimeOfDay) ? component : null); if (val40 == null) { IngamePlayerSettings val41 = (IngamePlayerSettings)(object)((component is IngamePlayerSettings) ? component : null); if (val41 == null) { ShipTeleporter val42 = (ShipTeleporter)(object)((component is ShipTeleporter) ? component : null); if (val42 == null) { AnimatedObjectFloatSetter val43 = (AnimatedObjectFloatSetter)(object)((component is AnimatedObjectFloatSetter) ? component : null); if (val43 == null) { RadarBoosterItem val44 = (RadarBoosterItem)(object)((component is RadarBoosterItem) ? component : null); if (val44 == null) { TVScript val45 = (TVScript)(object)((component is TVScript) ? component : null); if (val45 == null) { MicrowaveItem val46 = (MicrowaveItem)(object)((component is MicrowaveItem) ? component : null); if (val46 == null) { CozyLights val47 = (CozyLights)(object)((component is CozyLights) ? component : null); if (val47 == null) { GiftBoxItem val48 = (GiftBoxItem)(object)((component is GiftBoxItem) ? component : null); if (val48 == null) { BeltBagItem val49 = (BeltBagItem)(object)((component is BeltBagItem) ? component : null); if (val49 == null) { EventWhenDroppedItem val50 = (EventWhenDroppedItem)(object)((component is EventWhenDroppedItem) ? component : null); if (val50 == null) { DeadBodyInfo val51 = (DeadBodyInfo)(object)((component is DeadBodyInfo) ? component : null); if (val51 == null) { HUDManager val52 = (HUDManager)(object)((component is HUDManager) ? component : null); if (val52 == null) { ShipBuildModeManager val53 = (ShipBuildModeManager)(object)((component is ShipBuildModeManager) ? component : null); if (val53 == null) { PlayAudioOnParticleDeath val54 = (PlayAudioOnParticleDeath)(object)((component is PlayAudioOnParticleDeath) ? component : null); if (val54 == null) { MoldSpreadManager val55 = (MoldSpreadManager)(object)((component is MoldSpreadManager) ? component : null); if (val55 == null) { MoveToExitSpecialAnimation val56 = (MoveToExitSpecialAnimation)(object)((component is MoveToExitSpecialAnimation) ? component : null); if (val56 == null) { RandomPeriodicAudioPlayer val57 = (RandomPeriodicAudioPlayer)(object)((component is RandomPeriodicAudioPlayer) ? component : null); if (val57 == null) { BaboonHawkAudioEvents val58 = (BaboonHawkAudioEvents)(object)((component is BaboonHawkAudioEvents) ? component : null); if (val58 == null) { LoopShapeKey val59 = (LoopShapeKey)(object)((component is LoopShapeKey) ? component : null); if (val59 == null) { MeteorShowers val60 = (MeteorShowers)(object)((component is MeteorShowers) ? component : null); if (val60 == null) { ElevatorAnimationEvents val61 = (ElevatorAnimationEvents)(object)((component is ElevatorAnimationEvents) ? component : null); if (val61 == null) { DoorLock val62 = (DoorLock)(object)((component is DoorLock) ? component : null); if (val62 == null) { LockPicker val63 = (LockPicker)(object)((component is LockPicker) ? component : null); if (val63 == null) { EnemyVent val64 = (EnemyVent)(object)((component is EnemyVent) ? component : null); if (val64 == null) { ItemCharger val65 = (ItemCharger)(object)((component is ItemCharger) ? component : null); if (val65 == null) { MineshaftElevatorController val66 = (MineshaftElevatorController)(object)((component is MineshaftElevatorController) ? component : null); if (val66 == null) { LungProp val67 = (LungProp)(object)((component is LungProp) ? component : null); if (val67 == null) { RemoteProp val68 = (RemoteProp)(object)((component is RemoteProp) ? component : null); if (val68 == null) { ClockProp val69 = (ClockProp)(object)((component is ClockProp) ? component : null); if (val69 == null) { AnimatedItem val70 = (AnimatedItem)(object)((component is AnimatedItem) ? component : null); if (val70 == null) { BreakerBox val71 = (BreakerBox)(object)((component is BreakerBox) ? component : null); if (val71 == null) { Terminal val72 = (Terminal)(object)((component is Terminal) ? component : null); if (val72 == null) { SpikeRoofTrap val73 = (SpikeRoofTrap)(object)((component is SpikeRoofTrap) ? component : null); if (val73 == null) { TetraChemicalItem val74 = (TetraChemicalItem)(object)((component is TetraChemicalItem) ? component : null); if (val74 == null) { PatcherTool val75 = (PatcherTool)(object)((component is PatcherTool) ? component : null); if (val75 == null) { StartOfRound val76 = (StartOfRound)(object)((component is StartOfRound) ? component : null); if (val76 == null) { StormyWeather val77 = (StormyWeather)(object)((component is StormyWeather) ? component : null); if (val77 == null) { BridgeTrigger val78 = (BridgeTrigger)(object)((component is BridgeTrigger) ? component : null); if (val78 == null) { ShipAlarmCord val79 = (ShipAlarmCord)(object)((component is ShipAlarmCord) ? component : null); if (val79 == null) { JetpackItem val80 = (JetpackItem)(object)((component is JetpackItem) ? component : null); if (val80 == null) { StunGrenadeItem val81 = (StunGrenadeItem)(object)((component is StunGrenadeItem) ? component : null); if (val81 == null) { ExtensionLadderItem val82 = (ExtensionLadderItem)(object)((component is ExtensionLadderItem) ? component : null); if (val82 == null) { Shovel val83 = (Shovel)(object)((component is Shovel) ? component : null); if (val83 == null) { KnifeItem val84 = (KnifeItem)(object)((component is KnifeItem) ? component : null); if (val84 == null) { SprayPaintItem val85 = (SprayPaintItem)(object)((component is SprayPaintItem) ? component : null); if (val85 == null) { FlashlightItem val86 = (FlashlightItem)(object)((component is FlashlightItem) ? component : null); if (val86 == null) { Turret val87 = (Turret)(object)((component is Turret) ? component : null); if (val87 == null) { Landmine val88 = (Landmine)(object)((component is Landmine) ? component : null); if (val88 == null) { SteamValveHazard val89 = (SteamValveHazard)(object)((component is SteamValveHazard) ? component : null); if (val89 == null) { SoundManager val90 = (SoundManager)(object)((component is SoundManager) ? component : null); if (val90 == null) { EntranceTeleport val91 = (EntranceTeleport)(object)((component is EntranceTeleport) ? component : null); if (val91 == null) { VehicleController val92 = (VehicleController)(object)((component is VehicleController) ? component : null); if (val92 == null) { NoisemakerProp val93 = (NoisemakerProp)(object)((component is NoisemakerProp) ? component : null); if (val93 == null) { BoomboxItem val94 = (BoomboxItem)(object)((component is BoomboxItem) ? component : null); if (val94 == null) { WhoopieCushionItem val95 = (WhoopieCushionItem)(object)((component is WhoopieCushionItem) ? component : null); if (val95 == null) { WalkieTalkie val96 = (WalkieTalkie)(object)((component is WalkieTalkie) ? component : null); if (val96 != null) { AudioRegistry.Clips(val96.stopTransmissionSFX, Cue.RadioSignal); AudioRegistry.Clips(val96.startTransmissionSFX, Cue.RadioSignal); AudioRegistry.Clips(val96.switchWalkieTalkiePowerOff, Cue.RadioSignal); AudioRegistry.Clips(val96.switchWalkieTalkiePowerOn, Cue.RadioSignal); AudioRegistry.Clips(val96.talkingOnWalkieTalkieNotHeldSFX, Cue.RadioSignal); AudioRegistry.Clips(val96.playerDieOnWalkieTalkieSFX, Cue.RadioSignal); AudioRegistry.Source(val96.wallAudio, Cue.RadioMusic, (Component)(object)val96, merge: false); AudioRegistry.Clips(val96.wallAudios, Cue.RadioMusic); } } else { AudioRegistry.Source(val95.whoopieCushionAudio, Cue.Cushion, (Component)(object)val95, merge: false); AudioRegistry.Clips(val95.fartAudios, Cue.Cushion); } } else { AudioRegistry.Source(val94.boomboxAudio, Cue.ItemMusic, (Component)(object)val94, merge: false); AudioRegistry.Clips(val94.musicAudios, Cue.ItemMusic); AudioRegistry.Clips(val94.stopAudios, Cue.ItemNoise); } } else { AudioRegistry.Source(val93.noiseAudio, Cue.ItemNoise, (Component)(object)val93, merge: true); AudioRegistry.Source(val93.noiseAudioFar, Cue.ItemNoise, (Component)(object)val93, merge: true); AudioRegistry.Clips(val93.noiseSFX, Cue.ItemNoise); AudioRegistry.Clips(val93.noiseSFXFar, Cue.ItemNoise); } } else { AudioRegistry.Source(val92.engineAudio1, Cue.VehicleEngine, (Component)(object)val92, merge: true); AudioRegistry.Source(val92.engineAudio2, Cue.VehicleEngine, (Component)(object)val92, merge: true); AudioRegistry.Source(val92.rollingAudio, Cue.VehicleEngine, (Component)(object)val92, merge: true); AudioRegistry.Source(val92.turbulenceAudio, Cue.VehicleImpact, (Component)(object)val92, merge: true); AudioRegistry.Clips(val92.revEngineStart, Cue.CruiserIgnition); AudioRegistry.Clips(val92.engineStartSuccessful, Cue.CruiserStarted); AudioRegistry.Clips(val92.engineRun, Cue.VehicleEngine); AudioRegistry.Clips(val92.engineRev, Cue.CruiserIgnition); AudioRegistry.Clips(val92.engineRun2, Cue.VehicleEngine); AudioRegistry.Clips(val92.insertKey, Cue.CruiserKey); AudioRegistry.Clips(val92.twistKey, Cue.CruiserKey); AudioRegistry.Clips(val92.removeKey, Cue.CruiserKey); AudioRegistry.Clips(val92.sitDown, Cue.VehicleInteraction); AudioRegistry.Source(val92.tireAudio, Cue.Skidding, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.vehicleEngineAudio, Cue.VehicleEngine, (Component)(object)val92, merge: true); AudioRegistry.Source(val92.steeringWheelAudio, Cue.VehicleInteraction, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.skiddingAudio, Cue.Skidding, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.gearStickAudio, Cue.VehicleInteraction, (Component)(object)val92, merge: false); AudioRegistry.Clips(val92.gearStickAudios, Cue.VehicleInteraction); AudioRegistry.Source(val92.hoodAudio, Cue.VehicleInteraction, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.pushAudio, Cue.VehicleInteraction, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.collisionAudio1, Cue.VehicleImpact, (Component)(object)val92, merge: true); AudioRegistry.Source(val92.collisionAudio2, Cue.VehicleImpact, (Component)(object)val92, merge: true); AudioRegistry.Clips(val92.maxCollisions, Cue.VehicleImpact); AudioRegistry.Clips(val92.medCollisions, Cue.VehicleImpact); AudioRegistry.Clips(val92.minCollisions, Cue.VehicleImpact); AudioRegistry.Clips(val92.obstacleCollisions, Cue.VehicleImpact); AudioRegistry.Clips(val92.windshieldBreak, Cue.VehicleImpact); AudioRegistry.Source(val92.miscAudio, Cue.VehicleInteraction, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.radioAudio, Cue.RadioMusic, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.hoodFireAudio, Cue.VehicleFire, (Component)(object)val92, merge: false); AudioRegistry.Clips(val92.carHoodOpenSFX, Cue.CruiserHood); AudioRegistry.Clips(val92.carHoodCloseSFX, Cue.CruiserHood); AudioRegistry.Clips(val92.headlightsToggleSFX, Cue.VehicleInteraction); AudioRegistry.Source(val92.springAudio, Cue.SeatEject, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.hornAudio, Cue.Horn, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.extremeStressAudio, Cue.EquipmentWarning, (Component)(object)val92, merge: false); AudioRegistry.Source(val92.turboBoostAudio, Cue.VehicleBoost, (Component)(object)val92, merge: true); AudioRegistry.Clips(val92.turboBoostSFX, Cue.VehicleBoost); AudioRegistry.Clips(val92.turboBoostSFX2, Cue.VehicleBoost); AudioRegistry.Clips(val92.jumpInCarSFX, Cue.VehicleJump); AudioRegistry.Clips(val92.pourTurbo, Cue.VehicleRefuel); } } else { AudioRegistry.Source(val91.entrancePointAudio, Cue.Door, (Component)(object)val91, merge: false); AudioRegistry.Clips(val91.doorAudios, Cue.Door); } } else { AudioRegistry.Source(val90.ambienceAudio, Cue.Environment, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.ambienceAudioNonDiagetic, Cue.Environment, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.musicSource, Cue.BackgroundMusic, (Component)(object)val90, merge: false); AudioRegistry.Clips(val90.DaytimeMusic, Cue.BackgroundMusic); AudioRegistry.Clips(val90.EveningMusic, Cue.BackgroundMusic); AudioRegistry.Source(val90.highAction1, Cue.TensionMusic, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.highAction2, Cue.TensionMusic, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.lowAction, Cue.TensionMusic, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.heartbeatSFX, Cue.Heartbeat, (Component)(object)val90, merge: false); AudioRegistry.Clips(val90.heartbeatClips, Cue.Heartbeat); AudioRegistry.Source(val90.poisonAudio, Cue.PoisonFeedback, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.ringingEarsAudio, Cue.EarRinging, (Component)(object)val90, merge: false); AudioRegistry.Source(val90.ringingEarsAudio2, Cue.EarRinging, (Component)(object)val90, merge: false); AudioRegistry.Clips(val90.waterSplashSFX, Cue.Liquid); AudioRegistry.Clips(val90.waterSplashSFXSmall, Cue.Liquid); AudioRegistry.Clips(val90.steelDoorOpenSFX, Cue.DoorOpen); AudioRegistry.Clips(val90.steelDoorCloseSFX, Cue.DoorClose); AudioRegistry.Clips(val90.woodDoorOpenSFX, Cue.DoorOpen); AudioRegistry.Clips(val90.woodDoorCloseSFX, Cue.DoorClose); } } else { AudioRegistry.Clips(val89.pipeFlowingSFX, Cue.PipeFlow); AudioRegistry.Clips(val89.valveTwistSFX, Cue.MechanicalTurn); AudioRegistry.Clips(val89.valveBurstSFX, Cue.PipeBurst); AudioRegistry.Clips(val89.valveCrackSFX, Cue.Crack); AudioRegistry.Clips(val89.steamBlowSFX, Cue.Steam); AudioRegistry.Source(val89.valveAudio, Cue.PipeFlow, (Component)(object)val89, merge: false); } } else { AudioRegistry.Source(val88.mineAudio, Cue.MineBeep, (Component)(object)val88, merge: false); AudioRegistry.Source(val88.mineFarAudio, Cue.Explosion, (Component)(object)val88, merge: false); AudioRegistry.Clips(val88.mineDetonate, Cue.Explosion); AudioRegistry.Clips(val88.mineTrigger, Cue.MinePress); AudioRegistry.Clips(val88.mineDetonateFar, Cue.Explosion); AudioRegistry.Clips(val88.mineDeactivate, Cue.MineBeep); AudioRegistry.Clips(val88.minePress, Cue.MinePress); } } else { AudioRegistry.Source(val87.mainAudio, Cue.MechanicalAlert, (Component)(object)val87, merge: false); AudioRegistry.Source(val87.bulletCollisionAudio, Cue.Ricochet, (Component)(object)val87, merge: false); AudioRegistry.Source(val87.farAudio, Cue.Gunshot, (Component)(object)val87, merge: true); AudioRegistry.Clips(val87.firingSFX, Cue.Gunshot); AudioRegistry.Clips(val87.chargingSFX, Cue.Alarm); AudioRegistry.Clips(val87.detectPlayerSFX, Cue.Alarm); AudioRegistry.Clips(val87.firingFarSFX, Cue.Gunshot); AudioRegistry.Clips(val87.bulletsHitWallSFX, Cue.Ricochet); AudioRegistry.Clips(val87.turretActivate, Cue.MechanicalAlert); AudioRegistry.Clips(val87.turretDeactivate, Cue.MechanicalAlert); AudioRegistry.Source(val87.berserkAudio, Cue.Alarm, (Component)(object)val87, merge: false); } } else { AudioRegistry.Source(val86.flashlightAudio, Cue.FlashlightSwitch, (Component)(object)val86, merge: false); AudioRegistry.Clips(val86.flashlightClips, Cue.FlashlightSwitch); AudioRegistry.Clips(val86.outOfBatteriesClip, Cue.BatteryWarning); } } else { AudioRegistry.Source(val85.sprayAudio, Cue.SprayPaint, (Component)(object)val85, merge: false); AudioRegistry.Clips(val85.spraySFX, Cue.SprayPaint); AudioRegistry.Clips(val85.sprayNeedsShakingSFX, Cue.CanShake); AudioRegistry.Clips(val85.sprayStart, Cue.SprayPaint); AudioRegistry.Clips(val85.sprayStop, Cue.SprayPaint); AudioRegistry.Clips(val85.sprayCanEmptySFX, Cue.CanShake); AudioRegistry.Clips(val85.sprayCanNeedsShakingSFX, Cue.CanShake); AudioRegistry.Clips(val85.sprayCanShakeEmptySFX, Cue.CanShake); AudioRegistry.Clips(val85.sprayCanShakeSFX, Cue.CanShake); } } else { AudioRegistry.Source(val84.knifeAudio, Cue.ToolSwing, (Component)(object)val84, merge: false); AudioRegistry.Clips(val84.hitSFX, Cue.Impact); AudioRegistry.Clips(val84.swingSFX, Cue.ToolSwing); } } else { AudioRegistry.Clips(val83.reelUp, Cue.ToolSwing); AudioRegistry.Clips(val83.swing, Cue.ToolSwing); AudioRegistry.Clips(val83.hitSFX, Cue.Impact); AudioRegistry.Source(val83.shovelAudio, Cue.ToolSwing, (Component)(object)val83, merge: false); } } else { AudioRegistry.Clips(val82.hitRoof, Cue.Impact); AudioRegistry.Clips(val82.fullExtend, Cue.Ladder); AudioRegistry.Clips(val82.hitWall, Cue.Impact); AudioRegistry.Clips(val82.ladderExtendSFX, Cue.Ladder); AudioRegistry.Clips(val82.ladderFallSFX, Cue.Ladder); AudioRegistry.Clips(val82.ladderShrinkSFX, Cue.Ladder); AudioRegistry.Clips(val82.blinkWarningSFX, Cue.EquipmentWarning); AudioRegistry.Clips(val82.lidOpenSFX, Cue.Ladder); AudioRegistry.Source(val82.ladderAudio, Cue.Ladder, (Component)(object)val82, merge: false); } } else { AudioRegistry.Source(val81.itemAudio, Cue.Explosion, (Component)(object)val81, merge: false); AudioRegistry.Clips(val81.pullPinSFX, Cue.PinPull); AudioRegistry.Clips(val81.explodeSFX, Cue.Explosion); } } else { AudioRegistry.Source(val80.jetpackAudio, Cue.Jetpack, (Component)(object)val80, merge: false); AudioRegistry.Source(val80.jetpackBeepsAudio, Cue.EquipmentWarning, (Component)(object)val80, merge: false); AudioRegistry.Clips(val80.startJetpackSFX, Cue.Jetpack); AudioRegistry.Clips(val80.jetpackSustainSFX, Cue.Jetpack); AudioRegistry.Clips(val80.jetpackBrokenSFX, Cue.EquipmentWarning); AudioRegistry.Clips(val80.jetpackWarningBeepSFX, Cue.EquipmentWarning); AudioRegistry.Clips(val80.jetpackLowBatteriesSFX, Cue.BatteryWarning); } } else { AudioRegistry.Source(val79.hornClose, Cue.Horn, (Component)(object)val79, merge: true); AudioRegistry.Source(val79.hornFar, Cue.Horn, (Component)(object)val79, merge: true); AudioRegistry.Source(val79.cordAudio, Cue.MechanicalTurn, (Component)(object)val79, merge: false); AudioRegistry.Clips(val79.cordPullSFX, Cue.MechanicalTurn); } } else { AudioRegistry.Source(val78.bridgeAudioSource, Cue.BridgeCreak, (Component)(object)val78, merge: false); AudioRegistry.Clips(val78.bridgeCreakSFX, Cue.BridgeCreak); AudioRegistry.Clips(val78.bridgeFallSFX, Cue.BridgeCollapse); } } else { AudioRegistry.Clips(val77.strikeSFX, Cue.Thunder); AudioRegistry.Clips(val77.distantThunderSFX, Cue.Thunder); AudioRegistry.Source(val77.randomStrikeAudio, Cue.Thunder, (Component)(object)val77, merge: false); AudioRegistry.Source(val77.randomStrikeAudioB, Cue.Thunder, (Component)(object)val77, merge: false); AudioRegistry.Source(val77.targetedStrikeAudio, Cue.Thunder, (Component)(object)val77, merge: false); AudioRegistry.Clips(val77.staticElectricityAudio, Cue.StaticWarning); } } else { AudioRegistry.Clips(val76.changeSuitSFX, Cue.SuitChange); AudioRegistry.Source(val76.shipAmbianceAudio, Cue.ShipHum, (Component)(object)val76, merge: false); AudioRegistry.Source(val76.shipMotorAudio, Cue.ShipHum, (Component)(object)val76, merge: false); AudioRegistry.Clips(val76.shipDepartSFX, Cue.ShipTravel); AudioRegistry.Clips(val76.shipArriveSFX, Cue.ShipArrival); AudioRegistry.Source(val76.shipDoorAudioSource, Cue.ShipDoor, (Component)(object)val76, merge: false); AudioRegistry.Source(val76.speakerAudioSource, Cue.Broadcast, (Component)(object)val76, merge: false); AudioRegistry.Clips(val76.suckedIntoSpaceSFX, Cue.Underwater); AudioRegistry.Clips(val76.shipCreakSFX, Cue.ShipMechanism); AudioRegistry.Clips(val76.alarmSFX, Cue.Alarm); AudioRegistry.Clips(val76.firedVoiceSFX, Cue.Broadcast); AudioRegistry.Clips(val76.openingHangarDoorAudio, Cue.ShipDoor); AudioRegistry.Clips(val76.shipIntroSpeechSFX, Cue.Broadcast); AudioRegistry.Clips(val76.disableSpeakerSFX, Cue.Broadcast); AudioRegistry.Clips(val76.zeroDaysLeftAlertSFX, Cue.Broadcast); AudioRegistry.Source(val76.startGameWhir, Cue.ShipLanding, (Component)(object)val76, merge: false); AudioRegistry.Source(val76.shipLandingAudio, Cue.ShipLanding, (Component)(object)val76, merge: false); AudioRegistry.Source(val76.shipLandingScrapAudio, Cue.ItemDrop, (Component)(object)val76, merge: false); AudioRegistry.Source(val76.shipDoorsClosingJingle, Cue.ShipMechanism, (Component)(object)val76, merge: false); AudioRegistry.Clips(val76.HUDSystemAlertSFX, Cue.UiWarning); AudioRegistry.Clips(val76.damageSFX, Cue.Injury); AudioRegistry.Clips(val76.fallDamageSFX, Cue.Injury); AudioRegistry.Clips(val76.bloodGoreSFX, Cue.BodyImpact); AudioRegistry.Clips(val76.playerShoveSFX, Cue.BodyImpact); AudioRegistry.Clips(val76.playerGrabSFX, Cue.ItemPickup); AudioRegistry.Clips(val76.bodyCollisionSFX, Cue.BodyImpact); AudioRegistry.Clips(val76.playerFallDeath, Cue.DeathSound); AudioRegistry.Clips(val76.playerCrushDeath, Cue.BodyCrush); AudioRegistry.Clips(val76.hitPlayerSFX, Cue.BodyImpact); } } else { AudioRegistry.Source(val75.mainAudio, Cue.Zap, (Component)(object)val75, merge: false); AudioRegistry.Source(val75.shockAudio, Cue.Zap, (Component)(object)val75, merge: false); AudioRegistry.Source(val75.gunAudio, Cue.Zap, (Component)(object)val75, merge: false); AudioRegistry.Clips(val75.activateClips, Cue.Zap); AudioRegistry.Clips(val75.beginShockClips, Cue.Zap); AudioRegistry.Clips(val75.overheatClips, Cue.EquipmentWarning); AudioRegistry.Clips(val75.finishShockClips, Cue.Zap); AudioRegistry.Clips(val75.outOfBatteriesClip, Cue.BatteryWarning); AudioRegistry.Clips(val75.detectAnomaly, Cue.Zap); AudioRegistry.Clips(val75.scanAnomaly, Cue.Zap); } } else { AudioRegistry.Source(val74.localHelmetSFX, Cue.Inhaling, (Component)(object)val74, merge: false); AudioRegistry.Source(val74.thisAudioSource, Cue.Inhaling, (Component)(object)val74, merge: false); AudioRegistry.Clips(val74.twistCanSFX, Cue.Inhaling); AudioRegistry.Clips(val74.releaseGasSFX, Cue.Inhaling); AudioRegistry.Clips(val74.holdCanSFX, Cue.Inhaling); AudioRegistry.Clips(val74.removeCanSFX, Cue.TzpRelease); AudioRegistry.Clips(val74.outOfGasSFX, Cue.TzpEmpty); } } else { AudioRegistry.Source(val73.spikeTrapAudio, Cue.SpikeSlam, (Component)(object)val73, merge: false); } } else { AudioRegistry.Source(val72.terminalAudio, Cue.Terminal, (Component)(object)val72, merge: false); AudioRegistry.Clips(val72.keyboardClips, Cue.Terminal); AudioRegistry.Clips(val72.syncedAudios, Cue.Terminal); AudioRegistry.Clips(val72.codeBroadcastSFX, Cue.Terminal); AudioRegistry.Clips(val72.enterTerminalSFX, Cue.Terminal); AudioRegistry.Clips(val72.leaveTerminalSFX, Cue.Terminal); } } else { AudioRegistry.Source(val71.thisAudioSource, Cue.Breaker, (Component)(object)val71, merge: false); AudioRegistry.Source(val71.breakerBoxHum, Cue.PowerHum, (Component)(object)val71, merge: false); AudioRegistry.Clips(val71.switchPowerSFX, Cue.Breaker); } } else { AudioRegistry.Source(val70.itemAudio, Cue.ItemNoise, (Component)(object)val70, merge: false); AudioRegistry.Clips(val70.grabAudio, Cue.ItemNoise); AudioRegistry.Clips(val70.dropAudio, Cue.ItemNoise); } } else { AudioRegistry.Source(val69.tickAudio, Cue.Clock, (Component)(object)val69, merge: false); AudioRegistry.Clips(val69.tickSFX, Cue.Clock); AudioRegistry.Clips(val69.tockSFX, Cue.Clock); } } else { AudioRegistry.Source(val68.remoteAudio, Cue.Remote, (Component)(object)val68, merge: false); } } else { AudioRegistry.Clips(val67.connectSFX, Cue.Apparatus); AudioRegistry.Clips(val67.disconnectSFX, Cue.Apparatus); AudioRegistry.Clips(val67.removeFromMachineSFX, Cue.Apparatus); } } else { AudioRegistry.Source(val66.elevatorAudio, Cue.Elevator, (Component)(object)val66, merge: false); AudioRegistry.Clips(val66.elevatorStartUpSFX, Cue.Elevator); AudioRegistry.Clips(val66.elevatorStartDownSFX, Cue.Elevator); AudioRegistry.Clips(val66.elevatorTravelSFX, Cue.Elevator); AudioRegistry.Clips(val66.elevatorFinishUpSFX, Cue.Elevator); AudioRegistry.Clips(val66.elevatorFinishDownSFX, Cue.Elevator); AudioRegistry.Source(val66.elevatorJingleMusic, Cue.ItemMusic, (Component)(object)val66, merge: false); } } else { AudioRegistry.Source(val65.zapAudio, Cue.Charging, (Component)(object)val65, merge: false); } } else { AudioRegistry.Source(val64.ventAudio, Cue.Vent, (Component)(object)val64, merge: false); AudioRegistry.Clips(val64.ventCrawlSFX, Cue.Vent); } } else { AudioRegistry.Clips(val63.placeLockPickerClips, Cue.LockPicking); AudioRegistry.Clips(val63.finishPickingLockClips, Cue.Unlock); AudioRegistry.Source(val63.lockPickerAudio, Cue.LockPicking, (Component)(object)val63, merge: false); } } else { AudioRegistry.Clips(val62.pickingLockSFX, Cue.LockPicking); AudioRegistry.Clips(val62.unlockSFX, Cue.Unlock); AudioRegistry.Source(val62.doorLockSFX, Cue.LockPicking, (Component)(object)val62, merge: false); } } else { AudioRegistry.Source(val61.audioToPlay, Cue.Elevator, (Component)(object)val61, merge: false); AudioRegistry.Source(val61.audioToPlay2, Cue.Elevator, (Component)(object)val61, merge: false); } } else { AudioRegistry.Clips(val60.insideFactoryMeteorClip, Cue.MeteorImpact); } } else { AudioRegistry.Clips(val59.audioOn, Cue.WorldHeartbeat); AudioRegistry.Clips(val59.audioOff, Cue.WorldHeartbeat); AudioRegistry.Source(val59.repeatingAudioSource, Cue.WorldHeartbeat, (Component)(object)val59, merge: false); } } else { AudioRegistry.Source(val58.audioToPlay, Cue.Footsteps, (Component)(object)val58, merge: false); AudioRegistry.Clips(val58.randomClips, Cue.Footsteps); } } else { AudioRegistry.Clips(val57.randomClips, Cue.MaskSound); AudioRegistry.Source(val57.thisAudio, Cue.MaskSound, (Component)(object)val57, merge: false); } } else { AudioRegistry.Source(val56.shockChairSound, Cue.Electric, (Component)(object)val56, merge: false); } } else { AudioRegistry.Source(val55.destroyAudio, Cue.PlantClear, (Component)(object)val55, merge: false); } } else { AudioRegistry.Source(val54.particleAudio, Cue.Impact, (Component)(object)val54, merge: false); } } else { AudioRegistry.Clips(val53.beginPlacementSFX, Cue.UiFeedback); AudioRegistry.Clips(val53.denyPlacementSFX, Cue.UiFeedback); AudioRegistry.Clips(val53.cancelPlacementSFX, Cue.UiFeedback); AudioRegistry.Clips(val53.storeItemSFX, Cue.UiFeedback); } } else { AudioRegistry.Clips(val52.scanSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.addToScrapTotalSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.finishAddingToTotalSFX, Cue.UiFeedback); AudioRegistry.Source(val52.UIAudio, Cue.UiFeedback, (Component)(object)val52, merge: false); AudioRegistry.Clips(val52.criticalInjury, Cue.Injury); AudioRegistry.Source(val52.CriticalInjuryAudioSustain, Cue.Injury, (Component)(object)val52, merge: false); AudioRegistry.Clips(val52.criticalInjurySustain, Cue.Injury); AudioRegistry.Clips(val52.globalNotificationSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.endStatsMusic, Cue.TensionMusic); AudioRegistry.Clips(val52.shipAlarmHornSFX, Cue.UiWarning); AudioRegistry.Clips(val52.radiationWarningAudio, Cue.UiWarning); AudioRegistry.Clips(val52.meteorShowerWarningAudio, Cue.UiWarning); AudioRegistry.Clips(val52.tipsSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.warningSFX, Cue.UiWarning); AudioRegistry.Source(val52.dialogueBoxSFX, Cue.UiFeedback, (Component)(object)val52, merge: false); AudioRegistry.Clips(val52.dialogueBleeps, Cue.UiFeedback); AudioRegistry.Clips(val52.advertMusic, Cue.UiFeedback); AudioRegistry.Clips(val52.advertMusic2, Cue.UiFeedback); AudioRegistry.Source(val52.breathingUnderwaterAudio, Cue.Underwater, (Component)(object)val52, merge: false); AudioRegistry.Clips(val52.levelIncreaseSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.levelDecreaseSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.decreaseXPSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.increaseXPSFX, Cue.UiFeedback); AudioRegistry.Source(val52.LevellingAudio, Cue.UiFeedback, (Component)(object)val52, merge: false); AudioRegistry.Clips(val52.newProfitQuotaSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.reachedQuotaSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.OneDayToMeetQuotaSFX, Cue.UiWarning); AudioRegistry.Clips(val52.profitQuotaDaysLeftCalmSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.displayCollectedScrapSFX, Cue.UiFeedback); AudioRegistry.Clips(val52.displayCollectedScrapSFXSmall, Cue.UiFeedback); } } else { AudioRegistry.Source(val51.bodyAudio, Cue.BodyImpact, (Component)(object)val51, merge: false); AudioRegistry.Source(val51.playAudioOnDeath, Cue.BodyImpact, (Component)(object)val51, merge: false); } } else { AudioRegistry.Source(val50.itemAudio, Cue.ItemDrop, (Component)(object)val50, merge: false); } } else { AudioRegistry.Source(val49.bagAudio, Cue.ItemNoise, (Component)(object)val49, merge: false); AudioRegistry.Clips(val49.zipUpBagSFX, Cue.BagZip); AudioRegistry.Clips(val49.unzipBagSFX, Cue.BagZip); AudioRegistry.Clips(val49.grabItemInBagSFX, Cue.ItemPickup); AudioRegistry.Clips(val49.beltBagUnclipSFX, Cue.ItemNoise); } } else { AudioRegistry.Source(val48.presentAudio, Cue.GiftOpen, (Component)(object)val48, merge: false); AudioRegistry.Clips(val48.openGiftAudio, Cue.GiftOpen); } } else { AudioRegistry.Source(val47.turnOnAudio, Cue.LightSwitch, (Component)(object)val47, merge: false); } } else { AudioRegistry.Source(val46.whirringAudio, Cue.Microwave, (Component)(object)val46, merge: false); AudioRegistry.Clips(val46.microwaveOpen, Cue.MicrowaveDoor); AudioRegistry.Clips(val46.microwaveClose, Cue.MicrowaveDoor); } } else { AudioRegistry.Clips(val45.tvAudioClips, Cue.Television); AudioRegistry.Clips(val45.switchTVOn, Cue.Television); AudioRegistry.Clips(val45.switchTVOff, Cue.Television); AudioRegistry.Source(val45.tvSFX, Cue.Television, (Component)(object)val45, merge: false); } } else { AudioRegistry.Source(val44.pingAudio, Cue.RadarPing, (Component)(object)val44, merge: false); AudioRegistry.Clips(val44.pingSFX, Cue.RadarPing); AudioRegistry.Source(val44.radarBoosterAudio, Cue.RadarSwitch, (Component)(object)val44, merge: false); AudioRegistry.Clips(val44.turnOnSFX, Cue.RadarSwitch); AudioRegistry.Clips(val44.turnOffSFX, Cue.RadarSwitch); AudioRegistry.Clips(val44.flashSFX, Cue.Electric); } } else { AudioRegistry.Source(val43.thisAudio, Cue.Door, (Component)(object)val43, merge: false); AudioRegistry.Clips(val43.trueAudio, Cue.DoorOpen); AudioRegistry.Clips(val43.falseAudio, Cue.DoorClose); AudioRegistry.Clips(val43.completionTrueAudio, Cue.DoorOpen); AudioRegistry.Clips(val43.completionFalseAudio, Cue.DoorClose); } } else { AudioRegistry.Source(val42.buttonAudio, Cue.Teleport, (Component)(object)val42, merge: false); AudioRegistry.Source(val42.shipTeleporterAudio, Cue.Teleport, (Component)(object)val42, merge: false); AudioRegistry.Clips(val42.buttonPressSFX, Cue.Teleport); AudioRegistry.Clips(val42.teleporterSpinSFX, Cue.Teleport); AudioRegistry.Clips(val42.teleporterBeamUpSFX, Cue.Teleport); AudioRegistry.Clips(val42.beamUpPlayerBodySFX, Cue.Teleport); } } else { AudioRegistry.Source(val41.SettingsAudio, Cue.UiFeedback, (Component)(object)val41, merge: false); } } else { AudioRegistry.Clips(val40.timeOfDayCues, Cue.BackgroundMusic); AudioRegistry.Source(val40.TimeOfDayMusic, Cue.BackgroundMusic, (Component)(object)val40, merge: false); } } else { AudioRegistry.Clips(val39.playSFX, Cue.Impact); } } else { AudioRegistry.Source(val38.HighAudio, Cue.Environment, (Component)(object)val38, merge: false); AudioRegistry.Source(val38.LowAudio, Cue.Environment, (Component)(object)val38, merge: false); AudioRegistry.Source(val38.stopAudioAtTime, Cue.Environment, (Component)(object)val38, merge: false); AudioRegistry.Source(val38.NightAudio, Cue.Environment, (Component)(object)val38, merge: false); } } else { AudioRegistry.RegisterFootsteps(); AudioRegistry.Clips(val37.snowmanLaughSFX, Cue.Laughter); } } else { AudioRegistry.RegisterFootsteps(); AudioRegistry.Source(val36.movementAudio, Cue.Creature, (Component)(object)val36, merge: false); AudioRegistry.Source(val36.slimeSlipAudio, Cue.Sliding, (Component)(object)val36, merge: false); } } else { AudioRegistry.Source(val35.webAudio, Cue.Web, (Component)(object)val35, merge: false); } } else { AudioRegistry.Source(val34.maskAudio, Cue.MaskLaugh, (Component)(object)val34, merge: false); AudioRegistry.Clips(val34.maskAttachAudio, Cue.MaskSound); AudioRegistry.Clips(val34.maskAttachAudioLocal, Cue.MaskAttachLocal); } } else { AudioRegistry.Source(val33.eggAudio, Cue.BirdCall, (Component)(object)val33, merge: false); AudioRegistry.Clips(val33.peepAudio, Cue.EggCall); AudioRegistry.Clips(val33.screamAudio, Cue.EggCry); AudioRegistry.Clips(val33.breakEggSFX, Cue.EggBreak); AudioRegistry.Clips(val33.scream3SFX, Cue.EggScream); } } else { AudioRegistry.Source(val32.deskAudio, Cue.MechanicalAlert, (Component)(object)val32, merge: false); AudioRegistry.Source(val32.wallAudio, Cue.WallRumble, (Component)(object)val32, merge: false); AudioRegistry.Source(val32.constantWallAudio, Cue.WallRumble, (Component)(object)val32, merge: false); AudioRegistry.Source(val32.doorWindowAudio, Cue.Door, (Component)(object)val32, merge: false); AudioRegistry.Clips(val32.microphoneAudios, Cue.Broadcast); AudioRegistry.Clips(val32.rareMicrophoneAudios, Cue.Broadcast); AudioRegistry.Clips(val32.doorOpenSFX, Cue.Door); AudioRegistry.Clips(val32.doorShutSFX, Cue.Door); AudioRegistry.Clips(val32.rumbleSFX, Cue.GroundRumble); AudioRegistry.Clips(val32.rewardGood, Cue.Creature); AudioRegistry.Clips(val32.rewardBad, Cue.Creature); AudioRegistry.Source(val32.rewardsMusic, Cue.TensionMusic, (Component)(object)val32, merge: false); AudioRegistry.Source(val32.speakerAudio, Cue.Broadcast, (Component)(object)val32, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val31).creatureVoice, Cue.Buzz, (Component)(object)val31, merge: true); AudioRegistry.Source(((EnemyAI)val31).creatureSFX, Cue.Buzz, (Component)(object)val31, merge: true); } } else { AudioRegistry.Source(((EnemyAI)val30).creatureVoice, Cue.BirdCall, (Component)(object)val30, merge: true); AudioRegistry.Source(((EnemyAI)val30).creatureSFX, Cue.BirdCall, (Component)(object)val30, merge: true); AudioRegistry.Source(val30.flappingAudio, Cue.Wings, (Component)(object)val30, merge: false); AudioRegistry.Clips(val30.birdScreechSFX, Cue.BirdCall); AudioRegistry.Clips(val30.birdHitGroundSFX, Cue.Impact); } } else { AudioRegistry.Source(((EnemyAI)val29).creatureVoice, Cue.Creature, (Component)(object)val29, merge: true); AudioRegistry.Source(((EnemyAI)val29).creatureSFX, Cue.Creature, (Component)(object)val29, merge: true); AudioRegistry.Source(val29.flappingAudio, Cue.Wings, (Component)(object)val29, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val28).creatureVoice, Cue.Creature, (Component)(object)val28, merge: true); AudioRegistry.Source(((EnemyAI)val28).creatureSFX, Cue.Creature, (Component)(object)val28, merge: true); AudioRegistry.Clips(val28.footstepSFX, Cue.Footsteps); AudioRegistry.Clips(val28.footstepBassSFX, Cue.Footsteps); AudioRegistry.Clips(val28.peckTreeSFX, Cue.Peck); AudioRegistry.Source(val28.peckAudio, Cue.Peck, (Component)(object)val28, merge: false); AudioRegistry.Source(val28.longDistanceAudio, Cue.Creature, (Component)(object)val28, merge: true); AudioRegistry.Clips(val28.attackSFX, Cue.CreatureAttack); AudioRegistry.Clips(val28.screamSFX, Cue.BirdCall); AudioRegistry.Clips(val28.squawkSFX, Cue.BirdCall); AudioRegistry.Clips(val28.wakeUpSFX, Cue.BirdCall); AudioRegistry.Clips(val28.breakAndEnter, Cue.DoorImpact); AudioRegistry.Clips(val28.shipAlarm, Cue.Alarm); AudioRegistry.Source(val28.breakDownDoorAudio, Cue.DoorImpact, (Component)(object)val28, merge: false); AudioRegistry.Source(val28.birdNestAmbience, Cue.BirdCall, (Component)(object)val28, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val27).creatureVoice, Cue.Creature, (Component)(object)val27, merge: true); AudioRegistry.Source(((EnemyAI)val27).creatureSFX, Cue.Creature, (Component)(object)val27, merge: true); AudioRegistry.Clips(val27.climbTreeSFX1, Cue.Climbing); AudioRegistry.Clips(val27.climbTreeSFX2, Cue.Climbing); AudioRegistry.Clips(val27.pumaLeapSFX1, Cue.Rustling); AudioRegistry.Clips(val27.pumaLeapSFX2, Cue.Rustling); AudioRegistry.Clips(val27.pumaGrowlSFX, Cue.Growl); AudioRegistry.Source(val27.growlSource, Cue.Growl, (Component)(object)val27, merge: false); AudioRegistry.Clips(val27.pumaRunSFX, Cue.Footsteps); AudioRegistry.Clips(val27.pumaFootstepSFX, Cue.Footsteps); AudioRegistry.Source(val27.footstepSource, Cue.Footsteps, (Component)(object)val27, merge: true); AudioRegistry.Clips(val27.attackScream, Cue.Screaming); AudioRegistry.Clips(val27.dropSFX, Cue.Impact); AudioRegistry.Source(val27.attackSFX, Cue.Screaming, (Component)(object)val27, merge: true); AudioRegistry.Source(val27.attackSFXFaraway, Cue.Screaming, (Component)(object)val27, merge: true); AudioRegistry.Clips(val27.scratchSFX, Cue.Scratch); } } else { AudioRegistry.Source(((EnemyAI)val26).creatureVoice, Cue.Creature, (Component)(object)val26, merge: true); AudioRegistry.Source(((EnemyAI)val26).creatureSFX, Cue.Creature, (Component)(object)val26, merge: true); AudioRegistry.Clips(val26.snarlSFX, Cue.WolfSnarl); AudioRegistry.Clips(val26.growlSFX, Cue.WolfGrowl); AudioRegistry.Source(val26.growlAudio, Cue.WolfGrowl, (Component)(object)val26, merge: false); AudioRegistry.Clips(val26.shootTongueSFX, Cue.WolfTongue); AudioRegistry.Source(val26.tongueAudio, Cue.WolfPull, (Component)(object)val26, merge: false); AudioRegistry.Clips(val26.tongueShootSFX, Cue.WolfTongue); AudioRegistry.Clips(val26.killSFX, Cue.WolfAttack); AudioRegistry.Source(val26.callClose, Cue.WolfCall, (Component)(object)val26, merge: true); AudioRegistry.Source(val26.callFar, Cue.WolfCall, (Component)(object)val26, merge: true); AudioRegistry.Clips(val26.callsClose, Cue.WolfCall); AudioRegistry.Clips(val26.callsFar, Cue.WolfCall); AudioRegistry.Clips(val26.hitBushWolfSFX, Cue.WolfHit); } } else { AudioRegistry.Source(((EnemyAI)val25).creatureVoice, Cue.Creature, (Component)(object)val25, merge: true); AudioRegistry.Source(((EnemyAI)val25).creatureSFX, Cue.Creature, (Component)(object)val25, merge: true); AudioRegistry.Clips(val25.spotlightOff, Cue.MechanicalAlert); AudioRegistry.Clips(val25.spotlightFlicker, Cue.MechanicalAlert); AudioRegistry.Source(val25.LocalLRADAudio, Cue.Broadcast, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.LocalLRADAudio2, Cue.Broadcast, (Component)(object)val25, merge: false); AudioRegistry.Clips(val25.shootGunSFX, Cue.Launch); AudioRegistry.Clips(val25.largeExplosionSFX, Cue.Explosion); AudioRegistry.Source(val25.explosionAudio, Cue.Explosion, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.blowtorchAudio, Cue.Fire, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.flyingDistantAudio, Cue.Engine, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.spotlightOnAudio, Cue.MechanicalAlert, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.chargeForwardAudio, Cue.Engine, (Component)(object)val25, merge: false); AudioRegistry.Source(val25.engineSFX, Cue.Engine, (Component)(object)val25, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val24).creatureVoice, Cue.Buzz, (Component)(object)val24, merge: true); AudioRegistry.Source(((EnemyAI)val24).creatureSFX, Cue.Buzz, (Component)(object)val24, merge: true); AudioRegistry.Source(val24.beesIdle, Cue.Buzz, (Component)(object)val24, merge: true); AudioRegistry.Source(val24.beesDefensive, Cue.BuzzAlert, (Component)(object)val24, merge: true); AudioRegistry.Source(val24.beesAngry, Cue.BuzzAttack, (Component)(object)val24, merge: true); AudioRegistry.Source(val24.beeZapAudio, Cue.Electric, (Component)(object)val24, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val23).creatureVoice, Cue.Creature, (Component)(object)val23, merge: true); AudioRegistry.Source(((EnemyAI)val23).creatureSFX, Cue.Creature, (Component)(object)val23, merge: true); AudioRegistry.Source(val23.aggressionAudio, Cue.Chitter, (Component)(object)val23, merge: false); AudioRegistry.Clips(val23.cawScreamSFX, Cue.Screaming); AudioRegistry.Clips(val23.cawLaughSFX, Cue.Cackle); } } else { AudioRegistry.Source(((EnemyAI)val22).creatureVoice, Cue.Creature, (Component)(object)val22, merge: true); AudioRegistry.Source(((EnemyAI)val22).creatureSFX, Cue.Creature, (Component)(object)val22, merge: true); AudioRegistry.Source(val22.farWideSFX, Cue.Creature, (Component)(object)val22, merge: true); AudioRegistry.Clips(val22.giantFall, Cue.GroundImpact); AudioRegistry.Clips(val22.giantCry, Cue.Roar); AudioRegistry.Source(val22.giantBurningAudio, Cue.Fire, (Component)(object)val22, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val21).creatureVoice, Cue.Creature, (Component)(object)val21, merge: true); AudioRegistry.Source(((EnemyAI)val21).creatureSFX, Cue.Creature, (Component)(object)val21, merge: true); AudioRegistry.Clips(val21.burstSFX, Cue.BloomBurst); AudioRegistry.Source(val21.breathingSFX, Cue.BloomBreath, (Component)(object)val21, merge: false); AudioRegistry.Source(val21.burstSource, Cue.BloomChomp, (Component)(object)val21, merge: false); AudioRegistry.Clips(val21.plantFeetHit, Cue.GroundImpact); AudioRegistry.Clips(val21.chestBurst, Cue.BloomChestOpen); AudioRegistry.Clips(val21.chestPlantRoars, Cue.BloomRoar); AudioRegistry.Clips(val21.bitePlayer, Cue.BloomChomp); } } else { AudioRegistry.Source(((EnemyAI)val20).creatureVoice, Cue.Creature, (Component)(object)val20, merge: true); AudioRegistry.Source(((EnemyAI)val20).creatureSFX, Cue.Creature, (Component)(object)val20, merge: true); AudioRegistry.Source(val20.destroyAudio, Cue.PlantClear, (Component)(object)val20, merge: false); AudioRegistry.Source(val20.plantAudio, Cue.PlantGrowth, (Component)(object)val20, merge: false); AudioRegistry.Source(val20.bloomMusic, Cue.TensionMusic, (Component)(object)val20, merge: false); AudioRegistry.Source(val20.sporeAmbienceSource, Cue.SporeCloud, (Component)(object)val20, merge: false); AudioRegistry.Clips(val20.healPlayerSFX, Cue.BloomTreatment); AudioRegistry.Source(val20.vinesInHeadAudio, Cue.HeadRustling, (Component)(object)val20, merge: false); AudioRegistry.Clips(val20.vinesInHeadSFX, Cue.HeadRustling); } } else { AudioRegistry.Source(((EnemyAI)val19).creatureVoice, Cue.Creature, (Component)(object)val19, merge: true); AudioRegistry.Source(((EnemyAI)val19).creatureSFX, Cue.Creature, (Component)(object)val19, merge: true); AudioRegistry.Source(val19.poisonAudio, Cue.VisorHit, (Component)(object)val19, merge: false); AudioRegistry.Source(val19.floppingAudio, Cue.Flopping, (Component)(object)val19, merge: false); AudioRegistry.Source(val19.slidingAudio, Cue.Sliding, (Component)(object)val19, merge: false); AudioRegistry.Clips(val19.spitSFX, Cue.Spit); AudioRegistry.Source(val19.whiningAudio, Cue.Whining, (Component)(object)val19, merge: false); } } else { AudioRegistry.RegisterFootsteps(); AudioRegistry.Source(val18.movementAudio, Cue.Creature, (Component)(object)val18, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val17).creatureVoice, Cue.Buzz, (Component)(object)val17, merge: true); AudioRegistry.Source(((EnemyAI)val17).creatureSFX, Cue.Buzz, (Component)(object)val17, merge: true); AudioRegistry.Source(val17.buzzing, Cue.Buzz, (Component)(object)val17, merge: true); } } else { AudioRegistry.Source(((EnemyAI)val16).creatureVoice, Cue.Creature, (Component)(object)val16, merge: true); AudioRegistry.Source(((EnemyAI)val16).creatureSFX, Cue.Creature, (Component)(object)val16, merge: true); AudioRegistry.Source(val16.ambience1, Cue.Creature, (Component)(object)val16, merge: false); AudioRegistry.Source(val16.buzzingAmbience, Cue.Buzz, (Component)(object)val16, merge: false); AudioRegistry.Source(val16.sweepingAudio, Cue.Sweeping, (Component)(object)val16, merge: false); AudioRegistry.Clips(val16.footsteps, Cue.Footsteps); AudioRegistry.Clips(val16.broomSweepSFX, Cue.Sweeping); AudioRegistry.Source(val16.popAudio, Cue.Burst, (Component)(object)val16, merge: true); AudioRegistry.Source(val16.popAudioFar, Cue.Burst, (Component)(object)val16, merge: true); AudioRegistry.Source(val16.ambience2, Cue.Creature, (Component)(object)val16, merge: false); AudioRegistry.Source(ButlerEnemyAI.murderMusicAudio, Cue.TensionMusic, (Component)(object)val16, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val15).creatureVoice, Cue.Creature, (Component)(object)val15, merge: true); AudioRegistry.Source(((EnemyAI)val15).creatureSFX, Cue.Creature, (Component)(object)val15, merge: true); AudioRegistry.Clips(val15.footstepsSFX, Cue.Footsteps); AudioRegistry.Clips(val15.frightenSFX, Cue.Chitter); AudioRegistry.Clips(val15.stomp, Cue.Impact); AudioRegistry.Clips(val15.angry, Cue.Chitter); AudioRegistry.Clips(val15.puff, Cue.Spray); AudioRegistry.Clips(val15.nervousMumbling, Cue.Chitter); AudioRegistry.Clips(val15.rattleTail, Cue.Rattle); AudioRegistry.Clips(val15.bitePlayerSFX, Cue.Bite); } } else { AudioRegistry.Source(((EnemyAI)val14).creatureVoice, Cue.Creature, (Component)(object)val14, merge: true); AudioRegistry.Source(((EnemyAI)val14).creatureSFX, Cue.Creature, (Component)(object)val14, merge: true); AudioRegistry.Source(val14.movableAudioSource, Cue.Slime, (Component)(object)val14, merge: false); AudioRegistry.Clips(val14.agitatedSFX, Cue.Slime); AudioRegistry.Clips(val14.jiggleSFX, Cue.Slime); AudioRegistry.Clips(val14.hitSlimeSFX, Cue.SlimeHit); AudioRegistry.Clips(val14.killPlayerSFX, Cue.Liquid); AudioRegistry.Clips(val14.idleSFX, Cue.Slime); } } else { AudioRegistry.Source(((EnemyAI)val13).creatureVoice, Cue.Creature, (Component)(object)val13, merge: true); AudioRegistry.Source(((EnemyAI)val13).creatureSFX, Cue.Creature, (Component)(object)val13, merge: true); AudioRegistry.Clips(val13.chitterSFX, Cue.Chitter); AudioRegistry.Clips(val13.angryScreechSFX, Cue.Screaming); AudioRegistry.Clips(val13.angryVoiceSFX, Cue.Chitter); AudioRegistry.Clips(val13.bugFlySFX, Cue.Wings); AudioRegistry.Clips(val13.hitPlayerSFX, Cue.Impact); } } else { AudioRegistry.Source(((EnemyAI)val12).creatureVoice, Cue.Creature, (Component)(object)val12, merge: true); AudioRegistry.Source(((EnemyAI)val12).creatureSFX, Cue.Creature, (Component)(object)val12, merge: true); AudioRegistry.Clips(val12.footstepSFX, Cue.SkitterFootsteps); AudioRegistry.Source(val12.footstepAudio, Cue.SkitterFootsteps, (Component)(object)val12, merge: true); AudioRegistry.Clips(val12.hitWebSFX, Cue.Web); AudioRegistry.Clips(val12.attackSFX, Cue.Bite); AudioRegistry.Clips(val12.spoolPlayerSFX, Cue.Rustling); AudioRegistry.Clips(val12.hangPlayerSFX, Cue.Rustling); AudioRegistry.Clips(val12.breakWebSFX, Cue.Web); AudioRegistry.Clips(val12.hitSpiderSFX, Cue.CreatureHit); } } else { AudioRegistry.Source(((EnemyAI)val11).creatureVoice, Cue.Creature, (Component)(object)val11, merge: true); AudioRegistry.Source(((EnemyAI)val11).creatureSFX, Cue.Creature, (Component)(object)val11, merge: true); AudioRegistry.Clips(val11.fallShriek, Cue.Screaming); AudioRegistry.Clips(val11.hitGroundSFX, Cue.Impact); AudioRegistry.Clips(val11.hitCentipede, Cue.CreatureHit); AudioRegistry.Clips(val11.shriekClips, Cue.Screaming); AudioRegistry.Source(val11.clingingToPlayer2DAudio, Cue.Cling, (Component)(object)val11, merge: false); AudioRegistry.Clips(val11.clingToPlayer3D, Cue.OtherCling); } } else { AudioRegistry.Source(((EnemyAI)val10).creatureVoice, Cue.Creature, (Component)(object)val10, merge: true); AudioRegistry.Source(((EnemyAI)val10).creatureSFX, Cue.Creature, (Component)(object)val10, merge: true); AudioRegistry.Clips(val10.shortRoar, Cue.Roar); AudioRegistry.Clips(val10.hitWallSFX, Cue.Impact); AudioRegistry.Clips(val10.bitePlayerSFX, Cue.Bite); AudioRegistry.Clips(val10.eatPlayerSFX, Cue.Bite); AudioRegistry.Clips(val10.hitCrawlerSFX, Cue.CreatureHit); AudioRegistry.Clips(val10.longRoarSFX, Cue.Roar); } } else { AudioRegistry.Source(((EnemyAI)val9).creatureVoice, Cue.Creature, (Component)(object)val9, merge: true); AudioRegistry.Source(((EnemyAI)val9).creatureSFX, Cue.Creature, (Component)(object)val9, merge: true); AudioRegistry.Source(val9.creatureAngerVoice, Cue.Growl, (Component)(object)val9, merge: false); AudioRegistry.Source(val9.crackNeckAudio, Cue.Crack, (Component)(object)val9, merge: false); AudioRegistry.Clips(val9.crackNeckSFX, Cue.Crack); } } else { AudioRegistry.Source(((EnemyAI)val8).creatureVoice, Cue.Creature, (Component)(object)val8, merge: true); AudioRegistry.Source(((EnemyAI)val8).creatureSFX, Cue.Creature, (Component)(object)val8, merge: true); AudioRegistry.Clips(val8.springNoises, Cue.Spring); AudioRegistry.Clips(val8.enterCooldownSFX, Cue.SpringRetract); } } else { AudioRegistry.Source(((EnemyAI)val7).creatureVoice, Cue.Creature, (Component)(object)val7, merge: true); AudioRegistry.Source(((EnemyAI)val7).creatureSFX, Cue.Creature, (Component)(object)val7, merge: true); AudioRegistry.Source(val7.musicAudio, Cue.March, (Component)(object)val7, merge: false); AudioRegistry.Source(val7.musicAudio2, Cue.March, (Component)(object)val7, merge: false); AudioRegistry.Clips(val7.snareDrum, Cue.Drum); AudioRegistry.Clips(val7.paradeClips, Cue.March); AudioRegistry.Clips(val7.snipScissors, Cue.Snip); } } else { AudioRegistry.Source(((EnemyAI)val6).creatureVoice, Cue.Creature, (Component)(object)val6, merge: true); AudioRegistry.Source(((EnemyAI)val6).creatureSFX, Cue.Creature, (Component)(object)val6, merge: true); AudioRegistry.Clips(val6.appearStaringSFX, Cue.Creature); AudioRegistry.Clips(val6.skipWalkSFX, Cue.SkippingFootsteps); AudioRegistry.Clips(val6.breathingSFX, Cue.Breathing); AudioRegistry.Source(val6.heartbeatMusic, Cue.Heartbeat, (Component)(object)val6, merge: false); } } else { AudioRegistry.Source(((EnemyAI)val5).creatureVoice, Cue.Creature, (Component)(object)val5, merge: true); AudioRegistry.Source(((EnemyAI)val5).creatureSFX, Cue.Creature, (Component)(object)val5, merge: true); AudioRegistry.Source(val5.walkingAudio, Cue.Footsteps, (Component)(object)val5, merge: false); AudioRegistry.Clips(val5.growlSFX, Cue.Growl); AudioRegistry.Clips(val5.fakeCrySFX, Cue.Crying); AudioRegistry.Source(val5.clickingAudio1, Cue.Clicking, (Component)(object)val5, merge: true); AudioRegistry.Source(val5.clickingAudio2, Cue.Clicking, (Component)(object)val5, merge: true); AudioRegistry.Source(val5.screamAudio, Cue.Screaming, (Component)(object)val5, merge: false); AudioRegistry.Source(val5.screamAudioNonDiagetic, Cue.Screaming, (Component)(object)val5, merge: false); AudioRegistry.Clips(val5.cooldownSFX, Cue.Creature); AudioRegistry.Source(val5.babyCryingAudio, Cue.Crying, (Component)(object)val5, merge: false); AudioRegistry.Source(val5.babyVoice, Cue.Crying, (Component)(object)val5, merge: false); AudioRegistry.Clips(val5.squirmingSFX, Cue.Rustling); AudioRegistry.Clips(val5.transformationSFX, Cue.Transformation); AudioRegistry.Clips(val5.scaredBabyVoiceSFX, Cue.Crying); AudioRegistry.Clips(val5.biteSFX, Cue.Bite); AudioRegistry.Clips(val5.pukeSFX, Cue.Liquid); } } else { AudioRegistry.Source(((EnemyAI)val4).creatureVoice, Cue.Creature, (Component)(object)val4, merge: true); AudioRegistry.Source(((EnemyAI)val4).creatureSFX, Cue.Creature, (Component)(object)val4, merge: true); AudioRegistry.Source(val4.torsoTurnAudio, Cue.MechanicalTurn, (Component)(object)val4, merge: false); AudioRegistry.Source(val4.longRangeAudio, Cue.Creature, (Component)(object)val4, merge: true); AudioRegistry.Clips(val4.torsoFinishTurningClips, Cue.MechanicalTurn); AudioRegistry.Clips(val4.aimSFX, Cue.Aim); AudioRegistry.Clips(val4.kickSFX, Cue.NutcrackerKick); } } else { AudioRegistry.Source(((EnemyAI)val3).creatureVoice, Cue.Creature, (Component)(object)val3, merge: true); AudioRegistry.Source(((EnemyAI)val3).creatureSFX, Cue.Creature, (Component)(object)val3, merge: true); AudioRegistry.Source(val3.farAudio, Cue.Creature, (Component)(object)val3, merge: true); AudioRegistry.Clips(val3.popGoesTheWeaselTheme, Cue.Music); AudioRegistry.Clips(val3.popUpSFX, Cue.BoxOpen); AudioRegistry.Clips(val3.screamingSFX, Cue.Screaming); AudioRegistry.Clips(val3.killPlayerSFX, Cue.Impact); } } else { AudioRegistry.Source(((EnemyAI)val2).creatureVoice, Cue.Creature, (Component)(object)val2, merge: true); AudioRegistry.Source(((EnemyAI)val2).creatureSFX, Cue.Creature, (Component)(object)val2, merge: true); AudioRegistry.Source(val2.groundAudio, Cue.Creature, (Component)(object)val2, merge: false); AudioRegistry.Clips(val2.groundRumbleSFX, Cue.GroundRumble); AudioRegistry.Clips(val2.ambientRumbleSFX, Cue.Underground); AudioRegistry.Clips(val2.hitGroundSFX, Cue.GroundImpact); AudioRegistry.Clips(val2.emergeFromGroundSFX, Cue.Emerge); AudioRegistry.Clips(val2.roarSFX, Cue.Roar); } } else { AudioRegistry.Source(((EnemyAI)val).creatureVoice, Cue.Creature, (Component)(object)val, merge: true); AudioRegistry.Source(((EnemyAI)val).creatureSFX, Cue.Creature, (Component)(object)val, merge: true); AudioRegistry.Clips(val.screamSFX, Cue.Roar); AudioRegistry.Clips(val.breathingSFX, Cue.Breathing); AudioRegistry.Clips(val.killPlayerSFX, Cue.Impact); } } } internal static class CueResolver { private static bool Contains(AudioClip[] clips, AudioClip clip) { if (clips == null) { return false; } for (int i = 0; i < clips.Length; i++) { if ((Object)(object)clips[i] == (Object)(object)clip) { return true; } } return false; } internal static bool TryResolve(AudioSource source, AudioClip clip, out Cue cue) { PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if ((Object)(object)HUDManager.Instance != (Object)null && (Object)(object)source == (Object)(object)HUDManager.Instance.UIAudio && InteractionAudio.LocalMaskClip(clip)) { cue = Cue.MaskAttachLocal; return true; } GrabbableObject componentInParent = ((Component)source).GetComponentInParent(); if (CompanyAudio.Resolve(source, clip, out cue)) { return true; } if (FeedbackFifth.Resolve(source, clip, out cue)) { return true; } if (FeedbackFourth.Resolve(source, clip, out cue)) { return true; } if (FeedbackRound3.Resolve(source, clip, out cue)) { return true; } MaskedPlayerEnemy componentInParent2 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null && (Object)(object)source == (Object)(object)componentInParent2.movementAudio && AudioRegistry.IsSurfaceStep(clip)) { cue = Cue.Footsteps; return true; } if (FeedbackAudioBindings.Resolve(source, clip, out cue)) { return true; } cue = AcousticDetails.Resolve(((Object)clip).name); Cue cue2 = cue; if ((cue2 == Cue.DuckQuack || cue2 == Cue.ToyTrain) ? true : false) { return true; } PlayerControllerB componentInParent3 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent3 != (Object)null && (Object)(object)StartOfRound.Instance != (Object)null && (Object)(object)source == (Object)(object)componentInParent3.itemAudio && (Contains(StartOfRound.Instance.playerGrabSFX, clip) || ((Object)(object)componentInParent3.currentlyGrabbingObject != (Object)null && (Object)(object)clip == (Object)(object)componentInParent3.currentlyGrabbingObject.itemProperties.grabSFX) || ((Object)(object)componentInParent3.currentlyHeldObjectServer != (Object)null && (Object)(object)clip == (Object)(object)componentInParent3.currentlyHeldObjectServer.itemProperties.grabSFX))) { cue = Cue.ItemPickup; return true; } if ((Object)(object)componentInParent != (Object)null && (Object)(object)componentInParent.itemProperties != (Object)null && (Object)(object)clip == (Object)(object)componentInParent.itemProperties.grabSFX) { cue = Cue.ItemPickup; return true; } EnemyAI componentInParent4 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent4 != (Object)null && (Object)(object)componentInParent4.enemyType != (Object)null && ((Object)(object)clip == (Object)(object)componentInParent4.enemyType.hitBodySFX || (Object)(object)clip == (Object)(object)componentInParent4.enemyType.hitEnemyVoiceSFX)) { cue = Cue.CreatureHit; return true; } HauntedMaskItem val2 = (HauntedMaskItem)(object)((componentInParent is HauntedMaskItem) ? componentInParent : null); if (val2 != null && (Object)(object)clip == (Object)(object)val2.maskAttachAudio) { cue = Cue.MaskSound; return true; } if ((Object)(object)componentInParent != (Object)null && (Object)(object)componentInParent.itemProperties != (Object)null && (Object)(object)clip == (Object)(object)componentInParent.itemProperties.dropSFX) { cue = Cue.ItemDrop; return true; } SprayPaintItem val3 = (SprayPaintItem)(object)((componentInParent is SprayPaintItem) ? componentInParent : null); if (val3 != null && val3.isWeedKillerSprayBottle && ((Object)(object)clip == (Object)(object)val3.spraySFX || (Object)(object)clip == (Object)(object)val3.sprayStart || (Object)(object)clip == (Object)(object)val3.sprayStop)) { cue = Cue.WeedSpray; return true; } KiwiBabyItem val4 = (KiwiBabyItem)(object)((componentInParent is KiwiBabyItem) ? componentInParent : null); if (val4 != null) { if ((Object)(object)clip == (Object)(object)val4.peepAudio) { cue = Cue.EggCall; return true; } if ((Object)(object)clip == (Object)(object)val4.screamAudio) { cue = Cue.EggCry; return true; } if ((Object)(object)clip == (Object)(object)val4.scream3SFX) { cue = Cue.EggScream; return true; } if ((Object)(object)clip == (Object)(object)val4.breakEggSFX) { cue = Cue.EggBreak; return true; } } if (AuditAudioBindings.Resolve(source, clip, out cue)) { return true; } cue = AcousticDetails.Resolve(((Object)clip).name); if (cue != Cue.Creature) { return true; } if (AudioRegistry.ContextCue(source, clip, out cue)) { return true; } if (AuditAudioBindings.NativeClip(clip, out cue) || SupplementalAudio.Clip(clip, out cue)) { return true; } MaskedPlayerEnemy componentInParent5 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent5 != (Object)null && ((EnemyAI)componentInParent5).enemyType.audioClips != null) { AudioClip[] audioClips = ((EnemyAI)componentInParent5).enemyType.audioClips; if ((audioClips.Length != 0 && (Object)(object)clip == (Object)(object)audioClips[0]) || (audioClips.Length > 1 && (Object)(object)clip == (Object)(object)audioClips[1]) || (audioClips.Length > 2 && (Object)(object)clip == (Object)(object)audioClips[2])) { cue = (((Object)(object)((EnemyAI)componentInParent5).inSpecialAnimationWithPlayer == (Object)(object)val && (Object)(object)val != (Object)null) ? Cue.LocalMaskInfection : Cue.MaskInfection); return true; } } CentipedeAI componentInParent6 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent6 != (Object)null) { if ((Object)(object)source == (Object)(object)componentInParent6.clingingToPlayer2DAudio) { cue = Cue.Cling; return true; } if ((Object)(object)clip == (Object)(object)componentInParent6.clingToPlayer3D) { cue = Cue.OtherCling; return true; } } FlowermanAI componentInParent7 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent7 != (Object)null && (Object)(object)clip == (Object)(object)componentInParent7.crackNeckSFX) { cue = (((Object)(object)((EnemyAI)componentInParent7).inSpecialAnimationWithPlayer != (Object)null && (Object)(object)((EnemyAI)componentInParent7).inSpecialAnimationWithPlayer != (Object)(object)val) ? Cue.OtherNeckSnap : Cue.NeckSnap); return true; } Component? obj = AudioRegistry.Owner(source); RedLocustBees val5 = (RedLocustBees)(object)((obj is RedLocustBees) ? obj : null); if (val5 != null) { if ((Object)(object)source == (Object)(object)val5.beesIdle) { cue = Cue.Buzz; return true; } if ((Object)(object)source == (Object)(object)val5.beesDefensive) { cue = Cue.BuzzAlert; return true; } if ((Object)(object)source == (Object)(object)val5.beesAngry) { cue = Cue.BuzzAttack; return true; } } if (AudioRegistry.KnownSource(source, clip, out cue)) { return true; } cue = Cue.Creature; ShotgunItem componentInParent8 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent8 != (Object)null) { cue = (((Object)(object)source == (Object)(object)componentInParent8.gunShootAudio) ? Cue.Gunshot : (((Object)(object)source == (Object)(object)componentInParent8.gunBulletsRicochetAudio) ? Cue.Ricochet : (((Object)(object)clip == (Object)(object)componentInParent8.gunReloadSFX || (Object)(object)clip == (Object)(object)componentInParent8.gunReloadFinishSFX) ? Cue.Reload : Cue.GunClick))); return true; } EnemyAI componentInParent9 = ((Component)source).GetComponentInParent(); FlowermanAI val6 = (FlowermanAI)(object)((componentInParent9 is FlowermanAI) ? componentInParent9 : null); if (val6 != null) { if ((Object)(object)clip == (Object)(object)val6.crackNeckSFX || (Object)(object)source == (Object)(object)val6.crackNeckAudio) { cue = Cue.NeckSnap; return true; } if ((Object)(object)source == (Object)(object)val6.creatureAngerVoice) { cue = Cue.Growl; return true; } } MouthDogAI val7 = (MouthDogAI)(object)((componentInParent9 is MouthDogAI) ? componentInParent9 : null); if (val7 != null) { if ((Object)(object)clip == (Object)(object)val7.screamSFX) { cue = Cue.Roar; } else if ((Object)(object)clip == (Object)(object)val7.breathingSFX) { cue = Cue.Breathing; } else if ((Object)(object)clip == (Object)(object)val7.killPlayerSFX) { cue = Cue.Impact; } else if (((EnemyAI)val7).enemyBehaviourStates.Length > 1 && (Object)(object)clip == (Object)(object)((EnemyAI)val7).enemyBehaviourStates[1].VoiceClip) { cue = Cue.Growl; } else if (((EnemyAI)val7).enemyBehaviourStates.Length > 3 && (Object)(object)clip == (Object)(object)((EnemyAI)val7).enemyBehaviourStates[3].SFXClip) { cue = Cue.Lunge; } return true; } SandWormAI val8 = (SandWormAI)(object)((componentInParent9 is SandWormAI) ? componentInParent9 : null); if (val8 != null) { if (Contains(val8.groundRumbleSFX, clip)) { cue = Cue.GroundRumble; } else if (Contains(val8.ambientRumbleSFX, clip)) { cue = Cue.Underground; } else if ((Object)(object)clip == (Object)(object)val8.emergeFromGroundSFX) { cue = Cue.Emerge; } else if ((Object)(object)clip == (Object)(object)val8.hitGroundSFX) { cue = Cue.GroundImpact; } else if (Contains(val8.roarSFX, clip)) { cue = Cue.Roar; } return true; } JesterAI val9 = (JesterAI)(object)((componentInParent9 is JesterAI) ? componentInParent9 : null); if (val9 != null) { cue = (((Object)(object)clip == (Object)(object)val9.popGoesTheWeaselTheme) ? Cue.Music : (((Object)(object)clip == (Object)(object)val9.popUpSFX) ? Cue.BoxOpen : (((Object)(object)clip == (Object)(object)val9.screamingSFX) ? Cue.Screaming : (((Object)(object)clip == (Object)(object)val9.killPlayerSFX) ? Cue.Impact : Cue.Creature)))); return true; } NutcrackerEnemyAI val10 = (NutcrackerEnemyAI)(object)((componentInParent9 is NutcrackerEnemyAI) ? componentInParent9 : null); if (val10 != null) { cue = (((Object)(object)clip == (Object)(object)val10.aimSFX) ? Cue.Aim : (((Object)(object)source == (Object)(object)val10.torsoTurnAudio) ? Cue.MechanicalTurn : ((((EnemyAI)val10).enemyType.audioClips.Length > 2 && (Object)(object)clip == (Object)(object)((EnemyAI)val10).enemyType.audioClips[2]) ? Cue.Reload : (((Object)(object)clip == (Object)(object)val10.kickSFX || (Object)(object)clip == (Object)(object)((EnemyAI)val10).dieSFX) ? Cue.Impact : Cue.MechanicalAlert)))); return true; } if (componentInParent9 is LassoManAI || componentInParent9 is TestEnemy) { return false; } int group; return AudioRegistry.Resolve(source, clip, out cue, out group); } } internal static class FeedbackAudioBindings { internal static Cue TriggerCue(AnimatedObjectTrigger trigger) { if ((Object)(object)((Component)trigger).GetComponent() != (Object)null || (Object)(object)((Component)trigger).GetComponentInParent() != (Object)null) { return Cue.Door; } Transform val = ((Component)trigger).transform; while ((Object)(object)val != (Object)null) { string name = ((Object)val).name; if (name.Contains("NormalDoor") || name.Contains("OfficeDoor") || name.Contains("DoubleDoors") || name.Contains("YellowMineDoor")) { return Cue.Door; } if (name.Contains("Cupboard") || name.Contains("Dresser") || name.Contains("Cabinet") || name.Contains("StorageCloset")) { return Cue.Cabinet; } val = val.parent; } return Cue.Creature; } internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { cue = Cue.Creature; Component val = AudioRegistry.Owner(source); TVScript val2 = (TVScript)(object)((val is TVScript) ? val : null); if (val2 != null && (Object)(object)source == (Object)(object)val2.tvSFX) { cue = Cue.Television; return true; } VehicleController val3 = (VehicleController)(((object)((val is VehicleController) ? val : null)) ?? ((object)((Component)source).GetComponentInParent())); bool flag; if ((Object)(object)val3 != (Object)null) { if ((Object)(object)clip == (Object)(object)val3.carHoodOpenSFX || (Object)(object)clip == (Object)(object)val3.carHoodCloseSFX) { cue = Cue.CruiserHood; return true; } if ((Object)(object)clip == (Object)(object)val3.revEngineStart || (Object)(object)clip == (Object)(object)val3.engineRev) { cue = Cue.CruiserIgnition; return true; } if ((Object)(object)clip == (Object)(object)val3.engineStartSuccessful) { cue = Cue.CruiserStarted; return true; } if ((Object)(object)clip == (Object)(object)val3.insertKey || (Object)(object)clip == (Object)(object)val3.twistKey || (Object)(object)clip == (Object)(object)val3.removeKey) { cue = Cue.CruiserKey; return true; } string name = ((Object)clip).name; if ((name == "BackDoorOpen" || name == "BackDoorClose") ? true : false) { cue = Cue.CruiserRearDoor; return true; } switch (((Object)clip).name) { case "DoorOpen": case "DoorClose": case "CabinDoorSlide": flag = true; break; default: flag = false; break; } if (flag) { cue = Cue.CruiserDoor; return true; } if ((Object)(object)clip == (Object)(object)val3.turboBoostSFX || (Object)(object)clip == (Object)(object)val3.turboBoostSFX2) { cue = Cue.VehicleBoost; return true; } if ((Object)(object)clip == (Object)(object)val3.pourTurbo) { cue = Cue.VehicleRefuel; return true; } } if ((Object)(object)val3 != (Object)null && (Object)(object)source == (Object)(object)val3.hoodFireAudio) { cue = Cue.VehicleFire; return true; } Transform val4 = ((Component)source).transform; while ((Object)(object)val4 != (Object)null) { if (((Object)val4).name == "SpikeSlamBodyStickyPoint" || ((Object)val4).name == "SpikeSlamBodyStickyPoint(Clone)") { cue = Cue.BodyCrush; return true; } val4 = val4.parent; } AnimatedObjectTrigger val5 = (AnimatedObjectTrigger)(object)((val is AnimatedObjectTrigger) ? val : null); if (val5 != null) { switch (((Object)clip).name) { case "LockpickPlayer": case "LockPickerMount": case "LockPickerFinish": case "DoorUnlock": case "DoorUnlock2": case "MineDoorUnlock": flag = true; break; default: flag = false; break; } if (flag) { return false; } Cue cue2 = AcousticDetails.Resolve(((Object)clip).name); Cue cue3 = TriggerCue(val5); flag = cue3 == Cue.Door; if (flag) { bool flag2; switch (cue2) { case Cue.Door: case Cue.DoorOpen: case Cue.DoorClose: case Cue.Cabinet: case Cue.CabinetDoor: flag2 = true; break; default: flag2 = false; break; } flag = flag2; } if (flag) { flag = ((cue2 == Cue.Cabinet || cue2 == Cue.CabinetDoor) ? true : false); cue = (flag ? Cue.Door : cue2); return true; } if (cue3 == Cue.Cabinet && cue2 == Cue.Cabinet) { cue = cue3; return true; } } ShipTeleporter val6 = (ShipTeleporter)(((object)((val is ShipTeleporter) ? val : null)) ?? ((object)((Component)source).GetComponentInParent())); if ((Object)(object)val6 != (Object)null && ((Object)(object)source == (Object)(object)val6.buttonAudio || (Object)(object)source == (Object)(object)val6.shipTeleporterAudio)) { cue = (val6.isInverseTeleporter ? Cue.InverseTeleport : Cue.Teleport); return true; } GrabbableObject componentInParent = ((Component)source).GetComponentInParent(); flag = componentInParent is FlashlightItem && (((Object)componentInParent).name == "LaserPointer" || ((Object)componentInParent).name == "LaserPointer(Clone)"); if (flag) { string name = ((Object)clip).name; bool flag2 = ((name == "FlashlightClickMini" || name == "FlashlightClickMini2") ? true : false); flag = flag2; } if (flag) { cue = Cue.LaserSwitch; return true; } DeadBodyInfo val7 = (DeadBodyInfo)(object)((val is DeadBodyInfo) ? val : null); if (val7 != null && (Object)(object)source == (Object)(object)val7.playAudioOnDeath) { cue = ((((Object)clip).name == "CrushGore") ? Cue.BodyCrush : Cue.DeathSound); return true; } LockPicker val8 = (LockPicker)(object)((componentInParent is LockPicker) ? componentInParent : null); if (val8 != null && (Object)(object)source == (Object)(object)val8.lockPickerAudio && (Object)(object)clip == (Object)(object)source.clip && source.loop) { cue = Cue.LockPicking; return true; } return false; } } internal static class FeedbackFifth { [ThreadStatic] internal static bool LocalClearing; internal static bool RequiresExplicitPlay(AudioSource source) { Component val = AudioRegistry.Owner(source); VehicleController val2 = (VehicleController)(((object)((val is VehicleController) ? val : null)) ?? ((object)((Component)source).GetComponentInParent())); if ((Object)(object)val2 != (Object)null && ((Object)(object)source == (Object)(object)val2.miscAudio || (Object)(object)source == (Object)(object)val2.turbulenceAudio)) { return true; } CadaverBloomAI val3 = (CadaverBloomAI)(object)((val is CadaverBloomAI) ? val : null); if (val3 == null || !((Object)(object)source == (Object)(object)val3.burstSource)) { BushWolfEnemy val4 = (BushWolfEnemy)(object)((val is BushWolfEnemy) ? val : null); if (val4 != null) { return (Object)(object)source == (Object)(object)val4.tongueAudio; } return false; } return true; } internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { Component val = AudioRegistry.Owner(source); cue = Cue.Creature; string name = ((Object)clip).name; if ((name == "PoolFloatyHit1" || name == "PoolFloatyHit2") ? true : false) { cue = Cue.PoolFloaty; return true; } if (((Object)clip).name == "Cruiser_Turbulence" && val is VehicleController) { cue = Cue.VehicleRattle; return true; } BlobAI val2 = (BlobAI)(object)((val is BlobAI) ? val : null); if (val2 != null && (Object)(object)clip == (Object)(object)val2.hitSlimeSFX) { cue = Cue.SlimeHit; return true; } SpringManAI val3 = (SpringManAI)(object)((val is SpringManAI) ? val : null); if (val3 != null && (Object)(object)clip == (Object)(object)val3.enterCooldownSFX) { cue = Cue.SpringRetract; return true; } NutcrackerEnemyAI val4 = (NutcrackerEnemyAI)(object)((val is NutcrackerEnemyAI) ? val : null); if (val4 != null) { if ((Object)(object)clip == (Object)(object)val4.kickSFX) { cue = Cue.NutcrackerKick; return true; } if ((Object)(object)clip == (Object)(object)((EnemyAI)val4).dieSFX) { cue = Cue.NutcrackerFall; return true; } } if (val is VehicleController && ((Object)clip).name == "Collision_Minimal") { cue = Cue.VehicleImpact; return true; } CadaverGrowthAI val5 = (CadaverGrowthAI)(object)((val is CadaverGrowthAI) ? val : null); if (val5 != null && (Object)(object)source == (Object)(object)val5.destroyAudio) { cue = Cue.PlantClear; return true; } MoldSpreadManager val6 = (MoldSpreadManager)(object)((val is MoldSpreadManager) ? val : null); if (val6 != null && (Object)(object)source == (Object)(object)val6.destroyAudio) { cue = Cue.PlantClear; return true; } BushWolfEnemy val7 = (BushWolfEnemy)(object)((val is BushWolfEnemy) ? val : null); if ((Object)(object)val7 != (Object)null) { if ((Object)(object)clip == (Object)(object)((EnemyAI)val7).dieSFX) { cue = Cue.WolfDeath; } else if ((Object)(object)clip == (Object)(object)val7.hitBushWolfSFX) { cue = Cue.WolfHit; } else if ((Object)(object)clip == (Object)(object)val7.killSFX) { cue = Cue.WolfAttack; } else if ((Object)(object)clip == (Object)(object)val7.snarlSFX) { cue = Cue.WolfSnarl; } else if ((Object)(object)clip == (Object)(object)val7.shootTongueSFX || (Object)(object)clip == (Object)(object)val7.tongueShootSFX) { cue = Cue.WolfTongue; } else if ((Object)(object)source == (Object)(object)val7.tongueAudio) { cue = Cue.WolfPull; } else if ((Object)(object)source == (Object)(object)val7.callClose || (Object)(object)source == (Object)(object)val7.callFar) { cue = Cue.WolfCall; } else if ((Object)(object)source == (Object)(object)val7.growlAudio) { cue = Cue.WolfGrowl; } if (cue != Cue.Creature) { return true; } } Cue cue2 = AcousticDetails.Resolve(((Object)clip).name); if ((uint)(cue2 - 236) <= 7u) { cue = cue2; return true; } name = ((Object)clip).name; bool flag = ((name == "MetalHatchOpen" || name == "MetalHatchClose") ? true : false); bool flag2 = flag; flag = flag2; if (!flag) { bool flag3 = ((cue2 == Cue.Cabinet || cue2 == Cue.CabinetDoor) ? true : false); flag = flag3; } if (flag) { Transform val8 = ((Component)source).transform; while ((Object)(object)val8 != (Object)null) { if (flag2 && (((Object)val8).name == "StorageShelfContainer" || ((Object)val8).name == "StorageShelfContainer(Clone)")) { cue = Cue.CabinetDoor; return true; } if (!flag2 && (((Object)val8).name == "FancyDresserContainer" || ((Object)val8).name == "FancyDresserContainer(Clone)")) { cue = Cue.CabinetDoor; return true; } val8 = val8.parent; } } return false; } internal static int Group(AudioSource source, Cue cue) { if ((uint)(cue - 386) <= 1u) { return CompanyAudio.Group(source, cue); } if (cue == Cue.WolfCall) { Component? obj = AudioRegistry.Owner(source); BushWolfEnemy val = (BushWolfEnemy)(object)((obj is BushWolfEnemy) ? obj : null); if (val != null) { return ((Object)val).GetInstanceID(); } } if ((uint)(cue - 234) <= 1u) { Transform val2 = ((Component)source).transform; while ((Object)(object)val2 != (Object)null) { bool flag; switch (((Object)val2).name) { case "MeteorObject": case "MeteorObject(Clone)": case "MeteorLandingEffect": case "MeteorLandingEffect(Clone)": flag = true; break; default: flag = false; break; } if (flag) { return ((Object)val2).GetInstanceID(); } val2 = val2.parent; } } return AudioRegistry.Group(source); } internal static IEnumerable ClearingTranspiler(IEnumerable instructions) { foreach (CodeInstruction instruction in instructions) { object operand = instruction.operand; if (operand is MethodInfo method && ((method.DeclaringType == typeof(CadaverGrowthAI) && method.Name == "DestroyPlantAtPosition") || (method.DeclaringType == typeof(MoldSpreadManager) && method.Name == "DestroyMoldAtPosition"))) { instruction.opcode = OpCodes.Ldarg_0; instruction.operand = null; yield return instruction; yield return new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(FeedbackFifth), (method.DeclaringType == typeof(CadaverGrowthAI)) ? "DestroyPlant" : "DestroyMold", (Type[])null, (Type[])null)); } else { yield return instruction; } } } public static void DestroyPlant(CadaverGrowthAI growth, Vector3 position, bool playEffect, SprayPaintItem sprayer) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) bool localClearing = LocalClearing; try { PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; LocalClearing = (Object)(object)val != (Object)null && (Object)(object)((GrabbableObject)sprayer).playerHeldBy == (Object)(object)val; AudioCapture current = AudioCapture.Current; bool num = current?.BeginPlantTrace(growth, sprayer) ?? false; growth.DestroyPlantAtPosition(position, playEffect); if (num) { current?.WritePlantTrace("after", growth, sprayer); } } finally { LocalClearing = localClearing; } } public static void DestroyMold(MoldSpreadManager mold, Vector3 position, bool playEffect, SprayPaintItem sprayer) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) bool localClearing = LocalClearing; try { PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; LocalClearing = (Object)(object)val != (Object)null && (Object)(object)((GrabbableObject)sprayer).playerHeldBy == (Object)(object)val; mold.DestroyMoldAtPosition(position, playEffect); } finally { LocalClearing = localClearing; } } } internal static class FeedbackFourth { private static readonly Dictionary vehicleBorn = new Dictionary(); private static readonly List retired = new List(); [ThreadStatic] internal static bool LocalSplash; internal static void Register(Component component) { VehicleController val = (VehicleController)(object)((component is VehicleController) ? component : null); if (val != null && !vehicleBorn.ContainsKey(val) && vehicleBorn.Count < 128) { vehicleBorn[val] = Time.unscaledTime; } } internal static bool StartupVehicle(AudioSource source, AudioClip clip) { string name = ((Object)clip).name; if ((!(name == "Cruiser_HeadlightsOn") && !(name == "Cruiser_Turbulence")) || 1 == 0) { return false; } Component? obj = AudioRegistry.Owner(source); VehicleController val = (VehicleController)(((object)((obj is VehicleController) ? obj : null)) ?? ((object)((Component)source).GetComponentInParent())); if ((Object)(object)val != (Object)null && ((Object)(object)clip == (Object)(object)val.headlightsToggleSFX || (Object)(object)source == (Object)(object)val.turbulenceAudio) && vehicleBorn.TryGetValue(val, out var value)) { return Time.unscaledTime - value < 5f; } return false; } internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { cue = Cue.Creature; Component? obj = AudioRegistry.Owner(source); CadaverBloomAI val = (CadaverBloomAI)(object)((obj is CadaverBloomAI) ? obj : null); if ((Object)(object)val != (Object)null && (Object)(object)source == (Object)(object)((EnemyAI)val).creatureSFX && ((Object)clip).name == "WalkQuickly") { cue = Cue.Running; return true; } if (((Object)clip).name == "Boombox6QuestionMark") { Transform val2 = ((Component)source).transform; while ((Object)(object)val2 != (Object)null) { if (((Object)val2).name == "DiscoBallContainer" || ((Object)val2).name == "DiscoBallContainer(Clone)") { cue = Cue.DiscoMusic; return true; } val2 = val2.parent; } cue = Cue.ItemMusic; return true; } return false; } internal static bool DeviceDirection(Cue cue) { switch (cue) { case Cue.Cabinet: case Cue.BreakerDoor: case Cue.BreakerSwitch: case Cue.CarHood: case Cue.CabinetDoor: case Cue.CruiserHood: case Cue.CruiserDoor: case Cue.CruiserRearDoor: return true; default: return false; } } internal static void BeforeSplash(bool syncToServer, ref bool __state) { __state = LocalSplash; LocalSplash = syncToServer; } internal static Exception? AfterSplash(Exception? __exception, bool __state) { LocalSplash = __state; return __exception; } internal static void Prune() { retired.Clear(); foreach (KeyValuePair item in vehicleBorn) { if ((Object)(object)item.Key == (Object)null) { retired.Add(item.Key); } } foreach (VehicleController item2 in retired) { vehicleBorn.Remove(item2); } retired.Clear(); } internal static void Clear() { vehicleBorn.Clear(); retired.Clear(); LocalSplash = false; } } internal static class FeedbackRound3 { [ThreadStatic] internal static bool DrowningPlayback; internal static bool Resolve(AudioSource source, AudioClip clip, out Cue cue) { cue = Cue.Creature; Cue cue2 = AcousticDetails.Resolve(((Object)clip).name); if ((cue2 == Cue.ZedDog || (uint)(cue2 - 217) <= 2u) ? true : false) { cue = cue2; return true; } Component? obj = AudioRegistry.Owner(source); MicrowaveItem val = (MicrowaveItem)(object)((obj is MicrowaveItem) ? obj : null); if (val != null && ((Object)(object)clip == (Object)(object)val.microwaveOpen || (Object)(object)clip == (Object)(object)val.microwaveClose)) { cue = Cue.MicrowaveDoor; return true; } EnemyAI componentInParent = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && ((Object)(object)source == (Object)(object)componentInParent.creatureVoice || (Object)(object)source == (Object)(object)componentInParent.creatureSFX)) { if ((Object)(object)clip == (Object)(object)componentInParent.dieSFX) { cue = Cue.CreatureDeath; return true; } BaboonBirdAI val2 = (BaboonBirdAI)(object)((componentInParent is BaboonBirdAI) ? componentInParent : null); if (val2 != null && (Object)(object)((EnemyAI)val2).enemyType != (Object)null && ((EnemyAI)val2).enemyType.audioClips != null) { AudioClip[] audioClips = ((EnemyAI)val2).enemyType.audioClips; if ((audioClips.Length > 4 && (Object)(object)clip == (Object)(object)audioClips[4]) || (audioClips.Length > 5 && (Object)(object)clip == (Object)(object)audioClips[5])) { cue = Cue.CreatureAttack; return true; } } MouthDogAI val3 = (MouthDogAI)(object)((componentInParent is MouthDogAI) ? componentInParent : null); if (val3 == null || !((Object)(object)clip == (Object)(object)val3.killPlayerSFX)) { JesterAI val4 = (JesterAI)(object)((componentInParent is JesterAI) ? componentInParent : null); if (val4 == null || !((Object)(object)clip == (Object)(object)val4.killPlayerSFX)) { HoarderBugAI val5 = (HoarderBugAI)(object)((componentInParent is HoarderBugAI) ? componentInParent : null); if (val5 == null || !((Object)(object)clip == (Object)(object)val5.hitPlayerSFX)) { goto IL_016f; } } } cue = Cue.CreatureAttack; return true; } goto IL_016f; IL_016f: GiantKiwiAI val6 = (GiantKiwiAI)(object)((componentInParent is GiantKiwiAI) ? componentInParent : null); if (val6 != null && val6.attackSFX != null) { AudioClip[] attackSFX = val6.attackSFX; foreach (AudioClip val7 in attackSFX) { if ((Object)(object)clip == (Object)(object)val7) { cue = Cue.CreatureAttack; return true; } } } Component? obj2 = AudioRegistry.Owner(source); VehicleController val8 = (VehicleController)(((object)((obj2 is VehicleController) ? obj2 : null)) ?? ((object)((Component)source).GetComponentInParent())); if ((Object)(object)val8 != (Object)null && (Object)(object)clip == (Object)(object)val8.jumpInCarSFX) { cue = Cue.VehicleJump; return true; } TetraChemicalItem componentInParent2 = ((Component)source).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null) { if ((Object)(object)clip == (Object)(object)componentInParent2.removeCanSFX) { cue = Cue.TzpRelease; return true; } if ((Object)(object)clip == (Object)(object)componentInParent2.outOfGasSFX) { cue = Cue.TzpEmpty; return true; } } StartOfRound instance = StartOfRound.Instance; if ((Object)(object)instance != (Object)null) { if ((Object)(object)source == (Object)(object)instance.startGameWhir || (Object)(object)source == (Object)(object)instance.shipLandingAudio) { cue = Cue.ShipLanding; return true; } if ((Object)(object)clip == (Object)(object)instance.shipDepartSFX) { cue = Cue.ShipTravel; return true; } if ((Object)(object)clip == (Object)(object)instance.shipArriveSFX) { cue = Cue.ShipArrival; return true; } PlayerControllerB val9 = GameNetworkManager.Instance?.localPlayerController; if (DrowningPlayback && (Object)(object)val9 != (Object)null && (Object)(object)HUDManager.Instance != (Object)null && (Object)(object)source == (Object)(object)HUDManager.Instance.UIAudio && (Object)(object)clip == (Object)(object)instance.HUDSystemAlertSFX) { cue = Cue.Drowning; return true; } } return false; } } internal static class InteractionAudio { private static readonly Dictionary drops = new Dictionary(); private static readonly Dictionary dropTimes = new Dictionary(); private static readonly List retired = new List(); private static readonly HashSet localMaskClips = new HashSet(); internal static bool LocalMaskClip(AudioClip clip) { return localMaskClips.Contains(clip); } internal static void BeforeDiscard(GrabbableObject __instance) { if ((Object)(object)__instance.playerHeldBy != (Object)null) { Remember(__instance, (Object)(object)__instance.playerHeldBy == (Object)(object)GameNetworkManager.Instance?.localPlayerController); } } internal static void EnemyDiscard(GrabbableObject __instance) { Remember(__instance, local: false); } internal static void PickedUp(GrabbableObject __instance) { drops.Remove(__instance); dropTimes.Remove(__instance); } internal static void PlayerDrop(PlayerControllerB __instance, GrabbableObject dropObject) { Remember(dropObject, (Object)(object)__instance == (Object)(object)GameNetworkManager.Instance?.localPlayerController); } internal static void ForcedDrop(PlayerControllerB __instance, GrabbableObject dropItem, bool itemsFall) { if (itemsFall) { Remember(dropItem, (Object)(object)__instance == (Object)(object)GameNetworkManager.Instance?.localPlayerController); } } internal static void PlayerPlace(PlayerControllerB __instance, GrabbableObject placeObject) { Remember(placeObject, (Object)(object)__instance == (Object)(object)GameNetworkManager.Instance?.localPlayerController); } private static void Remember(GrabbableObject item, bool local) { if (!drops.ContainsKey(item) && drops.Count >= 1024) { Prune(); if (!drops.ContainsKey(item) && drops.Count >= 1024) { return; } } drops[item] = local; dropTimes[item] = Time.unscaledTime; } internal static bool RecentDrop(GrabbableObject? item) { if ((Object)(object)item != (Object)null && dropTimes.TryGetValue(item, out var value)) { return Time.unscaledTime - value <= 30f; } return false; } internal static bool LocalDrop(GrabbableObject? item) { bool value = default(bool); return (Object)(object)item != (Object)null && drops.TryGetValue(item, out value) && value; } internal static void Register(Component component) { HauntedMaskItem val = (HauntedMaskItem)(object)((component is HauntedMaskItem) ? component : null); if (val != null && (Object)(object)val.maskAttachAudioLocal != (Object)null) { localMaskClips.Add(val.maskAttachAudioLocal); } GrabbableObject val2 = (GrabbableObject)(object)((component is GrabbableObject) ? component : null); if (val2 != null && (Object)(object)val2.itemProperties != (Object)null) { AudioRegistry.Clips(val2.itemProperties.dropSFX, Cue.ItemDrop); if (val2 is HauntedMaskItem && val2.itemProperties.clinkAudios != null) { AudioClip[] clinkAudios = val2.itemProperties.clinkAudios; foreach (AudioClip val3 in clinkAudios) { if (!((Object)(object)val3 == (Object)null)) { bool flag; switch (((Object)val3).name) { case "MaskLaugh1": case "MaskLaugh2": case "MaskLaugh3": flag = true; break; default: flag = false; break; } Cue cue = (flag ? Cue.MaskLaugh : Cue.ItemNoise); AudioRegistry.Clips(val3, cue); } } } else { AudioRegistry.Clips(val2.itemProperties.clinkAudios, Cue.ItemNoise); } AudioRegistry.Clips(val2.itemProperties.throwSFX, Cue.ItemNoise); } ItemDropship val4 = (ItemDropship)(object)((component is ItemDropship) ? component : null); if (val4 == null) { return; } AudioSource[] componentsInChildren = ((Component)val4).GetComponentsInChildren(true); foreach (AudioSource val5 in componentsInChildren) { if (!((Object)(object)val5.clip == (Object)null)) { Cue cue2; switch (((Object)val5.clip).name) { case "IcecreamTruckV2": case "IcecreamTruckFar": cue2 = Cue.SupplyLanding; break; case "IcecreamTruckV2VehicleDeliveryVer": case "IcecreamTruckV2VehicleDeliveryVerFar": cue2 = Cue.VehicleDelivery; break; default: continue; } AudioRegistry.Source(val5, cue2, (Component)(object)val4, merge: true); AudioRegistry.Clips(val5.clip, cue2); } } } internal static void Prune() { retired.Clear(); foreach (KeyValuePair drop in drops) { if ((Object)(object)drop.Key == (Object)null) { retired.Add(drop.Key); } } foreach (GrabbableObject item in retired) { drops.Remove(item); dropTimes.Remove(item); } retired.Clear(); } internal static void Clear() { drops.Clear(); dropTimes.Clear(); retired.Clear(); localMaskClips.Clear(); } } internal static class NativeAudioDiscovery { private static readonly Queue pending = new Queue(); private static readonly List roots = new List(); private static readonly List sources = new List(); private static readonly HashSet pointSources = new HashSet(); private static bool attached; internal static void Refresh() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) pending.Clear(); for (int i = 0; i < SceneManager.sceneCount; i++) { Enqueue(SceneManager.GetSceneAt(i)); } } private static void Loaded(Scene scene, LoadSceneMode mode) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) Enqueue(scene); } private static void Enqueue(Scene scene) { if (!((Scene)(ref scene)).isLoaded) { return; } roots.Clear(); ((Scene)(ref scene)).GetRootGameObjects(roots); foreach (GameObject root in roots) { pending.Enqueue(root.transform); } roots.Clear(); } internal static void Tick() { if (!attached) { attached = true; SceneManager.sceneLoaded += Loaded; Refresh(); } for (int i = 0; i < 128; i++) { if (pending.Count <= 0) { break; } Transform val = pending.Dequeue(); if ((Object)(object)val == (Object)null) { continue; } ((Component)val).GetComponents(sources); foreach (AudioSource source in sources) { if (!((Object)(object)source.clip == (Object)null) && !((Object)(object)AudioRegistry.Owner(source) != (Object)null) && (FeedbackFourth.Resolve(source, source.clip, out var cue) || AuditAudioBindings.NativeClip(source.clip, out cue) || SupplementalAudio.Clip(source.clip, out cue))) { AudioRegistry.Source(source, cue, (Component)(object)val, merge: false); AudioRegistry.Clips(source.clip, cue); } } sources.Clear(); for (int j = 0; j < val.childCount; j++) { pending.Enqueue(val.GetChild(j)); } } AudioRegistry.Prime(); } internal static void RequestPoint(AudioClip clip, Vector3 position) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)clip == (Object)null) { return; } try { pointSources.RemoveWhere((AudioSource s) => (Object)(object)s == (Object)null); AudioSource[] array = Object.FindObjectsOfType(); foreach (AudioSource val in array) { if (((Object)val).name == "One shot audio" && (Object)(object)val.clip == (Object)(object)clip && val.isPlaying) { Vector3 val2 = ((Component)val).transform.position - position; if (((Vector3)(ref val2)).sqrMagnitude < 0.0001f && pointSources.Add(val)) { AudioCapture.RecordPlay(val); } } } } catch (Exception ex) { Debug.LogWarning((object)("Sensus point sound observation: " + ex.Message)); } } internal static void Clear() { if (attached) { SceneManager.sceneLoaded -= Loaded; } attached = false; pending.Clear(); roots.Clear(); sources.Clear(); pointSources.Clear(); } } public static class PlaybackHooks { internal static readonly string[] Scope = new string[108] { "HighAndLowAltitudeAudio", "AudioReverbTrigger", "GlobalEffects", "PhysicsKnockbackOnHit", "TimeOfDay", "IngamePlayerSettings", "ShipTeleporter", "MeteorShowers", "AnimatedObjectFloatSetter", "RadarBoosterItem", "TVScript", "MicrowaveItem", "CozyLights", "GiftBoxItem", "BeltBagItem", "EventWhenDroppedItem", "DeadBodyInfo", "HUDManager", "ShipBuildModeManager", "PlayAudioOnParticleDeath", "MoldSpreadManager", "MoveToExitSpecialAnimation", "RandomPeriodicAudioPlayer", "BaboonHawkAudioEvents", "LoopShapeKey", "UnlockableSuit", "MouthDogAI", "SandWormAI", "JesterAI", "NutcrackerEnemyAI", "ShotgunItem", "EnemyAI", "PlayAudioAnimationEvent", "AnimatedObjectTrigger", "CaveDwellerAI", "DressGirlAI", "ClaySurgeonAI", "SpringManAI", "FlowermanAI", "CrawlerAI", "CentipedeAI", "SandSpiderAI", "HoarderBugAI", "BlobAI", "PufferAI", "ButlerEnemyAI", "ButlerBeesEnemyAI", "MaskedPlayerEnemy", "StingrayAI", "CadaverGrowthAI", "CadaverBloomAI", "ForestGiantAI", "BaboonBirdAI", "RedLocustBees", "RadMechAI", "BushWolfEnemy", "PumaAI", "GiantKiwiAI", "FlowerSnakeEnemy", "DoublewingAI", "DocileLocustBeesAI", "DepositItemsDesk", "SnowmanSimpleAI", "KiwiBabyItem", "HauntedMaskItem", "SandSpiderWebTrap", "PlayerControllerB", "RoundManager", "GrabbableObject", "Turret", "Landmine", "SteamValveHazard", "SoundManager", "EntranceTeleport", "ItemDropship", "VehicleController", "NoisemakerProp", "BoomboxItem", "WhoopieCushionItem", "WalkieTalkie", "StormyWeather", "BridgeTrigger", "ShipAlarmCord", "JetpackItem", "StunGrenadeItem", "ExtensionLadderItem", "Shovel", "KnifeItem", "SprayPaintItem", "FlashlightItem", "DoorLock", "LockPicker", "EnemyVent", "ItemCharger", "MineshaftElevatorController", "LungProp", "RemoteProp", "ClockProp", "AnimatedItem", "BreakerBox", "Terminal", "SpikeRoofTrap", "TetraChemicalItem", "PatcherTool", "StartOfRound", "StartMatchLever", "RandomFlyParticle", "ElevatorAnimationEvents" }; private static readonly Dictionary Replacements = BuildReplacements(); private static readonly HashSet registeredAtPlay = new HashSet(); private static bool registrationError; private static Dictionary BuildReplacements() { Dictionary pairs = new Dictionary(); Add("PlayClipAtPoint", new Type[3] { typeof(AudioClip), typeof(Vector3), typeof(float) }, "AtPoint"); Add("PlayClipAtPoint", new Type[2] { typeof(AudioClip), typeof(Vector3) }, "AtPointDefault"); Add("Play", Type.EmptyTypes, "Play"); Add("PlayOneShot", new Type[1] { typeof(AudioClip) }, "OneShot"); Add("PlayOneShot", new Type[2] { typeof(AudioClip), typeof(float) }, "OneShotScaled"); Add("Stop", Type.EmptyTypes, "Stop"); Add("Pause", Type.EmptyTypes, "Pause"); Add("UnPause", Type.EmptyTypes, "UnPause"); return pairs; void Add(string name, Type[] arguments, string replacement) { pairs.Add(AccessTools.Method(typeof(AudioSource), name, arguments, (Type[])null), AccessTools.Method(typeof(PlaybackHooks), replacement, (Type[])null, (Type[])null)); } } internal static int Install(Harmony harmony, ManualLogSource log) { //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Expected O, but got Unknown //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Expected O, but got Unknown //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Expected O, but got Unknown //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Expected O, but got Unknown //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Expected O, but got Unknown //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Expected O, but got Unknown //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_029d: Expected O, but got Unknown //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Expected O, but got Unknown //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0499: Expected O, but got Unknown //IL_0499: Expected O, but got Unknown //IL_051f: Unknown result type (might be due to invalid IL or missing references) //IL_052b: Expected O, but got Unknown //IL_05b9: Unknown result type (might be due to invalid IL or missing references) //IL_05c5: Expected O, but got Unknown //IL_058a: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Expected O, but got Unknown List list = new List(); Type[] types = typeof(EnemyAI).Assembly.GetTypes(); foreach (Type type in types) { if (Scope.Contains(type.Name) || (type.DeclaringType != null && Scope.Contains(type.DeclaringType.Name))) { list.AddRange(from m in type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) where !m.IsAbstract && !m.ContainsGenericParameters && m.GetMethodBody() != null select m); } } harmony.Patch((MethodBase)AccessTools.Method(typeof(GrabbableObject), "DiscardItem", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "BeforeDiscard", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(GrabbableObject), "DiscardItemFromEnemy", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "EnemyDiscard", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(PlayerControllerB), "SetObjectAsNoLongerHeld", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "PlayerDrop", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(PlayerControllerB), "PlaceGrabbableObject", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "PlayerPlace", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(GrabbableObject), "GrabItem", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "PickedUp", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(GrabbableObject), "GrabItemFromEnemy", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "PickedUp", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(PlayerControllerB), "DropHeldItem", (Type[])null, (Type[])null), new HarmonyMethod(typeof(InteractionAudio), "ForcedDrop", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(RoundManager), "FinishGeneratingLevel", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(NativeAudioDiscovery), "Refresh", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(TimeOfDay), "WaterSplashEffect", (Type[])null, (Type[])null), new HarmonyMethod(typeof(FeedbackFourth), "BeforeSplash", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(FeedbackFourth), "AfterSplash", (Type[])null), (HarmonyMethod)null); int num = 0; string[] array = new string[3] { "LateUpdate", "KillCadaverPlantRpc", "KillWeedRpc" }; foreach (string text in array) { harmony.Patch((MethodBase)AccessTools.Method(typeof(SprayPaintItem), text, (Type[])null, (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(FeedbackFifth), "ClearingTranspiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null); } foreach (MethodInfo method in list) { bool flag = !method.IsStatic && typeof(Component).IsAssignableFrom(method.DeclaringType); if (flag) { bool flag2 = method.GetParameters().Length == 0; if (flag2) { bool flag3; switch (method.Name) { case "Start": case "OnEnable": case "Awake": flag3 = true; break; default: flag3 = false; break; } flag2 = flag3; } bool flag4 = flag2; if (!flag4) { bool flag3 = method.DeclaringType == typeof(ItemCharger); if (flag3) { string name = method.Name; bool flag5 = ((name == "ChargeItem" || name == "PlayChargeItemEffectClientRpc") ? true : false); flag3 = flag5; } flag4 = flag3; } flag = flag4 || (method.DeclaringType == typeof(ElevatorAnimationEvents) && method.Name.StartsWith("PlayAudio")); } if (flag) { harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(PlaybackHooks), "RegisterAudio", (Type[])null), new HarmonyMethod(typeof(PlaybackHooks), "RegisterAudio", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } byte[] array2 = method.GetMethodBody()?.GetILAsByteArray(); if (array2 == null) { continue; } MethodInfo[] source = (from token in AudioCallTokens.Read(array2) select method.Module.ResolveMethod(token)).OfType().ToArray(); if (source.Any((MethodInfo m) => m.DeclaringType == typeof(Object) && m.Name == "Instantiate" && m.ReturnType == typeof(GameObject))) { harmony.Patch((MethodBase)method, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(PlaybackHooks), "SpawnTranspile", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null); } if (source.Any(Replacements.ContainsKey)) { if (!method.IsStatic && typeof(Component).IsAssignableFrom(method.DeclaringType)) { harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(PlaybackHooks), "RegisterAtPlay", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } harmony.Patch((MethodBase)method, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(PlaybackHooks), "Transpile", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null); num++; } } if (num == 0) { throw new InvalidOperationException("No supported playback call sites found."); } log.LogInfo((object)$"Installed playback observers on {num} managed methods, including coroutine MoveNext bodies. No native AudioSource method was patched."); return num; } private static void RegisterAtPlay(Component __instance) { if (registeredAtPlay.Count < 8192 && registeredAtPlay.Add(__instance)) { RegisterAudio(__instance); } } internal static void PruneRegistrations() { registeredAtPlay.RemoveWhere((Component c) => (Object)(object)c == (Object)null); } internal static void ClearRegistrations() { registeredAtPlay.Clear(); } private static void RegisterAudio(Component __instance) { try { FeedbackFourth.Register(__instance); CreatureBindings.Register(__instance); AnimationAudioBindings.Register(__instance); InteractionAudio.Register(__instance); SupplementalAudio.Register(__instance); AuditAudioBindings.Register(__instance); AudioRegistry.Prime(); } catch (Exception ex) { if (!registrationError) { registrationError = true; Debug.LogWarning((object)("Sensus audio registration failed: " + ex.Message)); } } } private static IEnumerable Transpile(IEnumerable instructions, MethodBase __originalMethod) { foreach (CodeInstruction instruction in instructions) { if ((instruction.opcode == OpCodes.Call || instruction.opcode == OpCodes.Callvirt) && instruction.operand is MethodInfo key && Replacements.TryGetValue(key, out MethodInfo value)) { if (__originalMethod.DeclaringType == typeof(PlayerControllerB) && __originalMethod.Name == "SetFaceUnderwaterFilters" && value.Name == "OneShot") { value = AccessTools.Method(typeof(PlaybackHooks), "UnderwaterOneShot", (Type[])null, (Type[])null); } if (__originalMethod.DeclaringType == typeof(MaskedPlayerEnemy) && __originalMethod.Name == "PlayFootstepSound" && value.Name == "OneShotScaled") { value = AccessTools.Method(typeof(PlaybackHooks), "MaskedFootstep", (Type[])null, (Type[])null); } instruction.opcode = OpCodes.Call; instruction.operand = value; } yield return instruction; } } private static IEnumerable SpawnTranspile(IEnumerable instructions) { foreach (CodeInstruction instruction in instructions) { yield return instruction; if (instruction.opcode == OpCodes.Call && instruction.operand is MethodInfo methodInfo && methodInfo.DeclaringType == typeof(Object) && methodInfo.Name == "Instantiate" && methodInfo.ReturnType == typeof(GameObject)) { yield return new CodeInstruction(OpCodes.Dup, (object)null); yield return new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(SupplementalAudio), "Spawned", (Type[])null, (Type[])null)); } } } public static void AtPoint(AudioClip clip, Vector3 position, float volume) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) AudioSource.PlayClipAtPoint(clip, position, volume); NativeAudioDiscovery.RequestPoint(clip, position); } public static void AtPointDefault(AudioClip clip, Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) AudioSource.PlayClipAtPoint(clip, position); NativeAudioDiscovery.RequestPoint(clip, position); } public static void Play(AudioSource source) { source.Play(); AudioCapture.RecordPlay(source, explicitPlay: true); } public static void OneShot(AudioSource source, AudioClip clip) { source.PlayOneShot(clip); AudioCapture.Record(source, clip, 1f, oneShot: true); } public static void MaskedFootstep(AudioSource source, AudioClip clip, float scale) { source.PlayOneShot(clip, scale); AudioCapture.Record(source, clip, scale, oneShot: true, humanFootstep: true); } public static void OneShotScaled(AudioSource source, AudioClip clip, float scale) { source.PlayOneShot(clip, scale); AudioCapture.Record(source, clip, scale, oneShot: true); } public static void UnderwaterOneShot(AudioSource source, AudioClip clip) { source.PlayOneShot(clip); bool drowningPlayback = FeedbackRound3.DrowningPlayback; try { FeedbackRound3.DrowningPlayback = true; AudioCapture.Record(source, clip, 1f, oneShot: true); } finally { FeedbackRound3.DrowningPlayback = drowningPlayback; } } public static void Stop(AudioSource source) { source.Stop(); AudioCapture.Change(source, 0); } public static void Pause(AudioSource source) { source.Pause(); AudioCapture.Change(source, 1); } public static void UnPause(AudioSource source) { source.UnPause(); AudioCapture.Change(source, 2); } } internal static class RuntimeBaseline { internal const string GameHash = "5F7DB5538B78DC408845A3002907619785AC9F9C6B6059D13DC9A602D9B65731"; internal static bool Matches() { using FileStream inputStream = File.OpenRead(typeof(EnemyAI).Assembly.Location); using SHA256 sHA = SHA256.Create(); return BitConverter.ToString(sHA.ComputeHash(inputStream)).Replace("-", "") == "5F7DB5538B78DC408845A3002907619785AC9F9C6B6059D13DC9A602D9B65731"; } } internal static class SpokenSource { internal static int Rank(AudioSource source, AudioClip clip, bool oneShot) { if (!SpokenTracks.MatchesLength(((Object)clip).name, clip.length)) { return 0; } StartOfRound instance = StartOfRound.Instance; if (oneShot && (Object)(object)instance != (Object)null && (Object)(object)source == (Object)(object)instance.speakerAudioSource && ((Object)(object)clip == (Object)(object)instance.shipIntroSpeechSFX || (Object)(object)clip == (Object)(object)instance.zeroDaysLeftAlertSFX || (Object)(object)clip == (Object)(object)instance.firedVoiceSFX)) { return 3; } Component val = AudioRegistry.Owner(source); if (oneShot) { DepositItemsDesk val2 = (DepositItemsDesk)(object)((val is DepositItemsDesk) ? val : null); if (val2 != null && (Object)(object)source == (Object)(object)val2.speakerAudio) { return 2; } } if (!oneShot) { TVScript val3 = (TVScript)(object)((val is TVScript) ? val : null); if (val3 != null && (Object)(object)source == (Object)(object)val3.tvSFX && val3.tvOn) { return 1; } } return 0; } } internal static class SupplementalAudio { private static readonly HashSet scanned = new HashSet(); internal static void Prune() { scanned.RemoveWhere((Component c) => (Object)(object)c == (Object)null); } internal static void Clear() { scanned.Clear(); } internal static bool Clip(AudioClip clip, out Cue cue) { cue = AcousticDetails.Resolve(((Object)clip).name); if (cue != Cue.Creature) { return true; } Cue cue2; switch (((Object)clip).name) { case "CentipedeWalk": cue2 = Cue.Crawling; break; case "FliesBuzzing": case "FliesBuzzingAndMaggots": cue2 = Cue.Flies; break; case "LungMachine": cue2 = Cue.PowerHum; break; case "ChatteringTeeth": cue2 = Cue.Teeth; break; case "HairdryerFar": case "Hairdryer1": cue2 = Cue.Hairdryer; break; case "PhoneScream": cue2 = Cue.Phone; break; case "RobotToyCheer": case "robotTune": cue2 = Cue.ToyRobot; break; case "ClockTock": case "ClockTick": cue2 = Cue.Clock; break; case "ClimbLadderLoosenGrip2": case "ClimbLadderLoosenGrip3": case "ClimbLadderStep2": case "ClimbLadderStep3": case "ClimbLadderStep4": case "ClimbLadderLoosenGrip": cue2 = Cue.LadderClimb; break; case "SpikeRoofSlam": cue2 = Cue.SpikeSlam; break; case "SpikeRoofTrapCreak": cue2 = Cue.SpikeCreak; break; case "MineDetonate": case "Cruiser_Explode": cue2 = Cue.Explosion; break; case "VentCrawl1": case "VentOpen1": case "NutcrackerVentCrawl": cue2 = Cue.Vent; break; default: cue2 = Cue.Creature; break; } cue = cue2; return cue != Cue.Creature; } private static void Clips(AudioClip[]? clips) { if (clips == null) { return; } foreach (AudioClip val in clips) { if ((Object)(object)val != (Object)null && Clip(val, out var cue)) { AudioRegistry.Clips(val, cue); } } } private static void Source(AudioSource? source, Component owner) { if ((Object)(object)source == (Object)null || (Object)(object)source.clip == (Object)null || (!FeedbackFourth.Resolve(source, source.clip, out var cue) && !Clip(source.clip, out cue) && !AuditAudioBindings.NativeClip(source.clip, out cue))) { return; } if (cue == Cue.Flies) { AudioCapture.RecordPlay(source); return; } AudioRegistry.Source(source, cue, owner, merge: true); AudioRegistry.Clips(source.clip, cue); if (source.isPlaying) { AudioCapture.RecordPlay(source); } } internal static void Register(Component component) { PlayAudioAnimationEvent val = (PlayAudioAnimationEvent)(object)((component is PlayAudioAnimationEvent) ? component : null); if (val != null) { Clips(val.randomClips); Clips(val.randomClips2); AudioClip[] array = (AudioClip[])(object)new AudioClip[3] { val.audioClip, val.audioClip2, val.audioClip3 }; foreach (AudioClip val2 in array) { if ((Object)(object)val2 != (Object)null && (Clip(val2, out var cue) || AuditAudioBindings.NativeClip(val2, out cue))) { AudioRegistry.Clips(val2, cue); } } ItemDropship componentInParent = ((Component)val).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { AudioRegistry.Source(val.audioToPlay, Cue.ShipMechanism, (Component)(object)componentInParent, merge: true); AudioRegistry.Source(val.audioToPlayB, Cue.ShipMechanism, (Component)(object)componentInParent, merge: true); } StartMatchLever componentInParent2 = ((Component)val).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null) { AudioRegistry.Source(val.audioToPlay, Cue.Lever, (Component)(object)componentInParent2, merge: true); AudioRegistry.Source(val.audioToPlayB, Cue.Lever, (Component)(object)componentInParent2, merge: true); } SpikeRoofTrap componentInParent3 = ((Component)val).GetComponentInParent(); if ((Object)(object)componentInParent3 != (Object)null) { AudioRegistry.Source(val.audioToPlay, Cue.SpikeSlam, (Component)(object)componentInParent3, merge: true); AudioRegistry.Source(val.audioToPlayB, Cue.SpikeSlam, (Component)(object)componentInParent3, merge: true); } } AnimatedObjectTrigger val3 = (AnimatedObjectTrigger)(object)((component is AnimatedObjectTrigger) ? component : null); if (val3 != null) { Cue cue2 = Cue.Mechanism; Transform val4 = ((Component)val3).transform; while ((Object)(object)val4 != (Object)null) { string name = ((Object)val4).name; if (name.Contains("Drawers")) { cue2 = Cue.Cabinet; break; } if (name.Contains("Cabinet") || name.Contains("Locker") || name.Contains("StorageCloset") || name.Contains("StorageShelf") || name.Contains("Fridge")) { cue2 = Cue.CabinetDoor; break; } if ((Object)(object)((Component)val4).GetComponent() != (Object)null) { cue2 = Cue.Lever; break; } val4 = val4.parent; } if (val3.doorType >= 0) { cue2 = Cue.Door; } AudioRegistry.Source(val3.thisAudioSource, cue2, (Component)(object)val3, merge: true); AudioRegistry.Clips(val3.boolTrueAudios, (val3.doorType >= 0) ? Cue.DoorOpen : cue2); AudioRegistry.Clips(val3.boolFalseAudios, (val3.doorType >= 0) ? Cue.DoorClose : cue2); AudioRegistry.Clips(val3.secondaryAudios, cue2); AudioRegistry.Clips(val3.playWhileTrue, cue2); } if ((component is GrabbableObject || component is SpikeRoofTrap) && scanned.Count < 2048 && scanned.Add(component)) { AudioSource[] componentsInChildren = component.GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { Source(componentsInChildren[i], component); } } } public static void Spawned(GameObject instance) { try { AudioSource[] componentsInChildren = instance.GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { Source(componentsInChildren[i], (Component)(object)instance.transform); } AudioRegistry.Prime(); } catch (Exception ex) { Debug.LogWarning((object)("Sensus spawned audio registration: " + ex.Message)); } } } internal sealed class VoiceActivity { private readonly Dictionary names = new Dictionary(); private readonly float[] replaySamples = new float[128]; private readonly Dictionary replayEvidence = new Dictionary(); private int receiverCursor; private string Speaker(PlayerControllerB player) { int instanceID = ((Object)player).GetInstanceID(); string text = player.playerUsername ?? ""; if (names.TryGetValue(instanceID, out (string, string) value) && value.Item1 == text) { return value.Item2; } if (names.Count >= 128) { names.Clear(); } string text2 = SpeechText.SafeName(text); names[instanceID] = (text, text2); return text2; } internal void Tick(AudioCapture capture) { StartOfRound instance = StartOfRound.Instance; PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if ((Object)(object)instance == (Object)null || (Object)(object)val == (Object)null || instance.allPlayerScripts == null) { return; } int num = Math.Min(64, instance.allPlayerScripts.Length); float num4 = default(float); for (int i = 0; i < num; i++) { PlayerControllerB val2 = instance.allPlayerScripts[i]; if ((Object)(object)val2 == (Object)null || (Object)(object)val2 == (Object)(object)val || !val2.isPlayerControlled || val2.isPlayerDead) { continue; } VoicePlayerState voicePlayerState = val2.voicePlayerState; AudioSource currentVoiceChatAudioSource = val2.currentVoiceChatAudioSource; if (voicePlayerState == null || (Object)(object)currentVoiceChatAudioSource == (Object)null || !SpeechText.Active((Object)(object)val2 == (Object)(object)val, val2.isPlayerDead, voicePlayerState.IsSpeaking, voicePlayerState.IsLocallyMuted, voicePlayerState.Volume, voicePlayerState.Amplitude) || ((Object)(object)SoundManager.Instance != (Object)null && val2.playerClientId < (ulong)SoundManager.Instance.playerVoiceVolumes.Length && SoundManager.Instance.playerVoiceVolumes[(uint)val2.playerClientId] <= -60f)) { continue; } string speaker = Speaker(val2); float num2 = voicePlayerState.Volume; SoundManager instance2 = SoundManager.Instance; int num3 = (int)val2.playerClientId; if ((Object)(object)instance2 != (Object)null && instance2.volumeFilterNames != null && num3 >= 0 && num3 < instance2.volumeFilterNames.Length && (Object)(object)instance2.diageticMixer != (Object)null && instance2.diageticMixer.GetFloat(instance2.volumeFilterNames[num3], ref num4)) { num2 *= Mathf.Pow(10f, num4 / 20f); } bool flag = val2.speakingToWalkieTalkie && val.holdingWalkieTalkie && currentVoiceChatAudioSource.spatialBlend <= 0.1f; capture.ObserveVoice(currentVoiceChatAudioSource, flag ? Cue.RadioVoice : Cue.Voice, ((Object)val2).GetInstanceID(), speaker, num2, flag); if (!val2.speakingToWalkieTalkie) { continue; } List allWalkieTalkies = WalkieTalkie.allWalkieTalkies; for (int j = 0; j < Math.Min(allWalkieTalkies.Count, 16); j++) { WalkieTalkie val3 = allWalkieTalkies[(receiverCursor + j) % allWalkieTalkies.Count]; if (!((Object)(object)val3 == (Object)null) && ((GrabbableObject)val3).isBeingUsed && ((Behaviour)val3).isActiveAndEnabled && !((Object)(object)((GrabbableObject)val3).playerHeldBy == (Object)(object)val) && val3.audioSourcesReceiving.TryGetValue(currentVoiceChatAudioSource, out var value) && (Object)(object)value != (Object)null && ((Behaviour)value).isActiveAndEnabled && value.isPlaying && !value.mute) { value.GetOutputData(replaySamples, 0); int instanceID = ((Object)value).GetInstanceID(); float unscaledTime = Time.unscaledTime; bool num5 = StreamEvidence.HasModulation(replaySamples); int num6 = (num5 ? 1 : 0); if (num5 && replayEvidence.TryGetValue(instanceID, out (AudioSource, float, int) value2) && (Object)(object)value2.Item1 == (Object)(object)value && unscaledTime - value2.Item2 < 0.2f) { num6 = Math.Min(2, value2.Item3 + 1); } if (replayEvidence.Count >= 128 && !replayEvidence.ContainsKey(instanceID)) { replayEvidence.Clear(); } replayEvidence[instanceID] = (value, unscaledTime, num6); if (num6 >= 2) { capture.ObserveVoice(value, Cue.GroundRadioVoice, ((Object)val2).GetInstanceID(), speaker, num2, radio: false); } } } } receiverCursor = (receiverCursor + 16) % 64; } internal void Clear() { names.Clear(); replayEvidence.Clear(); Array.Clear(replaySamples, 0, replaySamples.Length); receiverCursor = 0; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }