diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/BepInEx5Plugins.Ash.Alisa.FrameCounter.csproj b/BepInEx5Plugins.Ash.Alisa.FrameCounter/BepInEx5Plugins.Ash.Alisa.FrameCounter.csproj
new file mode 100644
index 0000000..1ef4fbc
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/BepInEx5Plugins.Ash.Alisa.FrameCounter.csproj
@@ -0,0 +1,33 @@
+
+
+
+ net35
+ BepInEx5Plugins.Ash.Alisa.FrameCounter
+ FrameCounter
+ 1.0.0
+ true
+ 9.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\lib\SteamRelease\Assembly-CSharp.dll
+ false
+
+
+
+
+
+
+
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/ExtensionMethods.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/ExtensionMethods.cs
new file mode 100644
index 0000000..901111f
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/ExtensionMethods.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter
+{
+ public static partial class ExtensionMethods
+ {
+ public static T AddComponentUnique(this GameObject instance) where T : Component
+ {
+ var t = instance.GetComponent();
+
+ if (!t)
+ {
+ t = instance.AddComponent();
+ }
+
+ return t;
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BathInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BathInteraction_Start.cs
new file mode 100644
index 0000000..b6e5752
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BathInteraction_Start.cs
@@ -0,0 +1,15 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(BathInteraction), "Start")]
+ public class BathInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(BathInteraction __instance)
+ {
+ __instance.cam01?.AddComponentUnique();
+ __instance.cam02?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BottleDialogue_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BottleDialogue_Start.cs
new file mode 100644
index 0000000..68de81d
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/BottleDialogue_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(BottleDialogue), "Start")]
+ public class BottleDialogue_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(BottleDialogue __instance)
+ {
+ __instance.myCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/CabinetteInteract_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/CabinetteInteract_Start.cs
new file mode 100644
index 0000000..c4c6583
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/CabinetteInteract_Start.cs
@@ -0,0 +1,16 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(CabinetteInteract), "Start")]
+ public class CabinetteInteract_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(CabinetteInteract __instance)
+ {
+ __instance.thePuzzleCam?.AddComponentUnique();
+ __instance.myCam?.AddComponentUnique();
+ __instance.cabinetteCam?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/ClockInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/ClockInteraction_Start.cs
new file mode 100644
index 0000000..e6c1eb1
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/ClockInteraction_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(ClockInteraction), "Start")]
+ public class ClockInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(ClockInteraction __instance)
+ {
+ __instance.clockCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DeadDollInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DeadDollInteraction_Start.cs
new file mode 100644
index 0000000..7f65610
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DeadDollInteraction_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(DeadDollInteraction), "Start")]
+ public class DeadDollInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(DeadDollInteraction __instance)
+ {
+ __instance.theCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DisplayCaseInteraction_Awake.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DisplayCaseInteraction_Awake.cs
new file mode 100644
index 0000000..452daf4
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/DisplayCaseInteraction_Awake.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(DisplayCaseInteraction), "Awake")]
+ public class DisplayCaseInteraction_Awake
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(DisplayCaseInteraction __instance)
+ {
+ __instance.theCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Drawer01Interaction_Awake.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Drawer01Interaction_Awake.cs
new file mode 100644
index 0000000..f8673a0
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Drawer01Interaction_Awake.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(Drawer01Interaction), "Awake")]
+ public class Drawer01Interaction_Awake
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(Drawer01Interaction __instance)
+ {
+ __instance.theCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericNoteInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericNoteInteraction_Start.cs
new file mode 100644
index 0000000..5c1afa4
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericNoteInteraction_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(GenericNoteInteraction), "Start")]
+ public class GenericNoteInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(GenericNoteInteraction __instance)
+ {
+ __instance.myCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericSpecialInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericSpecialInteraction_Start.cs
new file mode 100644
index 0000000..ad7228d
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/GenericSpecialInteraction_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(GenericSpecialInteraction), "Start")]
+ public class GenericSpecialInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(GenericSpecialInteraction __instance)
+ {
+ __instance.specialCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/LastLetterBlockInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/LastLetterBlockInteraction_Start.cs
new file mode 100644
index 0000000..71d023c
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/LastLetterBlockInteraction_Start.cs
@@ -0,0 +1,14 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(LastLetterBlockInteraction), "Start")]
+ public class LastLetterBlockInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(LastLetterBlockInteraction __instance)
+ {
+ __instance.myCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle01Interaction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle01Interaction_Start.cs
new file mode 100644
index 0000000..f7aa3c2
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle01Interaction_Start.cs
@@ -0,0 +1,16 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(Puzzle01Interaction), "Start")]
+ public class Puzzle01Interaction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(Puzzle01Interaction __instance)
+ {
+ __instance.camera01?.AddComponentUnique();
+ __instance.camera02?.AddComponentUnique();
+ __instance.camera03?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle02Interaction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle02Interaction_Start.cs
new file mode 100644
index 0000000..65db63e
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/Puzzle02Interaction_Start.cs
@@ -0,0 +1,15 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(Puzzle02Interaction), "Start")]
+ public class Puzzle02Interaction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(Puzzle02Interaction __instance)
+ {
+ __instance.camera01?.gameObject.AddComponentUnique();
+ __instance.puzzleCamera?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/SinkInteraction_Start.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/SinkInteraction_Start.cs
new file mode 100644
index 0000000..a68e2c3
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/HarmonyPatches/SinkInteraction_Start.cs
@@ -0,0 +1,15 @@
+using HarmonyLib;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter.HarmonyPatches
+{
+ [HarmonyPatch(typeof(SinkInteraction), "Start")]
+ public class SinkInteraction_Start
+ {
+ // Add a frameCounter component if necessary.
+ public static void Postfix(SinkInteraction __instance)
+ {
+ __instance.camera01?.AddComponentUnique();
+ __instance.camera02?.AddComponentUnique();
+ }
+ }
+}
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.FrameCounter/NuGet.Config
new file mode 100644
index 0000000..1864ded
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/NuGet.Config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BepInEx5Plugins.Ash.Alisa.FrameCounter/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.FrameCounter/Plugin.cs
new file mode 100644
index 0000000..fcf6d9c
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.FrameCounter/Plugin.cs
@@ -0,0 +1,26 @@
+using BepInEx;
+using HarmonyLib;
+using System;
+
+namespace BepInEx5Plugins.Ash.Alisa.FrameCounter
+{
+ [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);
+ }
+ }
+ }
+}