diff --git a/TextureMod/CustomSkin.cs b/TextureMod/CustomSkin.cs new file mode 100644 index 0000000..446ea86 --- /dev/null +++ b/TextureMod/CustomSkin.cs @@ -0,0 +1,74 @@ +#define CustomSkin +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEngine; + +namespace TextureMod +{ +#if CustomSkin + public class CustomSkin + { + public CustomSkin(int _index,Character _character, VariantType _variant, string _name, string _author, string _filePath) + { + index = _index; + FileLocation = _filePath; + SkinTexture = TextureHelper.LoadPNG(FileLocation); + Name = SkinTexture.name = _name; + Character = _character; + Variant = _variant; + Author = _author; + } + + public int index { get; private set; } + public Character Character { get; private set; } + public VariantType Variant { get; private set; } + public Texture2D SkinTexture { get; private set; } + public List SkinColors { get; private set; } + public string Author { get; private set; } + public string Name { get; private set; } + + private string FileLocation; + + public Texture2D ReloadSkin() + { + Debug.Log($"Loading Texture at...\n {FileLocation}"); + return SkinTexture = TextureHelper.LoadPNG(FileLocation); + } + + public bool VariantMatch(CharacterVariant characterVariant) + { + switch (Variant) + { + case VariantType.Default: + return characterVariant < CharacterVariant.STATIC_ALT; + case VariantType.Alternative: + return characterVariant == CharacterVariant.MODEL_ALT || characterVariant == CharacterVariant.MODEL_ALT2; + case VariantType.DLC: + return characterVariant == CharacterVariant.MODEL_ALT3 || characterVariant == CharacterVariant.MODEL_ALT4; + default: + return false; + } + } + + public string GetSkinLabel() + { + StringBuilder sBuilder = new StringBuilder(Name); + if (Author != "") + { + sBuilder.Append($" by {Author}"); + } + return sBuilder.ToString(); + } + + public enum VariantType + { + None, + Default, + Alternative, + DLC, + } + } +#endif +} diff --git a/TextureMod/CustomStyle.cs b/TextureMod/CustomStyle.cs index fdc9986..59633d2 100644 --- a/TextureMod/CustomStyle.cs +++ b/TextureMod/CustomStyle.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using LLScreen; +using System.Collections.Generic; using UnityEngine; namespace TextureMod diff --git a/TextureMod/EffectChanger.cs b/TextureMod/EffectChanger.cs index a2f2663..93ff7d3 100644 --- a/TextureMod/EffectChanger.cs +++ b/TextureMod/EffectChanger.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; +using GameplayEntities; using System.Linq; using UnityEngine; -using GameplayEntities; -using LLScreen; -using LLGUI; -using LLHandlers; namespace TextureMod @@ -43,6 +38,8 @@ public class EffectChanger : MonoBehaviour byte parryThirdColorR = 0; byte parryThirdColorG = 0; byte parryThirdColorB = 0; + + bool enableCustomParry; #endregion @@ -70,6 +67,8 @@ private void FixedUpdate() if (MMI == null) MMI = TextureMod.Instance.MMI; if (TextureMod.Instance.tc.InMenu()) { + enableCustomParry = MMI.GetTrueFalse(MMI.configBools["(bool)enableCustomParryAndClash"]); + parryFirstColorR = (byte)MMI.GetSliderValue("(slider)parryFirstColorR"); parryFirstColorG = (byte)MMI.GetSliderValue("(slider)parryFirstColorG"); parryFirstColorB = (byte)MMI.GetSliderValue("(slider)parryFirstColorB"); @@ -86,38 +85,19 @@ private void FixedUpdate() private void Update() { - MeshRenderer[] mrs = FindObjectsOfType(); - foreach (MeshRenderer mr in mrs) - { - if (mr.name == "parryVisual") - { - mr.material.mainTexture = parryActiveBG; - Material m1 = mr.material; - Material m2 = new Material(mr.material.shader); - Material m3 = new Material(mr.material.shader); - m2.mainTexture = parryActiveMG; - m3.mainTexture = parryActiveFG; - Material[] mArray = new Material[] { m1, m2, m3 }; - mr.materials = mArray; - mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); - mr.materials[1].color = new Color32(parrySecondColorR, parrySecondColorG, parrySecondColorB, 255); - mr.materials[2].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); - } - } - - VisualEntity[] ves = FindObjectsOfType(); - foreach(VisualEntity ve in ves) + if (enableCustomParry == true) { - if (ve.name == "parryEnd") + MeshRenderer[] mrs = FindObjectsOfType(); + foreach (MeshRenderer mr in mrs) { - foreach (Renderer mr in ve.GetComponentsInChildren()) + if (mr.name == "parryVisual") { - mr.material.mainTexture = parryEndBG; + mr.material.mainTexture = parryActiveBG; Material m1 = mr.material; Material m2 = new Material(mr.material.shader); Material m3 = new Material(mr.material.shader); - m2.mainTexture = parryEndMG; - m3.mainTexture = parryEndFG; + m2.mainTexture = parryActiveMG; + m3.mainTexture = parryActiveFG; Material[] mArray = new Material[] { m1, m2, m3 }; mr.materials = mArray; mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); @@ -126,37 +106,59 @@ private void Update() } } - - if (ve.name == "parrySuccess") + VisualEntity[] ves = FindObjectsOfType(); + foreach (VisualEntity ve in ves) { - Renderer mr = ve.GetComponentsInChildren().First(); - mr.material.mainTexture = parrySuccessBG; - Material m1 = mr.material; - Material m2 = new Material(mr.material.shader); - Material m3 = new Material(mr.material.shader); - m2.CopyPropertiesFromMaterial(m1); - m3.CopyPropertiesFromMaterial(m1); - m2.mainTexture = parrySuccessMG; - m3.mainTexture = parrySuccessFG; - Material[] mArray = new Material[] { m1, m2, m3 }; - mr.materials = mArray; - mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); - mr.materials[1].color = new Color32(parrySecondColorR, parrySecondColorG, parrySecondColorB, 255); - mr.materials[2].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); - } + if (ve.name == "parryEnd") + { + foreach (Renderer mr in ve.GetComponentsInChildren()) + { + mr.material.mainTexture = parryEndBG; + Material m1 = mr.material; + Material m2 = new Material(mr.material.shader); + Material m3 = new Material(mr.material.shader); + m2.mainTexture = parryEndMG; + m3.mainTexture = parryEndFG; + Material[] mArray = new Material[] { m1, m2, m3 }; + mr.materials = mArray; + mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); + mr.materials[1].color = new Color32(parrySecondColorR, parrySecondColorG, parrySecondColorB, 255); + mr.materials[2].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); + } + } - if (ve.name == "clashEffect") - { - Renderer mr = ve.GetComponentsInChildren().First(); - mr.material.mainTexture = clashBG; - Material m1 = mr.material; - Material m2 = new Material(mr.material.shader); - m2.CopyPropertiesFromMaterial(m1); - m2.mainTexture = clashFG; - Material[] mArray = new Material[] { m1, m2 }; - mr.materials = mArray; - mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); - mr.materials[1].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); + + if (ve.name == "parrySuccess") + { + Renderer mr = ve.GetComponentsInChildren().First(); + mr.material.mainTexture = parrySuccessBG; + Material m1 = mr.material; + Material m2 = new Material(mr.material.shader); + Material m3 = new Material(mr.material.shader); + m2.CopyPropertiesFromMaterial(m1); + m3.CopyPropertiesFromMaterial(m1); + m2.mainTexture = parrySuccessMG; + m3.mainTexture = parrySuccessFG; + Material[] mArray = new Material[] { m1, m2, m3 }; + mr.materials = mArray; + mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); + mr.materials[1].color = new Color32(parrySecondColorR, parrySecondColorG, parrySecondColorB, 255); + mr.materials[2].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); + } + + if (ve.name == "clashEffect") + { + Renderer mr = ve.GetComponentsInChildren().First(); + mr.material.mainTexture = clashBG; + Material m1 = mr.material; + Material m2 = new Material(mr.material.shader); + m2.CopyPropertiesFromMaterial(m1); + m2.mainTexture = clashFG; + Material[] mArray = new Material[] { m1, m2 }; + mr.materials = mArray; + mr.materials[0].color = new Color32(parryFirstColorR, parryFirstColorG, parryFirstColorB, 255); + mr.materials[1].color = new Color32(parryThirdColorR, parryThirdColorG, parryThirdColorB, 255); + } } } } diff --git a/TextureMod/ModDebugging.cs b/TextureMod/ModDebugging.cs index 8517ad0..d765afb 100644 --- a/TextureMod/ModDebugging.cs +++ b/TextureMod/ModDebugging.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; using UnityEngine; namespace TextureMod diff --git a/TextureMod/ModMenuIntegration.cs b/TextureMod/ModMenuIntegration.cs index ad1072e..42ade72 100644 --- a/TextureMod/ModMenuIntegration.cs +++ b/TextureMod/ModMenuIntegration.cs @@ -90,6 +90,7 @@ private void InitConfig() AddToWriteQueue("(bool)showDebugInfo", "false"); AddToWriteQueue("(gap)3", "2"); AddToWriteQueue("(header)h4", "Parry Color:"); + AddToWriteQueue("(bool)enableCustomParryAndClash", "true"); AddToWriteQueue("(slider)parryFirstColorR", "2|0|255"); AddToWriteQueue("(slider)parryFirstColorG", "205|0|255"); AddToWriteQueue("(slider)parryFirstColorB", "239|0|255"); diff --git a/TextureMod/ShowcaseStudio.cs b/TextureMod/ShowcaseStudio.cs index dcbcf01..874c0e4 100644 --- a/TextureMod/ShowcaseStudio.cs +++ b/TextureMod/ShowcaseStudio.cs @@ -1,11 +1,8 @@ -using System; +using LLHandlers; +using LLScreen; +using System; using System.Collections.Generic; -using System.Linq; using UnityEngine; -using GameplayEntities; -using LLScreen; -using LLGUI; -using LLHandlers; namespace TextureMod { @@ -30,7 +27,7 @@ public class ShowcaseStudio : MonoBehaviour Camera lightControllerCam; GameObject lightController; CharacterModel characterModel; - Shader mainShader; + Shader mainShader = Shader.Find("LethalLeague/GameplayOpaque"); Vector3 originalCharacterRendPos; bool enableLight = true; bool bgColorSelection = false; @@ -56,8 +53,9 @@ private void OnGUI() { GUI.skin.box.fontSize = 18; GUI.Window(777, new Rect(10, 10, Screen.width / 7, Screen.height - 20), new GUI.WindowFunction(AnimationSelectionWindow), "Showcase Studio", CustomStyle.windStyle); - if (showControls) GUI.Window(778, new Rect(20 + (Screen.width/7), 10, 10 + ((Screen.width / 7)*2), Screen.height/3), new GUI.WindowFunction(ControlsWindow), "Controls", CustomStyle.windStyle); - } else + if (showControls) GUI.Window(778, new Rect(20 + (Screen.width / 7), 10, 10 + ((Screen.width / 7) * 2), Screen.height / 3), new GUI.WindowFunction(ControlsWindow), "Controls", CustomStyle.windStyle); + } + else { if (SUS != null && !hideGUI) { @@ -67,116 +65,127 @@ private void OnGUI() } } - private void Update() + void Start() { - if (SUS == null) - { - SUS = FindObjectOfType(); - CustomStyle.InitStyle(); - } - else - { + CustomStyle.InitStyle(); + } - if (mainShader == null) mainShader = Shader.Find("LethalLeague/GameplayOpaque"); + void ShowStudio() + { + showUI = !showUI; + GameObject[] gos = FindObjectsOfType(); + if (!showUI) + { - if (Input.GetKeyDown(showcaseStudioHideHud)) hideGUI = !hideGUI; + originalCharacterRendPos = SUS.characterRenderer.transform.position; + SUS.characterRenderer.transform.position = new Vector3(0, 0, 0); - Renderer[] rends = FindObjectsOfType(); - foreach (Renderer r in rends) + foreach (GameObject go in gos) { - if (r.material.shader != mainShader && r.name.Contains("Effect")) r.material.shader = mainShader; - } + if (go.name.Contains("btFirst")) gameObjects.Add(go); + if (go.name.Contains("btQuit")) gameObjects.Add(go); + if (go.name.Contains("btPose")) gameObjects.Add(go); - if (Input.GetKeyDown(enterShowcaseStudio) || (!showUI && (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Mouse1)))) - { - showUI = !showUI; - GameObject[] gos = FindObjectsOfType(); - if (!showUI) + if (go.name.Contains("characterCamera")) { + go.GetComponent().enabled = false; + } - originalCharacterRendPos = SUS.characterRenderer.transform.position; - SUS.characterRenderer.transform.position = new Vector3(0, 0, 0); + if (go.name.Contains("cameraController")) + { + cameraController = new GameObject("cameraControllerGentle"); + cameraController.transform.position = new Vector3(-2.5f, -302f, -4.4f); + cameraController.transform.eulerAngles = new Vector3(3f, 132f, 0f); + camControllerCam = cameraController.AddComponent(); + cameraController.GetComponent().enabled = true; + cameraController.AddComponent(); + } - foreach (GameObject go in gos) + if (go.name.Contains("characterLight")) + { + lightController = new GameObject("lightControllerGentle"); + foreach (GameObject go2 in gos) { - if (go.name.Contains("btFirst")) gameObjects.Add(go); - if (go.name.Contains("btQuit")) gameObjects.Add(go); - if (go.name.Contains("btPose")) gameObjects.Add(go); - - if (go.name.Contains("characterCamera")) + if (go2.name.Contains("characterCamera")) { - go.GetComponent().enabled = false; + lightController.transform.position = go2.transform.position; + lightController.transform.rotation = go2.transform.rotation; } + } + Light l = lightController.AddComponent(); + Light cl = go.GetComponent(); + l.type = cl.type; + l.color = cl.color; + lightControllerCam = lightController.AddComponent(); + lightController.AddComponent(); + go.GetComponent().enabled = false; + } + } - if (go.name.Contains("cameraController")) - { - cameraController = new GameObject("cameraControllerGentle"); - cameraController.transform.position = new Vector3(-2.5f, -302f, -4.4f); - cameraController.transform.eulerAngles = new Vector3(3f, 132f, 0f); - camControllerCam = cameraController.AddComponent(); - cameraController.GetComponent().enabled = true; - cameraController.AddComponent(); - } + for (var i = 0; i < gameObjects.Count; i++) gameObjects[i].SetActive(false); - if (go.name.Contains("characterLight")) - { - lightController = new GameObject("lightControllerGentle"); - foreach (GameObject go2 in gos) - { - if (go2.name.Contains("characterCamera")) - { - lightController.transform.position = go2.transform.position; - lightController.transform.rotation = go2.transform.rotation; - } - } - Light l = lightController.AddComponent(); - Light cl = go.GetComponent(); - l.type = cl.type; - l.color = cl.color; - lightControllerCam = lightController.AddComponent(); - lightController.AddComponent(); - go.GetComponent().enabled = false; - } - } + if (characterModel == null) characterModel = SUS.previewModel; + else + { + Animation anim = characterModel.gameObject.GetComponentInChildren(); + var idleIndex = 0; + foreach (AnimationState state in anim) + { + animList.Add(state.name); + if (state.name == "idle") selectedGridAnim = idleIndex; + idleIndex++; + } + } + } + else //If showui + { + SUS.characterRenderer.transform.position = originalCharacterRendPos; + for (var i = 0; i < gameObjects.Count; i++) gameObjects[i].SetActive(true); + gameObjects.Clear(); + animList.Clear(); - for (var i = 0; i < gameObjects.Count; i++) gameObjects[i].SetActive(false); + if (lightController != null) Destroy(lightController); + if (cameraController != null) Destroy(cameraController); - if (characterModel == null) characterModel = SUS.previewModel; - else - { - Animation anim = characterModel.gameObject.GetComponentInChildren(); - var idleIndex = 0; - foreach (AnimationState state in anim) - { - animList.Add(state.name); - if (state.name == "idle") selectedGridAnim = idleIndex; - idleIndex++; - } - } + foreach (GameObject go in gos) + { + if (go.name.Contains("characterCamera")) + { + go.GetComponent().enabled = true; } - else //If showui + + if (go.name.Contains("characterLight")) { - SUS.characterRenderer.transform.position = originalCharacterRendPos; - for (var i = 0; i < gameObjects.Count; i++) gameObjects[i].SetActive(true); - gameObjects.Clear(); - animList.Clear(); + go.GetComponent().enabled = true; + } + } + } + } - if (lightController != null) Destroy(lightController); - if (cameraController != null) Destroy(cameraController); + private void Update() + { - foreach (GameObject go in gos) - { - if (go.name.Contains("characterCamera")) - { - go.GetComponent().enabled = true; - } + if (SUS == null) + { + if (UIScreen.currentScreens[1]?.screenType == ScreenType.UNLOCKS_SKINS) + { + SUS = UIScreen.currentScreens[1] as ScreenUnlocksSkins; + } + } + else + { - if (go.name.Contains("characterLight")) - { - go.GetComponent().enabled = true; - } - } - } + if (Input.GetKeyDown(showcaseStudioHideHud)) hideGUI = !hideGUI; + + Renderer[] rends = FindObjectsOfType(); + foreach (Renderer r in rends) + { + if (r.material.shader != mainShader && r.name.Contains("Effect")) r.material.shader = mainShader; + } + + if (Input.GetKeyDown(enterShowcaseStudio) || (!showUI && (Controller.all.GetButtonDown(InputAction.ESC) || Controller.all.GetButtonDown(InputAction.BACK) || Controller.all.GetButtonDown(InputAction.OK) || Input.GetKeyDown(KeyCode.Mouse1)))) + { + ShowStudio(); } if (characterModel == null) characterModel = SUS.previewModel; @@ -258,7 +267,7 @@ private void FixedUpdate() characterModel.transform.Rotate(Vector3.right * speed); characterModel.transform.Rotate(Vector3.forward * speed); } - if (Input.GetKey(KeyCode.W)) + if (Input.GetKey(KeyCode.W)) { characterModel.transform.Rotate(-Vector3.right * speed); characterModel.transform.Rotate(-Vector3.forward * speed); @@ -284,97 +293,98 @@ private void FixedUpdate() private void AnimationSelectionWindow(int winID) { GUILayout.BeginVertical(); - GUILayout.Space(30); - GUILayout.Box("General Options"); - GUILayout.BeginHorizontal(); - GUILayout.Label("Show controls: "); - if (GUILayout.Button(showControls.ToString())) - { - showControls = !showControls; - } - GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - GUILayout.Label("Skin Name: "); - GUILayout.Label(skinName); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(); - GUILayout.Label("Skin Refresh: "); - if (!refreshMode) GUILayout.Label("Off"); - else GUILayout.Label("On [" + refreshTimer.ToString() + "]"); - GUILayout.EndHorizontal(); + GUILayout.Space(30); + GUILayout.Box("General Options"); + GUILayout.BeginHorizontal(); + GUILayout.Label("Show controls: "); + if (GUILayout.Button(showControls.ToString())) + { + showControls = !showControls; + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Skin Name: "); + GUILayout.Label(skinName); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Skin Refresh: "); + if (!refreshMode) GUILayout.Label("Off"); + else GUILayout.Label("On [" + refreshTimer.ToString() + "]"); + GUILayout.EndHorizontal(); + + GUILayout.Space(20); + + GUILayout.Box("BG and Lighting Options"); + GUILayout.BeginHorizontal(); + GUILayout.Label("Enable Lighting: "); + if (GUILayout.Button(enableLight.ToString())) + { + enableLight = !enableLight; + } + GUILayout.EndHorizontal(); - GUILayout.Space(20); + GUILayout.BeginHorizontal(); + GUILayout.Label("Show BG Color select: "); + if (GUILayout.Button(bgColorSelection.ToString())) + { + bgColorSelection = !bgColorSelection; + } + GUILayout.EndHorizontal(); - GUILayout.Box("BG and Lighting Options"); - GUILayout.BeginHorizontal(); - GUILayout.Label("Enable Lighting: "); - if (GUILayout.Button(enableLight.ToString())) - { - enableLight = !enableLight; - } - GUILayout.EndHorizontal(); + if (bgColorSelection) + { + GUILayout.Label("RGB: [" + bgR.ToString() + ", " + bgG.ToString() + ", " + bgB.ToString() + "]"); + bgR = (byte)GUILayout.HorizontalSlider(bgR, 0f, 255f); + bgG = (byte)GUILayout.HorizontalSlider(bgG, 0f, 255f); + bgB = (byte)GUILayout.HorizontalSlider(bgB, 0f, 255f); + } - GUILayout.BeginHorizontal(); - GUILayout.Label("Show BG Color select: "); - if (GUILayout.Button(bgColorSelection.ToString())) - { - bgColorSelection = !bgColorSelection; - } - GUILayout.EndHorizontal(); - - if (bgColorSelection) - { - GUILayout.Label("RGB: [" + bgR.ToString() + ", " + bgG.ToString() + ", " + bgB.ToString() + "]" ); - bgR = (byte)GUILayout.HorizontalSlider(bgR, 0f, 255f); - bgG = (byte)GUILayout.HorizontalSlider(bgG, 0f, 255f); - bgB = (byte)GUILayout.HorizontalSlider(bgB, 0f, 255f); - } + GUILayout.Space(20); - GUILayout.Space(20); + GUILayout.Box("Animation Options"); + GUILayout.BeginHorizontal(); + GUILayout.Label("Current Animation:"); + GUILayout.Label(currentAnimation); + GUILayout.EndHorizontal(); - GUILayout.Box("Animation Options"); - GUILayout.BeginHorizontal(); - GUILayout.Label("Current Animation:"); - GUILayout.Label(currentAnimation); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(); - if (characterModel != null) - { - Animation anim = characterModel.gameObject.GetComponentInChildren(); - GUILayout.Label("Animation time:"); - GUILayout.Label(Decimal.Round((decimal)animationTime, 2) + "s / " + Decimal.Round((decimal)anim[currentAnimation].length, 2).ToString() + "s"); - } - GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + if (characterModel != null) + { + Animation anim = characterModel.gameObject.GetComponentInChildren(); + GUILayout.Label("Animation time:"); + GUILayout.Label(Decimal.Round((decimal)animationTime, 2) + "s / " + Decimal.Round((decimal)anim[currentAnimation].length, 2).ToString() + "s"); + } + GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - GUILayout.Label("Play Animation"); - if (GUILayout.Button(animate.ToString())) - { - animate = !animate; - } - GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Play Animation"); + if (GUILayout.Button(animate.ToString())) + { + animate = !animate; + } + GUILayout.EndHorizontal(); - if (animate) - { - GUILayout.Space(5); - GUILayout.Label("Animation speed: " + Decimal.Round((decimal)animationSpeed).ToString() + " FPS"); - animationSpeed = GUILayout.HorizontalSlider(animationSpeed, 0f, 60f); - GUILayout.Space(5); - } else - { - GUILayout.Space(5); - GUILayout.Label("Animation step:"); - animationPos = GUILayout.HorizontalSlider(animationPos, 0f, 1f); - GUILayout.Space(5); - } + if (animate) + { + GUILayout.Space(5); + GUILayout.Label("Animation speed: " + Decimal.Round((decimal)animationSpeed).ToString() + " FPS"); + animationSpeed = GUILayout.HorizontalSlider(animationSpeed, 0f, 60f); + GUILayout.Space(5); + } + else + { + GUILayout.Space(5); + GUILayout.Label("Animation step:"); + animationPos = GUILayout.HorizontalSlider(animationPos, 0f, 1f); + GUILayout.Space(5); + } - animSelectionPos = GUILayout.BeginScrollView(animSelectionPos, false, true); - if (animList.Count > 0) selectedGridAnim = GUILayout.SelectionGrid(selectedGridAnim, animList.ToArray(), 1); + animSelectionPos = GUILayout.BeginScrollView(animSelectionPos, false, true); + if (animList.Count > 0) selectedGridAnim = GUILayout.SelectionGrid(selectedGridAnim, animList.ToArray(), 1); - currentAnimation = animList[selectedGridAnim]; + currentAnimation = animList[selectedGridAnim]; GUILayout.EndScrollView(); GUILayout.EndVertical(); diff --git a/TextureMod/TextureChanger.cs b/TextureMod/TextureChanger.cs index ee28391..021287c 100644 --- a/TextureMod/TextureChanger.cs +++ b/TextureMod/TextureChanger.cs @@ -1,11 +1,13 @@ -using System; +using GameplayEntities; +using LLGUI; +using LLHandlers; +using LLScreen; +using Multiplayer; +using System; using System.Collections.Generic; using System.Linq; +using System.Text; using UnityEngine; -using GameplayEntities; -using LLScreen; -using LLGUI; -using LLHandlers; namespace TextureMod { @@ -13,8 +15,10 @@ public class TextureChanger : MonoBehaviour { #region General Fields public static string resourceFolder = Application.dataPath.Replace("/", @"\") + @"\Managed\TextureModResources\Images\"; - private JOFJHDJHJGI gameState; - private GameMode currentGameMode; + private JOFJHDJHJGI gameState => DNPFJHMAIBP.HHMOGKIMBNM(); + private GameMode currentGameMode => JOMBNFKIHIC.GIGAKBJGFDI.PNJOKAICMNN; + private bool IsOnline => JOMBNFKIHIC.GDNFJCCCKDM; + public static bool InMatch => World.instance != null && (DNPFJHMAIBP.HHMOGKIMBNM() == JOFJHDJHJGI.CDOFDJMLGLO || DNPFJHMAIBP.HHMOGKIMBNM() == JOFJHDJHJGI.LGILIJKMKOD) && !LLScreen.UIScreen.loadingScreenActive; public string[] debug = new string[20]; public bool doSkinPost = false; public int postTimer = 0; @@ -35,7 +39,7 @@ public class TextureChanger : MonoBehaviour private List playersInCurrentGame = new List(); - public Color32[] originalDNAColors = new Color32[AOIOFOIHOCJ.outfitOutlineColors.Length]; + public Color32[] originalDNAColors = new Color32[BagPlayer.outfitOutlineColors.Length]; #endregion #region Config Fields @@ -54,14 +58,15 @@ public class TextureChanger : MonoBehaviour public bool assignFirstSkinOnCharacterSelection = false; #endregion #region LocalPlayer Fields - public ALDOKEMAOMB localLobbyPlayer = null; + public ALDOKEMAOMB localLobbyPlayer => ALDOKEMAOMB.BJDPHEHJJJK(P2P.localPeer?.playerNr ?? 0); + private PlayerEntity localGamePlayerEntity => ALDOKEMAOMB.BJDPHEHJJJK(P2P.localPeer?.playerNr ?? 0)?.JCCIAMJEODH; + private CharacterModel localLobbyPlayerModel = null; - private PlayerEntity localGamePlayerEntity = null; - public string localPlayerName = ""; + public int localPlayerNr = -1; + public int localSkinIndex = -1; public Character localPlayerChar = Character.NONE; public CharacterVariant localPlayerCharVar = CharacterVariant.CORPSE; - public Texture2D localTex = null; - public string localTexName = ""; + public CustomSkin localCustomSkin; private bool initLocalPlayer = false; #endregion #region LocalPlayer ingame Model Fiels @@ -72,7 +77,7 @@ public class TextureChanger : MonoBehaviour public ALDOKEMAOMB opponentPlayer = null; private CharacterModel opponentLobbyCharacterModel = null; private PlayerEntity opponentPlayerEntity = null; - public string opponentPlayerName = ""; + public int opponentPlayerNr = -1; public Character opponentCustomSkinCharacter = Character.NONE; public CharacterVariant opponentCustomSkinCharacterVariant = CharacterVariant.CORPSE; public Texture2D opponentCustomTexture = null; @@ -118,15 +123,17 @@ private void Start() private void OnGUI() { - if (localTex != null) //Show skin nametags + + if (localCustomSkin != null) //Show skin nametags { + string labelTxt = localCustomSkin.GetSkinLabel(); GUI.skin.box.wordWrap = false; GUIContent content; - if (!intervalMode) content = new GUIContent(localTexName); - else content = new GUIContent(localTexName + " (Refresh " + "[" + reloadCustomSkinTimer + "]" + ")"); + if (!intervalMode) content = new GUIContent(labelTxt); + else content = new GUIContent(labelTxt + " (Refresh " + "[" + reloadCustomSkinTimer + "]" + ")"); GUI.skin.box.alignment = TextAnchor.MiddleCenter; GUI.skin.box.fontSize = 22; - if (InLobby(GameType.Any)) + if (InLobby(GameType.Any)) { if (UIScreen.currentScreens[1] == null) { @@ -134,16 +141,16 @@ private void OnGUI() { case GameMode.TUTORIAL: case GameMode.TRAINING: - GUI.Box(new Rect((Screen.width / 8), (Screen.height / 12.5f), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); + GUI.Box(new Rect((Screen.width / 8), (Screen.height / 12.5f), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); break; case GameMode._1v1: - if (localLobbyPlayer == ALDOKEMAOMB.BJDPHEHJJJK(0)) GUI.Box(new Rect(Screen.width / 10, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); //Check if local player is the player with ID 0 - else GUI.Box(new Rect((Screen.width / 20)*12.95f, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); + if (localLobbyPlayer == ALDOKEMAOMB.BJDPHEHJJJK(0)) GUI.Box(new Rect(Screen.width / 10, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); //Check if local player is the player with ID 0 + else GUI.Box(new Rect((Screen.width / 20) * 12.95f, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); break; case GameMode.FREE_FOR_ALL: case GameMode.COMPETITIVE: - if (localLobbyPlayer == ALDOKEMAOMB.BJDPHEHJJJK(0)) GUI.Box(new Rect(0 + Screen.width/250, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); - else GUI.Box(new Rect((Screen.width/4) + (Screen.width / 250), Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); + if (localLobbyPlayer == ALDOKEMAOMB.BJDPHEHJJJK(0)) GUI.Box(new Rect(0 + Screen.width / 250, Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); + else GUI.Box(new Rect((Screen.width / 4) + (Screen.width / 250), Screen.height / 12.5f, GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); break; } } @@ -155,14 +162,14 @@ private void OnGUI() { if (TextureMod.Instance.showcaseStudio.showUI == false) { - TextureMod.Instance.showcaseStudio.skinName = localTexName; + TextureMod.Instance.showcaseStudio.skinName = labelTxt; TextureMod.Instance.showcaseStudio.refreshTimer = reloadCustomSkinTimer; TextureMod.Instance.showcaseStudio.refreshMode = intervalMode; } else { - if (intervalMode) GUI.Box(new Rect((Screen.width - (Screen.width / 3.55f)) - (GUI.skin.box.CalcSize(content).x / 2), Screen.height - (Screen.height / 23), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName + " (Refresh " + "[" + reloadCustomSkinTimer + "]" + ")"); - else GUI.Box(new Rect((Screen.width - (Screen.width / 3.55f)) - (GUI.skin.box.CalcSize(content).x / 2), Screen.height - (Screen.height / 23), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), localTexName); + if (intervalMode) GUI.Box(new Rect((Screen.width - (Screen.width / 3.55f)) - (GUI.skin.box.CalcSize(content).x / 2), Screen.height - (Screen.height / 23), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt + " (Refresh " + "[" + reloadCustomSkinTimer + "]" + ")"); + else GUI.Box(new Rect((Screen.width - (Screen.width / 3.55f)) - (GUI.skin.box.CalcSize(content).x / 2), Screen.height - (Screen.height / 23), GUI.skin.box.CalcSize(content).x, GUI.skin.box.CalcSize(content).y), labelTxt); } } } @@ -174,7 +181,7 @@ private void FixedUpdate() if (!neverApplyOpponentsSkin) { if (doSkinPost) { postTimer++; } - if (localLobbyPlayer != null && localTex != null) + if (localLobbyPlayer != null && localCustomSkin != null) { if (postTimer >= postTimerLimit) { @@ -182,7 +189,7 @@ private void FixedUpdate() postTimer = 0; try { - StartCoroutine(TextureMod.Instance.ec.PostSkin(localLobbyPlayer.KLEEADMGHNE.peerId, localPlayerChar, localPlayerCharVar, localTex)); + StartCoroutine(TextureMod.Instance.ec.PostSkin(localLobbyPlayer.KLEEADMGHNE.peerId, localPlayerChar, localPlayerCharVar, localCustomSkin.SkinTexture)); } catch (Exception ex) { @@ -200,7 +207,10 @@ private void FixedUpdate() getTimer = 0; try { - StartCoroutine(TextureMod.Instance.ec.GetSkin(opponentPlayer.KLEEADMGHNE.peerId)); + if (opponentPlayer.KLEEADMGHNE?.peerId != null) + { + StartCoroutine(TextureMod.Instance.ec.GetSkin(opponentPlayer.KLEEADMGHNE.peerId)); + } } catch (Exception ex) { @@ -214,15 +224,25 @@ private void FixedUpdate() if (reloadCustomSkinTimer > 0) reloadCustomSkinTimer--; } //POST and GET requests - private void Update() - { - if (Input.GetKeyDown(KeyCode.PageDown)) + bool OnSkinChangeButtonDown() + { + if (Input.GetKeyDown(nextSkin) || Controller.all.GetButtonDown(InputAction.EXPRESS_RIGHT)) { - InitLocalPlayer(); - InitOpponentPlayer(); + localSkinIndex++; + return true; } - #region Set MMI Config Vars + else if (Input.GetKeyDown(previousSkin) || Controller.all.GetButtonDown(InputAction.EXPRESS_LEFT)) + { + localSkinIndex--; + return true; + } + else return false; + } + + + void ModMenuInit() + { if (TextureMod.Instance.MMI != null) { var mmi = TextureMod.Instance.MMI; @@ -240,11 +260,10 @@ private void Update() skinReloadIntervalInFrames = mmi.GetSliderValue("(slider)skinReloadIntervalInFrames"); assignFirstSkinOnCharacterSelection = mmi.GetTrueFalse(mmi.configBools["(bool)assignFirstSkinOnCharacterSelection"]); } - #endregion - #region Set Static Vars - gameState = DNPFJHMAIBP.HHMOGKIMBNM(); - currentGameMode = JOMBNFKIHIC.GIGAKBJGFDI.PNJOKAICMNN; - #endregion + } + + void DebugOptions() + { #region Set Debug Vars if (showDebugInfo) { @@ -255,9 +274,9 @@ private void Update() try { md.AddToWindow("General", "In Lobby", InLobby(GameType.Any).ToString()); } catch { } try { md.AddToWindow("General", "In Game", InGame(GameType.Any).ToString()); } catch { } try { md.AddToWindow("General", "In Post Game", InPostGame().ToString()); } catch { } - try { md.AddToWindow("General", "CurrentScreen[0]", UIScreen.currentScreens[0].screenType.ToString()); } catch { } - try { md.AddToWindow("General", "CurrentScreen[1]", UIScreen.currentScreens[1].screenType.ToString()); } catch { } - try { md.AddToWindow("General", "CurrentScreen[2]", UIScreen.currentScreens[2].screenType.ToString()); } catch { } + try { md.AddToWindow("General", "CurrentScreen[0]", UIScreen.currentScreens[0]?.screenType.ToString()); } catch { } + try { md.AddToWindow("General", "CurrentScreen[1]", UIScreen.currentScreens[1]?.screenType.ToString()); } catch { } + try { md.AddToWindow("General", "CurrentScreen[2]", UIScreen.currentScreens[2]?.screenType.ToString()); } catch { } try { md.AddToWindow("Skin Exchange", "Do Skin Post", doSkinPost.ToString()); } catch { } try { md.AddToWindow("Skin Exchange", "Post Timer", postTimer.ToString()); } catch { } @@ -267,12 +286,13 @@ private void Update() try { md.AddToWindow("Skin Exchange", "Set Anti Mirror", setAntiMirrior.ToString()); } catch { } try { md.AddToWindow("Local Player", "Lobby Player", localLobbyPlayer.ToString()); } catch { md.AddToWindow("Local Player", "Lobby Player", "null"); } + try { md.AddToWindow("Local Player", "Lobby Skin Index", localSkinIndex.ToString()); } catch { md.AddToWindow("Local Player", "Lobby Skin Index", "null"); } try { md.AddToWindow("Local Player", "Lobby Player Model", localLobbyPlayerModel.ToString()); } catch { md.AddToWindow("Local Player", "Lobby Player Model", "null"); } try { md.AddToWindow("Local Player", "Game PlayerEntity", localGamePlayerEntity.ToString()); } catch { md.AddToWindow("Local Player", "Game PlayerEntity", "null"); } - try { md.AddToWindow("Local Player", "Name", localPlayerName.ToString()); } catch { } + try { md.AddToWindow("Local Player", "Name", localPlayerNr.ToString()); } catch { } try { md.AddToWindow("Local Player", "Character", localPlayerChar.ToString()); } catch { } try { md.AddToWindow("Local Player", "Variant", localPlayerCharVar.ToString()); } catch { } - try { md.AddToWindow("Local Player", "Custom Texture", localTex.ToString()); } catch { md.AddToWindow("Local Player", "Custom Texture", "null"); } + try { md.AddToWindow("Local Player", "Custom Texture", localCustomSkin.ToString()); } catch { md.AddToWindow("Local Player", "Custom Texture", "null"); } try { md.AddToWindow("Local Player", "Initiate Player", initLocalPlayer.ToString()); } catch { } try { md.AddToWindow("Local Player", "Randomized Character", randomizedChar.ToString()); } catch { } try @@ -304,7 +324,7 @@ private void Update() { if (r.name == "meshNurse_MainRenderer") { - foreach(Material m in r.materials) + foreach (Material m in r.materials) { rendererNames = rendererNames + m.name + ", "; } @@ -317,7 +337,7 @@ private void Update() try { md.AddToWindow("Remote Player", "Lobby Player", opponentPlayer.ToString()); } catch { md.AddToWindow("Remote Player", "Lobby Player", "null"); } try { md.AddToWindow("Remote Player", "Lobby Player Model", opponentLobbyCharacterModel.ToString()); } catch { md.AddToWindow("Remote Player", "Lobby Player Model", "null"); } try { md.AddToWindow("Remote Player", "Game PlayerEntity", opponentPlayerEntity.ToString()); } catch { md.AddToWindow("Remote Player", "Game PlayerEntity", "null"); } - try { md.AddToWindow("Remote Player", "Name", opponentPlayerName.ToString()); } catch { } + try { md.AddToWindow("Remote Player", "Name", opponentPlayerNr.ToString()); } catch { } try { md.AddToWindow("Remote Player", "Customskin Character", opponentCustomSkinCharacter.ToString()); } catch { } try { md.AddToWindow("Remote Player", "Customskin Variant", opponentCustomSkinCharacterVariant.ToString()); } catch { } try { md.AddToWindow("Remote Player", "Custom Texture", opponentCustomTexture.ToString()); } catch { md.AddToWindow("Remote Player", "Custom Texture", "null"); } @@ -332,7 +352,8 @@ private void Update() rendererNames = rendererNames + r.name + ", "; } md.AddToWindow("Ball", "Name of renderers", rendererNames); - } catch { } + } + catch { } try { @@ -340,7 +361,7 @@ private void Update() string rendererNames = ""; foreach (VisualEntity ve in ves) { - rendererNames = rendererNames + ve.name + ", "; + rendererNames = rendererNames + ve.name + ", "; } md.AddToWindow("Effects", "VisualEntities", rendererNames); } @@ -361,10 +382,12 @@ private void Update() } - - #endregion + #endregion + } + void OpponetCustomCharacter() + { if (opponentPlayer != null && opponentLobbyCharacterModel != null) { if ((opponentLobbyCharacterModel.character != opponentCustomSkinCharacter || opponentLobbyCharacterModel.characterVariant != opponentCustomSkinCharacterVariant) && (opponentPlayer.DOFCCEDJODB != Character.NONE || opponentPlayer.AIINAIDBHJI != CharacterVariant.CORPSE)) @@ -390,7 +413,7 @@ private void Update() } } - if (newSkinToApply ) + if (newSkinToApply) { if (!cancelOpponentSkin) { @@ -414,100 +437,46 @@ private void Update() else opponentLobbyCharacterModel.SetCharacterLobby(opponentPlayer.CJFLMDNNMIE, opponentPlayer.DOFCCEDJODB, opponentPlayer.AIINAIDBHJI, false); } } + } - - if (localLobbyPlayer != null && randomizedChar == false) // Determine and assign skin to local player + private void Update() + { +#if DEBUG + if (Input.GetKeyDown(KeyCode.PageDown)) { - if (localLobbyPlayer.CHNGAKOIJFE) - { - var setNextSkin = false; - var setPreviousSkin = false; - - if ((localPlayerChar != localLobbyPlayer.DOFCCEDJODB || localPlayerCharVar != localLobbyPlayer.AIINAIDBHJI)) - { - localTex = null; - if (assignFirstSkinOnCharacterSelection && localPlayerChar != localLobbyPlayer.DOFCCEDJODB && localLobbyPlayer.DOFCCEDJODB != Character.RANDOM) setNextSkin = true; - else initLocalPlayer = true; - localPlayerChar = localLobbyPlayer.DOFCCEDJODB; - localPlayerCharVar = localLobbyPlayer.AIINAIDBHJI; - - } - - LLButton[] buttons = FindObjectsOfType(); - HDLIJDBFGKN gameStatesOnlineLobby = FindObjectOfType(); - + InitLocalPlayer(); + InitOpponentPlayer(); + } +#endif + ModMenuInit(); + DebugOptions(); - if (useOnlySetKey == false) - { - if (Input.GetKey(holdKey1) && buttons.Length > 0) - { - foreach (LLButton b in buttons) b.SetActive(false); //Deactivate buttons - if (Input.GetKeyDown(nextSkin)) setNextSkin = true; - else if (Input.GetKeyDown(previousSkin)) setPreviousSkin = true; + OpponetCustomCharacter(); - } - else if (Input.GetKeyUp(holdKey1) && buttons.Length > 0) - { - foreach (LLButton b in buttons) b.SetActive(true); //Reactivate buttons - } - } - else if (Input.GetKeyDown(nextSkin)) setNextSkin = true; - else if (Input.GetKeyDown(previousSkin)) setPreviousSkin = true; + AssignSkinToLocalPlayer(); - if ((setNextSkin || setPreviousSkin) && InLobby(GameType.Any)) // Assign skin to local player - { - if (setAntiMirrior) - { - opponentCustomTexture = TextureHelper.LoadPNG(Application.dataPath.Replace("/", @"\") + @"\Managed\TextureModResources\Images\opponent.png"); - setAntiMirrior = false; - } - if (InLobby(GameType.Online)) - { - gameStatesOnlineLobby.JPNNBHNHHJC(); - gameStatesOnlineLobby.EMFKKOJEIPN(localLobbyPlayer.CJFLMDNNMIE, false); //Set Ready - gameStatesOnlineLobby.BFIGLDLHKPO(); - gameStatesOnlineLobby.OFGNNIBJOLH(localLobbyPlayer); - } + DisableCharacterButtons(); - if (localLobbyPlayer.DOFCCEDJODB == Character.RANDOM) // Randomize skin and char - { - Character randomChar = localLobbyPlayer.HGPNPNPJBMK(); - localLobbyPlayer.DOFCCEDJODB = randomChar; - localLobbyPlayer.LALEEFJMMLH = randomChar; + CheckMirror(); - localTex = GetLoadedTexture(randomChar, localTex, false, true); - if (InLobby(GameType.Online)) - { - gameStatesOnlineLobby.EMFKKOJEIPN(localLobbyPlayer.CJFLMDNNMIE, true); //Set Ready - gameStatesOnlineLobby.OFGNNIBJOLH(localLobbyPlayer); //Send player state (Signalizes that we have changes characters and that we are ready) + InLobbyOrGameChecks(); - if (lockButtonsOnRandom) - { - foreach (LLButton b in buttons) b.SetActive(false); - randomizedChar = true; - } - } - } - else - { - if (setNextSkin) localTex = GetLoadedTexture(localLobbyPlayer.DOFCCEDJODB, localTex, false, false); - if (setPreviousSkin) localTex = GetLoadedTexture(localLobbyPlayer.DOFCCEDJODB, localTex , true, false); - } + UpdateCustomSkinsInMenu(); - localLobbyPlayerModel.PlayCamAnim(); + ApplyInGameEffects(); + } - if (InLobby(GameType.Online)) - { - doSkinPost = true; - postTimer = 0; - setAntiMirrior = false; - calculateMirror = true; - } - } - } + void LateUpdate() + { + if (Input.GetKeyDown(reloadEntireSkinLibrary)) + { + TextureMod.Instance.tl.LoadLibrary(); //Reloads the entire texture folder } + } + void DisableCharacterButtons() + { if (randomizedChar && UIScreen.currentScreens[1] != null) // If you have randomized your character, activate buttons again { if (UIScreen.currentScreens[1].screenType == ScreenType.PLAYERS_STAGE || UIScreen.currentScreens[1].screenType == ScreenType.PLAYERS_STAGE_RANKED) @@ -516,8 +485,11 @@ private void Update() foreach (LLButton b in buttons) b.SetActive(true); } } + } - if (opponentPlayer != null && opponentCustomTexture != null && localTex != null && InLobby(GameType.Any) && calculateMirror) + void CheckMirror() + { + if (opponentPlayer != null && opponentCustomTexture != null && localCustomSkin?.SkinTexture != null && InLobby(GameType.Any) && calculateMirror) { if (localPlayerChar == opponentCustomSkinCharacter) { @@ -528,7 +500,7 @@ private void Update() if (col.r > 0.5f && col.g > 0.5f && col.b > 0.5f && col.a > 0.5f) { if (col.r != 1f && col.g != 1f && col.b != 1f) { otCount++; } } else if (col.r < 0.5f && col.g < 0.5f && col.b < 0.5f) { if (col.r == 0f && col.g == 0f && col.b == 0f) { otCount++; } } } - Color[] pt = localTex.GetPixels(); + Color[] pt = localCustomSkin.SkinTexture.GetPixels(); var ptCount = 0; foreach (Color col in pt) { @@ -546,80 +518,114 @@ private void Update() } } //Check if your skin matches your opponents, and if it does set theirs to grayscale - if (localTex == null || opponentCustomTexture == null) { setAntiMirrior = false; } - + if (localCustomSkin?.SkinTexture == null || opponentCustomTexture == null) + { + setAntiMirrior = false; + } + } - switch (currentGameMode) + void ApplyInGameEffects() + { + if (InGame(GameType.Any)) { - case GameMode.TRAINING: - case GameMode.TUTORIAL: - #region In training and tutorial - if (initLocalPlayer) { InitLocalPlayer(); } - if (InLobby(GameType.Offline)) + mainBall = mainBall ?? BallHandler.instance.GetBall(0); + //Player.AllInMatch + ALDOKEMAOMB.ICOCPAFKCCE((ALDOKEMAOMB player) => + { + if (localGamePlayerEntity?.character == player.DOFCCEDJODB || opponentPlayerEntity?.character == player.DOFCCEDJODB) { - if (localLobbyPlayer == null) { localLobbyPlayer = GetLocalPlayerInLobby(GameType.Offline); } - else + switch (player.DOFCCEDJODB) { - if (localLobbyPlayerModel == null) { localLobbyPlayerModel = GetLobbyCharacterModel(localLobbyPlayer.CJFLMDNNMIE); } - else + case Character.CANDY: CandymanIngameEffects(); break; + case Character.BAG: AshesIngameEffects(); break; + case Character.GRAF: ToxicIngameEffects(); break; + case Character.ELECTRO: GridIngameEffects(); break; + case Character.SKATE: JetIngameEffects(localCustomSkin?.SkinTexture); break; + } + } + }); + } + else + { + mainBall = null; + } + } + + void InLobbyOrGameChecks() + { + if (InLobby(GameType.Any) || InGame(GameType.Any) || InPostGame()) + { + switch (currentGameMode) + { + case GameMode.TRAINING: + case GameMode.TUTORIAL: + #region In training and tutorial + + if (initLocalPlayer) + { + InitLocalPlayer(); + } + + if (InLobby(GameType.Offline)) + { + if (localLobbyPlayerModel == null) { - localLobbyPlayerModel.SetSilhouette(false); - if (localTex != null) - { - AssignTextureToCharacterModelRenderers(localLobbyPlayerModel, localTex); - } + localLobbyPlayerModel = GetCurrentCharacterModel(localLobbyPlayer.CJFLMDNNMIE); + } + + localLobbyPlayerModel?.SetSilhouette(false); + if (localCustomSkin != null) + { + AssignTextureToCharacterModelRenderers(localLobbyPlayerModel, localCustomSkin.SkinTexture); } } - } - if (InGame(GameType.Offline)) - { - if (localGamePlayerEntity == null) { localGamePlayerEntity = GetLocalPlayerInGame(); } - else + else if (InGame(GameType.Offline)) { - if (localTex != null) + if (localCustomSkin != null) { if (Input.GetKeyDown(reloadCustomSkin)) { - try { localTex = TextureHelper.ReloadSkin(localPlayerChar, localTex); } - catch { LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_BACK); } + try { localCustomSkin.ReloadSkin(); } + catch { AudioHandler.PlaySfx(Sfx.MENU_BACK); } } - AssignTextureToIngameCharacter(localGamePlayerEntity, localTex); - localPlayerName = AssignTextureToHud(localGamePlayerEntity, localTex); + AssignTextureToIngameCharacter(localGamePlayerEntity, localCustomSkin.SkinTexture); + localPlayerNr = AssignTextureToHud(localGamePlayerEntity, localCustomSkin.SkinTexture); } } - } - break; - #endregion - case GameMode._1v1: - case GameMode.FREE_FOR_ALL: - case GameMode.COMPETITIVE: - #region In ranked and online lobby - if (Input.GetKeyDown(cancelKey)) - { - cancelOpponentSkin = !cancelOpponentSkin; - if (opponentLobbyCharacterModel != null) - { - opponentCustomTexture = null; - opponentCustomSkinCharacter = opponentPlayer.DOFCCEDJODB; - opponentCustomSkinCharacterVariant = opponentPlayer.AIINAIDBHJI; - if (currentGameMode == GameMode._1v1 && opponentPlayer.CJFLMDNNMIE == 1) opponentLobbyCharacterModel.SetCharacterLobby(opponentPlayer.CJFLMDNNMIE, opponentCustomSkinCharacter, CharacterVariant.CORPSE, true); - else opponentLobbyCharacterModel.SetCharacterLobby(opponentPlayer.CJFLMDNNMIE, opponentCustomSkinCharacter, CharacterVariant.CORPSE, false); - initOpponentPlayer = true; - } - } - if (InLobby(GameType.Any)) - { - if (initLocalPlayer) { InitLocalPlayer(); } - if (initOpponentPlayer) { InitOpponentPlayer(); } + break; + #endregion + case GameMode._1v1: + case GameMode.FREE_FOR_ALL: + case GameMode.COMPETITIVE: + #region In ranked and online lobby - if (localLobbyPlayer == null) + if (Input.GetKeyDown(cancelKey)) { - if (InLobby(GameType.Online)) localLobbyPlayer = GetLocalPlayerInLobby(GameType.Online); - else localLobbyPlayer = GetLocalPlayerInLobby(GameType.Offline); + cancelOpponentSkin = !cancelOpponentSkin; + if (opponentLobbyCharacterModel != null) + { + opponentCustomTexture = null; + opponentCustomSkinCharacter = opponentPlayer.DOFCCEDJODB; + opponentCustomSkinCharacterVariant = opponentPlayer.AIINAIDBHJI; + if (currentGameMode == GameMode._1v1 && opponentPlayer.CJFLMDNNMIE == 1) opponentLobbyCharacterModel.SetCharacterLobby(opponentPlayer.CJFLMDNNMIE, opponentCustomSkinCharacter, CharacterVariant.CORPSE, true); + else opponentLobbyCharacterModel.SetCharacterLobby(opponentPlayer.CJFLMDNNMIE, opponentCustomSkinCharacter, CharacterVariant.CORPSE, false); + initOpponentPlayer = true; + } } - else + + if (InLobby(GameType.Any)) { + if (initLocalPlayer) + { + InitLocalPlayer(); + } + + if (initOpponentPlayer) + { + InitOpponentPlayer(); + } + try { if (sendCancelRequestToServer == true) @@ -632,22 +638,32 @@ private void Update() //if (localLobbyPlayer.CJFLMDNNMIE == 3) initLocalPlayer = true; - if (localLobbyPlayerModel == null) { localLobbyPlayerModel = GetLobbyCharacterModel(localLobbyPlayer.CJFLMDNNMIE); } + if (localLobbyPlayerModel == null) + { + localLobbyPlayerModel = GetCurrentCharacterModel(localLobbyPlayer.CJFLMDNNMIE); + } else { localLobbyPlayerModel.SetSilhouette(false); - if (localTex != null) + if (localCustomSkin != null) { - AssignTextureToCharacterModelRenderers(localLobbyPlayerModel, localTex); + AssignTextureToCharacterModelRenderers(localLobbyPlayerModel, localCustomSkin.SkinTexture); } } - if (InLobby(GameType.Online)) + + if (InLobby(GameType.Online) && localLobbyPlayer?.PNHOIDECPJE != null) { - if (opponentPlayer == null) { opponentPlayer = GetOpponentPlayerInLobby(); } + if (opponentPlayer == null) + { + opponentPlayer = GetOpponentPlayerInLobby(); + } else { doSkinGet = true; - if (opponentLobbyCharacterModel == null) { opponentLobbyCharacterModel = GetLobbyCharacterModel(opponentPlayer.CJFLMDNNMIE); } + if (opponentLobbyCharacterModel == null) + { + opponentLobbyCharacterModel = GetCurrentCharacterModel(opponentPlayer.CJFLMDNNMIE); + } else { opponentLobbyCharacterModel.SetSilhouette(false); @@ -658,13 +674,11 @@ private void Update() } } } + } - } - else if (InGame(GameType.Any)) - { - if (localGamePlayerEntity == null) { localGamePlayerEntity = GetLocalPlayerInGame(); } - else + else if (InGame(GameType.Any)) { + try { if (sendCancelRequestToServer == true) @@ -674,165 +688,262 @@ private void Update() } } catch { } - if (localTex != null) + + if (localCustomSkin != null) { - AssignTextureToIngameCharacter(localGamePlayerEntity, localTex); - localPlayerName = AssignTextureToHud(localGamePlayerEntity, localTex); + AssignTextureToIngameCharacter(localGamePlayerEntity, localCustomSkin.SkinTexture); + localPlayerNr = AssignTextureToHud(localGamePlayerEntity, localCustomSkin.SkinTexture); } - } - if (InGame(GameType.Online)) - { - if (opponentCustomTexture != null) + + if (InGame(GameType.Online)) { - if (opponentPlayerEntity == null) { opponentPlayerEntity = GetOpponentPlayerInGame(); } - else + if (opponentCustomTexture != null) { - AssignTextureToIngameCharacter(opponentPlayerEntity, opponentCustomTexture); - opponentPlayerName = AssignTextureToHud(opponentPlayerEntity, opponentCustomTexture); + if (opponentPlayerEntity == null) { opponentPlayerEntity = GetOpponentPlayerInGame(); } + else + { + AssignTextureToIngameCharacter(opponentPlayerEntity, opponentCustomTexture); + opponentPlayerNr = AssignTextureToHud(opponentPlayerEntity, opponentCustomTexture); + } } } } - } - else if (InPostGame()) - { - AssignSkinToWinnerModel(); + else if (InPostGame()) + { + AssignSkinToWinnerModel(); - if (localTex != null) { AssignTextureToPostGameHud(localPlayerName, localTex); } - if (opponentCustomTexture != null) AssignTextureToPostGameHud(opponentPlayerName, opponentCustomTexture); - } - else - { - initLocalPlayer = true; - initOpponentPlayer = true; - } - break; - #endregion - } + if (localCustomSkin != null) + { + AssignTextureToPostGameHud(localPlayerNr, localCustomSkin.SkinTexture); + } + if (opponentCustomTexture != null) + { + AssignTextureToPostGameHud(opponentPlayerNr, opponentCustomTexture); + } + } + else + { + if (localLobbyPlayer?.NGLDMOLLPLK == false) + { + initLocalPlayer = true; + } - if (InMenu()) - { - sendCancelRequestToServer = true; - if (UIScreen.currentScreens[1] != null) - { - if (UIScreen.currentScreens[1].screenType != ScreenType.UNLOCKS_SKINS) - { - InitLocalPlayer(); - } + initOpponentPlayer = true; + } + break; } - InitOpponentPlayer(); + #endregion } + } - if (UIScreen.currentScreens[1] != null) + void AssignSkinToLocalPlayer() + { + if (localLobbyPlayer != null && randomizedChar == false) // Determine and assign skin to local player { - if (UIScreen.currentScreens[1].screenType == ScreenType.UNLOCKS_SKINS) + //Player.Selected - Has the Player selected their character yet. + if (localLobbyPlayer.CHNGAKOIJFE) { - if (siluetteTimer > 0) - { - CharacterModel[] cms = FindObjectsOfType(); - foreach (CharacterModel cm in cms) cm.SetSilhouette(false); - if (localTex != null) SetUnlocksCharacterModel(localTex); - } + var changeSkin = false; - if (Input.GetKey(holdKey1)) + if (localPlayerChar != localLobbyPlayer.DOFCCEDJODB || localPlayerCharVar != localLobbyPlayer.AIINAIDBHJI) { - if (Input.GetKeyDown(nextSkin)) + localCustomSkin = null; + if (assignFirstSkinOnCharacterSelection && localPlayerChar != localLobbyPlayer.DOFCCEDJODB && localLobbyPlayer.DOFCCEDJODB != Character.RANDOM) { - try - { - localTex = GetLoadedTextureForUnlocksModel(localTex, false); - SetUnlocksCharacterModel(localTex); - } - catch { } - } else if (Input.GetKeyDown(previousSkin)) + localSkinIndex = 0; + changeSkin = true; + } + else { - try - { - localTex = GetLoadedTextureForUnlocksModel(localTex, true); - SetUnlocksCharacterModel(localTex); - } - catch { } + initLocalPlayer = true; } + localPlayerChar = localLobbyPlayer.DOFCCEDJODB; + localPlayerCharVar = localLobbyPlayer.AIINAIDBHJI; } - if (localTex != null) // Reload a skin from its file + LLButton[] buttons = FindObjectsOfType(); + HDLIJDBFGKN gameStatesOnlineLobby = FindObjectOfType(); + + if (useOnlySetKey == false) { - if (Input.GetKeyDown(reloadCustomSkin)) + if (Input.GetKey(holdKey1) && buttons.Length > 0) { - if (!intervalMode) + if (OnSkinChangeButtonDown()) { - if (reloadCustomSkinOnInterval) - { - intervalMode = true; - reloadCustomSkinTimer = skinReloadIntervalInFrames; - } - } else intervalMode = false; + changeSkin = true; + } - try + foreach (LLButton b in buttons) { - ScreenUnlocksSkins sus = FindObjectOfType(); - localTex = TextureHelper.ReloadSkin(sus.character, localTex); - SetUnlocksCharacterModel(localTex); - LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_CONFIRM); + b.SetActive(false); //Deactivate buttons } - catch { LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_BACK); } } - - if (intervalMode) + else if (Input.GetKeyUp(holdKey1) && buttons.Length > 0) { - if (reloadCustomSkinTimer == 0) + foreach (LLButton b in buttons) b.SetActive(true); //Reactivate buttons + } + } + else if (OnSkinChangeButtonDown()) + { + changeSkin = true; + } + + if (changeSkin && InLobby(GameType.Any)) // Assign skin to local player + { + if (setAntiMirrior) + { + opponentCustomTexture = TextureHelper.LoadPNG(Application.dataPath.Replace("/", @"\") + @"\Managed\TextureModResources\Images\opponent.png"); + setAntiMirrior = false; + } + + if (InLobby(GameType.Online)) + { + gameStatesOnlineLobby.JPNNBHNHHJC(); // gameStatesOnlineLobby.AutoReadyReset + gameStatesOnlineLobby.EMFKKOJEIPN(localLobbyPlayer.CJFLMDNNMIE, false); //Set Ready + gameStatesOnlineLobby.BFIGLDLHKPO(); // gameStatesOnlineLobby.UpdateReadyButton + gameStatesOnlineLobby.OFGNNIBJOLH(localLobbyPlayer); // gameStatesOnlineLobby.SendPlayerState + } + + bool isRandom = false; + if (localLobbyPlayer.DOFCCEDJODB == Character.RANDOM) // Randomize skin and char + { + //Creats a list of characters that have no skins and should be excluded from the character randomizer + List characters = new List(); + foreach (var character in TextureMod.Instance.tl.newCharacterTextures) { - try + if (character.Value.Count == 0) { - ScreenUnlocksSkins sus = FindObjectOfType(); - localTex = TextureHelper.ReloadSkin(sus.character, localTex); - SetUnlocksCharacterModel(localTex); + characters.Add(character.Key); } - catch { LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_BACK); } - reloadCustomSkinTimer = skinReloadIntervalInFrames; } + + Character randomChar = localLobbyPlayer.HGPNPNPJBMK(characters.ToArray()); + localLobbyPlayer.DOFCCEDJODB = randomChar; + + if (InLobby(GameType.Online)) + { + gameStatesOnlineLobby.EMFKKOJEIPN(localLobbyPlayer.CJFLMDNNMIE, true); // SetReady + gameStatesOnlineLobby.OFGNNIBJOLH(localLobbyPlayer); //Send player state (Signalizes that we have changes characters and that we are ready) + + if (lockButtonsOnRandom) + { + foreach (LLButton b in buttons) b.SetActive(false); + randomizedChar = true; + } + } + + isRandom = true; + } + + SetLocalCustomSkin(localLobbyPlayer.DOFCCEDJODB, isRandom); + + if (InLobby(GameType.Online)) + { + doSkinPost = true; + postTimer = 0; + setAntiMirrior = false; + calculateMirror = true; } } } - else if (UIScreen.currentScreens[1].screenType == ScreenType.UNLOCKS_CHARACTERS) + else if (initLocalPlayer) { - localTex = null; - intervalMode = false; - reloadCustomSkinTimer = skinReloadIntervalInFrames; + InitLocalPlayer(); } } + } + + void UpdateCustomSkinsInMenu() + { + if (InMenu()) + { + sendCancelRequestToServer = true; + if (UIScreen.currentScreens[1]?.screenType != ScreenType.UNLOCKS_SKINS) + { + InitLocalPlayer(); + } - if (Input.GetKeyDown(reloadEntireSkinLibrary)) TextureMod.Instance.tl.LoadLibrary(); //Reloads the entire texture folder + if (initOpponentPlayer == true) + { + InitOpponentPlayer(); + } + } - if (InGame(GameType.Any)) + if (UIScreen.currentScreens[1] != null) { - if (mainBall == null) mainBall = BallHandler.instance.GetBall(0); - if (playersInCurrentGame.Count == 0) playersInCurrentGame = GetCharactersInGame(); - else + if (UIScreen.currentScreens[1]?.screenType == ScreenType.UNLOCKS_SKINS) { - foreach (Character character in playersInCurrentGame) + var screenUnlocksSkins = UIScreen.currentScreens[1] as ScreenUnlocksSkins; + + CharacterModel characterModel = screenUnlocksSkins.previewModel; + if (siluetteTimer > 0) { - switch (character) + if (localCustomSkin != null) { - case Character.CANDY: CandymanIngameEffects(); break; - case Character.BAG: AshesIngameEffects(); break; - case Character.GRAF: ToxicIngameEffects(); break; - case Character.ELECTRO: GridIngameEffects(); break; - case Character.SKATE: JetIngameEffects(); break; + characterModel.SetSilhouette(false); + AssignTextureToCharacterModelRenderers(characterModel, localCustomSkin.SkinTexture); + } + } + + if (Input.GetKey(holdKey1)) + { + if (OnSkinChangeButtonDown()) + { + SetSkinForUnlocksModel(screenUnlocksSkins); + } + } + + if (localCustomSkin != null) // Reload a skin from its file + { + if (Input.GetKeyDown(reloadCustomSkin)) + { + if (!intervalMode) + { + if (reloadCustomSkinOnInterval) + { + intervalMode = true; + reloadCustomSkinTimer = skinReloadIntervalInFrames; + } + } + else intervalMode = false; + + try + { + localCustomSkin.ReloadSkin(); + //localTex = TextureHelper.ReloadSkin(screenUnlocksSkins.character, localTex); + SetUnlocksCharacterModel(localCustomSkin.SkinTexture); + LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_CONFIRM); + } + catch { LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_BACK); } + } + + if (intervalMode) + { + if (reloadCustomSkinTimer == 0) + { + try + { + localCustomSkin.ReloadSkin(); + //localTex = TextureHelper.ReloadSkin(screenUnlocksSkins.character, localTex); + SetUnlocksCharacterModel(localCustomSkin.SkinTexture); + } + catch { LLHandlers.AudioHandler.PlaySfx(LLHandlers.Sfx.MENU_BACK); } + reloadCustomSkinTimer = skinReloadIntervalInFrames; + } } } } + else if (UIScreen.currentScreens[1]?.screenType == ScreenType.UNLOCKS_CHARACTERS) + { + localCustomSkin = null; + intervalMode = false; + reloadCustomSkinTimer = skinReloadIntervalInFrames; + } } - else - { - mainBall = null; - if (playersInCurrentGame.Count > 0) playersInCurrentGame.Clear(); - } + } - /// End of Update() - /// End of Update() - /// End of Update() /// End of Update() public List GetCharactersInGame() @@ -848,57 +959,73 @@ public List GetCharactersInGame() public bool InMenu() { - if (UIScreen.currentScreens[0] != null) + if (UIScreen.currentScreens[0]?.screenType == ScreenType.MENU) { - if (UIScreen.currentScreens[0].screenType == ScreenType.MENU) - { return true; } - else { return false; } + return true; } else return false; } + public bool InLobby(GameType gt) { - switch(gt) + switch (gt) { case GameType.Online: - if (gameState == (JOFJHDJHJGI)5) - { return true; } - break; + return gameState == (JOFJHDJHJGI)GameState.LOBBY_ONLINE && UIScreen.loadingScreenActive == false; case GameType.Offline: - if (gameState == (JOFJHDJHJGI)11 || gameState == (JOFJHDJHJGI)12 || gameState == (JOFJHDJHJGI)4 || gameState == (JOFJHDJHJGI)6 || gameState == (JOFJHDJHJGI)23) - { return true; } - break; + return (gameState == (JOFJHDJHJGI)GameState.LOBBY_TRAINING || gameState == (JOFJHDJHJGI)GameState.LOBBY_TUTORIAL || gameState == (JOFJHDJHJGI)GameState.LOBBY_LOCAL || gameState == (JOFJHDJHJGI)GameState.LOBBY_CHALLENGE || gameState == (JOFJHDJHJGI)GameState.LOBBY_STORY) && UIScreen.loadingScreenActive == false; case GameType.Any: - if (gameState == (JOFJHDJHJGI)11 || gameState == (JOFJHDJHJGI)12 || gameState == (JOFJHDJHJGI)5 || gameState == (JOFJHDJHJGI)6 || gameState == (JOFJHDJHJGI)4 || gameState == (JOFJHDJHJGI)23) - { return true; } - break; + return (gameState == (JOFJHDJHJGI)GameState.LOBBY_ONLINE || gameState == (JOFJHDJHJGI)GameState.LOBBY_TRAINING || gameState == (JOFJHDJHJGI)GameState.LOBBY_TUTORIAL || gameState == (JOFJHDJHJGI)GameState.LOBBY_LOCAL || gameState == (JOFJHDJHJGI)GameState.LOBBY_CHALLENGE || gameState == (JOFJHDJHJGI)GameState.LOBBY_STORY) && UIScreen.loadingScreenActive == false; } return false; } + + public enum GameState + { + NONE, + INTRO, + MENU, + QUIT, + LOBBY_LOCAL, + LOBBY_ONLINE, + LOBBY_CHALLENGE, + CHALLENGE_LADDER, + CHALLENGE_LOST, + STORY_GRID, + STORY_COMIC, + LOBBY_TRAINING, + LOBBY_TUTORIAL, + CREDITS, + OPTIONS_GAME, + OPTIONS_INPUT, + OPTIONS_AUDIO, + OPTIONS_VIDEO, + GAME_INTRO, + GAME, + GAME_PAUSE, + GAME_RESULT, + UNLOCKS, + LOBBY_STORY + } + public bool InGame(GameType gt) { switch (gt) - { + { case GameType.Online: - if (JOMBNFKIHIC.GDNFJCCCKDM && gameState == (JOFJHDJHJGI)19) - { return true; } - break; + return InMatch && IsOnline == true; case GameType.Offline: - if ((!JOMBNFKIHIC.GDNFJCCCKDM) && gameState == (JOFJHDJHJGI)19) - { return true; } - break; + return InMatch && IsOnline == false; case GameType.Any: - if ((!JOMBNFKIHIC.GDNFJCCCKDM || JOMBNFKIHIC.GDNFJCCCKDM) && gameState == (JOFJHDJHJGI)19) - { return true; } - break; + return InMatch; + default: + return false; } - return false; } + public bool InPostGame() { - if ((currentGameMode == GameMode._1v1 || currentGameMode == GameMode.FREE_FOR_ALL) && gameState == (JOFJHDJHJGI)21) - { return true; } - else { return false; } + return (currentGameMode == GameMode._1v1 || currentGameMode == GameMode.FREE_FOR_ALL || currentGameMode == GameMode.COMPETITIVE) && gameState == (JOFJHDJHJGI)GameState.GAME_RESULT; } private ALDOKEMAOMB GetLocalPlayerInLobby(GameType gt) @@ -907,23 +1034,11 @@ private ALDOKEMAOMB GetLocalPlayerInLobby(GameType gt) switch (gt) { case GameType.Online: - ScreenPlayers sp = FindObjectOfType(); - if (sp.isActive) + if (P2P.localPeer != null) { - bool inLobby = false; - foreach (PlayersSelection ps in sp.playerSelections) - { - if (ps.btPlayerName.isActiveAndEnabled) inLobby = true; - } - if (inLobby) - { - HDLIJDBFGKN gameStatesOnlineLobby = FindObjectOfType(); - if (gameStatesOnlineLobby != null) - { - Debug.Log("Assigned player nr [" + gameStatesOnlineLobby.HCCGAFLIABM.ToString() + "] as the local player"); - return ALDOKEMAOMB.BJDPHEHJJJK(gameStatesOnlineLobby.HCCGAFLIABM); - } - } + int nr = P2P.localPeer.playerNr; + Debug.Log($"Assigned player nr [{nr}] as the local player"); + return ALDOKEMAOMB.BJDPHEHJJJK(nr); } break; case GameType.Offline: @@ -931,74 +1046,45 @@ private ALDOKEMAOMB GetLocalPlayerInLobby(GameType gt) } return player; } + private ALDOKEMAOMB GetOpponentPlayerInLobby() { ALDOKEMAOMB player = null; if (localLobbyPlayer != null) { - if (localLobbyPlayer.CJFLMDNNMIE == 0) player = ALDOKEMAOMB.BJDPHEHJJJK(1); - else if (localLobbyPlayer.CJFLMDNNMIE == 1) player = ALDOKEMAOMB.BJDPHEHJJJK(0); + if (localLobbyPlayer.CJFLMDNNMIE == 0) + { + player = ALDOKEMAOMB.BJDPHEHJJJK(1); + } + else if (localLobbyPlayer.CJFLMDNNMIE == 1) + { + player = ALDOKEMAOMB.BJDPHEHJJJK(0); + } } if (player.DOFCCEDJODB != Character.NONE && player.DOFCCEDJODB != Character.RANDOM) return player; else return null; } - public CharacterModel GetLobbyCharacterModel(int playerNr) - { - CharacterModel retmodel = null; - ScreenPlayers screenPlayers = FindObjectOfType(); - foreach(PlayersSelection playersSelection in screenPlayers.playerSelections) - { - if (playersSelection.playerNr == playerNr) - { - retmodel = playersSelection.characterModel; - } - } - return retmodel; - } - public void AssignTextureToCharacterModelRenderers(CharacterModel model, Texture2D tex) { - try + Renderer[] rs = model.curModel?.transform.GetComponentsInChildren() ?? new Renderer[0]; + for (int i = 0; i < rs.Length; i++) { - Renderer[] rs = model.curModel.transform.GetComponentsInChildren(); - if (rs.Length > 0) - { - foreach (Renderer r in rs) - { - switch (model.character) - { - case Character.BAG: - AssignAshesOutlineColorToRenderer(r, model.characterVariant, tex); - break; - case Character.BOSS: - if (model.characterVariant == CharacterVariant.MODEL_ALT3 || model.characterVariant == CharacterVariant.MODEL_ALT4) AssignDoomBoxVisualizerColorToRenderer(r, tex); - else if (model.characterVariant == CharacterVariant.MODEL_ALT || model.characterVariant == CharacterVariant.MODEL_ALT2) AssignOmegaDoomboxSmearsAndArmsToRenderer(r, tex); - break; - case Character.GRAF: - if (model.characterVariant == CharacterVariant.MODEL_ALT3 || model.characterVariant == CharacterVariant.MODEL_ALT4) AssignNurseToxicCanistersToRenderer(r, tex); - break; - } - - r.material.SetTexture("_MainTex", tex); - } - - } + AssignTextureToRenderer(rs[i], tex); } - catch { } } private PlayerEntity GetLocalPlayerInGame() { return localLobbyPlayer.JCCIAMJEODH; } + private PlayerEntity GetOpponentPlayerInGame() { return opponentPlayer.JCCIAMJEODH; } - private void AssignTextureToIngameCharacter(PlayerEntity playerEntity, Texture2D tex) { VisualEntity ve = playerEntity.gameObject.GetComponent(); @@ -1008,28 +1094,20 @@ private void AssignTextureToIngameCharacter(PlayerEntity playerEntity, Texture2D { foreach (Renderer r in ve.skinRenderers) { - if (!r.gameObject.name.EndsWith("Outline")) - { - r.material.SetTexture("_MainTex", tex); - } + AssignTextureToRenderer(r, tex); } if (playerEntity.character == Character.GRAF) { AssignToxicEffectColors(playerEntity.player.CJFLMDNNMIE, tex, playerEntity.variant); } - else if (playerEntity.character == Character.BOSS) - { - if (playerEntity.variant == CharacterVariant.MODEL_ALT3 || playerEntity.variant == CharacterVariant.MODEL_ALT4) AssignDoomBoxVisualizerColorIngame(playerEntity, tex); - else if (playerEntity.variant == CharacterVariant.MODEL_ALT || playerEntity.variant == CharacterVariant.MODEL_ALT2) AssignOmegaDoomboxSmearsAndArmsIngame(playerEntity, tex); - } } } } - private string AssignTextureToHud(PlayerEntity playerEntity, Texture tex) + private int AssignTextureToHud(PlayerEntity playerEntity, Texture tex) { - string ret = ""; + int ret = -1; GameHudPlayerInfo[] ghpis = FindObjectsOfType(); if (ghpis.Length > 0) { @@ -1042,66 +1120,153 @@ private string AssignTextureToHud(PlayerEntity playerEntity, Texture tex) { foreach (Renderer r in rs) { - r.material.SetTexture("_MainTex", tex); + AssignTextureToRenderer(r, tex); } } - ret = ghpi.lbName.text; + ret = ghpi.shownPlayer.CJFLMDNNMIE; } } } return ret; } - private void AssignTextureToPostGameHud(string playerName, Texture tex) + private void AssignTextureToPostGameHud(int playerNr, Texture tex) { - PostScreen ps = FindObjectOfType(); - PostSceenPlayerBar[] pspbs = ps.playerBarsByPlayer; - if (pspbs.Length > 0) + if (UIScreen.currentScreens[0]?.screenType == ScreenType.GAME_RESULTS) { - foreach (PostSceenPlayerBar pspb in pspbs) + PostScreen postScreen = UIScreen.currentScreens[0] as PostScreen; + Renderer[] rs = postScreen.playerBarsByPlayer[playerNr].gameObject.transform.GetComponentsInChildren(); + + for (int i = 0; i < rs.Length; i++) { - try + AssignTextureToRenderer(rs[i], tex, playerNr); + } + } + } + + void AssignTextureToRenderer(Renderer r, Texture tex, int playerIndex = -1, PlayerEntity playerEntity = null) + { + Character character = Character.NONE; + CharacterVariant characterVariant = CharacterVariant.DEFAULT; + playerEntity = playerEntity ?? r.transform.GetComponentInParent(); + + if (playerEntity != null) + { + character = playerEntity.character; + characterVariant = playerEntity.variant; + } + else + { + GameHudPlayerInfo playerHud = r.transform.GetComponentInParent(); + if (playerHud != null) + { + character = playerHud.shownPlayer.DOFCCEDJODB; + characterVariant = playerHud.shownPlayer.AIINAIDBHJI; + } + else + { + CharacterModel characterModel = r.transform.GetComponentInParent(); + if (characterModel != null) { - if (pspb.btPlayerName.GetText() == playerName) + character = characterModel.character; + characterVariant = characterModel.characterVariant; + } + else + { + if (playerIndex > -1) { - Renderer[] rs = pspb.gameObject.transform.GetComponentsInChildren(); - if (rs.Length > 0) foreach (Renderer r in rs) r.material.SetTexture("_MainTex", tex); + ALDOKEMAOMB player = ALDOKEMAOMB.BJDPHEHJJJK(playerIndex); + character = player.DOFCCEDJODB; + characterVariant = player.AIINAIDBHJI; } } - catch { } + } + } + + if (!r.gameObject.name.EndsWith("Outline")) + { + string materialTexName = r.material.mainTexture?.name ?? ""; + if (characterVariant == CharacterVariant.STATIC_ALT && r.material.name.Contains("ScreenSpaceNoise")) + { + AOOJOMIECLD modelValues = JPLELOFJOOH.NEBGBODHHCG(character, characterVariant != CharacterVariant.STATIC_ALT ? characterVariant : CharacterVariant.DEFAULT); + r.material = modelValues.DMAMFHLFOJF(0, false); + } + + if (!materialTexName.Contains("Silhouett") && materialTexName != "") + { + //r.material.shader = Shader.Find("LethalLeague/GameplayOpaque"); + r.material.SetTexture("_MainTex", tex); + } + } + + if (character == Character.GRAF) + { + if (characterVariant == CharacterVariant.MODEL_ALT3 || characterVariant == CharacterVariant.MODEL_ALT4) + { + AssignNurseToxicCanisters(r, (Texture2D)tex); + } + } + else if (character == Character.SKATE) + { + if (characterVariant == CharacterVariant.MODEL_ALT || characterVariant == CharacterVariant.MODEL_ALT2) + { + AssignJetScubaVisor(r, (Texture2D)tex); + } + } + else if (character == Character.BOSS) + { + if (characterVariant == CharacterVariant.MODEL_ALT || characterVariant == CharacterVariant.MODEL_ALT2) + { + AssignOmegaDoomboxSmearsAndArms(r, (Texture2D)tex); + } + else if (characterVariant == CharacterVariant.MODEL_ALT3 || characterVariant == CharacterVariant.MODEL_ALT4) + { + AssignVisualizer(character, r, (Texture2D)tex); + } + } + else if (character == Character.BAG) + { + AssignAshesOutlineColor(r, characterVariant, (Texture2D)tex); + } + else if (character == Character.BOOM) + { + if (characterVariant == CharacterVariant.MODEL_ALT3 || characterVariant == CharacterVariant.MODEL_ALT4) + { + AssignVisualizer(character, r, (Texture2D)tex); } } } private void AssignSkinToWinnerModel() { - PostScreen ps = FindObjectOfType(); - if (ps != null) + if (UIScreen.currentScreens[0]?.screenType == ScreenType.GAME_RESULTS) { - if (localTex != null) + PostScreen ps = UIScreen.currentScreens[0] as PostScreen; + + if (localCustomSkin != null) { - try - { - if (ps.winnerCharacter == localPlayerChar && ps.winnerCharacterVariant == localPlayerCharVar) AssignTextureToCharacterModelRenderers(ps.winnerModel, localTex); - } catch (Exception ex) { Debug.Log("Winner Model: " + ex); } + if (ps.winnerCharacter == localPlayerChar && ps.winnerCharacterVariant == localPlayerCharVar) AssignTextureToCharacterModelRenderers(ps.winnerModel, localCustomSkin.SkinTexture); } if (opponentCustomTexture != null) { - try - { - if (ps.winnerCharacter == opponentCustomSkinCharacter && ps.winnerCharacterVariant == opponentCustomSkinCharacterVariant) AssignTextureToCharacterModelRenderers(ps.winnerModel, opponentCustomTexture); - } catch (Exception ex) { Debug.Log("Winner Model: " + ex); } + if (ps.winnerCharacter == opponentCustomSkinCharacter && ps.winnerCharacterVariant == opponentCustomSkinCharacterVariant) AssignTextureToCharacterModelRenderers(ps.winnerModel, opponentCustomTexture); } } } + private void SetCharacterModelTex(CharacterModel characterModel, Texture2D tex) + { + characterModel.SetSilhouette(false); + AssignTextureToCharacterModelRenderers(characterModel, tex); + } + private void SetUnlocksCharacterModel(Texture2D tex) { CharacterModel[] cms = FindObjectsOfType(); if (cms.Length > 0) { - foreach(CharacterModel cm in cms) + foreach (CharacterModel cm in cms) { cm.SetSilhouette(false); AssignTextureToCharacterModelRenderers(cm, tex); @@ -1111,11 +1276,12 @@ private void SetUnlocksCharacterModel(Texture2D tex) private void InitLocalPlayer() { - localLobbyPlayer = null; + //localLobbyPlayer = null; localLobbyPlayerModel = null; - localGamePlayerEntity = null; - localPlayerName = ""; - localTex = null; + //localGamePlayerEntity = null; + localPlayerNr = -1; + localSkinIndex = -1; + localCustomSkin = null; doSkinPost = false; postTimer = 0; randomizedChar = false; @@ -1126,14 +1292,128 @@ private void InitOpponentPlayer() opponentPlayer = null; opponentLobbyCharacterModel = null; opponentPlayerEntity = null; - opponentPlayerName = ""; + opponentPlayerNr = -1; opponentCustomTexture = null; doSkinGet = false; getTimer = 0; initOpponentPlayer = false; } - private Texture2D GetLoadedTexture(Character c, Texture2D currentTexture , bool previous, bool random) + CustomSkin GetCustomSkin(Character character, bool isRandom = false) + { + List customSkins = TextureMod.Instance.tl.newCharacterTextures[character]; + if (customSkins.Count == 0) + { + Debug.Log($"[LLBMM] TextureMod: No skins for {character}"); + return null; + } + int skinIndex = localSkinIndex; + + if (skinIndex > customSkins.Count - 1) + { + skinIndex = 0; + } + else if (skinIndex < 0) + { + skinIndex = customSkins.Count - 1; + } + + localSkinIndex = skinIndex; + return customSkins[localSkinIndex]; + } + + private void SetLocalCustomSkin(Character character, bool isRandom = false) + { + localCustomSkin = GetCustomSkin(character, isRandom); + if (localCustomSkin == null) { return; } + + bool flipped = currentGameMode == GameMode._1v1 && localLobbyPlayer.CJFLMDNNMIE == 1 ? true : false; + + localPlayerCharVar = GetCustomSkinVariant(localCustomSkin.Variant, localLobbyPlayer.AIINAIDBHJI); + localPlayerChar = character; + localLobbyPlayer.AIINAIDBHJI = localPlayerCharVar; + localLobbyPlayerModel = GetCurrentCharacterModel(P2P.localPeer?.playerNr ?? 0); + localLobbyPlayerModel.SetCharacterLobby(localLobbyPlayer.CJFLMDNNMIE, localPlayerChar, localPlayerCharVar, flipped); + localLobbyPlayerModel.PlayCamAnim(); + } + + private CharacterModel GetCurrentCharacterModel(int playerNr = 0) + { + if (UIScreen.currentScreens[0]?.screenType == ScreenType.PLAYERS) + { + var screenPlayers = UIScreen.currentScreens[0] as ScreenPlayers; + return screenPlayers.playerSelections[playerNr].characterModel; + } + else if (UIScreen.currentScreens[1]?.screenType == ScreenType.UNLOCKS_SKINS) + { + var screenUnlocksSkins = UIScreen.currentScreens[1] as ScreenUnlocksSkins; + return screenUnlocksSkins.previewModel; + } + else if (UIScreen.currentScreens[1]?.screenType == ScreenType.UNLOCKS_CHARACTERS) + { + var screenUnlocksCharacters = UIScreen.currentScreens[1] as ScreenUnlocksCharacters; + return screenUnlocksCharacters.previewModel; + } + return null; + } + + + CharacterVariant GetCustomSkinVariantShowcase(CustomSkin.VariantType variantType) + { + switch (variantType) + { + case CustomSkin.VariantType.Alternative: + return CharacterVariant.MODEL_ALT; + case CustomSkin.VariantType.DLC: + return CharacterVariant.MODEL_ALT3; + case CustomSkin.VariantType.Default: + return CharacterVariant.DEFAULT; + default: + return CharacterVariant.DEFAULT; + } + } + + CharacterVariant GetCustomSkinVariant(CustomSkin.VariantType variantType, CharacterVariant characterVariant) + { + switch (variantType) + { + case CustomSkin.VariantType.Alternative: + if (characterVariant == CharacterVariant.MODEL_ALT || characterVariant == CharacterVariant.MODEL_ALT2) + { + return characterVariant; + } + else if (opponentPlayer?.DOFCCEDJODB == localLobbyPlayer.DOFCCEDJODB) + { + return opponentPlayer.AIINAIDBHJI == CharacterVariant.MODEL_ALT ? CharacterVariant.MODEL_ALT2 : CharacterVariant.MODEL_ALT; + } + else return CharacterVariant.MODEL_ALT; + case CustomSkin.VariantType.DLC: + if (characterVariant == CharacterVariant.MODEL_ALT3 || characterVariant == CharacterVariant.MODEL_ALT4) + { + return characterVariant; + } + else if (opponentPlayer?.DOFCCEDJODB == localLobbyPlayer.DOFCCEDJODB) + { + return opponentPlayer.AIINAIDBHJI == CharacterVariant.MODEL_ALT3 ? CharacterVariant.MODEL_ALT4 : CharacterVariant.MODEL_ALT3; + } + else return CharacterVariant.MODEL_ALT3; + default: + if (characterVariant < CharacterVariant.STATIC_ALT) + { + return characterVariant; + } + else if (opponentPlayer?.DOFCCEDJODB == localLobbyPlayer.DOFCCEDJODB) + { + return opponentPlayer.AIINAIDBHJI == CharacterVariant.DEFAULT ? CharacterVariant.ALT0 : CharacterVariant.DEFAULT; + } + else return CharacterVariant.DEFAULT; + } + } + +#if showOLD + + [Obsolete("Method1 is deprecated, please use Method2 instead.", true)] + private Texture2D GetLoadedTexture(Character c, Texture2D currentTexture, bool previous, bool random) { Texture2D ret = null; var texname = ""; @@ -1192,7 +1472,8 @@ private Texture2D GetLoadedTexture(Character c, Texture2D currentTexture , bool } } } - } else + } + else { if (currentTexture == null && TextureMod.Instance.tl.characterTextures[c].ElementAt(0).Value != null) { @@ -1209,7 +1490,7 @@ private Texture2D GetLoadedTexture(Character c, Texture2D currentTexture , bool KeyValuePair firstSkin = TextureMod.Instance.tl.characterTextures[c].First(); KeyValuePair lastSkin = TextureMod.Instance.tl.characterTextures[c].Last(); - for (int i = TextureMod.Instance.tl.characterTextures[c].Count-1; i != -1; i--) + for (int i = TextureMod.Instance.tl.characterTextures[c].Count - 1; i != -1; i--) { KeyValuePair pair = TextureMod.Instance.tl.characterTextures[c].ElementAt(i); if (retnext == true) @@ -1239,79 +1520,115 @@ private Texture2D GetLoadedTexture(Character c, Texture2D currentTexture , bool } localPlayerChar = c; texname = CleanTextureName(texname); - localTexName = texname; + localSkinNameLabel = texname; return ret; } +#endif + + private void GetSkinForUnlocksModel(ScreenUnlocksCharacters screen, sbyte next = 0) + { + Character character = screen.previewModel.character; + List customSkins = TextureMod.Instance.tl.newCharacterTextures[character]; + if (customSkins.Count == 0) + { + Debug.Log($"[LLBMM] TextureMod: No skins for {character}"); + return; + } + + localCustomSkin = GetCustomSkin(character); + screen.previewModel.SetCharacterResultScreen(0, character, GetCustomSkinVariant(localCustomSkin.Variant, screen.previewModel.characterVariant)); + siluetteTimer = 5; + } + + private void SetSkinForUnlocksModel(ScreenUnlocksSkins screenUnlocksSkins, sbyte next = 0) + { + List customSkins = TextureMod.Instance.tl.newCharacterTextures[screenUnlocksSkins.character]; + if (customSkins.Count == 0) + { + Debug.Log($"[LLBMM] TextureMod: No skins for {screenUnlocksSkins.character}"); + return; + } + + localCustomSkin = GetCustomSkin(screenUnlocksSkins.character); + screenUnlocksSkins.ShowCharacter(screenUnlocksSkins.character, GetCustomSkinVariantShowcase(localCustomSkin.Variant), true); + siluetteTimer = 5; + SetCharacterModelTex(screenUnlocksSkins.previewModel, localCustomSkin?.SkinTexture); + } + +#if showOLD + [Obsolete("Method1 is deprecated, please use Method2 instead.", true)] private Texture2D GetLoadedTextureForUnlocksModel(Texture2D currentTexture, bool previous) { - Texture2D ret = null; + Texture2D texture = null; var texname = ""; ScreenUnlocksSkins sus = FindObjectOfType(); if (sus != null) { + var curCharactersTextures = TextureMod.Instance.tl.characterTextures[sus.character]; if (previous) { - if (currentTexture == null && TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Value != null) + if (currentTexture == null && curCharactersTextures.ElementAt(0).Value != null) { - sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, TextureMod.Instance.tl.characterTextures[sus.character].Last().Key), false); - texname = TextureMod.Instance.tl.characterTextures[sus.character].Last().Key; - ret = TextureMod.Instance.tl.characterTextures[sus.character].Last().Value; + sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, curCharactersTextures.Last().Key), false); + texname = curCharactersTextures.Last().Key; + texture = curCharactersTextures.Last().Value; } else { bool retnext = false; - for (int i = TextureMod.Instance.tl.characterTextures[sus.character].Count - 1; i != -1; i--) + for (int i = curCharactersTextures.Count - 1; i != -1; i--) { - KeyValuePair pair = TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(i); + KeyValuePair pair = curCharactersTextures.ElementAt(i); if (retnext == true) { sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, pair.Key), false); texname = pair.Key; - ret = pair.Value; + texture = pair.Value; break; } else if (retnext == false && currentTexture == pair.Value) { retnext = true; - if (currentTexture == TextureMod.Instance.tl.characterTextures[sus.character].First().Value) + if (currentTexture == curCharactersTextures.First().Value) { - sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, TextureMod.Instance.tl.characterTextures[sus.character].Last().Key), false); - texname = TextureMod.Instance.tl.characterTextures[sus.character].Last().Key; - ret = TextureMod.Instance.tl.characterTextures[sus.character].Last().Value; + sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, curCharactersTextures.Last().Key), false); + texname = curCharactersTextures.Last().Key; + texture = curCharactersTextures.Last().Value; } } } } - } else + } + else { - if (currentTexture == null && TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Value != null) + if (currentTexture == null && curCharactersTextures.ElementAt(0).Value != null) { - sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Key), false); - texname = TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Key; - ret = TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Value; + sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, curCharactersTextures.ElementAt(0).Key), false); + texname = curCharactersTextures.ElementAt(0).Key; + texture = curCharactersTextures.ElementAt(0).Value; } else { bool retnext = false; - foreach (KeyValuePair pair in TextureMod.Instance.tl.characterTextures[sus.character]) + foreach (KeyValuePair pair in curCharactersTextures) { if (retnext == true) { sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, pair.Key), false); texname = pair.Key; - ret = pair.Value; + texture = pair.Value; break; } else if (retnext == false && currentTexture == pair.Value) { retnext = true; - if (currentTexture == TextureMod.Instance.tl.characterTextures[sus.character].Last().Value) + if (currentTexture == curCharactersTextures.Last().Value) { - sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Key), false); - texname = TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Key; - ret = TextureMod.Instance.tl.characterTextures[sus.character].ElementAt(0).Value; + sus.ShowCharacter(sus.character, GetVariantFromFileName(sus.character, curCharactersTextures.ElementAt(0).Key), false); + texname = curCharactersTextures.ElementAt(0).Key; + texture = curCharactersTextures.ElementAt(0).Value; } } } @@ -1323,20 +1640,11 @@ private Texture2D GetLoadedTextureForUnlocksModel(Texture2D currentTexture, bool siluetteTimer = 5; - localTexName = texname; - return ret; + localSkinNameLabel = texname; + return texture; } - private string CleanTextureName(string texname) - { - string ret = texname; - if (ret.Contains(".png")) ret = ret.Replace(".png", ""); - if (ret.Contains(".PNG")) ret = ret.Replace(".PNG", ""); - if (ret.Contains("_ALT2")) ret = ret.Replace("_ALT2", ""); - else if (ret.Contains("_ALT")) ret = ret.Replace("_ALT", ""); - - return ret; - } +#endif private CharacterVariant GetVariantFromFileName(Character localPlayerC, string name) { @@ -1353,27 +1661,12 @@ private CharacterVariant GetVariantFromFileName(Character localPlayerC, string n { var proceed = false; - switch(localPlayerC) + foreach (Character DLC in TextureMod.ownedDLCs) { - case Character.PONG: - foreach (string DLC in TextureMod.ownedDLCs) if (DLC == "Dice") proceed = true; - break; - case Character.KID: - foreach (string DLC in TextureMod.ownedDLCs) if (DLC == "Raptor") proceed = true; - break; - case Character.BAG: - foreach (string DLC in TextureMod.ownedDLCs) if (DLC == "Dust&Ashes") proceed = true; - break; - case Character.BOSS: - foreach (string DLC in TextureMod.ownedDLCs) if (DLC == "Doombox") proceed = true; - break; - case Character.GRAF: - foreach (string DLC in TextureMod.ownedDLCs) if (DLC == "Toxic") proceed = true; - break; - default: - proceed = false; - break; - + if (DLC == localPlayerC) + { + proceed = true; + } } if (proceed) @@ -1384,7 +1677,8 @@ private CharacterVariant GetVariantFromFileName(Character localPlayerC, string n if (cv == CharacterVariant.MODEL_ALT3) return CharacterVariant.MODEL_ALT4; else return CharacterVariant.MODEL_ALT3; } - } else + } + else { if (localPlayerC != c) return CharacterVariant.DEFAULT; else @@ -1393,7 +1687,8 @@ private CharacterVariant GetVariantFromFileName(Character localPlayerC, string n else return CharacterVariant.DEFAULT; } } - } else + } + else { if (localPlayerC != c) return CharacterVariant.DEFAULT; else @@ -1447,34 +1742,37 @@ public void MakeTextureGrayscale(Texture2D tex) } #endregion + #region Ball Effects + private void SetBallColors() + { + Color color = Color.grey; + mainBall.GetVisual("main").renderers[2].materials[0].color = color; + mainBall.SetColorOutlinesColor(color); + for (int i = 0; i < mainBall.GetVisual("main2D").meshRendererTrail.Length; i++) + { + color.a = mainBall.GetVisual("main2D").meshRendererTrail[i].material.color.a; + mainBall.GetVisual("main2D").meshRendererTrail[i].material.color = color; + } + } + #endregion + #region Dust&Ashes Effects public void AshesIngameEffects() { - if (localGamePlayerEntity != null && localTex != null) if (localGamePlayerEntity.character == Character.BAG) AssignAshesOutlineColor(localGamePlayerEntity, localTex); - else if (opponentPlayerEntity != null && opponentCustomTexture != null) if (opponentPlayerEntity.character == Character.BAG) AssignAshesOutlineColor(opponentPlayerEntity, opponentCustomTexture); + if (localGamePlayerEntity != null && localCustomSkin?.SkinTexture != null) if (localGamePlayerEntity.character == Character.BAG) AssignAshesOutlineColor(localGamePlayerEntity, localCustomSkin.SkinTexture); + else if (opponentPlayerEntity != null && opponentCustomTexture != null) if (opponentPlayerEntity.character == Character.BAG) AssignAshesOutlineColor(opponentPlayerEntity, opponentCustomTexture); } public void AssignAshesOutlineColor(PlayerEntity pe, Texture2D tex) { - Color c = new Color(1,1,1,1); - switch (pe.variant) - { - case CharacterVariant.DEFAULT: c = tex.GetPixel(58, 438); break; - case CharacterVariant.ALT0: c = tex.GetPixel(58, 438); break; - case CharacterVariant.MODEL_ALT: c = tex.GetPixel(69, 298); break; - case CharacterVariant.MODEL_ALT2: c = tex.GetPixel(69, 298); break; - case CharacterVariant.MODEL_ALT3: c = tex.GetPixel(113, 334); break; - case CharacterVariant.MODEL_ALT4: c = tex.GetPixel(113, 334); break; - } - - foreach(Renderer r in pe.skinRenderers) + foreach (Renderer r in pe.skinRenderers) { - if (r.name != "mesh1Outline" && r.name != "mesh1MetalOutline" && r.name != "mesh1TenguOutline" && r.name.Contains("Outline")) r.material.color = c; + AssignAshesOutlineColor(r, pe.variant, tex); } } - public void AssignAshesOutlineColorToRenderer(Renderer r, CharacterVariant variant, Texture2D tex) + public void AssignAshesOutlineColor(Renderer r, CharacterVariant variant, Texture2D tex) { Color c = new Color(1, 1, 1, 1); switch (variant) @@ -1491,6 +1789,7 @@ public void AssignAshesOutlineColorToRenderer(Renderer r, CharacterVariant varia } #endregion + #region Candyman Effects public void CandymanIngameEffects() { @@ -1498,7 +1797,7 @@ public void CandymanIngameEffects() { if (mainBall.GetLastPlayerHitter().character == Character.CANDY) { - if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && localTex != null) AssignSkinToCandyball(mainBall, mainBall.GetLastPlayerHitter(), localTex); + if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && localCustomSkin != null) AssignSkinToCandyball(mainBall, mainBall.GetLastPlayerHitter(), localCustomSkin.SkinTexture); else if (mainBall.GetLastPlayerHitter() == opponentPlayerEntity && opponentCustomTexture != null) AssignSkinToCandyball(mainBall, mainBall.GetLastPlayerHitter(), opponentCustomTexture); else AssignSkinToCandyball(mainBall, mainBall.GetLastPlayerHitter(), null); } @@ -1511,81 +1810,111 @@ public void AssignSkinToCandyball(BallEntity ball, PlayerEntity pe, Texture2D te { if (tex == null) { - VisualEntity pve = pe.gameObject.GetComponent(); - tex = (Texture2D)pve.skinRenderers.First().material.mainTexture; + tex = (Texture2D)pe.skinRenderers.First().material.mainTexture; } - VisualEntity ve = ball.gameObject.GetComponentInChildren(); - foreach (Renderer r in ve.skinRenderers) - { - if (r.name == "mesh001_MainRenderer" || r.name == "mesh001Strait_MainRenderer") - { - r.material.mainTexture = tex; - } - } + ball.GetVisual($"candyBall{(int)pe.variant}Visual").mainRenderer.material.mainTexture = tex; } + int lastCandyBallPlayerIndex = -1; public void AssignSkinColorToCandySplash() { - VisualEntity[] ves = FindObjectsOfType(); - foreach (VisualEntity v in ves) + EffectEntity[] effects = FindObjectsOfType(); + if (mainBall.ballData.ballState == BallState.CANDYBALL) { - if (v.name == "candySplash") + lastCandyBallPlayerIndex = mainBall.GetLastPlayerHitter().playerIndex; + } + + if (effects != null) + { + for (int i = 0; i < effects.Length; i++) { - Texture2D tex = null; - CandyPlayer[] cps = FindObjectsOfType(); - foreach(CandyPlayer cp in cps) + EffectEntity effect = effects[i]; + + if (effect.name == "candySplash") { - if (cp.player.CJFLMDNNMIE == localGamePlayerEntity.player.CJFLMDNNMIE && localTex != null) - { - if (localGamePlayerEntity.GetCurrentAbilityState().name.Contains("CROUCH") && (localGamePlayerEntity.moveableData.onLeftWallApprox || localGamePlayerEntity.moveableData.onRightWallApprox) && !localGamePlayerEntity.moveableData.velocity.HCBCKAHGJCA(IBGCBLLKIHA.DBOMOJGKIFI)) tex = localTex; - if (mainBall.ballData.ballState == BallState.CANDYBALL && mainBall.GetLastPlayerHitter() == localGamePlayerEntity) tex = localTex; - } + Texture2D tex = CheckPlayerOrMainBallSplashEffect(localGamePlayerEntity, effect, localCustomSkin.SkinTexture) ?? CheckPlayerOrMainBallSplashEffect(opponentPlayerEntity, effect, opponentCustomTexture) ?? null; - if (opponentPlayerEntity != null && opponentCustomTexture != null && tex == null) + if (tex != null) { - if (cp.player.CJFLMDNNMIE == opponentPlayerEntity.player.CJFLMDNNMIE && opponentCustomTexture != null) + SetCandySplashEffect(effects[i], tex); + for (int j = 0; j < effects.Length; j++) { - if ((opponentPlayerEntity.moveableData.onLeftWallApprox || opponentPlayerEntity.moveableData.onRightWallApprox) && !opponentPlayerEntity.moveableData.velocity.HCBCKAHGJCA(IBGCBLLKIHA.DBOMOJGKIFI)) tex = opponentCustomTexture; - if (mainBall.ballData.ballState == BallState.CANDYBALL && mainBall.GetLastPlayerHitter() == opponentPlayerEntity) tex = opponentCustomTexture; + //Searches for the intiial candySplash and sets it to custom texture + if (effects[j].effectData.graphicName == "candySplash" && effects[j].effectData.active) + { + SetCandySplashEffect(effects[j], tex); + } } } } - Renderer[] rs = v.GetComponentsInChildren(); - foreach (var r in rs) - { - r.material.mainTexture = candySplashWhite; - r.material.color = tex.GetPixel(103, 473); - v.name = "candySplashModified"; - } } } } #endregion + + Texture2D CheckPlayerOrMainBallSplashEffect(PlayerEntity playerEntity, EffectEntity effect, Texture2D characterTex) + { + if (playerEntity?.character == Character.CANDY && characterTex != null) + { + bool playerNearEffect = HHBCPNCDNDH.HPLPMEAOJPM(IBGCBLLKIHA.FCKBPDNEAOG(playerEntity.GetPosition(), effect.GetPosition()).KEMFCABCHLO, HHBCPNCDNDH.NKKIFJJEPOL(0.2m)); + bool ballNearEffect = HHBCPNCDNDH.HPLPMEAOJPM(IBGCBLLKIHA.FCKBPDNEAOG(mainBall.GetPosition(), effect.GetPosition()).KEMFCABCHLO, HHBCPNCDNDH.NKKIFJJEPOL(0.6m)); + if (playerNearEffect && !playerEntity.moveableData.velocity.HCBCKAHGJCA(IBGCBLLKIHA.DBOMOJGKIFI) && playerEntity.abilityData.abilityState.Contains("CROUCH")) + { + return characterTex; + } + else if (ballNearEffect && lastCandyBallPlayerIndex == playerEntity.playerIndex) + { + return characterTex; + } + } + return null; + } + + void SetCandySplashEffect(EffectEntity effect, Texture2D tex) + { + Renderer r = effect.GetVisual("main").mainRenderer; + r.material.mainTexture = candySplashWhite; + r.material.color = (localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT3 || localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT4) ? tex.GetPixel(130, 92) : tex.GetPixel(103, 473); + effect.name = "candySplashModified"; + } + #region Grid effects public void GridIngameEffects() { - if (mainBall.ballData.hitstunState == HitstunState.TELEPORT_STUN || mainBall.ballData.hitstunState == HitstunState.BUNT_STUN) + if (mainBall?.ballData.hitstunState == HitstunState.TELEPORT_STUN || mainBall?.ballData.hitstunState == HitstunState.BUNT_STUN) { - if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && localTex != null) AssignGridSpecialColor(localGamePlayerEntity, localTex); - if (mainBall.GetLastPlayerHitter() == opponentPlayerEntity && opponentCustomTexture != null) AssignGridSpecialColor(opponentPlayerEntity, opponentCustomTexture); - } else + if (localGamePlayerEntity != null) + { + if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && localCustomSkin != null) AssignGridSpecialColor(localGamePlayerEntity, localCustomSkin.SkinTexture); + } + + if (opponentPlayerEntity != null) + { + if (mainBall.GetLastPlayerHitter() == opponentPlayerEntity && opponentCustomTexture != null) { AssignGridSpecialColor(opponentPlayerEntity, opponentCustomTexture); } + } + } + else { - if (localGamePlayerEntity.GetCurrentAbilityState().name.Contains("ELECTROCHARGE") && localTex != null) AssignGridSpecialColor(localGamePlayerEntity, localTex); - if (opponentPlayerEntity.GetCurrentAbilityState().name.Contains("ELECTROCHARGE") && opponentCustomTexture != null) AssignGridSpecialColor(opponentPlayerEntity, opponentCustomTexture); + if (localGamePlayerEntity != null) + { + if (localGamePlayerEntity.GetCurrentAbility()?.name.Contains("ELECTROCHARGE") != null && localCustomSkin != null) AssignGridSpecialColor(localGamePlayerEntity, localCustomSkin.SkinTexture); + } + + if (opponentPlayerEntity != null) + { + if (opponentPlayerEntity.GetCurrentAbility()?.name.Contains("ELECTROCHARGE") != null && opponentCustomTexture != null) AssignGridSpecialColor(opponentPlayerEntity, opponentCustomTexture); + } } } public void AssignGridSpecialColor(PlayerEntity pe, Texture2D tex) { - Color c = new Color(1, 1, 1, 1); - switch (pe.variant) - { - case CharacterVariant.DEFAULT: c = tex.GetPixel(451, 454); break; - case CharacterVariant.ALT0: c = tex.GetPixel(451, 454); break; - case CharacterVariant.MODEL_ALT: c = tex.GetPixel(452, 454); break; - case CharacterVariant.MODEL_ALT2: c = tex.GetPixel(452, 454); break; - } + Color pixelColor = new Color(1, 1, 1, 1); + + //Gets the pixel color from the skin texture at a certain location based on if it's a DLC skin or Normal/Model_Alt + pixelColor = (pe.variant <= CharacterVariant.MODEL_ALT2) ? tex.GetPixel(451, 454) : tex.GetPixel(442, 484); + VisualEntity[] ves = FindObjectsOfType(); foreach (VisualEntity ve in ves) @@ -1600,7 +1929,7 @@ public void AssignGridSpecialColor(PlayerEntity pe, Texture2D tex) m2.mainTexture = gridStartBG; Material[] mArray = new Material[] { m1, m2 }; r.materials = mArray; - r.materials[0].color = c; + r.materials[0].color = pixelColor; } } @@ -1609,7 +1938,7 @@ public void AssignGridSpecialColor(PlayerEntity pe, Texture2D tex) foreach (Renderer r in ve.GetComponentsInChildren()) { r.material.mainTexture = gridArrive; - r.materials[0].color = c; + r.materials[0].color = pixelColor; } } @@ -1618,70 +1947,44 @@ public void AssignGridSpecialColor(PlayerEntity pe, Texture2D tex) foreach (Renderer r in ve.GetComponentsInChildren()) { r.material.mainTexture = gridTrail; - r.materials[0].color = c; + r.materials[0].color = pixelColor; } } } } #endregion + #region Doombox Effects - public void AssignDoomBoxVisualizerColorIngame(PlayerEntity pe, Texture2D tex) + public void AssignVisualizer(PlayerEntity pe, Texture2D tex) { - Color c1 = tex.GetPixel(493, 510); - Color c2 = tex.GetPixel(508, 510); - FNDGCLEDHAD visualizer = pe.GetVisual("main").mainRenderer.gameObject.GetComponent(); - Material vismat = visualizer.FHAMOPAJHNJ; - vismat.SetColor("_AmpColor0", c1); - vismat.SetColor("_AmpColor1", c2); + AssignVisualizer(pe.character, pe.GetVisual("main").mainRenderer, tex); } - public void AssignDoomBoxVisualizerColorToRenderer(Renderer r, Texture2D tex) + void AssignVisualizer(Character character, Renderer r, Texture2D tex) { - if (r.gameObject.GetComponent() != null) + FNDGCLEDHAD visualizer = r.gameObject.GetComponentInParent(); + if (visualizer != null && tex != null) { - Color c1 = tex.GetPixel(493, 510); - Color c2 = tex.GetPixel(508, 510); - FNDGCLEDHAD visualizer = r.gameObject.GetComponent(); + Color c1 = character == Character.BOSS ? tex.GetPixel(493, 510) : tex.GetPixel(82, 10); + Color c2 = character == Character.BOSS ? tex.GetPixel(508, 510) : tex.GetPixel(96, 10); Material vismat = visualizer.FHAMOPAJHNJ; - vismat.SetColor("_AmpColor0", c1); - vismat.SetColor("_AmpColor1", c2); + try + { + vismat.mainTexture = tex; + vismat.SetColor("_AmpColor0", c1); + vismat.SetColor("_AmpColor1", c2); + } + catch { Debug.Log($"Visulizer Broke for a moment and I don't know why ``\\_(-.-)_/``"); } } } - public void AssignOmegaDoomboxSmearsAndArmsIngame(PlayerEntity pe, Texture2D tex) + public void AssignOmegaDoomboxSmearsAndArms(PlayerEntity pe, Texture2D tex) { - - Color arm1 = tex.GetPixel(28, 336); - Color arm2 = tex.GetPixel(28, 325); - - Color bright1 = tex.GetPixel(113, 336); - Color bright2 = tex.GetPixel(113, 325); - - Color alpha = tex.GetPixel(178, 332); - - VisualEntity ve = pe.gameObject.GetComponent(); - if (ve != null) - { - if (ve.skinRenderers.Count > 0) - { - foreach (Renderer r in ve.skinRenderers) - { - foreach (Material m in r.materials) - { - if (m.name.Contains("bossOmegaGlassMat") || m.name.Contains("bossOmegaEffectMat")) - { - m.SetColor("_LitColor", new Color(arm1.r, arm1.g, arm1.b, bright1.r)); - m.SetColor("_ShadowColor", new Color(arm2.r, arm2.g, arm2.b, bright2.r)); - m.SetFloat("_Transparency", alpha.r); - } - } - } - } - } + AssignOmegaDoomboxSmearsAndArms(pe.GetVisual("main").mainRenderer, tex); } - public void AssignOmegaDoomboxSmearsAndArmsToRenderer(Renderer r, Texture2D tex) + public void AssignOmegaDoomboxSmearsAndArms(Renderer r, Texture2D tex) { Color arm1 = tex.GetPixel(28, 336); Color arm2 = tex.GetPixel(28, 325); @@ -1695,6 +1998,7 @@ public void AssignOmegaDoomboxSmearsAndArmsToRenderer(Renderer r, Texture2D tex) { if (m.name.Contains("bossOmegaGlassMat") || m.name.Contains("bossOmegaEffectMat")) { + m.SetTexture("_MainTex", tex); m.SetColor("_LitColor", new Color(arm1.r, arm1.g, arm1.b, bright1.r)); m.SetColor("_ShadowColor", new Color(arm2.r, arm2.g, arm2.b, bright2.r)); m.SetFloat("_Transparency", alpha.r); @@ -1702,52 +2006,28 @@ public void AssignOmegaDoomboxSmearsAndArmsToRenderer(Renderer r, Texture2D tex) } } #endregion + #region Toxic Effects public void ToxicIngameEffects() { - if (localGamePlayerEntity != null && localTex != null) if (localGamePlayerEntity.character == Character.GRAF && localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT2 || localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT3) AssignNurseToxicCanistersIngame(localGamePlayerEntity, localTex); - else if (opponentPlayerEntity != null && opponentCustomTexture != null) if (opponentPlayerEntity.character == Character.GRAF && opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT2 || opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT3) AssignNurseToxicCanistersIngame(opponentPlayerEntity, opponentCustomTexture); - } - - public void AssignNurseToxicCanistersIngame(PlayerEntity pe, Texture2D tex) - { - - Color light = tex.GetPixel(158, 414); - Color shad = tex.GetPixel(158, 406); - - Color bright1 = tex.GetPixel(158, 397); - Color bright2 = tex.GetPixel(158, 389); - - Color alpha = tex.GetPixel(158, 380); - - VisualEntity ve = pe.gameObject.GetComponent(); - if (ve != null) + if (localGamePlayerEntity != null && localCustomSkin != null) { - if (ve.skinRenderers.Count > 0) - { - foreach (Renderer r in ve.skinRenderers) - { - if (r.name == "meshNurse_MainRenderer") - { - foreach (Material m in r.materials) - { - if (m.name.Contains("grafNurseGlassMat")) - { - m.SetColor("_LitColor", new Color(light.r, light.g, light.b, bright1.r)); - m.SetColor("_ShadowColor", new Color(shad.r, shad.b, shad.g, bright2.r)); - m.SetFloat("_Transparency", alpha.r); - } - } - } - } - } + if (localGamePlayerEntity.character == Character.GRAF && localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT3 || localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT4) AssignNurseToxicCanisters(localGamePlayerEntity, localCustomSkin.SkinTexture); + } + if (opponentPlayerEntity != null && opponentCustomTexture != null) + { + if (opponentPlayerEntity.character == Character.GRAF && opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT3 || opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT4) AssignNurseToxicCanisters(opponentPlayerEntity, opponentCustomTexture); } } - public void AssignNurseToxicCanistersToRenderer(Renderer r, Texture2D tex) + public void AssignNurseToxicCanisters(PlayerEntity pe, Texture2D tex) { + AssignNurseToxicCanisters(pe.GetVisual("main").mainRenderer, tex); + } + public void AssignNurseToxicCanisters(Renderer r, Texture2D tex) + { Color light = tex.GetPixel(158, 414); Color shad = tex.GetPixel(158, 406); @@ -1758,14 +2038,14 @@ public void AssignNurseToxicCanistersToRenderer(Renderer r, Texture2D tex) foreach (Material m in r.materials) { - if (m.name.Contains("grafNurseGlassMat")) + if (m.name.Contains("grafNurseGlass")) { + m.SetTexture("_MainTex", tex); m.SetColor("_LitColor", new Color(light.r, light.g, light.b, bright1.r)); - m.SetColor("_ShadowColor", new Color(shad.r, shad.b, shad.g, bright2.r)); + m.SetColor("_ShadowColor", new Color(shad.r, shad.g, shad.b, bright2.r)); m.SetFloat("_Transparency", alpha.r); } } - } public void AssignToxicEffectColors(int playerId, Texture2D tex, CharacterVariant cv) @@ -1778,28 +2058,70 @@ public void AssignToxicEffectColors(int playerId, Texture2D tex, CharacterVarian Color32 c = tex.GetPixel(258, 345); c.a = byte.MaxValue; toxic.GetVisual("paintBlobVisual").mainRenderer.material.color = c; - switch (cv) - { - case CharacterVariant.DEFAULT: toxic.outfitEffectColors[0] = c; break; - case CharacterVariant.ALT0: toxic.outfitEffectColors[1] = c; break; - case CharacterVariant.MODEL_ALT: toxic.outfitEffectColors[9] = c; break; - case CharacterVariant.MODEL_ALT2: toxic.outfitEffectColors[10] = c; break; - } + toxic.outfitEffectColors[(int)cv] = c; } } } #endregion + #region Jet Effects - public void JetIngameEffects() + public void JetIngameEffects(Texture2D skinTexture) + { + if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && skinTexture != null) AssignBubbleVisual(localGamePlayerEntity.variant, skinTexture); + if (mainBall.GetLastPlayerHitter() == opponentPlayerEntity && opponentCustomTexture != null) AssignBubbleVisual(opponentPlayerEntity.variant, opponentCustomTexture); + + if (localGamePlayerEntity != null && skinTexture != null) + { + if (localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT || localGamePlayerEntity.variant == CharacterVariant.MODEL_ALT2) AssignJetScubaVisor(localGamePlayerEntity, skinTexture); + } + + if (opponentPlayerEntity != null && opponentCustomTexture != null) + { + if (opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT || opponentPlayerEntity.variant == CharacterVariant.MODEL_ALT2) AssignJetScubaVisor(opponentPlayerEntity, opponentCustomTexture); + } + } + public void AssignJetScubaVisor(PlayerEntity pe, Texture2D tex) + { + AssignJetScubaVisor(pe.GetVisual("main").mainRenderer, tex); + } + + public void AssignJetScubaVisor(Renderer r, Texture2D tex) { - if (mainBall.GetLastPlayerHitter() == localGamePlayerEntity && localTex != null) AssignBubbleVisual(localTex); - if (mainBall.GetLastPlayerHitter() == opponentPlayerEntity && opponentCustomTexture != null) AssignBubbleVisual(opponentCustomTexture); + Color light = tex.GetPixel(60, 328); + Color shad = tex.GetPixel(60, 325); + + Color transparency = tex.GetPixel(60, 322); + + foreach (Material m in r.materials) + { + if (m.name.Contains("skateScubaGlass")) + { + m.SetTexture("_MainTex", tex); + m.SetColor("_LitColor", new Color(light.r, light.g, light.b, transparency.g)); + m.SetColor("_ShadowColor", new Color(shad.r, shad.g, shad.b, transparency.b)); + m.SetFloat("_Transparency", transparency.r); + } + } } - public void AssignBubbleVisual(Texture2D tex) + public void AssignBubbleVisual(CharacterVariant variant, Texture2D tex) { + Color pixelColor = new Color(0, 1, 1); + if (variant <= CharacterVariant.ALT6) + { + pixelColor = tex.GetPixel(59, 326); + } + else if (variant == CharacterVariant.MODEL_ALT || variant == CharacterVariant.MODEL_ALT2) + { + pixelColor = tex.GetPixel(59, 306); + } + else if (variant == CharacterVariant.MODEL_ALT3 || variant == CharacterVariant.MODEL_ALT4) + { + pixelColor = tex.GetPixel(59, 388); + } + MeshRenderer[] mrs = FindObjectsOfType(); foreach (MeshRenderer mr in mrs) { @@ -1811,7 +2133,7 @@ public void AssignBubbleVisual(Texture2D tex) m2.mainTexture = bubbleFG; Material[] mArray = new Material[] { m1, m2 }; mr.materials = mArray; - mr.materials[0].color = tex.GetPixel(59, 326); break; + mr.materials[0].color = pixelColor; break; } } @@ -1828,7 +2150,7 @@ public void AssignBubbleVisual(Texture2D tex) m2.mainTexture = bubblePopBG; Material[] mArray = new Material[] { m1, m2 }; r.materials = mArray; - r.materials[1].color = tex.GetPixel(59, 326); break; + r.materials[1].color = pixelColor; break; } } } diff --git a/TextureMod/TextureHelper.cs b/TextureMod/TextureHelper.cs index f543fec..5be11d2 100644 --- a/TextureMod/TextureHelper.cs +++ b/TextureMod/TextureHelper.cs @@ -1,48 +1,60 @@ using System; using System.Collections.Generic; -using System.Linq; +using System.IO; using System.Text; -using System.Threading.Tasks; using UnityEngine; -using System.IO; namespace TextureMod { class TextureHelper { - public static Texture2D LoadPNG(string _path, string _fileName) //Loads a png from a file and returns it (Loads the asset into memory, do only load it once) + public static Texture2D LoadPNG(string _path, string _fileName = "") //Loads a png from a file and returns it (Loads the asset into memory, do only load it once) { - if (!File.Exists(_path + _fileName)) + var fullPath = _path + _fileName; + if (!File.Exists(fullPath)) { - Debug.Log("Could not find " + _path + _fileName); + Debug.Log("Could not find " + fullPath); return null; } - Texture2D tex = null; - byte[] fileData; - fileData = File.ReadAllBytes(_path + _fileName); - tex = new Texture2D(2, 2); - tex.LoadImage(fileData); //This resizes the texture width and height + byte[] spriteBytes; + using (var fileStream = File.OpenRead(fullPath)) + using (var reader = new BinaryReader(fileStream)) + { + var png = PNGTools.ReadPNGFile(reader); + for (int i = png.chunks.Count - 1; i >= 0; i--) + { + var c = png.chunks[i]; + if (c.type == EChunkType.gAMA || + c.type == EChunkType.pHYs || + c.type == EChunkType.sRBG) + { + png.chunks.RemoveAt(i); + } + } + using (var mem = new MemoryStream()) + { + PNGTools.WritePNGFile(png, new BinaryWriter(mem)); + spriteBytes = mem.ToArray(); + } + } - return tex; - } + string texName = Path.GetFileNameWithoutExtension(fullPath); - public static Texture2D LoadPNG(string _path) //Loads a png from a file and returns it (Loads the asset into memory, do only load it once) - { - if (!File.Exists(_path)) + Texture2D tex; + tex = new Texture2D(512, 512, TextureFormat.RGBA32, true, false) { - Debug.Log("Could not find " + _path); - return null; - } - Texture2D tex = null; - byte[] fileData; + name = texName, + filterMode = FilterMode.Trilinear, + anisoLevel = 9, + mipMapBias = -0.5f, + }; + tex.LoadImage(spriteBytes); //This resizes the texture width and height - fileData = File.ReadAllBytes(_path); - tex = new Texture2D(2, 2); - tex.LoadImage(fileData); //This resizes the texture width and height return tex; } +#if oldCode public static Texture2D ReloadSkin(Character _character, Texture2D _texture) { @@ -52,10 +64,23 @@ public static Texture2D ReloadSkin(Character _character, Texture2D _texture) string characterDirectory = ""; string skinName = ""; - foreach (string path in TL.chars) if (TL.StringToChar(Path.GetFileName(path)) == _character) characterDirectory = path; + foreach (string path in TL.chars) + { + if (TL.StringToChar(Path.GetFileName(path)) == _character) + { + characterDirectory = path; + } + } + Debug.Log("characterDirectory:" + characterDirectory); - foreach (var skin in TL.characterTextures[_character]) if (skin.Value == _texture) skinName = skin.Key; + foreach (var skin in TL.characterTextures[_character]) + { + if (skin.Value == _texture) + { + skinName = skin.Key; + } + } string oldSkinName = skinName; @@ -69,7 +94,9 @@ public static Texture2D ReloadSkin(Character _character, Texture2D _texture) { foreach (string file in Directory.GetFiles(dir)) { - if (Path.GetFileName(file) == skinName) + + Debug.Log($"File: {file} : {skinName}"); + if (Path.GetFileNameWithoutExtension(file) == skinName) { newTex = LoadPNG(file); TL.characterTextures[_character][oldSkinName] = newTex; @@ -79,7 +106,8 @@ public static Texture2D ReloadSkin(Character _character, Texture2D _texture) foreach (string file in Directory.GetFiles(characterDirectory)) { - if (Path.GetFileName(file) == skinName) + Debug.Log($"File: {file} : {skinName}"); + if (Path.GetFileNameWithoutExtension(file) == skinName) { newTex = LoadPNG(file); TL.characterTextures[_character][skinName] = newTex; @@ -89,5 +117,222 @@ public static Texture2D ReloadSkin(Character _character, Texture2D _texture) Resources.UnloadUnusedAssets(); return newTex; } +#endif + } + + public enum EChunkType : uint + { + IHDR = 0x49484452, + sRBG = 0x73524742, + gAMA = 0x67414D41, + cHRM = 0x6348524D, + pHYs = 0x70485973, + IDAT = 0x49444154, + IEND = 0x49454E44, + } + + public class PNGFile + { + public static ulong m_Signature = 0x89504E470D0A1A0AU; // + public ulong Signature; + public List chunks; + public int FindChunk(EChunkType aType, int aStartIndex = 0) + { + if (chunks == null) + return -1; + for (int i = aStartIndex; i < chunks.Count; i++) + { + if (chunks[i].type == aType) + return i; + } + return -1; + } + } + + public class PNGChunk + { + public uint length; + public EChunkType type; + public byte[] data; + public uint crc; + public uint CalcCRC() + { + var crc = PNGTools.UpdateCRC(0xFFFFFFFF, (uint)type); + crc = PNGTools.UpdateCRC(crc, data); + return crc ^ 0xFFFFFFFF; + } + } + + public class PNGTools + { + static uint[] crc_table = new uint[256]; + static PNGTools() + { + for (int n = 0; n < 256; n++) + { + uint c = (uint)n; + for (int k = 0; k < 8; k++) + { + if ((c & 1) > 0) + c = 0xedb88320 ^ (c >> 1); + else + c = c >> 1; + } + crc_table[n] = c; + } + } + + public static uint UpdateCRC(uint crc, byte aData) + { + return crc_table[(crc ^ aData) & 0xff] ^ (crc >> 8); + } + + public static uint UpdateCRC(uint crc, uint aData) + { + crc = crc_table[(crc ^ ((aData >> 24) & 0xFF)) & 0xff] ^ (crc >> 8); + crc = crc_table[(crc ^ ((aData >> 16) & 0xFF)) & 0xff] ^ (crc >> 8); + crc = crc_table[(crc ^ ((aData >> 8) & 0xFF)) & 0xff] ^ (crc >> 8); + crc = crc_table[(crc ^ (aData & 0xFF)) & 0xff] ^ (crc >> 8); + return crc; + } + + + public static uint UpdateCRC(uint crc, byte[] buf) + { + for (int n = 0; n < buf.Length; n++) + crc = crc_table[(crc ^ buf[n]) & 0xff] ^ (crc >> 8); + return crc; + } + + public static uint CalculateCRC(byte[] aBuf) + { + return UpdateCRC(0xffffffff, aBuf) ^ 0xffffffff; + } + public static List ReadChunks(BinaryReader aReader) + { + var res = new List(); + while (aReader.BaseStream.Position < aReader.BaseStream.Length - 4) + { + var chunk = new PNGChunk(); + chunk.length = BinaryReaderWriterExt.ReadUInt32BE(aReader); + if (aReader.BaseStream.Position >= aReader.BaseStream.Length - 4 - chunk.length) + break; + res.Add(chunk); + chunk.type = (EChunkType)BinaryReaderWriterExt.ReadUInt32BE(aReader); + chunk.data = aReader.ReadBytes((int)chunk.length); + chunk.crc = BinaryReaderWriterExt.ReadUInt32BE(aReader); + + uint crc = chunk.CalcCRC(); + + if ((chunk.crc ^ crc) != 0) + Debug.Log("Chunk CRC wrong. Got 0x" + chunk.crc.ToString("X8") + " expected 0x" + crc.ToString("X8")); + if (chunk.type == EChunkType.IEND) + break; + } + return res; + } + + public static PNGFile ReadPNGFile(BinaryReader aReader) + { + if (aReader == null || aReader.BaseStream.Position >= aReader.BaseStream.Length - 8) + return null; + var file = new PNGFile(); + file.Signature = BinaryReaderWriterExt.ReadUInt64BE(aReader); + file.chunks = ReadChunks(aReader); + return file; + } + public static void WritePNGFile(PNGFile aFile, BinaryWriter aWriter) + { + BinaryReaderWriterExt.WriteUInt64BE(aWriter,PNGFile.m_Signature); + foreach (var chunk in aFile.chunks) + { + BinaryReaderWriterExt.WriteUInt32BE(aWriter,(uint)chunk.data.Length); + BinaryReaderWriterExt.WriteUInt32BE(aWriter,(uint)chunk.type); + aWriter.Write(chunk.data); + BinaryReaderWriterExt.WriteUInt32BE(aWriter,chunk.crc); + } + } + + public static void SetPPM(PNGFile aFile, uint aXPPM, uint aYPPM) + { + int pos = aFile.FindChunk(EChunkType.pHYs); + PNGChunk chunk; + if (pos > 0) + { + chunk = aFile.chunks[pos]; + if (chunk.data == null || chunk.data.Length < 9) + throw new System.Exception("PNG: pHYs chunk data size is too small. It should be at least 9 bytes"); + } + else + { + chunk = new PNGChunk(); + chunk.type = EChunkType.pHYs; + chunk.length = 9; + chunk.data = new byte[9]; + aFile.chunks.Insert(1, chunk); + } + var data = chunk.data; + data[0] = (byte)((aXPPM >> 24) & 0xFF); + data[1] = (byte)((aXPPM >> 16) & 0xFF); + data[2] = (byte)((aXPPM >> 8) & 0xFF); + data[3] = (byte)((aXPPM) & 0xFF); + + data[4] = (byte)((aYPPM >> 24) & 0xFF); + data[5] = (byte)((aYPPM >> 16) & 0xFF); + data[6] = (byte)((aYPPM >> 8) & 0xFF); + data[7] = (byte)((aYPPM) & 0xFF); + + data[8] = 1; + chunk.crc = chunk.CalcCRC(); + } + + public static byte[] ChangePPM(byte[] aPNGData, uint aXPPM, uint aYPPM) + { + PNGFile file; + using (var stream = new MemoryStream(aPNGData)) + using (var reader = new BinaryReader(stream)) + { + file = ReadPNGFile(reader); + } + SetPPM(file, aXPPM, aYPPM); + using (var stream = new MemoryStream()) + using (var writer = new BinaryWriter(stream)) + { + WritePNGFile(file, writer); + return stream.ToArray(); + } + } + public static byte[] ChangePPI(byte[] aPNGData, float aXPPI, float aYPPI) + { + return ChangePPM(aPNGData, (uint)(aXPPI * 39.3701f), (uint)(aYPPI * 39.3701f)); + } + } + + public static class BinaryReaderWriterExt + { + public static uint ReadUInt32BE(BinaryReader aReader) + { + return ((uint)aReader.ReadByte() << 24) | ((uint)aReader.ReadByte() << 16) + | ((uint)aReader.ReadByte() << 8) | ((uint)aReader.ReadByte()); + } + + public static ulong ReadUInt64BE(BinaryReader aReader) + { + return (ulong)ReadUInt32BE(aReader) << 32 | ReadUInt32BE(aReader); + } + + public static void WriteUInt32BE(BinaryWriter aWriter, uint aValue) + { + aWriter.Write((byte)((aValue >> 24) & 0xFF)); + aWriter.Write((byte)((aValue >> 16) & 0xFF)); + aWriter.Write((byte)((aValue >> 8) & 0xFF)); + aWriter.Write((byte)((aValue) & 0xFF)); + } + + public static void WriteUInt64BE(BinaryWriter aWriter, ulong aValue) + { + WriteUInt32BE(aWriter,(uint)(aValue >> 32)); + WriteUInt32BE(aWriter, (uint)(aValue)); + } } -} +} \ No newline at end of file diff --git a/TextureMod/TextureLoader.cs b/TextureMod/TextureLoader.cs index f77dccc..5f4f35f 100644 --- a/TextureMod/TextureLoader.cs +++ b/TextureMod/TextureLoader.cs @@ -1,7 +1,9 @@ -using LLScreen; +using LLHandlers; +using LLScreen; +using System; using System.Collections.Generic; using System.IO; -using System.Linq; +using System.Text.RegularExpressions; using UnityEngine; @@ -9,9 +11,11 @@ namespace TextureMod { public class TextureLoader : MonoBehaviour { - private static string resourceFolder = Application.dataPath.Replace("/", @"\") + @"\Managed\TextureModResources\Images\Characters\"; - public List chars = new List(); - public Dictionary> characterTextures = new Dictionary>(); + private readonly string resourceFolder = Application.dataPath.Replace("/", @"\") + @"\Managed\TextureModResources\Images\Characters\"; + public List chars; + //public Dictionary> characterTextures = new Dictionary>(); + public Dictionary> newCharacterTextures = new Dictionary>(); + Regex regex = new Regex(@"((_ALT\d?$)|(^\d+#))"); public bool loadingExternalFiles = true; public bool hasCactuar = false; @@ -21,82 +25,117 @@ private void Start() LoadLibrary(); } - public void LoadLibrary() + private List GetCharacterFolders() { - chars.Clear(); - Resources.UnloadUnusedAssets(); - characterTextures.Clear(); + return new List(Directory.GetDirectories(resourceFolder.Replace("/", @"\"))); + } - foreach (string path in Directory.GetDirectories(resourceFolder.Replace("/", @"\"))) + public void ReloadChacterSpecificSkins(Character character) + { + List characterSkins = newCharacterTextures[character]; + for (int i = 0; i < characterSkins.Count - 1; i++) { - chars.Add(path); + characterSkins[i].ReloadSkin(); } + } - foreach (string character in chars) + public void LoadLibrary() + { + try { - Dictionary skins = new Dictionary(); - foreach (string dir in Directory.GetDirectories(character)) + chars?.Clear(); + Resources.UnloadUnusedAssets(); + newCharacterTextures.Clear(); + + chars = GetCharacterFolders(); + + foreach (string characterFolder in chars) { - foreach (string file in Directory.GetFiles(dir)) + int indexer = 0; + List customSkins = new List(); + Character character = StringToChar(Path.GetFileName(characterFolder)); + bool hasDLC = CheckHasDLCForCharacter(character); + + foreach (string file in Directory.GetFiles(characterFolder, "*.png", SearchOption.TopDirectoryOnly)) { - string cleanfile = Path.GetFileName(file); - if (cleanfile.Contains("#")) + ModelVariant modelVariant = ModelVariantFromFile(file); + if (modelVariant == ModelVariant.DLC && hasDLC == false) { - List charsFile = cleanfile.ToCharArray().ToList(); - for (var i = 0; i < charsFile.Count; i++) - { - if (charsFile[0] != '#') charsFile.RemoveAt(0); - else - { - charsFile.RemoveAt(0); - break; - } - } - cleanfile = new string(charsFile.ToArray()); + continue; } - - string cleanDir = Path.GetFileName(dir); - if (cleanDir.Contains("#")) - { - List charsDir = cleanDir.ToCharArray().ToList(); - for (var i = 0; i < charsDir.Count; i++) - { - if (charsDir[0] != '#') charsDir.RemoveAt(0); - else - { - charsDir.RemoveAt(0); - break; - } - } - cleanDir = new string(charsDir.ToArray()); - } - - skins.Add(cleanfile + " by " + cleanDir, TextureHelper.LoadPNG(file)); + string cleanName = Path.GetFileNameWithoutExtension(file); + cleanName = regex.Replace(cleanName, m => { return ""; }); + customSkins.Add(new CustomSkin(indexer, character, (CustomSkin.VariantType)modelVariant, cleanName, "", file)); + indexer++; } - } - foreach (string file in Directory.GetFiles(character)) - { - string cleanfile = Path.GetFileName(file); - if (cleanfile.Contains("#")) + + foreach (string dir in Directory.GetDirectories(characterFolder)) { - List charsFile = cleanfile.ToCharArray().ToList(); - for (var i = 0; i < charsFile.Count; i++) + string authorName = Path.GetFileName(dir); + authorName = regex.Replace(authorName, m => { return ""; }); + + foreach (string file in Directory.GetFiles(dir, "*.png", SearchOption.TopDirectoryOnly)) { - if (charsFile[0] != '#') charsFile.RemoveAt(0); - else + ModelVariant modelVariant = ModelVariantFromFile(file); + if (modelVariant == ModelVariant.DLC && hasDLC == false) { - charsFile.RemoveAt(0); - break; + continue; } + + string cleanName = Path.GetFileNameWithoutExtension(file); + cleanName = regex.Replace(cleanName, m => { return ""; }); + customSkins.Add(new CustomSkin(indexer, character, (CustomSkin.VariantType)modelVariant, cleanName, authorName, file)); + indexer++; } - cleanfile = new string(charsFile.ToArray()); } - skins.Add(cleanfile, TextureHelper.LoadPNG(file)); + + newCharacterTextures.Add(character, customSkins); } - characterTextures.Add(StringToChar(Path.GetFileName(character)), skins); + + UIScreen.SetLoadingScreen(false); + loadingExternalFiles = false; + } + catch (Exception e) + { + TextureMod.loadingText = $"TextureMod failed to load textures"; + Debug.Log($"{e}"); + throw; + } + } + + bool CheckHasDLCForCharacter(Character character) + { + foreach (Character DLC in TextureMod.ownedDLCs) + { + if (DLC == character) + { + return true; + } + } + return false; + } + + public enum ModelVariant + { + None, + Default, + Alternative, + DLC, + } + + ModelVariant ModelVariantFromFile(string path) + { + string fileName = Path.GetFileNameWithoutExtension(path); + + if (fileName.Contains("_ALT2")) + { + return ModelVariant.DLC; + } + else if (fileName.Contains("_ALT")) + { + return ModelVariant.Alternative; } - UIScreen.SetLoadingScreen(false); - loadingExternalFiles = false; + else return ModelVariant.Default; } public Character StringToChar(string charString) diff --git a/TextureMod/TextureMod.cs b/TextureMod/TextureMod.cs index 38b355d..b02d2b0 100644 --- a/TextureMod/TextureMod.cs +++ b/TextureMod/TextureMod.cs @@ -1,21 +1,26 @@ -using System; -using UnityEngine; -using LLScreen; -using LLHandlers; +using LLHandlers; using LLModMenu; +using LLScreen; using Multiplayer; -using System.Collections.Generic; using Steamworks; +using System; +using System.Collections.Generic; +using UnityEngine; namespace TextureMod { public class TextureMod : MonoBehaviour { - private static TextureMod instance = null; - public static TextureMod Instance { get { return instance; } } - public static void Initialize() { GameObject gameObject = new GameObject("TextureMod"); TextureMod modscript = gameObject.AddComponent(); DontDestroyOnLoad(gameObject); instance = modscript; } - private const string modVersion = "v1.4.0"; - private const string repositoryOwner = "MrGentle"; + public static TextureMod Instance { get; private set; } + public static void Initialize() + { + GameObject gameObject = new GameObject("TextureMod", typeof(TextureMod)); + Instance = gameObject.GetComponent(); + DontDestroyOnLoad(gameObject); + } + + private const string modVersion = "1.4.9"; + private const string repositoryOwner = "Daioutzu"; private const string repositoryName = "LLBMM-TextureMod"; public string debug = ""; @@ -29,8 +34,9 @@ public class TextureMod : MonoBehaviour public EffectChanger effectChanger = null; public ShowcaseStudio showcaseStudio = null; - public static List ownedDLCs = new List(); + public static List ownedDLCs = new List(); public static bool hasDLC = false; + public static string loadingText = $"TextureMod is loading External Textures..."; private void Start() { @@ -46,11 +52,10 @@ private void Update() if (tc == null) { tc = gameObject.AddComponent(); } if (ec == null) { ec = gameObject.AddComponent(); } if (md == null) { md = gameObject.AddComponent(); } - if (effectChanger == null) {effectChanger = gameObject.AddComponent(); } + if (effectChanger == null) { effectChanger = gameObject.AddComponent(); } if (showcaseStudio == null) showcaseStudio = gameObject.AddComponent(); } - private void OnGUI() { var OriginalColor = GUI.contentColor; @@ -61,10 +66,11 @@ private void OnGUI() GUI.skin.label.fontSize = 50; if ((tl == null) || UIScreen.loadingScreenActive && tl.loadingExternalFiles == true) { + GUIStyle label = new GUIStyle(GUI.skin.label); var sX = Screen.width / 2; var sY = UIScreen.GetResolutionFromConfig().height / 3; GUI.skin.label.alignment = TextAnchor.MiddleCenter; - GUI.Label(new Rect(0, sY+50, Screen.width, sY), "TextureMod is loading External Textures"); + GUI.Label(new Rect(0, sY + 50, Screen.width, sY), loadingText); GUI.skin.label.alignment = TextAnchor.MiddleLeft; } GUI.contentColor = OriginalColor; @@ -76,11 +82,18 @@ private void OnGUI() private void CheckIfPLayerHasDLC() { - if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1244880))) ownedDLCs.Add("Dice"); - if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1204070))) ownedDLCs.Add("Raptor"); - if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1174410))) ownedDLCs.Add("Dust&Ashes"); - if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(991870))) ownedDLCs.Add("Doombox"); - if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1269880))) ownedDLCs.Add("Toxic"); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1244880))) ownedDLCs.Add(Character.PONG); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1204070))) ownedDLCs.Add(Character.KID); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1174410))) ownedDLCs.Add(Character.BAG); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(991870)) || AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1399791))) ownedDLCs.Add(Character.BOSS); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1269880))) ownedDLCs.Add(Character.GRAF); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431710))) ownedDLCs.Add(Character.CROC); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431701))) ownedDLCs.Add(Character.ELECTRO); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431702))) ownedDLCs.Add(Character.ROBOT); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1399790))) ownedDLCs.Add(Character.BOOM); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431711))) ownedDLCs.Add(Character.SKATE); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431712))) ownedDLCs.Add(Character.CANDY); + if (AALLGKBNLBO.OEBMADMCBAE(new AppId_t(1431700))) ownedDLCs.Add(Character.COP); } } } diff --git a/TextureMod/TextureMod.csproj b/TextureMod/TextureMod.csproj index 73f724c..c3fa46e 100644 --- a/TextureMod/TextureMod.csproj +++ b/TextureMod/TextureMod.csproj @@ -12,6 +12,7 @@ v4.5 512 true + true @@ -21,6 +22,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -29,285 +31,352 @@ TRACE prompt 4 + false False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Assembly-CSharp.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Assembly-CSharp.dll + + + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Assembly-CSharp-firstpass.dll False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\ModMenu.dll - - - ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\ModMenu.dll False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Rewired_Core.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Rewired_Core.dll - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Rewired_Windows_Lib.dll + + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\Rewired_Windows.dll - - - - - False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\TextMeshPro.dll - - - False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\TextMeshPro.dll False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AccessibilityModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AccessibilityModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AIModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AIModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AnimationModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AnimationModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ARModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ARModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AssetBundleModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AssetBundleModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AudioModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.AudioModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.BaselibModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.BaselibModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClothModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClothModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClusterInputModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClusterInputModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClusterRendererModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ClusterRendererModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.CoreModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.CoreModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.CrashReportingModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.CrashReportingModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.DirectorModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.DirectorModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.FileSystemHttpModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.FileSystemHttpModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.GameCenterModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.GameCenterModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.GridModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.GridModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.HotReloadModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.HotReloadModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ImageConversionModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ImageConversionModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.IMGUIModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.IMGUIModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.InputModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.InputModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.JSONSerializeModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.JSONSerializeModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.LocalizationModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.LocalizationModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Networking.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Networking.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ParticleSystemModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ParticleSystemModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.PerformanceReportingModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.PerformanceReportingModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Physics2DModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Physics2DModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.PhysicsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.PhysicsModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ProfilerModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ProfilerModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ScreenCaptureModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.ScreenCaptureModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SharedInternalsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SharedInternalsModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpatialTracking.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpatialTracking.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpriteMaskModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpriteMaskModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpriteShapeModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SpriteShapeModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.StreamingModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.StreamingModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.StyleSheetsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.StyleSheetsModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SubstanceModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.SubstanceModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TerrainModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TerrainModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TerrainPhysicsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TerrainPhysicsModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TextCoreModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TextCoreModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TextRenderingModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TextRenderingModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TilemapModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TilemapModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Timeline.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.Timeline.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TimelineModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TimelineModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TLSModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.TLSModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UI.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UI.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UIElementsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UIElementsModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UIModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UIModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UmbraModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UmbraModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UNETModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UNETModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityAnalyticsModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityAnalyticsModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityConnectModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityConnectModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityTestProtocolModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityTestProtocolModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VehiclesModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VehiclesModule.dll + False - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VFXModule.dll + + False + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VFXModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VideoModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VideoModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VRModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.VRModule.dll + False False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.WindModule.dll - - - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.XRModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.WindModule.dll + False - + False - F:\Games\SteamLibrary\steamapps\common\LLBlaze\LLBlaze_Data\Managed\XboxOneCommonImport.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed\UnityEngine.XRModule.dll + False + @@ -325,4 +394,8 @@ + + Xcopy $(TargetPath) "C:\Users\Dazer\Desktop\LLBMM 1.3.1\mods\$(ProjectName)" /y +Xcopy $(TargetPath) "C:\Program Files (x86)\Steam\steamapps\common\LLBlaze\LLBlaze_Data\Managed" /y + \ No newline at end of file diff --git a/TextureMod/app.config b/TextureMod/app.config index 8460dd4..3b1525e 100644 --- a/TextureMod/app.config +++ b/TextureMod/app.config @@ -1,11 +1,11 @@ - + - - + + - \ No newline at end of file +