Fhav6X Posted September 22, 2018 Posted September 22, 2018 (edited) This is a 2nd level Tutorial on how to edit assets and assetbundles. Tools- Unity Assets Bundle Extractorhttps://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor- Text editor (e.g. notepad++)- Asset Studiohttps://github.com/Perfare/AssetStudio/releases- paint, gimp, photoshop, paint3d, blender0. What is a 2nd level Tutorial?PoE2 has three levels at which one can mod the game. Level 1 is modifying the gamedatabundles, stringtables etc. Let's call it scripting and shuffling of existing things. You can't add totally new stuff or change the game mechanics. Level 2 allows you to add self made contend (new npcs, new hairstyles, new look etc.) just like a DLC. Level 3 is changing the game mechanics. In other games this is called the "hard coded" level and is normally not accessible to moders.Level 1 has no influence on level 2 or 3. Level 2 has no influence on level 3 but on level 1. Level 3 has influence on level 1 and 2.1. What are assets and assetbundles?The Unity engine stores all files required to display anything in the game (animations, areas and character meshes, some scripts, visual maps, variable lists e.g. for companion stats) in so called assets and assetbundles. The asset files are the "levelxy" or "sharedassets" in the "PillarsOfEternityII_Data" folder. Assetbundles are the unity3d files in the "PillarsOfEternityII_Data\assetbundles" folder.The "levelxy" and "sharedassets" contain mainly areas and maps and the interaction between all the stuff on it (npc, quest and sequence triggers). So if you want to edit/build maps this are the once you need to get familiar with. The assetbundles in "PillarsOfEternityII_Data\assetbundles\streamtile" contain the textures for the areas and maps.The focus of this tutorial will be the assetbundles in "PillarsOfEternityII_Data\assetbundles". The contain the stats and appearance files for all items, characters, creatures and the UI. They have mostly convenient names. The ones that start with "lax" are the expansions and DLC's.2. How to mod assetbundles?2.1 UABE and Asset StudioIn order to modify assets or assetbundles you need Unity Assets Bundle Extractor (UABE). It is the only tool I know, which can import files into existing assets or assetbundles. UABE is not very helpful for browsing the files. This is where Asset Studio shines. It can give you previews of files without the need for extraction and external programs.2.2 Things you need to do, before start modding.The big unity3d files are "compressed"!? Not really, but you will have to "uncompress" them. UABE has a protection build in to prevent unwanted overwrite. To make your life easy just do this ALWAYS!!! when modding an assetbundle.- take the unity3d file you want to "uncompress" or mod and name it name2.unity3d e.g. characters.unity3d --> characters2.unity3d- open characters2.unity3d in UABE via File -> open- if you haven't "uncompress" the file you will be prompted to do so.- save the file as characters.unity3d without the number.Now you have two files, a backup with a number and one modded, which is used by the game.PS: there is no need to "compress" those files.2.3 The file structure inside the assets or assetbundles.Use UABE or Asset Studio to open the assets or assetbundles. You will see many different file types. If you already know, how to mod gamedatabundles, you will recognize monobehavier files with "prefab" in their names. This prefab files are text files containing, how all the other files are put together. They are the assembly instructions. Here is an example, I will use in this tutorial. It's the prefab for the female Godlike head 1. Practically all visual object prefabs can be found in "items.unity3d". PPtr m_GameObjectint m_FileID = 0SInt64 m_PathID = 0UInt8 m_Enabled = 1PPtr m_Scriptint m_FileID = 0SInt64 m_PathID = -5827726737468822885string m_Name = "a_F_GODM_Head01"FBXModelData ModelDatastring Model = "Assets/Art/Character/Female/HUM/Head/GODM/F_HUM_GODM_Head01.fbx"UInt8 ClearOutModel = 0string UnityAssetGuidString = "1649bda68fd654b48b640253c80dbc2a"string OriginalModelPath = "Assets/Art/Character/Female/HUM/Head/GODM/"string OriginalModelName = "F_HUM_GODM_Head01"string ModelSuffix = "GODM_Head01"string ModelBaseFolder = "Assets/Art/Character/"SubMeshSettings SubMeshesArray Arrayint size = 3[0]SubMeshSettings datastring MeshName = "F_GODM_Head01"PPtr<$Material> MaterialOverrideint m_FileID = 1SInt64 m_PathID = 8442848947353014589MaterialState OVSMaterialsArray Arrayint size = 0int SubMeshType = 0vector SpecificToSubRacesArray Arrayint size = 0int VFXMeshTag = 0UInt8 Hidden = 0UInt8 IsEmissive = 0[1]SubMeshSettings datastring MeshName = "F_GODM_Head01_Eyes01"PPtr<$Material> MaterialOverrideint m_FileID = 1SInt64 m_PathID = 7764603257363938399MaterialState OVSMaterialsArray Arrayint size = 0int SubMeshType = 0vector SpecificToSubRacesArray Arrayint size = 0int VFXMeshTag = 0UInt8 Hidden = 0UInt8 IsEmissive = 0[2]SubMeshSettings datastring MeshName = "F_GODM_Head01_Horns"PPtr<$Material> MaterialOverrideint m_FileID = 1SInt64 m_PathID = -7972597978955064533MaterialState OVSMaterialsArray Arrayint size = 0int SubMeshType = 0vector SpecificToSubRacesArray Arrayint size = 0int VFXMeshTag = 0UInt8 Hidden = 0UInt8 IsEmissive = 0FBXModelData FemaleOverrideModelDatastring Model = ""UInt8 ClearOutModel = 0string UnityAssetGuidString = ""string OriginalModelPath = ""string OriginalModelName = ""string ModelSuffix = ""string ModelBaseFolder = ""SubMeshSettings SubMeshesArray Arrayint size = 0FBXModelData LowPolyModelDatastring Model = ""UInt8 ClearOutModel = 0string UnityAssetGuidString = ""string OriginalModelPath = ""string OriginalModelName = ""string ModelSuffix = ""string ModelBaseFolder = ""SubMeshSettings SubMeshesArray Arrayint size = 0FBXModelData LowPolyFemaleOverrideModelDatastring Model = ""UInt8 ClearOutModel = 0string UnityAssetGuidString = ""string OriginalModelPath = ""string OriginalModelName = ""string ModelSuffix = ""string ModelBaseFolder = ""SubMeshSettings SubMeshesArray Arrayint size = 0PPtr<$CharacterModelVisualData> PartialModelVisualDataint m_FileID = 0SInt64 m_PathID = 0UInt8 HidesHair = 0UInt8 HidesFacialHair = 0UInt8 PartialHair = 0UInt8 MoveEars = 0float OverrideScale = 0vector HidesSubMeshTypesArray Arrayint size = 0PPtr<$Texture> CharacterCreationThumbnailint m_FileID = 0SInt64 m_PathID = 1803577024755730608VisualEffectModifiersGameDataReference VFXModifiersstring GuidString = "00000000-0000-0000-0000-000000000000" It looks like a lot, but it is more simple than it seems. If you want to change the appearance of anything in the game the cyan part is the most important. The locations of all necessary files are under "FBXModelData ModelData". The strings are all references to files in characters.unit3d. The next important part is "SubMeshSettings SubMeshes". Here are the meshes used and under "MaterialOverride" is the reference of their color files. When you open those meshes and material files, you will see the same structure and references to object (fbx), skeleton, and texture files.2.4 Referencing in the assets or assetbundlesI have used the term reference very often in the previous section. There are 3 ways to reference something in the assets or assetbundles. 1. Reference by name (eg. string MeshName = "F_GODM_Head01") 2. Reference by SInt64 m_PathID. When you open an asset or assetbundle in UABE and click on "Info" a window called "Asset info" with all the files in the asset will open. In this Window there is a tab called "PathID". This is the SInt64 m_PathID of the file. If you want to find a file mentioned in the prefab or other files, copy SInt64 m_PathID, open the "Asset info"-window of the asset, click on view, select file id (there is only one), fill in the path id and click ok to find the file. 3. In some cases we have files referenced across assets and assetbundles. The prefab files are in items.unity3d and reference to characters.unity3d. I have not figured out yet, how this is done. Presumably it has something to do with a file in every asset with the path id 1 and/or the "UnityAssetGuidString". Edited September 22, 2018 by Fhav6X 3
Fhav6X Posted September 22, 2018 Author Posted September 22, 2018 (edited) 3. Time to mod!I will now mod the female Godlike head 1 to look a little different.3.1 Rename items.unity3d (if you have not "uncompressed" it), characters.unity3d and character_headandskin_hd.unity3d. I named them items3.unity3d (if you have not "uncompressed" it), characters3.unity3d and character_headandskin_hd3.unity3d. 3.2 Make a work folder somewhere.3.3 Open UABE -> open items3.unity3d -> save the "uncompressed" as items.unity3d -> open items.unity3d -> click info -> resize "Asset info" to your liking -> look for MonoBehaviour a_F_GODM_Head01 -> click "Export Dump" -> save the file in your work folder. The file name contains the Assets md4 hashed name and the Path id (none negative). I won't change and import a_F_GODM_Head01 back. But it is easier to look up the SInt64 m_PathID this way. If you wish to use different/custom models you have to edit this file too.3.4 I will only change the colors of the actual head, so I just need the SInt64 m_PathID from string MeshName = "F_GODM_Head01" PPtr<$Material> MaterialOverride int m_FileID = 1 SInt64 m_PathID = 8442848947353014589 3.5 Open UABE -> open character3.unity3d (mine is already "uncompressed") -> click info -> resize "Asset info" to your liking -> click on view -> select "go to asset" -> fill in the file id and under path id 8442848947353014589 -> click "View Data" -> a window will pop up.Material files are like prefabs for texture. I will not edit this file, just the textures it references.3.6 In the window expand to "UnityPropertySheet m_SavedProperties/map m_TexEnvs/Array Array/2/_MainTex and note the SInt64 m_PathID = 8053650484694347279. 3.7 Now look for this file via "go to asset" -> click on "Plugins" -> select "Export to .png" -> save the file in your work folder. DO NOT CLOSE UABE!!!! Well, you can close it, but it's easier this way. 3.8 Edit the file to your liking. I use gimp for that.3.9 With UABE still open and pointed, at the file click on "Plugins" again -> now select "Edit" -> a new window opens -> click on "Load" under "Texture" -> select your edited file -> confirm everything. I want to give the moon godlike the horns of a nature godlike. For that I will replace the horns object files.3.10 Look for F_GODN_Head02_Horns in character3.unity3d (there are models for each race) -> select all of them and click "Export Dump" -> now look for F_GODM_Head01_Horns click "Import Dump" and import F_GODN_Head02_Horns for the corresponding race.3.11 In the "Asset info" window select "File" -> save -> OK -> "Asset info" closes. 3.12 In UABE select "File" -> SAVE!!! (not export) as "character.unity3d" without the extra number from before. PoE2 has extra hd textures in character_headandskin_hd.unity3d so I will edit those too. The textures have the same name as the ones in characters.unity3d but with a "_HD" at the end.3.13 Open UABE -> open character_headandskin_hd3.unity3d and repeat Step 7 to 11.Almost finished.3.14 Launch PoE2 and go to character creation. 4. FAQQ: Can we create own files?A: Yes and no. There is currently a problem in UABE with new MonoBehaviour files like the prefabs, that prevents creating entire custom things. Any other file type can be created.Q: Can we make install packages?A: Yes, UABE offers this. I recommend to make a readme with all edited SInt64 m_PathIDs for mod compatibility. Edited October 7, 2018 by Fhav6X 4
aledroid Posted September 25, 2018 Posted September 25, 2018 Thank you for this tutorial! I wanted to change the skin tone of godlike and I imagine I should be able to do that just by altering the texture as you did. If I wanted to switch a model for another how would the process work? UABE doesn't export obj, right? 1
Fhav6X Posted September 25, 2018 Author Posted September 25, 2018 Thank you for this tutorial! I wanted to change the skin tone of godlike and I imagine I should be able to do that just by altering the texture as you did. If I wanted to switch a model for another how would the process work? UABE doesn't export obj, right? UABE can do this the same as with pictures. But for swapping models, you just have to redirect the paths in the prefab, or (for single parts) replace the model files, like I did in 3.10 and 3.11. As soon as I figure out, how to create prefabs, I will make a tutorial for entire custom models. Skin color change can be done by editing the material files of the models. They have sections called "_TintMap", "_TintColor1" and "_TintColor2". If there is no file for the "_TintMap" you can just enter the color numbers for your color under both "_TintColor1" and "_TintColor2". The color numbers for red green and blue are the rgb numbers of a color (look them up in paint) divided through 255. 2
Excerpt Posted October 2, 2018 Posted October 2, 2018 So using this method it is currently not possible to ADD new items/armors/weapons using this method because of problems with creating new Monobehaviors? Am I understanding this right? What is the problem exactly with creating new Monobehaviors/Prefabs for use in the game? Could you just copy an existing one and modify it or would that also not work?
Fhav6X Posted October 2, 2018 Author Posted October 2, 2018 There are multiple types of Monobehaviors. When a new one is created in UABE, the program reverts it always to the default type of these and in so doing, cutting off areas needed for the extra information of the prefabs. There might be a way to "add" new items/armors/weapons. I have seen a lot of poe1 stuff in the bundles. One could recycle those for new things in poe2. 1
blackstone777 Posted October 7, 2018 Posted October 7, 2018 (edited) @Fhav6x I have sucessfully edited a soulbound weapon's .unity3d file (using UABE and Notepad++) to include an additional class (Druid). I have imported the change I made (using Notepad++) back into the original .unity3d asset bundle. But upon exporting that new file all I get is a "file" extension, that is, a file with no .unity3d extension. So my question is, how do I get that newly edited asset bundle to be recognizable and usable by PoE as a legitimate .unity3d file? *EDIT* I figured it out What I wasn't doing was saving the renamed .unity3d file as the originally named PoE file WITH THE .UNITY3D extension FIRST, before dumping what I wanted to edit and then importing those changes. I was using the "export" option instead and the game would not recognize the file even if I tried to add the .unity3d extension after making proper edits using the export option. Very easy to mod now! Edited October 7, 2018 by blackstone777
Fhav6X Posted October 7, 2018 Author Posted October 7, 2018 I have now marked under 3.12 that you have to save and not export the finished file. If you do it as I suggested you just have to mark the numbered unity3d file when saving and remove the extra number. This way you always correctly name the file and file extension. 1
Starrceline Posted December 14, 2018 Posted December 14, 2018 I just started using these mod tools today, thank you for sharing them. I am halfway through editing Maia's appearance. I successfully edited the character_headandskin_hd.unity3d file, but when I go to edit the characters.unity3d file, it crashes the AssetBundleExtractor. I can only open the file, but as soon as I click "Info," it crashes the program. Any idea what to try?
Fhav6X Posted December 14, 2018 Author Posted December 14, 2018 @Starrceline Odd? I can open all unity3d files without problems. What version of UABE do you use? I use the latest (2.2 beta4). 1
Starrceline Posted December 15, 2018 Posted December 15, 2018 It seems I am running a measley v 1.0...I will look into updating this, thank you!
Starrceline Posted December 15, 2018 Posted December 15, 2018 Upgrading my version to 2.2 beta 4 worked like a charm!This is great! My first time ever modding a game skin like this. But now I changed something I didn't like in a character skin
davoker Posted October 15, 2019 Posted October 15, 2019 One question, is this applicable to PoE 1? And another question xD is it possible with the programs in this tutorial to "disable" the NPC backers of PoE?
Fhav6X Posted October 21, 2019 Author Posted October 21, 2019 Yes, it is applicable for PoE 1. It should be possible to replace the NPC backers with something else. Yet, considering the amount of this npcs, I think it is to much to bother with.
Silvarren Posted November 16, 2019 Posted November 16, 2019 I'm trying to modify Ydwin's prefab MonoBehavior so that she has more than 10 Might. I can get into the CharacterStatsMutable script, and I can export the dump file version of it, and edit it. However, when I try to import it back in, it loses everything below the m_Name = "" variable of the file. It even happens if I don't modify the dump file at all and try to re-import it. In doing some experimentation, I suspect this is because the variable after it is a custom type. I'd try to edit the raw .dat file, but I don't know how to do that. I can modify the actual string m_Name = "" variable, setting the string and everything, but interestingly, if I try to rename the variable to string m_notName, it reverts back to the m_Name. I suspect this is because "m_notName" isn't an expected variable, and also because m_Name is an actual default Unity object variable. Has anyone had any luck with modifying character attributes (not skills / respeccing)? (apologies if this is a double post)
Fhav6X Posted November 16, 2019 Author Posted November 16, 2019 A mono loosing data ... That sounds like you are using an old uabe version (2.2a and older). If it is v2.2d, try it with 2.2c or 2.2b. Sometimes you have to restart uabe to show modded data. So after importing just close the programm and restart. Don't bother editing the raw files. It will only lead to more problems.
Arturo Bonaita Posted February 5, 2020 Posted February 5, 2020 How can I use the modified file with a new file name?
Grape_You_In_The_Mouth Posted May 26, 2021 Posted May 26, 2021 I couldn't figure out how to copy a spell effect from the vfx bundle and create a new record, or even alter an existing one. Has anyone discovered anything? It would be killer to be able to change vfx so they can scale, loop, or create copies with a different color.
Jeffaxer Posted June 12, 2021 Posted June 12, 2021 (edited) Hello everyone, I hope someone can help me because I did not find anything on the net to solve my little problem, I will try to be as clear as possible ... I would like to put the main character of one game in the other, it's 2 android games made with Unity. This is what i did ... Programs used : -AssetStudio -AssetsBundleExtractor I extracted the 2 APKs with Winzip to have the structure : (see pictures below)(1) I was therefore able to find the 2 "Models" in the 2 games, example : (see pictures below)(2) I imported the "Mesh" (.obj) from one game to another in .dat format by importing the "Raw" and "Dump" and converted everything back to APK: (see pictures below)(3) The problem is that in the game I don't see my character, he is there because I can run and move around in the game but he is invisible after my modification. (see pictures below)(4 and 5) I don't understand why, someone would have an idea ? the last picture is the "Models" I wanted to import into the game above (picture 4 and 5) : Please please plese, help me !!! if anyone wants to try just to see if it's possible, here are the links : https://apkpure.com/super-girl-superhero/com.eventualsol.supergirlhero/download?from=details https://apkpure.com/fr/amazing-hero-girl/com.bestsimgames.AMHG/download/2-APK take the main character of "Supergirl Superhero_v1.0" (the first "SuperGirl) and put it in "Amazing-hero-girl V2.0.0" to replace the main character with the cape and the texture if it's possible Edited June 12, 2021 by Jeffaxer 1
surfistazk Posted April 21, 2022 Posted April 21, 2022 On 11/16/2019 at 5:18 AM, Fhav6X said: A mono loosing data ... That sounds like you are using an old uabe version (2.2a and older). If it is v2.2d, try it with 2.2c or 2.2b. Sometimes you have to restart uabe to show modded data. So after importing just close the programm and restart. Don't bother editing the raw files. It will only lead to more problems. ola estou com mesmo problema do jeffaxer queria troca um personagem de um jogo pra outro... 0 MonoBehaviour Base 0 PPtr<GameObject> m_GameObject 0 int m_FileID = 0 0 SInt64 m_PathID = 0 1 UInt8 m_Enabled = 1 0 PPtr<MonoScript> m_Script 0 int m_FileID = 0 0 SInt64 m_PathID = 1 string m_Name = 1 string meshName = "Male_Top_Cos_Nutcracker" 0 vector animatedBoneNames 1 Array Array (0 items) 0 int size = 0 0 vector animatedBoneHashes 1 Array Array (0 items) 0 int size = 0 0 UMAMeshData meshData 0 vector bindPoses 1 Array Array (0 items) 0 int size = 0 0 UMABoneWeight boneWeights 0 Array Array (0 items) 0 int size = 0 0 BoneWeight unityBoneWeights
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