Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash when attempting to open a stage (Twilight Princess) #41

Open
UltraHylia opened this issue Sep 4, 2022 · 2 comments
Open

Crash when attempting to open a stage (Twilight Princess) #41

UltraHylia opened this issue Sep 4, 2022 · 2 comments

Comments

@UltraHylia
Copy link

UltraHylia commented Sep 4, 2022

I think this might be because I'm trying to edit a Twilight Princess stage (on the basis that they are similarly structured/formatted, at least to my knowledge), but thought it'd be worth flagging in case something else is going on.

If I try to open a room from this stage, nothing happens. If I try to open the whole stage folder, I get the following crash log:

----------------------------------------
Winditor crashed on: 09/04/2022 19:21:45

System.NullReferenceException
Object reference not set to an instance of an object.
   at WindEditor.Editor.Modes.CollisionMode.UpdateActiveMesh() in D:\WW\Winditor\Editor\Editor\Modes\CollisionMode\CollisionMode.cs:line 293
   at WindEditor.Editor.Modes.CollisionMode.OnBecomeActive() in D:\WW\Winditor\Editor\Editor\Modes\CollisionMode\CollisionMode.cs:line 246
   at WindEditor.WWorld.SwitchMode(IEditorMode old_mode, IEditorMode new_mode) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 248
   at WindEditor.WWorld.set_CurrentMode(IEditorMode value) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 23
   at WindEditor.WWindEditor.<get_SwitchToCollisionModeCommand>b__19_0(Object x) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 36
   at WindEditor.RelayCommand.Execute(Object parameter) in D:\WW\Winditor\Editor\Editor\UI\RelayCommand.cs:line 55
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   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, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(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.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at WindEditor.App.Main()

----------------------------------------
Winditor crashed on: 09/04/2022 19:23:14

System.ArgumentOutOfRangeException
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at WindEditor.WMap.LoadFromDirectory(String inPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Maps\Map.cs:line 66
   at WindEditor.WWorld.LoadMapFromDirectory(String folderPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Maps\World.cs:line 155
   at WindEditor.WWindEditor.LoadProject(String folderPath, String sourcePath) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 381
   at WindEditor.WWindEditor.OnApplicationRequestOpenProject() in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 136
   at WindEditor.WWindEditor.<get_OpenProjectCommand>b__3_0(Object x) in D:\WW\Winditor\Editor\Editor\Modes\WindEditor.cs:line 27
   at WindEditor.RelayCommand.Execute(Object parameter) in D:\WW\Winditor\Editor\Editor\UI\RelayCommand.cs:line 55
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   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, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(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.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at WindEditor.App.Main()

The other thing I noticed is that it refers to the D drive, which in my case is my DVD drive - so it can't physically get any data from there (although it seems to be able to see its own code, which is actually on the C drive, without issue).

@LagoLunatic
Copy link
Collaborator

What stage?

Which error are you referring to? The one at 19:21 or the one at 19:23?

The D: drive path is normal, as it's a path on my PC since I built the executable.

TP does have similar structure to WW but there are at least some differences that people have noticed before. We could probably add support for TP by detecting the game ID in the root directory and loading different DZx class templates depending on that, though I'm not sure just how much of Winditor's code would wind up needing to be refactored for that.

@UltraHylia
Copy link
Author

It's the Palace of Twilight (D_MN08), ripped from my copy of the Wii version of the game (PAL).

I've just reproduced the crash with a fresh crash log, and it seems to be the second error at 19:23 (index was out of range) that's causing it. I'm not sure where the first error came from, actually, as it doesn't seem to be associated with the individual room file not opening when I go to Open -> Room(s).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants