HollowKnightAltEntrancesAPMod/Mod/Archipelago.HollowKnight/IC/RM/StartLocationSceneEditsModule.cs
2025-10-12 19:15:58 -04:00

106 lines
3.2 KiB
C#

using Archipelago.HollowKnight.SlotDataModel;
using ItemChanger;
using ItemChanger.Extensions;
using ItemChanger.Modules;
using UnityEngine;
using UnityEngine.SceneManagement;
using UObject = UnityEngine.Object;
namespace Archipelago.HollowKnight.IC.RM;
public class StartLocationSceneEditsModule : Module
{
public override void Initialize()
{
ToggleSceneHooks(true);
}
public override void Unload()
{
ToggleSceneHooks(false);
}
private static void ToggleSceneHooks(bool toggle)
{
SlotOptions options = ArchipelagoMod.Instance.SlotData.Options;
string startLocation = options.StartLocationName ?? StartLocationNames.Kings_Pass;
switch (startLocation)
{
case "Ancestral Mound":
if (options.RandomizeNail)
{
if (toggle)
{
Events.AddSceneChangeEdit(SceneNames.Crossroads_ShamanTemple, DestroyPlanksForAncestralMoundStart);
}
else
{
Events.RemoveSceneChangeEdit(SceneNames.Crossroads_ShamanTemple, DestroyPlanksForAncestralMoundStart);
}
}
break;
case "Fungal Core":
if (toggle)
{
Events.AddSceneChangeEdit(SceneNames.Fungus2_30, CreateBounceShroomsForFungalCoreStart);
}
else
{
Events.RemoveSceneChangeEdit(SceneNames.Fungus2_30, CreateBounceShroomsForFungalCoreStart);
}
break;
case "West Crossroads":
if (toggle)
{
Events.AddSceneChangeEdit(SceneNames.Crossroads_36, MoveShadeMarkerForWestCrossroadsStart);
}
else
{
Events.RemoveSceneChangeEdit(SceneNames.Crossroads_36, MoveShadeMarkerForWestCrossroadsStart);
}
break;
}
}
// Destroy planks in cursed nail mode because we can't slash them
private static void DestroyPlanksForAncestralMoundStart(Scene to)
{
foreach ((_, GameObject go) in to.Traverse())
{
if (go.name.StartsWith("Plank"))
{
UObject.Destroy(go);
}
}
}
private static void CreateBounceShroomsForFungalCoreStart(Scene to)
{
GameObject bounceShroom = to.FindGameObjectByName("Bounce Shroom C");
GameObject s0 = UObject.Instantiate(bounceShroom);
s0.transform.SetPosition3D(12.5f, 26f, 0f);
s0.SetActive(true);
GameObject s1 = UObject.Instantiate(bounceShroom);
s1.transform.SetPosition3D(12.5f, 54f, 0f);
s1.SetActive(true);
GameObject s2 = UObject.Instantiate(bounceShroom);
s2.transform.SetPosition3D(21.7f, 133f, 0f);
s2.SetActive(true);
}
private static void MoveShadeMarkerForWestCrossroadsStart(Scene to)
{
GameObject marker = to.FindGameObject("_Props/Hollow_Shade Marker 1");
marker.transform.position = new(46.2f, 28f);
}
}