Coder Social home page Coder Social logo

me3tweaks / legendaryexplorer Goto Github PK

View Code? Open in Web Editor NEW
117.0 11.0 27.0 614.74 MB

Editor toolset for Mass Effect Trilogy and Mass Effect Legendary Edition

Home Page: https://me3tweaks.com

License: GNU General Public License v3.0

C# 81.25% Batchfile 0.01% HLSL 1.09% PowerShell 0.07% C++ 7.19% C 1.01% Assembly 9.39%
modding mass effect toolkit legendary edition

legendaryexplorer's People

Contributors

aquadran avatar d00telemental avatar dependabot[bot] avatar epicabsol avatar exkywor avatar giftfish avatar heffu avatar henbagle avatar hypermorphicmods avatar jherchen avatar kfreon avatar kinkojiro avatar matthewgenerous avatar mgamerz avatar mjperez-usgs avatar reitowo avatar sircxyrtyx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

legendaryexplorer's Issues

Meshplorer failing to preview meshes

Upon previewing a mesh for the first time, Meshplorer gives a SystemOutOfMemory error. Subsequent times result in properties/hex loading but the visual preview missing.

Attempting to view a mesh for the first time:

capture

Further attempts:

capture2

Occurs in any package, regardless of DLC or mod.

I'm using ME3 Explorer version 3.1.2.13, digitally signed on September 9th, 2018.

Switching to as late as 3.12.12 results in Meshplorer working as intended.

Metadata Editor WPF: Dropdowns searchable/keypress search

Currently the MetadataEditorWPF control does not work with keypress search on the comboboxes. In Package Editor classic, you could search for an item by typing it in - due to how I set up the comboboxes for this control it is not possible as searches are done from the first character and the entire item is a string.

We may need to make a class containing the index and the item it is referencing. This way we can prefix a displayable value but search on the parsed entry value.

Enhancement: Drag and drop from UPK explorer into Package Ed for brushes

Brushes are geometry contained entirely in unreal structs. It would be good to be able to copy them from unreal (and therefore 3dsMax) into a pcc. Ideally drag and drop from UDK Explorer into package ed, but if that is too difficult a simple import function would be useful.

Saves having to do it by hand/hexeditor

The following are brushes: BrushComponent, RBBodySetup

BTW ME3Creator has a "Import function" that effectively has been surpassed by drag and drop. However if dragging/dropping between UDK Explorer and Package Ed was difficult, it might be a useful interface for an importer.

Suggestion: Refresh TLKs menu option

In package editor (mainly, but also sequence editor and dialogue editor) it would be useful to have a menu option to force ME3Exp to refresh the tlks, rather than having to exit the program entirely when you update the tlks in order to force the correct strings to be shown.

When doing large conversations this makes life a lot easier.

BioSeqVar_ObjectFindByName

The object name is not displayed in Sequence Editor only ???. Pre v2.0.10 (about) the name was displayed.

PackageEditorWPF: Optimize search/gotoNumber() to prevent deadlock

TreeView in WPF with virtualization is really bad at selecting items and expanding the parents. The current code works a good amount of the time but it's not very efficient and on files like Engine.u it can actually completely lock up when having to generate thousands of containers.

The following method seems to be designed to work around this issue (as asked by me on StackOverflow): http://peregrinesview.uk/wpf-behaviors-part-2-treeview/

The gotoNumber will once again have to be reworked to include this.

Suggestion: Add Spline to PathEd

Splines are pathing components used for non-AI actors. Typically they are using to send a walking actor around a path (e.g. the robodog on the Normandy, the walking guy in the CIC, various walkers at hubs). They should be fairly simple to add (I would think).

The spline has an actor (singular point which is the start of the spline, it also links the chain to the predecessor spline and subsequent splines). It has a SplineComponent which actually contains the spline data. This is broken down like this:
Spline Info: Point 0 is the location of the Actor, Point 1 is the location of the destination (next actor)
SplineReparamableTable: This is the curve along which the actor travels: InVal is the distance along the spline and OutVal is the time along the path with 0 being the start and 1 being the end. (this can be view in Curve Editor)
Bioware always seems to break into 10 parts no matter the length of the spline.
The speed is a function of the SeqAct_MoveOnSpline / Distance. But if the first section is say 100 units long and the second is 500 units, the actor will move unevenly (slowly then quickly).

Splines can be viewed in game with the command "SHOW SPLINES"

Enhancement: Add Biostage to non-generic binary list

Biostage layout:
Length (int)
Name: m_aCameraList + index 0 + int unknown
Count + int unknown
[Camera name + index
property name + floatproperty + length +float value (repeated like:
fPitchDelta name + floatproperty + length +float value
fYawDelta name + floatproperty + length +float value)
None]

Example: Biostage #82 in BioD_Nor_300_Crit.pcc

WPF Binary Scan conversion class WIP list

List of binary scans to be converted -> WPF:
StartBioDynamicAnimSetScan
StartBioStageScan
StartClassScan
StartClassScan2
StartEnumScan
StartGenericScan
StartGUIDCacheScan
StartLevelScan
StartMaterialScan
StartObjectRedirectorScan
StartPrefabInstanceScan
StartSkeletalMeshScan
StartStaticMeshCollectionActorScan
StartStaticMeshScan
StartTextureBinaryScan
StartTextureMovieScan(edited)

Port Unhood script decompiler for ME1

It looks like Unhood is able to decompile a good chunk of ME1 code far more reliably than my ME3->ME1 port did. We should probably switch to that for ME1 bytecode parsing. It looks very different from Warranty Voider's implementation which will take some time to analyze.

Plot Var DB - WPF & Cloud updates

The Plot Var DB I wrote in 2016 is pretty poor in its performance. It could use an overhaul.

Describe the solution you'd like
It needs to be rewritten into WPF with data virtualization, which will significantly improve the performance. Additionally, it would be nice if the DB would be kept up to date regardless of what version of the toolkit you are using.

Plan

  • Implement database on ME3Tweaks that will house the current and future information for this database. It would consist of vanilla game (+vanilla DLC) only.
  • Create an endpoint that clients will connect to to retrieve current, up to date database information. This will be cached locally, so in the event the server disappears, the data remains accessible.
  • A serverside entry form will be added into ME3Tweaks ModMaker, which will be usable by trusted developers to enter data into.
  • New builds of ME3Explorer will have a new version of this database included. This way the release will have the latest DB at the time of release.
  • The DB format will need to be updated to account for a version number so it can tell if the server is newer or not.

Other features

  • Still allow loading a local DB for user mods. This could be integrated into the local interface, and the rows would have a color. Or the DB could have a color assigned and you could load multiple DBs.
  • Automatic database loading based on what was previously loaded.

Describe alternatives you've considered

  • N/A

Minor bugs: Custom classes adding properties

(1) When using custom classes adding a property to the default__ or other instances using the "Add property" dialog - fails.

The dialog opens and you can select a new property to add but click "Add property" and an exception is created.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at ME3Explorer.Interpreter.AddProperty(String prop) in C:\Users\Dev\Source\Repos\ME3Explorer\ME3Explorer\Interpreter\Interpreter.cs:line 2643
at ME3Explorer.Interpreter.addPropButton_Click(Object sender, EventArgs e) in C:\Users\Dev\Source\Repos\ME3Explorer\ME3Explorer\Interpreter\Interpreter.cs:line 2635
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

(sample file uploaded to #pathfinders)

(2) When using custom classes - adding certain array properties and structs shows parsing has failed. Changing the class to a similar but in-database version allows the interpreter to function

For example Add StartingPowerRanks struct to Default__SFXPawn_Volus

TLKManager for package editor

Add ability for package editor to use DLC & Mod tlks to display strings, language selector, checkboxes, that kind of stuff. With settings that save too.

Missing minor NAV points

Following NAV classes for henchmen are missing:

SFXNav_InteractionHenchOmniTool
SFXNav_InteractionHenchOmniToolCrouch
SFXNav_InteractionHenchBeckonFront
SFXNav_InteractionHenchBeckonRear
SFXNav_InteractionHenchCustom
SFXNav_InteractionHenchCover
SFXNav_InteractionHenchCrouch
SFXNav_InteractionHenchInteractLow
SFXNav_InteractionHenchManual
SFXNav_InteractionHenchStandIdle
SFXNav_InteractionHenchStandTying
SFXNav_InteractionUseConsole
SFXNav_InteractionStandGuard

Minor enhancement: BioSeqVar_ObjectFindByTag

Similarly to how tags in pathfinder show name_number it would be useful to have BioSeqVar_ObjectFindByTag to show the number associated with the name (or blank if zero)

e.g. Tag: spawn_balcony_7

Can't open ME1/ME2 compressed files

Since we have switched to 64-bit builds, we cannot open compressed ME1/ME2 packages until aquadran completes porting the MEM code. MiniLZO doesn't work on 64-bit and neither does the decompression stuff for ME1.

ME1 PMCheckConditional - ByteProperties missing "GlobalEnum"

Getting an error when looking at sequence 4562 RP102_TheFan in BIOA_STA60_02a_DSG.SFM

System.ArgumentNullException: Value cannot be null.
Parameter name: key
   at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
   at ME1Explorer.Unreal.ME1UnrealObjectInfo.getEnumValues(String enumName, Boolean includeNone) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\ME1\Unreal\ME1UnrealObjectInfo.cs:line 93
   at ME3Explorer.Unreal.UnrealObjectInfo.GetEnumValues(MEGame game, String enumName, Boolean includeNone) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Unreal\ME3UnrealObjectInfo.cs:line 52
   at ME3Explorer.Unreal.EnumProperty..ctor(MemoryStream stream, IMEPackage pcc, NameReference enumType, Nullable`1 name) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Unreal\PropertyCollection.cs:line 910
   at ME3Explorer.Unreal.PropertyCollection.ReadProps(IMEPackage pcc, MemoryStream stream, String typeName) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Unreal\PropertyCollection.cs:line 158
   at ME3Explorer.Unreal.PropertyCollection.ReadArrayProperty(MemoryStream stream, IMEPackage pcc, String enclosingType, NameReference name, Boolean IsInImmutable) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Unreal\PropertyCollection.cs:line 458
   at ME3Explorer.Unreal.PropertyCollection.ReadProps(IMEPackage pcc, MemoryStream stream, String typeName) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Unreal\PropertyCollection.cs:line 172
   at ME3Explorer.Packages.ExportEntry.GetProperties() in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Packages\ExportEntry.cs:line 170
   at ME3Explorer.SequenceEditor.LoadObject(Int32 index) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Sequence Editor\SequenceEditor.cs:line 464
   at ME3Explorer.SequenceEditor.GenerateGraph() in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Sequence Editor\SequenceEditor.cs:line 431
   at ME3Explorer.SequenceEditor.LoadSequence(IExportEntry seqExport, Boolean fromFile) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Sequence Editor\SequenceEditor.cs:line 324
   at ME3Explorer.SequenceEditor.treeView1_AfterSelect(Object sender, TreeViewEventArgs e) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Sequence Editor\SequenceEditor.cs:line 301
   at System.Windows.Forms.TreeView.OnAfterSelect(TreeViewEventArgs e)
   at System.Windows.Forms.TreeView.TvnSelected(NMTREEVIEW* nmtv)
   at System.Windows.Forms.TreeView.WmNotify(Message& m)
   at System.Windows.Forms.TreeView.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Similar errors occur with other sequences. The bug mentions "getEnumValues" one thing I noticed is that PMCheckConditional's & PMCheckState's & PMExecuteTransition's byteproperties "Conditional" "State" "Transition" "Region" "Plot" do not include "GlobalEnum" on their possible values even though that appears to be the default.

If you set all the above to allowed values and remove the BioSeqAct_ModifyPropertyPawn (which has lots of byteproperties too) from the sequence, it loads without issue

ScriptEditorWPF: Show offsets for function metadata

Function data in ME3Explorer has never shown the offsets for the values for things like childindex. These should be shown and possibly highlighted when clicked so users can potentially extrapolate their meaning.

The text will likely need to be converted to a listbox like the tokens and script list so that selecting an item will be able to be subscribed to and the hexbox position updated.

SoundplorerWPF: WEM Replacement not working

When replacing a WEM inside the bank it causes the bank to stop working.

Attached to discord is a sample zip:
SFXWeapon_Pistol_Carnifex.pcc
SFXWeapon_Pistol_Carnifex_ORIGINAL.pcc (unmodded)
Wwise_Weapons_S_Carnifex_0x11850B92.wav Extracted "folding" sound from the same file (1st WEM in Wwise_Weapons_S_Carnifex)

Replace the WEM 0 (0x004C8849) in Wwise_Weapons_P_Carnifex bank with the extracted sound.

Try in game - there is no weapon firing sound.

NOTES:
Possible cause maybe incorrect offsets. Note In the original file wwise the next RIFF starts at WEM 0 (length) + 4bytes
These extra 4 bytes are the ID that precedes every WEM in the DATA/DIDX

Notes on DISCORD

BinaryInterpreterWPF Generic Scan: Add byte shifting

In many other modding tools that contain binary data (like GBA bitmaps) the data is often not byte aligned to the beginning. It will be beneficial to add byte alignment options from the binary start offset when doing generic scans so users can see possible patterns.

Suggestion: Reordering imports of trees

When drag and dropping trees, occasionally the import will fail if an import reference cannot be set (because it is an import with a parent that is an export package). This is not a big deal, but it can stop the rest of the tree resolving internal links between parts of the imported tree (particularly particle systems).

The easiest fix would be to prioritise setting the classes then resolving internal tree links before working with links external to the tree.

(A) Classes get set.
(B) The code resolves the internal tree export links
(C) It attempts to resolve external object links
That way if it fails then the tree gets setup anyway.

Move Metadata editor to ExportLoaderControl (with support for Import loading)

All tabs in PackageEditorWPF are currently ExportLoaderControls. They can only handle exports. Metadata tab is different as it can load both imports and exports for editing.

To simplify the code for PackageEditorWPF, we should move Metadata editor to it's own loader control. We would make a EntryLoaderControl parent which ImportLoaderControl and ExportLoaderControl would inherit from. I know ImportLoaderControl would not see much use since you can really only edit metadata, but it would help simplify the tool and standardize how the tabs are handled.

v3.1.14 WPF64: Various Issues and WIP ToDo functionality

A list of items that either are not working, yet to be implemented etc.

PackageEdWPF
Tree

Binary

  • Binary for Persistent Level cannot remove from list only add/replace

BUGS

Interpreter Tab

  • Unfortunately many structs do not work (and don't work in PackEdOld either):
    TO DO STRUCTS LIST:
  • m_aBioPreLoadData (InterpData)

ME2->ME3 Drag and drop header changes

The size of the unreal header changed between ME2 and ME3. When dragging and dropping 4 bytes between 0x28 and 0x2B should be removed. This applies to both master packages (which have GUIDs and bigger headers) and all objects.

Bugs: Various small bugs in 3.1.2

I am on a different PC than usual, but there appears to be a number of minor bugs with things that were working before:

(1) Adding a combat zone to a coverslot via right click in PathEd throws an exception (see below).
(2) PathEd, SeqEd and PackageEd all experience cases where they don't refresh properly. Save and reload shows the action (for example a new link in SeqEd) was done, but it doesn't update prior to that.
(3) I had an issue with ME3Exp thinking several files that I was working on were corrupt. I managed to open them later. This maybe my PC rather than ME3Exp though.
(4) Add property to a targetpoint throws an exception (below)

Obvs until you get VB problems sorted, not much you can do, but wanted to post before I forget.

Notes:
Exception for add combatzone:
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at ME3Explorer.PathfindingEditor.addCombatZoneRef(IExportEntry nodeExp, IExportEntry combatZoneExp) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Pathfinding Editor\PathfindingEditor.cs:line 1267
at ME3Explorer.PathfindingEditor.<>c__DisplayClass65_1.<node_MouseDown>b__0(Object o, EventArgs args) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Pathfinding Editor\PathfindingEditor.cs:line 1185
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Exception for add property to targetpoint:
************* Exception Text **************
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 System.Collections.Generic.List1.get_Item(Int32 index) at ME3Explorer.SharedUI.AddPropertyDialogWPF.GetProperty(IExportEntry export, List1 _extantProps, MEGame game) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\SharedUI\AddPropertyDialogWPF.xaml.cs:line 59
at ME3Explorer.Interpreter.addPropButton_Click(Object sender, EventArgs e) in C:\Users\Mgamerz\Source\Repos\ME3Explorer\ME3Explorer\Interpreter\Interpreter.cs:line 2655
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Bug: Interpreter/PathEd/SeqEd not refreshing

This is an intermittent bug - I am trying to pin down exactly what causes it, when I do I will update here.

Suddenly, without any particular action I can determine - the interpreter boxes of PackageEd/SeqEd/PathEd stop updating.

If you change a value, it will update but that won't be reflected in the values seen on the screen. If you click out and back into the object it refreshes to the proper value. This seems to happen across all the main parts of the toolkit.

Bug when importing a mesh

Sorry for posting again, I'm only reporting bugs and errors that I see in 3.1.2.13 and not in 3.1.2.12.

I think this might be a problem with this particular mesh, and not related to my PC specs this time.

This is the binary of the Mesh from the origin package. The mesh is HMM_ARM_CTHb_MDL (export 7503).

mesh import error

However, after importing this to another package, in my case BioD_End001_460_RoofInterior (I have tested it by importing to other packages too, and the same thing happens), this happens to the binary:

mesh import error 2

The single binary slot for the material gets replaced by 7 slots which are intended for SkeletalMeshSockets. This obviously breaks the mesh.

error 3

As before, this does not occur with 3.1.2.12, only with .13.

Oddly enough, this happens only with this specific mesh.

If this is due to my PC specs again, I apologize. I do not know what changes were made (outside of Meshplorer) that demand more PC power.

Origin Package with the mesh:

BioD_Nor_001Global.zip

I have also tried to import this mesh from other Normandy packages. Same result.

Core.pcc wrong package file name

For some reason where copying or duplicating import packages the package file / class is set to core.pcc rather than core.

For example
Core . Package
is named
Core.pcc . Package

And if you duplicate again it becomes:
Core.pcc.pcc . Package

Analyze ShaderCache

ShaderCaches have long been an annoying export type for all 3 ME games (especially ME3). It seems they have some sort of pointer references that will bust if we recompact the file.

They contain embedded compiled Direct3D shader model 3 files, along with headers that seem to in a list of length 0xB as well as what appears to be a footer. We're a long ways out from understanding these, but assuming we can bust the file up into chunks we may be able to perform the following:

  • Fix ME1 black blobs due to missing 3DNow! instruction set on ME1. I am pretty sure the shadercache contains instructions for this on the CPU, however it is embedded in a huge 70MB shadercache
  • More easily modify ME3 DLC files

Each game was compiled using a specific version of the Direct3D shader compiler - this version can be detected by looking at the header of the compiled HLSL files in the shader cache.

Timeline control

SFXTimeline objects contain a bunch of information about things that occur at specified times. This includes things like enemy attacks and other fun stuff. Making a control to edit these as a Package Editor tab would be useful.

Virtualized combobox - long items may cause user input when scrolling to reset position

Virtualized comboboxes don't know the width of their children until they are rendered on screen. This means when using the scrollbar and you hit a very wide item it may widen the box outside of the default windows scrollbar dragability range, which means it will reset the position. A way around this quirk will need to be implemented, maybe through a scrollbar (ugh), precalculating the width, or shortening the string through some other method.

This might be able to be solved by changing the recycling mode so that it only generates new stuff rather than re-using. However this will consume more memory and may impact performance on huge scrolled lists.

Bio2DA Editor: Make ME1 TLK able to be read

Some of the tables are TLK IDs. It would be helpful to read TLK data to make it work, however it may be difficult since tables don't store information about what kind of data they hold in cells.

ME1, ME2: Support adding structs to empty arrays

ME1ObjectInfo and ME2ObjectInfo do not have as much information as ME3ObjectInfo. As such we can't add structs to empty arrays in ME1 and ME2.

Given we can now parse ScriptStruct's for default properties we should look into a way to build the DB or find a way to dynamically look it up.

Meshexplorer confirmation dialog

When certain actions happen in Meshplorer a dialog pops up to confirm the action is complete. It locks the UI. However maybe because of lags in mesh changes if the user presses the window again (e.g. accidentally double clicks save) the pop-up comes up behind the main window and freezes the entire UI (across all the programs windows). It cannot be accessed and requires a taskmanager restart.

The actions include:
save
Import mesh
change material

Suggest: force the dialog always on top.

Feature update/bug: Wwise editor does not update bank/hex size when hex editing

If you clone an object in Wwisebank then the wwiseeditor updates various counts and lengths:
(1) Bank (pre BNK) length x2
(2) HIRC header (post HIRC) length, count

However if you hex edit the length of an individual object (for example copy hex from Bank A and overwrite a new cloned object in Bank B) the lengths are not updated resulting in a crash.

Binary editor new Class: Class

Template:

0x0 Unreal header (sequential to other headers in the class content)
0x4 Superclass
0x8 blank
0xC Object link for start of unrealscript tree
0x10 Unreal code unknown (mainly used by pawns/ai)
0x2C Local Function Table
{Count [int]
[Name, Object reference]}
Following function table:
4 byte code unknown
Core.Object
Component table [this is primarily used by actors and other complex code]
{Name (e.g. weapon, game etc} or None if empty
Count [int]
[Name, Object reference]}
Following Component table:
None
Blank int
Default__Class object
Linked functions
{Count [int], List of links Obj}

Switch to 64-bit builds

ME3Explorer currently is a 32-bit only application. As such, it is limited to 3GB of memory, which limits what it can do in certain scenarios like reading large files into RAM for fast operations (such as quickly unpacking DLC).

It is not possible to switch over to 64-bit right now due to dependencies on Microsoft.DirectX libraries that do not work on 64-bit. Level Explorer is the main use of these libraries, and is scheduled to be axed when Benji submits his version of Level Explorer. Due to the coupling of Level Explorer to other files however it is not feasible for this current fork to pull out the references to it.

Moving to 64-bit builds offers many benefits:

  • We can use MEM's decompression algorithms for packages and SFARs. SFAR unpacking in particular is hundreds of times faster than the current one in ME3Explorer
  • We can read into memory large files like AFC for faster access.
  • Program stability will improve as the toolset will not be limited by memory.
  • Program speed may slightly increase due to the use of 64-bit instructions in the CLR.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.