A Community discussion forum for Halo Custom Edition, Halo 2 Vista, Portal and Halo Machinima

Home  Search Register  Login Member ListRecent Posts
  
 
»Forums Index »Halo Custom Edition (Bungie/Gearbox) »Halo CE General Discussion »[Utility] Reclaimer

Page 1 of 3 Go to page: · [1] · 2 · 3 · Next
Author Topic: [Utility] Reclaimer (104 messages, Page 1 of 3)
Moderators: Dennis

Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 6, 2019 11:55 PM    Msg. 1 of 104       
Reclaimer is the successor to Adjutant. It was built from the ground up with flexibility in mind, and while the main library file still has the name 'Adjutant' it is not the same as the original Adjutant and does not have the same code base. It does however offer most of the same functionality, and unlike the original Adjutant it is flexible enough to add even more in future.

Instead of some fixed panels and tabs that cannot be changed other than resizing, the UI for Reclaimer allows you to drag and drop tabs and panels wherever you want or even move them out to separate windows. This allows you to open as many files at the same time as your computer can handle, and even view them side by side at the same time. Those of you familiar with Visual Studio should pick up on the new UI with no trouble at all, as the design is modeled directly off the Visual Studio UI. It also has the ability to switch between a number different themes at any time.

Reclaimer currently supports most kinds of .map files from Halo 1 to Halo 4 as well as decompressed .s3dpak files from Halo CE Anniversary (CEA) and Reach maps from MCC. The current feature set is support of bitmaps, models and BSPs from Halo 1 to Halo 4, sounds from Halo 3 and Reach, and bitmaps from Halo CEA. Models can be saved to AMF, JMS, OBJ and COLLADA formats and textures can be saved to DDS, TIF, PNG or JPEG. Note the JMS support in Reclaimer should work for models with multiple permutations whereas the original Adjutant did not support this.

Apart from setting the theme there is currently no UI or menu to change the settings. When you first open and close the app it will generate a settings.json file in the same folder. This file can be edited to change settings.
The main settings you may want to change are for the batch extraction. In the settings file there is a section named "Reclaimer.Plugins.BatchExtractPlugin". Under this section are the following settings:

  • DataFolder - the path where extracted files will be saved. The path must be enclosed in double quotes and any back-slahes must be doubled (ie "C:\\new folder")

  • PromptForFolder - either "true" or "false" (no quotes). True to ask where to save the files each time you do a batch extract. False to always save to the specified folder. Default is true.

  • OverwriteExisting - either "true" or "false" (no quotes). True to overwrite existing files in the batch extract folder. False to skip any tags where the file already exists. Default is true.

  • FolderMode - must be one of the following (with quotes)

    • "Hierarchy" - (default) extract tags into sub-folders based on their tag path

    • "TagClass" - extract tags into sub-folders based on their tag class

    • "Hybrid" - extract tags into sub-folders based on their tag class, then within each class put them in sub-folders based on their tag path

  • BitmapFormat - either "TIF", "PNG" or "DDS" (with quotes). Default is TIF.

  • BitmapMode - must be one of the following (with quotes)

    • "Default" - (default) all colour channels are saved in the same file

    • "Bgr24" - all colour channels are saved in the same file except alpha, which is discarded

    • "IsolateAlpha" - BGR channels will be saved to a file ending in _hue and the alpha channel will be saved to a file ending in _alpha

    • "IsolateAll" - every channel will be saved to a separate file

    • "MixedIsolate" - if the tag name ends in "multi", "multipurpose" or "cc" then IsolateAll will be used. Otherwise, IsolateAlpha will be used.

  • ModelFormat - must be one of the following (with quotes, not case sensitive)

    • "amf" - (default) the AMF format used by Adjutant

    • "jms" - the jms format used to import models into HaloCE with Tool

    • "obj" - standard obj model format with a mtl material file

    • "objnomtl" - standard obj model format without a material file

    • "collada" - a common model format supported by many modelling applications


Sound Extraction
Extracting sounds requires FFmpeg which can be downloaded https://www.ffmpeg.org/download.html under the Get packages & executable files section. You will need to download the 32-bit static version.
By default, ffmpeg.exe will need to be placed in the plugins folder in a folder called "ffmpeg" (ie .\Plugins\ffmpeg\ffmpeg.exe). You can find the plugins folder by clicking "View > Application Directory" from Reclaimer's menu. You will need to restart Reclaimer after placing ffmpeg.exe in the correct path.
If necessary you can change the path and output format by editing/adding the following section in your settings.json.
    "Reclaimer.Plugins.SoundExtractorPlugin": {
"FFmpegPath": ".\\Plugins\\ffmpeg\\ffmpeg.exe",
"OutputExtension": "wav",
"OutputNameFormat": "{0}[{1}]",
"LogFFmpegOutput": false
}

OutputExtension can be anything ffmpeg doesn't complain about.
In OutputNameFormat {0} will become the tag name, {1} will become the permutation name and {2} will become the permutation index. Default is tag_name[permutation].

Sounds can only be extracted by batch extraction. You can right-click and extract a single tag if you want.

Current version: 1.3.157
Download the Reclaimer installer: https://www.mediafire.com/file/orfvnl07qm1k7gg/Setup-Reclaimer-v1.3.157.msi/file
Download the AMF importer script for 3DS MAX: http://www.mediafire.com/file/evxxoet6f6iupdd/AMF2.ms/file

Notes
When you first open model or BSP files they will open in the meta viewer. To open with the model viewer right-click on the tag and select 'open with'. You can then chose the model viewer and set it as the default viewer. This is per title, so you will have to do it once for each Halo game.

What comes next depends on feedback and what people are most interested in, or if there even is any interest. Some things I'd like to get around to eventually are a UI for editing settings, Halo 1 Xbox support, Halo 5 Forge support, Halo Online support, additional MCC PC support etc.
Edited by Gravemind on May 29, 2020 at 08:26 AM


sharlowidalot
Joined: Dec 7, 2019


Posted: Dec 7, 2019 03:37 PM    Msg. 2 of 104       
Looks good! I like it more than Adjutant already. I get a crash when trying to load Halo 2 Vista .maps though. Here's what Event Viewer outputs:

Application: Reclaimer.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentException
at Adjutant.Blam.Common.CacheFactory.ReadCacheFile(System.String)
at Reclaimer.Controls.MapViewer.LoadMap(System.String)
at Reclaimer.Plugins.MapViewerPlugin.OpenPhysicalFile(System.String)
at Reclaimer.Plugins.MapViewerPlugin.OnMenuItemClick(System.String)
at Reclaimer.Plugins.PluginMenuItem.ExecuteHandler()
at Reclaimer.Windows.MainWindow.CustomMenuItem_Click(System.Object, System.Windows.RoutedEventArgs)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
at System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs)
at System.Windows.Controls.MenuItem.InvokeClickAfterRender(System.Object)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
at System.Windows.Application.RunDispatcher(System.Object)
at System.Windows.Application.RunInternal(System.Windows.Window)
at System.Windows.Application.Run(System.Windows.Window)
at Reclaimer.App.Main()


I would love MCC PC support as soon as possible. I'm dying to make higher res textures for it, and Assembly isn't being helpful. In case you don't know- the dev-mcc branch of Assembly has support for Reach MCC, if that could be any help with that. Keep up the good work!
Edited by sharlowidalot on Dec 7, 2019 at 03:37 PM
Edited by sharlowidalot on Dec 7, 2019 at 03:38 PM


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 7, 2019 10:52 PM    Msg. 3 of 104       
Quote: --- Original message by: sharlowidalot
I get a crash when trying to load Halo 2 Vista .maps though

Turns out it was only the multiplayer maps that had an issue, I've updated the download link with a fix. Please note though that while H2V maps can be opened they don't support any extraction - you will need to use the Xbox maps for that.


sharlowidalot
Joined: Dec 7, 2019


Posted: Dec 8, 2019 06:47 PM    Msg. 4 of 104       
Quote: --- Original message by: Pabeung
BRO PLS EXTRACT HALO ANNIVERSARY BRO COS ADJUDANT IS A BETTER NAME THAN RECLAIMER

Well Adjutant is slightly easier to Google, but I like the name Reclaimer more otherwise.
Quote: --- Original message by: Gravemind
Turns out it was only the multiplayer maps that had an issue, I've updated the download link with a fix. Please note though that while H2V maps can be opened they don't support any extraction - you will need to use the Xbox maps for that.

Good to know! Thanks! I'm looking forward to future updates! I also get a crash when trying to open bitmaps.map from Halo CE but that doesn't open in Adjutant either so I figure that's a known thing?
Edited by sharlowidalot on Dec 8, 2019 at 06:50 PM


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 10, 2019 03:27 AM    Msg. 5 of 104       
Quote: --- Original message by: sharlowidalot
I also get a crash when trying to open bitmaps.map from Halo CE but that doesn't open in Adjutant either so I figure that's a known thing?

Only playable maps are supported (including ui/mainmenu) - bitmaps, loc, sounds, campaign, shared etc cannot be opened directly.

On another note, I fixed an issue loading some Halo 3/Reach bsps and added .yelo to the Open File filter when browsing for a map. The link has been updated.


Polingo
Joined: Dec 10, 2019


Posted: Dec 10, 2019 10:35 PM    Msg. 6 of 104       
Working and looking pretty good thus far, I have a question though. If you ever get around to getting Halo 4 models working, will blend shape extraction for head models ever be added, or will that require a bit too much work?


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 11, 2019 07:48 AM    Msg. 7 of 104       
Quote: --- Original message by: Polingo
will blend shape extraction for head models ever be added, or will that require a bit too much work?

Iím not sure what you mean here.

Quote: --- Original message by: Pabeung
Halo 2 Xbox Maps don't export models properly and what's with the normal maps being weird also where is the model viewer bro and when will you have support for Halo CEA model extraction cause I have some private builds of Adjutant that can extract it hmmmm

What about Halo 2 models isnít working? Which models are affected? What do you mean by the normal maps being weird?
I explained in the original post how to access the model viewer.
I believe the build of Adjutant currently linked to in the Adjutant thread should allow you to open model files in CEA, so itís not exactly private. In any case, the CEA models in Adjutant are in a completely unusable state so thereís no point extracting them anyway.


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 13, 2019 03:13 AM    Msg. 8 of 104       
Most of the bump maps in Halo 2 are 8bit monochrome. There's only a handful that use the blue/pink style.

The download link has been updated with a fix for some models being unable to export as JMS.


RevOcelotMGS
Joined: Oct 5, 2019


Posted: Dec 13, 2019 08:57 AM    Msg. 9 of 104       
Any chance we could get Blender AMF/model importer? I cannot use 3DS Max to import AMFs anymore for some weird reason, and having it for Blender significantly reduces the workload as I have no use for Max other than importing models.


MosesofEgypt
Joined: Apr 3, 2013


Posted: Dec 13, 2019 11:56 AM    Msg. 10 of 104       
Not to steal Gravemind's thunder, but shelly has mapped out the AMF structure fully, and has actually written a tool to convert that to a gbxmodel tag. The reason I mention this is because we are making a set of blender tools for Halo, and an AMF importer could be very easily added to the set.


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Dec 13, 2019 05:53 PM    Msg. 11 of 104       
That gbxmodel converter sounds like the way to go if you intend on using the models in Halo CE. If youíre using them for renders and animations you may have to combine that with a Blender gbxmodel importer if there is one.

I believe the AMF script included with Adjutant is plain text, but if not, the one under the Reclaimer download link is. I donít know what GMax and Blenderís scripting is like but porting the AMF importer shouldnít be too difficult for someone familiar with their scripting formats as long as the equivalent functions exist.


RevOcelotMGS
Joined: Oct 5, 2019


Posted: Dec 13, 2019 08:34 PM    Msg. 12 of 104       
I don't have any interest in porting back to Halo CE. I'm working on a mod which requires I get stuff like the POA's doors for example. I'm afraid I have no knowledge on porting scripts between languages, but hopefully we'll see it ported to Blender.
On a different topic, will exporting sounds from Halo CE and 2 be supported? The Halo 2 Gravemind tool had an xml for reading and exporting them even though I couldn't get it working in Adjutant.


sharlowidalot
Joined: Dec 7, 2019


Posted: Dec 14, 2019 07:14 PM    Msg. 13 of 104       
I must say- I'm dying for a way to extract Reach MCC resources, textures in particular. I just wish that to be known


R93_Sniper
Joined: Feb 13, 2011

When in Doubt, RUN!


Posted: Dec 15, 2019 03:21 PM    Msg. 14 of 104       
Quote: --- Original message by: Gravemind
Quote: --- Original message by: Polingo
will blend shape extraction for head models ever be added, or will that require a bit too much work?

Iím not sure what you mean here.



He's asking if you would be able to make it so we can extract Blendshapes (or Morph Targets as it is in 3DS Max) for characters. They're basically deformations of geometry to do things like facial animations easier and more efficent.

This may help: https://en.wikipedia.org/wiki/Morph_target_animation


gpGlobals
Joined: Jan 15, 2020


Posted: Jan 15, 2020 10:59 PM    Msg. 15 of 104       
Amazing work! Glad to see Adjutant nice and updated.
Thanks to the AMF importer script being in plaintext, I'm currently actually working on an AMF -> SMD exporter (it currently uses Garry's Mod to read/write the files - weird, I know, but I'm just too accustomed to its version of Lua at this point to adapt to making an average console program).
Although, I do have a question - what are all the matrices in the code used for? I've checked a JMS importer script for Max, and it seems to just straight up import the geometry with no matrix scaling or math. For AMF importing, is this optional/only for loading it into 3DS Max, or something that's required?
Edited by gpGlobals on Jan 15, 2020 at 11:00 PM

Okay, little update!
I've made enough progress that exporting geometry from a .amf to a .smd is entirely in working order, and weights are correctly written.
However, the one thing I can't seem to get right is writing normals; I don't know what it is, but the values are just wildly... off.
Decompiling other successfully-exported Halo models that other people have used in Source shows that the normals there are wildly different from what I'm reading from the .amf - what could be going on here?
Edited by gpGlobals on Jan 18, 2020 at 01:41 AM


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Jan 18, 2020 08:39 AM    Msg. 16 of 104       
Quote: --- Original message by: gpGlobals

Amazing work! Glad to see Adjutant nice and updated.
Thanks to the AMF importer script being in plaintext, I'm currently actually working on an AMF -> SMD exporter (it currently uses Garry's Mod to read/write the files - weird, I know, but I'm just too accustomed to its version of Lua at this point to adapt to making an average console program).
Although, I do have a question - what are all the matrices in the code used for? I've checked a JMS importer script for Max, and it seems to just straight up import the geometry with no matrix scaling or math. For AMF importing, is this optional/only for loading it into 3DS Max, or something that's required?

Okay, little update!
I've made enough progress that exporting geometry from a .amf to a .smd is entirely in working order, and weights are correctly written.
However, the one thing I can't seem to get right is writing normals; I don't know what it is, but the values are just wildly... off.
Decompiling other successfully-exported Halo models that other people have used in Source shows that the normals there are wildly different from what I'm reading from the .amf - what could be going on here?


AMF uses matrices for BSP geometry instances - when multiple objects use the same set of vertices but with a different offset and/or rotation. The matrix defines where the object is placed and how it is rotated. In a few rare cases this is also used in regular models, such as the Halo 3 brute and Halo Reach spartans. If .smd doesn't do transforms you'd need to use the matrices to calculate out the final position of each vertex. This applies to normals too, as they will also be affected by the matrix.

Other than being affected by the matrices, the only thing I can think of for the normals is that the direction might be the same but not the length. Try normalizing both sets of normals and see if they end up the same.


gpGlobals
Joined: Jan 15, 2020


Posted: Jan 18, 2020 08:26 PM    Msg. 17 of 104       
Quote: --- Original message by: Gravemind
Quote: --- Original message by: gpGlobals

Amazing work! Glad to see Adjutant nice and updated.
Thanks to the AMF importer script being in plaintext, I'm currently actually working on an AMF -> SMD exporter (it currently uses Garry's Mod to read/write the files - weird, I know, but I'm just too accustomed to its version of Lua at this point to adapt to making an average console program).
Although, I do have a question - what are all the matrices in the code used for? I've checked a JMS importer script for Max, and it seems to just straight up import the geometry with no matrix scaling or math. For AMF importing, is this optional/only for loading it into 3DS Max, or something that's required?

Okay, little update!
I've made enough progress that exporting geometry from a .amf to a .smd is entirely in working order, and weights are correctly written.
However, the one thing I can't seem to get right is writing normals; I don't know what it is, but the values are just wildly... off.
Decompiling other successfully-exported Halo models that other people have used in Source shows that the normals there are wildly different from what I'm reading from the .amf - what could be going on here?


AMF uses matrices for BSP geometry instances - when multiple objects use the same set of vertices but with a different offset and/or rotation. The matrix defines where the object is placed and how it is rotated. In a few rare cases this is also used in regular models, such as the Halo 3 brute and Halo Reach spartans. If .smd doesn't do transforms you'd need to use the matrices to calculate out the final position of each vertex. This applies to normals too, as they will also be affected by the matrix.

Other than being affected by the matrices, the only thing I can think of for the normals is that the direction might be the same but not the length. Try normalizing both sets of normals and see if they end up the same.

Ah, okay, the issue was just that they weren't normalized - after doing so things look perfect! Thanks for the help, bro.
What's really cool is that this script that turns AMFs into SMDs will allow Blender to import Halo models - the Blender Source Tools allow imports of SMDs. (In fact, that's what I was using to check the normals.)

Edited by gpGlobals on Jan 18, 2020 at 08:26 PM

..ah, okay, nevermind; the situation with the normals actually isn't sorted out. They don't seem to look right when I compare them to other .smd files directly exported from Halo - and I think I know why.

I initially thought that 3DS Max stored its normals on a per-vertex basis, like it would be (excuse the bad pseudocode!)
normalArray[7] = vertexArray[7]'s normals

...but it doesn't seem that's the case. Correct me if I'm wrong, but it looks like the code you used:
if norm do (
max modify mode
normMod = Edit_Normals ()
select newMesh
addModifier newMesh normMod
normMod.selectBy = 1
normMod.SelLevel = #Vertex
normMod.Unify selection:#{1..normMod.GetNumNormals()}
normMod.MakeExplicit selection:#{1..normMod.GetNumNormals()}

for i = 1 to newMesh.numverts do (
sel = #{i}
norms = #{}
normMod.ConvertVertexSelection &sel &norms

for j in norms do (
normMod.SetNormal j normList
)
)

--dont want annoying modifier with lines everywhere
collapseStack newMesh
)

finds a bunch of normals shared by a single vertex, and sets each one to the normList? I just need to find a way to convert this strange format to a per-vertex array without direct access to 3DS Max's functions - any ideas how I could go about this?
Edited by gpGlobals on Jan 19, 2020 at 07:52 PM

Last edit: I have figured out the issue with normals. My code had zero issues - everything works absolutely perfectly. What the issue apparently was was that Reclaimer does not extract model normals properly. I decided to get a look at what the exact normals should be by exporting the Battle Rifle model from Adjutant in .obj format; my results showed that the normals in the .obj were correct, and the exact same as a direct port to Source I decompiled. I decided to test whether Reclaimer was the issue by exporting a .amf of the Battle Rifle with Adjutant, then reading it with my code; lo and behold, I got the correct normal values.
Edited by gpGlobals on Jan 19, 2020 at 10:29 PM
Edited by gpGlobals on Jan 19, 2020 at 10:30 PM


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Jan 21, 2020 05:10 AM    Msg. 18 of 104       
Quote: --- Original message by: gpGlobals
What's really cool is that this script that turns AMFs into SMDs will allow Blender to import Halo models - the Blender Source Tools allow imports of SMDs. (In fact, that's what I was using to check the normals.)

The next update will also include COLLADA and obj/mtl format support as well, though I have no ETA. Once your script is complete I can include it in the OP with the AMF link if you want.

Quote: --- Original message by: gpGlobals
Last edit: I have figured out the issue with normals. My code had zero issues - everything works absolutely perfectly. What the issue apparently was was that Reclaimer does not extract model normals properly. I decided to get a look at what the exact normals should be by exporting the Battle Rifle model from Adjutant in .obj format; my results showed that the normals in the .obj were correct, and the exact same as a direct port to Source I decompiled. I decided to test whether Reclaimer was the issue by exporting a .amf of the Battle Rifle with Adjutant, then reading it with my code; lo and behold, I got the correct normal values.

Based on a quick look in Max the normals seem fine to me, I'll have to compare the actual coordinate values and see what's different and which results are the correct ones.

Edit;
Turns out the normals were getting transformed when they weren't supposed to - I'm not sure how they managed to still look passable instead of completely garbage. I've exported some AMF files here with hopefully correct normals: https://www.mediafire.com/file/lfw3jy6ofysy3st/amf.7z/file
Can you convert them with your script and see if Blender likes them? If so, it'll be fixed in the next update.
Edited by Gravemind on Jan 21, 2020 at 05:47 AM


gpGlobals
Joined: Jan 15, 2020


Posted: Jan 21, 2020 03:45 PM    Msg. 19 of 104       
Quote: --- Original message by: Gravemind

Quote: --- Original message by: gpGlobals
What's really cool is that this script that turns AMFs into SMDs will allow Blender to import Halo models - the Blender Source Tools allow imports of SMDs. (In fact, that's what I was using to check the normals.)

The next update will also include COLLADA and obj/mtl format support as well, though I have no ETA. Once your script is complete I can include it in the OP with the AMF link if you want.

Quote: --- Original message by: gpGlobals
Last edit: I have figured out the issue with normals. My code had zero issues - everything works absolutely perfectly. What the issue apparently was was that Reclaimer does not extract model normals properly. I decided to get a look at what the exact normals should be by exporting the Battle Rifle model from Adjutant in .obj format; my results showed that the normals in the .obj were correct, and the exact same as a direct port to Source I decompiled. I decided to test whether Reclaimer was the issue by exporting a .amf of the Battle Rifle with Adjutant, then reading it with my code; lo and behold, I got the correct normal values.

Based on a quick look in Max the normals seem fine to me, I'll have to compare the actual coordinate values and see what's different and which results are the correct ones.

Edit;
Turns out the normals were getting transformed when they weren't supposed to - I'm not sure how they managed to still look passable instead of completely garbage. I've exported some AMF files here with hopefully correct normals: https://www.mediafire.com/file/lfw3jy6ofysy3st/amf.7z/file
Can you convert them with your script and see if Blender likes them? If so, it'll be fixed in the next update.
Edited by Gravemind on Jan 21, 2020 at 05:47 AM

I can confirm that Blender likes these two; the normals look perfect. As an extra check, I exported these two models to .obj with Adjutant then imported them - identical normals!

And yeah, I'll let you know when the script is complete. As I said, it currently runs off of Garry's Mod - I hope to convert it to a file that can be used with Lua's console application - and I haven't yet implemented proper handling of materials and matrix transformation when necessary. Bone/node rotations are also off in the exports, but I'm pretty much 100% sure that this is due to me not handling the quaternions right when converting them to Eulers.


R93_Sniper
Joined: Feb 13, 2011

When in Doubt, RUN!


Posted: Jan 24, 2020 07:53 PM    Msg. 20 of 104       
Quote: --- Original message by: gpGlobals
Bone/node rotations are also off in the exports, but I'm pretty much 100% sure that this is due to me not handling the quaternions right when converting them to Eulers.


If you're converting from Max to blender, i've found that 2.81 handles this fine with the right import settings. This is what i use:


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Jan 24, 2020 09:24 PM    Msg. 21 of 104       
I have updated the link in the first post with a new version.
It now has support to export as COLLADA and obj/mat, and now has recursive bitmap extractions from the model viewer. The new model formats are not yet supported in batch extraction.

When doing a recursive bitmap extract it will use the batch extract settings to determine the location and file format of the output.

When exporting to COLLADA and obj/mat the material paths will be relative paths the same as the tag name, ie "\objects\characters\...". The extension of the file path defaults to "tif".
If you are using a different file type, there is a section in the settings file called "Reclaimer.Plugins.ModelViewerPlugin" where you can change it.

This version also contains the fix for normals.
Edited by Gravemind on Jan 24, 2020 at 09:26 PM


Scott
Joined: Apr 4, 2005

No.


Posted: Jan 25, 2020 12:24 AM    Msg. 22 of 104       
Pretty Snazzy


gpGlobals
Joined: Jan 15, 2020


Posted: Jan 26, 2020 11:46 PM    Msg. 23 of 104       
Quote: --- Original message by: R93_Sniper
Quote: --- Original message by: gpGlobals
Bone/node rotations are also off in the exports, but I'm pretty much 100% sure that this is due to me not handling the quaternions right when converting them to Eulers.


If you're converting from Max to blender, i've found that 2.81 handles this fine with the right import settings. This is what i use:
https://cdn.discordapp.com/attachments/429392249919373323/665454327913250837/unknown.png

Oh, nah; I wasn't. I actually don't have 3ds max - one of the reasons I took it upon myself to code my script up.
I found out what the issue with the weird bone placement was, and it all comes down to conversion from quaternions -> matrices -> radian euler angles (the latter of which SMD files use) - anyone who's worked with rotational math/programming can probably attest to how much of an absolute hellstorm it is to deal with. Funnily enough, I only just now found an algorithm that seems to work perfectly and get the bone rotations how they should be, in fact!
Edited by gpGlobals on Jan 26, 2020 at 11:46 PM


General_101
Joined: Dec 23, 2013

Apparently all I post is spam.


Posted: Feb 11, 2020 04:18 PM    Msg. 24 of 104       
Any chance you can look into why grunts from H2 aren't rigged? It and the heretic grunt are the only models that seem to have this issue.


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Feb 16, 2020 04:19 AM    Msg. 25 of 104       
A new Reclaimer update has been released, download link in the main post has been updated.
New in v1.1.129:

  • Support Halo 4 models and BSPs

  • Support Halo 4 on 64-bit systems

  • Support COLLADA and OBJ model formats in batch extraction

  • Performance improvements when loading a model or bitmap in Halo 3+ for the first time

  • Fix Halo 2 grunt skinning

  • Fix skinning on certain Halo 3/ODST/Reach models

  • Enable text search in tag lists (ie press R to jump to the first folder/tag at the current level starting with R)

Quote: --- Original message by: General_101
Any chance you can look into why grunts from H2 aren't rigged?

Yes.
Edited by Gravemind on Feb 16, 2020 at 04:56 AM


Demoxicini
Joined: Feb 15, 2020

343 Guilty Spark


Posted: Feb 16, 2020 07:01 AM    Msg. 26 of 104       
Thank Gravemind for those uptades, (i hope for the sound extractor )


General_101
Joined: Dec 23, 2013

Apparently all I post is spam.


Posted: Feb 16, 2020 12:53 PM    Msg. 27 of 104       
Thank you very much. Was in need of skinned grunts for H2


Polingo
Joined: Dec 10, 2019


Posted: Feb 17, 2020 12:17 AM    Msg. 28 of 104       
Don't know if I am just being a buffoon but the new version appears to be crashing on my end whenever I try to open any .map file of any kind.

Application: Reclaimer.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileLoadException

Exception Info: System.IO.FileLoadException
at Adjutant.Blam.Common.CacheFactory.GetCacheTypeByFile(System.String)
at Adjutant.Blam.Common.CacheFactory.ReadCacheFile(System.String)
at Reclaimer.Controls.MapViewer.LoadMap(System.String)
at Reclaimer.Plugins.MapViewerPlugin.OpenPhysicalFile(System.String)
at Reclaimer.Plugins.MapViewerPlugin.OnMenuItemClick(System.String)
at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
at System.Windows.Controls.MenuItem.InvokeClickAfterRender(System.Object)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
at System.Windows.Application.RunDispatcher(System.Object)
at System.Windows.Application.RunInternal(System.Windows.Window)
at Reclaimer.App.Main()


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Feb 17, 2020 05:09 AM    Msg. 29 of 104       
Quote: --- Original message by: Polingo
Don't know if I am just being a buffoon but the new version appears to be crashing on my end whenever I try to open any .map file of any kind.


Turns out the installer configuration got screwed somehow, I've sorted it out and uploaded a new installer.


Demoxicini
Joined: Feb 15, 2020

343 Guilty Spark


Posted: Feb 17, 2020 07:33 AM    Msg. 30 of 104       
The sound extractor is quite hard to programm but it seems to easy to understand, but some unextractable just change the codec index value to 1 or 0 but they can be listened with some raw data problems (tics or white noise)


player147proman
Joined: Feb 20, 2020


Posted: Feb 20, 2020 01:33 AM    Msg. 31 of 104       
I downloaded the program not long ago and I have to say it's nice and clean compared to adjutant. I am having an issue where it crashes everytime I try to open a halo 4 bitmap.


Durandal_X
Joined: Feb 20, 2020


Posted: Feb 20, 2020 08:34 AM    Msg. 32 of 104       
Reclaimer keeps crashing whenever I try to load the halo reach map files. Do you guys know if it is at all possible to edit the textures, I want to change how the visor of the security helmet looks.


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Feb 21, 2020 04:37 AM    Msg. 33 of 104       
Quote: --- Original message by: player147proman
I downloaded the program not long ago and I have to say it's nice and clean compared to adjutant. I am having an issue where it crashes everytime I try to open a halo 4 bitmap.

There was an issue with Halo 4 bitmaps in the previous version. Are you using the newest one?

Quote: --- Original message by: Durandal_X
Reclaimer keeps crashing whenever I try to load the halo reach map files. Do you guys know if it is at all possible to edit the textures, I want to change how the visor of the security helmet looks.

Reclaimer is only for the Xbox versions of Halo at this time - it does not support MCC. Reclaimer is also not a modding tool. There is a tool called Assembly that you can use to mod Halo, though I don't believe you can edit textures with it.


player147proman
Joined: Feb 20, 2020


Posted: Feb 21, 2020 04:53 AM    Msg. 34 of 104       
I got the latest version. Where can I go to get logs for this? I want to provide more details and I'm sorry I sound dumb for asking where to get logs on for crashing.


Gravemind
Joined: Jul 28, 2009

The Age of Reclamation has begun.


Posted: Feb 21, 2020 05:45 AM    Msg. 35 of 104       
Just after the crash, search for "Event Viewer" in the start menu.
In the event viewer navigate to "Windows Logs > Application" in the panel on the left. Then in the list of events look for the most recent ones with a red error icon and click on them to see the details. There will be two of them and one should be a lot longer than the other should say something about Reclaimer - this one will be the crash log.

Next time I update the app I'll add an easier way to get crash details.

 
Page 1 of 3 Go to page: · [1] · 2 · 3 · Next

 
Previous Older Thread   







Time: Sat May 30, 2020 5:48 PM 203 ms.
A Halo Maps Website