diff --git a/.gitignore b/.gitignore index 97c363277dd..fe1f2002593 100644 --- a/.gitignore +++ b/.gitignore @@ -85,6 +85,7 @@ $tf*/ *.so *.so.* *.dylib +*.dylib.* # Executables *.exe diff --git a/RevolutionaryGamesCommon b/RevolutionaryGamesCommon index 689e9c91829..12129d57d08 160000 --- a/RevolutionaryGamesCommon +++ b/RevolutionaryGamesCommon @@ -1 +1 @@ -Subproject commit 689e9c91829b980d0aff2c8cf9cf87bf91ccc99e +Subproject commit 12129d57d08ff111b1efc1bb30fbca3e68b43bf2 diff --git a/Scripts/NativeLibs.cs b/Scripts/NativeLibs.cs index d7fce905140..20113f60024 100644 --- a/Scripts/NativeLibs.cs +++ b/Scripts/NativeLibs.cs @@ -38,6 +38,8 @@ public class NativeLibs private const string ExtensionInstallFolder = "lib"; private const string ExtensionInstallFolderDebug = "lib/debug"; + private static readonly string[] MacArchitectures = ["x86_64", "arm64"]; + /// /// Default libraries to operate on when nothing is explicitly selected. This no longer includes the early checks /// library as a pure C# solution is used instead. @@ -71,6 +73,10 @@ public NativeLibs(Program.NativeLibOptions options) earlyCheckPrecompiledId = new Lazy>(GetEarlyCheckLibraryId); thriveExtensionPrecompiledId = new Lazy>(GetThriveExtensionLibraryId); + // Mac doesn't support AVX so it's force disabled + if (OperatingSystem.IsMacOS()) + options.DisableLocalAvx = true; + if (options.Libraries is { Count: < 1 }) { options.Libraries = null; @@ -98,7 +104,17 @@ public NativeLibs(Program.NativeLibOptions options) } // Set sensible default platform definitions - if (OperatingSystem.IsMacOS()) + if (this.options.Operations.Any(o => o == Program.NativeLibOptions.OperationMode.Fetch)) + { + // Fetching libraries is required for all platforms so all are specified here + ColourConsole.WriteNormalLine( + "Fetch is needed for all platforms so enabling all (when combined with other " + + "operations this may cause issues)"); + + platforms = new List + { PackagePlatform.Linux, PackagePlatform.Windows, PackagePlatform.Mac }; + } + else if (OperatingSystem.IsMacOS()) { // Mac stuff only can be done on a Mac platforms = new List { PackagePlatform.Mac }; @@ -208,6 +224,13 @@ public bool CopyToThriveRelease(string releaseFolder, PackagePlatform platform, foreach (var tag in new[] { baseTag, baseTag | PrecompiledTag.WithoutAvx }) { + // Mac doesn't have an avx variant + if (platform == PackagePlatform.Mac && (tag & PrecompiledTag.WithoutAvx) == 0) + { + ColourConsole.WriteDebugLine("Skipping trying to copy AVX library that won't exist for Mac"); + continue; + } + if (!CopyLibraryFiles(library, platform, useDistributableLibraries, targetFolder, tag)) { ColourConsole.WriteErrorLine($"Error copying library {library}"); @@ -222,6 +245,63 @@ public bool CopyToThriveRelease(string releaseFolder, PackagePlatform platform, return true; } + /// + /// Handles copying libraries installed by into a zip. Assumes zip is in + /// (probably fails otherwise) + /// + /// True on success + public async Task MoveInstalledLibrariesToZip(string folder, string releaseZip, string pathPrefixInZip, + CancellationToken cancellationToken) + { + var libFolder = Path.Join(folder, NativeConstants.PackagedLibraryFolder); + + if (!Directory.Exists(libFolder)) + { + ColourConsole.WriteErrorLine( + "Couldn't find the library folder at expected path (this copy-to-zip requires " + + "library install to be used first)"); + return false; + } + + // Assume all libraries are just written to the lib folder so we can add it entirely after moving the lib + // folder so that it has the prefix in front of it when put in the zip + var zipRelativePath = Path.Join(pathPrefixInZip, NativeConstants.PackagedLibraryFolder); + var localCopyParentFolder = Path.Combine(folder, pathPrefixInZip); + + if (Directory.Exists(localCopyParentFolder)) + Directory.Delete(localCopyParentFolder, true); + + Directory.CreateDirectory(localCopyParentFolder); + Directory.Move(libFolder, Path.Join(localCopyParentFolder, NativeConstants.PackagedLibraryFolder)); + + var startInfo = new ProcessStartInfo("zip") + { + WorkingDirectory = folder, + }; + startInfo.ArgumentList.Add("-9"); + startInfo.ArgumentList.Add("-u"); + + // Assume the zip is in the folder (need to add it recursively) + startInfo.ArgumentList.Add("-r"); + startInfo.ArgumentList.Add(Path.GetFileName(releaseZip)); + + startInfo.ArgumentList.Add(zipRelativePath); + + var result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, true); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"Running zip update failed (exit: {result.ExitCode}): {result.FullOutput}"); + return false; + } + + // Delete the no longer useful non-zip contents + Directory.Delete(localCopyParentFolder, true); + + ColourConsole.WriteSuccessLine("Native libraries moved to target zip"); + return true; + } + public async Task InstallEditorLibrariesBeforeRelease() { if (!await PerformLibraryInstallForEditor(NativeConstants.Library.ThriveExtension, PackagePlatform.Linux, true, @@ -236,6 +316,12 @@ public async Task InstallEditorLibrariesBeforeRelease() return false; } + if (!await PerformLibraryInstallForEditor(NativeConstants.Library.ThriveExtension, PackagePlatform.Mac, + true, false)) + { + return false; + } + ColourConsole.WriteSuccessLine("Editor libraries installed"); return true; } @@ -285,7 +371,7 @@ private async Task RunOperation(Program.NativeLibOptions.OperationMode ope return await OperateOnAllPlatforms(BuildPackageWithPodman, cancellationToken); } - throw new NotImplementedException("Creating release packages for mac is not done"); + return await PackageForMac(cancellationToken); case Program.NativeLibOptions.OperationMode.Upload: if (await OperateOnAllLibrariesWithResult(CheckAndUpload, cancellationToken) == true) @@ -638,19 +724,8 @@ private async Task BuildLocally(NativeConstants.Library library, PackagePl // Ensure Godot doesn't try to import anything funny from the build folder await PackageTool.EnsureGodotIgnoreFileExistsInFolder(buildFolder); - var apiFolder = Path.Join(buildFolder, APIFolderName); - Directory.CreateDirectory(apiFolder); - - if (!scriptsAPIFileCreated.Contains(apiFolder)) - { - if (!await CreateGodotAPIFileInFolder(apiFolder, cancellationToken)) - { - ColourConsole.WriteErrorLine("API file could not be created"); - return false; - } - - scriptsAPIFileCreated.Add(apiFolder); - } + if (!await CreateAPIFolderForBuild(buildFolder, cancellationToken)) + return false; var startInfo = new ProcessStartInfo("cmake") { @@ -797,6 +872,25 @@ private async Task BuildLocally(NativeConstants.Library library, PackagePl return true; } + private async Task CreateAPIFolderForBuild(string buildFolder, CancellationToken cancellationToken) + { + var apiFolder = Path.Join(buildFolder, APIFolderName); + Directory.CreateDirectory(apiFolder); + + if (!scriptsAPIFileCreated.Contains(apiFolder)) + { + if (!await CreateGodotAPIFileInFolder(apiFolder, cancellationToken)) + { + ColourConsole.WriteErrorLine("API file could not be created"); + return false; + } + + scriptsAPIFileCreated.Add(apiFolder); + } + + return true; + } + private bool CopyBuildResultLibraries(string installPath, PackagePlatform platform, NativeConstants.Library library) { if (!Directory.Exists(installPath)) @@ -1027,16 +1121,8 @@ private async Task BuildPackageWithPodman(PackagePlatform platform, Cancel { var source = GetPathToDistributableTempDll(library, platform, tag); - ColourConsole.WriteDebugLine($"Performing extraction on library: {source}"); - - if (!await symbolHandler.ExtractSymbols(source, "./", - platform is PackagePlatform.Windows or PackagePlatform.Windows32, cancellationToken)) - { - ColourConsole.WriteErrorLine( - "Symbol extraction failed. Are breakpad tools installed at the expected path?"); - + if (!await ExtractSymbols(source, platform, cancellationToken)) return false; - } } } } @@ -1088,6 +1174,312 @@ private async Task BuildPackageWithPodman(PackagePlatform platform, Cancel return true; } + private async Task ExtractSymbols(string binary, PackagePlatform platform, + CancellationToken cancellationToken) + { + ColourConsole.WriteDebugLine($"Performing extraction on library: {binary}"); + + if (platform == PackagePlatform.Mac) + { + // Mac needs to run extraction separately for each architecture + + foreach (var architecture in MacArchitectures) + { + symbolHandler.ExtractSpecificArchitecture = architecture; + + if (!await symbolHandler.ExtractSymbols(binary, "./", false, cancellationToken)) + { + ColourConsole.WriteErrorLine($"Symbol extraction failed (mac architecture: {architecture}. " + + "Are breakpad tools installed at the expected path?"); + + return false; + } + } + + symbolHandler.ExtractSpecificArchitecture = null; + } + else + { + if (!await symbolHandler.ExtractSymbols(binary, "./", + platform is PackagePlatform.Windows or PackagePlatform.Windows32, cancellationToken)) + { + ColourConsole.WriteErrorLine( + "Symbol extraction failed. Are breakpad tools installed at the expected path?"); + + return false; + } + } + + return true; + } + + private async Task PackageForMac(CancellationToken cancellationToken) + { + if (!OperatingSystem.IsMacOS()) + throw new InvalidOperationException("This platform is not supported (only mac can create mac builds)"); + + ColourConsole.WriteWarningLine( + "Creating Mac builds is only supported on Apple Silicon (M1 and newer) and may " + + "not work on other Macs"); + + if (!options.DisableLocalAvx) + { + ColourConsole.WriteNormalLine("Mac builds never use AVX"); + } + + var platform = PackagePlatform.Mac; + var compileBaseFolder = Path.GetFullPath(GetDistributableBuildFolderBase(platform)); + var baseInstallFolder = Path.Join(compileBaseFolder, "install"); + + var armInstallFolder = Path.Join(baseInstallFolder, "arm"); + var intelInstallFolder = Path.Join(baseInstallFolder, "intel"); + + // Setup all the needed folders + Directory.CreateDirectory(compileBaseFolder); + Directory.CreateDirectory(armInstallFolder); + Directory.CreateDirectory(intelInstallFolder); + + await CreateAPIFolderForBuild(compileBaseFolder, cancellationToken); + + ColourConsole.WriteNormalLine("Performing build for Intel architecture"); + + // ReSharper disable StringLiteralTypo + var cmakeCommon = new List + { + "-DTHRIVE_AVX=OFF", + options.DebugLibrary == true ? "-DCMAKE_BUILD_TYPE=Debug" : "-DCMAKE_BUILD_TYPE=Distribution", + }; + + if (!string.IsNullOrEmpty(options.Compiler)) + cmakeCommon.Add($"-DCMAKE_CXX_COMPILER={options.Compiler}"); + + if (!string.IsNullOrEmpty(options.CCompiler)) + cmakeCommon.Add($"-DCMAKE_C_COMPILER={options.CCompiler}"); + + // ReSharper restore StringLiteralTypo + + if (!string.IsNullOrEmpty(options.CmakeGenerator)) + { + cmakeCommon.Add("-G"); + cmakeCommon.Add(options.CmakeGenerator); + } + + cmakeCommon.Add(Path.GetFullPath(".")); + + var startInfo = new ProcessStartInfo("cmake") + { + WorkingDirectory = compileBaseFolder, + }; + + foreach (var common in cmakeCommon) + { + startInfo.ArgumentList.Add(common); + } + + // ReSharper disable StringLiteralTypo + startInfo.ArgumentList.Add($"-DCMAKE_INSTALL_PREFIX={intelInstallFolder}"); + startInfo.ArgumentList.Add("-DCMAKE_OSX_ARCHITECTURES=x86_64"); + startInfo.ArgumentList.Add("-DCMAKE_CXX_FLAGS=-march=sandybridge"); + + // ReSharper restore StringLiteralTypo + + var result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, false); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"CMake configuration failed (exit: {result.ExitCode}). " + + "Do you have the required build tools installed?"); + + return false; + } + + ColourConsole.WriteInfoLine("Compiling Intel version"); + + if (!await RunMacIndividualBuild(compileBaseFolder, cancellationToken)) + return false; + + ColourConsole.WriteSuccessLine("Compiled mac libraries for Intel architecture"); + + // Apple Silicon build next + ColourConsole.WriteNormalLine("Performing build for Apple Silicon (ARM) architecture"); + + startInfo = new ProcessStartInfo("cmake") + { + WorkingDirectory = compileBaseFolder, + }; + + foreach (var common in cmakeCommon) + { + startInfo.ArgumentList.Add(common); + } + + // ReSharper disable StringLiteralTypo + startInfo.ArgumentList.Add($"-DCMAKE_INSTALL_PREFIX={armInstallFolder}"); + startInfo.ArgumentList.Add("-DCMAKE_OSX_ARCHITECTURES=arm64"); + startInfo.ArgumentList.Add("-DCMAKE_CXX_FLAGS="); + + // ReSharper restore StringLiteralTypo + + result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, false); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"CMake configuration failed (exit: {result.ExitCode}). " + + "Do you have the required build tools installed?"); + + return false; + } + + ColourConsole.WriteInfoLine("Compiling Arm version"); + + if (!await RunMacIndividualBuild(compileBaseFolder, cancellationToken)) + return false; + + ColourConsole.WriteSuccessLine("Compiled mac libraries for Apple Silicon (ARM) architecture"); + ColourConsole.WriteInfoLine("All architectures compiled, will combine into single files next"); + + // Then some lipo action + ColourConsole.WriteNormalLine("Combining builds"); + + var libraries = options.Libraries ?? DefaultLibraries; + var tag = PrecompiledTag.WithoutAvx; + + if (options.DebugLibrary == true) + tag |= PrecompiledTag.Debug; + + foreach (var library in libraries) + { + var name = NativeConstants.GetLibraryDllName(library, platform, tag); + + ColourConsole.WriteNormalLine($"Lipo-ing: {name}"); + + var target = Path.Join(baseInstallFolder, LibraryBuildInstallPath(library, platform, tag)); + + Directory.CreateDirectory(Path.GetDirectoryName(target) ?? + throw new Exception("Couldn't detect target folder")); + + if (File.Exists(target)) + File.Delete(target); + + startInfo = new ProcessStartInfo("lipo"); + startInfo.ArgumentList.Add("-create"); + startInfo.ArgumentList.Add("-output"); + startInfo.ArgumentList.Add(Path.GetFullPath(target)); + startInfo.ArgumentList.Add(Path.GetFullPath(Path.Join(armInstallFolder, + LibraryBuildInstallPath(library, platform, tag)))); + startInfo.ArgumentList.Add(Path.GetFullPath(Path.Join(intelInstallFolder, + LibraryBuildInstallPath(library, platform, tag)))); + + result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, false); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"Failed to run lipo to combine libraries (exit: {result.ExitCode})"); + return false; + } + + cancellationToken.ThrowIfCancellationRequested(); + } + + ColourConsole.WriteSuccessLine("Successfully combined libraries"); + + ColourConsole.WriteNormalLine("Handling debug symbols"); + + if (options.DebugLibrary != true) + { + ColourConsole.WriteInfoLine( + "Extracting symbols (requires compiled Breakpad installed) and stripping binaries"); + + foreach (var library in libraries) + { + // There isn't a foreach loop here as mac never uses avx + + var source = Path.Join(baseInstallFolder, LibraryBuildInstallPath(library, platform, tag)); + + ColourConsole.WriteDebugLine($"Performing extraction on library: {source}"); + + if (!await ExtractSymbols(source, platform, cancellationToken)) + { + return false; + } + } + } + else + { + ColourConsole.WriteNormalLine("Skipping symbol extraction for debug build"); + } + + cancellationToken.ThrowIfCancellationRequested(); + + ColourConsole.WriteInfoLine("Copying built libraries to the right folder"); + + foreach (var library in libraries) + { + var version = NativeConstants.GetLibraryVersion(library); + + // Mac has only non-avx variants so need to copy just one thing per library + + var target = NativeConstants.GetPathToLibraryDll(library, platform, version, true, tag); + + var targetFolder = Path.GetDirectoryName(target) ?? + throw new Exception("Couldn't get folder from library install path"); + + Directory.CreateDirectory(targetFolder); + + var source = Path.Join(baseInstallFolder, LibraryBuildInstallPath(library, platform, tag)); + + File.Copy(source, target, true); + + ColourConsole.WriteDebugLine($"Copied {source} -> {target}"); + + if (options.DebugLibrary != true) + { + await BinaryHelpers.Strip(target, cancellationToken); + + ColourConsole.WriteNormalLine($"Stripped installed library at {target}"); + } + else + { + ColourConsole.WriteDebugLine("Not stripping a debug library"); + } + } + + ColourConsole.WriteSuccessLine("Successfully created Mac distributable library builds"); + return true; + } + + private async Task RunMacIndividualBuild(string folder, CancellationToken cancellationToken) + { + var startInfo = new ProcessStartInfo("cmake") + { + WorkingDirectory = folder, + }; + + startInfo.ArgumentList.Add("--build"); + + startInfo.ArgumentList.Add("."); + + startInfo.ArgumentList.Add("--config"); + startInfo.ArgumentList.Add(options.DebugLibrary == true ? "Debug" : "Distribution"); + + startInfo.ArgumentList.Add("--target"); + startInfo.ArgumentList.Add("install"); + + startInfo.ArgumentList.Add("-j"); + startInfo.ArgumentList.Add(Environment.ProcessorCount.ToString()); + + var result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, false); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"CMake build failed (exit: {result.ExitCode})"); + return false; + } + + ColourConsole.WriteNormalLine("Part of mac compile succeeded"); + return true; + } + private async Task CreateGodotAPIFileInFolder(string folder, CancellationToken cancellationToken) { if (!options.PrepareGodotAPI) @@ -1180,6 +1572,12 @@ private async Task CreateGodotAPIFileInFolder(string folder, CancellationT foreach (var tag in new[] { baseTag, baseTag | PrecompiledTag.WithoutAvx }) { + if (platform == PackagePlatform.Mac && (tag & PrecompiledTag.WithoutAvx) == 0) + { + ColourConsole.WriteNormalLine("Not trying to upload Mac with AVX as that is an unused configuration"); + continue; + } + var file = NativeConstants.GetPathToLibraryDll(library, platform, version, true, tag); if (!File.Exists(file)) @@ -1509,6 +1907,13 @@ private async Task DownloadLibraryIfMissing(NativeConstants.Library librar foreach (var tag in new[] { baseTag, baseTag | PrecompiledTag.WithoutAvx }) { + // Mac doesn't have AVX-using builds + if (platform == PackagePlatform.Mac && (tag & PrecompiledTag.WithoutAvx) == 0) + { + ColourConsole.WriteDebugLine("Mac doesn't have AVX builds, skipping"); + continue; + } + var file = NativeConstants.GetPathToLibraryDll(library, platform, version, true, tag); if (File.Exists(file)) diff --git a/Scripts/PackageTool.cs b/Scripts/PackageTool.cs index 258de99b564..0f58a024448 100644 --- a/Scripts/PackageTool.cs +++ b/Scripts/PackageTool.cs @@ -4,10 +4,12 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.IO.Compression; using System.Linq; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using DevCenterCommunication.Models.Enums; using DevCenterCommunication.Utilities; using ScriptsBase.Models; using ScriptsBase.ToolBases; @@ -28,6 +30,12 @@ public class PackageTool : PackageToolBase private const string MONO_IDENTIFIER = ".mono."; + private const string MAC_ZIP_LIBRARIES_PATH = "Thrive.app/Contents/MacOS"; + private const string MAC_ZIP_GD_EXTENSION_TARGET_PATH = "Thrive.app/Contents/MacOS"; + private const string MAC_MAIN_EXECUTABLE = "Thrive.app/Contents/MacOS/Thrive"; + + private const string MAC_ENTITLEMENTS = "Scripts/Thrive.entitlements"; + private static readonly Regex GodotVersionRegex = new(@"([\d\.]+)\..*mono"); private static readonly IReadOnlyList ThrivePlatforms = new List @@ -391,17 +399,18 @@ protected override async Task Export(PackagePlatform platform, string fold return false; } - var expectedFile = Path.Join(folder, ThriveProperties.GetThriveExecutableName(platform)); - - if (!File.Exists(expectedFile)) - { - ColourConsole.WriteErrorLine($"Expected Thrive executable ({expectedFile}) was not created on export. " + - "Are export templates installed?"); - return false; - } - if (platform != PackagePlatform.Mac) { + var expectedFile = Path.Join(folder, ThriveProperties.GetThriveExecutableName(platform)); + + if (!File.Exists(expectedFile)) + { + ColourConsole.WriteErrorLine( + $"Expected Thrive executable ({expectedFile}) was not created on export. " + + "Are export templates installed?"); + return false; + } + // Check .pck file exists var expectedPck = Path.Join(folder, EXPECTED_THRIVE_PCK_FILE); @@ -421,6 +430,18 @@ protected override async Task Export(PackagePlatform platform, string fold return false; } } + else + { + // TODO: it would be pretty nice to create a plain .app folder if possible as we need to re-zip it + // ourselves anyway for signing to work so one extra compression is a bit of an unnecessary step + + if (!File.Exists(MacZipInFolder(folder))) + { + ColourConsole.WriteErrorLine("Expected Thrive .zip for Mac was not created on export. " + + "Are export templates installed?"); + return false; + } + } ColourConsole.WriteSuccessLine("Godot export succeeded"); return true; @@ -518,6 +539,28 @@ protected override async Task OnPostProcessExportedFolder(PackagePlatform } } + if (platform == PackagePlatform.Mac) + { + ColourConsole.WriteNormalLine("Fixing Mac GDExtension by ourselves copying it into the .zip"); + + if (!await CopyGdExtensionToZip(folder, cancellationToken)) + return false; + + ColourConsole.WriteNormalLine("Copying native libraries into Thrive Mac .zip"); + if (!await nativeLibraryTool.MoveInstalledLibrariesToZip(folder, MacZipInFolder(folder), + MAC_ZIP_LIBRARIES_PATH, cancellationToken)) + { + ColourConsole.WriteErrorLine("Failed to move native libraries into zip"); + return false; + } + + // Make sure there isn't a confusing Thrive.app folder remaining + var unwantedApp = Path.Join(folder, "Thrive.app"); + + if (Directory.Exists(unwantedApp)) + Directory.Delete(unwantedApp, true); + } + ColourConsole.WriteSuccessLine("Native library operations succeeded"); return true; @@ -541,14 +584,14 @@ protected override async Task Compress(PackagePlatform platform, string fo { if (platform == PackagePlatform.Mac) { - ColourConsole.WriteInfoLine("Mac target is already zipped, moving it instead"); + ColourConsole.WriteInfoLine("Mac target is already zipped, will create a signed zip"); if (File.Exists(archiveFile)) File.Delete(archiveFile); - var sourceZip = MacZipInFolder(folder); + if (!await CreateAndSignMacZip(folder, archiveFile, cancellationToken)) + return false; - File.Move(sourceZip, archiveFile); return true; } @@ -650,6 +693,174 @@ private static string MacZipInFolder(string folder) return Path.Join(folder, "Thrive.zip"); } + /// + /// The Godot engine export for some reason doesn't put the extension to the right place on Mac, so we do that + /// ourselves. + /// + /// + /// The prepared Mac release folder that needs to already contain the Thrive.zip + /// + /// Cancellation + /// True on success + private async Task CopyGdExtensionToZip(string folder, CancellationToken cancellationToken) + { + var targetPath = Path.Join(folder, MAC_ZIP_GD_EXTENSION_TARGET_PATH); + + if (Directory.Exists(targetPath)) + Directory.Delete(targetPath, true); + + Directory.CreateDirectory(targetPath); + + var name = NativeConstants.GetLibraryDllName(NativeConstants.Library.ThriveExtension, PackagePlatform.Mac, + PrecompiledTag.WithoutAvx); + + // As the normal library install doesn't uselessly copy the extension file, we copy it here from the real + // storage location + File.Copy(NativeConstants.GetPathToLibraryDll(NativeConstants.Library.ThriveExtension, PackagePlatform.Mac, + NativeConstants.ExtensionVersion.ToString(), true, PrecompiledTag.WithoutAvx), + Path.Join(targetPath, name)); + + var startInfo = new ProcessStartInfo("zip") + { + WorkingDirectory = folder, + }; + startInfo.ArgumentList.Add("-9"); + startInfo.ArgumentList.Add("-u"); + startInfo.ArgumentList.Add(Path.GetFileName(MacZipInFolder(folder))); + + // Relative path to working directory to ensure correct copying + startInfo.ArgumentList.Add(Path.Join(MAC_ZIP_GD_EXTENSION_TARGET_PATH, name)); + + var result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, true); + + // Delete the temporary folder as the data either failed or is in the zip now + Directory.Delete(targetPath, true); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine($"Running zip update for GDExtension include failed " + + $"(exit: {result.ExitCode}): {result.FullOutput}"); + return false; + } + + return true; + } + + /// + /// Unzips the Godot-created zip, signs everything and then re-creates a new zip at the target location. This is + /// required as macOS otherwise detects the game as a broken app (due to signatures). + /// + /// True on success + private async Task CreateAndSignMacZip(string folder, string archiveFile, + CancellationToken cancellationToken) + { + var sourceZip = MacZipInFolder(folder); + + var parentFolder = Path.GetDirectoryName(archiveFile) ?? + throw new Exception("Unknown folder to create archive in"); + + var tempFolder = Path.Combine(parentFolder, "mac_temp_uncompressed"); + + if (Directory.Exists(tempFolder)) + Directory.Delete(tempFolder, true); + + Directory.CreateDirectory(tempFolder); + + ColourConsole.WriteDebugLine($"Using C# zip library to extract to temporary folder: {tempFolder}"); + using var archiveZip = new ZipArchive(File.OpenRead(sourceZip), ZipArchiveMode.Read, false); + archiveZip.ExtractToDirectory(tempFolder); + + ColourConsole.WriteInfoLine("Performing final signing for Mac build"); + + if (string.IsNullOrEmpty(options.MacSigningKey)) + { + ColourConsole.WriteWarningLine( + "Signing without a specific key for mac (this should work but in an optimal case " + + "a signing key would be set)"); + } + else + { + ColourConsole.WriteInfoLine($"Signing mac build with key {options.MacSigningKey}"); + } + + ColourConsole.WriteInfoLine("Signing all parts of the Mac build"); + ColourConsole.WriteNormalLine("This may take a while as there are many items"); + + foreach (var item in Directory.EnumerateFiles(tempFolder, "*.*", SearchOption.AllDirectories)) + { + // Skip stuff that shouldn't be signed + // TODO: would it offer any extra security if the .pck file was signed as well? + if (item.EndsWith(".txt") || item.EndsWith(".pck") || item.EndsWith(".md") || item.EndsWith(".7z")) + { + continue; + } + + // Main executable must be signed last + if (item.EndsWith(MAC_MAIN_EXECUTABLE)) + continue; + + if (!await BinaryHelpers.SignFileForMac(item, MAC_ENTITLEMENTS, options.MacSigningKey, + cancellationToken)) + { + ColourConsole.WriteErrorLine($"Failed to sign part of Mac build: {item}"); + return false; + } + } + + ColourConsole.WriteSuccessLine("Successfully signed individual parts"); + + // Sign the main file last + if (!await BinaryHelpers.SignFileForMac(Path.Join(tempFolder, MAC_MAIN_EXECUTABLE), MAC_ENTITLEMENTS, + options.MacSigningKey, + cancellationToken)) + { + ColourConsole.WriteErrorLine("Failed to sign main of Mac build"); + return false; + } + + ColourConsole.WriteSuccessLine("Signed the main file"); + + ColourConsole.WriteInfoLine("Creating final archive file from signed items"); + var startInfo = new ProcessStartInfo("zip") + { + WorkingDirectory = tempFolder, + }; + startInfo.ArgumentList.Add("-9"); + startInfo.ArgumentList.Add("-r"); + + startInfo.ArgumentList.Add(Path.GetFullPath(archiveFile)); + + foreach (var item in Directory.EnumerateFileSystemEntries(tempFolder)) + { + // Need to remove prefix to have items in relative path to the temp folder for zip process to work + startInfo.ArgumentList.Add(item.Substring(tempFolder.Length + 1)); + } + + var result = await ProcessRunHelpers.RunProcessAsync(startInfo, cancellationToken, true); + + // Delete the temp folder + Directory.Delete(tempFolder, true); + + if (result.ExitCode != 0) + { + ColourConsole.WriteErrorLine("Running final zip create failed " + + $"(exit: {result.ExitCode}): {result.FullOutput}"); + return false; + } + + ColourConsole.WriteInfoLine("Signing final zip"); + + if (!await BinaryHelpers.SignFileForMac(archiveFile, MAC_ENTITLEMENTS, options.MacSigningKey, + cancellationToken)) + { + ColourConsole.WriteErrorLine("Failed to sign Mac build"); + return false; + } + + ColourConsole.WriteSuccessLine("Signed Mac zip created"); + return true; + } + private async Task PrepareDehydratedFolder(PackagePlatform platform, string folder, CancellationToken cancellationToken) { diff --git a/Scripts/Program.cs b/Scripts/Program.cs index bc3197f4066..4e21fb76048 100644 --- a/Scripts/Program.cs +++ b/Scripts/Program.cs @@ -435,6 +435,10 @@ public class PackageOptions : PackageOptionsBase HelpText = "Fallback to using native library only meant for local play (not recommended for release)")] public bool FallbackToLocalNative { get; set; } + [Option("mac-signing-key", Default = null, + HelpText = "Use a specific signing key for mac builds (defaults to 'SelfSigned')")] + public string? MacSigningKey { get; set; } + [Option("skip-godot-check", Default = false, HelpText = "Skip checking if godot is installed and correct version and just try to use it")] public bool SkipGodotCheck { get; set; } diff --git a/Scripts/Scripts.csproj b/Scripts/Scripts.csproj index 368934ba3b5..a48edc365c0 100644 --- a/Scripts/Scripts.csproj +++ b/Scripts/Scripts.csproj @@ -19,7 +19,7 @@ - + diff --git a/Scripts/Thrive.entitlements b/Scripts/Thrive.entitlements new file mode 100644 index 00000000000..813bc502f77 --- /dev/null +++ b/Scripts/Thrive.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.automation.apple-events + + com.apple.security.cs.disable-library-validation + + + diff --git a/assets/textures/Axon.png.import b/assets/textures/Axon.png.import index bfb49836c42..d6129512c18 100644 --- a/assets/textures/Axon.png.import +++ b/assets/textures/Axon.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cluieg22tu25m" path.s3tc="res://.godot/imported/Axon.png-430d04205e2878dcdcf52bdc6d597d77.s3tc.ctex" +path.etc2="res://.godot/imported/Axon.png-430d04205e2878dcdcf52bdc6d597d77.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Axon.png" -dest_files=["res://.godot/imported/Axon.png-430d04205e2878dcdcf52bdc6d597d77.s3tc.ctex"] +dest_files=["res://.godot/imported/Axon.png-430d04205e2878dcdcf52bdc6d597d77.s3tc.ctex", "res://.godot/imported/Axon.png-430d04205e2878dcdcf52bdc6d597d77.etc2.ctex"] [params] diff --git a/assets/textures/BindingAgent.png.import b/assets/textures/BindingAgent.png.import index cb267e0b959..f02abc8fc75 100644 --- a/assets/textures/BindingAgent.png.import +++ b/assets/textures/BindingAgent.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dcbxfbcsp5wc" path.s3tc="res://.godot/imported/BindingAgent.png-fe1f11b2a50023d7d3874f9b4586bc98.s3tc.ctex" +path.etc2="res://.godot/imported/BindingAgent.png-fe1f11b2a50023d7d3874f9b4586bc98.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/BindingAgent.png" -dest_files=["res://.godot/imported/BindingAgent.png-fe1f11b2a50023d7d3874f9b4586bc98.s3tc.ctex"] +dest_files=["res://.godot/imported/BindingAgent.png-fe1f11b2a50023d7d3874f9b4586bc98.s3tc.ctex", "res://.godot/imported/BindingAgent.png-fe1f11b2a50023d7d3874f9b4586bc98.etc2.ctex"] [params] diff --git a/assets/textures/CarbonateMembrane.png.import b/assets/textures/CarbonateMembrane.png.import index 1b337ae1f3f..47136179ce6 100644 --- a/assets/textures/CarbonateMembrane.png.import +++ b/assets/textures/CarbonateMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://d22xai3cm2fma" path.s3tc="res://.godot/imported/CarbonateMembrane.png-538a785c36a50ea59ce06a41d8be5c43.s3tc.ctex" +path.etc2="res://.godot/imported/CarbonateMembrane.png-538a785c36a50ea59ce06a41d8be5c43.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CarbonateMembrane.png" -dest_files=["res://.godot/imported/CarbonateMembrane.png-538a785c36a50ea59ce06a41d8be5c43.s3tc.ctex"] +dest_files=["res://.godot/imported/CarbonateMembrane.png-538a785c36a50ea59ce06a41d8be5c43.s3tc.ctex", "res://.godot/imported/CarbonateMembrane.png-538a785c36a50ea59ce06a41d8be5c43.etc2.ctex"] [params] diff --git a/assets/textures/CarbonateMembraneDamaged.png.import b/assets/textures/CarbonateMembraneDamaged.png.import index e32cc17a8ad..db2bd16999c 100644 --- a/assets/textures/CarbonateMembraneDamaged.png.import +++ b/assets/textures/CarbonateMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://qm1ub2g0jhrb" path.s3tc="res://.godot/imported/CarbonateMembraneDamaged.png-945c27f65700edaac4fc9444233264d0.s3tc.ctex" +path.etc2="res://.godot/imported/CarbonateMembraneDamaged.png-945c27f65700edaac4fc9444233264d0.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CarbonateMembraneDamaged.png" -dest_files=["res://.godot/imported/CarbonateMembraneDamaged.png-945c27f65700edaac4fc9444233264d0.s3tc.ctex"] +dest_files=["res://.godot/imported/CarbonateMembraneDamaged.png-945c27f65700edaac4fc9444233264d0.s3tc.ctex", "res://.godot/imported/CarbonateMembraneDamaged.png-945c27f65700edaac4fc9444233264d0.etc2.ctex"] [params] diff --git a/assets/textures/CarbonateMembrane_normal.png.import b/assets/textures/CarbonateMembrane_normal.png.import index a38e2524ab6..31a78dab6ea 100644 --- a/assets/textures/CarbonateMembrane_normal.png.import +++ b/assets/textures/CarbonateMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bg6katk7fivds" path.s3tc="res://.godot/imported/CarbonateMembrane_normal.png-71b048a6b3843ea4591adf7614a02964.s3tc.ctex" +path.etc2="res://.godot/imported/CarbonateMembrane_normal.png-71b048a6b3843ea4591adf7614a02964.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CarbonateMembrane_normal.png" -dest_files=["res://.godot/imported/CarbonateMembrane_normal.png-71b048a6b3843ea4591adf7614a02964.s3tc.ctex"] +dest_files=["res://.godot/imported/CarbonateMembrane_normal.png-71b048a6b3843ea4591adf7614a02964.s3tc.ctex", "res://.godot/imported/CarbonateMembrane_normal.png-71b048a6b3843ea4591adf7614a02964.etc2.ctex"] [params] diff --git a/assets/textures/CelluloseMembrane.png.import b/assets/textures/CelluloseMembrane.png.import index 9c34a27c18c..b0f848e39af 100644 --- a/assets/textures/CelluloseMembrane.png.import +++ b/assets/textures/CelluloseMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://vl3iystmhirt" path.s3tc="res://.godot/imported/CelluloseMembrane.png-caad8ac6ada9383b24d49ebd8ec265e8.s3tc.ctex" +path.etc2="res://.godot/imported/CelluloseMembrane.png-caad8ac6ada9383b24d49ebd8ec265e8.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CelluloseMembrane.png" -dest_files=["res://.godot/imported/CelluloseMembrane.png-caad8ac6ada9383b24d49ebd8ec265e8.s3tc.ctex"] +dest_files=["res://.godot/imported/CelluloseMembrane.png-caad8ac6ada9383b24d49ebd8ec265e8.s3tc.ctex", "res://.godot/imported/CelluloseMembrane.png-caad8ac6ada9383b24d49ebd8ec265e8.etc2.ctex"] [params] diff --git a/assets/textures/CelluloseMembraneDamaged.png.import b/assets/textures/CelluloseMembraneDamaged.png.import index 70af3bd6757..e720cd768cd 100644 --- a/assets/textures/CelluloseMembraneDamaged.png.import +++ b/assets/textures/CelluloseMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://qks687uh6hxn" path.s3tc="res://.godot/imported/CelluloseMembraneDamaged.png-09beee4c3bdcf5a2f2cd0752eae3c6ea.s3tc.ctex" +path.etc2="res://.godot/imported/CelluloseMembraneDamaged.png-09beee4c3bdcf5a2f2cd0752eae3c6ea.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CelluloseMembraneDamaged.png" -dest_files=["res://.godot/imported/CelluloseMembraneDamaged.png-09beee4c3bdcf5a2f2cd0752eae3c6ea.s3tc.ctex"] +dest_files=["res://.godot/imported/CelluloseMembraneDamaged.png-09beee4c3bdcf5a2f2cd0752eae3c6ea.s3tc.ctex", "res://.godot/imported/CelluloseMembraneDamaged.png-09beee4c3bdcf5a2f2cd0752eae3c6ea.etc2.ctex"] [params] diff --git a/assets/textures/CelluloseMembrane_normal.png.import b/assets/textures/CelluloseMembrane_normal.png.import index 77320de5b94..6cc0def89a5 100644 --- a/assets/textures/CelluloseMembrane_normal.png.import +++ b/assets/textures/CelluloseMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6c8npv4082s6" path.s3tc="res://.godot/imported/CelluloseMembrane_normal.png-6051ee19cb9402f7f31b45bdde092e42.s3tc.ctex" +path.etc2="res://.godot/imported/CelluloseMembrane_normal.png-6051ee19cb9402f7f31b45bdde092e42.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/CelluloseMembrane_normal.png" -dest_files=["res://.godot/imported/CelluloseMembrane_normal.png-6051ee19cb9402f7f31b45bdde092e42.s3tc.ctex"] +dest_files=["res://.godot/imported/CelluloseMembrane_normal.png-6051ee19cb9402f7f31b45bdde092e42.s3tc.ctex", "res://.godot/imported/CelluloseMembrane_normal.png-6051ee19cb9402f7f31b45bdde092e42.etc2.ctex"] [params] diff --git a/assets/textures/Chemoplast.png.import b/assets/textures/Chemoplast.png.import index 171716c5366..9dbe5512757 100644 --- a/assets/textures/Chemoplast.png.import +++ b/assets/textures/Chemoplast.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://qh7cokct60go" path.s3tc="res://.godot/imported/Chemoplast.png-d103808ffdc944d0a0817ecc5be9a468.s3tc.ctex" +path.etc2="res://.godot/imported/Chemoplast.png-d103808ffdc944d0a0817ecc5be9a468.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Chemoplast.png" -dest_files=["res://.godot/imported/Chemoplast.png-d103808ffdc944d0a0817ecc5be9a468.s3tc.ctex"] +dest_files=["res://.godot/imported/Chemoplast.png-d103808ffdc944d0a0817ecc5be9a468.s3tc.ctex", "res://.godot/imported/Chemoplast.png-d103808ffdc944d0a0817ecc5be9a468.etc2.ctex"] [params] diff --git a/assets/textures/Chemoreceptor.png.import b/assets/textures/Chemoreceptor.png.import index bba4aa3b2c1..529e8f23fef 100644 --- a/assets/textures/Chemoreceptor.png.import +++ b/assets/textures/Chemoreceptor.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bnausuwteeftg" path.s3tc="res://.godot/imported/Chemoreceptor.png-d2d591eb3b761c7bbc0faf9b3c49d58b.s3tc.ctex" +path.etc2="res://.godot/imported/Chemoreceptor.png-d2d591eb3b761c7bbc0faf9b3c49d58b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Chemoreceptor.png" -dest_files=["res://.godot/imported/Chemoreceptor.png-d2d591eb3b761c7bbc0faf9b3c49d58b.s3tc.ctex"] +dest_files=["res://.godot/imported/Chemoreceptor.png-d2d591eb3b761c7bbc0faf9b3c49d58b.s3tc.ctex", "res://.godot/imported/Chemoreceptor.png-d2d591eb3b761c7bbc0faf9b3c49d58b.etc2.ctex"] [params] diff --git a/assets/textures/ChitinMembrane.png.import b/assets/textures/ChitinMembrane.png.import index 539b16e98e6..e1d1a981a27 100644 --- a/assets/textures/ChitinMembrane.png.import +++ b/assets/textures/ChitinMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b1lwfbacps1de" path.s3tc="res://.godot/imported/ChitinMembrane.png-3670a0f9839dcc0ed78ea9fa3fbce346.s3tc.ctex" +path.etc2="res://.godot/imported/ChitinMembrane.png-3670a0f9839dcc0ed78ea9fa3fbce346.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/ChitinMembrane.png" -dest_files=["res://.godot/imported/ChitinMembrane.png-3670a0f9839dcc0ed78ea9fa3fbce346.s3tc.ctex"] +dest_files=["res://.godot/imported/ChitinMembrane.png-3670a0f9839dcc0ed78ea9fa3fbce346.s3tc.ctex", "res://.godot/imported/ChitinMembrane.png-3670a0f9839dcc0ed78ea9fa3fbce346.etc2.ctex"] [params] diff --git a/assets/textures/ChitinMembraneDamaged.png.import b/assets/textures/ChitinMembraneDamaged.png.import index f7cce88a374..d178284e3c1 100644 --- a/assets/textures/ChitinMembraneDamaged.png.import +++ b/assets/textures/ChitinMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://1xj76e8066cu" path.s3tc="res://.godot/imported/ChitinMembraneDamaged.png-5492d00d09bd03dddc610e7c8a917a28.s3tc.ctex" +path.etc2="res://.godot/imported/ChitinMembraneDamaged.png-5492d00d09bd03dddc610e7c8a917a28.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/ChitinMembraneDamaged.png" -dest_files=["res://.godot/imported/ChitinMembraneDamaged.png-5492d00d09bd03dddc610e7c8a917a28.s3tc.ctex"] +dest_files=["res://.godot/imported/ChitinMembraneDamaged.png-5492d00d09bd03dddc610e7c8a917a28.s3tc.ctex", "res://.godot/imported/ChitinMembraneDamaged.png-5492d00d09bd03dddc610e7c8a917a28.etc2.ctex"] [params] diff --git a/assets/textures/ChitinMembrane_normal.png.import b/assets/textures/ChitinMembrane_normal.png.import index 71d5aa258c7..abc8205bf3a 100644 --- a/assets/textures/ChitinMembrane_normal.png.import +++ b/assets/textures/ChitinMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b0rfe6rx2nyfe" path.s3tc="res://.godot/imported/ChitinMembrane_normal.png-0ad1db7a496f6a0fa1dbe2712229f0ec.s3tc.ctex" +path.etc2="res://.godot/imported/ChitinMembrane_normal.png-0ad1db7a496f6a0fa1dbe2712229f0ec.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/ChitinMembrane_normal.png" -dest_files=["res://.godot/imported/ChitinMembrane_normal.png-0ad1db7a496f6a0fa1dbe2712229f0ec.s3tc.ctex"] +dest_files=["res://.godot/imported/ChitinMembrane_normal.png-0ad1db7a496f6a0fa1dbe2712229f0ec.s3tc.ctex", "res://.godot/imported/ChitinMembrane_normal.png-0ad1db7a496f6a0fa1dbe2712229f0ec.etc2.ctex"] [params] diff --git a/assets/textures/Chloroplast.png.import b/assets/textures/Chloroplast.png.import index b3e851908a4..a1db4c40645 100644 --- a/assets/textures/Chloroplast.png.import +++ b/assets/textures/Chloroplast.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b0h068d2232ak" path.s3tc="res://.godot/imported/Chloroplast.png-e36eb58b569491c4edad5a9237831866.s3tc.ctex" +path.etc2="res://.godot/imported/Chloroplast.png-e36eb58b569491c4edad5a9237831866.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Chloroplast.png" -dest_files=["res://.godot/imported/Chloroplast.png-e36eb58b569491c4edad5a9237831866.s3tc.ctex"] +dest_files=["res://.godot/imported/Chloroplast.png-e36eb58b569491c4edad5a9237831866.s3tc.ctex", "res://.godot/imported/Chloroplast.png-e36eb58b569491c4edad5a9237831866.etc2.ctex"] [params] diff --git a/assets/textures/Crystal.png.import b/assets/textures/Crystal.png.import index 5649353c47f..d38d00621a9 100644 --- a/assets/textures/Crystal.png.import +++ b/assets/textures/Crystal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c4givkmxrlllx" path.s3tc="res://.godot/imported/Crystal.png-b3465b3226a3e1ffc83d32e74cfbaa3f.s3tc.ctex" +path.etc2="res://.godot/imported/Crystal.png-b3465b3226a3e1ffc83d32e74cfbaa3f.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Crystal.png" -dest_files=["res://.godot/imported/Crystal.png-b3465b3226a3e1ffc83d32e74cfbaa3f.s3tc.ctex"] +dest_files=["res://.godot/imported/Crystal.png-b3465b3226a3e1ffc83d32e74cfbaa3f.s3tc.ctex", "res://.godot/imported/Crystal.png-b3465b3226a3e1ffc83d32e74cfbaa3f.etc2.ctex"] [params] diff --git a/assets/textures/Crystal_normal.png.import b/assets/textures/Crystal_normal.png.import index 0a7ec14c74f..3db813b7b50 100644 --- a/assets/textures/Crystal_normal.png.import +++ b/assets/textures/Crystal_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://ppco0jrr2v0q" path.s3tc="res://.godot/imported/Crystal_normal.png-f7c4888ff42d69b73ac89772d70c0178.s3tc.ctex" +path.etc2="res://.godot/imported/Crystal_normal.png-f7c4888ff42d69b73ac89772d70c0178.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Crystal_normal.png" -dest_files=["res://.godot/imported/Crystal_normal.png-f7c4888ff42d69b73ac89772d70c0178.s3tc.ctex"] +dest_files=["res://.godot/imported/Crystal_normal.png-f7c4888ff42d69b73ac89772d70c0178.s3tc.ctex", "res://.godot/imported/Crystal_normal.png-f7c4888ff42d69b73ac89772d70c0178.etc2.ctex"] [params] diff --git a/assets/textures/Crystal_rough_emit.png.import b/assets/textures/Crystal_rough_emit.png.import index d517f1ad4d8..330ae786b3e 100644 --- a/assets/textures/Crystal_rough_emit.png.import +++ b/assets/textures/Crystal_rough_emit.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dvp0yex8rwygn" path.s3tc="res://.godot/imported/Crystal_rough_emit.png-293d6eb9c72378a421d5574a28c9c8b3.s3tc.ctex" +path.etc2="res://.godot/imported/Crystal_rough_emit.png-293d6eb9c72378a421d5574a28c9c8b3.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Crystal_rough_emit.png" -dest_files=["res://.godot/imported/Crystal_rough_emit.png-293d6eb9c72378a421d5574a28c9c8b3.s3tc.ctex"] +dest_files=["res://.godot/imported/Crystal_rough_emit.png-293d6eb9c72378a421d5574a28c9c8b3.s3tc.ctex", "res://.godot/imported/Crystal_rough_emit.png-293d6eb9c72378a421d5574a28c9c8b3.etc2.ctex"] [params] diff --git a/assets/textures/DiscoBall.jpg.import b/assets/textures/DiscoBall.jpg.import index 328639788a5..40d9d9053d5 100644 --- a/assets/textures/DiscoBall.jpg.import +++ b/assets/textures/DiscoBall.jpg.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://v2yg0ivypjxx" path.s3tc="res://.godot/imported/DiscoBall.jpg-8327124a4e22478eb356852733abf897.s3tc.ctex" +path.etc2="res://.godot/imported/DiscoBall.jpg-8327124a4e22478eb356852733abf897.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/DiscoBall.jpg" -dest_files=["res://.godot/imported/DiscoBall.jpg-8327124a4e22478eb356852733abf897.s3tc.ctex"] +dest_files=["res://.godot/imported/DiscoBall.jpg-8327124a4e22478eb356852733abf897.s3tc.ctex", "res://.godot/imported/DiscoBall.jpg-8327124a4e22478eb356852733abf897.etc2.ctex"] [params] diff --git a/assets/textures/DoubleMembrane.png.import b/assets/textures/DoubleMembrane.png.import index 05515ad5088..1cde3ecf2b9 100644 --- a/assets/textures/DoubleMembrane.png.import +++ b/assets/textures/DoubleMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cuaou6m07rri7" path.s3tc="res://.godot/imported/DoubleMembrane.png-f2a8a15af2da0aea17cabf17eaffed38.s3tc.ctex" +path.etc2="res://.godot/imported/DoubleMembrane.png-f2a8a15af2da0aea17cabf17eaffed38.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/DoubleMembrane.png" -dest_files=["res://.godot/imported/DoubleMembrane.png-f2a8a15af2da0aea17cabf17eaffed38.s3tc.ctex"] +dest_files=["res://.godot/imported/DoubleMembrane.png-f2a8a15af2da0aea17cabf17eaffed38.s3tc.ctex", "res://.godot/imported/DoubleMembrane.png-f2a8a15af2da0aea17cabf17eaffed38.etc2.ctex"] [params] diff --git a/assets/textures/DoubleMembraneDamaged.png.import b/assets/textures/DoubleMembraneDamaged.png.import index 5d7c6d4be9a..a14a15f8ac7 100644 --- a/assets/textures/DoubleMembraneDamaged.png.import +++ b/assets/textures/DoubleMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://2lmqutwx7vd8" path.s3tc="res://.godot/imported/DoubleMembraneDamaged.png-a977266216db439ae91fe3779fa5bb93.s3tc.ctex" +path.etc2="res://.godot/imported/DoubleMembraneDamaged.png-a977266216db439ae91fe3779fa5bb93.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/DoubleMembraneDamaged.png" -dest_files=["res://.godot/imported/DoubleMembraneDamaged.png-a977266216db439ae91fe3779fa5bb93.s3tc.ctex"] +dest_files=["res://.godot/imported/DoubleMembraneDamaged.png-a977266216db439ae91fe3779fa5bb93.s3tc.ctex", "res://.godot/imported/DoubleMembraneDamaged.png-a977266216db439ae91fe3779fa5bb93.etc2.ctex"] [params] diff --git a/assets/textures/DoubleMembrane_normal.png.import b/assets/textures/DoubleMembrane_normal.png.import index 0163143e9dd..01ff6351e1f 100644 --- a/assets/textures/DoubleMembrane_normal.png.import +++ b/assets/textures/DoubleMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bbtak541l51yy" path.s3tc="res://.godot/imported/DoubleMembrane_normal.png-c15f451b99c6b138e7b4c3ea5318bf0e.s3tc.ctex" +path.etc2="res://.godot/imported/DoubleMembrane_normal.png-c15f451b99c6b138e7b4c3ea5318bf0e.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/DoubleMembrane_normal.png" -dest_files=["res://.godot/imported/DoubleMembrane_normal.png-c15f451b99c6b138e7b4c3ea5318bf0e.s3tc.ctex"] +dest_files=["res://.godot/imported/DoubleMembrane_normal.png-c15f451b99c6b138e7b4c3ea5318bf0e.s3tc.ctex", "res://.godot/imported/DoubleMembrane_normal.png-c15f451b99c6b138e7b4c3ea5318bf0e.etc2.ctex"] [params] diff --git a/assets/textures/FilamentousOrganelle.png.import b/assets/textures/FilamentousOrganelle.png.import index 18758beb8d8..c9d5aaf8096 100644 --- a/assets/textures/FilamentousOrganelle.png.import +++ b/assets/textures/FilamentousOrganelle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://1cvtjasc84ub" path.s3tc="res://.godot/imported/FilamentousOrganelle.png-5ba46f7ff51906eac473de0167e88704.s3tc.ctex" +path.etc2="res://.godot/imported/FilamentousOrganelle.png-5ba46f7ff51906eac473de0167e88704.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/FilamentousOrganelle.png" -dest_files=["res://.godot/imported/FilamentousOrganelle.png-5ba46f7ff51906eac473de0167e88704.s3tc.ctex"] +dest_files=["res://.godot/imported/FilamentousOrganelle.png-5ba46f7ff51906eac473de0167e88704.s3tc.ctex", "res://.godot/imported/FilamentousOrganelle.png-5ba46f7ff51906eac473de0167e88704.etc2.ctex"] [params] diff --git a/assets/textures/Hydrogenase.png.import b/assets/textures/Hydrogenase.png.import index c0750a437ab..a6a1f03c7dc 100644 --- a/assets/textures/Hydrogenase.png.import +++ b/assets/textures/Hydrogenase.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cyeu1ujr54dub" path.s3tc="res://.godot/imported/Hydrogenase.png-96bcbd34b6b93aae0b14905c50a60768.s3tc.ctex" +path.etc2="res://.godot/imported/Hydrogenase.png-96bcbd34b6b93aae0b14905c50a60768.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Hydrogenase.png" -dest_files=["res://.godot/imported/Hydrogenase.png-96bcbd34b6b93aae0b14905c50a60768.s3tc.ctex"] +dest_files=["res://.godot/imported/Hydrogenase.png-96bcbd34b6b93aae0b14905c50a60768.s3tc.ctex", "res://.godot/imported/Hydrogenase.png-96bcbd34b6b93aae0b14905c50a60768.etc2.ctex"] [params] diff --git a/assets/textures/IceChunk.png.import b/assets/textures/IceChunk.png.import index 4afd8daa320..49ff2d2ff73 100644 --- a/assets/textures/IceChunk.png.import +++ b/assets/textures/IceChunk.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dfw401vxsi10p" path.s3tc="res://.godot/imported/IceChunk.png-c3bfa53d726879cced4e329af185bde2.s3tc.ctex" +path.etc2="res://.godot/imported/IceChunk.png-c3bfa53d726879cced4e329af185bde2.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/IceChunk.png" -dest_files=["res://.godot/imported/IceChunk.png-c3bfa53d726879cced4e329af185bde2.s3tc.ctex"] +dest_files=["res://.godot/imported/IceChunk.png-c3bfa53d726879cced4e329af185bde2.s3tc.ctex", "res://.godot/imported/IceChunk.png-c3bfa53d726879cced4e329af185bde2.etc2.ctex"] [params] diff --git a/assets/textures/IronChunk_Depleted.png.import b/assets/textures/IronChunk_Depleted.png.import index 5cde2e69577..a0ddf0b1fb4 100644 --- a/assets/textures/IronChunk_Depleted.png.import +++ b/assets/textures/IronChunk_Depleted.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cynylcx1824be" path.s3tc="res://.godot/imported/IronChunk_Depleted.png-cea1f3e833f35eda15d5969b680540c8.s3tc.ctex" +path.etc2="res://.godot/imported/IronChunk_Depleted.png-cea1f3e833f35eda15d5969b680540c8.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/IronChunk_Depleted.png" -dest_files=["res://.godot/imported/IronChunk_Depleted.png-cea1f3e833f35eda15d5969b680540c8.s3tc.ctex"] +dest_files=["res://.godot/imported/IronChunk_Depleted.png-cea1f3e833f35eda15d5969b680540c8.s3tc.ctex", "res://.godot/imported/IronChunk_Depleted.png-cea1f3e833f35eda15d5969b680540c8.etc2.ctex"] [params] diff --git a/assets/textures/IronChunk_Full.png.import b/assets/textures/IronChunk_Full.png.import index 7f137105ca0..868e1020442 100644 --- a/assets/textures/IronChunk_Full.png.import +++ b/assets/textures/IronChunk_Full.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://btvaabw1tcq3d" path.s3tc="res://.godot/imported/IronChunk_Full.png-54d0a81dcf7349468cffb6d184bbfc7c.s3tc.ctex" +path.etc2="res://.godot/imported/IronChunk_Full.png-54d0a81dcf7349468cffb6d184bbfc7c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/IronChunk_Full.png" -dest_files=["res://.godot/imported/IronChunk_Full.png-54d0a81dcf7349468cffb6d184bbfc7c.s3tc.ctex"] +dest_files=["res://.godot/imported/IronChunk_Full.png-54d0a81dcf7349468cffb6d184bbfc7c.s3tc.ctex", "res://.godot/imported/IronChunk_Full.png-54d0a81dcf7349468cffb6d184bbfc7c.etc2.ctex"] [params] diff --git a/assets/textures/IronChunk_normal.png.import b/assets/textures/IronChunk_normal.png.import index 7c1de309771..133f2ded43c 100644 --- a/assets/textures/IronChunk_normal.png.import +++ b/assets/textures/IronChunk_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c4lakneio0v00" path.s3tc="res://.godot/imported/IronChunk_normal.png-3ffdd64aed38093ce18516b63d1f33d0.s3tc.ctex" +path.etc2="res://.godot/imported/IronChunk_normal.png-3ffdd64aed38093ce18516b63d1f33d0.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/IronChunk_normal.png" -dest_files=["res://.godot/imported/IronChunk_normal.png-3ffdd64aed38093ce18516b63d1f33d0.s3tc.ctex"] +dest_files=["res://.godot/imported/IronChunk_normal.png-3ffdd64aed38093ce18516b63d1f33d0.s3tc.ctex", "res://.godot/imported/IronChunk_normal.png-3ffdd64aed38093ce18516b63d1f33d0.etc2.ctex"] [params] diff --git a/assets/textures/IronOrganelle.png.import b/assets/textures/IronOrganelle.png.import index 996030c0ff0..565b81f6c5b 100644 --- a/assets/textures/IronOrganelle.png.import +++ b/assets/textures/IronOrganelle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://drqotu8ul3h8c" path.s3tc="res://.godot/imported/IronOrganelle.png-b39443b99db70079a7eecc95ae94a44e.s3tc.ctex" +path.etc2="res://.godot/imported/IronOrganelle.png-b39443b99db70079a7eecc95ae94a44e.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/IronOrganelle.png" -dest_files=["res://.godot/imported/IronOrganelle.png-b39443b99db70079a7eecc95ae94a44e.s3tc.ctex"] +dest_files=["res://.godot/imported/IronOrganelle.png-b39443b99db70079a7eecc95ae94a44e.s3tc.ctex", "res://.godot/imported/IronOrganelle.png-b39443b99db70079a7eecc95ae94a44e.etc2.ctex"] [params] diff --git a/assets/textures/Lysosome.png.import b/assets/textures/Lysosome.png.import index 286c3b7d0b0..6f49712b841 100644 --- a/assets/textures/Lysosome.png.import +++ b/assets/textures/Lysosome.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dmwdx5hfmr0ip" path.s3tc="res://.godot/imported/Lysosome.png-f77a81eb740572474a980a4bc863935d.s3tc.ctex" +path.etc2="res://.godot/imported/Lysosome.png-f77a81eb740572474a980a4bc863935d.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Lysosome.png" -dest_files=["res://.godot/imported/Lysosome.png-f77a81eb740572474a980a4bc863935d.s3tc.ctex"] +dest_files=["res://.godot/imported/Lysosome.png-f77a81eb740572474a980a4bc863935d.s3tc.ctex", "res://.godot/imported/Lysosome.png-f77a81eb740572474a980a4bc863935d.etc2.ctex"] [params] diff --git a/assets/textures/MembraneNormals.png.import b/assets/textures/MembraneNormals.png.import index 81b29a1d32a..13554f73616 100644 --- a/assets/textures/MembraneNormals.png.import +++ b/assets/textures/MembraneNormals.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bvxwsysj3kj2j" path.s3tc="res://.godot/imported/MembraneNormals.png-79a6e02b53d839e6a20ae911c0642680.s3tc.ctex" +path.etc2="res://.godot/imported/MembraneNormals.png-79a6e02b53d839e6a20ae911c0642680.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/MembraneNormals.png" -dest_files=["res://.godot/imported/MembraneNormals.png-79a6e02b53d839e6a20ae911c0642680.s3tc.ctex"] +dest_files=["res://.godot/imported/MembraneNormals.png-79a6e02b53d839e6a20ae911c0642680.s3tc.ctex", "res://.godot/imported/MembraneNormals.png-79a6e02b53d839e6a20ae911c0642680.etc2.ctex"] [params] diff --git a/assets/textures/Mitochondrion.png.import b/assets/textures/Mitochondrion.png.import index aa5be95e663..e1ba132844d 100644 --- a/assets/textures/Mitochondrion.png.import +++ b/assets/textures/Mitochondrion.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://deb04cuns82jr" path.s3tc="res://.godot/imported/Mitochondrion.png-e614a7fccddf23f4bda363e78342eff8.s3tc.ctex" +path.etc2="res://.godot/imported/Mitochondrion.png-e614a7fccddf23f4bda363e78342eff8.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Mitochondrion.png" -dest_files=["res://.godot/imported/Mitochondrion.png-e614a7fccddf23f4bda363e78342eff8.s3tc.ctex"] +dest_files=["res://.godot/imported/Mitochondrion.png-e614a7fccddf23f4bda363e78342eff8.s3tc.ctex", "res://.godot/imported/Mitochondrion.png-e614a7fccddf23f4bda363e78342eff8.etc2.ctex"] [params] diff --git a/assets/textures/Mucocyst.png.import b/assets/textures/Mucocyst.png.import index 5199bf78a25..a4cd7773707 100644 --- a/assets/textures/Mucocyst.png.import +++ b/assets/textures/Mucocyst.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://f2waack5uec7" path.s3tc="res://.godot/imported/Mucocyst.png-b2b76b6e21fe24daeaf83ff8b8be864d.s3tc.ctex" +path.etc2="res://.godot/imported/Mucocyst.png-b2b76b6e21fe24daeaf83ff8b8be864d.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Mucocyst.png" -dest_files=["res://.godot/imported/Mucocyst.png-b2b76b6e21fe24daeaf83ff8b8be864d.s3tc.ctex"] +dest_files=["res://.godot/imported/Mucocyst.png-b2b76b6e21fe24daeaf83ff8b8be864d.s3tc.ctex", "res://.godot/imported/Mucocyst.png-b2b76b6e21fe24daeaf83ff8b8be864d.etc2.ctex"] [params] diff --git a/assets/textures/Myofibril.png.import b/assets/textures/Myofibril.png.import index f3c56aca37d..46b18cc5cd1 100644 --- a/assets/textures/Myofibril.png.import +++ b/assets/textures/Myofibril.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cyvkcpdtij2q" path.s3tc="res://.godot/imported/Myofibril.png-4d7fe541f80cb6b54af43e4b1d51b4c9.s3tc.ctex" +path.etc2="res://.godot/imported/Myofibril.png-4d7fe541f80cb6b54af43e4b1d51b4c9.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Myofibril.png" -dest_files=["res://.godot/imported/Myofibril.png-4d7fe541f80cb6b54af43e4b1d51b4c9.s3tc.ctex"] +dest_files=["res://.godot/imported/Myofibril.png-4d7fe541f80cb6b54af43e4b1d51b4c9.s3tc.ctex", "res://.godot/imported/Myofibril.png-4d7fe541f80cb6b54af43e4b1d51b4c9.etc2.ctex"] [params] diff --git a/assets/textures/Nitroplast.png.import b/assets/textures/Nitroplast.png.import index a26e0852c08..ef3eb7f2720 100644 --- a/assets/textures/Nitroplast.png.import +++ b/assets/textures/Nitroplast.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://crxnr1pgmmyoo" path.s3tc="res://.godot/imported/Nitroplast.png-95261105fc7af40d3422a4d1a3baca46.s3tc.ctex" +path.etc2="res://.godot/imported/Nitroplast.png-95261105fc7af40d3422a4d1a3baca46.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Nitroplast.png" -dest_files=["res://.godot/imported/Nitroplast.png-95261105fc7af40d3422a4d1a3baca46.s3tc.ctex"] +dest_files=["res://.godot/imported/Nitroplast.png-95261105fc7af40d3422a4d1a3baca46.s3tc.ctex", "res://.godot/imported/Nitroplast.png-95261105fc7af40d3422a4d1a3baca46.etc2.ctex"] [params] diff --git a/assets/textures/Nucleus.png.import b/assets/textures/Nucleus.png.import index 2f0f936226d..4890fc4d9b4 100644 --- a/assets/textures/Nucleus.png.import +++ b/assets/textures/Nucleus.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bh1e6qrcmeoux" path.s3tc="res://.godot/imported/Nucleus.png-73b22ec614750061a15e2f4e5824d976.s3tc.ctex" +path.etc2="res://.godot/imported/Nucleus.png-73b22ec614750061a15e2f4e5824d976.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Nucleus.png" -dest_files=["res://.godot/imported/Nucleus.png-73b22ec614750061a15e2f4e5824d976.s3tc.ctex"] +dest_files=["res://.godot/imported/Nucleus.png-73b22ec614750061a15e2f4e5824d976.s3tc.ctex", "res://.godot/imported/Nucleus.png-73b22ec614750061a15e2f4e5824d976.etc2.ctex"] [params] diff --git a/assets/textures/SignalAgentAlbedo.png.import b/assets/textures/SignalAgentAlbedo.png.import index a7b28c9f1ac..2541822563a 100644 --- a/assets/textures/SignalAgentAlbedo.png.import +++ b/assets/textures/SignalAgentAlbedo.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dpoart80a28ef" path.s3tc="res://.godot/imported/SignalAgentAlbedo.png-3aceaf8ea630f135b687b75d7d956011.s3tc.ctex" +path.etc2="res://.godot/imported/SignalAgentAlbedo.png-3aceaf8ea630f135b687b75d7d956011.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SignalAgentAlbedo.png" -dest_files=["res://.godot/imported/SignalAgentAlbedo.png-3aceaf8ea630f135b687b75d7d956011.s3tc.ctex"] +dest_files=["res://.godot/imported/SignalAgentAlbedo.png-3aceaf8ea630f135b687b75d7d956011.s3tc.ctex", "res://.godot/imported/SignalAgentAlbedo.png-3aceaf8ea630f135b687b75d7d956011.etc2.ctex"] [params] diff --git a/assets/textures/SilicaMembrane.png.import b/assets/textures/SilicaMembrane.png.import index b0ef5a714af..84fa72745b2 100644 --- a/assets/textures/SilicaMembrane.png.import +++ b/assets/textures/SilicaMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c8cn2crkhla60" path.s3tc="res://.godot/imported/SilicaMembrane.png-22b9e9f47eb77b0419535834aefae9e7.s3tc.ctex" +path.etc2="res://.godot/imported/SilicaMembrane.png-22b9e9f47eb77b0419535834aefae9e7.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SilicaMembrane.png" -dest_files=["res://.godot/imported/SilicaMembrane.png-22b9e9f47eb77b0419535834aefae9e7.s3tc.ctex"] +dest_files=["res://.godot/imported/SilicaMembrane.png-22b9e9f47eb77b0419535834aefae9e7.s3tc.ctex", "res://.godot/imported/SilicaMembrane.png-22b9e9f47eb77b0419535834aefae9e7.etc2.ctex"] [params] diff --git a/assets/textures/SilicaMembraneDamaged.png.import b/assets/textures/SilicaMembraneDamaged.png.import index 0ea3a401597..55a9d803eba 100644 --- a/assets/textures/SilicaMembraneDamaged.png.import +++ b/assets/textures/SilicaMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b1jqllypq0n3v" path.s3tc="res://.godot/imported/SilicaMembraneDamaged.png-7d3f7da25be49b264dd78f78f5f776bd.s3tc.ctex" +path.etc2="res://.godot/imported/SilicaMembraneDamaged.png-7d3f7da25be49b264dd78f78f5f776bd.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SilicaMembraneDamaged.png" -dest_files=["res://.godot/imported/SilicaMembraneDamaged.png-7d3f7da25be49b264dd78f78f5f776bd.s3tc.ctex"] +dest_files=["res://.godot/imported/SilicaMembraneDamaged.png-7d3f7da25be49b264dd78f78f5f776bd.s3tc.ctex", "res://.godot/imported/SilicaMembraneDamaged.png-7d3f7da25be49b264dd78f78f5f776bd.etc2.ctex"] [params] diff --git a/assets/textures/SilicaMembrane_normal.png.import b/assets/textures/SilicaMembrane_normal.png.import index 89896a1d49a..b7a4cb6881e 100644 --- a/assets/textures/SilicaMembrane_normal.png.import +++ b/assets/textures/SilicaMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dsitd1hoam6bv" path.s3tc="res://.godot/imported/SilicaMembrane_normal.png-bc3e211a69c4e831545f1748b7c0c2f2.s3tc.ctex" +path.etc2="res://.godot/imported/SilicaMembrane_normal.png-bc3e211a69c4e831545f1748b7c0c2f2.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SilicaMembrane_normal.png" -dest_files=["res://.godot/imported/SilicaMembrane_normal.png-bc3e211a69c4e831545f1748b7c0c2f2.s3tc.ctex"] +dest_files=["res://.godot/imported/SilicaMembrane_normal.png-bc3e211a69c4e831545f1748b7c0c2f2.s3tc.ctex", "res://.godot/imported/SilicaMembrane_normal.png-bc3e211a69c4e831545f1748b7c0c2f2.etc2.ctex"] [params] diff --git a/assets/textures/SingleMembrane.png.import b/assets/textures/SingleMembrane.png.import index d5da4a7e600..fae4e034281 100644 --- a/assets/textures/SingleMembrane.png.import +++ b/assets/textures/SingleMembrane.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c4abs1j47umma" path.s3tc="res://.godot/imported/SingleMembrane.png-6bed67d82534a00ca509c7e11b4a9a8b.s3tc.ctex" +path.etc2="res://.godot/imported/SingleMembrane.png-6bed67d82534a00ca509c7e11b4a9a8b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SingleMembrane.png" -dest_files=["res://.godot/imported/SingleMembrane.png-6bed67d82534a00ca509c7e11b4a9a8b.s3tc.ctex"] +dest_files=["res://.godot/imported/SingleMembrane.png-6bed67d82534a00ca509c7e11b4a9a8b.s3tc.ctex", "res://.godot/imported/SingleMembrane.png-6bed67d82534a00ca509c7e11b4a9a8b.etc2.ctex"] [params] diff --git a/assets/textures/SingleMembraneDamaged.png.import b/assets/textures/SingleMembraneDamaged.png.import index 9be33043d5c..5f6b92983af 100644 --- a/assets/textures/SingleMembraneDamaged.png.import +++ b/assets/textures/SingleMembraneDamaged.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dnxx08njuvfha" path.s3tc="res://.godot/imported/SingleMembraneDamaged.png-d7f9acdca5b487b3eab7a0f3719546f0.s3tc.ctex" +path.etc2="res://.godot/imported/SingleMembraneDamaged.png-d7f9acdca5b487b3eab7a0f3719546f0.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SingleMembraneDamaged.png" -dest_files=["res://.godot/imported/SingleMembraneDamaged.png-d7f9acdca5b487b3eab7a0f3719546f0.s3tc.ctex"] +dest_files=["res://.godot/imported/SingleMembraneDamaged.png-d7f9acdca5b487b3eab7a0f3719546f0.s3tc.ctex", "res://.godot/imported/SingleMembraneDamaged.png-d7f9acdca5b487b3eab7a0f3719546f0.etc2.ctex"] [params] diff --git a/assets/textures/SingleMembrane_normal.png.import b/assets/textures/SingleMembrane_normal.png.import index 570fe08502c..14171a3339a 100644 --- a/assets/textures/SingleMembrane_normal.png.import +++ b/assets/textures/SingleMembrane_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://xoxv336btr26" path.s3tc="res://.godot/imported/SingleMembrane_normal.png-43155033b6cebef908a4bff039ae7725.s3tc.ctex" +path.etc2="res://.godot/imported/SingleMembrane_normal.png-43155033b6cebef908a4bff039ae7725.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SingleMembrane_normal.png" -dest_files=["res://.godot/imported/SingleMembrane_normal.png-43155033b6cebef908a4bff039ae7725.s3tc.ctex"] +dest_files=["res://.godot/imported/SingleMembrane_normal.png-43155033b6cebef908a4bff039ae7725.s3tc.ctex", "res://.godot/imported/SingleMembrane_normal.png-43155033b6cebef908a4bff039ae7725.etc2.ctex"] [params] diff --git a/assets/textures/SlimeJet.png.import b/assets/textures/SlimeJet.png.import index bd2d765e85e..95d22a46319 100644 --- a/assets/textures/SlimeJet.png.import +++ b/assets/textures/SlimeJet.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dhfbtptdm6tk2" path.s3tc="res://.godot/imported/SlimeJet.png-ac09b7a0aab0426a875a10cfaddf8ecd.s3tc.ctex" +path.etc2="res://.godot/imported/SlimeJet.png-ac09b7a0aab0426a875a10cfaddf8ecd.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/SlimeJet.png" -dest_files=["res://.godot/imported/SlimeJet.png-ac09b7a0aab0426a875a10cfaddf8ecd.s3tc.ctex"] +dest_files=["res://.godot/imported/SlimeJet.png-ac09b7a0aab0426a875a10cfaddf8ecd.s3tc.ctex", "res://.godot/imported/SlimeJet.png-ac09b7a0aab0426a875a10cfaddf8ecd.etc2.ctex"] [params] diff --git a/assets/textures/Thermoplast.png.import b/assets/textures/Thermoplast.png.import index c63a1c1142f..626ea709408 100644 --- a/assets/textures/Thermoplast.png.import +++ b/assets/textures/Thermoplast.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://hg3fqkcf4eda" path.s3tc="res://.godot/imported/Thermoplast.png-09abe615d0b5d247d10c337edd477d3b.s3tc.ctex" +path.etc2="res://.godot/imported/Thermoplast.png-09abe615d0b5d247d10c337edd477d3b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Thermoplast.png" -dest_files=["res://.godot/imported/Thermoplast.png-09abe615d0b5d247d10c337edd477d3b.s3tc.ctex"] +dest_files=["res://.godot/imported/Thermoplast.png-09abe615d0b5d247d10c337edd477d3b.s3tc.ctex", "res://.godot/imported/Thermoplast.png-09abe615d0b5d247d10c337edd477d3b.etc2.ctex"] [params] diff --git a/assets/textures/Thermoplast_emission.png.import b/assets/textures/Thermoplast_emission.png.import index 79523b45a6e..287ba6fa942 100644 --- a/assets/textures/Thermoplast_emission.png.import +++ b/assets/textures/Thermoplast_emission.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bstbqrrrojhhs" path.s3tc="res://.godot/imported/Thermoplast_emission.png-748e038f11d232064693680593098c85.s3tc.ctex" +path.etc2="res://.godot/imported/Thermoplast_emission.png-748e038f11d232064693680593098c85.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Thermoplast_emission.png" -dest_files=["res://.godot/imported/Thermoplast_emission.png-748e038f11d232064693680593098c85.s3tc.ctex"] +dest_files=["res://.godot/imported/Thermoplast_emission.png-748e038f11d232064693680593098c85.s3tc.ctex", "res://.godot/imported/Thermoplast_emission.png-748e038f11d232064693680593098c85.etc2.ctex"] [params] diff --git a/assets/textures/Thermosynthase_Diffuse.png.import b/assets/textures/Thermosynthase_Diffuse.png.import index 90d42b888a8..f8f131e1b35 100644 --- a/assets/textures/Thermosynthase_Diffuse.png.import +++ b/assets/textures/Thermosynthase_Diffuse.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c5baojqfoibtu" path.s3tc="res://.godot/imported/Thermosynthase_Diffuse.png-616228c50670c1ea11f0c1844d678a2c.s3tc.ctex" +path.etc2="res://.godot/imported/Thermosynthase_Diffuse.png-616228c50670c1ea11f0c1844d678a2c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Thermosynthase_Diffuse.png" -dest_files=["res://.godot/imported/Thermosynthase_Diffuse.png-616228c50670c1ea11f0c1844d678a2c.s3tc.ctex"] +dest_files=["res://.godot/imported/Thermosynthase_Diffuse.png-616228c50670c1ea11f0c1844d678a2c.s3tc.ctex", "res://.godot/imported/Thermosynthase_Diffuse.png-616228c50670c1ea11f0c1844d678a2c.etc2.ctex"] [params] diff --git a/assets/textures/ToxinVacuole.png.import b/assets/textures/ToxinVacuole.png.import index 80242fe5e70..65f972e3b33 100644 --- a/assets/textures/ToxinVacuole.png.import +++ b/assets/textures/ToxinVacuole.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cy5h6h7b5ru4o" path.s3tc="res://.godot/imported/ToxinVacuole.png-7c1a15e8459ca002a154255fd0a4088b.s3tc.ctex" +path.etc2="res://.godot/imported/ToxinVacuole.png-7c1a15e8459ca002a154255fd0a4088b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/ToxinVacuole.png" -dest_files=["res://.godot/imported/ToxinVacuole.png-7c1a15e8459ca002a154255fd0a4088b.s3tc.ctex"] +dest_files=["res://.godot/imported/ToxinVacuole.png-7c1a15e8459ca002a154255fd0a4088b.s3tc.ctex", "res://.godot/imported/ToxinVacuole.png-7c1a15e8459ca002a154255fd0a4088b.etc2.ctex"] [params] diff --git a/assets/textures/Vacuole.png.import b/assets/textures/Vacuole.png.import index 8d8d0953ff2..a96d8b883e1 100644 --- a/assets/textures/Vacuole.png.import +++ b/assets/textures/Vacuole.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://2hbye6cfsiaf" path.s3tc="res://.godot/imported/Vacuole.png-2f0a03b86a8306abc00a8536cabb2b2a.s3tc.ctex" +path.etc2="res://.godot/imported/Vacuole.png-2f0a03b86a8306abc00a8536cabb2b2a.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/Vacuole.png" -dest_files=["res://.godot/imported/Vacuole.png-2f0a03b86a8306abc00a8536cabb2b2a.s3tc.ctex"] +dest_files=["res://.godot/imported/Vacuole.png-2f0a03b86a8306abc00a8536cabb2b2a.s3tc.ctex", "res://.godot/imported/Vacuole.png-2f0a03b86a8306abc00a8536cabb2b2a.etc2.ctex"] [params] diff --git a/assets/textures/background_particle.png.import b/assets/textures/background_particle.png.import index cc3392f6795..d0f7814e96c 100644 --- a/assets/textures/background_particle.png.import +++ b/assets/textures/background_particle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dke03a0uyt6n" path.s3tc="res://.godot/imported/background_particle.png-a701bbdf3fbebf4126077f9f0585d923.s3tc.ctex" +path.etc2="res://.godot/imported/background_particle.png-a701bbdf3fbebf4126077f9f0585d923.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/background_particle.png" -dest_files=["res://.godot/imported/background_particle.png-a701bbdf3fbebf4126077f9f0585d923.s3tc.ctex"] +dest_files=["res://.godot/imported/background_particle.png-a701bbdf3fbebf4126077f9f0585d923.s3tc.ctex", "res://.godot/imported/background_particle.png-a701bbdf3fbebf4126077f9f0585d923.etc2.ctex"] [params] diff --git a/assets/textures/background_particle_fuzzy.png.import b/assets/textures/background_particle_fuzzy.png.import index 5457a3e5f95..06332b623f7 100644 --- a/assets/textures/background_particle_fuzzy.png.import +++ b/assets/textures/background_particle_fuzzy.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cai50f52nr8gw" path.s3tc="res://.godot/imported/background_particle_fuzzy.png-6aa828520bc3dccfda0af118b55a35ba.s3tc.ctex" +path.etc2="res://.godot/imported/background_particle_fuzzy.png-6aa828520bc3dccfda0af118b55a35ba.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/background_particle_fuzzy.png" -dest_files=["res://.godot/imported/background_particle_fuzzy.png-6aa828520bc3dccfda0af118b55a35ba.s3tc.ctex"] +dest_files=["res://.godot/imported/background_particle_fuzzy.png-6aa828520bc3dccfda0af118b55a35ba.s3tc.ctex", "res://.godot/imported/background_particle_fuzzy.png-6aa828520bc3dccfda0af118b55a35ba.etc2.ctex"] [params] diff --git a/assets/textures/blurry_circle.png.import b/assets/textures/blurry_circle.png.import index 6a3ec16b4d4..ec655ad0594 100644 --- a/assets/textures/blurry_circle.png.import +++ b/assets/textures/blurry_circle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bwks4coimg7al" path.s3tc="res://.godot/imported/blurry_circle.png-af7f77878080a66c7a65e52d4c9176f4.s3tc.ctex" +path.etc2="res://.godot/imported/blurry_circle.png-af7f77878080a66c7a65e52d4c9176f4.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/blurry_circle.png" -dest_files=["res://.godot/imported/blurry_circle.png-af7f77878080a66c7a65e52d4c9176f4.s3tc.ctex"] +dest_files=["res://.godot/imported/blurry_circle.png-af7f77878080a66c7a65e52d4c9176f4.s3tc.ctex", "res://.godot/imported/blurry_circle.png-af7f77878080a66c7a65e52d4c9176f4.etc2.ctex"] [params] diff --git a/assets/textures/bubble3.png.import b/assets/textures/bubble3.png.import index f67018bd690..ece314654ec 100644 --- a/assets/textures/bubble3.png.import +++ b/assets/textures/bubble3.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dd7k366lheo4f" path.s3tc="res://.godot/imported/bubble3.png-c2384b9345ebaca16f004bd0a284d047.s3tc.ctex" +path.etc2="res://.godot/imported/bubble3.png-c2384b9345ebaca16f004bd0a284d047.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/bubble3.png" -dest_files=["res://.godot/imported/bubble3.png-c2384b9345ebaca16f004bd0a284d047.s3tc.ctex"] +dest_files=["res://.godot/imported/bubble3.png-c2384b9345ebaca16f004bd0a284d047.s3tc.ctex", "res://.godot/imported/bubble3.png-c2384b9345ebaca16f004bd0a284d047.etc2.ctex"] [params] diff --git a/assets/textures/cytoplasm.png.import b/assets/textures/cytoplasm.png.import index 5de23073315..347e7ac6568 100644 --- a/assets/textures/cytoplasm.png.import +++ b/assets/textures/cytoplasm.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cj40olefxw00h" path.s3tc="res://.godot/imported/cytoplasm.png-f169e9376b827b9739b96ea1e3996f30.s3tc.ctex" +path.etc2="res://.godot/imported/cytoplasm.png-f169e9376b827b9739b96ea1e3996f30.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/cytoplasm.png" -dest_files=["res://.godot/imported/cytoplasm.png-f169e9376b827b9739b96ea1e3996f30.s3tc.ctex"] +dest_files=["res://.godot/imported/cytoplasm.png-f169e9376b827b9739b96ea1e3996f30.s3tc.ctex", "res://.godot/imported/cytoplasm.png-f169e9376b827b9739b96ea1e3996f30.etc2.ctex"] [params] diff --git a/assets/textures/environment/Terrain_01_Albedo.png.import b/assets/textures/environment/Terrain_01_Albedo.png.import index a7b85976f0e..23451d1804a 100644 --- a/assets/textures/environment/Terrain_01_Albedo.png.import +++ b/assets/textures/environment/Terrain_01_Albedo.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bguijfqnuki3m" path.s3tc="res://.godot/imported/Terrain_01_Albedo.png-99e85e40bff819d5c6072022f4f5b2b4.s3tc.ctex" +path.etc2="res://.godot/imported/Terrain_01_Albedo.png-99e85e40bff819d5c6072022f4f5b2b4.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/environment/Terrain_01_Albedo.png" -dest_files=["res://.godot/imported/Terrain_01_Albedo.png-99e85e40bff819d5c6072022f4f5b2b4.s3tc.ctex"] +dest_files=["res://.godot/imported/Terrain_01_Albedo.png-99e85e40bff819d5c6072022f4f5b2b4.s3tc.ctex", "res://.godot/imported/Terrain_01_Albedo.png-99e85e40bff819d5c6072022f4f5b2b4.etc2.ctex"] [params] diff --git a/assets/textures/environment/Terrain_01_Normals.png.import b/assets/textures/environment/Terrain_01_Normals.png.import index c72f0ae0601..13d8edb6887 100644 --- a/assets/textures/environment/Terrain_01_Normals.png.import +++ b/assets/textures/environment/Terrain_01_Normals.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://ccd7geklqgvfv" path.s3tc="res://.godot/imported/Terrain_01_Normals.png-b0b7b18e3bc2f7e1d1d1e15981e91fbe.s3tc.ctex" +path.etc2="res://.godot/imported/Terrain_01_Normals.png-b0b7b18e3bc2f7e1d1d1e15981e91fbe.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/environment/Terrain_01_Normals.png" -dest_files=["res://.godot/imported/Terrain_01_Normals.png-b0b7b18e3bc2f7e1d1d1e15981e91fbe.s3tc.ctex"] +dest_files=["res://.godot/imported/Terrain_01_Normals.png-b0b7b18e3bc2f7e1d1d1e15981e91fbe.s3tc.ctex", "res://.godot/imported/Terrain_01_Normals.png-b0b7b18e3bc2f7e1d1d1e15981e91fbe.etc2.ctex"] [params] diff --git a/assets/textures/environment/Terrain_02_Albedo.png.import b/assets/textures/environment/Terrain_02_Albedo.png.import index 64d1a2919bf..4acc113f8c6 100644 --- a/assets/textures/environment/Terrain_02_Albedo.png.import +++ b/assets/textures/environment/Terrain_02_Albedo.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c1sbymwyxg1jn" path.s3tc="res://.godot/imported/Terrain_02_Albedo.png-b8e832a91a0662c4d1502113a109b5ed.s3tc.ctex" +path.etc2="res://.godot/imported/Terrain_02_Albedo.png-b8e832a91a0662c4d1502113a109b5ed.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/environment/Terrain_02_Albedo.png" -dest_files=["res://.godot/imported/Terrain_02_Albedo.png-b8e832a91a0662c4d1502113a109b5ed.s3tc.ctex"] +dest_files=["res://.godot/imported/Terrain_02_Albedo.png-b8e832a91a0662c4d1502113a109b5ed.s3tc.ctex", "res://.godot/imported/Terrain_02_Albedo.png-b8e832a91a0662c4d1502113a109b5ed.etc2.ctex"] [params] diff --git a/assets/textures/environment/Terrain_02_Normals.png.import b/assets/textures/environment/Terrain_02_Normals.png.import index 91074419d85..b2907610e39 100644 --- a/assets/textures/environment/Terrain_02_Normals.png.import +++ b/assets/textures/environment/Terrain_02_Normals.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bd2vlm5yma24i" path.s3tc="res://.godot/imported/Terrain_02_Normals.png-f5a54953e4515fcf8f7d0aee134ba88f.s3tc.ctex" +path.etc2="res://.godot/imported/Terrain_02_Normals.png-f5a54953e4515fcf8f7d0aee134ba88f.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/environment/Terrain_02_Normals.png" -dest_files=["res://.godot/imported/Terrain_02_Normals.png-f5a54953e4515fcf8f7d0aee134ba88f.s3tc.ctex"] +dest_files=["res://.godot/imported/Terrain_02_Normals.png-f5a54953e4515fcf8f7d0aee134ba88f.s3tc.ctex", "res://.godot/imported/Terrain_02_Normals.png-f5a54953e4515fcf8f7d0aee134ba88f.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/BubbleTexture.png.import b/assets/textures/menu_backgrounds/BubbleTexture.png.import index 2a2006e1f52..ebc2762f028 100644 --- a/assets/textures/menu_backgrounds/BubbleTexture.png.import +++ b/assets/textures/menu_backgrounds/BubbleTexture.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bstw728ce0o20" path.s3tc="res://.godot/imported/BubbleTexture.png-d0646ccecdd6e3ef47d1b55847a18ad1.s3tc.ctex" +path.etc2="res://.godot/imported/BubbleTexture.png-d0646ccecdd6e3ef47d1b55847a18ad1.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/BubbleTexture.png" -dest_files=["res://.godot/imported/BubbleTexture.png-d0646ccecdd6e3ef47d1b55847a18ad1.s3tc.ctex"] +dest_files=["res://.godot/imported/BubbleTexture.png-d0646ccecdd6e3ef47d1b55847a18ad1.s3tc.ctex", "res://.godot/imported/BubbleTexture.png-d0646ccecdd6e3ef47d1b55847a18ad1.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/CloudsAlpha.png.import b/assets/textures/menu_backgrounds/CloudsAlpha.png.import index d9b226bc6d6..caa95c95cae 100644 --- a/assets/textures/menu_backgrounds/CloudsAlpha.png.import +++ b/assets/textures/menu_backgrounds/CloudsAlpha.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://7b7bqat8cfag" path.s3tc="res://.godot/imported/CloudsAlpha.png-a6d068a13e42b3c92f20dc92cd6180af.s3tc.ctex" +path.etc2="res://.godot/imported/CloudsAlpha.png-a6d068a13e42b3c92f20dc92cd6180af.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/CloudsAlpha.png" -dest_files=["res://.godot/imported/CloudsAlpha.png-a6d068a13e42b3c92f20dc92cd6180af.s3tc.ctex"] +dest_files=["res://.godot/imported/CloudsAlpha.png-a6d068a13e42b3c92f20dc92cd6180af.s3tc.ctex", "res://.godot/imported/CloudsAlpha.png-a6d068a13e42b3c92f20dc92cd6180af.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/MenuPlanet_Base_color.png.import b/assets/textures/menu_backgrounds/MenuPlanet_Base_color.png.import index 526dea7b3f5..af2a9b0aad3 100644 --- a/assets/textures/menu_backgrounds/MenuPlanet_Base_color.png.import +++ b/assets/textures/menu_backgrounds/MenuPlanet_Base_color.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://omojbhinobbj" path.s3tc="res://.godot/imported/MenuPlanet_Base_color.png-c946c226b368446a950b299d6de15b7a.s3tc.ctex" +path.etc2="res://.godot/imported/MenuPlanet_Base_color.png-c946c226b368446a950b299d6de15b7a.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/MenuPlanet_Base_color.png" -dest_files=["res://.godot/imported/MenuPlanet_Base_color.png-c946c226b368446a950b299d6de15b7a.s3tc.ctex"] +dest_files=["res://.godot/imported/MenuPlanet_Base_color.png-c946c226b368446a950b299d6de15b7a.s3tc.ctex", "res://.godot/imported/MenuPlanet_Base_color.png-c946c226b368446a950b299d6de15b7a.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/MenuPlanet_Normal.png.import b/assets/textures/menu_backgrounds/MenuPlanet_Normal.png.import index 735161262e9..fe17d8f8101 100644 --- a/assets/textures/menu_backgrounds/MenuPlanet_Normal.png.import +++ b/assets/textures/menu_backgrounds/MenuPlanet_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b4ei6c6wwa8c4" path.s3tc="res://.godot/imported/MenuPlanet_Normal.png-b3e7a4939c93762743c994d4b8bb56e3.s3tc.ctex" +path.etc2="res://.godot/imported/MenuPlanet_Normal.png-b3e7a4939c93762743c994d4b8bb56e3.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/MenuPlanet_Normal.png" -dest_files=["res://.godot/imported/MenuPlanet_Normal.png-b3e7a4939c93762743c994d4b8bb56e3.s3tc.ctex"] +dest_files=["res://.godot/imported/MenuPlanet_Normal.png-b3e7a4939c93762743c994d4b8bb56e3.s3tc.ctex", "res://.godot/imported/MenuPlanet_Normal.png-b3e7a4939c93762743c994d4b8bb56e3.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/MenuPlanet_Roughness.png.import b/assets/textures/menu_backgrounds/MenuPlanet_Roughness.png.import index 958c0a4c5f8..7327d658846 100644 --- a/assets/textures/menu_backgrounds/MenuPlanet_Roughness.png.import +++ b/assets/textures/menu_backgrounds/MenuPlanet_Roughness.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dd2xmhh6y4boy" path.s3tc="res://.godot/imported/MenuPlanet_Roughness.png-13fc96c28c8226eadff0e7871ad5c179.s3tc.ctex" +path.etc2="res://.godot/imported/MenuPlanet_Roughness.png-13fc96c28c8226eadff0e7871ad5c179.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/MenuPlanet_Roughness.png" -dest_files=["res://.godot/imported/MenuPlanet_Roughness.png-13fc96c28c8226eadff0e7871ad5c179.s3tc.ctex"] +dest_files=["res://.godot/imported/MenuPlanet_Roughness.png-13fc96c28c8226eadff0e7871ad5c179.s3tc.ctex", "res://.godot/imported/MenuPlanet_Roughness.png-13fc96c28c8226eadff0e7871ad5c179.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/PlanetClouds_Albedo_Opacity.png.import b/assets/textures/menu_backgrounds/PlanetClouds_Albedo_Opacity.png.import index 492e3fd894d..2ccac21fd6e 100644 --- a/assets/textures/menu_backgrounds/PlanetClouds_Albedo_Opacity.png.import +++ b/assets/textures/menu_backgrounds/PlanetClouds_Albedo_Opacity.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dgrmvarreasks" path.s3tc="res://.godot/imported/PlanetClouds_Albedo_Opacity.png-0502c9ee16e14c190315b2241dcc648d.s3tc.ctex" +path.etc2="res://.godot/imported/PlanetClouds_Albedo_Opacity.png-0502c9ee16e14c190315b2241dcc648d.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/PlanetClouds_Albedo_Opacity.png" -dest_files=["res://.godot/imported/PlanetClouds_Albedo_Opacity.png-0502c9ee16e14c190315b2241dcc648d.s3tc.ctex"] +dest_files=["res://.godot/imported/PlanetClouds_Albedo_Opacity.png-0502c9ee16e14c190315b2241dcc648d.s3tc.ctex", "res://.godot/imported/PlanetClouds_Albedo_Opacity.png-0502c9ee16e14c190315b2241dcc648d.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/PlanetClouds_Mat_Height.png.import b/assets/textures/menu_backgrounds/PlanetClouds_Mat_Height.png.import index bed51552f4d..5de1a544a93 100644 --- a/assets/textures/menu_backgrounds/PlanetClouds_Mat_Height.png.import +++ b/assets/textures/menu_backgrounds/PlanetClouds_Mat_Height.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dsawch0eh5rc4" path.s3tc="res://.godot/imported/PlanetClouds_Mat_Height.png-8cd3c740b8709902dbec33ad91e1c56c.s3tc.ctex" +path.etc2="res://.godot/imported/PlanetClouds_Mat_Height.png-8cd3c740b8709902dbec33ad91e1c56c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/PlanetClouds_Mat_Height.png" -dest_files=["res://.godot/imported/PlanetClouds_Mat_Height.png-8cd3c740b8709902dbec33ad91e1c56c.s3tc.ctex"] +dest_files=["res://.godot/imported/PlanetClouds_Mat_Height.png-8cd3c740b8709902dbec33ad91e1c56c.s3tc.ctex", "res://.godot/imported/PlanetClouds_Mat_Height.png-8cd3c740b8709902dbec33ad91e1c56c.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/PlanetClouds_Normal.png.import b/assets/textures/menu_backgrounds/PlanetClouds_Normal.png.import index 6c6044dbf71..3e22b55fe6e 100644 --- a/assets/textures/menu_backgrounds/PlanetClouds_Normal.png.import +++ b/assets/textures/menu_backgrounds/PlanetClouds_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bdm8ocmn6s0w7" path.s3tc="res://.godot/imported/PlanetClouds_Normal.png-48af57bca4dc9d611493585e40ca3821.s3tc.ctex" +path.etc2="res://.godot/imported/PlanetClouds_Normal.png-48af57bca4dc9d611493585e40ca3821.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/PlanetClouds_Normal.png" -dest_files=["res://.godot/imported/PlanetClouds_Normal.png-48af57bca4dc9d611493585e40ca3821.s3tc.ctex"] +dest_files=["res://.godot/imported/PlanetClouds_Normal.png-48af57bca4dc9d611493585e40ca3821.s3tc.ctex", "res://.godot/imported/PlanetClouds_Normal.png-48af57bca4dc9d611493585e40ca3821.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/Planet_Mat_Height.png.import b/assets/textures/menu_backgrounds/Planet_Mat_Height.png.import index d60fafc3bdf..d7736f595a9 100644 --- a/assets/textures/menu_backgrounds/Planet_Mat_Height.png.import +++ b/assets/textures/menu_backgrounds/Planet_Mat_Height.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dnjv3mdsq2cgy" path.s3tc="res://.godot/imported/Planet_Mat_Height.png-d753f6353a48d75d258607333b3f7f15.s3tc.ctex" +path.etc2="res://.godot/imported/Planet_Mat_Height.png-d753f6353a48d75d258607333b3f7f15.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/Planet_Mat_Height.png" -dest_files=["res://.godot/imported/Planet_Mat_Height.png-d753f6353a48d75d258607333b3f7f15.s3tc.ctex"] +dest_files=["res://.godot/imported/Planet_Mat_Height.png-d753f6353a48d75d258607333b3f7f15.s3tc.ctex", "res://.godot/imported/Planet_Mat_Height.png-d753f6353a48d75d258607333b3f7f15.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/RoundParticle.png.import b/assets/textures/menu_backgrounds/RoundParticle.png.import index fdf98e68f8c..9bf55de7af9 100644 --- a/assets/textures/menu_backgrounds/RoundParticle.png.import +++ b/assets/textures/menu_backgrounds/RoundParticle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bh2oogng6fs2u" path.s3tc="res://.godot/imported/RoundParticle.png-13711c1d2e764f7a8a70c01b686daba4.s3tc.ctex" +path.etc2="res://.godot/imported/RoundParticle.png-13711c1d2e764f7a8a70c01b686daba4.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/RoundParticle.png" -dest_files=["res://.godot/imported/RoundParticle.png-13711c1d2e764f7a8a70c01b686daba4.s3tc.ctex"] +dest_files=["res://.godot/imported/RoundParticle.png-13711c1d2e764f7a8a70c01b686daba4.s3tc.ctex", "res://.godot/imported/RoundParticle.png-13711c1d2e764f7a8a70c01b686daba4.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/SingleClouds.png.import b/assets/textures/menu_backgrounds/SingleClouds.png.import index cc2ff826c98..3b0aa2d81c7 100644 --- a/assets/textures/menu_backgrounds/SingleClouds.png.import +++ b/assets/textures/menu_backgrounds/SingleClouds.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://kloyvken30uu" path.s3tc="res://.godot/imported/SingleClouds.png-d4e361822307d42635d718b011aebbdd.s3tc.ctex" +path.etc2="res://.godot/imported/SingleClouds.png-d4e361822307d42635d718b011aebbdd.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/SingleClouds.png" -dest_files=["res://.godot/imported/SingleClouds.png-d4e361822307d42635d718b011aebbdd.s3tc.ctex"] +dest_files=["res://.godot/imported/SingleClouds.png-d4e361822307d42635d718b011aebbdd.s3tc.ctex", "res://.godot/imported/SingleClouds.png-d4e361822307d42635d718b011aebbdd.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/SingleClouds_Normal.png.import b/assets/textures/menu_backgrounds/SingleClouds_Normal.png.import index a9e439fdbe3..9d10fa65cd9 100644 --- a/assets/textures/menu_backgrounds/SingleClouds_Normal.png.import +++ b/assets/textures/menu_backgrounds/SingleClouds_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dhad2rl5f4478" path.s3tc="res://.godot/imported/SingleClouds_Normal.png-60ac6d3fb01a9876f0c50bf32c57c643.s3tc.ctex" +path.etc2="res://.godot/imported/SingleClouds_Normal.png-60ac6d3fb01a9876f0c50bf32c57c643.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/SingleClouds_Normal.png" -dest_files=["res://.godot/imported/SingleClouds_Normal.png-60ac6d3fb01a9876f0c50bf32c57c643.s3tc.ctex"] +dest_files=["res://.godot/imported/SingleClouds_Normal.png-60ac6d3fb01a9876f0c50bf32c57c643.s3tc.ctex", "res://.godot/imported/SingleClouds_Normal.png-60ac6d3fb01a9876f0c50bf32c57c643.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Base_color.png.import b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Base_color.png.import index d9f6bf622e5..6f3c2b643bd 100644 --- a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Base_color.png.import +++ b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Base_color.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://blitlbalyp3r2" path.s3tc="res://.godot/imported/UnderWaterChimney_1_Base_color.png-e612b85c15afad55f97c8a201fc4dbd2.s3tc.ctex" +path.etc2="res://.godot/imported/UnderWaterChimney_1_Base_color.png-e612b85c15afad55f97c8a201fc4dbd2.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderWaterChimney_1_Base_color.png" -dest_files=["res://.godot/imported/UnderWaterChimney_1_Base_color.png-e612b85c15afad55f97c8a201fc4dbd2.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderWaterChimney_1_Base_color.png-e612b85c15afad55f97c8a201fc4dbd2.s3tc.ctex", "res://.godot/imported/UnderWaterChimney_1_Base_color.png-e612b85c15afad55f97c8a201fc4dbd2.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Normal.png.import b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Normal.png.import index 267a3930cab..40dafd3fa00 100644 --- a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Normal.png.import +++ b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bkyg5fh4aafqu" path.s3tc="res://.godot/imported/UnderWaterChimney_1_Normal.png-56d796dacc723e860dbc2d179810fe47.s3tc.ctex" +path.etc2="res://.godot/imported/UnderWaterChimney_1_Normal.png-56d796dacc723e860dbc2d179810fe47.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderWaterChimney_1_Normal.png" -dest_files=["res://.godot/imported/UnderWaterChimney_1_Normal.png-56d796dacc723e860dbc2d179810fe47.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderWaterChimney_1_Normal.png-56d796dacc723e860dbc2d179810fe47.s3tc.ctex", "res://.godot/imported/UnderWaterChimney_1_Normal.png-56d796dacc723e860dbc2d179810fe47.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Roughness.png.import b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Roughness.png.import index 418ad9f6fbb..7ea00fb6868 100644 --- a/assets/textures/menu_backgrounds/UnderWaterChimney_1_Roughness.png.import +++ b/assets/textures/menu_backgrounds/UnderWaterChimney_1_Roughness.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dufsuu06gqa1j" path.s3tc="res://.godot/imported/UnderWaterChimney_1_Roughness.png-f386bbd482a6df7f461e803051a63065.s3tc.ctex" +path.etc2="res://.godot/imported/UnderWaterChimney_1_Roughness.png-f386bbd482a6df7f461e803051a63065.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderWaterChimney_1_Roughness.png" -dest_files=["res://.godot/imported/UnderWaterChimney_1_Roughness.png-f386bbd482a6df7f461e803051a63065.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderWaterChimney_1_Roughness.png-f386bbd482a6df7f461e803051a63065.s3tc.ctex", "res://.godot/imported/UnderWaterChimney_1_Roughness.png-f386bbd482a6df7f461e803051a63065.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderWaterChimney_2_Base_color.png.import b/assets/textures/menu_backgrounds/UnderWaterChimney_2_Base_color.png.import index 1426bba08b7..7eab04bcf68 100644 --- a/assets/textures/menu_backgrounds/UnderWaterChimney_2_Base_color.png.import +++ b/assets/textures/menu_backgrounds/UnderWaterChimney_2_Base_color.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://8ms0bvr6ores" path.s3tc="res://.godot/imported/UnderWaterChimney_2_Base_color.png-7c910ab7c147ac77db8412f724b4f2c8.s3tc.ctex" +path.etc2="res://.godot/imported/UnderWaterChimney_2_Base_color.png-7c910ab7c147ac77db8412f724b4f2c8.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderWaterChimney_2_Base_color.png" -dest_files=["res://.godot/imported/UnderWaterChimney_2_Base_color.png-7c910ab7c147ac77db8412f724b4f2c8.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderWaterChimney_2_Base_color.png-7c910ab7c147ac77db8412f724b4f2c8.s3tc.ctex", "res://.godot/imported/UnderWaterChimney_2_Base_color.png-7c910ab7c147ac77db8412f724b4f2c8.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderWaterChimney_2_Normal.png.import b/assets/textures/menu_backgrounds/UnderWaterChimney_2_Normal.png.import index fce9e7e9efb..d944248b52f 100644 --- a/assets/textures/menu_backgrounds/UnderWaterChimney_2_Normal.png.import +++ b/assets/textures/menu_backgrounds/UnderWaterChimney_2_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://ds25l1u0515lk" path.s3tc="res://.godot/imported/UnderWaterChimney_2_Normal.png-d473a7c924c9a764f03efd4e9e8b4b33.s3tc.ctex" +path.etc2="res://.godot/imported/UnderWaterChimney_2_Normal.png-d473a7c924c9a764f03efd4e9e8b4b33.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderWaterChimney_2_Normal.png" -dest_files=["res://.godot/imported/UnderWaterChimney_2_Normal.png-d473a7c924c9a764f03efd4e9e8b4b33.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderWaterChimney_2_Normal.png-d473a7c924c9a764f03efd4e9e8b4b33.s3tc.ctex", "res://.godot/imported/UnderWaterChimney_2_Normal.png-d473a7c924c9a764f03efd4e9e8b4b33.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderwaterParticle.png.import b/assets/textures/menu_backgrounds/UnderwaterParticle.png.import index 0ffe3c6977e..0d6650168e9 100644 --- a/assets/textures/menu_backgrounds/UnderwaterParticle.png.import +++ b/assets/textures/menu_backgrounds/UnderwaterParticle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://tss2on640obh" path.s3tc="res://.godot/imported/UnderwaterParticle.png-df30b2512265740020050dda1be71742.s3tc.ctex" +path.etc2="res://.godot/imported/UnderwaterParticle.png-df30b2512265740020050dda1be71742.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderwaterParticle.png" -dest_files=["res://.godot/imported/UnderwaterParticle.png-df30b2512265740020050dda1be71742.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderwaterParticle.png-df30b2512265740020050dda1be71742.s3tc.ctex", "res://.godot/imported/UnderwaterParticle.png-df30b2512265740020050dda1be71742.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderwaterSoil_Base_color.png.import b/assets/textures/menu_backgrounds/UnderwaterSoil_Base_color.png.import index d6b17e7c0cd..1fd1aa3bf61 100644 --- a/assets/textures/menu_backgrounds/UnderwaterSoil_Base_color.png.import +++ b/assets/textures/menu_backgrounds/UnderwaterSoil_Base_color.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dnl0rj3iho2mq" path.s3tc="res://.godot/imported/UnderwaterSoil_Base_color.png-ef5eaa425929ceba9a3af402e2db9c9d.s3tc.ctex" +path.etc2="res://.godot/imported/UnderwaterSoil_Base_color.png-ef5eaa425929ceba9a3af402e2db9c9d.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderwaterSoil_Base_color.png" -dest_files=["res://.godot/imported/UnderwaterSoil_Base_color.png-ef5eaa425929ceba9a3af402e2db9c9d.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderwaterSoil_Base_color.png-ef5eaa425929ceba9a3af402e2db9c9d.s3tc.ctex", "res://.godot/imported/UnderwaterSoil_Base_color.png-ef5eaa425929ceba9a3af402e2db9c9d.etc2.ctex"] [params] diff --git a/assets/textures/menu_backgrounds/UnderwaterSoil_Normal.png.import b/assets/textures/menu_backgrounds/UnderwaterSoil_Normal.png.import index 13a485e0e3e..8858e76838a 100644 --- a/assets/textures/menu_backgrounds/UnderwaterSoil_Normal.png.import +++ b/assets/textures/menu_backgrounds/UnderwaterSoil_Normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://xqbmpxl56ysw" path.s3tc="res://.godot/imported/UnderwaterSoil_Normal.png-e0f3ddfbb208a085e34ddc4874842e7c.s3tc.ctex" +path.etc2="res://.godot/imported/UnderwaterSoil_Normal.png-e0f3ddfbb208a085e34ddc4874842e7c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/menu_backgrounds/UnderwaterSoil_Normal.png" -dest_files=["res://.godot/imported/UnderwaterSoil_Normal.png-e0f3ddfbb208a085e34ddc4874842e7c.s3tc.ctex"] +dest_files=["res://.godot/imported/UnderwaterSoil_Normal.png-e0f3ddfbb208a085e34ddc4874842e7c.s3tc.ctex", "res://.godot/imported/UnderwaterSoil_Normal.png-e0f3ddfbb208a085e34ddc4874842e7c.etc2.ctex"] [params] diff --git a/assets/textures/metabolosome.png.import b/assets/textures/metabolosome.png.import index e413567449c..bd2192784a2 100644 --- a/assets/textures/metabolosome.png.import +++ b/assets/textures/metabolosome.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c7edib5xumkdm" path.s3tc="res://.godot/imported/metabolosome.png-03a574ee26c6c1562c8dbf40647869c4.s3tc.ctex" +path.etc2="res://.godot/imported/metabolosome.png-03a574ee26c6c1562c8dbf40647869c4.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/metabolosome.png" -dest_files=["res://.godot/imported/metabolosome.png-03a574ee26c6c1562c8dbf40647869c4.s3tc.ctex"] +dest_files=["res://.godot/imported/metabolosome.png-03a574ee26c6c1562c8dbf40647869c4.s3tc.ctex", "res://.godot/imported/metabolosome.png-03a574ee26c6c1562c8dbf40647869c4.etc2.ctex"] [params] diff --git a/assets/textures/shard_particle.png.import b/assets/textures/shard_particle.png.import index 2cba6a7006d..c960ae198f4 100644 --- a/assets/textures/shard_particle.png.import +++ b/assets/textures/shard_particle.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://c15l8f35mpwph" path.s3tc="res://.godot/imported/shard_particle.png-ff0d01b442499cc1fbdd1c2ea05af9e1.s3tc.ctex" +path.etc2="res://.godot/imported/shard_particle.png-ff0d01b442499cc1fbdd1c2ea05af9e1.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/shard_particle.png" -dest_files=["res://.godot/imported/shard_particle.png-ff0d01b442499cc1fbdd1c2ea05af9e1.s3tc.ctex"] +dest_files=["res://.godot/imported/shard_particle.png-ff0d01b442499cc1fbdd1c2ea05af9e1.s3tc.ctex", "res://.godot/imported/shard_particle.png-ff0d01b442499cc1fbdd1c2ea05af9e1.etc2.ctex"] [params] diff --git a/assets/textures/single_hex.png.import b/assets/textures/single_hex.png.import index 19518242efd..ef92955f12d 100644 --- a/assets/textures/single_hex.png.import +++ b/assets/textures/single_hex.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://b56mej3syju8q" path.s3tc="res://.godot/imported/single_hex.png-e2d02829c2d11f13410ab70a139844cc.s3tc.ctex" +path.etc2="res://.godot/imported/single_hex.png-e2d02829c2d11f13410ab70a139844cc.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/single_hex.png" -dest_files=["res://.godot/imported/single_hex.png-e2d02829c2d11f13410ab70a139844cc.s3tc.ctex"] +dest_files=["res://.godot/imported/single_hex.png-e2d02829c2d11f13410ab70a139844cc.s3tc.ctex", "res://.godot/imported/single_hex.png-e2d02829c2d11f13410ab70a139844cc.etc2.ctex"] [params] diff --git a/assets/textures/single_hex_invalid.png.import b/assets/textures/single_hex_invalid.png.import index 42d4c8fe6c3..95c21247d73 100644 --- a/assets/textures/single_hex_invalid.png.import +++ b/assets/textures/single_hex_invalid.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://dwf0vp3mtigq6" path.s3tc="res://.godot/imported/single_hex_invalid.png-5a5ffbeaf2a51e7c9d33a3df486a317c.s3tc.ctex" +path.etc2="res://.godot/imported/single_hex_invalid.png-5a5ffbeaf2a51e7c9d33a3df486a317c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/single_hex_invalid.png" -dest_files=["res://.godot/imported/single_hex_invalid.png-5a5ffbeaf2a51e7c9d33a3df486a317c.s3tc.ctex"] +dest_files=["res://.godot/imported/single_hex_invalid.png-5a5ffbeaf2a51e7c9d33a3df486a317c.s3tc.ctex", "res://.godot/imported/single_hex_invalid.png-5a5ffbeaf2a51e7c9d33a3df486a317c.etc2.ctex"] [params] diff --git a/assets/textures/snowflake.png.import b/assets/textures/snowflake.png.import index b0b27e43a6e..054504ac745 100644 --- a/assets/textures/snowflake.png.import +++ b/assets/textures/snowflake.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bb51glw64iqe2" path.s3tc="res://.godot/imported/snowflake.png-ea721887558e74bce4b43091624438fe.s3tc.ctex" +path.etc2="res://.godot/imported/snowflake.png-ea721887558e74bce4b43091624438fe.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/snowflake.png" -dest_files=["res://.godot/imported/snowflake.png-ea721887558e74bce4b43091624438fe.s3tc.ctex"] +dest_files=["res://.godot/imported/snowflake.png-ea721887558e74bce4b43091624438fe.s3tc.ctex", "res://.godot/imported/snowflake.png-ea721887558e74bce4b43091624438fe.etc2.ctex"] [params] diff --git a/assets/textures/snowflake2.png.import b/assets/textures/snowflake2.png.import index 68cb72c2f5d..d07afe92f8e 100644 --- a/assets/textures/snowflake2.png.import +++ b/assets/textures/snowflake2.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://gc70w2bqq323" path.s3tc="res://.godot/imported/snowflake2.png-c20556e54f14dc3902eafcb7305db0d4.s3tc.ctex" +path.etc2="res://.godot/imported/snowflake2.png-c20556e54f14dc3902eafcb7305db0d4.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/snowflake2.png" -dest_files=["res://.godot/imported/snowflake2.png-c20556e54f14dc3902eafcb7305db0d4.s3tc.ctex"] +dest_files=["res://.godot/imported/snowflake2.png-c20556e54f14dc3902eafcb7305db0d4.s3tc.ctex", "res://.godot/imported/snowflake2.png-c20556e54f14dc3902eafcb7305db0d4.etc2.ctex"] [params] diff --git a/assets/textures/space/Rocket.png.import b/assets/textures/space/Rocket.png.import index 6dadb668378..3847b683fe0 100644 --- a/assets/textures/space/Rocket.png.import +++ b/assets/textures/space/Rocket.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://bjlbcex6yyjj3" path.s3tc="res://.godot/imported/Rocket.png-5b3b9c4b2202da98dad0ba141f9cb86c.s3tc.ctex" +path.etc2="res://.godot/imported/Rocket.png-5b3b9c4b2202da98dad0ba141f9cb86c.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/space/Rocket.png" -dest_files=["res://.godot/imported/Rocket.png-5b3b9c4b2202da98dad0ba141f9cb86c.s3tc.ctex"] +dest_files=["res://.godot/imported/Rocket.png-5b3b9c4b2202da98dad0ba141f9cb86c.s3tc.ctex", "res://.godot/imported/Rocket.png-5b3b9c4b2202da98dad0ba141f9cb86c.etc2.ctex"] [params] diff --git a/assets/textures/space/Rocket_normal.png.import b/assets/textures/space/Rocket_normal.png.import index becf60d9eeb..43b1aa0bc3c 100644 --- a/assets/textures/space/Rocket_normal.png.import +++ b/assets/textures/space/Rocket_normal.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cp7w5cnnrrk1r" path.s3tc="res://.godot/imported/Rocket_normal.png-f3caf081d9514d8928678eb09cbad8a1.s3tc.ctex" +path.etc2="res://.godot/imported/Rocket_normal.png-f3caf081d9514d8928678eb09cbad8a1.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/space/Rocket_normal.png" -dest_files=["res://.godot/imported/Rocket_normal.png-f3caf081d9514d8928678eb09cbad8a1.s3tc.ctex"] +dest_files=["res://.godot/imported/Rocket_normal.png-f3caf081d9514d8928678eb09cbad8a1.s3tc.ctex", "res://.godot/imported/Rocket_normal.png-f3caf081d9514d8928678eb09cbad8a1.etc2.ctex"] [params] diff --git a/assets/textures/space/SpaceSkyStars.png.import b/assets/textures/space/SpaceSkyStars.png.import index de58e4b9e89..561b2f61cc1 100644 --- a/assets/textures/space/SpaceSkyStars.png.import +++ b/assets/textures/space/SpaceSkyStars.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://lf17qrqcwjtw" path.s3tc="res://.godot/imported/SpaceSkyStars.png-b9a484e51ac12f199021757186ee997b.s3tc.ctex" +path.etc2="res://.godot/imported/SpaceSkyStars.png-b9a484e51ac12f199021757186ee997b.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/space/SpaceSkyStars.png" -dest_files=["res://.godot/imported/SpaceSkyStars.png-b9a484e51ac12f199021757186ee997b.s3tc.ctex"] +dest_files=["res://.godot/imported/SpaceSkyStars.png-b9a484e51ac12f199021757186ee997b.s3tc.ctex", "res://.godot/imported/SpaceSkyStars.png-b9a484e51ac12f199021757186ee997b.etc2.ctex"] [params] diff --git a/assets/textures/space/Spaceship_albedo_roughness.png.import b/assets/textures/space/Spaceship_albedo_roughness.png.import index 7f61f011703..073cbe72807 100644 --- a/assets/textures/space/Spaceship_albedo_roughness.png.import +++ b/assets/textures/space/Spaceship_albedo_roughness.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://brqk1odkw0fy3" path.s3tc="res://.godot/imported/Spaceship_albedo_roughness.png-e9c13ae7feccb9b6b15f3b1c63b4f992.s3tc.ctex" +path.etc2="res://.godot/imported/Spaceship_albedo_roughness.png-e9c13ae7feccb9b6b15f3b1c63b4f992.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/space/Spaceship_albedo_roughness.png" -dest_files=["res://.godot/imported/Spaceship_albedo_roughness.png-e9c13ae7feccb9b6b15f3b1c63b4f992.s3tc.ctex"] +dest_files=["res://.godot/imported/Spaceship_albedo_roughness.png-e9c13ae7feccb9b6b15f3b1c63b4f992.s3tc.ctex", "res://.godot/imported/Spaceship_albedo_roughness.png-e9c13ae7feccb9b6b15f3b1c63b4f992.etc2.ctex"] [params] diff --git a/assets/textures/space/Spaceship_emit.png.import b/assets/textures/space/Spaceship_emit.png.import index 22c4e5a5256..ad2c7af3fa6 100644 --- a/assets/textures/space/Spaceship_emit.png.import +++ b/assets/textures/space/Spaceship_emit.png.import @@ -4,15 +4,16 @@ importer="texture" type="CompressedTexture2D" uid="uid://cda1j1liv0bks" path.s3tc="res://.godot/imported/Spaceship_emit.png-0279e92676957bf2bd7e4d8bbcbdfd86.s3tc.ctex" +path.etc2="res://.godot/imported/Spaceship_emit.png-0279e92676957bf2bd7e4d8bbcbdfd86.etc2.ctex" metadata={ -"imported_formats": ["s3tc_bptc"], +"imported_formats": ["s3tc_bptc", "etc2_astc"], "vram_texture": true } [deps] source_file="res://assets/textures/space/Spaceship_emit.png" -dest_files=["res://.godot/imported/Spaceship_emit.png-0279e92676957bf2bd7e4d8bbcbdfd86.s3tc.ctex"] +dest_files=["res://.godot/imported/Spaceship_emit.png-0279e92676957bf2bd7e4d8bbcbdfd86.s3tc.ctex", "res://.godot/imported/Spaceship_emit.png-0279e92676957bf2bd7e4d8bbcbdfd86.etc2.ctex"] [params] diff --git a/doc/setup_instructions.md b/doc/setup_instructions.md index 16bdcc8d9f4..d8c7ff7983c 100644 --- a/doc/setup_instructions.md +++ b/doc/setup_instructions.md @@ -110,7 +110,8 @@ installer for that from: https://dotnet.microsoft.com/en-us/download On mac you can install the dotnet sdk by downloading an installer from Microsoft's website. Important note for M1 mac users, you need to install the arm version, the x64 version doesn't work out of the box, -so it is very much not recommended to be used. +so it is very much not recommended to be used. It is recommended to +use the official mac installer from the .NET website. The SDK is also available through Homebrew but it will install the latest version (even if that's not yet officially the version used by @@ -363,7 +364,9 @@ needs to be installed (package name is probably something like `binutils-gold`). On Windows Visual Studio probably works best, but technically clang should work (please send us a PR if you can tweak it to work). On Mac Xcode (or at least the command line tools for it) -should be used. +should be used. The command line tools can be installed with +`xcode-select --install`. Homebrew is again recommended to get the +other tools on mac, like cmake (`brew install cmake`). For the gdextension to be compiled, `godot` must be available in PATH to generate the required binding files. And when compiling outside the @@ -409,6 +412,15 @@ error condition checking. And the GDExtension library is required in debug mode when running Thrive through Godot without exporting the game. +Note that the way to prepare the libraries for distribution requires +two computers: a computer with Linux (a virtual machine likely works), +and a mac (requires Apple hardware). On Linux with the above packaging +commands the binaries can be made for Linux and Windows. Then on a mac +the binaries for mac can be compiled (it is recommended to have the +oldest stil supported mac OS version to ensure maximum compatibility). +Note that an Apple Silicon Mac is likely required for everythign to +work correctly. + ## Using Development Environments @@ -660,6 +672,17 @@ with those instructions until the downloaded image files can be opened. After that Godot should be able to import all the assets properly. +### Native build issues on Mac + +First make sure that command line tools are installed with +`xcode-select --install` and then make sure homebrew packages are +updated: `brew upgrade`. + +If the build still doesn't work, double check that all correct +packages are installed and homebrew didn't report any caveats with +PATH or something like that that would prevent the tools from being +found. + ### Troubleshooting regarding Godot automatically breaking Godot sometimes likes to break your files for no reason. If you keep @@ -729,6 +752,24 @@ On Linux these folders are: On Windows the cache folders are somewhere in your APPDATA folders. +### Export issues on Mac (or .NET Assemblies not found popup) + +As Godot is installed as an .app a symbolic link to the actual Godot +executable within it needs to be created in the `~/bin` folder (and +also the shell profile needs to be updated to make sure that the user +bin folder is in PATH). Also the .NET resources need a symbolic link +to work. + +For example: +```sh +cd ~/bin +ln -s /Applications/Godot_mono.app/Contents/MacOS/Godot godot +ln -s /Applications/Godot_mono.app/Contents/Resources/GodotSharp GodotSharp +``` + +Then restart the terminal / reboot to get the new PATH to definitely +apply. + ## Exporting the game ### Prerequisites diff --git a/export_presets.cfg b/export_presets.cfg index 767b432f6bd..436a4361792 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -1,8 +1,9 @@ [preset.0] name="Linux/X11" -platform="Linux/X11" +platform="Linux" runnable=true +advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" @@ -13,6 +14,7 @@ encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false encrypt_directory=false +script_export_mode=2 [preset.0.options] @@ -20,10 +22,8 @@ custom_template/debug="" custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false binary_format/architecture="x86_64" ssh_remote_deploy/enabled=false ssh_remote_deploy/host="user@host_ip" @@ -40,6 +40,10 @@ rm -rf \"{temp_dir}\"" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true dotnet/embed_build_outputs=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false binary_format/64_bits=true texture_format/no_bptc_fallbacks=true @@ -48,6 +52,7 @@ texture_format/no_bptc_fallbacks=true name="Windows Desktop" platform="Windows Desktop" runnable=true +advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" @@ -58,6 +63,7 @@ encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false encrypt_directory=false +script_export_mode=2 [preset.1.options] @@ -65,10 +71,8 @@ custom_template/debug="" custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false binary_format/architecture="x86_64" codesign/enable=false codesign/timestamp=true @@ -88,6 +92,8 @@ application/file_description="Thrive Game" application/copyright="Copyright (C) 2013-2024 Revolutionary Games" application/trademarks="" application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true ssh_remote_deploy/enabled=false ssh_remote_deploy/host="user@host_ip" ssh_remote_deploy/port="22" @@ -108,6 +114,10 @@ Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true dotnet/embed_build_outputs=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false binary_format/64_bits=true texture_format/no_bptc_fallbacks=true @@ -116,6 +126,7 @@ texture_format/no_bptc_fallbacks=true name="Windows Desktop (32-bit)" platform="Windows Desktop" runnable=false +advanced_options=false dedicated_server=false custom_features="" export_filter="all_resources" @@ -126,6 +137,7 @@ encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false encrypt_directory=false +script_export_mode=2 [preset.2.options] @@ -133,10 +145,8 @@ custom_template/debug="" custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false binary_format/architecture="x86_64" codesign/enable=false codesign/timestamp=true @@ -156,6 +166,8 @@ application/file_description="Thrive Game" application/copyright="Copyright (C) 2013-2024 Revolutionary Games" application/trademarks="" application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true ssh_remote_deploy/enabled=false ssh_remote_deploy/host="user@host_ip" ssh_remote_deploy/port="22" @@ -176,14 +188,272 @@ Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true dotnet/embed_build_outputs=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false binary_format/64_bits=false texture_format/no_bptc_fallbacks=true [preset.3] +name="Mac OSX" +platform="macOS" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="*.json, *.txt, *.yml" +exclude_filter="test/*, addons/gdUnit4/*, builds/*, build/*, build-debug/*, *mono_crash*, fast_build_mode.json, podman/*, Scripts/*, doc/steam*, steam*, RevolutionaryGamesCommon/*, *CMakeLists.txt, *CIConfiguration.yml, *inspect_results.json" +export_path="builds/Thrive.zip" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.3.options] + +export/distribution_type=1 +binary_format/architecture="universal" +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +application/icon="res://assets/misc/icon.png" +application/icon_interpolation=4 +application/bundle_identifier="com.revolutionarygamesstudio.thrive" +application/signature="" +application/app_category="Games" +application/short_version="" +application/version="" +application/copyright="Copyright (C) 2013-2024 Revolutionary Games" +application/copyright_localized={} +application/min_macos_version="10.12" +application/export_angle=0 +display/high_res=true +application/additional_plist_content="" +xcode/platform_build="14C18" +xcode/sdk_version="13.1" +xcode/sdk_build="22C55" +xcode/sdk_name="macosx13.1" +xcode/xcode_version="1420" +xcode/xcode_build="14C18" +codesign/codesign=1 +codesign/installer_identity="" +codesign/apple_team_id="" +codesign/identity="" +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=true +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/entitlements/app_sandbox/files_user_selected=0 +codesign/entitlements/app_sandbox/helper_executables=[] +codesign/custom_options=PackedStringArray() +notarization/notarization=0 +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/location_usage_description="" +privacy/location_usage_description_localized={} +privacy/address_book_usage_description="" +privacy/address_book_usage_description_localized={} +privacy/calendar_usage_description="" +privacy/calendar_usage_description_localized={} +privacy/photos_library_usage_description="" +privacy/photos_library_usage_description_localized={} +privacy/desktop_folder_usage_description="" +privacy/desktop_folder_usage_description_localized={} +privacy/documents_folder_usage_description="" +privacy/documents_folder_usage_description_localized={} +privacy/downloads_folder_usage_description="" +privacy/downloads_folder_usage_description_localized={} +privacy/network_volumes_usage_description="" +privacy/network_volumes_usage_description_localized={} +privacy/removable_volumes_usage_description="" +privacy/removable_volumes_usage_description_localized={} +privacy/tracking_enabled=false +privacy/tracking_domains=PackedStringArray() +privacy/collected_data/name/collected=false +privacy/collected_data/name/linked_to_user=false +privacy/collected_data/name/used_for_tracking=false +privacy/collected_data/name/collection_purposes=0 +privacy/collected_data/email_address/collected=false +privacy/collected_data/email_address/linked_to_user=false +privacy/collected_data/email_address/used_for_tracking=false +privacy/collected_data/email_address/collection_purposes=0 +privacy/collected_data/phone_number/collected=false +privacy/collected_data/phone_number/linked_to_user=false +privacy/collected_data/phone_number/used_for_tracking=false +privacy/collected_data/phone_number/collection_purposes=0 +privacy/collected_data/physical_address/collected=false +privacy/collected_data/physical_address/linked_to_user=false +privacy/collected_data/physical_address/used_for_tracking=false +privacy/collected_data/physical_address/collection_purposes=0 +privacy/collected_data/other_contact_info/collected=false +privacy/collected_data/other_contact_info/linked_to_user=false +privacy/collected_data/other_contact_info/used_for_tracking=false +privacy/collected_data/other_contact_info/collection_purposes=0 +privacy/collected_data/health/collected=false +privacy/collected_data/health/linked_to_user=false +privacy/collected_data/health/used_for_tracking=false +privacy/collected_data/health/collection_purposes=0 +privacy/collected_data/fitness/collected=false +privacy/collected_data/fitness/linked_to_user=false +privacy/collected_data/fitness/used_for_tracking=false +privacy/collected_data/fitness/collection_purposes=0 +privacy/collected_data/payment_info/collected=false +privacy/collected_data/payment_info/linked_to_user=false +privacy/collected_data/payment_info/used_for_tracking=false +privacy/collected_data/payment_info/collection_purposes=0 +privacy/collected_data/credit_info/collected=false +privacy/collected_data/credit_info/linked_to_user=false +privacy/collected_data/credit_info/used_for_tracking=false +privacy/collected_data/credit_info/collection_purposes=0 +privacy/collected_data/other_financial_info/collected=false +privacy/collected_data/other_financial_info/linked_to_user=false +privacy/collected_data/other_financial_info/used_for_tracking=false +privacy/collected_data/other_financial_info/collection_purposes=0 +privacy/collected_data/precise_location/collected=false +privacy/collected_data/precise_location/linked_to_user=false +privacy/collected_data/precise_location/used_for_tracking=false +privacy/collected_data/precise_location/collection_purposes=0 +privacy/collected_data/coarse_location/collected=false +privacy/collected_data/coarse_location/linked_to_user=false +privacy/collected_data/coarse_location/used_for_tracking=false +privacy/collected_data/coarse_location/collection_purposes=0 +privacy/collected_data/sensitive_info/collected=false +privacy/collected_data/sensitive_info/linked_to_user=false +privacy/collected_data/sensitive_info/used_for_tracking=false +privacy/collected_data/sensitive_info/collection_purposes=0 +privacy/collected_data/contacts/collected=false +privacy/collected_data/contacts/linked_to_user=false +privacy/collected_data/contacts/used_for_tracking=false +privacy/collected_data/contacts/collection_purposes=0 +privacy/collected_data/emails_or_text_messages/collected=false +privacy/collected_data/emails_or_text_messages/linked_to_user=false +privacy/collected_data/emails_or_text_messages/used_for_tracking=false +privacy/collected_data/emails_or_text_messages/collection_purposes=0 +privacy/collected_data/photos_or_videos/collected=false +privacy/collected_data/photos_or_videos/linked_to_user=false +privacy/collected_data/photos_or_videos/used_for_tracking=false +privacy/collected_data/photos_or_videos/collection_purposes=0 +privacy/collected_data/audio_data/collected=false +privacy/collected_data/audio_data/linked_to_user=false +privacy/collected_data/audio_data/used_for_tracking=false +privacy/collected_data/audio_data/collection_purposes=0 +privacy/collected_data/gameplay_content/collected=false +privacy/collected_data/gameplay_content/linked_to_user=false +privacy/collected_data/gameplay_content/used_for_tracking=false +privacy/collected_data/gameplay_content/collection_purposes=0 +privacy/collected_data/customer_support/collected=false +privacy/collected_data/customer_support/linked_to_user=false +privacy/collected_data/customer_support/used_for_tracking=false +privacy/collected_data/customer_support/collection_purposes=0 +privacy/collected_data/other_user_content/collected=false +privacy/collected_data/other_user_content/linked_to_user=false +privacy/collected_data/other_user_content/used_for_tracking=false +privacy/collected_data/other_user_content/collection_purposes=0 +privacy/collected_data/browsing_history/collected=false +privacy/collected_data/browsing_history/linked_to_user=false +privacy/collected_data/browsing_history/used_for_tracking=false +privacy/collected_data/browsing_history/collection_purposes=0 +privacy/collected_data/search_hhistory/collected=false +privacy/collected_data/search_hhistory/linked_to_user=false +privacy/collected_data/search_hhistory/used_for_tracking=false +privacy/collected_data/search_hhistory/collection_purposes=0 +privacy/collected_data/user_id/collected=false +privacy/collected_data/user_id/linked_to_user=false +privacy/collected_data/user_id/used_for_tracking=false +privacy/collected_data/user_id/collection_purposes=0 +privacy/collected_data/device_id/collected=false +privacy/collected_data/device_id/linked_to_user=false +privacy/collected_data/device_id/used_for_tracking=false +privacy/collected_data/device_id/collection_purposes=0 +privacy/collected_data/purchase_history/collected=false +privacy/collected_data/purchase_history/linked_to_user=false +privacy/collected_data/purchase_history/used_for_tracking=false +privacy/collected_data/purchase_history/collection_purposes=0 +privacy/collected_data/product_interaction/collected=false +privacy/collected_data/product_interaction/linked_to_user=false +privacy/collected_data/product_interaction/used_for_tracking=false +privacy/collected_data/product_interaction/collection_purposes=0 +privacy/collected_data/advertising_data/collected=false +privacy/collected_data/advertising_data/linked_to_user=false +privacy/collected_data/advertising_data/used_for_tracking=false +privacy/collected_data/advertising_data/collection_purposes=0 +privacy/collected_data/other_usage_data/collected=false +privacy/collected_data/other_usage_data/linked_to_user=false +privacy/collected_data/other_usage_data/used_for_tracking=false +privacy/collected_data/other_usage_data/collection_purposes=0 +privacy/collected_data/crash_data/collected=false +privacy/collected_data/crash_data/linked_to_user=false +privacy/collected_data/crash_data/used_for_tracking=false +privacy/collected_data/crash_data/collection_purposes=0 +privacy/collected_data/performance_data/collected=false +privacy/collected_data/performance_data/linked_to_user=false +privacy/collected_data/performance_data/used_for_tracking=false +privacy/collected_data/performance_data/collection_purposes=0 +privacy/collected_data/other_diagnostic_data/collected=false +privacy/collected_data/other_diagnostic_data/linked_to_user=false +privacy/collected_data/other_diagnostic_data/used_for_tracking=false +privacy/collected_data/other_diagnostic_data/collection_purposes=0 +privacy/collected_data/environment_scanning/collected=false +privacy/collected_data/environment_scanning/linked_to_user=false +privacy/collected_data/environment_scanning/used_for_tracking=false +privacy/collected_data/environment_scanning/collection_purposes=0 +privacy/collected_data/hands/collected=false +privacy/collected_data/hands/linked_to_user=false +privacy/collected_data/hands/used_for_tracking=false +privacy/collected_data/hands/collection_purposes=0 +privacy/collected_data/head/collected=false +privacy/collected_data/head/linked_to_user=false +privacy/collected_data/head/used_for_tracking=false +privacy/collected_data/head/collection_purposes=0 +privacy/collected_data/other_data_types/collected=false +privacy/collected_data/other_data_types/linked_to_user=false +privacy/collected_data/other_data_types/used_for_tracking=false +privacy/collected_data/other_data_types/collection_purposes=0 +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" +dotnet/include_scripts_content=false +dotnet/include_debug_symbols=true +dotnet/embed_build_outputs=false + +[preset.4] + name="Linux/X11_steam" -platform="Linux/X11" +platform="Linux" runnable=false +advanced_options=false dedicated_server=false custom_features="steam" export_filter="all_resources" @@ -194,17 +464,16 @@ encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false encrypt_directory=false +script_export_mode=2 -[preset.3.options] +[preset.4.options] custom_template/debug="" custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false binary_format/architecture="x86_64" ssh_remote_deploy/enabled=false ssh_remote_deploy/host="user@host_ip" @@ -221,14 +490,19 @@ rm -rf \"{temp_dir}\"" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true dotnet/embed_build_outputs=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false binary_format/64_bits=true texture_format/no_bptc_fallbacks=true -[preset.4] +[preset.5] name="Windows Desktop_steam" platform="Windows Desktop" runnable=false +advanced_options=false dedicated_server=false custom_features="steam" export_filter="all_resources" @@ -239,17 +513,16 @@ encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false encrypt_directory=false +script_export_mode=2 -[preset.4.options] +[preset.5.options] custom_template/debug="" custom_template/release="" debug/export_console_wrapper=1 binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false binary_format/architecture="x86_64" codesign/enable=false codesign/timestamp=true @@ -269,6 +542,8 @@ application/file_description="Thrive Game" application/copyright="Copyright (C) 2013-2024 Revolutionary Games" application/trademarks="" application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true ssh_remote_deploy/enabled=false ssh_remote_deploy/host="user@host_ip" ssh_remote_deploy/port="22" @@ -289,5 +564,9 @@ Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true dotnet/embed_build_outputs=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false binary_format/64_bits=true texture_format/no_bptc_fallbacks=true diff --git a/lib/thrive_extension.gdextension b/lib/thrive_extension.gdextension index 50e0941d7aa..506fe3cbe32 100644 --- a/lib/thrive_extension.gdextension +++ b/lib/thrive_extension.gdextension @@ -7,11 +7,14 @@ reloadable = true [libraries] # As this cannot load different ones for different CPUs, we always use the -# non-avx variant +# non-avx variant. If support is ever added the NativeInterop class needs +# also get the fix. -# TODO: mac version -# macos.debug = "res://lib/debug/libthrive_extension_without_avx.framework" -# macos.release = "res://lib/libthrive_extension_without_avx.framework" +# For some reason mac doesn't have debug variants +# macos.debug.arm64 = "res://lib/debug/libthrive_extension_without_avx.dylib" +macos.arm64 = "res://lib/libthrive_extension_without_avx.dylib" +# macos.debug.x86_64 = "res://lib/debug/libthrive_extension_without_avx.dylib" +macos.x86_64 = "res://lib/libthrive_extension_without_avx.dylib" # 32-bit version if we ever want to support that again # windows.debug.x86_32 = "res://lib/debug/libthrive_extension_without_avx.x86_32.dll" diff --git a/project.godot b/project.godot index a9cfe922bfc..50567d49b77 100644 --- a/project.godot +++ b/project.godot @@ -549,6 +549,7 @@ limits/message_queue/max_size_kb=8192 [rendering] textures/canvas_textures/default_texture_filter=2 +textures/vram_compression/import_etc2_astc=true textures/default_filters/anisotropic_filtering_level=3 anti_aliasing/quality/msaa_2d=1 anti_aliasing/quality/msaa_3d=1 diff --git a/src/engine/FeatureInformation.cs b/src/engine/FeatureInformation.cs index f9fbd09071c..f1842696387 100644 --- a/src/engine/FeatureInformation.cs +++ b/src/engine/FeatureInformation.cs @@ -11,8 +11,7 @@ public static class FeatureInformation private const string PlatformWindows = "windows"; private const string PlatformLinux = "linux"; - // TODO: check that this is correct for Godot 4 - private const string PlatformMac = "osx"; + private const string PlatformMac = "macos"; private static readonly Lazy CachedDriver = new(DetectRenderer); diff --git a/src/engine/SimpleBarrier.cs b/src/engine/SimpleBarrier.cs index 21353511ba6..676f2cb2bd8 100644 --- a/src/engine/SimpleBarrier.cs +++ b/src/engine/SimpleBarrier.cs @@ -1,5 +1,4 @@ using System; -using System.Runtime.Intrinsics.X86; using System.Threading; /// @@ -67,7 +66,7 @@ public void SignalAndWait() if (readCount == threadCount) break; - X86Base.Pause(); + CPUHelpers.HyperThreadPause(); } if (readCount == threadCount) @@ -116,7 +115,7 @@ public void SignalAndWait() // All threads should be releasing very fast, so just keep trying to read the variable readCount = blockedThreads; - X86Base.Pause(); + CPUHelpers.HyperThreadPause(); } // Ensure that after the barrier all thread writes and reads are seen by all threads diff --git a/src/engine/TaskExecutor.cs b/src/engine/TaskExecutor.cs index 66a936a06d5..6dc9b51eae2 100644 --- a/src/engine/TaskExecutor.cs +++ b/src/engine/TaskExecutor.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; -using System.Runtime.Intrinsics.X86; using System.Threading; using System.Threading.Tasks; using DefaultEcs.Threading; @@ -232,7 +231,7 @@ public void Run(IParallelRunnable runnable) } // Reduce hyperthreading resource use while waiting - X86Base.Pause(); + CPUHelpers.HyperThreadPause(); } #if DEBUG @@ -476,7 +475,7 @@ private void RunExecutorThread() ++noWorkCounter; // Reduce hyperthreading resource use while just busy looping - X86Base.Pause(); + CPUHelpers.HyperThreadPause(); } } } diff --git a/src/general/utils/CPUHelpers.cs b/src/general/utils/CPUHelpers.cs new file mode 100644 index 00000000000..d45a7a32ec1 --- /dev/null +++ b/src/general/utils/CPUHelpers.cs @@ -0,0 +1,31 @@ +using System.Runtime.CompilerServices; +using System.Runtime.Intrinsics.X86; + +/// +/// Helpers for CPU operations across x86 and ARM +/// +public class CPUHelpers +{ + private static readonly bool IsX86 = X86Base.IsSupported; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void HyperThreadPause() + { + if (IsX86) + { + X86Base.Pause(); + } + else + { + // TODO: find a proper equivalent: https://github.com/Revolutionary-Games/Thrive/issues/5728 + // Yielding is probably overkill in terms of how long it would take... + // Thread.Yield(); + + // Loop a tiny bit to waste a bit of time + for (int i = 0; i < 100; ++i) + { + _ = i; + } + } + } +} diff --git a/src/native/Include.h.in b/src/native/Include.h.in index 61720d946f5..eb27ed0eff8 100644 --- a/src/native/Include.h.in +++ b/src/native/Include.h.in @@ -73,7 +73,16 @@ #if _MSC_VER #define HYPER_THREAD_YIELD _mm_pause() #else +// Apple clang doesn't have this so it needs a different approach +#ifdef __apple_build_version__ +#ifdef __aarch64__ +#define HYPER_THREAD_YIELD __asm__ ( "isb SY;" ); +#else +#define HYPER_THREAD_YIELD __asm__ ( "pause;" ); +#endif // ARM +#else #define HYPER_THREAD_YIELD __builtin_ia32_pause() +#endif // __apple_build_version__ #endif // 64-bit pointers. TODO: support for 32-bit compiling? diff --git a/src/native/NativeConstants.cs b/src/native/NativeConstants.cs index ad304e4be4b..7587de36d33 100644 --- a/src/native/NativeConstants.cs +++ b/src/native/NativeConstants.cs @@ -97,7 +97,10 @@ public static string GetLibraryDllName(Library library, PackagePlatform platform case PackagePlatform.Windows32: throw new NotSupportedException("32-bit support is not done currently"); case PackagePlatform.Mac: - throw new NotImplementedException("TODO: name for this"); + if ((tags & PrecompiledTag.WithoutAvx) != 0) + return "libthrive_native_without_avx.dylib"; + + throw new NotImplementedException("Mac cannot support AVX currently"); default: throw new ArgumentOutOfRangeException(nameof(platform), platform, null); } @@ -114,7 +117,7 @@ public static string GetLibraryDllName(Library library, PackagePlatform platform case PackagePlatform.Windows32: throw new NotSupportedException("32-bit support is not done currently"); case PackagePlatform.Mac: - throw new NotImplementedException("TODO: name for this"); + throw new NotImplementedException("Early check is not used on Mac"); default: throw new ArgumentOutOfRangeException(nameof(platform), platform, null); } @@ -135,7 +138,10 @@ public static string GetLibraryDllName(Library library, PackagePlatform platform case PackagePlatform.Windows32: throw new NotSupportedException("32-bit support is not done currently"); case PackagePlatform.Mac: - throw new NotImplementedException("TODO: name for this"); + if ((tags & PrecompiledTag.WithoutAvx) != 0) + return "libthrive_extension_without_avx.dylib"; + + throw new NotImplementedException("Mac cannot support AVX currently"); default: throw new ArgumentOutOfRangeException(nameof(platform), platform, null); } diff --git a/src/native/early_checks/CMakeLists.txt b/src/native/early_checks/CMakeLists.txt index d6c60cef480..136d77405c4 100644 --- a/src/native/early_checks/CMakeLists.txt +++ b/src/native/early_checks/CMakeLists.txt @@ -17,12 +17,16 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # Probably really don't need to support debug symbols in release for MSVC else() - # Sadly this needs to specify sandy bridge to get xgetbv working, but that - # is only called if AVX support is already detected, so this should be fine - # for older CPUs. Nehalem is the minimum Thrive can work with but when SSE - # 4.2 support is not detected the slower library is used anyway and the CPU - # check won't have detected AVX. - target_compile_options(early_checks PRIVATE -march=sandybridge) + if(APPLE) + # Can't specify architecture explicitly on mac so that's not a concern + else() + # Sadly this needs to specify sandy bridge to get xgetbv working, but that + # is only called if AVX support is already detected, so this should be fine + # for older CPUs. Nehalem is the minimum Thrive can work with but when SSE + # 4.2 support is not detected the slower library is used anyway and the CPU + # check won't have detected AVX. + target_compile_options(early_checks PRIVATE -march=sandybridge) + endif() target_compile_options(early_checks PRIVATE -Wall -Wextra -Wpedantic -Wno-unknown-pragmas) diff --git a/src/native/helpers/CPUCheck.hpp b/src/native/helpers/CPUCheck.hpp index 6aa79c4c5c0..ad6e2b77110 100644 --- a/src/native/helpers/CPUCheck.hpp +++ b/src/native/helpers/CPUCheck.hpp @@ -14,17 +14,39 @@ // MinGW #include -void cpuid(int info[4], unsigned int infoType) +inline void cpuid(int info[4], unsigned int infoType) { __cpuid(info, infoType); } #endif +#elif defined(__aarch64__) || defined(__arm__) +#include +#include + +#pragma message("Early check is not implemented for ARM!") + +inline void cpuid(int info[4], unsigned int infoType) +{ + UNUSED(infoType); + UNUSED(info); + std::cout << "Early check is not implemented for ARM" << std::endl; + std::abort(); +} + +// This is only for x86 so we need to provide a dummy one +inline int _xgetbv(int dummy) // NOLINT(*-reserved-identifier) +{ + UNUSED(dummy); + std::cout << "Using dummy _xgetbv for ARM\n"; + return 0x6; +} + #else #include #include -void cpuid(int info[4], unsigned int infoType) +inline void cpuid(int info[4], unsigned int infoType) { __cpuid_count(infoType, 0, info[0], info[1], info[2], info[3]); } diff --git a/src/native/interop/NativeInterop.cs b/src/native/interop/NativeInterop.cs index 7fbf7c43731..6f1041d49d9 100644 --- a/src/native/interop/NativeInterop.cs +++ b/src/native/interop/NativeInterop.cs @@ -11,6 +11,7 @@ using System.Text; using DevCenterCommunication.Models.Enums; using Godot; +using SharedBase.Models; using SharedBase.Utilities; /// @@ -138,6 +139,14 @@ public static bool CheckCPU() { var result = CheckCPUFeaturesFull(); + // Apple doesn't support x86 extensions so we nudge things on the right track here + if (OperatingSystem.IsMacOS()) + { + GD.Print("Mac detected so skipping CPU check and not trying to use AVX"); + disableAvx = true; + return true; + } + // If the CPU can support the full speed library all is well if (result == CPUCheckResult.CPUCheckSuccess) { @@ -452,27 +461,97 @@ private static IntPtr DllImportResolver(string libraryName, Assembly assembly, D if (library == NativeConstants.Library.ThriveExtension) { - // Special GDExtension handling, we assume Godot has already loaded it + if (!OperatingSystem.IsMacOS()) + { + // Special GDExtension handling, we assume Godot has already loaded it - var modules = Process.GetCurrentProcess().Modules; - var count = modules.Count; + var modules = Process.GetCurrentProcess().Modules; + var count = modules.Count; + + for (var i = 0; i < count; ++i) + { + var module = modules[i]; - for (var i = 0; i < count; ++i) + if (module.ModuleName.Contains("thrive_extension")) + { +#if DEBUG_LIBRARY_LOAD + GD.Print($"Trying to use already loaded module path: {module.FileName}"); +#endif + + return NativeLibrary.Load(module.FileName); + } + } + + GD.PrintErr("GDExtension was not loaded by Godot, falling back to default library load but this " + + "will likely fail"); + } + else { - var module = modules[i]; + // For some reason the modules list stays at one item on a Mac so we need to do some special assuming + // here + // TODO: this will be problematic in the future if debug specific version of libraries are added as + // supported in the .gdextension files - if (module.ModuleName.Contains("thrive_extension")) + var file = NativeConstants.GetLibraryDllName(NativeConstants.Library.ThriveExtension, + PackagePlatform.Mac, PrecompiledTag.WithoutAvx); + + if (File.Exists(file)) { #if DEBUG_LIBRARY_LOAD - GD.Print($"Trying to use already loaded module path: {module.FileName}"); + GD.Print($"Loading Mac GDExtension from: {file}"); #endif - return NativeLibrary.Load(module.FileName); + return NativeLibrary.Load(file); } - } - GD.PrintErr("GDExtension was not loaded by Godot, falling back to default library load but this " + - "will likely fail"); + var adjustedFile = Path.Combine("lib", file); + + if (File.Exists(adjustedFile)) + { +#if DEBUG_LIBRARY_LOAD + GD.Print($"Loading Mac GDExtension from: {adjustedFile}"); +#endif + + return NativeLibrary.Load(adjustedFile); + } + + // Special case needed for .app packaging + var location = GetExecutableFolder(); + + adjustedFile = Path.Combine(location, file); + + if (File.Exists(adjustedFile)) + { +#if DEBUG_LIBRARY_LOAD + GD.Print($"Loading Mac GDExtension from: {adjustedFile}"); +#endif + + return NativeLibrary.Load(adjustedFile); + } + +#if DEBUG_LIBRARY_LOAD + GD.Print($"Attempted Mac GDExtension: {adjustedFile}"); +#endif + + adjustedFile = Path.Combine(location, "lib", file); + + if (File.Exists(adjustedFile)) + { +#if DEBUG_LIBRARY_LOAD + GD.Print($"Loading Mac GDExtension from: {adjustedFile}"); +#endif + + return NativeLibrary.Load(adjustedFile); + } + +#if DEBUG_LIBRARY_LOAD + GD.Print($"Last attempted Mac GDExtension: {adjustedFile}"); +#endif + + GD.PrintErr( + "Mac GDExtension special load logic failed, falling back to default library load but this " + + "will likely fail"); + } return NativeLibrary.Load(libraryName, assembly, searchPath); } @@ -550,14 +629,19 @@ private static string GetExecutableFolder() throw new Exception("Entry assembly location is empty"); } - if (location.StartsWith("file://")) - { - location = location.Substring("file://".Length); - } + location = RemoveFilePrefix(location); // Remove one folder level if this is likely an internal Godot path (when packaged) if (location.Contains(GODOT_INTERNAL_PATH_LIKELY_MARKER)) + { + // On Mac handle .app folder usage + if (Path.GetFullPath(location).Contains(".app/")) + { + return Path.Join(location, "../../MacOS"); + } + return Path.Join(location, ".."); + } return location; } @@ -574,6 +658,16 @@ private static string GetExecutableFolder() } } + private static string RemoveFilePrefix(string location) + { + if (location.StartsWith("file://")) + { + location = location.Substring("file://".Length); + } + + return location; + } + private static bool LoadLibraryIfExists(string libraryPath, out IntPtr loaded) { var executableFolder = GetExecutableFolder();