Skip to content

Commit 062124a

Browse files
committed
Initial commit
0 parents  commit 062124a

12 files changed

Lines changed: 467 additions & 0 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.vs
2+
bin
3+
obj
4+
CurrentCombination.sln

Main.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using MelonLoader;
2+
using SelectiveEffects.Managers;
3+
4+
namespace SelectiveEffects
5+
{
6+
public class Main : MelonMod
7+
{
8+
public override void OnInitializeMelon()
9+
{
10+
SettingsManager.Load();
11+
EffectsDisablerManager.Init();
12+
LoggerInstance.Msg("SelectiveEffects has loaded correctly!");
13+
}
14+
}
15+
}

Managers/EffectsDisablerManager.cs

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
namespace SelectiveEffects.Managers
2+
{
3+
using static SettingsManager;
4+
5+
internal static class EffectsDisablerManager
6+
{
7+
public static List<EffectsCondition> effectsDisablerList;
8+
public static bool AnyEffect = false;
9+
10+
public static void Init()
11+
{
12+
if (DisableAllEffects) return;
13+
effectsDisablerList = new();
14+
15+
if (DisableGirlFxAtk) effectsDisablerList.Add(new GirlFxAtk());
16+
if (DisablePressFx) effectsDisablerList.Add(new PressFx());
17+
if (DisableMusicNotesFx)
18+
{
19+
effectsDisablerList.Add(new FxScore());
20+
effectsDisablerList.Add(new TxtScore());
21+
}
22+
if (DisableHeartsFx)
23+
{
24+
effectsDisablerList.Add(new FxHp());
25+
effectsDisablerList.Add(new TxtHp());
26+
}
27+
if (DisableBossFx) effectsDisablerList.Add(new BossFx());
28+
if (DisableDustFx) effectsDisablerList.Add(new DustFx());
29+
if (DisableHurtFx) effectsDisablerList.Add(new HurtFx());
30+
31+
AnyEffect = effectsDisablerList.Count > 0;
32+
}
33+
}
34+
35+
internal abstract class EffectsCondition
36+
{
37+
public abstract bool Condition(string s);
38+
}
39+
40+
internal class GirlFxAtk : EffectsCondition
41+
{
42+
public override bool Condition(string s)
43+
{
44+
return s.Contains("girl_fx_atk");
45+
}
46+
}
47+
48+
internal class PressFx : EffectsCondition
49+
{
50+
public override bool Condition(string s)
51+
{
52+
return s.Contains("press_top_fx");
53+
}
54+
}
55+
56+
internal class FxScore : EffectsCondition
57+
{
58+
public override bool Condition(string s)
59+
{
60+
return s.Contains("fx_score");
61+
}
62+
}
63+
64+
internal class TxtScore : EffectsCondition
65+
{
66+
public override bool Condition(string s)
67+
{
68+
return s.Contains("TxtScoreGet");
69+
}
70+
}
71+
72+
internal class TxtHp : EffectsCondition
73+
{
74+
public override bool Condition(string s)
75+
{
76+
return s.Contains("TxtHpGet");
77+
}
78+
}
79+
80+
internal class FxHp : EffectsCondition
81+
{
82+
public override bool Condition(string s)
83+
{
84+
return s.Contains("fx_hp");
85+
}
86+
}
87+
88+
internal class BossFx : EffectsCondition
89+
{
90+
public override bool Condition(string s)
91+
{
92+
return s.Contains("boss");
93+
}
94+
95+
}
96+
97+
internal class DustFx : EffectsCondition
98+
{
99+
public override bool Condition(string s)
100+
{
101+
return s.Contains("dust_fx");
102+
}
103+
}
104+
105+
internal class HurtFx : EffectsCondition
106+
{
107+
public override bool Condition(string s)
108+
{
109+
return s.Contains("TxtHurt");
110+
}
111+
}
112+
}

Managers/SettingsManager.cs

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
using MelonLoader;
2+
using UnityEngine;
3+
using static SelectiveEffects.Managers.SettingsManager;
4+
5+
namespace SelectiveEffects.Managers
6+
{
7+
internal class SettingsManager
8+
{
9+
internal static string SettingsPath = "UserData/SelectiveEffects.cfg";
10+
11+
//--------------------------------------------------------------------+
12+
// Main Category
13+
//--------------------------------------------------------------------+
14+
public static bool DisableAllEffects => MainCategory._disableAllEffects.Value;
15+
16+
internal class MainCategory
17+
{
18+
public static MelonPreferences_Entry<bool> _disableAllEffects;
19+
20+
public static void Init()
21+
{
22+
MelonPreferences_Category mainCategory = MelonPreferences.CreateCategory("Main");
23+
mainCategory.SetFilePath(SettingsPath);
24+
25+
_disableAllEffects = mainCategory.CreateEntry<bool>("DisableAllEfects", true, description: "Takes precedence to the following options");
26+
}
27+
28+
}
29+
30+
//--------------------------------------------------------------------+
31+
// Judgement Category
32+
//--------------------------------------------------------------------+
33+
public static bool DisableJudgement => JudgementCategory._disableJudgement.Value;
34+
public static bool MakeJudgementSmaller => JudgementCategory._makeJudgementSmaller.Value;
35+
36+
internal class JudgementCategory
37+
{
38+
public static MelonPreferences_Entry<bool> _disableJudgement;
39+
public static MelonPreferences_Entry<bool> _makeJudgementSmaller;
40+
41+
public static void Init()
42+
{
43+
MelonPreferences_Category judgementCategory = MelonPreferences.CreateCategory("Judgement");
44+
judgementCategory.SetFilePath(SettingsPath);
45+
46+
_disableJudgement = judgementCategory.CreateEntry<bool>("DisableJudgement", false);
47+
_makeJudgementSmaller = judgementCategory.CreateEntry<bool>("MakeJudgementSmaller", false, description: "DisableJudgement takes precedence.");
48+
}
49+
}
50+
51+
//--------------------------------------------------------------------+
52+
// Hit Category
53+
//--------------------------------------------------------------------+
54+
public static bool DisableHitDissapearAnimations => HitCategory._disableHitDissapearAnimations.Value;
55+
public static bool DisableHitEffects => HitCategory._disableHitEffects.Value;
56+
public static bool DisableGirlFxAtk => HitCategory._disableGirlFxAtk.Value;
57+
public static bool DisablePressFx => HitCategory._disablePressFx.Value;
58+
59+
internal class HitCategory
60+
{
61+
public static MelonPreferences_Entry<bool> _disableHitDissapearAnimations;
62+
public static MelonPreferences_Entry<bool> _disableHitEffects;
63+
public static MelonPreferences_Entry<bool> _disableGirlFxAtk;
64+
public static MelonPreferences_Entry<bool> _disablePressFx;
65+
66+
public static void Init()
67+
{
68+
MelonPreferences_Category hitCategory = MelonPreferences.CreateCategory("Hit");
69+
hitCategory.SetFilePath(SettingsPath);
70+
71+
_disableHitDissapearAnimations = hitCategory.CreateEntry<bool>("DisableHitDissapearAnimations", false, description: "Hit enemies disappear immeadiatly.");
72+
_disableHitEffects = hitCategory.CreateEntry<bool>("DisableHitEffects", false);
73+
_disableGirlFxAtk = hitCategory.CreateEntry<bool>("DisableGirlHitFx", false);
74+
_disablePressFx = hitCategory.CreateEntry<bool>("DisablePressFx", false);
75+
}
76+
}
77+
78+
//--------------------------------------------------------------------+
79+
// Music notes & Hearts Category
80+
//--------------------------------------------------------------------+
81+
public static bool DisableMusicNotesFx => MusicHeartsCategory._disableMusicNotesFx.Value;
82+
public static bool DisableHeartsFx => MusicHeartsCategory._disableHeartsFx.Value;
83+
84+
internal class MusicHeartsCategory
85+
{
86+
public static MelonPreferences_Entry<bool> _disableMusicNotesFx;
87+
public static MelonPreferences_Entry<bool> _disableHeartsFx;
88+
89+
public static void Init()
90+
{
91+
MelonPreferences_Category musicHeartsCategory = MelonPreferences.CreateCategory("MusicHearts");
92+
musicHeartsCategory.SetFilePath(SettingsPath);
93+
94+
_disableMusicNotesFx = musicHeartsCategory.CreateEntry<bool>("DisableMusicNotesFx", false, description: "Disable music notes points text.");
95+
_disableHeartsFx = musicHeartsCategory.CreateEntry<bool>("DisablHeartsFx", false, description: "Disable hearts health gain text.");
96+
}
97+
}
98+
99+
public static bool DisableBossFx => MiscCategory._disableBossFx.Value;
100+
public static bool DisableDustFx => MiscCategory._disableDustFx.Value;
101+
public static bool DisableHurtFx => MiscCategory._disableHurtFx.Value;
102+
103+
internal class MiscCategory
104+
{
105+
public static MelonPreferences_Entry<bool> _disableBossFx;
106+
public static MelonPreferences_Entry<bool> _disableDustFx;
107+
public static MelonPreferences_Entry<bool> _disableHurtFx;
108+
109+
public static void Init()
110+
{
111+
MelonPreferences_Category miscCategory = MelonPreferences.CreateCategory("Misc");
112+
miscCategory.SetFilePath(SettingsPath);
113+
114+
_disableBossFx = miscCategory.CreateEntry<bool>("DisableBossFx", false);
115+
_disableDustFx = miscCategory.CreateEntry<bool>("DisableDustFx", false);
116+
_disableHurtFx = miscCategory.CreateEntry<bool>("DisableHurtFx", false, description: "Disable hp loss text-");
117+
}
118+
}
119+
120+
public static bool DisableHitEnemy => DisableHitDissapearAnimations && DisableHitEffects;
121+
122+
internal static void Load()
123+
{
124+
MainCategory.Init();
125+
JudgementCategory.Init();
126+
HitCategory.Init();
127+
MusicHeartsCategory.Init();
128+
MiscCategory.Init();
129+
}
130+
}
131+
}

Patches/DisappearAnimationPatch.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using HarmonyLib;
2+
using Il2Cpp;
3+
using SelectiveEffects.Managers;
4+
using UnityEngine;
5+
6+
namespace SelectiveEffects.Patches
7+
{
8+
[HarmonyPatch(typeof(BaseEnemyObjectController))]
9+
internal static class DisappearAnimationPatch
10+
{
11+
[HarmonyPatch(nameof(BaseEnemyObjectController.OnControllerAttacked))]
12+
public static void Postfix(BaseEnemyObjectController __instance, bool isDeaded)
13+
{
14+
if (!isDeaded) return;
15+
16+
if (SettingsManager.DisableAllEffects || SettingsManager.DisableHitEnemy)
17+
{
18+
__instance.gameObject.SetActive(false);
19+
return;
20+
}
21+
22+
if (SettingsManager.DisableHitEffects)
23+
{
24+
GameObject out_fx = __instance.transform.FindChild("out_fx")?.gameObject;
25+
if (out_fx) out_fx.SetActive(false);
26+
}
27+
28+
if (!SettingsManager.DisableHitDissapearAnimations) return;
29+
__instance.m_SkeletonAnimation.skeleton.a = 0f;
30+
}
31+
}
32+
}

Patches/HitEffectPatch.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using HarmonyLib;
2+
using Il2CppAssets.Scripts.GameCore.GameObjectLogics.GameObjectManager;
3+
using SelectiveEffects.Managers;
4+
5+
namespace SelectiveEffects.Patches
6+
{
7+
[HarmonyPatch(typeof(AttackEffectManager), nameof(AttackEffectManager.PlayAttackEffect))]
8+
internal static class HitEffectPatch
9+
{
10+
public static void Postfix(AttackEffectManager __instance)
11+
{
12+
if (!SettingsManager.DisableHitEffects) return;
13+
__instance.m_PlayResult.SetActive(false);
14+
}
15+
}
16+
}

Patches/JudgementPatch.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using HarmonyLib;
2+
using Il2CppFormulaBase;
3+
using SelectiveEffects.Managers;
4+
using UnityEngine;
5+
6+
namespace SelectiveEffects.Patches
7+
{
8+
[HarmonyPatch(typeof(StageBattleComponent), nameof(StageBattleComponent.GameStart))]
9+
internal static class JudgementPatch
10+
{
11+
public static void Postfix()
12+
{
13+
if (!SettingsManager.DisableJudgement && !SettingsManager.MakeJudgementSmaller) return;
14+
Transform effectsTransform = GameObject.Find("Effects").transform;
15+
16+
if (SettingsManager.DisableJudgement)
17+
{
18+
effectsTransform.gameObject.SetActive(false);
19+
return;
20+
}
21+
22+
effectsTransform.localScale = new Vector3(0.75f, 1f, 1f);
23+
effectsTransform.position = new Vector3(-1f, -0.3f, 0f);
24+
}
25+
}
26+
}

Patches/MainEffectsPatch.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using HarmonyLib;
2+
using Il2CppAssets.Scripts.PeroTools.Managers;
3+
using SelectiveEffects.Managers;
4+
using UnityEngine;
5+
6+
namespace SelectiveEffects.Patches
7+
{
8+
[HarmonyPatch(typeof(Effect), nameof(Effect.CreateInstance))]
9+
internal class MainEffectsPatch
10+
{
11+
internal static GameObject EmptyObject = new("EmptyObject");
12+
13+
public static bool Prefix(ref GameObject __result)
14+
{
15+
__result = EmptyObject;
16+
return !SettingsManager.DisableAllEffects;
17+
}
18+
19+
public static void Postfix(Effect __instance, ref GameObject __result)
20+
{
21+
if (SettingsManager.DisableAllEffects || !EffectsDisablerManager.AnyEffect) return;
22+
23+
string fxName = __instance.uid;
24+
foreach (EffectsCondition x in EffectsDisablerManager.effectsDisablerList)
25+
{
26+
if (!x.Condition(fxName)) continue;
27+
28+
__result.SetActive(false);
29+
return;
30+
}
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)