Mass Effect Andromeda

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
y3804
Posts: 17
Joined: Sat Apr 15, 2017 6:02 pm

Re: Mass Effect Andromeda

Post by y3804 »

Mordek wrote:y3804 and warrantyvoider thank you for your hard work. I've been playing around with your tools since the beginning trying to understand how they work. I've got a few questions to y3804 - how did you know that weapon with 525 ROF had index 0? Also where can I change weapon damage or magazine capacity?

Thank you again :] I can't express how awesome job you do here.


I am converting the gunstats.ebx to an excel sheet to save yourself a headache. will upload and do a tutorial on how to EASILY edit any gun stat
y3804
Posts: 17
Joined: Sat Apr 15, 2017 6:02 pm

Re: Mass Effect Andromeda

Post by y3804 »

Converted game/exceldataimports/gunstats.ebx to excel sheet

https://docs.google.com/spreadsheets/d/ ... sp=sharing

and game/exceldataimports/gunstatsmp.ebx

https://docs.google.com/spreadsheets/d/ ... sp=sharing

And here's a tutorial on how to USE:

https://youtu.be/flBcWBtUJ4I

(Keep in mind, gunstats.ebx for SP, gunstatsmp.ebx for MP, be careful modding multiplayer files!)

edit: just tested modding gunstatsmp.ebx and you cannot edit multiplayer this way, the other way is to change the Weapon Index in the right gun file itself (so it points on the values of another gun)
femshepping
Posts: 1
Joined: Wed Apr 19, 2017 1:03 am

Re: Mass Effect Andromeda

Post by femshepping »

Thank you so much for the tools!
I have exported a bunch of res files - which I'm assuming are the textures (?). How do I convert them so that I can edit them in photoshop? Sorry for the noob question - I know I'm probably missing a whole bunch of steps!
Devisaur
Posts: 15
Joined: Thu Mar 30, 2017 11:18 pm

Re: Mass Effect Andromeda

Post by Devisaur »

Hi everyone,

I've been doing some digging and I've hit a snag -- perhaps someone might know where to look next. Basically I'm trying to get into the text of the codexes. Which I've already located within Win32/game/levels/mainmenu.

The issue is the EBX gives me reference to the TextEntryHashes which based on what I'm looking at should be where the text is, is there a file where this information would be stored? Or is their a way to access this hash. I've attached the .ebx code as reference.

Code: Select all

<EbxFile Guid="ABCAD759-C236-11E6-874789498698DB49">
  <MECCodexAsset Guid="96A4B931-939E-2E07-F8C88CC5241C7032">
    <MECCodexAsset>
      <CodexAsset>
        <TreeBase>
          <Asset>
            <DataContainer>
            </DataContainer>
            <Name>
              Game/Codex/AndromedaSpecies/Angara/Angara_Akksul_Codex
            </Name>
          </Asset>
        </TreeBase>
        <ChildNodes>
          <member>
            0x00000002
          </member>
        </ChildNodes>
      </CodexAsset>
    </MECCodexAsset>
  </MECCodexAsset>
  <MECCodexEntry Guid="F31CB9BE-F98B-429B-BF4CF545631C4D7A">
    <MECCodexEntry>
      <CodexEntry>
        <JournalEntryBase>
          <TreeNodeBase>
            <DataContainer>
            </DataContainer>
          </TreeNodeBase>
          <DisplayConditions>
            <member>
              <PlotConditionReference>
                <ConditionSchematic>
                  0x00000000
                </ConditionSchematic>
                <ConditionExpression>
                  0x00000000
                </ConditionExpression>
                <ConditionType>
                  PlotConditionType_DefaultCheckBoolean
                </ConditionType>
                <PlotFlagReference>
                  <PlotFlagReference>
                    <PlotFlagId>
                      <PlotFlagId>
                        <Guid>
                          F957D5C25FE3814FB887CE12E2BC0194
                        </Guid>
                      </PlotFlagId>
                    </PlotFlagId>
                  </PlotFlagReference>
                </PlotFlagReference>
                <DesiredValue>
                  0x01
                </DesiredValue>
              </PlotConditionReference>
            </member>
          </DisplayConditions>
          <HideConditions>
          </HideConditions>
          <Category>
            0x80000000
          </Category>
          <TitleReference>
            <LocalizedStringReference>
              <StringId>
                0x0003496F
              </StringId>
            </LocalizedStringReference>
          </TitleReference>
          <TextEntryHashes>
            <member>
              0xFF7B7F91
            </member>
            <member>
              0xCEE58D5C
            </member>
            <member>
              0x160EF10F
            </member>
          </TextEntryHashes>
          <Texture>
            0x80000001
          </Texture>
        </JournalEntryBase>
        <EntryType>
          CodexEntryType_Codex
        </EntryType>
        <AssociatedJournal>
          0x00000000
        </AssociatedJournal>
        <ShowPopupOnChange>
          0x00
        </ShowPopupOnChange>
      </CodexEntry>
      <DiscoveryRewards>
      </DiscoveryRewards>
      <AvailableInUI>
        0x00
      </AvailableInUI>
    </MECCodexEntry>
  </MECCodexEntry>
y3804
Posts: 17
Joined: Sat Apr 15, 2017 6:02 pm

Re: Mass Effect Andromeda

Post by y3804 »

Devisaur wrote:Hi everyone,

I've been doing some digging and I've hit a snag -- perhaps someone might know where to look next. Basically I'm trying to get into the text of the codexes. Which I've already located within Win32/game/levels/mainmenu.

The issue is the EBX gives me reference to the TextEntryHashes which based on what I'm looking at should be where the text is, is there a file where this information would be stored? Or is their a way to access this hash. I've attached the .ebx code as reference.


Yes, string ID refers to an entry in the talktable files
Devisaur
Posts: 15
Joined: Thu Mar 30, 2017 11:18 pm

Re: Mass Effect Andromeda

Post by Devisaur »

y3804 wrote:
Devisaur wrote:Hi everyone,

I've been doing some digging and I've hit a snag -- perhaps someone might know where to look next. Basically I'm trying to get into the text of the codexes. Which I've already located within Win32/game/levels/mainmenu.

The issue is the EBX gives me reference to the TextEntryHashes which based on what I'm looking at should be where the text is, is there a file where this information would be stored? Or is their a way to access this hash. I've attached the .ebx code as reference.


Yes, string ID refers to an entry in the talktable files


Hmm, I figured as much -- I've pulled all of the text from the talktable files and unless there are a bunch I'm missing I'm not finding that text. Just to confirm we're talking about the same files the ones I'm talking about are Win32/loctext/en.toc

EDIT#

I am finding the string ID -- it appears that this is the title -- now would (see below) be the sub text?

Code: Select all

  <TextEntryHashes>
            <member>
              0xFF7B7F91
            </member>
            <member>
              0xCEE58D5C
            </member>
            <member>
              0x160EF10F
            </member>
          </TextEntryHashes>


Edit 2:

I can actually look at the file and it appears that all the text is above this title entry -- but I'm still curious as to if one of these tags should be indicating where all the text is.

It would make it easier to parse if that was so -- for reference I've included the entry I'm looking at.

Code: Select all

0003496C Word of your stand-off with Akksul and his death has spread across Heleus. The Roekaar are using the event as a rallying cry for their cause.
0003496D By shooting Jaal, Akksul disgraced himself in front of his followers. While the Roekaar have not completely disbanded, Akksul has retreated into the shadows.
0003496E Akksul is a former student of the Moshae, who was captured by the kett ...
0003496F Akksul



Edit 3:

I've figured it out -- for any of those interested.

String ID -- will help you located the location of the text in the Texttable
TextEntryHash -- these are reference IDs in the hash -- yet all the text is in the texttable. The number of times these tags will correlate to how many lines above.

With my example above you can see the initial String ID 0003496F, then it has 3 tags for TextEntryHash and thus three lines above. I've reproduced this occurrence with at least 4 other codexes so while I can't claim this is an absolute rule but it seems to be.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

Nice find! So you get the line with the string id and then add for each textentryhash member one of lines before that? In which order? Can you give an example of what the result would look like? Thx^^
Greetz

Ps: i guess the member values are some hash over the text in the line
Devisaur
Posts: 15
Joined: Thu Mar 30, 2017 11:18 pm

Re: Mass Effect Andromeda

Post by Devisaur »

warrantyvoider wrote:Nice find! So you get the line with the string id and then add for each textentryhash member one of lines before that? In which order? Can you give an example of what the result would look like? Thx^^
Greetz

Ps: i guess the member values are some hash over the text in the line



Sure -- I ran into a slight issue it appears it's either BEFORE or AFTER the line with the string ID which creates an problem of deciding do you pull the lines before or after and how do you know?

I'm looking into it now and as soon as I figure out an accurate solution I'll let you know.

Edit1:
And some are out of order... so far I haven't seen anything that indicates that the hex <Member> will give indication -- besides the number of lines..unless we can figure out a way to reverse the hash. I'll see if I can come up with something.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

lol, random find, ME:Andromeda SDK

greetz
Devisaur
Posts: 15
Joined: Thu Mar 30, 2017 11:18 pm

Re: Mass Effect Andromeda

Post by Devisaur »

Devisaur wrote:
warrantyvoider wrote:Nice find! So you get the line with the string id and then add for each textentryhash member one of lines before that? In which order? Can you give an example of what the result would look like? Thx^^
Greetz

Ps: i guess the member values are some hash over the text in the line



Sure -- I ran into a slight issue it appears it's either BEFORE or AFTER the line with the string ID which creates an problem of deciding do you pull the lines before or after and how do you know?

I'm looking into it now and as soon as I figure out an accurate solution I'll let you know.

Edit1:
And some are out of order... so far I haven't seen anything that indicates that the hex <Member> will give indication -- besides the number of lines..unless we can figure out a way to reverse the hash. I'll see if I can come up with something.


I haven't really found anything that indicates an efficient way to fix this issue -- I'm going to be doing data parsing with assumptions and some NLP practices to pull the information. Some of it will end up manual but overall it'll work.

Edit2:

Though I'd kill for any easy way to export the text generated by the EBX text viewer.
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

Devisaur wrote:Though I'd kill for any easy way to export the text generated by the EBX text viewer.


thats what the plugin interface is for... get ebxstream from daitoolswv and run over all ebx in all bundles in all tocs, example code is in the demo plugins
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

cool, type 2 patching implemented^^ one left and patching is complete :D
Image
Image

btw, here the general idea of how the types work (one obviously missing):

Code: Select all

0 = copy and decompress X chunk blocks from base
1 = missing
2 = copy up to offset X bytes from decompressed base, skip Y bytes in decompressed base, add Z new bytes from delta
3 = copy and decompress X chunk blocks from delta
4 = skip X chunk blocks in base


greetz
Vectorman1138
Posts: 1
Joined: Thu Apr 20, 2017 8:27 am

Re: Mass Effect Andromeda

Post by Vectorman1138 »

Ok need some help here please, I have edited one of the game meshes that somebody else ripped from the game with ninjaripper. It's a .obj file, what would I need to do to import this new edited mesh into the game with MEA Explorer? Is this possible? Thanks in advance!
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

Vectorman1138 wrote:Ok need some help here please, I have edited one of the game meshes that somebody else ripped from the game with ninjaripper. It's a .obj file, what would I need to do to import this new edited mesh into the game with MEA Explorer? Is this possible? Thanks in advance!


nope, because the internal format is definitly NOT obj format, so unless you have a tool to recompile it as mesh asset, you cant. if you had one, you could use my tool to import the result tho...


Update: added a search function to main view and structure view. the patch analyzer is already included, but not done yet, so use with caution. also the sha1 plugin can now not only find data by sha1 but also replace it by sha1.

Image

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

Re: Mass Effect Andromeda

Post by warrantyvoider »

last patching type done, going to integrate this now into the rest^^
Image

Code: Select all

0 = copy and decompress X chunk blocks from base
1 = copy up to offset X bytes from decompressed base, skip Y bytes in decompressed base, copy chunk block from delta
2 = copy up to offset X bytes from decompressed base, skip Y bytes in decompressed base, add Z new bytes from delta
3 = copy and decompress X chunk blocks from delta
4 = skip X chunk blocks in base
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

small change, big effect! :D added a menu, so you can switch between unpatched and patched (if exists) version!
Image

also updated the plugin interface: https://pastebin.com/Ew4LUnkQ

changes:
- patching is now enabled, it affects any preview, export and plugins that dont set the value
- if patch is found, status text becomes red
- patch analyzer now supports all 5 patching types
- main tree view now has an context menu option to copy the path of a selected node
- plugin interface has now:
-- AddModJob(string description, byte[] payload); //called by a plugin if it wants to add a mod
-- RunModJob(byte[] payload); //called by main tool's modmaker, which will be implemented in future, so plugins can be automated
-- setAutoPatching(bool value); //activate/deactive the search for patches, affects getDataBySha1 obviously

greetz WV
Trisstiz
Posts: 2
Joined: Sun Apr 16, 2017 3:31 pm

Re: Mass Effect Andromeda

Post by Trisstiz »

I'm really sorry for bothering you again. Could you at least help me by showing an example of an address line of any texture, I guess I'll try pick it up from there.
Thank you.
AimSpams
Posts: 1
Joined: Wed Apr 19, 2017 9:27 am

Re: Mass Effect Andromeda

Post by AimSpams »

There are any way to extract meshes?
y3804
Posts: 17
Joined: Sat Apr 15, 2017 6:02 pm

Re: Mass Effect Andromeda

Post by y3804 »

AimSpams wrote:There are any way to extract meshes?


yes, although .res files can't yet be filtered by type, you can
warrantyvoider
Posts: 236
Joined: Tue Apr 04, 2017 11:44 am

Re: Mass Effect Andromeda

Post by warrantyvoider »

y3804 wrote:
AimSpams wrote:There are any way to extract meshes?


yes, although .res files can't yet be filtered by type, you can


if anyone makes me little icons, I could simply add a different one for each type to the nodes. I could probably also make it so, that you see the type when you hover over it, and ofc I can show the restype in the status bar...

now you guys decide! does anyone make me icons and/or do you want text?^^

greetz WV