Engineer h3x3r Posted February 26 Engineer Share Posted February 26 2 hours ago, Myrkur said: how is audio extracted? hoping its not audio banks got ptsd from them. Strange that they have RIFF header. So i thought it's just simple wav file but nope. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 Well i figured it out. You need just drop that wav over "vgmstream-cli.exe" and it will convert it to playable wav. Link to comment Share on other sites More sharing options...
Myrkur Posted February 26 Share Posted February 26 2 hours ago, Helldiver said: It's wwise. fuk. Link to comment Share on other sites More sharing options...
Myrkur Posted February 26 Share Posted February 26 17 minutes ago, h3x3r said: Well i figured it out. You need just drop that wav over "vgmstream-cli.exe" and it will convert it to playable wav. any easy way to auto batch export all audio into readable format or is it going to be a pain like all WWise affected games that I have worked with previously (Death stranding, GTFO, Nier automata) Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 (edited) It's simple as never. Don't worry. I am still working on bms script. I found another sound container with BKHD header which include wems. Unpack it to the vgmstream folder next to the vgmstream-cli.exe. Wait for updated bms script i am working on. Or use this as temp solution. ###################################################### # Helldivers 2 - Texture / Mesh / Material Dumper # ###################################################### get BaseFileName basename Open FDDE "" 0 get Magic long get UnknownCount long get Files long getdstring Dummy 0x3C getdstring Dummy UnknownCount*32 for i = 0 < Files endian big get FileNameCRC0 long get FileNameCRC1 long endian little get FileTypeCRC64 longlong get MainFileOffset long get Unknown_0 long get StreamFileOffset long get Unknown_1 long get GpuResourcesFileOffset long get Unknown_2 long get Unknown_3 long get Unknown_4 long get Unknown_5 long get Unknown_6 long get MainFileSize long get StreamFileSize long get GpuResourcesFileSize long get Unknown_7 long get Unknown_8 long get FileNum long savepos EndTable if FileTypeCRC64 == 14790446551990181426 if StreamFileSize != 0 Open FDDE stream 1 goto MainFileOffset getdstring Dummy 0xC0 savepos MainFileOffset string Name p= "%s_textures/0x%04X%04X.dds" BaseFileName FileNameCRC0 FileNameCRC1 append 0 log Name MainFileOffset 148 0 log Name StreamFileOffset StreamFileSize 1 else Open FDDE gpu_resources 2 goto MainFileOffset getdstring Dummy 0xC0 savepos MainFileOffset string Name p= "%s_textures/0x%04X%04X.dds" BaseFileName FileNameCRC0 FileNameCRC1 append 0 log Name MainFileOffset 148 0 log Name GpuResourcesFileOffset GpuResourcesFileSize 2 endif elif FileTypeCRC64 == 16187218042980615487 if GpuResourcesFileSize != 0 && MainFileSize != 0 Open FDDE gpu_resources 2 string MdlInfoName p= "%s_meshes/0x%04X%04X.meshinfo" BaseFileName FileNameCRC0 FileNameCRC1 string MdlDataName p= "%s_meshes/0x%04X%04X.mesh" BaseFileName FileNameCRC0 FileNameCRC1 log MdlInfoName MainFileOffset MainFileSize 0 log MdlDataName GpuResourcesFileOffset GpuResourcesFileSize 2 endif elif FileTypeCRC64 == 16915718763308572383 if MainFileSize != 0 string MatInfoName p= "%s_meshes/mat/0x%04X%04X.mat" BaseFileName FileNameCRC0 FileNameCRC1 log MatInfoName MainFileOffset MainFileSize 0 endif elif FileTypeCRC64 == 5785811756662211598 if StreamFileSize != 0 Open FDDE stream 1 string SoundName p= "%s_sound/0x%04X%04X.wem" BaseFileName FileNameCRC0 FileNameCRC1 log SoundName StreamFileOffset StreamFileSize 1 endif endif goto EndTable next i vgmstream-win64.7z Edited February 26 by h3x3r Link to comment Share on other sites More sharing options...
Myrkur Posted February 26 Share Posted February 26 2 minutes ago, h3x3r said: It's simple as never. Don't worry. I am still working on bms script. I found another sound container with BKHD header which include wems. Unpack it to the vgmstream folder next to the vgmstream-cli.exe. Wait for updated bms script i am working on. vgmstream-win64.7z 257 B · 0 downloads will do, cheers. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 (edited) Put unpacked wems to the sound folder and run convert_wem_to_wav.bat. I found some sounds in: 2e24ba9dd702da5c so you can try Edited February 26 by h3x3r Link to comment Share on other sites More sharing options...
Myrkur Posted February 26 Share Posted February 26 3 minutes ago, h3x3r said: Put unpacked wems to the sound folder and run convert_wem_to_wav.bat. I found some sounds in: 2e24ba9dd702da5c so you can try Cheers, will look into it later today. Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 (edited) Bik Videos! Still haven't figured out why the .mesh files occasionally just have 8 extra bytes at the start, but I've got my BMS script to export quite a lot more data now. Edit: My variant of h3x3r's BMS script is in the same repository as the Hellextractor tool: https://github.com/Xaymar/Hellextractor/tree/root/extra/QuickBMS. I'm not entirely sure on how complete it is. Edit 2: Fonts are 0x05106B81DCD58A13, with a 0x80 prefix in the main data. But not all of them have the same length prefix, really want to know what decides the prefix length. Edit 3: WWise Sound Banks are 0x535A7BD3E650D799. contains multi-language audio. Might need to feed them through this tool. Edit 4: Original BMS script is seemingly correct. Some of the GPU_RESOURCES and STREAM files have additional data attached, but I do not yet understand what it is. If one export fails, just use a different file - it's not like the game engine doesn't create several identical clones of the files anyway. Half the game size is quite literally the game duplicating assets. Edited February 26 by Xaymar Link to comment Share on other sites More sharing options...
orion42m Posted February 26 Share Posted February 26 2 hours ago, Xaymar said: Bik Videos! Still haven't figured out why the .mesh files occasionally just have 8 extra bytes at the start, but I've got my BMS script to export quite a lot more data now. Edit: My variant of h3x3r's BMS script is in the same repository as the Hellextractor tool: https://github.com/Xaymar/Hellextractor/tree/root/extra/QuickBMS. I'm not entirely sure on how complete it is. Edit 2: Fonts are 0x05106B81DCD58A13, with a 0x80 prefix in the main data. But not all of them have the same length prefix, really want to know what decides the prefix length. Edit 3: WWise Sound Banks are 0x535A7BD3E650D799. contains multi-language audio. Might need to feed them through this tool. Edit 4: Original BMS script is seemingly correct. Some of the GPU_RESOURCES and STREAM files have additional data attached, but I do not yet understand what it is. If one export fails, just use a different file - it's not like the game engine doesn't create several identical clones of the files anyway. Half the game size is quite literally the game duplicating assets. I am somewhat new to this, how would I go about building Hellextractor? Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 2 minutes ago, orion42m said: I am somewhat new to this, how would I go about building Hellextractor? Install the latest CMake and a compatible compiler (Visual Studio Community Edition works fine). Download and extract the repository to a place you can remember. Open CMake-GUI Set the source directory to the directory that has the CMakeLists.txt file. Set the build directory to a directory of your choice. Must be different than source directory. Click Generate and follow through with what it asks you, leave things at default unless you know what you're doing. Click Open Project In Visual Studio: In the top navigation bar, change Debug to Release. In the menu bar click Build, then click Build Project. Wait. Binary files will be present in the <build directory>/Release/ directory. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 BTW i think that meshInfo should be append to the mesh since they share same filetype. Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 (edited) 53 minutes ago, h3x3r said: BTW i think that meshInfo should be append to the mesh since they share same filetype. Considering that there is always one offset pointing to the end of the MeshInfo file - or rather, 8 bytes before the end - it's likely that this may be the case. I'm not sure if it is truly like this in the engine, as I don't have a copy of it to test with, but it'd make more sense than this random odd 8 bytes at the start of random .mesh files. Edit: Theory doesn't work out. The meshinfo file for the random ones with 8 extra bytes at the start is perfectly identical. Not even a single bit is different. Edit 2: I love that the Stingray engine still treats the entire filesystem as if it were a Hard Disk Drive or Optical Media. It's super wasteful, considering that it duplicates data everywhere, but it also means it doesn't have to seek around for relevant files - a horribly slow operation on HDDs and Optical Media. Edited February 26 by Xaymar Link to comment Share on other sites More sharing options...
orion42m Posted February 26 Share Posted February 26 (edited) 57 minutes ago, Xaymar said: Considering that there is always one offset pointing to the end of the MeshInfo file - or rather, 8 bytes before the end - it's likely that this may be the case. I'm not sure if it is truly like this in the engine, as I don't have a copy of it to test with, but it'd make more sense than this random odd 8 bytes at the start of random .mesh files. Edit: Theory doesn't work out. The meshinfo file for the random ones with 8 extra bytes at the start is perfectly identical. Not even a single bit is different. Edit 2: I love that the Stingray engine still treats the entire filesystem as if it were a Hard Disk Drive or Optical Media. It's super wasteful, considering that it duplicates data everywhere, but it also means it doesn't have to seek around for relevant files - a horribly slow operation on HDDs and Optical Media. Yeah, 120 GB and counting, Is there a script to convert the .meshinfo files or do I need to manually convert them all? Edited February 26 by orion42m Link to comment Share on other sites More sharing options...
orion42m Posted February 26 Share Posted February 26 59 minutes ago, Xaymar said: Considering that there is always one offset pointing to the end of the MeshInfo file - or rather, 8 bytes before the end - it's likely that this may be the case. I'm not sure if it is truly like this in the engine, as I don't have a copy of it to test with, but it'd make more sense than this random odd 8 bytes at the start of random .mesh files. Edit: Theory doesn't work out. The meshinfo file for the random ones with 8 extra bytes at the start is perfectly identical. Not even a single bit is different. Edit 2: I love that the Stingray engine still treats the entire filesystem as if it were a Hard Disk Drive or Optical Media. It's super wasteful, considering that it duplicates data everywhere, but it also means it doesn't have to seek around for relevant files - a horribly slow operation on HDDs and Optical Media. Also is there a way to more easily navigate this mess? Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 9 minutes ago, orion42m said: Yeah, 120 GB and counting, Is there a script to convert the .meshinfo files or do I need to manually convert them all? There's a script further up in a spoiler somewhere. The entire format is not quite well understood yet, so nothing solid. 6 minutes ago, orion42m said: Also is there a way to more easily navigate this mess? Nope. The Stingray Engine converts filenames to ids, which seem to be unique per project. We'd need to figure out an Id -> Name map, and apply it as needed. Unless someone knows the exact process by which ids are created, this is as good as it gets. Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 It appears as if the corrupted files are a result of QuickBMS. If you manually jump to the offsets in the respective files, or use anything else (like python, or c++), all files export just fine. However if you use QuickBMS, at complete random, some of the exported files end up with 8 bytes inserted at the start. The 8 bytes it inserts exist at a much earlier or later location, but are not anywhere close to the actual data being copied. So i guess we've got that figured out now. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 One filename - 4 fileTypes. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 Anyone familiar with IDA code. Here is that hash function. Spoiler { .maxstack 8 ldarg.0 call instance void [mscorlib]System.Object::.ctor() ldarg.0 newobj instance void class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::.ctor() stfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldarg.0 ldfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldc.i4.0 conv.i8 ldstr asc_1429A // "" callvirt instance void class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::set_Item(var<u1>, !!T0) ldarg.0 ldarg.1 call instance void Stingray.Console.ReverseIdLookup::ReadFile(string path) ret } .method public hidebysig instance string Lookup(unsigned int64 id) { .maxstack 8 ldarg.0 ldfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldarg.1 callvirt instance var<u1> class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::get_Item(void) ret } .method public hidebysig instance string LookupOrHex(unsigned int64 id) // CODE XREF: Stingray.Console.LoadingProfiler__DrawScope+57↑p // Stingray.Console.LoadingProfiler__DrawUnfinishedScope+3A↑p ... { .maxstack 8 ldarg.0 ldfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldarg.1 callvirt instance bool class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::ContainsKey(var<u1>) brfalse.s loc_A5BB ldarg.0 ldfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldarg.1 callvirt instance var<u1> class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::get_Item(void) ret loc_A5BB: // CODE XREF: Stingray.Console.ReverseIdLookup__LookupOrHex+C↑j ldarga.s 1 ldstr aX // "X" call instance string [mscorlib]System.UInt64::ToString(string) ret } .method private hidebysig instance void ReadFile(string path) // CODE XREF: Stingray.Console.ReverseIdLookup__.ctor+25↑p { .maxstack 5 .locals init (unsigned int8[] V0, int32 V1, int32 V2, string V3, unsigned int8[] V4) ldarg.1 call bool [mscorlib]System.IO.File::Exists(string) brtrue.s loc_A5D9 ret loc_A5D9: // CODE XREF: Stingray.Console.ReverseIdLookup__ReadFile+6↑j ldarg.1 ldc.i4.3 call unsigned int8[] [common]Stingray.FileUtils::ReadAllBytes(string, valuetype [mscorlib]System.IO.FileShare) stloc.0 ldc.i4.0 stloc.1 ldc.i4.0 stloc.2 br.s loc_A626 loc_A5E7: // CODE XREF: Stingray.Console.ReverseIdLookup__ReadFile+5A↓j ldloc.0 ldloc.2 ldelem.u1 brtrue.s loc_A622 call class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8() ldloc.0 ldloc.1 ldloc.2 ldloc.1 sub callvirt instance string [mscorlib]System.Text.Encoding::GetString(unsigned int8[], int32, int32) stloc.3 call class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8() ldloc.3 callvirt instance unsigned int8[] [mscorlib]System.Text.Encoding::GetBytes(string) stloc.s 4 ldarg.0 ldfld class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string> Stingray.Console.ReverseIdLookup::_map ldarg.0 ldloc.s 4 ldc.i4.0 call instance unsigned int64 Stingray.Console.ReverseIdLookup::MurmurHash64(unsigned int8[] data, unsigned int32 seed) ldloc.3 callvirt instance void class [mscorlib]System.Collections.Generic.Dictionary`2<unsigned int64, string>::set_Item(var<u1>, !!T0) ldloc.2 ldc.i4.1 add stloc.1 loc_A622: // CODE XREF: Stingray.Console.ReverseIdLookup__ReadFile+1A↑j ldloc.2 ldc.i4.1 add stloc.2 loc_A626: // CODE XREF: Stingray.Console.ReverseIdLookup__ReadFile+15↑j ldloc.2 ldloc.0 ldlen conv.i4 blt.s loc_A5E7 ret } .method private hidebysig instance unsigned int64 MurmurHash64(unsigned int8[] data, unsigned int32 seed) // CODE XREF: Stingray.Console.ReverseIdLookup__ReadFile+43↑p { .maxstack 4 .locals init (int32 V0, unsigned int64 V1, int32 V2, int32 V3, unsigned int8& pinned V4, unsigned int64* V5, unsigned int64 V6, unsigned int8& pinned V7) ldarg.1 ldlen conv.i4 stloc.0 ldarg.2 conv.u8 ldloc.0 conv.i8 ldc.i8 0xC6A4A7935BD1E995 mul xor stloc.1 ldloc.0 ldc.i4.8 rem stloc.2 ldloc.0 ldc.i4.8 div stloc.3 ldloc.3 ldc.i4.0 ble.s loc_A6AD ldarg.1 ldc.i4.0 ldelema [mscorlib]System.Byte stloc.s 4 ldloc.s 4 conv.i stloc.s 5 br.s loc_A6A6 loc_A660: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+77↓j ldloc.s 5 ldind.i8 stloc.s 6 ldloc.s 6 ldc.i8 0xC6A4A7935BD1E995 mul stloc.s 6 ldloc.s 6 ldloc.s 6 ldc.i4.s 0x2F shr.un xor stloc.s 6 ldloc.s 6 ldc.i8 0xC6A4A7935BD1E995 mul stloc.s 6 ldloc.1 ldloc.s 6 xor stloc.1 ldloc.1 ldc.i8 0xC6A4A7935BD1E995 mul stloc.1 ldloc.3 ldc.i4.1 sub stloc.3 ldloc.s 5 ldc.i4.8 add stloc.s 5 loc_A6A6: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+2E↑j ldloc.3 brtrue.s loc_A660 ldc.i4.0 conv.u stloc.s 4 loc_A6AD: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+1E↑j ldloc.2 ldc.i4.0 ble loc_A74C ldarg.1 ldc.i4.8 ldloc.0 ldc.i4.8 div mul ldelema [mscorlib]System.Byte stloc.s 7 ldloc.2 ldc.i4.1 sub switch loc_A734, loc_A728, loc_A71B, loc_A70E, loc_A701, loc_A6F4, loc_A6E7 br.s loc_A748 loc_A6E7: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.6 add ldind.u1 conv.u8 ldc.i4.s 0x30 shl xor stloc.1 loc_A6F4: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.5 add ldind.u1 conv.u8 ldc.i4.s 0x28 shl xor stloc.1 loc_A701: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.4 add ldind.u1 conv.u8 ldc.i4.s 0x20 shl xor stloc.1 loc_A70E: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.3 add ldind.u1 conv.u8 ldc.i4.s 0x18 shl xor stloc.1 loc_A71B: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.2 add ldind.u1 conv.u8 ldc.i4.s 0x10 shl xor stloc.1 loc_A728: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldc.i4.1 add ldind.u1 conv.u8 ldc.i4.8 shl xor stloc.1 loc_A734: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+94↑j ldloc.1 ldloc.s 7 conv.i ldind.u1 conv.u8 xor stloc.1 ldloc.1 ldc.i8 0xC6A4A7935BD1E995 mul stloc.1 loc_A748: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+B5↑j ldc.i4.0 conv.u stloc.s 7 loc_A74C: // CODE XREF: Stingray.Console.ReverseIdLookup__MurmurHash64+7F↑j ldloc.1 ldloc.1 ldc.i4.s 0x2F shr.un xor stloc.1 ldloc.1 ldc.i8 0xC6A4A7935BD1E995 mul stloc.1 ldloc.1 ldloc.1 ldc.i4.s 0x2F shr.un xor stloc.1 ldloc.1 ret } } } Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 6 minutes ago, h3x3r said: Anyone familiar with IDA code. Here is that hash function. https://en.wikipedia.org/wiki/MurmurHash Looks like its this. That may be easy to recreate. I'll focus on getting an exporting tool for the "", ".stream" and ".gpu_resources" files done that doesn't randomly add 8 bytes to the start, then I'll see what I can do there. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 26 Engineer Share Posted February 26 Yeah I know it's probably murmur but how to get filenames from game? Maybe some hook can do that but with that protection game has it won't be easy. With old exe there is a command which delay that protection but not for long. Link to comment Share on other sites More sharing options...
Xaymar Posted February 26 Share Posted February 26 (edited) If the game uses filenames, you'll likely find them in clear text in one of the files related to the game. If it doesn't, then the best you can do is generate millions of hashes and find matches eventually. The limitations for an engine from 2018 that is cross platform would be: maximum path length of 255 (Windows), 224 (Xbox), or 192 (PS4). Each directory/file name likely matches the regex [a-zA-Z0-9_]+ File extensions follow a similar naming. Human factor: it's unlikely to be several hundred directories deep directory and file names are unlikely to be a single or two characters. related files are usually named and placed in similar directories. i.e. content/enemies/bugs/charger/diffuse.dds + content/enemeis/bugs/charger/normal.dds If you want to attempt the former, try the strings command. There's a Windows version by Microsoft here: https://learn.microsoft.com/en-us/sysinternals/downloads/strings Edit: A dictionary based attack would likely end up extremely effective. Edit 2: File Type and File Name are separate, seems like the engine strips off the extension. Edited February 26 by Xaymar Link to comment Share on other sites More sharing options...
orion42m Posted February 26 Share Posted February 26 1 hour ago, h3x3r said: One filename - 4 fileTypes. How would I go about running .bt files with 010 Editor? Link to comment Share on other sites More sharing options...
Unordinal Posted February 26 Share Posted February 26 (edited) 1 hour ago, h3x3r said: One filename - 4 fileTypes. I haven't actively done any reversing for Helldivers 2 but I've done some for Vermintide 2 which uses the same base engine. Here's a hash dictionary of the known extensions for that game. I can see that at least the first file type you have there matches the `.bones` file type. Spoiler ac2b738a374cf583 actor 931e336d7646cc26 animation dcfb9e18fff13984 animation_curves 44957ef5a3a368e4 animation_set 3eed05ba83af5090 apb 7ffdb779b04e4ed1 baked_lighting aa5965f03029fa18 bik e301e8af94e3b5a3 blend_set 18dead01056b72e9 bones b7893adf7567506a chroma f7b361bde8b4dd03 common fe9754bd19814a47 common_package 0001a6d201e87086 compiled_shader 82645835e6b73232 config 69108ded1e3e634b crypto 8fd0d44d20650b68 data 64298613551f58d4 dds ed74b77c6d447d84 disabled 9831ca893b0d087d entity 92d3ee038eeb610d flow 6a00deed7d3b235a flow_editor 9efe0a916aae7880 font d526a27da14f1dc5 ini fa4a8e091a91201e ivf a62f9297dc969e85 keys 2a690fd348fe9ac5 level a14e8dfa2cd117e2 lua eac0b497876adedf material 48ff313713a997a1 mesh 3fcdd69156a46417 mod b277b11fe4a61d37 mouse_cursor 169de9566953d264 navdata 3b1fa9e8f6bac374 network_config ad9c6d9ed1e5e77a package a8193123526fad64 particles 5f7203c8f280dab8 physics 22bd082459e868d8 physics_data bf21403a3ab0bbb1 physics_properties 46cab355bd8d4d37 prototype 27862fe24795319c render_config d37e11a77baafc01 resource 9d0a795bfe818d19 scene cce8d5b5f5ae333f shader e5ee32a477239a93 shader_library 9e5c3cc74575aeb5 shader_library_group fe73c7dcff8a7ca5 shading_environment 250e0a11ac8e26f8 shading_environment_mapping a27b4d04a9ba6f9e slug e9fc9ea7042e5ec0 slug_album 90641b51c98b7aac sound d8b27864a97ffdd7 sound_environment f97af9983c05b950 spu_job a486d4045106165c state_machine bb0279e548747a0a statemachine_editor 0d972bab10b40fd3 strings ad2d3fa30d9ab394 surface_properties cd4238c6a0c69e32 texture 91f98cecac930de8 timestamp 94616b1760e1c463 timpani 99736be1fff739a4 timpani_bank 00a3e6c59a2b9c6c timpani_master 19c792357c99f49b tome e0a48d0be9a7453f unit 8c074c8f95e7841b user_settings f7505933166d6755 vector_field 6ad9817aa72d9533 volume 786f65c00a816b19 wav 535a7bd3e650d799 wwise_bank af32095c82f2b070 wwise_dep d50a8b7e1c82b110 wwise_metadata 504b55235d21440e wwise_stream 76015845a6003765 xml 712d6e3dd1024c9c ugg a99510c6e86dd3c2 upb 2bbcabe5074ade9e input 52014e20a7fdccef xp 7b82d55316f98c9b vista de8c9d00247f8fc6 w7 0605775c0481181b w8 293bb3b1982c6d5a main b6b3099f78886ff9 win32 d596cd750e4e279f zD Edited February 26 by Unordinal 2 Link to comment Share on other sites More sharing options...
Helldiver Posted February 26 Share Posted February 26 2 hours ago, h3x3r said: One filename - 4 fileTypes. What is "IdString Lookup"? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now