diff --git a/AutoMidiPlayer.Data/Properties/Settings.Designer.cs b/AutoMidiPlayer.Data/Properties/Settings.Designer.cs index 8c23daf..59e0304 100644 --- a/AutoMidiPlayer.Data/Properties/Settings.Designer.cs +++ b/AutoMidiPlayer.Data/Properties/Settings.Designer.cs @@ -531,6 +531,36 @@ public bool ActiveSky } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("HTGame.exe")] + public string NTELocation + { + get + { + return ((string)(this["NTELocation"])); + } + set + { + this["NTELocation"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool ActiveNTE + { + get + { + return ((bool)(this["ActiveNTE"])); + } + set + { + this["ActiveNTE"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("0")] diff --git a/AutoMidiPlayer.Data/Properties/Settings.settings b/AutoMidiPlayer.Data/Properties/Settings.settings index 31d7325..9236271 100644 --- a/AutoMidiPlayer.Data/Properties/Settings.settings +++ b/AutoMidiPlayer.Data/Properties/Settings.settings @@ -89,6 +89,9 @@ RobloxPlayerBeta.exe + + HTGame.exe + True @@ -104,6 +107,9 @@ True + + True + 0 diff --git a/AutoMidiPlayer.WPF/AutoMidiPlayer.WPF.csproj b/AutoMidiPlayer.WPF/AutoMidiPlayer.WPF.csproj index 23a900c..35cb006 100644 --- a/AutoMidiPlayer.WPF/AutoMidiPlayer.WPF.csproj +++ b/AutoMidiPlayer.WPF/AutoMidiPlayer.WPF.csproj @@ -6,7 +6,7 @@ true AutoMidiPlayer.WPF.App app.manifest - 6.24.6 + 6.25.0 Resources\logo.ico enable https://github.com/Jed556/AutoMidiPlayer diff --git a/AutoMidiPlayer.WPF/Core/Games/GameRegistry.cs b/AutoMidiPlayer.WPF/Core/Games/GameRegistry.cs index 225f637..25c33fd 100644 --- a/AutoMidiPlayer.WPF/Core/Games/GameRegistry.cs +++ b/AutoMidiPlayer.WPF/Core/Games/GameRegistry.cs @@ -121,6 +121,26 @@ public static class GameRegistry setLocation: v => Settings.Modify(s => s.SkyLocation = v), getIsActive: () => Settings.ActiveSky, setIsActive: v => Settings.Modify(s => s.ActiveSky = v) + ), + new GameDefinition( + id: "NTE", + displayName: "NTE (Neverness to Everness)", + instrumentGameName: "NTE", + imageResourcePath: "pack://application:,,,/Resources/NTE.png", + processNames: ["HTGame"], + defaultExeName: "HTGame.exe", + defaultSearchPaths: + [ + @"C:\Program Files\Neverness To Everness\Client\WindowsNoEditor\HT\Binaries\Win64\HTGame.exe", + @"D:\Neverness To Everness\Client\WindowsNoEditor\HT\Binaries\Win64\HTGame.exe", + @"E:\Neverness To Everness\Client\WindowsNoEditor\HT\Binaries\Win64\HTGame.exe", + @"F:\Neverness To Everness\Client\WindowsNoEditor\HT\Binaries\Win64\HTGame.exe", + @"G:\Neverness To Everness\Client\WindowsNoEditor\HT\Binaries\Win64\HTGame.exe", + ], + getLocation: () => Settings.NTELocation, + setLocation: v => Settings.Modify(s => s.NTELocation = v), + getIsActive: () => Settings.ActiveNTE, + setIsActive: v => Settings.Modify(s => s.ActiveNTE = v) ) ]; diff --git a/AutoMidiPlayer.WPF/Core/Games/NTE/Instruments/Piano.cs b/AutoMidiPlayer.WPF/Core/Games/NTE/Instruments/Piano.cs new file mode 100644 index 0000000..0879218 --- /dev/null +++ b/AutoMidiPlayer.WPF/Core/Games/NTE/Instruments/Piano.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace AutoMidiPlayer.WPF.Core.Instruments; + +public static partial class NTEInstruments +{ + public static readonly InstrumentConfig Piano21k = new( + game: "NTE", + name: "Piano (21 Key)", + notes: [ + 60, 62, 64, 65, 67, 69, 71, // C4 D4 E4 F4 G4 A4 B4 + 48, 50, 52, 53, 55, 57, 59, // C3 D3 E3 F3 G3 A3 B3 + 36, 38, 40, 41, 43, 45, 47, // C2 D2 E2 F2 G2 A2 B2 + ], + keyboardLayouts: [NTEKeyboardLayouts.QWERTY_21Keys] + ); +} diff --git a/AutoMidiPlayer.WPF/Core/Games/NTE/KeyboardLayout.cs b/AutoMidiPlayer.WPF/Core/Games/NTE/KeyboardLayout.cs new file mode 100644 index 0000000..68c7dc3 --- /dev/null +++ b/AutoMidiPlayer.WPF/Core/Games/NTE/KeyboardLayout.cs @@ -0,0 +1,15 @@ +namespace AutoMidiPlayer.WPF.Core.Instruments; + +/// +/// NTE keyboard layouts. +/// +internal static class NTEKeyboardLayouts +{ + public static readonly KeyboardLayoutConfig QWERTY_21Keys = new( + name: "QWERTY", + keys: [ + 'q', 'w', 'e', 'r', 't', 'y', 'u', + 'a', 's', 'd', 'f', 'g', 'h', 'j', + 'z', 'x', 'c', 'v', 'b', 'n', 'm', + ]); +} diff --git a/AutoMidiPlayer.WPF/Resources/NTE.png b/AutoMidiPlayer.WPF/Resources/NTE.png new file mode 100644 index 0000000..b3ad217 Binary files /dev/null and b/AutoMidiPlayer.WPF/Resources/NTE.png differ diff --git a/README.md b/README.md index 88669e3..24d5f72 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ https://github.com/user-attachments/assets/8e7d8dec-33c4-4d2b-a268-4abd1dbac405 - **Heartopia** - Piano (All variations), 15-key instruments (e.g. lyre, wooden bass, violin, etc.) - **Roblox** - Piano (61-key) - **Sky: Children of the Light** - All available Sky instruments as of Feb 2026 +- **NTE (Neverness to Everness)** - Piano (21-Key) See the [Support wiki page][wiki-support] for details on supported games, instruments, and keyboard layouts. @@ -86,6 +87,7 @@ The short answer is that it's uncertain. Use it at your own risk. Do not play so * For Heartopia, here is their [Official Discord message](https://discord.com/channels/1128257488375005215/1460985755529773301/1465702188700405986) about using 3rd party tools. * For Sky, see their policy on [third-party apps](https://thatgamecompany.helpshift.com/hc/en/17-sky-children-of-the-light/faq/1250-can-i-use-or-create-third-party-applications-like-mods-or-bots/). * For Roblox, refer to their [third-party services Terms of Use](https://en.help.roblox.com/hc/en-us/articles/115004647846-Roblox-Terms-of-Use#third-party-services). +* For NTE, see their [Data collected to prevent cheating and unauthorized software](https://static.pwsdk.com/nte/privacy/privacy.html). ## Documentation @@ -134,7 +136,7 @@ This project is inspired by and built on top of **[sabihoshi/GenshinLyreMidiPlay # License * This project is under the [MIT](LICENSE.md) license. * Originally created by [sabihoshi][GenshinLyreMidiPlayer]. Modified by [Jed556](https://github.com/Jed556) for multi-game support and modernization. -* All rights reserved by © miHoYo Co., Ltd., © XD Inc., © thatgamecompany, Inc., and © Roblox Corporation. This project is not affiliated nor endorsed by miHoYo, XD, thatgamecompany, or Roblox. Genshin Impact™, Heartopia™, Sky: Children of the Light™, Roblox™, and other properties belong to their respective owners. +* All rights reserved by © miHoYo Co., Ltd., © XD Inc., © thatgamecompany, Inc., © Roblox Corporation, and © Hotta Studio, a Perfect World company. This project is not affiliated nor endorsed by miHoYo, XD, thatgamecompany, Roblox, or Hotta Studio. Genshin Impact™, Heartopia™, Sky: Children of the Light™, Roblox™, NTE (Neverness to Everness)™, and other properties belong to their respective owners. * This project uses third-party libraries or other resources that may be distributed under [different licenses](THIRD-PARTY-NOTICES.md).