Browse Source

bunch of fixes based on feedback, adding changelog

galo 1 year ago
parent
commit
af444cbd69
84 changed files with 1986 additions and 4 deletions
  1. 3 0
      .import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.md5
  2. BIN
      .import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.stex
  3. 3 0
      .import/logo.png-16835c693f64f9c3f42182ea44006861.md5
  4. BIN
      .import/logo.png-16835c693f64f9c3f42182ea44006861.stex
  5. 3 0
      .import/play.png-7bd0a0a909edd1ae272335835918cbad.md5
  6. BIN
      .import/play.png-7bd0a0a909edd1ae272335835918cbad.stex
  7. 1 0
      android/.build_version
  8. 1 0
      android/build/.gdignore
  9. 89 0
      android/build/AndroidManifest.xml
  10. 8 0
      android/build/assetPacks/installTime/build.gradle
  11. 243 0
      android/build/build.gradle
  12. 303 0
      android/build/config.gradle
  13. 25 0
      android/build/gradle.properties
  14. BIN
      android/build/gradle/wrapper/gradle-wrapper.jar
  15. 5 0
      android/build/gradle/wrapper/gradle-wrapper.properties
  16. 185 0
      android/build/gradlew
  17. 89 0
      android/build/gradlew.bat
  18. BIN
      android/build/libs/debug/godot-lib.debug.aar
  19. BIN
      android/build/libs/release/godot-lib.release.aar
  20. BIN
      android/build/res/drawable-nodpi/splash.png
  21. BIN
      android/build/res/drawable-nodpi/splash_bg_color.png
  22. 12 0
      android/build/res/drawable/splash_drawable.xml
  23. 5 0
      android/build/res/values-ar/godot_project_name_string.xml
  24. 5 0
      android/build/res/values-bg/godot_project_name_string.xml
  25. 5 0
      android/build/res/values-ca/godot_project_name_string.xml
  26. 5 0
      android/build/res/values-cs/godot_project_name_string.xml
  27. 5 0
      android/build/res/values-da/godot_project_name_string.xml
  28. 5 0
      android/build/res/values-de/godot_project_name_string.xml
  29. 5 0
      android/build/res/values-el/godot_project_name_string.xml
  30. 5 0
      android/build/res/values-en/godot_project_name_string.xml
  31. 5 0
      android/build/res/values-es-rES/godot_project_name_string.xml
  32. 5 0
      android/build/res/values-es/godot_project_name_string.xml
  33. 5 0
      android/build/res/values-fa/godot_project_name_string.xml
  34. 5 0
      android/build/res/values-fi/godot_project_name_string.xml
  35. 5 0
      android/build/res/values-fr/godot_project_name_string.xml
  36. 5 0
      android/build/res/values-hi/godot_project_name_string.xml
  37. 5 0
      android/build/res/values-hr/godot_project_name_string.xml
  38. 5 0
      android/build/res/values-hu/godot_project_name_string.xml
  39. 5 0
      android/build/res/values-in/godot_project_name_string.xml
  40. 5 0
      android/build/res/values-it/godot_project_name_string.xml
  41. 5 0
      android/build/res/values-iw/godot_project_name_string.xml
  42. 5 0
      android/build/res/values-ja/godot_project_name_string.xml
  43. 5 0
      android/build/res/values-ko/godot_project_name_string.xml
  44. 5 0
      android/build/res/values-lt/godot_project_name_string.xml
  45. 5 0
      android/build/res/values-lv/godot_project_name_string.xml
  46. 5 0
      android/build/res/values-nb/godot_project_name_string.xml
  47. 5 0
      android/build/res/values-nl/godot_project_name_string.xml
  48. 5 0
      android/build/res/values-pl/godot_project_name_string.xml
  49. 5 0
      android/build/res/values-pt/godot_project_name_string.xml
  50. 5 0
      android/build/res/values-ro/godot_project_name_string.xml
  51. 5 0
      android/build/res/values-ru/godot_project_name_string.xml
  52. 5 0
      android/build/res/values-sk/godot_project_name_string.xml
  53. 5 0
      android/build/res/values-sl/godot_project_name_string.xml
  54. 5 0
      android/build/res/values-sr/godot_project_name_string.xml
  55. 5 0
      android/build/res/values-sv/godot_project_name_string.xml
  56. 5 0
      android/build/res/values-th/godot_project_name_string.xml
  57. 5 0
      android/build/res/values-tl/godot_project_name_string.xml
  58. 5 0
      android/build/res/values-tr/godot_project_name_string.xml
  59. 5 0
      android/build/res/values-uk/godot_project_name_string.xml
  60. 5 0
      android/build/res/values-vi/godot_project_name_string.xml
  61. 5 0
      android/build/res/values-zh-rHK/godot_project_name_string.xml
  62. 5 0
      android/build/res/values-zh-rTW/godot_project_name_string.xml
  63. 5 0
      android/build/res/values-zh/godot_project_name_string.xml
  64. 5 0
      android/build/res/values/godot_project_name_string.xml
  65. 10 0
      android/build/res/values/themes.xml
  66. 2 0
      android/build/settings.gradle
  67. 47 0
      android/build/src/com/godot/game/GodotApp.java
  68. 9 0
      android/plugins/AdMob.gdap
  69. BIN
      android/plugins/admob-debug.aar
  70. BIN
      android/plugins/admob-release.aar
  71. 2 1
      enemy.gd
  72. 209 1
      export_presets.cfg
  73. 398 1
      main.tscn
  74. 23 0
      mainmenu.gd
  75. 1 1
      project.godot
  76. BIN
      ui/.interfaceBevel.png-autosave.kra
  77. BIN
      ui/BesourinhoULTRA4K.png
  78. 35 0
      ui/BesourinhoULTRA4K.png.import
  79. BIN
      ui/InterfaceLevelUpNew.png~
  80. BIN
      ui/button.png~
  81. BIN
      ui/logo.png
  82. 35 0
      ui/logo.png.import
  83. BIN
      ui/play.png
  84. 35 0
      ui/play.png.import

+ 3 - 0
.import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.md5

@@ -0,0 +1,3 @@
+source_md5="10d166ad2d656f82cfac0d1707297754"
+dest_md5="64d908033e492bdd464a3f082059c8b6"
+

BIN
.import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.stex


+ 3 - 0
.import/logo.png-16835c693f64f9c3f42182ea44006861.md5

@@ -0,0 +1,3 @@
+source_md5="efc78b0c2eab3e86f50a69cd0eb33fc9"
+dest_md5="993073e2d868d1c0d109be63e7a62d84"
+

BIN
.import/logo.png-16835c693f64f9c3f42182ea44006861.stex


+ 3 - 0
.import/play.png-7bd0a0a909edd1ae272335835918cbad.md5

@@ -0,0 +1,3 @@
+source_md5="6f946d9332b3ea828143b1f1a761378b"
+dest_md5="167351c203c56b1ef43e24f4782da928"
+

BIN
.import/play.png-7bd0a0a909edd1ae272335835918cbad.stex


+ 1 - 0
android/.build_version

@@ -0,0 +1 @@
+3.4.4.stable

+ 1 - 0
android/build/.gdignore

@@ -0,0 +1 @@
+

+ 89 - 0
android/build/AndroidManifest.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.godot.game"
+    android:versionCode="1"
+    android:versionName="1.0"
+    android:installLocation="auto" >
+
+    <!-- Adding custom text to the manifest is fine, but do it outside the custom USER and APPLICATION BEGIN/END comments, -->
+    <!-- as that gets rewritten. -->
+
+    <supports-screens
+        android:smallScreens="true"
+        android:normalScreens="true"
+        android:largeScreens="true"
+        android:xlargeScreens="true" />
+
+    <!-- glEsVersion is modified by the exporter, changing this value here has no effect. -->
+    <uses-feature
+        android:glEsVersion="0x00020000"
+        android:required="true" />
+
+<!-- Custom user permissions XML added by add-ons. It's recommended to add them from the export preset, though. -->
+<!--CHUNK_USER_PERMISSIONS_BEGIN-->
+<!--CHUNK_USER_PERMISSIONS_END-->
+
+    <!-- Any tag in this line after android:icon will be erased when doing custom builds. -->
+    <!-- If you want to add tags manually, do before it. -->
+    <!-- WARNING: This should stay on a single line until the parsing code is improved. See GH-32414. -->
+    <!-- TODO: Remove the 'requestLegacyExternalStorage' attribute when https://github.com/godotengine/godot/issues/38913 is resolved -->
+    <application android:label="@string/godot_project_name_string" android:allowBackup="false" android:isGame="true" android:hasFragileUserData="false" android:requestLegacyExternalStorage="false" tools:ignore="GoogleAppIndexingWarning" android:icon="@mipmap/icon" >
+
+        <!-- Records the version of the Godot editor used for building -->
+        <meta-data
+            android:name="org.godotengine.editor.version"
+            android:value="${godotEditorVersion}" />
+
+        <!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. -->
+        <!-- Do these changes in the export preset. Adding new ones is fine. -->
+
+        <!-- XR mode metadata. This is modified by the exporter based on the selected xr mode. DO NOT CHANGE the values here. -->
+        <meta-data
+            android:name="xr_mode_metadata_name"
+            android:value="xr_mode_metadata_value" />
+
+        <!-- XR hand tracking metadata -->
+        <!-- This is modified by the exporter based on the selected xr mode. DO NOT CHANGE the values here. -->
+        <!-- Removed at export time if the xr mode is not VR or hand tracking is disabled. -->
+        <meta-data
+            android:name="xr_hand_tracking_metadata_name"
+            android:value="xr_hand_tracking_metadata_value"/>
+
+        <!-- Supported Meta devices -->
+        <!-- This is removed by the exporter if the xr mode is not VR. -->
+        <meta-data
+            android:name="com.oculus.supportedDevices"
+            android:value="all" />
+
+        <activity
+            android:name=".GodotApp"
+            android:label="@string/godot_project_name_string"
+            android:theme="@style/GodotAppSplashTheme"
+            android:launchMode="singleTask"
+            android:excludeFromRecents="false"
+            android:screenOrientation="landscape"
+            android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|density|keyboard|navigation|screenLayout|uiMode"
+            android:resizeableActivity="false"
+            tools:ignore="UnusedAttribute" >
+
+            <!-- Focus awareness metadata is removed at export time if the xr mode is not VR. -->
+            <meta-data android:name="com.oculus.vr.focusaware" android:value="true" />
+
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+
+                <!-- Enable access to OpenXR on Oculus mobile devices, no-op on other Android
+                platforms. -->
+                <category android:name="com.oculus.intent.category.VR" />
+            </intent-filter>
+        </activity>
+
+<!-- Custom application XML added by add-ons. -->
+<!--CHUNK_APPLICATION_BEGIN-->
+<!--CHUNK_APPLICATION_END-->
+
+    </application>
+
+</manifest>

+ 8 - 0
android/build/assetPacks/installTime/build.gradle

@@ -0,0 +1,8 @@
+apply plugin: 'com.android.asset-pack'
+
+assetPack {
+    packName = "installTime" // Directory name for the asset pack
+    dynamicDelivery {
+        deliveryType = "install-time" // Delivery mode
+    }
+}

+ 243 - 0
android/build/build.gradle

@@ -0,0 +1,243 @@
+// Gradle build config for Godot Engine's Android port.
+//
+// Do not remove/modify comments ending with BEGIN/END, they are used to inject
+// addon-specific configuration.
+apply from: 'config.gradle'
+
+buildscript {
+    apply from: 'config.gradle'
+
+    repositories {
+        google()
+        mavenCentral()
+//CHUNK_BUILDSCRIPT_REPOSITORIES_BEGIN
+//CHUNK_BUILDSCRIPT_REPOSITORIES_END
+    }
+    dependencies {
+        classpath libraries.androidGradlePlugin
+        classpath libraries.kotlinGradlePlugin
+//CHUNK_BUILDSCRIPT_DEPENDENCIES_BEGIN
+//CHUNK_BUILDSCRIPT_DEPENDENCIES_END
+    }
+}
+
+apply plugin: 'com.android.application'
+
+allprojects {
+    repositories {
+        google()
+        mavenCentral()
+//CHUNK_ALLPROJECTS_REPOSITORIES_BEGIN
+//CHUNK_ALLPROJECTS_REPOSITORIES_END
+
+        // Godot user plugins custom maven repos
+        String[] mavenRepos = getGodotPluginsMavenRepos()
+        if (mavenRepos != null && mavenRepos.size() > 0) {
+            for (String repoUrl : mavenRepos) {
+                maven {
+                    url repoUrl
+                }
+            }
+        }
+    }
+}
+
+dependencies {
+    implementation libraries.kotlinStdLib
+    implementation libraries.androidxFragment
+
+    if (rootProject.findProject(":lib")) {
+        implementation project(":lib")
+    } else if (rootProject.findProject(":godot:lib")) {
+        implementation project(":godot:lib")
+    } else {
+        // Custom build mode. In this scenario this project is the only one around and the Godot
+        // library is available through the pre-generated godot-lib.*.aar android archive files.
+        debugImplementation fileTree(dir: 'libs/debug', include: ['*.jar', '*.aar'])
+        releaseImplementation fileTree(dir: 'libs/release', include: ['*.jar', '*.aar'])
+    }
+
+    // Godot user plugins remote dependencies
+    String[] remoteDeps = getGodotPluginsRemoteBinaries()
+    if (remoteDeps != null && remoteDeps.size() > 0) {
+        for (String dep : remoteDeps) {
+            implementation dep
+        }
+    }
+
+    // Godot user plugins local dependencies
+    String[] pluginsBinaries = getGodotPluginsLocalBinaries()
+    if (pluginsBinaries != null && pluginsBinaries.size() > 0) {
+        implementation files(pluginsBinaries)
+    }
+
+//CHUNK_DEPENDENCIES_BEGIN
+//CHUNK_DEPENDENCIES_END
+}
+
+android {
+    compileSdkVersion versions.compileSdk
+    buildToolsVersion versions.buildTools
+
+    compileOptions {
+        sourceCompatibility versions.javaVersion
+        targetCompatibility versions.javaVersion
+    }
+
+    assetPacks = [":assetPacks:installTime"]
+
+    defaultConfig {
+        // The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
+        aaptOptions {
+            ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
+        }
+
+        ndk {
+            String[] export_abi_list = getExportEnabledABIs()
+            abiFilters export_abi_list
+        }
+
+        manifestPlaceholders = [godotEditorVersion: getGodotEditorVersion()]
+
+        // Feel free to modify the application id to your own.
+        applicationId getExportPackageName()
+        versionCode getExportVersionCode()
+        versionName getExportVersionName()
+        minSdkVersion getExportMinSdkVersion()
+        targetSdkVersion getExportTargetSdkVersion()
+//CHUNK_ANDROID_DEFAULTCONFIG_BEGIN
+//CHUNK_ANDROID_DEFAULTCONFIG_END
+    }
+
+    lintOptions {
+        abortOnError false
+        disable 'MissingTranslation', 'UnusedResources'
+    }
+
+    ndkVersion versions.ndkVersion
+
+    packagingOptions {
+        exclude 'META-INF/LICENSE'
+        exclude 'META-INF/NOTICE'
+
+        // 'doNotStrip' is enabled for development within Android Studio
+        if (shouldNotStrip()) {
+            doNotStrip '**/*.so'
+        }
+    }
+
+    signingConfigs {
+        debug {
+            if (hasCustomDebugKeystore()) {
+                storeFile new File(getDebugKeystoreFile())
+                storePassword getDebugKeystorePassword()
+                keyAlias getDebugKeyAlias()
+                keyPassword getDebugKeystorePassword()
+            }
+        }
+
+        release {
+            File keystoreFile = new File(getReleaseKeystoreFile())
+            if (keystoreFile.isFile()) {
+                storeFile keystoreFile
+                storePassword getReleaseKeystorePassword()
+                keyAlias getReleaseKeyAlias()
+                keyPassword getReleaseKeystorePassword()
+            }
+        }
+    }
+
+    buildTypes {
+
+        debug {
+            // Signing and zip-aligning are skipped for prebuilt builds, but
+            // performed for custom builds.
+            zipAlignEnabled shouldZipAlign()
+            if (shouldSign()) {
+                signingConfig signingConfigs.debug
+            } else {
+                signingConfig null
+            }
+        }
+
+        release {
+            // Signing and zip-aligning are skipped for prebuilt builds, but
+            // performed for custom builds.
+            zipAlignEnabled shouldZipAlign()
+            if (shouldSign()) {
+                signingConfig signingConfigs.release
+            } else {
+                signingConfig null
+            }
+        }
+    }
+
+    sourceSets {
+        main {
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = [
+                'src'
+//DIR_SRC_BEGIN
+//DIR_SRC_END
+            ]
+            res.srcDirs = [
+                'res'
+//DIR_RES_BEGIN
+//DIR_RES_END
+            ]
+            aidl.srcDirs = [
+                'aidl'
+//DIR_AIDL_BEGIN
+//DIR_AIDL_END
+            ]
+            assets.srcDirs = [
+                'assets'
+//DIR_ASSETS_BEGIN
+//DIR_ASSETS_END
+            ]
+        }
+        debug.jniLibs.srcDirs = [
+            'libs/debug'
+//DIR_JNI_DEBUG_BEGIN
+//DIR_JNI_DEBUG_END
+        ]
+        release.jniLibs.srcDirs = [
+            'libs/release'
+//DIR_JNI_RELEASE_BEGIN
+//DIR_JNI_RELEASE_END
+        ]
+    }
+
+    applicationVariants.all { variant ->
+        variant.outputs.all { output ->
+            output.outputFileName = "android_${variant.name}.apk"
+        }
+    }
+}
+
+task copyAndRenameDebugApk(type: Copy) {
+    from "$buildDir/outputs/apk/debug/android_debug.apk"
+    into getExportPath()
+    rename "android_debug.apk", getExportFilename()
+}
+
+task copyAndRenameReleaseApk(type: Copy) {
+    from "$buildDir/outputs/apk/release/android_release.apk"
+    into getExportPath()
+    rename "android_release.apk", getExportFilename()
+}
+
+task copyAndRenameDebugAab(type: Copy) {
+    from "$buildDir/outputs/bundle/debug/build-debug.aab"
+    into getExportPath()
+    rename "build-debug.aab", getExportFilename()
+}
+
+task copyAndRenameReleaseAab(type: Copy) {
+    from "$buildDir/outputs/bundle/release/build-release.aab"
+    into getExportPath()
+    rename "build-release.aab", getExportFilename()
+}
+
+//CHUNK_GLOBAL_BEGIN
+//CHUNK_GLOBAL_END

+ 303 - 0
android/build/config.gradle

@@ -0,0 +1,303 @@
+ext.versions = [
+    androidGradlePlugin: '7.0.3',
+    compileSdk         : 30,
+    minSdk             : 19, // Also update 'platform/android/java/lib/AndroidManifest.xml#minSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_MIN_SDK_VERSION'
+    targetSdk          : 30, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
+    buildTools         : '30.0.3',
+    kotlinVersion      : '1.6.10',
+    fragmentVersion    : '1.3.6',
+    javaVersion        : 11,
+    ndkVersion         : '21.4.7075529' // Also update 'platform/android/detect.py#get_project_ndk_version()' when this is updated.
+
+]
+
+ext.libraries = [
+    androidGradlePlugin: "com.android.tools.build:gradle:$versions.androidGradlePlugin",
+    kotlinGradlePlugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlinVersion",
+    kotlinStdLib       : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlinVersion",
+    androidxFragment   : "androidx.fragment:fragment:$versions.fragmentVersion",
+]
+
+ext.getExportPackageName = { ->
+    // Retrieve the app id from the project property set by the Godot build command.
+    String appId = project.hasProperty("export_package_name") ? project.property("export_package_name") : ""
+    // Check if the app id is valid, otherwise use the default.
+    if (appId == null || appId.isEmpty()) {
+        appId = "com.godot.game"
+    }
+    return appId
+}
+
+ext.getExportVersionCode = { ->
+    String versionCode = project.hasProperty("export_version_code") ? project.property("export_version_code") : ""
+    if (versionCode == null || versionCode.isEmpty()) {
+        versionCode = "1"
+    }
+    try {
+        return Integer.parseInt(versionCode)
+    } catch (NumberFormatException ignored) {
+        return 1
+    }
+}
+
+ext.getExportVersionName = { ->
+    String versionName = project.hasProperty("export_version_name") ? project.property("export_version_name") : ""
+    if (versionName == null || versionName.isEmpty()) {
+        versionName = "1.0"
+    }
+    return versionName
+}
+
+ext.getExportMinSdkVersion = { ->
+    String minSdkVersion = project.hasProperty("export_version_min_sdk") ? project.property("export_version_min_sdk") : ""
+    if (minSdkVersion == null || minSdkVersion.isEmpty()) {
+        minSdkVersion = "$versions.minSdk"
+    }
+    try {
+        return Integer.parseInt(minSdkVersion)
+    } catch (NumberFormatException ignored) {
+        return versions.minSdk
+    }
+}
+
+ext.getExportTargetSdkVersion = { ->
+    String targetSdkVersion = project.hasProperty("export_version_target_sdk") ? project.property("export_version_target_sdk") : ""
+    if (targetSdkVersion == null || targetSdkVersion.isEmpty()) {
+        targetSdkVersion = "$versions.targetSdk"
+    }
+    try {
+        return Integer.parseInt(targetSdkVersion)
+    } catch (NumberFormatException ignored) {
+        return versions.targetSdk
+    }
+}
+
+ext.getGodotEditorVersion = { ->
+    String editorVersion = project.hasProperty("godot_editor_version") ? project.property("godot_editor_version") : ""
+    if (editorVersion == null || editorVersion.isEmpty()) {
+        // Try the library version first
+        editorVersion = getGodotLibraryVersion()
+
+        if (editorVersion.isEmpty()) {
+            // Fallback value.
+            editorVersion = "custom_build"
+        }
+    }
+    return editorVersion
+}
+
+ext.generateGodotLibraryVersion = { List<String> requiredKeys ->
+    // Attempt to read the version from the `version.py` file.
+    String libraryVersion = ""
+
+    File versionFile = new File("../../../version.py")
+    if (versionFile.isFile()) {
+        def map = [:]
+
+        List<String> lines = versionFile.readLines()
+        for (String line in lines) {
+            String[] keyValue = line.split("=")
+            String key = keyValue[0].trim()
+            String value = keyValue[1].trim().replaceAll("\"", "")
+
+            if (requiredKeys.contains(key)) {
+                if (!value.isEmpty()) {
+                    map[key] = value
+                }
+                requiredKeys.remove(key)
+            }
+        }
+
+        if (requiredKeys.empty) {
+            libraryVersion = map.values().join(".")
+        }
+    }
+
+    if (libraryVersion.isEmpty()) {
+        // Fallback value in case we're unable to read the file.
+        libraryVersion = "custom_build"
+    }
+    return libraryVersion
+}
+
+ext.getGodotLibraryVersion = { ->
+    List<String> requiredKeys = ["major", "minor", "patch", "status", "module_config"]
+    return generateGodotLibraryVersion(requiredKeys)
+}
+
+ext.getGodotPublishVersion = { ->
+    List<String> requiredKeys = ["major", "minor", "patch", "status"]
+    return generateGodotLibraryVersion(requiredKeys)
+}
+
+final String VALUE_SEPARATOR_REGEX = "\\|"
+
+// get the list of ABIs the project should be exported to
+ext.getExportEnabledABIs = { ->
+    String enabledABIs = project.hasProperty("export_enabled_abis") ? project.property("export_enabled_abis") : "";
+    if (enabledABIs == null || enabledABIs.isEmpty()) {
+        enabledABIs = "armeabi-v7a|arm64-v8a|x86|x86_64|"
+    }
+    Set<String> exportAbiFilter = [];
+    for (String abi_name : enabledABIs.split(VALUE_SEPARATOR_REGEX)) {
+        if (!abi_name.trim().isEmpty()){
+            exportAbiFilter.add(abi_name);
+        }
+    }
+    return exportAbiFilter;
+}
+
+ext.getExportPath = {
+    String exportPath = project.hasProperty("export_path") ? project.property("export_path") : ""
+    if (exportPath == null || exportPath.isEmpty()) {
+        exportPath = "."
+    }
+    return exportPath
+}
+
+ext.getExportFilename = {
+    String exportFilename = project.hasProperty("export_filename") ? project.property("export_filename") : ""
+    if (exportFilename == null || exportFilename.isEmpty()) {
+        exportFilename = "godot_android"
+    }
+    return exportFilename
+}
+
+/**
+ * Parse the project properties for the 'plugins_maven_repos' property and return the list
+ * of maven repos.
+ */
+ext.getGodotPluginsMavenRepos = { ->
+    Set<String> mavenRepos = []
+
+    // Retrieve the list of maven repos.
+    if (project.hasProperty("plugins_maven_repos")) {
+        String mavenReposProperty = project.property("plugins_maven_repos")
+        if (mavenReposProperty != null && !mavenReposProperty.trim().isEmpty()) {
+            for (String mavenRepoUrl : mavenReposProperty.split(VALUE_SEPARATOR_REGEX)) {
+                mavenRepos += mavenRepoUrl.trim()
+            }
+        }
+    }
+
+    return mavenRepos
+}
+
+/**
+ * Parse the project properties for the 'plugins_remote_binaries' property and return
+ * it for inclusion in the build dependencies.
+ */
+ext.getGodotPluginsRemoteBinaries = { ->
+    Set<String> remoteDeps = []
+
+    // Retrieve the list of remote plugins binaries.
+    if (project.hasProperty("plugins_remote_binaries")) {
+        String remoteDepsList = project.property("plugins_remote_binaries")
+        if (remoteDepsList != null && !remoteDepsList.trim().isEmpty()) {
+            for (String dep: remoteDepsList.split(VALUE_SEPARATOR_REGEX)) {
+                remoteDeps += dep.trim()
+            }
+        }
+    }
+    return remoteDeps
+}
+
+/**
+ * Parse the project properties for the 'plugins_local_binaries' property and return
+ * their binaries for inclusion in the build dependencies.
+ */
+ext.getGodotPluginsLocalBinaries = { ->
+    Set<String> binDeps = []
+
+    // Retrieve the list of local plugins binaries.
+    if (project.hasProperty("plugins_local_binaries")) {
+        String pluginsList = project.property("plugins_local_binaries")
+        if (pluginsList != null && !pluginsList.trim().isEmpty()) {
+            for (String plugin : pluginsList.split(VALUE_SEPARATOR_REGEX)) {
+                binDeps += plugin.trim()
+            }
+        }
+    }
+
+    return binDeps
+}
+
+ext.getDebugKeystoreFile = { ->
+    String keystoreFile = project.hasProperty("debug_keystore_file") ? project.property("debug_keystore_file") : ""
+    if (keystoreFile == null || keystoreFile.isEmpty()) {
+        keystoreFile = "."
+    }
+    return keystoreFile
+}
+
+ext.hasCustomDebugKeystore = { ->
+    File keystoreFile = new File(getDebugKeystoreFile())
+    return keystoreFile.isFile()
+}
+
+ext.getDebugKeystorePassword = { ->
+    String keystorePassword = project.hasProperty("debug_keystore_password") ? project.property("debug_keystore_password") : ""
+    if (keystorePassword == null || keystorePassword.isEmpty()) {
+        keystorePassword = "android"
+    }
+    return keystorePassword
+}
+
+ext.getDebugKeyAlias = { ->
+    String keyAlias = project.hasProperty("debug_keystore_alias") ? project.property("debug_keystore_alias") : ""
+    if (keyAlias == null || keyAlias.isEmpty()) {
+        keyAlias = "androiddebugkey"
+    }
+    return keyAlias
+}
+
+ext.getReleaseKeystoreFile = { ->
+    String keystoreFile = project.hasProperty("release_keystore_file") ? project.property("release_keystore_file") : ""
+    if (keystoreFile == null || keystoreFile.isEmpty()) {
+        keystoreFile = "."
+    }
+    return keystoreFile
+}
+
+ext.getReleaseKeystorePassword = { ->
+    String keystorePassword = project.hasProperty("release_keystore_password") ? project.property("release_keystore_password") : ""
+    return keystorePassword
+}
+
+ext.getReleaseKeyAlias = { ->
+    String keyAlias = project.hasProperty("release_keystore_alias") ? project.property("release_keystore_alias") : ""
+    return keyAlias
+}
+
+ext.isAndroidStudio = { ->
+    def sysProps = System.getProperties()
+    return sysProps != null && sysProps['idea.platform.prefix'] != null
+}
+
+ext.shouldZipAlign = { ->
+    String zipAlignFlag = project.hasProperty("perform_zipalign") ? project.property("perform_zipalign") : ""
+    if (zipAlignFlag == null || zipAlignFlag.isEmpty()) {
+        if (isAndroidStudio()) {
+            zipAlignFlag = "true"
+        } else {
+            zipAlignFlag = "false"
+        }
+    }
+    return Boolean.parseBoolean(zipAlignFlag)
+}
+
+ext.shouldSign = { ->
+    String signFlag = project.hasProperty("perform_signing") ? project.property("perform_signing") : ""
+    if (signFlag == null || signFlag.isEmpty()) {
+        if (isAndroidStudio()) {
+            signFlag = "true"
+        } else {
+            signFlag = "false"
+        }
+    }
+    return Boolean.parseBoolean(signFlag)
+}
+
+ext.shouldNotStrip = { ->
+    return isAndroidStudio() || project.hasProperty("doNotStrip")
+}

+ 25 - 0
android/build/gradle.properties

@@ -0,0 +1,25 @@
+# Godot custom build Gradle settings.
+# These properties apply when running custom build from the Godot editor.
+# NOTE: This should be kept in sync with 'godot/platform/android/java/gradle.properties' except
+# where otherwise specified.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+android.enableJetifier=true
+android.useAndroidX=true
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx4536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+org.gradle.warning.mode=all
+
+# Enable resource optimizations for release build.
+# NOTE: This is turned off for template release build in order to support the build legacy process.
+android.enableResourceOptimizations=true

BIN
android/build/gradle/wrapper/gradle-wrapper.jar


+ 5 - 0
android/build/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists

+ 185 - 0
android/build/gradlew

@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=`expr $i + 1`
+    done
+    case $i in
+        0) set -- ;;
+        1) set -- "$args0" ;;
+        2) set -- "$args0" "$args1" ;;
+        3) set -- "$args0" "$args1" "$args2" ;;
+        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"

+ 89 - 0
android/build/gradlew.bat

@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

BIN
android/build/libs/debug/godot-lib.debug.aar


BIN
android/build/libs/release/godot-lib.release.aar


BIN
android/build/res/drawable-nodpi/splash.png


BIN
android/build/res/drawable-nodpi/splash_bg_color.png


+ 12 - 0
android/build/res/drawable/splash_drawable.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+	<item android:drawable="@drawable/splash_bg_color" />
+
+	<item>
+		<bitmap
+				android:gravity="center"
+				android:filter="false"
+				android:src="@drawable/splash" />
+	</item>
+</layer-list>

+ 5 - 0
android/build/res/values-ar/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ar</string>
+</resources>

+ 5 - 0
android/build/res/values-bg/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-bg</string>
+</resources>

+ 5 - 0
android/build/res/values-ca/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ca</string>
+</resources>

+ 5 - 0
android/build/res/values-cs/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-cs</string>
+</resources>

+ 5 - 0
android/build/res/values-da/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-da</string>
+</resources>

+ 5 - 0
android/build/res/values-de/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-de</string>
+</resources>

+ 5 - 0
android/build/res/values-el/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-el</string>
+</resources>

+ 5 - 0
android/build/res/values-en/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-en</string>
+</resources>

+ 5 - 0
android/build/res/values-es-rES/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-es_ES</string>
+</resources>

+ 5 - 0
android/build/res/values-es/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-es</string>
+</resources>

+ 5 - 0
android/build/res/values-fa/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-fa</string>
+</resources>

+ 5 - 0
android/build/res/values-fi/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-fi</string>
+</resources>

+ 5 - 0
android/build/res/values-fr/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-fr</string>
+</resources>

+ 5 - 0
android/build/res/values-hi/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-hi</string>
+</resources>

+ 5 - 0
android/build/res/values-hr/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-hr</string>
+</resources>

+ 5 - 0
android/build/res/values-hu/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-hu</string>
+</resources>

+ 5 - 0
android/build/res/values-in/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-in</string>
+</resources>

+ 5 - 0
android/build/res/values-it/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-it</string>
+</resources>

+ 5 - 0
android/build/res/values-iw/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-iw</string>
+</resources>

+ 5 - 0
android/build/res/values-ja/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ja</string>
+</resources>

+ 5 - 0
android/build/res/values-ko/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ko</string>
+</resources>

+ 5 - 0
android/build/res/values-lt/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-lt</string>
+</resources>

+ 5 - 0
android/build/res/values-lv/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-lv</string>
+</resources>

+ 5 - 0
android/build/res/values-nb/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-nb</string>
+</resources>

+ 5 - 0
android/build/res/values-nl/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-nl</string>
+</resources>

+ 5 - 0
android/build/res/values-pl/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-pl</string>
+</resources>

+ 5 - 0
android/build/res/values-pt/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-pt</string>
+</resources>

+ 5 - 0
android/build/res/values-ro/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ro</string>
+</resources>

+ 5 - 0
android/build/res/values-ru/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-ru</string>
+</resources>

+ 5 - 0
android/build/res/values-sk/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-sk</string>
+</resources>

+ 5 - 0
android/build/res/values-sl/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-sl</string>
+</resources>

+ 5 - 0
android/build/res/values-sr/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-sr</string>
+</resources>

+ 5 - 0
android/build/res/values-sv/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-sv</string>
+</resources>

+ 5 - 0
android/build/res/values-th/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-th</string>
+</resources>

+ 5 - 0
android/build/res/values-tl/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-tl</string>
+</resources>

+ 5 - 0
android/build/res/values-tr/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-tr</string>
+</resources>

+ 5 - 0
android/build/res/values-uk/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-uk</string>
+</resources>

+ 5 - 0
android/build/res/values-vi/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-vi</string>
+</resources>

+ 5 - 0
android/build/res/values-zh-rHK/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-zh_HK</string>
+</resources>

+ 5 - 0
android/build/res/values-zh-rTW/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-zh_TW</string>
+</resources>

+ 5 - 0
android/build/res/values-zh/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name-zh</string>
+</resources>

+ 5 - 0
android/build/res/values/godot_project_name_string.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- WARNING: THIS FILE WILL BE OVERWRITTEN AT BUILD TIME-->
+<resources>
+    <string name="godot_project_name_string">godot-project-name</string>
+</resources>

+ 10 - 0
android/build/res/values/themes.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+	<style name="GodotAppMainTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"/>
+
+	<style name="GodotAppSplashTheme" parent="@style/GodotAppMainTheme">
+		<item name="android:windowBackground">@drawable/splash_drawable</item>
+		<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
+	</style>
+</resources>

+ 2 - 0
android/build/settings.gradle

@@ -0,0 +1,2 @@
+// This is the root directory of the Godot custom build.
+include ':assetPacks:installTime'

+ 47 - 0
android/build/src/com/godot/game/GodotApp.java

@@ -0,0 +1,47 @@
+/*************************************************************************/
+/*  GodotApp.java                                                        */
+/*************************************************************************/
+/*                       This file is part of:                           */
+/*                           GODOT ENGINE                                */
+/*                      https://godotengine.org                          */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */
+/*                                                                       */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the       */
+/* "Software"), to deal in the Software without restriction, including   */
+/* without limitation the rights to use, copy, modify, merge, publish,   */
+/* distribute, sublicense, and/or sell copies of the Software, and to    */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions:                                             */
+/*                                                                       */
+/* The above copyright notice and this permission notice shall be        */
+/* included in all copies or substantial portions of the Software.       */
+/*                                                                       */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
+/*************************************************************************/
+
+package com.godot.game;
+
+import org.godotengine.godot.FullScreenGodotApp;
+
+import android.os.Bundle;
+
+/**
+ * Template activity for Godot Android custom builds.
+ * Feel free to extend and modify this class for your custom logic.
+ */
+public class GodotApp extends FullScreenGodotApp {
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		setTheme(R.style.GodotAppMainTheme);
+		super.onCreate(savedInstanceState);
+	}
+}

+ 9 - 0
android/plugins/AdMob.gdap

@@ -0,0 +1,9 @@
+[config]
+
+name="AdMob"
+binary_type="local"
+binary="admob-release.aar"
+
+[dependencies]
+
+remote=["com.google.android.gms:play-services-ads:20.4.0", "com.google.android.ump:user-messaging-platform:2.0.0"]

BIN
android/plugins/admob-debug.aar


BIN
android/plugins/admob-release.aar


+ 2 - 1
enemy.gd

@@ -17,6 +17,7 @@ var dict = {
 }
 
 func _ready():
+#	$CollisionShape2D.get_coll
 	player = get_tree().get_nodes_in_group('player')[0]
 	var array = []
 	for x in $types.get_animation_list():
@@ -72,5 +73,5 @@ func checkapproxpos(var offset = Vector2()):
 
 
 func _on_VisibilityNotifier2D_screen_exited():
-#	if not active: queue_free()
+	if not active: queue_free()
 	pass # Replace with function body.

+ 209 - 1
export_presets.cfg

@@ -7,7 +7,7 @@ custom_features=""
 export_filter="all_resources"
 include_filter=""
 exclude_filter=""
-export_path="../Game Export/bacterium/0.3/bacterium odyssey 6.apk"
+export_path="../Game Export/bacterium/0.5/bacterium odyssey 8.apk"
 script_export_mode=1
 script_encryption_key=""
 
@@ -17,6 +17,7 @@ custom_template/debug=""
 custom_template/release=""
 custom_template/use_custom_build=false
 custom_template/export_format=0
+plugins/AdMob=false
 architectures/armeabi-v7a=true
 architectures/arm64-v8a=true
 architectures/x86=false
@@ -203,3 +204,210 @@ permissions/write_sms=false
 permissions/write_social_stream=false
 permissions/write_sync_settings=false
 permissions/write_user_dictionary=false
+
+[preset.1]
+
+name="AdMob"
+platform="Android"
+runnable=false
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path=""
+script_export_mode=1
+script_encryption_key=""
+
+[preset.1.options]
+
+custom_template/debug=""
+custom_template/release=""
+custom_template/use_custom_build=true
+custom_template/export_format=0
+plugins/AdMob=false
+architectures/armeabi-v7a=true
+architectures/arm64-v8a=true
+architectures/x86=false
+architectures/x86_64=false
+keystore/debug=""
+keystore/debug_user=""
+keystore/debug_password=""
+keystore/release=""
+keystore/release_user=""
+keystore/release_password=""
+one_click_deploy/clear_previous_install=false
+version/code=1
+version/name="1.0"
+version/min_sdk=19
+version/target_sdk=30
+package/unique_name="org.godotengine.$genname"
+package/name=""
+package/signed=true
+package/classify_as_game=true
+package/retain_data_on_uninstall=false
+package/exclude_from_recents=false
+launcher_icons/main_192x192=""
+launcher_icons/adaptive_foreground_432x432=""
+launcher_icons/adaptive_background_432x432=""
+graphics/32_bits_framebuffer=true
+graphics/opengl_debug=false
+xr_features/xr_mode=0
+xr_features/hand_tracking=0
+xr_features/hand_tracking_frequency=0
+xr_features/passthrough=0
+screen/immersive_mode=true
+screen/support_small=true
+screen/support_normal=true
+screen/support_large=true
+screen/support_xlarge=true
+user_data_backup/allow=false
+command_line/extra_args=""
+apk_expansion/enable=false
+apk_expansion/SALT=""
+apk_expansion/public_key=""
+permissions/custom_permissions=PoolStringArray(  )
+permissions/access_checkin_properties=false
+permissions/access_coarse_location=false
+permissions/access_fine_location=false
+permissions/access_location_extra_commands=false
+permissions/access_mock_location=false
+permissions/access_network_state=false
+permissions/access_surface_flinger=false
+permissions/access_wifi_state=false
+permissions/account_manager=false
+permissions/add_voicemail=false
+permissions/authenticate_accounts=false
+permissions/battery_stats=false
+permissions/bind_accessibility_service=false
+permissions/bind_appwidget=false
+permissions/bind_device_admin=false
+permissions/bind_input_method=false
+permissions/bind_nfc_service=false
+permissions/bind_notification_listener_service=false
+permissions/bind_print_service=false
+permissions/bind_remoteviews=false
+permissions/bind_text_service=false
+permissions/bind_vpn_service=false
+permissions/bind_wallpaper=false
+permissions/bluetooth=false
+permissions/bluetooth_admin=false
+permissions/bluetooth_privileged=false
+permissions/brick=false
+permissions/broadcast_package_removed=false
+permissions/broadcast_sms=false
+permissions/broadcast_sticky=false
+permissions/broadcast_wap_push=false
+permissions/call_phone=false
+permissions/call_privileged=false
+permissions/camera=false
+permissions/capture_audio_output=false
+permissions/capture_secure_video_output=false
+permissions/capture_video_output=false
+permissions/change_component_enabled_state=false
+permissions/change_configuration=false
+permissions/change_network_state=false
+permissions/change_wifi_multicast_state=false
+permissions/change_wifi_state=false
+permissions/clear_app_cache=false
+permissions/clear_app_user_data=false
+permissions/control_location_updates=false
+permissions/delete_cache_files=false
+permissions/delete_packages=false
+permissions/device_power=false
+permissions/diagnostic=false
+permissions/disable_keyguard=false
+permissions/dump=false
+permissions/expand_status_bar=false
+permissions/factory_test=false
+permissions/flashlight=false
+permissions/force_back=false
+permissions/get_accounts=false
+permissions/get_package_size=false
+permissions/get_tasks=false
+permissions/get_top_activity_info=false
+permissions/global_search=false
+permissions/hardware_test=false
+permissions/inject_events=false
+permissions/install_location_provider=false
+permissions/install_packages=false
+permissions/install_shortcut=false
+permissions/internal_system_window=false
+permissions/internet=false
+permissions/kill_background_processes=false
+permissions/location_hardware=false
+permissions/manage_accounts=false
+permissions/manage_app_tokens=false
+permissions/manage_documents=false
+permissions/master_clear=false
+permissions/media_content_control=false
+permissions/modify_audio_settings=false
+permissions/modify_phone_state=false
+permissions/mount_format_filesystems=false
+permissions/mount_unmount_filesystems=false
+permissions/nfc=false
+permissions/persistent_activity=false
+permissions/process_outgoing_calls=false
+permissions/read_calendar=false
+permissions/read_call_log=false
+permissions/read_contacts=false
+permissions/read_external_storage=false
+permissions/read_frame_buffer=false
+permissions/read_history_bookmarks=false
+permissions/read_input_state=false
+permissions/read_logs=false
+permissions/read_phone_state=false
+permissions/read_profile=false
+permissions/read_sms=false
+permissions/read_social_stream=false
+permissions/read_sync_settings=false
+permissions/read_sync_stats=false
+permissions/read_user_dictionary=false
+permissions/reboot=false
+permissions/receive_boot_completed=false
+permissions/receive_mms=false
+permissions/receive_sms=false
+permissions/receive_wap_push=false
+permissions/record_audio=false
+permissions/reorder_tasks=false
+permissions/restart_packages=false
+permissions/send_respond_via_message=false
+permissions/send_sms=false
+permissions/set_activity_watcher=false
+permissions/set_alarm=false
+permissions/set_always_finish=false
+permissions/set_animation_scale=false
+permissions/set_debug_app=false
+permissions/set_orientation=false
+permissions/set_pointer_speed=false
+permissions/set_preferred_applications=false
+permissions/set_process_limit=false
+permissions/set_time=false
+permissions/set_time_zone=false
+permissions/set_wallpaper=false
+permissions/set_wallpaper_hints=false
+permissions/signal_persistent_processes=false
+permissions/status_bar=false
+permissions/subscribed_feeds_read=false
+permissions/subscribed_feeds_write=false
+permissions/system_alert_window=false
+permissions/transmit_ir=false
+permissions/uninstall_shortcut=false
+permissions/update_device_stats=false
+permissions/use_credentials=false
+permissions/use_sip=false
+permissions/vibrate=false
+permissions/wake_lock=false
+permissions/write_apn_settings=false
+permissions/write_calendar=false
+permissions/write_call_log=false
+permissions/write_contacts=false
+permissions/write_external_storage=false
+permissions/write_gservices=false
+permissions/write_history_bookmarks=false
+permissions/write_profile=false
+permissions/write_secure_settings=false
+permissions/write_settings=false
+permissions/write_sms=false
+permissions/write_social_stream=false
+permissions/write_sync_settings=false
+permissions/write_user_dictionary=false

+ 398 - 1
main.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=28 format=2]
+[gd_scene load_steps=42 format=2]
 
 [ext_resource path="res://spawner.gd" type="Script" id=1]
 [ext_resource path="res://bacteria.tscn" type="PackedScene" id=2]
@@ -16,6 +16,10 @@
 [ext_resource path="res://debug.gd" type="Script" id=14]
 [ext_resource path="res://sandtex22.png" type="Texture" id=15]
 [ext_resource path="res://sounds/keylock.ogg" type="AudioStream" id=16]
+[ext_resource path="res://ui/BesourinhoULTRA4K.png" type="Texture" id=17]
+[ext_resource path="res://ui/logo.png" type="Texture" id=18]
+[ext_resource path="res://ui/play.png" type="Texture" id=19]
+[ext_resource path="res://mainmenu.gd" type="Script" id=20]
 
 [sub_resource type="DynamicFont" id=1]
 font_data = ExtResource( 6 )
@@ -77,6 +81,304 @@ shader_param/noise = SubResource( 8 )
 shader_param/noise2 = SubResource( 9 )
 shader_param/grad = SubResource( 6 )
 
+[sub_resource type="Shader" id=12]
+code = "// NOTE: Shader automatically converted from Godot Engine 3.4.4.stable's CanvasItemMaterial.
+
+shader_type canvas_item;
+render_mode blend_mix;
+
+void fragment(){
+	COLOR = texture(TEXTURE,UV+vec2(TIME*0.2));
+}"
+
+[sub_resource type="ShaderMaterial" id=13]
+shader = SubResource( 12 )
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 17 )
+region = Rect2( 0, 0, 150, 152 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 17 )
+region = Rect2( 150, 0, 150, 152 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 17 )
+region = Rect2( 300, 0, 150, 152 )
+
+[sub_resource type="SpriteFrames" id=17]
+animations = [ {
+"frames": [ SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ), SubResource( 14 ) ],
+"loop": true,
+"name": "default",
+"speed": 12.0
+} ]
+
+[sub_resource type="Animation" id=21]
+resource_name = "Nova Animação"
+length = 0.4
+loop = true
+tracks/0/type = "value"
+tracks/0/path = NodePath("BesourinhoUltra4k6:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -45.637, 32.1438 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BesourinhoUltra4k5:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 41.0534, -25.7133 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("BesourinhoUltra4k4:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -32.2563, 35.6285 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("BesourinhoUltra4k7:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -32.2563, 35.6285 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("BesourinhoUltra4k8:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 41.0534, -25.7133 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("BesourinhoUltra4k3:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -45.637, 32.1438 ]
+}
+
+[sub_resource type="Animation" id=22]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("BesourinhoUltra4k6:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BesourinhoUltra4k5:rotation_degrees")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("BesourinhoUltra4k4:rotation_degrees")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("BesourinhoUltra4k7:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("BesourinhoUltra4k8:rotation_degrees")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+tracks/5/type = "value"
+tracks/5/path = NodePath("BesourinhoUltra4k3:rotation_degrees")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
+[sub_resource type="Animation" id=18]
+resource_name = "Nova Animação"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath("BesourinhoUltra4k:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 2.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ false, true ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BesourinhoUltra4k2:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 2.6 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 1,
+"values": [ true, false ]
+}
+tracks/2/type = "animation"
+tracks/2/path = NodePath("BesourinhoUltra4k2/AnimationPlayer")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"clips": PoolStringArray( "Nova Animação" ),
+"times": PoolRealArray( 0 )
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("BesourinhoUltra4k2:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ Vector2( 462, 1133 ), Vector2( 506, 969 ), Vector2( 520, 834 ), Vector2( 494, 664 ), Vector2( 284, 551 ), Vector2( 47, 616 ), Vector2( -2, 751 ), Vector2( 19, 892 ), Vector2( 121, 986 ), Vector2( 261, 1025 ), Vector2( 388, 1009 ), Vector2( 451, 936 ), Vector2( 464, 858 ), Vector2( 436, 817 ) ]
+}
+tracks/4/type = "value"
+tracks/4/path = NodePath("BesourinhoUltra4k2:rotation_degrees")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/keys = {
+"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
+"update": 0,
+"values": [ 16.3775, 11.7284, 3.1746, -23.8115, -84.7542, -123.438, -173.394, -212.013, -232.128, -271.241, -303.323, -324.038, -368.21, -394.796 ]
+}
+
+[sub_resource type="Animation" id=19]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath("BesourinhoUltra4k:visible")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ false ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("BesourinhoUltra4k2:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ true ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("BesourinhoUltra4k2:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Vector2( 384, 613 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("BesourinhoUltra4k2:rotation_degrees")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0.0 ]
+}
+
 [node name="main" type="YSort"]
 position = Vector2( 2, 0 )
 
@@ -96,6 +398,7 @@ pause_mode = 2
 script = ExtResource( 3 )
 
 [node name="MarginContainer" type="MarginContainer" parent="restarter"]
+visible = false
 anchor_right = 1.0
 anchor_bottom = 1.0
 margin_left = 80.0
@@ -389,6 +692,99 @@ script = ExtResource( 14 )
 stream = ExtResource( 13 )
 autoplay = true
 
+[node name="PauseMenu" type="CanvasLayer" parent="."]
+pause_mode = 2
+script = ExtResource( 20 )
+
+[node name="TextureButton3" type="Sprite" parent="PauseMenu"]
+material = SubResource( 13 )
+z_index = -255
+texture = ExtResource( 15 )
+centered = false
+region_enabled = true
+region_rect = Rect2( 0, 0, 540, 960 )
+
+[node name="Logo" type="Sprite" parent="PauseMenu"]
+position = Vector2( 267, 162 )
+texture = ExtResource( 18 )
+
+[node name="BesourinhoUltra4k" type="AnimatedSprite" parent="PauseMenu"]
+visible = false
+position = Vector2( 434, 819 )
+rotation = -0.561978
+z_index = 20
+frames = SubResource( 17 )
+frame = 11
+playing = true
+
+[node name="Play" type="TouchScreenButton" parent="PauseMenu"]
+position = Vector2( -2, 697 )
+normal = ExtResource( 19 )
+
+[node name="BesourinhoUltra4k2" type="Sprite" parent="PauseMenu"]
+position = Vector2( 384, 613 )
+z_index = 20
+texture = ExtResource( 17 )
+region_enabled = true
+region_rect = Rect2( 35.4951, -1.51037, 78.6197, 152.539 )
+
+[node name="BesourinhoUltra4k3" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( -33, -24 )
+texture = ExtResource( 17 )
+offset = Vector2( -17, -22 )
+region_enabled = true
+region_rect = Rect2( 6.85741, 1.01094, 34.8782, 55.8891 )
+
+[node name="BesourinhoUltra4k4" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( -38, 4 )
+texture = ExtResource( 17 )
+offset = Vector2( -19, 8 )
+region_enabled = true
+region_rect = Rect2( -4.90872, 69.5066, 40.7612, 39.0803 )
+
+[node name="BesourinhoUltra4k5" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( -39, 42 )
+texture = ExtResource( 17 )
+offset = Vector2( -12, 15 )
+region_enabled = true
+region_rect = Rect2( 9.37872, 111.949, 27.7344, 43.7028 )
+
+[node name="BesourinhoUltra4k6" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( 33, -24 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 17 )
+offset = Vector2( -17, -22 )
+region_enabled = true
+region_rect = Rect2( 6.85741, 1.01094, 34.8782, 55.8891 )
+
+[node name="BesourinhoUltra4k7" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( 38, 4 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 17 )
+offset = Vector2( -19, 8 )
+region_enabled = true
+region_rect = Rect2( -4.90872, 69.5066, 40.7612, 39.0803 )
+
+[node name="BesourinhoUltra4k8" type="Sprite" parent="PauseMenu/BesourinhoUltra4k2"]
+position = Vector2( 38.5, 42 )
+scale = Vector2( -1, 1 )
+texture = ExtResource( 17 )
+offset = Vector2( -12, 15 )
+region_enabled = true
+region_rect = Rect2( 9.37872, 111.949, 27.7344, 43.7028 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="PauseMenu/BesourinhoUltra4k2"]
+pause_mode = 2
+"anims/Nova Animação" = SubResource( 21 )
+anims/RESET = SubResource( 22 )
+
+[node name="AnimationPlayer2" type="AnimationPlayer" parent="PauseMenu/BesourinhoUltra4k2"]
+pause_mode = 2
+root_node = NodePath("../..")
+autoplay = "Nova Animação"
+"anims/Nova Animação" = SubResource( 18 )
+anims/RESET = SubResource( 19 )
+
 [connection signal="dieproxy" from="bacteria" to="restarter" method="_on_bacteria_dieproxy"]
 [connection signal="level_up" from="bacteria" to="PowerUpControl" method="_on_bacteria_level_up"]
 [connection signal="button_down" from="restarter/MarginContainer/VBoxContainer/Button" to="restarter" method="_on_Button_button_down"]
@@ -396,3 +792,4 @@ autoplay = true
 [connection signal="item_activated" from="PowerUpControl/Control2/VSeparator/ItemList" to="PowerUpControl" method="_on_ItemList_item_activated"]
 [connection signal="button_down" from="PowerUpControl/Control2/VSeparator/Button" to="PowerUpControl" method="_on_Button_button_down"]
 [connection signal="button_down" from="PowerUpControl/Control2/VSeparator/Button" to="PowerUpControl/AudioStreamPlayer" method="play"]
+[connection signal="pressed" from="PauseMenu/Play" to="PauseMenu" method="_on_Play_pressed"]

+ 23 - 0
mainmenu.gd

@@ -0,0 +1,23 @@
+extends CanvasLayer
+
+
+# Declare member variables here. Examples:
+# var a = 2
+# var b = "text"
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+	get_tree().paused = true
+	pass # Replace with function body.
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+#func _process(delta):
+#	pass
+
+
+func _on_Play_pressed():
+	get_tree().paused = false
+	for x in get_children():x.visible = false
+	pass # Replace with function body.

+ 1 - 1
project.godot

@@ -94,7 +94,7 @@ window/stretch/mode="viewport"
 
 [editor_plugins]
 
-enabled=PoolStringArray(  )
+enabled=PoolStringArray( "res://addons/admob/plugin.cfg" )
 
 [importer_defaults]
 

BIN
ui/.interfaceBevel.png-autosave.kra


BIN
ui/BesourinhoULTRA4K.png


+ 35 - 0
ui/BesourinhoULTRA4K.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/BesourinhoULTRA4K.png"
+dest_files=[ "res://.import/BesourinhoULTRA4K.png-fd6711bf0111c7ed66b95516e0130c42.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0

BIN
ui/InterfaceLevelUpNew.png~


BIN
ui/button.png~


BIN
ui/logo.png


+ 35 - 0
ui/logo.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/logo.png-16835c693f64f9c3f42182ea44006861.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/logo.png"
+dest_files=[ "res://.import/logo.png-16835c693f64f9c3f42182ea44006861.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0

BIN
ui/play.png


+ 35 - 0
ui/play.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/play.png-7bd0a0a909edd1ae272335835918cbad.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ui/play.png"
+dest_files=[ "res://.import/play.png-7bd0a0a909edd1ae272335835918cbad.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0