From 25ca07edd623d3d538b9e8cf1b0adfb9d9ae633a Mon Sep 17 00:00:00 2001 From: akanyan Date: Sat, 21 Dec 2024 13:55:36 +0000 Subject: [PATCH] fix: misc cleanup Also set HideVersion default to false Also fix the new skipper crashing on tutorial --- BetterGiveUp/MU3.Game/patch_GameLED.cs | 2 -- BetterGiveUp/MU3.Notes/patch_FieldObject.cs | 2 +- BetterGiveUp/MU3.Notes/patch_NotesManager.cs | 6 ++---- BetterGiveUp/MU3/patch_Scene_37_Result.cs | 19 ++++++------------- BetterGiveUp/MU3/patch_Scene_38_End.cs | 12 ++++-------- Blacklist/MU3.User/patch_UserManager.cs | 1 + DisableEncryption/MU3/patch_NetConfig.cs | 1 - InfiniteGP/MU3/patch_Scene_25_Login.cs | 9 +++++---- InfiniteGP/MU3/patch_UICredit.cs | 2 +- LoadBoost/MU3.Data/patch_DataStudioManager.cs | 4 +--- PlatinumTiming/MU3.Battle/patch_Counters.cs | 1 + PlatinumTiming/MU3.Battle/patch_GameEngine.cs | 1 + .../MU3.Game/patch_SessionResult.cs | 1 + PlatinumTiming/MU3/patch_UIResultTechScore.cs | 1 + SelectBGM/MU3.Sequence/patch_Play.cs | 1 + ...tch_Scene_32_PrePlayMusic_ChapterSelect.cs | 5 ++--- SkipNotice/MU3/patch_DailyBonus.cs | 1 + SkipNotice/MU3/patch_Scene_30_NoticeReward.cs | 3 +++ .../MU3.Sequence/patch_PlayMusic.cs | 17 ++++++++++------- .../MU3.CustomUI/patch_MU3UIImageChanger.cs | 12 ------------ .../MU3.DB/patch_MusicSort2IDEnum.cs | 2 +- .../MU3.User/patch_UserDetail.cs | 1 + .../patch_MusicSelectViewDataList.cs | 1 - ...patch_Scene_32_PrePlayMusic_MusicSelect.cs | 2 +- .../MU3/patch_UISortButton.cs | 16 ++++++++++------ UnlockAllMusic/MU3/patch_Scene_25_Login.cs | 2 ++ .../patch_Scene_32_PrePlayMusic_Confirm.cs | 2 +- UnlockFrameRate/MU3.Sys/patch_Config.cs | 2 +- 28 files changed, 59 insertions(+), 70 deletions(-) delete mode 100644 SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs diff --git a/BetterGiveUp/MU3.Game/patch_GameLED.cs b/BetterGiveUp/MU3.Game/patch_GameLED.cs index 2374d62..e676c96 100644 --- a/BetterGiveUp/MU3.Game/patch_GameLED.cs +++ b/BetterGiveUp/MU3.Game/patch_GameLED.cs @@ -6,13 +6,11 @@ class patch_GameLED: GameLED { private patch_ButtonList _buttonList = new(); public extern void orig_initialize(); - public new void initialize() { _buttonList.Clear(); orig_initialize(); } private class patch_ButtonParam { } - private class patch_ButtonList: List { } } \ No newline at end of file diff --git a/BetterGiveUp/MU3.Notes/patch_FieldObject.cs b/BetterGiveUp/MU3.Notes/patch_FieldObject.cs index 790342d..977f485 100644 --- a/BetterGiveUp/MU3.Notes/patch_FieldObject.cs +++ b/BetterGiveUp/MU3.Notes/patch_FieldObject.cs @@ -1,11 +1,11 @@ using UnityEngine; namespace MU3.Notes; + class patch_FieldObject: FieldObject { class patch_BarNotes { class patch_Bar: BarNotes.Bar { public extern void orig_update(NotesManager mgr, float width = 1f); - public new void update(NotesManager mgr, float width = 1f) { orig_update(mgr, width); if(frameAppear <= (double)mgr.getCurrentFrame() || itemBar == null) { diff --git a/BetterGiveUp/MU3.Notes/patch_NotesManager.cs b/BetterGiveUp/MU3.Notes/patch_NotesManager.cs index 413f918..cb4f5fa 100644 --- a/BetterGiveUp/MU3.Notes/patch_NotesManager.cs +++ b/BetterGiveUp/MU3.Notes/patch_NotesManager.cs @@ -3,14 +3,12 @@ namespace MU3.Notes; class patch_NotesManager: NotesManager { - public extern void orig_reset(); - - public extern Vector3 orig_getEnemyPos(); - public Vector3 enemyOffset { get; set; } + public extern Vector3 orig_getEnemyPos(); public new Vector3 getEnemyPos() => orig_getEnemyPos() + enemyOffset; + public extern void orig_reset(); public new void reset() { enemyOffset = Vector3.zero; orig_reset(); diff --git a/BetterGiveUp/MU3/patch_Scene_37_Result.cs b/BetterGiveUp/MU3/patch_Scene_37_Result.cs index 23f4b26..5344369 100644 --- a/BetterGiveUp/MU3/patch_Scene_37_Result.cs +++ b/BetterGiveUp/MU3/patch_Scene_37_Result.cs @@ -1,3 +1,4 @@ +using MonoMod; using MU3.Sequence; using MU3.Util; @@ -5,21 +6,13 @@ namespace MU3; class patch_Scene_37_Result: Scene_37_Result { private Mode mode_; - private extern void orig_Init_Init(); + + [MonoModIgnore] private enum State { - Init, - Score, - Assignment, - ReleaseMaster, - GetMusic, - UnlockScenario, - Event, - MemoryChapterEvent, - CardCharaUp, - CardCharaWaitSkip, - CardCharaEnd, - End + End = 11 } + + private extern void orig_Init_Init(); private void Init_Init() { orig_Init_Init(); if(patch_PlayMusic.QuickSkip) { diff --git a/BetterGiveUp/MU3/patch_Scene_38_End.cs b/BetterGiveUp/MU3/patch_Scene_38_End.cs index 060dc85..9f95bb2 100644 --- a/BetterGiveUp/MU3/patch_Scene_38_End.cs +++ b/BetterGiveUp/MU3/patch_Scene_38_End.cs @@ -1,3 +1,4 @@ +using MonoMod; using MU3.Sequence; using MU3.Util; @@ -8,15 +9,10 @@ class patch_Scene_38_End: Scene_38_End { private extern void orig_Init_Init(); private int result_; private UICommonWindow commonWindow_; + + [MonoModIgnore] private enum State { - Init, - Continue, - SendResultContinue, - EndContinue, - ForceLogout, - ConsumeGP, - End, - WaitDestroy + End = 6 } private void Init_Init() { diff --git a/Blacklist/MU3.User/patch_UserManager.cs b/Blacklist/MU3.User/patch_UserManager.cs index 981c144..cd251e8 100644 --- a/Blacklist/MU3.User/patch_UserManager.cs +++ b/Blacklist/MU3.User/patch_UserManager.cs @@ -1,6 +1,7 @@ using MU3.DataStudio; namespace MU3.User; + class patch_UserManager: UserManager { private bool _loadedBlacklistData = false; private int _blacklistMin = -1; diff --git a/DisableEncryption/MU3/patch_NetConfig.cs b/DisableEncryption/MU3/patch_NetConfig.cs index 1717938..5797dea 100644 --- a/DisableEncryption/MU3/patch_NetConfig.cs +++ b/DisableEncryption/MU3/patch_NetConfig.cs @@ -5,7 +5,6 @@ namespace MU3; [MonoModPatch("global::MU3.NetConfig")] public static class patch_NetConfig { private static int encryptVersion_; - private static bool useTLS_; public static int EncryptVersion { diff --git a/InfiniteGP/MU3/patch_Scene_25_Login.cs b/InfiniteGP/MU3/patch_Scene_25_Login.cs index 05466ea..c1e0885 100644 --- a/InfiniteGP/MU3/patch_Scene_25_Login.cs +++ b/InfiniteGP/MU3/patch_Scene_25_Login.cs @@ -1,20 +1,21 @@ +using MonoMod; using MU3.Util; namespace MU3; class patch_Scene_25_Login: Scene_25_Login { + [MonoModIgnore] public enum State { Login = 2 } private Mode mode_; - private extern void orig_invokeOnFinish(int status); + + [MonoModIgnore] + private extern void invokeOnFinish(int status); private void PurchaseGP_Init() { mode_.set(State.Login); } - private void invokeOnFinish(int status) { - orig_invokeOnFinish(status); - } private void ExchangeGP_Init() { invokeOnFinish(1); } diff --git a/InfiniteGP/MU3/patch_UICredit.cs b/InfiniteGP/MU3/patch_UICredit.cs index 32b431d..4617f23 100644 --- a/InfiniteGP/MU3/patch_UICredit.cs +++ b/InfiniteGP/MU3/patch_UICredit.cs @@ -53,7 +53,7 @@ class patch_UICredit: UICredit { groupIcon_.image.rectTransform.pivot = new Vector2(0f, 0.5f); } - if(iniFile.getValue("Extra", "HideVersion", true)) { + if(iniFile.getValue("Extra", "HideVersion", false)) { version_.transform.localScale = new Vector3(0, 0, 0); } } diff --git a/LoadBoost/MU3.Data/patch_DataStudioManager.cs b/LoadBoost/MU3.Data/patch_DataStudioManager.cs index 994354a..2ab4c72 100644 --- a/LoadBoost/MU3.Data/patch_DataStudioManager.cs +++ b/LoadBoost/MU3.Data/patch_DataStudioManager.cs @@ -9,8 +9,6 @@ public class patch_DataStudioManager: DataStudioManager { private static string _fileName; private static Dictionary _dataCache; - private static extern bool orig_Deserialize(string filePath, out T dsr) where T : new(); - private static void initCache() { using IniFile iniFile = new("mu3.ini"); var dir = iniFile.getValue("Extra", "CacheDir", "."); @@ -37,6 +35,7 @@ public class patch_DataStudioManager: DataStudioManager { new BinaryFormatter().Serialize(serializationStream, _dataCache); } + private static extern bool orig_Deserialize(string filePath, out T dsr) where T : new(); private static bool Deserialize(string filePath, out T dsr) where T : new() { if(_dataCache == null) { initCache(); @@ -54,7 +53,6 @@ public class patch_DataStudioManager: DataStudioManager { } public extern bool orig_IsLoaded(); - public new bool IsLoaded() { if(orig_IsLoaded()) { if(needSave) { diff --git a/PlatinumTiming/MU3.Battle/patch_Counters.cs b/PlatinumTiming/MU3.Battle/patch_Counters.cs index 6f506ff..f0327f4 100644 --- a/PlatinumTiming/MU3.Battle/patch_Counters.cs +++ b/PlatinumTiming/MU3.Battle/patch_Counters.cs @@ -1,6 +1,7 @@ using MU3.Notes; namespace MU3.Battle; + class patch_Counters: Counters { public int PlatinumFastCount { get; private set; } = 0; public int PlatinumLateCount { get; private set; } = 0; diff --git a/PlatinumTiming/MU3.Battle/patch_GameEngine.cs b/PlatinumTiming/MU3.Battle/patch_GameEngine.cs index 688585d..b37d40e 100644 --- a/PlatinumTiming/MU3.Battle/patch_GameEngine.cs +++ b/PlatinumTiming/MU3.Battle/patch_GameEngine.cs @@ -1,6 +1,7 @@ using MU3.Game; namespace MU3.Battle; + class patch_GameEngine: GameEngine { private patch_Counters _counters; public extern void orig_calcCurrentBattleResult(SessionResult sessionResult); diff --git a/PlatinumTiming/MU3.Game/patch_SessionResult.cs b/PlatinumTiming/MU3.Game/patch_SessionResult.cs index 13c03ce..db11f1c 100644 --- a/PlatinumTiming/MU3.Game/patch_SessionResult.cs +++ b/PlatinumTiming/MU3.Game/patch_SessionResult.cs @@ -1,4 +1,5 @@ namespace MU3.Game; + class patch_SessionResult: SessionResult { public int PlatinumFastCount { get; set; } public int PlatinumLateCount { get; set; } diff --git a/PlatinumTiming/MU3/patch_UIResultTechScore.cs b/PlatinumTiming/MU3/patch_UIResultTechScore.cs index 0797458..4f3b4d8 100644 --- a/PlatinumTiming/MU3/patch_UIResultTechScore.cs +++ b/PlatinumTiming/MU3/patch_UIResultTechScore.cs @@ -6,6 +6,7 @@ using System.Collections; using UnityEngine; namespace MU3; + class patch_UIResultTechScore: UIResultTechScore { private MU3UICounter counterFast_; private MU3UICounter counterLate_; diff --git a/SelectBGM/MU3.Sequence/patch_Play.cs b/SelectBGM/MU3.Sequence/patch_Play.cs index 65237aa..4dfa167 100644 --- a/SelectBGM/MU3.Sequence/patch_Play.cs +++ b/SelectBGM/MU3.Sequence/patch_Play.cs @@ -4,6 +4,7 @@ using MU3.Util; using System; namespace MU3.Sequence; + class patch_Play: Play { private LocalSessionInfo _localSessionInfo; diff --git a/SelectBGM/MU3/patch_Scene_32_PrePlayMusic_ChapterSelect.cs b/SelectBGM/MU3/patch_Scene_32_PrePlayMusic_ChapterSelect.cs index 62c2b18..d35c8bb 100644 --- a/SelectBGM/MU3/patch_Scene_32_PrePlayMusic_ChapterSelect.cs +++ b/SelectBGM/MU3/patch_Scene_32_PrePlayMusic_ChapterSelect.cs @@ -4,6 +4,7 @@ using MU3.Util; using MU3.ViewData; namespace MU3; + class patch_Scene_32_PrePlayMusic_ChapterSelect: Scene_32_PrePlayMusic_ChapterSelect { private ChapterSelectorItemViewData _selectItemViewData; private extern void orig_onChangeElement(int index, int indexRaw); @@ -13,9 +14,7 @@ class patch_Scene_32_PrePlayMusic_ChapterSelect: Scene_32_PrePlayMusic_ChapterSe patch_GameBGM.WithholdPlay = false; int selectorID = ( - (_selectItemViewData.memoryChapterViewData == null) - ? null - : _selectItemViewData.memoryChapterViewData.memoryChapterData + _selectItemViewData.memoryChapterViewData?.memoryChapterData )?.getMemoryChapterSelectorID() ?? patch_Play.RecentID; Singleton.instance.gameBGM.playBGM(233, selectorID); } diff --git a/SkipNotice/MU3/patch_DailyBonus.cs b/SkipNotice/MU3/patch_DailyBonus.cs index c5a82ec..4e4584d 100644 --- a/SkipNotice/MU3/patch_DailyBonus.cs +++ b/SkipNotice/MU3/patch_DailyBonus.cs @@ -2,6 +2,7 @@ using MU3.Util; namespace MU3; + class patch_DailyBonus: DailyBonus { [MonoModIgnore] private enum State { diff --git a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs index 1eedd11..f202896 100644 --- a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs +++ b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs @@ -1,9 +1,12 @@ +using MonoMod; using MU3.Util; namespace MU3; class patch_Scene_30_NoticeReward: Scene_30_NoticeReward { private Mode _mode; + + [MonoModIgnore] private enum State { RankingReward = 2, FadeOut = 8, diff --git a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs index 7623384..b827a74 100644 --- a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs +++ b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs @@ -27,13 +27,16 @@ class patch_PlayMusic: PlayMusic { _nuclearSkip = true; } if(_nuclearSkip) { - if(state < EState.CalcResult) { - setNextState(EState.CalcResult); - } - if(state > EState.CalcResult) { - int selectorID = SingletonStateMachine.instance.getMemoryChapterData(_sessionInfo.chapterSelection.memoryChapterId)?.getMemoryChapterSelectorID() ?? 4; - Singleton.instance.gameBGM.playBGM(236, selectorID); - setNextState(EState.End); + bool isTutorial = SingletonMonoBehaviour.instance.sessionInfo.isTutorial; + if(!isTutorial) { + if(state < EState.CalcResult) { + setNextState(EState.CalcResult); + } + if(state > EState.CalcResult) { + int selectorID = SingletonStateMachine.instance.getMemoryChapterData(_sessionInfo.chapterSelection.memoryChapterId)?.getMemoryChapterSelectorID() ?? 4; + Singleton.instance.gameBGM.playBGM(236, selectorID); + setNextState(EState.End); + } } } return orig_updateState(deltaTime); diff --git a/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs b/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs deleted file mode 100644 index 7d6d93e..0000000 --- a/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -namespace MU3.CustomUI; - -class patch_MU3UIImageChanger: MU3UIImageChanger { - private Sprite[] _sprites; - - public Sprite[] sprites { - get { return _sprites; } - set { _sprites = value; } - } -} \ No newline at end of file diff --git a/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs b/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs index ee40959..9f1d752 100644 --- a/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs +++ b/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs @@ -5,8 +5,8 @@ namespace MU3.DB; [MonoModPatch("global::MU3.DB.MusicSort2IDEnum")] public static class patch_MusicSort2IDEnum { private static MusicSort2TableRecord[] records; - public static extern bool orig_loadFromFile(string filename); + public static extern bool orig_loadFromFile(string filename); public static bool loadFromFile(string filename) { var rv = orig_loadFromFile(filename); records[4].Name = "譜面定数"; diff --git a/SortByInternalDifficulty/MU3.User/patch_UserDetail.cs b/SortByInternalDifficulty/MU3.User/patch_UserDetail.cs index 0ea428c..a5d1972 100644 --- a/SortByInternalDifficulty/MU3.User/patch_UserDetail.cs +++ b/SortByInternalDifficulty/MU3.User/patch_UserDetail.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; namespace MU3.User; + class patch_UserDetail: UserDetail { public extern void orig_copyTo(UserData userDetail); public new void copyTo(UserData userDetail) { diff --git a/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs b/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs index 98c0712..3c15688 100644 --- a/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs +++ b/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs @@ -46,7 +46,6 @@ class patch_MusicSelectViewDataList: MusicSelectViewDataList { } public extern void orig_create(GameViewData gameViewData, ChapterSelection chapterSelection, FumenDifficulty difficulty, MusicSort1ID sort1, MusicSort2ID sort2); - public new void create(GameViewData gameViewData, ChapterSelection chapterSelection, FumenDifficulty difficulty, MusicSort1ID sort1, MusicSort2ID sort2) { _reMasterPi = typeof(Data.MusicData).GetProperty("isReMaster"); orig_create(gameViewData, chapterSelection, difficulty, sort1, sort2); diff --git a/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs b/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs index f980d5b..9fd0783 100644 --- a/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs +++ b/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs @@ -5,8 +5,8 @@ namespace MU3; public class patch_Scene_32_PrePlayMusic_MusicSelect: Scene_32_PrePlayMusic_MusicSelect { private static patch_MusicSort1ID[] _sort1SettingList; private static MusicSort2ID[] _sort2SettingList; - private extern void orig_Awake(); + private extern void orig_Awake(); private new void Awake() { _sort1SettingList = new[] { patch_MusicSort1ID.Genre, diff --git a/SortByInternalDifficulty/MU3/patch_UISortButton.cs b/SortByInternalDifficulty/MU3/patch_UISortButton.cs index c57e332..cafcf4d 100644 --- a/SortByInternalDifficulty/MU3/patch_UISortButton.cs +++ b/SortByInternalDifficulty/MU3/patch_UISortButton.cs @@ -1,4 +1,5 @@ using MU3.CustomUI; +using System.Reflection; using UnityEngine; namespace MU3; @@ -9,19 +10,22 @@ class patch_UISortButton: UISortButton { protected override void Awake() { base.Awake(); - var changer = (patch_MU3UIImageChanger)_selectPreviewImageChanger; - var n = changer.sprites.Length; - var sprites = new Sprite[n + 1]; + var spritesFi = typeof(MU3UIImageChanger).GetField("_sprites", BindingFlags.Instance | BindingFlags.NonPublic); + var changer = _selectPreviewImageChanger; + + var oldSprites = (Sprite[])spritesFi.GetValue(changer); + var n = oldSprites.Length; + var newSprites = new Sprite[n + 1]; for(int i = 0; i < n; ++i) { - sprites[i] = changer.sprites[i]; + newSprites[i] = oldSprites[i]; } Texture2D tex = new Texture2D(2, 2); tex.LoadImage(InternalSortPreview.Bytes); - sprites[n] = Sprite.Create(tex, new Rect(0, 0, 254, 121), sprites[0].pivot); + newSprites[n] = Sprite.Create(tex, new Rect(0, 0, 254, 121), newSprites[0].pivot); - changer.sprites = sprites; + spritesFi.SetValue(changer, newSprites); } } diff --git a/UnlockAllMusic/MU3/patch_Scene_25_Login.cs b/UnlockAllMusic/MU3/patch_Scene_25_Login.cs index b180b27..46ac9a4 100644 --- a/UnlockAllMusic/MU3/patch_Scene_25_Login.cs +++ b/UnlockAllMusic/MU3/patch_Scene_25_Login.cs @@ -1,9 +1,11 @@ +using MonoMod; using MU3.User; using MU3.Util; namespace MU3; class patch_Scene_25_Login: Scene_25_Login { + [MonoModIgnore] private enum State { GetUserRatinglog = 24 } diff --git a/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs b/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs index ace6358..95aae1d 100644 --- a/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs +++ b/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs @@ -5,11 +5,11 @@ using MU3.Util; namespace MU3; class patch_Scene_32_PrePlayMusic_Confirm: Scene_32_PrePlayMusic_Confirm { - private extern void orig_createSelector(); private JewelBoostID getMaxBoost() { return JewelBoostID.Nine; } + private extern void orig_createSelector(); private void createSelector() { Singleton.instance.userLocal.boost = JewelBoostID.Nine; orig_createSelector(); diff --git a/UnlockFrameRate/MU3.Sys/patch_Config.cs b/UnlockFrameRate/MU3.Sys/patch_Config.cs index d7ae92c..57dd863 100644 --- a/UnlockFrameRate/MU3.Sys/patch_Config.cs +++ b/UnlockFrameRate/MU3.Sys/patch_Config.cs @@ -3,10 +3,10 @@ namespace MU3.Sys; class patch_Config: Config { - public extern void orig_initialize(); public int framerate { get; private set; } public bool isVsync { get; private set; } + public extern void orig_initialize(); public new void initialize() { orig_initialize();