Exemplo n.º 1
0
        private static void ChangeNormandyPaintings()
        {
            //BioA_Nor_230
            // BioT_NorHenMT Painting01_Diff
            // BioT_NorHenMT Painting02_Diff
            // Both square
            var nor230F = MERFileSystem.GetPackageFile("BioA_Nor_230.pcc");

            if (nor230F != null && File.Exists(nor230F))
            {
                var nor230P = MEPackageHandler.OpenMEPackage(nor230F);

                var painting1 = nor230P.FindExport("BioT_NorHenMT.Painting01_Diff");
                var painting2 = nor230P.FindExport("BioT_NorHenMT.Painting02_Diff");
                if (painting1 != null && painting2 != null)
                {
                    var assets = TFCBuilder.ListTextureAssets("Kasumi.NormandyPaintings").Select(x => $"Kasumi.NormandyPaintings.{x}").ToList();
                    assets.Shuffle();

                    RTexture2D r2d = new RTexture2D()
                    {
                        AllowedTextureAssetNames = assets,
                        LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_Environment", 1025), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    };

                    TFCBuilder.InstallTexture(r2d, painting1, assets.PullFirstItem());
                    TFCBuilder.InstallTexture(r2d, painting2, assets.PullFirstItem());

                    MERFileSystem.SavePackage(nor230P);
                }
            }
        }
Exemplo n.º 2
0
 private static void InstallARArtTextures(List <int> uindexes, List <string> assets, IMEPackage artGalleryP, string loggingName)
 {
     if (uindexes == null)
     {
         return;                   // This set is not installed
     }
     while (uindexes.Any())
     {
         if (!assets.Any())
         {
             Debug.WriteLine($"Not enough assets for {loggingName}! Need {uindexes.Count} more!");
             return;
         }
         var        uIndex    = uindexes.PullFirstItem();
         var        asset     = assets.PullFirstItem();
         var        texExport = artGalleryP.GetUExport(uIndex);
         RTexture2D r2d       = new RTexture2D()
         {
             LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_Environment", 1025), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
             AllowedTextureAssetNames = new List <string>()
             {
                 asset
             },
             TextureInstancedFullPath = texExport.InstancedFullPath // don't think this is used but just leave it here anyways.
         };
         TFCBuilder.InstallTexture(r2d, texExport, asset);
     }
 }
Exemplo n.º 3
0
        private static void InstallBorger()
        {
            var endGame3F = MERFileSystem.GetPackageFile("BioP_EndGm3.pcc");

            if (endGame3F != null && File.Exists(endGame3F))
            {
                var biopEndGm3 = MEPackageHandler.OpenMEPackage(endGame3F);

                var packageBin    = MERUtilities.GetEmbeddedStaticFilesBinaryFile("Delux2go_Edmonton_Burger.pcc");
                var burgerPackage = MEPackageHandler.OpenMEPackageFromStream(new MemoryStream(packageBin));

                // 1. Add the burger package
                var burgerMDL = PackageTools.PortExportIntoPackage(biopEndGm3, burgerPackage.FindExport("Edmonton_Burger_Delux2go.Burger_MDL"));

                // 2. Link up the textures
                TFCBuilder.RandomizeExport(biopEndGm3.FindExport("Edmonton_Burger_Delux2go.Textures.Burger_Diff"), null);
                TFCBuilder.RandomizeExport(biopEndGm3.FindExport("Edmonton_Burger_Delux2go.Textures.Burger_Norm"), null);
                TFCBuilder.RandomizeExport(biopEndGm3.FindExport("Edmonton_Burger_Delux2go.Textures.Burger_Spec"), null);

                // 3. Convert the collector base into lunch or possibly early dinner
                // It's early dinner cause that thing will keep you full all night long
                biopEndGm3.GetUExport(11276).WriteProperty(new ObjectProperty(burgerMDL.UIndex, "SkeletalMesh"));
                biopEndGm3.GetUExport(11282).WriteProperty(new ObjectProperty(burgerMDL.UIndex, "SkeletalMesh"));
                MERFileSystem.SavePackage(biopEndGm3);
            }
        }
Exemplo n.º 4
0
        private static void RandomizeArtGallery()
        {
            var wideAssets = TFCBuilder.ListTextureAssets("Kasumi.ArtGallery.wide").Select(x => $"Kasumi.ArtGallery.wide.{x}").ToList();
            var tallAssets = TFCBuilder.ListTextureAssets("Kasumi.ArtGallery.tall").Select(x => $"Kasumi.ArtGallery.tall.{x}").ToList();

            wideAssets.Shuffle();
            tallAssets.Shuffle();

            var artyGallery = GetKasumiArtGallerySetup();

            foreach (var kagf in artyGallery)
            {
                var artGalleryF = MERFileSystem.GetPackageFile(kagf.PackageName);
                if (artGalleryF != null && File.Exists(artGalleryF))
                {
                    var artGalleryP = MEPackageHandler.OpenMEPackage(artGalleryF);

                    // Rename instances so they're memory unique so we have a few more paintings
                    if (kagf.RenameMemoryInstances)
                    {
                        if (kagf.TallTextureUIndexes != null)
                        {
                            foreach (var uindex in kagf.TallTextureUIndexes)
                            {
                                if (!artGalleryP.GetUExport(uindex).IsTexture())
                                {
                                    Debugger.Break();
                                }
                                artGalleryP.GetUExport(uindex).ObjectName = $"ME2R_T_KASUMIPAINTING{ThreadSafeRandom.Next(15000)}";
                            }
                        }

                        // Rename mats so they're also unique
                        if (kagf.WideTextureUIndexes != null)
                        {
                            foreach (var uindex in kagf.WideTextureUIndexes)
                            {
                                if (!artGalleryP.GetUExport(uindex).IsTexture())
                                {
                                    Debugger.Break();
                                }
                                artGalleryP.GetUExport(uindex).ObjectName = $"ME2R_W_KASUMIPAINTING{ThreadSafeRandom.Next(15000)}";
                            }
                        }

                        if (kagf.MaterialUIndexes != null)
                        {
                            foreach (var uindex in kagf.MaterialUIndexes)
                            {
                                var exp = artGalleryP.GetUExport(uindex);
                                if (!exp.ClassName.Contains("Material"))
                                {
                                    Debugger.Break();
                                }
                                artGalleryP.GetUExport(uindex).ObjectName = $"ME2R_PAINTMAT_KASUMI{ThreadSafeRandom.Next(15000)}";
                            }
                        }
                    }

                    InstallARArtTextures(kagf.WideTextureUIndexes, wideAssets, artGalleryP, "Wide");
                    InstallARArtTextures(kagf.TallTextureUIndexes, tallAssets, artGalleryP, "Tall");

                    MERFileSystem.SavePackage(artGalleryP);
                }
            }
        }
Exemplo n.º 5
0
        public static void SetupME2Textures()
        {
            var options = new List <RTexture2D>
            {
                new RTexture2D
                {
                    // The orange datapad you see everyone holding
                    TextureInstancedFullPath = "BioApl_Dec_DataPad01.Materials.Datapad01_Screen",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "DatapadScreens.Datapad01_Screen.map.bin",
                        "DatapadScreens.Datapad01_Screen.monsterplan.bin",
                        "DatapadScreens.Datapad01_Screen.sizebounty.bin",
                        "DatapadScreens.Datapad01_Screen.thisisfine.bin",
                    }
                },
                new RTexture2D
                {
                    // The end-of-game datapad texture
                    TextureInstancedFullPath = "BioVFX_Env_End.Textures.Reaper_Display",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "DatapadScreens.Reaper_Display.fishdog_foodshack.bin",
                    }
                },
                new RTexture2D
                {
                    // The graphs that scroll by (H_Graphs)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_Graphs",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_Graphs.pizzaonion.bin",
                        "HoloScreens.H_Graphs.brandamazon.bin",
                    },
                    PreMountTexture = true
                },
                new RTexture2D
                {
                    // The graphs that scroll by, line and bar rchargs (H_Graphs3_5)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_Graphs2",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_Graphs2.neonbolt.bin",
                    },
                    PreMountTexture = false // Texture isn't used anywhere before DLC mount
                },
                new RTexture2D
                {
                    // The graphs that scroll by, line and bar rchargs (H_Graphs3_5)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_Graphs3_5",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_Graphs3_5.sonicburger.bin",
                    },
                    PreMountTexture = false // Texture isn't used anywhere before DLC mount
                },
                new RTexture2D
                {
                    // Vertically scrolling text (1)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_texts",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_texts.sourdough.bin",
                        "HoloScreens.H_texts.newspaper.bin",
                    },
                    PreMountTexture = true
                },
                new RTexture2D
                {
                    // Vertically scrolling text (2)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_texts_2",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_texts_2.vim.bin",
                    },
                    PreMountTexture = true
                },
                new RTexture2D
                {
                    // Vertically scrolling text (2)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.H_texts_3",
                    // purposely lower res than others.
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "HoloScreens.H_texts_3.visualstudio.bin",
                    },
                    PreMountTexture = false
                },
                new RTexture2D
                {
                    // The picture frame that archer holds up in Overlord DLC act 2 start
                    TextureInstancedFullPath = "BioVFX_Env_UNC_Pack01.Textures.archer_photograph",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "PictureFrames.scarymiranda.bin",
                        "PictureFrames.creepyshep.bin",
                        "PictureFrames.hungryillusiveman.bin",
                        "PictureFrames.monkaanderson.bin",
                        "PictureFrames.longfaceudina.bin",
                    }
                },
                new RTexture2D()
                {
                    // The picture shown on the screen in the beginning of overlord DLC
                    TextureInstancedFullPath = "BioVFX_Env_UNC_Pack01.Textures.UNC_1_Dish_Display",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_Promotional", 0), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Overlord.satimg1.bin",
                    }
                },
                new RTexture2D()
                {
                    // Liara Love Interest Pic (Only if no romance is chosen)
                    TextureInstancedFullPath = "BioVFX_Env_Hologram.Textures.Liara_1",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "PictureFrames.LoveInterests.steak.bin",
                    }
                },
                #region LOTSB
                new RTexture2D()
                {
                    // Liara Diploma
                    TextureInstancedFullPath = "BioS_Exp1Apt.APT_LIARADIP",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_VFX", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "LOTSB.LiaraDiploma.diploma.bin",
                    }
                },
                new RTexture2D()
                {
                    // ILOS painting
                    TextureInstancedFullPath = "BioS_Exp1Apt.APT_ILOSPAINTING",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "LOTSB.Painting.edge.bin",
                        "LOTSB.Painting.me1stylesp.bin",
                        "LOTSB.Painting.outsidethecity.bin",
                        "LOTSB.Painting.thesource.bin",
                    }
                },
                new RTexture2D()
                {
                    // What picture frame shep picks up turns into
                    TextureInstancedFullPath = "BioS_Exp1Apt.APT_PROTHDIG",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_Environment", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "LOTSB.PictureFrame.digsite.bin",
                    }
                },
                new RTexture2D()
                {
                    // Picture frame shep picks up
                    TextureInstancedFullPath = "BioS_Exp1Apt.NRM_SR1",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_Environment", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "LOTSB.PictureFrame.garage.bin",
                    }
                },
                #endregion
                #region Burger
                new RTexture2D()
                {
                    TextureInstancedFullPath = "Edmonton_Burger_Delux2go.Textures.Burger_Norm",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Burger.Norm.bin",
                    }
                },
                new RTexture2D()
                {
                    TextureInstancedFullPath = "Edmonton_Burger_Delux2go.Textures.Burger_Spec",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Burger.Spec.bin",
                    }
                },
                new RTexture2D()
                {
                    TextureInstancedFullPath = "Edmonton_Burger_Delux2go.Textures.Burger_Diff",
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Burger.Diff.bin",
                    }
                },
                new RTexture2D()
                {
                    TextureInstancedFullPath = "BioAPL_Dec_PlatesCup_Ceramic.Materials.Plates_NotUgly_Norm",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_APL", 513), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Burger.Plates_Norm.bin",
                    }
                },
                new RTexture2D()
                {
                    TextureInstancedFullPath = "BioAPL_Dec_PlatesCup_Ceramic.Materials.Plates_NotUgly_Diff",
                    LODGroup = new EnumProperty(new NameReference("TEXTUREGROUP_APL", 1025), "TextureGroup", MEGame.ME2, "LODGroup"), // A bit higher quality
                    AllowedTextureAssetNames = new List <string>
                    {
                        "Burger.Plates_Diff.bin",
                    }
                },
                #endregion
            };

            // Start the new TFC
            TFCBuilder.StartNewTFCs(options);
        }
        public static bool PortPawnIntoPackage(PortablePawn pawn, IMEPackage targetPackage)
        {
            if (IsPawnAssetInPackageAlready(pawn, targetPackage))
            {
                return(true); // Pawn asset to port in already ported in
            }

            IMEPackage pawnPackage = null;

            if (pawn.IsCorrectedPackage)
            {
                // DEBUG
                //if (pawn.PackageFilename == "BioPawn_Collector_Batarian.pcc")
                //{
                //    pawnPackage = MEPackageHandler.OpenMEPackage(@"C:\Users\mgame\source\repos\ME2Randomizer\ME2Randomizer\staticfiles\binary\correctedpawns\" + pawn.PackageFilename);
                //}
                //else
                //{
                var correctedPawnData = MERUtilities.GetEmbeddedStaticFilesBinaryFile($"correctedpawns.{pawn.PackageFilename}");
                pawnPackage = MEPackageHandler.OpenMEPackageFromStream(new MemoryStream(correctedPawnData));
                //}
            }
            else
            {
                var pF = MERFileSystem.GetPackageFile(pawn.PackageFilename);
                if (pF != null)
                {
                    pawnPackage = MERFileSystem.OpenMEPackage(pF);
                }
                else
                {
                    Debug.WriteLine("Pawn package not found: {pawn.PackageFilename}");
                }
            }

            if (pawnPackage != null)
            {
                PackageTools.PortExportIntoPackage(targetPackage, pawnPackage.FindExport(pawn.AssetToPortIn), useMemorySafeImport: !pawn.IsCorrectedPackage);

                // Ensure the assets are too as they may not be directly referenced except in the level instance
                foreach (var asset in pawn.AssetPaths)
                {
                    if (targetPackage.FindExport(asset) == null)
                    {
                        PackageTools.PortExportIntoPackage(targetPackage, pawnPackage.FindExport(asset), useMemorySafeImport: !pawn.IsCorrectedPackage);
                    }
                }

                if (pawn.TextureUpdates != null)
                {
                    foreach (var tu in pawn.TextureUpdates)
                    {
                        var targetTextureExp = targetPackage.FindExport(tu.TextureInstancedFullPath);
                        TFCBuilder.InstallTexture(tu, targetTextureExp);
                    }
                }

                return(true);
            }
            return(false);
        }