forked from nikita/muzika-gromche
				
			Compare commits
	
		
			1 Commits
		
	
	
		
			2e938dfc8d
			...
			d02e594457
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | d02e594457 | 
|  | @ -553,6 +553,7 @@ namespace MuzikaGromche | ||||||
|                 harmony.PatchAll(typeof(AllPoweredLightsPatch)); |                 harmony.PatchAll(typeof(AllPoweredLightsPatch)); | ||||||
|                 harmony.PatchAll(typeof(DiscoBallTilePatch)); |                 harmony.PatchAll(typeof(DiscoBallTilePatch)); | ||||||
|                 harmony.PatchAll(typeof(DiscoBallDespawnPatch)); |                 harmony.PatchAll(typeof(DiscoBallDespawnPatch)); | ||||||
|  |                 harmony.PatchAll(typeof(SpawnRatePatch)); | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|  | @ -1427,6 +1428,8 @@ namespace MuzikaGromche | ||||||
| 
 | 
 | ||||||
|         public static ConfigEntry<bool> SkipExplicitTracks { get; private set; } = null!; |         public static ConfigEntry<bool> SkipExplicitTracks { get; private set; } = null!; | ||||||
| 
 | 
 | ||||||
|  |         public static SyncedEntry<bool> OverrideSpawnRates { get; private set; } = null!; | ||||||
|  | 
 | ||||||
|         public static bool ShouldSkipWindingPhase { get; private set; } = false; |         public static bool ShouldSkipWindingPhase { get; private set; } = false; | ||||||
| 
 | 
 | ||||||
|         public static Palette? PaletteOverride { get; private set; } = null; |         public static Palette? PaletteOverride { get; private set; } = null; | ||||||
|  | @ -1455,6 +1458,11 @@ namespace MuzikaGromche | ||||||
|                 new ConfigDescription("When choosing tracks at random, skip the ones with Explicit Content/Lyrics.")); |                 new ConfigDescription("When choosing tracks at random, skip the ones with Explicit Content/Lyrics.")); | ||||||
|             LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(SkipExplicitTracks, requiresRestart: false)); |             LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(SkipExplicitTracks, requiresRestart: false)); | ||||||
| 
 | 
 | ||||||
|  |             OverrideSpawnRates = configFile.BindSyncedEntry("General", "Override Spawn Rates", false, | ||||||
|  |                 new ConfigDescription("Deviate from vanilla spawn rates to experience content of this mod more often.")); | ||||||
|  |             LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem(OverrideSpawnRates.Entry, Default(new BoolCheckBoxOptions()))); | ||||||
|  |             CSyncHackAddSyncedEntry(OverrideSpawnRates); | ||||||
|  | 
 | ||||||
| #if DEBUG | #if DEBUG | ||||||
|             SetupEntriesToSkipWinding(configFile); |             SetupEntriesToSkipWinding(configFile); | ||||||
|             SetupEntriesForPaletteOverride(configFile); |             SetupEntriesForPaletteOverride(configFile); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,69 @@ | ||||||
|  | using HarmonyLib; | ||||||
|  | using System; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace MuzikaGromche | ||||||
|  | { | ||||||
|  |     [HarmonyPatch(typeof(RoundManager))] | ||||||
|  |     static class SpawnRatePatch | ||||||
|  |     { | ||||||
|  |         const string JesterEnemyName = "Jester"; | ||||||
|  | 
 | ||||||
|  |         // If set to null, do not override spawn chances. Otherwise, it is an index of Jester in RoundManager.currentLevel.Enemies | ||||||
|  |         static int? JesterEnemyIndex = null; | ||||||
|  |         static float? SpawnTime = null; | ||||||
|  | 
 | ||||||
|  |         [HarmonyPatch(nameof(RoundManager.AssignRandomEnemyToVent))] | ||||||
|  |         [HarmonyPrefix] | ||||||
|  |         static void AssignRandomEnemyToVentPrefix(RoundManager __instance, EnemyVent vent, float spawnTime) | ||||||
|  |         { | ||||||
|  |             if (!Config.OverrideSpawnRates.Value) | ||||||
|  |             { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             var index = __instance.currentLevel.Enemies.FindIndex(enemy => enemy.enemyType.enemyName == JesterEnemyName); | ||||||
|  |             if (index == -1) | ||||||
|  |             { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             JesterEnemyIndex = index; | ||||||
|  |             SpawnTime = spawnTime; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HarmonyPatch(nameof(RoundManager.AssignRandomEnemyToVent))] | ||||||
|  |         [HarmonyPostfix] | ||||||
|  |         static void AssignRandomEnemyToVentPostfix(RoundManager __instance, EnemyVent vent, float spawnTime) | ||||||
|  |         { | ||||||
|  |             JesterEnemyIndex = null; | ||||||
|  |             SpawnTime = null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HarmonyPatch(nameof(RoundManager.GetRandomWeightedIndex))] | ||||||
|  |         [HarmonyPostfix] | ||||||
|  |         static void GetRandomWeightedIndexPostfix(RoundManager __instance, ref int[] weights, ref System.Random randomSeed) | ||||||
|  |         { | ||||||
|  |             if (JesterEnemyIndex is int index && SpawnTime is float spawnTime) | ||||||
|  |             { | ||||||
|  |                 if (__instance.EnemyCannotBeSpawned(index)) | ||||||
|  |                 { | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 var minMultiplierTime = 3 * __instance.timeScript.lengthOfHours; | ||||||
|  |                 var maxMultiplierTime = 7 * __instance.timeScript.lengthOfHours; | ||||||
|  |                 var normalizedMultiplierTime = Math.Clamp((spawnTime - minMultiplierTime) / (maxMultiplierTime - minMultiplierTime), 0f, 1f); | ||||||
|  | 
 | ||||||
|  |                 // TODO: Try Expo function instead of Lerp? | ||||||
|  |                 var minMultiplier = Mathf.Max(1, __instance.minEnemiesToSpawn); | ||||||
|  |                 var maxMultiplier = 9 + __instance.minEnemiesToSpawn; | ||||||
|  |                 var multiplier = Mathf.Lerp(minMultiplier, maxMultiplier, normalizedMultiplierTime); | ||||||
|  | 
 | ||||||
|  |                 var newWeight = (int)(weights[index] * multiplier); | ||||||
|  |                 Debug.Log($"{nameof(MuzikaGromche)} Overriding Jester spawn weight {weights[index]} * {multiplier} => {newWeight}"); | ||||||
|  |                 weights[index] = newWeight; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue