Oh wow! This looks far less slow & clunky compared to TT64! The UI's visual design also seems far less distracting; no more annoying dark gradients or tiny text! If the SM64 Importer could be integrated as well, rom hack productivity would skyrocket.
(This post was last modified: 08-07-2017, 10:51 AM by Flame8765.)
I tried the program a bit and I found a little bug: if the emulator path is pointing to a non existing executable, the program throws an unhandled exception.
I also have some ideas for improving the tool:
Apply a diffuse shading to the collision map. it isn't possible to distinguish the shape of an object with flat shading.
Add an option to invert the camera pitch rotation: some people (maybe the majority) are more confortable with the camera looking up if they move the mouse down, not up (and vice versa).
When you switch level, the camera remains in the same position. Maybe this could be improved storing the transform of the camera for each level, so when you switch back to a level, you find the camera with the previous transform. Also areas suffer from this problem, but this may or may not be a problem (It's not a problem in segmented areas, like TTM's slide, i.e. all areas connected by 0x28 commands).
built-in sm64extend. This can be invoked automatically when you want to operate on compressed data, and maybe compress back with sm64compress.
Those TT64 style commands... I think Blender-like camera/object controls could be more productive.
Add "Do you want to save?" dialog on closing and ROM opening if there are unsaved changes to the ROM.
Also I have a pair of question (my noobness section):
Is it technically possible to have a level with an area 0 in SM64?
Why are there four behavior parameters for 3D objects? 0x24 commands supports only two b. params.
EDIT: Found another bug: when you rotate a Macro 3D object, also the preset ID is changed. This is probable due to the bit misalignment of the elements in the Object Placement List. Each elements of the preset list is 10 bytes long, but the bug is about how the first two bytes are read or written (I believe that they are badly written, since an untouched ROM displays everything correctly). It represents both the Y-rotation and the preset type. More precisely, the first 7 bits represents the Y rotation, while the last 9 bits defines the model/behavior preset ID (also called the object combo).
The interesting part is that you made a post about those objects https://www.smwcentral.net/?p=viewthread&t=59070&page=107&pid=1207463#p1207463
EDIT #2: I've compiled the project (using NuGet packages to gather dependencies), but when I try to debug, or to launch the application, I get a PlatformNotSupportedException. This is the debug info I got (sorry for the Italian):
Spoiler :
Code:
************** Testo dell'eccezione **************
System.PlatformNotSupportedException: Operazione non supportata su questa piattaforma.
in OpenTK.GLControlFactory.CreateGLControl(GraphicsMode mode, Control control)
in OpenTK.GLControl.OnHandleCreated(EventArgs e)
in System.Windows.Forms.Control.WmCreate(Message& m)
in System.Windows.Forms.Control.WndProc(Message& m)
in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
in System.Windows.Forms.ContainerControl.WndProc(Message& m)
in System.Windows.Forms.UserControl.WndProc(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Assembly caricati **************
mscorlib
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2098.0 built by: NET47REL1LAST
Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Quad64
Versione assembly: 1.0.0.0
Versione Win32: 1.0.0.0
Base di codice: file:///C:/dev/cs/Quad64/bin/Debug/Quad64.exe
----------------------------------------
System.Windows.Forms
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2094.0 built by: NET47REL1LAST
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2093.0 built by: NET47REL1LAST
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2046.0 built by: NET47REL1
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
OpenTK
Versione assembly: 2.0.0.0
Versione Win32: 2.0.0
Base di codice: file:///C:/dev/cs/Quad64/bin/Debug/OpenTK.DLL
----------------------------------------
OpenTK.GLControl
Versione assembly: 1.1.0.0
Versione Win32: 1.1.2349.61993
Base di codice: file:///C:/dev/cs/Quad64/bin/Debug/OpenTK.GLControl.DLL
----------------------------------------
System.Configuration
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2046.0 built by: NET47REL1
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2098.0 built by: NET47REL1LAST
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2046.0 built by: NET47REL1
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2046.0 built by: NET47REL1
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Newtonsoft.Json
Versione assembly: 10.0.0.0
Versione Win32: 10.0.3.21018
Base di codice: file:///C:/dev/cs/Quad64/bin/Debug/Newtonsoft.Json.DLL
----------------------------------------
mscorlib.resources
Versione assembly: 4.0.0.0
Versione Win32: 4.7.2046.0 built by: NET47REL1
Base di codice: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_it_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
(This post was last modified: 08-07-2017, 02:57 PM by Fendoroid.)
Updated to version 0.1.1, which should fix most of the major bugs that people have reported.
The program will now ask you if you want to save the ROM file before opening a new ROM, launching the ROM in an emulator, or closing Quad64, etc. (if the file is not already saved).
Added an option to cull triangle backfaces in settings
Added an option to automatically save the ROM file when the "Launch ROM" button is pressed
Added a black wireframe outline to the collision map, so now you should see where each triangle is.
Fixed some crashing errors that appeared in some of Kaze's ROM hacks.
Fixed a bug where the editor read the Macro Preset ID wrong, so Macro Objects should now no longer get corrupted.
Fixed wireframe rendering
The "Platform not supported" error message when trying to build the source code should be fixed. (Thanks Guccifer)
@Fendoroid
I couldn't fit everything into this update due to lack of time, but I'll try to add in some more stuff later on. The Macro Object bug was me being an idiot and I read the preset ID from the wrong byte. lol
To answer your two questions:
1.) Super Mario 64 supports up to 8 areas, starting with area 0 and ending with area 7. I'm not sure why, but the developers only ever use 4 areas and start with the id of 1 instead of 0. I did test out having 8 areas in a custom level, and I can confirm that this works.
2.) VL-tone's notes said that there were only 2 parameters, but that is not technically the case. I do admit that the invalid info on the wiki was my mistake, which I will fix. All 4 bytes are loaded up as a 4-byte word and stored to Object->0x188, and then only the second byte in that word gets stored to Object->0x144. I noticed this behavior before with the Load Mario (0x25) levelscript command, but only recently did I discover that also happens with normal objects as well.
(This post was last modified: 09-07-2017, 03:38 AM by David.)
I have some suggestions and ideas I'd like to see in future versions, since you were looking for a to-do list:
Change object combos. For whatever reason, I can't get this functionality to work most of the time. An example: I turn a coin into a 1UP, but the coin is still in-game even after saving. Is this a bug perhaps?
EDIT: Figured out that you have to move the object first after changing its combo, so I'm guessing it's a bug
Undo and Redo
Copy and Paste
Ctrl+S and other common hotkeys
Pressing delete while an object is highlighted will turn it into an Empty Object. This is so you don't have to change its combo every time you want to get rid of something.
ABC or 123 sorting of object lists (I would prefer ABC by default)
Standard camera views such as Top, Bottom, Left, and Right. This helps with precision.
Arrows which move, elevate, or rotate objects one unit at a time in each axis.
Being able to select, move, or rotate multiple objects at once
ambitious) SM64 Editor/Importer integration as well as other tools
Behavior, model ID, and parameter names plus a list to change each of these with
An option to invert camera panning vertically or horizontally
The option to name and save otherwise Unknown object combos (for example a normal object combo with its model ID changed or one of Kaze's objects)
Quad64 already feels much better than TT64 despite some limitations. You're doing a great job so far!
(This post was last modified: 09-07-2017, 05:22 AM by Flame8765.)
(09-07-2017, 05:14 AM)Flame8765 Wrote: I have some suggestions and ideas I'd like to see in future versions, since you were looking for a to-do list:
Change object combos. For whatever reason, I can't get this functionality to work most of the time. An example: I turn a coin into a 1UP, but the coin is still in-game even after saving. Is this a bug perhaps?
EDIT: Figured out that you have to move the object first after changing its combo, so I'm guessing it's a bug
Undo and Redo
Copy and Paste
Ctrl+S and other common hotkeys
Pressing delete while an object is highlighted will turn it into an Empty Object. This is so you don't have to change its combo every time you want to get rid of something.
ABC or 123 sorting of object lists (I would prefer ABC by default)
Standard camera views such as Top, Bottom, Left, and Right. This helps with precision.
Arrows which move, elevate, or rotate objects one unit at a time in each axis.
Being able to select, move, or rotate multiple objects at once
(ambitious) SM64 Editor/Importer integration as well as other tools
Behavior, model ID, and parameter names plus a list to change each of these with
An option to invert camera panning vertically or horizontally
The option to name and save otherwise Unknown object combos (for example a normal object combo with its model ID changed or one of Kaze's objects)
Quad64 already feels much better than TT64 despite some limitations. You're doing a great job so far!
I second this, the tool seems like it's the Messiah for SM64 Hacking community lol, great job!!
I would add also a texture editor like TT64, but without the awkward alpha system and more like n64rip (and all the textures btw, inclusive HUD)
A unhandled exception occurs when I try to open Skelux's Super Mario 64 Multiplayer rom 1.3.1. This happens in TT64 as well, very strange. This also happens when I open Super Mario Star Road Multiplayer 1.2.1. I guess the multiplayer code is making it crash?
EDIT: I also tested your sm64extender GUI program and sm64extend crashes if you go to custom and try to extend to 12MB and even all the way up to 18MB. So it works until you go under 18MB, it is supposed to be able to extend the size of a rom between 12MB to 64MB. Just a small bug, but it still crashes none the less.
(This post was last modified: 14-07-2017, 08:04 PM by SuperToad64.)
The tool sounds great! I'm sure this will boost the SM64 hacking community; with all of TT64's bugs and crashes.
I know catching up with TT64/adding features is a priority right now, but the UI could use some reworking.
-Why gradients in the move/rotate boxes when the whole UI is flat? I think it'd look better with flat colors. (you should drop the rounded corners too)
-Black font on dark grey background is a bit hard to read. You should change the text to white or make the background white.
-The serif font is weird.. You should use roboto/arial
Sorry if that sounds condescending it wasn't my intention But anyway, hope you'll keep this in mind and thanks for giving a new start to the SM64 community!
(This post was last modified: 16-07-2017, 08:13 PM by Biobak Underscore.)
"Even if you build speed for 12 hours, you can't escape the pain"
Quad64 v0.1.1 - A new open source SM64 level editor123»