diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/BepInEx5Plugins.Ash.Alisa.Cutscenes.csproj b/BepInEx5Plugins.Ash.Alisa.Cutscenes/BepInEx5Plugins.Ash.Alisa.Cutscenes.csproj new file mode 100644 index 0000000..cbd3d64 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/BepInEx5Plugins.Ash.Alisa.Cutscenes.csproj @@ -0,0 +1,33 @@ + + + + net35 + BepInEx5Plugins.Ash.Alisa.Cutscenes + Cutscenes + 1.0.0 + true + 9.0 + + + + + + + + + + + + + + + + ..\lib\SteamRelease\Assembly-CSharp.dll + false + + + + + + + diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene02_OnTriggerEnter.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene02_OnTriggerEnter.cs new file mode 100644 index 0000000..63dc457 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene02_OnTriggerEnter.cs @@ -0,0 +1,12 @@ +using HarmonyLib; +using System; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes.HarmonyPatches +{ + [HarmonyPatch(typeof(Cutscene02), "OnTriggerEnter", new Type[] { typeof(Collider) })] + public class Cutscene02_OnTriggerEnter + { + // TODO + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_2_OnTriggerEnter.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_2_OnTriggerEnter.cs new file mode 100644 index 0000000..2ea8c64 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_2_OnTriggerEnter.cs @@ -0,0 +1,12 @@ +using HarmonyLib; +using System; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes.HarmonyPatches +{ + [HarmonyPatch(typeof(Cutscene03_2), "OnTriggerEnter", new Type[] { typeof(Collider) })] + public class Cutscene03_2_OnTriggerEnter + { + // TODO + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_3_OnTriggerEnter.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_3_OnTriggerEnter.cs new file mode 100644 index 0000000..26d86da --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_3_OnTriggerEnter.cs @@ -0,0 +1,12 @@ +using HarmonyLib; +using System; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes.HarmonyPatches +{ + [HarmonyPatch(typeof(Cutscene03_3), "OnTriggerEnter", new Type[] { typeof(Collider) })] + public class Cutscene03_3_OnTriggerEnter + { + // TODO + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_OnTriggerEnter.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_OnTriggerEnter.cs new file mode 100644 index 0000000..fa34095 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/Cutscene03_OnTriggerEnter.cs @@ -0,0 +1,277 @@ +using HarmonyLib; +using System; +using System.Collections; +using System.Reflection; +using UnityEngine; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes.HarmonyPatches +{ + [HarmonyPatch(typeof(Cutscene03), "OnTriggerEnter", new Type[] { typeof(Collider) })] + public class Cutscene03_OnTriggerEnter + { + private static MethodInfo Cutscene03_StartSubtitles; + private static MethodInfo Cutscene03_Voices; + private static MethodInfo Cutscene03_WeaponReady; + + private static FieldInfo Cutscene03_readyToSkip; + private static FieldInfo Cutscene03_moveThePlayer; + + public static bool Prepare(MethodBase original) + { + if (original is null) + { + try + { + Cutscene03_StartSubtitles = typeof(Cutscene03).GetMethod("StartSubtitles", BindingFlags.NonPublic | BindingFlags.Instance); + Cutscene03_Voices = typeof(Cutscene03).GetMethod("Voices", BindingFlags.NonPublic | BindingFlags.Instance); + Cutscene03_WeaponReady = typeof(Cutscene03).GetMethod("WeaponReady", BindingFlags.NonPublic | BindingFlags.Instance); + + Cutscene03_readyToSkip = typeof(Cutscene03).GetField("readyToSkip", BindingFlags.NonPublic | BindingFlags.Instance); + Cutscene03_moveThePlayer = typeof(Cutscene03).GetField("moveThePlayer", BindingFlags.NonPublic | BindingFlags.Instance); + } + catch (Exception exception) + { + Console.WriteLine(exception); + return false; + } + } + + return true; + } + + public static bool Prefix(Cutscene03 __instance, Collider col + , ref GameObject ___player + , ref Animator ___playerAnim + , ref Animator ___puppetAnim + , ref BoxCollider ___myCollision + , ref GameObject ___interaction + , ref EquipmentMenu ___equipment + , ref WeaponControl ___weaponControl + , ref AlisaMovement ___movement + , ref Settings ___settings + , ref Canvas ___blackBarsCanvas + , ref bool ___cutsceneIsPlaying + , ref GameObject ___camera01 + , ref GameObject ___camera02 + , ref GameObject ___camera03 + , ref GameObject ___camera04 + , ref GameObject ___camera05 + , ref GameObject ___camera06 + , ref GameObject ___camera07 + , ref GameObject ___camera08 + , ref GameObject ___camera09 + , ref MusicPlayer ___musicPlayer + ) + { + if (!___cutsceneIsPlaying + && !___movement.quickTurning + && !___weaponControl.isReloading + && !___playerAnim.GetCurrentAnimatorStateInfo(0).IsTag("Swap") + && !___playerAnim.GetCurrentAnimatorStateInfo(0).IsTag("SwapHold") + && !___playerAnim.GetCurrentAnimatorStateInfo(0).IsName("Dodging") + && !___playerAnim.GetCurrentAnimatorStateInfo(0).IsName("DodgeLand") + && col.gameObject.tag == "Player") + { + __instance.StartCoroutine(PlayCutscene(__instance + , ___player + , ___playerAnim + , ___puppetAnim + , ___interaction + , ___equipment + , ___weaponControl + , ___movement + , ___blackBarsCanvas + , ___camera01 + , ___camera02 + , ___camera03 + , ___camera04 + , ___camera05 + , ___camera06 + , ___camera07 + , ___camera08 + , ___camera09 + , ___musicPlayer + , Cutscene03_WeaponReady + , Cutscene03_readyToSkip + , Cutscene03_moveThePlayer + )); + __instance.StartCoroutine((IEnumerator)Cutscene03_StartSubtitles.Invoke(__instance, null)); + + if (___settings.voice == 0) + { + __instance.StartCoroutine((IEnumerator)Cutscene03_Voices.Invoke(__instance, null)); + } + + ___myCollision.enabled = false; + ___cutsceneIsPlaying = true; + ___movement.cantMove = true; + ___movement.enabled = false; + ___weaponControl.weaponSwitched = false; + ___playerAnim.SetFloat("inputV", 0f); + ___playerAnim.SetFloat("inputH", 0f); + ___playerAnim.SetBool("sprinting", false); + } + + return false; + } + + private static IEnumerator PlayCutscene(Cutscene03 cutscene + , GameObject player + , Animator playerAnim + , Animator puppetAnim + , GameObject interaction + , EquipmentMenu equipment + , WeaponControl weaponControl + , AlisaMovement movement + , Canvas blackBarsCanvas + , GameObject camera01 + , GameObject camera02 + , GameObject camera03 + , GameObject camera04 + , GameObject camera05 + , GameObject camera06 + , GameObject camera07 + , GameObject camera08 + , GameObject camera09 + , MusicPlayer musicPlayer + , MethodInfo Cutscene03_WeaponReady + , FieldInfo Cutscene03_readyToSkip + , FieldInfo Cutscene03_moveThePlayer + ) + { + equipment.disablePauseMenu = true; + + yield return new WaitForSeconds(0.1f); + + equipment.canOpenMenu = false; + player.GetComponent().enabled = false; + interaction.GetComponent().interactionIsActive = true; + weaponControl.disabled = true; + Cutscene03_WeaponReady.Invoke(cutscene, null); + + yield return new WaitForSeconds(0.4f); + + blackBarsCanvas.GetComponentInChildren().SetBool("Fade", true); + camera01.SetActive(false); + camera02.SetActive(false); + camera03.SetActive(false); + camera04.SetActive(false); + camera05.SetActive(false); + camera06.SetActive(false); + camera07.SetActive(false); + camera08.SetActive(true); + + blackBarsCanvas.worldCamera = camera08.GetComponent(); + + player.transform.position = new Vector3(6.437f, 0.8f, -9.615f); + player.transform.rotation = Quaternion.Euler(0f, -153.666f, 0f); + puppetAnim.SetBool("Cutscene03", true); + ProgressManager.instance.data.cutscene03 = false; + + yield return new WaitForSeconds(0.2f); + + Cutscene03_readyToSkip.SetValue(cutscene, true); + + yield return new WaitForSeconds(1.5f); + + camera07.SetActive(true); + camera08.SetActive(false); + blackBarsCanvas.worldCamera = camera07.GetComponent(); + + playerAnim.SetBool("Cutscene03", true); + + yield return new WaitForSeconds(1.25f); + + camera07.SetActive(false); + camera08.SetActive(true); + blackBarsCanvas.worldCamera = camera08.GetComponent(); + + puppetAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(2.5f); + + camera07.SetActive(false); + camera08.SetActive(false); + camera09.SetActive(true); + blackBarsCanvas.worldCamera = camera09.GetComponent(); + + yield return new WaitForSeconds(0.38f); + + playerAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(1.55f); + + Cutscene03_moveThePlayer.SetValue(cutscene, true); + + yield return new WaitForSeconds(1.25f); + + musicPlayer.PlayPolThemeSong(); + + yield return new WaitForSeconds(0.3f); + + camera09.SetActive(false); + camera07.SetActive(false); + camera08.SetActive(true); + blackBarsCanvas.worldCamera = camera08.GetComponent(); + + puppetAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(0.1f); + + Cutscene03_moveThePlayer.SetValue(cutscene, false); + + yield return new WaitForSeconds(7f); + + camera07.SetActive(true); + camera08.SetActive(false); + blackBarsCanvas.worldCamera = camera07.GetComponent(); + + playerAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(7.3f); + + camera07.SetActive(false); + camera08.SetActive(true); + blackBarsCanvas.worldCamera = camera08.GetComponent(); + + puppetAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(16.85f); + + camera07.SetActive(true); + camera08.SetActive(false); + blackBarsCanvas.worldCamera = camera07.GetComponent(); + + playerAnim.SetTrigger("CutsceneNext"); + + yield return new WaitForSeconds(2.715f); + + camera07.SetActive(false); + camera08.SetActive(true); + blackBarsCanvas.worldCamera = camera08.GetComponent(); + + puppetAnim.SetTrigger("CutsceneNext"); + playerAnim.SetBool("Cutscene03", false); + puppetAnim.SetBool("Cutscene03", false); + Cutscene03_readyToSkip.SetValue(cutscene, false); + + yield return new WaitForSeconds(3.35f); + + playerAnim.SetTrigger("CutsceneNext"); + camera03.SetActive(true); + camera07.SetActive(false); + camera08.SetActive(false); + blackBarsCanvas.worldCamera = camera03.GetComponent(); + + puppetAnim.SetTrigger("CutsceneNext"); + blackBarsCanvas.GetComponentInChildren().SetBool("Fade", false); + + yield return new WaitForSeconds(0.2f); + + movement.enabled = true; + movement.cantMove = false; + player.GetComponent().enabled = true; + weaponControl.disabled = false; + } + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/LowResEffect_Update.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/LowResEffect_Update.cs new file mode 100644 index 0000000..f83d1e0 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/HarmonyPatches/LowResEffect_Update.cs @@ -0,0 +1,10 @@ +using HarmonyLib; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes.HarmonyPatches +{ + [HarmonyPatch(typeof(LowResEffect), "Update")] + public class LowResEffect_Update + { + // TODO + } +} diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.Cutscenes/NuGet.Config new file mode 100644 index 0000000..1864ded --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BepInEx5Plugins.Ash.Alisa.Cutscenes/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.Cutscenes/Plugin.cs new file mode 100644 index 0000000..1525677 --- /dev/null +++ b/BepInEx5Plugins.Ash.Alisa.Cutscenes/Plugin.cs @@ -0,0 +1,26 @@ +using BepInEx; +using HarmonyLib; +using System; + +namespace BepInEx5Plugins.Ash.Alisa.Cutscenes +{ + [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] + public class Plugin : BaseUnityPlugin + { + private void Awake() + { + try + { + Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!"); + + var harmony = new Harmony(Info.Metadata.GUID); + + harmony.PatchAll(); + } + catch (Exception exception) + { + Console.WriteLine(exception); + } + } + } +}