diff --git a/Enhancements/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs b/Enhancements/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs index d4a3ef5..05e185b 100644 --- a/Enhancements/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs +++ b/Enhancements/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs @@ -21,7 +21,7 @@ class patch_OperationManager: OperationManager { try { File.WriteAllText(_fileName, MovieIndex.ToString()); } catch(Exception ex) { - Debug.Log(ex); + Debug.Log("Unable to write attract selection: " + ex); } } get { diff --git a/Extras/MoreProfileOptions/MU3.CustomUI/patch_MU3UICounter.cs b/Extras/MoreProfileOptions/MU3.CustomUI/patch_MU3UICounter.cs index 0d569b7..f7963d3 100644 --- a/Extras/MoreProfileOptions/MU3.CustomUI/patch_MU3UICounter.cs +++ b/Extras/MoreProfileOptions/MU3.CustomUI/patch_MU3UICounter.cs @@ -1,11 +1,13 @@ -namespace MU3.CustomUI; +using MU3.Mod; + +namespace MU3.CustomUI; class patch_MU3UICounter: MU3UICounter { protected extern void orig_calcNumFiguresFloat(double value); protected new void calcNumFiguresFloat(double value) { orig_calcNumFiguresFloat(value); if(isDispSuffix) { - pushFigureFront(10); + pushFigureFront(CustomRating.GetSuffix()); } } public bool isDispSuffix { get; set; } diff --git a/Extras/MoreProfileOptions/MU3.Data/patch_GameData.cs b/Extras/MoreProfileOptions/MU3.Data/patch_GameData.cs index caf2e69..5ba1ef7 100644 --- a/Extras/MoreProfileOptions/MU3.Data/patch_GameData.cs +++ b/Extras/MoreProfileOptions/MU3.Data/patch_GameData.cs @@ -6,8 +6,8 @@ namespace MU3.Data; class patch_GameData: GameData { public extern static RatingColorID orig_getRatingColorIDFromRating100(int rating100); public static new RatingColorID getRatingColorIDFromRating100(int rating100) { - if(NaiveRating.IsEnabled()) { - return orig_getRatingColorIDFromRating100(NaiveRating.Get()); + if(CustomRating.IsEnabled()) { + return orig_getRatingColorIDFromRating100(CustomRating.Get()); } else { return orig_getRatingColorIDFromRating100(rating100); } diff --git a/Extras/MoreProfileOptions/MU3.Game/patch_SessionResult.cs b/Extras/MoreProfileOptions/MU3.Game/patch_SessionResult.cs index 698a45f..84828ec 100644 --- a/Extras/MoreProfileOptions/MU3.Game/patch_SessionResult.cs +++ b/Extras/MoreProfileOptions/MU3.Game/patch_SessionResult.cs @@ -1,14 +1,13 @@ -using MU3.Battle; -using MU3.Mod; +using MU3.Mod; namespace MU3.Game; class patch_SessionResult: SessionResult { - public int prevNaiveRating; + public int prevCustomRating; public extern void orig_calcTotalRewards(); public new void calcTotalRewards() { orig_calcTotalRewards(); - prevNaiveRating = NaiveRating.Get(); + prevCustomRating = CustomRating.Get(); } } diff --git a/Extras/MoreProfileOptions/MU3.Mod/CustomRating.cs b/Extras/MoreProfileOptions/MU3.Mod/CustomRating.cs new file mode 100644 index 0000000..7ed0d8e --- /dev/null +++ b/Extras/MoreProfileOptions/MU3.Mod/CustomRating.cs @@ -0,0 +1,105 @@ +using MU3.Data; +using MU3.DataStudio; +using MU3.User; +using MU3.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace MU3.Mod; + +public static class CustomRating { + // Adapted from MU3.User.UserRating.calcBest() + private static RatingList calcNaive() { + RatingList ratingList = []; + + var usMgr = Singleton.instance; + var musicDict = usMgr.userMusic; + + foreach(KeyValuePair item in musicDict) { + var musicData = SingletonStateMachine + .instance.getMusicData(item.Key); + + if(musicData == null || item.Key == 1 || musicData.isBonusTrack) { + continue; + } + for(int i = 0; i < 5; i++) { + var fumenDifficulty = (FumenDifficulty)i; + var userFumen = usMgr.getUserFumen(item.Key, fumenDifficulty, create: false); + if(userFumen == null) { + continue; + } + Rating rating = new(musicData.id, fumenDifficulty, userFumen.TechScoreMax); + if(rating.level100 == 0) { + continue; + } + ratingList.Add(rating); + } + } + + ratingList.Sort(); + return ratingList; + } + public static int GetNaive() { + int res = 0; + foreach(Rating best in calcNaive().Take(45)) { + res += best.rate100; + } + return res / 45; + } + + public static int GetReachable() { + FieldInfo piOld = typeof(UserRating).GetField("_bestOldList", BindingFlags.Instance | BindingFlags.NonPublic); + FieldInfo piNew = typeof(UserRating).GetField("_bestNewList", BindingFlags.Instance | BindingFlags.NonPublic); + + var ur = Singleton.instance.userRating; + + int res = 0; + int top = 0; + foreach(Rating best in ((RatingList)piOld.GetValue(ur))) { + res += best.rate100; + if(best.musicID < 7000) { + top = Math.Max(top, best.rate100); + } + } + foreach(Rating best in ((RatingList)piNew.GetValue(ur))) { + res += best.rate100; + if(best.musicID < 7000) { + top = Math.Max(top, best.rate100); + } + } + + res += top * 10; + + return res / 55; + } + + public static bool IsNaiveEnabled() { + return Singleton.instance.userOption.customSet.Rating == (UserOption.eRating)patch_UserOption.eRating.Naive; + } + public static bool IsReachableEnabled() { + return Singleton.instance.userOption.customSet.Rating == (UserOption.eRating)patch_UserOption.eRating.Reachable; + } + public static bool IsEnabled() { + return IsNaiveEnabled() || IsReachableEnabled(); + } + + public static int Get() { + if(IsNaiveEnabled()) { + return GetNaive(); + } else if(IsReachableEnabled()) { + return GetReachable(); + } else { + return 0; + } + } + + public static byte GetSuffix() { + if(IsNaiveEnabled()) { + return MU3CounterBase.FigurePlus; + } else { + return MU3CounterBase.FigureMinus; + } + } +} \ No newline at end of file diff --git a/Extras/MoreProfileOptions/MU3.Mod/NaiveRating.cs b/Extras/MoreProfileOptions/MU3.Mod/NaiveRating.cs deleted file mode 100644 index 58e95d4..0000000 --- a/Extras/MoreProfileOptions/MU3.Mod/NaiveRating.cs +++ /dev/null @@ -1,52 +0,0 @@ -using MU3.Data; -using MU3.DataStudio; -using MU3.User; -using MU3.Util; -using System.Collections.Generic; -using System.Linq; - -namespace MU3.Mod; - -public static class NaiveRating { - // Adapted from MU3.User.UserRating.calcBest() - private static RatingList calcSane() { - RatingList ratingList = []; - - var usMgr = Singleton.instance; - var musicDict = usMgr.userMusic; - - foreach(KeyValuePair item in musicDict) { - var musicData = SingletonStateMachine - .instance.getMusicData(item.Key); - - if(musicData == null || item.Key == 1 || musicData.isBonusTrack) { - continue; - } - for(int i = 0; i < 5; i++) { - var fumenDifficulty = (FumenDifficulty)i; - var userFumen = usMgr.getUserFumen(item.Key, fumenDifficulty, create: false); - if(userFumen == null) { - continue; - } - Rating rating = new(musicData.id, fumenDifficulty, userFumen.TechScoreMax); - if(rating.level100 == 0) { - continue; - } - ratingList.Add(rating); - } - } - - ratingList.Sort(); - return ratingList; - } - public static int Get() { - int res = 0; - foreach(Rating best in calcSane().Take(45)) { - res += best.rate100; - } - return res / 45; - } - public static bool IsEnabled() { - return Singleton.instance.userOption.customSet.Rating == (UserOption.eRating)patch_UserOption.eRating.Naive; - } -} \ No newline at end of file diff --git a/Extras/MoreProfileOptions/MU3.Notes/patch_NotesManager.cs b/Extras/MoreProfileOptions/MU3.Notes/patch_NotesManager.cs index e8ca917..aebdb5d 100644 --- a/Extras/MoreProfileOptions/MU3.Notes/patch_NotesManager.cs +++ b/Extras/MoreProfileOptions/MU3.Notes/patch_NotesManager.cs @@ -1,9 +1,6 @@ using MU3.Battle; -using MU3.DataStudio; -using MU3.DB; using MU3.User; using MU3.Util; -using UnityEngine; namespace MU3.Notes; @@ -30,7 +27,6 @@ class patch_NotesManager: NotesManager { UserManager userManager = Singleton.instance; _userFumen = userManager.getUserFumen(_sessionInfo.musicData.id, _sessionInfo.musicLevel, create: false); _previousPb = _userFumen?.TechScoreMax ?? 0; - UnityEngine.Debug.Log(_previousPb + "HELLO THIS ONLY EXECUTES ONCE"); } threshold = _previousPb; break; diff --git a/Extras/MoreProfileOptions/MU3.SceneObject/patch_ANM_CMN_User.cs b/Extras/MoreProfileOptions/MU3.SceneObject/patch_ANM_CMN_User.cs index 8537680..0acd1f0 100644 --- a/Extras/MoreProfileOptions/MU3.SceneObject/patch_ANM_CMN_User.cs +++ b/Extras/MoreProfileOptions/MU3.SceneObject/patch_ANM_CMN_User.cs @@ -7,7 +7,7 @@ class patch_ANM_CMN_UserDeta_01: ANM_CMN_UserDeta_01 { private patch_MU3UICounter rating; public extern void orig_setUserDetail(); public new void setUserDetail() { - rating.isDispSuffix = NaiveRating.IsEnabled(); + rating.isDispSuffix = CustomRating.IsEnabled(); orig_setUserDetail(); } } diff --git a/Extras/MoreProfileOptions/MU3.User/patch_UserOption.cs b/Extras/MoreProfileOptions/MU3.User/patch_UserOption.cs index 02dec38..675a23f 100644 --- a/Extras/MoreProfileOptions/MU3.User/patch_UserOption.cs +++ b/Extras/MoreProfileOptions/MU3.User/patch_UserOption.cs @@ -9,7 +9,8 @@ class patch_UserOption: UserOption { Default = 1, ON = 1, Naive = 2, - MAX = 2 + Reachable = 3, + MAX = 3 } [MonoModEnumReplace] @@ -22,7 +23,7 @@ class patch_UserOption: UserOption { PB = 5, FB = 6, ZERO = 7, - MAX = 8, + MAX = 7, Default = 0 } diff --git a/Extras/MoreProfileOptions/MU3.User/patch_UserUtil.cs b/Extras/MoreProfileOptions/MU3.User/patch_UserUtil.cs index 1c4dccc..fab8ee5 100644 --- a/Extras/MoreProfileOptions/MU3.User/patch_UserUtil.cs +++ b/Extras/MoreProfileOptions/MU3.User/patch_UserUtil.cs @@ -7,8 +7,8 @@ namespace MU3.User; public static class patch_UserUtil { public extern static float orig_toRatingFloat(int rating); public static float toRatingFloat(int rating) { - if(NaiveRating.IsEnabled()) { - return orig_toRatingFloat(NaiveRating.Get()); + if(CustomRating.IsEnabled()) { + return orig_toRatingFloat(CustomRating.Get()); } else { return orig_toRatingFloat(rating); } diff --git a/Extras/MoreProfileOptions/MU3/patch_ANM_SWH_Profile.cs b/Extras/MoreProfileOptions/MU3/patch_ANM_SWH_Profile.cs deleted file mode 100644 index 9af48b6..0000000 --- a/Extras/MoreProfileOptions/MU3/patch_ANM_SWH_Profile.cs +++ /dev/null @@ -1,24 +0,0 @@ -using MU3.User; -using MU3.Util; -using MU3.Mod; - -namespace MU3; - -class patch_ANM_SWH_Profile: ANM_SWH_Profile { - public extern void orig_setUpLogin(); - - // Fixes login display - public new void setUpLogin() { - UserManager instance = Singleton.instance; - var up = instance.userPreview; - if(NaiveRating.IsEnabled()) { - up.dispRating = 0; - instance.userPreview = up; - orig_setUpLogin(); - up.dispRating = 2; - instance.userPreview = up; - } else { - orig_setUpLogin(); - } - } -} \ No newline at end of file diff --git a/Extras/MoreProfileOptions/MU3/patch_OptionMiniSummaryController.cs b/Extras/MoreProfileOptions/MU3/patch_OptionMiniSummaryController.cs index bfa203b..7a1b6e1 100644 --- a/Extras/MoreProfileOptions/MU3/patch_OptionMiniSummaryController.cs +++ b/Extras/MoreProfileOptions/MU3/patch_OptionMiniSummaryController.cs @@ -20,6 +20,9 @@ class patch_OptionMiniSummaryController: OptionMiniSummaryController { case 2: comp.text = "TYPE-B"; break; + case 3: + comp.text = "TYPE-C"; + break; } } else if(id == UserOption.OptionName.Abort) { switch(value) { diff --git a/Extras/MoreProfileOptions/MU3/patch_OptionSelecterController.cs b/Extras/MoreProfileOptions/MU3/patch_OptionSelecterController.cs index f59dd2a..64a741c 100644 --- a/Extras/MoreProfileOptions/MU3/patch_OptionSelecterController.cs +++ b/Extras/MoreProfileOptions/MU3/patch_OptionSelecterController.cs @@ -16,7 +16,7 @@ class patch_OptionSelecterController: OptionSelecterController { public extern void orig_init(UserOption.OptionName id); public new void init(UserOption.OptionName id) { orig_init(id); - cpFuncArray[33].max = 2; + cpFuncArray[33].max = 3; cpFuncArray[4].max = 7; if(id == UserOption.OptionName.Rating) { @@ -28,12 +28,15 @@ class patch_OptionSelecterController: OptionSelecterController { var spritesFi = typeof(MU3UIImageChanger).GetField("_sprites", BindingFlags.Instance | BindingFlags.NonPublic); var tex = ((Sprite[])spritesFi.GetValue(changer))[0].texture; - var newSprites = new Sprite[3]; - spritesFi.SetValue(changer, newSprites); + spritesFi.SetValue(changer, new Sprite[4]); changer.setSprite(0, Sprite.Create(tex, new Rect(1552.0f, 366.0f, 160.0f, 65.0f), new Vector2(80.0f, 0.0f))); changer.setSprite(1, Sprite.Create(tex, new Rect(1221.0f, 1488.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); - changer.setSprite(2, Sprite.Create(tex, new Rect(1221.0f, 1410.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); + changer.setSprite(2, Sprite.Create(tex, new Rect(1223.0f, 1410.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); + changer.setSprite(3, Sprite.Create(tex, new Rect(1508.0f, 1346.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); + //changer.setSprite(4, Sprite.Create(tex, new Rect(1389.0f, 1424.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); + //changer.setSprite(5, Sprite.Create(tex, new Rect(941.0f, 1502.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); + //changer.setSprite(6, Sprite.Create(tex, new Rect(797.0f, 1604.0f, 160.0f, 70.0f), new Vector2(80.0f, 35.0f))); setInputCursor((int)Singleton.instance.userOption.customSet.Rating); } diff --git a/Extras/MoreProfileOptions/MU3/patch_UIResultBattlePoint.cs b/Extras/MoreProfileOptions/MU3/patch_UIResultBattlePoint.cs index f1e785a..cccde57 100644 --- a/Extras/MoreProfileOptions/MU3/patch_UIResultBattlePoint.cs +++ b/Extras/MoreProfileOptions/MU3/patch_UIResultBattlePoint.cs @@ -1,9 +1,9 @@ using MonoMod; using MU3.CustomUI; +using MU3.Game; +using MU3.Mod; using MU3.Sequence; using MU3.User; -using MU3.Mod; -using MU3.Game; using UnityEngine; namespace MU3; @@ -21,22 +21,21 @@ class patch_UIResultBattlePoint: UIResultBattlePoint { public extern void orig_initTechRating(PlayInfo playInfo); public new void initTechRating(PlayInfo playInfo) { - counterScore_.isDispSuffix = NaiveRating.IsEnabled(); - if(!NaiveRating.IsEnabled()) { + counterScore_.isDispSuffix = CustomRating.IsEnabled(); + if(!CustomRating.IsEnabled()) { orig_initTechRating(playInfo); return; } - int prevRating = ((patch_SessionResult)playInfo.sessionResult).prevNaiveRating; - int rating1 = NaiveRating.Get(); + int prevRating = ((patch_SessionResult)playInfo.sessionResult).prevCustomRating; + int rating1 = CustomRating.Get(); - UnityEngine.Debug.Log(prevRating + " " + rating1); if((bool)hideScore_) { hideScore_.SetActive(false); } counterScore_.Counter = (double)UserUtil.toRatingFloat(rating1); int ratingPatternNo = UserUtil.toRatingPatternNo(rating1); counterScore_.SpriteIndex = ratingPatternNo; - imageHeader_.patternNumber = (float)ratingPatternNo; + imageHeader_.patternNumber = ratingPatternNo; int rating2 = rating1 - prevRating; if(rating2 == 0) { disable(counterScorePlus_); diff --git a/Extras/PlatinumTiming/MU3.Game/patch_SessionResult.cs b/Extras/PlatinumTiming/MU3.Game/patch_SessionResult.cs index b970459..f34cb8a 100644 --- a/Extras/PlatinumTiming/MU3.Game/patch_SessionResult.cs +++ b/Extras/PlatinumTiming/MU3.Game/patch_SessionResult.cs @@ -1,6 +1,4 @@ -using MonoMod; - -namespace MU3.Game; +namespace MU3.Game; // This is in SessionResult because BattleResult is a struct class patch_SessionResult: SessionResult {