Unfortunately, I can't attach .dll files. However, if you compile this .dllI replied earlier, but then I tested, and I was slightly wrong. So I deleted the comment, and here's a fixed how-to: Using BepInEx and Unity Editor as listed above,you can use the UI Inspector and pull up the corresponding YoruSprite object. From there, select the Button associated with it, and then toggle `Selectable.interactable` to true. View attachment 4569040
using BepInEx;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
// Alias Unity debug to avoid ambiguity
using Debug = UnityEngine.Debug;
[BepInPlugin("com.yourname.sagescravings.unlock", "Yoru Gallery Auto Unlock", "1.0.2")]
public class YoruGalleryUnlock : BaseUnityPlugin
{
// Keep track of the last Content transform we processed
private Transform lastContent = null;
// Throttle check interval to reduce cost (seconds)
private const float CHECK_INTERVAL = 1.0f;
void Start()
{
StartCoroutine(MonitorGalleryCoroutine());
}
private IEnumerator MonitorGalleryCoroutine()
{
while (true)
{
// Try to find the gallery content transform
GameObject contentObj = GameObject.Find("Canvas/GalleryWindow/ScrollArea/Content");
Transform content = contentObj ? contentObj.transform : null;
// If we found content and it's different (or same but children changed), apply unlock
if (content != null)
{
// If it's a new content instance (recreated) or we haven't processed it yet
if (content != lastContent)
{
ApplyUnlocksToContent(content);
lastContent = content;
}
else
{
// still same content instance — ensure any newly-created children are unlocked too
ReapplyUnlocksIfNeeded(content);
}
}
else
{
// content not present (gallery closed) — forget lastContent so we reapply next open
lastContent = null;
}
yield return new WaitForSeconds(CHECK_INTERVAL);
}
}
private void ApplyUnlocksToContent(Transform content)
{
int count = 0;
// Find all Selectable components in children, even inactive ones
Selectable[] selectables = content.GetComponentsInChildren<Selectable>(true);
foreach (var sel in selectables)
{
// Only affect Yoru sprites (name contains "Yoru")
if (sel != null && sel.name.Contains("Yoru") && !sel.interactable)
{
sel.interactable = true;
count++;
}
}
Debug.Log($"Yoru Gallery Auto Unlock: applied to content. {count} sprites set interactable.");
}
// In case children were added after we processed the content instance, ensure they get unlocked
private void ReapplyUnlocksIfNeeded(Transform content)
{
int count = 0;
foreach (var sel in content.GetComponentsInChildren<Selectable>(true))
{
if (sel != null && sel.name.Contains("Yoru") && !sel.interactable)
{
sel.interactable = true;
count++;
}
}
if (count > 0) Debug.Log($"Yoru Gallery Auto Unlock: caught {count} new sprites and unlocked them.");
}
}
using Visual Studio 2022 Community, while adding these references found in both \Sage's Cravings_Data\Managed and \BepInEx\core
and placing it inside the plugins in BepinEx, it should unlock the gallery. Though you still need to show Yoru Sprite (10) etc to see the Jett Scenes.
Last edited: