WaeV
December 3rd, 2012, 08:56 PM
Latest update: 10/28/2013
Python scripting is working flawlessly; the next step is to connect the Python backend to the buttons-and-menus sort of interface we're all used to. However, Python scripting will remain a feature of the editor.
Live editing (including swapping of model references!) is demoed below, using only Python scripting.
h-BZ6J_Ha4M
Howdy, y'all. It's been awhile. I stopped in once before, and I remember some of you from the old HaloMods. I thought you might be interested in what I've been up to lately. As of yet I've only been posting updates to OpenCarnage.net (where many of the ModHalo.net regulars migrated to).
So- my quest to make a Halo map editor. What began as an innocuous set of Python scripts eventually led to me hacking around with C# and some native dll calls. About three months ago I succeeded in embedding a running instance of Halo into my own project, and that's when things really started to get kicked off.
http://i.imgur.com/dSc1kl.jpg
Spurred onward by my initial successes (honestly, the embedding wasn't too hard; I found out how to do it on StackOverflow, although it does look mighty cool), I decided to start putting more effort into a little project called Quickbeam.
VoilĂ*, an early version of Quickbeam! All it could do is display tag names. Well, actually I could read a good bit of data, but writing back wasn't supported and plugins weren't implemented.
http://i.imgur.com/SnAQn.png
After working on that for a while, I found this thread (http://www.modacity.net/forums/showthread.php?11175-Halo-Structures) (woo, thanks Modacity) on Halo Structures. I also managed to find a download of Conure's beta Memory Editor. After decompiling his app (which wasn't too hard, on account of it being a .Net app) I found some really useful offsets and began work on adding memory-editing to Quickbeam.
Here's a screenshot of the first live reference-swap I made (back in the EmbedTest project, as you can see). I sprang for the classic "plasma pistol shoots tank shells" swap.
http://i.imgur.com/Z8j2zh.jpg
I'd also like to give a shoutout to Ryx from ModHalo/OpenCarnage - he was a huge help when it came to Halo's rendering problem. Apparently Halo only renders audio and video when the window is selected, otherwise it freezes output. Thanks to Ryx's fix, video now continues to render even if the window is deselected. No word on a fix for audio output (I spent a while looking, but it's on the backburner for the moment).
I got stuck for a long while at this point, wanting to add plugin support and real editing capability, but I didn't know WPF well enough. Just a few days ago, however, I decompiled one of my favorite Halo editors "Lethargy" (apparently Skeezix and I are the only two people who use that editor). I cleaned up the source code output, managed to get it compiling, and I'm now using Lethargy's code as a sort of guide. I like WPF and think it's technically superior, but for now the editing controls will be written in WinForms for that reason.
I've been making pretty rapid progress on the GUI since then. Here's a screenshot from early yesterday. You can see that I still have the WPF read-only tag tree on the left. The big area with the gross white-blue gradient is WinForms.
http://i.imgur.com/doTkN.png
And here's Quickbeam just a few hours later. The big purple 800x600 rectangle is where the embedded Halo ought to end up. Also note the WinForms tag tree (you can tell because it has the same visual style as HMT, Lethargy, etc.). The next step is HMT-style plugin support (finally!) I'm not sure if I'll bother with entity plugins straight away. It might be simple to add that, not sure.
http://i.imgur.com/UnSMX.png
I was actually pleasantly surprised to see that the WinForms 'button1' over there has a dark theme to match the WPF area of the application. I thought I'd have to manually restyle it like I will for the tag tree, but it looks like I got buttons for free!
Reading from and writing to memory already works. Adding the plugin-based editing controls is really the only thing standing between this and a proper live-memory-editing Halo mod tool.
Oh yeah, and it's all on GitHub: https://github.com/ChadSki/Quickbeam
The cool stuff is in the 'HaloCore' backend, if you're interested.
Python scripting is working flawlessly; the next step is to connect the Python backend to the buttons-and-menus sort of interface we're all used to. However, Python scripting will remain a feature of the editor.
Live editing (including swapping of model references!) is demoed below, using only Python scripting.
h-BZ6J_Ha4M
Howdy, y'all. It's been awhile. I stopped in once before, and I remember some of you from the old HaloMods. I thought you might be interested in what I've been up to lately. As of yet I've only been posting updates to OpenCarnage.net (where many of the ModHalo.net regulars migrated to).
So- my quest to make a Halo map editor. What began as an innocuous set of Python scripts eventually led to me hacking around with C# and some native dll calls. About three months ago I succeeded in embedding a running instance of Halo into my own project, and that's when things really started to get kicked off.
http://i.imgur.com/dSc1kl.jpg
Spurred onward by my initial successes (honestly, the embedding wasn't too hard; I found out how to do it on StackOverflow, although it does look mighty cool), I decided to start putting more effort into a little project called Quickbeam.
VoilĂ*, an early version of Quickbeam! All it could do is display tag names. Well, actually I could read a good bit of data, but writing back wasn't supported and plugins weren't implemented.
http://i.imgur.com/SnAQn.png
After working on that for a while, I found this thread (http://www.modacity.net/forums/showthread.php?11175-Halo-Structures) (woo, thanks Modacity) on Halo Structures. I also managed to find a download of Conure's beta Memory Editor. After decompiling his app (which wasn't too hard, on account of it being a .Net app) I found some really useful offsets and began work on adding memory-editing to Quickbeam.
Here's a screenshot of the first live reference-swap I made (back in the EmbedTest project, as you can see). I sprang for the classic "plasma pistol shoots tank shells" swap.
http://i.imgur.com/Z8j2zh.jpg
I'd also like to give a shoutout to Ryx from ModHalo/OpenCarnage - he was a huge help when it came to Halo's rendering problem. Apparently Halo only renders audio and video when the window is selected, otherwise it freezes output. Thanks to Ryx's fix, video now continues to render even if the window is deselected. No word on a fix for audio output (I spent a while looking, but it's on the backburner for the moment).
I got stuck for a long while at this point, wanting to add plugin support and real editing capability, but I didn't know WPF well enough. Just a few days ago, however, I decompiled one of my favorite Halo editors "Lethargy" (apparently Skeezix and I are the only two people who use that editor). I cleaned up the source code output, managed to get it compiling, and I'm now using Lethargy's code as a sort of guide. I like WPF and think it's technically superior, but for now the editing controls will be written in WinForms for that reason.
I've been making pretty rapid progress on the GUI since then. Here's a screenshot from early yesterday. You can see that I still have the WPF read-only tag tree on the left. The big area with the gross white-blue gradient is WinForms.
http://i.imgur.com/doTkN.png
And here's Quickbeam just a few hours later. The big purple 800x600 rectangle is where the embedded Halo ought to end up. Also note the WinForms tag tree (you can tell because it has the same visual style as HMT, Lethargy, etc.). The next step is HMT-style plugin support (finally!) I'm not sure if I'll bother with entity plugins straight away. It might be simple to add that, not sure.
http://i.imgur.com/UnSMX.png
I was actually pleasantly surprised to see that the WinForms 'button1' over there has a dark theme to match the WPF area of the application. I thought I'd have to manually restyle it like I will for the tag tree, but it looks like I got buttons for free!
Reading from and writing to memory already works. Adding the plugin-based editing controls is really the only thing standing between this and a proper live-memory-editing Halo mod tool.
Oh yeah, and it's all on GitHub: https://github.com/ChadSki/Quickbeam
The cool stuff is in the 'HaloCore' backend, if you're interested.