Skip to content

Commit

Permalink
Re-added FyreChild, made some balancing changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
BubkisLord committed Mar 7, 2023
1 parent a434280 commit 23b5068
Show file tree
Hide file tree
Showing 20 changed files with 286 additions and 190 deletions.
Binary file modified .vs/CharmMod/DesignTimeBuild/.dtbcache.v2
Binary file not shown.
Binary file modified .vs/CharmMod/v17/.futdcache.v2
Binary file not shown.
Binary file modified .vs/CharmMod/v17/.suo
Binary file not shown.
170 changes: 154 additions & 16 deletions CharmMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
global using RandomizerMod.RandomizerData;
global using RandomizerCore;
global using static Fyrenest.Fyrenest;
using RandomizerMod.RC;
using RandomizerMod.Logging;
using MenuChanger.MenuElements;
using MenuChanger;
using System.Configuration;

namespace Fyrenest
{
Expand Down Expand Up @@ -112,7 +117,7 @@ public class Fyrenest : Mod, IMod, ICustomMenuMod, ILocalSettings<CustomLocalSav
GlassCannon.instance,
HKBlessing.instance,
PowerfulDash.instance,
//Fyrechild.instance,
Fyrechild.instance,
OpportunisticDefeat.instance,
SoulSpeed.instance,
SoulHunger.instance,
Expand Down Expand Up @@ -142,7 +147,7 @@ public class Fyrenest : Mod, IMod, ICustomMenuMod, ILocalSettings<CustomLocalSav
public Fyrenest() : base("Fyrenest")
{
//Make sure the main menu text is changed, but disable all other functionalitly
SetEnabled(false);
SetEnabled(true);
Enabled = true;

//Instantiate all Room subclasses
Expand All @@ -155,8 +160,6 @@ public Fyrenest() : base("Fyrenest")
}
}



/// <summary>
/// Called when the mod is loaded
/// </summary>
Expand Down Expand Up @@ -206,6 +209,7 @@ public override void Initialize(Dictionary<string, Dictionary<string, GameObject
ModHooks.SavegameLoadHook += ModHooks_SavegameLoadHook;
On.PlayerData.CountGameCompletion += SetGameCompletion;
Events.OnEnterGame += GiveStartingItemsAndSetEnabled;
On.UIManager.StartNewGame += PlaceItems;

//intialize the Prefabs
PrefabMan.InitializePrefabs(preloadedObjects);
Expand Down Expand Up @@ -241,6 +245,15 @@ public override void Initialize(Dictionary<string, Dictionary<string, GameObject
//};
Log("Initializing Part 2...");

if (ModHooks.GetMod("Randomizer 4") != null)
{
// The code that references rando needs to be in a separate method
// so that the mod will still load without it installed
// (trying to run a method whose code references an unavailable
// DLL will fail even if the code in question isn't actually run)
HookRando();
}

foreach (var charm in Charms)
{
var num = CharmHelper.AddSprites(EmbeddedSprite.Get(charm.Sprite))[0];
Expand Down Expand Up @@ -299,18 +312,141 @@ public override void Initialize(Dictionary<string, Dictionary<string, GameObject
}
Log("Initializing Part 2 Complete.\n\nAll Initializing Complete.");
}


private void PlaceItems(On.UIManager.orig_StartNewGame orig, UIManager self, bool permaDeath, bool bossRush)
{
//if (ModHooks.GetMod("Randomizer 4") != null && IsRandoActive())
//{
// PlaceItemsRando();
//}
//else
//{
// ConfigureICModules();
// PlaceCharmsAtFixedPositions();
//}
}

private static void ConfigureICModules()
{
// The fix fury isnt really needed, but may make my life easier along the way.
ItemChangerMod.Modules.GetOrAdd<FixFury>();

// Everyone likes skips, am I right?
ItemChangerMod.Modules.GetOrAdd<LeftCityChandelier>();


//ItemChangerMod.Modules.GetOrAdd<PlayerDataEditModule>();
//ItemChangerMod.Modules.GetOrAdd<RespawnCollectorJars>();
//ItemChangerMod.Modules.GetOrAdd<TransitionFixes>();
//ItemChangerMod.Modules.GetOrAdd<FixWatcherKnightConditionalLoad>();
//ItemChangerMod.Modules.GetOrAdd<HorizontalTransitionQuakeCancel>();
//ItemChangerMod.Modules.GetOrAdd<ReusableBeastsDenEntrance>();
}

//private void PlaceItemsRando()
//{
// var gs = RandomizerMod.RandomizerMod.RS.GenerationSettings;
// if (!gs.PoolSettings.Charms)
// {
// PlaceCharmsAtFixedPositions();
// }
//}

public static void PlaceAllCharms()
//private static void DefineCharmsForRando(RequestBuilder rb)
//{
// if (!rb.gs.PoolSettings.Charms)
// {
// return;
// }
// var names = new HashSet<string>();
// foreach (var charm in Charms)
// {
// var name = charm.Name.Replace(" ", "_");
// names.Add(name);
// rb.EditItemRequest(name, info =>
// {
// info.getItemDef = () => new()
// {
// Name = name,
// Pool = "Charm",
// MajorItem = false,
// PriceCap = 666
// };
// });
// }

// rb.OnGetGroupFor.Subscribe(0f, (RequestBuilder rb, string item, RequestBuilder.ElementType type, out GroupBuilder gb) => {
// if (names.Contains(item) && (type == RequestBuilder.ElementType.Unknown || type == RequestBuilder.ElementType.Item))
// {
// gb = rb.GetGroupFor("Shaman_Stone");
// return true;
// }
// gb = default;
// return false;
// });
//}
private void HookRando()
{
var placements = new List<AbstractPlacement>();
foreach (Charm charm in Charms)
//RequestBuilder.OnUpdate.Subscribe(-9999, SetRandoNotchCosts);
//RequestBuilder.OnUpdate.Subscribe(-498, DefineCharmsForRando);
//RequestBuilder.OnUpdate.Subscribe(-200, IncreaseMaxCharmCost);
//RequestBuilder.OnUpdate.Subscribe(50, AddCharmsToPool);
//SettingsLog.AfterLogSettings += LogRandoSettings;
}
private void IncreaseMaxCharmCost(RequestBuilder rb)
{
// This limitation could be lifted
if (rb.gs.PoolSettings.Charms && RandoSettings.Instance.AddCharms)
{
var name = charm.Name.Replace(" ", "_");
var placement = new CoordinateLocation() { x = charm.X, y = charm.Y, elevation = 0, sceneName = charm.Scene, name = name }.Wrap() as MutablePlacement;
placement.Add(charm);
rb.gs.CostSettings.MaximumCharmCost += RandoSettings.Instance.IncreaseMaxCharmCostBy;
}
ItemChangerMod.AddPlacements(placements, conflictResolution: PlacementConflictResolution.Ignore);
}
private void AddCharmsToPool(RequestBuilder rb)
{
if (!(rb.gs.PoolSettings.Charms && RandoSettings.Instance.AddCharms))
{
return;
}
foreach (var charm in Charms)
{
rb.AddItemByName(charm.Name.Replace(" ", "_"));
}
}
private void LogRandoSettings(LogArguments args, TextWriter w)
{
w.WriteLine("Logging Transcendence settings:");
w.WriteLine(JsonUtil.Serialize(RandoSettings.Instance));
}
//private Dictionary<int, int> DefaultNotchCosts()
//{
// var costs = Charms.ToDictionary(c => c.Num, c => c.DefaultCost);
// return costs;
//}
//private const int MinTotalCost = 25;
//private const int MaxTotalCost = 38;
//private Dictionary<int, int> RandomizeNotchCosts(int seed)
//{
// // This log statement is here to help diagnose a possible bug where charms cost more than
// // they ever should.
// var rng = new System.Random(seed);
// var total = rng.Next(MinTotalCost, MaxTotalCost + 1);
// Log($"Randomizing notch costs; total cost = {total}");
// var costs = Charms.ToDictionary(c => c.Num, c => 0);
// for (var i = 0; i < total; i++)
// {
// var possiblePicks = costs.Where(c => c.Value < 6).Select(c => c.Key).ToList();
// if (possiblePicks.Count == 0)
// {
// break;
// }
// var pick = rng.Next(possiblePicks.Count);
// costs[possiblePicks[pick]]++;
// }
// return costs;
//}



//private static void TestPlacements()
//{
Expand Down Expand Up @@ -628,7 +764,7 @@ private void OnUpdate()
if (Input.GetKeyDown(KeyCode.Backspace))
{
Log("Initiating OnWorldInit()");
PlaceAllCharms();
PlaceCharmsAtFixedPositions();
//Call OnWorldInit for all Room subclasses
foreach (Room room in rooms)
{
Expand All @@ -642,7 +778,7 @@ private void OnUpdate()
// Toggle if Fyrenest is enabled.
LocalSaveData.FyrenestEnabled = true;
Log("Initiating OnWorldInit()");
PlaceAllCharms();
PlaceCharmsAtFixedPositions();
//Call OnWorldInit for all Room subclasses
foreach (Room room in rooms)
{
Expand Down Expand Up @@ -843,9 +979,10 @@ public static void PlaceCharmsAtFixedPositions()
.Add(Finder.GetItem(name)));
}
}
ItemChangerMod.AddPlacements(placements, conflictResolution: PlacementConflictResolution.Ignore);
ItemChangerMod.AddPlacements(placements);
}


public int SelectCharm(int bubkis)
{
if (charmSelect > Charms.Count)
Expand Down Expand Up @@ -1111,7 +1248,8 @@ public void InitializeWorld(On.UIManager.orig_StartNewGame orig, UIManager self,
LocalSaveData.FyrenestEnabled = true;
LocalSaveData.revision = CurrentRevision;

PlaceAllCharms();
PlaceItems(orig, self, permaDeath, bossRush);

//Call OnWorldInit for all Room subclasses
foreach (Room room in rooms)
{
Expand All @@ -1130,7 +1268,7 @@ public void CorrectGrubfather()
{
if (!LocalSaveData.FyrenestEnabled) return;

Settings set = (Settings)typeof(ItemChangerMod).GetField("SET", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
ItemChanger.Settings set = (ItemChanger.Settings)typeof(ItemChangerMod).GetField("SET", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
foreach (var placement in set.GetPlacements())
{
if (placement.Name == LocationNames.Grubfather)
Expand Down
2 changes: 1 addition & 1 deletion CharmMod.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
<ItemGroup>
<!-- Dependencies -->
<Reference Include="MenuChanger">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight\hollow_knight_Data\Managed\Mods\MenuChanger\MenuChanger.dll</HintPath>
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight\hollow_knight_Data\Managed\Mods\MenuChanger\MenuChanger.dll</HintPath>
</Reference>
<Reference Include="Satchel">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight\hollow_knight_Data\Managed\Mods/Satchel/Satchel.dll</HintPath>
Expand Down
Loading

0 comments on commit 23b5068

Please sign in to comment.