// AUTHORED SHIM (not copied). Third-party SDK surface swept into the copy closure by // non-battle files (audio/movie/anti-cheat/analytics/spine). None is on the battle- // resolution path. Namespaces must merely exist (anchors); the few types referenced // by member get a minimal no-op surface. Members grow only as the compile loop demands. // ---- CriWare audio + movie (CRI types with members live in External/CriShim.cs) ---- namespace CriWare { internal class _ShimAnchor { } } namespace CriWare.CriMana { public class CriManaMovieMaterial : UnityEngine.MonoBehaviour { public enum MaxFrameDrop { Disable, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten } public MaxFrameDrop maxFrameDrop; public Player player { get; } = new Player(); } internal class _ShimAnchor { } } // ---- CodeStage anti-cheat obscured prefs (static k/v facade; no persistence headless) ---- namespace CodeStage.AntiCheat.ObscuredTypes { public static class ObscuredPrefs { public static bool HasKey(string key) => false; public static void DeleteKey(string key) { } public static void DeleteAll() { } public static void Save() { } public static int GetInt(string key, int defaultValue = 0) => defaultValue; public static float GetFloat(string key, float defaultValue = 0f) => defaultValue; public static string GetString(string key, string defaultValue = "") => defaultValue; public static void SetInt(string key, int value) { } public static void SetFloat(string key, float value) { } public static void SetString(string key, string value) { } } } // ---- Spine animation ---- namespace Spine { // Spine runtime — minimal hand shim (cosmetic skeletal animation, off battle path). public class SkeletonData { public System.Collections.Generic.List Skins { get; } = new System.Collections.Generic.List(); } public class Skin { public string Name { get; set; } } public class Bone { public float WorldX, WorldY, WorldRotationX; public Skeleton Skeleton => null; } public class Skeleton { public SkeletonData Data => null; public Skin Skin => null; public float ScaleX, ScaleY; public Bone FindBone(string boneName) => null; public void SetSkin(string skinName) { } public void SetSkin(Skin newSkin) { } public void SetSlotsToSetupPose() { } public void Update(float delta) { } } internal class _ShimAnchor { } } namespace Spine.Unity { public class SkeletonMecanim : UnityEngine.MonoBehaviour { public Spine.Skeleton skeleton => null; public Spine.Skeleton Skeleton => null; } internal class _ShimAnchor { } } // ---- misc third-party namespaces (anchors) ---- namespace RedShellUnity { internal class _ShimAnchor { } } namespace PlatformSupport.Collections.ObjectModel { public class ObservableDictionary : System.Collections.Generic.Dictionary { } internal class _ShimAnchor { } } namespace Convention { internal class _ShimAnchor { } } namespace com.adjust.sdk { public static class Adjust { public static bool IsEditor() => true; public static void addSessionCallbackParameter(string key, string value) { } } } namespace BestHTTP.Decompression { internal class _ShimAnchor { } } namespace BestHTTP.SocketIO.Transports { internal class _ShimAnchor { } } namespace BestHTTP.Decompression.Zlib { public static class GZipStream { public static byte[] UncompressBuffer(byte[] data) => data; } } // Native plugins (no decomp source) referenced unqualified from global scope. public static class TimeNativePlugin { public static float GetDeviceOperatingTime() => 0f; } public static class Packsize { public static bool Test() => true; } public static class DllCheck { public static bool Test() => true; } // The BCL's CollectionExtensions.GetValueOrDefault only binds to IReadOnlyDictionary; // copied code calls it on an IDictionary<,> static type (where the only by-name match is // the copied JsonDataExtension.GetValueOrDefault(JsonData,...) — wrong receiver). Supply the // IDictionary form globally so the call resolves. public static class ShimDictionaryExtensions { public static TValue GetValueOrDefault(this System.Collections.Generic.IDictionary dict, TKey key, TValue defaultValue) => dict != null && dict.TryGetValue(key, out var v) ? v : defaultValue; }