Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to Xbox Chaos: Modding Evolved

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

Sign in to follow this  
Followers 0
Danis

Halo 3
Adding custom engine versions to Assembly?

21 posts in this topic

Since halo online got updated and added the new maps, I wanted to start modding but when I tried to add one of the new maps it gives me this error

c8ac797e7b.png

How do I go about adding support? 

Thank you, and sorry if this is not the correct forum for it.

Share this post


Link to post
Share on other sites

Assuming you are using Aussie's fork that supports Halo Online, you can add engines via the Formats folder. Engines.xml and then probably a new _core xml for the game because I think the header changed slightly.

 

Alternatively, just toss in a renamed .map from the original build. The .map is just used to open tags.dat.

Danis likes this

Share this post


Link to post
Share on other sites

Assuming you are using Aussie's fork that supports Halo Online, you can add engines via the Formats folder. Engines.xml and then probably a new _core xml for the game because I think the header changed slightly.

 

Alternatively, just toss in a renamed .map from the original build. The .map is just used to open tags.dat.

It let me load the tags but changing anything results in this error message: 

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.   at System.Collections.Generic.List`1.set_Capacity(Int32 value)   at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)   at System.Collections.Generic.List`1.Insert(Int32 index, T item)   at System.Collections.ObjectModel.Collection`1.InsertItem(Int32 index, T item)   at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)   at System.Collections.ObjectModel.Collection`1.Add(T item)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.ReflexiveData.Resize(Int32 count)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.MetaReader.VisitReflexive(ReflexiveData field)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.ReflexiveData.Accept(IMetaFieldVisitor visitor)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.MetaReader.ReadField(MetaField field)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.MetaReader.ReadFields(IList`1 fields)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaEditor.RefreshEditor(LoadType type)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaEditor..ctor(EngineDescription buildInfo, TagEntry tag, MetaContainer parentContainer, TagHierarchy tags, ICacheFile cache, IStreamManager streamManager, IRTEProvider rteProvider, Trie stringIDTrie)   at Assembly.Metro.Controls.PageTemplates.Games.Components.MetaContainer..ctor(EngineDescription buildInfo, String cacheLocation, TagEntry tag, TagHierarchy tags, ICacheFile cache, IStreamManager streamManager, IRTEProvider rteProvider, Trie stringIDTrie)   at Assembly.Metro.Controls.PageTemplates.Games.HaloMap.CreateTag(TagEntry tag)   at Assembly.Metro.Controls.PageTemplates.Games.HaloMap.tvTagList_SelectedTagChanged(Object sender, RoutedPropertyChangedEventArgs`1 e)   at System.Windows.RoutedPropertyChangedEventArgs`1.InvokeEventHandler(Delegate genericHandler, Object genericTarget)   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)   at System.Windows.Controls.TreeView.OnSelectedItemChanged(RoutedPropertyChangedEventArgs`1 e)   at System.Windows.Controls.TreeView.ChangeSelection(Object data, TreeViewItem container, Boolean selected)   at System.Windows.Controls.TreeViewItem.Select(Boolean selected)   at System.Windows.Controls.TreeViewItem.OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)   at Assembly.Metro.Controls.WPFTreeView.MetroTreeViewItem.OnGotFocus(RoutedEventArgs e)   at System.Windows.UIElement.IsFocused_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)   at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value)   at System.Windows.Input.FocusManager.OnFocusedElementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)   at System.Windows.Input.FocusManager.SetFocusedElement(DependencyObject element, IInputElement value)   at System.Windows.Input.KeyboardNavigation.UpdateFocusedElement(DependencyObject focusTarget)   at System.Windows.FrameworkElement.OnGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)   at System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)   at System.Windows.Input.InputManager.ProcessStagingArea()   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)   at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp)   at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)   at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)   at System.Windows.Input.KeyboardDevice.Focus(IInputElement element)   at System.Windows.UIElement.Focus()   at System.Windows.Controls.TreeViewItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)   at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)   at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)   at System.Windows.Input.InputManager.ProcessStagingArea()   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)   at System.Windows.Interop.HwndSource.InputFilterMessage(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 MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
Edited by Danis

Share this post


Link to post
Share on other sites

Maybe some of the tags are encrypted or something?

The tag layouts are going to differ between builds, which can cause errors like that when using plugins meant for the original build.

 

Would have to troubleshoot the plugin yourself to find differences and account for them.

Danis likes this

Share this post


Link to post
Share on other sites

The tag layouts are going to differ between builds, which can cause errors like that when using plugins meant for the original build.

 

Would have to troubleshoot the plugin yourself to find differences and account for them.

Thanks for the replies, didn't really think I would get replied in the first place :)

Could you maybe give me some basic examples on the differences and I'll build on that?

I really don't know where to start, thanks. 

Edited by Danis

Share this post


Link to post
Share on other sites

I don't know the differences, just that the error is indicative of differences being present.

 

You have to cut out the plugin and add it back piece by piece until you find something different compared to the same tag on the original build. Once you find a new value you'll need to adjust future offsets to compensate until the end.

Danis likes this

Share this post


Link to post
Share on other sites

I don't know the differences, just that the error is indicative of differences being present.

 

You have to cut out the plugin and add it back piece by piece until you find something different compared to the same tag on the original build. Once you find a new value you'll need to adjust future offsets to compensate until the end.

 

I found all of the tags that were causing the trouble

biped
crea
equip
jmad
mulg
proj
skya
vehi
weap
zone
 
Now I just go to the plugins folders and just adjust the offsets or do I need to find new values and include them in the plug-in?
if so, how do I go about finding the value?
Thanks.
Edited by Danis

Share this post


Link to post
Share on other sites

 

I found all of the tags that were causing the trouble

biped
crea
equip
jmad
mulg
proj
skya
vehi
weap
zone
 
Now I just go to the plugins folders and just adjust the offsets or do I need to find new values and include them in the plug-in?
if so, how do I how about finding the value?
Thanks.

 

 

It's a bit of trial and error, but I can tell you that I did look into zone before (in an earlier build) and the plugin in asm is ODST's which does not match at all.

 

You are better off fixing the tags you want instead of trying to do all of them.

 

/offtopic

 

Halo Online got some new maps?

 

Yeah as of the current build there is now Narrows, Pit, and Standoff.

Share this post


Link to post
Share on other sites

It's a bit of trial and error, but I can tell you that I did look into zone before (in an earlier build) and the plugin in asm is ODST's which does not match at all.

 

You are better off fixing the tags you want instead of trying to do all of them.

 

 

Yeah as of the current build there is now Narrows, Pit, and Standoff.

I wish there were more tutorials on building the plugins from scratch, I've looked at things from 2012 up until now and I didn't find any tutorials :(

If there are new values or the padding has shifted, how do I find the new values? 

Edited by Danis

Share this post


Link to post
Share on other sites

You don't need to worry about naming anything, just insert an undefined field..

<undefined name="Unknown" offset="0x0" visible="false" />

..Where you see things don't match up with the original build.

 

There probably isn't a big number of differences, but just 1 is enough to throw off any later blocks/reflexives and cause that memory error.

 

There is an example plugin (used by the view value as dialog) that contains all valid plugin fields that can be added, found in the Examples folder.

Share this post


Link to post
Share on other sites

Do I use cheat engine to find the values, or do I just randomly go in specific increments and just see if any values popup in the plug-in editor?

I don't think anyone has ever done a tutorial on this kind of thing, which is sad.


You don't need to worry about naming anything, just insert an undefined field..

<undefined name="Unknown" offset="0x0" visible="false" />

..Where you see things don't match up with the original build.

 

There probably isn't a big number of differences, but just 1 is enough to throw off any later blocks/reflexives and cause that memory error.

 

There is an example plugin (used by the view value as dialog) that contains all valid plugin fields that can be added, found in the Examples folder.

Right thanks, I'll get on fixing it. 

Edited by Danis

Share this post


Link to post
Share on other sites

Do I use cheat engine to find the values, or do I just randomly go in specific increments and just see if any values popup in the plug-in editor?

I don't think anyone has ever done a tutorial on this kind of thing, which is sad.

Assembly will display everything. cut everything out between revisions and the /plugin closing tag and bring everything back a little at a time. If you find a crash or see named things stop matching up with the old build you'll know there's a difference.

 

There isn't much for tutorials because Assembly could "generate" the general layouts of the 360 games, but that luxury isn't available for halo online due to the format differences.

 

Tagtool can generate layouts in a different format from assembly if you want to do that with both builds and compare those, but I don't know how understandable it would be.

Share this post


Link to post
Share on other sites

Assembly will display everything. cut everything out between revisions and the /plugin closing tag and bring everything back a little at a time. If you find a crash or see named things stop matching up with the old build you'll know there's a difference.

 

There isn't much for tutorials because Assembly could "generate" the general layouts of the 360 games, but that luxury isn't available for halo online due to the format differences.

 

Tagtool can generate layouts in a different format from assembly if you want to do that with both builds and compare those, but I don't know how understandable it would be.

When looking at the new build, 99% of the things appear as unnamed hex values like here 

591bf0dde2.png

Clicking on any of them results in a crash, does that mean that assembly found the values at their appropriate locations and they're just undefined?

Also where can I find the tag tool?

Thanks

Share this post


Link to post
Share on other sites

When looking at the new build, 99% of the things appear as unnamed hex values like here 

 

Clicking on any of them results in a crash, does that mean that assembly found the values at their appropriate locations and they're just undefined?

Also where can I find the tag tool?

Thanks

Halo Online doesn't store tag names and have to be done manually. They are crashing because the plugin differences.

 

TagTool is at https://github.com/ElDewrito/HaloOnlineTagTool

Share this post


Link to post
Share on other sites

All the sizes of the weap tags are different, they also have different offsets and such - f77 -> 14f7 for the first one, and the number of them changed too (82 to 97).

How do I find out the exact difference when all the data is different? Or rather, assuming I have no idea as to the structure (completely new build, for example) - how do I find out the locations/tag names/etc in the first place?

Share this post


Link to post
Share on other sites

All the sizes of the weap tags are different, they also have different offsets and such - f77 -> 14f7 for the first one, and the number of them changed too (82 to 97).

How do I find out the exact difference when all the data is different? Or rather, assuming I have no idea as to the structure (completely new build, for example) - how do I find out the locations/tag names/etc in the first place?

lots of trial and error. 

 

basically how most plugins are made to begin with. 

Share this post


Link to post
Share on other sites

lots of trial and error. 

 

basically how most plugins are made to begin with. 

how do I begin?, I don't care if I have to sit there for like a week and find each offset manually

How do I start? 

Share this post


Link to post
Share on other sites

how do I begin?, I don't care if I have to sit there for like a week and find each offset manually

How do I start? 

im not sure what programs were made for halo online since i havent touched it too much myself. but the general way to start would be getting a program to generate new plugins. 

 

this would give you a blank set of plugins that at least have tagblocks and etc somewhat lined up to how they should be in the file. then slowing changing thing by thing and testing in game to see what changed so you can line up the names that there was in the old tags with the new ones so you can name the plugins

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0