diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 0000000..d34191e --- /dev/null +++ b/.codespellrc @@ -0,0 +1,3 @@ +[codespell] +skip = assets/**,addons/**,LICENSES/** +ignore-words-list = lod,LOD diff --git a/.env b/.env new file mode 100644 index 0000000..14fd81b --- /dev/null +++ b/.env @@ -0,0 +1,11 @@ +# Variables used by the Justfile + +# Godot + +GODOT_VERSION=4.3-stable + +# Game + +GAME_NAME=Greeter +GAME_VERSION=0.1.0 +GAME_ITCHIO_KEY=greeter diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dd8a1d7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# Properly detect languages on Github. +*.gd linguist-language=GDScript + +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf + +# The above only works properly for Git 2.10+, so for older versions +# we need to manually list the binary files we don't want modified. +*.mp3 binary +*.png binary +*.hdr binary diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 0000000..400fe34 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,35 @@ +{ + "labels": ["skip-changelog"], + "customManagers": [ + { + "customType": "regex", + "fileMatch": ["^plug\\.gd$"], + "matchStrings": [ + "\\s+plug\\(\\s*\"(?.*)\",\\s+{\\s*\"commit\":\\s*\"(?.*)\",\\s*\"renovate-branch\":\\s*\"(?.*)\"" + ], + "packageNameTemplate": "https://github.com/{{{depName}}}.git", + "versioningTemplate": "git", + "datasourceTemplate": "git-refs" + }, + { + "customType": "regex", + "fileMatch": ["^plug\\.gd$"], + "matchStrings": [ + "\\s+plug\\(\"(?.*?)\",\\ \\{\\s*\"tag\":\\ \"(?.*)\"" + ], + "packageNameTemplate": "https://github.com/{{{depName}}}.git", + "versioningTemplate": "git", + "datasourceTemplate": "git-tags" + }, + { + "customType": "regex", + "fileMatch": ["^.env$"], + "matchStrings": ["GODOT_VERSION=(?.*?)\\n"], + "depNameTemplate": "godotengine/godot", + "packageNameTemplate": "https://github.com/godotengine/godot.git", + "versioningTemplate": "loose", + "extractVersionTemplate": "^(?.*)$", + "datasourceTemplate": "git-tags" + } + ] +} diff --git a/.github/workflows/changelog_verifier.yml b/.github/workflows/changelog_verifier.yml new file mode 100644 index 0000000..3582306 --- /dev/null +++ b/.github/workflows/changelog_verifier.yml @@ -0,0 +1,15 @@ +name: Changelog Verifier + +on: + pull_request: + types: [opened, edited, review_requested, synchronize, reopened, ready_for_review, labeled, unlabeled] + +jobs: + # Enforces the update of a changelog file on every pull request + verify-changelog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dangoslen/changelog-enforcer@v3 + with: + skipLabels: "autocut, skip-changelog" diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml new file mode 100644 index 0000000..a0ca9a3 --- /dev/null +++ b/.github/workflows/links.yml @@ -0,0 +1,20 @@ +name: Link Checker + +on: + pull_request: + types: [opened, edited, review_requested, synchronize, reopened, ready_for_review, labeled, unlabeled] + +jobs: + linkchecker: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: lychee Link Checker + id: lychee + uses: lycheeverse/lychee-action@v2 + with: + args: --accept=200,403,429 "**/*.html" "**/*.md" "**/*.txt" "**/*.json" --exclude "file:///github/workspace/*" --exclude-path ".github/renovate.json" --exclude-mail + fail: true + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/lint_pr_title.yml b/.github/workflows/lint_pr_title.yml new file mode 100644 index 0000000..8ed41cb --- /dev/null +++ b/.github/workflows/lint_pr_title.yml @@ -0,0 +1,31 @@ +name: Lint PR Title + +on: + pull_request_target: + types: [opened, edited, synchronize] + +permissions: + pull-requests: read + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + scopes: | + addons + assets + scripts + scenes + dependabot + workflows + readme + changelog + deps + requireScope: false + validateSingleCommit: true + validateSingleCommitMatchesPrTitle: true diff --git a/.github/workflows/release-packaging.yml b/.github/workflows/release-packaging.yml new file mode 100644 index 0000000..b35a84f --- /dev/null +++ b/.github/workflows/release-packaging.yml @@ -0,0 +1,123 @@ +name: Release Packaging + +on: + push: + workflow_dispatch: + +env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + check: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v4 + - uses: extractions/setup-just@v2 + + - name: Load dotenv + run: just ci-load-dotenv + + - name: Check + run: just fmt + + - name: Ensure version is equal to tag + if: startsWith(github.ref, 'refs/tags/') + run: | + [ "${{ env.game_version }}" == "${{ env.BRANCH_NAME }}" ] || exit 2 + + build: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + needs: [check] + + steps: + - uses: actions/checkout@v4 + - uses: extractions/setup-just@v2 + + - name: Load dotenv + run: just ci-load-dotenv + + - name: Cache Godot + uses: actions/cache@v4 + with: + path: | + ~/.mkflower/bin + ~/.local/share/godot/export_templates + key: ${{ env.godot_version }} + + - name: Export + run: just export + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.game_name }}-v${{ env.game_version }} + path: dist/* + retention-days: 1 + + deploy: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + needs: [check] + + if: github.ref == 'refs/heads/main' + + steps: + - uses: actions/checkout@v4 + - uses: extractions/setup-just@v2 + + - name: Load dotenv + run: just ci-load-dotenv + + - name: Cache Godot + uses: actions/cache@v4 + with: + path: | + ~/.mkflower/bin + ~/.local/share/godot/export_templates + key: ${{ env.godot_version }} + + - name: Export + run: just export-web + + # Installing rsync is needed in order to deploy to GitHub Pages. Without it, the build will fail. + - name: Install rsync + run: | + sudo apt-get update && sudo apt-get install -y rsync + + - name: Deploy to GitHub Pages + uses: JamesIves/github-pages-deploy-action@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: gh-pages + folder: build/web + + publish: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + needs: [build] + + if: startsWith(github.ref, 'refs/tags/') + + steps: + - uses: actions/checkout@v4 + - uses: extractions/setup-just@v2 + + - name: Load dotenv + run: just ci-load-dotenv + + - name: Download artifact + uses: dawidd6/action-download-artifact@v6 + with: + workflow: ${{ github.event.workflow_run.workflow_id }} + name: ${{ env.game_name }}-v${{ env.game_version }} + path: dist/ + skip_unpack: false + + - name: Publish + run: just ci-publish + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57ca861 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Godot-specific ignores +.godot/ +.import/ +gfxrecon_capture_* + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ + +# gd-plug +.plugged/ +addons/* +!addons/gd-plug/ +!addons/export-build-info/ + +# Python-specific ignores +venv/ + +# Export output +dist/ +build/ +override.cfg diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..e538654 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,70 @@ +ci: + autofix_prs: false + autoupdate_commit_msg: 'chore(deps): Bump pre-commit hooks' + autoupdate_schedule: weekly + skip: [format-shaders] + +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-added-large-files # Prevent giant files from being committed + args: ['--maxkb=1500'] + - id: fix-byte-order-marker # Prevents weird UTF-8 encoding edge cases + - id: check-case-conflict # Check if case-insensitive filesystems would bork + - id: check-docstring-first # Check for if docstring was misplaced + - id: check-executables-have-shebangs + - id: check-json # Checks for valid json + - id: check-merge-conflict # Checks strings that look like a committed merge conflict + - id: check-xml # Checks for valid xml + - id: check-yaml # Checks for valid yaml + - id: end-of-file-fixer # Checks for ending with a newline + - id: mixed-line-ending # Consistent LF or CRLF + - id: trailing-whitespace # No trailing whitespace +- repo: https://github.com/fsfe/reuse-tool + rev: v4.0.3 + hooks: + - id: reuse +- repo: https://github.com/codespell-project/codespell + rev: v2.3.0 + hooks: + - id: codespell +- repo: https://github.com/Scony/godot-gdscript-toolkit + rev: 4.3.2 + hooks: + - id: gdformat + exclude: '^addons/gd-plug/' + - id: gdlint + exclude: '^addons/gd-plug/' +- repo: local + hooks: + - id: check-filenames-are-lowercase + name: check that filenames are lowercase + entry: filenames must be lower-case or lower_case only + language: fail + files: '[^a-z0-9._/-]' + exclude: | + (?x)^( + .godot/| + .reuse/| + addons/gd-plug/| + CHANGELOG.md| + CONTRIBUTING.md| + CREDITS.md| + Justfile| + LICENSE.md| + LICENSES/| + public/| + README.md| + RELEASING.md + ) + - id: format-shaders + name: format shaders + entry: clang-format + args: + - --style=llvm + - -Werror + - -i + language: system + files: \.gdshader$ + exclude: ^addons/gd-plug/ diff --git a/.reuse/REUSE-compliant.svg b/.reuse/REUSE-compliant.svg new file mode 100644 index 0000000..5b2a2f4 --- /dev/null +++ b/.reuse/REUSE-compliant.svg @@ -0,0 +1 @@ +REUSE: compliantREUSEcompliant diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 0000000..e42e72b --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,95 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Greeter +Upstream-Contact: Florian Vazelle +Source: https://github.com/MechanicalFlower/game-template + +Files: * +Copyright: 2024 Florian Vazelle +License: MIT + +# Addons + +Files: addons/gd-plug/* +Copyright: 2021 Tan Jian Ping +License: MIT +Source: https://github.com/imjp94/gd-plug + +Files: addons/debug_menu/* +Copyright: 2023-present Hugo Locurcio and contributors +License: MIT +Source: https://github.com/godot-extended-libraries/godot-debug-menu + +Files: addons/controller_icons/* +Copyright: 2023 Ricardo Subtil +License: MIT +Source: https://github.com/rsubtil/controller_icons/ + +Files: addons/destruction/* +Copyright: 2023-2023 Jummit and contributors +License: MIT +Source: https://github.com/Jummit/godot-destruction-plugin + +Files: addons/post_processing/* +Copyright: 2024 Korin +License: MIT +Source: https://github.com/ItsKorin/Godot-Post-Process-Plugin + +Files: addons/proton_scatter/* +Copyright: 2019 HungryProton +License: MIT +Source: https://github.com/HungryProton/scatter + +# Models + +Files: assets/models/graveyard/* +Copyright: 2022 Kenney +License: CC0-1.0 +Source: https://www.kenney.nl/ + +# Textures + +Files: assets/textures/icons/* +Copyright: 2023 Icons8 +License: LicenseRef-linksware +Source: https://icons8.com/ + +# Files: assets/icon.png +# Copyright: 2024 Pro_Rookie_Gamer +# License: +# Source: https://www.reddit.com/r/godot/comments/1ew7e8c/icon/#lightbox + +# Fonts + +Files: assets/fonts/bad.ttf +Copyright: 2020 Santiago Merino +License: CC0-1.0 +Source: https://www.dafont.com/fr/bad.font + +# Sounds + +Files: assets/sounds/boss_theme.ogg +Copyright: 2021 Tausdei +License: CC-BY-3.0 +Source: https://opengameart.org/content/boss-theme-2 + +Files: assets/sounds/sfx/rock_breaking.ogg +Copyright: 2010 Blender Foundation +License: CC-BY-3.0 +Source: https://opengameart.org/content/rockbreaking + +Files: assets/sounds/sfx/cannon/*.ogg +Copyright: 2019 rubberduck +License: CC0-1.0 +Source: https://opengameart.org/content/25-cc0-bang-firework-sfx + +Files: assets/sounds/sfx/hit/*.ogg +Copyright: 2014 TinyWorlds +License: CC0-1.0 +Source: https://opengameart.org/content/5-hit-sounds-dying + +# Shaders + +Files: shaders/highlight.gdshader +Copyright: 2022 OzMaister +License: MIT +Source: https://godotshaders.com/shader/collectable-item-shining-highlight/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..511d227 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# CHANGELOG +Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) + +## [Unreleased] +### Added +- Add web deploy ([#8](https://github.com/MechanicalFlower/godot-template/pull/8)) +- Automating Godot updates with renovate ([#12](https://github.com/MechanicalFlower/godot-template/pull/12)) +### Changed +- Use Justfile as command runner ([#7](https://github.com/MechanicalFlower/godot-template/pull/7)) +### Deprecated +### Removed +### Fixed +### Security +### Dependencies + +[Unreleased]: https://github.com/MechanicalFlower/godot-template/compare/0.1.0...HEAD diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a9750b1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,62 @@ +# Contributing + +We welcome contributions to our open source Godot + game project! There are many ways you can help, + including reporting bugs, improving documentation, + and contributing code. + +## Code of Conduct + +We value the participation of every member of our + community and want to ensure that everyone + has an enjoyable and fulfilling experience. As + such, we have adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as + our code of conduct. By participating in this + project, you agree to abide by its terms. + +## Contributing Code + +To contribute code to the project, follow these steps: + +1. Fork the repository to your own GitHub account. +2. Clone the repository to your local machine. +3. Create a new branch for your changes. +4. Make your changes and commit them to your local repository. +5. Push your changes to your forked repository on GitHub. +6. Create a pull request from your forked repository to the original repository. + +Please note that all code contributions should + pass the continuous integration (CI) checks + that are set up for the project. These checks + ensure that the code is well-formatted and + that tests are passing. + + +## Reporting Bugs + +If you find a bug in the project, please report + it by creating an issue in the repository's issue + tracker. Be sure to include as much information + as possible, including the steps to reproduce + the bug and any relevant error messages. + +## Improving Documentation + +If you would like to improve the documentation + for the project, you can do so by submitting a + pull request with your changes. Please follow + the same process as for contributing code, and + make sure that your changes are properly formatted + and well-written. + +## Questions and Feedback + +If you have any questions or feedback about the + project, don't hesitate to reach out! You can + create an issue in the repository's issue tracker, + or contact us directly through our website or + social media channels. + +Thank you for considering contributing to our + open source Godot game project! We appreciate + your help and look forward to working with you. diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..507dbd6 --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,22 @@ +# Credits + +## Addons +- "[addons/gd-plug/*](https://github.com/imjp94/gd-plug)" by **Tan Jian Ping** licensed under [MIT](./LICENSES/MIT.txt) +- "[addons/debug_menu/*](https://github.com/godot-extended-libraries/godot-debug-menu)" by **Hugo Locurcio and contributors** licensed under [MIT](./LICENSES/MIT.txt) +- "[addons/controller_icons/*](https://github.com/rsubtil/controller_icons/)" by **Ricardo Subtil** licensed under [MIT](./LICENSES/MIT.txt) +- "[addons/destruction/*](https://github.com/Jummit/godot-destruction-plugin)" by **Jummit and contributors** licensed under [MIT](./LICENSES/MIT.txt) +- "[addons/post_processing/*](https://github.com/ItsKorin/Godot-Post-Process-Plugin)" by **Korin** licensed under [MIT](./LICENSES/MIT.txt) +- "[addons/proton_scatter/*](https://github.com/HungryProton/scatter)" by **HungryProton** licensed under [MIT](./LICENSES/MIT.txt) +## Models +- "[assets/models/graveyard/*](https://www.kenney.nl/)" by **Kenney** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +## Textures +- "[assets/textures/icons/*](https://icons8.com/)" by **Icons8** licensed under [LicenseRef-linksware](./LICENSES/LicenseRef-linksware.txt) +## Fonts +- "[assets/fonts/bad.ttf](https://www.dafont.com/fr/bad.font)" by **Santiago Merino** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +## Sounds +- "[assets/sounds/boss_theme.ogg](https://opengameart.org/content/boss-theme-2)" by **Tausdei** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +- "[assets/sounds/sfx/rock_breaking.ogg](https://opengameart.org/content/rockbreaking)" by **Blender Foundation** licensed under [CC-BY-3.0](./LICENSES/CC-BY-3.0.txt) +- "[assets/sounds/sfx/cannon/*.ogg](https://opengameart.org/content/25-cc0-bang-firework-sfx)" by **rubberduck** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +- "[assets/sounds/sfx/hit/*.ogg](https://opengameart.org/content/5-hit-sounds-dying)" by **TinyWorlds** licensed under [CC0-1.0](./LICENSES/CC0-1.0.txt) +## Shaders +- "[shaders/highlight.gdshader](https://godotshaders.com/shader/collectable-item-shining-highlight/)" by **OzMaister** licensed under [MIT](./LICENSES/MIT.txt) diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..d6cbc12 --- /dev/null +++ b/Justfile @@ -0,0 +1,263 @@ +#!/usr/bin/env -S just --justfile + +# === Settings === + +set dotenv-load := true + +# === Aliases === + +[private] +alias g := godot + +[private] +alias e := editor + +# === Variables === + +# Global directories +# To make the Godot binaries available for other projects +home_dir := env_var('HOME') +main_dir := home_dir / ".mkflower" +cache_dir := main_dir / "cache" +bin_dir := main_dir / "bin" + +# Local directories for game exports +build_dir := justfile_directory() / "build" +dist_dir := justfile_directory() / "dist" + +# Godot variables +godot_version := env_var('GODOT_VERSION') +godot_platform := if arch() == "x86" { + "linux.x86_32" +} else if arch() == "x86_64" { + "linux.x86_64" +} else if arch() == "arm" { + "linux.arm32" +} else if arch() == "aarch64" { + "linux.arm64" +} else { + "" +} +godot_filename := "Godot_v" + godot_version + "_" + godot_platform +godot_template := "Godot_v" + godot_version + "_export_templates.tpz" +godot_bin := bin_dir / godot_filename +godot_editor_data_dir := "~/.local/share/godot" +godot_templates_dir := godot_editor_data_dir / "export_templates" / replace_regex(godot_version, "([^-]+)-([^-]+)", "$1.$2") + +# Game variables +game_name := env_var('GAME_NAME') +game_version := env_var('GAME_VERSION') +game_itchio_key := env_var_or_default('GAME_ITCHIO_KEY', "") + +# Build info +datetime := `date '+%Y%m%d'` +short_version := replace_regex(game_version, "([0-9]+).([0-9]+).[0-9]+", "$1.$2") +commit_hash := `git log --pretty=format:"%H" -1` + +# Python virtualenv +venv_dir := justfile_directory() / "venv" + +# Butler binary +butler_bin := bin_dir / "butler" +butler_platform := if arch() == "x86" { + "linux-386" +} else if arch() == "x86_64" { + "linux-amd64" +} else { + "" +} + +# === Commands === + +# Display all commands +@default: + echo -e "OS: {{ os() }} - ARCH: {{ arch() }}\n" + just --list + +# Create directories +[private] +@makedirs: + mkdir -p {{ cache_dir }} {{ bin_dir }} {{ build_dir }} {{ dist_dir }} + +# === Installer === +# +# Recipes for checking and/or installing binaries like Godot and Butler. +# Ensures consistent environments across CI and local development. + +# Download Godot +[private] +install-godot: makedirs + curl -L --progress-bar -X GET "https://github.com/godotengine/godot-builds/releases/download/{{ godot_version }}/{{ godot_filename }}.zip" --output {{ cache_dir }}/{{ godot_filename }}.zip + unzip -o {{ cache_dir }}/{{ godot_filename }}.zip -d {{ cache_dir }} + cp {{ cache_dir }}/{{ godot_filename }} {{ godot_bin }} + +# Check and download Godot if not already installed +[private] +@check-godot: + [ ! -e {{ godot_bin }} ] && just install-godot || true + +# Download Godot export templates +[private] +install-templates: makedirs + curl -L --progress-bar -X GET "https://github.com/godotengine/godot-builds/releases/download/{{ godot_version }}/{{ godot_template }}" --output {{ cache_dir }}/{{ godot_template }} + unzip -o {{ cache_dir }}/{{ godot_template }} -d {{ cache_dir }} + mkdir -p {{ godot_templates_dir }} + cp {{ cache_dir }}/templates/* {{ godot_templates_dir }} + +# Check and download Godot export templates if not already installed +[private] +@check-templates: + [ ! -d {{ godot_templates_dir }} ] && just install-templates || true + +# Download Butler +[private] +install-butler: makedirs + curl -L --silent -X GET "https://broth.itch.ovh/butler/{{ butler_platform }}/LATEST/archive/default" --output {{ cache_dir }}/butler.zip + unzip -o {{ cache_dir }}/butler.zip -d {{ cache_dir }} + mv {{ cache_dir }}/butler {{ butler_bin }} + chmod +x {{ butler_bin }} + +# Check and download Butler if not already installed +[private] +@check-butler: + [ ! -e {{ butler_bin }} ] && just install-butler || true + +# === Python === +# +# Recipes for working with Python and Python packages. +# These recipes ensure that Python packages are installed within a virtual environment, +# providing a clean and isolated environment. + +export PIP_REQUIRE_VIRTUALENV := "true" + +# Python virtualenv wrapper +[private] +@venv *ARGS: + [ ! -d {{ venv_dir }} ] && python3 -m venv {{ venv_dir }} && touch {{ venv_dir }}/.gdignore || true + . {{ venv_dir }}/bin/activate && {{ ARGS }} + +# Run files formatters +fmt: + just venv pip install pre-commit==3.* + just venv pre-commit run -a + +# Generate the CREDTIS.md file +credits: + just venv python ./generate_credits.py + +# === Godot === +# +# Recipes for managing the Godot binary. +# These recipes simplify common tasks such as installing addons, importing game resources, +# and opening the Godot editor. + + +# Godot binary wrapper +godot *ARGS: check-godot check-templates + {{ godot_bin }} {{ ARGS }} + +# Download game plugins +@install-addons: + [ -f plug.gd ] && just godot --headless --script plug.gd install force || true + +# Import game resources +@import-resources: + just godot --headless --import + +# Open the Godot editor +@editor: + just godot --editor + +# === Butler === +# +# Recipes for managing the Butler binary. + +# Bulter wrapper +butler *ARGS: check-butler + {{ butler_bin }} {{ ARGS }} + +# === Export === +# +# Recipes for exporting the game to different platforms. +# Handles tasks such as updating version information, preparing directories, +# and exporting the game for Windows, MacOS, Linux, and the web. + +# Updates the game version for export +@bump-version: + echo "Update version in the presets.cfg" + sed -i "s,application/file_version=.*$,application/file_version=\"{{ game_version }}.{{ datetime }}\",g" ./export_presets.cfg + sed -i "s,application/product_version=.*$,application/product_version=\"{{ game_version }}.{{ datetime }}\",g" ./export_presets.cfg + sed -i "s,application/version=.*$,application/version=\"{{ game_version }}\",g" ./export_presets.cfg + sed -i "s,application/short_version=.*$,application/short_version=\"{{ short_version }}\",g" ./export_presets.cfg + + echo "Update version in the project.godot" + sed -i "s,config/version=.*$,config/version=\"{{ game_version }}\",g" ./project.godot + +[private] +pre-export: clean-addons makedirs bump-version install-addons import-resources + +# Export game on Windows +export-windows: pre-export + mkdir -p {{ build_dir }}/windows + just godot --headless --export-release '"Windows Desktop"' {{ build_dir }}/windows/{{ game_name }}.exe + (cd {{ build_dir }}/windows && zip {{ game_name }}-windows-v{{ game_version }}.zip -r .) + mv {{ build_dir }}/windows/{{ game_name }}-windows-v{{ game_version }}.zip {{ dist_dir }}/{{ game_name }}-windows-v{{ game_version }}.zip + rm -rf {{ build_dir }}/windows + +# Export game on MacOS +export-mac: pre-export + just godot --headless --export-release "macOS" {{ dist_dir }}/{{ game_name }}-mac-v{{ game_version }}.zip + +# Export game on Linux +export-linux: pre-export + mkdir -p {{ build_dir }}/linux + just godot --headless --export-release "Linux/X11" {{ build_dir }}/linux/{{ game_name }}.x86_64 + (cd {{ build_dir }}/linux && zip {{ game_name }}-linux-v{{ game_version }}.zip -r .) + mv {{ build_dir }}/linux/{{ game_name }}-linux-v{{ game_version }}.zip {{ dist_dir }}/{{ game_name }}-linux-v{{ game_version }}.zip + rm -rf {{ build_dir }}/linux + +# Export game for the web +export-web: pre-export + mkdir -p {{ build_dir }}/web + just godot --headless --export-release "Web" {{ build_dir }}/web/index.html + +# Export on all platform +export: export-windows export-mac export-linux + +# === Clean === +# +# Recipes for cleaning up the project, removing files and folders created by this Justfile. + +# Remove game plugins +clean-addons: + rm -rf .plugged + [ -f plug.gd ] && (cd addons/ && git clean -f -X -d) || true + +# Remove files created by Godot +clean-resources: + rm -rf .godot + +# Remove files created during the export +clean-export: + rm -rf {{ build_dir }} {{ dist_dir }} + +# Remove any unnecessary files +clean: clean-addons clean-resources clean-export + +# === CI === +# +# Recipes triggered by CI steps. +# Can be run locally but requires setup of environment variables. + +# Add some variables to Github env +ci-load-dotenv: + echo "godot_version={{ godot_version }}" >> $GITHUB_ENV + echo "game_name={{ game_name }}" >> $GITHUB_ENV + echo "game_version={{ game_version }}" >> $GITHUB_ENV + +# Upload the game on Github and Itch.io +ci-publish: + gh release create "{{ game_version }}" --title="v{{ game_version }}" --generate-notes {{ dist_dir }}/* + just butler push {{ dist_dir }}/{{ game_name }}-windows-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:windows --userversion {{ game_version }} + just butler push {{ dist_dir }}/{{ game_name }}-mac-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:mac --userversion {{ game_version }} + just butler push {{ dist_dir }}/{{ game_name }}-linux-v{{ game_version }}.zip mechanical-flower/{{ game_itchio_key }}:linux --userversion {{ game_version }} diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..8b19eaa --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,8 @@ +Copyright © 2022-present Florian Vazelle + +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. +Footer diff --git a/LICENSES/CC-BY-3.0.txt b/LICENSES/CC-BY-3.0.txt new file mode 100644 index 0000000..1a16e05 --- /dev/null +++ b/LICENSES/CC-BY-3.0.txt @@ -0,0 +1,319 @@ +Creative Commons Legal Code + +Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/LicenseRef-linksware.txt b/LICENSES/LicenseRef-linksware.txt new file mode 100644 index 0000000..838f116 --- /dev/null +++ b/LICENSES/LicenseRef-linksware.txt @@ -0,0 +1,14 @@ +Universal Multimedia License Agreement for Icons8 (https://icons8.com/license/) + +Websites +Add a link to icons8.com on all pages using our content. If that's most pages, a link in your footer is fine. + +Desktop Apps +macOS and Windows applications should have the link to https://icons8.com in the about section. + +Mobile Apps +For smartphone apps, please add a link to https://icons8.com in the about section or settings. +Also, please credit our work in your App Store or Google Play description (something like "Icons by Icons8" is fine). + +Open Source +Established open-source projects could receive the icons for free. For you, we'll open-source the needed resources. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 0000000..2071b23 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4082dfc --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ + +
+ +# 🕯️ MelonCrusade + +![Godot Badge](https://img.shields.io/badge/godot-4.3-blue?logo=Godot-Engine&logoColor=white) +![license](https://img.shields.io/badge/license-MIT-green?logo=open-source-initiative&logoColor=white) +![reuse](./.reuse/REUSE-compliant.svg) + +A boss rush game, made with [Godot Engine](https://godotengine.org/). + +Download on Github +Download on itch.io + +
+ +## About + +Dodge traffic on a busy road, then cross a river by jumping on floating logs and climb a rock to reach the melon. + +## Installation + +### From a release + +Released binaries are available +on the Github repository, in the release section. + +Download the zip archive, accordingly to your OS, and unzip it. + +- **Windows**: Double click on `MelonCrusade.exe`. +- **MacOS**: Double click on `MelonCrusade.app`. +- **Linux**: In a terminal, run `./MelonCrusade.x86_64`. + +### From source + +> [!IMPORTANT] +> For this installation, you need to have +> the Godot Editor installed. + +Clone the source locally: +``` +git clone https://github.com/MechanicalFlower/MelonCrusade.git +``` + +You need to install addons first: +``` +godot --headless --script plug.gd install +``` + +And simply run the game as any Godot project: +``` +godot +``` + +## Development + +The project use: +- [`just`](https://just.systems/man/en/) as command runner, +- [`pre-commit`](https://pre-commit.com/) to run formatters, this requires [Python 3](https://docs.python.org/3/). + +> [!IMPORTANT] +> Actually, `just` recipes only support Linux. + +To check all available recipes, run: +``` +just +``` + +To run formatters: +``` +just fmt +``` + +To install, and run the game: +``` +just install-addons +just godot +``` + +> [!TIP] +> In `just` recipes, the Godot Editor is installed +> automatically. This ensure that you +> use the right version of the engine. + +## Contributing + +![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg) + +We welcome community contributions to this project. + +Please read our [Contributor Guide](CONTRIBUTING.md) for more information on how to get started. + +## Releasing + +Please read our [Release Guide](RELEASING.md) for more information on how we manage our releases. diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..9b50d5f --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,37 @@ +# Releasing + +This document outlines the release policy for games within our organization. + +## Versioning + +We adhere to [Semantic Versioning](https://semver.org/) for our releases, following the `MAJOR.MINOR.PATCH` format. + +## Branching + +Our projects maintain the following active branches: +* **main**: This branch represents the next release and is where all merges take place. + +## Continuous Delivery + +We use [Github Actions](https://docs.github.com/en/actions) to automate the release process. When a new version is released, the CI pipeline automatically triggers a publication on the **GitHub** and **itch.io** platforms. + +## Steps to release + +1. Update the version in the code base + - Update the `.env` file + 1. Change the `GAME_VERSION` variable to the new version + 2. Run the `bump-version` recipe + - Update the `CHANGELOG.md` file + 1. Replace the `Unreleased` title with the new version + 2. Add a link for the new version at the bottom of the changelog + 3. Create a new `Unreleased` section +2. Merge the change into the `main` branch + 1. Create a branch `release-` from the `main` branch + 2. Commit the changes with `"chore: bump version to for release"` as message + 3. Push the branch to the remote repository + 4. Create a pull request targeting the `main` branch + 5. Review the changes in the pull request and ensure they meet the release criteria + 6. Merge the pull request into the `main` branch +3. Tag the `main` branch + 1. Tag the `main` branch with the release version + 2. Push the tags to the remote repository diff --git a/addons/export-build-info/build_info.gd b/addons/export-build-info/build_info.gd new file mode 100644 index 0000000..c4bc315 --- /dev/null +++ b/addons/export-build-info/build_info.gd @@ -0,0 +1,19 @@ +const BUILD_INFO_VERSION := "application/config/version" +const BUILD_INFO_COMMIT := "custom_options/build_info/commit" +const BUILD_INFO_DATE := "custom_options/build_info/date" + + +static func setup_build_info_settings(): + var output := [] + + # Commit Hash + OS.execute("git", ["log", '--pretty=format:"%H"', "-1"], output, false) + output[0] = output[0].trim_suffix("\n") + ProjectSettings.set_as_internal(BUILD_INFO_COMMIT, true) + ProjectSettings.set_setting(BUILD_INFO_COMMIT, output[0]) + + # Datetime + OS.execute("date", ["+%Y/%m/%d"], output, false) + output[1] = output[1].trim_suffix("\n") + ProjectSettings.set_as_internal(BUILD_INFO_DATE, true) + ProjectSettings.set_setting(BUILD_INFO_DATE, output[1]) diff --git a/addons/export-build-info/export_plugin.gd b/addons/export-build-info/export_plugin.gd new file mode 100644 index 0000000..a1db813 --- /dev/null +++ b/addons/export-build-info/export_plugin.gd @@ -0,0 +1,7 @@ +extends EditorExportPlugin + +const BuildInfo := preload("res://addons/export-build-info/build_info.gd") + + +func _export_begin(_features, _is_debug, _path, _flags) -> void: + BuildInfo.setup_build_info_settings() diff --git a/addons/export-build-info/label.gd b/addons/export-build-info/label.gd new file mode 100644 index 0000000..9048772 --- /dev/null +++ b/addons/export-build-info/label.gd @@ -0,0 +1,15 @@ +@tool +extends Label + +const BuildInfo := preload("res://addons/export-build-info/build_info.gd") + + +func _ready(): + var build_version = ProjectSettings.get_setting(BuildInfo.BUILD_INFO_VERSION) + var build_commit = ProjectSettings.get_setting(BuildInfo.BUILD_INFO_COMMIT) + var build_date = ProjectSettings.get_setting(BuildInfo.BUILD_INFO_DATE) + + if build_version and build_commit and build_date: + set_text("v%s @ %s\n%s" % [build_version, build_commit.left(7), build_date]) + else: + set_text("") diff --git a/addons/export-build-info/plugin.cfg b/addons/export-build-info/plugin.cfg new file mode 100644 index 0000000..c89fddd --- /dev/null +++ b/addons/export-build-info/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="build_info" +description="" +author="florianvazelle" +version="0.0.0" +script="plugin.gd" diff --git a/addons/export-build-info/plugin.gd b/addons/export-build-info/plugin.gd new file mode 100644 index 0000000..3d3b081 --- /dev/null +++ b/addons/export-build-info/plugin.gd @@ -0,0 +1,17 @@ +@tool +extends EditorPlugin + +const BuildInfo := preload("res://addons/export-build-info/build_info.gd") + +var export_plugin := preload("res://addons/export-build-info/export_plugin.gd").new() + + +func _enter_tree(): + add_export_plugin(export_plugin) + + if Engine.is_editor_hint(): + BuildInfo.setup_build_info_settings() + + +func _exit_tree(): + remove_export_plugin(export_plugin) diff --git a/addons/gd-plug/plug.gd b/addons/gd-plug/plug.gd new file mode 100644 index 0000000..7ebf0ef --- /dev/null +++ b/addons/gd-plug/plug.gd @@ -0,0 +1,1015 @@ +@tool +extends SceneTree + +signal updated(plugin) + +const VERSION = "0.2.5" +const DEFAULT_PLUGIN_URL = "https://git::@github.com/%s.git" +const DEFAULT_PLUG_DIR = "res://.plugged" +const DEFAULT_CONFIG_PATH = DEFAULT_PLUG_DIR + "/index.cfg" +const DEFAULT_USER_PLUG_SCRIPT_PATH = "res://plug.gd" +const DEFAULT_BASE_PLUG_SCRIPT_PATH = "res://addons/gd-plug/plug.gd" + +const ENV_PRODUCTION = "production" +const ENV_TEST = "test" +const ENV_FORCE = "force" +const ENV_KEEP_IMPORT_FILE = "keep_import_file" +const ENV_KEEP_IMPORT_RESOURCE_FILE = "keep_import_resource_file" + +const MSG_PLUG_START_ASSERTION = "_plug_start() must be called first" + +var project_dir +var installation_config = ConfigFile.new() +var logger = _Logger.new() + +var _installed_plugins +var _plugged_plugins = {} + +var _threads = [] +var _mutex = Mutex.new() +var _start_time = 0 +var threadpool = _ThreadPool.new(logger) + + +func _init(): + threadpool.connect("all_thread_finished", request_quit) + project_dir = DirAccess.open("res://") + +func _initialize(): + var args = OS.get_cmdline_args() + # Trim unwanted args passed to godot executable + for arg in Array(args): + args.remove_at(0) + if "plug.gd" in arg: + break + + for arg in args: + # NOTE: "--key" or "-key" will always be consumed by godot executable, see https://github.com/godotengine/godot/issues/8721 + var key = arg.to_lower() + match key: + "detail": + logger.log_format = _Logger.DEFAULT_LOG_FORMAT_DETAIL + "debug", "d": + logger.log_level = _Logger.LogLevel.DEBUG + "quiet", "q", "silent": + logger.log_level = _Logger.LogLevel.NONE + "production": + OS.set_environment(ENV_PRODUCTION, "true") + "test": + OS.set_environment(ENV_TEST, "true") + "force": + OS.set_environment(ENV_FORCE, "true") + "keep-import-file": + OS.set_environment(ENV_KEEP_IMPORT_FILE, "true") + "keep-import-resource-file": + OS.set_environment(ENV_KEEP_IMPORT_RESOURCE_FILE, "true") + + logger.debug("cmdline_args: %s" % args) + _start_time = Time.get_ticks_msec() + _plug_start() + if args.size() > 0: + _plugging() + match args[0]: + "init": + _plug_init() + "install", "update": + _plug_install() + "uninstall": + _plug_uninstall() + "clean": + _plug_clean() + "upgrade": + _plug_upgrade() + "status": + _plug_status() + "version": + logger.info(VERSION) + _: + logger.error("Unknown command %s" % args[0]) + # NOTE: Do no put anything after this line except request_quit(), as _plug_*() may call request_quit() + request_quit() + +func _process(delta): + threadpool.process(delta) + +func _finalize(): + _plug_end() + threadpool.stop() + logger.info("Finished, elapsed %.3fs" % ((Time.get_ticks_msec() - _start_time) / 1000.0)) + +func _on_updated(plugin): + pass + +func _plugging(): + pass + +func request_quit(exit_code=-1): + if threadpool.is_all_thread_finished() and threadpool.is_all_task_finished(): + quit(exit_code) + return true + logger.debug("Request quit declined, threadpool is still running") + return false + +# Index installed plugins, or create directory "plugged" if not exists +func _plug_start(): + logger.debug("Plug start") + if not project_dir.dir_exists(DEFAULT_PLUG_DIR): + if project_dir.make_dir(ProjectSettings.globalize_path(DEFAULT_PLUG_DIR)) == OK: + logger.debug("Make dir %s for plugin installation") + if installation_config.load(DEFAULT_CONFIG_PATH) == OK: + logger.debug("Installation config loaded") + else: + logger.debug("Installation config not found") + _installed_plugins = installation_config.get_value("plugin", "installed", {}) + +# Install plugin or uninstall plugin if unlisted +func _plug_end(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + var test = !OS.get_environment(ENV_TEST).is_empty() + if not test: + installation_config.set_value("plugin", "installed", _installed_plugins) + if installation_config.save(DEFAULT_CONFIG_PATH) == OK: + logger.debug("Plugged config saved") + else: + logger.error("Failed to save plugged config") + else: + logger.warn("Skipped saving of plugged config in test mode") + _installed_plugins = null + +func _plug_init(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + logger.info("Init gd-plug...") + if FileAccess.file_exists(DEFAULT_USER_PLUG_SCRIPT_PATH): + logger.warn("%s already exists!" % DEFAULT_USER_PLUG_SCRIPT_PATH) + else: + var file = FileAccess.open(DEFAULT_USER_PLUG_SCRIPT_PATH, FileAccess.WRITE) + file.store_string(INIT_PLUG_SCRIPT) + file.close() + logger.info("Created %s" % DEFAULT_USER_PLUG_SCRIPT_PATH) + +func _plug_install(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + threadpool.active = false + logger.info("Installing...") + for plugin in _plugged_plugins.values(): + var installed = plugin.name in _installed_plugins + if installed: + var installed_plugin = get_installed_plugin(plugin.name) + if (installed_plugin.dev or plugin.dev) and OS.get_environment(ENV_PRODUCTION): + logger.info("Remove dev plugin for production: %s" % plugin.name) + threadpool.enqueue_task(uninstall_plugin.bind(installed_plugin)) + else: + threadpool.enqueue_task(update_plugin.bind(plugin)) + else: + threadpool.enqueue_task(install_plugin.bind(plugin)) + + var removed_plugins = [] + for plugin in _installed_plugins.values(): + var removed = not (plugin.name in _plugged_plugins) + if removed: + removed_plugins.append(plugin) + if removed_plugins: + threadpool.disconnect("all_thread_finished", request_quit) + if not threadpool.is_all_thread_finished(): + threadpool.active = true + await threadpool.all_thread_finished + threadpool.active = false + logger.debug("All installation finished! Ready to uninstall removed plugins...") + threadpool.connect("all_thread_finished", request_quit) + for plugin in removed_plugins: + threadpool.enqueue_task(uninstall_plugin.bind(plugin), Thread.PRIORITY_LOW) + threadpool.active = true + +func _plug_uninstall(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + threadpool.active = false + logger.info("Uninstalling...") + for plugin in _installed_plugins.values(): + var installed_plugin = get_installed_plugin(plugin.name) + threadpool.enqueue_task(uninstall_plugin.bind(installed_plugin), Thread.PRIORITY_LOW) + threadpool.active = true + +func _plug_clean(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + threadpool.active = false + logger.info("Cleaning...") + var plugged_dir = DirAccess.open(DEFAULT_PLUG_DIR) + plugged_dir.include_hidden = true + plugged_dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 + var file = plugged_dir.get_next() + while not file.is_empty(): + if plugged_dir.current_is_dir(): + if not (file in _installed_plugins): + logger.info("Remove %s" % file) + threadpool.enqueue_task(directory_delete_recursively.bind(plugged_dir.get_current_dir() + "/" + file)) + file = plugged_dir.get_next() + plugged_dir.list_dir_end() + threadpool.active = true + +func _plug_upgrade(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + threadpool.active = false + logger.info("Upgrading gd-plug...") + plug("imjp94/gd-plug") + var gd_plug = _plugged_plugins["gd-plug"] + OS.set_environment(ENV_FORCE, "true") # Required to overwrite res://addons/gd-plug/plug.gd + threadpool.enqueue_task(install_plugin.bind(gd_plug)) + threadpool.disconnect("all_thread_finished", request_quit) + if not threadpool.is_all_thread_finished(): + threadpool.active = true + await threadpool.all_thread_finished + threadpool.active = false + logger.debug("All installation finished! Ready to uninstall removed plugins...") + threadpool.connect("all_thread_finished", request_quit) + threadpool.enqueue_task(directory_delete_recursively.bind(gd_plug.plug_dir)) + threadpool.active = true + +func _plug_status(): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + threadpool.active = false + logger.info("Installed %d plugin%s" % [_installed_plugins.size(), "s" if _installed_plugins.size() > 1 else ""]) + var new_plugins = _plugged_plugins.duplicate() + var has_checking_plugin = false + var removed_plugins = [] + for plugin in _installed_plugins.values(): + logger.info("- {name} - {url}".format(plugin)) + new_plugins.erase(plugin.name) + var removed = not (plugin.name in _plugged_plugins) + if removed: + removed_plugins.append(plugin) + else: + threadpool.enqueue_task(check_plugin.bind(_plugged_plugins[plugin.name])) + has_checking_plugin = true + if has_checking_plugin: + logger.info("\n", true) + threadpool.disconnect("all_thread_finished", request_quit) + threadpool.active = true + await threadpool.all_thread_finished + threadpool.active = false + threadpool.connect("all_thread_finished", request_quit) + logger.debug("Finished checking plugins, ready to proceed") + if new_plugins: + logger.info("\nPlugged %d plugin%s" % [new_plugins.size(), "s" if new_plugins.size() > 1 else ""]) + for plugin in new_plugins.values(): + var is_new = not (plugin.name in _installed_plugins) + if is_new: + logger.info("- {name} - {url}".format(plugin)) + if removed_plugins: + logger.info("\nUnplugged %d plugin%s" % [removed_plugins.size(), "s" if removed_plugins.size() > 1 else ""]) + for plugin in removed_plugins: + logger.info("- %s removed" % plugin.name) + var plug_directory = DirAccess.open(DEFAULT_PLUG_DIR) + var orphan_dirs = [] + if plug_directory.get_open_error() == OK: + plug_directory.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 + var file = plug_directory.get_next() + while not file.is_empty(): + if plug_directory.current_is_dir(): + if not (file in _installed_plugins): + orphan_dirs.append(file) + file = plug_directory.get_next() + plug_directory.list_dir_end() + if orphan_dirs: + logger.info("\nOrphan directory, %d found in %s, execute \"clean\" command to remove" % [orphan_dirs.size(), DEFAULT_PLUG_DIR]) + for dir in orphan_dirs: + logger.info("- %s" % dir) + threadpool.active = true + + if has_checking_plugin: + request_quit() + +# Index & validate plugin +func plug(repo, args={}): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + repo = repo.strip_edges() + var plugin_name = get_plugin_name_from_repo(repo) + if plugin_name in _plugged_plugins: + logger.info("Plugin already plugged: %s" % plugin_name) + return + var plugin = {} + plugin.name = plugin_name + plugin.url = "" + if ":" in repo: + plugin.url = repo + elif repo.find("/") == repo.rfind("/"): + plugin.url = DEFAULT_PLUGIN_URL % repo + else: + logger.error("Invalid repo: %s" % repo) + plugin.plug_dir = DEFAULT_PLUG_DIR + "/" + plugin.name + + var is_valid = true + plugin.include = args.get("include", []) + is_valid = is_valid and validate_var_type(plugin, "include", TYPE_ARRAY, "Array") + plugin.exclude = args.get("exclude", []) + is_valid = is_valid and validate_var_type(plugin, "exclude", TYPE_ARRAY, "Array") + plugin.branch = args.get("branch", "") + is_valid = is_valid and validate_var_type(plugin, "branch", TYPE_STRING, "String") + plugin.tag = args.get("tag", "") + is_valid = is_valid and validate_var_type(plugin, "tag", TYPE_STRING, "String") + plugin.commit = args.get("commit", "") + is_valid = is_valid and validate_var_type(plugin, "commit", TYPE_STRING, "String") + if not plugin.commit.is_empty(): + var is_valid_commit = plugin.commit.length() == 40 + if not is_valid_commit: + logger.error("Expected full length 40 digits commit-hash string, given %s" % plugin.commit) + is_valid = is_valid and is_valid_commit + plugin.dev = args.get("dev", false) + is_valid = is_valid and validate_var_type(plugin, "dev", TYPE_BOOL, "Boolean") + plugin.on_updated = args.get("on_updated", "") + is_valid = is_valid and validate_var_type(plugin, "on_updated", TYPE_STRING, "String") + plugin.install_root = args.get("install_root", "") + is_valid = is_valid and validate_var_type(plugin, "install_root", TYPE_STRING, "String") + + if is_valid: + _plugged_plugins[plugin.name] = plugin + logger.debug("Plug: %s" % plugin) + else: + logger.error("Failed to plug %s, validation error" % plugin.name) + +func install_plugin(plugin): + var test = !OS.get_environment(ENV_TEST).is_empty() + var can_install = OS.get_environment(ENV_PRODUCTION).is_empty() if plugin.dev else true + if can_install: + logger.info("Installing plugin %s..." % plugin.name) + var result = is_plugin_downloaded(plugin) + if result != OK: + result = downlaod(plugin) + else: + logger.info("Plugin already downloaded") + + if result == OK: + install(plugin) + else: + logger.error("Failed to install plugin %s with error code %d" % [plugin.name, result]) + +func uninstall_plugin(plugin): + var test = !OS.get_environment(ENV_TEST).is_empty() + logger.info("Uninstalling plugin %s..." % plugin.name) + uninstall(plugin) + directory_delete_recursively(plugin.plug_dir, {"exclude": [DEFAULT_CONFIG_PATH], "test": test}) + +func update_plugin(plugin, checking=false): + if not (plugin.name in _installed_plugins): + logger.info("%s new plugin" % plugin.name) + return true + + var git = _GitExecutable.new(ProjectSettings.globalize_path(plugin.plug_dir), logger) + var installed_plugin = get_installed_plugin(plugin.name) + var changes = compare_plugins(plugin, installed_plugin) + var should_clone = false + var should_pull = false + var should_reinstall = false + + if plugin.tag or plugin.commit: + for rev in ["tag", "commit"]: + var freeze_at = plugin[rev] + if freeze_at: + logger.info("%s frozen at %s \"%s\"" % [plugin.name, rev, freeze_at]) + break + else: + var ahead_behind = [] + if git.fetch("origin " + plugin.branch if plugin.branch else "origin").exit == OK: + ahead_behind = git.get_commit_comparison("HEAD", "origin/" + plugin.branch if plugin.branch else "origin") + var is_commit_behind = !!ahead_behind[1] if ahead_behind.size() == 2 else false + if is_commit_behind: + logger.info("%s %d commits behind, update required" % [plugin.name, ahead_behind[1]]) + should_pull = true + else: + logger.info("%s up to date" % plugin.name) + + if changes: + logger.info("%s changed %s" % [plugin.name, changes]) + should_reinstall = true + if "url" in changes or "branch" in changes or "tag" in changes or "commit" in changes: + logger.info("%s repository setting changed, update required" % plugin.name) + should_clone = true + + if not checking: + if should_clone: + logger.info("%s cloning from %s..." % [plugin.name, plugin.url]) + var test = !OS.get_environment(ENV_TEST).is_empty() + uninstall(get_installed_plugin(plugin.name)) + directory_delete_recursively(plugin.plug_dir, {"exclude": [DEFAULT_CONFIG_PATH], "test": test}) + if downlaod(plugin) == OK: + install(plugin) + elif should_pull: + logger.info("%s pulling updates from %s..." % [plugin.name, plugin.url]) + uninstall(get_installed_plugin(plugin.name)) + if git.pull().exit == OK: + install(plugin) + elif should_reinstall: + logger.info("%s reinstalling..." % plugin.name) + uninstall(get_installed_plugin(plugin.name)) + install(plugin) + +func check_plugin(plugin): + update_plugin(plugin, true) + +func downlaod(plugin): + logger.info("Downloading %s from %s..." % [plugin.name, plugin.url]) + var test = !OS.get_environment(ENV_TEST).is_empty() + var global_dest_dir = ProjectSettings.globalize_path(plugin.plug_dir) + if project_dir.dir_exists(plugin.plug_dir): + directory_delete_recursively(plugin.plug_dir) + project_dir.make_dir(plugin.plug_dir) + var result = _GitExecutable.new(global_dest_dir, logger).clone(plugin.url, global_dest_dir, {"branch": plugin.branch, "tag": plugin.tag, "commit": plugin.commit}) + if result.exit == OK: + logger.info("Successfully download %s" % [plugin.name]) + else: + logger.info("Failed to download %s" % plugin.name) + # Make sure plug_dir is clean when failed + directory_delete_recursively(plugin.plug_dir, {"exclude": [DEFAULT_CONFIG_PATH], "test": test}) + project_dir.remove(plugin.plug_dir) # Remove empty directory + return result.exit + +func install(plugin): + var include = plugin.get("include", []) + if include.is_empty(): # Auto include "addons/" folder if not explicitly specified + include = ["addons/"] + if OS.get_environment(ENV_FORCE).is_empty() and OS.get_environment(ENV_TEST).is_empty(): + var is_exists = false + var dest_files = directory_copy_recursively(plugin.plug_dir, "res://" + plugin.install_root, {"include": include, "exclude": plugin.exclude, "test": true, "silent_test": true}) + for dest_file in dest_files: + if project_dir.file_exists(dest_file): + logger.warn("%s attempting to overwrite file %s" % [plugin.name, dest_file]) + is_exists = true + if is_exists: + logger.warn("Installation of %s terminated to avoid overwriting user files, you may disable safe mode with command \"force\"" % plugin.name) + return ERR_ALREADY_EXISTS + + logger.info("Installing files for %s..." % plugin.name) + var test = !OS.get_environment(ENV_TEST).is_empty() + var dest_files = directory_copy_recursively(plugin.plug_dir, "res://" + plugin.install_root, {"include": include, "exclude": plugin.exclude, "test": test}) + plugin.dest_files = dest_files + logger.info("Installed %d file%s for %s" % [dest_files.size(), "s" if dest_files.size() > 1 else "", plugin.name]) + if plugin.name != "gd-plug": + set_installed_plugin(plugin) + if plugin.on_updated: + if has_method(plugin.on_updated): + logger.info("Execute post-update function for %s" % plugin.name) + _on_updated(plugin) + call(plugin.on_updated, plugin.duplicate()) + emit_signal("updated", plugin) + return OK + +func uninstall(plugin): + var test = !OS.get_environment(ENV_TEST).is_empty() + var keep_import_file = !OS.get_environment(ENV_KEEP_IMPORT_FILE).is_empty() + var keep_import_resource_file = !OS.get_environment(ENV_KEEP_IMPORT_RESOURCE_FILE).is_empty() + var dest_files = plugin.get("dest_files", []) + logger.info("Uninstalling %d file%s for %s..." % [dest_files.size(), "s" if dest_files.size() > 1 else "",plugin.name]) + directory_remove_batch(dest_files, {"test": test, "keep_import_file": keep_import_file, "keep_import_resource_file": keep_import_resource_file}) + logger.info("Uninstalled %d file%s for %s" % [dest_files.size(), "s" if dest_files.size() > 1 else "",plugin.name]) + remove_installed_plugin(plugin.name) + +func is_plugin_downloaded(plugin): + if not project_dir.dir_exists(plugin.plug_dir + "/.git"): + return + + var git = _GitExecutable.new(ProjectSettings.globalize_path(plugin.plug_dir), logger) + return git.is_up_to_date(plugin) + +# Get installed plugin, thread safe +func get_installed_plugin(plugin_name): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + _mutex.lock() + var installed_plugin = _installed_plugins[plugin_name] + _mutex.unlock() + return installed_plugin + +# Set installed plugin, thread safe +func set_installed_plugin(plugin): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + _mutex.lock() + _installed_plugins[plugin.name] = plugin + _mutex.unlock() + +# Remove installed plugin, thread safe +func remove_installed_plugin(plugin_name): + assert(_installed_plugins != null, MSG_PLUG_START_ASSERTION) + _mutex.lock() + var result = _installed_plugins.erase(plugin_name) + _mutex.unlock() + return result + +func directory_copy_recursively(from, to, args={}): + var include = args.get("include", []) + var exclude = args.get("exclude", []) + var test = args.get("test", false) + var silent_test = args.get("silent_test", false) + var dir = DirAccess.open(from) + dir.include_hidden = true + var dest_files = [] + if dir.get_open_error() == OK: + dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 + var file_name = dir.get_next() + while not file_name.is_empty(): + var source = dir.get_current_dir() + ("/" if dir.get_current_dir() != "res://" else "") + file_name + var dest = to + ("/" if to != "res://" else "") + file_name + + if dir.current_is_dir(): + dest_files += directory_copy_recursively(source, dest, args) + else: + for include_key in include: + if include_key in source: + var is_excluded = false + for exclude_key in exclude: + if exclude_key in source: + is_excluded = true + break + if not is_excluded: + if test: + if not silent_test: logger.warn("[TEST] Writing to %s" % dest) + else: + dir.make_dir_recursive(to) + if dir.copy(source, dest) == OK: + logger.debug("Copy from %s to %s" % [source, dest]) + dest_files.append(dest) + break + file_name = dir.get_next() + dir.list_dir_end() + else: + logger.error("Failed to access path: %s" % from) + + return dest_files + +func directory_delete_recursively(dir_path, args={}): + var remove_empty_directory = args.get("remove_empty_directory", true) + var exclude = args.get("exclude", []) + var test = args.get("test", false) + var silent_test = args.get("silent_test", false) + var dir = DirAccess.open(dir_path) + dir.include_hidden = true + if dir.get_open_error() == OK: + dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547 + var file_name = dir.get_next() + while not file_name.is_empty(): + var source = dir.get_current_dir() + ("/" if dir.get_current_dir() != "res://" else "") + file_name + + if dir.current_is_dir(): + var sub_dir = directory_delete_recursively(source, args) + if remove_empty_directory: + if test: + if not silent_test: logger.warn("[TEST] Remove empty directory: %s" % sub_dir.get_current_dir()) + else: + if source.get_file() == ".git": + var empty_dir_path = ProjectSettings.globalize_path(source) + var exit = FAILED + match OS.get_name(): + "Windows": + empty_dir_path = "\"%s\"" % empty_dir_path + empty_dir_path = empty_dir_path.replace("/", "\\") + var cmd = "rd /s /q %s" % empty_dir_path + exit = OS.execute("cmd", ["/C", cmd]) + "X11", "OSX", "Server": + empty_dir_path = "\'%s\'" % empty_dir_path + var cmd = "rm -rf %s" % empty_dir_path + exit = OS.execute("bash", ["-c", cmd]) + # Hacks to remove .git, as git pack files stop it from being removed + # See https://stackoverflow.com/questions/1213430/how-to-fully-delete-a-git-repository-created-with-init + if exit == OK: + logger.debug("Remove empty directory: %s" % sub_dir.get_current_dir()) + else: + logger.debug("Failed to remove empty directory: %s" % sub_dir.get_current_dir()) + else: + if dir.remove(sub_dir.get_current_dir()) == OK: + logger.debug("Remove empty directory: %s" % sub_dir.get_current_dir()) + else: + var excluded = false + for exclude_key in exclude: + if source in exclude_key: + excluded = true + break + if not excluded: + if test: + if not silent_test: logger.warn("[TEST] Remove file: %s" % source) + else: + if dir.remove(file_name) == OK: + logger.debug("Remove file: %s" % source) + file_name = dir.get_next() + dir.list_dir_end() + else: + logger.error("Failed to access path: %s" % dir_path) + + if remove_empty_directory: + dir.remove(dir.get_current_dir()) + + return dir + +func directory_remove_batch(files, args={}): + var remove_empty_directory = args.get("remove_empty_directory", true) + var keep_import_file = args.get("keep_import_file", false) + var keep_import_resource_file = args.get("keep_import_resource_file", false) + var test = args.get("test", false) + var silent_test = args.get("silent_test", false) + var dirs = {} + for file in files: + var file_dir = file.get_base_dir() + var file_name =file.get_file() + var dir = dirs.get(file_dir) + + if not dir: + dir = DirAccess.open(file_dir) + dirs[file_dir] = dir + + if file.ends_with(".import"): + if not keep_import_file: + _remove_import_file(dir, file, keep_import_resource_file, test, silent_test) + else: + if test: + if not silent_test: logger.warn("[TEST] Remove file: " + file) + else: + if dir.remove(file_name) == OK: + logger.debug("Remove file: " + file) + if not keep_import_file: + _remove_import_file(dir, file + ".import", keep_import_resource_file, test, silent_test) + + for dir in dirs.values(): + var slash_count = dir.get_current_dir().count("/") - 2 # Deduct 2 slash from "res://" + if test: + if not silent_test: logger.warn("[TEST] Remove empty directory: %s" % dir.get_current_dir()) + else: + if dir.remove(dir.get_current_dir()) == OK: + logger.debug("Remove empty directory: %s" % dir.get_current_dir()) + # Dumb method to clean empty ancestor directories + logger.debug("Removing emoty ancestor directory for %s..." % dir.get_current_dir()) + var current_dir = dir.get_current_dir() + for i in slash_count: + current_dir = current_dir.get_base_dir() + var d = DirAccess.open(current_dir) + if d.get_open_error() == OK: + if test: + if not silent_test: logger.warn("[TEST] Remove empty ancestor directory: %s" % d.get_current_dir()) + else: + if d.remove(d.get_current_dir()) == OK: + logger.debug("Remove empty ancestor directory: %s" % d.get_current_dir()) + +func _remove_import_file(dir, file, keep_import_resource_file=false, test=false, silent_test=false): + if not dir.file_exists(file): + return + + if not keep_import_resource_file: + var import_config = ConfigFile.new() + if import_config.load(file) == OK: + var metadata = import_config.get_value("remap", "metadata", {}) + var imported_formats = metadata.get("imported_formats", []) + if imported_formats: + for format in imported_formats: + _remove_import_resource_file(dir, import_config, "." + format, test) + else: + _remove_import_resource_file(dir, import_config, "", test) + if test: + if not silent_test: logger.warn("[TEST] Remove import file: " + file) + else: + if dir.remove(file) == OK: + logger.debug("Remove import file: " + file) + else: + # TODO: Sometimes Directory.remove() unable to remove random .import file and return error code 1(Generic Error) + # Maybe enforce the removal from shell? + logger.warn("Failed to remove import file: " + file) + +func _remove_import_resource_file(dir, import_config, import_format="", test=false): + var import_resource_file = import_config.get_value("remap", "path" + import_format, "") + var checksum_file = import_resource_file.trim_suffix("." + import_resource_file.get_extension()) + ".md5" if import_resource_file else "" + if import_resource_file: + if dir.file_exists(import_resource_file): + if test: + logger.info("[IMPORT] Remove import resource file: " + import_resource_file) + else: + if dir.remove(import_resource_file) == OK: + logger.debug("Remove import resource file: " + import_resource_file) + if checksum_file: + checksum_file = checksum_file.replace(import_format, "") + if dir.file_exists(checksum_file): + if test: + logger.info("[IMPORT] Remove import checksum file: " + checksum_file) + else: + if dir.remove(checksum_file) == OK: + logger.debug("Remove import checksum file: " + checksum_file) + +func compare_plugins(p1, p2): + var changed_keys = [] + for key in p1.keys(): + var v1 = p1[key] + var v2 = p2[key] + if v1 != v2: + changed_keys.append(key) + return changed_keys + +func get_plugin_name_from_repo(repo): + repo = repo.replace(".git", "").trim_suffix("/") + return repo.get_file() + +func validate_var_type(obj, var_name, type, type_string): + var value = obj.get(var_name) + var is_valid = typeof(value) == type + if not is_valid: + logger.error("Expected variable \"%s\" to be %s, given %s" % [var_name, type_string, value]) + return is_valid + +const INIT_PLUG_SCRIPT = \ +"""extends "res://addons/gd-plug/plug.gd" + +func _plugging(): + # Declare plugins with plug(repo, args) + # For example, clone from github repo("user/repo_name") + # plug("imjp94/gd-YAFSM") # By default, gd-plug will only install anything from "addons/" directory + # Or you can explicitly specify which file/directory to include + # plug("imjp94/gd-YAFSM", {"include": ["addons/"]}) # By default, gd-plug will only install anything from "addons/" directory + pass +""" + +class _GitExecutable extends RefCounted: + var cwd = "" + var logger + + func _init(p_cwd, p_logger): + cwd = p_cwd + logger = p_logger + + func _execute(command, output=[], read_stderr=false): + var cmd = "cd '%s' && %s" % [cwd, command] + # NOTE: OS.execute() seems to ignore read_stderr + var exit = FAILED + match OS.get_name(): + "Windows": + cmd = cmd.replace("\'", "\"") # cmd doesn't accept single-quotes + cmd = cmd if read_stderr else "%s 2> nul" % cmd + logger.debug("Execute \"%s\"" % cmd) + exit = OS.execute("cmd", ["/C", cmd], output, read_stderr) + "macOS", "Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD": + cmd if read_stderr else "%s 2>/dev/null" % cmd + logger.debug("Execute \"%s\"" % cmd) + exit = OS.execute("bash", ["-c", cmd], output, read_stderr) + var unhandled_os: + logger.error("Unexpected OS: %s" % unhandled_os) + logger.debug("Execution ended(code:%d): %s" % [exit, output]) + return exit + + func init(): + logger.debug("Initializing git at %s..." % cwd) + var output = [] + var exit = _execute("git init", output) + logger.debug("Successfully init" if exit == OK else "Failed to init") + return {"exit": exit, "output": output} + + func clone(src, dest, args={}): + logger.debug("Cloning from %s to %s..." % [src, dest]) + var output = [] + var branch = args.get("branch", "") + var tag = args.get("tag", "") + var commit = args.get("commit", "") + var command = "git clone --depth=1 --progress '%s' '%s'" % [src, dest] + if branch or tag: + command = "git clone --depth=1 --single-branch --branch %s '%s' '%s'" % [branch if branch else tag, src, dest] + elif commit: + return clone_commit(src, dest, commit) + var exit = _execute(command, output) + logger.debug("Successfully cloned from %s" % src if exit == OK else "Failed to clone from %s" % src) + return {"exit": exit, "output": output} + + func clone_commit(src, dest, commit): + var output = [] + if commit.length() < 40: + logger.error("Expected full length 40 digits commit-hash to clone specific commit, given {%s}" % commit) + return {"exit": FAILED, "output": output} + + logger.debug("Cloning from %s to %s @ %s..." % [src, dest, commit]) + var result = init() + if result.exit == OK: + result = remote_add("origin", src) + if result.exit == OK: + result = fetch("%s %s" % ["origin", commit]) + if result.exit == OK: + result = reset("--hard", "FETCH_HEAD") + return result + + func fetch(rm="--all"): + logger.debug("Fetching %s..." % rm.replace("--", "")) + var output = [] + var exit = _execute("git fetch %s" % rm, output) + logger.debug("Successfully fetched" if exit == OK else "Failed to fetch") + return {"exit": exit, "output": output} + + func pull(): + logger.debug("Pulling...") + var output = [] + var exit = _execute("git pull --rebase", output) + logger.debug("Successfully pulled" if exit == OK else "Failed to pull") + return {"exit": exit, "output": output} + + func remote_add(name, src): + logger.debug("Adding remote %s@%s..." % [name, src]) + var output = [] + var exit = _execute("git remote add %s '%s'" % [name, src], output) + logger.debug("Successfully added remote" if exit == OK else "Failed to add remote") + return {"exit": exit, "output": output} + + func reset(mode, to): + logger.debug("Resetting %s %s..." % [mode, to]) + var output = [] + var exit = _execute("git reset %s %s" % [mode, to], output) + logger.debug("Successfully reset" if exit == OK else "Failed to reset") + return {"exit": exit, "output": output} + + func get_commit_comparison(branch_a, branch_b): + var output = [] + var exit = _execute("git rev-list --count --left-right %s...%s" % [branch_a, branch_b], output) + var raw_ahead_behind = output[0].split("\t") + var ahead_behind = [] + for msg in raw_ahead_behind: + ahead_behind.append(msg.to_int()) + return ahead_behind if exit == OK else [] + + func get_current_branch(): + var output = [] + var exit = _execute("git rev-parse --abbrev-ref HEAD", output) + return output[0] if exit == OK else "" + + func get_current_tag(): + var output = [] + var exit = _execute("git describe --tags --exact-match", output) + return output[0] if exit == OK else "" + + func get_current_commit(): + var output = [] + var exit = _execute("git rev-parse --short HEAD", output) + return output[0] if exit == OK else "" + + func is_detached_head(): + var output = [] + var exit = _execute("git rev-parse --short HEAD", output) + return (!!output[0]) if exit == OK else true + + func is_up_to_date(args={}): + if fetch().exit == OK: + var branch = args.get("branch", "") + var tag = args.get("tag", "") + var commit = args.get("commit", "") + + if branch: + if branch == get_current_branch(): + return FAILED if is_detached_head() else OK + elif tag: + if tag == get_current_tag(): + return OK + elif commit: + if commit == get_current_commit(): + return OK + + var ahead_behind = get_commit_comparison("HEAD", "origin") + var is_commit_behind = !!ahead_behind[1] if ahead_behind.size() == 2 else false + return FAILED if is_commit_behind else OK + return FAILED + +class _ThreadPool extends RefCounted: + signal all_thread_finished() + + var active = true + + var _threads = [] + var _finished_threads = [] + var _mutex = Mutex.new() + var _tasks = [] + var logger + + func _init(p_logger): + logger = p_logger + _threads.resize(OS.get_processor_count()) + + func _execute_task(task): + var thread = _get_thread() + var can_execute = thread + if can_execute: + task.thread = weakref(thread) + var callable = task.get("callable") + thread.start(_execute.bind(task), task.priority) + logger.debug("Execute task %s.%s() " % [callable.get_object(), callable.get_method()]) + return can_execute + + func _execute(args): + var callable = args.get("callable") + callable.call() + _mutex.lock() + var thread = args.thread.get_ref() + _threads[_threads.find(thread)] = null + _finished_threads.append(thread) + var all_finished = is_all_thread_finished() + _mutex.unlock() + + logger.debug("Execution finished %s.%s() " % [callable.get_object(), callable.get_method()]) + if all_finished: + logger.debug("All thread finished") + emit_signal("all_thread_finished") + + func _flush_tasks(): + if _tasks.size() == 0: + return + + var executed = true + while executed: + var task = _tasks.pop_front() + if task != null: + executed = _execute_task(task) + if not executed: + _tasks.push_front(task) + else: + executed = false + + func _flush_threads(): + for i in _finished_threads.size(): + var thread = _finished_threads.pop_front() + if not thread.is_alive(): + thread.wait_to_finish() + + func enqueue_task(callable, priority=1): + enqueue({"callable": callable, "priority": priority}) + + func enqueue(task): + var can_execute = false + if active: + can_execute = _execute_task(task) + if not can_execute: + _tasks.append(task) + + func process(delta): + if active: + _flush_tasks() + _flush_threads() + + func stop(): + _tasks.clear() + _flush_threads() + + func _get_thread(): + var thread + for i in OS.get_processor_count(): + var t = _threads[i] + if t: + if not t.is_started(): + thread = t + break + else: + thread = Thread.new() + _threads[i] = thread + break + return thread + + func is_all_thread_finished(): + for i in _threads.size(): + if _threads[i]: + return false + return true + + func is_all_task_finished(): + for i in _tasks.size(): + if _tasks[i]: + return false + return true + +class _Logger extends RefCounted: + enum LogLevel { + ALL, DEBUG, INFO, WARN, ERROR, NONE + } + const DEFAULT_LOG_FORMAT_DETAIL = "[{time}] [{level}] {msg}" + const DEFAULT_LOG_FORMAT_NORMAL = "{msg}" + + var log_level = LogLevel.INFO + var log_format = DEFAULT_LOG_FORMAT_NORMAL + var log_time_format = "{year}/{month}/{day} {hour}:{minute}:{second}" + + func debug(msg, raw=false): + _log(LogLevel.DEBUG, msg, raw) + + func info(msg, raw=false): + _log(LogLevel.INFO, msg, raw) + + func warn(msg, raw=false): + _log(LogLevel.WARN, msg, raw) + + func error(msg, raw=false): + _log(LogLevel.ERROR, msg, raw) + + func _log(level, msg, raw=false): + if log_level <= level: + if raw: + printraw(format_log(level, msg)) + else: + print(format_log(level, msg)) + + func format_log(level, msg): + return log_format.format({ + "time": log_time_format.format(get_formatted_datatime()), + "level": LogLevel.keys()[level], + "msg": msg + }) + + func get_formatted_datatime(): + var datetime = Time.get_datetime_dict_from_system() + datetime.year = "%04d" % datetime.year + datetime.month = "%02d" % datetime.month + datetime.day = "%02d" % datetime.day + datetime.hour = "%02d" % datetime.hour + datetime.minute = "%02d" % datetime.minute + datetime.second = "%02d" % datetime.second + return datetime diff --git a/assets/fonts/bad.ttf b/assets/fonts/bad.ttf new file mode 100644 index 0000000..176bd13 Binary files /dev/null and b/assets/fonts/bad.ttf differ diff --git a/assets/fonts/bad.ttf.import b/assets/fonts/bad.ttf.import new file mode 100644 index 0000000..26d2650 --- /dev/null +++ b/assets/fonts/bad.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bf0jaohi58c0m" +path="res://.godot/imported/bad.ttf-755696ca151df5011cad3b7465d0c9dc.fontdata" + +[deps] + +source_file="res://assets/fonts/bad.ttf" +dest_files=["res://.godot/imported/bad.ttf-755696ca151df5011cad3b7465d0c9dc.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000..6e2ac4e Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/icon.png.import b/assets/icon.png.import new file mode 100644 index 0000000..a40eaea --- /dev/null +++ b/assets/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://di3oakoxfc6es" +path="res://.godot/imported/icon.png-b6a7fb2db36edd3d95dc42f1dc8c1c5d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/icon.png" +dest_files=["res://.godot/imported/icon.png-b6a7fb2db36edd3d95dc42f1dc8c1c5d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/models/graveyard/Textures/colormap.png b/assets/models/graveyard/Textures/colormap.png new file mode 100644 index 0000000..095e225 Binary files /dev/null and b/assets/models/graveyard/Textures/colormap.png differ diff --git a/assets/models/graveyard/Textures/colormap.png.import b/assets/models/graveyard/Textures/colormap.png.import new file mode 100644 index 0000000..ccd1dd9 --- /dev/null +++ b/assets/models/graveyard/Textures/colormap.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ttxp3qmptw23" +path.s3tc="res://.godot/imported/colormap.png-1ad00174e3487624ac61d35c0894422c.s3tc.ctex" +path.etc2="res://.godot/imported/colormap.png-1ad00174e3487624ac61d35c0894422c.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/models/graveyard/Textures/colormap.png" +dest_files=["res://.godot/imported/colormap.png-1ad00174e3487624ac61d35c0894422c.s3tc.ctex", "res://.godot/imported/colormap.png-1ad00174e3487624ac61d35c0894422c.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/graveyard/altar-stone.fbx b/assets/models/graveyard/altar-stone.fbx new file mode 100644 index 0000000..f774efc Binary files /dev/null and b/assets/models/graveyard/altar-stone.fbx differ diff --git a/assets/models/graveyard/altar-stone.fbx.import b/assets/models/graveyard/altar-stone.fbx.import new file mode 100644 index 0000000..c93428f --- /dev/null +++ b/assets/models/graveyard/altar-stone.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bk14dyghv0c48" +path="res://.godot/imported/altar-stone.fbx-18d8d0f3043e1459bf6e52f56573abfb.scn" + +[deps] + +source_file="res://assets/models/graveyard/altar-stone.fbx" +dest_files=["res://.godot/imported/altar-stone.fbx-18d8d0f3043e1459bf6e52f56573abfb.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/altar-wood.fbx b/assets/models/graveyard/altar-wood.fbx new file mode 100644 index 0000000..09c45dd Binary files /dev/null and b/assets/models/graveyard/altar-wood.fbx differ diff --git a/assets/models/graveyard/altar-wood.fbx.import b/assets/models/graveyard/altar-wood.fbx.import new file mode 100644 index 0000000..8ef1d46 --- /dev/null +++ b/assets/models/graveyard/altar-wood.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dciximldriuk" +path="res://.godot/imported/altar-wood.fbx-061194cc131d152b72b20f1d0f214065.scn" + +[deps] + +source_file="res://assets/models/graveyard/altar-wood.fbx" +dest_files=["res://.godot/imported/altar-wood.fbx-061194cc131d152b72b20f1d0f214065.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/bench-damaged.fbx b/assets/models/graveyard/bench-damaged.fbx new file mode 100644 index 0000000..5ee90ff Binary files /dev/null and b/assets/models/graveyard/bench-damaged.fbx differ diff --git a/assets/models/graveyard/bench-damaged.fbx.import b/assets/models/graveyard/bench-damaged.fbx.import new file mode 100644 index 0000000..a037b8c --- /dev/null +++ b/assets/models/graveyard/bench-damaged.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cooplqoe34cud" +path="res://.godot/imported/bench-damaged.fbx-6f7ba742dd27d0993b5c23454f70f3cf.scn" + +[deps] + +source_file="res://assets/models/graveyard/bench-damaged.fbx" +dest_files=["res://.godot/imported/bench-damaged.fbx-6f7ba742dd27d0993b5c23454f70f3cf.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/bench.fbx b/assets/models/graveyard/bench.fbx new file mode 100644 index 0000000..7ad9799 Binary files /dev/null and b/assets/models/graveyard/bench.fbx differ diff --git a/assets/models/graveyard/bench.fbx.import b/assets/models/graveyard/bench.fbx.import new file mode 100644 index 0000000..32523ee --- /dev/null +++ b/assets/models/graveyard/bench.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ghbtqi0ovmks" +path="res://.godot/imported/bench.fbx-0e472e26d65bf30d274d39ea0e70add8.scn" + +[deps] + +source_file="res://assets/models/graveyard/bench.fbx" +dest_files=["res://.godot/imported/bench.fbx-0e472e26d65bf30d274d39ea0e70add8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/border-pillar.fbx b/assets/models/graveyard/border-pillar.fbx new file mode 100644 index 0000000..fa49cba Binary files /dev/null and b/assets/models/graveyard/border-pillar.fbx differ diff --git a/assets/models/graveyard/border-pillar.fbx.import b/assets/models/graveyard/border-pillar.fbx.import new file mode 100644 index 0000000..8713a1a --- /dev/null +++ b/assets/models/graveyard/border-pillar.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://eksyrnsmb8aq" +path="res://.godot/imported/border-pillar.fbx-e4c5f96b4ec4a9193bd5ce9d9357d791.scn" + +[deps] + +source_file="res://assets/models/graveyard/border-pillar.fbx" +dest_files=["res://.godot/imported/border-pillar.fbx-e4c5f96b4ec4a9193bd5ce9d9357d791.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/brick-wall-curve-small.fbx b/assets/models/graveyard/brick-wall-curve-small.fbx new file mode 100644 index 0000000..3fcf44d Binary files /dev/null and b/assets/models/graveyard/brick-wall-curve-small.fbx differ diff --git a/assets/models/graveyard/brick-wall-curve-small.fbx.import b/assets/models/graveyard/brick-wall-curve-small.fbx.import new file mode 100644 index 0000000..8e2e6e6 --- /dev/null +++ b/assets/models/graveyard/brick-wall-curve-small.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dhoufim1q54cw" +path="res://.godot/imported/brick-wall-curve-small.fbx-4e2e8f8e489a9017cd61934dd6ac0397.scn" + +[deps] + +source_file="res://assets/models/graveyard/brick-wall-curve-small.fbx" +dest_files=["res://.godot/imported/brick-wall-curve-small.fbx-4e2e8f8e489a9017cd61934dd6ac0397.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/brick-wall-curve.fbx b/assets/models/graveyard/brick-wall-curve.fbx new file mode 100644 index 0000000..de7d373 Binary files /dev/null and b/assets/models/graveyard/brick-wall-curve.fbx differ diff --git a/assets/models/graveyard/brick-wall-curve.fbx.import b/assets/models/graveyard/brick-wall-curve.fbx.import new file mode 100644 index 0000000..31c0d2a --- /dev/null +++ b/assets/models/graveyard/brick-wall-curve.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bi02v1gft32k1" +path="res://.godot/imported/brick-wall-curve.fbx-0a758430f3ad7d00a440aaa246051a37.scn" + +[deps] + +source_file="res://assets/models/graveyard/brick-wall-curve.fbx" +dest_files=["res://.godot/imported/brick-wall-curve.fbx-0a758430f3ad7d00a440aaa246051a37.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/brick-wall-end.fbx b/assets/models/graveyard/brick-wall-end.fbx new file mode 100644 index 0000000..7cd76db Binary files /dev/null and b/assets/models/graveyard/brick-wall-end.fbx differ diff --git a/assets/models/graveyard/brick-wall-end.fbx.import b/assets/models/graveyard/brick-wall-end.fbx.import new file mode 100644 index 0000000..9603370 --- /dev/null +++ b/assets/models/graveyard/brick-wall-end.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://p6j20qprfb17" +path="res://.godot/imported/brick-wall-end.fbx-5083222259efe57cd489cf4ddf980b62.scn" + +[deps] + +source_file="res://assets/models/graveyard/brick-wall-end.fbx" +dest_files=["res://.godot/imported/brick-wall-end.fbx-5083222259efe57cd489cf4ddf980b62.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/brick-wall.fbx b/assets/models/graveyard/brick-wall.fbx new file mode 100644 index 0000000..f970015 Binary files /dev/null and b/assets/models/graveyard/brick-wall.fbx differ diff --git a/assets/models/graveyard/brick-wall.fbx.import b/assets/models/graveyard/brick-wall.fbx.import new file mode 100644 index 0000000..65035eb --- /dev/null +++ b/assets/models/graveyard/brick-wall.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://buvfa4ok2ax12" +path="res://.godot/imported/brick-wall.fbx-a2850257019877cbd12d6c497636e8b4.scn" + +[deps] + +source_file="res://assets/models/graveyard/brick-wall.fbx" +dest_files=["res://.godot/imported/brick-wall.fbx-a2850257019877cbd12d6c497636e8b4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/candle-multiple.fbx b/assets/models/graveyard/candle-multiple.fbx new file mode 100644 index 0000000..39c046b Binary files /dev/null and b/assets/models/graveyard/candle-multiple.fbx differ diff --git a/assets/models/graveyard/candle-multiple.fbx.import b/assets/models/graveyard/candle-multiple.fbx.import new file mode 100644 index 0000000..78f48d3 --- /dev/null +++ b/assets/models/graveyard/candle-multiple.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cawjj8qfw2pig" +path="res://.godot/imported/candle-multiple.fbx-8fe2171f1ad8de5a1e36ff44b463ce3e.scn" + +[deps] + +source_file="res://assets/models/graveyard/candle-multiple.fbx" +dest_files=["res://.godot/imported/candle-multiple.fbx-8fe2171f1ad8de5a1e36ff44b463ce3e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/candle.fbx b/assets/models/graveyard/candle.fbx new file mode 100644 index 0000000..cd0c14d Binary files /dev/null and b/assets/models/graveyard/candle.fbx differ diff --git a/assets/models/graveyard/candle.fbx.import b/assets/models/graveyard/candle.fbx.import new file mode 100644 index 0000000..4e2a27b --- /dev/null +++ b/assets/models/graveyard/candle.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c1fegic68bdtt" +path="res://.godot/imported/candle.fbx-d63da4313d107b33563ca7c7d54fa2d8.scn" + +[deps] + +source_file="res://assets/models/graveyard/candle.fbx" +dest_files=["res://.godot/imported/candle.fbx-d63da4313d107b33563ca7c7d54fa2d8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/character-digger.fbx b/assets/models/graveyard/character-digger.fbx new file mode 100644 index 0000000..efc47a9 Binary files /dev/null and b/assets/models/graveyard/character-digger.fbx differ diff --git a/assets/models/graveyard/character-digger.fbx.import b/assets/models/graveyard/character-digger.fbx.import new file mode 100644 index 0000000..dc92ad6 --- /dev/null +++ b/assets/models/graveyard/character-digger.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bvn27a8p4prnu" +path="res://.godot/imported/character-digger.fbx-71e53d7bee925000fe5aaa903a2eefa4.scn" + +[deps] + +source_file="res://assets/models/graveyard/character-digger.fbx" +dest_files=["res://.godot/imported/character-digger.fbx-71e53d7bee925000fe5aaa903a2eefa4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/character-ghost.fbx b/assets/models/graveyard/character-ghost.fbx new file mode 100644 index 0000000..d7c36c1 Binary files /dev/null and b/assets/models/graveyard/character-ghost.fbx differ diff --git a/assets/models/graveyard/character-ghost.fbx.import b/assets/models/graveyard/character-ghost.fbx.import new file mode 100644 index 0000000..4d7c5f8 --- /dev/null +++ b/assets/models/graveyard/character-ghost.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cvuhkjf80rwjd" +path="res://.godot/imported/character-ghost.fbx-5c7774dd15d66677e93f8358e1d51d8a.scn" + +[deps] + +source_file="res://assets/models/graveyard/character-ghost.fbx" +dest_files=["res://.godot/imported/character-ghost.fbx-5c7774dd15d66677e93f8358e1d51d8a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/character-skeleton.fbx b/assets/models/graveyard/character-skeleton.fbx new file mode 100644 index 0000000..b86250f Binary files /dev/null and b/assets/models/graveyard/character-skeleton.fbx differ diff --git a/assets/models/graveyard/character-skeleton.fbx.import b/assets/models/graveyard/character-skeleton.fbx.import new file mode 100644 index 0000000..5bc9c24 --- /dev/null +++ b/assets/models/graveyard/character-skeleton.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cihmki88er64h" +path="res://.godot/imported/character-skeleton.fbx-9ae286b947f17498e2c16432d323b4a8.scn" + +[deps] + +source_file="res://assets/models/graveyard/character-skeleton.fbx" +dest_files=["res://.godot/imported/character-skeleton.fbx-9ae286b947f17498e2c16432d323b4a8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/character-vampire.fbx b/assets/models/graveyard/character-vampire.fbx new file mode 100644 index 0000000..cb536d8 Binary files /dev/null and b/assets/models/graveyard/character-vampire.fbx differ diff --git a/assets/models/graveyard/character-vampire.fbx.import b/assets/models/graveyard/character-vampire.fbx.import new file mode 100644 index 0000000..a7b6424 --- /dev/null +++ b/assets/models/graveyard/character-vampire.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b8g8gqxsy05x5" +path="res://.godot/imported/character-vampire.fbx-b89106e0596a24e67229aa95ded168ba.scn" + +[deps] + +source_file="res://assets/models/graveyard/character-vampire.fbx" +dest_files=["res://.godot/imported/character-vampire.fbx-b89106e0596a24e67229aa95ded168ba.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/character-zombie.fbx b/assets/models/graveyard/character-zombie.fbx new file mode 100644 index 0000000..693edf5 Binary files /dev/null and b/assets/models/graveyard/character-zombie.fbx differ diff --git a/assets/models/graveyard/character-zombie.fbx.import b/assets/models/graveyard/character-zombie.fbx.import new file mode 100644 index 0000000..10a8d12 --- /dev/null +++ b/assets/models/graveyard/character-zombie.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://8hn130eerinn" +path="res://.godot/imported/character-zombie.fbx-984b9646b82e8db832ae7e2120e5c510.scn" + +[deps] + +source_file="res://assets/models/graveyard/character-zombie.fbx" +dest_files=["res://.godot/imported/character-zombie.fbx-984b9646b82e8db832ae7e2120e5c510.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/coffin-old.fbx b/assets/models/graveyard/coffin-old.fbx new file mode 100644 index 0000000..2b0322c Binary files /dev/null and b/assets/models/graveyard/coffin-old.fbx differ diff --git a/assets/models/graveyard/coffin-old.fbx.import b/assets/models/graveyard/coffin-old.fbx.import new file mode 100644 index 0000000..cb20b43 --- /dev/null +++ b/assets/models/graveyard/coffin-old.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dlo07w0dun81" +path="res://.godot/imported/coffin-old.fbx-420867076f31add5fe467b67dd6aa8e2.scn" + +[deps] + +source_file="res://assets/models/graveyard/coffin-old.fbx" +dest_files=["res://.godot/imported/coffin-old.fbx-420867076f31add5fe467b67dd6aa8e2.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/coffin.fbx b/assets/models/graveyard/coffin.fbx new file mode 100644 index 0000000..8a2270e Binary files /dev/null and b/assets/models/graveyard/coffin.fbx differ diff --git a/assets/models/graveyard/coffin.fbx.import b/assets/models/graveyard/coffin.fbx.import new file mode 100644 index 0000000..765541c --- /dev/null +++ b/assets/models/graveyard/coffin.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cjgbgux5ss7qe" +path="res://.godot/imported/coffin.fbx-085309a9deed509b3b2d398d3ca116b3.scn" + +[deps] + +source_file="res://assets/models/graveyard/coffin.fbx" +dest_files=["res://.godot/imported/coffin.fbx-085309a9deed509b3b2d398d3ca116b3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/column-large.fbx b/assets/models/graveyard/column-large.fbx new file mode 100644 index 0000000..d573f41 Binary files /dev/null and b/assets/models/graveyard/column-large.fbx differ diff --git a/assets/models/graveyard/column-large.fbx.import b/assets/models/graveyard/column-large.fbx.import new file mode 100644 index 0000000..7e2ee03 --- /dev/null +++ b/assets/models/graveyard/column-large.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ybn0hrevjn1k" +path="res://.godot/imported/column-large.fbx-09940be4720db4238a87bff91c6cc5ac.scn" + +[deps] + +source_file="res://assets/models/graveyard/column-large.fbx" +dest_files=["res://.godot/imported/column-large.fbx-09940be4720db4238a87bff91c6cc5ac.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/cross-column.fbx b/assets/models/graveyard/cross-column.fbx new file mode 100644 index 0000000..56bb710 Binary files /dev/null and b/assets/models/graveyard/cross-column.fbx differ diff --git a/assets/models/graveyard/cross-column.fbx.import b/assets/models/graveyard/cross-column.fbx.import new file mode 100644 index 0000000..1a85fc0 --- /dev/null +++ b/assets/models/graveyard/cross-column.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b8lyuti4ujca" +path="res://.godot/imported/cross-column.fbx-f34d7792bf2185e0fd6e1913dd594e68.scn" + +[deps] + +source_file="res://assets/models/graveyard/cross-column.fbx" +dest_files=["res://.godot/imported/cross-column.fbx-f34d7792bf2185e0fd6e1913dd594e68.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/cross-wood.fbx b/assets/models/graveyard/cross-wood.fbx new file mode 100644 index 0000000..f5e5cce Binary files /dev/null and b/assets/models/graveyard/cross-wood.fbx differ diff --git a/assets/models/graveyard/cross-wood.fbx.import b/assets/models/graveyard/cross-wood.fbx.import new file mode 100644 index 0000000..cc2ae51 --- /dev/null +++ b/assets/models/graveyard/cross-wood.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bxgwfixtl2gg2" +path="res://.godot/imported/cross-wood.fbx-38c5038c00b47db4cbd9f37ba1cf3a36.scn" + +[deps] + +source_file="res://assets/models/graveyard/cross-wood.fbx" +dest_files=["res://.godot/imported/cross-wood.fbx-38c5038c00b47db4cbd9f37ba1cf3a36.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/cross.fbx b/assets/models/graveyard/cross.fbx new file mode 100644 index 0000000..ddf66cc Binary files /dev/null and b/assets/models/graveyard/cross.fbx differ diff --git a/assets/models/graveyard/cross.fbx.import b/assets/models/graveyard/cross.fbx.import new file mode 100644 index 0000000..3b74a10 --- /dev/null +++ b/assets/models/graveyard/cross.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://mvv0ucmjfi13" +path="res://.godot/imported/cross.fbx-ce7a87ece6f08301f32205c79c724849.scn" + +[deps] + +source_file="res://assets/models/graveyard/cross.fbx" +dest_files=["res://.godot/imported/cross.fbx-ce7a87ece6f08301f32205c79c724849.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-door.fbx b/assets/models/graveyard/crypt-door.fbx new file mode 100644 index 0000000..d60bd93 Binary files /dev/null and b/assets/models/graveyard/crypt-door.fbx differ diff --git a/assets/models/graveyard/crypt-door.fbx.import b/assets/models/graveyard/crypt-door.fbx.import new file mode 100644 index 0000000..8484fc1 --- /dev/null +++ b/assets/models/graveyard/crypt-door.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://r0ocpnbjb83s" +path="res://.godot/imported/crypt-door.fbx-36bb7cdec2b7844e07fd826604b9cb9b.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-door.fbx" +dest_files=["res://.godot/imported/crypt-door.fbx-36bb7cdec2b7844e07fd826604b9cb9b.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-large-roof.fbx b/assets/models/graveyard/crypt-large-roof.fbx new file mode 100644 index 0000000..cff0a66 Binary files /dev/null and b/assets/models/graveyard/crypt-large-roof.fbx differ diff --git a/assets/models/graveyard/crypt-large-roof.fbx.import b/assets/models/graveyard/crypt-large-roof.fbx.import new file mode 100644 index 0000000..eb6d220 --- /dev/null +++ b/assets/models/graveyard/crypt-large-roof.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ou5f85c85n4k" +path="res://.godot/imported/crypt-large-roof.fbx-1443f7cbff259a008096cc1dc6d9d8dc.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-large-roof.fbx" +dest_files=["res://.godot/imported/crypt-large-roof.fbx-1443f7cbff259a008096cc1dc6d9d8dc.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-large.fbx b/assets/models/graveyard/crypt-large.fbx new file mode 100644 index 0000000..d064a75 Binary files /dev/null and b/assets/models/graveyard/crypt-large.fbx differ diff --git a/assets/models/graveyard/crypt-large.fbx.import b/assets/models/graveyard/crypt-large.fbx.import new file mode 100644 index 0000000..e5b1b37 --- /dev/null +++ b/assets/models/graveyard/crypt-large.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bqhxcycva082d" +path="res://.godot/imported/crypt-large.fbx-966b4783d0d30e356ce7c8c5edeaf78f.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-large.fbx" +dest_files=["res://.godot/imported/crypt-large.fbx-966b4783d0d30e356ce7c8c5edeaf78f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-small-entrance-alternative.fbx b/assets/models/graveyard/crypt-small-entrance-alternative.fbx new file mode 100644 index 0000000..67a5431 Binary files /dev/null and b/assets/models/graveyard/crypt-small-entrance-alternative.fbx differ diff --git a/assets/models/graveyard/crypt-small-entrance-alternative.fbx.import b/assets/models/graveyard/crypt-small-entrance-alternative.fbx.import new file mode 100644 index 0000000..0513b2b --- /dev/null +++ b/assets/models/graveyard/crypt-small-entrance-alternative.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bf2g33spg5gqj" +path="res://.godot/imported/crypt-small-entrance-alternative.fbx-bbc6911d3c7a39884a9299f0982e9377.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-small-entrance-alternative.fbx" +dest_files=["res://.godot/imported/crypt-small-entrance-alternative.fbx-bbc6911d3c7a39884a9299f0982e9377.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-small-entrance.fbx b/assets/models/graveyard/crypt-small-entrance.fbx new file mode 100644 index 0000000..a431aeb Binary files /dev/null and b/assets/models/graveyard/crypt-small-entrance.fbx differ diff --git a/assets/models/graveyard/crypt-small-entrance.fbx.import b/assets/models/graveyard/crypt-small-entrance.fbx.import new file mode 100644 index 0000000..9a906c7 --- /dev/null +++ b/assets/models/graveyard/crypt-small-entrance.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cubv5rjhv3feg" +path="res://.godot/imported/crypt-small-entrance.fbx-95bb45a7d50abf5e837f63c47f40700e.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-small-entrance.fbx" +dest_files=["res://.godot/imported/crypt-small-entrance.fbx-95bb45a7d50abf5e837f63c47f40700e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-small-roof.fbx b/assets/models/graveyard/crypt-small-roof.fbx new file mode 100644 index 0000000..15c35e2 Binary files /dev/null and b/assets/models/graveyard/crypt-small-roof.fbx differ diff --git a/assets/models/graveyard/crypt-small-roof.fbx.import b/assets/models/graveyard/crypt-small-roof.fbx.import new file mode 100644 index 0000000..bc64f31 --- /dev/null +++ b/assets/models/graveyard/crypt-small-roof.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dgsm0jw73froq" +path="res://.godot/imported/crypt-small-roof.fbx-403d5962242e184f3fe66f5ec6b11be4.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-small-roof.fbx" +dest_files=["res://.godot/imported/crypt-small-roof.fbx-403d5962242e184f3fe66f5ec6b11be4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt-small.fbx b/assets/models/graveyard/crypt-small.fbx new file mode 100644 index 0000000..c64ae43 Binary files /dev/null and b/assets/models/graveyard/crypt-small.fbx differ diff --git a/assets/models/graveyard/crypt-small.fbx.import b/assets/models/graveyard/crypt-small.fbx.import new file mode 100644 index 0000000..52c19fd --- /dev/null +++ b/assets/models/graveyard/crypt-small.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cvdvgf5nas5qi" +path="res://.godot/imported/crypt-small.fbx-89475339fb3c1b12d2d2b2f58d02c1f4.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt-small.fbx" +dest_files=["res://.godot/imported/crypt-small.fbx-89475339fb3c1b12d2d2b2f58d02c1f4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/crypt.fbx b/assets/models/graveyard/crypt.fbx new file mode 100644 index 0000000..e020076 Binary files /dev/null and b/assets/models/graveyard/crypt.fbx differ diff --git a/assets/models/graveyard/crypt.fbx.import b/assets/models/graveyard/crypt.fbx.import new file mode 100644 index 0000000..3d08d54 --- /dev/null +++ b/assets/models/graveyard/crypt.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b3f8xel8v10cv" +path="res://.godot/imported/crypt.fbx-9949771e9ce7a899d77abc3dd986cf03.scn" + +[deps] + +source_file="res://assets/models/graveyard/crypt.fbx" +dest_files=["res://.godot/imported/crypt.fbx-9949771e9ce7a899d77abc3dd986cf03.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/debris-wood.fbx b/assets/models/graveyard/debris-wood.fbx new file mode 100644 index 0000000..aadaed3 Binary files /dev/null and b/assets/models/graveyard/debris-wood.fbx differ diff --git a/assets/models/graveyard/debris-wood.fbx.import b/assets/models/graveyard/debris-wood.fbx.import new file mode 100644 index 0000000..9228c97 --- /dev/null +++ b/assets/models/graveyard/debris-wood.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://boj0prduppnvx" +path="res://.godot/imported/debris-wood.fbx-c2d14f9cfa0d5f237fa26e56a5af91f4.scn" + +[deps] + +source_file="res://assets/models/graveyard/debris-wood.fbx" +dest_files=["res://.godot/imported/debris-wood.fbx-c2d14f9cfa0d5f237fa26e56a5af91f4.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/debris.fbx b/assets/models/graveyard/debris.fbx new file mode 100644 index 0000000..0f79398 Binary files /dev/null and b/assets/models/graveyard/debris.fbx differ diff --git a/assets/models/graveyard/debris.fbx.import b/assets/models/graveyard/debris.fbx.import new file mode 100644 index 0000000..1f7bcbb --- /dev/null +++ b/assets/models/graveyard/debris.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cnbwgk70xg6qh" +path="res://.godot/imported/debris.fbx-90a3cebdde61d5d1dda55c777746c0fa.scn" + +[deps] + +source_file="res://assets/models/graveyard/debris.fbx" +dest_files=["res://.godot/imported/debris.fbx-90a3cebdde61d5d1dda55c777746c0fa.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/detail-bowl.fbx b/assets/models/graveyard/detail-bowl.fbx new file mode 100644 index 0000000..734c6c6 Binary files /dev/null and b/assets/models/graveyard/detail-bowl.fbx differ diff --git a/assets/models/graveyard/detail-bowl.fbx.import b/assets/models/graveyard/detail-bowl.fbx.import new file mode 100644 index 0000000..5ebab0c --- /dev/null +++ b/assets/models/graveyard/detail-bowl.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bsyt8ae2uq28p" +path="res://.godot/imported/detail-bowl.fbx-0c4694f9b134e989800257221abc26d7.scn" + +[deps] + +source_file="res://assets/models/graveyard/detail-bowl.fbx" +dest_files=["res://.godot/imported/detail-bowl.fbx-0c4694f9b134e989800257221abc26d7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/detail-chalice.fbx b/assets/models/graveyard/detail-chalice.fbx new file mode 100644 index 0000000..7124fd5 Binary files /dev/null and b/assets/models/graveyard/detail-chalice.fbx differ diff --git a/assets/models/graveyard/detail-chalice.fbx.import b/assets/models/graveyard/detail-chalice.fbx.import new file mode 100644 index 0000000..4c1966b --- /dev/null +++ b/assets/models/graveyard/detail-chalice.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://8hcuem83utxq" +path="res://.godot/imported/detail-chalice.fbx-3527fba6fdd220a50b569b0ee99e6c25.scn" + +[deps] + +source_file="res://assets/models/graveyard/detail-chalice.fbx" +dest_files=["res://.godot/imported/detail-chalice.fbx-3527fba6fdd220a50b569b0ee99e6c25.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/detail-plate.fbx b/assets/models/graveyard/detail-plate.fbx new file mode 100644 index 0000000..37f6028 Binary files /dev/null and b/assets/models/graveyard/detail-plate.fbx differ diff --git a/assets/models/graveyard/detail-plate.fbx.import b/assets/models/graveyard/detail-plate.fbx.import new file mode 100644 index 0000000..732d2ea --- /dev/null +++ b/assets/models/graveyard/detail-plate.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dnm5aiymparx2" +path="res://.godot/imported/detail-plate.fbx-565fb16a62654b712ada0bfacdd3f27c.scn" + +[deps] + +source_file="res://assets/models/graveyard/detail-plate.fbx" +dest_files=["res://.godot/imported/detail-plate.fbx-565fb16a62654b712ada0bfacdd3f27c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/fence-damaged.fbx b/assets/models/graveyard/fence-damaged.fbx new file mode 100644 index 0000000..0fa6106 Binary files /dev/null and b/assets/models/graveyard/fence-damaged.fbx differ diff --git a/assets/models/graveyard/fence-damaged.fbx.import b/assets/models/graveyard/fence-damaged.fbx.import new file mode 100644 index 0000000..85b0801 --- /dev/null +++ b/assets/models/graveyard/fence-damaged.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cre48d4c1q5ct" +path="res://.godot/imported/fence-damaged.fbx-2020a2c36e4b57c68105f0d37726d7aa.scn" + +[deps] + +source_file="res://assets/models/graveyard/fence-damaged.fbx" +dest_files=["res://.godot/imported/fence-damaged.fbx-2020a2c36e4b57c68105f0d37726d7aa.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/fence-gate.fbx b/assets/models/graveyard/fence-gate.fbx new file mode 100644 index 0000000..171fc03 Binary files /dev/null and b/assets/models/graveyard/fence-gate.fbx differ diff --git a/assets/models/graveyard/fence-gate.fbx.import b/assets/models/graveyard/fence-gate.fbx.import new file mode 100644 index 0000000..415b852 --- /dev/null +++ b/assets/models/graveyard/fence-gate.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ii3kjnbuqfsv" +path="res://.godot/imported/fence-gate.fbx-44fa8d2531e5fb40158eb443e3691ee5.scn" + +[deps] + +source_file="res://assets/models/graveyard/fence-gate.fbx" +dest_files=["res://.godot/imported/fence-gate.fbx-44fa8d2531e5fb40158eb443e3691ee5.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/fence.fbx b/assets/models/graveyard/fence.fbx new file mode 100644 index 0000000..6e23a6d Binary files /dev/null and b/assets/models/graveyard/fence.fbx differ diff --git a/assets/models/graveyard/fence.fbx.import b/assets/models/graveyard/fence.fbx.import new file mode 100644 index 0000000..cdaa67a --- /dev/null +++ b/assets/models/graveyard/fence.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://j4p21eth06km" +path="res://.godot/imported/fence.fbx-c8f151fcb8fe45b0dff7dcef1e6f5533.scn" + +[deps] + +source_file="res://assets/models/graveyard/fence.fbx" +dest_files=["res://.godot/imported/fence.fbx-c8f151fcb8fe45b0dff7dcef1e6f5533.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/fire-basket.fbx b/assets/models/graveyard/fire-basket.fbx new file mode 100644 index 0000000..73f01a8 Binary files /dev/null and b/assets/models/graveyard/fire-basket.fbx differ diff --git a/assets/models/graveyard/fire-basket.fbx.import b/assets/models/graveyard/fire-basket.fbx.import new file mode 100644 index 0000000..a8771ef --- /dev/null +++ b/assets/models/graveyard/fire-basket.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cy1l0n31dmj38" +path="res://.godot/imported/fire-basket.fbx-2fe4bb083682e8db9a757cc9960e7197.scn" + +[deps] + +source_file="res://assets/models/graveyard/fire-basket.fbx" +dest_files=["res://.godot/imported/fire-basket.fbx-2fe4bb083682e8db9a757cc9960e7197.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/grave-border.fbx b/assets/models/graveyard/grave-border.fbx new file mode 100644 index 0000000..74a64b3 Binary files /dev/null and b/assets/models/graveyard/grave-border.fbx differ diff --git a/assets/models/graveyard/grave-border.fbx.import b/assets/models/graveyard/grave-border.fbx.import new file mode 100644 index 0000000..7687e2d --- /dev/null +++ b/assets/models/graveyard/grave-border.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cdwq166hxxowm" +path="res://.godot/imported/grave-border.fbx-dd500d9607937bd9eec28ddf53190c68.scn" + +[deps] + +source_file="res://assets/models/graveyard/grave-border.fbx" +dest_files=["res://.godot/imported/grave-border.fbx-dd500d9607937bd9eec28ddf53190c68.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/grave.fbx b/assets/models/graveyard/grave.fbx new file mode 100644 index 0000000..b090fca Binary files /dev/null and b/assets/models/graveyard/grave.fbx differ diff --git a/assets/models/graveyard/grave.fbx.import b/assets/models/graveyard/grave.fbx.import new file mode 100644 index 0000000..77e42ad --- /dev/null +++ b/assets/models/graveyard/grave.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://viskm354hnbd" +path="res://.godot/imported/grave.fbx-7ee2563f730cb1ad74088d43de884377.scn" + +[deps] + +source_file="res://assets/models/graveyard/grave.fbx" +dest_files=["res://.godot/imported/grave.fbx-7ee2563f730cb1ad74088d43de884377.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-bevel.fbx b/assets/models/graveyard/gravestone-bevel.fbx new file mode 100644 index 0000000..f8a7bc3 Binary files /dev/null and b/assets/models/graveyard/gravestone-bevel.fbx differ diff --git a/assets/models/graveyard/gravestone-bevel.fbx.import b/assets/models/graveyard/gravestone-bevel.fbx.import new file mode 100644 index 0000000..1b03c44 --- /dev/null +++ b/assets/models/graveyard/gravestone-bevel.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cldykurpkpbmj" +path="res://.godot/imported/gravestone-bevel.fbx-cc642ff6999b0509cdf34f1e29ab814d.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-bevel.fbx" +dest_files=["res://.godot/imported/gravestone-bevel.fbx-cc642ff6999b0509cdf34f1e29ab814d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-broken.fbx b/assets/models/graveyard/gravestone-broken.fbx new file mode 100644 index 0000000..3afbaec Binary files /dev/null and b/assets/models/graveyard/gravestone-broken.fbx differ diff --git a/assets/models/graveyard/gravestone-broken.fbx.import b/assets/models/graveyard/gravestone-broken.fbx.import new file mode 100644 index 0000000..0516bf9 --- /dev/null +++ b/assets/models/graveyard/gravestone-broken.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dmn7vl8aq0gf7" +path="res://.godot/imported/gravestone-broken.fbx-fdcdd80cc5b66dc6d3eec3d6a08a70f8.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-broken.fbx" +dest_files=["res://.godot/imported/gravestone-broken.fbx-fdcdd80cc5b66dc6d3eec3d6a08a70f8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-cross-large.fbx b/assets/models/graveyard/gravestone-cross-large.fbx new file mode 100644 index 0000000..9e02d91 Binary files /dev/null and b/assets/models/graveyard/gravestone-cross-large.fbx differ diff --git a/assets/models/graveyard/gravestone-cross-large.fbx.import b/assets/models/graveyard/gravestone-cross-large.fbx.import new file mode 100644 index 0000000..6175d93 --- /dev/null +++ b/assets/models/graveyard/gravestone-cross-large.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://tjbgdmut1bmv" +path="res://.godot/imported/gravestone-cross-large.fbx-2fb9fd3d20a9d51f38c37ad282488e6c.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-cross-large.fbx" +dest_files=["res://.godot/imported/gravestone-cross-large.fbx-2fb9fd3d20a9d51f38c37ad282488e6c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-cross.fbx b/assets/models/graveyard/gravestone-cross.fbx new file mode 100644 index 0000000..7a8f5df Binary files /dev/null and b/assets/models/graveyard/gravestone-cross.fbx differ diff --git a/assets/models/graveyard/gravestone-cross.fbx.import b/assets/models/graveyard/gravestone-cross.fbx.import new file mode 100644 index 0000000..0334ced --- /dev/null +++ b/assets/models/graveyard/gravestone-cross.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dbej3rdj07o6" +path="res://.godot/imported/gravestone-cross.fbx-e794522bf8d8ffa72eba4ce2a3969e51.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-cross.fbx" +dest_files=["res://.godot/imported/gravestone-cross.fbx-e794522bf8d8ffa72eba4ce2a3969e51.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-debris.fbx b/assets/models/graveyard/gravestone-debris.fbx new file mode 100644 index 0000000..f9ec912 Binary files /dev/null and b/assets/models/graveyard/gravestone-debris.fbx differ diff --git a/assets/models/graveyard/gravestone-debris.fbx.import b/assets/models/graveyard/gravestone-debris.fbx.import new file mode 100644 index 0000000..e299f5e --- /dev/null +++ b/assets/models/graveyard/gravestone-debris.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://lccj57g1r0fx" +path="res://.godot/imported/gravestone-debris.fbx-494f8682d52b437b8d71662d5ccd5738.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-debris.fbx" +dest_files=["res://.godot/imported/gravestone-debris.fbx-494f8682d52b437b8d71662d5ccd5738.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-decorative.fbx b/assets/models/graveyard/gravestone-decorative.fbx new file mode 100644 index 0000000..0832db8 Binary files /dev/null and b/assets/models/graveyard/gravestone-decorative.fbx differ diff --git a/assets/models/graveyard/gravestone-decorative.fbx.import b/assets/models/graveyard/gravestone-decorative.fbx.import new file mode 100644 index 0000000..a550b88 --- /dev/null +++ b/assets/models/graveyard/gravestone-decorative.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b625oxdxhltaj" +path="res://.godot/imported/gravestone-decorative.fbx-f5ec191186843d0087cb58ceff0d9e6c.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-decorative.fbx" +dest_files=["res://.godot/imported/gravestone-decorative.fbx-f5ec191186843d0087cb58ceff0d9e6c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-flat-open.fbx b/assets/models/graveyard/gravestone-flat-open.fbx new file mode 100644 index 0000000..61d3bc9 Binary files /dev/null and b/assets/models/graveyard/gravestone-flat-open.fbx differ diff --git a/assets/models/graveyard/gravestone-flat-open.fbx.import b/assets/models/graveyard/gravestone-flat-open.fbx.import new file mode 100644 index 0000000..c5bb11c --- /dev/null +++ b/assets/models/graveyard/gravestone-flat-open.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b0mcv1c3gl4ia" +path="res://.godot/imported/gravestone-flat-open.fbx-1ef787f85d16b0ef140d437b92a4edd5.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-flat-open.fbx" +dest_files=["res://.godot/imported/gravestone-flat-open.fbx-1ef787f85d16b0ef140d437b92a4edd5.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-flat.fbx b/assets/models/graveyard/gravestone-flat.fbx new file mode 100644 index 0000000..4927d50 Binary files /dev/null and b/assets/models/graveyard/gravestone-flat.fbx differ diff --git a/assets/models/graveyard/gravestone-flat.fbx.import b/assets/models/graveyard/gravestone-flat.fbx.import new file mode 100644 index 0000000..b01227b --- /dev/null +++ b/assets/models/graveyard/gravestone-flat.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dcfhj108ojqdk" +path="res://.godot/imported/gravestone-flat.fbx-be913c16a51caafae5d8f17f83c0799e.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-flat.fbx" +dest_files=["res://.godot/imported/gravestone-flat.fbx-be913c16a51caafae5d8f17f83c0799e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-roof.fbx b/assets/models/graveyard/gravestone-roof.fbx new file mode 100644 index 0000000..3b3e3e2 Binary files /dev/null and b/assets/models/graveyard/gravestone-roof.fbx differ diff --git a/assets/models/graveyard/gravestone-roof.fbx.import b/assets/models/graveyard/gravestone-roof.fbx.import new file mode 100644 index 0000000..5aaea61 --- /dev/null +++ b/assets/models/graveyard/gravestone-roof.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://7ybukngkuhjs" +path="res://.godot/imported/gravestone-roof.fbx-db79ccc838e73441429f4d910a81e8c2.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-roof.fbx" +dest_files=["res://.godot/imported/gravestone-roof.fbx-db79ccc838e73441429f4d910a81e8c2.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-round.fbx b/assets/models/graveyard/gravestone-round.fbx new file mode 100644 index 0000000..701eb48 Binary files /dev/null and b/assets/models/graveyard/gravestone-round.fbx differ diff --git a/assets/models/graveyard/gravestone-round.fbx.import b/assets/models/graveyard/gravestone-round.fbx.import new file mode 100644 index 0000000..eb2f4bd --- /dev/null +++ b/assets/models/graveyard/gravestone-round.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dpidc6taauoxx" +path="res://.godot/imported/gravestone-round.fbx-fcce101ac7847254f11d612a00627c52.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-round.fbx" +dest_files=["res://.godot/imported/gravestone-round.fbx-fcce101ac7847254f11d612a00627c52.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/gravestone-wide.fbx b/assets/models/graveyard/gravestone-wide.fbx new file mode 100644 index 0000000..86858b3 Binary files /dev/null and b/assets/models/graveyard/gravestone-wide.fbx differ diff --git a/assets/models/graveyard/gravestone-wide.fbx.import b/assets/models/graveyard/gravestone-wide.fbx.import new file mode 100644 index 0000000..6a3824c --- /dev/null +++ b/assets/models/graveyard/gravestone-wide.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dk8g78xu1n7r8" +path="res://.godot/imported/gravestone-wide.fbx-37319156c39a22c35748eb5f86360b4a.scn" + +[deps] + +source_file="res://assets/models/graveyard/gravestone-wide.fbx" +dest_files=["res://.godot/imported/gravestone-wide.fbx-37319156c39a22c35748eb5f86360b4a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/hay-bale-bundled.fbx b/assets/models/graveyard/hay-bale-bundled.fbx new file mode 100644 index 0000000..6d3c7f1 Binary files /dev/null and b/assets/models/graveyard/hay-bale-bundled.fbx differ diff --git a/assets/models/graveyard/hay-bale-bundled.fbx.import b/assets/models/graveyard/hay-bale-bundled.fbx.import new file mode 100644 index 0000000..3ff7a27 --- /dev/null +++ b/assets/models/graveyard/hay-bale-bundled.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bced07o1xnqdb" +path="res://.godot/imported/hay-bale-bundled.fbx-d50806134a7777452c6f26c06fd32ffb.scn" + +[deps] + +source_file="res://assets/models/graveyard/hay-bale-bundled.fbx" +dest_files=["res://.godot/imported/hay-bale-bundled.fbx-d50806134a7777452c6f26c06fd32ffb.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/hay-bale.fbx b/assets/models/graveyard/hay-bale.fbx new file mode 100644 index 0000000..866b7d9 Binary files /dev/null and b/assets/models/graveyard/hay-bale.fbx differ diff --git a/assets/models/graveyard/hay-bale.fbx.import b/assets/models/graveyard/hay-bale.fbx.import new file mode 100644 index 0000000..5d57808 --- /dev/null +++ b/assets/models/graveyard/hay-bale.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cjxegme05oiv3" +path="res://.godot/imported/hay-bale.fbx-87e00291d6b30af3a818e43cf519a9e5.scn" + +[deps] + +source_file="res://assets/models/graveyard/hay-bale.fbx" +dest_files=["res://.godot/imported/hay-bale.fbx-87e00291d6b30af3a818e43cf519a9e5.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-bar.fbx b/assets/models/graveyard/iron-fence-bar.fbx new file mode 100644 index 0000000..44eba9e Binary files /dev/null and b/assets/models/graveyard/iron-fence-bar.fbx differ diff --git a/assets/models/graveyard/iron-fence-bar.fbx.import b/assets/models/graveyard/iron-fence-bar.fbx.import new file mode 100644 index 0000000..283c9dc --- /dev/null +++ b/assets/models/graveyard/iron-fence-bar.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bq7cknpmwygle" +path="res://.godot/imported/iron-fence-bar.fbx-b296a01af41b95b658a676bc75381cdf.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-bar.fbx" +dest_files=["res://.godot/imported/iron-fence-bar.fbx-b296a01af41b95b658a676bc75381cdf.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-border-column.fbx b/assets/models/graveyard/iron-fence-border-column.fbx new file mode 100644 index 0000000..81a43d4 Binary files /dev/null and b/assets/models/graveyard/iron-fence-border-column.fbx differ diff --git a/assets/models/graveyard/iron-fence-border-column.fbx.import b/assets/models/graveyard/iron-fence-border-column.fbx.import new file mode 100644 index 0000000..99dcd82 --- /dev/null +++ b/assets/models/graveyard/iron-fence-border-column.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dnbncfad458c4" +path="res://.godot/imported/iron-fence-border-column.fbx-e984de3ac88195f440eee4116da9bc23.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-border-column.fbx" +dest_files=["res://.godot/imported/iron-fence-border-column.fbx-e984de3ac88195f440eee4116da9bc23.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-border-curve.fbx b/assets/models/graveyard/iron-fence-border-curve.fbx new file mode 100644 index 0000000..285f239 Binary files /dev/null and b/assets/models/graveyard/iron-fence-border-curve.fbx differ diff --git a/assets/models/graveyard/iron-fence-border-curve.fbx.import b/assets/models/graveyard/iron-fence-border-curve.fbx.import new file mode 100644 index 0000000..2ba1b1e --- /dev/null +++ b/assets/models/graveyard/iron-fence-border-curve.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://baiab74oshpqp" +path="res://.godot/imported/iron-fence-border-curve.fbx-1e6dbfa1c56852cb1b252348dd912634.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-border-curve.fbx" +dest_files=["res://.godot/imported/iron-fence-border-curve.fbx-1e6dbfa1c56852cb1b252348dd912634.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-border-gate.fbx b/assets/models/graveyard/iron-fence-border-gate.fbx new file mode 100644 index 0000000..d01ac37 Binary files /dev/null and b/assets/models/graveyard/iron-fence-border-gate.fbx differ diff --git a/assets/models/graveyard/iron-fence-border-gate.fbx.import b/assets/models/graveyard/iron-fence-border-gate.fbx.import new file mode 100644 index 0000000..d6290dc --- /dev/null +++ b/assets/models/graveyard/iron-fence-border-gate.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://diyn8xv35f3ff" +path="res://.godot/imported/iron-fence-border-gate.fbx-e1aca0828ba05889a23925eb53b2baae.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-border-gate.fbx" +dest_files=["res://.godot/imported/iron-fence-border-gate.fbx-e1aca0828ba05889a23925eb53b2baae.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-border.fbx b/assets/models/graveyard/iron-fence-border.fbx new file mode 100644 index 0000000..96e8b49 Binary files /dev/null and b/assets/models/graveyard/iron-fence-border.fbx differ diff --git a/assets/models/graveyard/iron-fence-border.fbx.import b/assets/models/graveyard/iron-fence-border.fbx.import new file mode 100644 index 0000000..2b4f07b --- /dev/null +++ b/assets/models/graveyard/iron-fence-border.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cu5fygk82tp7w" +path="res://.godot/imported/iron-fence-border.fbx-af89a28d22b871f8815e0aeefb5ca5c9.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-border.fbx" +dest_files=["res://.godot/imported/iron-fence-border.fbx-af89a28d22b871f8815e0aeefb5ca5c9.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-curve.fbx b/assets/models/graveyard/iron-fence-curve.fbx new file mode 100644 index 0000000..94f5d16 Binary files /dev/null and b/assets/models/graveyard/iron-fence-curve.fbx differ diff --git a/assets/models/graveyard/iron-fence-curve.fbx.import b/assets/models/graveyard/iron-fence-curve.fbx.import new file mode 100644 index 0000000..d2aaa0c --- /dev/null +++ b/assets/models/graveyard/iron-fence-curve.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cn38a04ye5o7n" +path="res://.godot/imported/iron-fence-curve.fbx-c3ed68814eebe69e75a95fb78647ce06.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-curve.fbx" +dest_files=["res://.godot/imported/iron-fence-curve.fbx-c3ed68814eebe69e75a95fb78647ce06.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence-damaged.fbx b/assets/models/graveyard/iron-fence-damaged.fbx new file mode 100644 index 0000000..79a8e83 Binary files /dev/null and b/assets/models/graveyard/iron-fence-damaged.fbx differ diff --git a/assets/models/graveyard/iron-fence-damaged.fbx.import b/assets/models/graveyard/iron-fence-damaged.fbx.import new file mode 100644 index 0000000..839d15d --- /dev/null +++ b/assets/models/graveyard/iron-fence-damaged.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cg2oqyom5kyrf" +path="res://.godot/imported/iron-fence-damaged.fbx-09726067de442624e5592deebeb7b04e.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence-damaged.fbx" +dest_files=["res://.godot/imported/iron-fence-damaged.fbx-09726067de442624e5592deebeb7b04e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/iron-fence.fbx b/assets/models/graveyard/iron-fence.fbx new file mode 100644 index 0000000..9f1973b Binary files /dev/null and b/assets/models/graveyard/iron-fence.fbx differ diff --git a/assets/models/graveyard/iron-fence.fbx.import b/assets/models/graveyard/iron-fence.fbx.import new file mode 100644 index 0000000..fb8e189 --- /dev/null +++ b/assets/models/graveyard/iron-fence.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://xbfx0t63ok54" +path="res://.godot/imported/iron-fence.fbx-3667358d020da5f0e0dba13ce06f5a45.scn" + +[deps] + +source_file="res://assets/models/graveyard/iron-fence.fbx" +dest_files=["res://.godot/imported/iron-fence.fbx-3667358d020da5f0e0dba13ce06f5a45.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/lantern-candle.fbx b/assets/models/graveyard/lantern-candle.fbx new file mode 100644 index 0000000..5ade7c0 Binary files /dev/null and b/assets/models/graveyard/lantern-candle.fbx differ diff --git a/assets/models/graveyard/lantern-candle.fbx.import b/assets/models/graveyard/lantern-candle.fbx.import new file mode 100644 index 0000000..f679c64 --- /dev/null +++ b/assets/models/graveyard/lantern-candle.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bi0wpndw5ymxl" +path="res://.godot/imported/lantern-candle.fbx-ea35421df7236f59390cd4233608f14c.scn" + +[deps] + +source_file="res://assets/models/graveyard/lantern-candle.fbx" +dest_files=["res://.godot/imported/lantern-candle.fbx-ea35421df7236f59390cd4233608f14c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/lantern-glass.fbx b/assets/models/graveyard/lantern-glass.fbx new file mode 100644 index 0000000..78542fd Binary files /dev/null and b/assets/models/graveyard/lantern-glass.fbx differ diff --git a/assets/models/graveyard/lantern-glass.fbx.import b/assets/models/graveyard/lantern-glass.fbx.import new file mode 100644 index 0000000..2d7d3d4 --- /dev/null +++ b/assets/models/graveyard/lantern-glass.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b7frheccuck5j" +path="res://.godot/imported/lantern-glass.fbx-3f3b1c8e0b8d8f197c9ed4154874b3c5.scn" + +[deps] + +source_file="res://assets/models/graveyard/lantern-glass.fbx" +dest_files=["res://.godot/imported/lantern-glass.fbx-3f3b1c8e0b8d8f197c9ed4154874b3c5.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/lightpost-all.fbx b/assets/models/graveyard/lightpost-all.fbx new file mode 100644 index 0000000..dbab0a7 Binary files /dev/null and b/assets/models/graveyard/lightpost-all.fbx differ diff --git a/assets/models/graveyard/lightpost-all.fbx.import b/assets/models/graveyard/lightpost-all.fbx.import new file mode 100644 index 0000000..95badc1 --- /dev/null +++ b/assets/models/graveyard/lightpost-all.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bpknlimow3uxh" +path="res://.godot/imported/lightpost-all.fbx-ce3532b05988dcd2ef4a8c92466a5c38.scn" + +[deps] + +source_file="res://assets/models/graveyard/lightpost-all.fbx" +dest_files=["res://.godot/imported/lightpost-all.fbx-ce3532b05988dcd2ef4a8c92466a5c38.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/lightpost-double.fbx b/assets/models/graveyard/lightpost-double.fbx new file mode 100644 index 0000000..f7218ed Binary files /dev/null and b/assets/models/graveyard/lightpost-double.fbx differ diff --git a/assets/models/graveyard/lightpost-double.fbx.import b/assets/models/graveyard/lightpost-double.fbx.import new file mode 100644 index 0000000..9c8b70c --- /dev/null +++ b/assets/models/graveyard/lightpost-double.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://byna3b1lj8b60" +path="res://.godot/imported/lightpost-double.fbx-c7ab4b4e0ccd824c08ae511d3b58d93a.scn" + +[deps] + +source_file="res://assets/models/graveyard/lightpost-double.fbx" +dest_files=["res://.godot/imported/lightpost-double.fbx-c7ab4b4e0ccd824c08ae511d3b58d93a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/lightpost-single.fbx b/assets/models/graveyard/lightpost-single.fbx new file mode 100644 index 0000000..0b1084e Binary files /dev/null and b/assets/models/graveyard/lightpost-single.fbx differ diff --git a/assets/models/graveyard/lightpost-single.fbx.import b/assets/models/graveyard/lightpost-single.fbx.import new file mode 100644 index 0000000..ab5a2b5 --- /dev/null +++ b/assets/models/graveyard/lightpost-single.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c2p7rqvh0kdrr" +path="res://.godot/imported/lightpost-single.fbx-47619c33256236e0480d47360fbeb298.scn" + +[deps] + +source_file="res://assets/models/graveyard/lightpost-single.fbx" +dest_files=["res://.godot/imported/lightpost-single.fbx-47619c33256236e0480d47360fbeb298.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pillar-large.fbx b/assets/models/graveyard/pillar-large.fbx new file mode 100644 index 0000000..d0f87a9 Binary files /dev/null and b/assets/models/graveyard/pillar-large.fbx differ diff --git a/assets/models/graveyard/pillar-large.fbx.import b/assets/models/graveyard/pillar-large.fbx.import new file mode 100644 index 0000000..456ab09 --- /dev/null +++ b/assets/models/graveyard/pillar-large.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://het8lqpr32xu" +path="res://.godot/imported/pillar-large.fbx-848a17835cd40528308033c4caab874d.scn" + +[deps] + +source_file="res://assets/models/graveyard/pillar-large.fbx" +dest_files=["res://.godot/imported/pillar-large.fbx-848a17835cd40528308033c4caab874d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pillar-obelisk.fbx b/assets/models/graveyard/pillar-obelisk.fbx new file mode 100644 index 0000000..7f78a75 Binary files /dev/null and b/assets/models/graveyard/pillar-obelisk.fbx differ diff --git a/assets/models/graveyard/pillar-obelisk.fbx.import b/assets/models/graveyard/pillar-obelisk.fbx.import new file mode 100644 index 0000000..9488651 --- /dev/null +++ b/assets/models/graveyard/pillar-obelisk.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b865nl1gpydmj" +path="res://.godot/imported/pillar-obelisk.fbx-f09e849092b50f96dd4ed4669ecbd125.scn" + +[deps] + +source_file="res://assets/models/graveyard/pillar-obelisk.fbx" +dest_files=["res://.godot/imported/pillar-obelisk.fbx-f09e849092b50f96dd4ed4669ecbd125.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pillar-small.fbx b/assets/models/graveyard/pillar-small.fbx new file mode 100644 index 0000000..65ba853 Binary files /dev/null and b/assets/models/graveyard/pillar-small.fbx differ diff --git a/assets/models/graveyard/pillar-small.fbx.import b/assets/models/graveyard/pillar-small.fbx.import new file mode 100644 index 0000000..1b5b3dd --- /dev/null +++ b/assets/models/graveyard/pillar-small.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c5qw58pq7phmr" +path="res://.godot/imported/pillar-small.fbx-726819d706f66737b8244b23ae0b3e5c.scn" + +[deps] + +source_file="res://assets/models/graveyard/pillar-small.fbx" +dest_files=["res://.godot/imported/pillar-small.fbx-726819d706f66737b8244b23ae0b3e5c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pillar-square.fbx b/assets/models/graveyard/pillar-square.fbx new file mode 100644 index 0000000..863fe48 Binary files /dev/null and b/assets/models/graveyard/pillar-square.fbx differ diff --git a/assets/models/graveyard/pillar-square.fbx.import b/assets/models/graveyard/pillar-square.fbx.import new file mode 100644 index 0000000..4ceca1f --- /dev/null +++ b/assets/models/graveyard/pillar-square.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cdh0fish5tqr3" +path="res://.godot/imported/pillar-square.fbx-0e80c70dde45f413b8318a452a4e4b2f.scn" + +[deps] + +source_file="res://assets/models/graveyard/pillar-square.fbx" +dest_files=["res://.godot/imported/pillar-square.fbx-0e80c70dde45f413b8318a452a4e4b2f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pine-crooked.fbx b/assets/models/graveyard/pine-crooked.fbx new file mode 100644 index 0000000..54a74ac Binary files /dev/null and b/assets/models/graveyard/pine-crooked.fbx differ diff --git a/assets/models/graveyard/pine-crooked.fbx.import b/assets/models/graveyard/pine-crooked.fbx.import new file mode 100644 index 0000000..9ef4742 --- /dev/null +++ b/assets/models/graveyard/pine-crooked.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bowxilv4duiww" +path="res://.godot/imported/pine-crooked.fbx-2beeca0f061a6fb5447a724efab59378.scn" + +[deps] + +source_file="res://assets/models/graveyard/pine-crooked.fbx" +dest_files=["res://.godot/imported/pine-crooked.fbx-2beeca0f061a6fb5447a724efab59378.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pine-fall-crooked.fbx b/assets/models/graveyard/pine-fall-crooked.fbx new file mode 100644 index 0000000..a036a5e Binary files /dev/null and b/assets/models/graveyard/pine-fall-crooked.fbx differ diff --git a/assets/models/graveyard/pine-fall-crooked.fbx.import b/assets/models/graveyard/pine-fall-crooked.fbx.import new file mode 100644 index 0000000..ffcc9e7 --- /dev/null +++ b/assets/models/graveyard/pine-fall-crooked.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dmu6aagcpjt3j" +path="res://.godot/imported/pine-fall-crooked.fbx-501c8c50aa193720781d8993454b61d3.scn" + +[deps] + +source_file="res://assets/models/graveyard/pine-fall-crooked.fbx" +dest_files=["res://.godot/imported/pine-fall-crooked.fbx-501c8c50aa193720781d8993454b61d3.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pine-fall.fbx b/assets/models/graveyard/pine-fall.fbx new file mode 100644 index 0000000..7e2139b Binary files /dev/null and b/assets/models/graveyard/pine-fall.fbx differ diff --git a/assets/models/graveyard/pine-fall.fbx.import b/assets/models/graveyard/pine-fall.fbx.import new file mode 100644 index 0000000..2b861d3 --- /dev/null +++ b/assets/models/graveyard/pine-fall.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c0cwka2w77ke8" +path="res://.godot/imported/pine-fall.fbx-667c02b70770119e286c5c8fa77fb740.scn" + +[deps] + +source_file="res://assets/models/graveyard/pine-fall.fbx" +dest_files=["res://.godot/imported/pine-fall.fbx-667c02b70770119e286c5c8fa77fb740.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pine.fbx b/assets/models/graveyard/pine.fbx new file mode 100644 index 0000000..d76b00b Binary files /dev/null and b/assets/models/graveyard/pine.fbx differ diff --git a/assets/models/graveyard/pine.fbx.import b/assets/models/graveyard/pine.fbx.import new file mode 100644 index 0000000..4437867 --- /dev/null +++ b/assets/models/graveyard/pine.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c0q8epofmiuvh" +path="res://.godot/imported/pine.fbx-d7ca46f7b6edcd2efd42181e102aaae8.scn" + +[deps] + +source_file="res://assets/models/graveyard/pine.fbx" +dest_files=["res://.godot/imported/pine.fbx-d7ca46f7b6edcd2efd42181e102aaae8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pumpkin-carved.fbx b/assets/models/graveyard/pumpkin-carved.fbx new file mode 100644 index 0000000..6723b28 Binary files /dev/null and b/assets/models/graveyard/pumpkin-carved.fbx differ diff --git a/assets/models/graveyard/pumpkin-carved.fbx.import b/assets/models/graveyard/pumpkin-carved.fbx.import new file mode 100644 index 0000000..cf91a11 --- /dev/null +++ b/assets/models/graveyard/pumpkin-carved.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bijufurd68kdv" +path="res://.godot/imported/pumpkin-carved.fbx-ebb33ab1ebb93c944b26f02f42a8351e.scn" + +[deps] + +source_file="res://assets/models/graveyard/pumpkin-carved.fbx" +dest_files=["res://.godot/imported/pumpkin-carved.fbx-ebb33ab1ebb93c944b26f02f42a8351e.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pumpkin-tall-carved.fbx b/assets/models/graveyard/pumpkin-tall-carved.fbx new file mode 100644 index 0000000..13870e8 Binary files /dev/null and b/assets/models/graveyard/pumpkin-tall-carved.fbx differ diff --git a/assets/models/graveyard/pumpkin-tall-carved.fbx.import b/assets/models/graveyard/pumpkin-tall-carved.fbx.import new file mode 100644 index 0000000..055f5e2 --- /dev/null +++ b/assets/models/graveyard/pumpkin-tall-carved.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://qu2surqqd7uu" +path="res://.godot/imported/pumpkin-tall-carved.fbx-eaa9921aa58adf97c4a6be4046771b71.scn" + +[deps] + +source_file="res://assets/models/graveyard/pumpkin-tall-carved.fbx" +dest_files=["res://.godot/imported/pumpkin-tall-carved.fbx-eaa9921aa58adf97c4a6be4046771b71.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pumpkin-tall.fbx b/assets/models/graveyard/pumpkin-tall.fbx new file mode 100644 index 0000000..7cd49f5 Binary files /dev/null and b/assets/models/graveyard/pumpkin-tall.fbx differ diff --git a/assets/models/graveyard/pumpkin-tall.fbx.import b/assets/models/graveyard/pumpkin-tall.fbx.import new file mode 100644 index 0000000..69b1561 --- /dev/null +++ b/assets/models/graveyard/pumpkin-tall.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b40norqbwvnu7" +path="res://.godot/imported/pumpkin-tall.fbx-cc0a624c93c62908325c2067f2a37d06.scn" + +[deps] + +source_file="res://assets/models/graveyard/pumpkin-tall.fbx" +dest_files=["res://.godot/imported/pumpkin-tall.fbx-cc0a624c93c62908325c2067f2a37d06.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/pumpkin.fbx b/assets/models/graveyard/pumpkin.fbx new file mode 100644 index 0000000..9c1ec4b Binary files /dev/null and b/assets/models/graveyard/pumpkin.fbx differ diff --git a/assets/models/graveyard/pumpkin.fbx.import b/assets/models/graveyard/pumpkin.fbx.import new file mode 100644 index 0000000..6eeabdc --- /dev/null +++ b/assets/models/graveyard/pumpkin.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bs3miq6gm30sx" +path="res://.godot/imported/pumpkin.fbx-8fa597d11a392101a16b14baee00d2ab.scn" + +[deps] + +source_file="res://assets/models/graveyard/pumpkin.fbx" +dest_files=["res://.godot/imported/pumpkin.fbx-8fa597d11a392101a16b14baee00d2ab.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/road.fbx b/assets/models/graveyard/road.fbx new file mode 100644 index 0000000..048b52c Binary files /dev/null and b/assets/models/graveyard/road.fbx differ diff --git a/assets/models/graveyard/road.fbx.import b/assets/models/graveyard/road.fbx.import new file mode 100644 index 0000000..5b9d087 --- /dev/null +++ b/assets/models/graveyard/road.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cgvh2es4fchc5" +path="res://.godot/imported/road.fbx-7c2875bb007569cf10b9ce159aefd823.scn" + +[deps] + +source_file="res://assets/models/graveyard/road.fbx" +dest_files=["res://.godot/imported/road.fbx-7c2875bb007569cf10b9ce159aefd823.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/rocks-tall.fbx b/assets/models/graveyard/rocks-tall.fbx new file mode 100644 index 0000000..e182418 Binary files /dev/null and b/assets/models/graveyard/rocks-tall.fbx differ diff --git a/assets/models/graveyard/rocks-tall.fbx.import b/assets/models/graveyard/rocks-tall.fbx.import new file mode 100644 index 0000000..f584da0 --- /dev/null +++ b/assets/models/graveyard/rocks-tall.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bjc4srgx6gyjt" +path="res://.godot/imported/rocks-tall.fbx-c0727bb708e87518aebc8e8b1e6b6b7f.scn" + +[deps] + +source_file="res://assets/models/graveyard/rocks-tall.fbx" +dest_files=["res://.godot/imported/rocks-tall.fbx-c0727bb708e87518aebc8e8b1e6b6b7f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/rocks.fbx b/assets/models/graveyard/rocks.fbx new file mode 100644 index 0000000..9611ee4 Binary files /dev/null and b/assets/models/graveyard/rocks.fbx differ diff --git a/assets/models/graveyard/rocks.fbx.import b/assets/models/graveyard/rocks.fbx.import new file mode 100644 index 0000000..e28fc90 --- /dev/null +++ b/assets/models/graveyard/rocks.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dghs82blars6b" +path="res://.godot/imported/rocks.fbx-f33637a5a76204133dc41a18b9b83e71.scn" + +[deps] + +source_file="res://assets/models/graveyard/rocks.fbx" +dest_files=["res://.godot/imported/rocks.fbx-f33637a5a76204133dc41a18b9b83e71.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/shovel-dirt.fbx b/assets/models/graveyard/shovel-dirt.fbx new file mode 100644 index 0000000..f2d5389 Binary files /dev/null and b/assets/models/graveyard/shovel-dirt.fbx differ diff --git a/assets/models/graveyard/shovel-dirt.fbx.import b/assets/models/graveyard/shovel-dirt.fbx.import new file mode 100644 index 0000000..f6a0ce5 --- /dev/null +++ b/assets/models/graveyard/shovel-dirt.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://biu2fskjinq86" +path="res://.godot/imported/shovel-dirt.fbx-56bef5bcfdf88266ee7b208ce7041973.scn" + +[deps] + +source_file="res://assets/models/graveyard/shovel-dirt.fbx" +dest_files=["res://.godot/imported/shovel-dirt.fbx-56bef5bcfdf88266ee7b208ce7041973.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/shovel.fbx b/assets/models/graveyard/shovel.fbx new file mode 100644 index 0000000..4be78af Binary files /dev/null and b/assets/models/graveyard/shovel.fbx differ diff --git a/assets/models/graveyard/shovel.fbx.import b/assets/models/graveyard/shovel.fbx.import new file mode 100644 index 0000000..1e6c417 --- /dev/null +++ b/assets/models/graveyard/shovel.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ch2hpefnrqyki" +path="res://.godot/imported/shovel.fbx-2a2ce5353b59abafb110f97b10feb0e5.scn" + +[deps] + +source_file="res://assets/models/graveyard/shovel.fbx" +dest_files=["res://.godot/imported/shovel.fbx-2a2ce5353b59abafb110f97b10feb0e5.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/stone-wall-column.fbx b/assets/models/graveyard/stone-wall-column.fbx new file mode 100644 index 0000000..384f87d Binary files /dev/null and b/assets/models/graveyard/stone-wall-column.fbx differ diff --git a/assets/models/graveyard/stone-wall-column.fbx.import b/assets/models/graveyard/stone-wall-column.fbx.import new file mode 100644 index 0000000..352af3e --- /dev/null +++ b/assets/models/graveyard/stone-wall-column.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://biin7ju5l3hq6" +path="res://.godot/imported/stone-wall-column.fbx-cab45bedacb072c8c6d9bb5156228e0f.scn" + +[deps] + +source_file="res://assets/models/graveyard/stone-wall-column.fbx" +dest_files=["res://.godot/imported/stone-wall-column.fbx-cab45bedacb072c8c6d9bb5156228e0f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/stone-wall-curve.fbx b/assets/models/graveyard/stone-wall-curve.fbx new file mode 100644 index 0000000..f5ec6ba Binary files /dev/null and b/assets/models/graveyard/stone-wall-curve.fbx differ diff --git a/assets/models/graveyard/stone-wall-curve.fbx.import b/assets/models/graveyard/stone-wall-curve.fbx.import new file mode 100644 index 0000000..80c8f78 --- /dev/null +++ b/assets/models/graveyard/stone-wall-curve.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bkpa483vfl836" +path="res://.godot/imported/stone-wall-curve.fbx-3dfc0605779231d77d7109223419dfa0.scn" + +[deps] + +source_file="res://assets/models/graveyard/stone-wall-curve.fbx" +dest_files=["res://.godot/imported/stone-wall-curve.fbx-3dfc0605779231d77d7109223419dfa0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/stone-wall-damaged.fbx b/assets/models/graveyard/stone-wall-damaged.fbx new file mode 100644 index 0000000..64f027e Binary files /dev/null and b/assets/models/graveyard/stone-wall-damaged.fbx differ diff --git a/assets/models/graveyard/stone-wall-damaged.fbx.import b/assets/models/graveyard/stone-wall-damaged.fbx.import new file mode 100644 index 0000000..8e74467 --- /dev/null +++ b/assets/models/graveyard/stone-wall-damaged.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dpoccjhssfofp" +path="res://.godot/imported/stone-wall-damaged.fbx-71be9d3e26b46fe83272991af361cf63.scn" + +[deps] + +source_file="res://assets/models/graveyard/stone-wall-damaged.fbx" +dest_files=["res://.godot/imported/stone-wall-damaged.fbx-71be9d3e26b46fe83272991af361cf63.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/stone-wall.fbx b/assets/models/graveyard/stone-wall.fbx new file mode 100644 index 0000000..e734405 Binary files /dev/null and b/assets/models/graveyard/stone-wall.fbx differ diff --git a/assets/models/graveyard/stone-wall.fbx.import b/assets/models/graveyard/stone-wall.fbx.import new file mode 100644 index 0000000..d89008f --- /dev/null +++ b/assets/models/graveyard/stone-wall.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://5qwwi53yksu4" +path="res://.godot/imported/stone-wall.fbx-51d1419266241aab54c8ffdb57b29ac7.scn" + +[deps] + +source_file="res://assets/models/graveyard/stone-wall.fbx" +dest_files=["res://.godot/imported/stone-wall.fbx-51d1419266241aab54c8ffdb57b29ac7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/trunk-long.fbx b/assets/models/graveyard/trunk-long.fbx new file mode 100644 index 0000000..22ba794 Binary files /dev/null and b/assets/models/graveyard/trunk-long.fbx differ diff --git a/assets/models/graveyard/trunk-long.fbx.import b/assets/models/graveyard/trunk-long.fbx.import new file mode 100644 index 0000000..ac5dae3 --- /dev/null +++ b/assets/models/graveyard/trunk-long.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://y5oid0mb6c8x" +path="res://.godot/imported/trunk-long.fbx-f06b94b9013e8be33db727d942943e24.scn" + +[deps] + +source_file="res://assets/models/graveyard/trunk-long.fbx" +dest_files=["res://.godot/imported/trunk-long.fbx-f06b94b9013e8be33db727d942943e24.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/trunk.fbx b/assets/models/graveyard/trunk.fbx new file mode 100644 index 0000000..32369bf Binary files /dev/null and b/assets/models/graveyard/trunk.fbx differ diff --git a/assets/models/graveyard/trunk.fbx.import b/assets/models/graveyard/trunk.fbx.import new file mode 100644 index 0000000..9a2947c --- /dev/null +++ b/assets/models/graveyard/trunk.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://3d1wx8ajd7kt" +path="res://.godot/imported/trunk.fbx-f2e4986eeb6a662556a1544b37804fbc.scn" + +[deps] + +source_file="res://assets/models/graveyard/trunk.fbx" +dest_files=["res://.godot/imported/trunk.fbx-f2e4986eeb6a662556a1544b37804fbc.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/graveyard/urn.fbx b/assets/models/graveyard/urn.fbx new file mode 100644 index 0000000..74b3e57 Binary files /dev/null and b/assets/models/graveyard/urn.fbx differ diff --git a/assets/models/graveyard/urn.fbx.import b/assets/models/graveyard/urn.fbx.import new file mode 100644 index 0000000..316e66b --- /dev/null +++ b/assets/models/graveyard/urn.fbx.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c0mr4ex75kqey" +path="res://.godot/imported/urn.fbx-a4c8464288749ac489f6f01f3fbe3991.scn" + +[deps] + +source_file="res://assets/models/graveyard/urn.fbx" +dest_files=["res://.godot/imported/urn.fbx-a4c8464288749ac489f6f01f3fbe3991.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/assets/models/smashed_ghost.glb b/assets/models/smashed_ghost.glb new file mode 100644 index 0000000..74b0794 Binary files /dev/null and b/assets/models/smashed_ghost.glb differ diff --git a/assets/models/smashed_ghost.glb.import b/assets/models/smashed_ghost.glb.import new file mode 100644 index 0000000..60989c2 --- /dev/null +++ b/assets/models/smashed_ghost.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bxvi4u1udenoh" +path="res://.godot/imported/smashed_ghost.glb-ee12567c6f58144e1447a8b3f9befca0.scn" + +[deps] + +source_file="res://assets/models/smashed_ghost.glb" +dest_files=["res://.godot/imported/smashed_ghost.glb-ee12567c6f58144e1447a8b3f9befca0.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/smashed_ghost_colormap.png b/assets/models/smashed_ghost_colormap.png new file mode 100644 index 0000000..095e225 Binary files /dev/null and b/assets/models/smashed_ghost_colormap.png differ diff --git a/assets/models/smashed_ghost_colormap.png.import b/assets/models/smashed_ghost_colormap.png.import new file mode 100644 index 0000000..862313b --- /dev/null +++ b/assets/models/smashed_ghost_colormap.png.import @@ -0,0 +1,39 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7accexkta81p" +path.s3tc="res://.godot/imported/smashed_ghost_colormap.png-1e925c21b053eb036c97b3557ef8cdf4.s3tc.ctex" +path.etc2="res://.godot/imported/smashed_ghost_colormap.png-1e925c21b053eb036c97b3557ef8cdf4.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "bb3c3dc069c9233b1483d4e16f50e8b9" +} + +[deps] + +source_file="res://assets/models/smashed_ghost_colormap.png" +dest_files=["res://.godot/imported/smashed_ghost_colormap.png-1e925c21b053eb036c97b3557ef8cdf4.s3tc.ctex", "res://.godot/imported/smashed_ghost_colormap.png-1e925c21b053eb036c97b3557ef8cdf4.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/smashed_vampire.glb b/assets/models/smashed_vampire.glb new file mode 100644 index 0000000..7e5a107 Binary files /dev/null and b/assets/models/smashed_vampire.glb differ diff --git a/assets/models/smashed_vampire.glb.import b/assets/models/smashed_vampire.glb.import new file mode 100644 index 0000000..52db53b --- /dev/null +++ b/assets/models/smashed_vampire.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://tuml2fvvv62v" +path="res://.godot/imported/smashed_vampire.glb-1dfaecbf5f9abe1b1b14c16d63a31d27.scn" + +[deps] + +source_file="res://assets/models/smashed_vampire.glb" +dest_files=["res://.godot/imported/smashed_vampire.glb-1dfaecbf5f9abe1b1b14c16d63a31d27.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/smashed_vampire_colormap.png b/assets/models/smashed_vampire_colormap.png new file mode 100644 index 0000000..095e225 Binary files /dev/null and b/assets/models/smashed_vampire_colormap.png differ diff --git a/assets/models/smashed_vampire_colormap.png.import b/assets/models/smashed_vampire_colormap.png.import new file mode 100644 index 0000000..0d06bd9 --- /dev/null +++ b/assets/models/smashed_vampire_colormap.png.import @@ -0,0 +1,39 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btswisjer2tj8" +path.s3tc="res://.godot/imported/smashed_vampire_colormap.png-66489cbf6ff24e830cdb11b89c338b5b.s3tc.ctex" +path.etc2="res://.godot/imported/smashed_vampire_colormap.png-66489cbf6ff24e830cdb11b89c338b5b.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "bb3c3dc069c9233b1483d4e16f50e8b9" +} + +[deps] + +source_file="res://assets/models/smashed_vampire_colormap.png" +dest_files=["res://.godot/imported/smashed_vampire_colormap.png-66489cbf6ff24e830cdb11b89c338b5b.s3tc.ctex", "res://.godot/imported/smashed_vampire_colormap.png-66489cbf6ff24e830cdb11b89c338b5b.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/models/smashed_zombie.glb b/assets/models/smashed_zombie.glb new file mode 100644 index 0000000..32ab72a Binary files /dev/null and b/assets/models/smashed_zombie.glb differ diff --git a/assets/models/smashed_zombie.glb.import b/assets/models/smashed_zombie.glb.import new file mode 100644 index 0000000..017c7b6 --- /dev/null +++ b/assets/models/smashed_zombie.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cvxin6y3448q7" +path="res://.godot/imported/smashed_zombie.glb-c0f42592b30b2b05709d4715662f2d76.scn" + +[deps] + +source_file="res://assets/models/smashed_zombie.glb" +dest_files=["res://.godot/imported/smashed_zombie.glb-c0f42592b30b2b05709d4715662f2d76.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/models/smashed_zombie_colormap.png b/assets/models/smashed_zombie_colormap.png new file mode 100644 index 0000000..095e225 Binary files /dev/null and b/assets/models/smashed_zombie_colormap.png differ diff --git a/assets/models/smashed_zombie_colormap.png.import b/assets/models/smashed_zombie_colormap.png.import new file mode 100644 index 0000000..9fc17f6 --- /dev/null +++ b/assets/models/smashed_zombie_colormap.png.import @@ -0,0 +1,39 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0hmgb5yx52hi" +path.s3tc="res://.godot/imported/smashed_zombie_colormap.png-33d06f34d84a49478ab6967fe2f6483c.s3tc.ctex" +path.etc2="res://.godot/imported/smashed_zombie_colormap.png-33d06f34d84a49478ab6967fe2f6483c.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} +generator_parameters={ +"md5": "bb3c3dc069c9233b1483d4e16f50e8b9" +} + +[deps] + +source_file="res://assets/models/smashed_zombie_colormap.png" +dest_files=["res://.godot/imported/smashed_zombie_colormap.png-33d06f34d84a49478ab6967fe2f6483c.s3tc.ctex", "res://.godot/imported/smashed_zombie_colormap.png-33d06f34d84a49478ab6967fe2f6483c.etc2.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/sounds/boss_theme.ogg b/assets/sounds/boss_theme.ogg new file mode 100644 index 0000000..03b6ce6 Binary files /dev/null and b/assets/sounds/boss_theme.ogg differ diff --git a/assets/sounds/boss_theme.ogg.import b/assets/sounds/boss_theme.ogg.import new file mode 100644 index 0000000..d8f7b9d --- /dev/null +++ b/assets/sounds/boss_theme.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://7plhbwhkredd" +path="res://.godot/imported/boss_theme.ogg-74b7d6f2e26dba57f3d68a803641c29d.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/boss_theme.ogg" +dest_files=["res://.godot/imported/boss_theme.ogg-74b7d6f2e26dba57f3d68a803641c29d.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon-firing-193247.mp3 b/assets/sounds/sfx/cannon-firing-193247.mp3 new file mode 100644 index 0000000..b3cfd57 Binary files /dev/null and b/assets/sounds/sfx/cannon-firing-193247.mp3 differ diff --git a/assets/sounds/sfx/cannon-firing-193247.mp3.import b/assets/sounds/sfx/cannon-firing-193247.mp3.import new file mode 100644 index 0000000..f59eff6 --- /dev/null +++ b/assets/sounds/sfx/cannon-firing-193247.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dbe68n0i7spxe" +path="res://.godot/imported/cannon-firing-193247.mp3-aa0b893a23fc4735a9a534d6fb4b222e.mp3str" + +[deps] + +source_file="res://assets/sounds/sfx/cannon-firing-193247.mp3" +dest_files=["res://.godot/imported/cannon-firing-193247.mp3-aa0b893a23fc4735a9a534d6fb4b222e.mp3str"] + +[params] + +loop=false +loop_offset=0.0 +bpm=120.0 +beat_count=2 +bar_beats=2 diff --git a/assets/sounds/sfx/cannon/bang_01.ogg b/assets/sounds/sfx/cannon/bang_01.ogg new file mode 100644 index 0000000..dd90956 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_01.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_01.ogg.import b/assets/sounds/sfx/cannon/bang_01.ogg.import new file mode 100644 index 0000000..37e6a76 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c701rgxu03gqu" +path="res://.godot/imported/bang_01.ogg-e772f4f2ae2a78e269a82ea0b2ea278f.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_01.ogg" +dest_files=["res://.godot/imported/bang_01.ogg-e772f4f2ae2a78e269a82ea0b2ea278f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_02.ogg b/assets/sounds/sfx/cannon/bang_02.ogg new file mode 100644 index 0000000..efc5267 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_02.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_02.ogg.import b/assets/sounds/sfx/cannon/bang_02.ogg.import new file mode 100644 index 0000000..8c7b0bb --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dlaodx7jdy7ls" +path="res://.godot/imported/bang_02.ogg-56d02a30717807df8592b95ee3c2fa7e.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_02.ogg" +dest_files=["res://.godot/imported/bang_02.ogg-56d02a30717807df8592b95ee3c2fa7e.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_03.ogg b/assets/sounds/sfx/cannon/bang_03.ogg new file mode 100644 index 0000000..58e72e5 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_03.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_03.ogg.import b/assets/sounds/sfx/cannon/bang_03.ogg.import new file mode 100644 index 0000000..8726672 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cn2gylf3jet62" +path="res://.godot/imported/bang_03.ogg-bfcf2ca2a3ce6ef2da87704efd8b2f28.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_03.ogg" +dest_files=["res://.godot/imported/bang_03.ogg-bfcf2ca2a3ce6ef2da87704efd8b2f28.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_04.ogg b/assets/sounds/sfx/cannon/bang_04.ogg new file mode 100644 index 0000000..4f0cf02 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_04.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_04.ogg.import b/assets/sounds/sfx/cannon/bang_04.ogg.import new file mode 100644 index 0000000..4fd7e9f --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_04.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bqi0g6sdq00xh" +path="res://.godot/imported/bang_04.ogg-77d3f5e50c514877b34ff6c8c08126d2.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_04.ogg" +dest_files=["res://.godot/imported/bang_04.ogg-77d3f5e50c514877b34ff6c8c08126d2.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_05.ogg b/assets/sounds/sfx/cannon/bang_05.ogg new file mode 100644 index 0000000..c50b9ff Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_05.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_05.ogg.import b/assets/sounds/sfx/cannon/bang_05.ogg.import new file mode 100644 index 0000000..e644994 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_05.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://nkhawj2i5tma" +path="res://.godot/imported/bang_05.ogg-af5385dd2df655d5740ec793f6deaf0b.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_05.ogg" +dest_files=["res://.godot/imported/bang_05.ogg-af5385dd2df655d5740ec793f6deaf0b.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_06.ogg b/assets/sounds/sfx/cannon/bang_06.ogg new file mode 100644 index 0000000..76c63b6 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_06.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_06.ogg.import b/assets/sounds/sfx/cannon/bang_06.ogg.import new file mode 100644 index 0000000..ba785fe --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_06.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cl4745u58rojx" +path="res://.godot/imported/bang_06.ogg-030dd3a7bdb007dbe28f390bd2898538.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_06.ogg" +dest_files=["res://.godot/imported/bang_06.ogg-030dd3a7bdb007dbe28f390bd2898538.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_07.ogg b/assets/sounds/sfx/cannon/bang_07.ogg new file mode 100644 index 0000000..ef2ff8a Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_07.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_07.ogg.import b/assets/sounds/sfx/cannon/bang_07.ogg.import new file mode 100644 index 0000000..0a68b76 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_07.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://de7wvnl0hh0wy" +path="res://.godot/imported/bang_07.ogg-14db06a46734b1701b37f0eef5ec38d7.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_07.ogg" +dest_files=["res://.godot/imported/bang_07.ogg-14db06a46734b1701b37f0eef5ec38d7.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_08.ogg b/assets/sounds/sfx/cannon/bang_08.ogg new file mode 100644 index 0000000..a0a3c31 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_08.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_08.ogg.import b/assets/sounds/sfx/cannon/bang_08.ogg.import new file mode 100644 index 0000000..f4170b5 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_08.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://qp8n8n33l1nl" +path="res://.godot/imported/bang_08.ogg-ca6f753d78f3f2ca85365056f08e71a0.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_08.ogg" +dest_files=["res://.godot/imported/bang_08.ogg-ca6f753d78f3f2ca85365056f08e71a0.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_09.ogg b/assets/sounds/sfx/cannon/bang_09.ogg new file mode 100644 index 0000000..d4a3225 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_09.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_09.ogg.import b/assets/sounds/sfx/cannon/bang_09.ogg.import new file mode 100644 index 0000000..d47211f --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_09.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dd4wxu7xu3tq8" +path="res://.godot/imported/bang_09.ogg-e183688b06f81e754c4efe38a45f339c.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_09.ogg" +dest_files=["res://.godot/imported/bang_09.ogg-e183688b06f81e754c4efe38a45f339c.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/bang_10.ogg b/assets/sounds/sfx/cannon/bang_10.ogg new file mode 100644 index 0000000..bc71081 Binary files /dev/null and b/assets/sounds/sfx/cannon/bang_10.ogg differ diff --git a/assets/sounds/sfx/cannon/bang_10.ogg.import b/assets/sounds/sfx/cannon/bang_10.ogg.import new file mode 100644 index 0000000..9096eb0 --- /dev/null +++ b/assets/sounds/sfx/cannon/bang_10.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bn0n6mftv1bi8" +path="res://.godot/imported/bang_10.ogg-e8f4a6483e3fecb666ac553ccfe82031.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/bang_10.ogg" +dest_files=["res://.godot/imported/bang_10.ogg-e8f4a6483e3fecb666ac553ccfe82031.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/cannon_01.ogg b/assets/sounds/sfx/cannon/cannon_01.ogg new file mode 100644 index 0000000..3a58520 Binary files /dev/null and b/assets/sounds/sfx/cannon/cannon_01.ogg differ diff --git a/assets/sounds/sfx/cannon/cannon_01.ogg.import b/assets/sounds/sfx/cannon/cannon_01.ogg.import new file mode 100644 index 0000000..7ae11ee --- /dev/null +++ b/assets/sounds/sfx/cannon/cannon_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bsrwng5u3p36k" +path="res://.godot/imported/cannon_01.ogg-a1b7e4b2bfa551d67a1e4b24274a2a78.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/cannon_01.ogg" +dest_files=["res://.godot/imported/cannon_01.ogg-a1b7e4b2bfa551d67a1e4b24274a2a78.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/cannon_02.ogg b/assets/sounds/sfx/cannon/cannon_02.ogg new file mode 100644 index 0000000..a59c509 Binary files /dev/null and b/assets/sounds/sfx/cannon/cannon_02.ogg differ diff --git a/assets/sounds/sfx/cannon/cannon_02.ogg.import b/assets/sounds/sfx/cannon/cannon_02.ogg.import new file mode 100644 index 0000000..36ac942 --- /dev/null +++ b/assets/sounds/sfx/cannon/cannon_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cesxxngg3hwth" +path="res://.godot/imported/cannon_02.ogg-6edef966157d90bee6a6ac7f7e5c88ac.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/cannon_02.ogg" +dest_files=["res://.godot/imported/cannon_02.ogg-6edef966157d90bee6a6ac7f7e5c88ac.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/cannon_03.ogg b/assets/sounds/sfx/cannon/cannon_03.ogg new file mode 100644 index 0000000..3f52216 Binary files /dev/null and b/assets/sounds/sfx/cannon/cannon_03.ogg differ diff --git a/assets/sounds/sfx/cannon/cannon_03.ogg.import b/assets/sounds/sfx/cannon/cannon_03.ogg.import new file mode 100644 index 0000000..2c6f74a --- /dev/null +++ b/assets/sounds/sfx/cannon/cannon_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cajd01dyhcoel" +path="res://.godot/imported/cannon_03.ogg-2340595cd599725f30f958c59aca4c20.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/cannon_03.ogg" +dest_files=["res://.godot/imported/cannon_03.ogg-2340595cd599725f30f958c59aca4c20.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/cannon_04.ogg b/assets/sounds/sfx/cannon/cannon_04.ogg new file mode 100644 index 0000000..d5eb0d2 Binary files /dev/null and b/assets/sounds/sfx/cannon/cannon_04.ogg differ diff --git a/assets/sounds/sfx/cannon/cannon_04.ogg.import b/assets/sounds/sfx/cannon/cannon_04.ogg.import new file mode 100644 index 0000000..662b8b7 --- /dev/null +++ b/assets/sounds/sfx/cannon/cannon_04.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://d27m3qyu4gbrr" +path="res://.godot/imported/cannon_04.ogg-2c273092186b2b3f67b169a0e929e5fa.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/cannon_04.ogg" +dest_files=["res://.godot/imported/cannon_04.ogg-2c273092186b2b3f67b169a0e929e5fa.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/cannon_05.ogg b/assets/sounds/sfx/cannon/cannon_05.ogg new file mode 100644 index 0000000..69f1cfb Binary files /dev/null and b/assets/sounds/sfx/cannon/cannon_05.ogg differ diff --git a/assets/sounds/sfx/cannon/cannon_05.ogg.import b/assets/sounds/sfx/cannon/cannon_05.ogg.import new file mode 100644 index 0000000..47790b7 --- /dev/null +++ b/assets/sounds/sfx/cannon/cannon_05.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c1shirwd4v2wn" +path="res://.godot/imported/cannon_05.ogg-0f333ac092962a872d61682b120d3a28.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/cannon_05.ogg" +dest_files=["res://.godot/imported/cannon_05.ogg-0f333ac092962a872d61682b120d3a28.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_01.ogg b/assets/sounds/sfx/cannon/fw_01.ogg new file mode 100644 index 0000000..d019913 Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_01.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_01.ogg.import b/assets/sounds/sfx/cannon/fw_01.ogg.import new file mode 100644 index 0000000..39bf19a --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cy1pa83lkwn36" +path="res://.godot/imported/fw_01.ogg-e92b2449a66d68ac729cf8f7f31085bc.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_01.ogg" +dest_files=["res://.godot/imported/fw_01.ogg-e92b2449a66d68ac729cf8f7f31085bc.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_02.ogg b/assets/sounds/sfx/cannon/fw_02.ogg new file mode 100644 index 0000000..8a2ecfc Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_02.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_02.ogg.import b/assets/sounds/sfx/cannon/fw_02.ogg.import new file mode 100644 index 0000000..3b1a23c --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://d12r0q04p2j5p" +path="res://.godot/imported/fw_02.ogg-138e9b0284adb26253f433c4e059e09e.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_02.ogg" +dest_files=["res://.godot/imported/fw_02.ogg-138e9b0284adb26253f433c4e059e09e.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_03.ogg b/assets/sounds/sfx/cannon/fw_03.ogg new file mode 100644 index 0000000..d8dbb1c Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_03.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_03.ogg.import b/assets/sounds/sfx/cannon/fw_03.ogg.import new file mode 100644 index 0000000..111c51a --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://i1njl0uhl0bo" +path="res://.godot/imported/fw_03.ogg-c9c5ef3c4308b9fb9dea8cbee9c60231.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_03.ogg" +dest_files=["res://.godot/imported/fw_03.ogg-c9c5ef3c4308b9fb9dea8cbee9c60231.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_04.ogg b/assets/sounds/sfx/cannon/fw_04.ogg new file mode 100644 index 0000000..754e730 Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_04.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_04.ogg.import b/assets/sounds/sfx/cannon/fw_04.ogg.import new file mode 100644 index 0000000..0b8a581 --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_04.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://2dupi4wwmtnb" +path="res://.godot/imported/fw_04.ogg-4c60ee7043e773734d831183e53b77e8.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_04.ogg" +dest_files=["res://.godot/imported/fw_04.ogg-4c60ee7043e773734d831183e53b77e8.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_05.ogg b/assets/sounds/sfx/cannon/fw_05.ogg new file mode 100644 index 0000000..6c799d1 Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_05.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_05.ogg.import b/assets/sounds/sfx/cannon/fw_05.ogg.import new file mode 100644 index 0000000..1c0685e --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_05.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cl0rbexr2bak5" +path="res://.godot/imported/fw_05.ogg-03db37daf692a2d32b8e26d87c524ca4.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_05.ogg" +dest_files=["res://.godot/imported/fw_05.ogg-03db37daf692a2d32b8e26d87c524ca4.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_06.ogg b/assets/sounds/sfx/cannon/fw_06.ogg new file mode 100644 index 0000000..fe88863 Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_06.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_06.ogg.import b/assets/sounds/sfx/cannon/fw_06.ogg.import new file mode 100644 index 0000000..8cfabf5 --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_06.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://br3cvluueum0g" +path="res://.godot/imported/fw_06.ogg-e6fb160cd8ac823f407acb54c01b5c7a.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_06.ogg" +dest_files=["res://.godot/imported/fw_06.ogg-e6fb160cd8ac823f407acb54c01b5c7a.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/fw_loop.ogg b/assets/sounds/sfx/cannon/fw_loop.ogg new file mode 100644 index 0000000..cd356d9 Binary files /dev/null and b/assets/sounds/sfx/cannon/fw_loop.ogg differ diff --git a/assets/sounds/sfx/cannon/fw_loop.ogg.import b/assets/sounds/sfx/cannon/fw_loop.ogg.import new file mode 100644 index 0000000..516125a --- /dev/null +++ b/assets/sounds/sfx/cannon/fw_loop.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://b0uouovsdmrx" +path="res://.godot/imported/fw_loop.ogg-a2a3916b214340cff0de4a37fd633ad9.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/fw_loop.ogg" +dest_files=["res://.godot/imported/fw_loop.ogg-a2a3916b214340cff0de4a37fd633ad9.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/shot_01.ogg b/assets/sounds/sfx/cannon/shot_01.ogg new file mode 100644 index 0000000..6fe0429 Binary files /dev/null and b/assets/sounds/sfx/cannon/shot_01.ogg differ diff --git a/assets/sounds/sfx/cannon/shot_01.ogg.import b/assets/sounds/sfx/cannon/shot_01.ogg.import new file mode 100644 index 0000000..72c3fe5 --- /dev/null +++ b/assets/sounds/sfx/cannon/shot_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dogpkgwok1s3v" +path="res://.godot/imported/shot_01.ogg-4eebfdf241d452bc09b3710937124fc3.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/shot_01.ogg" +dest_files=["res://.godot/imported/shot_01.ogg-4eebfdf241d452bc09b3710937124fc3.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/shot_02.ogg b/assets/sounds/sfx/cannon/shot_02.ogg new file mode 100644 index 0000000..517b763 Binary files /dev/null and b/assets/sounds/sfx/cannon/shot_02.ogg differ diff --git a/assets/sounds/sfx/cannon/shot_02.ogg.import b/assets/sounds/sfx/cannon/shot_02.ogg.import new file mode 100644 index 0000000..e07d596 --- /dev/null +++ b/assets/sounds/sfx/cannon/shot_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c73ryvou5x2c8" +path="res://.godot/imported/shot_02.ogg-c093f2c1d098ba17aba83cfa91d3a610.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/shot_02.ogg" +dest_files=["res://.godot/imported/shot_02.ogg-c093f2c1d098ba17aba83cfa91d3a610.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/cannon/shot_03.ogg b/assets/sounds/sfx/cannon/shot_03.ogg new file mode 100644 index 0000000..be45981 Binary files /dev/null and b/assets/sounds/sfx/cannon/shot_03.ogg differ diff --git a/assets/sounds/sfx/cannon/shot_03.ogg.import b/assets/sounds/sfx/cannon/shot_03.ogg.import new file mode 100644 index 0000000..ac53075 --- /dev/null +++ b/assets/sounds/sfx/cannon/shot_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bynh23dl61uuy" +path="res://.godot/imported/shot_03.ogg-395aa9ca7678c3507846dc7534c29233.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/cannon/shot_03.ogg" +dest_files=["res://.godot/imported/shot_03.ogg-395aa9ca7678c3507846dc7534c29233.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/collect.mp3 b/assets/sounds/sfx/collect.mp3 new file mode 100644 index 0000000..1592320 Binary files /dev/null and b/assets/sounds/sfx/collect.mp3 differ diff --git a/assets/sounds/sfx/collect.mp3.import b/assets/sounds/sfx/collect.mp3.import new file mode 100644 index 0000000..806d405 --- /dev/null +++ b/assets/sounds/sfx/collect.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dhy07vqrtpbqi" +path="res://.godot/imported/collect.mp3-683ae7633ebf1b7dfcdb971307588307.mp3str" + +[deps] + +source_file="res://assets/sounds/sfx/collect.mp3" +dest_files=["res://.godot/imported/collect.mp3-683ae7633ebf1b7dfcdb971307588307.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/0.ogg b/assets/sounds/sfx/footsteep/concrete/0.ogg new file mode 100644 index 0000000..ea36b08 Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/0.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/0.ogg.import b/assets/sounds/sfx/footsteep/concrete/0.ogg.import new file mode 100644 index 0000000..7fce5de --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/0.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://xglsomthmdrl" +path="res://.godot/imported/0.ogg-5ef8b74463428fdad8a56714d7e5402e.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/0.ogg" +dest_files=["res://.godot/imported/0.ogg-5ef8b74463428fdad8a56714d7e5402e.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/1.ogg b/assets/sounds/sfx/footsteep/concrete/1.ogg new file mode 100644 index 0000000..75d2cb7 Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/1.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/1.ogg.import b/assets/sounds/sfx/footsteep/concrete/1.ogg.import new file mode 100644 index 0000000..0762dcc --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/1.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://xbaubcjxdrdo" +path="res://.godot/imported/1.ogg-6d7761761d201543914d0157e12981ad.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/1.ogg" +dest_files=["res://.godot/imported/1.ogg-6d7761761d201543914d0157e12981ad.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/2.ogg b/assets/sounds/sfx/footsteep/concrete/2.ogg new file mode 100644 index 0000000..08bdc7e Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/2.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/2.ogg.import b/assets/sounds/sfx/footsteep/concrete/2.ogg.import new file mode 100644 index 0000000..d170ff4 --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/2.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c33he3ovudyjf" +path="res://.godot/imported/2.ogg-a4d2f4f89d5c79f7e6e61a2976c9238f.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/2.ogg" +dest_files=["res://.godot/imported/2.ogg-a4d2f4f89d5c79f7e6e61a2976c9238f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/3.ogg b/assets/sounds/sfx/footsteep/concrete/3.ogg new file mode 100644 index 0000000..df7d414 Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/3.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/3.ogg.import b/assets/sounds/sfx/footsteep/concrete/3.ogg.import new file mode 100644 index 0000000..f6640b0 --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/3.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://mol6r8oyb8sg" +path="res://.godot/imported/3.ogg-77cc4fb1706a78fc48f09fdfd6f30125.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/3.ogg" +dest_files=["res://.godot/imported/3.ogg-77cc4fb1706a78fc48f09fdfd6f30125.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/4.ogg b/assets/sounds/sfx/footsteep/concrete/4.ogg new file mode 100644 index 0000000..93dcf2d Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/4.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/4.ogg.import b/assets/sounds/sfx/footsteep/concrete/4.ogg.import new file mode 100644 index 0000000..0d6d8a2 --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/4.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c4i10yba5urnq" +path="res://.godot/imported/4.ogg-5bcb9227bb35e189b7668e86adf48ede.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/4.ogg" +dest_files=["res://.godot/imported/4.ogg-5bcb9227bb35e189b7668e86adf48ede.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/5.ogg b/assets/sounds/sfx/footsteep/concrete/5.ogg new file mode 100644 index 0000000..06e79da Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/5.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/5.ogg.import b/assets/sounds/sfx/footsteep/concrete/5.ogg.import new file mode 100644 index 0000000..3eb6443 --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/5.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cdxnee7srpwxa" +path="res://.godot/imported/5.ogg-1da32fca4bade8ccb2bf808029fb881c.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/5.ogg" +dest_files=["res://.godot/imported/5.ogg-1da32fca4bade8ccb2bf808029fb881c.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/concrete/6.ogg b/assets/sounds/sfx/footsteep/concrete/6.ogg new file mode 100644 index 0000000..0c4bfc6 Binary files /dev/null and b/assets/sounds/sfx/footsteep/concrete/6.ogg differ diff --git a/assets/sounds/sfx/footsteep/concrete/6.ogg.import b/assets/sounds/sfx/footsteep/concrete/6.ogg.import new file mode 100644 index 0000000..863a3e6 --- /dev/null +++ b/assets/sounds/sfx/footsteep/concrete/6.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cq7x5sntunxsw" +path="res://.godot/imported/6.ogg-b743a66a02f2bb5100a0950937c00771.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/concrete/6.ogg" +dest_files=["res://.godot/imported/6.ogg-b743a66a02f2bb5100a0950937c00771.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/0.ogg b/assets/sounds/sfx/footsteep/grass/0.ogg new file mode 100644 index 0000000..c5ce291 Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/0.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/0.ogg.import b/assets/sounds/sfx/footsteep/grass/0.ogg.import new file mode 100644 index 0000000..91c56ca --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/0.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dxw1e0pf7f3fw" +path="res://.godot/imported/0.ogg-75601aff950ad181168655f618e1a769.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/0.ogg" +dest_files=["res://.godot/imported/0.ogg-75601aff950ad181168655f618e1a769.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/1.ogg b/assets/sounds/sfx/footsteep/grass/1.ogg new file mode 100644 index 0000000..f966d1f Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/1.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/1.ogg.import b/assets/sounds/sfx/footsteep/grass/1.ogg.import new file mode 100644 index 0000000..38eacea --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/1.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bv7hgk25mwc3r" +path="res://.godot/imported/1.ogg-945217c7ca09f7f0f84622f2c5ae1293.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/1.ogg" +dest_files=["res://.godot/imported/1.ogg-945217c7ca09f7f0f84622f2c5ae1293.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/2.ogg b/assets/sounds/sfx/footsteep/grass/2.ogg new file mode 100644 index 0000000..de50d41 Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/2.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/2.ogg.import b/assets/sounds/sfx/footsteep/grass/2.ogg.import new file mode 100644 index 0000000..c8ab01e --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/2.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bpp1ia6ssgwca" +path="res://.godot/imported/2.ogg-d4d948656139cac1ad8ea15a299f2bd5.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/2.ogg" +dest_files=["res://.godot/imported/2.ogg-d4d948656139cac1ad8ea15a299f2bd5.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/3.ogg b/assets/sounds/sfx/footsteep/grass/3.ogg new file mode 100644 index 0000000..03269dc Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/3.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/3.ogg.import b/assets/sounds/sfx/footsteep/grass/3.ogg.import new file mode 100644 index 0000000..a1eb58b --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/3.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://ci2keftqoo4px" +path="res://.godot/imported/3.ogg-d1867b78e8593038a43ee8c8da1e5e30.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/3.ogg" +dest_files=["res://.godot/imported/3.ogg-d1867b78e8593038a43ee8c8da1e5e30.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/4.ogg b/assets/sounds/sfx/footsteep/grass/4.ogg new file mode 100644 index 0000000..7073ee0 Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/4.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/4.ogg.import b/assets/sounds/sfx/footsteep/grass/4.ogg.import new file mode 100644 index 0000000..2fddcdb --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/4.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dorj60uxb2dai" +path="res://.godot/imported/4.ogg-f32835d601cdaf86743f30016820a6aa.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/4.ogg" +dest_files=["res://.godot/imported/4.ogg-f32835d601cdaf86743f30016820a6aa.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/footsteep/grass/5.ogg b/assets/sounds/sfx/footsteep/grass/5.ogg new file mode 100644 index 0000000..9a5780e Binary files /dev/null and b/assets/sounds/sfx/footsteep/grass/5.ogg differ diff --git a/assets/sounds/sfx/footsteep/grass/5.ogg.import b/assets/sounds/sfx/footsteep/grass/5.ogg.import new file mode 100644 index 0000000..9687a40 --- /dev/null +++ b/assets/sounds/sfx/footsteep/grass/5.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cn1dfegrixor0" +path="res://.godot/imported/5.ogg-e59d0f1ad774a29cf2fa263e8dc95138.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/footsteep/grass/5.ogg" +dest_files=["res://.godot/imported/5.ogg-e59d0f1ad774a29cf2fa263e8dc95138.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/die1.ogg b/assets/sounds/sfx/hit/die1.ogg new file mode 100644 index 0000000..1bc99c7 Binary files /dev/null and b/assets/sounds/sfx/hit/die1.ogg differ diff --git a/assets/sounds/sfx/hit/die1.ogg.import b/assets/sounds/sfx/hit/die1.ogg.import new file mode 100644 index 0000000..2cc6d18 --- /dev/null +++ b/assets/sounds/sfx/hit/die1.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://chntqlt8vi3tj" +path="res://.godot/imported/die1.ogg-338115eb8953d48d75df56dfdf288866.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/die1.ogg" +dest_files=["res://.godot/imported/die1.ogg-338115eb8953d48d75df56dfdf288866.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/hit1.ogg b/assets/sounds/sfx/hit/hit1.ogg new file mode 100644 index 0000000..0971385 Binary files /dev/null and b/assets/sounds/sfx/hit/hit1.ogg differ diff --git a/assets/sounds/sfx/hit/hit1.ogg.import b/assets/sounds/sfx/hit/hit1.ogg.import new file mode 100644 index 0000000..2d5a886 --- /dev/null +++ b/assets/sounds/sfx/hit/hit1.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c346fb4t5g5jg" +path="res://.godot/imported/hit1.ogg-af7872568898ac72ada143ae8124500f.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/hit1.ogg" +dest_files=["res://.godot/imported/hit1.ogg-af7872568898ac72ada143ae8124500f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/hit2.ogg b/assets/sounds/sfx/hit/hit2.ogg new file mode 100644 index 0000000..f12158a Binary files /dev/null and b/assets/sounds/sfx/hit/hit2.ogg differ diff --git a/assets/sounds/sfx/hit/hit2.ogg.import b/assets/sounds/sfx/hit/hit2.ogg.import new file mode 100644 index 0000000..63d753e --- /dev/null +++ b/assets/sounds/sfx/hit/hit2.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dsx66c3lespcf" +path="res://.godot/imported/hit2.ogg-3e170b9deb7a8e3f0349fe3eb1e171b4.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/hit2.ogg" +dest_files=["res://.godot/imported/hit2.ogg-3e170b9deb7a8e3f0349fe3eb1e171b4.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/hit3.ogg b/assets/sounds/sfx/hit/hit3.ogg new file mode 100644 index 0000000..0cbf136 Binary files /dev/null and b/assets/sounds/sfx/hit/hit3.ogg differ diff --git a/assets/sounds/sfx/hit/hit3.ogg.import b/assets/sounds/sfx/hit/hit3.ogg.import new file mode 100644 index 0000000..6f0e28f --- /dev/null +++ b/assets/sounds/sfx/hit/hit3.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dhphsijbwccqk" +path="res://.godot/imported/hit3.ogg-14afacb0b5f7c3f8ee78c383fbcce42e.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/hit3.ogg" +dest_files=["res://.godot/imported/hit3.ogg-14afacb0b5f7c3f8ee78c383fbcce42e.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/hit4.ogg b/assets/sounds/sfx/hit/hit4.ogg new file mode 100644 index 0000000..ecdaebb Binary files /dev/null and b/assets/sounds/sfx/hit/hit4.ogg differ diff --git a/assets/sounds/sfx/hit/hit4.ogg.import b/assets/sounds/sfx/hit/hit4.ogg.import new file mode 100644 index 0000000..9d2346e --- /dev/null +++ b/assets/sounds/sfx/hit/hit4.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://di6um6n2s0uoh" +path="res://.godot/imported/hit4.ogg-2b69f0b0dd10d096fbe497102ba332c6.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/hit4.ogg" +dest_files=["res://.godot/imported/hit4.ogg-2b69f0b0dd10d096fbe497102ba332c6.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/hit/hit5.ogg b/assets/sounds/sfx/hit/hit5.ogg new file mode 100644 index 0000000..b6e659a Binary files /dev/null and b/assets/sounds/sfx/hit/hit5.ogg differ diff --git a/assets/sounds/sfx/hit/hit5.ogg.import b/assets/sounds/sfx/hit/hit5.ogg.import new file mode 100644 index 0000000..e172861 --- /dev/null +++ b/assets/sounds/sfx/hit/hit5.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bhc2ce8y8v8ki" +path="res://.godot/imported/hit5.ogg-8461d3f19695900967d65c5dd2239be1.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/hit/hit5.ogg" +dest_files=["res://.godot/imported/hit5.ogg-8461d3f19695900967d65c5dd2239be1.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/laser-cannon-106734.mp3 b/assets/sounds/sfx/laser-cannon-106734.mp3 new file mode 100644 index 0000000..131fd93 Binary files /dev/null and b/assets/sounds/sfx/laser-cannon-106734.mp3 differ diff --git a/assets/sounds/sfx/laser-cannon-106734.mp3.import b/assets/sounds/sfx/laser-cannon-106734.mp3.import new file mode 100644 index 0000000..4163c64 --- /dev/null +++ b/assets/sounds/sfx/laser-cannon-106734.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://cbkllnnpjp87g" +path="res://.godot/imported/laser-cannon-106734.mp3-95224e478a4e7a562f8c281e9e4fbbdc.mp3str" + +[deps] + +source_file="res://assets/sounds/sfx/laser-cannon-106734.mp3" +dest_files=["res://.godot/imported/laser-cannon-106734.mp3-95224e478a4e7a562f8c281e9e4fbbdc.mp3str"] + +[params] + +loop=false +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/assets/sounds/sfx/rock_breaking.ogg b/assets/sounds/sfx/rock_breaking.ogg new file mode 100644 index 0000000..ce76c52 Binary files /dev/null and b/assets/sounds/sfx/rock_breaking.ogg differ diff --git a/assets/sounds/sfx/rock_breaking.ogg.import b/assets/sounds/sfx/rock_breaking.ogg.import new file mode 100644 index 0000000..f199e2d --- /dev/null +++ b/assets/sounds/sfx/rock_breaking.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://be33u64hhygoc" +path="res://.godot/imported/rock_breaking.ogg-842e9490bda39d76dba643dcb70e7cfd.oggvorbisstr" + +[deps] + +source_file="res://assets/sounds/sfx/rock_breaking.ogg" +dest_files=["res://.godot/imported/rock_breaking.ogg-842e9490bda39d76dba643dcb70e7cfd.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/textures/icons/icons8-ammo-100.png b/assets/textures/icons/icons8-ammo-100.png new file mode 100644 index 0000000..6505019 Binary files /dev/null and b/assets/textures/icons/icons8-ammo-100.png differ diff --git a/assets/textures/icons/icons8-ammo-100.png.import b/assets/textures/icons/icons8-ammo-100.png.import new file mode 100644 index 0000000..cb5501b --- /dev/null +++ b/assets/textures/icons/icons8-ammo-100.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c70t6m1044igs" +path="res://.godot/imported/icons8-ammo-100.png-b109daaff0b28a83dfdee64b28d74646.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/icons/icons8-ammo-100.png" +dest_files=["res://.godot/imported/icons8-ammo-100.png-b109daaff0b28a83dfdee64b28d74646.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/textures/icons/icons8-heart-100.png b/assets/textures/icons/icons8-heart-100.png new file mode 100644 index 0000000..a92a398 Binary files /dev/null and b/assets/textures/icons/icons8-heart-100.png differ diff --git a/assets/textures/icons/icons8-heart-100.png.import b/assets/textures/icons/icons8-heart-100.png.import new file mode 100644 index 0000000..ab77f0d --- /dev/null +++ b/assets/textures/icons/icons8-heart-100.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdu5ivhyslcap" +path="res://.godot/imported/icons8-heart-100.png-4cc2c8778d719946976e831a9c970333.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/icons/icons8-heart-100.png" +dest_files=["res://.godot/imported/icons8-heart-100.png-4cc2c8778d719946976e831a9c970333.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/bars/bar-left.png b/assets/ui/bars/bar-left.png new file mode 100644 index 0000000..d6075c9 Binary files /dev/null and b/assets/ui/bars/bar-left.png differ diff --git a/assets/ui/bars/bar-left.png.import b/assets/ui/bars/bar-left.png.import new file mode 100644 index 0000000..e2da9e6 --- /dev/null +++ b/assets/ui/bars/bar-left.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bguqiytfyodna" +path="res://.godot/imported/bar-left.png-3dd52efc506d02bee052de5167452bf3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/bars/bar-left.png" +dest_files=["res://.godot/imported/bar-left.png-3dd52efc506d02bee052de5167452bf3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/bars/bar-right.png b/assets/ui/bars/bar-right.png new file mode 100644 index 0000000..26a562f Binary files /dev/null and b/assets/ui/bars/bar-right.png differ diff --git a/assets/ui/bars/bar-right.png.import b/assets/ui/bars/bar-right.png.import new file mode 100644 index 0000000..0d5f2d6 --- /dev/null +++ b/assets/ui/bars/bar-right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bitv47srrpgt2" +path="res://.godot/imported/bar-right.png-12680f19b5a2abadfef0e2152e0696c3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/bars/bar-right.png" +dest_files=["res://.godot/imported/bar-right.png-12680f19b5a2abadfef0e2152e0696c3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/bars/health-over.png b/assets/ui/bars/health-over.png new file mode 100644 index 0000000..26c6304 Binary files /dev/null and b/assets/ui/bars/health-over.png differ diff --git a/assets/ui/bars/health-over.png.import b/assets/ui/bars/health-over.png.import new file mode 100644 index 0000000..b8b68db --- /dev/null +++ b/assets/ui/bars/health-over.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcun7ikaou25c" +path="res://.godot/imported/health-over.png-943b7fb4ec2f1191f0fba473829f380c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/bars/health-over.png" +dest_files=["res://.godot/imported/health-over.png-943b7fb4ec2f1191f0fba473829f380c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/bars/health-under.png b/assets/ui/bars/health-under.png new file mode 100644 index 0000000..32563ba Binary files /dev/null and b/assets/ui/bars/health-under.png differ diff --git a/assets/ui/bars/health-under.png.import b/assets/ui/bars/health-under.png.import new file mode 100644 index 0000000..b316fa9 --- /dev/null +++ b/assets/ui/bars/health-under.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://v3n4gm8u4wod" +path="res://.godot/imported/health-under.png-196c4792be55d596279f0c3d51a89224.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/bars/health-under.png" +dest_files=["res://.godot/imported/health-under.png-196c4792be55d596279f0c3d51a89224.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..8fde510 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,251 @@ +[preset.0] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="0.1.0.20240204" +application/product_version="0.1.0.20240204" +application/company_name="Mechanical Flower" +application/product_name="Greeter" +application/file_description="" +application/copyright="2023-present Mechanical Flower" +application/trademarks="" +application/export_angle=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="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" +debug/export_console_script=1 + +[preset.1] + +name="Web" +platform="Web" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) +include_coi_service_worker=true +iframe_breakout="Disabled" + +[preset.2] + +name="macOS" +platform="macOS" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.2.options] + +export/distribution_type=1 +binary_format/architecture="universal" +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +application/icon="" +application/icon_interpolation=4 +application/bundle_identifier="io.itch.MechanicalFlower" +application/signature="" +application/app_category="Games" +application/short_version="0.1" +application/version="0.1.0" +application/copyright="2023-present Mechanical Flower" +application/copyright_localized={} +application/min_macos_version="10.12" +application/export_angle=0 +display/high_res=true +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=false +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={} +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}\"" +debug/export_console_script=1 +notarization/apple_team_id="" + +[preset.3] + +name="Linux/X11" +platform="Linux/X11" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.3.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +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 +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" +debug/export_console_script=1 diff --git a/generate_credits.py b/generate_credits.py new file mode 100755 index 0000000..04dd34c --- /dev/null +++ b/generate_credits.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import os +from string import Template + + +def main(): + template = Template(( + '- "[$files]($source)" by **$author** licensed' + ' under [$license](./LICENSES/$license.txt)\n' + )) + + deps = {} + section = None + + with open(".reuse/dep5", "r") as file: + for line in file: + if line.startswith('# '): + section = line[len("# "): -1].lower() + + if section is None: + continue + + if line.startswith("Files: "): + if section not in deps: + deps[section] = [] + + deps[section].append({"files": line[len("Files: "):-1]}) + + elif line.startswith("Copyright: "): + if section not in deps: + deps[section] = [] + + date_author = line[len("Copyright: "):-1].split(" ") + date_author.pop(0) + deps[section][-1]["author"] = " ".join(date_author) + + elif line.startswith("License: "): + if section not in deps: + deps[section] = [] + + deps[section][-1]["license"] = line[len("License: "):-1] + + elif line.startswith("Source: "): + if section not in deps: + deps[section] = [] + + deps[section][-1]["source"] = line[len("Source: "):-1] + + if deps: + with open("CREDITS.md", "w") as file: + file.writelines("# Credits\n\n") + + for key, value in deps.items(): + file.writelines(f"## {key.title()}\n") + for dep in value: + file.writelines(template.substitute(**dep)) + else: + if os.path.exists("CREDITS.md"): + os.remove("CREDITS.md") + + +if __name__ == "__main__": + main() diff --git a/plug.gd b/plug.gd new file mode 100644 index 0000000..9ed4c02 --- /dev/null +++ b/plug.gd @@ -0,0 +1,24 @@ +extends "res://addons/gd-plug/plug.gd" + + +func _plugging(): + plug( + "godot-extended-libraries/godot-debug-menu", + {"commit": "3211673efc9d1e41f94bbd74705eaed2d2b8bdd7", "renovate-branch": "master"} + ) + plug( + "rsubtil/controller_icons", + {"commit": "9088a0f804ce2858f19aac044988c71fcaa015e2", "renovate-branch": "master"} + ) + plug( + "ItsKorin/Godot-Post-Process-Plugin", + {"commit": "4e3f96f674d575478b0c24415fc9de0d7e617304", "renovate-branch": "main"} + ) + plug( + "Jummit/godot-destruction-plugin", + {"commit": "eb7ccb7148245f14211b3d4ccd9ec32bfbc49ca2", "renovate-branch": "master"} + ) + plug( + "HungryProton/scatter", + {"commit": "59147fc5b16f505ea54bf2c9ad65ae6b613a2c58", "renovate-branch": "v4"} + ) diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..17f6840 --- /dev/null +++ b/project.godot @@ -0,0 +1,156 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="BossRush" +run/main_scene="res://scenes/main.tscn" +config/features=PackedStringArray("4.3", "Forward Plus") +config/icon="res://assets/icon.png" + +[audio] + +buses/default_bus_layout="res://resources/default_bus_layout.tres" + +[autoload] + +DebugMenu="*res://addons/debug_menu/debug_menu.tscn" +ControllerIcons="*res://addons/controller_icons/ControllerIcons.gd" +Global="*res://scripts/global.gd" +Loading="*res://addons/loading/loading.tscn" + +[display] + +window/size/mode=2 +window/stretch/mode="canvas_items" + +[editor_plugins] + +enabled=PackedStringArray("res://addons/controller_icons/plugin.cfg", "res://addons/debug_menu/plugin.cfg", "res://addons/destruction/plugin.cfg", "res://addons/post_processing/plugin.cfg", "res://addons/proton_scatter/plugin.cfg") + +[filesystem] + +import/blender/enabled=false + +[global_group] + +player="" +grass="" +altar="" + +[gui] + +theme/default_theme_scale=2.0 +theme/custom_font="res://assets/fonts/bad.ttf" + +[input] + +pm_moveleft={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +pm_moveright={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +pm_moveforward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +pm_jump={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +pm_movebackward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +pm_duck={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +sprint={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":false,"script":null) +] +} +change_mouse_input={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194332,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +look_up={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null) +] +} +look_down={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null) +] +} +look_left={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null) +] +} +look_right={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null) +] +} +quit={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +shoot={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(150, 27),"global_position":Vector2(159, 73),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +interact={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_1="Player" +3d_physics/layer_2="Boss" +3d_physics/layer_3="Weakpoint" +3d_physics/layer_4="Ammo" +3d_physics/layer_5="Obstacle" +3d_physics/layer_6="Interactable" +3d_physics/layer_7="BoundingBox" + +[rendering] + +textures/vram_compression/import_etc2_astc=true +camera/depth_of_field/depth_of_field_bokeh_shape=0 +environment/ssao/quality=0 +global_illumination/sdfgi/frames_to_converge=0 diff --git a/public/.gdignore b/public/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 0000000..b2bab8b --- /dev/null +++ b/public/.gitignore @@ -0,0 +1,2 @@ +*.import +*.snap diff --git a/public/publishing/store/github.webp b/public/publishing/store/github.webp new file mode 100644 index 0000000..43a9803 Binary files /dev/null and b/public/publishing/store/github.webp differ diff --git a/public/publishing/store/itchio.webp b/public/publishing/store/itchio.webp new file mode 100644 index 0000000..935d13a Binary files /dev/null and b/public/publishing/store/itchio.webp differ diff --git a/resources/blink.tres b/resources/blink.tres new file mode 100644 index 0000000..8a204e5 --- /dev/null +++ b/resources/blink.tres @@ -0,0 +1,14 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://de22l2oq43fsj"] + +[ext_resource type="Shader" path="res://shaders/blink.gdshader" id="1_mb1o7"] + +[resource] +render_priority = 1 +shader = ExtResource("1_mb1o7") +shader_parameter/hit = false +shader_parameter/end_time = 5.0 +shader_parameter/start_freq = 1.0 +shader_parameter/end_freq = 10.0 +shader_parameter/flash_color = Color(1, 1, 1, 1) +shader_parameter/blink_length = 0.5 +shader_parameter/blink_speed = 5.0 diff --git a/resources/default_bus_layout.tres b/resources/default_bus_layout.tres new file mode 100644 index 0000000..fcc91d8 --- /dev/null +++ b/resources/default_bus_layout.tres @@ -0,0 +1,15 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://y1mdnu828ko3"] + +[resource] +bus/1/name = &"Music" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = -5.04224 +bus/1/send = &"Master" +bus/2/name = &"SFX" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = 0.0 +bus/2/send = &"Master" diff --git a/resources/interactable.tres b/resources/interactable.tres new file mode 100644 index 0000000..ecb712b --- /dev/null +++ b/resources/interactable.tres @@ -0,0 +1,11 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dtlo8ybh7utjk"] + +[ext_resource type="Shader" path="res://shaders/highlight.gdshader" id="1_sdism"] + +[resource] +render_priority = 0 +shader = ExtResource("1_sdism") +shader_parameter/shine_color = Color(1, 1, 1, 1) +shader_parameter/cycle_interval = 1.0 +shader_parameter/shine_speed = 3.0 +shader_parameter/shine_width = 3.0 diff --git a/resources/level.tres b/resources/level.tres new file mode 100644 index 0000000..83bc7dd --- /dev/null +++ b/resources/level.tres @@ -0,0 +1,31 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://cjphy1aca6ax0"] + +[ext_resource type="Shader" path="res://shaders/level.gdshader" id="1_ldl2q"] + +[resource] +render_priority = 0 +shader = ExtResource("1_ldl2q") +shader_parameter/heightmap_normals_intensity = 0.233 +shader_parameter/heightmap_scale = 0.0 +shader_parameter/heightmap_height_scale = null +shader_parameter/slope_edge_1 = null +shader_parameter/slope_edge_2 = null +shader_parameter/slope_edge_3 = null +shader_parameter/slope_edge_noise_scale = null +shader_parameter/slope_edge_noise_intensity = null +shader_parameter/slope_color_remap_top = Color(0.937255, 0.572549, 0.345098, 1) +shader_parameter/slope_color_remap_bottom = Color(0.972549, 0.741176, 0.576471, 1) +shader_parameter/flat_color_remap_top = Color(1, 0.67451, 0.427451, 1) +shader_parameter/flat_color_remap_bottom = Color(0.972549, 0.741176, 0.576471, 1) +shader_parameter/flat_uv_scale = 1.0 +shader_parameter/flat_normal_scale = null +shader_parameter/slope_uv_scale = 1.0 +shader_parameter/slope_normal_scale = null +shader_parameter/flat_specular = null +shader_parameter/flat_roughness = null +shader_parameter/flat_metallic = null +shader_parameter/flat_normal_intensity = null +shader_parameter/slope_specular = null +shader_parameter/slope_roughness = null +shader_parameter/slope_metallic = null +shader_parameter/slope_normal_intensity = null diff --git a/scenes/ammo.tscn b/scenes/ammo.tscn new file mode 100644 index 0000000..5b38dc4 --- /dev/null +++ b/scenes/ammo.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=4 format=3 uid="uid://bnf7ywe2fgyvg"] + +[ext_resource type="PackedScene" uid="uid://bs3miq6gm30sx" path="res://assets/models/graveyard/pumpkin.fbx" id="1_5hle0"] +[ext_resource type="Script" path="res://scripts/ammo.gd" id="1_fwuug"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_vxbgl"] +size = Vector3(0.8, 1.75, 1.5) + +[node name="Ammo" type="RigidBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, -3.72529e-09, 0, 1, 0, 0, 0) +collision_layer = 8 +collision_mask = 22 +contact_monitor = true +max_contacts_reported = 10 +script = ExtResource("1_fwuug") + +[node name="pumpkin" parent="." instance=ExtResource("1_5hle0")] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0.4, 0) +shape = SubResource("BoxShape3D_vxbgl") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/boss/ghost.tscn b/scenes/boss/ghost.tscn new file mode 100644 index 0000000..92d0dae --- /dev/null +++ b/scenes/boss/ghost.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=11 format=3 uid="uid://cyreud6bx7lpp"] + +[ext_resource type="PackedScene" uid="uid://cvuhkjf80rwjd" path="res://assets/models/graveyard/character-ghost.fbx" id="1_674k0"] +[ext_resource type="Script" path="res://scripts/boss/boss.gd" id="1_khqc0"] +[ext_resource type="PackedScene" uid="uid://df805u6l6lhoh" path="res://scenes/weakpoint.tscn" id="2_i317k"] +[ext_resource type="Script" path="res://scripts/boss/blink.gd" id="4_cxy6t"] +[ext_resource type="Script" path="res://scripts/life.gd" id="5_mjca1"] +[ext_resource type="Script" path="res://scripts/boss/hit_sound.gd" id="6_5tkee"] +[ext_resource type="Script" path="res://addons/destruction/destruction.gd" id="7_vugdb"] +[ext_resource type="PackedScene" uid="uid://bxvi4u1udenoh" path="res://assets/models/smashed_ghost.glb" id="8_vqx66"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_l0y4o"] +size = Vector3(0.312958, 0.580566, 0.322571) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5nwp8"] +size = Vector3(0.877441, 0.0971069, 0.165527) + +[node name="Ghost" type="Node3D"] + +[node name="GhostBody" type="RigidBody3D" parent="."] +collision_layer = 2 +collision_mask = 0 +gravity_scale = 0.0 +script = ExtResource("1_khqc0") +type = "Thalmaris, Phantom of the Forgotten" + +[node name="BodyCollisionShape" type="CollisionShape3D" parent="GhostBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 2.91185, 0.000335693) +shape = SubResource("BoxShape3D_l0y4o") + +[node name="ArmsCollisionShape" type="CollisionShape3D" parent="GhostBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, -0.00219727, 2.91438, 0.0245056) +shape = SubResource("BoxShape3D_5nwp8") + +[node name="character-ghost" parent="GhostBody" instance=ExtResource("1_674k0")] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, -1.74256, 0) + +[node name="Weakpoint" parent="GhostBody" instance=ExtResource("2_i317k")] +transform = Transform3D(7, 0, 0, 0, 7, 0, 0, 0, 7, -0.576132, 4.48171, 1.0568) + +[node name="BlinkComponent" type="Node" parent="GhostBody"] +script = ExtResource("4_cxy6t") + +[node name="LifeComponent" type="Node" parent="GhostBody"] +script = ExtResource("5_mjca1") +initial_life = 15 + +[node name="HitSoundComponent" type="Node" parent="GhostBody"] +script = ExtResource("6_5tkee") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer3D" parent="GhostBody"] +unique_name_in_owner = true +pitch_scale = 1.5 +bus = &"SFX" + +[node name="Destruction" type="Node" parent="GhostBody" node_paths=PackedStringArray("shard_container")] +script = ExtResource("7_vugdb") +fragmented = ExtResource("8_vqx66") +shard_container = NodePath("../..") diff --git a/scenes/boss/vampire.tscn b/scenes/boss/vampire.tscn new file mode 100644 index 0000000..9455c95 --- /dev/null +++ b/scenes/boss/vampire.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=11 format=3 uid="uid://blmfi55g4xqxv"] + +[ext_resource type="Script" path="res://scripts/boss/boss.gd" id="1_l0raw"] +[ext_resource type="PackedScene" uid="uid://b8g8gqxsy05x5" path="res://assets/models/graveyard/character-vampire.fbx" id="2_dws3h"] +[ext_resource type="PackedScene" uid="uid://df805u6l6lhoh" path="res://scenes/weakpoint.tscn" id="3_bv0bl"] +[ext_resource type="Script" path="res://scripts/boss/blink.gd" id="4_ydgtm"] +[ext_resource type="Script" path="res://scripts/life.gd" id="5_tcms6"] +[ext_resource type="Script" path="res://scripts/boss/hit_sound.gd" id="6_cqoj8"] +[ext_resource type="Script" path="res://addons/destruction/destruction.gd" id="7_tgbcu"] +[ext_resource type="PackedScene" uid="uid://tuml2fvvv62v" path="res://assets/models/smashed_vampire.glb" id="8_s3m45"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_olkwr"] +size = Vector3(0.312958, 0.763916, 0.322571) + +[sub_resource type="BoxShape3D" id="BoxShape3D_hrha5"] +size = Vector3(0.877441, 0.0971069, 0.165527) + +[node name="Vampire" type="Node3D"] + +[node name="VampireBody" type="RigidBody3D" parent="."] +collision_layer = 2 +collision_mask = 0 +gravity_scale = 0.0 +script = ExtResource("1_l0raw") +type = "Draeven, Scourge of the Vampires" + +[node name="BodyCollisionShape" type="CollisionShape3D" parent="VampireBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 3.73766, 0.000335693) +shape = SubResource("BoxShape3D_olkwr") + +[node name="ArmsCollisionShape" type="CollisionShape3D" parent="VampireBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, -0.00219727, 4.65694, 0.0245056) +shape = SubResource("BoxShape3D_hrha5") + +[node name="character-vampire" parent="VampireBody" instance=ExtResource("2_dws3h")] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0) + +[node name="Weakpoint" parent="VampireBody" instance=ExtResource("3_bv0bl")] +transform = Transform3D(7, 0, 0, 0, 7, 0, 0, 0, 7, 1.11801, 2.81596, -0.124195) + +[node name="BlinkComponent" type="Node" parent="VampireBody"] +script = ExtResource("4_ydgtm") + +[node name="LifeComponent" type="Node" parent="VampireBody"] +script = ExtResource("5_tcms6") +initial_life = 26 + +[node name="HitSoundComponent" type="Node" parent="VampireBody"] +script = ExtResource("6_cqoj8") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer3D" parent="VampireBody"] +unique_name_in_owner = true +pitch_scale = 0.8 +bus = &"SFX" + +[node name="Destruction" type="Node" parent="VampireBody" node_paths=PackedStringArray("shard_container")] +script = ExtResource("7_tgbcu") +fragmented = ExtResource("8_s3m45") +shard_container = NodePath("../..") diff --git a/scenes/boss/zombie.tscn b/scenes/boss/zombie.tscn new file mode 100644 index 0000000..a975bcb --- /dev/null +++ b/scenes/boss/zombie.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=12 format=3 uid="uid://d1ik213bdwkfv"] + +[ext_resource type="Script" path="res://scripts/boss/zombie.gd" id="1_d5xbr"] +[ext_resource type="PackedScene" uid="uid://8hn130eerinn" path="res://assets/models/graveyard/character-zombie.fbx" id="1_jdl0n"] +[ext_resource type="PackedScene" uid="uid://df805u6l6lhoh" path="res://scenes/weakpoint.tscn" id="2_7i048"] +[ext_resource type="Script" path="res://scripts/boss/blink.gd" id="4_gojj0"] +[ext_resource type="Script" path="res://scripts/life.gd" id="5_6q88b"] +[ext_resource type="Script" path="res://scripts/boss/hit_sound.gd" id="6_rtrhn"] +[ext_resource type="AudioStream" uid="uid://c346fb4t5g5jg" path="res://assets/sounds/sfx/hit/hit1.ogg" id="7_pycv4"] +[ext_resource type="Script" path="res://addons/destruction/destruction.gd" id="8_3t6wp"] +[ext_resource type="PackedScene" uid="uid://cvxin6y3448q7" path="res://assets/models/smashed_zombie.glb" id="9_orh5f"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_olkwr"] +size = Vector3(0.312958, 0.763916, 0.322571) + +[sub_resource type="BoxShape3D" id="BoxShape3D_hrha5"] +size = Vector3(0.877441, 0.0971069, 0.165527) + +[node name="Zombie" type="Node3D"] + +[node name="ZombieBody" type="RigidBody3D" parent="."] +collision_layer = 2 +collision_mask = 0 +gravity_scale = 0.0 +script = ExtResource("1_d5xbr") +type = "Gorrath, Devourer of the Dead" + +[node name="BodyCollisionShape" type="CollisionShape3D" parent="ZombieBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 3.73766, 0.000335693) +shape = SubResource("BoxShape3D_olkwr") + +[node name="ArmsCollisionShape" type="CollisionShape3D" parent="ZombieBody"] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, -0.00219727, 4.65694, 0.0245056) +shape = SubResource("BoxShape3D_hrha5") + +[node name="character-zombie" parent="ZombieBody" instance=ExtResource("1_jdl0n")] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0) + +[node name="Weakpoint" parent="ZombieBody" instance=ExtResource("2_7i048")] +transform = Transform3D(7, 0, 0, 0, 7, 0, 0, 0, 7, 0.11801, 2.81596, -1.12419) + +[node name="BlinkComponent" type="Node" parent="ZombieBody"] +script = ExtResource("4_gojj0") + +[node name="LifeComponent" type="Node" parent="ZombieBody"] +script = ExtResource("5_6q88b") +initial_life = 37 + +[node name="HitSoundComponent" type="Node" parent="ZombieBody"] +script = ExtResource("6_rtrhn") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer3D" parent="ZombieBody"] +unique_name_in_owner = true +stream = ExtResource("7_pycv4") +pitch_scale = 0.5 +bus = &"SFX" + +[node name="Destruction" type="Node" parent="ZombieBody" node_paths=PackedStringArray("shard_container")] +script = ExtResource("8_3t6wp") +fragmented = ExtResource("9_orh5f") +shard_container = NodePath("../..") diff --git a/scenes/brick_wall.tscn b/scenes/brick_wall.tscn new file mode 100644 index 0000000..81384e4 --- /dev/null +++ b/scenes/brick_wall.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=3 format=3 uid="uid://b0ihe47wovtir"] + +[ext_resource type="PackedScene" uid="uid://buvfa4ok2ax12" path="res://assets/models/graveyard/brick-wall.fbx" id="1_iu0d0"] + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_cc6bq"] +data = PackedVector3Array(0.5, 0.11, -0.327, -0.5, 0.11, -0.3529, 0.5, 0.11, -0.3529, -0.5, 0.11, -0.3529, 0.5, 0.11, -0.327, -0.5, 0.11, -0.327, 0.5, 0.6019, -0.4771, -0.5, 0.7019, -0.4771, -0.5, 0.6019, -0.4771, -0.5, 0.7019, -0.4771, 0.5, 0.6019, -0.4771, 0.5, 0.7019, -0.4771, 0.5, 0, -0.5, -0.5, 0, -0.32, 0.5, 0, -0.32, -0.5, 0, -0.32, 0.5, 0, -0.5, -0.5, 0, -0.5, 0.5, 0.7019, -0.3429, -0.5, 0.7019, -0.4771, 0.5, 0.7019, -0.4771, -0.5, 0.7019, -0.4771, 0.5, 0.7019, -0.3429, -0.5, 0.7019, -0.3429, -0.5, 0.09, -0.32, 0.5, 0.11, -0.327, 0.5, 0.09, -0.32, 0.5, 0.11, -0.327, -0.5, 0.09, -0.32, -0.5, 0.11, -0.327, 0.5, 0.11, -0.4671, -0.5, 0.11, -0.493, 0.5, 0.11, -0.493, -0.5, 0.11, -0.493, 0.5, 0.11, -0.4671, -0.5, 0.11, -0.4671, 0.5, 0.09, -0.5, -0.5, 0.11, -0.493, -0.5, 0.09, -0.5, -0.5, 0.11, -0.493, 0.5, 0.09, -0.5, 0.5, 0.11, -0.493, 0.5, 0.6019, -0.4771, -0.5, 0.6019, -0.4671, 0.5, 0.6019, -0.4671, -0.5, 0.6019, -0.4671, 0.5, 0.6019, -0.4771, -0.5, 0.6019, -0.4771, 0.5, 0.6019, -0.3529, -0.5, 0.6019, -0.3429, 0.5, 0.6019, -0.3429, -0.5, 0.6019, -0.3429, 0.5, 0.6019, -0.3529, -0.5, 0.6019, -0.3529, -0.5, 0.6019, -0.3429, 0.5, 0.7019, -0.3429, 0.5, 0.6019, -0.3429, 0.5, 0.7019, -0.3429, -0.5, 0.6019, -0.3429, -0.5, 0.7019, -0.3429, 0.5, 0, -0.5, -0.5, 0.09, -0.5, -0.5, 0, -0.5, -0.5, 0.09, -0.5, 0.5, 0, -0.5, 0.5, 0.09, -0.5, -0.5, 0, -0.32, 0.5, 0.09, -0.32, 0.5, 0, -0.32, 0.5, 0.09, -0.32, -0.5, 0, -0.32, -0.5, 0.09, -0.32, -0.5, 0.7019, -0.4771, -0.5, 0.6019, -0.4671, -0.5, 0.6019, -0.4771, -0.5, 0.6019, -0.4671, -0.5, 0.7019, -0.4771, -0.5, 0.7019, -0.3429, -0.5, 0.6019, -0.4671, -0.5, 0.7019, -0.3429, -0.5, 0.6019, -0.3529, -0.5, 0.6019, -0.3529, -0.5, 0.7019, -0.3429, -0.5, 0.6019, -0.3429, -0.5, 0.09, -0.5, -0.5, 0, -0.32, -0.5, 0, -0.5, -0.5, 0, -0.32, -0.5, 0.09, -0.5, -0.5, 0.11, -0.493, -0.5, 0, -0.32, -0.5, 0.11, -0.493, -0.5, 0.11, -0.4671, -0.5, 0, -0.32, -0.5, 0.11, -0.4671, -0.5, 0.11, -0.3529, -0.5, 0, -0.32, -0.5, 0.11, -0.3529, -0.5, 0.11, -0.327, -0.5, 0, -0.32, -0.5, 0.11, -0.327, -0.5, 0.09, -0.32, 0.5, 0.6019, -0.4771, 0.5, 0.7019, -0.3429, 0.5, 0.7019, -0.4771, 0.5, 0.7019, -0.3429, 0.5, 0.6019, -0.4771, 0.5, 0.6019, -0.4671, 0.5, 0.7019, -0.3429, 0.5, 0.6019, -0.4671, 0.5, 0.6019, -0.3529, 0.5, 0.7019, -0.3429, 0.5, 0.6019, -0.3529, 0.5, 0.6019, -0.3429, 0.5, 0, -0.32, 0.5, 0.09, -0.5, 0.5, 0, -0.5, 0.5, 0.09, -0.5, 0.5, 0, -0.32, 0.5, 0.11, -0.493, 0.5, 0.11, -0.493, 0.5, 0, -0.32, 0.5, 0.11, -0.4671, 0.5, 0.11, -0.4671, 0.5, 0, -0.32, 0.5, 0.11, -0.3529, 0.5, 0.11, -0.3529, 0.5, 0, -0.32, 0.5, 0.11, -0.327, 0.5, 0.11, -0.327, 0.5, 0, -0.32, 0.5, 0.09, -0.32, -0.5, 0.11, -0.3529, 0.5, 0.6019, -0.3529, 0.5, 0.11, -0.3529, 0.5, 0.6019, -0.3529, -0.5, 0.11, -0.3529, -0.5, 0.6019, -0.3529, 0.5, 0.11, -0.4671, -0.5, 0.6019, -0.4671, -0.5, 0.11, -0.4671, -0.5, 0.6019, -0.4671, 0.5, 0.11, -0.4671, 0.5, 0.6019, -0.4671, -0.5, 0.6019, -0.3529, -0.5, 0.11, -0.4671, -0.5, 0.6019, -0.4671, -0.5, 0.11, -0.4671, -0.5, 0.6019, -0.3529, -0.5, 0.11, -0.3529, 0.5, 0.11, -0.4671, 0.5, 0.6019, -0.3529, 0.5, 0.6019, -0.4671, 0.5, 0.6019, -0.3529, 0.5, 0.11, -0.4671, 0.5, 0.11, -0.3529, -0.3943, 0.2007, -0.327, -0.2534, 0.2707, -0.327, -0.2534, 0.2007, -0.327, -0.2534, 0.2707, -0.327, -0.3943, 0.2007, -0.327, -0.3943, 0.2707, -0.327, -0.2534, 0.2007, -0.3529, -0.3943, 0.2007, -0.327, -0.2534, 0.2007, -0.327, -0.3943, 0.2007, -0.327, -0.2534, 0.2007, -0.3529, -0.3943, 0.2007, -0.3529, -0.2534, 0.2007, -0.3529, -0.2534, 0.2707, -0.327, -0.2534, 0.2707, -0.3529, -0.2534, 0.2707, -0.327, -0.2534, 0.2007, -0.3529, -0.2534, 0.2007, -0.327, -0.2534, 0.2707, -0.327, -0.3943, 0.2707, -0.3529, -0.2534, 0.2707, -0.3529, -0.3943, 0.2707, -0.3529, -0.2534, 0.2707, -0.327, -0.3943, 0.2707, -0.327, -0.3943, 0.2707, -0.3529, -0.3943, 0.2007, -0.327, -0.3943, 0.2007, -0.3529, -0.3943, 0.2007, -0.327, -0.3943, 0.2707, -0.3529, -0.3943, 0.2707, -0.327, -0.2943, 0.3007, -0.327, -0.1534, 0.3707, -0.327, -0.1534, 0.3007, -0.327, -0.1534, 0.3707, -0.327, -0.2943, 0.3007, -0.327, -0.2943, 0.3707, -0.327, -0.1534, 0.3007, -0.3529, -0.2943, 0.3007, -0.327, -0.1534, 0.3007, -0.327, -0.2943, 0.3007, -0.327, -0.1534, 0.3007, -0.3529, -0.2943, 0.3007, -0.3529, -0.1534, 0.3007, -0.3529, -0.1534, 0.3707, -0.327, -0.1534, 0.3707, -0.3529, -0.1534, 0.3707, -0.327, -0.1534, 0.3007, -0.3529, -0.1534, 0.3007, -0.327, -0.1534, 0.3707, -0.327, -0.2943, 0.3707, -0.3529, -0.1534, 0.3707, -0.3529, -0.2943, 0.3707, -0.3529, -0.1534, 0.3707, -0.327, -0.2943, 0.3707, -0.327, -0.2943, 0.3707, -0.3529, -0.2943, 0.3007, -0.327, -0.2943, 0.3007, -0.3529, -0.2943, 0.3007, -0.327, -0.2943, 0.3707, -0.3529, -0.2943, 0.3707, -0.327, 0.3057, 0.4007, -0.327, 0.4466, 0.4707, -0.327, 0.4466, 0.4007, -0.327, 0.4466, 0.4707, -0.327, 0.3057, 0.4007, -0.327, 0.3057, 0.4707, -0.327, 0.4466, 0.4007, -0.3529, 0.3057, 0.4007, -0.327, 0.4466, 0.4007, -0.327, 0.3057, 0.4007, -0.327, 0.4466, 0.4007, -0.3529, 0.3057, 0.4007, -0.3529, 0.4466, 0.4007, -0.3529, 0.4466, 0.4707, -0.327, 0.4466, 0.4707, -0.3529, 0.4466, 0.4707, -0.327, 0.4466, 0.4007, -0.3529, 0.4466, 0.4007, -0.327, 0.4466, 0.4707, -0.327, 0.3057, 0.4707, -0.3529, 0.4466, 0.4707, -0.3529, 0.3057, 0.4707, -0.3529, 0.4466, 0.4707, -0.327, 0.3057, 0.4707, -0.327, 0.3057, 0.4707, -0.3529, 0.3057, 0.4007, -0.327, 0.3057, 0.4007, -0.3529, 0.3057, 0.4007, -0.327, 0.3057, 0.4707, -0.3529, 0.3057, 0.4707, -0.327, -0.1802, 0.2486, -0.493, -0.3211, 0.3186, -0.493, -0.3211, 0.2486, -0.493, -0.3211, 0.3186, -0.493, -0.1802, 0.2486, -0.493, -0.1802, 0.3186, -0.493, -0.3211, 0.2486, -0.4671, -0.1802, 0.2486, -0.493, -0.3211, 0.2486, -0.493, -0.1802, 0.2486, -0.493, -0.3211, 0.2486, -0.4671, -0.1802, 0.2486, -0.4671, -0.3211, 0.2486, -0.4671, -0.3211, 0.3186, -0.493, -0.3211, 0.3186, -0.4671, -0.3211, 0.3186, -0.493, -0.3211, 0.2486, -0.4671, -0.3211, 0.2486, -0.493, -0.3211, 0.3186, -0.493, -0.1802, 0.3186, -0.4671, -0.3211, 0.3186, -0.4671, -0.1802, 0.3186, -0.4671, -0.3211, 0.3186, -0.493, -0.1802, 0.3186, -0.493, -0.1802, 0.3186, -0.4671, -0.1802, 0.2486, -0.493, -0.1802, 0.2486, -0.4671, -0.1802, 0.2486, -0.493, -0.1802, 0.3186, -0.4671, -0.1802, 0.3186, -0.493, -0.0802, 0.4486, -0.493, -0.2211, 0.5186, -0.493, -0.2211, 0.4486, -0.493, -0.2211, 0.5186, -0.493, -0.0802, 0.4486, -0.493, -0.0802, 0.5186, -0.493, -0.2211, 0.4486, -0.4671, -0.0802, 0.4486, -0.493, -0.2211, 0.4486, -0.493, -0.0802, 0.4486, -0.493, -0.2211, 0.4486, -0.4671, -0.0802, 0.4486, -0.4671, -0.2211, 0.4486, -0.4671, -0.2211, 0.5186, -0.493, -0.2211, 0.5186, -0.4671, -0.2211, 0.5186, -0.493, -0.2211, 0.4486, -0.4671, -0.2211, 0.4486, -0.493, -0.2211, 0.5186, -0.493, -0.0802, 0.5186, -0.4671, -0.2211, 0.5186, -0.4671, -0.0802, 0.5186, -0.4671, -0.2211, 0.5186, -0.493, -0.0802, 0.5186, -0.493, -0.0802, 0.5186, -0.4671, -0.0802, 0.4486, -0.493, -0.0802, 0.4486, -0.4671, -0.0802, 0.4486, -0.493, -0.0802, 0.5186, -0.4671, -0.0802, 0.5186, -0.493, 0.3198, 0.2486, -0.493, 0.1789, 0.3186, -0.493, 0.1789, 0.2486, -0.493, 0.1789, 0.3186, -0.493, 0.3198, 0.2486, -0.493, 0.3198, 0.3186, -0.493, 0.1789, 0.2486, -0.4671, 0.3198, 0.2486, -0.493, 0.1789, 0.2486, -0.493, 0.3198, 0.2486, -0.493, 0.1789, 0.2486, -0.4671, 0.3198, 0.2486, -0.4671, 0.1789, 0.2486, -0.4671, 0.1789, 0.3186, -0.493, 0.1789, 0.3186, -0.4671, 0.1789, 0.3186, -0.493, 0.1789, 0.2486, -0.4671, 0.1789, 0.2486, -0.493, 0.1789, 0.3186, -0.493, 0.3198, 0.3186, -0.4671, 0.1789, 0.3186, -0.4671, 0.3198, 0.3186, -0.4671, 0.1789, 0.3186, -0.493, 0.3198, 0.3186, -0.493, 0.3198, 0.3186, -0.4671, 0.3198, 0.2486, -0.493, 0.3198, 0.2486, -0.4671, 0.3198, 0.2486, -0.493, 0.3198, 0.3186, -0.4671, 0.3198, 0.3186, -0.493) + +[node name="BrickWall" type="StaticBody3D"] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, -0.0255394) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.412289) +shape = SubResource("ConcavePolygonShape3D_cc6bq") + +[node name="brick-wall" parent="." instance=ExtResource("1_iu0d0")] + +[node name="brick_wall" parent="brick-wall" index="0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.412289) + +[editable path="brick-wall"] diff --git a/scenes/hud/boss_ui.tscn b/scenes/hud/boss_ui.tscn new file mode 100644 index 0000000..ab09a18 --- /dev/null +++ b/scenes/hud/boss_ui.tscn @@ -0,0 +1,45 @@ +[gd_scene load_steps=3 format=3 uid="uid://lrvvql7135mo"] + +[ext_resource type="Texture2D" uid="uid://v3n4gm8u4wod" path="res://assets/ui/bars/health-under.png" id="1_68mfo"] +[ext_resource type="Texture2D" uid="uid://bcun7ikaou25c" path="res://assets/ui/bars/health-over.png" id="2_s8wgu"] + +[node name="BossUI" type="Control"] +custom_minimum_size = Vector2(0, 80) +layout_mode = 3 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="CenterContainer" type="CenterContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"] +layout_mode = 2 + +[node name="BossNameLabel" type="Label" parent="CenterContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/outline_size = 5 +text = "Boss Name: %s" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="BossHealthBar" type="TextureProgressBar" parent="CenterContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +max_value = 10.0 +value = 5.0 +nine_patch_stretch = true +stretch_margin_left = 238 +stretch_margin_top = 15 +stretch_margin_right = 345 +texture_under = ExtResource("1_68mfo") +texture_progress = ExtResource("2_s8wgu") diff --git a/scenes/level.tscn b/scenes/level.tscn new file mode 100644 index 0000000..ed45fa9 --- /dev/null +++ b/scenes/level.tscn @@ -0,0 +1,356 @@ +[gd_scene load_steps=47 format=3 uid="uid://dimee6owoxhf2"] + +[ext_resource type="Script" path="res://addons/proton_scatter/src/scatter.gd" id="1_lsxa8"] +[ext_resource type="Material" uid="uid://cjphy1aca6ax0" path="res://resources/level.tres" id="1_qtipf"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/stack/modifier_stack.gd" id="2_ridqo"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/modifiers/base_modifier.gd" id="3_6da8v"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/modifiers/create_along_edge_random.gd" id="4_1cj7e"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/modifiers/offset_scale.gd" id="5_irtah"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/modifiers/randomize_rotation.gd" id="6_cmbkr"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/scatter_item.gd" id="7_lxf5h"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/modifiers/project_on_geometry.gd" id="8_dxlmu"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/scatter_shape.gd" id="8_qmuw2"] +[ext_resource type="Script" path="res://addons/proton_scatter/src/shapes/sphere_shape.gd" id="9_eq2j1"] +[ext_resource type="PackedScene" uid="uid://cjgbgux5ss7qe" path="res://assets/models/graveyard/coffin.fbx" id="10_lpnkf"] +[ext_resource type="PackedScene" uid="uid://viskm354hnbd" path="res://assets/models/graveyard/grave.fbx" id="11_lndfe"] +[ext_resource type="PackedScene" uid="uid://cgvh2es4fchc5" path="res://assets/models/graveyard/road.fbx" id="11_wedri"] +[ext_resource type="PackedScene" uid="uid://cdwq166hxxowm" path="res://assets/models/graveyard/grave-border.fbx" id="12_p1f68"] +[ext_resource type="Script" path="res://scripts/altar.gd" id="12_sgicc"] +[ext_resource type="PackedScene" uid="uid://cyreud6bx7lpp" path="res://scenes/boss/ghost.tscn" id="13_ipnuw"] +[ext_resource type="PackedScene" uid="uid://cldykurpkpbmj" path="res://assets/models/graveyard/gravestone-bevel.fbx" id="13_vs6iy"] +[ext_resource type="PackedScene" uid="uid://biu2fskjinq86" path="res://assets/models/graveyard/shovel-dirt.fbx" id="14_40phn"] +[ext_resource type="PackedScene" uid="uid://bi0wpndw5ymxl" path="res://assets/models/graveyard/lantern-candle.fbx" id="14_av1qw"] +[ext_resource type="PackedScene" uid="uid://3d1wx8ajd7kt" path="res://assets/models/graveyard/trunk.fbx" id="15_c67l2"] +[ext_resource type="PackedScene" uid="uid://d1ik213bdwkfv" path="res://scenes/boss/zombie.tscn" id="16_865on"] +[ext_resource type="PackedScene" uid="uid://blmfi55g4xqxv" path="res://scenes/boss/vampire.tscn" id="21_6g5m3"] +[ext_resource type="AudioStream" uid="uid://be33u64hhygoc" path="res://assets/sounds/sfx/rock_breaking.ogg" id="24_nmj7i"] + +[sub_resource type="BoxMesh" id="BoxMesh_2yq04"] +size = Vector3(100, 1, 100) + +[sub_resource type="BoxShape3D" id="BoxShape3D_h1mhl"] +size = Vector3(75, 6.16846, 75) + +[sub_resource type="Resource" id="Resource_a72oa"] +script = ExtResource("4_1cj7e") +instance_count = 75 +align_to_path = false +align_up_axis = Vector3(0, 1, 0) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 0 + +[sub_resource type="Resource" id="Resource_era7j"] +script = ExtResource("6_cmbkr") +rotation = Vector3(0, 360, 0) +snap_angle = Vector3(0, 0, 0) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 2 + +[sub_resource type="Resource" id="Resource_ccu6c"] +script = ExtResource("5_irtah") +operation = 1 +scale = Vector3(5, 5, 5) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 2 + +[sub_resource type="Resource" id="Resource_2jry2"] +script = ExtResource("8_dxlmu") +ray_direction = Vector3(0, -1, 0) +ray_length = 10.0 +ray_offset = 1.0 +remove_points_on_miss = true +align_with_collision_normal = false +max_slope = 90.0 +collision_mask = 16 +exclude_mask = 0 +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 0 + +[sub_resource type="Resource" id="Resource_dci7f"] +script = ExtResource("2_ridqo") +stack = Array[ExtResource("3_6da8v")]([SubResource("Resource_a72oa"), SubResource("Resource_era7j"), SubResource("Resource_ccu6c"), SubResource("Resource_2jry2")]) + +[sub_resource type="Resource" id="Resource_g8bsm"] +script = ExtResource("9_eq2j1") +radius = 32.0354 + +[sub_resource type="Resource" id="Resource_32ers"] +script = ExtResource("4_1cj7e") +instance_count = 50 +align_to_path = false +align_up_axis = Vector3(0, 1, 0) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 0 + +[sub_resource type="Resource" id="Resource_kqots"] +script = ExtResource("5_irtah") +operation = 1 +scale = Vector3(5, 5, 5) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 2 + +[sub_resource type="Resource" id="Resource_4abuk"] +script = ExtResource("6_cmbkr") +rotation = Vector3(0, 360, 0) +snap_angle = Vector3(0, 0, 0) +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 2 + +[sub_resource type="Resource" id="Resource_86g6v"] +script = ExtResource("8_dxlmu") +ray_direction = Vector3(0, -1, 0) +ray_length = 10.0 +ray_offset = 1.0 +remove_points_on_miss = true +align_with_collision_normal = false +max_slope = 90.0 +collision_mask = 16 +exclude_mask = 0 +enabled = true +override_global_seed = false +custom_seed = 0 +restrict_height = false +reference_frame = 0 + +[sub_resource type="Resource" id="Resource_s4qmr"] +script = ExtResource("2_ridqo") +stack = Array[ExtResource("3_6da8v")]([SubResource("Resource_32ers"), SubResource("Resource_kqots"), SubResource("Resource_4abuk"), SubResource("Resource_86g6v")]) + +[sub_resource type="Resource" id="Resource_h8r3r"] +script = ExtResource("9_eq2j1") +radius = 35.614 + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_wshc2"] +data = PackedVector3Array(0.197, 0.0648, -0.1115, 0.0038, 0.2673, -0.1918, 0.0038, 0.0648, -0.2231, 0.0038, 0.2673, -0.1918, 0.197, 0.0648, -0.1115, 0.1699, 0.2673, -0.0959, -0.128, 0.3726, 0.0761, -0.1623, 0.3726, -0.0959, -0.128, 0.3726, -0.0761, -0.1623, 0.3726, -0.0959, -0.128, 0.3726, 0.0761, -0.1623, 0.3726, 0.0959, 0.1356, 0.2835, 0.0761, 0.1699, 0.3645, 0.0959, 0.1699, 0.2835, 0.0959, 0.1699, 0.3645, 0.0959, 0.1356, 0.2835, 0.0761, 0.1356, 0.3645, 0.0761, 0.1356, 0.324, -0.0761, 0.0038, 0.324, -0.1918, 0.1699, 0.324, -0.0959, 0.0038, 0.324, -0.1918, 0.1356, 0.324, -0.0761, 0.0038, 0.324, -0.1522, -0.1623, 0.2673, -0.0959, -0.1894, 0.0648, 0.1115, -0.1894, 0.0648, -0.1115, -0.1894, 0.0648, 0.1115, -0.1623, 0.2673, -0.0959, -0.1623, 0.2673, 0.0959, 0.0038, 0.0648, -0.2231, -0.1623, 0.2673, -0.0959, -0.1894, 0.0648, -0.1115, -0.1623, 0.2673, -0.0959, 0.0038, 0.0648, -0.2231, 0.0038, 0.2673, -0.1918, 0.0038, 0.2673, -0.1918, -0.1623, 0.2916, -0.0959, -0.1623, 0.2673, -0.0959, -0.1623, 0.2916, -0.0959, 0.0038, 0.2673, -0.1918, 0.0038, 0.2916, -0.1918, 0.1699, 0.2673, -0.0959, 0.0038, 0.2916, -0.1918, 0.0038, 0.2673, -0.1918, 0.0038, 0.2916, -0.1918, 0.1699, 0.2673, -0.0959, 0.1699, 0.324, -0.0959, 0.0038, 0.2916, -0.1918, 0.1699, 0.324, -0.0959, 0.0038, 0.324, -0.1918, 0.0038, 0.2916, -0.1522, -0.1623, 0.2916, -0.0959, 0.0038, 0.2916, -0.1918, -0.1623, 0.2916, -0.0959, 0.0038, 0.2916, -0.1522, -0.128, 0.2916, -0.0761, 0.0038, 0.2673, 0.1918, 0.1699, 0.2835, 0.0959, 0.1699, 0.2673, 0.0959, 0.1699, 0.2835, 0.0959, 0.0038, 0.2673, 0.1918, 0.0038, 0.2835, 0.1918, 0.2423, 0, -0.1377, 0.0038, 0, 0.2754, 0.2423, 0, 0.1377, 0.0038, 0, 0.2754, 0.2423, 0, -0.1377, 0.0038, 0, -0.2754, 0.0038, 0, 0.2754, 0.0038, 0, -0.2754, -0.2347, 0, 0.1377, -0.2347, 0, 0.1377, 0.0038, 0, -0.2754, -0.2347, 0, -0.1377, 0.0038, 0, 0.2754, 0.197, 0.0648, 0.1115, 0.2423, 0, 0.1377, 0.197, 0.0648, 0.1115, 0.0038, 0, 0.2754, 0.0038, 0.0648, 0.2231, 0.0038, 0.3078, 0.1918, -0.128, 0.3078, 0.0761, 0.0038, 0.3078, 0.1522, -0.128, 0.3078, 0.0761, 0.0038, 0.3078, 0.1918, -0.1623, 0.3078, 0.0959, 0.0038, 0.2673, 0.1522, -0.128, 0.3078, 0.0761, -0.128, 0.2673, 0.0761, -0.128, 0.3078, 0.0761, 0.0038, 0.2673, 0.1522, 0.0038, 0.2835, 0.1522, -0.128, 0.3078, 0.0761, 0.0038, 0.2835, 0.1522, 0.0038, 0.3078, 0.1522, -0.128, 0.2916, -0.0761, -0.128, 0.3726, 0.0761, -0.128, 0.3726, -0.0761, -0.128, 0.3726, 0.0761, -0.128, 0.2916, -0.0761, -0.128, 0.2673, -0.0761, -0.128, 0.3726, 0.0761, -0.128, 0.2673, -0.0761, -0.128, 0.2673, 0.0761, -0.128, 0.3726, 0.0761, -0.128, 0.2673, 0.0761, -0.128, 0.3078, 0.0761, 0.1356, 0.2673, 0.0761, 0.0038, 0.2835, 0.1522, 0.0038, 0.2673, 0.1522, 0.0038, 0.2835, 0.1522, 0.1356, 0.2673, 0.0761, 0.1356, 0.2835, 0.0761, 0.1356, 0.324, -0.0761, 0.1356, 0.2673, 0.0761, 0.1356, 0.2673, -0.0761, 0.1356, 0.2673, 0.0761, 0.1356, 0.324, -0.0761, 0.1356, 0.3645, -0.0761, 0.1356, 0.2673, 0.0761, 0.1356, 0.3645, -0.0761, 0.1356, 0.3645, 0.0761, 0.1356, 0.2673, 0.0761, 0.1356, 0.3645, 0.0761, 0.1356, 0.2835, 0.0761, -0.128, 0.2916, -0.0761, -0.1623, 0.3726, -0.0959, -0.1623, 0.2916, -0.0959, -0.1623, 0.3726, -0.0959, -0.128, 0.2916, -0.0761, -0.128, 0.3726, -0.0761, -0.1894, 0.0648, -0.1115, -0.2347, 0, 0.1377, -0.2347, 0, -0.1377, -0.2347, 0, 0.1377, -0.1894, 0.0648, -0.1115, -0.1894, 0.0648, 0.1115, -0.1894, 0.0648, 0.1115, 0.0038, 0.2673, 0.1918, 0.0038, 0.0648, 0.2231, 0.0038, 0.2673, 0.1918, -0.1894, 0.0648, 0.1115, -0.1623, 0.2673, 0.0959, 0.0038, 0.0648, 0.2231, 0.1699, 0.2673, 0.0959, 0.197, 0.0648, 0.1115, 0.1699, 0.2673, 0.0959, 0.0038, 0.0648, 0.2231, 0.0038, 0.2673, 0.1918, 0.0038, 0.324, -0.1918, 0.0038, 0.2916, -0.1522, 0.0038, 0.2916, -0.1918, 0.0038, 0.2916, -0.1522, 0.0038, 0.324, -0.1918, 0.0038, 0.324, -0.1522, 0.2423, 0, 0.1377, 0.197, 0.0648, -0.1115, 0.2423, 0, -0.1377, 0.197, 0.0648, -0.1115, 0.2423, 0, 0.1377, 0.197, 0.0648, 0.1115, 0.197, 0.0648, 0.1115, 0.1699, 0.2673, -0.0959, 0.197, 0.0648, -0.1115, 0.1699, 0.2673, -0.0959, 0.197, 0.0648, 0.1115, 0.1699, 0.2673, 0.0959, -0.128, 0.2673, -0.0761, 0.0038, 0.2916, -0.1522, 0.0038, 0.2673, -0.1522, 0.0038, 0.2916, -0.1522, -0.128, 0.2673, -0.0761, -0.128, 0.2916, -0.0761, -0.2347, 0, 0.1377, 0.0038, 0.0648, 0.2231, 0.0038, 0, 0.2754, 0.0038, 0.0648, 0.2231, -0.2347, 0, 0.1377, -0.1894, 0.0648, 0.1115, 0.0038, 0.2835, 0.1918, 0.1356, 0.2835, 0.0761, 0.1699, 0.2835, 0.0959, 0.1356, 0.2835, 0.0761, 0.0038, 0.2835, 0.1918, 0.0038, 0.2835, 0.1522, 0.1699, 0.324, -0.0959, 0.1699, 0.3645, 0.0959, 0.1699, 0.3645, -0.0959, 0.1699, 0.3645, 0.0959, 0.1699, 0.324, -0.0959, 0.1699, 0.2673, -0.0959, 0.1699, 0.3645, 0.0959, 0.1699, 0.2673, -0.0959, 0.1699, 0.2673, 0.0959, 0.1699, 0.3645, 0.0959, 0.1699, 0.2673, 0.0959, 0.1699, 0.2835, 0.0959, 0.1699, 0.324, -0.0959, 0.1356, 0.3645, -0.0761, 0.1356, 0.324, -0.0761, 0.1356, 0.3645, -0.0761, 0.1699, 0.324, -0.0959, 0.1699, 0.3645, -0.0959, 0.1699, 0.3645, 0.0959, 0.1356, 0.3645, -0.0761, 0.1699, 0.3645, -0.0959, 0.1356, 0.3645, -0.0761, 0.1699, 0.3645, 0.0959, 0.1356, 0.3645, 0.0761, -0.1623, 0.2673, 0.0959, 0.0038, 0.2835, 0.1918, 0.0038, 0.2673, 0.1918, 0.0038, 0.2835, 0.1918, -0.1623, 0.2673, 0.0959, -0.1623, 0.3078, 0.0959, 0.0038, 0.2835, 0.1918, -0.1623, 0.3078, 0.0959, 0.0038, 0.3078, 0.1918, 0.2423, 0, -0.1377, 0.0038, 0.0648, -0.2231, 0.0038, 0, -0.2754, 0.0038, 0.0648, -0.2231, 0.2423, 0, -0.1377, 0.197, 0.0648, -0.1115, 0.0038, 0.2835, 0.1522, 0.0038, 0.3078, 0.1918, 0.0038, 0.3078, 0.1522, 0.0038, 0.3078, 0.1918, 0.0038, 0.2835, 0.1522, 0.0038, 0.2835, 0.1918, 0.0038, 0, -0.2754, -0.1894, 0.0648, -0.1115, -0.2347, 0, -0.1377, -0.1894, 0.0648, -0.1115, 0.0038, 0, -0.2754, 0.0038, 0.0648, -0.2231, 0.0038, 0.2673, -0.1522, 0.1356, 0.324, -0.0761, 0.1356, 0.2673, -0.0761, 0.1356, 0.324, -0.0761, 0.0038, 0.2673, -0.1522, 0.0038, 0.2916, -0.1522, 0.1356, 0.324, -0.0761, 0.0038, 0.2916, -0.1522, 0.0038, 0.324, -0.1522, -0.1623, 0.3078, 0.0959, -0.128, 0.3726, 0.0761, -0.128, 0.3078, 0.0761, -0.128, 0.3726, 0.0761, -0.1623, 0.3078, 0.0959, -0.1623, 0.3726, 0.0959, -0.1623, 0.2916, -0.0959, -0.1623, 0.2673, 0.0959, -0.1623, 0.2673, -0.0959, -0.1623, 0.2673, 0.0959, -0.1623, 0.2916, -0.0959, -0.1623, 0.3726, -0.0959, -0.1623, 0.2673, 0.0959, -0.1623, 0.3726, -0.0959, -0.1623, 0.3726, 0.0959, -0.1623, 0.2673, 0.0959, -0.1623, 0.3726, 0.0959, -0.1623, 0.3078, 0.0959, -0.0859, 0.2673, 0.0518, 0.0038, 0.2673, 0.1522, -0.128, 0.2673, 0.0761, -0.0859, 0.2673, 0.0518, -0.128, 0.2673, 0.0761, -0.128, 0.2673, -0.0761, 0.0038, 0.2673, 0.1036, 0.0038, 0.2673, 0.1522, -0.0859, 0.2673, 0.0518, -0.128, 0.2673, -0.0761, -0.0859, 0.2673, -0.0518, -0.0859, 0.2673, 0.0518, 0.0935, 0.2673, 0.0518, 0.0038, 0.2673, 0.1522, 0.0038, 0.2673, 0.1036, -0.128, 0.2673, -0.0761, 0.0038, 0.2673, -0.1036, -0.0859, 0.2673, -0.0518, 0.0935, 0.2673, 0.0518, 0.1356, 0.2673, 0.0761, 0.0038, 0.2673, 0.1522, 0.0038, 0.2673, -0.1522, 0.0038, 0.2673, -0.1036, -0.128, 0.2673, -0.0761, 0.1356, 0.2673, 0.0761, 0.0935, 0.2673, 0.0518, 0.0935, 0.2673, -0.0518, 0.0038, 0.2673, -0.1522, 0.0935, 0.2673, -0.0518, 0.0038, 0.2673, -0.1036, 0.0935, 0.2673, -0.0518, 0.1356, 0.2673, -0.0761, 0.1356, 0.2673, 0.0761, 0.1356, 0.2673, -0.0761, 0.0935, 0.2673, -0.0518, 0.0038, 0.2673, -0.1522, -0.251, 0.1539, 0.0245, -0.171, 0.2024, 0.0353, -0.1807, 0.1297, 0.0409, -0.171, 0.2024, 0.0353, -0.251, 0.1539, 0.0245, -0.2452, 0.1975, 0.0212, -0.2452, 0.1975, -0.0212, -0.251, 0.1539, 0.0245, -0.251, 0.1539, -0.0245, -0.251, 0.1539, 0.0245, -0.2452, 0.1975, -0.0212, -0.2452, 0.1975, 0.0212, -0.171, 0.2024, 0.0353, -0.2452, 0.1975, -0.0212, -0.171, 0.2024, -0.0353, -0.2452, 0.1975, -0.0212, -0.171, 0.2024, 0.0353, -0.2452, 0.1975, 0.0212, -0.1807, 0.1297, -0.0409, -0.251, 0.1539, 0.0245, -0.1807, 0.1297, 0.0409, -0.251, 0.1539, 0.0245, -0.1807, 0.1297, -0.0409, -0.251, 0.1539, -0.0245, -0.171, 0.2024, -0.0353, -0.251, 0.1539, -0.0245, -0.1807, 0.1297, -0.0409, -0.251, 0.1539, -0.0245, -0.171, 0.2024, -0.0353, -0.2452, 0.1975, -0.0212, -0.093, 0.1917, 0.2048, -0.1076, 0.1935, 0.1389, -0.0608, 0.1935, 0.1659, -0.1076, 0.1935, 0.1389, -0.093, 0.1917, 0.2048, -0.1257, 0.1917, 0.186, -0.0608, 0.1386, 0.1744, -0.093, 0.1917, 0.2048, -0.0608, 0.1935, 0.1659, -0.093, 0.1917, 0.2048, -0.0608, 0.1386, 0.1744, -0.093, 0.1532, 0.2108, -0.1309, 0.1532, 0.1889, -0.093, 0.1917, 0.2048, -0.093, 0.1532, 0.2108, -0.093, 0.1917, 0.2048, -0.1309, 0.1532, 0.1889, -0.1257, 0.1917, 0.186, -0.1149, 0.1386, 0.1432, -0.093, 0.1532, 0.2108, -0.0608, 0.1386, 0.1744, -0.093, 0.1532, 0.2108, -0.1149, 0.1386, 0.1432, -0.1309, 0.1532, 0.1889, -0.1257, 0.1917, 0.186, -0.1149, 0.1386, 0.1432, -0.1076, 0.1935, 0.1389, -0.1149, 0.1386, 0.1432, -0.1257, 0.1917, 0.186, -0.1309, 0.1532, 0.1889, 0.0935, 0.2673, 0.0518, 0.0038, 0.2673, -0.1036, 0.0935, 0.2673, -0.0518, 0.0038, 0.2673, -0.1036, 0.0935, 0.2673, 0.0518, 0.0038, 0.2673, 0.1036, 0.0038, 0.2673, -0.1036, 0.0038, 0.2673, 0.1036, -0.0859, 0.2673, -0.0518, -0.0859, 0.2673, -0.0518, 0.0038, 0.2673, 0.1036, -0.0859, 0.2673, 0.0518) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_mtivy"] +data = PackedVector3Array(0.0476, 0.0549, -0.0476, 0.069, 0.2135, -0.0476, 0.069, 0.0549, -0.0476, 0.069, 0.2135, -0.0476, 0.0476, 0.0549, -0.0476, 0.0476, 0.2135, -0.0476, 0.0476, 0.2135, -0.069, 0.0476, 0.0549, -0.0476, 0.0476, 0.0549, -0.069, 0.0476, 0.0549, -0.0476, 0.0476, 0.2135, -0.069, 0.0476, 0.2135, -0.0476, -0.069, 0.0549, -0.0476, -0.0476, 0.2135, -0.0476, -0.0476, 0.0549, -0.0476, -0.0476, 0.2135, -0.0476, -0.069, 0.0549, -0.0476, -0.069, 0.2135, -0.0476, -0.0112, 0.2623, -0.0115, -0.0215, 0.2871, -0.0115, -0.0215, 0.2623, -0.0115, -0.0215, 0.2871, -0.0115, -0.0112, 0.2623, -0.0115, 0.0215, 0.2623, -0.0115, -0.0215, 0.2871, -0.0115, 0.0215, 0.2623, -0.0115, 0.0215, 0.2871, -0.0115, -0.0215, 0.2871, -0.0115, 0.0215, 0.2871, -0.0115, -0.0164, 0.2923, -0.0115, -0.0164, 0.2923, -0.0115, 0.0215, 0.2871, -0.0115, 0.0164, 0.2923, -0.0115, 0.0215, 0.2623, -0.0115, 0.0215, 0.2871, 0.0115, 0.0215, 0.2871, -0.0115, 0.0215, 0.2871, 0.0115, 0.0215, 0.2623, -0.0115, 0.0215, 0.2623, 0.0115, 0.073, 0, -0.073, -0.073, 0, 0.073, 0.073, 0, 0.073, -0.073, 0, 0.073, 0.073, 0, -0.073, -0.073, 0, -0.073, 0.069, 0.244, 0.069, 0.069, 0.0549, 0.0476, 0.069, 0.0549, 0.069, 0.069, 0.244, 0.069, 0.069, 0.2135, 0.0476, 0.069, 0.0549, 0.0476, 0.069, 0.244, 0.069, 0.069, 0.2135, -0.0476, 0.069, 0.2135, 0.0476, 0.069, 0.244, -0.069, 0.069, 0.2135, -0.0476, 0.069, 0.244, 0.069, 0.069, 0.2135, -0.0476, 0.069, 0.244, -0.069, 0.069, 0.0549, -0.069, 0.069, 0.0549, -0.069, 0.069, 0.0549, -0.0476, 0.069, 0.2135, -0.0476, -0.0476, 0.0549, -0.069, -0.069, 0.244, -0.069, -0.069, 0.0549, -0.069, -0.069, 0.244, -0.069, -0.0476, 0.0549, -0.069, -0.0476, 0.2135, -0.069, -0.069, 0.244, -0.069, -0.0476, 0.2135, -0.069, 0.0476, 0.2135, -0.069, 0.0476, 0.2135, -0.069, 0.069, 0.244, -0.069, -0.069, 0.244, -0.069, 0.0476, 0.2135, -0.069, 0.069, 0.0549, -0.069, 0.069, 0.244, -0.069, 0.069, 0.0549, -0.069, 0.0476, 0.2135, -0.069, 0.0476, 0.0549, -0.069, -0.073, 0.0366, 0.073, 0.069, 0.0549, 0.069, 0.073, 0.0366, 0.073, 0.069, 0.0549, 0.069, -0.073, 0.0366, 0.073, -0.069, 0.0549, 0.069, 0.069, 0.0549, 0.069, -0.069, 0.0549, 0.069, 0.0476, 0.0549, 0.069, 0.0476, 0.0549, 0.069, -0.069, 0.0549, 0.069, -0.0476, 0.0549, 0.069, -0.073, 0.0366, -0.073, -0.073, 0, 0.073, -0.073, 0, -0.073, -0.073, 0, 0.073, -0.073, 0.0366, -0.073, -0.073, 0.0366, 0.073, 0.073, 0.0366, 0.073, 0.069, 0.0549, -0.069, 0.073, 0.0366, -0.073, 0.069, 0.0549, -0.069, 0.073, 0.0366, 0.073, 0.069, 0.0549, -0.0476, 0.069, 0.0549, -0.0476, 0.073, 0.0366, 0.073, 0.069, 0.0549, 0.0476, 0.069, 0.0549, 0.0476, 0.073, 0.0366, 0.073, 0.069, 0.0549, 0.069, -0.069, 0.2135, 0.0476, -0.0476, 0.2135, -0.0476, -0.069, 0.2135, -0.0476, -0.0476, 0.2135, -0.0476, -0.069, 0.2135, 0.0476, -0.0476, 0.2135, 0.0476, -0.0476, 0.2135, 0.0476, -0.0476, 0.2135, -0.069, -0.0476, 0.2135, -0.0476, -0.0476, 0.2135, 0.069, -0.0476, 0.2135, -0.069, -0.0476, 0.2135, 0.0476, -0.0476, 0.2135, 0.069, 0.0476, 0.2135, -0.069, -0.0476, 0.2135, -0.069, -0.0476, 0.2135, 0.069, 0.0476, 0.2135, -0.0476, 0.0476, 0.2135, -0.069, -0.0476, 0.2135, 0.069, 0.0476, 0.2135, 0.0476, 0.0476, 0.2135, -0.0476, 0.0476, 0.2135, 0.0476, -0.0476, 0.2135, 0.069, 0.0476, 0.2135, 0.069, 0.0476, 0.2135, 0.0476, 0.069, 0.2135, -0.0476, 0.0476, 0.2135, -0.0476, 0.069, 0.2135, -0.0476, 0.0476, 0.2135, 0.0476, 0.069, 0.2135, 0.0476, 0.0476, 0.2135, 0.0476, 0.0476, 0.0549, 0.069, 0.0476, 0.0549, 0.0476, 0.0476, 0.0549, 0.069, 0.0476, 0.2135, 0.0476, 0.0476, 0.2135, 0.069, 0.073, 0.0366, -0.073, -0.069, 0.0549, -0.069, -0.073, 0.0366, -0.073, -0.069, 0.0549, -0.069, 0.073, 0.0366, -0.073, 0.069, 0.0549, -0.069, -0.069, 0.0549, -0.069, 0.069, 0.0549, -0.069, -0.0476, 0.0549, -0.069, -0.0476, 0.0549, -0.069, 0.069, 0.0549, -0.069, 0.0476, 0.0549, -0.069, -0.0529, 0.244, 0.0529, 0.0476, 0.2623, 0.0476, 0.0529, 0.244, 0.0529, 0.0476, 0.2623, 0.0476, -0.0529, 0.244, 0.0529, -0.0476, 0.2623, 0.0476, 0.0164, 0.2923, 0.0115, -0.0164, 0.2923, -0.0115, 0.0164, 0.2923, -0.0115, -0.0164, 0.2923, -0.0115, 0.0164, 0.2923, 0.0115, -0.0164, 0.2923, 0.0115, -0.0476, 0.0549, 0.0476, -0.0476, 0.2135, 0.069, -0.0476, 0.2135, 0.0476, -0.0476, 0.2135, 0.069, -0.0476, 0.0549, 0.0476, -0.0476, 0.0549, 0.069, -0.073, 0, 0.073, 0.073, 0.0366, 0.073, 0.073, 0, 0.073, 0.073, 0.0366, 0.073, -0.073, 0, 0.073, -0.073, 0.0366, 0.073, -0.0215, 0.2871, -0.0115, -0.0215, 0.2623, 0.0115, -0.0215, 0.2623, -0.0115, -0.0215, 0.2623, 0.0115, -0.0215, 0.2871, -0.0115, -0.0215, 0.2871, 0.0115, -0.0476, 0.0549, 0.0476, -0.069, 0.2135, 0.0476, -0.069, 0.0549, 0.0476, -0.069, 0.2135, 0.0476, -0.0476, 0.0549, 0.0476, -0.0476, 0.2135, 0.0476, -0.0476, 0.2623, -0.0476, -0.0529, 0.244, 0.0529, -0.0529, 0.244, -0.0529, -0.0529, 0.244, 0.0529, -0.0476, 0.2623, -0.0476, -0.0476, 0.2623, 0.0476, -0.0112, 0.2623, 0.0115, 0.0215, 0.2871, 0.0115, 0.0215, 0.2623, 0.0115, 0.0215, 0.2871, 0.0115, -0.0112, 0.2623, 0.0115, -0.0215, 0.2623, 0.0115, 0.0215, 0.2871, 0.0115, -0.0215, 0.2623, 0.0115, -0.0215, 0.2871, 0.0115, 0.0215, 0.2871, 0.0115, -0.0215, 0.2871, 0.0115, 0.0164, 0.2923, 0.0115, 0.0164, 0.2923, 0.0115, -0.0215, 0.2871, 0.0115, -0.0164, 0.2923, 0.0115, -0.069, 0.2135, 0.0476, -0.069, 0.0549, 0.069, -0.069, 0.0549, 0.0476, -0.069, 0.2135, 0.0476, -0.069, 0.244, 0.069, -0.069, 0.0549, 0.069, -0.069, 0.2135, -0.0476, -0.069, 0.244, 0.069, -0.069, 0.2135, 0.0476, -0.069, 0.2135, -0.0476, -0.069, 0.244, -0.069, -0.069, 0.244, 0.069, -0.069, 0.0549, -0.0476, -0.069, 0.244, -0.069, -0.069, 0.2135, -0.0476, -0.069, 0.244, -0.069, -0.069, 0.0549, -0.0476, -0.069, 0.0549, -0.069, -0.0164, 0.2923, 0.0115, -0.0215, 0.2871, -0.0115, -0.0164, 0.2923, -0.0115, -0.0215, 0.2871, -0.0115, -0.0164, 0.2923, 0.0115, -0.0215, 0.2871, 0.0115, 0.069, 0.0549, 0.0476, 0.0476, 0.2135, 0.0476, 0.0476, 0.0549, 0.0476, 0.0476, 0.2135, 0.0476, 0.069, 0.0549, 0.0476, 0.069, 0.2135, 0.0476, 0.0476, 0.0549, 0.069, 0.069, 0.244, 0.069, 0.069, 0.0549, 0.069, 0.069, 0.244, 0.069, 0.0476, 0.0549, 0.069, 0.0476, 0.2135, 0.069, 0.069, 0.244, 0.069, 0.0476, 0.2135, 0.069, -0.0476, 0.2135, 0.069, -0.0476, 0.2135, 0.069, -0.069, 0.244, 0.069, 0.069, 0.244, 0.069, -0.0476, 0.2135, 0.069, -0.069, 0.0549, 0.069, -0.069, 0.244, 0.069, -0.069, 0.0549, 0.069, -0.0476, 0.2135, 0.069, -0.0476, 0.0549, 0.069, 0.073, 0, -0.073, 0.073, 0.0366, 0.073, 0.073, 0.0366, -0.073, 0.073, 0.0366, 0.073, 0.073, 0, -0.073, 0.073, 0, 0.073, 0.0215, 0.2871, 0.0115, 0.0164, 0.2923, -0.0115, 0.0215, 0.2871, -0.0115, 0.0164, 0.2923, -0.0115, 0.0215, 0.2871, 0.0115, 0.0164, 0.2923, 0.0115, -0.069, 0.0549, -0.069, -0.073, 0.0366, 0.073, -0.073, 0.0366, -0.073, -0.073, 0.0366, 0.073, -0.069, 0.0549, -0.069, -0.069, 0.0549, -0.0476, -0.073, 0.0366, 0.073, -0.069, 0.0549, -0.0476, -0.069, 0.0549, 0.0476, -0.073, 0.0366, 0.073, -0.069, 0.0549, 0.0476, -0.069, 0.0549, 0.069, 0.0529, 0.244, -0.0529, -0.0476, 0.2623, -0.0476, -0.0529, 0.244, -0.0529, -0.0476, 0.2623, -0.0476, 0.0529, 0.244, -0.0529, 0.0476, 0.2623, -0.0476, 0.0529, 0.244, 0.0529, 0.0476, 0.2623, -0.0476, 0.0529, 0.244, -0.0529, 0.0476, 0.2623, -0.0476, 0.0529, 0.244, 0.0529, 0.0476, 0.2623, 0.0476, 0.073, 0, -0.073, -0.073, 0.0366, -0.073, -0.073, 0, -0.073, -0.073, 0.0366, -0.073, 0.073, 0, -0.073, 0.073, 0.0366, -0.073, -0.0476, 0.0549, -0.069, -0.0476, 0.2135, -0.0476, -0.0476, 0.2135, -0.069, -0.0476, 0.2135, -0.0476, -0.0476, 0.0549, -0.069, -0.0476, 0.0549, -0.0476, -0.069, 0.0549, -0.0476, -0.0476, 0.0549, 0.0476, -0.069, 0.0549, 0.0476, -0.0476, 0.0549, 0.0476, -0.069, 0.0549, -0.0476, -0.0476, 0.0549, -0.0476, -0.0476, 0.0549, -0.0476, -0.0476, 0.0549, 0.069, -0.0476, 0.0549, 0.0476, -0.0476, 0.0549, -0.069, -0.0476, 0.0549, 0.069, -0.0476, 0.0549, -0.0476, -0.0476, 0.0549, -0.069, 0.0476, 0.0549, 0.069, -0.0476, 0.0549, 0.069, -0.0476, 0.0549, -0.069, 0.0476, 0.0549, 0.0476, 0.0476, 0.0549, 0.069, -0.0476, 0.0549, -0.069, 0.0476, 0.0549, -0.0476, 0.0476, 0.0549, 0.0476, 0.0476, 0.0549, -0.0476, -0.0476, 0.0549, -0.069, 0.0476, 0.0549, -0.069, 0.0476, 0.0549, -0.0476, 0.069, 0.0549, 0.0476, 0.0476, 0.0549, 0.0476, 0.069, 0.0549, 0.0476, 0.0476, 0.0549, -0.0476, 0.069, 0.0549, -0.0476, -0.069, 0.244, -0.069, 0.0529, 0.244, -0.0529, -0.0529, 0.244, -0.0529, -0.069, 0.244, -0.069, -0.0529, 0.244, -0.0529, -0.0529, 0.244, 0.0529, 0.069, 0.244, -0.069, 0.0529, 0.244, -0.0529, -0.069, 0.244, -0.069, -0.0529, 0.244, 0.0529, -0.069, 0.244, 0.069, -0.069, 0.244, -0.069, 0.0529, 0.244, -0.0529, 0.069, 0.244, -0.069, 0.069, 0.244, 0.069, 0.0529, 0.244, 0.0529, -0.069, 0.244, 0.069, -0.0529, 0.244, 0.0529, 0.0529, 0.244, 0.0529, 0.069, 0.244, 0.069, -0.069, 0.244, 0.069, 0.069, 0.244, 0.069, 0.0529, 0.244, 0.0529, 0.0529, 0.244, -0.0529, -0.0476, 0.2623, -0.0476, -0.0112, 0.2623, -0.0115, -0.0215, 0.2623, -0.0115, -0.0476, 0.2623, -0.0476, -0.0215, 0.2623, -0.0115, -0.0215, 0.2623, 0.0115, -0.0476, 0.2623, -0.0476, 0.0215, 0.2623, -0.0115, -0.0112, 0.2623, -0.0115, 0.0476, 0.2623, -0.0476, 0.0215, 0.2623, -0.0115, -0.0476, 0.2623, -0.0476, 0.0215, 0.2623, -0.0115, 0.0476, 0.2623, -0.0476, 0.0476, 0.2623, 0.0476, 0.0476, 0.2623, 0.0476, 0.0215, 0.2623, 0.0115, 0.0215, 0.2623, -0.0115, -0.0215, 0.2623, 0.0115, -0.0476, 0.2623, 0.0476, -0.0476, 0.2623, -0.0476, 0.0215, 0.2623, 0.0115, 0.0476, 0.2623, 0.0476, -0.0476, 0.2623, 0.0476, -0.0112, 0.2623, 0.0115, -0.0476, 0.2623, 0.0476, -0.0215, 0.2623, 0.0115, 0.0215, 0.2623, 0.0115, -0.0476, 0.2623, 0.0476, -0.0112, 0.2623, 0.0115, 0.015, 0.1249, 0.026, 0.015, 0.1249, -0.026, 0.03, 0.1249, 0, 0.015, 0.1249, -0.026, 0.015, 0.1249, 0.026, -0.015, 0.1249, -0.026, -0.015, 0.1249, -0.026, 0.015, 0.1249, 0.026, -0.015, 0.1249, 0.026, -0.015, 0.1249, -0.026, -0.015, 0.1249, 0.026, -0.03, 0.1249, 0, -0.015, 0.1249, -0.026, -0.03, 0.0549, 0, -0.015, 0.0549, -0.026, -0.03, 0.0549, 0, -0.015, 0.1249, -0.026, -0.03, 0.1249, 0, 0.03, 0.0549, 0, 0.015, 0.1249, 0.026, 0.03, 0.1249, 0, 0.015, 0.1249, 0.026, 0.03, 0.0549, 0, 0.015, 0.0549, 0.026, 0.015, 0.0549, -0.026, 0.03, 0.1249, 0, 0.015, 0.1249, -0.026, 0.03, 0.1249, 0, 0.015, 0.0549, -0.026, 0.03, 0.0549, 0, -0.03, 0.1249, 0, -0.015, 0.0549, 0.026, -0.03, 0.0549, 0, -0.015, 0.0549, 0.026, -0.03, 0.1249, 0, -0.015, 0.1249, 0.026, 0.015, 0.0549, -0.026, -0.015, 0.1249, -0.026, -0.015, 0.0549, -0.026, -0.015, 0.1249, -0.026, 0.015, 0.0549, -0.026, 0.015, 0.1249, -0.026, -0.015, 0.0549, 0.026, 0.015, 0.1249, 0.026, 0.015, 0.0549, 0.026, 0.015, 0.1249, 0.026, -0.015, 0.0549, 0.026, -0.015, 0.1249, 0.026, 0.015, 0.0549, -0.026, 0.015, 0.0549, 0.026, 0.03, 0.0549, 0, 0.015, 0.0549, 0.026, 0.015, 0.0549, -0.026, -0.015, 0.0549, 0.026, -0.015, 0.0549, 0.026, 0.015, 0.0549, -0.026, -0.015, 0.0549, -0.026, -0.015, 0.0549, 0.026, -0.015, 0.0549, -0.026, -0.03, 0.0549, 0) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_wc2g1"] +data = PackedVector3Array(-0.114, 0.0381, 0.3671, -0.1161, 0.0288, 0.3823, -0.1195, 0.0381, 0.3766, -0.114, 0.0381, 0.3671, -0.1195, 0.0381, 0.3766, -0.1161, 0.0288, 0.3823, -0.0966, 0.0952, -0.2847, -0.1433, 0, 0.2617, -0.1433, 0, -0.3796, -0.1433, 0, 0.2617, -0.0966, 0.0952, -0.2847, -0.0966, 0.0952, 0.2847, -0.1433, 0, 0.2617, -0.0966, 0.0952, 0.2847, -0.1246, 0.0381, 0.2852, -0.1246, 0.0381, 0.2852, -0.0966, 0.0952, 0.2847, -0.1246, 0.0381, 0.3416, -0.1114, 0, 0.5208, -0.1419, 0.0217, 0.5468, -0.1269, 0.0217, 0.5208, -0.1419, 0.0217, 0.5468, -0.1114, 0, 0.5208, -0.1342, 0, 0.5602, -0.1114, 0, 0.5208, -0.1269, 0.0217, 0.5208, -0.1419, 0.0217, 0.5468, -0.1419, 0.0217, 0.5468, -0.1342, 0, 0.5602, -0.1114, 0, 0.5208, -0.1797, 0, 0.5602, -0.1419, 0.0217, 0.5468, -0.1342, 0, 0.5602, -0.1419, 0.0217, 0.5468, -0.1797, 0, 0.5602, -0.172, 0.0217, 0.5468, -0.1797, 0, 0.5602, -0.1342, 0, 0.5602, -0.1419, 0.0217, 0.5468, -0.1419, 0.0217, 0.5468, -0.172, 0.0217, 0.5468, -0.1797, 0, 0.5602, -0.0556, 0.0952, -0.3835, -0.1433, 0, -0.3796, -0.0886, 0, -0.5114, -0.1433, 0, -0.3796, -0.0556, 0.0952, -0.3835, -0.0966, 0.0952, -0.2847, -0.2259, 0.0217, 0.2013, -0.2259, 0.0217, 0.1493, -0.2109, 0.0217, 0.1753, -0.2259, 0.0217, 0.1493, -0.2259, 0.0217, 0.2013, -0.256, 0.0217, 0.1493, -0.256, 0.0217, 0.1493, -0.2259, 0.0217, 0.2013, -0.256, 0.0217, 0.2013, -0.256, 0.0217, 0.1493, -0.256, 0.0217, 0.2013, -0.2711, 0.0217, 0.1753, -0.2259, 0.0217, 0.2013, -0.2109, 0.0217, 0.1753, -0.2259, 0.0217, 0.1493, -0.2259, 0.0217, 0.1493, -0.256, 0.0217, 0.1493, -0.2259, 0.0217, 0.2013, -0.256, 0.0217, 0.1493, -0.256, 0.0217, 0.2013, -0.2259, 0.0217, 0.2013, -0.256, 0.0217, 0.1493, -0.2711, 0.0217, 0.1753, -0.256, 0.0217, 0.2013, -0.1987, 0.0381, 0.3309, -0.1859, 0, 0.4001, -0.2259, 0, 0.3309, -0.1859, 0, 0.4001, -0.1987, 0.0381, 0.3309, -0.1723, 0.0381, 0.3766, -0.1987, 0.0381, 0.3309, -0.2259, 0, 0.3309, -0.1859, 0, 0.4001, -0.1859, 0, 0.4001, -0.1723, 0.0381, 0.3766, -0.1987, 0.0381, 0.3309, -0.187, 0.0217, 0.5208, -0.1797, 0, 0.5602, -0.2025, 0, 0.5208, -0.1797, 0, 0.5602, -0.187, 0.0217, 0.5208, -0.172, 0.0217, 0.5468, -0.187, 0.0217, 0.5208, -0.2025, 0, 0.5208, -0.1797, 0, 0.5602, -0.1797, 0, 0.5602, -0.172, 0.0217, 0.5468, -0.187, 0.0217, 0.5208, 0.23, 0, -0.2927, 0.222, 0.0381, -0.3162, 0.2356, 0, -0.2927, 0.222, 0.0381, -0.3162, 0.23, 0, -0.2927, 0.2113, 0.0381, -0.3162, 0.23, 0, -0.2927, 0.2356, 0, -0.2927, 0.222, 0.0381, -0.3162, 0.222, 0.0381, -0.3162, 0.2113, 0.0381, -0.3162, 0.23, 0, -0.2927, -0.1342, 0, 0.4814, -0.1342, 0, 0.5602, -0.1114, 0, 0.5208, -0.1342, 0, 0.5602, -0.1342, 0, 0.4814, -0.1797, 0, 0.5602, -0.1797, 0, 0.5602, -0.1342, 0, 0.4814, -0.1797, 0, 0.4814, -0.1797, 0, 0.5602, -0.1797, 0, 0.4814, -0.2025, 0, 0.5208, -0.1342, 0, 0.4814, -0.1114, 0, 0.5208, -0.1342, 0, 0.5602, -0.1342, 0, 0.5602, -0.1797, 0, 0.5602, -0.1342, 0, 0.4814, -0.1797, 0, 0.5602, -0.1797, 0, 0.4814, -0.1342, 0, 0.4814, -0.1797, 0, 0.5602, -0.2025, 0, 0.5208, -0.1797, 0, 0.4814, 0.2086, 0, -0.4311, 0.1423, 0.0952, -0.3835, 0.1753, 0, -0.5114, 0.1423, 0.0952, -0.3835, 0.2086, 0, -0.4311, 0.184, 0.0381, -0.4076, 0.1423, 0.0952, -0.3835, 0.184, 0.0381, -0.4076, 0.2113, 0.0381, -0.3416, 0.1423, 0.0952, -0.3835, 0.2113, 0.0381, -0.3416, 0.1833, 0.0952, -0.2847, 0.2756, 0, -0.3619, 0.222, 0.0381, -0.4076, 0.2356, 0, -0.4311, 0.222, 0.0381, -0.4076, 0.2756, 0, -0.3619, 0.2484, 0.0381, -0.3619, 0.2756, 0, -0.3619, 0.2356, 0, -0.4311, 0.222, 0.0381, -0.4076, 0.222, 0.0381, -0.4076, 0.2484, 0.0381, -0.3619, 0.2756, 0, -0.3619, 0.2356, 0, -0.4311, 0.184, 0.0381, -0.4076, 0.2086, 0, -0.4311, 0.184, 0.0381, -0.4076, 0.2356, 0, -0.4311, 0.222, 0.0381, -0.4076, 0.2356, 0, -0.4311, 0.2086, 0, -0.4311, 0.184, 0.0381, -0.4076, 0.184, 0.0381, -0.4076, 0.222, 0.0381, -0.4076, 0.2356, 0, -0.4311, -0.2182, 0, 0.1359, -0.2182, 0, 0.2148, -0.1954, 0, 0.1753, -0.2182, 0, 0.2148, -0.2182, 0, 0.1359, -0.2638, 0, 0.2148, -0.2638, 0, 0.2148, -0.2182, 0, 0.1359, -0.2638, 0, 0.1359, -0.2638, 0, 0.2148, -0.2638, 0, 0.1359, -0.2866, 0, 0.1753, -0.2182, 0, 0.1359, -0.1954, 0, 0.1753, -0.2182, 0, 0.2148, -0.2182, 0, 0.2148, -0.2638, 0, 0.2148, -0.2182, 0, 0.1359, -0.2638, 0, 0.2148, -0.2638, 0, 0.1359, -0.2182, 0, 0.1359, -0.2638, 0, 0.2148, -0.2866, 0, 0.1753, -0.2638, 0, 0.1359, 0.222, 0.0381, -0.3162, 0.222, 0.0381, -0.4076, 0.2484, 0.0381, -0.3619, 0.222, 0.0381, -0.4076, 0.222, 0.0381, -0.3162, 0.184, 0.0381, -0.4076, 0.184, 0.0381, -0.4076, 0.222, 0.0381, -0.3162, 0.2113, 0.0381, -0.3416, 0.222, 0.0381, -0.3162, 0.2113, 0.0381, -0.3162, 0.2113, 0.0381, -0.3416, 0.222, 0.0381, -0.3162, 0.2484, 0.0381, -0.3619, 0.222, 0.0381, -0.4076, 0.222, 0.0381, -0.4076, 0.184, 0.0381, -0.4076, 0.222, 0.0381, -0.3162, 0.184, 0.0381, -0.4076, 0.2113, 0.0381, -0.3416, 0.222, 0.0381, -0.3162, 0.222, 0.0381, -0.3162, 0.2113, 0.0381, -0.3416, 0.2113, 0.0381, -0.3162, -0.172, 0.0217, 0.4948, -0.2025, 0, 0.5208, -0.1797, 0, 0.4814, -0.2025, 0, 0.5208, -0.172, 0.0217, 0.4948, -0.187, 0.0217, 0.5208, -0.172, 0.0217, 0.4948, -0.1797, 0, 0.4814, -0.2025, 0, 0.5208, -0.2025, 0, 0.5208, -0.187, 0.0217, 0.5208, -0.172, 0.0217, 0.4948, -0.1114, 0, 0.5208, -0.1419, 0.0217, 0.4948, -0.1342, 0, 0.4814, -0.1419, 0.0217, 0.4948, -0.1114, 0, 0.5208, -0.1269, 0.0217, 0.5208, -0.1114, 0, 0.5208, -0.1342, 0, 0.4814, -0.1419, 0.0217, 0.4948, -0.1419, 0.0217, 0.4948, -0.1269, 0.0217, 0.5208, -0.1114, 0, 0.5208, 0.2756, 0, -0.3619, 0.222, 0.0381, -0.3162, 0.2484, 0.0381, -0.3619, 0.222, 0.0381, -0.3162, 0.2756, 0, -0.3619, 0.2356, 0, -0.2927, 0.2756, 0, -0.3619, 0.2484, 0.0381, -0.3619, 0.222, 0.0381, -0.3162, 0.222, 0.0381, -0.3162, 0.2356, 0, -0.2927, 0.2756, 0, -0.3619, 0.2113, 0.0381, -0.3162, 0.1833, 0.0952, -0.2847, 0.2113, 0.0381, -0.3416, 0.1833, 0.0952, -0.2847, 0.2113, 0.0381, -0.3162, 0.23, 0, -0.2927, 0.1833, 0.0952, -0.2847, 0.23, 0, -0.2927, 0.23, 0, 0.3796, 0.1833, 0.0952, -0.2847, 0.23, 0, 0.3796, 0.1833, 0.0952, 0.2847, -0.1342, 0, 0.4814, -0.172, 0.0217, 0.4948, -0.1797, 0, 0.4814, -0.172, 0.0217, 0.4948, -0.1342, 0, 0.4814, -0.1419, 0.0217, 0.4948, -0.1342, 0, 0.4814, -0.1797, 0, 0.4814, -0.172, 0.0217, 0.4948, -0.172, 0.0217, 0.4948, -0.1419, 0.0217, 0.4948, -0.1342, 0, 0.4814, -0.1419, 0.0217, 0.5468, -0.1419, 0.0217, 0.4948, -0.1269, 0.0217, 0.5208, -0.1419, 0.0217, 0.4948, -0.1419, 0.0217, 0.5468, -0.172, 0.0217, 0.4948, -0.172, 0.0217, 0.4948, -0.1419, 0.0217, 0.5468, -0.172, 0.0217, 0.5468, -0.172, 0.0217, 0.4948, -0.172, 0.0217, 0.5468, -0.187, 0.0217, 0.5208, -0.1419, 0.0217, 0.5468, -0.1269, 0.0217, 0.5208, -0.1419, 0.0217, 0.4948, -0.1419, 0.0217, 0.4948, -0.172, 0.0217, 0.4948, -0.1419, 0.0217, 0.5468, -0.172, 0.0217, 0.4948, -0.172, 0.0217, 0.5468, -0.1419, 0.0217, 0.5468, -0.172, 0.0217, 0.4948, -0.187, 0.0217, 0.5208, -0.172, 0.0217, 0.5468, -0.0556, 0.0952, 0.3835, -0.1246, 0.0381, 0.3416, -0.0966, 0.0952, 0.2847, -0.1246, 0.0381, 0.3416, -0.0556, 0.0952, 0.3835, -0.114, 0.0381, 0.3671, -0.114, 0.0381, 0.3671, -0.0556, 0.0952, 0.3835, -0.1161, 0.0288, 0.3823, -0.1161, 0.0288, 0.3823, -0.0556, 0.0952, 0.3835, -0.1348, 0, 0.4001, -0.1348, 0, 0.4001, -0.0556, 0.0952, 0.3835, -0.0886, 0, 0.5114, 0.1423, 0.0952, -0.3835, 0.0434, 0, -0.566, 0.1753, 0, -0.5114, 0.0434, 0, -0.566, 0.1423, 0.0952, -0.3835, 0.0434, 0.0952, -0.4245, 0.0434, 0.0952, -0.4245, -0.0886, 0, -0.5114, 0.0434, 0, -0.566, -0.0886, 0, -0.5114, 0.0434, 0.0952, -0.4245, -0.0556, 0.0952, -0.3835, 0.2638, 0, -0.5409, 0.2259, 0.0217, -0.5275, 0.2182, 0, -0.5409, 0.2259, 0.0217, -0.5275, 0.2638, 0, -0.5409, 0.256, 0.0217, -0.5275, 0.2638, 0, -0.5409, 0.2182, 0, -0.5409, 0.2259, 0.0217, -0.5275, 0.2259, 0.0217, -0.5275, 0.256, 0.0217, -0.5275, 0.2638, 0, -0.5409, 0.2638, 0, -0.5409, 0.2638, 0, -0.462, 0.2866, 0, -0.5014, 0.2638, 0, -0.462, 0.2638, 0, -0.5409, 0.2182, 0, -0.462, 0.2182, 0, -0.462, 0.2638, 0, -0.5409, 0.2182, 0, -0.5409, 0.2182, 0, -0.462, 0.2182, 0, -0.5409, 0.1954, 0, -0.5014, 0.2638, 0, -0.5409, 0.2866, 0, -0.5014, 0.2638, 0, -0.462, 0.2638, 0, -0.462, 0.2182, 0, -0.462, 0.2638, 0, -0.5409, 0.2182, 0, -0.462, 0.2182, 0, -0.5409, 0.2638, 0, -0.5409, 0.2182, 0, -0.462, 0.1954, 0, -0.5014, 0.2182, 0, -0.5409, 0.2109, 0.0217, -0.5014, 0.2182, 0, -0.462, 0.1954, 0, -0.5014, 0.2182, 0, -0.462, 0.2109, 0.0217, -0.5014, 0.2259, 0.0217, -0.4754, 0.2109, 0.0217, -0.5014, 0.1954, 0, -0.5014, 0.2182, 0, -0.462, 0.2182, 0, -0.462, 0.2259, 0.0217, -0.4754, 0.2109, 0.0217, -0.5014, 0.2866, 0, -0.5014, 0.256, 0.0217, -0.5275, 0.2638, 0, -0.5409, 0.256, 0.0217, -0.5275, 0.2866, 0, -0.5014, 0.2711, 0.0217, -0.5014, 0.2866, 0, -0.5014, 0.2638, 0, -0.5409, 0.256, 0.0217, -0.5275, 0.256, 0.0217, -0.5275, 0.2711, 0.0217, -0.5014, 0.2866, 0, -0.5014, -0.1859, 0, 0.4001, -0.1859, 0, 0.2617, -0.2259, 0, 0.3309, -0.1859, 0, 0.4001, -0.1433, 0, 0.2617, -0.1859, 0, 0.2617, -0.1433, 0, 0.2617, -0.1859, 0, 0.4001, -0.1348, 0, 0.4001, -0.1348, 0, 0.4001, -0.1433, 0, -0.3796, -0.1433, 0, 0.2617, -0.1348, 0, 0.4001, -0.0886, 0, -0.5114, -0.1433, 0, -0.3796, -0.0886, 0, 0.5114, -0.0886, 0, -0.5114, -0.1348, 0, 0.4001, -0.0886, 0, 0.5114, 0.0434, 0, -0.566, -0.0886, 0, -0.5114, 0.0434, 0, 0.566, 0.0434, 0, -0.566, -0.0886, 0, 0.5114, 0.0434, 0, 0.566, 0.1753, 0, -0.5114, 0.0434, 0, -0.566, 0.1753, 0, 0.5114, 0.1753, 0, -0.5114, 0.0434, 0, 0.566, 0.1753, 0, 0.5114, 0.2086, 0, -0.4311, 0.1753, 0, -0.5114, 0.1753, 0, 0.5114, 0.23, 0, -0.2927, 0.2086, 0, -0.4311, 0.23, 0, -0.2927, 0.1753, 0, 0.5114, 0.23, 0, 0.3796, 0.23, 0, -0.2927, 0.2356, 0, -0.4311, 0.2086, 0, -0.4311, 0.2356, 0, -0.2927, 0.2356, 0, -0.4311, 0.23, 0, -0.2927, 0.2356, 0, -0.4311, 0.2356, 0, -0.2927, 0.2756, 0, -0.3619, 0.0434, 0, 0.566, -0.0556, 0.0952, 0.3835, 0.0434, 0.0952, 0.4245, -0.0556, 0.0952, 0.3835, 0.0434, 0, 0.566, -0.0886, 0, 0.5114, -0.1723, 0.0381, 0.2852, -0.2259, 0, 0.3309, -0.1859, 0, 0.2617, -0.2259, 0, 0.3309, -0.1723, 0.0381, 0.2852, -0.1987, 0.0381, 0.3309, -0.1723, 0.0381, 0.2852, -0.1859, 0, 0.2617, -0.2259, 0, 0.3309, -0.2259, 0, 0.3309, -0.1987, 0.0381, 0.3309, -0.1723, 0.0381, 0.2852, -0.1954, 0, 0.1753, -0.2259, 0.0217, 0.2013, -0.2109, 0.0217, 0.1753, -0.2259, 0.0217, 0.2013, -0.1954, 0, 0.1753, -0.2182, 0, 0.2148, -0.1954, 0, 0.1753, -0.2109, 0.0217, 0.1753, -0.2259, 0.0217, 0.2013, -0.2259, 0.0217, 0.2013, -0.2182, 0, 0.2148, -0.1954, 0, 0.1753, -0.256, 0.0217, 0.1493, -0.2866, 0, 0.1753, -0.2638, 0, 0.1359, -0.2866, 0, 0.1753, -0.256, 0.0217, 0.1493, -0.2711, 0.0217, 0.1753, -0.256, 0.0217, 0.1493, -0.2638, 0, 0.1359, -0.2866, 0, 0.1753, -0.2866, 0, 0.1753, -0.2711, 0.0217, 0.1753, -0.256, 0.0217, 0.1493, -0.1859, 0, 0.4001, -0.1161, 0.0288, 0.3823, -0.1348, 0, 0.4001, -0.1161, 0.0288, 0.3823, -0.1859, 0, 0.4001, -0.1723, 0.0381, 0.3766, -0.1161, 0.0288, 0.3823, -0.1723, 0.0381, 0.3766, -0.1195, 0.0381, 0.3766, -0.1859, 0, 0.4001, -0.1348, 0, 0.4001, -0.1161, 0.0288, 0.3823, -0.1161, 0.0288, 0.3823, -0.1723, 0.0381, 0.3766, -0.1859, 0, 0.4001, -0.1161, 0.0288, 0.3823, -0.1195, 0.0381, 0.3766, -0.1723, 0.0381, 0.3766, -0.1246, 0.0381, 0.3416, -0.1723, 0.0381, 0.2852, -0.1246, 0.0381, 0.2852, -0.1246, 0.0381, 0.3416, -0.1723, 0.0381, 0.3766, -0.1723, 0.0381, 0.2852, -0.1723, 0.0381, 0.2852, -0.1723, 0.0381, 0.3766, -0.1987, 0.0381, 0.3309, -0.1246, 0.0381, 0.3416, -0.1195, 0.0381, 0.3766, -0.1723, 0.0381, 0.3766, -0.1195, 0.0381, 0.3766, -0.1246, 0.0381, 0.3416, -0.114, 0.0381, 0.3671, -0.1246, 0.0381, 0.3416, -0.1246, 0.0381, 0.2852, -0.1723, 0.0381, 0.2852, -0.1246, 0.0381, 0.3416, -0.1723, 0.0381, 0.2852, -0.1723, 0.0381, 0.3766, -0.1723, 0.0381, 0.2852, -0.1987, 0.0381, 0.3309, -0.1723, 0.0381, 0.3766, -0.1246, 0.0381, 0.3416, -0.1723, 0.0381, 0.3766, -0.1195, 0.0381, 0.3766, -0.1195, 0.0381, 0.3766, -0.114, 0.0381, 0.3671, -0.1246, 0.0381, 0.3416, 0.2259, 0.0217, -0.5275, 0.1954, 0, -0.5014, 0.2182, 0, -0.5409, 0.1954, 0, -0.5014, 0.2259, 0.0217, -0.5275, 0.2109, 0.0217, -0.5014, 0.2259, 0.0217, -0.5275, 0.2182, 0, -0.5409, 0.1954, 0, -0.5014, 0.1954, 0, -0.5014, 0.2109, 0.0217, -0.5014, 0.2259, 0.0217, -0.5275, 0.0434, 0, 0.566, 0.1423, 0.0952, 0.3835, 0.1753, 0, 0.5114, 0.1423, 0.0952, 0.3835, 0.0434, 0, 0.566, 0.0434, 0.0952, 0.4245, -0.1954, 0, 0.1753, -0.2259, 0.0217, 0.1493, -0.2182, 0, 0.1359, -0.2259, 0.0217, 0.1493, -0.1954, 0, 0.1753, -0.2109, 0.0217, 0.1753, -0.1954, 0, 0.1753, -0.2182, 0, 0.1359, -0.2259, 0.0217, 0.1493, -0.2259, 0.0217, 0.1493, -0.2109, 0.0217, 0.1753, -0.1954, 0, 0.1753, 0.2182, 0, -0.462, 0.256, 0.0217, -0.4754, 0.2638, 0, -0.462, 0.256, 0.0217, -0.4754, 0.2182, 0, -0.462, 0.2259, 0.0217, -0.4754, 0.2182, 0, -0.462, 0.2638, 0, -0.462, 0.256, 0.0217, -0.4754, 0.256, 0.0217, -0.4754, 0.2259, 0.0217, -0.4754, 0.2182, 0, -0.462, -0.2182, 0, 0.1359, -0.256, 0.0217, 0.1493, -0.2638, 0, 0.1359, -0.256, 0.0217, 0.1493, -0.2182, 0, 0.1359, -0.2259, 0.0217, 0.1493, -0.2182, 0, 0.1359, -0.2638, 0, 0.1359, -0.256, 0.0217, 0.1493, -0.256, 0.0217, 0.1493, -0.2259, 0.0217, 0.1493, -0.2182, 0, 0.1359, 0.2866, 0, -0.5014, 0.256, 0.0217, -0.4754, 0.2711, 0.0217, -0.5014, 0.256, 0.0217, -0.4754, 0.2866, 0, -0.5014, 0.2638, 0, -0.462, 0.2866, 0, -0.5014, 0.2711, 0.0217, -0.5014, 0.256, 0.0217, -0.4754, 0.256, 0.0217, -0.4754, 0.2638, 0, -0.462, 0.2866, 0, -0.5014, 0.1833, 0.0952, 0.2847, 0.1423, 0.0952, -0.3835, 0.1833, 0.0952, -0.2847, 0.1423, 0.0952, -0.3835, 0.1833, 0.0952, 0.2847, 0.1423, 0.0952, 0.3835, 0.1423, 0.0952, -0.3835, 0.1423, 0.0952, 0.3835, 0.0434, 0.0952, -0.4245, 0.0434, 0.0952, -0.4245, 0.1423, 0.0952, 0.3835, 0.0434, 0.0952, 0.4245, 0.0434, 0.0952, -0.4245, 0.0434, 0.0952, 0.4245, -0.0556, 0.0952, -0.3835, -0.0556, 0.0952, -0.3835, 0.0434, 0.0952, 0.4245, -0.0556, 0.0952, 0.3835, -0.0556, 0.0952, -0.3835, -0.0556, 0.0952, 0.3835, -0.0966, 0.0952, -0.2847, -0.0966, 0.0952, -0.2847, -0.0556, 0.0952, 0.3835, -0.0966, 0.0952, 0.2847, -0.2711, 0.0217, 0.1753, -0.2638, 0, 0.2148, -0.2866, 0, 0.1753, -0.2638, 0, 0.2148, -0.2711, 0.0217, 0.1753, -0.256, 0.0217, 0.2013, -0.2711, 0.0217, 0.1753, -0.2866, 0, 0.1753, -0.2638, 0, 0.2148, -0.2638, 0, 0.2148, -0.256, 0.0217, 0.2013, -0.2711, 0.0217, 0.1753, 0.256, 0.0217, -0.4754, 0.256, 0.0217, -0.5275, 0.2711, 0.0217, -0.5014, 0.256, 0.0217, -0.5275, 0.256, 0.0217, -0.4754, 0.2259, 0.0217, -0.5275, 0.2259, 0.0217, -0.5275, 0.256, 0.0217, -0.4754, 0.2259, 0.0217, -0.4754, 0.2259, 0.0217, -0.5275, 0.2259, 0.0217, -0.4754, 0.2109, 0.0217, -0.5014, 0.256, 0.0217, -0.4754, 0.2711, 0.0217, -0.5014, 0.256, 0.0217, -0.5275, 0.256, 0.0217, -0.5275, 0.2259, 0.0217, -0.5275, 0.256, 0.0217, -0.4754, 0.2259, 0.0217, -0.5275, 0.2259, 0.0217, -0.4754, 0.256, 0.0217, -0.4754, 0.2259, 0.0217, -0.5275, 0.2109, 0.0217, -0.5014, 0.2259, 0.0217, -0.4754, 0.23, 0, 0.3796, 0.1423, 0.0952, 0.3835, 0.1833, 0.0952, 0.2847, 0.1423, 0.0952, 0.3835, 0.23, 0, 0.3796, 0.1753, 0, 0.5114, -0.1433, 0, 0.2617, -0.1723, 0.0381, 0.2852, -0.1859, 0, 0.2617, -0.1723, 0.0381, 0.2852, -0.1433, 0, 0.2617, -0.1246, 0.0381, 0.2852, -0.1433, 0, 0.2617, -0.1859, 0, 0.2617, -0.1723, 0.0381, 0.2852, -0.1723, 0.0381, 0.2852, -0.1246, 0.0381, 0.2852, -0.1433, 0, 0.2617, -0.2638, 0, 0.2148, -0.2259, 0.0217, 0.2013, -0.2182, 0, 0.2148, -0.2259, 0.0217, 0.2013, -0.2638, 0, 0.2148, -0.256, 0.0217, 0.2013, -0.2638, 0, 0.2148, -0.2182, 0, 0.2148, -0.2259, 0.0217, 0.2013, -0.2259, 0.0217, 0.2013, -0.256, 0.0217, 0.2013, -0.2638, 0, 0.2148) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_h50ml"] +data = PackedVector3Array(-0.0571, 0.0365, -0.5682, -0.0585, 0.0365, -0.5652, -0.0601, 0.0203, -0.5725, 0.103, 0.0365, -0.5531, 0.1004, 0.0365, -0.5475, 0.0995, 0.0173, -0.5582, 0.1674, 0.0365, 0.4108, 0.1454, 0.0365, 0.4126, 0.1398, 0.0062, 0.4046, 0.1701, 0.05, -0.0756, 0.1616, 0.05, -0.0749, 0.1595, 0.0383, -0.078, 0.1323, 0.0033, 0.1217, 0.1625, 0.0365, 0.1285, 0.1384, 0.0365, 0.1305, 0.1379, 0.0411, -0.3377, 0.146, 0.05, -0.3359, 0.1395, 0.05, -0.3353, 0.1979, 0.0165, -0.3496, 0.1933, 0.05, -0.3398, 0.1689, 0.05, -0.3378, -0.1323, 0.0033, -0.103, -0.1625, 0.0365, -0.1098, -0.1384, 0.0365, -0.1118, -0.1323, 0.0033, 0.177, -0.1625, 0.0365, 0.1702, -0.1384, 0.0365, 0.1682, 0.2304, 0.0033, -0.1634, 0.2001, 0.0365, -0.1702, 0.2243, 0.0365, -0.1722, 0.2159, 0.0458, -0.0806, 0.2154, 0.05, -0.0794, 0.2123, 0.05, -0.0791, 0.1363, 0, -0.4574, 0.1594, 0.0399, -0.4375, 0.1483, 0.0207, -0.4471, 0.1363, 0, -0.4574, 0.1483, 0.0207, -0.4471, 0.1426, 0, -0.4483, 0.1362, 0, -0.4576, 0.1594, 0.0399, -0.4375, 0.1363, 0, -0.4574, 0.134, 0, -0.4607, 0.1594, 0.0399, -0.4375, 0.1362, 0, -0.4576, 0.1594, 0.0399, -0.4375, 0.134, 0, -0.4607, 0.1428, 0.0399, -0.4615, -0.2304, 0.0562, -0.4306, -0.2473, 0, -0.3905, -0.2388, 0, -0.4377, -0.2473, 0, -0.3905, -0.2304, 0.0562, -0.4306, -0.237, 0.0562, -0.3942, -0.1936, 0, -0.454, -0.2304, 0.0562, -0.4306, -0.2388, 0, -0.4377, -0.2304, 0.0562, -0.4306, -0.1936, 0, -0.454, -0.1956, 0.0562, -0.4431, -0.1739, 0.0562, -0.3828, -0.1956, 0.0562, -0.4431, -0.1674, 0.0562, -0.4192, -0.1956, 0.0562, -0.4431, -0.1739, 0.0562, -0.3828, -0.2087, 0.0562, -0.3703, -0.1956, 0.0562, -0.4431, -0.2087, 0.0562, -0.3703, -0.2304, 0.0562, -0.4306, -0.2304, 0.0562, -0.4306, -0.2087, 0.0562, -0.3703, -0.237, 0.0562, -0.3942, -0.2159, 0.0302, -0.3706, -0.2305, 0, -0.3389, -0.2246, 0, -0.3713, -0.2305, 0, -0.3389, -0.2159, 0.0302, -0.3706, -0.221, 0.0302, -0.3423, -0.156, 0, -0.3254, -0.1577, 0.0302, -0.365, -0.1482, 0, -0.3684, -0.1577, 0.0302, -0.365, -0.156, 0, -0.3254, -0.1637, 0.0302, -0.3319, -0.0664, 0.05, -0.5058, -0.0979, 0.05, -0.5937, -0.0568, 0.05, -0.5588, -0.0979, 0.05, -0.5937, -0.0664, 0.05, -0.5058, -0.1171, 0.05, -0.4876, -0.0979, 0.05, -0.5937, -0.1171, 0.05, -0.4876, -0.1487, 0.05, -0.5754, -0.1487, 0.05, -0.5754, -0.1171, 0.05, -0.4876, -0.1583, 0.05, -0.5224, -0.1487, 0.05, -0.5754, -0.1734, 0, -0.517, -0.161, 0, -0.5858, -0.1734, 0, -0.517, -0.1487, 0.05, -0.5754, -0.1583, 0.05, -0.5224, -0.0951, 0, -0.6095, -0.1487, 0.05, -0.5754, -0.161, 0, -0.5858, -0.1487, 0.05, -0.5754, -0.0951, 0, -0.6095, -0.0979, 0.05, -0.5937, -0.1163, 0.0365, -0.4317, -0.1394, 0.0365, -0.4958, -0.1093, 0.0365, -0.4704, -0.1394, 0.0365, -0.4958, -0.1163, 0.0365, -0.4317, -0.1534, 0.0365, -0.4184, -0.1394, 0.0365, -0.4958, -0.1534, 0.0365, -0.4184, -0.1764, 0.0365, -0.4825, -0.1764, 0.0365, -0.4825, -0.1534, 0.0365, -0.4184, -0.1834, 0.0365, -0.4438, -0.1074, 0, -0.4241, -0.1093, 0.0365, -0.4704, -0.0983, 0, -0.4744, -0.1093, 0.0365, -0.4704, -0.1074, 0, -0.4241, -0.1163, 0.0365, -0.4317, -0.1555, 0, -0.4068, -0.1163, 0.0365, -0.4317, -0.1074, 0, -0.4241, -0.1163, 0.0365, -0.4317, -0.1555, 0, -0.4068, -0.1534, 0.0365, -0.4184, -0.2228, 0.0399, -0.3156, -0.2364, 0, -0.2835, -0.2295, 0, -0.3213, -0.2364, 0, -0.2835, -0.2228, 0.0399, -0.3156, -0.228, 0.0399, -0.2865, -0.164, 0, -0.3095, -0.1888, 0.0302, -0.3229, -0.1748, 0, -0.3187, -0.1888, 0.0302, -0.3229, -0.164, 0, -0.3095, -0.1723, 0.0399, -0.3065, -0.1888, 0.0302, -0.3229, -0.1723, 0.0399, -0.3065, -0.1945, 0.0302, -0.3277, -0.1945, 0.0302, -0.3277, -0.1723, 0.0399, -0.3065, -0.1949, 0.0399, -0.3256, -0.1668, 0, -0.2936, -0.1723, 0.0399, -0.3065, -0.164, 0, -0.3095, -0.1723, 0.0399, -0.3065, -0.1668, 0, -0.2936, -0.1768, 0.0399, -0.2816, -0.1768, 0.0399, -0.2816, -0.1949, 0.0399, -0.3256, -0.1723, 0.0399, -0.3065, -0.1949, 0.0399, -0.3256, -0.1768, 0.0399, -0.2816, -0.2182, 0.0399, -0.2782, -0.1949, 0.0399, -0.3256, -0.2182, 0.0399, -0.2782, -0.2228, 0.0399, -0.3156, -0.2228, 0.0399, -0.3156, -0.2182, 0.0399, -0.2782, -0.228, 0.0399, -0.2865, -0.2364, 0, -0.2835, -0.2282, 0.0225, -0.2822, -0.235, 0, -0.2823, -0.2282, 0.0225, -0.2822, -0.2364, 0, -0.2835, -0.228, 0.0399, -0.2865, -0.2282, 0.0225, -0.2822, -0.228, 0.0399, -0.2865, -0.2182, 0.0399, -0.2782, 0.1892, 0.0399, -0.4396, 0.185, 0.0399, -0.4907, 0.2019, 0.0399, -0.4664, 0.185, 0.0399, -0.4907, 0.1892, 0.0399, -0.4396, 0.1602, 0.0399, -0.4372, 0.185, 0.0399, -0.4907, 0.1602, 0.0399, -0.4372, 0.1555, 0.0399, -0.4883, 0.1555, 0.0399, -0.4883, 0.1602, 0.0399, -0.4372, 0.1594, 0.0399, -0.4375, 0.1555, 0.0399, -0.4883, 0.1594, 0.0399, -0.4375, 0.1428, 0.0399, -0.4615, 0.2107, 0, -0.4671, 0.185, 0.0399, -0.4907, 0.1887, 0, -0.4987, 0.185, 0.0399, -0.4907, 0.2107, 0, -0.4671, 0.2019, 0.0399, -0.4664, 0.1943, 0, -0.4323, 0.2019, 0.0399, -0.4664, 0.2107, 0, -0.4671, 0.2019, 0.0399, -0.4664, 0.1943, 0, -0.4323, 0.1892, 0.0399, -0.4396, 0.0798, 0, -0.5949, 0.0193, 0.05, -0.5759, 0.0101, 0, -0.5891, 0.0193, 0.05, -0.5759, 0.0798, 0, -0.5949, 0.073, 0.05, -0.5804, 0.0201, 0, -0.4683, 0.0807, 0.05, -0.4873, 0.0899, 0, -0.4741, 0.0807, 0.05, -0.4873, 0.0201, 0, -0.4683, 0.027, 0.05, -0.4829, 0.027, 0.05, -0.4829, -0.0081, 0.0365, -0.5268, -0.0037, 0.05, -0.5272, -0.0081, 0.0365, -0.5268, 0.027, 0.05, -0.4829, -0.004, 0.0365, -0.521, -0.004, 0.0365, -0.521, 0.027, 0.05, -0.4829, -0.0023, 0, -0.5007, -0.0023, 0, -0.5007, 0.027, 0.05, -0.4829, 0.0201, 0, -0.4683, 0.0807, 0.05, -0.4873, 0.073, 0.05, -0.5804, 0.1037, 0.05, -0.5361, 0.073, 0.05, -0.5804, 0.0807, 0.05, -0.4873, 0.027, 0.05, -0.4829, 0.073, 0.05, -0.5804, 0.027, 0.05, -0.4829, 0.0193, 0.05, -0.5759, 0.0193, 0.05, -0.5759, 0.027, 0.05, -0.4829, -0.0037, 0.05, -0.5272, -0.0012, 0, -0.5652, -0.0179, 0.0365, -0.5715, -0.0129, 0, -0.5821, -0.0179, 0.0365, -0.5715, -0.0012, 0, -0.5652, 0.0005, 0.0365, -0.5449, -0.0129, 0, -0.5821, -0.0601, 0.0203, -0.5725, -0.0582, 0, -0.5783, -0.0601, 0.0203, -0.5725, -0.0129, 0, -0.5821, -0.0179, 0.0365, -0.5715, -0.0601, 0.0203, -0.5725, -0.0179, 0.0365, -0.5715, -0.0571, 0.0365, -0.5682, -0.0023, 0, -0.5007, -0.0123, 0.0365, -0.5035, -0.004, 0.0365, -0.521, -0.0123, 0.0365, -0.5035, -0.0023, 0, -0.5007, -0.0056, 0, -0.4939, -0.0565, 0, -0.4897, -0.0123, 0.0365, -0.5035, -0.0056, 0, -0.4939, -0.0123, 0.0365, -0.5035, -0.0565, 0, -0.4897, -0.0515, 0.0365, -0.5003, 0.0545, 0.0485, 0.509, 0.0386, 0, 0.5189, 0.0478, 0, 0.4994, 0.0386, 0, 0.5189, 0.0545, 0.0485, 0.509, 0.0386, 0.0365, 0.5368, 0.0386, 0.0365, 0.5368, 0.0545, 0.0485, 0.509, 0.0377, 0.0485, 0.5446, 0.0386, 0.0365, 0.5368, 0.0377, 0.0485, 0.5446, 0.0348, 0.0365, 0.5449, 0.0551, 0, 0.5876, 0.0994, 0.0485, 0.5737, 0.1061, 0, 0.5834, 0.0994, 0.0485, 0.5737, 0.0551, 0, 0.5876, 0.0601, 0.0485, 0.577, 0.0994, 0.0485, 0.5737, 0.0937, 0.0485, 0.5058, 0.1161, 0.0485, 0.5381, 0.0937, 0.0485, 0.5058, 0.0994, 0.0485, 0.5737, 0.0601, 0.0485, 0.577, 0.0937, 0.0485, 0.5058, 0.0601, 0.0485, 0.577, 0.0545, 0.0485, 0.509, 0.0545, 0.0485, 0.509, 0.0601, 0.0485, 0.577, 0.0377, 0.0485, 0.5446, 0.1283, 0, -0.4766, 0.1503, 0.0231, -0.4849, 0.142, 0, -0.4777, 0.1503, 0.0231, -0.4849, 0.1283, 0, -0.4766, 0.1037, 0, -0.4746, 0.1503, 0.0231, -0.4849, 0.1037, 0, -0.4746, 0.1087, 0.0365, -0.4852, 0.1503, 0.0231, -0.4849, 0.1087, 0.0365, -0.4852, 0.1479, 0.0365, -0.4884, 0.163, 0, -0.4966, 0.1647, 0.0365, -0.524, 0.1764, 0, -0.525, 0.1647, 0.0365, -0.524, 0.163, 0, -0.4966, 0.1479, 0.0365, -0.4884, 0.1479, 0.0365, -0.4884, 0.163, 0, -0.4966, 0.1533, 0.0231, -0.4913, 0.1479, 0.0365, -0.4884, 0.1533, 0.0231, -0.4913, 0.1503, 0.0231, -0.4849, 0.1472, 0, -0.567, 0.0995, 0.0173, -0.5582, 0.1019, 0, -0.5632, 0.0995, 0.0173, -0.5582, 0.1472, 0, -0.567, 0.1422, 0.0365, -0.5564, 0.0995, 0.0173, -0.5582, 0.1422, 0.0365, -0.5564, 0.103, 0.0365, -0.5531, 0.1087, 0.0365, -0.4852, 0.0956, 0, -0.4862, 0.0939, 0.0365, -0.5065, 0.0956, 0, -0.4862, 0.1087, 0.0365, -0.4852, 0.1037, 0, -0.4746, 0.1764, 0, -0.525, 0.1422, 0.0365, -0.5564, 0.1472, 0, -0.567, 0.1422, 0.0365, -0.5564, 0.1764, 0, -0.525, 0.1647, 0.0365, -0.524, 0.1479, 0.0365, -0.4884, 0.1422, 0.0365, -0.5564, 0.1647, 0.0365, -0.524, 0.1422, 0.0365, -0.5564, 0.1479, 0.0365, -0.4884, 0.1087, 0.0365, -0.4852, 0.1422, 0.0365, -0.5564, 0.1087, 0.0365, -0.4852, 0.108, 0.0365, -0.5365, 0.1087, 0.0365, -0.4852, 0.0939, 0.0365, -0.5065, 0.108, 0.0365, -0.5365, 0.1422, 0.0365, -0.5564, 0.108, 0.0365, -0.5365, 0.103, 0.0365, -0.5531, 0.103, 0.0365, -0.5531, 0.108, 0.0365, -0.5365, 0.1004, 0.0365, -0.5475, 0.1577, 0.0655, -0.3339, 0.1958, 0.0655, -0.4146, 0.2001, 0.0655, -0.3633, 0.1958, 0.0655, -0.4146, 0.1577, 0.0655, -0.3339, 0.1492, 0.0655, -0.4366, 0.1492, 0.0655, -0.4366, 0.1577, 0.0655, -0.3339, 0.1111, 0.0655, -0.3559, 0.1492, 0.0655, -0.4366, 0.1111, 0.0655, -0.3559, 0.1068, 0.0655, -0.4072, 0.214, 0, -0.3567, 0.1958, 0.0655, -0.4146, 0.2084, 0, -0.4234, 0.1958, 0.0655, -0.4146, 0.214, 0, -0.3567, 0.2001, 0.0655, -0.3633, 0.1068, 0.0655, -0.4072, 0.0985, 0, -0.3471, 0.0929, 0, -0.4138, 0.0985, 0, -0.3471, 0.1068, 0.0655, -0.4072, 0.1111, 0.0655, -0.3559, 0.1113, 0.0302, 0.4746, 0.0917, 0, 0.4957, 0.1056, 0, 0.4664, 0.0917, 0, 0.4957, 0.1113, 0.0302, 0.4746, 0.0965, 0.0212, 0.4998, 0.0965, 0.0212, 0.4998, 0.1113, 0.0302, 0.4746, 0.0973, 0.0302, 0.5042, 0.1554, 0, 0.5382, 0.164, 0.0302, 0.4995, 0.174, 0, 0.4986, 0.164, 0.0302, 0.4995, 0.1554, 0, 0.5382, 0.1497, 0.0302, 0.5299, -0.155, 0, -0.0031, -0.1284, 0.0655, -0.0378, -0.1145, 0, -0.0312, -0.1284, 0.0655, -0.0378, -0.155, 0, -0.0031, -0.1675, 0.0363, -0.0034, -0.1284, 0.0655, -0.0378, -0.1675, 0.0363, -0.0034, -0.1702, 0.0394, -0.0023, -0.1284, 0.0655, -0.0378, -0.1702, 0.0394, -0.0023, -0.1707, 0.0655, -0.0084, -0.1707, 0.0655, -0.0084, -0.1327, 0.0655, -0.0891, -0.1284, 0.0655, -0.0378, -0.1327, 0.0655, -0.0891, -0.1707, 0.0655, -0.0084, -0.1793, 0.0655, -0.1111, -0.1793, 0.0655, -0.1111, -0.1707, 0.0655, -0.0084, -0.2173, 0.0655, -0.0304, -0.1793, 0.0655, -0.1111, -0.2173, 0.0655, -0.0304, -0.2216, 0.0655, -0.0817, -0.2216, 0.0655, -0.0817, -0.23, 0, -0.0216, -0.2355, 0, -0.0883, -0.23, 0, -0.0216, -0.2216, 0.0655, -0.0817, -0.2173, 0.0655, -0.0304, -0.1145, 0, -0.0312, -0.1327, 0.0655, -0.0891, -0.12, 0, -0.0979, -0.1327, 0.0655, -0.0891, -0.1145, 0, -0.0312, -0.1284, 0.0655, -0.0378, -0.1384, 0.0365, 0.1682, -0.144, 0.0365, 0.1003, -0.1216, 0.0365, 0.1327, -0.144, 0.0365, 0.1003, -0.1384, 0.0365, 0.1682, -0.1625, 0.0365, 0.1702, -0.144, 0.0365, 0.1003, -0.1625, 0.0365, 0.1702, -0.1832, 0.0365, 0.1036, -0.1832, 0.0365, 0.1036, -0.1625, 0.0365, 0.1702, -0.1798, 0.0365, 0.1621, -0.1832, 0.0365, 0.1036, -0.1798, 0.0365, 0.1621, -0.1827, 0.0365, 0.1641, -0.1832, 0.0365, 0.1036, -0.1827, 0.0365, 0.1641, -0.2, 0.0365, 0.1392, -0.1827, 0.0365, 0.1641, -0.2117, 0, 0.1402, -0.2, 0.0365, 0.1392, -0.2117, 0, 0.1402, -0.1827, 0.0365, 0.1641, -0.1953, 0, 0.1638, -0.1311, 0, 0.1768, -0.1317, 0, 0.1779, -0.1323, 0.0033, 0.177, -0.1384, 0.0365, 0.1682, -0.1311, 0, 0.1768, -0.1323, 0.0033, 0.177, -0.1216, 0.0365, 0.1327, -0.1311, 0, 0.1768, -0.1384, 0.0365, 0.1682, -0.1311, 0, 0.1768, -0.1216, 0.0365, 0.1327, -0.1099, 0, 0.1317, -0.1099, 0, 0.1317, -0.144, 0.0365, 0.1003, -0.139, 0, 0.0897, -0.144, 0.0365, 0.1003, -0.1099, 0, 0.1317, -0.1216, 0.0365, 0.1327, -0.1317, 0, 0.4579, -0.1216, 0.0365, 0.4127, -0.1099, 0, 0.4117, -0.1216, 0.0365, 0.4127, -0.1317, 0, 0.4579, -0.1384, 0.0365, 0.4482, -0.1776, 0.0365, 0.4515, -0.2117, 0, 0.4202, -0.2, 0.0365, 0.4192, -0.2117, 0, 0.4202, -0.1776, 0.0365, 0.4515, -0.1901, 0, 0.4514, -0.1901, 0, 0.4514, -0.1776, 0.0365, 0.4515, -0.1791, 0.0253, 0.4548, -0.1099, 0, 0.4117, -0.144, 0.0365, 0.3803, -0.139, 0, 0.3697, -0.144, 0.0365, 0.3803, -0.1099, 0, 0.4117, -0.1216, 0.0365, 0.4127, -0.1384, 0.0365, 0.4482, -0.144, 0.0365, 0.3803, -0.1216, 0.0365, 0.4127, -0.144, 0.0365, 0.3803, -0.1384, 0.0365, 0.4482, -0.1776, 0.0365, 0.4515, -0.144, 0.0365, 0.3803, -0.1776, 0.0365, 0.4515, -0.1832, 0.0365, 0.3836, -0.1832, 0.0365, 0.3836, -0.1776, 0.0365, 0.4515, -0.2, 0.0365, 0.4192, -0.025, 0, 0.5286, -0.0583, 0.0223, 0.539, -0.0634, 0, 0.5318, -0.0583, 0.0223, 0.539, -0.025, 0, 0.5286, -0.0288, 0.0223, 0.5366, -0.0578, 0, 0.5981, -0.0245, 0.0223, 0.5877, -0.0195, 0, 0.595, -0.0245, 0.0223, 0.5877, -0.0578, 0, 0.5981, -0.0541, 0.0223, 0.5901, -0.2216, 0.0655, 0.1983, -0.23, 0, 0.2584, -0.2355, 0, 0.1917, -0.23, 0, 0.2584, -0.2216, 0.0655, 0.1983, -0.2173, 0.0655, 0.2496, -0.1625, 0.0365, 0.1702, -0.1793, 0.0655, 0.1689, -0.1798, 0.0365, 0.1621, -0.1625, 0.0365, 0.1702, -0.1327, 0.0655, 0.1909, -0.1793, 0.0655, 0.1689, -0.1323, 0.0033, 0.177, -0.1327, 0.0655, 0.1909, -0.1625, 0.0365, 0.1702, -0.1323, 0.0033, 0.177, -0.12, 0, 0.1821, -0.1327, 0.0655, 0.1909, -0.12, 0, 0.1821, -0.1323, 0.0033, 0.177, -0.1311, 0, 0.1768, -0.1145, 0, 0.2488, -0.1327, 0.0655, 0.1909, -0.12, 0, 0.1821, -0.1327, 0.0655, 0.1909, -0.1145, 0, 0.2488, -0.1284, 0.0655, 0.2422, -0.155, 0, 0.2769, -0.1284, 0.0655, 0.2422, -0.1145, 0, 0.2488, -0.1284, 0.0655, 0.2422, -0.155, 0, 0.2769, -0.1675, 0.0363, 0.2766, -0.1284, 0.0655, 0.2422, -0.1675, 0.0363, 0.2766, -0.1702, 0.0394, 0.2777, -0.1284, 0.0655, 0.2422, -0.1702, 0.0394, 0.2777, -0.1707, 0.0655, 0.2716, -0.1707, 0.0655, 0.2716, -0.1327, 0.0655, 0.1909, -0.1284, 0.0655, 0.2422, -0.1327, 0.0655, 0.1909, -0.1707, 0.0655, 0.2716, -0.1793, 0.0655, 0.1689, -0.1793, 0.0655, 0.1689, -0.1707, 0.0655, 0.2716, -0.2173, 0.0655, 0.2496, -0.1793, 0.0655, 0.1689, -0.2173, 0.0655, 0.2496, -0.2216, 0.0655, 0.1983, -0.23, 0, 0.2584, -0.1702, 0.0394, 0.2777, -0.2061, 0, 0.2697, -0.1702, 0.0394, 0.2777, -0.23, 0, 0.2584, -0.2173, 0.0655, 0.2496, -0.1702, 0.0394, 0.2777, -0.2173, 0.0655, 0.2496, -0.1707, 0.0655, 0.2716, -0.1857, 0.0562, 0.4606, -0.2125, 0, 0.4949, -0.192, 0, 0.4515, -0.2125, 0, 0.4949, -0.1857, 0.0562, 0.4606, -0.2015, 0.0562, 0.494, -0.1435, 0.0562, 0.5213, -0.1489, 0.0562, 0.4575, -0.1278, 0.0562, 0.4879, -0.1489, 0.0562, 0.4575, -0.1435, 0.0562, 0.5213, -0.1804, 0.0562, 0.5244, -0.1489, 0.0562, 0.4575, -0.1804, 0.0562, 0.5244, -0.1857, 0.0562, 0.4606, -0.1857, 0.0562, 0.4606, -0.1804, 0.0562, 0.5244, -0.2015, 0.0562, 0.494, -0.1804, 0.0562, 0.5244, -0.2125, 0, 0.4949, -0.2015, 0.0562, 0.494, -0.2125, 0, 0.4949, -0.1804, 0.0562, 0.5244, -0.1851, 0, 0.5344, -0.2154, 0.05, 0.3781, -0.2621, 0, 0.3352, -0.2461, 0.05, 0.3338, -0.2621, 0, 0.3352, -0.2154, 0.05, 0.3781, -0.2222, 0, 0.3927, -0.1446, 0, 0.3702, -0.1387, 0.05, 0.3249, -0.1226, 0, 0.3236, -0.1387, 0.05, 0.3249, -0.1446, 0, 0.3702, -0.1616, 0.05, 0.3737, -0.1616, 0.05, 0.3737, -0.1446, 0, 0.3702, -0.1577, 0.0287, 0.3793, -0.2231, 0.05, 0.2851, -0.2621, 0, 0.3352, -0.2323, 0, 0.2719, -0.2621, 0, 0.3352, -0.2231, 0.05, 0.2851, -0.2461, 0.05, 0.3338, -0.1616, 0.05, 0.3737, -0.1694, 0.05, 0.2806, -0.1387, 0.05, 0.3249, -0.1694, 0.05, 0.2806, -0.1616, 0.05, 0.3737, -0.2154, 0.05, 0.3781, -0.1694, 0.05, 0.2806, -0.2154, 0.05, 0.3781, -0.2231, 0.05, 0.2851, -0.2231, 0.05, 0.2851, -0.2154, 0.05, 0.3781, -0.2461, 0.05, 0.3338, -0.1324, 0.0302, 0.5499, -0.1554, 0, 0.5319, -0.1488, 0.0302, 0.5262, -0.1554, 0, 0.5319, -0.1324, 0.0302, 0.5499, -0.1367, 0, 0.559, -0.0994, 0, 0.4799, -0.1206, 0.0194, 0.4873, -0.1204, 0, 0.4817, -0.1206, 0.0194, 0.4873, -0.0994, 0, 0.4799, -0.1037, 0.0302, 0.489, -0.1206, 0.0194, 0.4873, -0.1037, 0.0302, 0.489, -0.1242, 0.0302, 0.4907, -0.0745, 0, 0.5158, -0.1037, 0.0302, 0.489, -0.0994, 0, 0.4799, -0.1037, 0.0302, 0.489, -0.0745, 0, 0.5158, -0.0845, 0.0302, 0.5167, -0.0063, 0, 0.6095, 0.038, 0.0365, 0.5956, 0.0447, 0, 0.6053, 0.038, 0.0365, 0.5956, -0.0063, 0, 0.6095, -0.0012, 0.0365, 0.5989, 0.0539, 0, 0.5858, 0.038, 0.0365, 0.5956, 0.0509, 0.0365, 0.5681, 0.038, 0.0365, 0.5956, 0.0539, 0, 0.5858, 0.0447, 0, 0.6053, 0.0373, 0, 0.5171, -0.0069, 0.0365, 0.531, -0.0136, 0, 0.5213, -0.0069, 0.0365, 0.531, 0.0373, 0, 0.5171, 0.0323, 0.0365, 0.5277, -0.0069, 0.0365, 0.531, -0.0203, 0, 0.5354, -0.0136, 0, 0.5213, -0.0203, 0, 0.5354, -0.0069, 0.0365, 0.531, -0.0199, 0.0223, 0.5493, -0.0199, 0.0223, 0.5493, -0.0069, 0.0365, 0.531, -0.0237, 0.0365, 0.5665, -0.0199, 0.0223, 0.5493, -0.0237, 0.0365, 0.5665, -0.0282, 0.0223, 0.5669, 0.0348, 0.0365, 0.5449, 0.0323, 0.0365, 0.5277, 0.0386, 0.0365, 0.5368, 0.0348, 0.0365, 0.5449, -0.0012, 0.0365, 0.5989, 0.0323, 0.0365, 0.5277, 0.0323, 0.0365, 0.5277, -0.0012, 0.0365, 0.5989, -0.0069, 0.0365, 0.531, -0.0069, 0.0365, 0.531, -0.0012, 0.0365, 0.5989, -0.0237, 0.0365, 0.5665, 0.0348, 0.0365, 0.5449, 0.038, 0.0365, 0.5956, -0.0012, 0.0365, 0.5989, 0.038, 0.0365, 0.5956, 0.0348, 0.0365, 0.5449, 0.0509, 0.0365, 0.5681, 0.0386, 0, 0.5189, 0.0323, 0.0365, 0.5277, 0.0373, 0, 0.5171, 0.0323, 0.0365, 0.5277, 0.0386, 0, 0.5189, 0.0386, 0.0365, 0.5368, -0.1446, 0, 0.0902, -0.1387, 0.05, 0.0449, -0.1226, 0, 0.0436, -0.1387, 0.05, 0.0449, -0.1446, 0, 0.0902, -0.1616, 0.05, 0.0937, -0.1616, 0.05, 0.0937, -0.1446, 0, 0.0902, -0.1577, 0.0287, 0.0993, -0.1616, 0.05, 0.0937, -0.1694, 0.05, 0.0006, -0.1387, 0.05, 0.0449, -0.1694, 0.05, 0.0006, -0.1616, 0.05, 0.0937, -0.2154, 0.05, 0.0981, -0.1694, 0.05, 0.0006, -0.2154, 0.05, 0.0981, -0.2231, 0.05, 0.0051, -0.2231, 0.05, 0.0051, -0.2154, 0.05, 0.0981, -0.2461, 0.05, 0.0538, -0.2231, 0.05, 0.0051, -0.2621, 0, 0.0552, -0.2323, 0, -0.0081, -0.2621, 0, 0.0552, -0.2231, 0.05, 0.0051, -0.2461, 0.05, 0.0538, -0.2154, 0.05, 0.0981, -0.2621, 0, 0.0552, -0.2461, 0.05, 0.0538, -0.2621, 0, 0.0552, -0.2154, 0.05, 0.0981, -0.2222, 0, 0.1127, -0.155, 0, -0.0031, -0.1694, 0.05, 0.0006, -0.1675, 0.0363, -0.0034, -0.1694, 0.05, 0.0006, -0.155, 0, -0.0031, -0.1226, 0, 0.0436, -0.1694, 0.05, 0.0006, -0.1226, 0, 0.0436, -0.1387, 0.05, 0.0449, -0.1016, 0, 0.6023, -0.0684, 0.0399, 0.5918, -0.0633, 0, 0.5991, -0.0684, 0.0399, 0.5918, -0.1016, 0, 0.6023, -0.0979, 0.0399, 0.5943, -0.0979, 0.0399, 0.5943, -0.1236, 0, 0.5707, -0.1148, 0.0399, 0.57, -0.1236, 0, 0.5707, -0.0979, 0.0399, 0.5943, -0.1016, 0, 0.6023, -0.0658, 0, 0.537, -0.0726, 0.0399, 0.5407, -0.0688, 0, 0.5327, -0.0726, 0.0399, 0.5407, -0.0658, 0, 0.537, -0.0629, 0.0223, 0.5488, -0.0726, 0.0399, 0.5407, -0.0629, 0.0223, 0.5488, -0.0557, 0.0399, 0.5651, -0.0557, 0.0399, 0.5651, -0.0629, 0.0223, 0.5488, -0.0519, 0.0223, 0.5647, -0.0684, 0.0399, 0.5918, -0.0726, 0.0399, 0.5407, -0.0557, 0.0399, 0.5651, -0.0726, 0.0399, 0.5407, -0.0684, 0.0399, 0.5918, -0.0979, 0.0399, 0.5943, -0.0726, 0.0399, 0.5407, -0.0979, 0.0399, 0.5943, -0.1021, 0.0399, 0.5432, -0.1021, 0.0399, 0.5432, -0.0979, 0.0399, 0.5943, -0.1148, 0.0399, 0.57, -0.0959, 0.0302, 0.5408, -0.1021, 0.0399, 0.5432, -0.1034, 0.0302, 0.5414, -0.0959, 0.0302, 0.5408, -0.0726, 0.0399, 0.5407, -0.1021, 0.0399, 0.5432, -0.0959, 0.0302, 0.5408, -0.0688, 0, 0.5327, -0.0726, 0.0399, 0.5407, -0.0688, 0, 0.5327, -0.0959, 0.0302, 0.5408, -0.083, 0, 0.5339, 0.2528, 0, -0.2088, 0.2186, 0.0365, -0.2401, 0.2237, 0, -0.2507, 0.2186, 0.0365, -0.2401, 0.2528, 0, -0.2088, 0.2411, 0.0365, -0.2078, 0.1794, 0.0365, -0.2369, 0.1648, 0, -0.2298, 0.178, 0.0287, -0.2389, 0.1648, 0, -0.2298, 0.1794, 0.0365, -0.2369, 0.1627, 0.0365, -0.2013, 0.1648, 0, -0.2298, 0.1627, 0.0365, -0.2013, 0.1509, 0, -0.2003, 0.1799, 0.0365, -0.1764, 0.1509, 0, -0.2003, 0.1627, 0.0365, -0.2013, 0.1509, 0, -0.2003, 0.1799, 0.0365, -0.1764, 0.1673, 0, -0.1767, 0.1969, 0, 0.4869, 0.207, 0.0365, 0.4417, 0.2187, 0, 0.4407, 0.207, 0.0365, 0.4417, 0.1969, 0, 0.4869, 0.1902, 0.0365, 0.4773, 0.1991, 0, 0.4124, 0.207, 0.0365, 0.4417, 0.1865, 0.0365, 0.4121, 0.207, 0.0365, 0.4417, 0.1991, 0, 0.4124, 0.2187, 0, 0.4407, 0.155, 0, 0.3018, 0.1446, 0, 0.2086, 0.1226, 0, 0.2552, 0.1446, 0, 0.2086, 0.155, 0, 0.3018, 0.155, 0, 0.0218, 0.155, 0, 0.0218, 0.1311, 0, 0.1219, 0.1446, 0, 0.2086, 0.1446, 0, 0.2086, 0.1311, 0, 0.1219, 0.139, 0, 0.2091, 0.1311, 0, 0.1219, 0.1099, 0, 0.1671, 0.139, 0, 0.2091, 0.1311, 0, 0.1219, 0.155, 0, 0.0218, 0.1145, 0, 0.05, 0.1311, 0, 0.1219, 0.1145, 0, 0.05, 0.12, 0, 0.1167, 0.1554, 0, 0.5382, 0.155, 0, 0.0218, 0.155, 0, 0.3018, 0.1554, 0, 0.5382, 0.1673, 0, -0.1767, 0.155, 0, 0.0218, 0.155, 0, 0.0218, 0.1673, 0, -0.1767, 0.1465, 0, -0.0755, 0.1465, 0, -0.0755, 0.1226, 0, -0.0248, 0.155, 0, 0.0218, 0.1465, 0, -0.0755, 0.1673, 0, -0.1767, 0.1271, 0, -0.1487, 0.1465, 0, -0.0755, 0.1271, 0, -0.1487, 0.1327, 0, -0.082, 0.155, 0, 0.3018, 0.1262, 0, 0.5406, 0.1554, 0, 0.5382, 0.1554, 0, 0.5382, 0.1676, 0, 0.4894, 0.1673, 0, -0.1767, 0.1676, 0, 0.4894, 0.1554, 0, 0.5382, 0.174, 0, 0.4986, 0.1262, 0, 0.5406, 0.155, 0, 0.3018, 0.1377, 0, 0.405, 0.1145, 0, 0.33, 0.1377, 0, 0.405, 0.155, 0, 0.3018, 0.1377, 0, 0.405, 0.1145, 0, 0.33, 0.12, 0, 0.3967, 0.1262, 0, 0.5406, 0.1377, 0, 0.405, 0.1275, 0, 0.4645, 0.1377, 0, 0.405, 0.1169, 0, 0.4492, 0.1275, 0, 0.4645, 0.1262, 0, 0.5406, 0.1275, 0, 0.4645, 0.1056, 0, 0.4664, 0.1262, 0, 0.5406, 0.1056, 0, 0.4664, 0.1061, 0, 0.5834, 0.1061, 0, 0.5834, 0.1056, 0, 0.4664, 0.0551, 0, 0.5876, 0.0551, 0, 0.5876, 0.1056, 0, 0.4664, 0.0917, 0, 0.4957, 0.0551, 0, 0.5876, 0.0917, 0, 0.4957, 0.0478, 0, 0.4994, 0.0551, 0, 0.5876, 0.0478, 0, 0.4994, 0.0539, 0, 0.5858, 0.0539, 0, 0.5858, 0.0478, 0, 0.4994, 0.0447, 0, 0.6053, 0.0447, 0, 0.6053, 0.0478, 0, 0.4994, 0.0386, 0, 0.5189, 0.0447, 0, 0.6053, 0.0386, 0, 0.5189, -0.0063, 0, 0.6095, -0.0063, 0, 0.6095, 0.0386, 0, 0.5189, 0.0373, 0, 0.5171, -0.0063, 0, 0.6095, 0.0373, 0, 0.5171, -0.0136, 0, 0.5213, -0.0063, 0, 0.6095, -0.0136, 0, 0.5213, -0.0182, 0, 0.5922, -0.0182, 0, 0.5922, -0.0136, 0, 0.5213, -0.0203, 0, 0.5354, -0.0182, 0, 0.5922, -0.0203, 0, 0.5354, -0.0195, 0, 0.595, -0.0195, 0, 0.595, -0.0203, 0, 0.5354, -0.0578, 0, 0.5981, -0.0578, 0, 0.5981, -0.0203, 0, 0.5354, -0.025, 0, 0.5286, -0.0578, 0, 0.5981, -0.025, 0, 0.5286, -0.0634, 0, 0.5318, -0.0578, 0, 0.5981, -0.0634, 0, 0.5318, -0.0608, 0, 0.5938, -0.0608, 0, 0.5938, -0.0634, 0, 0.5318, -0.0633, 0, 0.5991, -0.0633, 0, 0.5991, -0.0634, 0, 0.5318, -0.0658, 0, 0.537, -0.0633, 0, 0.5991, -0.0658, 0, 0.537, -0.1016, 0, 0.6023, -0.1016, 0, 0.6023, -0.0658, 0, 0.537, -0.0688, 0, 0.5327, -0.1016, 0, 0.6023, -0.0688, 0, 0.5327, -0.083, 0, 0.5339, -0.1016, 0, 0.6023, -0.083, 0, 0.5339, -0.0994, 0, 0.4799, -0.0745, 0, 0.5158, -0.0994, 0, 0.4799, -0.083, 0, 0.5339, -0.1016, 0, 0.6023, -0.0994, 0, 0.4799, -0.1204, 0, 0.4817, -0.1016, 0, 0.6023, -0.1204, 0, 0.4817, -0.1173, 0, 0.5574, -0.1173, 0, 0.5574, -0.1236, 0, 0.5707, -0.1016, 0, 0.6023, -0.1173, 0, 0.5574, -0.1204, 0, 0.4817, -0.1367, 0, 0.559, -0.1367, 0, 0.559, -0.1204, 0, 0.4817, -0.1367, 0, 0.4583, -0.1367, 0, 0.4583, -0.139, 0, 0.3697, -0.1367, 0, 0.559, -0.1317, 0, 0.4579, -0.139, 0, 0.3697, -0.1367, 0, 0.4583, -0.139, 0, 0.3697, -0.1317, 0, 0.4579, -0.1099, 0, 0.4117, -0.1367, 0, 0.559, -0.139, 0, 0.3697, -0.1554, 0, 0.5319, -0.1554, 0, 0.5319, -0.139, 0, 0.3697, -0.1446, 0, 0.3702, -0.1554, 0, 0.5319, -0.1446, 0, 0.3702, -0.155, 0, 0.2769, -0.1226, 0, 0.3236, -0.155, 0, 0.2769, -0.1446, 0, 0.3702, -0.1554, 0, 0.5319, -0.155, 0, 0.2769, -0.155, 0, -0.0031, -0.155, 0, -0.0031, -0.1625, 0, -0.2939, -0.1554, 0, 0.5319, -0.1554, 0, 0.5319, -0.1625, 0, -0.2939, -0.1851, 0, 0.5344, -0.1446, 0, -0.1898, -0.1625, 0, -0.2939, -0.155, 0, -0.0031, -0.1625, 0, -0.2939, -0.1446, 0, -0.1898, -0.1226, 0, -0.2364, -0.1851, 0, 0.5344, -0.1625, 0, -0.2939, -0.1668, 0, -0.2936, -0.155, 0, -0.0031, -0.139, 0, -0.1903, -0.1446, 0, -0.1898, -0.155, 0, -0.0031, -0.1311, 0, -0.1032, -0.139, 0, -0.1903, -0.1099, 0, -0.1483, -0.139, 0, -0.1903, -0.1311, 0, -0.1032, -0.155, 0, -0.0031, -0.12, 0, -0.0979, -0.1311, 0, -0.1032, -0.12, 0, -0.0979, -0.155, 0, -0.0031, -0.1145, 0, -0.0312, -0.1446, 0, 0.0902, -0.155, 0, -0.0031, -0.155, 0, 0.2769, -0.155, 0, -0.0031, -0.1446, 0, 0.0902, -0.1226, 0, 0.0436, -0.155, 0, 0.2769, -0.139, 0, 0.0897, -0.1446, 0, 0.0902, -0.155, 0, 0.2769, -0.1311, 0, 0.1768, -0.139, 0, 0.0897, -0.1099, 0, 0.1317, -0.139, 0, 0.0897, -0.1311, 0, 0.1768, -0.155, 0, 0.2769, -0.12, 0, 0.1821, -0.1311, 0, 0.1768, -0.12, 0, 0.1821, -0.155, 0, 0.2769, -0.1145, 0, 0.2488, 0.124, 0, -0.335, 0.1005, 0, -0.2853, 0.1404, 0, -0.2277, 0.1404, 0, -0.2277, 0.1406, 0, -0.4469, 0.124, 0, -0.335, 0.124, 0, -0.335, 0.1406, 0, -0.4469, 0.0929, 0, -0.4138, 0.124, 0, -0.335, 0.0929, 0, -0.4138, 0.0985, 0, -0.3471, 0.1404, 0, -0.2277, 0.1426, 0, -0.4483, 0.1406, 0, -0.4469, 0.1404, 0, -0.2277, 0.1472, 0, -0.567, 0.1426, 0, -0.4483, 0.1472, 0, -0.567, 0.142, 0, -0.4777, 0.1426, 0, -0.4483, 0.142, 0, -0.4777, 0.1363, 0, -0.4574, 0.1426, 0, -0.4483, 0.1363, 0, -0.4574, 0.142, 0, -0.4777, 0.1345, 0, -0.4617, 0.1363, 0, -0.4574, 0.1345, 0, -0.4617, 0.1362, 0, -0.4576, 0.1362, 0, -0.4576, 0.1345, 0, -0.4617, 0.134, 0, -0.4607, 0.1404, 0, -0.2277, 0.163, 0, -0.4966, 0.1472, 0, -0.567, 0.1764, 0, -0.525, 0.1472, 0, -0.567, 0.163, 0, -0.4966, 0.142, 0, -0.4777, 0.1472, 0, -0.567, 0.1019, 0, -0.5632, 0.142, 0, -0.4777, 0.1019, 0, -0.5632, 0.1283, 0, -0.4766, 0.1283, 0, -0.4766, 0.1019, 0, -0.5632, 0.1037, 0, -0.4746, 0.1037, 0, -0.4746, 0.1019, 0, -0.5632, 0.0956, 0, -0.4862, 0.0956, 0, -0.4862, 0.1019, 0, -0.5632, 0.0798, 0, -0.5949, 0.0956, 0, -0.4862, 0.0798, 0, -0.5949, 0.0899, 0, -0.4741, 0.0899, 0, -0.4741, 0.0798, 0, -0.5949, 0.0201, 0, -0.4683, 0.0201, 0, -0.4683, 0.0798, 0, -0.5949, 0.0101, 0, -0.5891, 0.0201, 0, -0.4683, 0.0101, 0, -0.5891, -0.0023, 0, -0.5007, -0.0023, 0, -0.5007, 0.0101, 0, -0.5891, -0.0012, 0, -0.5652, -0.0023, 0, -0.5007, -0.0012, 0, -0.5652, -0.0129, 0, -0.5821, -0.0023, 0, -0.5007, -0.0129, 0, -0.5821, -0.0056, 0, -0.4939, -0.0056, 0, -0.4939, -0.0129, 0, -0.5821, -0.0565, 0, -0.4897, -0.0565, 0, -0.4897, -0.0129, 0, -0.5821, -0.0582, 0, -0.5783, -0.0565, 0, -0.4897, -0.0582, 0, -0.5783, -0.0592, 0, -0.4936, -0.0592, 0, -0.4936, -0.0582, 0, -0.5783, -0.0951, 0, -0.6095, -0.0592, 0, -0.4936, -0.0951, 0, -0.6095, -0.1026, 0, -0.478, -0.1026, 0, -0.478, -0.0951, 0, -0.6095, -0.161, 0, -0.5858, -0.1026, 0, -0.478, -0.161, 0, -0.5858, -0.1074, 0, -0.4241, -0.1026, 0, -0.478, -0.1074, 0, -0.4241, -0.0983, 0, -0.4744, -0.1074, 0, -0.4241, -0.161, 0, -0.5858, -0.1547, 0, -0.5011, -0.1547, 0, -0.5011, -0.161, 0, -0.5858, -0.1734, 0, -0.517, -0.1547, 0, -0.5011, -0.1555, 0, -0.4068, -0.1074, 0, -0.4241, -0.1555, 0, -0.4068, -0.1547, 0, -0.5011, -0.1854, 0, -0.4901, -0.1555, 0, -0.4068, -0.1854, 0, -0.4901, -0.1593, 0, -0.41, -0.1593, 0, -0.41, -0.1854, 0, -0.4901, -0.1644, 0, -0.3821, -0.1644, 0, -0.3821, -0.1854, 0, -0.4901, -0.1748, 0, -0.3187, -0.156, 0, -0.3254, -0.1644, 0, -0.3821, -0.1748, 0, -0.3187, -0.1644, 0, -0.3821, -0.156, 0, -0.3254, -0.1482, 0, -0.3684, -0.1748, 0, -0.3187, -0.1854, 0, -0.4901, -0.1851, 0, 0.5344, -0.1851, 0, 0.5344, -0.1668, 0, -0.2936, -0.1748, 0, -0.3187, -0.164, 0, -0.3095, -0.1748, 0, -0.3187, -0.1668, 0, -0.2936, -0.1851, 0, 0.5344, -0.1854, 0, -0.4901, -0.1901, 0, 0.4514, -0.1851, 0, 0.5344, -0.1901, 0, 0.4514, -0.2125, 0, 0.4949, -0.2125, 0, 0.4949, -0.1901, 0, 0.4514, -0.192, 0, 0.4515, -0.1921, 0, -0.4527, -0.1901, 0, 0.4514, -0.1854, 0, -0.4901, -0.1901, 0, 0.4514, -0.1921, 0, -0.4527, -0.1953, 0, 0.1638, -0.1953, 0, 0.1638, -0.1921, 0, -0.4527, -0.1936, 0, -0.454, -0.1901, 0, 0.4514, -0.1953, 0, 0.1638, -0.1978, 0, 0.3907, -0.1901, 0, 0.4514, -0.1978, 0, 0.3907, -0.2117, 0, 0.4202, -0.1953, 0, 0.1638, -0.2061, 0, 0.2697, -0.1978, 0, 0.3907, -0.2061, 0, 0.2697, -0.2222, 0, 0.3927, -0.1978, 0, 0.3907, -0.2222, 0, 0.3927, -0.2061, 0, 0.2697, -0.2323, 0, 0.2719, -0.2222, 0, 0.3927, -0.2323, 0, 0.2719, -0.2621, 0, 0.3352, -0.2061, 0, 0.2697, -0.1953, 0, 0.1638, -0.2355, 0, 0.1917, -0.2061, 0, 0.2697, -0.2355, 0, 0.1917, -0.23, 0, 0.2584, -0.1936, 0, -0.454, -0.1953, 0, -0.1162, -0.1953, 0, 0.1638, -0.1978, 0, 0.1107, -0.1953, 0, 0.1638, -0.1953, 0, -0.1162, -0.1953, 0, 0.1638, -0.1978, 0, 0.1107, -0.2117, 0, 0.1402, -0.1953, 0, -0.1162, -0.2061, 0, -0.0103, -0.1978, 0, 0.1107, -0.2061, 0, -0.0103, -0.2222, 0, 0.1127, -0.1978, 0, 0.1107, -0.2222, 0, 0.1127, -0.2061, 0, -0.0103, -0.2323, 0, -0.0081, -0.2222, 0, 0.1127, -0.2323, 0, -0.0081, -0.2621, 0, 0.0552, -0.2061, 0, -0.0103, -0.1953, 0, -0.1162, -0.2355, 0, -0.0883, -0.2061, 0, -0.0103, -0.2355, 0, -0.0883, -0.23, 0, -0.0216, -0.1936, 0, -0.454, -0.1978, 0, -0.1693, -0.1953, 0, -0.1162, -0.1978, 0, -0.1693, -0.2117, 0, -0.1398, -0.1953, 0, -0.1162, -0.1936, 0, -0.454, -0.2157, 0, -0.3263, -0.1978, 0, -0.1693, -0.2157, 0, -0.3263, -0.2222, 0, -0.1673, -0.1978, 0, -0.1693, -0.1936, 0, -0.454, -0.2246, 0, -0.3713, -0.2157, 0, -0.3263, -0.2246, 0, -0.3713, -0.2305, 0, -0.3389, -0.2157, 0, -0.3263, -0.2246, 0, -0.3713, -0.1936, 0, -0.454, -0.2388, 0, -0.4377, -0.2246, 0, -0.3713, -0.2388, 0, -0.4377, -0.2473, 0, -0.3905, -0.2222, 0, -0.1673, -0.2157, 0, -0.3263, -0.2295, 0, -0.3213, -0.2222, 0, -0.1673, -0.2295, 0, -0.3213, -0.235, 0, -0.2823, -0.2222, 0, -0.1673, -0.235, 0, -0.2823, -0.2621, 0, -0.2248, -0.2295, 0, -0.3213, -0.2364, 0, -0.2835, -0.235, 0, -0.2823, 0.1953, 0, 0.135, 0.1978, 0, 0.1881, 0.2117, 0, 0.1586, 0.1978, 0, 0.1881, 0.1953, 0, 0.135, 0.1969, 0, 0.4869, 0.1969, 0, 0.4869, 0.1991, 0, 0.4124, 0.1978, 0, 0.1881, 0.1991, 0, 0.4124, 0.1969, 0, 0.4869, 0.2187, 0, 0.4407, 0.1969, 0, 0.4869, 0.1953, 0, 0.135, 0.1676, 0, 0.4894, 0.2061, 0, 0.3091, 0.1978, 0, 0.1881, 0.1991, 0, 0.4124, 0.2061, 0, 0.3091, 0.2222, 0, 0.1861, 0.1978, 0, 0.1881, 0.1991, 0, 0.4124, 0.23, 0, 0.3203, 0.2061, 0, 0.3091, 0.23, 0, 0.3203, 0.1991, 0, 0.4124, 0.2355, 0, 0.3871, 0.2323, 0, 0.3069, 0.2222, 0, 0.1861, 0.2061, 0, 0.3091, 0.2222, 0, 0.1861, 0.2323, 0, 0.3069, 0.2621, 0, 0.2436, 0.1676, 0, 0.4894, 0.1953, 0, 0.135, 0.1902, 0, -0.432, 0.1676, 0, 0.4894, 0.1902, 0, -0.432, 0.1887, 0, -0.4987, 0.1676, 0, 0.4894, 0.1887, 0, -0.4987, 0.1673, 0, -0.1767, 0.1943, 0, -0.4323, 0.1887, 0, -0.4987, 0.1902, 0, -0.432, 0.1887, 0, -0.4987, 0.1943, 0, -0.4323, 0.2107, 0, -0.4671, 0.1673, 0, -0.1767, 0.1887, 0, -0.4987, 0.163, 0, -0.4966, 0.1673, 0, -0.1767, 0.163, 0, -0.4966, 0.1648, 0, -0.2298, 0.1648, 0, -0.2298, 0.163, 0, -0.4966, 0.1404, 0, -0.2277, 0.1648, 0, -0.2298, 0.1509, 0, -0.2003, 0.1673, 0, -0.1767, 0.2036, 0, -0.3494, 0.1902, 0, -0.432, 0.1953, 0, 0.135, 0.2036, 0, -0.3494, 0.2084, 0, -0.4234, 0.1902, 0, -0.432, 0.2084, 0, -0.4234, 0.2036, 0, -0.3494, 0.214, 0, -0.3567, 0.1953, 0, 0.135, 0.2061, 0, 0.0291, 0.2036, 0, -0.3494, 0.1953, 0, 0.135, 0.23, 0, 0.0403, 0.2061, 0, 0.0291, 0.23, 0, 0.0403, 0.1953, 0, 0.135, 0.2355, 0, 0.1071, 0.2181, 0, -0.2503, 0.2036, 0, -0.3494, 0.2061, 0, 0.0291, 0.2036, 0, -0.3494, 0.2181, 0, -0.2503, 0.24, 0, -0.2969, 0.2061, 0, 0.0291, 0.2237, 0, -0.2507, 0.2181, 0, -0.2503, 0.2061, 0, 0.0291, 0.2315, 0, -0.1636, 0.2237, 0, -0.2507, 0.2528, 0, -0.2088, 0.2237, 0, -0.2507, 0.2315, 0, -0.1636, 0.2061, 0, 0.0291, 0.2317, 0, -0.0802, 0.2315, 0, -0.1636, 0.2317, 0, -0.0802, 0.2426, 0, -0.1584, 0.2315, 0, -0.1636, 0.2426, 0, -0.1584, 0.2317, 0, -0.0802, 0.2482, 0, -0.0916, 0.2323, 0, 0.0269, 0.2317, 0, -0.0802, 0.2061, 0, 0.0291, 0.2317, 0, -0.0802, 0.2323, 0, 0.0269, 0.2621, 0, -0.0364, 0.1454, 0.0365, 0.4126, 0.1377, 0, 0.405, 0.1398, 0.0062, 0.4046, 0.1377, 0, 0.405, 0.1454, 0.0365, 0.4126, 0.1169, 0, 0.4492, 0.1169, 0, 0.4492, 0.1454, 0.0365, 0.4126, 0.1286, 0.0365, 0.4482, 0.1902, 0.0365, 0.4773, 0.1865, 0.0365, 0.4121, 0.207, 0.0365, 0.4417, 0.1865, 0.0365, 0.4121, 0.1902, 0.0365, 0.4773, 0.151, 0.0365, 0.4805, 0.1865, 0.0365, 0.4121, 0.151, 0.0365, 0.4805, 0.1798, 0.0365, 0.4167, 0.1798, 0.0365, 0.4167, 0.151, 0.0365, 0.4805, 0.1674, 0.0365, 0.4108, 0.1674, 0.0365, 0.4108, 0.151, 0.0365, 0.4805, 0.1454, 0.0365, 0.4126, 0.1454, 0.0365, 0.4126, 0.151, 0.0365, 0.4805, 0.1286, 0.0365, 0.4482, 0.1616, 0.05, -0.0749, 0.1465, 0, -0.0755, 0.1595, 0.0383, -0.078, 0.1465, 0, -0.0755, 0.1616, 0.05, -0.0749, 0.1226, 0, -0.0248, 0.1226, 0, -0.0248, 0.1616, 0.05, -0.0749, 0.1387, 0.05, -0.0262, 0.2317, 0, -0.0802, 0.2154, 0.05, -0.0794, 0.2159, 0.0458, -0.0806, 0.2154, 0.05, -0.0794, 0.2317, 0, -0.0802, 0.2621, 0, -0.0364, 0.2154, 0.05, -0.0794, 0.2621, 0, -0.0364, 0.2461, 0.05, -0.0351, 0.1694, 0.05, 0.0181, 0.1226, 0, -0.0248, 0.1387, 0.05, -0.0262, 0.1226, 0, -0.0248, 0.1694, 0.05, 0.0181, 0.155, 0, 0.0218, 0.155, 0, 0.0218, 0.1694, 0.05, 0.0181, 0.1675, 0.0363, 0.0221, 0.2323, 0, 0.0269, 0.2461, 0.05, -0.0351, 0.2621, 0, -0.0364, 0.2461, 0.05, -0.0351, 0.2323, 0, 0.0269, 0.2231, 0.05, 0.0137, 0.2231, 0.05, 0.0137, 0.2154, 0.05, -0.0794, 0.2461, 0.05, -0.0351, 0.2154, 0.05, -0.0794, 0.2231, 0.05, 0.0137, 0.1694, 0.05, 0.0181, 0.2154, 0.05, -0.0794, 0.1694, 0.05, 0.0181, 0.2123, 0.05, -0.0791, 0.2123, 0.05, -0.0791, 0.1694, 0.05, 0.0181, 0.1922, 0.05, -0.0652, 0.1922, 0.05, -0.0652, 0.1694, 0.05, 0.0181, 0.1701, 0.05, -0.0756, 0.1701, 0.05, -0.0756, 0.1694, 0.05, 0.0181, 0.1616, 0.05, -0.0749, 0.1616, 0.05, -0.0749, 0.1694, 0.05, 0.0181, 0.1387, 0.05, -0.0262, 0.1616, 0.05, 0.2051, 0.1446, 0, 0.2086, 0.1577, 0.0287, 0.1995, 0.1446, 0, 0.2086, 0.1616, 0.05, 0.2051, 0.1387, 0.05, 0.2538, 0.1446, 0, 0.2086, 0.1387, 0.05, 0.2538, 0.1226, 0, 0.2552, 0.1694, 0.05, 0.2981, 0.1226, 0, 0.2552, 0.1387, 0.05, 0.2538, 0.1226, 0, 0.2552, 0.1694, 0.05, 0.2981, 0.155, 0, 0.3018, 0.155, 0, 0.3018, 0.1694, 0.05, 0.2981, 0.1675, 0.0363, 0.3021, 0.2231, 0.05, 0.2937, 0.2154, 0.05, 0.2006, 0.2461, 0.05, 0.2449, 0.2154, 0.05, 0.2006, 0.2231, 0.05, 0.2937, 0.1694, 0.05, 0.2981, 0.2154, 0.05, 0.2006, 0.1694, 0.05, 0.2981, 0.1616, 0.05, 0.2051, 0.1616, 0.05, 0.2051, 0.1694, 0.05, 0.2981, 0.1387, 0.05, 0.2538, 0.2621, 0, 0.2436, 0.2154, 0.05, 0.2006, 0.2222, 0, 0.1861, 0.2154, 0.05, 0.2006, 0.2621, 0, 0.2436, 0.2461, 0.05, 0.2449, 0.2323, 0, 0.3069, 0.2461, 0.05, 0.2449, 0.2621, 0, 0.2436, 0.2461, 0.05, 0.2449, 0.2323, 0, 0.3069, 0.2231, 0.05, 0.2937, 0.2482, 0, -0.0916, 0.23, 0.0655, -0.1496, 0.2426, 0, -0.1584, 0.23, 0.0655, -0.1496, 0.2482, 0, -0.0916, 0.2343, 0.0655, -0.0982, 0.141, 0.0655, -0.1422, 0.1327, 0, -0.082, 0.1271, 0, -0.1487, 0.1327, 0, -0.082, 0.141, 0.0655, -0.1422, 0.1453, 0.0655, -0.0908, 0.1919, 0.0655, -0.0688, 0.23, 0.0655, -0.1496, 0.2343, 0.0655, -0.0982, 0.23, 0.0655, -0.1496, 0.1919, 0.0655, -0.0688, 0.1834, 0.0655, -0.1716, 0.1834, 0.0655, -0.1716, 0.1919, 0.0655, -0.0688, 0.1453, 0.0655, -0.0908, 0.1834, 0.0655, -0.1716, 0.1453, 0.0655, -0.0908, 0.141, 0.0655, -0.1422, 0.1453, 0.0655, -0.0908, 0.1465, 0, -0.0755, 0.1327, 0, -0.082, 0.1465, 0, -0.0755, 0.1453, 0.0655, -0.0908, 0.1595, 0.0383, -0.078, 0.1595, 0.0383, -0.078, 0.1453, 0.0655, -0.0908, 0.1701, 0.05, -0.0756, 0.1701, 0.05, -0.0756, 0.1453, 0.0655, -0.0908, 0.1922, 0.05, -0.0652, 0.1922, 0.05, -0.0652, 0.1453, 0.0655, -0.0908, 0.1919, 0.0655, -0.0688, 0.2001, 0.0365, -0.1702, 0.1834, 0.0655, -0.1716, 0.1828, 0.0365, -0.1784, 0.2001, 0.0365, -0.1702, 0.23, 0.0655, -0.1496, 0.1834, 0.0655, -0.1716, 0.2304, 0.0033, -0.1634, 0.23, 0.0655, -0.1496, 0.2001, 0.0365, -0.1702, 0.2304, 0.0033, -0.1634, 0.2426, 0, -0.1584, 0.23, 0.0655, -0.1496, 0.2426, 0, -0.1584, 0.2304, 0.0033, -0.1634, 0.2315, 0, -0.1636, 0.1384, 0.0365, 0.1305, 0.1311, 0, 0.1219, 0.1323, 0.0033, 0.1217, 0.1311, 0, 0.1219, 0.1384, 0.0365, 0.1305, 0.1099, 0, 0.1671, 0.1099, 0, 0.1671, 0.1384, 0.0365, 0.1305, 0.1216, 0.0365, 0.1661, 0.144, 0.0365, 0.1984, 0.1099, 0, 0.1671, 0.1216, 0.0365, 0.1661, 0.1099, 0, 0.1671, 0.144, 0.0365, 0.1984, 0.139, 0, 0.2091, 0.1953, 0, 0.135, 0.2, 0.0365, 0.1596, 0.1827, 0.0365, 0.1347, 0.2, 0.0365, 0.1596, 0.1953, 0, 0.135, 0.2117, 0, 0.1586, 0.1832, 0.0365, 0.1952, 0.1827, 0.0365, 0.1347, 0.2, 0.0365, 0.1596, 0.1827, 0.0365, 0.1347, 0.1832, 0.0365, 0.1952, 0.144, 0.0365, 0.1984, 0.1827, 0.0365, 0.1347, 0.144, 0.0365, 0.1984, 0.1798, 0.0365, 0.1367, 0.1798, 0.0365, 0.1367, 0.144, 0.0365, 0.1984, 0.1625, 0.0365, 0.1285, 0.1625, 0.0365, 0.1285, 0.144, 0.0365, 0.1984, 0.1384, 0.0365, 0.1305, 0.1384, 0.0365, 0.1305, 0.144, 0.0365, 0.1984, 0.1216, 0.0365, 0.1661, -0.2154, 0.05, -0.1819, -0.2621, 0, -0.2248, -0.2461, 0.05, -0.2262, -0.2621, 0, -0.2248, -0.2154, 0.05, -0.1819, -0.2222, 0, -0.1673, -0.2182, 0.0399, -0.2782, -0.2231, 0.05, -0.2749, -0.2282, 0.0225, -0.2822, -0.2182, 0.0399, -0.2782, -0.1694, 0.05, -0.2794, -0.2231, 0.05, -0.2749, -0.1768, 0.0399, -0.2816, -0.1694, 0.05, -0.2794, -0.2182, 0.0399, -0.2782, -0.1768, 0.0399, -0.2816, -0.1625, 0, -0.2939, -0.1694, 0.05, -0.2794, -0.1625, 0, -0.2939, -0.1768, 0.0399, -0.2816, -0.1668, 0, -0.2936, -0.1226, 0, -0.2364, -0.1694, 0.05, -0.2794, -0.1625, 0, -0.2939, -0.1694, 0.05, -0.2794, -0.1226, 0, -0.2364, -0.1387, 0.05, -0.2351, -0.1616, 0.05, -0.1863, -0.1694, 0.05, -0.2794, -0.1387, 0.05, -0.2351, -0.1694, 0.05, -0.2794, -0.1616, 0.05, -0.1863, -0.2154, 0.05, -0.1819, -0.1694, 0.05, -0.2794, -0.2154, 0.05, -0.1819, -0.2231, 0.05, -0.2749, -0.2231, 0.05, -0.2749, -0.2154, 0.05, -0.1819, -0.2461, 0.05, -0.2262, 0.2355, 0, 0.3871, 0.2173, 0.0655, 0.3291, 0.23, 0, 0.3203, 0.2173, 0.0655, 0.3291, 0.2355, 0, 0.3871, 0.2216, 0.0655, 0.3805, 0.155, 0, 0.3018, 0.1284, 0.0655, 0.3365, 0.1145, 0, 0.33, 0.1284, 0.0655, 0.3365, 0.155, 0, 0.3018, 0.1675, 0.0363, 0.3021, 0.1284, 0.0655, 0.3365, 0.1675, 0.0363, 0.3021, 0.1702, 0.0394, 0.301, 0.1284, 0.0655, 0.3365, 0.1702, 0.0394, 0.301, 0.1707, 0.0655, 0.3071, 0.1284, 0.0655, 0.3365, 0.12, 0, 0.3967, 0.1145, 0, 0.33, 0.12, 0, 0.3967, 0.1284, 0.0655, 0.3365, 0.1327, 0.0655, 0.3879, 0.1793, 0.0655, 0.4099, 0.2173, 0.0655, 0.3291, 0.2216, 0.0655, 0.3805, 0.2173, 0.0655, 0.3291, 0.1793, 0.0655, 0.4099, 0.1707, 0.0655, 0.3071, 0.1707, 0.0655, 0.3071, 0.1793, 0.0655, 0.4099, 0.1327, 0.0655, 0.3879, 0.1707, 0.0655, 0.3071, 0.1327, 0.0655, 0.3879, 0.1284, 0.0655, 0.3365, -0.1832, 0.0365, -0.1764, -0.1978, 0, -0.1693, -0.1846, 0.0287, -0.1785, -0.1978, 0, -0.1693, -0.1832, 0.0365, -0.1764, -0.2, 0.0365, -0.1408, -0.1978, 0, -0.1693, -0.2, 0.0365, -0.1408, -0.2117, 0, -0.1398, -0.1099, 0, -0.1483, -0.144, 0.0365, -0.1797, -0.139, 0, -0.1903, -0.144, 0.0365, -0.1797, -0.1099, 0, -0.1483, -0.1216, 0.0365, -0.1473, -0.139, 0, -0.1903, -0.1577, 0.0287, -0.1807, -0.1446, 0, -0.1898, -0.1577, 0.0287, -0.1807, -0.139, 0, -0.1903, -0.144, 0.0365, -0.1797, -0.1577, 0.0287, -0.1807, -0.144, 0.0365, -0.1797, -0.1846, 0.0287, -0.1785, -0.1846, 0.0287, -0.1785, -0.144, 0.0365, -0.1797, -0.1832, 0.0365, -0.1764, 0.1284, 0.0655, 0.0565, 0.12, 0, 0.1167, 0.1145, 0, 0.05, 0.12, 0, 0.1167, 0.1284, 0.0655, 0.0565, 0.1327, 0.0655, 0.1079, 0.155, 0, 0.0218, 0.1284, 0.0655, 0.0565, 0.1145, 0, 0.05, 0.1284, 0.0655, 0.0565, 0.155, 0, 0.0218, 0.1675, 0.0363, 0.0221, 0.1284, 0.0655, 0.0565, 0.1675, 0.0363, 0.0221, 0.1702, 0.0394, 0.021, 0.1284, 0.0655, 0.0565, 0.1702, 0.0394, 0.021, 0.1707, 0.0655, 0.0271, 0.1793, 0.0655, 0.1299, 0.2173, 0.0655, 0.0491, 0.2216, 0.0655, 0.1005, 0.2173, 0.0655, 0.0491, 0.1793, 0.0655, 0.1299, 0.1707, 0.0655, 0.0271, 0.1707, 0.0655, 0.0271, 0.1793, 0.0655, 0.1299, 0.1327, 0.0655, 0.1079, 0.1707, 0.0655, 0.0271, 0.1327, 0.0655, 0.1079, 0.1284, 0.0655, 0.0565, 0.2355, 0, 0.1071, 0.2173, 0.0655, 0.0491, 0.23, 0, 0.0403, 0.2173, 0.0655, 0.0491, 0.2355, 0, 0.1071, 0.2216, 0.0655, 0.1005, 0.1473, 0.05, -0.2423, 0.1005, 0, -0.2853, 0.1166, 0.05, -0.2866, 0.1005, 0, -0.2853, 0.1473, 0.05, -0.2423, 0.1404, 0, -0.2277, -0.1846, 0.0287, -0.1785, -0.1616, 0.05, -0.1863, -0.1577, 0.0287, -0.1807, -0.1846, 0.0287, -0.1785, -0.2154, 0.05, -0.1819, -0.1616, 0.05, -0.1863, -0.1846, 0.0287, -0.1785, -0.2222, 0, -0.1673, -0.2154, 0.05, -0.1819, -0.2222, 0, -0.1673, -0.1846, 0.0287, -0.1785, -0.1978, 0, -0.1693, -0.1446, 0, -0.1898, -0.1387, 0.05, -0.2351, -0.1226, 0, -0.2364, -0.1387, 0.05, -0.2351, -0.1446, 0, -0.1898, -0.1616, 0.05, -0.1863, -0.1616, 0.05, -0.1863, -0.1446, 0, -0.1898, -0.1577, 0.0287, -0.1807, 0.1625, 0.0365, 0.1285, 0.1793, 0.0655, 0.1299, 0.1798, 0.0365, 0.1367, 0.1625, 0.0365, 0.1285, 0.1327, 0.0655, 0.1079, 0.1793, 0.0655, 0.1299, 0.1323, 0.0033, 0.1217, 0.1327, 0.0655, 0.1079, 0.1625, 0.0365, 0.1285, 0.1323, 0.0033, 0.1217, 0.12, 0, 0.1167, 0.1327, 0.0655, 0.1079, 0.12, 0, 0.1167, 0.1323, 0.0033, 0.1217, 0.1311, 0, 0.1219, 0.2222, 0, 0.1861, 0.1846, 0.0287, 0.1972, 0.1978, 0, 0.1881, 0.1846, 0.0287, 0.1972, 0.2222, 0, 0.1861, 0.2154, 0.05, 0.2006, 0.1846, 0.0287, 0.1972, 0.2154, 0.05, 0.2006, 0.1577, 0.0287, 0.1995, 0.1577, 0.0287, 0.1995, 0.2154, 0.05, 0.2006, 0.1616, 0.05, 0.2051, 0.1404, 0, -0.2277, 0.178, 0.0287, -0.2389, 0.1648, 0, -0.2298, 0.178, 0.0287, -0.2389, 0.1404, 0, -0.2277, 0.1473, 0.05, -0.2423, 0.178, 0.0287, -0.2389, 0.1473, 0.05, -0.2423, 0.2049, 0.0287, -0.2412, 0.2049, 0.0287, -0.2412, 0.1473, 0.05, -0.2423, 0.201, 0.05, -0.2468, 0.1673, 0, -0.1767, 0.141, 0.0655, -0.1422, 0.1271, 0, -0.1487, 0.141, 0.0655, -0.1422, 0.1673, 0, -0.1767, 0.1799, 0.0365, -0.1764, 0.141, 0.0655, -0.1422, 0.1799, 0.0365, -0.1764, 0.1828, 0.0365, -0.1784, 0.141, 0.0655, -0.1422, 0.1828, 0.0365, -0.1784, 0.1834, 0.0655, -0.1716, 0.2049, 0.0287, -0.2412, 0.1794, 0.0365, -0.2369, 0.178, 0.0287, -0.2389, 0.2049, 0.0287, -0.2412, 0.2186, 0.0365, -0.2401, 0.1794, 0.0365, -0.2369, 0.2049, 0.0287, -0.2412, 0.2237, 0, -0.2507, 0.2186, 0.0365, -0.2401, 0.2237, 0, -0.2507, 0.2049, 0.0287, -0.2412, 0.2181, 0, -0.2503, 0.12, 0, 0.3967, 0.1398, 0.0062, 0.4046, 0.1377, 0, 0.405, 0.1398, 0.0062, 0.4046, 0.12, 0, 0.3967, 0.1327, 0.0655, 0.3879, 0.1398, 0.0062, 0.4046, 0.1327, 0.0655, 0.3879, 0.1674, 0.0365, 0.4108, 0.1674, 0.0365, 0.4108, 0.1327, 0.0655, 0.3879, 0.1798, 0.0365, 0.4167, 0.1798, 0.0365, 0.4167, 0.1327, 0.0655, 0.3879, 0.1793, 0.0655, 0.4099, -0.0599, 0.0223, 0.5818, -0.0557, 0.0399, 0.5651, -0.0519, 0.0223, 0.5647, -0.0557, 0.0399, 0.5651, -0.0599, 0.0223, 0.5818, -0.0684, 0.0399, 0.5918, -0.0684, 0.0399, 0.5918, -0.0599, 0.0223, 0.5818, -0.0608, 0, 0.5938, -0.0684, 0.0399, 0.5918, -0.0608, 0, 0.5938, -0.0633, 0, 0.5991, 0.0939, 0.0365, -0.5065, 0.1037, 0.05, -0.5361, 0.108, 0.0365, -0.5365, 0.1037, 0.05, -0.5361, 0.0939, 0.0365, -0.5065, 0.0807, 0.05, -0.4873, 0.0807, 0.05, -0.4873, 0.0939, 0.0365, -0.5065, 0.0956, 0, -0.4862, 0.0807, 0.05, -0.4873, 0.0956, 0, -0.4862, 0.0899, 0, -0.4741, -0.1734, 0, -0.517, -0.1389, 0.0287, -0.4983, -0.1547, 0, -0.5011, -0.1389, 0.0287, -0.4983, -0.1734, 0, -0.517, -0.1583, 0.05, -0.5224, -0.1389, 0.0287, -0.4983, -0.1583, 0.05, -0.5224, -0.1183, 0.0287, -0.4808, -0.1183, 0.0287, -0.4808, -0.1583, 0.05, -0.5224, -0.1171, 0.05, -0.4876, -0.1846, 0.0287, 0.3815, -0.1616, 0.05, 0.3737, -0.1577, 0.0287, 0.3793, -0.1846, 0.0287, 0.3815, -0.2154, 0.05, 0.3781, -0.1616, 0.05, 0.3737, -0.1846, 0.0287, 0.3815, -0.2222, 0, 0.3927, -0.2154, 0.05, 0.3781, -0.2222, 0, 0.3927, -0.1846, 0.0287, 0.3815, -0.1978, 0, 0.3907, 0.0601, 0.0485, 0.577, 0.0348, 0.0365, 0.5449, 0.0377, 0.0485, 0.5446, 0.0348, 0.0365, 0.5449, 0.0601, 0.0485, 0.577, 0.0509, 0.0365, 0.5681, 0.0509, 0.0365, 0.5681, 0.0601, 0.0485, 0.577, 0.0539, 0, 0.5858, 0.0539, 0, 0.5858, 0.0601, 0.0485, 0.577, 0.0551, 0, 0.5876, -0.0182, 0, 0.5922, -0.0245, 0.0223, 0.5877, -0.0202, 0.0223, 0.5785, -0.0245, 0.0223, 0.5877, -0.0182, 0, 0.5922, -0.0195, 0, 0.595, 0.2061, 0, 0.0291, 0.2231, 0.05, 0.0137, 0.2323, 0, 0.0269, 0.2231, 0.05, 0.0137, 0.2061, 0, 0.0291, 0.1702, 0.0394, 0.021, 0.1702, 0.0394, 0.021, 0.1694, 0.05, 0.0181, 0.2231, 0.05, 0.0137, 0.1694, 0.05, 0.0181, 0.1702, 0.0394, 0.021, 0.1675, 0.0363, 0.0221, -0.2061, 0, 0.2697, -0.2231, 0.05, 0.2851, -0.2323, 0, 0.2719, -0.2231, 0.05, 0.2851, -0.2061, 0, 0.2697, -0.1702, 0.0394, 0.2777, -0.1702, 0.0394, 0.2777, -0.1694, 0.05, 0.2806, -0.2231, 0.05, 0.2851, -0.1694, 0.05, 0.2806, -0.1702, 0.0394, 0.2777, -0.1675, 0.0363, 0.2766, 0.1577, 0.0287, 0.1995, 0.1832, 0.0365, 0.1952, 0.1846, 0.0287, 0.1972, 0.1577, 0.0287, 0.1995, 0.144, 0.0365, 0.1984, 0.1832, 0.0365, 0.1952, 0.1577, 0.0287, 0.1995, 0.139, 0, 0.2091, 0.144, 0.0365, 0.1984, 0.139, 0, 0.2091, 0.1577, 0.0287, 0.1995, 0.1446, 0, 0.2086, -0.0515, 0.0365, -0.5003, -0.0576, 0.0145, -0.4984, -0.0611, 0.0365, -0.5141, -0.0576, 0.0145, -0.4984, -0.0515, 0.0365, -0.5003, -0.0565, 0, -0.4897, -0.0576, 0.0145, -0.4984, -0.0565, 0, -0.4897, -0.0592, 0, -0.4936, -0.1734, 0.0302, -0.3783, -0.1739, 0.0562, -0.3828, -0.1684, 0.0194, -0.3782, -0.1739, 0.0562, -0.3828, -0.1734, 0.0302, -0.3783, -0.2096, 0.0302, -0.3653, -0.1739, 0.0562, -0.3828, -0.2096, 0.0302, -0.3653, -0.2087, 0.0562, -0.3703, 0.1169, 0, 0.4492, 0.143, 0.0302, 0.472, 0.1275, 0, 0.4645, 0.1286, 0.0365, 0.4482, 0.143, 0.0302, 0.472, 0.1169, 0, 0.4492, 0.143, 0.0302, 0.472, 0.1286, 0.0365, 0.4482, 0.151, 0.0365, 0.4805, 0.143, 0.0302, 0.472, 0.151, 0.0365, 0.4805, 0.1502, 0.0302, 0.4824, 0.1676, 0, 0.4894, 0.164, 0.0302, 0.4995, 0.152, 0.0302, 0.4822, 0.164, 0.0302, 0.4995, 0.1676, 0, 0.4894, 0.174, 0, 0.4986, -0.1748, 0, -0.3187, -0.1637, 0.0302, -0.3319, -0.156, 0, -0.3254, -0.1637, 0.0302, -0.3319, -0.1748, 0, -0.3187, -0.1888, 0.0302, -0.3229, 0.23, 0, 0.3203, 0.1702, 0.0394, 0.301, 0.2061, 0, 0.3091, 0.1702, 0.0394, 0.301, 0.23, 0, 0.3203, 0.2173, 0.0655, 0.3291, 0.1702, 0.0394, 0.301, 0.2173, 0.0655, 0.3291, 0.1707, 0.0655, 0.3071, 0.0973, 0.0302, 0.5042, 0.0937, 0.0485, 0.5058, 0.0965, 0.0212, 0.4998, 0.0937, 0.0485, 0.5058, 0.0973, 0.0302, 0.5042, 0.117, 0.0302, 0.5326, 0.0937, 0.0485, 0.5058, 0.117, 0.0302, 0.5326, 0.1161, 0.0485, 0.5381, 0.1161, 0.0485, 0.5381, 0.117, 0.0302, 0.5326, 0.1251, 0.0115, 0.5374, -0.1593, 0, -0.41, -0.1534, 0.0365, -0.4184, -0.1555, 0, -0.4068, -0.1534, 0.0365, -0.4184, -0.1593, 0, -0.41, -0.1616, 0.0253, -0.4213, -0.1534, 0.0365, -0.4184, -0.1616, 0.0253, -0.4213, -0.1868, 0.0253, -0.4426, -0.1534, 0.0365, -0.4184, -0.1868, 0.0253, -0.4426, -0.1834, 0.0365, -0.4438, -0.1183, 0.0287, -0.4808, -0.1394, 0.0365, -0.4958, -0.1389, 0.0287, -0.4983, -0.1183, 0.0287, -0.4808, -0.1093, 0.0365, -0.4704, -0.1394, 0.0365, -0.4958, -0.1183, 0.0287, -0.4808, -0.0983, 0, -0.4744, -0.1093, 0.0365, -0.4704, -0.0983, 0, -0.4744, -0.1183, 0.0287, -0.4808, -0.1026, 0, -0.478, -0.1921, 0, -0.4527, -0.1956, 0.0562, -0.4431, -0.1936, 0, -0.454, -0.1956, 0.0562, -0.4431, -0.1921, 0, -0.4527, -0.1868, 0.0253, -0.4426, -0.1956, 0.0562, -0.4431, -0.1868, 0.0253, -0.4426, -0.1616, 0.0253, -0.4213, -0.1956, 0.0562, -0.4431, -0.1616, 0.0253, -0.4213, -0.1674, 0.0562, -0.4192, 0.0193, 0.05, -0.5759, -0.0012, 0, -0.5652, 0.0101, 0, -0.5891, -0.0012, 0, -0.5652, 0.0193, 0.05, -0.5759, 0.0005, 0.0365, -0.5449, 0.0005, 0.0365, -0.5449, 0.0193, 0.05, -0.5759, -0.0037, 0.05, -0.5272, 0.0005, 0.0365, -0.5449, -0.0037, 0.05, -0.5272, -0.0081, 0.0365, -0.5268, -0.1482, 0, -0.3684, -0.1684, 0.0194, -0.3782, -0.1644, 0, -0.3821, -0.1684, 0.0194, -0.3782, -0.1482, 0, -0.3684, -0.1577, 0.0302, -0.365, -0.1684, 0.0194, -0.3782, -0.1577, 0.0302, -0.365, -0.1734, 0.0302, -0.3783, -0.139, 0, 0.3697, -0.1577, 0.0287, 0.3793, -0.1446, 0, 0.3702, -0.1577, 0.0287, 0.3793, -0.139, 0, 0.3697, -0.144, 0.0365, 0.3803, -0.1577, 0.0287, 0.3793, -0.144, 0.0365, 0.3803, -0.1846, 0.0287, 0.3815, -0.1846, 0.0287, 0.3815, -0.144, 0.0365, 0.3803, -0.1832, 0.0365, 0.3836, 0.1262, 0, 0.5406, 0.1497, 0.0302, 0.5299, 0.1554, 0, 0.5382, 0.1497, 0.0302, 0.5299, 0.1262, 0, 0.5406, 0.1251, 0.0115, 0.5374, 0.1497, 0.0302, 0.5299, 0.1251, 0.0115, 0.5374, 0.117, 0.0302, 0.5326, -0.23, 0, -0.0216, -0.1702, 0.0394, -0.0023, -0.2061, 0, -0.0103, -0.1702, 0.0394, -0.0023, -0.23, 0, -0.0216, -0.2173, 0.0655, -0.0304, -0.1702, 0.0394, -0.0023, -0.2173, 0.0655, -0.0304, -0.1707, 0.0655, -0.0084, -0.0012, 0.0365, 0.5989, -0.0282, 0.0223, 0.5669, -0.0237, 0.0365, 0.5665, -0.0282, 0.0223, 0.5669, -0.0012, 0.0365, 0.5989, -0.0202, 0.0223, 0.5785, -0.0202, 0.0223, 0.5785, -0.0012, 0.0365, 0.5989, -0.0182, 0, 0.5922, -0.0182, 0, 0.5922, -0.0012, 0.0365, 0.5989, -0.0063, 0, 0.6095, -0.0583, 0.0223, 0.539, -0.0658, 0, 0.537, -0.0634, 0, 0.5318, -0.0658, 0, 0.537, -0.0583, 0.0223, 0.539, -0.0629, 0.0223, 0.5488, -0.1851, 0, 0.5344, -0.1488, 0.0302, 0.5262, -0.1554, 0, 0.5319, -0.1488, 0.0302, 0.5262, -0.1851, 0, 0.5344, -0.1804, 0.0562, 0.5244, -0.1488, 0.0302, 0.5262, -0.1804, 0.0562, 0.5244, -0.1406, 0.0302, 0.5255, -0.1406, 0.0302, 0.5255, -0.1804, 0.0562, 0.5244, -0.1435, 0.0562, 0.5213, -0.1953, 0, 0.1638, -0.2216, 0.0655, 0.1983, -0.2355, 0, 0.1917, -0.2216, 0.0655, 0.1983, -0.1953, 0, 0.1638, -0.1827, 0.0365, 0.1641, -0.2216, 0.0655, 0.1983, -0.1827, 0.0365, 0.1641, -0.1798, 0.0365, 0.1621, -0.2216, 0.0655, 0.1983, -0.1798, 0.0365, 0.1621, -0.1793, 0.0655, 0.1689, -0.1367, 0, 0.4583, -0.1384, 0.0365, 0.4482, -0.1317, 0, 0.4579, -0.1384, 0.0365, 0.4482, -0.1367, 0, 0.4583, -0.1463, 0.0253, 0.452, -0.1463, 0.0253, 0.452, -0.1776, 0.0365, 0.4515, -0.1384, 0.0365, 0.4482, -0.1776, 0.0365, 0.4515, -0.1463, 0.0253, 0.452, -0.1791, 0.0253, 0.4548, 0.1395, 0.05, -0.3353, 0.124, 0, -0.335, 0.1379, 0.0411, -0.3377, 0.124, 0, -0.335, 0.1395, 0.05, -0.3353, 0.1166, 0.05, -0.2866, 0.124, 0, -0.335, 0.1166, 0.05, -0.2866, 0.1005, 0, -0.2853, -0.083, 0, 0.5339, -0.0845, 0.0302, 0.5167, -0.0745, 0, 0.5158, -0.0845, 0.0302, 0.5167, -0.083, 0, 0.5339, -0.0959, 0.0302, 0.5408, -0.1901, 0, 0.4514, -0.1857, 0.0562, 0.4606, -0.192, 0, 0.4515, -0.1857, 0.0562, 0.4606, -0.1901, 0, 0.4514, -0.1791, 0.0253, 0.4548, -0.1857, 0.0562, 0.4606, -0.1791, 0.0253, 0.4548, -0.1463, 0.0253, 0.452, -0.1857, 0.0562, 0.4606, -0.1463, 0.0253, 0.452, -0.1489, 0.0562, 0.4575, -0.1827, 0.0365, -0.1159, -0.2117, 0, -0.1398, -0.2, 0.0365, -0.1408, -0.2117, 0, -0.1398, -0.1827, 0.0365, -0.1159, -0.1953, 0, -0.1162, -0.155, 0, 0.2769, -0.1694, 0.05, 0.2806, -0.1675, 0.0363, 0.2766, -0.1694, 0.05, 0.2806, -0.155, 0, 0.2769, -0.1226, 0, 0.3236, -0.1694, 0.05, 0.2806, -0.1226, 0, 0.3236, -0.1387, 0.05, 0.3249, 0.2061, 0, 0.3091, 0.2231, 0.05, 0.2937, 0.2323, 0, 0.3069, 0.2231, 0.05, 0.2937, 0.2061, 0, 0.3091, 0.1702, 0.0394, 0.301, 0.1702, 0.0394, 0.301, 0.1694, 0.05, 0.2981, 0.2231, 0.05, 0.2937, 0.1694, 0.05, 0.2981, 0.1702, 0.0394, 0.301, 0.1675, 0.0363, 0.3021, 0.146, 0.05, -0.3359, 0.1577, 0.0655, -0.3339, 0.158, 0.05, -0.3302, 0.146, 0.05, -0.3359, 0.1111, 0.0655, -0.3559, 0.1577, 0.0655, -0.3339, 0.1379, 0.0411, -0.3377, 0.1111, 0.0655, -0.3559, 0.146, 0.05, -0.3359, 0.1379, 0.0411, -0.3377, 0.0985, 0, -0.3471, 0.1111, 0.0655, -0.3559, 0.0985, 0, -0.3471, 0.1379, 0.0411, -0.3377, 0.124, 0, -0.335, 0.1275, 0, 0.4645, 0.1113, 0.0302, 0.4746, 0.1056, 0, 0.4664, 0.1113, 0.0302, 0.4746, 0.1275, 0, 0.4645, 0.143, 0.0302, 0.472, -0.1311, 0, -0.1032, -0.1216, 0.0365, -0.1473, -0.1099, 0, -0.1483, -0.1216, 0.0365, -0.1473, -0.1311, 0, -0.1032, -0.1384, 0.0365, -0.1118, -0.1384, 0.0365, -0.1118, -0.1311, 0, -0.1032, -0.1323, 0.0033, -0.103, -0.1953, 0, -0.1162, -0.2216, 0.0655, -0.0817, -0.2355, 0, -0.0883, -0.2216, 0.0655, -0.0817, -0.1953, 0, -0.1162, -0.1827, 0.0365, -0.1159, -0.2216, 0.0655, -0.0817, -0.1827, 0.0365, -0.1159, -0.1798, 0.0365, -0.1179, -0.2216, 0.0655, -0.0817, -0.1798, 0.0365, -0.1179, -0.1793, 0.0655, -0.1111, -0.1625, 0.0365, -0.1098, -0.1793, 0.0655, -0.1111, -0.1798, 0.0365, -0.1179, -0.1625, 0.0365, -0.1098, -0.1327, 0.0655, -0.0891, -0.1793, 0.0655, -0.1111, -0.1323, 0.0033, -0.103, -0.1327, 0.0655, -0.0891, -0.1625, 0.0365, -0.1098, -0.1323, 0.0033, -0.103, -0.12, 0, -0.0979, -0.1327, 0.0655, -0.0891, -0.12, 0, -0.0979, -0.1323, 0.0033, -0.103, -0.1311, 0, -0.1032, 0.1979, 0.0165, -0.3496, 0.214, 0, -0.3567, 0.2036, 0, -0.3494, 0.214, 0, -0.3567, 0.1979, 0.0165, -0.3496, 0.2001, 0.0655, -0.3633, 0.2001, 0.0655, -0.3633, 0.1979, 0.0165, -0.3496, 0.1689, 0.05, -0.3378, 0.2001, 0.0655, -0.3633, 0.1689, 0.05, -0.3378, 0.158, 0.05, -0.3302, 0.2001, 0.0655, -0.3633, 0.158, 0.05, -0.3302, 0.1577, 0.0655, -0.3339, -0.1577, 0.0287, 0.0993, -0.1832, 0.0365, 0.1036, -0.1846, 0.0287, 0.1015, -0.1577, 0.0287, 0.0993, -0.144, 0.0365, 0.1003, -0.1832, 0.0365, 0.1036, -0.1577, 0.0287, 0.0993, -0.139, 0, 0.0897, -0.144, 0.0365, 0.1003, -0.139, 0, 0.0897, -0.1577, 0.0287, 0.0993, -0.1446, 0, 0.0902, 0.23, 0, 0.0403, 0.1702, 0.0394, 0.021, 0.2061, 0, 0.0291, 0.1702, 0.0394, 0.021, 0.23, 0, 0.0403, 0.2173, 0.0655, 0.0491, 0.1702, 0.0394, 0.021, 0.2173, 0.0655, 0.0491, 0.1707, 0.0655, 0.0271, -0.2061, 0, -0.0103, -0.2231, 0.05, 0.0051, -0.2323, 0, -0.0081, -0.2231, 0.05, 0.0051, -0.2061, 0, -0.0103, -0.1702, 0.0394, -0.0023, -0.1702, 0.0394, -0.0023, -0.1694, 0.05, 0.0006, -0.2231, 0.05, 0.0051, -0.1694, 0.05, 0.0006, -0.1702, 0.0394, -0.0023, -0.1675, 0.0363, -0.0034, -0.2222, 0, 0.1127, -0.1846, 0.0287, 0.1015, -0.1978, 0, 0.1107, -0.1846, 0.0287, 0.1015, -0.2222, 0, 0.1127, -0.2154, 0.05, 0.0981, -0.1846, 0.0287, 0.1015, -0.2154, 0.05, 0.0981, -0.1577, 0.0287, 0.0993, -0.1577, 0.0287, 0.0993, -0.2154, 0.05, 0.0981, -0.1616, 0.05, 0.0937, -0.0611, 0.0365, -0.5141, -0.0568, 0.05, -0.5588, -0.0527, 0.0365, -0.5603, -0.0568, 0.05, -0.5588, -0.0611, 0.0365, -0.5141, -0.0664, 0.05, -0.5058, -0.0664, 0.05, -0.5058, -0.0611, 0.0365, -0.5141, -0.0576, 0.0145, -0.4984, 0.0917, 0, 0.4957, 0.0545, 0.0485, 0.509, 0.0478, 0, 0.4994, 0.0545, 0.0485, 0.509, 0.0917, 0, 0.4957, 0.0965, 0.0212, 0.4998, 0.0545, 0.0485, 0.509, 0.0965, 0.0212, 0.4998, 0.0937, 0.0485, 0.5058, -0.1026, 0, -0.478, -0.0576, 0.0145, -0.4984, -0.0592, 0, -0.4936, -0.0576, 0.0145, -0.4984, -0.1026, 0, -0.478, -0.1183, 0.0287, -0.4808, -0.0576, 0.0145, -0.4984, -0.1183, 0.0287, -0.4808, -0.0664, 0.05, -0.5058, -0.0664, 0.05, -0.5058, -0.1183, 0.0287, -0.4808, -0.1171, 0.05, -0.4876, -0.2157, 0, -0.3263, -0.2228, 0.0399, -0.3156, -0.2295, 0, -0.3213, -0.2228, 0.0399, -0.3156, -0.2157, 0, -0.3263, -0.2011, 0.0302, -0.3254, -0.2011, 0.0302, -0.3254, -0.1949, 0.0399, -0.3256, -0.2228, 0.0399, -0.3156, -0.1949, 0.0399, -0.3256, -0.2011, 0.0302, -0.3254, -0.1945, 0.0302, -0.3277, -0.1637, 0.0302, -0.3319, -0.1734, 0.0302, -0.3783, -0.1577, 0.0302, -0.365, -0.1734, 0.0302, -0.3783, -0.1637, 0.0302, -0.3319, -0.1888, 0.0302, -0.3229, -0.1734, 0.0302, -0.3783, -0.1888, 0.0302, -0.3229, -0.2096, 0.0302, -0.3653, -0.2096, 0.0302, -0.3653, -0.1888, 0.0302, -0.3229, -0.1945, 0.0302, -0.3277, -0.2096, 0.0302, -0.3653, -0.1945, 0.0302, -0.3277, -0.2011, 0.0302, -0.3254, -0.2096, 0.0302, -0.3653, -0.2011, 0.0302, -0.3254, -0.221, 0.0302, -0.3423, -0.2096, 0.0302, -0.3653, -0.221, 0.0302, -0.3423, -0.2159, 0.0302, -0.3706, -0.1593, 0, -0.41, -0.1674, 0.0562, -0.4192, -0.1616, 0.0253, -0.4213, -0.1674, 0.0562, -0.4192, -0.1593, 0, -0.41, -0.1739, 0.0562, -0.3828, -0.1739, 0.0562, -0.3828, -0.1593, 0, -0.41, -0.1644, 0, -0.3821, -0.1739, 0.0562, -0.3828, -0.1644, 0, -0.3821, -0.1684, 0.0194, -0.3782, -0.1764, 0.0365, -0.4825, -0.1921, 0, -0.4527, -0.1854, 0, -0.4901, -0.1921, 0, -0.4527, -0.1764, 0.0365, -0.4825, -0.1834, 0.0365, -0.4438, -0.1921, 0, -0.4527, -0.1834, 0.0365, -0.4438, -0.1868, 0.0253, -0.4426, -0.1547, 0, -0.5011, -0.1764, 0.0365, -0.4825, -0.1854, 0, -0.4901, -0.1764, 0.0365, -0.4825, -0.1547, 0, -0.5011, -0.1389, 0.0287, -0.4983, -0.1764, 0.0365, -0.4825, -0.1389, 0.0287, -0.4983, -0.1394, 0.0365, -0.4958, -0.2159, 0.0302, -0.3706, -0.2087, 0.0562, -0.3703, -0.2096, 0.0302, -0.3653, -0.2159, 0.0302, -0.3706, -0.237, 0.0562, -0.3942, -0.2087, 0.0562, -0.3703, -0.2159, 0.0302, -0.3706, -0.2473, 0, -0.3905, -0.237, 0.0562, -0.3942, -0.2473, 0, -0.3905, -0.2159, 0.0302, -0.3706, -0.2246, 0, -0.3713, -0.0203, 0, 0.5354, -0.0288, 0.0223, 0.5366, -0.025, 0, 0.5286, -0.0288, 0.0223, 0.5366, -0.0203, 0, 0.5354, -0.0199, 0.0223, 0.5493, -0.004, 0.0365, -0.521, -0.0123, 0.0365, -0.5035, -0.0081, 0.0365, -0.5268, -0.0179, 0.0365, -0.5715, -0.0081, 0.0365, -0.5268, -0.0123, 0.0365, -0.5035, -0.0081, 0.0365, -0.5268, -0.0179, 0.0365, -0.5715, 0.0005, 0.0365, -0.5449, -0.0179, 0.0365, -0.5715, -0.0123, 0.0365, -0.5035, -0.0515, 0.0365, -0.5003, -0.0179, 0.0365, -0.5715, -0.0515, 0.0365, -0.5003, -0.0527, 0.0365, -0.5603, -0.0515, 0.0365, -0.5003, -0.0611, 0.0365, -0.5141, -0.0527, 0.0365, -0.5603, -0.0179, 0.0365, -0.5715, -0.0527, 0.0365, -0.5603, -0.0571, 0.0365, -0.5682, -0.0571, 0.0365, -0.5682, -0.0527, 0.0365, -0.5603, -0.0585, 0.0365, -0.5652, -0.0582, 0, -0.5783, -0.0979, 0.05, -0.5937, -0.0951, 0, -0.6095, -0.0979, 0.05, -0.5937, -0.0582, 0, -0.5783, -0.0601, 0.0203, -0.5725, -0.0979, 0.05, -0.5937, -0.0601, 0.0203, -0.5725, -0.0585, 0.0365, -0.5652, -0.0979, 0.05, -0.5937, -0.0585, 0.0365, -0.5652, -0.0527, 0.0365, -0.5603, -0.0979, 0.05, -0.5937, -0.0527, 0.0365, -0.5603, -0.0568, 0.05, -0.5588, -0.2282, 0.0225, -0.2822, -0.2621, 0, -0.2248, -0.235, 0, -0.2823, -0.2621, 0, -0.2248, -0.2282, 0.0225, -0.2822, -0.2231, 0.05, -0.2749, -0.2621, 0, -0.2248, -0.2231, 0.05, -0.2749, -0.2461, 0.05, -0.2262, -0.2305, 0, -0.3389, -0.2011, 0.0302, -0.3254, -0.2157, 0, -0.3263, -0.2011, 0.0302, -0.3254, -0.2305, 0, -0.3389, -0.221, 0.0302, -0.3423, -0.1384, 0.0365, -0.1118, -0.144, 0.0365, -0.1797, -0.1216, 0.0365, -0.1473, -0.144, 0.0365, -0.1797, -0.1384, 0.0365, -0.1118, -0.1625, 0.0365, -0.1098, -0.144, 0.0365, -0.1797, -0.1625, 0.0365, -0.1098, -0.1832, 0.0365, -0.1764, -0.1832, 0.0365, -0.1764, -0.1625, 0.0365, -0.1098, -0.1798, 0.0365, -0.1179, -0.1832, 0.0365, -0.1764, -0.1798, 0.0365, -0.1179, -0.1827, 0.0365, -0.1159, -0.1832, 0.0365, -0.1764, -0.1827, 0.0365, -0.1159, -0.2, 0.0365, -0.1408, 0.201, 0.05, -0.2468, 0.1933, 0.05, -0.3398, 0.224, 0.05, -0.2955, 0.1933, 0.05, -0.3398, 0.201, 0.05, -0.2468, 0.1473, 0.05, -0.2423, 0.1933, 0.05, -0.3398, 0.1473, 0.05, -0.2423, 0.1689, 0.05, -0.3378, 0.1689, 0.05, -0.3378, 0.1473, 0.05, -0.2423, 0.158, 0.05, -0.3302, 0.158, 0.05, -0.3302, 0.1473, 0.05, -0.2423, 0.146, 0.05, -0.3359, 0.146, 0.05, -0.3359, 0.1473, 0.05, -0.2423, 0.1166, 0.05, -0.2866, 0.146, 0.05, -0.3359, 0.1166, 0.05, -0.2866, 0.1395, 0.05, -0.3353, 0.1019, 0, -0.5632, 0.073, 0.05, -0.5804, 0.0798, 0, -0.5949, 0.073, 0.05, -0.5804, 0.1019, 0, -0.5632, 0.0995, 0.0173, -0.5582, 0.073, 0.05, -0.5804, 0.0995, 0.0173, -0.5582, 0.1004, 0.0365, -0.5475, 0.073, 0.05, -0.5804, 0.1004, 0.0365, -0.5475, 0.1037, 0.05, -0.5361, 0.1037, 0.05, -0.5361, 0.1004, 0.0365, -0.5475, 0.108, 0.0365, -0.5365, 0.1902, 0, -0.432, 0.1892, 0.0399, -0.4396, 0.1943, 0, -0.4323, 0.1892, 0.0399, -0.4396, 0.1902, 0, -0.432, 0.1602, 0.0399, -0.4372, 0.1676, 0, 0.4894, 0.1902, 0.0365, 0.4773, 0.1969, 0, 0.4869, 0.1902, 0.0365, 0.4773, 0.1676, 0, 0.4894, 0.152, 0.0302, 0.4822, 0.1902, 0.0365, 0.4773, 0.152, 0.0302, 0.4822, 0.1502, 0.0302, 0.4824, 0.1902, 0.0365, 0.4773, 0.1502, 0.0302, 0.4824, 0.151, 0.0365, 0.4805, 0.1887, 0, -0.4987, 0.1533, 0.0231, -0.4913, 0.163, 0, -0.4966, 0.1533, 0.0231, -0.4913, 0.1887, 0, -0.4987, 0.185, 0.0399, -0.4907, 0.1533, 0.0231, -0.4913, 0.185, 0.0399, -0.4907, 0.1555, 0.0399, -0.4883, 0.2036, 0, -0.3494, 0.1933, 0.05, -0.3398, 0.1979, 0.0165, -0.3496, 0.1933, 0.05, -0.3398, 0.2036, 0, -0.3494, 0.24, 0, -0.2969, 0.1933, 0.05, -0.3398, 0.24, 0, -0.2969, 0.224, 0.05, -0.2955, 0.1262, 0, 0.5406, 0.1161, 0.0485, 0.5381, 0.1251, 0.0115, 0.5374, 0.1161, 0.0485, 0.5381, 0.1262, 0, 0.5406, 0.0994, 0.0485, 0.5737, 0.0994, 0.0485, 0.5737, 0.1262, 0, 0.5406, 0.1061, 0, 0.5834, 0.1497, 0.0302, 0.5299, 0.152, 0.0302, 0.4822, 0.164, 0.0302, 0.4995, 0.152, 0.0302, 0.4822, 0.1497, 0.0302, 0.5299, 0.1502, 0.0302, 0.4824, 0.1502, 0.0302, 0.4824, 0.1497, 0.0302, 0.5299, 0.143, 0.0302, 0.472, 0.143, 0.0302, 0.472, 0.1497, 0.0302, 0.5299, 0.117, 0.0302, 0.5326, 0.143, 0.0302, 0.472, 0.117, 0.0302, 0.5326, 0.1113, 0.0302, 0.4746, 0.1113, 0.0302, 0.4746, 0.117, 0.0302, 0.5326, 0.0973, 0.0302, 0.5042, -0.1832, 0.0365, 0.3836, -0.1978, 0, 0.3907, -0.1846, 0.0287, 0.3815, -0.1978, 0, 0.3907, -0.1832, 0.0365, 0.3836, -0.2, 0.0365, 0.4192, -0.1978, 0, 0.3907, -0.2, 0.0365, 0.4192, -0.2117, 0, 0.4202, -0.0959, 0.0302, 0.5408, -0.1037, 0.0302, 0.489, -0.0845, 0.0302, 0.5167, -0.1037, 0.0302, 0.489, -0.0959, 0.0302, 0.5408, -0.1034, 0.0302, 0.5414, -0.1037, 0.0302, 0.489, -0.1034, 0.0302, 0.5414, -0.1063, 0.0302, 0.5477, -0.1037, 0.0302, 0.489, -0.1063, 0.0302, 0.5477, -0.1242, 0.0302, 0.4907, -0.1242, 0.0302, 0.4907, -0.1063, 0.0302, 0.5477, -0.1324, 0.0302, 0.5499, -0.1242, 0.0302, 0.4907, -0.1324, 0.0302, 0.5499, -0.1406, 0.0302, 0.5255, -0.1406, 0.0302, 0.5255, -0.1324, 0.0302, 0.5499, -0.1488, 0.0302, 0.5262, -0.1367, 0, 0.4583, -0.1489, 0.0562, 0.4575, -0.1463, 0.0253, 0.452, -0.1489, 0.0562, 0.4575, -0.1367, 0, 0.4583, -0.1278, 0.0562, 0.4879, -0.1278, 0.0562, 0.4879, -0.1367, 0, 0.4583, -0.1204, 0, 0.4817, -0.1278, 0.0562, 0.4879, -0.1204, 0, 0.4817, -0.1206, 0.0194, 0.4873, -0.1242, 0.0302, 0.4907, -0.1278, 0.0562, 0.4879, -0.1206, 0.0194, 0.4873, -0.1278, 0.0562, 0.4879, -0.1242, 0.0302, 0.4907, -0.1435, 0.0562, 0.5213, -0.1435, 0.0562, 0.5213, -0.1242, 0.0302, 0.4907, -0.1406, 0.0302, 0.5255, -0.0541, 0.0223, 0.5901, -0.0608, 0, 0.5938, -0.0599, 0.0223, 0.5818, -0.0608, 0, 0.5938, -0.0541, 0.0223, 0.5901, -0.0578, 0, 0.5981, -0.0282, 0.0223, 0.5669, -0.0288, 0.0223, 0.5366, -0.0199, 0.0223, 0.5493, -0.0282, 0.0223, 0.5669, -0.0541, 0.0223, 0.5901, -0.0288, 0.0223, 0.5366, -0.0282, 0.0223, 0.5669, -0.0245, 0.0223, 0.5877, -0.0541, 0.0223, 0.5901, -0.0245, 0.0223, 0.5877, -0.0282, 0.0223, 0.5669, -0.0202, 0.0223, 0.5785, -0.0288, 0.0223, 0.5366, -0.0541, 0.0223, 0.5901, -0.0519, 0.0223, 0.5647, -0.0519, 0.0223, 0.5647, -0.0541, 0.0223, 0.5901, -0.0599, 0.0223, 0.5818, -0.0519, 0.0223, 0.5647, -0.0583, 0.0223, 0.539, -0.0288, 0.0223, 0.5366, -0.0583, 0.0223, 0.539, -0.0519, 0.0223, 0.5647, -0.0629, 0.0223, 0.5488, 0.2181, 0, -0.2503, 0.224, 0.05, -0.2955, 0.24, 0, -0.2969, 0.224, 0.05, -0.2955, 0.2181, 0, -0.2503, 0.201, 0.05, -0.2468, 0.201, 0.05, -0.2468, 0.2181, 0, -0.2503, 0.2049, 0.0287, -0.2412, -0.1832, 0.0365, 0.1036, -0.1978, 0, 0.1107, -0.1846, 0.0287, 0.1015, -0.1978, 0, 0.1107, -0.1832, 0.0365, 0.1036, -0.2, 0.0365, 0.1392, -0.1978, 0, 0.1107, -0.2, 0.0365, 0.1392, -0.2117, 0, 0.1402, 0.2317, 0, -0.0802, 0.2343, 0.0655, -0.0982, 0.2482, 0, -0.0916, 0.2343, 0.0655, -0.0982, 0.2317, 0, -0.0802, 0.2159, 0.0458, -0.0806, 0.2343, 0.0655, -0.0982, 0.2159, 0.0458, -0.0806, 0.2123, 0.05, -0.0791, 0.2343, 0.0655, -0.0982, 0.2123, 0.05, -0.0791, 0.1922, 0.05, -0.0652, 0.2343, 0.0655, -0.0982, 0.1922, 0.05, -0.0652, 0.1919, 0.0655, -0.0688, 0.1991, 0, 0.4124, 0.2216, 0.0655, 0.3805, 0.2355, 0, 0.3871, 0.2216, 0.0655, 0.3805, 0.1991, 0, 0.4124, 0.1865, 0.0365, 0.4121, 0.2216, 0.0655, 0.3805, 0.1865, 0.0365, 0.4121, 0.1798, 0.0365, 0.4167, 0.2216, 0.0655, 0.3805, 0.1798, 0.0365, 0.4167, 0.1793, 0.0655, 0.4099, 0.1978, 0, 0.1881, 0.2, 0.0365, 0.1596, 0.2117, 0, 0.1586, 0.2, 0.0365, 0.1596, 0.1978, 0, 0.1881, 0.1832, 0.0365, 0.1952, 0.1832, 0.0365, 0.1952, 0.1978, 0, 0.1881, 0.1846, 0.0287, 0.1972, 0.2243, 0.0365, -0.1722, 0.2186, 0.0365, -0.2401, 0.2411, 0.0365, -0.2078, 0.2186, 0.0365, -0.2401, 0.2243, 0.0365, -0.1722, 0.2001, 0.0365, -0.1702, 0.2186, 0.0365, -0.2401, 0.2001, 0.0365, -0.1702, 0.1794, 0.0365, -0.2369, 0.1794, 0.0365, -0.2369, 0.2001, 0.0365, -0.1702, 0.1828, 0.0365, -0.1784, 0.1794, 0.0365, -0.2369, 0.1828, 0.0365, -0.1784, 0.1799, 0.0365, -0.1764, 0.1794, 0.0365, -0.2369, 0.1799, 0.0365, -0.1764, 0.1627, 0.0365, -0.2013, 0.2315, 0, -0.1636, 0.2411, 0.0365, -0.2078, 0.2528, 0, -0.2088, 0.2411, 0.0365, -0.2078, 0.2315, 0, -0.1636, 0.2243, 0.0365, -0.1722, 0.2243, 0.0365, -0.1722, 0.2315, 0, -0.1636, 0.2304, 0.0033, -0.1634, 0.1953, 0, 0.135, 0.2216, 0.0655, 0.1005, 0.2355, 0, 0.1071, 0.2216, 0.0655, 0.1005, 0.1953, 0, 0.135, 0.1827, 0.0365, 0.1347, 0.1827, 0.0365, 0.1347, 0.1793, 0.0655, 0.1299, 0.2216, 0.0655, 0.1005, 0.1793, 0.0655, 0.1299, 0.1827, 0.0365, 0.1347, 0.1798, 0.0365, 0.1367, -0.1367, 0, 0.559, -0.1063, 0.0302, 0.5477, -0.1173, 0, 0.5574, -0.1063, 0.0302, 0.5477, -0.1367, 0, 0.559, -0.1324, 0.0302, 0.5499, -0.1021, 0.0399, 0.5432, -0.1063, 0.0302, 0.5477, -0.1034, 0.0302, 0.5414, -0.1063, 0.0302, 0.5477, -0.1021, 0.0399, 0.5432, -0.1148, 0.0399, 0.57, -0.1063, 0.0302, 0.5477, -0.1148, 0.0399, 0.57, -0.1173, 0, 0.5574, -0.1173, 0, 0.5574, -0.1148, 0.0399, 0.57, -0.1236, 0, 0.5707, 0.1555, 0.0399, -0.4883, 0.1503, 0.0231, -0.4849, 0.1533, 0.0231, -0.4913, 0.1503, 0.0231, -0.4849, 0.1555, 0.0399, -0.4883, 0.1428, 0.0399, -0.4615, 0.1503, 0.0231, -0.4849, 0.1428, 0.0399, -0.4615, 0.142, 0, -0.4777, 0.142, 0, -0.4777, 0.1428, 0.0399, -0.4615, 0.1345, 0, -0.4617, 0.1345, 0, -0.4617, 0.1428, 0.0399, -0.4615, 0.134, 0, -0.4607, 0.1426, 0, -0.4483, 0.0929, 0, -0.4138, 0.1406, 0, -0.4469, 0.0929, 0, -0.4138, 0.1426, 0, -0.4483, 0.1483, 0.0207, -0.4471, 0.0929, 0, -0.4138, 0.1483, 0.0207, -0.4471, 0.1068, 0.0655, -0.4072, 0.1068, 0.0655, -0.4072, 0.1483, 0.0207, -0.4471, 0.1492, 0.0655, -0.4366, 0.1594, 0.0399, -0.4375, 0.1492, 0.0655, -0.4366, 0.1483, 0.0207, -0.4471, 0.1492, 0.0655, -0.4366, 0.1594, 0.0399, -0.4375, 0.1602, 0.0399, -0.4372, 0.1602, 0.0399, -0.4372, 0.1958, 0.0655, -0.4146, 0.1492, 0.0655, -0.4366, 0.1602, 0.0399, -0.4372, 0.2084, 0, -0.4234, 0.1958, 0.0655, -0.4146, 0.2084, 0, -0.4234, 0.1602, 0.0399, -0.4372, 0.1902, 0, -0.432) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_k4a3a"] +data = PackedVector3Array(-0.195, 0.4365, 0.0748, -0.17, 0.4615, 0.0748, -0.1197, 0.4615, 0.0748, -0.1197, 0.4615, 0.0748, -0.1409, 0.4074, 0.0748, -0.195, 0.4365, 0.0748, -0.1409, 0.1711, 0.0748, -0.195, 0.4365, 0.0748, -0.1409, 0.4074, 0.0748, -0.1409, 0.1711, 0.0748, -0.195, 0.117, 0.0748, -0.195, 0.4365, 0.0748, -0.195, 0.117, 0.0748, -0.1409, 0.1711, 0.0748, 0.1409, 0.1711, 0.0748, 0.1409, 0.1711, 0.0748, 0.195, 0.117, 0.0748, -0.195, 0.117, 0.0748, 0.195, 0.117, 0.0748, 0.1409, 0.1711, 0.0748, 0.195, 0.4365, 0.0748, 0.195, 0.4365, 0.0748, 0.1409, 0.1711, 0.0748, 0.1409, 0.4074, 0.0748, 0.195, 0.4365, 0.0748, 0.1409, 0.4074, 0.0748, 0.0782, 0.4074, 0.0748, -0.0552, 0.4934, 0.0748, -0.1409, 0.4074, 0.0748, -0.1197, 0.4615, 0.0748, -0.1409, 0.4074, 0.0748, -0.0552, 0.4934, 0.0748, -0.0782, 0.4074, 0.0748, -0.0552, 0.4934, 0.0748, -0.1197, 0.4615, 0.0748, -0.1037, 0.5214, 0.0748, -0.0552, 0.4934, 0.0748, -0.1037, 0.5214, 0.0748, -0.0319, 0.5167, 0.0748, -0.0319, 0.5167, 0.0748, -0.1037, 0.5214, 0.0748, 0, 0.5252, 0.0748, 0, 0.5252, 0.0748, -0.1037, 0.5214, 0.0748, -0.0599, 0.5652, 0.0748, 0.195, 0.4365, 0.0748, 0.0782, 0.4074, 0.0748, 0.1197, 0.4615, 0.0748, 0.195, 0.4365, 0.0748, 0.1197, 0.4615, 0.0748, 0.17, 0.4615, 0.0748, 0.1197, 0.4615, 0.0748, 0.0782, 0.4074, 0.0748, 0.0552, 0.4934, 0.0748, 0.1197, 0.4615, 0.0748, 0.0552, 0.4934, 0.0748, 0.1037, 0.5214, 0.0748, 0.1037, 0.5214, 0.0748, 0.0552, 0.4934, 0.0748, 0.0319, 0.5167, 0.0748, 0.1037, 0.5214, 0.0748, 0.0319, 0.5167, 0.0748, 0, 0.5252, 0.0748, 0.1037, 0.5214, 0.0748, 0, 0.5252, 0.0748, 0.0599, 0.5652, 0.0748, 0, 0.5252, 0.0748, -0.0599, 0.5652, 0.0748, 0.0599, 0.5652, 0.0748, 0.0599, 0.5652, 0.0748, -0.0599, 0.5652, 0.0748, 0, 0.5812, 0.0748, -0.195, 0.4365, -0.0748, -0.1197, 0.4615, -0.0748, -0.17, 0.4615, -0.0748, -0.195, 0.4365, -0.0748, -0.0782, 0.4074, -0.0748, -0.1197, 0.4615, -0.0748, -0.1197, 0.4615, -0.0748, -0.0782, 0.4074, -0.0748, -0.0552, 0.4934, -0.0748, -0.195, 0.4365, -0.0748, -0.1409, 0.4074, -0.0748, -0.0782, 0.4074, -0.0748, -0.1197, 0.4615, -0.0748, -0.0552, 0.4934, -0.0748, -0.1037, 0.5214, -0.0748, -0.1037, 0.5214, -0.0748, -0.0552, 0.4934, -0.0748, -0.0319, 0.5167, -0.0748, -0.195, 0.4365, -0.0748, -0.1409, 0.1711, -0.0748, -0.1409, 0.4074, -0.0748, -0.195, 0.117, -0.0748, -0.1409, 0.1711, -0.0748, -0.195, 0.4365, -0.0748, -0.1409, 0.1711, -0.0748, -0.195, 0.117, -0.0748, 0.195, 0.117, -0.0748, 0.195, 0.117, -0.0748, 0.1409, 0.1711, -0.0748, -0.1409, 0.1711, -0.0748, -0.1037, 0.5214, -0.0748, -0.0319, 0.5167, -0.0748, 0, 0.5252, -0.0748, 0.1409, 0.1711, -0.0748, 0.195, 0.117, -0.0748, 0.195, 0.4365, -0.0748, 0.1409, 0.1711, -0.0748, 0.195, 0.4365, -0.0748, 0.1409, 0.4074, -0.0748, 0.1409, 0.4074, -0.0748, 0.195, 0.4365, -0.0748, 0.0782, 0.4074, -0.0748, -0.1037, 0.5214, -0.0748, 0, 0.5252, -0.0748, -0.0599, 0.5652, -0.0748, 0.0782, 0.4074, -0.0748, 0.195, 0.4365, -0.0748, 0.1197, 0.4615, -0.0748, 0.1197, 0.4615, -0.0748, 0.195, 0.4365, -0.0748, 0.17, 0.4615, -0.0748, 0.0782, 0.4074, -0.0748, 0.1197, 0.4615, -0.0748, 0.0552, 0.4934, -0.0748, 0.0552, 0.4934, -0.0748, 0.1197, 0.4615, -0.0748, 0.1037, 0.5214, -0.0748, 0.0552, 0.4934, -0.0748, 0.1037, 0.5214, -0.0748, 0.0319, 0.5167, -0.0748, 0.0319, 0.5167, -0.0748, 0.1037, 0.5214, -0.0748, 0, 0.5252, -0.0748, 0, 0.5252, -0.0748, 0.1037, 0.5214, -0.0748, 0.0599, 0.5652, -0.0748, 0, 0.5252, -0.0748, 0.0599, 0.5652, -0.0748, -0.0599, 0.5652, -0.0748, -0.0599, 0.5652, -0.0748, 0.0599, 0.5652, -0.0748, 0, 0.5812, -0.0748, -0.1197, 0.4615, 0.0748, -0.17, 0.4615, -0.0748, -0.1197, 0.4615, -0.0748, -0.17, 0.4615, -0.0748, -0.1197, 0.4615, 0.0748, -0.17, 0.4615, 0.0748, 0.1197, 0.4615, -0.0748, 0.1037, 0.5214, 0.0748, 0.1037, 0.5214, -0.0748, 0.1037, 0.5214, 0.0748, 0.1197, 0.4615, -0.0748, 0.1197, 0.4615, 0.0748, 0.1037, 0.5214, 0.0748, 0.0599, 0.5652, -0.0748, 0.1037, 0.5214, -0.0748, 0.0599, 0.5652, -0.0748, 0.1037, 0.5214, 0.0748, 0.0599, 0.5652, 0.0748, 0.0599, 0.5652, 0.0748, 0, 0.5812, -0.0748, 0.0599, 0.5652, -0.0748, 0, 0.5812, -0.0748, 0.0599, 0.5652, 0.0748, 0, 0.5812, 0.0748, 0, 0.5812, 0.0748, -0.0599, 0.5652, -0.0748, 0, 0.5812, -0.0748, -0.0599, 0.5652, -0.0748, 0, 0.5812, 0.0748, -0.0599, 0.5652, 0.0748, -0.0599, 0.5652, 0.0748, -0.1037, 0.5214, -0.0748, -0.0599, 0.5652, -0.0748, -0.1037, 0.5214, -0.0748, -0.0599, 0.5652, 0.0748, -0.1037, 0.5214, 0.0748, -0.1037, 0.5214, -0.0748, -0.1197, 0.4615, 0.0748, -0.1197, 0.4615, -0.0748, -0.1197, 0.4615, 0.0748, -0.1037, 0.5214, -0.0748, -0.1037, 0.5214, 0.0748, 0.17, 0.4615, 0.0748, 0.1197, 0.4615, -0.0748, 0.17, 0.4615, -0.0748, 0.1197, 0.4615, -0.0748, 0.17, 0.4615, 0.0748, 0.1197, 0.4615, 0.0748, 0.1409, 0.1711, 0.0748, -0.1409, 0.1711, 0.0248, 0.1409, 0.1711, 0.0248, -0.1409, 0.1711, 0.0248, 0.1409, 0.1711, 0.0748, -0.1409, 0.1711, 0.0748, 0.1409, 0.4074, 0.0248, 0.1409, 0.1711, 0.0748, 0.1409, 0.1711, 0.0248, 0.1409, 0.1711, 0.0748, 0.1409, 0.4074, 0.0248, 0.1409, 0.4074, 0.0748, 0.1409, 0.4074, 0.0248, 0.0782, 0.4074, 0.0748, 0.1409, 0.4074, 0.0748, 0.0782, 0.4074, 0.0748, 0.1409, 0.4074, 0.0248, 0.0782, 0.4074, 0.0248, 0.0552, 0.4934, 0.0248, 0.0782, 0.4074, 0.0748, 0.0782, 0.4074, 0.0248, 0.0782, 0.4074, 0.0748, 0.0552, 0.4934, 0.0248, 0.0552, 0.4934, 0.0748, 0.0552, 0.4934, 0.0248, 0.0319, 0.5167, 0.0748, 0.0552, 0.4934, 0.0748, 0.0319, 0.5167, 0.0748, 0.0552, 0.4934, 0.0248, 0.0319, 0.5167, 0.0248, 0.0319, 0.5167, 0.0248, 0, 0.5252, 0.0748, 0.0319, 0.5167, 0.0748, 0, 0.5252, 0.0748, 0.0319, 0.5167, 0.0248, 0, 0.5252, 0.0248, 0, 0.5252, 0.0248, -0.0319, 0.5167, 0.0748, 0, 0.5252, 0.0748, -0.0319, 0.5167, 0.0748, 0, 0.5252, 0.0248, -0.0319, 0.5167, 0.0248, -0.0552, 0.4934, 0.0248, -0.0319, 0.5167, 0.0748, -0.0319, 0.5167, 0.0248, -0.0319, 0.5167, 0.0748, -0.0552, 0.4934, 0.0248, -0.0552, 0.4934, 0.0748, -0.0782, 0.4074, 0.0248, -0.0552, 0.4934, 0.0748, -0.0552, 0.4934, 0.0248, -0.0552, 0.4934, 0.0748, -0.0782, 0.4074, 0.0248, -0.0782, 0.4074, 0.0748, -0.0782, 0.4074, 0.0248, -0.1409, 0.4074, 0.0748, -0.0782, 0.4074, 0.0748, -0.1409, 0.4074, 0.0748, -0.0782, 0.4074, 0.0248, -0.1409, 0.4074, 0.0248, -0.1409, 0.1711, 0.0248, -0.1409, 0.4074, 0.0748, -0.1409, 0.4074, 0.0248, -0.1409, 0.4074, 0.0748, -0.1409, 0.1711, 0.0248, -0.1409, 0.1711, 0.0748, -0.1409, 0.1711, -0.0748, -0.1409, 0.4074, -0.0248, -0.1409, 0.4074, -0.0748, -0.1409, 0.4074, -0.0248, -0.1409, 0.1711, -0.0748, -0.1409, 0.1711, -0.0248, -0.0782, 0.4074, -0.0748, -0.1409, 0.4074, -0.0248, -0.0782, 0.4074, -0.0248, -0.1409, 0.4074, -0.0248, -0.0782, 0.4074, -0.0748, -0.1409, 0.4074, -0.0748, -0.0782, 0.4074, -0.0748, -0.0552, 0.4934, -0.0248, -0.0552, 0.4934, -0.0748, -0.0552, 0.4934, -0.0248, -0.0782, 0.4074, -0.0748, -0.0782, 0.4074, -0.0248, -0.0319, 0.5167, -0.0748, -0.0552, 0.4934, -0.0248, -0.0319, 0.5167, -0.0248, -0.0552, 0.4934, -0.0248, -0.0319, 0.5167, -0.0748, -0.0552, 0.4934, -0.0748, 0, 0.5252, -0.0748, -0.0319, 0.5167, -0.0248, 0, 0.5252, -0.0248, -0.0319, 0.5167, -0.0248, 0, 0.5252, -0.0748, -0.0319, 0.5167, -0.0748, 0.0319, 0.5167, -0.0748, 0, 0.5252, -0.0248, 0.0319, 0.5167, -0.0248, 0, 0.5252, -0.0248, 0.0319, 0.5167, -0.0748, 0, 0.5252, -0.0748, 0.0552, 0.4934, -0.0748, 0.0319, 0.5167, -0.0248, 0.0552, 0.4934, -0.0248, 0.0319, 0.5167, -0.0248, 0.0552, 0.4934, -0.0748, 0.0319, 0.5167, -0.0748, 0.0552, 0.4934, -0.0748, 0.0782, 0.4074, -0.0248, 0.0782, 0.4074, -0.0748, 0.0782, 0.4074, -0.0248, 0.0552, 0.4934, -0.0748, 0.0552, 0.4934, -0.0248, 0.1409, 0.4074, -0.0748, 0.0782, 0.4074, -0.0248, 0.1409, 0.4074, -0.0248, 0.0782, 0.4074, -0.0248, 0.1409, 0.4074, -0.0748, 0.0782, 0.4074, -0.0748, 0.1409, 0.4074, -0.0748, 0.1409, 0.1711, -0.0248, 0.1409, 0.1711, -0.0748, 0.1409, 0.1711, -0.0248, 0.1409, 0.4074, -0.0748, 0.1409, 0.4074, -0.0248, 0.1409, 0.1711, -0.0248, -0.1409, 0.1711, -0.0748, 0.1409, 0.1711, -0.0748, -0.1409, 0.1711, -0.0748, 0.1409, 0.1711, -0.0248, -0.1409, 0.1711, -0.0248, 0.195, 0.117, -0.0748, 0.195, 0.4365, 0.0748, 0.195, 0.4365, -0.0748, 0.195, 0.4365, 0.0748, 0.195, 0.117, -0.0748, 0.195, 0.117, 0.0748, 0.195, 0.4365, 0.0748, 0.17, 0.4615, -0.0748, 0.195, 0.4365, -0.0748, 0.17, 0.4615, -0.0748, 0.195, 0.4365, 0.0748, 0.17, 0.4615, 0.0748, -0.195, 0.4365, -0.0748, -0.195, 0.117, 0.0748, -0.195, 0.117, -0.0748, -0.195, 0.117, 0.0748, -0.195, 0.4365, -0.0748, -0.195, 0.4365, 0.0748, -0.17, 0.4615, 0.0748, -0.195, 0.4365, -0.0748, -0.17, 0.4615, -0.0748, -0.195, 0.4365, -0.0748, -0.17, 0.4615, 0.0748, -0.195, 0.4365, 0.0748, 0.22, 0, -0.0997, -0.22, 0, 0.0997, 0.22, 0, 0.0997, -0.22, 0, 0.0997, 0.22, 0, -0.0997, -0.22, 0, -0.0997, 0.22, 0, -0.0997, -0.22, 0.078, -0.0997, -0.22, 0, -0.0997, -0.22, 0.078, -0.0997, 0.22, 0, -0.0997, 0.22, 0.078, -0.0997, -0.22, 0.078, 0.0997, 0.195, 0.117, 0.0748, 0.22, 0.078, 0.0997, 0.195, 0.117, 0.0748, -0.22, 0.078, 0.0997, -0.195, 0.117, 0.0748, -0.195, 0.117, -0.0748, -0.22, 0.078, 0.0997, -0.22, 0.078, -0.0997, -0.22, 0.078, 0.0997, -0.195, 0.117, -0.0748, -0.195, 0.117, 0.0748, -0.22, 0.078, -0.0997, -0.22, 0, 0.0997, -0.22, 0, -0.0997, -0.22, 0, 0.0997, -0.22, 0.078, -0.0997, -0.22, 0.078, 0.0997, 0.22, 0.078, 0.0997, 0.195, 0.117, -0.0748, 0.22, 0.078, -0.0997, 0.195, 0.117, -0.0748, 0.22, 0.078, 0.0997, 0.195, 0.117, 0.0748, 0.22, 0.078, -0.0997, -0.195, 0.117, -0.0748, -0.22, 0.078, -0.0997, -0.195, 0.117, -0.0748, 0.22, 0.078, -0.0997, 0.195, 0.117, -0.0748, -0.22, 0, 0.0997, 0.22, 0.078, 0.0997, 0.22, 0, 0.0997, 0.22, 0.078, 0.0997, -0.22, 0, 0.0997, -0.22, 0.078, 0.0997, 0.22, 0, -0.0997, 0.22, 0.078, 0.0997, 0.22, 0.078, -0.0997, 0.22, 0.078, 0.0997, 0.22, 0, -0.0997, 0.22, 0, 0.0997, -0.1409, 0.1711, 0.0248, 0.1409, 0.4074, 0.0248, 0.1409, 0.1711, 0.0248, 0.1409, 0.4074, 0.0248, -0.1409, 0.1711, 0.0248, -0.0782, 0.4074, 0.0248, -0.1409, 0.1711, 0.0248, -0.1409, 0.4074, 0.0248, -0.0782, 0.4074, 0.0248, 0.1409, 0.4074, 0.0248, -0.0782, 0.4074, 0.0248, 0.0782, 0.4074, 0.0248, 0.0782, 0.4074, 0.0248, -0.0782, 0.4074, 0.0248, -0.0552, 0.4934, 0.0248, 0.0782, 0.4074, 0.0248, -0.0552, 0.4934, 0.0248, 0.0552, 0.4934, 0.0248, 0.0552, 0.4934, 0.0248, -0.0552, 0.4934, 0.0248, 0.0319, 0.5167, 0.0248, 0.0319, 0.5167, 0.0248, -0.0552, 0.4934, 0.0248, -0.0319, 0.5167, 0.0248, 0.0319, 0.5167, 0.0248, -0.0319, 0.5167, 0.0248, 0, 0.5252, 0.0248, 0.1409, 0.1711, -0.0248, -0.1409, 0.4074, -0.0248, -0.1409, 0.1711, -0.0248, -0.1409, 0.4074, -0.0248, 0.1409, 0.1711, -0.0248, 0.1409, 0.4074, -0.0248, -0.1409, 0.4074, -0.0248, 0.1409, 0.4074, -0.0248, -0.0782, 0.4074, -0.0248, -0.0782, 0.4074, -0.0248, 0.1409, 0.4074, -0.0248, 0.0782, 0.4074, -0.0248, -0.0782, 0.4074, -0.0248, 0.0782, 0.4074, -0.0248, -0.0552, 0.4934, -0.0248, -0.0552, 0.4934, -0.0248, 0.0782, 0.4074, -0.0248, 0.0552, 0.4934, -0.0248, -0.0552, 0.4934, -0.0248, 0.0552, 0.4934, -0.0248, -0.0319, 0.5167, -0.0248, -0.0319, 0.5167, -0.0248, 0.0552, 0.4934, -0.0248, 0.0319, 0.5167, -0.0248, -0.0319, 0.5167, -0.0248, 0.0319, 0.5167, -0.0248, 0, 0.5252, -0.0248) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_5b24f"] +data = PackedVector3Array(-0.109, 0.2425, -0.0266, -0.0562, 0.2248, -0.0329, -0.0953, 0.2087, -0.0285, -0.0562, 0.2248, -0.0329, -0.109, 0.2425, -0.0266, -0.0699, 0.2586, -0.0309, -0.1095, 0.1036, -0.0004, -0.0666, 0.162, -0.016, -0.102, 0.0965, 0.0015, -0.0666, 0.162, -0.016, -0.1095, 0.1036, -0.0004, -0.12, 0.1209, -0.005, -0.0666, 0.162, -0.016, -0.12, 0.1209, -0.005, -0.1628, 0.2176, -0.0309, -0.0666, 0.162, -0.016, -0.1628, 0.2176, -0.0309, -0.0953, 0.2087, -0.0285, -0.0953, 0.2087, -0.0285, -0.1628, 0.2176, -0.0309, -0.109, 0.2398, -0.0369, -0.0666, 0.162, -0.016, -0.0953, 0.2087, -0.0285, -0.0302, 0.2033, -0.0271, -0.0562, 0.2248, -0.0329, -0.0302, 0.2033, -0.0271, -0.0953, 0.2087, -0.0285, -0.0162, 0.278, -0.0471, -0.0302, 0.2033, -0.0271, -0.0562, 0.2248, -0.0329, -0.0162, 0.278, -0.0471, -0.0562, 0.2248, -0.0329, -0.0699, 0.2559, -0.0412, -0.0302, 0.2033, -0.0271, -0.0162, 0.278, -0.0471, 0.0168, 0.2033, -0.0271, 0.015, 0.2033, -0.0436, -0.0162, 0.278, -0.0471, -0.0162, 0.2739, -0.0625, -0.0162, 0.278, -0.0471, 0.015, 0.2033, -0.0436, 0.0168, 0.2033, -0.0271, -0.1095, 0.1036, -0.0004, -0.1034, 0.0938, -0.0142, -0.1095, 0.0995, -0.0158, -0.1034, 0.0938, -0.0142, -0.1095, 0.1036, -0.0004, -0.102, 0.0965, 0.0015, -0.0699, 0.2518, -0.0566, -0.0925, 0.3097, -0.0446, -0.0925, 0.3029, -0.0703, -0.0925, 0.3097, -0.0446, -0.0699, 0.2518, -0.0566, -0.0699, 0.2559, -0.0412, -0.0925, 0.3097, -0.0446, -0.0699, 0.2559, -0.0412, -0.0699, 0.2586, -0.0309, -0.0699, 0.2586, -0.0309, -0.0699, 0.2559, -0.0412, -0.0562, 0.2248, -0.0329, -0.12, 0.1209, -0.005, -0.1095, 0.0995, -0.0158, -0.12, 0.1168, -0.0204, -0.1095, 0.0995, -0.0158, -0.12, 0.1209, -0.005, -0.1095, 0.1036, -0.0004, -0.0162, 0.278, -0.0471, -0.0699, 0.2518, -0.0566, -0.0162, 0.2739, -0.0625, -0.0699, 0.2518, -0.0566, -0.0162, 0.278, -0.0471, -0.0699, 0.2559, -0.0412, -0.1316, 0.2936, -0.0403, -0.0699, 0.2586, -0.0309, -0.109, 0.2425, -0.0266, -0.0699, 0.2586, -0.0309, -0.1316, 0.2936, -0.0403, -0.0925, 0.3097, -0.0446, -0.109, 0.2398, -0.0369, -0.1628, 0.2135, -0.0463, -0.109, 0.2357, -0.0523, -0.1628, 0.2135, -0.0463, -0.109, 0.2398, -0.0369, -0.1628, 0.2176, -0.0309, -0.1316, 0.2936, -0.0403, -0.109, 0.2357, -0.0523, -0.1316, 0.2868, -0.0659, -0.109, 0.2357, -0.0523, -0.1316, 0.2936, -0.0403, -0.109, 0.2398, -0.0369, -0.109, 0.2398, -0.0369, -0.1316, 0.2936, -0.0403, -0.109, 0.2425, -0.0266, -0.109, 0.2398, -0.0369, -0.109, 0.2425, -0.0266, -0.0953, 0.2087, -0.0285, -0.1628, 0.2176, -0.0309, -0.12, 0.1168, -0.0204, -0.1628, 0.2135, -0.0463, -0.12, 0.1168, -0.0204, -0.1628, 0.2176, -0.0309, -0.12, 0.1209, -0.005, -0.1316, 0.2868, -0.0659, -0.0699, 0.2518, -0.0566, -0.0925, 0.3029, -0.0703, -0.0699, 0.2518, -0.0566, -0.1316, 0.2868, -0.0659, -0.109, 0.2357, -0.0523, -0.109, 0.2357, -0.0523, -0.0162, 0.2739, -0.0625, -0.0699, 0.2518, -0.0566, -0.109, 0.2357, -0.0523, 0.015, 0.2033, -0.0436, -0.0162, 0.2739, -0.0625, -0.1628, 0.2135, -0.0463, 0.015, 0.2033, -0.0436, -0.109, 0.2357, -0.0523, -0.1628, 0.2135, -0.0463, -0.0177, 0.2033, -0.0436, 0.015, 0.2033, -0.0436, -0.1628, 0.2135, -0.0463, -0.0864, 0.1252, -0.0227, -0.0177, 0.2033, -0.0436, -0.12, 0.1168, -0.0204, -0.0864, 0.1252, -0.0227, -0.1628, 0.2135, -0.0463, -0.1095, 0.0995, -0.0158, -0.0864, 0.1252, -0.0227, -0.12, 0.1168, -0.0204, -0.0864, 0.1252, -0.0227, -0.1095, 0.0995, -0.0158, -0.1034, 0.0938, -0.0142, 0.0935, 0.1423, 0.0598, 0.0898, 0.1353, 0.0609, 0.0929, 0.1423, 0.0561, -0.0302, 0.2033, -0.0271, -0.0442, 0.2033, -0.0085, -0.0666, 0.162, -0.016, 0.2609, 0, -0.0454, 0.0911, 0.2033, -0.143, 0.1598, 0, -0.2529, 0.0911, 0.2033, -0.143, 0.2609, 0, -0.0454, 0.1511, 0.2033, -0.02, 0.0575, 0.2033, -0.143, -0.1541, 0, -0.0454, 0.0028, 0, -0.2529, -0.1541, 0, -0.0454, 0.0575, 0.2033, -0.143, -0.0177, 0.2033, -0.0436, -0.1541, 0, -0.0454, -0.0177, 0.2033, -0.0436, -0.0864, 0.1252, -0.0227, 0.0575, 0.2033, -0.143, 0.015, 0.2033, -0.0436, -0.0177, 0.2033, -0.0436, 0.015, 0.2033, -0.0436, 0.0575, 0.2033, -0.143, 0.0168, 0.2033, -0.0271, 0.0911, 0.2033, -0.143, 0.0168, 0.2033, -0.0271, 0.0575, 0.2033, -0.143, 0.0911, 0.2033, -0.143, -0.0127, 0.2033, 0.0523, 0.0168, 0.2033, -0.0271, 0.0168, 0.2033, -0.0271, -0.0127, 0.2033, 0.0523, -0.0302, 0.2033, -0.0271, 0.0911, 0.2033, -0.143, 0.1511, 0.2033, 0.005, -0.0127, 0.2033, 0.0523, 0.1511, 0.2033, 0.005, 0.0911, 0.2033, -0.143, 0.1511, 0.2033, -0.02, -0.0302, 0.2033, -0.0271, -0.0127, 0.2033, 0.0523, -0.0442, 0.2033, 0.0523, -0.0302, 0.2033, -0.0271, -0.0442, 0.2033, 0.0523, -0.0442, 0.2033, -0.0085, -0.1034, 0.0938, -0.0142, -0.1541, 0, -0.0454, -0.0864, 0.1252, -0.0227, -0.1541, 0, -0.0454, -0.1034, 0.0938, -0.0142, -0.1541, 0, 0.1621, -0.1541, 0, 0.1621, -0.1034, 0.0938, -0.0142, -0.102, 0.0965, 0.0015, -0.1541, 0, 0.1621, -0.102, 0.0965, 0.0015, -0.0442, 0.2033, 0.0523, -0.102, 0.0965, 0.0015, -0.0442, 0.2033, -0.0085, -0.0442, 0.2033, 0.0523, -0.0442, 0.2033, -0.0085, -0.102, 0.0965, 0.0015, -0.0666, 0.162, -0.016, -0.1541, 0, 0.1621, -0.0127, 0.2033, 0.0523, 0.0028, 0, 0.1621, -0.0127, 0.2033, 0.0523, -0.1541, 0, 0.1621, -0.0442, 0.2033, 0.0523, 0.1598, 0, -0.2529, 0.0575, 0.2033, -0.143, 0.0028, 0, -0.2529, 0.0575, 0.2033, -0.143, 0.1598, 0, -0.2529, 0.0911, 0.2033, -0.143, 0.1907, 0, 0.2385, 0.2398, 0.1423, 0.1105, 0.3232, 0, 0.146, 0.2398, 0.1423, 0.1105, 0.1907, 0, 0.2385, 0.1613, 0.1423, 0.1652, 0.0987, 0, 0.2529, 0.1613, 0.1423, 0.1652, 0.1907, 0, 0.2385, 0.1613, 0.1423, 0.1652, 0.0987, 0, 0.2529, 0.144, 0.1423, 0.1679, 0.1613, 0.1423, 0.1652, 0.2362, 0.1423, 0.0872, 0.2398, 0.1423, 0.1105, 0.2362, 0.1423, 0.0872, 0.1613, 0.1423, 0.1652, 0.1483, 0.1423, 0.0401, 0.1483, 0.1423, 0.0401, 0.1613, 0.1423, 0.1652, 0.144, 0.1423, 0.1679, 0.1483, 0.1423, 0.0401, 0.144, 0.1423, 0.1679, 0.0929, 0.1423, 0.0561, 0.0929, 0.1423, 0.0561, 0.144, 0.1423, 0.1679, 0.0935, 0.1423, 0.0598, 0.3232, 0, 0.146, 0.2362, 0.1423, 0.0872, 0.3062, 0, 0.0375, 0.2362, 0.1423, 0.0872, 0.3232, 0, 0.146, 0.2398, 0.1423, 0.1105, 0.3062, 0, 0.0375, 0.1907, 0, 0.2385, 0.3232, 0, 0.146, 0.1907, 0, 0.2385, 0.3062, 0, 0.0375, 0.2609, 0, 0.0132, 0.1907, 0, 0.2385, 0.2609, 0, 0.0132, 0.2609, 0, -0.0454, 0.1907, 0, 0.2385, 0.2609, 0, -0.0454, 0.1598, 0, -0.2529, 0.1907, 0, 0.2385, 0.1598, 0, -0.2529, 0.0987, 0, 0.2529, 0.0987, 0, 0.2529, 0.1598, 0, -0.2529, 0.0028, 0, -0.2529, 0.0987, 0, 0.2529, 0.0028, 0, -0.2529, 0.05, 0, 0.1485, 0.05, 0, 0.1485, 0.0028, 0, -0.2529, 0.0028, 0, 0.1621, 0.0028, 0, 0.1621, 0.0028, 0, -0.2529, -0.1541, 0, 0.1621, -0.1541, 0, 0.1621, 0.0028, 0, -0.2529, -0.1541, 0, -0.0454, 0.1483, 0.1423, 0.0401, 0.1511, 0.2033, 0.005, 0.2059, 0.1019, 0.0462, 0.1511, 0.2033, 0.005, 0.1483, 0.1423, 0.0401, 0.0929, 0.1423, 0.0561, 0.0929, 0.1423, 0.0561, -0.0127, 0.2033, 0.0523, 0.1511, 0.2033, 0.005, 0.0898, 0.1353, 0.0609, -0.0127, 0.2033, 0.0523, 0.0929, 0.1423, 0.0561, 0.0898, 0.1353, 0.0609, 0.0028, 0, 0.1621, -0.0127, 0.2033, 0.0523, 0.0028, 0, 0.1621, 0.0898, 0.1353, 0.0609, 0.05, 0, 0.1485, 0.3062, 0, 0.0375, 0.2059, 0.1019, 0.0462, 0.2609, 0, 0.0132, 0.2059, 0.1019, 0.0462, 0.3062, 0, 0.0375, 0.2362, 0.1423, 0.0872, 0.2059, 0.1019, 0.0462, 0.2362, 0.1423, 0.0872, 0.1483, 0.1423, 0.0401, 0.144, 0.1423, 0.1679, 0.0898, 0.1353, 0.0609, 0.0935, 0.1423, 0.0598, 0.0898, 0.1353, 0.0609, 0.144, 0.1423, 0.1679, 0.05, 0, 0.1485, 0.05, 0, 0.1485, 0.144, 0.1423, 0.1679, 0.0987, 0, 0.2529, 0.2609, 0, 0.0132, 0.1511, 0.2033, -0.02, 0.2609, 0, -0.0454, 0.1511, 0.2033, -0.02, 0.2609, 0, 0.0132, 0.1511, 0.2033, 0.005, 0.1511, 0.2033, 0.005, 0.2609, 0, 0.0132, 0.2059, 0.1019, 0.0462, -0.2762, 0.5295, -0.1035, -0.2501, 0.4636, -0.1133, -0.2762, 0.5226, -0.1291, -0.2501, 0.4636, -0.1133, -0.2762, 0.5295, -0.1035, -0.2501, 0.4705, -0.0877, -0.1687, 0.5738, -0.1154, -0.2762, 0.5226, -0.1291, -0.1687, 0.5669, -0.141, -0.2762, 0.5226, -0.1291, -0.1687, 0.5738, -0.1154, -0.2762, 0.5295, -0.1035, -0.1524, 0.4843, -0.1189, -0.1695, 0.4842, -0.0913, -0.1524, 0.4912, -0.0932, -0.1695, 0.4842, -0.0913, -0.1524, 0.4843, -0.1189, -0.1695, 0.4773, -0.117, -0.1524, 0.4843, -0.1189, -0.1426, 0.5148, -0.0995, -0.1426, 0.5079, -0.1252, -0.1426, 0.5148, -0.0995, -0.1524, 0.4843, -0.1189, -0.1524, 0.4912, -0.0932, -0.1426, 0.5079, -0.1252, -0.1687, 0.5738, -0.1154, -0.1687, 0.5669, -0.141, -0.1687, 0.5738, -0.1154, -0.1426, 0.5079, -0.1252, -0.1426, 0.5148, -0.0995, -0.2265, 0.4863, -0.1194, -0.2356, 0.5137, -0.0993, -0.2356, 0.5068, -0.1249, -0.2356, 0.5137, -0.0993, -0.2265, 0.4863, -0.1194, -0.2265, 0.4932, -0.0938, -0.2086, 0.4681, -0.087, -0.0925, 0.3097, -0.0446, -0.1316, 0.2936, -0.0403, -0.0925, 0.3097, -0.0446, -0.2086, 0.4681, -0.087, -0.1695, 0.4842, -0.0913, -0.1695, 0.4842, -0.0913, -0.2086, 0.4681, -0.087, -0.2501, 0.4705, -0.0877, -0.2257, 0.461, -0.0851, -0.2501, 0.4705, -0.0877, -0.2086, 0.4681, -0.087, -0.1695, 0.4842, -0.0913, -0.2501, 0.4705, -0.0877, -0.2265, 0.4932, -0.0938, -0.1695, 0.4842, -0.0913, -0.2265, 0.4932, -0.0938, -0.1524, 0.4912, -0.0932, -0.2265, 0.4932, -0.0938, -0.2501, 0.4705, -0.0877, -0.2762, 0.5295, -0.1035, -0.2265, 0.4932, -0.0938, -0.1426, 0.5148, -0.0995, -0.1524, 0.4912, -0.0932, -0.2265, 0.4932, -0.0938, -0.2762, 0.5295, -0.1035, -0.2356, 0.5137, -0.0993, -0.1426, 0.5148, -0.0995, -0.2265, 0.4932, -0.0938, -0.1759, 0.514, -0.0993, -0.2356, 0.5137, -0.0993, -0.2762, 0.5295, -0.1035, -0.185, 0.5346, -0.1048, -0.1426, 0.5148, -0.0995, -0.1759, 0.514, -0.0993, -0.185, 0.5346, -0.1048, -0.185, 0.5346, -0.1048, -0.2762, 0.5295, -0.1035, -0.1687, 0.5738, -0.1154, -0.1426, 0.5148, -0.0995, -0.185, 0.5346, -0.1048, -0.1687, 0.5738, -0.1154, -0.1759, 0.514, -0.0993, -0.2265, 0.4863, -0.1194, -0.1759, 0.5071, -0.125, -0.2265, 0.4863, -0.1194, -0.1759, 0.514, -0.0993, -0.2265, 0.4932, -0.0938, -0.2257, 0.4541, -0.1108, -0.2501, 0.4705, -0.0877, -0.2257, 0.461, -0.0851, -0.2501, 0.4705, -0.0877, -0.2257, 0.4541, -0.1108, -0.2501, 0.4636, -0.1133, -0.185, 0.5277, -0.1305, -0.2356, 0.5137, -0.0993, -0.185, 0.5346, -0.1048, -0.2356, 0.5137, -0.0993, -0.185, 0.5277, -0.1305, -0.2356, 0.5068, -0.1249, -0.2086, 0.4612, -0.1127, -0.2257, 0.461, -0.0851, -0.2086, 0.4681, -0.087, -0.2257, 0.461, -0.0851, -0.2086, 0.4612, -0.1127, -0.2257, 0.4541, -0.1108, -0.0925, 0.3029, -0.0703, -0.1695, 0.4842, -0.0913, -0.1695, 0.4773, -0.117, -0.1695, 0.4842, -0.0913, -0.0925, 0.3029, -0.0703, -0.0925, 0.3097, -0.0446, -0.2086, 0.4681, -0.087, -0.1316, 0.2868, -0.0659, -0.2086, 0.4612, -0.1127, -0.1316, 0.2868, -0.0659, -0.2086, 0.4681, -0.087, -0.1316, 0.2936, -0.0403, -0.185, 0.5346, -0.1048, -0.1759, 0.5071, -0.125, -0.185, 0.5277, -0.1305, -0.1759, 0.5071, -0.125, -0.185, 0.5346, -0.1048, -0.1759, 0.514, -0.0993, -0.0925, 0.3029, -0.0703, -0.2086, 0.4612, -0.1127, -0.1316, 0.2868, -0.0659, -0.2086, 0.4612, -0.1127, -0.0925, 0.3029, -0.0703, -0.1695, 0.4773, -0.117, -0.2086, 0.4612, -0.1127, -0.1695, 0.4773, -0.117, -0.2501, 0.4636, -0.1133, -0.2086, 0.4612, -0.1127, -0.2501, 0.4636, -0.1133, -0.2257, 0.4541, -0.1108, -0.2501, 0.4636, -0.1133, -0.1695, 0.4773, -0.117, -0.2265, 0.4863, -0.1194, -0.2265, 0.4863, -0.1194, -0.1695, 0.4773, -0.117, -0.1524, 0.4843, -0.1189, -0.2501, 0.4636, -0.1133, -0.2265, 0.4863, -0.1194, -0.2762, 0.5226, -0.1291, -0.1426, 0.5079, -0.1252, -0.2265, 0.4863, -0.1194, -0.1524, 0.4843, -0.1189, -0.2762, 0.5226, -0.1291, -0.2265, 0.4863, -0.1194, -0.2356, 0.5068, -0.1249, -0.2265, 0.4863, -0.1194, -0.1426, 0.5079, -0.1252, -0.1759, 0.5071, -0.125, -0.2762, 0.5226, -0.1291, -0.2356, 0.5068, -0.1249, -0.185, 0.5277, -0.1305, -0.1759, 0.5071, -0.125, -0.1426, 0.5079, -0.1252, -0.185, 0.5277, -0.1305, -0.2762, 0.5226, -0.1291, -0.185, 0.5277, -0.1305, -0.1687, 0.5669, -0.141, -0.185, 0.5277, -0.1305, -0.1426, 0.5079, -0.1252, -0.1687, 0.5669, -0.141) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_m33vv"] +data = PackedVector3Array(0.191, 0.0352, -0.0163, 0.2202, 0.1865, -0.0098, 0.2202, 0.0352, -0.0098, 0.2202, 0.1865, -0.0098, 0.191, 0.0352, -0.0163, 0.191, 0.1865, -0.0163, 0.2664, 0.1865, -0.2156, 0.2529, 0.1865, -0.2756, 0.2731, 0.1865, -0.2456, 0.2529, 0.1865, -0.2756, 0.2664, 0.1865, -0.2156, 0.2364, 0.1865, -0.2156, 0.2529, 0.1865, -0.2756, 0.2364, 0.1865, -0.2156, 0.2364, 0.1865, -0.2756, 0.097, 0.1865, -0.4782, 0.097, 0.0352, -0.4182, 0.097, 0.0352, -0.4782, 0.097, 0.0352, -0.4182, 0.097, 0.1865, -0.4782, 0.097, 0.1865, -0.4182, 0.2529, 0.0352, -0.2756, 0.2364, 0.1865, -0.2756, 0.2364, 0.0352, -0.2756, 0.2364, 0.1865, -0.2756, 0.2529, 0.0352, -0.2756, 0.2529, 0.1865, -0.2756, -0.2364, 0.0352, -0.2756, -0.2364, 0.1865, -0.2156, -0.2364, 0.1865, -0.2756, -0.2364, 0.1865, -0.2156, -0.2364, 0.0352, -0.2756, -0.2364, 0.0352, -0.2156, -0.2664, 0.0352, -0.2156, -0.2364, 0.1865, -0.2156, -0.2364, 0.0352, -0.2156, -0.2364, 0.1865, -0.2156, -0.2664, 0.0352, -0.2156, -0.2664, 0.1865, -0.2156, 0.2364, 0.0352, -0.2156, 0.2664, 0.1865, -0.2156, 0.2664, 0.0352, -0.2156, 0.2664, 0.1865, -0.2156, 0.2364, 0.0352, -0.2156, 0.2364, 0.1865, -0.2156, 0.2202, 0.1865, -0.0098, 0.2085, 0.1865, -0.0944, 0.2377, 0.1865, -0.0878, 0.2085, 0.1865, -0.0944, 0.2202, 0.1865, -0.0098, 0.191, 0.1865, -0.0163, 0.2377, 0.0352, -0.0878, 0.2085, 0.1865, -0.0944, 0.2085, 0.0352, -0.0944, 0.2085, 0.1865, -0.0944, 0.2377, 0.0352, -0.0878, 0.2377, 0.1865, -0.0878, -0.2364, 0.1865, -0.2156, -0.2529, 0.1865, -0.2756, -0.2364, 0.1865, -0.2756, -0.2529, 0.1865, -0.2756, -0.2364, 0.1865, -0.2156, -0.2664, 0.1865, -0.2156, -0.2529, 0.1865, -0.2756, -0.2664, 0.1865, -0.2156, -0.2731, 0.1865, -0.2456, 0.2364, 0.1865, -0.2756, 0.2364, 0.0352, -0.2156, 0.2364, 0.0352, -0.2756, 0.2364, 0.0352, -0.2156, 0.2364, 0.1865, -0.2756, 0.2364, 0.1865, -0.2156, -0.2364, 0.0352, -0.2756, -0.2529, 0.1865, -0.2756, -0.2529, 0.0352, -0.2756, -0.2529, 0.1865, -0.2756, -0.2364, 0.0352, -0.2756, -0.2364, 0.1865, -0.2756, -0.2085, 0.0352, -0.0944, -0.2377, 0.1865, -0.0878, -0.2377, 0.0352, -0.0878, -0.2377, 0.1865, -0.0878, -0.2085, 0.0352, -0.0944, -0.2085, 0.1865, -0.0944, 0.0555, 0.1865, 0.4545, 0.0555, 0.0352, 0.4782, 0.0555, 0.0352, 0.4545, 0.0555, 0.0352, 0.4782, 0.0555, 0.1865, 0.4545, 0.0555, 0.1865, 0.4782, 0.1162, 0.0352, 0.4545, 0.0555, 0.1865, 0.4545, 0.0555, 0.0352, 0.4545, 0.0555, 0.1865, 0.4545, 0.1162, 0.0352, 0.4545, 0.1162, 0.1865, 0.4545, 0.1108, 0.1865, 0.4782, 0.0555, 0.1865, 0.4545, 0.1162, 0.1865, 0.4545, 0.0555, 0.1865, 0.4545, 0.1108, 0.1865, 0.4782, 0.0555, 0.1865, 0.4782, -0.2202, 0.0352, -0.0098, -0.191, 0.1865, -0.0163, -0.191, 0.0352, -0.0163, -0.191, 0.1865, -0.0163, -0.2202, 0.0352, -0.0098, -0.2202, 0.1865, -0.0098, -0.2085, 0.0352, -0.0944, -0.191, 0.1865, -0.0163, -0.2085, 0.1865, -0.0944, -0.191, 0.1865, -0.0163, -0.2085, 0.0352, -0.0944, -0.191, 0.0352, -0.0163, -0.0938, 0.0352, -0.4782, -0.0938, 0.1865, -0.423, -0.0938, 0.1865, -0.4782, -0.0938, 0.1865, -0.423, -0.0938, 0.0352, -0.4782, -0.0938, 0.0352, -0.423, -0.0555, 0.1865, 0.4782, -0.1162, 0.1865, 0.4545, -0.0555, 0.1865, 0.4545, -0.1162, 0.1865, 0.4545, -0.0555, 0.1865, 0.4782, -0.1108, 0.1865, 0.4782, 0.2085, 0.1865, -0.0944, 0.191, 0.0352, -0.0163, 0.2085, 0.0352, -0.0944, 0.191, 0.0352, -0.0163, 0.2085, 0.1865, -0.0944, 0.191, 0.1865, -0.0163, -0.0555, 0.0352, 0.4545, -0.0555, 0.1865, 0.4782, -0.0555, 0.1865, 0.4545, -0.0555, 0.1865, 0.4782, -0.0555, 0.0352, 0.4545, -0.0555, 0.0352, 0.4782, -0.2202, 0.1865, -0.0098, -0.2085, 0.1865, -0.0944, -0.191, 0.1865, -0.0163, -0.2085, 0.1865, -0.0944, -0.2202, 0.1865, -0.0098, -0.2377, 0.1865, -0.0878, 0.097, 0.1865, -0.4182, 0.1167, 0.1865, -0.4782, 0.157, 0.1865, -0.4182, 0.1167, 0.1865, -0.4782, 0.097, 0.1865, -0.4182, 0.097, 0.1865, -0.4782, -0.0555, 0.0352, 0.4545, -0.1162, 0.1865, 0.4545, -0.1162, 0.0352, 0.4545, -0.1162, 0.1865, 0.4545, -0.0555, 0.0352, 0.4545, -0.0555, 0.1865, 0.4545, -0.0938, 0.1865, -0.423, -0.1167, 0.1865, -0.4782, -0.0938, 0.1865, -0.4782, -0.1167, 0.1865, -0.4782, -0.0938, 0.1865, -0.423, -0.1538, 0.1865, -0.423, 0.097, 0.0352, -0.4182, 0.157, 0.1865, -0.4182, 0.157, 0.0352, -0.4182, 0.157, 0.1865, -0.4182, 0.097, 0.0352, -0.4182, 0.097, 0.1865, -0.4182, -0.1538, 0.0352, -0.423, -0.0938, 0.1865, -0.423, -0.0938, 0.0352, -0.423, -0.0938, 0.1865, -0.423, -0.1538, 0.0352, -0.423, -0.1538, 0.1865, -0.423, 0.191, 0.0352, -0.0163, 0.2202, 0.0352, -0.0098, 0.2202, 0.1865, -0.0098, 0.2202, 0.1865, -0.0098, 0.191, 0.1865, -0.0163, 0.191, 0.0352, -0.0163, 0.2664, 0.1865, -0.2156, 0.2731, 0.1865, -0.2456, 0.2529, 0.1865, -0.2756, 0.2529, 0.1865, -0.2756, 0.2364, 0.1865, -0.2156, 0.2664, 0.1865, -0.2156, 0.2529, 0.1865, -0.2756, 0.2364, 0.1865, -0.2756, 0.2364, 0.1865, -0.2156, 0.097, 0.1865, -0.4782, 0.097, 0.0352, -0.4782, 0.097, 0.0352, -0.4182, 0.097, 0.0352, -0.4182, 0.097, 0.1865, -0.4182, 0.097, 0.1865, -0.4782, -0.1282, 0.2052, -0.5, -0.2964, 0, -0.25, -0.1282, 0, -0.5, -0.2964, 0, -0.25, -0.1282, 0.2052, -0.5, -0.2964, 0.2052, -0.25, -0.1282, 0.2052, -0.5, -0.1282, 0, -0.5, -0.2964, 0, -0.25, -0.2964, 0, -0.25, -0.2964, 0.2052, -0.25, -0.1282, 0.2052, -0.5, 0.1282, 0, -0.5, 0.2964, 0.2052, -0.25, 0.1282, 0.2052, -0.5, 0.2964, 0.2052, -0.25, 0.1282, 0, -0.5, 0.2964, 0, -0.25, 0.1282, 0, -0.5, 0.1282, 0.2052, -0.5, 0.2964, 0.2052, -0.25, 0.2964, 0.2052, -0.25, 0.2964, 0, -0.25, 0.1282, 0, -0.5, 0.2529, 0.0352, -0.2756, 0.2364, 0.0352, -0.2756, 0.2364, 0.1865, -0.2756, 0.2364, 0.1865, -0.2756, 0.2529, 0.1865, -0.2756, 0.2529, 0.0352, -0.2756, -0.2364, 0.0352, -0.2756, -0.2364, 0.1865, -0.2756, -0.2364, 0.1865, -0.2156, -0.2364, 0.1865, -0.2156, -0.2364, 0.0352, -0.2156, -0.2364, 0.0352, -0.2756, -0.2664, 0.0352, -0.2156, -0.2364, 0.0352, -0.2156, -0.2364, 0.1865, -0.2156, -0.2364, 0.1865, -0.2156, -0.2664, 0.1865, -0.2156, -0.2664, 0.0352, -0.2156, 0.2364, 0.0352, -0.2156, 0.2664, 0.0352, -0.2156, 0.2664, 0.1865, -0.2156, 0.2664, 0.1865, -0.2156, 0.2364, 0.1865, -0.2156, 0.2364, 0.0352, -0.2156, 0.2202, 0.1865, -0.0098, 0.2377, 0.1865, -0.0878, 0.2085, 0.1865, -0.0944, 0.2085, 0.1865, -0.0944, 0.191, 0.1865, -0.0163, 0.2202, 0.1865, -0.0098, 0.2964, 0, -0.25, 0.1282, 0.2052, 0.5, 0.2964, 0.2052, -0.25, 0.1282, 0.2052, 0.5, 0.2964, 0, -0.25, 0.1282, 0, 0.5, 0.2964, 0, -0.25, 0.2964, 0.2052, -0.25, 0.1282, 0.2052, 0.5, 0.1282, 0.2052, 0.5, 0.1282, 0, 0.5, 0.2964, 0, -0.25, 0.2377, 0.0352, -0.0878, 0.2085, 0.0352, -0.0944, 0.2085, 0.1865, -0.0944, 0.2085, 0.1865, -0.0944, 0.2377, 0.1865, -0.0878, 0.2377, 0.0352, -0.0878, -0.2364, 0.1865, -0.2156, -0.2364, 0.1865, -0.2756, -0.2529, 0.1865, -0.2756, -0.2529, 0.1865, -0.2756, -0.2664, 0.1865, -0.2156, -0.2364, 0.1865, -0.2156, -0.2529, 0.1865, -0.2756, -0.2731, 0.1865, -0.2456, -0.2664, 0.1865, -0.2156, 0.2364, 0.1865, -0.2756, 0.2364, 0.0352, -0.2756, 0.2364, 0.0352, -0.2156, 0.2364, 0.0352, -0.2156, 0.2364, 0.1865, -0.2156, 0.2364, 0.1865, -0.2756, -0.2731, 0.1865, -0.2456, -0.1108, 0.2052, 0.4782, -0.2731, 0.2052, -0.2456, -0.1108, 0.2052, 0.4782, -0.2731, 0.1865, -0.2456, -0.2664, 0.1865, -0.2156, -0.1108, 0.2052, 0.4782, -0.2664, 0.1865, -0.2156, -0.2377, 0.1865, -0.0878, -0.2377, 0.1865, -0.0878, -0.2664, 0.1865, -0.2156, -0.2664, 0.0352, -0.2156, -0.2664, 0.0352, -0.2156, -0.2377, 0.0352, -0.0878, -0.2377, 0.1865, -0.0878, -0.1108, 0.2052, 0.4782, -0.2377, 0.1865, -0.0878, -0.2202, 0.1865, -0.0098, -0.1108, 0.2052, 0.4782, -0.2202, 0.1865, -0.0098, -0.2202, 0.0352, -0.0098, -0.1108, 0.2052, 0.4782, -0.2202, 0.0352, -0.0098, -0.1162, 0.1865, 0.4545, -0.1108, 0.2052, 0.4782, -0.1162, 0.1865, 0.4545, -0.1108, 0.1865, 0.4782, -0.2202, 0.0352, -0.0098, -0.1162, 0.0352, 0.4545, -0.1162, 0.1865, 0.4545, -0.2731, 0.1865, -0.2456, -0.2731, 0.2052, -0.2456, -0.1108, 0.2052, 0.4782, -0.1108, 0.2052, 0.4782, -0.2664, 0.1865, -0.2156, -0.2731, 0.1865, -0.2456, -0.1108, 0.2052, 0.4782, -0.2377, 0.1865, -0.0878, -0.2664, 0.1865, -0.2156, -0.2377, 0.1865, -0.0878, -0.2664, 0.0352, -0.2156, -0.2664, 0.1865, -0.2156, -0.2664, 0.0352, -0.2156, -0.2377, 0.1865, -0.0878, -0.2377, 0.0352, -0.0878, -0.1108, 0.2052, 0.4782, -0.2202, 0.1865, -0.0098, -0.2377, 0.1865, -0.0878, -0.1108, 0.2052, 0.4782, -0.2202, 0.0352, -0.0098, -0.2202, 0.1865, -0.0098, -0.1108, 0.2052, 0.4782, -0.1162, 0.1865, 0.4545, -0.2202, 0.0352, -0.0098, -0.2202, 0.0352, -0.0098, -0.1162, 0.1865, 0.4545, -0.1162, 0.0352, 0.4545, -0.1108, 0.2052, 0.4782, -0.1108, 0.1865, 0.4782, -0.1162, 0.1865, 0.4545, 0.2664, 0.1865, -0.2156, 0.2377, 0.0352, -0.0878, 0.2664, 0.0352, -0.2156, 0.2664, 0.1865, -0.2156, 0.2377, 0.1865, -0.0878, 0.2377, 0.0352, -0.0878, 0.2664, 0.1865, -0.2156, 0.1108, 0.2052, 0.4782, 0.2377, 0.1865, -0.0878, 0.2377, 0.1865, -0.0878, 0.1108, 0.2052, 0.4782, 0.2202, 0.1865, -0.0098, 0.2664, 0.1865, -0.2156, 0.2731, 0.2052, -0.2456, 0.1108, 0.2052, 0.4782, 0.2731, 0.2052, -0.2456, 0.2664, 0.1865, -0.2156, 0.2731, 0.1865, -0.2456, 0.2202, 0.1865, -0.0098, 0.1108, 0.2052, 0.4782, 0.1162, 0.1865, 0.4545, 0.1162, 0.1865, 0.4545, 0.1108, 0.2052, 0.4782, 0.1108, 0.1865, 0.4782, 0.2202, 0.1865, -0.0098, 0.1162, 0.1865, 0.4545, 0.1162, 0.0352, 0.4545, 0.2202, 0.1865, -0.0098, 0.1162, 0.0352, 0.4545, 0.2202, 0.0352, -0.0098, 0.2664, 0.1865, -0.2156, 0.2664, 0.0352, -0.2156, 0.2377, 0.0352, -0.0878, 0.2664, 0.1865, -0.2156, 0.2377, 0.0352, -0.0878, 0.2377, 0.1865, -0.0878, 0.2664, 0.1865, -0.2156, 0.2377, 0.1865, -0.0878, 0.1108, 0.2052, 0.4782, 0.2377, 0.1865, -0.0878, 0.2202, 0.1865, -0.0098, 0.1108, 0.2052, 0.4782, 0.2664, 0.1865, -0.2156, 0.1108, 0.2052, 0.4782, 0.2731, 0.2052, -0.2456, 0.2731, 0.2052, -0.2456, 0.2731, 0.1865, -0.2456, 0.2664, 0.1865, -0.2156, 0.2202, 0.1865, -0.0098, 0.1162, 0.1865, 0.4545, 0.1108, 0.2052, 0.4782, 0.1162, 0.1865, 0.4545, 0.1108, 0.1865, 0.4782, 0.1108, 0.2052, 0.4782, 0.2202, 0.1865, -0.0098, 0.1162, 0.0352, 0.4545, 0.1162, 0.1865, 0.4545, 0.2202, 0.1865, -0.0098, 0.2202, 0.0352, -0.0098, 0.1162, 0.0352, 0.4545, -0.2364, 0.0352, -0.2756, -0.2529, 0.0352, -0.2756, -0.2529, 0.1865, -0.2756, -0.2529, 0.1865, -0.2756, -0.2364, 0.1865, -0.2756, -0.2364, 0.0352, -0.2756, -0.2085, 0.0352, -0.0944, -0.2377, 0.0352, -0.0878, -0.2377, 0.1865, -0.0878, -0.2377, 0.1865, -0.0878, -0.2085, 0.1865, -0.0944, -0.2085, 0.0352, -0.0944, 0.0555, 0.1865, 0.4545, 0.0555, 0.0352, 0.4545, 0.0555, 0.0352, 0.4782, 0.0555, 0.0352, 0.4782, 0.0555, 0.1865, 0.4782, 0.0555, 0.1865, 0.4545, -0.1282, 0, 0.5, 0.1282, 0.2052, 0.5, 0.1282, 0, 0.5, 0.1282, 0.2052, 0.5, -0.1282, 0, 0.5, -0.1282, 0.2052, 0.5, -0.1282, 0, 0.5, 0.1282, 0, 0.5, 0.1282, 0.2052, 0.5, 0.1282, 0.2052, 0.5, -0.1282, 0.2052, 0.5, -0.1282, 0, 0.5, 0.1162, 0.0352, 0.4545, 0.0555, 0.0352, 0.4545, 0.0555, 0.1865, 0.4545, 0.0555, 0.1865, 0.4545, 0.1162, 0.1865, 0.4545, 0.1162, 0.0352, 0.4545, 0.1282, 0, -0.5, -0.1282, 0.2052, -0.5, -0.1282, 0, -0.5, -0.1282, 0.2052, -0.5, 0.1282, 0, -0.5, 0.1282, 0.2052, -0.5, 0.1282, 0, -0.5, -0.1282, 0, -0.5, -0.1282, 0.2052, -0.5, -0.1282, 0.2052, -0.5, 0.1282, 0.2052, -0.5, 0.1282, 0, -0.5, 0.1108, 0.1865, 0.4782, 0.1162, 0.1865, 0.4545, 0.0555, 0.1865, 0.4545, 0.0555, 0.1865, 0.4545, 0.0555, 0.1865, 0.4782, 0.1108, 0.1865, 0.4782, -0.2202, 0.0352, -0.0098, -0.191, 0.0352, -0.0163, -0.191, 0.1865, -0.0163, -0.191, 0.1865, -0.0163, -0.2202, 0.1865, -0.0098, -0.2202, 0.0352, -0.0098, -0.2085, 0.0352, -0.0944, -0.2085, 0.1865, -0.0944, -0.191, 0.1865, -0.0163, -0.191, 0.1865, -0.0163, -0.191, 0.0352, -0.0163, -0.2085, 0.0352, -0.0944, -0.0555, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, -0.1108, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, -0.0555, 0.1865, 0.4782, 0.0555, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, 0.0555, 0.1865, 0.4782, 0.1108, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, 0.1108, 0.1865, 0.4782, 0.1108, 0.2052, 0.4782, -0.0555, 0.1865, 0.4782, 0.0555, 0.0352, 0.4782, 0.0555, 0.1865, 0.4782, 0.0555, 0.0352, 0.4782, -0.0555, 0.1865, 0.4782, -0.0555, 0.0352, 0.4782, -0.0555, 0.1865, 0.4782, -0.1108, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, -0.1108, 0.2052, 0.4782, 0.0555, 0.1865, 0.4782, -0.0555, 0.1865, 0.4782, -0.0555, 0.1865, 0.4782, 0.0555, 0.1865, 0.4782, 0.0555, 0.0352, 0.4782, 0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4782, -0.0555, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, 0.1108, 0.1865, 0.4782, 0.0555, 0.1865, 0.4782, -0.1108, 0.2052, 0.4782, 0.1108, 0.2052, 0.4782, 0.1108, 0.1865, 0.4782, -0.0938, 0.0352, -0.4782, -0.0938, 0.1865, -0.4782, -0.0938, 0.1865, -0.423, -0.0938, 0.1865, -0.423, -0.0938, 0.0352, -0.423, -0.0938, 0.0352, -0.4782, 0.097, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, 0.1167, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, 0.097, 0.1865, -0.4782, -0.0938, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, -0.0938, 0.1865, -0.4782, -0.1167, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, -0.1167, 0.1865, -0.4782, -0.1167, 0.2052, -0.4782, 0.097, 0.1865, -0.4782, -0.0938, 0.0352, -0.4782, -0.0938, 0.1865, -0.4782, -0.0938, 0.0352, -0.4782, 0.097, 0.1865, -0.4782, 0.097, 0.0352, -0.4782, 0.097, 0.1865, -0.4782, 0.1167, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, 0.1167, 0.2052, -0.4782, -0.0938, 0.1865, -0.4782, 0.097, 0.1865, -0.4782, 0.097, 0.1865, -0.4782, -0.0938, 0.1865, -0.4782, -0.0938, 0.0352, -0.4782, -0.0938, 0.0352, -0.4782, 0.097, 0.0352, -0.4782, 0.097, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, -0.1167, 0.1865, -0.4782, -0.0938, 0.1865, -0.4782, 0.1167, 0.2052, -0.4782, -0.1167, 0.2052, -0.4782, -0.1167, 0.1865, -0.4782, -0.0555, 0.1865, 0.4782, -0.0555, 0.1865, 0.4545, -0.1162, 0.1865, 0.4545, -0.1162, 0.1865, 0.4545, -0.1108, 0.1865, 0.4782, -0.0555, 0.1865, 0.4782, 0.2085, 0.1865, -0.0944, 0.2085, 0.0352, -0.0944, 0.191, 0.0352, -0.0163, 0.191, 0.0352, -0.0163, 0.191, 0.1865, -0.0163, 0.2085, 0.1865, -0.0944, 0.1282, 0, -0.5, 0.1282, 0, 0.5, 0.2964, 0, -0.25, 0.1282, 0, 0.5, 0.1282, 0, -0.5, -0.1282, 0, 0.5, -0.1282, 0, 0.5, 0.1282, 0, -0.5, -0.1282, 0, -0.5, -0.1282, 0, 0.5, -0.1282, 0, -0.5, -0.2964, 0, -0.25, 0.1282, 0, -0.5, 0.2964, 0, -0.25, 0.1282, 0, 0.5, 0.1282, 0, 0.5, -0.1282, 0, 0.5, 0.1282, 0, -0.5, -0.1282, 0, 0.5, -0.1282, 0, -0.5, 0.1282, 0, -0.5, -0.1282, 0, 0.5, -0.2964, 0, -0.25, -0.1282, 0, -0.5, -0.2964, 0.2052, -0.25, -0.1282, 0, 0.5, -0.2964, 0, -0.25, -0.1282, 0, 0.5, -0.2964, 0.2052, -0.25, -0.1282, 0.2052, 0.5, -0.2964, 0.2052, -0.25, -0.2964, 0, -0.25, -0.1282, 0, 0.5, -0.1282, 0, 0.5, -0.1282, 0.2052, 0.5, -0.2964, 0.2052, -0.25, 0.157, 0.1865, -0.4182, 0.2529, 0.0352, -0.2756, 0.157, 0.0352, -0.4182, 0.157, 0.1865, -0.4182, 0.2529, 0.1865, -0.2756, 0.2529, 0.0352, -0.2756, 0.157, 0.1865, -0.4182, 0.2731, 0.2052, -0.2456, 0.2529, 0.1865, -0.2756, 0.2529, 0.1865, -0.2756, 0.2731, 0.2052, -0.2456, 0.2731, 0.1865, -0.2456, 0.157, 0.1865, -0.4182, 0.1167, 0.2052, -0.4782, 0.2731, 0.2052, -0.2456, 0.1167, 0.2052, -0.4782, 0.157, 0.1865, -0.4182, 0.1167, 0.1865, -0.4782, 0.157, 0.1865, -0.4182, 0.157, 0.0352, -0.4182, 0.2529, 0.0352, -0.2756, 0.157, 0.1865, -0.4182, 0.2529, 0.0352, -0.2756, 0.2529, 0.1865, -0.2756, 0.157, 0.1865, -0.4182, 0.2529, 0.1865, -0.2756, 0.2731, 0.2052, -0.2456, 0.2529, 0.1865, -0.2756, 0.2731, 0.1865, -0.2456, 0.2731, 0.2052, -0.2456, 0.157, 0.1865, -0.4182, 0.2731, 0.2052, -0.2456, 0.1167, 0.2052, -0.4782, 0.1167, 0.2052, -0.4782, 0.1167, 0.1865, -0.4782, 0.157, 0.1865, -0.4182, -0.0555, 0.0352, 0.4545, -0.0555, 0.1865, 0.4545, -0.0555, 0.1865, 0.4782, -0.0555, 0.1865, 0.4782, -0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4545, -0.2202, 0.1865, -0.0098, -0.191, 0.1865, -0.0163, -0.2085, 0.1865, -0.0944, -0.2085, 0.1865, -0.0944, -0.2377, 0.1865, -0.0878, -0.2202, 0.1865, -0.0098, 0.2364, 0.0352, -0.2756, 0.157, 0.0352, -0.4182, 0.2529, 0.0352, -0.2756, 0.157, 0.0352, -0.4182, 0.2364, 0.0352, -0.2756, 0.2364, 0.0352, -0.2156, 0.157, 0.0352, -0.4182, 0.2364, 0.0352, -0.2156, 0.2085, 0.0352, -0.0944, 0.2364, 0.0352, -0.2156, 0.2377, 0.0352, -0.0878, 0.2085, 0.0352, -0.0944, 0.2377, 0.0352, -0.0878, 0.2364, 0.0352, -0.2156, 0.2664, 0.0352, -0.2156, 0.157, 0.0352, -0.4182, 0.2085, 0.0352, -0.0944, 0.191, 0.0352, -0.0163, 0.191, 0.0352, -0.0163, 0.1162, 0.0352, 0.4545, 0.157, 0.0352, -0.4182, 0.1162, 0.0352, 0.4545, 0.191, 0.0352, -0.0163, 0.2202, 0.0352, -0.0098, 0.157, 0.0352, -0.4182, 0.1162, 0.0352, 0.4545, 0.097, 0.0352, -0.4182, 0.097, 0.0352, -0.4182, 0.1162, 0.0352, 0.4545, 0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.4782, 0.097, 0.0352, -0.4182, 0.0555, 0.0352, 0.4545, 0.097, 0.0352, -0.4182, -0.0938, 0.0352, -0.4782, 0.097, 0.0352, -0.4782, -0.0938, 0.0352, -0.4782, 0.0555, 0.0352, 0.4545, 0.0555, 0.0352, 0.4782, -0.0938, 0.0352, -0.4782, 0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4545, 0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.4782, -0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.423, -0.0938, 0.0352, -0.423, -0.0555, 0.0352, 0.4545, -0.1162, 0.0352, 0.4545, -0.0938, 0.0352, -0.423, -0.1162, 0.0352, 0.4545, -0.1538, 0.0352, -0.423, -0.1538, 0.0352, -0.423, -0.1162, 0.0352, 0.4545, -0.191, 0.0352, -0.0163, -0.191, 0.0352, -0.0163, -0.1162, 0.0352, 0.4545, -0.2202, 0.0352, -0.0098, -0.2364, 0.0352, -0.2756, -0.1538, 0.0352, -0.423, -0.191, 0.0352, -0.0163, -0.1538, 0.0352, -0.423, -0.2364, 0.0352, -0.2756, -0.2529, 0.0352, -0.2756, -0.2364, 0.0352, -0.2756, -0.191, 0.0352, -0.0163, -0.2085, 0.0352, -0.0944, -0.2085, 0.0352, -0.0944, -0.2364, 0.0352, -0.2156, -0.2364, 0.0352, -0.2756, -0.2364, 0.0352, -0.2156, -0.2085, 0.0352, -0.0944, -0.2377, 0.0352, -0.0878, -0.2364, 0.0352, -0.2156, -0.2377, 0.0352, -0.0878, -0.2664, 0.0352, -0.2156, 0.2364, 0.0352, -0.2756, 0.2529, 0.0352, -0.2756, 0.157, 0.0352, -0.4182, 0.157, 0.0352, -0.4182, 0.2364, 0.0352, -0.2156, 0.2364, 0.0352, -0.2756, 0.157, 0.0352, -0.4182, 0.2085, 0.0352, -0.0944, 0.2364, 0.0352, -0.2156, 0.2364, 0.0352, -0.2156, 0.2085, 0.0352, -0.0944, 0.2377, 0.0352, -0.0878, 0.2377, 0.0352, -0.0878, 0.2664, 0.0352, -0.2156, 0.2364, 0.0352, -0.2156, 0.157, 0.0352, -0.4182, 0.191, 0.0352, -0.0163, 0.2085, 0.0352, -0.0944, 0.191, 0.0352, -0.0163, 0.157, 0.0352, -0.4182, 0.1162, 0.0352, 0.4545, 0.1162, 0.0352, 0.4545, 0.2202, 0.0352, -0.0098, 0.191, 0.0352, -0.0163, 0.157, 0.0352, -0.4182, 0.097, 0.0352, -0.4182, 0.1162, 0.0352, 0.4545, 0.097, 0.0352, -0.4182, 0.0555, 0.0352, 0.4545, 0.1162, 0.0352, 0.4545, -0.0938, 0.0352, -0.4782, 0.0555, 0.0352, 0.4545, 0.097, 0.0352, -0.4182, 0.097, 0.0352, -0.4182, 0.097, 0.0352, -0.4782, -0.0938, 0.0352, -0.4782, -0.0938, 0.0352, -0.4782, 0.0555, 0.0352, 0.4782, 0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.4782, -0.0555, 0.0352, 0.4545, 0.0555, 0.0352, 0.4782, 0.0555, 0.0352, 0.4782, -0.0555, 0.0352, 0.4545, -0.0555, 0.0352, 0.4782, -0.0938, 0.0352, -0.4782, -0.0938, 0.0352, -0.423, -0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.423, -0.1162, 0.0352, 0.4545, -0.0555, 0.0352, 0.4545, -0.0938, 0.0352, -0.423, -0.1538, 0.0352, -0.423, -0.1162, 0.0352, 0.4545, -0.1538, 0.0352, -0.423, -0.191, 0.0352, -0.0163, -0.1162, 0.0352, 0.4545, -0.191, 0.0352, -0.0163, -0.2202, 0.0352, -0.0098, -0.1162, 0.0352, 0.4545, -0.2364, 0.0352, -0.2756, -0.191, 0.0352, -0.0163, -0.1538, 0.0352, -0.423, -0.1538, 0.0352, -0.423, -0.2529, 0.0352, -0.2756, -0.2364, 0.0352, -0.2756, -0.2364, 0.0352, -0.2756, -0.2085, 0.0352, -0.0944, -0.191, 0.0352, -0.0163, -0.2085, 0.0352, -0.0944, -0.2364, 0.0352, -0.2756, -0.2364, 0.0352, -0.2156, -0.2364, 0.0352, -0.2156, -0.2377, 0.0352, -0.0878, -0.2085, 0.0352, -0.0944, -0.2364, 0.0352, -0.2156, -0.2664, 0.0352, -0.2156, -0.2377, 0.0352, -0.0878, 0.097, 0.1865, -0.4182, 0.157, 0.1865, -0.4182, 0.1167, 0.1865, -0.4782, 0.1167, 0.1865, -0.4782, 0.097, 0.1865, -0.4782, 0.097, 0.1865, -0.4182, -0.0555, 0.0352, 0.4545, -0.1162, 0.0352, 0.4545, -0.1162, 0.1865, 0.4545, -0.1162, 0.1865, 0.4545, -0.0555, 0.1865, 0.4545, -0.0555, 0.0352, 0.4545, -0.0938, 0.1865, -0.423, -0.0938, 0.1865, -0.4782, -0.1167, 0.1865, -0.4782, -0.1167, 0.1865, -0.4782, -0.1538, 0.1865, -0.423, -0.0938, 0.1865, -0.423, -0.1167, 0.1865, -0.4782, -0.2731, 0.2052, -0.2456, -0.1167, 0.2052, -0.4782, -0.2731, 0.2052, -0.2456, -0.1167, 0.1865, -0.4782, -0.1538, 0.1865, -0.423, -0.2731, 0.2052, -0.2456, -0.1538, 0.1865, -0.423, -0.2529, 0.1865, -0.2756, -0.2731, 0.2052, -0.2456, -0.2529, 0.1865, -0.2756, -0.2731, 0.1865, -0.2456, -0.2529, 0.1865, -0.2756, -0.1538, 0.1865, -0.423, -0.1538, 0.0352, -0.423, -0.1538, 0.0352, -0.423, -0.2529, 0.0352, -0.2756, -0.2529, 0.1865, -0.2756, -0.1167, 0.1865, -0.4782, -0.1167, 0.2052, -0.4782, -0.2731, 0.2052, -0.2456, -0.2731, 0.2052, -0.2456, -0.1538, 0.1865, -0.423, -0.1167, 0.1865, -0.4782, -0.2731, 0.2052, -0.2456, -0.2529, 0.1865, -0.2756, -0.1538, 0.1865, -0.423, -0.2731, 0.2052, -0.2456, -0.2731, 0.1865, -0.2456, -0.2529, 0.1865, -0.2756, -0.2529, 0.1865, -0.2756, -0.1538, 0.0352, -0.423, -0.1538, 0.1865, -0.423, -0.1538, 0.0352, -0.423, -0.2529, 0.1865, -0.2756, -0.2529, 0.0352, -0.2756, 0.097, 0.0352, -0.4182, 0.157, 0.0352, -0.4182, 0.157, 0.1865, -0.4182, 0.157, 0.1865, -0.4182, 0.097, 0.1865, -0.4182, 0.097, 0.0352, -0.4182, -0.1538, 0.0352, -0.423, -0.0938, 0.0352, -0.423, -0.0938, 0.1865, -0.423, -0.0938, 0.1865, -0.423, -0.1538, 0.1865, -0.423, -0.1538, 0.0352, -0.423, 0.1108, 0.2052, 0.4782, -0.1108, 0.2052, 0.4782, -0.1282, 0.2052, 0.5, -0.1108, 0.2052, 0.4782, -0.2731, 0.2052, -0.2456, -0.1282, 0.2052, 0.5, 0.1108, 0.2052, 0.4782, -0.1282, 0.2052, 0.5, 0.1282, 0.2052, 0.5, -0.2731, 0.2052, -0.2456, -0.2964, 0.2052, -0.25, -0.1282, 0.2052, 0.5, 0.2731, 0.2052, -0.2456, 0.1108, 0.2052, 0.4782, 0.1282, 0.2052, 0.5, 0.1282, 0.2052, 0.5, 0.2964, 0.2052, -0.25, 0.2731, 0.2052, -0.2456, 0.2731, 0.2052, -0.2456, 0.2964, 0.2052, -0.25, 0.1282, 0.2052, -0.5, 0.1282, 0.2052, -0.5, 0.1167, 0.2052, -0.4782, 0.2731, 0.2052, -0.2456, -0.1282, 0.2052, -0.5, -0.2964, 0.2052, -0.25, -0.2731, 0.2052, -0.2456, 0.1282, 0.2052, -0.5, -0.1282, 0.2052, -0.5, 0.1167, 0.2052, -0.4782, -0.1282, 0.2052, -0.5, -0.2731, 0.2052, -0.2456, -0.1167, 0.2052, -0.4782, -0.1282, 0.2052, -0.5, -0.1167, 0.2052, -0.4782, 0.1167, 0.2052, -0.4782, 0.1108, 0.2052, 0.4782, -0.1282, 0.2052, 0.5, -0.1108, 0.2052, 0.4782, -0.1108, 0.2052, 0.4782, -0.1282, 0.2052, 0.5, -0.2731, 0.2052, -0.2456, 0.1108, 0.2052, 0.4782, 0.1282, 0.2052, 0.5, -0.1282, 0.2052, 0.5, -0.2731, 0.2052, -0.2456, -0.1282, 0.2052, 0.5, -0.2964, 0.2052, -0.25, 0.2731, 0.2052, -0.2456, 0.1282, 0.2052, 0.5, 0.1108, 0.2052, 0.4782, 0.1282, 0.2052, 0.5, 0.2731, 0.2052, -0.2456, 0.2964, 0.2052, -0.25, 0.2731, 0.2052, -0.2456, 0.1282, 0.2052, -0.5, 0.2964, 0.2052, -0.25, 0.1282, 0.2052, -0.5, 0.2731, 0.2052, -0.2456, 0.1167, 0.2052, -0.4782, -0.1282, 0.2052, -0.5, -0.2731, 0.2052, -0.2456, -0.2964, 0.2052, -0.25, 0.1282, 0.2052, -0.5, 0.1167, 0.2052, -0.4782, -0.1282, 0.2052, -0.5, -0.1282, 0.2052, -0.5, -0.1167, 0.2052, -0.4782, -0.2731, 0.2052, -0.2456, -0.1282, 0.2052, -0.5, 0.1167, 0.2052, -0.4782, -0.1167, 0.2052, -0.4782) + +[sub_resource type="BoxShape3D" id="BoxShape3D_iwl6u"] +size = Vector3(75, 50, 1) + +[node name="Level" type="Node3D"] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0) + +[node name="Floor" type="StaticBody3D" parent="." groups=["grass"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) +collision_layer = 16 +collision_mask = 25 + +[node name="FloorMesh" type="MeshInstance3D" parent="Floor"] +mesh = SubResource("BoxMesh_2yq04") +skeleton = NodePath("../..") +surface_material_override/0 = ExtResource("1_qtipf") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.58423, 0) +shape = SubResource("BoxShape3D_h1mhl") + +[node name="ProtonScatter" type="Node3D" parent="."] +script = ExtResource("1_lsxa8") +modifier_stack = SubResource("Resource_dci7f") +Performance/use_chunks = true +Performance/chunk_dimensions = Vector3(15, 15, 15) + +[node name="ScatterItem" type="Node3D" parent="ProtonScatter"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/rocks-tall.fbx" + +[node name="ScatterItem2" type="Node3D" parent="ProtonScatter"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/rocks.fbx" + +[node name="ScatterItem3" type="Node3D" parent="ProtonScatter"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/pine-fall.fbx" + +[node name="ScatterShape" type="Node3D" parent="ProtonScatter"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 0, 0, 0) +script = ExtResource("8_qmuw2") +shape = SubResource("Resource_g8bsm") + +[node name="ProtonScatter2" type="Node3D" parent="."] +script = ExtResource("1_lsxa8") +modifier_stack = SubResource("Resource_s4qmr") +Performance/use_chunks = true +Performance/chunk_dimensions = Vector3(15, 15, 15) + +[node name="ScatterShape" type="Node3D" parent="ProtonScatter2"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 0, 0, 0) +script = ExtResource("8_qmuw2") +shape = SubResource("Resource_h8r3r") + +[node name="ScatterItem" type="Node3D" parent="ProtonScatter2"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/rocks-tall.fbx" + +[node name="ScatterItem2" type="Node3D" parent="ProtonScatter2"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/rocks.fbx" + +[node name="ScatterItem3" type="Node3D" parent="ProtonScatter2"] +script = ExtResource("7_lxf5h") +path = "res://assets/models/graveyard/pine-fall.fbx" + +[node name="road" parent="." instance=ExtResource("11_wedri")] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, -0.5, 0) + +[node name="road5" parent="." instance=ExtResource("11_wedri")] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -2.62268e-07, -0.5, 6) + +[node name="road4" parent="." instance=ExtResource("11_wedri")] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 7, -0.5, 3.0598e-07) + +[node name="road3" parent="." instance=ExtResource("11_wedri")] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, -0.5, -6) + +[node name="road2" parent="." instance=ExtResource("11_wedri")] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -8, -0.5, -3.49691e-07) + +[node name="GhostAltar" type="StaticBody3D" parent="." groups=["altar"]] +transform = Transform3D(3, 0, 0, 0, 3, 0, 0, 0, 3, 8, -0.5, 0) +collision_layer = 48 +collision_mask = 0 +script = ExtResource("12_sgicc") +boss = ExtResource("13_ipnuw") +text = "Summon Thalmaris, Phantom of the Forgotten" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GhostAltar"] +transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_wshc2") + +[node name="CollisionShape3D2" type="CollisionShape3D" parent="GhostAltar"] +transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 0, 0.27035, 0) +shape = SubResource("ConcavePolygonShape3D_mtivy") + +[node name="trunk" parent="GhostAltar" instance=ExtResource("15_c67l2")] +transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 0, 0, 0) + +[node name="lantern-candle" parent="GhostAltar/trunk" instance=ExtResource("14_av1qw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.27035, 0) + +[node name="ZombieAltar" type="StaticBody3D" parent="." groups=["altar"]] +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5, 8) +collision_layer = 48 +collision_mask = 0 +script = ExtResource("12_sgicc") +boss = ExtResource("16_865on") +text = "Summon Zombie" + +[node name="grave" parent="ZombieAltar" instance=ExtResource("11_lndfe")] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0) + +[node name="grave-border" parent="ZombieAltar/grave" instance=ExtResource("12_p1f68")] + +[node name="gravestone-bevel" parent="ZombieAltar/grave" instance=ExtResource("13_vs6iy")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1) + +[node name="shovel-dirt" parent="ZombieAltar/grave" instance=ExtResource("14_40phn")] +transform = Transform3D(-0.965926, 0, -0.258819, 0, 1, 0, 0.258819, 0, -0.965926, 0.4, 0, 0.4) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ZombieAltar"] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_wc2g1") + +[node name="CollisionShape3D2" type="CollisionShape3D" parent="ZombieAltar"] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_h50ml") + +[node name="CollisionShape3D3" type="CollisionShape3D" parent="ZombieAltar"] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 5) +shape = SubResource("ConcavePolygonShape3D_k4a3a") + +[node name="CollisionShape3D4" type="CollisionShape3D" parent="ZombieAltar"] +transform = Transform3D(-4.82963, 0, -1.2941, 0, 5, 0, 1.2941, 0, -4.82963, 2, 0, 2) +shape = SubResource("ConcavePolygonShape3D_5b24f") + +[node name="VampirAltar" type="StaticBody3D" parent="." groups=["altar"]] +transform = Transform3D(3, 0, 0, 0, 3, 0, 0, 0, 3, 0, -0.5, -8) +collision_layer = 48 +collision_mask = 0 +script = ExtResource("12_sgicc") +boss = ExtResource("21_6g5m3") +text = "Summon Draeven, Scourge of the Vampires" + +[node name="coffin" parent="VampirAltar" instance=ExtResource("10_lpnkf")] + +[node name="CollisionShape3D2" type="CollisionShape3D" parent="VampirAltar"] +transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_m33vv") + +[node name="BoundingBox" type="StaticBody3D" parent="."] +collision_layer = 64 +collision_mask = 0 +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D2" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -30) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D3" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 30, 0, 0) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D7" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -30, 0, 0) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D4" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(-0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, -0.707107, -20, 0, -20) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D8" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(-0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, -0.707107, 20, 0, 20) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D5" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 20, 0, -20) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="CollisionShape3D6" type="CollisionShape3D" parent="BoundingBox"] +transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, -20, 0, 20) +shape = SubResource("BoxShape3D_iwl6u") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("24_nmj7i") +bus = &"SFX" diff --git a/scenes/main.tscn b/scenes/main.tscn new file mode 100644 index 0000000..bd0855b --- /dev/null +++ b/scenes/main.tscn @@ -0,0 +1,369 @@ +[gd_scene load_steps=20 format=3 uid="uid://cwfu5gdkeefe3"] + +[ext_resource type="Script" path="res://scripts/main.gd" id="1_nernh"] +[ext_resource type="PackedScene" uid="uid://bdupkh0grwy27" path="res://scenes/player/player.tscn" id="2_mkirp"] +[ext_resource type="PackedScene" uid="uid://dimee6owoxhf2" path="res://scenes/level.tscn" id="3_lvuoj"] +[ext_resource type="Shader" path="res://shaders/sky.gdshader" id="3_mfmvq"] +[ext_resource type="PackedScene" uid="uid://b05wfry8s5tbp" path="res://scenes/pumpkin_reload.tscn" id="6_klwtk"] +[ext_resource type="Script" path="res://scripts/reload_spawn.gd" id="6_w1d3r"] +[ext_resource type="Script" path="res://scripts/ui.gd" id="8_bqhqc"] +[ext_resource type="Texture2D" uid="uid://cdu5ivhyslcap" path="res://assets/textures/icons/icons8-heart-100.png" id="8_of85v"] +[ext_resource type="Texture2D" uid="uid://c70t6m1044igs" path="res://assets/textures/icons/icons8-ammo-100.png" id="9_0sfqx"] +[ext_resource type="AudioStream" uid="uid://dhy07vqrtpbqi" path="res://assets/sounds/sfx/collect.mp3" id="10_gjx05"] +[ext_resource type="Script" path="res://addons/post_processing/node/post_process.gd" id="11_iquu3"] +[ext_resource type="AudioStream" uid="uid://7plhbwhkredd" path="res://assets/sounds/boss_theme.ogg" id="11_wj3v0"] +[ext_resource type="Script" path="res://addons/post_processing/resource/post_processing_configuration.gd" id="12_go0uk"] +[ext_resource type="Script" path="res://scripts/restart.gd" id="13_kmxrh"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ynxdi"] +shader = ExtResource("3_mfmvq") +shader_parameter/color_top = Color(0.34125, 0.0525, 0.375, 1) +shader_parameter/color_horizon = Color(0.470703, 0.115057, 0.256023, 1) +shader_parameter/color_bottom = Color(0.345703, 0.25582, 0.134824, 1) +shader_parameter/exponent_factor_top = 5.0 +shader_parameter/exponent_factor_bottom = 5.0 +shader_parameter/intensity_amp = 1.0 + +[sub_resource type="Sky" id="Sky_bxymo"] +sky_material = SubResource("ShaderMaterial_ynxdi") + +[sub_resource type="Environment" id="Environment_yd3rs"] +background_mode = 2 +background_color = Color(0.262745, 0.792157, 0.792157, 1) +sky = SubResource("Sky_bxymo") +ambient_light_source = 2 +ambient_light_color = Color(0.882812, 0.882812, 0.882812, 1) +ambient_light_energy = 0.5 + +[sub_resource type="BoxShape3D" id="BoxShape3D_glomt"] +size = Vector3(50, 1, 50) + +[sub_resource type="Resource" id="Resource_24c4b"] +script = ExtResource("12_go0uk") +reload = false +ASCII = false +ASCIISize = Vector2(4, 9) +ChromaticAberration = true +StrenghtCA = 2.0 +Blur = false +L_O_D = 1.0 +FishEye = false +FishEyeAspect = 1.0 +FishEyeDistortion = 1.0 +FishEyeRadius = 1.0 +FishEyeAlpha = 1.0 +FishEyeCrop = 1.0 +FishEyeCropColor = Color(0, 0, 0, 1) +Vignette = false +VignetteIntensity = 0.4 +VignetteOpacity = 0.5 +VignetteR_G_B = Color(0, 0, 0, 1) +Glitch = false +GlitchRange = 0.05 +GlitchNoiseQuality = 250.0 +GlitchIntenity = 0.0088 +GlitchOffset = 0.03 +GlitchColorOffset = 1.3 +Outline = false +OutlineColor = Color(0, 0, 0, 1) +OutlineThreshold = 0.0 +OutlineBlend = 0.01 +Grain = true +GrainPower = 75 +CircularWaves = false +CircularWavesAmplitude = 2.0 +CircularWavesFrequency = 12.69 +CircularWavesRippleRate = 9.2 +SpeedLines = false +SpeedLinesColor = Color(1, 1, 1, 1) +SpeedLinesCount = 2 +SpeedLineDensity = 0.072 +SpeedLineSpeed = 20 +ColorCorrection = false +ColorCorrectionTint = Color(0, 0, 0, 1) +ColorCorrectionBrightness = 0.0 +ColorCorrectionSaturation = 0.0 +Palette = false +Pixelate = true +PixelatePixelSize = 2 +CRT = false +overlay = false +scanlines_opacity = 0.4 +scanlines_width = 0.25 +grille_opacity = 0.3 +pixelate = true +roll_speed = 8.0 +roll_size = 15.0 +roll_variation = 1.8 +distort_intensity = 0.05 +noise_opacity = 0.4 +noise_speed = 5.0 +static_noise_intensity = 0.06 +aberration = 0.03 +brightness = 1.4 +discolor = true +warp_amount = 1.0 +clip_warp = false +vignette_intensity = 0.4 +vignette_opacity = 0.5 +AnalogMonitor = false +AnalogMonitorResolution = Vector2(256, 256) +ScreenShake = false +ScreenShakePower = 0.1 + +[node name="Main" type="Node3D"] +script = ExtResource("1_nernh") + +[node name="Player" parent="." instance=ExtResource("2_mkirp")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8) + +[node name="Level" parent="." instance=ExtResource("3_lvuoj")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_yd3rs") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.731723, 0.681603, 0, -0.681603, 0.731723, 0, 9.75889, 0) + +[node name="SpawnReloadTimer" type="Timer" parent="."] +wait_time = 5.0 +autostart = true + +[node name="PumpkinSpawnRange" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 0 +script = ExtResource("6_w1d3r") +reload_scene = ExtResource("6_klwtk") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PumpkinSpawnRange"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0239105, 0, -0.679527) +shape = SubResource("BoxShape3D_glomt") + +[node name="UI" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 +script = ExtResource("8_bqhqc") + +[node name="VBoxContainer2" type="VBoxContainer" parent="UI"] +layout_mode = 1 +offset_left = 20.0 +offset_top = 20.0 +offset_right = 106.0 +offset_bottom = 70.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="UI/VBoxContainer2"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="UI/VBoxContainer2/HBoxContainer"] +custom_minimum_size = Vector2(30, 30) +layout_mode = 2 +texture = ExtResource("8_of85v") +expand_mode = 1 +stretch_mode = 4 + +[node name="PlayerHealthLabel" type="Label" parent="UI/VBoxContainer2/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Health: %s" + +[node name="HBoxContainer2" type="HBoxContainer" parent="UI/VBoxContainer2"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="UI/VBoxContainer2/HBoxContainer2"] +custom_minimum_size = Vector2(30, 30) +layout_mode = 2 +texture = ExtResource("9_0sfqx") +expand_mode = 1 +stretch_mode = 4 + +[node name="AmmoLabel" type="Label" parent="UI/VBoxContainer2/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Ammo: %s" + +[node name="VBoxContainer" type="VBoxContainer" parent="UI"] +layout_mode = 1 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -266.0 +grow_horizontal = 2 +grow_vertical = 0 +alignment = 1 + +[node name="EndPanel" type="Control" parent="UI"] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="UI/EndPanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(1, 1, 1, 0.52549) + +[node name="CenterContainer" type="CenterContainer" parent="UI/EndPanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="UI/EndPanel/CenterContainer"] +custom_minimum_size = Vector2(294.79, 300) +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +theme_override_colors/font_outline_color = Color(0, 0, 0, 1) +theme_override_constants/outline_size = 5 +text = "You defeat all Bosses !" +horizontal_alignment = 1 + +[node name="Control" type="Control" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 20) +layout_mode = 2 + +[node name="TimeRow" type="HBoxContainer" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 + +[node name="Field" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/TimeRow"] +custom_minimum_size = Vector2(225, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Time" + +[node name="Value" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/TimeRow"] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "0" +horizontal_alignment = 2 + +[node name="AmmoRow" type="HBoxContainer" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 + +[node name="Field" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/AmmoRow"] +custom_minimum_size = Vector2(225, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Ammo used" + +[node name="Value" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/AmmoRow"] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "0" +horizontal_alignment = 2 + +[node name="WeakpointRow" type="HBoxContainer" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 + +[node name="Field" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/WeakpointRow"] +custom_minimum_size = Vector2(225, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Weakpoint hit" + +[node name="Value" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/WeakpointRow"] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "0" +horizontal_alignment = 2 + +[node name="HSeparator" type="HSeparator" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Score" type="HBoxContainer" parent="UI/EndPanel/CenterContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Field" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/Score"] +custom_minimum_size = Vector2(225, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Total" + +[node name="Value" type="Label" parent="UI/EndPanel/CenterContainer/VBoxContainer/Score"] +custom_minimum_size = Vector2(75, 0) +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "H" +horizontal_alignment = 2 + +[node name="Advices" type="VBoxContainer" parent="UI/EndPanel"] +visible = false +layout_mode = 1 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 50.0 +offset_top = -162.0 +offset_right = 50.0 +offset_bottom = -50.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="Title" type="Label" parent="UI/EndPanel/Advices"] +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "Advices:" + +[node name="Reload" type="Label" parent="UI/EndPanel/Advices"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "- Find pumpkins on the ground to reload" + +[node name="Weakpoint" type="Label" parent="UI/EndPanel/Advices"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/outline_size = 2 +text = "- Hit weakpoints to do more damage" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +process_mode = 3 +stream = ExtResource("10_gjx05") +bus = &"SFX" + +[node name="Theme" type="AudioStreamPlayer" parent="."] +process_mode = 3 +stream = ExtResource("11_wj3v0") +autoplay = true +bus = &"Music" +parameters/looping = true + +[node name="PostProcess" type="CanvasLayer" parent="."] +script = ExtResource("11_iquu3") +configuration = SubResource("Resource_24c4b") + +[node name="Restart" type="Node" parent="."] +process_mode = 2 +script = ExtResource("13_kmxrh") + +[connection signal="life_changed" from="Player" to="UI" method="_on_player_life_changed"] +[connection signal="remaining_ammo_changed" from="Player" to="UI" method="_on_player_remaining_ammo_changed"] +[connection signal="timeout" from="SpawnReloadTimer" to="PumpkinSpawnRange" method="_on_timer_spawn_pumpkin_timeout"] +[connection signal="reload_player" from="PumpkinSpawnRange" to="Player" method="_on_pumpkin_spawn_range_reload_player"] diff --git a/scenes/pattern/forward_attack.tscn b/scenes/pattern/forward_attack.tscn new file mode 100644 index 0000000..80394d9 --- /dev/null +++ b/scenes/pattern/forward_attack.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=3 uid="uid://bn7ocpngr4t5j"] + +[ext_resource type="Script" path="res://scripts/pattern.gd" id="1_20x6m"] + +[node name="ForwardAttack" type="Node3D" node_paths=PackedStringArray("start", "end")] +script = ExtResource("1_20x6m") +pattern_name = "Charge" +start = NodePath("Start") +end = NodePath("End") + +[node name="Start" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20) + +[node name="End" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 20) diff --git a/scenes/pattern/stun_attack.tscn b/scenes/pattern/stun_attack.tscn new file mode 100644 index 0000000..35e7bb4 --- /dev/null +++ b/scenes/pattern/stun_attack.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=3 uid="uid://blwh3fy4o7o5j"] + +[ext_resource type="Script" path="res://scripts/pattern.gd" id="1_7wmxe"] + +[node name="StunAttack" type="Node3D" node_paths=PackedStringArray("start", "end")] +script = ExtResource("1_7wmxe") +pattern_name = "Stun" +start = NodePath("Start") +end = NodePath("End") + +[node name="Start" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) + +[node name="End" type="Marker3D" parent="."] diff --git a/scenes/pattern/stun_attack_variation.tscn b/scenes/pattern/stun_attack_variation.tscn new file mode 100644 index 0000000..81e2ede --- /dev/null +++ b/scenes/pattern/stun_attack_variation.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=3 uid="uid://ci5g6hvmxqhrd"] + +[ext_resource type="Script" path="res://scripts/pattern.gd" id="1_m2c1a"] + +[node name="StunAttack" type="Node3D" node_paths=PackedStringArray("start", "end")] +script = ExtResource("1_m2c1a") +pattern_name = "var. Stun" +start = NodePath("Start") +end = NodePath("End") + +[node name="Start" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 10, 0) + +[node name="End" type="Marker3D" parent="."] diff --git a/scenes/player/head.tscn b/scenes/player/head.tscn new file mode 100644 index 0000000..820e787 --- /dev/null +++ b/scenes/player/head.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=3 uid="uid://b8drbos167vf8"] + +[ext_resource type="Script" path="res://scripts/player/head.gd" id="1_enjfg"] + +[node name="Head" type="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.64, 0) +script = ExtResource("1_enjfg") + +[node name="Camera" type="Camera3D" parent="."] +current = true +far = 300.0 diff --git a/scenes/player/movement_controller.tscn b/scenes/player/movement_controller.tscn new file mode 100644 index 0000000..d7ad336 --- /dev/null +++ b/scenes/player/movement_controller.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://lqyku5wn2wo0"] + +[ext_resource type="Script" path="res://scripts/player/movement_controller.gd" id="1_h4547"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_fn1rj"] + +[node name="MovementController" type="CharacterBody3D"] +collision_layer = 2 +collision_mask = 3 +floor_block_on_wall = false +floor_snap_length = 0.5 +script = ExtResource("1_h4547") + +[node name="Collision" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_fn1rj") diff --git a/scenes/player/player.tscn b/scenes/player/player.tscn new file mode 100644 index 0000000..e10b3bc --- /dev/null +++ b/scenes/player/player.tscn @@ -0,0 +1,96 @@ +[gd_scene load_steps=10 format=3 uid="uid://bdupkh0grwy27"] + +[ext_resource type="PackedScene" uid="uid://lqyku5wn2wo0" path="res://scenes/player/movement_controller.tscn" id="1_t1jcr"] +[ext_resource type="PackedScene" uid="uid://b8drbos167vf8" path="res://scenes/player/head.tscn" id="2_41iu1"] +[ext_resource type="Script" path="res://scripts/player/sprint.gd" id="3_bgqcu"] +[ext_resource type="AudioStream" uid="uid://cn2gylf3jet62" path="res://assets/sounds/sfx/cannon/bang_03.ogg" id="4_44ms2"] +[ext_resource type="Script" path="res://scripts/player/interact_ray.gd" id="4_g6dmq"] +[ext_resource type="Script" path="res://scripts/canon.gd" id="5_w0j3b"] +[ext_resource type="Script" path="res://scripts/life.gd" id="6_rny40"] +[ext_resource type="Script" path="res://scripts/player/footsteep.gd" id="10_jo4mt"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tb2ry"] +albedo_color = Color(0, 0, 0, 1) + +[node name="Player" groups=["player"] instance=ExtResource("1_t1jcr")] +collision_layer = 1 +collision_mask = 86 + +[node name="Head" parent="." index="1" instance=ExtResource("2_41iu1")] + +[node name="Foot" type="RayCast3D" parent="Head" index="1"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -1, 0) +target_position = Vector3(0, 0, -2) +collision_mask = 16 + +[node name="Canon" type="CSGCylinder3D" parent="Head" index="2"] +transform = Transform3D(0.986182, 0.160164, -0.0423441, -0.0172882, -0.154708, -0.987809, -0.164762, 0.974891, -0.149801, 1.51927, -0.64, -1.30804) +material = SubResource("StandardMaterial3D_tb2ry") +script = ExtResource("5_w0j3b") + +[node name="Marker3D" type="Marker3D" parent="Head/Canon" index="0"] +transform = Transform3D(0.986182, 1.19209e-07, -0.165667, 0.160164, -0.255597, 0.953424, -0.0423439, -0.966783, -0.252065, 0.0225487, -1.40787, 0.0306617) + +[node name="CanonTimer" type="Timer" parent="Head/Canon" index="1"] +wait_time = 0.25 +one_shot = true + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Head/Canon" index="2"] +stream = ExtResource("4_44ms2") +bus = &"SFX" + +[node name="CenterContainer" type="CenterContainer" parent="Head/Canon" index="3"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="Head/Canon/CenterContainer" index="0"] +custom_minimum_size = Vector2(5, 5) +layout_mode = 2 + +[node name="InteractRay" type="RayCast3D" parent="Head" index="3"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0) +target_position = Vector3(0, -4, 0) +collision_mask = 32 +script = ExtResource("4_g6dmq") + +[node name="CenterContainer" type="CenterContainer" parent="Head/InteractRay" index="0"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Head/InteractRay/CenterContainer" index="0"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Head/InteractRay/CenterContainer/VBoxContainer" index="0"] +custom_minimum_size = Vector2(30, 30) +layout_mode = 2 +size_flags_stretch_ratio = 0.5 +expand_mode = 1 +stretch_mode = 5 + +[node name="Label" type="Label" parent="Head/InteractRay/CenterContainer/VBoxContainer" index="1"] +layout_mode = 2 +theme_override_constants/outline_size = 5 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="SprintComponent" type="Node" parent="." index="2"] +script = ExtResource("3_bgqcu") + +[node name="FootstepComponent" type="Node" parent="." index="3"] +script = ExtResource("10_jo4mt") +feet_path = NodePath("../Head/Foot") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="FootstepComponent" index="0"] +volume_db = -10.0 +bus = &"SFX" + +[node name="LifeComponent" type="Node" parent="." index="4"] +script = ExtResource("6_rny40") + +[connection signal="life_changed" from="LifeComponent" to="." method="_on_life_component_life_changed"] diff --git a/scenes/pumpkin_reload.tscn b/scenes/pumpkin_reload.tscn new file mode 100644 index 0000000..475cc71 --- /dev/null +++ b/scenes/pumpkin_reload.tscn @@ -0,0 +1,18 @@ +[gd_scene load_steps=4 format=3 uid="uid://b05wfry8s5tbp"] + +[ext_resource type="PackedScene" uid="uid://b40norqbwvnu7" path="res://assets/models/graveyard/pumpkin-tall.fbx" id="1_dayah"] +[ext_resource type="Script" path="res://scripts/pumpkin_reload.gd" id="1_kwobk"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_jr1y5"] + +[node name="PumpkinReload" type="StaticBody3D"] +collision_layer = 32 +collision_mask = 0 +script = ExtResource("1_kwobk") +text = "Reload" + +[node name="pumpkin-tall" parent="." instance=ExtResource("1_dayah")] +transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 0, -0.72616, 0) + +[node name="PumpkinInterractionCollision" type="CollisionShape3D" parent="."] +shape = SubResource("BoxShape3D_jr1y5") diff --git a/scenes/weakpoint.tscn b/scenes/weakpoint.tscn new file mode 100644 index 0000000..787c620 --- /dev/null +++ b/scenes/weakpoint.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=5 format=3 uid="uid://df805u6l6lhoh"] + +[ext_resource type="Script" path="res://scripts/boss/weakpoint.gd" id="1_vdgd2"] + +[sub_resource type="SphereMesh" id="SphereMesh_0eloh"] +radial_segments = 6 +rings = 3 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hxrbn"] +albedo_color = Color(1, 0.713131, 0.137745, 1) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_3qcov"] +data = PackedVector3Array(0, 0.5, 0, 0, 0.5, 0, 0, 0.3536, 0.3536, 0, 0.5, 0, 0.3062, 0.3536, 0.1768, 0, 0.3536, 0.3536, 0, 0.5, 0, 0, 0.5, 0, 0.3062, 0.3536, 0.1768, 0, 0.5, 0, 0.3062, 0.3536, -0.1768, 0.3062, 0.3536, 0.1768, 0, 0.5, 0, 0, 0.5, 0, 0.3062, 0.3536, -0.1768, 0, 0.5, 0, 0, 0.3536, -0.3536, 0.3062, 0.3536, -0.1768, 0, 0.5, 0, 0, 0.5, 0, 0, 0.3536, -0.3536, 0, 0.5, 0, -0.3062, 0.3536, -0.1768, 0, 0.3536, -0.3536, 0, 0.5, 0, 0, 0.5, 0, -0.3062, 0.3536, -0.1768, 0, 0.5, 0, -0.3062, 0.3536, 0.1768, -0.3062, 0.3536, -0.1768, 0, 0.5, 0, 0, 0.5, 0, -0.3062, 0.3536, 0.1768, 0, 0.5, 0, 0, 0.3536, 0.3536, -0.3062, 0.3536, 0.1768, 0, 0.3536, 0.3536, 0.3062, 0.3536, 0.1768, 0, 0, 0.5, 0.3062, 0.3536, 0.1768, 0.433, 0, 0.25, 0, 0, 0.5, 0.3062, 0.3536, 0.1768, 0.3062, 0.3536, -0.1768, 0.433, 0, 0.25, 0.3062, 0.3536, -0.1768, 0.433, 0, -0.25, 0.433, 0, 0.25, 0.3062, 0.3536, -0.1768, 0, 0.3536, -0.3536, 0.433, 0, -0.25, 0, 0.3536, -0.3536, 0, 0, -0.5, 0.433, 0, -0.25, 0, 0.3536, -0.3536, -0.3062, 0.3536, -0.1768, 0, 0, -0.5, -0.3062, 0.3536, -0.1768, -0.433, 0, -0.25, 0, 0, -0.5, -0.3062, 0.3536, -0.1768, -0.3062, 0.3536, 0.1768, -0.433, 0, -0.25, -0.3062, 0.3536, 0.1768, -0.433, 0, 0.25, -0.433, 0, -0.25, -0.3062, 0.3536, 0.1768, 0, 0.3536, 0.3536, -0.433, 0, 0.25, 0, 0.3536, 0.3536, 0, 0, 0.5, -0.433, 0, 0.25, 0, 0, 0.5, 0.433, 0, 0.25, 0, -0.3536, 0.3536, 0.433, 0, 0.25, 0.3062, -0.3536, 0.1768, 0, -0.3536, 0.3536, 0.433, 0, 0.25, 0.433, 0, -0.25, 0.3062, -0.3536, 0.1768, 0.433, 0, -0.25, 0.3062, -0.3536, -0.1768, 0.3062, -0.3536, 0.1768, 0.433, 0, -0.25, 0, 0, -0.5, 0.3062, -0.3536, -0.1768, 0, 0, -0.5, 0, -0.3536, -0.3536, 0.3062, -0.3536, -0.1768, 0, 0, -0.5, -0.433, 0, -0.25, 0, -0.3536, -0.3536, -0.433, 0, -0.25, -0.3062, -0.3536, -0.1768, 0, -0.3536, -0.3536, -0.433, 0, -0.25, -0.433, 0, 0.25, -0.3062, -0.3536, -0.1768, -0.433, 0, 0.25, -0.3062, -0.3536, 0.1768, -0.3062, -0.3536, -0.1768, -0.433, 0, 0.25, 0, 0, 0.5, -0.3062, -0.3536, 0.1768, 0, 0, 0.5, 0, -0.3536, 0.3536, -0.3062, -0.3536, 0.1768, 0, -0.3536, 0.3536, 0.3062, -0.3536, 0.1768, 0, -0.5, 0, 0.3062, -0.3536, 0.1768, 0, -0.5, 0, 0, -0.5, 0, 0.3062, -0.3536, 0.1768, 0.3062, -0.3536, -0.1768, 0, -0.5, 0, 0.3062, -0.3536, -0.1768, 0, -0.5, 0, 0, -0.5, 0, 0.3062, -0.3536, -0.1768, 0, -0.3536, -0.3536, 0, -0.5, 0, 0, -0.3536, -0.3536, 0, -0.5, 0, 0, -0.5, 0, 0, -0.3536, -0.3536, -0.3062, -0.3536, -0.1768, 0, -0.5, 0, -0.3062, -0.3536, -0.1768, 0, -0.5, 0, 0, -0.5, 0, -0.3062, -0.3536, -0.1768, -0.3062, -0.3536, 0.1768, 0, -0.5, 0, -0.3062, -0.3536, 0.1768, 0, -0.5, 0, 0, -0.5, 0, -0.3062, -0.3536, 0.1768, 0, -0.3536, 0.3536, 0, -0.5, 0, 0, -0.3536, 0.3536, 0, -0.5, 0, 0, -0.5, 0) + +[node name="Weakpoint" type="StaticBody3D"] +collision_layer = 4 +collision_mask = 0 +script = ExtResource("1_vdgd2") + +[node name="WeakpointMesh" type="MeshInstance3D" parent="."] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) +mesh = SubResource("SphereMesh_0eloh") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_hxrbn") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) +shape = SubResource("ConcavePolygonShape3D_3qcov") diff --git a/scripts/altar.gd b/scripts/altar.gd new file mode 100644 index 0000000..66c558e --- /dev/null +++ b/scripts/altar.gd @@ -0,0 +1,32 @@ +class_name Altar +extends Interactable + +@export var boss: PackedScene + +var triggered: bool = false + +@onready var audio_player = $"../AudioStreamPlayer" + + +func _ready(): + super._ready() + text = "Summon" + + +func is_interactable(): + return not triggered + + +func interact(): + if triggered: + return + + triggered = true + remove_highlight_material(self) + + # Summon boss + audio_player.play() + var boss_instance = boss.instantiate() + add_child(boss_instance) + boss_instance.global_position.y = 5 + boss_instance.get_children()[0].enabled = true diff --git a/scripts/ammo.gd b/scripts/ammo.gd new file mode 100644 index 0000000..2d10b72 --- /dev/null +++ b/scripts/ammo.gd @@ -0,0 +1,12 @@ +class_name Ammo +extends RigidBody3D + + +func _on_body_entered(body): + if body is Weakpoint: + body.hit_by_ammo(5) + elif body is Boss: + body.hit(1) + # TODO: play explode animation + # TODO: play explode sfx + queue_free() diff --git a/scripts/boss/blink.gd b/scripts/boss/blink.gd new file mode 100644 index 0000000..d13a61c --- /dev/null +++ b/scripts/boss/blink.gd @@ -0,0 +1,39 @@ +extends Node + +@export_node_path var root_path: NodePath = ^"../" + +var blink_material: ShaderMaterial = preload("res://resources/blink.tres").duplicate(true) + +var blink_activated: bool = false +var blink_timer: float = 0 + +@onready var blink_time: float = 2.0 +@onready var root_node: Node = get_node(root_path) + + +func _ready(): + setup_blink_material(root_node) + + +func _process(delta): + if blink_activated: + if blink_timer <= 0: + blink_material.set_shader_parameter("hit", false) + blink_activated = false + else: + # decrease timer + blink_timer -= delta + + +func setup_blink_material(root: Node): + for child in root.get_children(): + if child is MeshInstance3D: + child.set_material_overlay(blink_material) + setup_blink_material(child) + + +func blink(): + blink_material.set_shader_parameter("hit", true) + blink_activated = true + # reset timer + blink_timer = blink_time diff --git a/scripts/boss/boss.gd b/scripts/boss/boss.gd new file mode 100644 index 0000000..a95b3c9 --- /dev/null +++ b/scripts/boss/boss.gd @@ -0,0 +1,137 @@ +class_name Boss +extends RigidBody3D + +enum State { NOOP, SETUP_PATTERN, ATTACK } + +@export var enabled := true +@export var type: String + +var patterns: Array[Pattern] = [ + # Charge (maybe made AoE?) + preload("res://scenes/pattern/stun_attack.tscn").instantiate(), + preload("res://scenes/pattern/stun_attack_variation.tscn").instantiate(), + preload("res://scenes/pattern/forward_attack.tscn").instantiate(), +] + +var current_pattern: Pattern +var pattern_cooldown: float = 0 +var state: State +var pattern_transform: Transform3D +var speed = 10 + +@onready var weakpoint: Weakpoint = $Weakpoint +@onready var blink_component = $BlinkComponent +@onready var life_component = $LifeComponent +@onready var hit_sound_component = $HitSoundComponent +@onready var player: Node3D = get_tree().get_nodes_in_group(&"player")[0] +#@onready var debug_state_label: Label3D = $DebugStateLabel +#@onready var anim: AnimationPlayer = $"character-zombie/AnimationPlayer" + + +func _ready(): + add_to_group("boss") + + weakpoint.connect("hit", hit) + + set_state(State.NOOP) + enabled = false + + +func hit(damage: int) -> void: + enabled = true + + if damage > 4: + # cancel current action and wait 4s + set_state(State.NOOP) + pattern_cooldown = -2.0 + + apply_central_impulse((global_position - player.global_position).normalized() * 20) + + var current_target := player.global_position + current_target.y = 0 + look_at(current_target, Vector3.UP, true) + + # TODO: play hit sfx + blink_component.blink() + hit_sound_component.play() + life_component.apply_damage(damage) + speed += damage + + +func set_state(new_state): + # set new state to ATTACK + if new_state == State.ATTACK: + state = State.ATTACK + pattern_cooldown = 0 + linear_velocity = Vector3.ZERO + + # Update the matrix to apply to the pattern + var current_target := player.global_position + current_target.y = 0 + pattern_transform.origin = current_target + + # Made the boss looking to the player + var dest := current_pattern.end_pos(pattern_transform) + look_at(Vector3(dest.x, global_position.y, dest.z), Vector3.UP, true) + + elif new_state == State.SETUP_PATTERN: + state = State.SETUP_PATTERN + linear_velocity = Vector3.ZERO + current_pattern = patterns[randi() % patterns.size()] + + # Compute the "world matrix" to apply to the pattern + # This is useful to always focus the player and made some variation with the rotation + var current_target := player.global_position + current_target.y = 0 + pattern_transform = Transform3D(Basis(Vector3.UP, randf_range(0, TAU)), current_target) + + # Made the boss looking to the player + var dest := current_pattern.start_pos(pattern_transform) + look_at(Vector3(dest.x, global_position.y, dest.z), Vector3.UP, true) + + # set new state to NOOP + elif new_state == State.NOOP: + state = State.NOOP + pattern_cooldown = 0 + current_pattern = null + linear_velocity = Vector3.ZERO + + +func _process(delta): + if not enabled or not is_instance_valid(player): + return + + #if debug_state_label != null: + #if state == State.ATTACK: + #debug_state_label.set_text("Attack (%s)" % current_pattern.pattern_name) + #elif state == State.SETUP_PATTERN: + #debug_state_label.set_text("Prepare Attack (%s)" % current_pattern.pattern_name) + #else: + #debug_state_label.set_text("NOOP") + + if state == State.NOOP: + if pattern_cooldown > 0.0: + set_state(State.SETUP_PATTERN) + + elif state == State.SETUP_PATTERN: + if global_position.distance_to(current_pattern.start_pos(pattern_transform)) < 2.5: + set_state(State.ATTACK) + + apply_central_impulse( + ( + (current_pattern.start_pos(pattern_transform) - global_position).normalized() + * delta + * speed + ) + ) + + elif state == State.ATTACK: + # apply the pattern + apply_central_impulse( + current_pattern.attack_direction(pattern_transform).normalized() * delta * speed + ) + + if pattern_cooldown > 2.5: + set_state(State.NOOP) + + pattern_cooldown += delta diff --git a/scripts/boss/hit_sound.gd b/scripts/boss/hit_sound.gd new file mode 100644 index 0000000..bdf03b8 --- /dev/null +++ b/scripts/boss/hit_sound.gd @@ -0,0 +1,22 @@ +extends Node + +const SOUNDS = [ + preload("res://assets/sounds/sfx/hit/hit1.ogg"), + preload("res://assets/sounds/sfx/hit/hit2.ogg"), + preload("res://assets/sounds/sfx/hit/hit3.ogg"), + preload("res://assets/sounds/sfx/hit/hit4.ogg"), + preload("res://assets/sounds/sfx/hit/hit5.ogg"), +] + +@onready var player = get_node(^"%AudioStreamPlayer") + + +func _ready() -> void: + randomize() + + +func play() -> void: + var audio: AudioStreamOggVorbis = SOUNDS[randi() % len(SOUNDS)] + + player.stream = audio + player.play() diff --git a/scripts/boss/weakpoint.gd b/scripts/boss/weakpoint.gd new file mode 100644 index 0000000..0ab46eb --- /dev/null +++ b/scripts/boss/weakpoint.gd @@ -0,0 +1,28 @@ +class_name Weakpoint +extends StaticBody3D + +signal hit(damage) + +@export var invulnerability_time: float = 2.0 + +var invulnerability_activated: bool = false +var invulnerability_timer: float = 0 + + +func hit_by_ammo(damage: int): + if not invulnerability_activated: + Global.weakpoint_hit += 1 + hit.emit(damage) + invulnerability_activated = true + # reset timer + invulnerability_timer = invulnerability_time + else: + print("invulnerability") + + +func _process(delta): + if invulnerability_timer <= 0: + invulnerability_activated = false + else: + # decrease timer + invulnerability_timer -= delta diff --git a/scripts/boss/zombie.gd b/scripts/boss/zombie.gd new file mode 100644 index 0000000..89ccd08 --- /dev/null +++ b/scripts/boss/zombie.gd @@ -0,0 +1,9 @@ +class_name Zombie +extends Boss + +@onready var anim: AnimationPlayer = $"character-zombie/AnimationPlayer" + + +func _ready(): + super._ready() + anim.play("holding-both") diff --git a/scripts/canon.gd b/scripts/canon.gd new file mode 100644 index 0000000..1d6c151 --- /dev/null +++ b/scripts/canon.gd @@ -0,0 +1,36 @@ +extends CSGCylinder3D + +const AmmoScene := preload("res://scenes/ammo.tscn") + +@export var max_ammo_count = 10 +var ammo_count = 0 + +@onready var spawn = $Marker3D +@onready var player: AudioStreamPlayer = get_node(^"AudioStreamPlayer") + + +func _init(): + ammo_count = max_ammo_count + + +func _unhandled_input(event): + if event.is_action_pressed(&"shoot") and ammo_count > 0 and $CanonTimer.time_left == 0: + Global.ammo_used += 1 + # TODO: play shoot sfx + player.play() + + var ammo := AmmoScene.instantiate() + get_owner().get_parent().add_child(ammo) + ammo.global_position = spawn.global_position + + var dir = (Vector3.FORWARD * 50) - spawn.position + var speed := 50 + ammo.apply_impulse(get_parent().global_basis * dir.normalized() * speed - spawn.position) + + ammo_count -= 1 + $CanonTimer.start() + get_owner().remaining_ammo_changed.emit(ammo_count) + + +func reload(ammo_qty: int): + ammo_count += ammo_qty diff --git a/scripts/global.gd b/scripts/global.gd new file mode 100644 index 0000000..b9f1229 --- /dev/null +++ b/scripts/global.gd @@ -0,0 +1,83 @@ +extends Node + +var start_time = Time.get_unix_time_from_system() +var player_is_dead: bool = false + +# Debug +var debug_1hp: bool = false + +var ammo_used: int = 0 +var weakpoint_hit: int = 0 +var played_time: float +var killed_boss: int = 0 + +var max_played_time := 30.0 * 60.0 # 30 minutes +var max_ammo_used := 200.0 # one ammo for each life point +var max_weakpoint_hit := 10.0 # max_ammo_used / 4 +var max_killed_boss := 3.0 + + +func get_score(): + var score + if player_is_dead: + score = ( + clampf(weakpoint_hit / max_weakpoint_hit, 0.0, 1.0) * 0.15 + + clampf(killed_boss / max_killed_boss, 0.0, 1.0) * 0.5 + ) + else: + score = ( + clampf((max_played_time - played_time) / max_played_time, 0.0, 1.0) * 0.2 + + clampf((max_ammo_used - ammo_used) / max_ammo_used, 0.0, 1.0) * 0.15 + + clampf(weakpoint_hit / max_weakpoint_hit, 0.0, 1.0) * 0.15 + + clampf(killed_boss / max_killed_boss, 0.0, 1.0) * 0.5 + ) + + if score >= 0.9: + return "S" + if score >= 0.7: + return "A" + if score >= 0.4: + return "B" + if score >= 0.2: + return "C" + return "D" + + +func set_score(main): + main.get_node("Theme").stop() + + var end_time = Time.get_unix_time_from_system() + played_time = end_time - start_time + + main.get_node("UI/VBoxContainer2").hide() + main.get_node("UI/VBoxContainer").hide() + main.get_node("Player/Head/Canon/CenterContainer").hide() + + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/TimeRow/Value").set_text( + "%02d:%02d" % [played_time / 60, fmod(played_time, 60)] + ) + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/AmmoRow/Value").set_text( + str(ammo_used) + ) + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/WeakpointRow/Value").set_text( + str(weakpoint_hit) + ) + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/Score/Value").set_text(get_score()) + + if player_is_dead: + # Game Over + main.get_node("UI/EndPanel/Advices").show() + main.get_node("UI/EndPanel/ColorRect").set_color(Color("#00000071")) + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/Label").set_text( + "You lose, try again.." + ) + else: + # main.get_node("AudioStreamPlayer").play() + + main.get_node("UI/EndPanel/ColorRect").set_color(Color("#ffffff86")) + main.get_node("UI/EndPanel/CenterContainer/VBoxContainer/Label").set_text( + "You defeat all bosses !" + ) + + main.get_node("UI/EndPanel").show() + get_tree().paused = true diff --git a/scripts/interactable.gd b/scripts/interactable.gd new file mode 100644 index 0000000..74fe6fd --- /dev/null +++ b/scripts/interactable.gd @@ -0,0 +1,32 @@ +class_name Interactable +extends StaticBody3D + +const HighlighMaterial = preload("res://resources/interactable.tres") + +@export var text: String = "" + + +func _ready() -> void: + setup_highlight_material(self) + + +func is_interactable(): + return false + + +func interact(): + pass + + +func setup_highlight_material(root: Node): + for child in root.get_children(): + if child is MeshInstance3D: + child.set_material_overlay(HighlighMaterial) + setup_highlight_material(child) + + +func remove_highlight_material(root: Node): + for child in root.get_children(): + if child is MeshInstance3D: + child.set_material_overlay(null) + remove_highlight_material(child) diff --git a/scripts/life.gd b/scripts/life.gd new file mode 100644 index 0000000..2090ba9 --- /dev/null +++ b/scripts/life.gd @@ -0,0 +1,62 @@ +extends Node + +signal life_changed(new_life) + +const DieSFX = preload("res://assets/sounds/sfx/hit/die1.ogg") + +@export_node_path("CollisionObject3D") var body_path: NodePath = ^"../" + +@export var initial_life := 10 + +var cooldown_timer: float = 0 + +@onready var body_node: CollisionObject3D = get_node(body_path) +@onready var life = initial_life + + +func _ready(): + if Global.debug_1hp: + life = 1 + + +func apply_damage(damage: int) -> void: + life -= damage + life_changed.emit(life) + + +func _process(delta: float) -> void: + if life <= 0: + dead() + + if body_node is CharacterBody3D: + if cooldown_timer <= 0: + for index in body_node.get_slide_collision_count(): + var collision: KinematicCollision3D = body_node.get_slide_collision(index) + var collider: Object = collision.get_collider() + if collider is Boss: + # TODO: add cooldown + apply_damage(1) + cooldown_timer = 2.0 + else: + cooldown_timer -= delta + + +func dead() -> void: + # TODO: play dead animation + # TODO: play dead sfx + if body_node is not CharacterBody3D: + if body_node.enabled: + body_node.enabled = false + + Global.killed_boss += 1 + + var audio_player = get_node(^"%AudioStreamPlayer") + #audio_player.connect("finished", get_owner().queue_free) + audio_player.stream = DieSFX + audio_player.play() + + $"../Destruction".destroy() + else: + Global.player_is_dead = true + + #gzet_owner().queue_free() diff --git a/scripts/main.gd b/scripts/main.gd new file mode 100644 index 0000000..0baf1fa --- /dev/null +++ b/scripts/main.gd @@ -0,0 +1,40 @@ +extends Node3D + + +func _ready() -> void: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + # Handle debug arguments + var args := OS.get_cmdline_user_args() + if "--win" in args: + Global.set_score(self) + elif "--dead" in args: + Global.player_is_dead = true + Global.set_score(self) + elif "--1hp" in args: + Global.debug_1hp = true + + Global.start_time = Time.get_unix_time_from_system() + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed(&"quit"): + get_tree().quit() + + if event.is_action_pressed(&"change_mouse_input"): + match Input.get_mouse_mode(): + Input.MOUSE_MODE_CAPTURED: + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + Input.MOUSE_MODE_VISIBLE: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +func _process(_delta): + if Global.player_is_dead: + Global.set_score(self) + + for altar in get_tree().get_nodes_in_group("altar"): + if not altar.triggered: + return + if len(get_tree().get_nodes_in_group("boss")) == 0: + Global.set_score(self) diff --git a/scripts/pattern.gd b/scripts/pattern.gd new file mode 100644 index 0000000..dd67dc2 --- /dev/null +++ b/scripts/pattern.gd @@ -0,0 +1,18 @@ +class_name Pattern +extends Node3D + +@export var pattern_name: String +@export var start: Marker3D +@export var end: Marker3D + + +func attack_direction(world: Transform3D) -> Vector3: + return end_pos(world) - start_pos(world) + + +func start_pos(world: Transform3D) -> Vector3: + return world * start.position + + +func end_pos(world: Transform3D) -> Vector3: + return world * end.position diff --git a/scripts/player/footsteep.gd b/scripts/player/footsteep.gd new file mode 100644 index 0000000..d88da22 --- /dev/null +++ b/scripts/player/footsteep.gd @@ -0,0 +1,64 @@ +extends Node + +@export var feet_path: NodePath + +var footsteep_timer: float = 0 +var footsteep_list: Dictionary = {} + +var dont_repeat: int = 0 + +@onready var feet: RayCast3D = get_node(feet_path) +@onready var character: MovementController = get_owner() +@onready var player: AudioStreamPlayer = get_node(^"AudioStreamPlayer") + + +func _ready() -> void: + randomize() + + footsteep_list = { + &"grass": + [ + preload("res://assets/sounds/sfx/footsteep/grass/0.ogg"), + preload("res://assets/sounds/sfx/footsteep/grass/1.ogg"), + preload("res://assets/sounds/sfx/footsteep/grass/2.ogg"), + preload("res://assets/sounds/sfx/footsteep/grass/3.ogg"), + preload("res://assets/sounds/sfx/footsteep/grass/4.ogg"), + preload("res://assets/sounds/sfx/footsteep/grass/5.ogg"), + ], + &"concrete": + [ + preload("res://assets/sounds/sfx/footsteep/concrete/0.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/1.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/2.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/3.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/4.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/5.ogg"), + preload("res://assets/sounds/sfx/footsteep/concrete/6.ogg"), + ], + } + + +func _process(_delta) -> void: + if footsteep_timer <= 0 and character.direction and feet.is_colliding(): + var collider = feet.get_collider() + + if collider: + for g in collider.get_groups(): + if footsteep_list.has(g): + var footsteep_sounds = footsteep_list[g] + + if len(footsteep_sounds) > 0: + var audio: AudioStreamOggVorbis = footsteep_sounds[ + randi() % len(footsteep_sounds) + ] + + player.stream = audio + player.play() + + var temp_accel: float = ( + character.get_accel() + float(character.speed - 10) / 4.0 + ) + footsteep_timer = 1 - (0.06 * temp_accel) + break + else: + footsteep_timer -= _delta diff --git a/scripts/player/head.gd b/scripts/player/head.gd new file mode 100644 index 0000000..e3ee194 --- /dev/null +++ b/scripts/player/head.gd @@ -0,0 +1,44 @@ +extends Node3D + +@export_node_path("Camera3D") var cam_path := NodePath(^"Camera") + +@export var mouse_sensitivity := 2.0 +@export var y_limit := 90.0 + +var mouse_axis := Vector2() +var rot := Vector3() + +@onready var cam: Camera3D = get_node(cam_path) + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + mouse_sensitivity = mouse_sensitivity / 1000 + y_limit = deg_to_rad(y_limit) + + +# Called when there is an input event +func _input(event: InputEvent) -> void: + # Mouse look (only if the mouse is captured). + if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + mouse_axis = event.relative + camera_rotation() + + +# Called every physics tick. 'delta' is constant +func _physics_process(delta: float) -> void: + var joystick_axis := Input.get_vector(&"look_left", &"look_right", &"look_down", &"look_up") + + if joystick_axis != Vector2.ZERO: + mouse_axis = joystick_axis * 1000.0 * delta + camera_rotation() + + +func camera_rotation() -> void: + # Horizontal mouse look. + rot.y -= mouse_axis.x * mouse_sensitivity + # Vertical mouse look. + rot.x = clamp(rot.x - mouse_axis.y * mouse_sensitivity, -y_limit, y_limit) + + get_owner().rotation.y = rot.y + rotation.x = rot.x diff --git a/scripts/player/interact_ray.gd b/scripts/player/interact_ray.gd new file mode 100644 index 0000000..a6c4bf3 --- /dev/null +++ b/scripts/player/interact_ray.gd @@ -0,0 +1,34 @@ +class_name InteractRay +extends RayCast3D + +const E = preload("res://addons/controller_icons/assets/key/e.png") + +@onready var icon = get_node(^"CenterContainer/VBoxContainer/TextureRect") +@onready var label: Label = get_node(^"CenterContainer/VBoxContainer/Label") +@onready var rect = get_node(^"../Canon/CenterContainer") + + +func _ready(): + add_exception(owner) + + +func _physics_process(_delta): + if is_colliding(): + var detected = get_collider() + if detected is Interactable and detected.is_interactable(): + icon.set_texture(E) + label.set_text(detected.text) + rect.hide() + + if Input.is_action_just_pressed(&"interact"): + detected.interact() + get_viewport().set_input_as_handled() + else: + icon.set_texture(null) + label.set_text("") + rect.show() + + else: + icon.set_texture(null) + label.set_text("") + rect.show() diff --git a/scripts/player/movement_controller.gd b/scripts/player/movement_controller.gd new file mode 100644 index 0000000..d43a028 --- /dev/null +++ b/scripts/player/movement_controller.gd @@ -0,0 +1,89 @@ +class_name MovementController +extends CharacterBody3D + +signal remaining_ammo_changed(new_quantiy) +signal life_changed(new_life) + +@export_range(0.0, 1.0, 0.05) var air_control := 0.3 + +@export var gravity_multiplier := 3.0 +@export var speed := 10 +@export var acceleration := 8 +@export var deceleration := 10 +@export var jump_height := 10 + +var direction := Vector3() +var input_axis := Vector2() + +# Get the gravity from the project settings to be synced with RigidDynamicBody nodes. +@onready +var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") * gravity_multiplier + + +# Called every physics tick. 'delta' is constant +func _physics_process(delta: float) -> void: + input_axis = Input.get_vector( + &"pm_movebackward", &"pm_moveforward", &"pm_moveleft", &"pm_moveright" + ) + + direction_input() + + if is_on_floor(): + if Input.is_action_just_pressed(&"jump"): + velocity.y = jump_height + else: + velocity.y -= gravity * delta + + accelerate(delta) + + move_and_slide() + + +func direction_input() -> void: + direction = Vector3() + var aim: Basis = get_global_transform().basis + direction = aim.z * -input_axis.x + aim.x * input_axis.y + + +func get_accel() -> float: + var temp_vel := velocity + temp_vel.y = 0 + + var temp_accel: float + if direction.dot(temp_vel) > 0: + temp_accel = acceleration + else: + temp_accel = deceleration + + if not is_on_floor(): + temp_accel *= air_control + + return temp_accel + + +func accelerate(delta: float) -> void: + # Using only the horizontal velocity, interpolate towards the input. + var temp_vel := velocity + temp_vel.y = 0 + + var temp_accel := get_accel() + var target: Vector3 = direction * speed + + temp_vel = temp_vel.lerp(target, temp_accel * delta) + + velocity.x = temp_vel.x + velocity.z = temp_vel.z + + +func _ready() -> void: + remaining_ammo_changed.emit($Head/Canon.ammo_count) + life_changed.emit($LifeComponent.life) + + +func _on_pumpkin_spawn_range_reload_player(quantity: Variant) -> void: + $Head/Canon.reload(quantity) + remaining_ammo_changed.emit($Head/Canon.ammo_count) + + +func _on_life_component_life_changed(new_life: Variant) -> void: + life_changed.emit(new_life) diff --git a/scripts/player/sprint.gd b/scripts/player/sprint.gd new file mode 100644 index 0000000..fa5ba3f --- /dev/null +++ b/scripts/player/sprint.gd @@ -0,0 +1,31 @@ +extends Node + +@export_node_path("MovementController") var controller_path: NodePath = ^"../" +@export_node_path("Node3D") var head_path: NodePath = ^"../Head" + +@export var sprint_speed := 16 +@export var fov_multiplier := 1.05 + +@onready var controller: MovementController = get_node(controller_path) +@onready var cam: Camera3D = get_node(head_path).cam + +@onready var normal_speed: int = controller.speed +@onready var normal_fov: float = cam.fov + + +# Called every physics tick. 'delta' is constant +func _physics_process(delta: float) -> void: + if can_sprint(): + controller.speed = sprint_speed + cam.set_fov(lerp(cam.fov, normal_fov * fov_multiplier, delta * 8)) + else: + controller.speed = normal_speed + cam.set_fov(lerp(cam.fov, normal_fov, delta * 8)) + + +func can_sprint() -> bool: + return ( + controller.is_on_floor() + and Input.is_action_pressed(&"sprint") + and controller.input_axis.x >= 0.5 + ) diff --git a/scripts/pumpkin_reload.gd b/scripts/pumpkin_reload.gd new file mode 100644 index 0000000..3071346 --- /dev/null +++ b/scripts/pumpkin_reload.gd @@ -0,0 +1,12 @@ +extends Interactable + +signal reload_taken + + +func is_interactable(): + return true + + +func interact(): + reload_taken.emit() + queue_free() diff --git a/scripts/reload_spawn.gd b/scripts/reload_spawn.gd new file mode 100644 index 0000000..b3087fb --- /dev/null +++ b/scripts/reload_spawn.gd @@ -0,0 +1,28 @@ +extends Area3D + +signal reload_player(additional_quantity) + +@export var reload_scene: PackedScene +@export var max_concurrent_reloads = 5 + +var reload_count = 0 + + +func _on_timer_spawn_pumpkin_timeout() -> void: + if reload_count < max_concurrent_reloads: + var spawn_size = $CollisionShape3D.shape.size + var spawn_center = position + var x = randi_range(spawn_center.x - spawn_size.x / 2, spawn_center.x + spawn_size.x / 2) + var z = randi_range(spawn_center.z - spawn_size.z / 2, spawn_center.z + spawn_size.z / 2) + var reload_position = global_position + Vector3(x, -0.5, z) + var pumpkin = reload_scene.instantiate() + pumpkin.position = reload_position + add_child(pumpkin) + reload_count += 1 + + pumpkin.reload_taken.connect(_on_reload_taken) + + +func _on_reload_taken() -> void: + reload_count -= 1 + reload_player.emit(5) diff --git a/scripts/restart.gd b/scripts/restart.gd new file mode 100644 index 0000000..d82b753 --- /dev/null +++ b/scripts/restart.gd @@ -0,0 +1,12 @@ +extends Node + + +func _unhandled_input(event): + if event is InputEventKey: + if event.pressed: + match event.keycode: + KEY_R: + get_tree().paused = false + get_tree().change_scene_to_file("res://scenes/main.tscn") + KEY_ESCAPE: + get_tree().quit() diff --git a/scripts/ui.gd b/scripts/ui.gd new file mode 100644 index 0000000..8e5a0e1 --- /dev/null +++ b/scripts/ui.gd @@ -0,0 +1,36 @@ +extends Control + +const BossUI = preload("res://scenes/hud/boss_ui.tscn") + +var boss_ui = {} + + +func _on_player_remaining_ammo_changed(new_quantiy: Variant) -> void: + %AmmoLabel.text = "%s" % new_quantiy + + +func _on_player_life_changed(new_life: Variant) -> void: + %PlayerHealthLabel.text = "%s" % new_life + #$sPlayerHealthBar.value = new_life + + +func _process(_delta: float) -> void: + for boss in get_tree().get_nodes_in_group("boss"): + if boss not in boss_ui: + boss_ui[boss] = BossUI.instantiate() + $VBoxContainer.add_child(boss_ui[boss]) + boss_ui[boss].get_node("%BossNameLabel").text = boss.type + var life_component = boss.get_node("LifeComponent") + var boss_health = life_component.life + #boss_ui[boss].get_node("BossHealthLabel").text = "Health: %s" % boss_health + boss_ui[boss].get_node("%BossHealthBar").value = boss_health + boss_ui[boss].get_node("%BossHealthBar").max_value = life_component.initial_life + + var keys_to_erase = [] + for boss in boss_ui: + if not is_instance_valid(boss): + keys_to_erase.append(boss) + boss_ui[boss].queue_free() + + for key in keys_to_erase: + boss_ui.erase(key) diff --git a/shaders/blink.gdshader b/shaders/blink.gdshader new file mode 100644 index 0000000..f37275e --- /dev/null +++ b/shaders/blink.gdshader @@ -0,0 +1,30 @@ +// https://godotshaders.com/shader/blinking-bomb-countdown/ +shader_type spatial; + +uniform bool hit = false; +uniform float end_time = 5.0; // length of animation in seconds +uniform float start_freq + : hint_range(0.0, 1.0, 0.05) = + 1; // how fast the flashing will be at start of animation +uniform float end_freq + : hint_range(1.0, 20.0, 0.5) = 10; // how fast it will be in the end +uniform vec3 flash_color : source_color = vec3(1.0); +uniform float blink_length : hint_range(0.0, 1.0) = 0.5; +uniform float blink_speed : hint_range(0.0, 20.0) = 2.0; + +void fragment() { + float phase = + blink_speed * PI * + (start_freq * TIME + (end_freq - start_freq) / (2.0 * end_time)); + float wave = sin(phase); + float blink_wave = wave * (1.0 / blink_length) - (1.0 / blink_length) + 1.0; + + if (hit && blink_wave > 0.0) { + vec3 colorMix = mix(ALBEDO, flash_color.rgb, blink_wave); + ALBEDO = colorMix; + ALPHA = 1.0; + } else { + ALBEDO = ALBEDO; + ALPHA = 0.0; + } +} diff --git a/shaders/highlight.gdshader b/shaders/highlight.gdshader new file mode 100644 index 0000000..555de83 --- /dev/null +++ b/shaders/highlight.gdshader @@ -0,0 +1,18 @@ +shader_type spatial; +render_mode unshaded, depth_draw_never; + +uniform vec4 shine_color : source_color = vec4(1.0, 1.0, 1.0, 1.0); +uniform float cycle_interval : hint_range(0.5, 5.0) = 1.0; +uniform float shine_speed : hint_range(1.0, 5.0) = 3.0; +uniform float shine_width : hint_range(1.0, 100.0) = 3.0; + +void fragment() { + vec3 vertex = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz; + float width = shine_width * 0.001 * cycle_interval; + float frequency = floor( + sin(vertex.z * cycle_interval + TIME * shine_speed * cycle_interval) + + width); + ALBEDO = shine_color.rgb; + ALPHA = + clamp((1.0 - dot(NORMAL, VIEW)) * frequency * shine_color.a, 0.0, 1.0); +} diff --git a/shaders/level.gdshader b/shaders/level.gdshader new file mode 100644 index 0000000..088a884 --- /dev/null +++ b/shaders/level.gdshader @@ -0,0 +1,133 @@ +// https://godotshaders.com/shader/wandering-clipmap-stylized-terrain/ +shader_type spatial; +render_mode diffuse_lambert, specular_toon; + +group_uniforms heightmaps; +uniform sampler2D heightmap; +uniform sampler2D heightmap_normals; +uniform float heightmap_normals_intensity : hint_range(0.0, 1.0); +uniform sampler2D splatmap; +uniform float heightmap_scale; +uniform float heightmap_height_scale; + +group_uniforms slope_definition; +// uniform float slope_shift : hint_range(-1.0, 1.0); +uniform float slope_edge_1 : hint_range(0, 1.0); +uniform float slope_edge_2 : hint_range(0, 1.0); +uniform float slope_edge_3 : hint_range(0, 1.0); +uniform sampler2D slope_edge_noise; +uniform float slope_edge_noise_scale; +uniform float slope_edge_noise_intensity : hint_range(0.0, 1.0); + +group_uniforms colors; +uniform vec3 slope_color_remap_top : source_color = vec3(1, 1, 1); +uniform vec3 slope_color_remap_bottom : source_color; +uniform vec3 flat_color_remap_top : source_color = vec3(1, 1, 1); +uniform vec3 flat_color_remap_bottom : source_color; + +group_uniforms textures; +uniform sampler2D flat_albedo : hint_default_white; +uniform sampler2D flat_normal : hint_normal; +uniform float flat_uv_scale = 1.0; +uniform float flat_normal_scale : hint_range(0.0, 1.0); +uniform sampler2D slope_albedo : hint_default_white; +uniform sampler2D slope_normal : hint_normal; +uniform float slope_uv_scale = 1.0; +uniform float slope_normal_scale : hint_range(0.0, 1.0); + +group_uniforms properties; +uniform float flat_specular : hint_range(0.0, 1.0); +uniform float flat_roughness : hint_range(0.0, 1.0); +uniform float flat_metallic : hint_range(0.0, 1.0); +uniform float flat_normal_intensity : hint_range(0.0, 1.0); +uniform float slope_specular : hint_range(0.0, 1.0); +uniform float slope_roughness : hint_range(0.0, 1.0); +uniform float slope_metallic : hint_range(0.0, 1.0); +uniform float slope_normal_intensity : hint_range(0.0, 1.0); + +varying vec2 world_position; +varying vec3 vert_normal; + +vec3 get_triplanarized_map(sampler2D sampler, vec4 projected_coords, + vec3 normal_weights, float uv_scale) { + vec3 texX = texture(sampler, projected_coords.zy * uv_scale).rgb; + vec3 texY = texture(sampler, projected_coords.xz * uv_scale).rgb; + vec3 texZ = texture(sampler, projected_coords.xy * uv_scale).rgb; + return texX * normal_weights.x + texY * normal_weights.y + + texZ * normal_weights.z; +} + +vec3 unpack_normalmap(vec4 rgba) { + vec3 n = rgba.xzy * 2.0 - vec3(1.0); + n.z *= -1.0; + return n; +} + +void fragment() { + vec4 projected_coords = INV_VIEW_MATRIX * vec4(VERTEX, 1.0); + vec3 world_normal = abs(INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz; + vec3 normal_weights = + world_normal / (world_normal.x + world_normal.y + world_normal.z); + + vec3 triplanarized_slope_albedo = get_triplanarized_map( + slope_albedo, projected_coords, normal_weights, slope_uv_scale * 0.01); + vec3 triplanarized_slope_normal = get_triplanarized_map( + slope_normal, projected_coords, normal_weights, slope_uv_scale * 0.01); + vec3 triplanarized_flat_albedo = get_triplanarized_map( + flat_albedo, projected_coords, normal_weights, flat_uv_scale * 0.01); + vec3 triplanarized_flat_normal = get_triplanarized_map( + flat_normal, projected_coords, normal_weights, flat_uv_scale * 0.01); + + // float steepness = dot(world_normal, vec3(0.0, 1.0, 0.0)); + // float inv_steepness = (steepness * -1.0) + 1.0; + float slope_edge_noise_remap = mix( + 1, texture(slope_edge_noise, world_position * slope_edge_noise_scale).r, + slope_edge_noise_intensity); + float slope = texture(splatmap, world_position).r * slope_edge_noise_remap; + + float edge_1 = step(slope_edge_1, slope); + float edge_2 = step(slope_edge_2, slope); + float edge_3 = step(slope_edge_3, slope); + float slope_mask = + edge_1 * (2.0 / 5.0) + edge_2 * (2.0 / 5.0) + edge_3 * (1.0 / 5.0); + float slope_mask_inverted = (slope_mask * -1.0) + 1.0; + + vec3 slope_color = mix(slope_color_remap_bottom, slope_color_remap_top, + triplanarized_slope_albedo.r); + vec3 flat_color = mix(flat_color_remap_bottom, flat_color_remap_top, + triplanarized_flat_albedo.r); + + vec3 slope_normal_scaled = + mix(vec3(0.5, 0.5, 1), triplanarized_slope_normal, slope_normal_scale); + vec3 flat_normal_scaled = + mix(vec3(0.5, 0.5, 1), triplanarized_flat_normal, flat_normal_scale); + + ALBEDO = mix(slope_color, flat_color, slope_mask_inverted); + // ALBEDO = vec3(slope_mask); + SPECULAR = mix(slope_specular, flat_specular, slope_mask_inverted); + METALLIC = mix(slope_metallic, flat_metallic, slope_mask_inverted); + ROUGHNESS = mix(slope_roughness, flat_roughness, slope_mask_inverted); + NORMAL_MAP = + mix(slope_normal_scaled, flat_normal_scaled, slope_mask_inverted); + NORMAL_MAP_DEPTH = + mix(slope_normal_intensity, flat_normal_intensity, slope_mask_inverted); +} + +void vertex() { + float pixel_size = 1.0 / float(textureSize(heightmap, 0).x); + vec2 half_pixel_offset = vec2(pixel_size, pixel_size) / 2.0; + + float heightmap_size = float(textureSize(heightmap, 0).x); + + world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xz * 1.0 / + (heightmap_size * heightmap_scale) + + vec2(0.5) + half_pixel_offset; + VERTEX.y += texture(heightmap, world_position).r * heightmap_height_scale; + + vec3 total_normal = + unpack_normalmap(texture(heightmap_normals, world_position)); + vert_normal = + mix(vec3(0.5, 0.5, 1.0), total_normal, heightmap_normals_intensity); + + NORMAL = vert_normal; +} diff --git a/shaders/sky.gdshader b/shaders/sky.gdshader new file mode 100644 index 0000000..0a89234 --- /dev/null +++ b/shaders/sky.gdshader @@ -0,0 +1,20 @@ +// https://godotshaders.com/shader/sokpop-skybox/ +shader_type sky; + +uniform vec3 color_top : source_color = vec3(0.91, 0.14, 1); +uniform vec3 color_horizon : source_color = vec3(1, 0.4, 0.42); +uniform vec3 color_bottom : source_color = vec3(1, 0.74, 0.39); + +uniform float exponent_factor_top : hint_range(0, 100) = 1.0; +uniform float exponent_factor_bottom : hint_range(0, 100) = 1.0; +uniform float intensity_amp : hint_range(0, 1) = 1.0; + +void sky() { + float p = EYEDIR.y; + float p1 = 1.0f - pow(min(1.0f, 1.0f - p), exponent_factor_top); + float p3 = 1.0f - pow(min(1.0f, 1.0f + p), exponent_factor_bottom); + float p2 = 1.0f - p1 - p3; + + COLOR = + (color_top * p1 + color_horizon * p2 + color_bottom * p3) * intensity_amp; +}