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

Home  Search Register  Login Member ListRecent Posts
  
 
Viewing User Profile for: LaikaGlove
About Contact
Joined: May 20, 2019 05:49 PM
Last Post: Jan 21, 2020 12:25 PM
Last Visit: Jan 24, 2020 10:30 PM
Location:
Occupation:
Interests:
Your Age:
What Games do you play:


Send Private Message
Post Statistics
LaikaGlove has contributed to 48 posts out of 469775 total posts (.01%) in 279 days (.17 posts per day).

20 Most recent posts:

I'm in the middle of a big refactor of the code to clean things up for a code release, but it will take some time. What other formats do you want supported?

Also yes I do plan to eventually support halo 4 animations, which may again take some time to reverse engineer because there's another new codec compression implemented for that game. I haven't looked at it but I have a hunch it won't be as difficult as Reach was, but we'll see.


Quote: --- Original message by: Wingblast

I get this error when trying to export the Halo Reach first person magnum animations: https://i.imgur.com/M8zaDth.png
so far I've been able to successfully export the DMR, sniper and shotgun animations, but the magnum fails on all of the .map files I've tried.

Edit:
here's what was in debug.log, if that helps
System.Exception: Error extracting model_animation_graph tag objects\characters\spartans\fp\weapons\pistol\fp_magnum\fp_magnum:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index ---> 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 Blam.Games.Game.GetStringIDValue(Int32 section, Int32 index)
at Blam.Tags.StringID.Read(CacheReader reader)
at Blam.Tags.FieldCollection.ReadPointerFields(CacheReader reader)
at Blam.Tags.FieldCollection.Read(CacheReader reader)
at Blam.Tags.Block`1.Read(CacheReader reader)
at Blam.Tags.FieldCollection.ReadPointerFields(CacheReader reader)
at Blam.Tags.FieldCollection.Read(CacheReader reader)
at Blam.Tags.Block`1.Read(CacheReader reader)
at Blam.Tags.FieldCollection.ReadPointerFields(CacheReader reader)
at Blam.Tags.FieldCollection.Read(CacheReader reader)
at Blam.Games.Game.ReadCacheIndexItem(CacheIndexItem cacheIndexItem)
at Blam.Games.HaloReach.Tags.model_animation_graph_group.GetRenderModel(CacheReader reader, model_flags flag)
at Blam.Games.HaloReach.Tags.model_animation_graph_group.GetRenderModelNodes(CacheReader reader)
at Blam.Games.HaloReach.Tags.model_animation_graph_group.Extract(CacheReader reader, String path)
at Blam.Games.Game.ExtractCacheIndexItemSource(CacheIndexItem cacheIndexItem, String path)
--- End of inner exception stack trace ---
at Bonobo.ViewModel.MainViewModel.ExtractSource(Object parameter)
at Bonobo.RelayCommand`1.Execute(T parameter)
at Bonobo.RelayCommand`1.System.Windows.Input.ICommand.Execute(Object parameter)
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)

Edited by Wingblast on Jan 15, 2020 at 02:31 PM
Edited by Wingblast on Jan 15, 2020 at 02:59 PM
Edited by Wingblast on Jan 15, 2020 at 03:02 PM


Hmm, so this one seems tricky. Most of these extraction issues seem to stem from the fact that in Reach it's no longer necessary to have perfectly matching node graphs between a model and an animation. The issue with the magnum in particular here is that the render_model itself has an extra node named "bullet" that isn't in the first person animation graph.

I'll have to think about how to handle that and it may require some reworking of how I'm getting the related model tag for a given animation...

In other news I think I fixed the previous issue reported with the banshee animations, it looks like Reach has a new frame info type (dx,dy,dz,dyaw,dpitch,droll) where it can track rotational motion of the root node in all 3 axis.
Edited by LaikaGlove on Jan 15, 2020 at 06:22 PM


Interesting, looks like those animations have a new type of frame info not in the previous games. I'll take a look tonight.


Finally think I figured out all the issues. I've updated the first post with a new build.

Version 1.0.0.5:

  • Fixed crash when extracting animations from certain Reach maps.

  • Fixed issues extracting overlay animations from Reach.

  • Fixed issues extracting first person animations from Reach.



Download: https://1drv.ms/u/s!AtvYI8x0KxMRhtYj8dcOvujABBnyQw?e=fkkZeG

Quick fp animation example:

Edited by LaikaGlove on Jan 13, 2020 at 08:59 PM


I encountered a similar issue when testing importing some animations into CE extracted with Bonobo. I found that TheGhost's jms exporter exports nodes slightly differently, so I had to update it to export them in a breadth first alphabetical approach to match the HEK jms exporter.

You can grab the updated maxscript from the "maxscripts" folder that I released with Bonobo:
https://1drv.ms/u/s!AtvYI8x0KxMRhtMV0r2X2GMqLcAycA?e=okOLhU

Try exporting your jms files using the JMS_Exporter_v1-0-4.ms script and see if that works.


Quote: --- Original message by: R93_Sniper

I'm trying to put these animations onto reach characters but it doesnt seem to work. The script will complain about b_node and b_node2 (which i've never seen in a model before?), and then nothing will animate except for the root bones. Any ideas?

Edit: So i got it half working. Ripping from multiple maps helps as far as i've seen, but there's some crazy errors across the board
Edited by R93_Sniper on Jan 11, 2020 at 01:11 AM

For anyone else having similar problems, when importing a model with the Adjutant's AMF importer uncheck "SetBoneEnable". This fixed most of Snipers issues.

I have an update I'm hoping to release soon that fixes an issue when extracting animations from certain maps and fixes extraction of overlay animations.

As for the issues with first person animations, I'm totally at a loss on what's going on there. It's odd because they're close but not quite right. Also they're using an older compression algorithm that was used in halo 2, 3, and odst so technically they should still work...I'm not really sure what Reach is doing additionally and that may take more time to look into.


Interesting, I took a look and it's definitely my code. Not really sure where the failure is happening yet.


First post updated with version 1.0.0.4 with Reach animation extraction, it's not obfuscated so enjoy. There's still a lot I don't like about the code but I simply don't have the time to refactor it at the moment.

Quick example:


Download the latest version here as well for your convenience: https://1drv.ms/u/s!AtvYI8x0KxMRhtMV0r2X2GMqLcAycA?e=okOLhU


Hey sorry Sniper, I was able to figure out debugging shortly after that post. Thanks though.

I was able to make some progress based on my findings, though it probably doesn't look like much compared to my previous post:


You'll notice reduced jitter on the legs especially, which means I have a more accurate algorithm working for decompressing the new animation codec used in reach.

The more technical explanation is that before I was using a spherical linear interpolation algorithm for interpolating between frames. However, the new codec used in reach actually uses a catmull-rom spline curve algorithm for interpolation.

I still have some work ahead of me though, but the holidays may set that work back a bit.


Quote: --- Original message by: R93_Sniper
the question now begs to be asked since MCC is out, any updates on the reach animation stuff? I do remember a comment being made about needing to look at the flights to get any further

No progress to report currently, I'm trying to figure out how to debug the game via cheatengine or ida pro but I can't figure out how to attach the debugger to the haloreach.dll. The only process I see running is the main MCC-Win64-Shipping.exe which doesn't have the code I need to step through.


Quote: --- Original message by: epicplayer
It's been a while. Any updates on Halo Reach animations?

Sorry, I've been kind of busy lately.

Progress has kind of stagnated, I've kind of hit the limit of what I can do with the disassembled game without actually debugging. So I've just been waiting to get into one of the Reach flights on PC to do so.

Unfortunately I haven't been invited to one yet...


Quote: --- Original message by: supersniper
EDIT : Btw, Laika do you have any interest in Halo 2 PC?


Like I said a few pages back, I was going to look into compilation for h2v as well. However it looks like the H2Codez guys have that pretty close to working.

Also regardless of what you think of Halo 4 as a game, those animations are no doubt pretty dope: https://www.youtube.com/watch?v=tIPG3T3fUhU&t=0m56s
Edited by LaikaGlove on Aug 2, 2019 at 03:51 PM


Been kinda busy lately so I haven't had much time to work on this. But last night I made a little progress on Reach animations:



Still some stuff I need to figure out, but much closer than I was before.

No promises but Halo 4 extraction may not be far behind since it uses a revised version of this codec from reach, I'm not sure how much has changed though.


The source code to read animations like this has been available for almost two years now right here:
https://github.com/HaloMods/HaloContentToolScripts/blob/master/Halo2/h2_anim_extractor_batch2_9.ms

If you think you can do better, then by all means go for it.
Edited by LaikaGlove on Jun 10, 2019 at 08:45 AM
Edited by LaikaGlove on Jun 10, 2019 at 08:45 AM


Quote: --- Original message by: Vaporeon
Quote: --- Original message by: LaikaGlove
Someone pointed out an issue where the obfuscator I used injected code to stop the app from working after the trial period.

This wasn't intentional and I wasn't aware the obfuscation did that, so I'll try and get a fix out later.


Thanks for the good laugh.

Dude, what is your deal?


First post updated with a new download, sorry about that people.


Someone pointed out an issue where the obfuscator I used injected code to stop the app from working after the trial period.

This wasn't intentional and I wasn't aware the obfuscation did that, so I'll try and get a fix out later.


Quote: --- Original message by: MosesofEgypt
Python 3 to be specific. If you're interested, here's my repositories.
https://bitbucket.org/Moses_of_Egypt/

MEK is the Moses Editing Kit, which contains my replacements for Guerilla and HEK+, a lovely wrapper for Tool, and a bunch of converters. Mozzarilla is the replacement Guerilla, Refinery is the replacement HEK+, Binilla is what most of Mozzarilla is built on, Supyr Struct is a binary structure handling library, and Reclaimer is my library for interfacing with all things Halo.

If anything, Reclaimer is probably what you'd be interested in browsing through. One of the things it contains is definitions for every tag structure(including most of the hidden fields and their purposes). If you're interested in talking with all of us in an active Discord server, here's ours:

https://discord.gg/D7APNj7


Tag Loading in Bonobo is already driven by code I generated from tag definitions extracted from the h1 and 2 HEK tools. That's how the tag viewer reads the tags for those games (ie. double click a tag in the treeview to view its contents).

Thanks though, I may take a look at your stuff later.


Quote: --- Original message by: MosesofEgypt

Quote: --- Original message by: LaikaGlove
Quote: --- Original message by: Bungie LLC
snip


For Halo 1 & 2 Bonobo has the tag definitions so you can view the collision tags. It's definitely possible to write something to extract straight to a halo 1 collision tag, but extracting straight to jms is a little trickier. I also don't have those tags mapped out for the later games so that would have to be done as well.

A couple of the hurdles for extracting straight to jms are:
- The vertex positions exist in the collision model, but they aren't oriented with the bones so I'd have to look into the math for translating those points to reorient them with the bones.
- The triangles are totally lost and only exist in the form of an edge tree, which I couldn't figure out how to reconstruct back in the day. There's likely an algorithm to do this that I wasn't aware of at the time though.



Took these from my collision converter, cleaned them up a bit, and made them a little more generic. You can use one for getting the edge loops to traverse the vertices to outline the collision surfaces, and you can use the other to turn those edge loops into triangles. Use them as you see fit.


- snip -



As for the rotations though, I can't provide anything so succinct, as mine relies on my Matrix module and classes, as well as a decent understanding on how to apply quaternion transforms.
Edited by MosesofEgypt on May 29, 2019 at 01:27 AM


Interesting, thanks!

I may take a crack at collision extraction eventually then, I have a decent foundation for doing the quaternion transforms since animation extraction kind of relies heavily on that.

What language is that btw?


Quote: --- Original message by: Bungie LLC
I've an unrelated question, but I figured I'd ask in this thread specifically, since my chances here are better than anywhere else.

What is known about model collision geometry from (at least) second and third generation Halo titles, and how feasible is it to get it into a usable state?

If there's even a shred of hope for collision geometry processing/extraction, I would unironically be willing to commission it's development.

As it stands, we currently have the ability to acquire both render models and animations from up to third-generation halo games. As I've already stated previously in this thread, the only missing piece required for a near-seamless content porting pipeline from newer halo games into custom edition is an application in the same vein as Adjutant or Bonobo that handles collision geometry.

I'm interested to hear your thoughts on this. If, for whatever reason, you'd like to get in touch with me directly, you can reach me on either Steam or Discord (Seraphim#4203).


For Halo 1 & 2 Bonobo has the tag definitions so you can view the collision tags. It's definitely possible to write something to extract straight to a halo 1 collision tag, but extracting straight to jms is a little trickier. I also don't have those tags mapped out for the later games so that would have to be done as well.

A couple of the hurdles for extracting straight to jms are:
- The vertex positions exist in the collision model, but they aren't oriented with the bones so I'd have to look into the math for translating those points to reorient them with the bones.
- The triangles are totally lost and only exist in the form of an edge tree, which I couldn't figure out how to reconstruct back in the day. There's likely an algorithm to do this that I wasn't aware of at the time though.


Time: Sat February 22, 2020 8:48 AM 156 ms.
A Halo Maps Website