106 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|