Mass Effect Andromeda

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
FeLLiPe
Posts: 7
Joined: Thu May 04, 2017 10:44 am

Re: Mass Effect Andromeda

Post by FeLLiPe »

warrantyvoider wrote:can you try to simply import the original exported dds back in? without editing the data? I wanna see if its an import problem or a format problem


Yeah that's exactly what I did a moment ago and with the same result, the moment I went to loadout screen and selected N7 helmet, nothing loaded.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

I have no idea, are you sure you used the ORIGINAL data? aka repaired your game before that? Im trying to find the texture for the stupid male helmet, but its nowhere to see, so frustrating, dunno how I should test this. can you restore your game and maybe retry the export/import test?
FeLLiPe
Posts: 7
Joined: Thu May 04, 2017 10:44 am

Re: Mass Effect Andromeda

Post by FeLLiPe »

I've used the Recovery tool before testing the original dds. And I figured the N7 helmet is same for both male and female so that's why they use the same textures.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

I dont have the N7 helmet, I had no time to play this game, I spend like 5 minutes combined ingame, (not counting loading screen time)
FeLLiPe
Posts: 7
Joined: Thu May 04, 2017 10:44 am

Re: Mass Effect Andromeda

Post by FeLLiPe »

Just to be eeextra sure, a few moments ago I used the recovery tool again and exported tier 1 Andromeda Initiative chest armor diffuse texture and then imported it back, same issue again. The moment I looked at that armor in development menu, it failed to load the armor model and model of everything else.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

you have pm since a few posts already

PS: I give up, I dont find shit from ingame, and any import worked sofar, dunno, out of ideas
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

ok, I added 6 more texture formats, here a list of examples to test them.

Then I added "Expand All" buttons to all treeviews in main tool and texture plugin, also you can open a single texture now from context menu in main tool, the preview is therfor gone in the maintool as this replaces it

Image

now on github

greetz WV
Trip
Posts: 7
Joined: Thu Apr 06, 2017 12:50 pm

Re: Mass Effect Andromeda

Post by Trip »

Thanks WV for your work!

So I'm looking for voice over audio

For example
Load TOC in VFS
win32/game/levels/loyalty/loy_hmm/loy_hmm

Then in VFS
Game/Conversations/Global/GenericLDBarks/global_genericLD_barks.vo.en
states data is in Chunk with ID

Using search plugin find that chunk in
Data\Win32\loc\en.toc

so load the chunks from that into VFS. Find the chunk and see the data. No magic word giving me the format so a bit stuck to know what the format is. The chunks all have a very similar header.
Does anyone have a suggestion or idea?

Image
Hairless_Wookiee
Posts: 12
Joined: Thu Sep 24, 2015 9:03 pm

Re: Mass Effect Andromeda

Post by Hairless_Wookiee »

Seems unlikely it would work out of the box, but you could always try WV's chunk splitter for DAI - http://daitools.freeforums.org/post816.html#p816
Trip
Posts: 7
Joined: Thu Apr 06, 2017 12:50 pm

Re: Mass Effect Andromeda

Post by Trip »

Hairless_Wookiee wrote:Seems unlikely it would work out of the box, but you could always try WV's chunk splitter for DAI - http://daitools.freeforums.org/post816.html#p816


wow

thanks!

that works with no changes

ran it against one extracted chunk and it outputted 143 mp3s that had the lines of both male and female player voice among other things. woo, suppose it time to start writing a plugin
axellslade
Posts: 11
Joined: Tue Jan 10, 2017 10:58 pm

Re: Mass Effect Andromeda

Post by axellslade »

Hey VW, question:
Would it be possible to make the game path you set permanent or use an ini file or something like that, where we can put the path to the .exe so the tool reads it? Not at all a critical thing, but would facilitate using the tool a bit.

Edit: Also, setting up a "mods" folder the same way. With so many mods out on the Nexus, it makes modding life a lil' bit easier.

Edit2: Making the Mod Manager a standalone tool? Dunno. I'm thinking about the people who are not computer savy enough who want to apply mods.
Snowpiercer
Posts: 22
Joined: Thu Aug 13, 2015 5:08 pm

Re: Mass Effect Andromeda

Post by Snowpiercer »

How do I find the chunk ID for things like meshes? I've had success extracting audio but mesh .ebx are missing the <Chunks> section.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

axellslade wrote:Hey VW, question:
Would it be possible to make the game path you set permanent or use an ini file or something like that, where we can put the path to the .exe so the tool reads it? Not at all a critical thing, but would facilitate using the tool a bit.

Edit: Also, setting up a "mods" folder the same way. With so many mods out on the Nexus, it makes modding life a lil' bit easier.

Edit2: Making the Mod Manager a standalone tool? Dunno. I'm thinking about the people who are not computer savy enough who want to apply mods.


Someone should sign me up for the "make a wish" foundation... first off, I wont make it a standalone tool, it just automates the maintool and the plugins, so this is already a standalone tool, just build-in, I cant take it out without ending up with the same tool

anyway, now the maintool creates a settings file each time you load a FS and saves it. so on next start it will automatically load from the last position.

changes in modmaker:

ImageImage

- well, you have check boxes now
- you can load an entire folder (and all its subfolders) full of meamod files (but you could aswell save them all in one meamod file)
- you can run all or only the checked mods
- delete checked mods
- select all, none, or invert selection

now on github

greetz WV
axellslade
Posts: 11
Joined: Tue Jan 10, 2017 10:58 pm

Re: Mass Effect Andromeda

Post by axellslade »

warrantyvoider wrote:now on github

greetz WV


Thank you for taking your time and implementing those changes, really appreciate it!
About the Mod Manager being dependant on the main tool, no problem then, I was way too pedantic on the requests actually. :oops:
hqqttjiang
Posts: 8
Joined: Sun May 07, 2017 10:47 am

Re: Mass Effect Andromeda

Post by hqqttjiang »

is there a way to play as other NPC like play as their fater?
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

I assume meshes are very wanted too, so I started making a mesh plugin, but then again, its mostly unknowns, and there is alot research left, so in the hopes that some coders out there wanna help making a good one, I release what I got sofar here. Its mostly the code from DAI, just edited a bit to load properly, still it doesnt work out of the box. I want to rewrite the mesh class entirely from scratch, but I want to use the old one to find its internal format out, first

this is experimental!

it doesnt even has 3d preview, but thats easy to do once the data is known. dunno any input here is very welcome, also why I make all the plugins open source

Image

greetz WV

PS: links for reference:
https://github.com/GreyDynamics/Frostbite3_Editor/blob/develop/src/tk/greydynamics/Resource/Frostbite3/MESH/MeshChunkLoader.java
https://github.com/zeroKilo/DAIToolsWV/blob/master/DAILibWV/Frostbite/Mesh.cs
http://daitools.freeforums.org/bf4-frostbite-3dsmax-import-scripts-t22.html
OClear
Posts: 45
Joined: Tue Feb 16, 2016 6:36 pm

Re: Mass Effect Andromeda

Post by OClear »

Newbie question. If I just drag and drop PluginMeshesWV.dll into the plugins folder, how do I know it's loaded and working (if not by visual inspection of gui) ? Can the log file dump all the plugins that are currently loaded or failed to load?
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

OClear wrote:Newbie question. If I just drag and drop PluginMeshesWV.dll into the plugins folder, how do I know it's loaded and working (if not by visual inspection of gui) ? Can the log file dump all the plugins that are currently loaded or failed to load?


dunno if this plugin is anything for you then. yes, you just drop it in, maybe right click it to goto properties and unlock it (win10), and then it should show up in main menu

greetz
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

new infos about the mesh structure, from what I got from ida:

I attached an example mesh and what I currently know about the structure of it:

Code: Select all

//Start @0x0
DC 11 56 BF 4A CB 01 BC D8 32 39 BE 00 00 00 00 //min bbox
DA 11 56 3F C6 0A D7 3F 3D 65 27 3E 00 00 00 00 //max bbox
90 00 00 00 00 00 00 00          //offsetLod0
40 01 00 00 00 00 00 00          //offsetLod1
F0 01 00 00 00 00 00 00          //offsetLod2
A0 02 00 00 00 00 00 00          //offsetLod3
50 03 00 00 00 00 00 00          //offsetLod4
00 00 00 00 00 00 00 00          //unused offset
00 00 00 00 00 00 00 00          //unused offset
5A 0D 00 00 00 00 00 00          //MeshPath String Offset
8F 0D 00 00 00 00 00 00          //MeshName String Offset
F2 07 92 81                //Name Hash
01 00 00 00                //Mesh Type
01 FE 1E 80                //Flags
1F 00 00 00                //unknown
05 00                  //Lod Count
05 00                   //Section Count
FB 00 08 00                 //Flags
D0 13 00 00 00 00 00 00          //unknown
E0 13 00 00 00 00 00 00          //unknown

//Lod0 @0x90
01 00 00 00               //MeshType
FF FF 00 00                //unknown
01 00 00 00                //Section Count
00 04 00 00 00 00 00 00            //Section Offset
01 00 00 00                //unknown
B0 0D 00 00 00 00 00 00  00 00 00 00       //unknown
B1 0D 00 00 00 00 00 00  00 00 00 00       //unknown
B1 0D 00 00 00 00 00 00  01 00 00 00       //unknown
B1 0D 00 00 00 00 00 00  01 00 00 00       //unknown
B2 0D 00 00 00 00 00 00          //unknown
40 00 00 00                //unknown
21 00 00 00                //Vertex Count ?
94 BD 02 00                //unknown
B0 EB 0D 00                //unknown
73 29 58 1F 06 EB C5 6F E8 69 AF 8F E6 E2 4A 99 //LOD chunk id
FF FF FF FF                //unknown
35 0B 00 00 00 00 00 00          //shaderDebugName
3A 0B 00 00 00 00 00 00          //name
6F 0B 00 00 00 00 00 00          //shortName
3A 58 CA D9               //Name Hash
00 00 00 00 00 00 00 00            //unknown
4D 00 00 00                //Index Count ?
C0 0D 00 00 00 00 00 00            //Index Buffer Offset ?
00 00 00 00                //unknown
00 00 00 00                //unknown
00 00 00 00                //unknown

//Section 0 @0X400
00 00 00 00 00 00 00 00          //unknown
20 0B 00 00 00 00 00 00            //material name
00 00 00 00                //unknown
00 00 00 00                //unknown
EE 74 00 00 00 00 00 00          //unknown
00 00 00 00                //unknown
A3 3F 00 00                //unknown
38 03 06 4D                //unknown
10 08 00 00                //unknown
00 00 00 00                //unknown offset
01 03 00 00                //unknown offset
08 08 0C 00                //unknown offset
02 0C 14 00                //unknown offset
03 0C 18 00                //unknown offset
04 0D 1C 00                //unknown offset
05 0D 20 00                //unknown offset
06 08 24 00                //unknown offset
07 08 2C 00                //unknown offset
21 06 34 00                //unknown offset
00 00 FF 00                //unknown
00 00 FF 00                //unknown
00 00 FF 00                 //unknown
00 00 FF 00                 //unknown
00 00 FF 00                 //unknown
00 00 FF 00                 //unknown
00 00 FF 00                 //unknown
38 00 00 00 00 00 00 00           //unknown
00 00 00 00 00 00 00 00           //unknown
09 01 00 00                 //unknown
9C A3 3F 3F                 //some float?
00 00 80 3F                 //some float?
00 00 80 3F                 //some float?
00 00 80 3F                 //some float?
00 00 80 3F                 //some float?
00 00 80 3F                 //some float?
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                 //unknown
00 00 00 00                //unknown

//Lod2 @0x140
01 00 00 00
FF FF 00 00
01 00 00 00
D0 04 00 00 00 00 00 00
01 00 00 00
B3 0D 00 00 00 00 00 00 00 00 00 00
B4 0D 00 00 00 00 00 00 00 00 00 00
B4 0D 00 00 00 00 00 00 01 00 00 00
B4 0D 00 00 00 00 00 00 01 00 00 00
B5 0D 00 00 00 00 00 00
40 00 00 00
21 00 00 00
90 BC 01 00
30 03 09 00
C2 9D DF D2 37 96 E1 6F 59 1F A3 4B 9D CA 92 79
FF FF FF FF
A7 0B 00 00 00 00 00 00
AC 0B 00 00 00 00 00 00
E1 0B 00 00 00 00 00 00
3B 58 CA D9
00 00 00 00 00 00 00 00
4D 00 00 00
F4 0E 00 00 00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00

...


and what ida says towards it (outdated, as its bf3)

Code: Select all

enum fb::PrimitiveType (standard)
   PrimitiveType_PointList  = 0
   PrimitiveType_LineList  = 1
   PrimitiveType_LineStrip  = 2
   PrimitiveType_TriangleList  = 3
   PrimitiveType_TriangleStrip  = 5
   PrimitiveType_QuadList  = 7
   PrimitiveType_XenonRectList  = 8

enum fb::MeshType (standard)
   MeshType_Rigid   = 0
   MeshType_Skinned  = 1
   MeshType_Composite  = 2

//header
00000000 fb::MeshSetLayout struc ; (sizeof=0x70, align=0x10)
00000000 meshType        fb::SmallEnum<enum fb::MeshType,unsigned int> ?
00000004 flags           dd ?
00000008 lodCount        dd ?
0000000C totalSubsetCount dd ?
00000010 boundingBox     fb::AxisAlignedBox ?
00000030 lods            fb::RelocPtr<fb::Mesh> 5 dup(?)
00000058 name            fb::RelocPtr<char const > ?
00000060 shortName       fb::RelocPtr<char const > ?
00000068 nameHash        dd ?
0000006C                 db ? ; undefined
0000006D                 db ? ; undefined
0000006E                 db ? ; undefined
0000006F                 db ? ; undefined
00000070 fb::MeshSetLayout ends

//LOD
00000000 fb::MeshLayout  struc ; (sizeof=0xB0, align=0x4)
00000000 m_type          fb::SmallEnum<enum fb::MeshType,unsigned int> ?
00000004 m_subsetCount   dd ?
00000008 m_subsets       fb::RelocPtr<fb::MeshSubset> ?
00000010 m_categorySubsetIndices fb::RelocArray<unsigned char> 4 dup(?)
00000040 m_flags         dd ?
00000044 m_indexBufferFormat fb::SmallEnum<enum fb::IndexBufferFormat,unsigned int> ?
00000048 m_indexDataSize dd ?
0000004C m_vertexDataSize dd ?
00000050 m_edgePartitionBufferSize dd ?
00000054 m_dataChunkId   fb::Guid ?
00000064 m_auxVertexIndexDataOffset dd ?
00000068 m_embeddedEdgeData fb::RelocPtr<unsigned char> ?
00000070 m_shaderDebugName fb::RelocPtr<char const > ?
00000078 m_name          fb::RelocPtr<char const > ?
00000080 m_shortName     fb::RelocPtr<char const > ?
00000088 m_nameHash      dd ?
0000008C m_data          fb::RelocPtr<fb::MeshData> ?
00000094 ___u17          $59EC9C292D27C1C2CABAE2FE0E580781 ?
00000098 ___u18          $8537C5BD73CC781BDD27D0E38C757383 ?
000000A0 ___u19          $6EBF6BDA98DDA9CF947E3336E37AC4EC ?
000000A8 m_subsetPartIndices fb::RelocPtr<fb::RelocNonPod<eastl::bitset<192> > > ?
000000B0 fb::MeshLayout  ends

//Section
00000000 fb::MeshSubset  struc ; (sizeof=0x94, align=0x4)
00000000 geometryDeclarations fb::RelocPtr<fb::MeshSubsetGeometryDecls> ?
00000008 materialName    fb::RelocPtr<char const > ?
00000010 materialIndex   dd ?
00000014 primitiveCount  dd ?
00000018 startIndex      dd ?
0000001C vertexOffset    dd ?
00000020 vertexCount     dd ?
00000024 vertexStride    db ?
00000025 primitiveType   fb::SmallEnum<enum fb::PrimitiveType,unsigned char> ?
00000026 bonesPerVertex  db ?
00000027 boneCount       db ?
00000028 boneIndices     fb::RelocPtr<unsigned short> ?
00000030 geometryDeclarationDesc fb::GeometryDeclarationDesc ?
0000007C texCoordRatios  dd 6 dup(?)
00000094 fb::MeshSubset  ends


so anyone who can help eliminating the "unknown", please let me know

greetz WV
OClear
Posts: 45
Joined: Tue Feb 16, 2016 6:36 pm

Re: Mass Effect Andromeda

Post by OClear »

If you're creating a mesh export plugin, then I have one request. Could you make it so the highest detail LOD (LOD 0) is always exported? Because in the your example file above, that isn't the LOD zero chunk. And I used some of the DAI tools too, and noticed it never exported the highest detail LOD. It usually picked the lowest detail LOD (3 or 4). Thanks.