Announcement

Collapse
No announcement yet.

Pak File Loader Plugin

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • replied
    Originally posted by BlueMountainsIO View Post
    Snip
    Ty good sir, its working now.
    I had to Append the" ../../../" into the response file array as a individual index to get the unrealPak to have the mount point as "../../../" in case anyone else runs into the problem too

    Leave a comment:


  • replied
    Originally posted by BlueMountainsIO View Post
    Rareden

    @MagicBots
    I would assemble the pak so it looks like this.

    Mount point: ../../../

    "Pod/Plugins/ModPlugin/Content/Cube.uasset"
    "Pod/Plugins/ModPlugin/Content/M_Cube.uasset"
    etc.

    Then your RootPath is "/ModPlugin/" and your ContentPath is "../../../Pod/Plugins/ModPlugin/Content"
    ok, trying this. I noticed that i'm getting a .pak generated for the mod packaging approach that looks like this:

    Pod\Plugins\ModPlugin\Content\Paks\WindowsNoEditor\ModPluginPod-WindowsNoEditor.pak" -List
    LogPakFile: Display: Using command line for crypto configuration
    LogPakFile: Display: Added 0 entries to add to pak file.
    LogPakFile: Display: Mount point ../../../Pod/Plugins/ModPlugin/
    LogPakFile: Display: "AssetRegistry.bin" offset: 0, size: 44 bytes, sha1: CC66D83CB38DE2F3A30822A68EB38A3865471816, compression: None.
    LogPakFile: Display: "Metadata/DevelopmentAssetRegistry.bin" offset: 2048, size: 143066 bytes, sha1: A9820C94D2CDF676DD30655C61BBBC57E5E560DF, compression: None.
    LogPakFile: Display: 2 files (143110 bytes), (0 filtered bytes).
    LogPakFile: Display: Unreal pak executed in 0.003891 seconds

    If i want to read the AssetRegistery with the .pak I create for my cube, do i add it with the same approach as content
    (same mount points etc) or is there a different procedure?

    For some reason I cannot get my packaging approach
    for my mod plugin to include the content both the asset registry and the content.. So i'm having to manually pak the
    content. Not sure why.

    I suppose I can also manually pak the registry in with the content but maybe it's better to keep
    them separate if the registry needs a different rootPath and contentPath generally..?
    Last edited by MagicBots; 09-14-2019, 01:40 AM.

    Leave a comment:


  • replied
    Rareden
    That's a really strange pak layout. If you want the assets to be available in /Game then this will work (Tested and it works):

    Pak File layout:
    Click image for larger version  Name:	GamePakLayout.png Views:	1 Size:	140.4 KB ID:	1664031


    "ModProject": Name of the Unreal project. All content is from /Game
    Mount point must be ../../../

    Mount with the Pak Loader plugin:

    MountPakFile("D:\MyGamePak.pak", "")<- Leave the mount point parmeter empty (mount point from the pak will be used which is ../../../)
    RegisterMountPoint("/Game/", "../../../ModProject/Content/") <- RootPath and ContentPath.
    (Optional)
    LoadPakAssetRegistryFile("../../../ModProject/AssetRegistry.bin")

    Now you can load assets like this: GetPakFileStaticMesh("/Game/Tents/Meshes/SM_Tent")


    @MagicBots
    I would assemble the pak so it looks like this.

    Mount point: ../../../

    "Pod/Plugins/ModPlugin/Content/Cube.uasset"
    "Pod/Plugins/ModPlugin/Content/M_Cube.uasset"
    etc.

    Then your RootPath is "/ModPlugin/" and your ContentPath is "../../../Pod/Plugins/ModPlugin/Content"

    Leave a comment:


  • replied
    Originally posted by Cytokinetik View Post
    I need to fork/update repo the correct way still, but here is ModSkeleton for 4.22:
    https://drive.google.com/open?id=1Fx...Pwv5oOP0cQx7t2

    If you setup the 2 package profiles correctly it should work, I changed the .bat file because it did not have the correct filename to copy the .pak properly.
    Cooking should not fail, only gives warnings because it thinks it needs those references but it does not. You should also be able to access the AssetRegistry from within the modpak at runtime with the PakLoader plugin...
    There must be something i'm missing because the cook fails for me even with this version. The only way that ModPluginA build (cook/package) works is if I keep the plugin enabled when i build the first main build, which i think defeats the purpose of having the main build built without knowledge of the plugin. I've went over project launcher settings several times so it must be something else. As it's unrelated to PakLoader, I'll send you a p.m. to what I'm seeing. Definitely helpful for my understanding anyway even with them not working with disconnected builds. so thanks.

    Leave a comment:


  • replied
    I need to fork/update repo the correct way still, but here is ModSkeleton for 4.22:
    https://drive.google.com/open?id=1Fx...Pwv5oOP0cQx7t2

    If you setup the 2 package profiles correctly it should work, I changed the .bat file because it did not have the correct filename to copy the .pak properly.
    Cooking should not fail, only gives warnings because it thinks it needs those references but it does not. You should also be able to access the AssetRegistry from within the modpak at runtime with the PakLoader plugin...

    Leave a comment:


  • replied
    Originally posted by Cytokinetik View Post
    This may be of some help about learning the .pak system and asset registry:
    https://github.com/nakata0705/ModSkeleton

    This was forked and updated from the original, it is a modding skeleton method. I think the assetregistry.bin for addon paks is also located and cooked inside of the .pak as well. I am not sure if that could cause a conflict. Using this .pak loader plugin along with the modskeleton method may help the process. The modskeleton allows adding .paks/mods without needing the original project at all...

    Regardless it is a good learning tool along with the .pakloader plugin,
    @Cytokinetik. This is great example and just what I needed for knowing what I was missing in terms of building a mod, however, it isn't a working example for me on 4.22 unfortunately. Only the 'cooked' directory gets made for the content plugin during build, and not the 'StagedBuild' directory which is of course needed for this command that copies the pak file from the plugin 'StagedBuild' to the mod directory:

    copy /Y .\Plugins\ModSkeletonExamplePluginA\Saved\StagedBuilds\WindowsNoEditor\ModSkeleton\Plugins\ModSkeletonExamplePluginA\Content\Paks\WindowsNoEditor\ModSkeletonExamplePluginA.pak .\Mods\ModSkeletonExamplePluginA.pak

    I'm not sure how to fix it to make cooking not fail, and packaging to make the StageBuild. The cook command fails half way through, which they say is fine, but clearly is not. Would you know if there is a newer working example for 4.22?
    Last edited by MagicBots; 09-11-2019, 08:11 AM.

    Leave a comment:


  • replied
    Originally posted by BlueMountainsIO View Post

    Please show the output of the UnrealPak -List command. Also take a look at the documentaiton, the function LoadPakAssetRegistryFile is explained there. I would also suggest to try out the demo project.

    By the way, from my testing, it's not necessary to load the AssetRegistry.bin file manually. Just use the loading functions from this plugin and it will work.
    It is working to spawn my assets. They are downloading and mounting fine. The static meshes are only showing up in the asset registery only after being spawned once howerver, and BP's I can't register with assetRegistry yet.

    Here's an output of my UnrealPak.exe -List for an example asset:

    LogPakFile: Display: Using command line for crypto configuration
    LogPakFile: Display: Added 0 entries to add to pak file.
    LogPakFile: Display: Mount point ../../../Pod/Plugins/ModPlugin/Content/DLC/13034129-7933-4fb8-86a0-8fb876d20c72/
    LogPakFile: Display: "Cube.uasset" offset: 0, size: 1228 bytes, sha1: AEE2E38AACAA4C47A5E9E0F04EE6C20235235A1F, compression: Zlib.
    LogPakFile: Display: "Cube.uexp" offset: 1298, size: 2326 bytes, sha1: D5D6A206484825737425B2A2E88018959C2167AF, compression: Zlib.
    LogPakFile: Display: "M_Cube.uasset" offset: 3694, size: 504 bytes, sha1: 19929E4F09BCF08ECBF8FDA1927BE1E1A4B29AB3, compression: Zlib.
    LogPakFile: Display: "M_Cube.uexp" offset: 4268, size: 43501 bytes, sha1: F68F832E786E47CBB837FCEDC41066881636B344, compression: Zlib.
    LogPakFile: Display: 4 files (47559 bytes), (0 filtered bytes).
    LogPakFile: Display: Unreal pak executed in 0.005045 seconds
    Last edited by MagicBots; 09-11-2019, 09:42 PM.

    Leave a comment:


  • replied
    Originally posted by BlueMountainsIO View Post


    Unfortunately, the images you uploaded do not display.

    BlueMountainsIO Thats weird, Attached the images instead
    Is the ../../../ before the mount point important?
    Attached Files
    Last edited by Rareden; 09-11-2019, 07:19 AM.

    Leave a comment:


  • replied
    Originally posted by MagicBots View Post
    I have also been trying to simply move in the packaged content plugin to the packaged game plugin location, with the cooked AssetRegistry.bin placed where BlueMountainsIO plugin is expecting it according to the example. No success with having the registry successfully appended via the LoadPakAssetRegistry function thus far ... Hoping BlueMountainsIO can advise as to how that was working with his example which seems to also have the AssetRegistry.bin file being expected at a plugin location. Everything else is working, just not the registry..
    Please show the output of the UnrealPak -List command. Also take a look at the documentaiton, the function LoadPakAssetRegistryFile is explained there. I would also suggest to try out the demo project.

    By the way, from my testing, it's not necessary to load the AssetRegistry.bin file manually. Just use the loading functions from this plugin and it will work.

    Leave a comment:


  • replied
    Originally posted by MagicBots View Post

    Will test around today and see what I can find out.

    Unrelated questions:
    Wondering if there are any special considerations for mounting paks into my plugin, rather than main project content locations?

    For mounting paks to my plugin, i'm wondering if i should download the .paks into the WindowsNoEditor/<ProjectName>/Content/Paks/ folder, or if I should make the folder: WindowsNoEditor/<ProjectName>/<PluginName>/Content/Paks/ ..

    I guess I will need to change the mountPath in the actual .pak file while pakking if i change the download location.. but in general is it a better idea to just keep with <ProjectName>/Content/Paks location for downloading paks? So far I haven't had the automatic pak loading work for me at all, and I'm not sure why. If the automatic pak loading did actually work from <ProjectName>/Content/Paks/ then i'd leave my pak downloads location there, but otherwise, i'm thinking it'll be cleaner to move it under my plugins location and just create the appropriate folders. Does automatic pak mounting work for you? Is there any consideration for downloading paks to another locations such as my plugin location if i change the mountpaths during pak creation?

    Are there other considerations other than making sure the mountPath is set to proper content location where it was originally pak'd from with the "Mount Pak File", and that the rootpath and contentPath are also set to match to the plugin locations with the "Register Mount Point"?

    Edit:
    Answered my own question about pathing for plugin content by just trying it. Works fine, and in fact your example showed pathing for this. I still wonder about changing the location for the .paks to be in the plugin so it's more self contained, and about automatic loading..
    You would want to create a new folder because the FPaths::ProjectSavedDir()/Pak/ folder is mounted automatically by the engine.
    This is what this plugin was made for to manually mount paks.
    The location of the pak file on disk does not matter.

    Glad the example helped you.
    Originally posted by Rareden View Post
    BlueMountainsIO
    Im manually cooking and pak'ing the necessary files rather than using the content plugin cooking method, so i dont get a .bin specifically for the assets, might try merging the .bin made after cooking manually though, if theres a way to merge them.

    The path when i select the asset in the editor and copy reference is Blueprint'/Game/Avatars/New/BP_Bader.BP_Bader'
    When i pak the files i remove the complete path (D:/ProjectName/Saved/cooked/) and replace /Content/ With /Game so it becomes /Game/Avatars/New

    Image of the Pak List

     
    Spoiler


    Im not too sure what to set the register mount point to with this method, ive been leaving it as this
     
    Spoiler

    Ive tried /Game as well. If i just use / as the root the registry adds the paths included in the pak to its cached paths as
    Code:
    [2019.09.10-01.27.05:922][787]LogBlueprintUserMessages: /Game/Avatars/New
    [2019.09.10-01.27.05:923][787]LogBlueprintUserMessages: /Game/Avatars/New/Animations
    [2019.09.10-01.27.05:923][787]LogBlueprintUserMessages: /Game/Avatars/New/Materials
    [2019.09.10-01.27.05:924][787]LogBlueprintUserMessages: /Game/Avatars/New/Textures
    Unfortunately, the images you uploaded do not display.



    By the way, from my testing, it's not necessary to load the AssetRegistry.bin file manually. Just use the loading functions from this plugin and it will work.

    Leave a comment:


  • replied
    Originally posted by Cytokinetik View Post
    This may be of some help about learning the .pak system and asset registry:
    https://github.com/nakata0705/ModSkeleton
    Thanks I saw this today and was playing with a different fork of it. Is this the latest and greatest?

    I was playing with this one: https://github.com/calben/ModSkeleton
    ..and i saw they are just moving over their AssetRegistry.bin to the packaged location and associating with the plugin .pak file that way. Is that the standard practice?

    I have also been trying to simply move in the packaged content plugin to the packaged game plugin location, with the cooked AssetRegistry.bin placed where BlueMountainsIO plugin is expecting it according to the example. No success with having the registry successfully appended via the LoadPakAssetRegistry function thus far ... Hoping BlueMountainsIO can advise as to how that was working with his example which seems to also have the AssetRegistry.bin file being expected at a plugin location. Everything else is working, just not the registry..

    Packaging my Content Plugin via Tom Looman's Mod packaging example when trying the above..
    https://www.tomlooman.com/add-mod-su...engine-4-game/
    Last edited by MagicBots; 09-11-2019, 05:06 AM.

    Leave a comment:


  • replied
    This may be of some help about learning the .pak system and asset registry:
    https://github.com/nakata0705/ModSkeleton

    This was forked and updated from the original, it is a modding skeleton method. I think the assetregistry.bin for addon paks is also located and cooked inside of the .pak as well. I am not sure if that could cause a conflict. Using this .pak loader plugin along with the modskeleton method may help the process. The modskeleton allows adding .paks/mods without needing the original project at all...

    Regardless it is a good learning tool along with the .pakloader plugin,

    Leave a comment:


  • replied
    For me the AssetRegistry.bin isn't coming along to the packaged location. How does this normally get copied into the packaged location from the saved/cooked directory? I suppose it should be in the packaged location, otherwise how is it accessed at runtime? Maybe I'm missing a setting in my Project Launcher Custom Launch Profile? Sorry, first time learning about that AssetRegistry.bin so a little confused with why it's not where I'd expect it to be.

    Also my packaged location isn't in the project dir. Is that expected for this to work? Otherwise, not sure how a path like the example path for the LoadPakAssetRegistry function would work. Example path provided: (../../../TestProject/Plugins/TestDLC/AssetRegistry.bin).

    I suppose a way it could work to have a minimal AssetRegistry.bin file would be to build it with a unreal session with only the contents you want inside.. via a commandlet. That is if LoadPakAssetRegistry *merges* to the main asset registry?


    Edit:
    ​​​​​​​
    So I see that when I generate a patch for my content plugin i then have plugin specific AssetRegistry.bin in the cooked location for for the content plugin, but still not clear no standard process for getting that to come along for the ride at the packaged location.
    Last edited by MagicBots; 09-11-2019, 02:33 AM.

    Leave a comment:


  • replied
    Originally posted by MagicBots View Post
    Well I'm having the same problem as Rareden as I am also manually pak'ing the files. What creates the AssetRegistry.bin file, and is there a way to do it manually?
    The AssetRegistry.bin is generated when you cook, not sure how you could cut out all but the required assets from it due to it containing more than just paths

    Leave a comment:


  • replied
    Well I'm having the same problem as Rareden as I am also manually pak'ing the files. What creates the AssetRegistry.bin file, and is there a way to do it manually?

    Leave a comment:

Working...
X