Coder Social home page Coder Social logo

x-hax / sa-mod-manager Goto Github PK

View Code? Open in Web Editor NEW
50.0 1.0 17.0 69.51 MB

A new mod manager for the Sonic Adventure games.

License: MIT License

C# 99.76% Batchfile 0.14% Handlebars 0.10%
csharp mod-manager modding sonic-adventure sonic-adventure-2

sa-mod-manager's Introduction

Sonic Adventure Mod Manager

Version 1.2

System Requirements

To use SA Mod Manager, you must have:

Supported Games

  • Sonic Adventure DX PC, 2004 version (US release, but If you have the Steam version, or a different region, you can convert it to 2004 US.)
  • Sonic Adventure 2 (Battle) PC

How To Use

  • Download the latest version from GitHub then extract the zip anywhere.
  • Run SAModManager.exe
  • Your games should be detected automatically, but if they are not, you can set their location in the "Manager Config" tab and it will install the Mod Loader.
  • Enjoy!

Troubleshooting Guide

License

DISCLAIMER: Any and all content presented in this repository is presented for informational and educational purposes only. Commercial usage is expressly prohibited. X-Hax claims no ownership of any code in these repositories. You assume any and all responsibility for using this content responsibly. X-Hax claims no responsibility or warranty.

Trademarks

SEGA, Sonic, Sonic the Hedgehog, Sonic Adventure DX and Sonic Adventure 2 are either trademarks or registered trademarks of SEGA of America, Inc.

sa-mod-manager's People

Contributors

actualmandm avatar bor-real avatar dankrank avatar donutstopgaming avatar end-user-person avatar fragag avatar gerbilsoft avatar gigaotomia avatar hankju84 avatar henrykado avatar itseasyactually avatar jesus-pk avatar kawaiikaorichan avatar kellsnc avatar mainmemory avatar michael-fadely avatar pikeyar avatar queensuzie avatar semechko1 avatar siryodajedi avatar skewbmaster avatar sora-yx avatar speepshighway avatar timth98 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

sa-mod-manager's Issues

Poblem with the new mod manager

im not to access for my mods/codes/all setings help me ah and she asks me visual c++ 2013x86 (im with windows 11,x64) and downloaded but ask me again download visual c++ 2013 x86 :( Sorry for my bad english im from pais the lenguage spanish

Static Mod Hierarchy

Describe the bug
Perhaps "bug" isn't quite the right term for this, but I've noticed that the codes section and mods section behave differently and was wondering if parity between their behavior would be possible. Codes maintain a static placement in their list regardless of whether the code has been enabled or not. Mods, meanwhile, return all inactive mods to alphabetical order whenever they are saved as deselected. This makes mod organization needlessly difficult.

To Reproduce

  1. Toggle a mod on
  2. Save, note that the position is moved to the top of the hierarchy (or bottom of the mods hierarchy in the event other mods are already enabled)
  3. Toggle a mod off
  4. Save, note that the mod shifts back to its alphabetical position

Expected behavior
The mod would remain in the hierarchical position that it was left in after saving, regardless of whether the mod is on or off (just as a code would). An option to toggle between static and auto-alphabetical behavior for disabled mods would also be an effective resolution

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Windows 10 Pro - 64-bit
  • Version (1.1.6 - 8afdbf4)

P.S. Thank you for all of your hard work on this tool. This issue aside, it's been a joy to work with.

Quick letter search doesn't work in Codes and Patches tabs

Describe the bug
As of Dev-1.1.0, using the keyboard to find codes or patches whose titles start with a specific letter doesn't work properly.

To Reproduce
Steps to reproduce the behavior:

  1. Highlight the Codes or Patches list.
  2. Press any key.

Expected behavior
The list should scroll to and highlight the code/patch whose title starts with the letter matching the pressed key.

The Game Is Not Opening Up After Installing New SA Mod Manager.

Hi there, I was just reaching out because I previously used SADX Mod Manager for my game, which did work efficiently. However recently I received a notification on there stating that there will be a new upgraded Mod Manager, SA Mod Manager. After successfully installing the mod manager, I immediately noticed that after hitting "Save & Play", a small window would appear for a second before it closes. The game doesn't even attempt to launch. I have tried all I can at this point to problem solve the issue, but I don't know what's going on.

Add Extended Save Support toggle as a patch

The toggle is already implemented on the Mod Loader's side. The value is ExtendedSaveSupport.

Patch name: Extended Save Support

Patch description: Enables support for saved games from the Steam version and allows custom save names (up to 48 characters).

In addition, while Test Spawn's save file selection still works for SonicDX-based filenames, it could be updated to pass the exact save filename in quotation marks (the Mod Loader has been updated to handle both cases).

SADX Graphics Options Modifications

Potential changes to make the user experience better. Notably changing how the full screen and windowed options are split along with the toggle for borderless full screen.

  • Change Windowed/Fullscreen options to a dropdown menu, including the Borderless option.

  • Brought up in #9, Fullscreen cannot go above the native resolution of the monitor normally. Locking the resolution options to max out at the selected window resolution is a solution to prevent this issue from occurring.

Update 11/25: Please see follow up comment for current progress, bugs, and plans.

Crash Handler

Sometimes, people report crashes that we can't reproduce, such as the Mod Manager crashing when / right after updating mods, it would be nice to have a way to get more details with Crash Dumps, this should help debugging stuff.

[Error Report]: One Click Install Crash

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX
	Manager Location: D:\Games\ModStuff\Sonic\SADX\
	Running as Admin: False
	Mod Loader Version (Hash): 9140fcf9393464a03b69a1e9a83f61b2594f5d54
Exception Information:
	Type: ArgumentNullException
	Exception: Value cannot be null. (Parameter 'path1')
	Source: System.Private.CoreLib
	In Function: Void Throw(System.String)
	StackTrace:    at System.ArgumentNullException.Throw(String paramName)
	   at System.IO.Path.Combine(String path1, String path2)
	   at SAModManager.OneClickInstall.ButtonDownload_Click(Object sender, RoutedEventArgs e)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Window.ShowHelper(Object booleanBox)
	   at System.Windows.Window.Show()
	   at System.Windows.Window.ShowDialog()
	   at SAModManager.OneClickInstall.HandleUri(String uri)
	   at SAModManager.OneClickInstall.UriQueueOnUriEnqueued(Object sender, OnUriEnqueuedArgs args)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()
{
  "SettingsVersion": 1,
  "CurrentSetGame": 1,
  "Theme": 0,
  "Language": 0,
  "ModAuthor": "",
  "EnableDeveloperMode": false,
  "KeepManagerOpen": true,
  "UpdateSettings": {
    "EnableManagerBootCheck": true,
    "EnableModsBootCheck": true,
    "EnableLoaderBootCheck": true,
    "UpdateTimeOutCD": 133534897686282941,
    "UpdateCheckCount": 2
  }
}
{
  "SettingsVersion": 1,
  "Graphics": {
    "SelectedScreen": 2,
    "HorizontalResolution": 2560,
    "VerticalResolution": 1440,
    "Enable43ResolutionRatio": false,
    "EnableVsync": true,
    "EnablePauseOnInactive": true,
    "EnableBorderless": true,
    "EnableScreenScaling": true,
    "EnableCustomWindow": false,
    "CustomWindowWidth": 640,
    "CustomWindowHeight": 480,
    "EnableKeepResolutionRatio": false,
    "EnableResizableWindow": false,
    "FillModeBackground": 2,
    "FillModeFMV": 1,
    "ModeTextureFiltering": 0,
    "ModeUIFiltering": 0,
    "EnableUIScaling": true,
    "EnableForcedMipmapping": true,
    "EnableForcedTextureFilter": true
  },
  "Controller": {
    "EnabledInputMod": true
  },
  "Sound": {
    "EnableBassMusic": true,
    "EnableBassSFX": true,
    "SEVolume": 100
  },
  "TestSpawn": {
    "UseCharacter": false,
    "UseLevel": false,
    "UseEvent": false,
    "UseGameMode": false,
    "UseSave": false,
    "LevelIndex": -1,
    "ActIndex": 0,
    "CharacterIndex": -1,
    "EventIndex": -1,
    "GameModeIndex": -1,
    "SaveIndex": -1,
    "GameTextLanguage": 1,
    "GameVoiceLanguage": 1,
    "UseManual": false,
    "UsePosition": false,
    "XPosition": 0,
    "YPosition": 0,
    "ZPosition": 0,
    "Rotation": 0
  },
  "Patches": {
    "HRTFSound": true,
    "KeepCamSettings": true,
    "FixVertexColorRendering": true,
    "MaterialColorFix": true,
    "NodeLimit": true,
    "FOVFix": true,
    "SkyChaseResolutionFix": true,
    "Chaos2CrashFix": true,
    "ChunkSpecularFix": true,
    "E102NGonFix": true,
    "ChaoPanelFix": true,
    "PixelOffSetFix": true,
    "LightFix": true,
    "KillGBIX": true,
    "DisableCDCheck": false,
    "ExtendedSaveSupport": true
  },
  "DebugSettings": {
    "EnableDebugConsole": false,
    "EnableDebugScreen": false,
    "EnableDebugFile": false,
    "EnableDebugCrashLog": true,
    "EnableShowConsole": null
  },
  "GamePath": "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sonic Adventure DX",
  "EnabledMods": [
    "DreamcastConversion",
    "SA1_Chars",
    "sadx-dc-lighting",
    "SoundOverhaul",
    "sadx-input-mod",
    "Better Dreamcast Sonic",
    "AI HD FMVs",
    "(DC_DX) ESRGAN-AI HD Textures",
    "DLC",
    "smooth-cam",
    "sadx-frame-limit",
    "sadx-onion-blur",
    "idle-chatter",
    "SteamAchievements",
    "sadx-style-water",
    "TrainDaytime",
    "sadx-super-sonic",
    "HD_DCStyle",
    "16_9_unstretched Flashbacks",
    "DiscordSADX",
    "HD Rings"
  ],
  "EnabledCodes": [
    "Can Always Skip Credits"
  ]
}

Disabling a mod via the Keyboard Resets List Position

Describe the bug

If you disable a mod by pressing the space button, the index of the currently selected item will be reset to 0. This means that if you're navigating the App through the keyboard, you will have to scroll the entire list again to disable another mod

To Reproduce
Steps to reproduce the behavior:

  1. Go to Mods
  2. Select a mod using the arrow keys on keyboard
  3. Press 'Space' to enable/disable.
  4. Cursor position resets to top of list when pressing up/down on keyboard.

Expected behavior
Cursor should stay at the previously selected item.

Mod Manager is unable to delete profiles

SA Mod Manager is able to create profiles in a normal manner, but attempting to delete an existing profile will cause the program to crash.
P.S. Where are the profiles saved in the Sonic Adventure DX directory? I wasn't able to find them and so I wasn't able to test what removing them manually would do.

Download system: Cancel and Retry feature

Currently, the way the mods are downloaded and updated still use the vanilla system from the legacy Manager, while it seems to work for the most part, it would be nice to update it to fit modern system using asynchronous and HttpClient. We also don't have a way to retry when it failed, it would be cool to implement that.

Edit 31/12/2023: The mod system has been reworked and now use HttpClient and asynchronous. We still need a retry and cancel button but it's overall done.

Manager Updates not Installing

Please check the troubleshooting guide in the Wiki before submitting an issue.

Describe the bug
When I update the mod manager, it reloads the manager and asks to do the same update I just installed.

To Reproduce
Steps to reproduce the behavior:

  1. Open the un-updated mod manager
  2. Update the manager
  3. It will disappear, then reopen and ask for the same update again

Expected behavior
It would usually update successfully, however it is not accepting the update

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows 11

Additional context
N/A

S key doesn't work properly in mod list

Describe the bug
Using the S key to find mods that start with "S" in the mod list scrolls to the next mod.

To Reproduce
Steps to reproduce the behavior:

  1. Highlight the mod list.
  2. Press the S key.

Expected behavior
List should scroll to and highlight the mod whose title starts with "S"

[Error Report]: "Manager Crashed" upon launch each time

Every time I launch the manager, I get the "Manager Crashed" followed by this log. I don't remember doing anything to cause this.

Exception Report

SAMM Information:	Manager Version: 1.1.2
	Current Game: Sonic Adventure DX
	Game Directory: 
	Mod Loader Version (Hash): 7f9670822ba35a2916cbc31f4ecb290123e702a8
Exception Information:
	Type: NullReferenceException
	Exception: Object reference not set to an instance of an object.
	Source: SAModManager
	In Function: Void ValidateProfiles()
	StackTrace:    at SAModManager.Configuration.Profiles.ValidateProfiles()
	   at SAModManager.MainWindow.Load(Boolean newSetup)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

Rework Dependencies

Currently the dependencies have two issues:

  • They don't have any update support, which means the Manager download and install them every time the user install or update the loader, it's not convenient and make the process longer than what it is for no reason.
  • They have too many DLLs, if we add the FFMPEG support for FMV, this will add about 50 mb of DLLs, in other word, each install or update of the loader will force a download of 50 mb which I find unacceptable. This would also make each Manager update bigger since they will need to be stored in the exe in case of offline installation.

Possible Solution:

  • Set up a specific repo to host all the dependencies, check for updates using commit ID so they only get downloaded when needed
  • Alternately, use manifests for the dependencies so only the needed ones are downloaded instead of all of them. (Probably the best)
  • Compiling our own version of FFMPEG to reduce the number of DLLs and avoid having unnecessary dependencies

Ideally, I'd love to be able to do the last solution with BASS, as I don't like how it requires 14 DLLs alone, but sadly merging them would be complicated.

Steam-deck/Linux hang

Description
Steam-deck/Linux hangs after a bit

Steps Taken
Steps to reproduce the behavior:

  1. in steam download proton
  2. install .net runtime in the proton prefix
  3. downgrade the game using sadx mod installer
  4. run the mod loader
  5. interact with the mod loader

Expected behavior
Not to freeze

0148:fixme:d3d9:d3d9_swapchain_Present Ignoring dirty_region 0000000003070630.
this message is repeated while interacting if you open it in a terminal.

[Error Report]: System.Private.Xml-related Crash

Hi, I was just loading up a profile on the new SA2 suite in the mod manager, but I ran into a crash that rendered that section inaccessible. I was able to get back into the SA1 suite by downloading an SA1 mod, but any attempt to enter the SA2 suite again caused the same crash.

I was moving several mods around in the hierarchy, but the game was never loaded and I was saving somewhat frequently as I went. I wasn't able to find the specified XML file in the game's Steam folder, either.

Exception Report

SAMM Information:
	Manager Version: 1.2.0
	Current Game: Sonic Adventure 2
	Game Directory: D:\SteamLibrary\steamapps\common\Sonic Adventure 2
	Manager Location: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: False
	Mod Loader Version (Hash): b0dd70904209002b5277ba988a3b456e25b0c17a
Exception Information:
	Type: InvalidOperationException
	Exception: There is an error in XML document (1, 1).
	Source: System.Private.Xml
	In Function: System.Object Deserialize(System.Xml.XmlReader, System.String, System.Xml.Serialization.XmlDeserializationEvents)
	StackTrace:    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
	   at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)
	   at SAModManager.Codes.CodeList.Load(String filename)
	   at SAModManager.MainWindow.LoadModList()
	   at SAModManager.MainWindow.Load(Boolean newSetup)
	   at SAModManager.MainWindow.ComboGameSelection_SelectionChanged(Object sender, SelectionChangedEventArgs e)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()
	InnerException: System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlReader.MoveToContent()
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderCodeList.Read9_CodeList()
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)

[Error Report]:

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX
	Manager Location: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: False
	Mod Loader Version (Hash): 9140fcf9393464a03b69a1e9a83f61b2594f5d54
Exception Information:
	Type: IOException
	Exception: The process cannot access the file 'C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\System\CHRMODELS.dll' because it is being used by another process.
	Source: System.Private.CoreLib
	In Function: Void CopyFile(System.String, System.String, Boolean)
	StackTrace:    at System.IO.FileSystem.CopyFile(String sourceFullPath, String destFullPath, Boolean overwrite)
	   at SAModManager.MainWindow.ManualLoaderUpdateCheck()
	   at SAModManager.MainWindow.Load(Boolean newSetup)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

My SA1 game won't load with controller support anymore with the new mod loader

Whenever I try to load in SADX, it shows keeps on showing me this message, and I'm unsure what to do with it. (I'm not too good with tech rn). This applies for when I try to launch the game or

image

I can run the game by clicking Save & Play but I'm forced to use keyboard controls. Is there anyway to get this fixed?

Ukrainian translation crashes

Please check the troubleshooting guide in the Wiki before submitting an issue.

Describe the bug
Whenever user select Ukrainian localization, Mod Manager wait for a while (1sec) and then closes, it also displays everything on English in that brief moment. If useer has Ukrainian as default, it will crash on startup with same 1 second of the window on english

To Reproduce
Steps to reproduce the behavior:

  1. Switch to Ukrainian Locale in Settings

Expected behavior
Mod Manager displaying ukrainian language

Screenshot of before (v1.0.5)
image
Screenshot after (v1.1.0)
image
Note that i can't do anything while it's in that moment, it's just frozen and crashes after a second

VS shows this (App.xaml.cs line 130):
image
And the Error message as .txt:
message.txt

Should be all, let me know if i forgot smth

Game File Keeps Getting Deleted while Installing the Launcher

When I tried installing the mod manager for Sonic Adventure, it keeps deleting the game file. I am indeed using the steam version of Sonic Adventure DX, and I am unsure about how to recover the sonic.exe file if I am doing it correctly.

As for the install of the mod manager itself, I followed the top most option on the landing page, and set the install location to my D drive where I put most of my games. I drag sadx_setup and instdata to the same folder that the steam version of SADX is in. When I tried copying the sonic.exe file to attempt to get around this, the mod manager says I have to be using the 2004 version of the game.

[Error Report] Crash with XML Config

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: R:\PortableApps\SONICADVENTUREDX
	Manager Location: R:\PortableApps\SONICADVENTUREDX\
	Running as Admin: True
	Mod Loader Version (Hash): 61075bad5ee2f828665c96f64868fd5cd28b9461
Exception Information:
	Type: FormatException
	Exception: The input string '-2.7755575615628914E-17' was not in a correct format.
	Source: System.Private.CoreLib
	In Function: Void ThrowOverflowOrFormatException(ParsingStatus, System.ReadOnlySpan`1[System.Char], System.TypeCode)
	StackTrace:    at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, ReadOnlySpan`1 value, TypeCode type)
	   at System.Decimal.Parse(String s, IFormatProvider provider)
	   at SAModManager.Common.CustomPropertyStore.GetConfigValue()
	   at SAModManager.FormBuilder.CreateNumericBox(ConfigSchemaProperty property, CustomPropertyStore storeInfo, DataType dataType)
	   at SAModManager.FormBuilder.ConfigCreateItem(ConfigSchemaProperty elem, ConfigSettings config, CustomPropertyStore storeInfo)
	   at SAModManager.FormBuilder.ConfigBuild(ConfigSettings& config)
	   at SAModManager.Common.ModConfig..ctor(String Modname, String path, Boolean reset)
	   at SAModManager.MainWindow.InitModConfig()
	   at SAModManager.MainWindow.ConfigureModBtn_Click(Object sender, RoutedEventArgs e)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
	   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
	   at System.Windows.Controls.Button.OnClick()
	   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
	   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
	   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
	   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
	   at System.Windows.Input.InputManager.ProcessStagingArea()
	   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
	   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
	   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

[Error Report]:Win32Exception

Exception Report

SAMM Information:	Manager Version: 1.1.4
	Current Game: Sonic Adventure DX
	Game Directory: C:\Users\kenil\Downloads\Sonic Adventure DX Disc 1
	Mod Loader Version (Hash): 7f9670822ba35a2916cbc31f4ecb290123e702a8
Exception Information:
	Type: Win32Exception
	Exception: An error occurred trying to start process 'C:\Users\kenil\Downloads\Sonic Adventure DX Disc 1\sonic.exe' with working directory 'C:\Users\kenil\Downloads\Sonic Adventure DX Disc 1'. The requested operation requires elevation.
	Source: System.Diagnostics.Process
	In Function: Boolean StartWithCreateProcess(System.Diagnostics.ProcessStartInfo)
	StackTrace:    at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
	   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
	   at SAModManager.MainWindow.StartGame()
	   at SAModManager.MainWindow.SaveAndPlayButton_Click(Object sender, RoutedEventArgs e)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
	   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
	   at System.Windows.Controls.Button.OnClick()
	   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
	   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
	   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
	   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
	   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
	   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
	   at System.Windows.Input.InputManager.ProcessStagingArea()
	   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
	   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
	   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

[Error Report]:After Installing BetterSADX SA Mod Loader crashes upon saving/updating

After Installing BetterSADX My SA Mod Loader would allways crash upon saving or updating with the Exception of not finding some property called CrashGuard. It worked just fine before installing BetterSADX and even after I uninstall it the crash would still happen.

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: D:\Games\steam\steamapps\common\Sonic Adventure DX
	Manager Location: D:\Games\steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: True
	Mod Loader Version (Hash): 9f3674ef6b90deb5cce44b393157cc24c42173c6
Exception Information:
	Type: InvalidOperationException
	Exception: Property CrashGuard not found or read-only.
	Source: SAModManager
	In Function: Void SavePatches(System.Object ByRef)
	StackTrace:    at SAModManager.Elements.SADX.GameConfig.SavePatches(Object& input)
	   at SAModManager.MainWindow.SaveSADXSettings()
	   at SAModManager.MainWindow.Save()
	   at SAModManager.MainWindow.ResultPickGame(String path)
	   at SAModManager.MainWindow.btnBrowseGameDir_Click(Object sender, RoutedEventArgs e)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
	   at System.Windows.Threading.Dispatcher.Run()
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at System.Windows.Application.Run()
	   at SAModManager.App.Main()

there seems to be problem with the audio

https://gamebanana.com/tuts/16934

hello, I just downloaded the mods of Sonic Adventure following this guide, and I've had a problem with the settings. For some reason whenever I open Sonic Adventure and it opens the settings screen the sound settings keep going back to 1%, and it seems that even after I put it at any other percent it keeps coming back to 1% because when I open the game there is no sound, I then close the game, open the configuration again and it shows me sound at 1% even though I chose 100%. I'm not sure if this is the reason there is no sound but I know that it doesn't have to do with the use bass option because that one is checked, and I've already saved the settings, everything is saved BUT the sound settings which keep going back to 1%.

Screenshot_20231216_083935

Idea: Welcome screen on first startup

Just wanted to share an idea for discussion. Instead of making a separate installer, we could have a welcome wizard in the Manager that would show up when the Manager is run for the first time. The purpose is to streamline Mod Loader installation and configuration for both new and experienced users. It could be done in a wizard-like style, and many of its elements are already present in the manager. It could include the following pages:

Page 1. Select the language - same as now.
Page 2. Confirm (if auto-detected) or pick the game folder(s).

  • Check game compatibility. If it's target for conversion, tell the user it will be converted.
  • Until conversion is implemented directly in the Manager, show a message telling the user to get the installer (or a streamlined conversion tool that I made as a part of it).
  • Proceed with conversion if necessary.
  • Proceed with Mod Loader installation in the selected folder.
  • Some optimal settings can be auto set here, such as matching the game's resolution to the monitor's native resolution, enabling Borderless Fullscreen and installing the URL handler.

Page 3. Configure controls

  • Prompt the user to run AppLauncher or show the Mod Manager's controls editor when it becomes available.

Page 4. Get mods

  • Show links to pages with 1-click install links to some of the popular mods. I can make a page like this, also I could implement the old installer's Guide Mode as a web page. We could even host some kind of beginner mod list as a page on GitHub.

[Error Report]: One Click Install ShowDialog Error

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX
	Manager Location: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: False
	Mod Loader Version (Hash): 61075bad5ee2f828665c96f64868fd5cd28b9461
Exception Information:
	Type: InvalidOperationException
	Exception: ShowDialog can be called only on hidden windows.
	Source: PresentationFramework
	In Function: System.Nullable`1[System.Boolean] ShowDialog()
	StackTrace:    at System.Windows.Window.ShowDialog()
	   at SAModManager.OneClickInstall.HandleUri(String uri)
	   at SAModManager.OneClickInstall.UriQueueOnUriEnqueued(Object sender, OnUriEnqueuedArgs args)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Window.ShowHelper(Object booleanBox)
	   at System.Windows.Window.Show()
	   at System.Windows.Window.ShowDialog()
	   at SAModManager.OneClickInstall.HandleUri(String uri)
	   at SAModManager.OneClickInstall.UriQueueOnUriEnqueued(Object sender, OnUriEnqueuedArgs args)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

7z download fails, softlocking the app if Game Path is not Set

Describe the bug
When installing the new Mod Manager, 7-zip download will fail if the game path is not set under Manager Config.

To Reproduce
Steps to reproduce the behavior:

  1. Launch Manager without 7zip Installed
  2. Try to download 7-zip
  3. .... wait, forever

Expected behavior
Manager auto detects game folder.

Context

This makes the first time experience sub-optimal.

The manager should ideally detect if it's placed in a supported game directory and auto configure itself.

Overhaul

The Manager handles a lot of stuff on startup due to all the features we added such as: first boot, vanilla transition, profile creation and migration, last game swap, etc. The more we added features, the more messy the code started to get, we had to face race condition, loader that doesn't install properly, the ComboBox game swap that doesn't add a new game when picking the game location manually etc.

All those issues happen on some arbitrary conditions which make debugging annoying and require many efforts. They got fixed (sort of) with arbitrary check, but those aren't ideal and the code is still messy. The branch Overhaul will be used to rework how the Manager handle all those situation with a rework of many features such as Game Swap, Manager and Game Profiles, ideally the code should be more flexible and handle all situation without any arbitrary check.

The Game Won't Start

I updated the AppLauncher, but the game still won't open with the SAModManager. Do you know what to do?

[Error Report]:

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	First Boot: True
	Current Game: Sonic Adventure DX
	Game Directory: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX
	Manager Location: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: True
	Mod Loader Version (Hash): 61075bad5ee2f828665c96f64868fd5cd28b9461
Exception Information:
	Type: ArgumentNullException
	Exception: Value cannot be null. (Parameter 'path1')
	Source: System.Private.CoreLib
	In Function: Void Throw(System.String)
	StackTrace:    at System.ArgumentNullException.Throw(String paramName)
	   at System.IO.Path.Combine(String path1, String path2)
	   at SAModManager.OneClickInstall.ButtonDownload_Click(Object sender, RoutedEventArgs e)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Window.ShowHelper(Object booleanBox)
	   at System.Windows.Window.Show()
	   at System.Windows.Window.ShowDialog()
	   at SAModManager.OneClickInstall.HandleUri(String uri)
	   at SAModManager.OneClickInstall.UriQueueOnUriEnqueued(Object sender, OnUriEnqueuedArgs args)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

All sound is absent and opening cinematic does not play

After updating to the new mod loader, the game does not emit any sound whatsoever. The first boot this applied only to the background music with sound effects still playing, but now the game is completely silent. Volume is set to 100% on both windows and through the mod loader. The opening cinematic does not play either past the sega screen. Verified game files through steam and through the mod loader. Will completely wipe the install folder and reinstall Sonic Adventure, bettersaxd and the mod loader if the problem persists. Wanted to report here in case of issue with the loader.

Persisting Crash in Super Sonic Story

Sonic Adventure DX on Steam repeatedly crashes when playing the final Super Sonic section of the game. For whatever reason, the game cannot load Super Sonic's model/textures, and I receive an error message saying that the game failed to apply one or more textures. This has never been an issue for me with the previous SADX Mod Manager. It has only occurred using the new SA Mod Manager. The game will crash during the cutscene that introduces Super Sonic. Skipping the cutscene does not avoid the crash. I have tried various solutions to attempt to circumvent the issue, to no avail.

I have provided a screenshot of my mod setup in SA Mod Manager for Sonic Adventure DX on Steam:

Screenshot (83)

[Error Report]: Manager Crash upon Using One Click Install

Exception Report

SAMM Information:
	Manager Version: 1.1.6
	Current Game: Sonic Adventure DX
	Game Directory: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX
	Manager Location: C:\Program Files (x86)\Steam\steamapps\common\Sonic Adventure DX\
	Running as Admin: False
Exception Information:
	Type: ArgumentNullException
	Exception: Value cannot be null. (Parameter 'path1')
	Source: System.Private.CoreLib
	In Function: Void Throw(System.String)
	StackTrace:    at System.ArgumentNullException.Throw(String paramName)
	   at System.IO.Path.Combine(String path1, String path2)
	   at SAModManager.OneClickInstall.ButtonDownload_Click(Object sender, RoutedEventArgs e)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Window.ShowHelper(Object booleanBox)
	   at System.Windows.Window.Show()
	   at System.Windows.Window.ShowDialog()
	   at SAModManager.OneClickInstall.HandleUri(String uri)
	   at SAModManager.OneClickInstall.UriQueueOnUriEnqueued(Object sender, OnUriEnqueuedArgs args)
	   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
	   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	--- End of stack trace from previous location ---
	   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
	   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
	   at System.Windows.Threading.DispatcherOperation.Invoke()
	   at System.Windows.Threading.Dispatcher.ProcessQueue()
	   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
	   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
	   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
	   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
	   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
	   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
	   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
	   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
	   at System.Windows.Application.RunDispatcher(Object ignore)
	   at System.Windows.Application.RunInternal(Window window)
	   at SAModManager.App.Main()

Intense SADX Stutter at all times in any resolution mode.

Describe the bug
SADX has a heavy stutter at all times during gameplay. This is in D3D8 and the D3D8to9 wrapper this and SADX Mod Loader came with. There were rumors of previous versions of D3D8to9 alleviating the stutter, but it's largely placebo.

dxvk-gplasync and DXVK do have some effect on this, and there's much less stutter, however this is a workaround, not a fix. Even then there seems to be a hitch every second-two seconds as if there's a skipped frame. It's hard to record this phenomenon, so you'll have to check for yourself.

https://gitlab.com/Ph42oN/dxvk-gplasync
^ DXVK-gplasync, which I used. It's the latest asynchronous DXVK fork.

To Reproduce
All you really have to do is open up the game and play around for a couple of minutes. It's fairly noticeable.
For the DXVK wrapper put the d3d9.dll file in the 32x folder in the same directory as the executable.

Expected behavior
Ideally, no stutter. However this is probably a huge undertaking, so I wanted to bring this to light to at least have some discussion on the issue.

Desktop (please complete the following information):

  • OS: Windows
  • Version: 11
  • [NVIDIA GeForce RTX 3070]

Additional context
I don't have a g-sync monitor, I'm running at full screen 1080p, as far as I know this persists at any resolution in any mode and with vsync off and on.

FMV color bars

With the mod loader installed, all FMV cutscenes appear as TV static with color bars and no audio at all. This hasn't started happening until just now, so I have no idea what's causing this.

If you search for a code then save when the search results are still visible, it'll deselect any codes that were previously enabled but weren't part of the search results.

Something I randomly found, it only seems to happens with code search. Mod search appears unaffected by this. How to reproduce:

  • Enable for example "Hide HUD".
  • Ctrl + F in the codes section > Search for any keyword that will make Hide HUD not appear as search result (for example, "Disable").
  • When the search results appears, simply save the current settings. It doesn't matter if you enabled any code or not.
  • It'll deselect Hide HUD since it wasn't part of the search results.

Mod manager crashes the game

The game crashes after collecting a certain amount of emblems (when you unlock a Game Gear title). To be more specific, at the part where the game tells me a GG title has been unlocked, I get a crash pop-up (it unfortunately doesn't save the emblem, either). Looking at the log, it seems to be the same issue every time.
Failed to load texture screen07.png: E_OUTOFMEMORY (2147942414) (It's not specifically screen07.png, just a random screen number that pops up when this happens.)

I thought that this was the cause of mods, but even when only using the default mods that come with the SADX Mod Installer, the game still crashes in the exact same way. So I tried using the old mod manager instead, which surprisingly did work with the exact same mod setup. So the issue must lie in this mod manager.

I don't know why this is happening, but can this be fixed?

Request: Portable option

I'd like to request an option that would enable the Manager's data to be stored in the Manager's EXE directory rather than AppData\Local.

Advantages:

  1. The Manager's EXE and its settings/extlibs are all in one place.
  2. If you put the Manager in the game folder, the game becomes portable. You could put it on a USB drive and play it on another computer with all your settings intact. This is something you could do with the old manager.

The implementation of this option would involve a simple check:

  1. Check if there's a folder called SAManager in the same folder as the EXE.
  2. If it exists, replace all variables using AppData\Local\SAManager to use ExeFolder\SAManager.

App Launcher Freezes When Trying to Change Controls

To begin with, I was unable to change the controls at all. Using the App Launcher and changing inputs would not result in control changes in game, even though the settings were saved. I reinstalled SA1 and the mod manager from scratch, and that did not fix it.

To see if control changing was even working, I tried clearing the inputs for the A and X buttons to see what would happen. I tried to save, and the App Launcher crashed. It did still save the settings, but they still had not impact on the game.

Since then, the App Launcher began slowing down. Opening the controls page would show a black screen for a few seconds before displaying anything. And it crashes whenever I try to save control changes. And the initial black screen has gotten longer and longer each time I tried to save changes. Now it remains stuck on this black screen for an extremely long time. The app is unresponsive and crashes every time.

Deleting the App Launcher and folder to let the mod manager redownload it doesn't fix the problem.

Issues during Profile Creation

There have been several reports of issues regarding the program crashing sometime in/after profile creation. It seems to result in invalid profile data. Deleting the SAManager's local folder fixes the issue, but we don't know the exact cause of it at the moment. Ideally an investigation into why it even happens would be best, but it seems like it's a very hit or miss bug with an indeterminate cause. Below is also a proposals section with easier to use solutions than the current one.

Current Solution: Direct users to their Users/AppData/Local/SAManager folder and have them delete the SAManager folder and reopen the program. This has fixed the issue for every report so far.

If we can gather any data on the why, please report it to this issue so we can gather as much info as possible.


Proposals

  • Add a Reset Button for easy resetting of the app's overall data. This will likely be added regardless as a way to completely reset the app would be ideal.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.