Skip to content

Commit

Permalink
[+] Add options
Browse files Browse the repository at this point in the history
  • Loading branch information
clansty committed Oct 4, 2024
1 parent 2cea66c commit 12724ce
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 48 deletions.
11 changes: 4 additions & 7 deletions AquaMai/AquaMai.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,6 @@ DEBUG</DefineConstants>
<Compile Include="Config.cs" />
<Compile Include="CustomKeyMap\Enable.cs" />
<Compile Include="CustomKeyMap\KeyCodeID.cs" />
<Compile Include="CustomSkin\CustomNoteSkin.cs" />
<Compile Include="Fix\BasicFix.cs" />
<Compile Include="Fix\DebugFeature.cs" />
<Compile Include="Fix\DisableReboot.cs" />
Expand All @@ -308,15 +307,14 @@ DEBUG</DefineConstants>
<Compile Include="Fix\I18nSingleAssemblyHook.cs" />
<Compile Include="Fix\RemoveEncryption.cs" />
<Compile Include="Fix\SkipVersionCheck.cs" />
<Compile Include="Fix\SlideAutoPlayTweak.cs" />
<Compile Include="Fix\SlideJudgeTweak.cs" />
<Compile Include="Helpers\GuiSizes.cs" />
<Compile Include="Helpers\MessageHelper.cs" />
<Compile Include="Helpers\MusicDirHelper.cs" />
<Compile Include="Helpers\SharedInstances.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Main.cs" />
<Compile Include="RenderTweak\SlideAutoPlayTweak.cs" />
<Compile Include="RenderTweak\SlideJudgeTweak.cs" />
<Compile Include="RenderTweak\TrackStartProcessTweak.cs" />
<Compile Include="Resources\Locale.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
Expand All @@ -339,6 +337,7 @@ DEBUG</DefineConstants>
<Compile Include="Utils\SelectionDetail.cs" />
<Compile Include="Utils\ShowNetErrorDetail.cs" />
<Compile Include="UX\CustomFont.cs" />
<Compile Include="UX\CustomNoteSkin.cs" />
<Compile Include="UX\CustomPlaceName.cs" />
<Compile Include="UX\CustomVersionString.cs" />
<Compile Include="UX\DemoMaster.cs" />
Expand All @@ -354,6 +353,7 @@ DEBUG</DefineConstants>
<Compile Include="UX\RunCommandOnEvents.cs" />
<Compile Include="UX\SinglePlayer.cs" />
<Compile Include="UX\TestProof.cs" />
<Compile Include="UX\TrackStartProcessTweak.cs" />
<Compile Include="WindowState\Enable.cs" />
</ItemGroup>
<ItemGroup>
Expand All @@ -374,9 +374,6 @@ DEBUG</DefineConstants>
<ItemGroup>
<Content Include="FodyWeavers.xml" />
</ItemGroup>
<ItemGroup>
<Folder Include="Performance\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="packages\Fody.6.8.1\build\Fody.targets" Condition="Exists('packages\Fody.6.8.1\build\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
Expand Down
3 changes: 3 additions & 0 deletions AquaMai/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public class UXConfig
public bool TestProof { get; set; }
public bool HideSelfMadeCharts { get; set; }
public bool CustomFont { get; set; }
public bool CustomNoteSkin { get; set; }
public bool TrackStartProcessTweak { get; set; }
public string CustomVersionString { get; set; } = "";
public string CustomPlaceName { get; set; } = "";
public string ExecOnIdle { get; set; } = "";
Expand All @@ -55,6 +57,7 @@ public class FixConfig
public int ExtendNotesPool { get; set; }
public bool FrameRateLock { get; set; }
public bool FontFix { get; set; }
public bool SlideJudgeTweak { get; set; }
}

public class UtilsConfig
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
using Manager;
using Monitor;

namespace AquaMai.RenderTweak;
namespace AquaMai.Fix;

public class SlideAutoPlayTweak
{
/* 这个 Patch 用于修复以下 bug:
* SlideFan 在 AutoPlay 时, 只有第一个箭头会消失
* 原 method 逻辑如下:
*
*
* if (this.IsNoteCheckTimeStartIgnoreJudgeWait())
* {
* // do something ...
Expand All @@ -34,7 +34,7 @@ public class SlideAutoPlayTweak
* }
* // do something ...
* }
*
*
* 导致这个 bug 的原因是 else 分支的 for 循环终止条件写错了, 应该是 11.0 (因为有 11 个箭头), SBGA 写成了 1.0
* 这个 method 中一共只有 5 处 ldc.r4 的 IL Code, 依次为 10.0, 11.0, 1.0, 1.0, 0.0
* 修复 bug 需要把第三处的 1.0 更改为 11.0, 这里使用 Transpiler 解决
Expand All @@ -61,7 +61,7 @@ private static IEnumerable<CodeInstruction> FixFanAutoPlayArrow(IEnumerable<Code
}
return instList;
}

/* 这个 Patch 让 Slide 在 AutoPlay 的时候, 每个区仍然会分按下和松开两段进行推进 (加上 this._hitIn 的变化)
* 原 method 逻辑如下:
*
Expand Down Expand Up @@ -98,5 +98,5 @@ private static void FixSlideAutoPlayArrow(
____hitIn = ____hitAreaList.Count * prop > ____hitIndex + 0.5f;
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Process;
using UnityEngine;

namespace AquaMai.RenderTweak;
namespace AquaMai.Fix;

public class SlideJudgeTweak
{
Expand Down Expand Up @@ -60,7 +60,7 @@ private static void FixCircleSlideJudgePosition(
}
}
}

/*
* 这个 Patch 让 Wifi Slide 的判定显示有上下的区别 (原本所有 Wifi 的判定显示都是朝向圆心的), 就像 majdata 里那样
* 这个 bug 产生的原因是 SBGA 忘记给 Wifi 的 EndButtonId 赋值了
Expand All @@ -86,4 +86,4 @@ private static void FixFanJudgeFilp(
}
}
}
}
}
11 changes: 2 additions & 9 deletions AquaMai/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using AquaMai.CustomSkin;
using AquaMai.Fix;
using AquaMai.Helpers;
using AquaMai.RenderTweak;
using AquaMai.Resources;
using AquaMai.Utils;
using AquaMai.UX;
Expand Down Expand Up @@ -160,19 +158,14 @@ public override void OnInitializeMelon()
Patch(typeof(ExtendNotesPool));
Patch(typeof(FixCheckAuth));
Patch(typeof(DebugFeature));
Patch(typeof(FixConnSlide));
Patch(typeof(SlideAutoPlayTweak));
// UX
Patch(typeof(CustomVersionString));
Patch(typeof(CustomPlaceName));
Patch(typeof(RunCommandOnEvents));
// Utils
Patch(typeof(JudgeAdjust));

// My Patches
Patch(typeof(CustomNoteSkin));
Patch(typeof(SlideAutoPlayTweak));
Patch(typeof(TrackStartProcessTweak));
Patch(typeof(SlideJudgeTweak));
Patch(typeof(FixConnSlide));
# if DEBUG
Patch(typeof(LogNetworkErrors));
# endif
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Reflection;
using System.IO;
using HarmonyLib;
using MelonLoader;
using Monitor;
using Monitor.Game;
using Process;
using UnityEngine;

namespace AquaMai.CustomSkin;
namespace AquaMai.UX;

public class CustomNoteSkin
{
private static readonly List<string> ImageExts = [".jpg", ".png", ".jpeg"];
private static readonly List<string> SlideFanFields = ["_normalSlideFan", "_eachSlideFan", "_breakSlideFan", "_breakSlideFanEff"];

private static Sprite customOutline;
private static Sprite[,] customSlideFan = new Sprite[4, 11];

Expand All @@ -28,7 +27,7 @@ private static bool LoadIntoGameNoteImageContainer(string fieldName, int? idx1,
MelonLogger.Msg($"[CustomNoteSkin] Cannot found field {fieldName}");
return false;
}

var fieldType = fieldTraverse.GetValueType();
if (!idx1.HasValue)
{
Expand Down Expand Up @@ -83,19 +82,19 @@ private static bool LoadIntoGameNoteImageContainer(string fieldName, int? idx1,

return true;
}

[HarmonyPostfix]
[HarmonyPatch(typeof(GameNotePrefabContainer), "Initialize")]
private static void LoadNoteSkin()
{
if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "Skins"))) return;

foreach (var laFile in Directory.EnumerateFiles(Path.Combine(Environment.CurrentDirectory, "Skins")))
{
if (!ImageExts.Contains(Path.GetExtension(laFile).ToLowerInvariant())) continue;
var texture = new Texture2D(1, 1, TextureFormat.RGBA32, false);
texture.LoadImage(File.ReadAllBytes(laFile));

var name = Path.GetFileNameWithoutExtension(laFile);
var args = name.Split('_');
// 文件名的格式是 XXXXXXXX_A_B 表示 GameNoteImageContainer._XXXXXXXX[A, B]
Expand All @@ -105,7 +104,7 @@ private static void LoadNoteSkin()
int? idx2 = (args.Length < 3)? null : (int.TryParse(args[2], out temp) ? temp : null);

Traverse traverse;

if (fieldName == "_outline")
{
customOutline = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), 1f);
Expand Down Expand Up @@ -140,14 +139,14 @@ private static void LoadNoteSkin()
0, SpriteMeshType.Tight, target.sprite.border
);
target.sprite = custom;

traverse = Traverse.Create(GameNotePrefabContainer.TouchTapC);
noticeObject = traverse.Field<GameObject>("NoticeObject").Value;
noticeObject.GetComponent<SpriteRenderer>().sprite = custom;
MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}");
continue;
}

if (fieldName == "_touchHold")
{
if (!idx1.HasValue)
Expand All @@ -170,7 +169,7 @@ private static void LoadNoteSkin()
MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}");
continue;
}

if (fieldName == "_normalTouchBorder")
{
if (!idx1.HasValue)
Expand All @@ -192,7 +191,7 @@ private static void LoadNoteSkin()
MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}");
continue;
}

if (fieldName == "_eachTouchBorder")
{
if (!idx1.HasValue)
Expand All @@ -214,14 +213,14 @@ private static void LoadNoteSkin()
MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}");
continue;
}

if (LoadIntoGameNoteImageContainer(fieldName, idx1, idx2, texture))
{
MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}");
}
}
}

[HarmonyPostfix]
[HarmonyPatch(typeof(GameCtrl), "Initialize")]
private static void ChangeOutlineTexture(GameObject ____guideEndPointObj)
Expand All @@ -231,7 +230,7 @@ private static void ChangeOutlineTexture(GameObject ____guideEndPointObj)
____guideEndPointObj.GetComponent<SpriteRenderer>().sprite = customOutline;
}
}

[HarmonyPostfix]
[HarmonyPatch(typeof(SlideFan), "Initialize")]
private static void ChangeFanTexture(
Expand All @@ -251,7 +250,7 @@ private static void ChangeFanTexture(
position = ____spriteLines[2 * i].transform.localPosition;
____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z);
____spriteLines[2 * i].color = Color.white;

____spriteLines[2 * i + 1].sprite = sprite;
position = ____spriteLines[2 * i + 1].transform.localPosition;
____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z);
Expand All @@ -264,7 +263,7 @@ private static void ChangeFanTexture(
position = ____effectSprites[2 * i].transform.localPosition;
____effectSprites[2 * i].transform.localPosition = new Vector3(0, position.y, position.z);
____effectSprites[2 * i].color = Color.white;

____effectSprites[2 * i + 1].sprite = sprite;
position = ____effectSprites[2 * i + 1].transform.localPosition;
____effectSprites[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z);
Expand All @@ -283,7 +282,7 @@ private static void ChangeFanTexture(
position = ____spriteLines[2 * i].transform.localPosition;
____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z);
____spriteLines[2 * i].color = Color.white;

____spriteLines[2 * i + 1].sprite = sprite;
position = ____spriteLines[2 * i + 1].transform.localPosition;
____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z);
Expand All @@ -302,7 +301,7 @@ private static void ChangeFanTexture(
position = ____spriteLines[2 * i].transform.localPosition;
____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z);
____spriteLines[2 * i].color = Color.white;

____spriteLines[2 * i + 1].sprite = sprite;
position = ____spriteLines[2 * i + 1].transform.localPosition;
____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z);
Expand All @@ -311,4 +310,4 @@ private static void ChangeFanTexture(
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using UI;
using UnityEngine;

namespace AquaMai.RenderTweak;
namespace AquaMai.UX;

public class TrackStartProcessTweak
{
Expand Down Expand Up @@ -80,4 +80,4 @@ private static void DisableTabs(
____musicTabObj[1].gameObject.SetActive(false);
____musicTabObj[2].gameObject.SetActive(false);
}
}
}

0 comments on commit 12724ce

Please sign in to comment.