Merge remote-tracking branch 'origin/feat/godot-configurator' into feat/gotdot-configurator

This commit is contained in:
monkeyx-net 2024-07-09 15:40:41 +01:00
commit b1879937ab
1261 changed files with 27174 additions and 351 deletions

View file

@ -171,6 +171,7 @@ jobs:
# run: |
# # Set variables for Gitea host, organization, repository, access token, and release details
# GITEA_HOST="repo.retrodeck.net"
# UPLOAD_HOST="upload.retrodeck.net"
# ORGANIZATION="RetroDECK"
# REPO="RetroDECK-cooker"
# GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}"
@ -201,19 +202,22 @@ jobs:
# # Upload artifacts
# curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-cooker.flatpak" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
# "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
# # Upload artifacts sha
# curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-cooker.flatpak.sha" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha"
# "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha"
# curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-Artifact.tar.gz" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz"
# "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz"

View file

@ -127,6 +127,7 @@ jobs:
run: |
# Set variables for Gitea host, organization, repository, access token, and release details
GITEA_HOST="repo.retrodeck.net"
UPLOAD_HOST="upload.retrodeck.net"
ORGANIZATION="RetroDECK"
REPO="RetroDECK"
GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}"
@ -154,21 +155,24 @@ jobs:
# Upload artifacts
curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-H "Content-Type: multipart/form-data" \
-F "attachment=@RetroDECK.flatpak" \
"http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
"http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-H "Content-Type: multipart/form-data" \
-F "attachment=@RetroDECK-Artifact.tar.gz" \
"http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz"
"http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz"
- name: Upload RetroDECK.flatpak.sha to Gitea Release
run: |
curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-F "file=@RetroDECK.flatpak.sha" \
"https://repo.retrodeck.net/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak.sha"
"https://$UPLOAD_HOST/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak.sha"
env:
GITEA_TOKEN: ${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}

View file

@ -8,6 +8,8 @@
# Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url
# latestcommit: Finds the most recent commit of a git repo and updated the placeholder in the manifest.
# Needs the URL of the repo and the branch to find the latest commit from, in this line format: latestcommit^PLACEHOLDERTEXT^url^branch
# latestghtag: Finds the most recent tag on a GitHub repo, for repos that don't have normal releases, but also shouldn't use the latest commit
# Needs the URL of the repo, in this line format: latestghtag^PLACEHOLDERTEXT^url
# latestghrelease: Finds the download URL and SHA256 hash of the latest release from a git repo.
# Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos/<owner-name>/<repo-name>/releases/latest^<file suffix>
# As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest,
@ -82,10 +84,20 @@ do
/bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest
;;
"latestghtag" )
echo
echo "Placeholder text: $placeholder"
echo "Repo to get the latest tag from: $url"
echo
tag=$(git ls-remote "$url" | tail -n 1 | cut -f2 | sed 's|refs/tags/||')
echo "Tag found: $tag"
/bin/sed -i 's^'"$placeholder"'^'"$tag"'^' $rd_manifest
;;
"latestghrelease" )
echo
echo "Placeholder text: $placeholder"
echo "Repo to look for AppImage releases: $url"
echo "Repo to look for latest releases: $url"
echo
ghreleaseurl=$(curl -s "$url" | grep browser_download_url | grep "$branch\""$ | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ')
echo "GitHub release URL found: $ghreleaseurl"

View file

@ -42,100 +42,104 @@
</trigger>
<mappings>
<entry>
<mapping>24</mapping>
<button>40</button>
</entry>
<entry>
<mapping>23</mapping>
<button>46</button>
</entry>
<entry>
<mapping>22</mapping>
<button>41</button>
</entry>
<entry>
<mapping>21</mapping>
<button>47</button>
</entry>
<entry>
<mapping>20</mapping>
<button>38</button>
</entry>
<entry>
<mapping>19</mapping>
<button>44</button>
</entry>
<entry>
<mapping>18</mapping>
<button>39</button>
</entry>
<entry>
<mapping>17</mapping>
<button>45</button>
</entry>
<entry>
<mapping>16</mapping>
<button>8</button>
</entry>
<entry>
<mapping>15</mapping>
<button>7</button>
</entry>
<entry>
<mapping>14</mapping>
<button>14</button>
<mapping>12</mapping>
<button>12</button>
</entry>
<entry>
<mapping>13</mapping>
<button>13</button>
</entry>
<entry>
<mapping>12</mapping>
<button>12</button>
<mapping>14</mapping>
<button>14</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
<mapping>15</mapping>
<button>7</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
<mapping>16</mapping>
<button>8</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
<mapping>17</mapping>
<button>45</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
<mapping>18</mapping>
<button>39</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
<mapping>19</mapping>
<button>44</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
<mapping>20</mapping>
<button>38</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
<mapping>21</mapping>
<button>47</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
<mapping>22</mapping>
<button>41</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
<mapping>23</mapping>
<button>46</button>
</entry>
<entry>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry>
<mapping>1</mapping>
<button>0</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>1</mapping>
<button>0</button>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>24</mapping>
<button>40</button>
</entry>
</mappings>
</controller>

View file

@ -21,92 +21,56 @@
</trigger>
<mappings>
<entry>
<mapping>24</mapping>
<button>40</button>
</entry>
<entry>
<mapping>23</mapping>
<button>46</button>
</entry>
<entry>
<mapping>22</mapping>
<button>41</button>
</entry>
<entry>
<mapping>21</mapping>
<button>47</button>
</entry>
<entry>
<mapping>20</mapping>
<button>38</button>
</entry>
<entry>
<mapping>19</mapping>
<button>44</button>
</entry>
<entry>
<mapping>18</mapping>
<button>39</button>
</entry>
<entry>
<mapping>17</mapping>
<button>45</button>
</entry>
<entry>
<mapping>16</mapping>
<button>8</button>
</entry>
<entry>
<mapping>15</mapping>
<button>7</button>
<mapping>1</mapping>
<button>0</button>
</entry>
<entry>
<mapping>14</mapping>
<button>14</button>
</entry>
<entry>
<mapping>1</mapping>
<button>0</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
<mapping>15</mapping>
<button>7</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
<mapping>16</mapping>
<button>8</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
<mapping>17</mapping>
<button>45</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
<mapping>18</mapping>
<button>39</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
<mapping>19</mapping>
<button>44</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
<mapping>20</mapping>
<button>38</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
<mapping>21</mapping>
<button>47</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
<mapping>22</mapping>
<button>41</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
<mapping>23</mapping>
<button>46</button>
</entry>
<entry>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry>
<mapping>12</mapping>
@ -116,6 +80,46 @@
<mapping>13</mapping>
<button>13</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>24</mapping>
<button>40</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
</mappings>
</controller>
</emulated_controller>

View file

@ -21,8 +21,8 @@
</trigger>
<mappings>
<entry>
<mapping>24</mapping>
<button>40</button>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry>
<mapping>23</mapping>
@ -60,18 +60,14 @@
<mapping>15</mapping>
<button>7</button>
</entry>
<entry>
<mapping>14</mapping>
<button>14</button>
</entry>
<entry>
<mapping>1</mapping>
<button>0</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>14</mapping>
<button>14</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
@ -104,17 +100,25 @@
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>24</mapping>
<button>40</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>13</mapping>
<button>13</button>
</entry>
<entry>
<mapping>12</mapping>
<button>12</button>
</entry>
<entry>
<mapping>13</mapping>
<button>13</button>
<mapping>1</mapping>
<button>0</button>
</entry>
</mappings>
</controller>

View file

@ -94,9 +94,9 @@
<TVVolume>100</TVVolume>
<PadVolume>100</PadVolume>
<InputVolume>100</InputVolume>
<TVDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</TVDevice>
<PadDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</PadDevice>
<InputDevice>filter-chain-source</InputDevice>
<TVDevice>default</TVDevice>
<PadDevice>default</PadDevice>
<InputDevice>default</InputDevice>
</Audio>
<Account>
<PersistentId>2147483649</PersistentId>

View file

@ -26,6 +26,29 @@ compress_game() {
elif [[ "$1" == "rvz" ]]; then
dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz"
fi
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$compatible_compression_format" ]]; then
log i "Performing post-compression file cleanup"
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
log i "Removing file $file_path/$line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
log i "Removing file $(realpath $file)"
rm -f $(realpath "$file")
else
log i "Removing file $(realpath $file)"
rm -f "$(realpath "$file")"
fi
else
log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion"
configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "A compressed version of the file was not found, skipping deletion."
fi
fi
}
find_compatible_compression_format() {
@ -66,7 +89,7 @@ validate_for_chd() {
log i "Validating .cue associated .bin files"
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
log i "Associated bin files read:"
log i $(printf '%s\n' "$cue_bin_files")
log i "$(printf '%s\n' "$cue_bin_files")"
if [[ ! -z "$cue_bin_files" ]]; then
while IFS= read -r line
do
@ -96,6 +119,71 @@ validate_for_chd() {
fi
}
find_compatible_games() {
# The function takes the following arguments, which alter what files are compressed:
# "everything" - Compresses all games found into their compatible formats
# "all" - Compresses a list of user-chosen files into their compatible formats
# "chd" or "zip" or "rvz" - Compresses a list of user-chosen files into the given format
if [[ -f "$godot_compression_compatible_games" ]]; then
rm -f "$godot_compression_compatible_games" # Godot data transfer temp files
fi
touch "$godot_compression_compatible_games"
compressable_games_list=()
all_compressable_games=()
games_to_compress=()
target_selection="$1"
if [[ "$1" == "everything" ]]; then
local compression_format="all"
else
local compression_format="$1"
fi
if [[ $compression_format == "all" ]]; then
local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d')
else
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d')
fi
while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type
do
compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt")
if [[ ! -z $compression_candidates ]]; then
while IFS= read -r game
do
local compatible_compression_format=$(find_compatible_compression_format "$game")
if [[ $compression_format == "chd" ]]; then
if [[ $compatible_compression_format == "chd" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
fi
elif [[ $compression_format == "zip" ]]; then
if [[ $compatible_compression_format == "zip" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
fi
elif [[ $compression_format == "rvz" ]]; then
if [[ $compatible_compression_format == "rvz" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
fi
elif [[ $compression_format == "all" ]]; then
if [[ ! $compatible_compression_format == "none" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
fi
fi
done < <(printf '%s\n' "$compression_candidates")
fi
done < <(printf '%s\n' "$compressable_systems_list")
}
cli_compress_single_game() {
# This function will compress a single file passed from the CLI arguments
# USAGE: cli_compress_single_game $full_file_path
@ -109,26 +197,6 @@ cli_compress_single_game() {
if [[ ! $compatible_compression_format == "none" ]]; then
log i "$(basename "$file") can be compressed to $compatible_compression_format"
compress_game "$compatible_compression_format" "$file" "$system"
if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$compatible_compression_format" ]]; then
if [[ $(basename "$file") == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do # Remove associated .bin files
log i "Removing original file "$file_path/$line""
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file
log i "Removing original file $(basename "$file")"
rm -f "$file"
else
log i "Removing original file $(basename "$file")"
rm -f "$file"
fi
else
log w "Compressed version of $(basename "$file") not found, skipping deletion."
fi
fi
else
log w "$(basename "$file") does not have any compatible compression formats."
fi
@ -171,26 +239,6 @@ cli_compress_all_games() {
if [[ ! "$compatible_compression_format" == "none" ]]; then
log i "$(basename "$file") can be compressed to $compatible_compression_format"
compress_game "$compatible_compression_format" "$file" "$system"
if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$compatible_compression_format" ]]; then
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do # Remove associated .bin files
log i "Removing original file "$file_path/$line""
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file
log i "Removing original file "$file""
rm -f $(realpath "$file")
else
log i "Removing original file "$file""
rm -f $(realpath "$file")
fi
else
log w "Compressed version of $(basename "$file") not found, skipping deletion."
fi
fi
else
log w "No compatible compression format found for $(basename "$file")"
fi

View file

@ -0,0 +1,64 @@
#!/bin/bash
check_bios_files() {
# This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called $bios_checked_list which can be used elsewhere
# There is a "basic" and "expert" mode which outputs different levels of data
# USAGE: check_bios_files "mode"
if [[ -f "$godot_bios_files_checked" ]]; then
rm -f "$godot_bios_files_checked" # Godot data transfer temp files
fi
touch "$godot_bios_files_checked"
while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc
do
bios_file_found="No"
bios_hash_matched="No"
if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
bios_file_found="Yes"
if [[ $bios_hash == "Unknown" ]]; then
bios_hash_matched="Unknown"
elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
bios_hash_matched="Yes"
fi
fi
if [[ "$1" == "basic" ]]; then
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" >> "$godot_bios_files_checked" # Godot data transfer temp file
else
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" >> "$godot_bios_files_checked" # Godot data transfer temp file
fi
done < $bios_checklist
}
find_empty_rom_folders() {
# This function will build an array of all the system subfolders in $roms_folder which are either empty or contain only systeminfo.txt for easy removal
if [[ -f "$godot_empty_roms_folders" ]]; then
rm -f "$godot_empty_roms_folders" # Godot data transfer temp files
fi
touch "$godot_empty_roms_folders"
empty_rom_folders_list=()
all_empty_folders=()
for system in $(find "$roms_folder" -mindepth 1 -maxdepth 1 -type d -printf '%f\n')
do
local dir="$roms_folder/$system"
local files=$(ls -A1 "$dir")
local count=$(ls -A "$dir" | wc -l)
if [[ $count -eq 0 ]]; then
# Directory is empty
empty_rom_folders_list=("${empty_rom_folders_list[@]}" "false" "$(realpath $dir)")
all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)")
echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file
elif [[ $count -eq 1 ]] && [[ "$(basename "${files[0]}")" == "systeminfo.txt" ]]; then
# Directory contains only systeminfo.txt
empty_rom_folders_list=("${empty_rom_folders_list[@]}" "false" "$(realpath $dir)")
all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)")
echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file
fi
done
}

View file

@ -7,12 +7,13 @@ source /app/libexec/checks.sh
source /app/libexec/compression.sh
source /app/libexec/dialogs.sh
source /app/libexec/logger.sh
source /app/libexec/functions.sh
source /app/libexec/other_functions.sh
source /app/libexec/multi_user.sh
source /app/libexec/framework.sh
source /app/libexec/post_update.sh
source /app/libexec/prepare_component.sh
source /app/libexec/presets.sh
source /app/libexec/configurator_fuctions.sh
# Static variables
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
@ -52,6 +53,9 @@ pretty_system_names_reference_list="$emuconfigs/defaults/retrodeck/reference_lis
# Godot data transfer temp files
godot_bios_files_checked="/var/config/retrodeck/godot/godot_bios_files_checked.tmp"
godot_current_preset_settings="/var/config/retrodeck/godot/godot_current_preset_settings.tmp"
godot_compression_compatible_games="/var/config/retrodeck/godot/godot_compression_compatible_games.tmp"
godot_empty_roms_folders="/var/config/retrodeck/godot/godot_empty_roms_folders.tmp"
# Config files for emulators with single config files
@ -131,6 +135,11 @@ if [[ ! -d "$rd_logs_folder/ES-DE" ]]; then
dir_prep "$rd_logs_folder/ES-DE" "$es_source_logs"
fi
# Initialize location of Godot temp data files, if it doesn't exist
if [[ ! -d "/var/config/retrodeck/godot" ]]; then
create_dir "/var/config/retrodeck/godot"
fi
# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions
if [[ -f "$HOME/retrodeck/.lock" ]]; then
mv "$HOME/retrodeck/.lock" $lockfile

View file

@ -86,11 +86,11 @@ log() {
esac
# Display the message in the terminal
echo -e "$colored_message"
echo -e "$colored_message" >&2
# Write the log message to the log file
if [ ! -f "$logfile" ]; then
echo "$timestamp [WARN] Log file not found in \"$logfile\", creating it"
echo "$timestamp [WARN] Log file not found in \"$logfile\", creating it" >&2
touch "$logfile"
fi
echo "$log_message" >> "$logfile"

View file

@ -286,36 +286,6 @@ dir_prep() {
log i "$symlink is now $real"
}
check_bios_files() {
# This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called bios_checked_list which can be used elsewhere
# There is a "basic" and "expert" mode which outputs different levels of data
# USAGE: check_bios_files "mode"
rm -f "$godot_bios_files_checked" # Godot data transfer temp files
touch "$godot_bios_files_checked"
while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc
do
bios_file_found="No"
bios_hash_matched="No"
if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
bios_file_found="Yes"
if [[ $bios_hash == "Unknown" ]]; then
bios_hash_matched="Unknown"
elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
bios_hash_matched="Yes"
fi
fi
if [[ "$1" == "basic" ]]; then
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" >> "$godot_bios_files_checked" # Godot data transfer temp file
else
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" >> "$godot_bios_files_checked" # Godot data transfer temp file
fi
done < $bios_checklist
}
update_rpcs3_firmware() {
create_dir "$roms_folder/ps3/tmp"
chmod 777 "$roms_folder/ps3/tmp"

View file

@ -12,10 +12,12 @@ prepare_component() {
action="$1"
component=$(echo "$2" | tr '[:upper:]' '[:lower:]')
call_source="$3"
component_found="false"
log d "Preparing component: \"$component\", action: \"$action\""
if [[ "$component" == "retrodeck" ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them
while read -r config_line; do
local current_setting_name=$(get_setting_name "$config_line" "retrodeck")
@ -49,6 +51,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(es-de|all)$ ]]; then # For use after ESDE-related folders are moved or a reset
component_found="true"
log i "--------------------------------"
log i "Prepearing ES-DE"
log i "--------------------------------"
@ -77,6 +80,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(retroarch|all)$ ]]; then
component_found="true"
log i "--------------------------------"
log i "Prepearing RetroArch"
log i "--------------------------------"
@ -211,6 +215,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(citra|citra-emu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------"
log i "Prepearing CITRA"
@ -256,6 +261,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(cemu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing CEMU"
@ -283,6 +289,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(dolphin|dolphin-emu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing DOLPHIN"
@ -336,6 +343,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(duckstation|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------"
log i "Prepearing DUCKSTATION"
@ -381,6 +389,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(melonds|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing MELONDS"
@ -419,6 +428,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(pcsx2|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing PCSX2"
@ -463,6 +473,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(pico8|pico-8|all)$ ]]; then
component_found="true"
if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
@ -473,6 +484,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(ppsspp|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------"
log i "Prepearing PPSSPPSDL"
@ -501,6 +513,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(primehack|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing Primehack"
@ -544,6 +557,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(rpcs3|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------"
log i "Prepearing RPCS3"
@ -580,6 +594,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(ryujinx|all)$ ]]; then
component_found="true"
# NOTE: for techincal reasons the system folder of Ryujinx IS NOT a sumlink of the bios/switch/keys as not only the keys are located there
# When RetroDECK starts there is a "manage_ryujinx_keys" function that symlinks the keys only in Rryujinx/system.
if [[ "$action" == "reset" ]]; then # Run reset-only commands
@ -624,6 +639,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(yuzu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing YUZU"
@ -677,6 +693,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(xemu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------"
log i "Prepearing XEMU"
@ -721,6 +738,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(vita3k|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------"
log i "Prepearing Vita3K"
@ -745,6 +763,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(mame|all)$ ]]; then
component_found="true"
# TODO: do a proper script
# This is just a placeholder script to test the emulator's flow
log i "----------------------"
@ -814,6 +833,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(gzdoom|all)$ ]]; then
component_found="true"
# TODO: do a proper script
# This is just a placeholder script to test the emulator's flow
log i "----------------------"
@ -834,6 +854,7 @@ prepare_component() {
fi
if [[ "$component" =~ ^(boilr|all)$ ]]; then
component_found="true"
log i "----------------------"
log i "Prepearing BOILR"
log i "----------------------"
@ -842,7 +863,7 @@ prepare_component() {
cp -fvr "/app/libexec/steam-sync/config.toml" "/var/config/boilr"
fi
if [[ ! "$component" =~ ^(retrodeck|es-de|retroarch|citra|citra-emu|cemu|dolphin|dolphin-emu|duckstation|melonds|melonDS|pcsx2|pico8|pico-8|ppsspp|primehack|rpcs3|ryujinx|yuzu|xemu|vita3k|mame|gzdoom|boilr|)$ ]]; then
if [[ $component_found="false" ]]; then
log e "Supplied component $component not found, not resetting"
fi

View file

@ -4,28 +4,7 @@ change_preset_dialog() {
# This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more
# USAGE: change_preset_dialog "$preset"
local preset="$1"
pretty_preset_name=${preset//_/ } # Preset name prettification
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
local current_preset_settings=()
local current_enabled_systems=()
local current_disabled_systems=()
local changed_systems=()
local changed_presets=()
local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
while IFS= read -r config_line
do
system_name=$(get_setting_name "$config_line" "retrodeck")
all_systems=("${all_systems[@]}" "$system_name")
system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset")
if [[ "$system_value" == "true" ]]; then
current_enabled_systems=("${current_enabled_systems[@]}" "$system_name")
elif [[ "$system_value" == "false" ]]; then
current_disabled_systems=("${current_disabled_systems[@]}" "$system_name")
fi
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name")
done < <(printf '%s\n' "$section_results")
build_preset_list_options "$1"
choice=$(zenity \
--list --width=1200 --height=720 \
@ -42,6 +21,55 @@ change_preset_dialog() {
if [[ ! -z $choice || "$rc" == 0 ]]; then
(
make_preset_changes
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Presets Configuration" \
--text="Setting up your presets, please wait..."
else
echo "No choices made"
fi
}
build_preset_list_options() {
# This function will build a list of all the systems available for a given preset
# The list will be generated into a Godot temp file and the variable $current_preset_settings
if [[ -f "$godot_current_preset_settings" ]]; then
rm -f "$godot_current_preset_settings" # Godot data transfer temp files
fi
touch "$godot_current_preset_settings"
preset="$1"
pretty_preset_name=${preset//_/ } # Preset name prettification
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
current_preset_settings=()
current_enabled_systems=()
current_disabled_systems=()
changed_systems=()
changed_presets=()
local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
while IFS= read -r config_line
do
system_name=$(get_setting_name "$config_line" "retrodeck")
all_systems=("${all_systems[@]}" "$system_name")
system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset")
if [[ "$system_value" == "true" ]]; then
current_enabled_systems=("${current_enabled_systems[@]}" "$system_name")
elif [[ "$system_value" == "false" ]]; then
current_disabled_systems=("${current_disabled_systems[@]}" "$system_name")
fi
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name")
echo "$system_value"^"$(make_name_pretty $system_name)"^"$system_name" >> "$godot_current_preset_settings"
done < <(printf '%s\n' "$section_results")
}
make_preset_changes() {
# This function will take an array $choices, which contains the names of systems that have been enabled for this preset and enable them in the backend
IFS="," read -ra choices <<< "$choice"
for emulator in "${all_systems[@]}"; do
if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then
@ -71,14 +99,6 @@ change_preset_dialog() {
for emulator in "${changed_systems[@]}"; do
build_preset_config $emulator ${changed_presets[*]}
done
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Presets Configuration" \
--text="Setting up your presets, please wait..."
else
echo "No choices made"
fi
}
build_preset_config() {

@ -1 +0,0 @@
Subproject commit ea1dae930a6f61388c2b5e05f95bb6ed0120926e

1
rd-submodules/ryujinx/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.flatpak-builder

3
rd-submodules/ryujinx/.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "flatpak-builder-tools"]
path = flatpak-builder-tools
url = https://github.com/flatpak/flatpak-builder-tools.git

View file

@ -0,0 +1,3 @@
{
"only-arches": ["x86_64"]
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,82 @@
app-id: org.ryujinx.Ryujinx
runtime: org.freedesktop.Platform
runtime-version: '22.08'
sdk: org.freedesktop.Sdk
add-extensions:
org.freedesktop.Platform.ffmpeg-full:
version: '22.08'
directory: lib/ffmpeg
add-ld-path: .
finish-args:
- --share=ipc
- --socket=x11
- --device=all
- --socket=pulseaudio
- --share=network
- --filesystem=home:ro
- --filesystem=xdg-run/app/com.discordapp.Discord:create
- --filesystem=xdg-config/gtk-3.0:ro
rename-icon: ryujinx
command: ryujinx-wrapper
modules:
- name: Ryujinx
buildsystem: simple
build-options:
no-debuginfo: true
no-debuginfo-compression: true
strip: false
arch:
x86_64:
env:
RUNTIME: linux-x64
env:
PKG_CONFIG_PATH: /app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true'
RYUJINX_VERSION: 1.1.1035
RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: flathub
RYUJINX_TARGET_RELEASE_CHANNEL_REPO: org.ryujinx.Ryujinx
RYUJINX_TARGET_RELEASE_CHANNEL_NAME: master
build-commands:
- |
export PATH=$PATH:/run/build/Ryujinx/dotnet-sdk
export RYUJINX_GIT_SHORT_HASH=$(git rev-parse --short HEAD)
export RUNTIME_FRAMEWORK_VERSION=$(find nuget-sources -name 'microsoft.netcore.app.host.linux-x64.*' | grep -oP '(\d.\d.\d+.nupkg)' | grep -oP '(\d.\d.\d+)')
sed -r --in-place "s/\%\%RYUJINX_BUILD_VERSION\%\%/$RYUJINX_VERSION/g;" src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$RYUJINX_GIT_SHORT_HASH/g;" src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_NAME/g;" src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_OWNER/g;" src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_REPO/g;" src/Ryujinx.Common/ReleaseInformation.cs
mkdir -p /app/bin
dotnet publish -c Release -r $RUNTIME /p:DebugType=embedded src/Ryujinx /p:Version=$RYUJINX_VERSION /p:SourceRevisionId=$RYUJINX_GIT_SHORT_HASH /p:ExtraDefineConstants="DISABLE_UPDATER%2CFORCE_EXTERNAL_BASE_DIR" /p:RuntimeFrameworkVersion=$RUNTIME_FRAMEWORK_VERSION --self-contained --source nuget-sources
if [ $? -ne 0 ]; then
exit 1;
fi;
cp -r --remove-destination /run/build/Ryujinx/src/Ryujinx/bin/Release/net7.0/$RUNTIME/publish/* /app/bin/
mkdir -p /app/lib/ffmpeg
ln -s /usr/lib/x86_64-linux-gnu/libX11.so.6 /app/lib/libX11.so
install -Dm644 $FLATPAK_ID.appdata.xml /app/share/metainfo/$FLATPAK_ID.appdata.xml
install -Dm755 ryujinx-wrapper /app/bin/ryujinx-wrapper
install -Dm644 distribution/misc/Logo.svg /app/share/icons/hicolor/scalable/apps/ryujinx.svg
install -Dm644 distribution/linux/mime/Ryujinx.xml /app/share/mime/packages/$FLATPAK_ID.mime.xml
install -Dm644 distribution/linux/Ryujinx.desktop /app/share/applications/$FLATPAK_ID.desktop
desktop-file-edit --set-key="Exec" --set-value="ryujinx-wrapper %f" /app/share/applications/$FLATPAK_ID.desktop
sources:
- type: archive
only-arches:
- x86_64
dest: dotnet-sdk
url: https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-x64.tar.gz
sha256: 4634fa4da7ae4e3dadb83e320a87fb26f0cb12a7ca02bf9f10e6c3c1c91d645c
x-checker-data:
type: rotating-url
url: https://aka.ms/dotnet/7.0/dotnet-sdk-linux-x64.tar.gz
pattern: https://dotnetcli.azureedge.net/dotnet/Sdk/^([\d\.a-z-]+)$/dotnet-sdk-^([\d\.a-z-]+)$-linux-x64.tar.gz
- nuget_sources.json
- type: git
url: https://github.com/Ryujinx/Ryujinx.git
commit: bc44b85b0bdcaf8140a04130e4a895677a01111f
- type: file
path: ryujinx-wrapper
- type: file
path: org.ryujinx.Ryujinx.appdata.xml

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

BIN
res/icon-pride.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

100
res/icon-pride.svg Normal file
View file

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 256 256"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
id="svg17"
sodipodi:docname="icon (pride).svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:serif="http://www.serif.com/"><sodipodi:namedview
id="namedview19"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="3.3398438"
inkscape:cx="147.31228"
inkscape:cy="177.85263"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Left-Symbol" />
<g
transform="matrix(1.88235,0,0,1.86861,-7.52941,-5.60584)"
id="g4">
<path
d="M140,37.25C140,18.347 124.765,3 106,3L38,3C19.235,3 4,18.347 4,37.25L4,105.75C4,124.653 19.235,140 38,140L106,140C124.765,140 140,124.653 140,105.75L140,37.25Z"
style="fill:rgb(17,17,17);"
id="path2" />
</g>
<g
transform="matrix(2.02105,0,0,2.02105,-13.4737,-13.4737)"
id="g12">
<g
id="D"
transform="matrix(-0.674885,8.26495e-17,-8.26495e-17,-0.674885,223.747,109.037)">
<path
d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z"
style="fill:white;fill-rule:nonzero;"
id="path6" />
</g>
<g
id="Left-Symbol"
serif:id="Left Symbol"
transform="matrix(0.494792,-0,-0,0.494792,6.66667,6.66667)">
<path
id="rect6600"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:url(#pattern7632);stroke:none;stroke-width:0.999998"
d="M 47.199248 80.802785 C 45.822808 80.802785 44.569351 81.044902 43.441434 81.527395 C 42.313512 82.009865 41.343959 82.696403 40.531275 83.587943 C 39.718995 84.47953 39.092064 85.5436 38.652368 86.781305 C 38.212654 88.019017 37.994165 89.393933 37.994165 90.904354 L 38.021508 168.91026 L 54.769566 168.91026 L 54.769566 134.23446 L 97.697327 134.23446 L 123.50594 168.91026 L 144.29501 168.91026 L 118.4864 134.23446 L 118.80281 134.23446 C 121.49824 134.23446 123.9587 133.88769 126.18563 133.1954 C 128.413 132.50312 130.41571 131.54371 132.19344 130.31649 C 133.97116 129.0893 135.52516 127.63538 136.8536 125.95711 C 138.18246 124.27862 139.2867 122.44931 140.1661 120.46687 C 141.0455 118.48428 141.70493 116.39222 142.14462 114.18952 C 142.58434 111.98667 142.80282 109.76227 142.80282 107.51765 C 142.82193 105.31474 142.61167 103.12832 142.17196 100.95709 C 141.73228 98.786016 141.07285 96.708861 140.19345 94.726622 C 139.31404 92.744383 138.21178 90.902392 136.8829 89.203181 C 135.55439 87.503908 133.99477 86.036596 132.20711 84.798881 C 130.41986 83.561223 128.413 82.584399 126.18563 81.871145 C 123.95873 81.157899 121.49637 80.802785 118.80086 80.802785 L 47.199248 80.802785 z M 54.769566 97.63678 L 118.4864 97.63678 C 119.76727 97.63678 120.87996 97.919949 121.82625 98.48639 C 122.77254 99.052829 123.55673 99.797753 124.17781 100.72077 C 124.79933 101.64378 125.26257 102.69763 125.56844 103.88288 C 125.87432 105.06816 126.02275 106.27995 126.01375 107.51765 C 126.0044 108.75534 125.8409 109.96715 125.52547 111.15241 C 125.21005 112.33768 124.73643 113.3915 124.10555 114.31452 C 123.47468 115.23757 122.6907 115.98249 121.75398 116.5489 C 120.81726 117.1153 119.72901 117.39851 118.4864 117.39851 L 54.769566 117.39851 L 54.769566 97.63678 z "
transform="translate(2.6596517e-5,2.6596517e-5)" />
</g>
</g>
<defs
id="defs15"><pattern
inkscape:collect="always"
xlink:href="#pattern6592"
id="pattern7632"
patternTransform="matrix(0.13680989,0,0,0.18355902,37.993601,80.802163)" />
<image
id="_Image1"
width="104px"
height="79px"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABPCAYAAAAHtYAvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGHUlEQVR4nO2de2xTVRzHP6cbe4qg8jB1ioQMcDJAHgEVMPyjgaAGQR4xhAxEGfIY8gaBGCXGGEULjMG2FhEG6JCBhEgEJWRBBkaDopIYwRAsigSHoMLa3usftzVla7eu/bWU9HySJvd37jnfnNzvPae95/Scq2hE7cTz6YZigqEYYKAKTUWhoehoKDBQmAqsYzCUwlBYaUGxocBsFBuAGS7Gn6ZUkFaQfnOx/9hsFIfSalE7rJa/rk3jBkNRbyjqDVS9qfjRUBw3FMcM1IlvXkpvaHx9W4sKDo5McPc1lKo0FP2aGKINajYOca3+MBSlpqL02+L0C9EaZAscfDnBPRs4DvSLVkxzAx2BlcDZXmXeioIy34PRiNgA6sa7+wBvA+ly9dP4yQSmAid7bvDt77HR16c1hW11493pQAXanETwOFCbX+4bGWkBGzAOGBC3KmkacxvwSbdyoziSzDZgYHzrowmBDSjtWmG81aXSsLWUsVdi6qQJwXxgy31OQ4XLYAMKE1cfTQgmApPDnbQBnRNXF00YVuc5TXuoE832f5qE0R5Yb3eZTbo6bVDy8BQwvnGiNii5WGN3mbnBCdqg5KIDMCo4QRuUfEwMDiSGd5YCLgGdWw0bUAAM8X+GI3PDj7C7zPbuIlUPMgZdHlPZ6TcBnVsRN3AAYLDDMxL4EMhttkTLZACj8d/0uosT4ujsNvuAYcDvAnL/d3PaIEHqZrX5GlgsIDUs8EykDZJnK3A2Ro1M4E7QBolzfGYbD/COgNQ9oA2KF0cFNLRBceS0gIY2KI5cBK7GqKENiiOK2J8xvaANihd5QFaMGr+CNihe5AtonANtULwYLqChDYoHA9d62gEzBaR0FxcnZgHtYtT4y12kroBlkBlzlTQADFrjGQ0sE5A6HDjQLUiIwQ5PCbCT2H+9AWwPHEjMB927c+qFvim4/MRmQKGhGGoohhrQXeBaAlwD9gQCCYMWIzPErrHYG/j+Ad3FJSPbgwNtUHJxEdgXnKANSi5muYvUv8EJ2qDkoQbY0ThRG5Qc/AnMcBepJs+k2qDkoOTcFHU+1Ak9knDzqQI+CHdSt6Cby5vApLNTbGEbiV7ZfXPwAsVnnrdVtJRRG5R4LgNjf55mOxBJZt3FJQ4T66f0wz9NS4vIHNAtKBFcBSoBx6kX01r9dyxtUPz4BXAAzpPT0y9HKyJh0BXgHwGdeHM7kC2o58VaflKP9b1SD5wCvvJ/zpyYkR7zI4zIdMOYyk6lAjpxZeqrfxcAdVhbsUiggMm1czIOCemFJGV+JFSuzP0BeE5QMg2oHvJew/2Cmk1IqZEE54rcPcByQcm7gN2POBpiXVUXlpRpQUGsAqoF9XoDmwY7PGH324mFlDNo04pcEygCvhOUHYu1mFqclDMIYPPy3KvA08AlQdnXBq3xPCmoB6SoQQBbXsk5AzwL+IQkFbB14FrPA0J6QAobBFC1LOdzYK6gZFtgd/91njukBFPaID9rAaegXj6w7aF13jQJsZQ3aNuyHBOYgcy60gBPAG9ICKW8QQA7luZcB57BGrqRYkGfUm/MD8baID8fLck+j7UFy3VB2Yre670x7aicUiMJLbFzSfYx4AVBySxgV68y793RCugW1Ihdi7M3A6sFJfOA6oIyX0Y0hbVBoVmIfxcrIR4F1vbc4Gv1cJA2KAQ1i7K9WPuHSmxIEWAaML21hbRBYdizMOsS1kavsW5IEYyjx0bfY60poA1qhr0Ls74HJglKpgPV+eW+LpEW0Aa1wL4FWTVY7wGSogNQ063ciGgOSRsUGa8DHwvq9QWcXSvCv7MhgDYoAj6dn2VgvV/hpKDsOCJYOqoNipD98zLjMYe0qkulMaq5DHokoRV8Ni/zNNadLzmHVHWf0+gZLoNuQa3k4MuZB4F5gpJtgd15TrN9qJPaoOhwAJsE9boDVXaX2WQOSRsUBV/MzTSBYqw/QkoxAusfRzegDYqSQyUZ17DmkEIuXYySRXaXecO7G7RBMXC4JMONNYcU8yuhg3DaXWb/QKANipHaORl1yM8h1dhdZmfQBolwZHbG+8C7gpJ5QLXdZWZog+RYABwU1BsCOP4DNMctuHcT4JEAAAAASUVORK5CYII=" />
<pattern
patternUnits="userSpaceOnUse"
width="777"
height="480"
id="pattern6592"><path
fill="#770088"
d="M 0,0 H 777 V 480 H 0 Z"
id="path6457" /><path
fill="#004cff"
d="M 0,0 H 777 V 400 H 0 Z"
id="path6459" /><path
fill="#028121"
d="M 0,0 H 777 V 320 H 0 Z"
id="path6461" /><path
fill="#ffee00"
d="M 0,0 H 777 V 240 H 0 Z"
id="path6463" /><path
fill="#ff8d00"
d="M 0,0 H 777 V 160 H 0 Z"
id="path6465" /><path
fill="#e50000"
d="M 0,0 H 777 V 80 H 0 Z"
id="path6467" /></pattern></defs>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -52,6 +52,8 @@ source /app/libexec/global.sh
# - Move Screenshots folder
# - Move Mods folder
# - Move Texture Packs folder
# - Tool: Remove Empty ROM Folders
# - Tool: Rebuild All ROM Folders
# - Tool: Compress Games
# - Compress Single Game
# - Compress Multiple Games - CHD
@ -559,6 +561,8 @@ configurator_retrodeck_tools_dialog() {
local choices=(
"Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location"
"Tool: Remove Empty ROM Folders" "Remove some or all of the empty ROM folders"
"Tool: Rebuild All ROM Folders" "Rebuild any missing default ROM folders"
"Tool: Compress Games" "Compress games for systems that support it"
"Install: RetroDECK Controller Layouts" "Install the custom RetroDECK controller layouts on Steam"
"Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator"
@ -585,6 +589,44 @@ configurator_retrodeck_tools_dialog() {
configurator_retrodeck_move_tool_dialog
;;
"Tool: Remove Empty ROM Folders" )
log i "Configurator: opening \"$choice\" menu"
find_empty_rom_folders
choice=$(zenity \
--list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Remove Empty ROM Folders" \
--checklist --hide-column=3 --ok-label="Remove Selected" --extra-button="Remove All" \
--separator="," --print-column=2 \
--text="Choose which ROM folders to remove:" \
--column "Remove?" \
--column "System" \
"${empty_rom_folders_list[@]}")
local rc=$?
if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Remove Selected" with at least one system selected
IFS="," read -ra folders_to_remove <<< "$choice"
for folder in "${folders_to_remove[@]}"; do
log i "Removing empty folder $folder"
rm -f "$folder"
done
elif [[ ! -z $choice ]]; then # User clicked "Remove All"
for folder in "${all_empty_folders[@]}"; do
log i "Removing empty folder $folder"
rm -f "$folder"
done
fi
configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "The removal process is complete."
configurator_retrodeck_tools_dialog
;;
"Tool: Rebuild All ROM Folders" )
log i "Configurator: opening \"$choice\" menu"
es-de --create-system-dirs
configurator_generic_dialog "RetroDECK Configurator - Rebuild All ROM Folders" "The rebuilding process is complete.\n\nAll missing default ROM folders will now exist in $roms_folder"
configurator_retrodeck_tools_dialog
;;
"Tool: Compress Games" )
log i "Configurator: opening \"$choice\" menu"
configurator_generic_dialog "RetroDECK Configurator - Compression Tool" "Depending on your library and compression choices, the process can sometimes take a long time.\nPlease be patient once it is started!"
@ -794,28 +836,6 @@ configurator_compress_single_game_dialog() {
echo "# Compressing $(basename "$file") to $compatible_compression_format format" # This updates the Zenity dialog
log i "Compressing $(basename "$file") to $compatible_compression_format format"
compress_game "$compatible_compression_format" "$file" "$system"
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$compatible_compression_format" ]]; then
log i "Performing post-compression file cleanup"
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
log i "Removing file $file_path/$line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
log i "Removing file $(realpath $file)"
rm -f $(realpath "$file")
else
log i "Removing file $(realpath $file)"
rm -f "$(realpath "$file")"
fi
else
log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion"
configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "A compressed version of the file was not found, skipping deletion."
fi
fi
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
@ -835,54 +855,7 @@ configurator_compress_single_game_dialog() {
configurator_compress_multiple_games_dialog() {
# This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg
local compressable_games_list=()
local all_compressable_games=()
local games_to_compress=()
local target_selection="$1"
if [[ "$1" == "everything" ]]; then
local compression_format="all"
else
local compression_format="$1"
fi
if [[ $compression_format == "all" ]]; then
local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d')
else
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d')
fi
while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type
do
compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt")
if [[ ! -z $compression_candidates ]]; then
while IFS= read -r game
do
local compatible_compression_format=$(find_compatible_compression_format "$game")
if [[ $compression_format == "chd" ]]; then
if [[ $compatible_compression_format == "chd" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
fi
elif [[ $compression_format == "zip" ]]; then
if [[ $compatible_compression_format == "zip" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
fi
elif [[ $compression_format == "rvz" ]]; then
if [[ $compatible_compression_format == "rvz" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
fi
elif [[ $compression_format == "all" ]]; then
if [[ ! $compatible_compression_format == "none" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
fi
fi
done < <(printf '%s\n' "$compression_candidates")
fi
done < <(printf '%s\n' "$compressable_systems_list")
find_compatible_games "$1"
if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything
choice=$(zenity \
@ -922,27 +895,6 @@ configurator_compress_multiple_games_dialog() {
games_left_to_compress=$((games_left_to_compress-1))
log i "Games left to compress: $games_left_to_compress"
compress_game "$compression_format" "$file" "$system"
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$compatible_compression_format" ]]; then
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
log i "Removing file $file_path/$line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
log i "Removing file $(realpath $file)"
rm -f $(realpath "$file")
else
log i "Removing file $(realpath $file)"
rm -f "$(realpath "$file")"
fi
else
log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion"
configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "Compression of $(basename $file) failed, skipping deletion."
fi
fi
done
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \

View file

@ -0,0 +1,112 @@
Quick Resume
Activate "Quick Resume" to continue playing your games from where you left off. With Quick Resume enabled, the system automatically saves your progress when you close a game and loads it when you start the game again.
Please note that certain systems, like DOS, PS2, PS3, PSVita, and Switch, do not currently support this feature.
Rewind
When "Rewind" is turned on, hold HOTKEY + L2 to rewind your gameplay, allowing you to alter your destiny. Keep in mind that activating this feature might cause slowdowns on some systems.
Note: "Rewind" is not supported on certain systems, including DOS, PS2, PS3, PSVita, and Switch.
Quit Confirmation
Activate "Quit Confirmation" to prevent accidental exits. This feature prompts you before quitting a game, ensuring you don't lose progress unintentionally.
Cheats
Unlock extra fun with "Cheats." Enable cheat codes to gain advantages to simplify your gaming experience.
Borders
Enable or disable the drawing of borders around the game.
Note: this will disable the "Widescreen option".
Wide Screen
If enabled it widens the display, providing a more expansive gaming experience on supported systems.
Note: this will disable the "Borders option".
Shaders
When turned on, "Shaders" displays the game just like it appeared on the original console's screen.
Mods
Enable or disable the loading of the installed mods.
TATE Mode
Turn on "TATE Mode" for games that support vertical screen orientation. This feature allows you to enjoy selected titles in portrait mode, mimicking the arcade experience.
"Tate" (縦) means "vertical" in Japanese.
Steam: Controller Templates
Install the RetroDECK controller templates fror Steam. Once installed they will be automatically updated when an update is available.
The controller templates will enable hotkeys and raidal menu (radial menu is currently available on Steam Deck trackpad only).
Check the wiki for further details.
Button Layout
Select the desired button layout:
Classic: A, B X and Y are in the Steam Deck/Xbox layout.
Nintendo: A and B got their function inverted, same for X and Y like in the Nintendo controllers.
Hotkey Activation Sound
When this option is enabled you will hear a sound when the HOTKEY button is pressed.
[scan]
PlayStation 3 Games <- remove
ScummVM Games
Generate the entries of ScummVM games to adhere to the RetroDECK/ES-DE standard.
More on this in the wiki.
Multi-file Structure
Group the multi disc or multi file games as a single game entry on the games list.
More on this in the wiki.
3DS Game Decrypter
Decrypt your 3DS games.
Note: you should provide the keys file, more on this in the wiki.
BIOS
Check which BIOS files are recognized by RetroDECK and which ones are missing.
Open Emulator...
Open an emulator to manually tweak the configurations.
WARNING: this can breaking for the less expert users, you can always reset them by going to Troubleshoot > Reset menu.
Install RetroDECK Steam Grids <- rename to Add RetroDECK to Steam
Show Favorites as Steam Games
If this option is enabled the game marked as favorites will be added to Steam, when disabled they will be removed.
NOTE: the RetroDECK controller layout is not automatically applied to the single game entries.
USB Transfer Tool
Backup User Data
Compress Games
Move User Files
Retro Aechievements
Advanced
Hardcore Mode
Show Throphies
Login
Netplay ID
Address
Connect <- this is wrong probably, should be a toggle on Netplay ID?
Saves Sync
Start FTP Server <- Rename to SFTP
Check Connection
Show Logs
[reset]
Single Emulator...
All Emulators
Full RetroDECK Reset
Update Notification
Show Easter Eggs <- rename in Seasonal Loading Screen
Multi-User Mode (off, steam users, custom users) rename to retrodeck users
Menu Music
[about]
Website
Version History
Wiki
Credits
Donate
Reach Us
Licenses

View file

@ -0,0 +1,5 @@
extends Control
func _input(event):
if event.is_action_pressed("rekku_hide"):
self.visible = !self.visible

View file

@ -0,0 +1,27 @@
extends TabContainer
func _ready():
focusFirstFocusableChild() #grab focus on first element to enable controller focusing
func _input(event):
if (event.is_action_pressed("next_tab")):
self.select_next_available()
focusFirstFocusableChild()
if (event.is_action_pressed("previous_tab")):
self.select_previous_available()
focusFirstFocusableChild()
func focusFirstFocusableChild():
var children = findElements(get_current_tab_control(), "Control")
for n: Control in children:
if (n.focus_mode == FOCUS_ALL):
n.grab_focus.call_deferred()
break
func findElements(node: Node, className: String, result: Array = []) -> Array:
if node.is_class(className):
result.push_back(node)
for child in node.get_children():
result = findElements(child, className, result)
return result

View file

@ -0,0 +1,45 @@
extends Control
var file := FileAccess
var bios_tempfile : String
var BIOS_COLUMNS_BASIC := ["BIOS File Name", "System", "Found", "Hash Match", "Description"]
var BIOS_COLUMNS_EXPERT := ["BIOS File Name", "System", "Found", "Hash Match", "Description", "Subdirectory", "Hash"]
@onready var bios_type:int = get_tree().current_scene.bios_type
func _ready():
#Check if XDG_RUNTIME_DIR is set and choose temp file location
if OS.has_environment("XDG_RUNTIME_DIR"):
bios_tempfile = OS.get_environment("XDG_RUNTIME_DIR") + "/godot_temp/godot_bios_files_checked.tmp"
else:
bios_tempfile = "/var/config/retrodeck/godot_temp/godot_bios_files_checked.tmp"
var table := $Table
if bios_type == 0: #Basic BIOS button pressed
table.columns = BIOS_COLUMNS_BASIC.size()
for i in BIOS_COLUMNS_BASIC.size():
table.set_column_title(i, BIOS_COLUMNS_BASIC[i])
else: #Assume advanced BIOS button pressed
table.columns = BIOS_COLUMNS_EXPERT.size()
for i in BIOS_COLUMNS_EXPERT.size():
table.set_column_title(i, BIOS_COLUMNS_EXPERT[i])
var root = table.create_item()
table.hide_root = true
if bios_type == 0: #Basic BIOS button pressed
OS.execute("/app/tools/retrodeck_function_wrapper.sh",["check_bios_files", "basic"])
else: #Assume advanced BIOS button pressed
OS.execute("/app/tools/retrodeck_function_wrapper.sh",["check_bios_files"])
if file.file_exists(bios_tempfile): #File to be removed after script is done
var bios_list := file.open(bios_tempfile, FileAccess.READ)
var bios_line := []
while ! bios_list.eof_reached():
bios_line = bios_list.get_csv_line("^")
var table_line: TreeItem = table.create_item(root)
for i in bios_line.size():
table_line.set_text(i, bios_line[i])
if table_line.get_index() % 2 == 1:
table_line.set_custom_bg_color(i,Color(0.15, 0.15, 0.15, 1),false)
table_line.set_custom_color(i,Color(1,1,1,1))

View file

@ -0,0 +1,38 @@
[gd_scene load_steps=2 format=3 uid="uid://bihon3xtx45y7"]
[ext_resource type="Script" path="res://components/bios_check/bios_check.gd" id="1_qrkee"]
[node name="PopupContent" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_qrkee")
[node name="RichTextLabel" type="RichTextLabel" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
text = "This is a list of problematic BIOS?
Very multiline text
Why do we use it?
PS3 BIOS IS VERY BAD
I'm not sure what else?"
[node name="Table" type="Tree" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
columns = 5
column_titles_visible = true
select_mode = 1

View file

@ -0,0 +1,16 @@
extends Control
var content = null
func _ready():
if (content != null):
$Panel/MarginContainer/VBoxContainer/ContentContainer/MarginContainer.add_child(content)
func set_content(new_content):
content = load(new_content).instantiate()
func set_title(new_title):
$Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/Label.text = new_title
func _on_back_pressed():
queue_free()

View file

@ -0,0 +1,71 @@
[gd_scene load_steps=3 format=3 uid="uid://ixg127wfv7wo"]
[ext_resource type="Script" path="res://components/popup.gd" id="1_ck1vn"]
[ext_resource type="Theme" uid="uid://bq8dsxeo34sl" path="res://res/pixel_ui_theme/RetroDECKTheme.tres" id="1_oqd8s"]
[node name="Popup" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_oqd8s")
script = ExtResource("1_ck1vn")
[node name="Panel" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="Panel"]
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="Panel/MarginContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/MarginContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 23
text = "This is the label"
[node name="BackButton" type="Button" parent="Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 10
text = "Back"
[node name="ContentContainer" type="Panel" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/ContentContainer"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 6
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 6
[connection signal="pressed" from="Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_pressed"]

View file

@ -0,0 +1,15 @@
[gd_scene format=3 uid="uid://c5uvguthjpfjq"]
[node name="PopupContentTest" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Button" type="Button" parent="."]
layout_mode = 1
offset_right = 12.0
offset_bottom = 8.0
text = "Test"

View file

@ -0,0 +1,105 @@
cemu:
name: "Cemu"
description: "Wii U emulator"
options:
- resettable: true
properties:
- standalone: true
citra:
name: "Citra"
description: "N3DS emulator"
options:
- resettable: true
properties:
- standalone: true
dolphin:
name: "Dolphin"
description: "Wii/GameCube emulator"
options:
- resettable: true
properties:
- standalone: true
duckstation:
name: "Duckstation"
description: "PSX emulator"
options:
- resettable: true
properties:
- standalone: true
gzdoom:
name: "GZDoom"
description: "Doom engine"
options:
- resettable: true
properties:
- standalone: true
mame:
name: "MAME"
description: "Multiple Arcade Machine Emulator"
options:
- resettable: true
properties:
- standalone: true
melonds:
name: "MelonDS"
description: "NDS emulator"
options:
- resettable: true
properties:
- standalone: true
pcsx2:
name: "PCSX2"
description: "PS2 emulator"
options:
- resettable: true
properties:
- standalone: true
ppsspp:
name: "PPSSPP"
description: "PSP emulator"
options:
- resettable: true
properties:
- standalone: true
primehack:
name: "Primehack"
description: "Metroid Prime emulator"
options:
- resettable: true
properties:
- standalone: true
rpcs3:
name: "RPCS3"
description: "PS3 emulator"
options:
- resettable: true
properties:
- standalone: true
ryujinx:
name: "Ryujinx"
description: "Switch emulator"
options:
- resettable: true
properties:
- standalone: true
vita3k:
name: "Vita3k"
description: "PS Vita emulator"
options:
- resettable: true
properties:
- standalone: true
xemu:
name: "XEMU"
description: "XBOX emulator"
options:
- resettable: true
properties:
- standalone: true
yuzu:
name: "Ryujinx"
description: "Switch emulator"
options:
- resettable: true
properties:
- standalone: true

View file

@ -0,0 +1,39 @@
[preset.0]
name="Linux/X11"
platform="Linux/X11"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="export/configurator.x86_64"
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"
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}\""

View file

@ -0,0 +1,13 @@
extends RichTextLabel
@onready var helper_text_node = self
func _ready():
# Connect the signal that gets fired on every focus change
get_viewport().connect("gui_focus_changed", _on_focus_changed)
func _on_focus_changed(selected_element:Control) -> void:
if selected_element != null and selected_element.has_meta("description"):
helper_text_node.text = selected_element.get_meta("description")
else:
helper_text_node.text = "Hey, there's no description"

18
tools/configurator/icon.svg Executable file
View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1.88235,0,0,1.86861,-7.52941,-5.60584)">
<path d="M140,37.25C140,18.347 124.765,3 106,3L38,3C19.235,3 4,18.347 4,37.25L4,105.75C4,124.653 19.235,140 38,140L106,140C124.765,140 140,124.653 140,105.75L140,37.25Z" style="fill:rgb(17,17,17);"/>
</g>
<g transform="matrix(2.02105,0,0,2.02105,-13.4737,-13.4737)">
<g id="D" transform="matrix(-0.674885,8.26495e-17,-8.26495e-17,-0.674885,223.747,109.037)">
<path d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g id="Left-Symbol" serif:id="Left Symbol" transform="matrix(0.494792,-0,-0,0.494792,6.66667,6.66667)">
<use xlink:href="#_Image1" x="39.093" y="89.764" width="103.568px" height="78.228px" transform="matrix(0.995844,0,0,0.990223,0,0)"/>
</g>
</g>
<defs>
<image id="_Image1" width="104px" height="79px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABPCAYAAAAHtYAvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGHUlEQVR4nO2de2xTVRzHP6cbe4qg8jB1ioQMcDJAHgEVMPyjgaAGQR4xhAxEGfIY8gaBGCXGGEULjMG2FhEG6JCBhEgEJWRBBkaDopIYwRAsigSHoMLa3usftzVla7eu/bWU9HySJvd37jnfnNzvPae95/Scq2hE7cTz6YZigqEYYKAKTUWhoehoKDBQmAqsYzCUwlBYaUGxocBsFBuAGS7Gn6ZUkFaQfnOx/9hsFIfSalE7rJa/rk3jBkNRbyjqDVS9qfjRUBw3FMcM1IlvXkpvaHx9W4sKDo5McPc1lKo0FP2aGKINajYOca3+MBSlpqL02+L0C9EaZAscfDnBPRs4DvSLVkxzAx2BlcDZXmXeioIy34PRiNgA6sa7+wBvA+ly9dP4yQSmAid7bvDt77HR16c1hW11493pQAXanETwOFCbX+4bGWkBGzAOGBC3KmkacxvwSbdyoziSzDZgYHzrowmBDSjtWmG81aXSsLWUsVdi6qQJwXxgy31OQ4XLYAMKE1cfTQgmApPDnbQBnRNXF00YVuc5TXuoE832f5qE0R5Yb3eZTbo6bVDy8BQwvnGiNii5WGN3mbnBCdqg5KIDMCo4QRuUfEwMDiSGd5YCLgGdWw0bUAAM8X+GI3PDj7C7zPbuIlUPMgZdHlPZ6TcBnVsRN3AAYLDDMxL4EMhttkTLZACj8d/0uosT4ujsNvuAYcDvAnL/d3PaIEHqZrX5GlgsIDUs8EykDZJnK3A2Ro1M4E7QBolzfGYbD/COgNQ9oA2KF0cFNLRBceS0gIY2KI5cBK7GqKENiiOK2J8xvaANihd5QFaMGr+CNihe5AtonANtULwYLqChDYoHA9d62gEzBaR0FxcnZgHtYtT4y12kroBlkBlzlTQADFrjGQ0sE5A6HDjQLUiIwQ5PCbCT2H+9AWwPHEjMB927c+qFvim4/MRmQKGhGGoohhrQXeBaAlwD9gQCCYMWIzPErrHYG/j+Ad3FJSPbgwNtUHJxEdgXnKANSi5muYvUv8EJ2qDkoQbY0ThRG5Qc/AnMcBepJs+k2qDkoOTcFHU+1Ak9knDzqQI+CHdSt6Cby5vApLNTbGEbiV7ZfXPwAsVnnrdVtJRRG5R4LgNjf55mOxBJZt3FJQ4T66f0wz9NS4vIHNAtKBFcBSoBx6kX01r9dyxtUPz4BXAAzpPT0y9HKyJh0BXgHwGdeHM7kC2o58VaflKP9b1SD5wCvvJ/zpyYkR7zI4zIdMOYyk6lAjpxZeqrfxcAdVhbsUiggMm1czIOCemFJGV+JFSuzP0BeE5QMg2oHvJew/2Cmk1IqZEE54rcPcByQcm7gN2POBpiXVUXlpRpQUGsAqoF9XoDmwY7PGH324mFlDNo04pcEygCvhOUHYu1mFqclDMIYPPy3KvA08AlQdnXBq3xPCmoB6SoQQBbXsk5AzwL+IQkFbB14FrPA0J6QAobBFC1LOdzYK6gZFtgd/91njukBFPaID9rAaegXj6w7aF13jQJsZQ3aNuyHBOYgcy60gBPAG9ICKW8QQA7luZcB57BGrqRYkGfUm/MD8baID8fLck+j7UFy3VB2Yre670x7aicUiMJLbFzSfYx4AVBySxgV68y793RCugW1Ihdi7M3A6sFJfOA6oIyX0Y0hbVBoVmIfxcrIR4F1vbc4Gv1cJA2KAQ1i7K9WPuHSmxIEWAaML21hbRBYdizMOsS1kavsW5IEYyjx0bfY60poA1qhr0Ls74HJglKpgPV+eW+LpEW0Aa1wL4FWTVY7wGSogNQ063ciGgOSRsUGa8DHwvq9QWcXSvCv7MhgDYoAj6dn2VgvV/hpKDsOCJYOqoNipD98zLjMYe0qkulMaq5DHokoRV8Ni/zNNadLzmHVHWf0+gZLoNuQa3k4MuZB4F5gpJtgd15TrN9qJPaoOhwAJsE9boDVXaX2WQOSRsUBV/MzTSBYqw/QkoxAusfRzegDYqSQyUZ17DmkEIuXYySRXaXecO7G7RBMXC4JMONNYcU8yuhg3DaXWb/QKANipHaORl1yM8h1dhdZmfQBolwZHbG+8C7gpJ5QLXdZWZog+RYABwU1BsCOP4DNMctuHcT4JEAAAAASUVORK5CYII="/>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv6vh33cnfaw4"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -0,0 +1,81 @@
keys,en,it,de,sv,ua,ja,zh
TK_SYSTEM,"System","Sistema","System","System","Cистема","システム","系统"
TK_GAME_SETTINGS,"Game Settings","Impostazioni di Gioco","Spieleinstellungen","Spelinställningar","Ігрові Налаштування","ゲーム設定","游戏设定"
TK_QRESUME,"Quick Resume","Quick Resume","Schnellfortsetzung","Snabb Återupptagning","Швидкий Запуск","クイックリジューム","快速恢复"
TK_ADVANCED,"Advanced","Avanzate","Erweitert","Avancerat","Розширені","アドバンスド","高级/进阶"
TK_REWIND,"Rewind","Riavvolgimento","Zurückspulen","Tillbakaspolning","Перемотка","巻き戻し","倒带"
TK_CONFIRMEXIT,"Quit Confirmation","Conferma per Uscire","Beenden Bestätigen","Avlutningsbekräftelse","Підтвердження Виходу","確認終了","退出确认"
TK_CHEATS,"Cheats","Trucchi","Cheats","Fusk","Чіти","チート","作弊"
TK_SOON,"(coming soon)","(in arrivo)","(bald verfügbar)","(kommer snart)","(незабаром)","(近日公開)","(即将到来)"
TK_GRAPHICS,"Graphics","Grafica","Grafik","Grafik","Графіка","グラフィック","画质"
TK_CONTROLS,"Controls","Controlli","Steuerung","Kontroller","Управління","コントロール","控制"
TK_TOOLS,"Tools","Strumenti","Werkzeuge","Verktyg","Інструменти","ツール","工具"
TK_NETWORK,"Network","Rete","Netzwerk","Nätverk","Мережа","ネットワーク","kai qi"
TK_TROUBLESHOOT,"Troubleshoot","Risoluzione Problemi","Fehlerbehebung","Felsökning","Несправності","トラブルシューティング","排错"
TK_TROUBLESHOOTLBL,"Troubleshoot","Risoluzione Problemi","Fehlerbehebung","Felsökning","Усунення Несправностей","トラブルシューティング","排错"
TK_CONFIGURATOR,"Configurator","Configurator","Configurator","Configurator","Конфігуратор","確認","设置"
TK_ABOUT,"About","Informazioni","Über","Om","Про Нас","アバウト","关于"
TK_DECORATIONS,"Decorations","Decorazioni","Dekorationen","Dekorationer","Декорації","装飾","装饰"
TK_BORDERS,"Borders","Bordi","Ränder","Ramar","Фони","ボーダー","边框"
TK_WSCREEN,"Widescreen","Widescreen","Breitbild","Bredbild","Широкий Екран","ワイドスクリーン","宽屏"
TK_SHADERS,"Shaders","Shader","Shaders","Shaders","Шейдери","シェーダ","着色器"
TK_EXTRA,"Extra","Extra","Extra","Extra","Додатково","エクストラ","额外"
TK_MODS,"Mods","Mod","Mods","Moddar","Модифікації","改造","游戏模组"
TK_TATE,"TATE Mode","TATE Mode","TATE-Mode","TATE Läge","Режим TATE","垂直スクリーンモード","垂屏模式"
TK_STEAMCONTEMP,"Steam: Controller Templates","Template dei Controller di Steam","Steam: Controller-Vorlagen","Steam: Kontroller Mallar","Steam: Шаблони Контролерів","Steamコントローラーテンプレート","Steam控制器模板"
TK_INSTALL,"Install","Installa","Installieren","Installera","Встановити","インストール","安装"
TK_BTNLAYOUT,"Button Layout","Layout Pulsanti","Tastenbelegung","Knapp Layout","Розташування Кнопок","ボタンのレイアウト","按键布局"
TK_BTNCLASSIC,"Classic","Classico","Klassik","Klassisk","Класичний","クラッシク","经典"
TK_BTNNINTENDO,"Nintendo","Nintendo","Nintendo","Nintendo","Nintendo","ニンテンドー","任天堂"
TK_HOTKEYSOUND,"Hotkey Activation Sound","Suono su Attivazione Hotkey","Hotkey Aktivierungssound","Hotkey Aktiveringsljud","Звук Гарячих Клавіш","ホットキー起動音","热键激活音效"
TK_SCAN,"Scan","Scansiona","Scan","Skanna","Сканувати","スキャン","扫描"
TK_PS3SCAN,"PlayStation 3 Games","Giochi PlayStation 3","PlayStation 3 Spiele","PlayStation 3 Spel","Ігри для PlayStation 3","プレステ3ゲーム","PlayStation3游戏"
TK_SCUMMVMSCAN,"ScummVM Games","Giochi ScummVM","ScummVM Spiele","ScummVM Spel","Ігри ScummVM","ScummVMゲーム","ScummVM游戏"
TK_MULTIFILE,"Multi-File Structure","Struttura Multi-File","Mehrfachdateistruktur","Flerfilsstruktur","Багатофайлова Структура","マルチファイル構造","多文件结构"
TK_3DSDECRYPT,"3DS Game Decrypter","Decrittatore Giochi 3DS","3DS Spielentcrypter","3DS Spelavkrypterare","Дешифратор Ігор 3DS","3DS ゲームデクリプタ","3DS游戏解密"
TK_BIOS,"BIOS","BIOS","BIOS","BIOS","BIOS","BIOS","BIOS"
TK_GENTOOLS,"General Tools","Strumenti Generali","Allgemeine Werkzeuge","Allmänt","Загальні Інструменти","一般的なツール","一般工具"
TK_EMUOPEN,"Open Emulator...","Apri Emulatore...","Öffne Emulator...","Öppna Emulator...","Відкрити Емулятор...","エミュレータを開く...","打开模拟器..."
TK_GRIDINSTALL,"Install RetroDECK Steam Grids","Installa le Steam Grids di RetroDECK","RetroDECK Steam Grids Installieren","Installera RetroDECK Steam Grids","Встановити RetroDECK Steam Grids","RetroDECK Steam Gridsをインストール","安装RetroDECK Steam Grids"
TK_PS3FWINSTALL,"Install PS3 Firmware","Installa il Firmware PS3","Installiere PS3 Firmware","Installera PS3 Firmware","Встановити Прошивку PS3","PS3ファームウェアをインストール","安装PS3固件"
TK_FAVSTEAM,"Show Favorites as Steam Games","Mostra Giochi Preferiti su Steam","Favoriten als Steam-Spiele anzeigen","Visa Favoriter som Spel i Steam","Показати Улюблені як Ігри в Steam","お気に入りを Steam ゲームとして表示","显示收藏夹为Steam游戏"
TK_FILETOOLS,"File Maniuplation","Manipolazione File","Datei Werkzeuge","Filhantering","Маніпуляції з Файлами","ファイル操作","文件操作"
TK_USBTOOL,"USB Transfer Tool","Strumento di Trasferimento USB","USB Transfer Tool","USB Överföringsverktyg","Інструмент для Передачі Даних USB","USB転送ツール","USB传输工具"
TK_BACKUPBTN,"Backup User Data","Backup Dati Utente","Benutzerdaten Sichern","Backup av Användardata","Резервне Копіювання Даних Користувача","ユーザデータバックアップ","备份用户数据"
TK_COMPRESSGAMES,"Compress Games","Comprimi Giochi","Spiele Komprimieren","Komprimera Spel","Стиснути Ігри","ゲームを圧縮","压缩游戏"
TK_MOVEFILES,"Move User Files","Sposta File Utente","Benutzerdateien Verschieben","Flytta Användarfiler","Перемістити Файли Користувача","ユーザーファイルを移動","移动用户文件"
TK_CHEEVOS,"Retro Achievements","Retro Achievements","Retro Achievements","Retro Achievements","Retro Achievements","レトロ実績","Retro成就"
TK_CHEEVOSUNAME,"Username:","Nome Utente:","Benutzername:","Användarnamn:","Ім'я користувача:","ユーザー名:","用户名:"
TK_CHEEVOSPWD,"Password:","Password:","Passwort:","Lösenord:","Пароль:","パスワード:","密码:"
TK_CHEEVOSHARDCORE,"Hardcore Mode","Modalità Hardcore","Hardcore Modus","Hardcore Läge","Хардкорний Режим","ハードコアモード","硬核模式"
TK_CHEEVOSTROPHYBTN,"Show Throphies","Mostra Trofei","Trophäen Anzeigen","Visa Troféer","Показати Трофеї","トロフィーを表示","显示奖杯"
TK_LOGIN,"Login","Login","Login","Logga In","Увійти","ログイン","登录"
TK_NETPLAY,"Netplay","Netplay","Netplay","Netplay","Netplay","ネットプレイ","网战"
TK_NETPLAYID,"Netplay ID:","ID Netplay:","Netplay ID:","Netplay ID:","Netplay ID:","ネットプレイID","网战ID"
TK_NETPLAYADDRESS,"Address:","Indirizzo:","Adresse:","Address:","Адреса:","アドレス:","地址:"
TK_NETPLAYCONNECT,"Connect","Connetti","Verbinden","Anslut","Підключитися","接続","连接"
TK_DATAMNG,"Data Management","Gestione Dati","Datenverwaltung","Datahantering","Управління Даними","データ管理","数据管理"
TK_SAVESSYNC,"Synchronize Saves","Sincronizzazione Salvataggi","Spielstände Synchronisieren","Synkronisera Sparfiler","Синхронізувати Збереження","保存データを同期","同步存档"
TK_FTPBTN,"Start sFTP Server","Avvia Server sFTP","Starte sFTP Server","Starta sFTP Server","Запустити Сервер sFTP","sFTPサーバーを起動","开启sFTP服务器"
TK_CHECKCONN,"Check Connection","Controllo Connessione","Verbindung Überprüfen","Kontrollera Anslutning","Перевірити Підключення","接続を確認","检查连接"
TK_LOGSBTN,"Show Logs","Mostra Log","Logs Anzeigen","Visa Loggar","Показати Логи","ログを表示","显示日志"
TK_RESET,"Reset","Reset","Reset","Återställ","Скинути","リセット","重置"
TK_RESETSINGLE,"Single Emulator...","Emulatore Singolo...","Einzelner Emulator...","En Emulator...","Один Емулятор...","単一エミュレータ...","单独模拟器..."
TK_RESETALL,"All Emulators","Tutti gli Emulatori","Alle Emulatoren","Alla Emulatorer","Всі Емулятори","全エミュレータ","所有模拟器"
TK_RESETFULL,"Full RetroDECK Reset","Reset RetroDECK Completo","Vollständiges Zurücksetzen von RetroDECK","Återställ Hela RetroDECK","Повне Скидання RetroDECK","RetroDECKを完全リセット","完全重置RetroDECK"
TK_UPDATENOTIF,"Update Notification","Notifica gli Aggiornamenti","Update-Benachrichtigung","Uppdaterings-notifikation","Сповіщення про Оновлення","アップデート通知","更新通知"
TK_EASTEREGGS,"Show Easter Eggs","Mostra Easter Eggs","Easter Eggs anzeigen","Visa Easter Eggs","Показувати Пасхальні Яйця","イースターエッグを表示","显示彩蛋"
TK_MULTIUSR,"Multi-User Mode","Modalità Multi-Utente","Multi-User Mode","Flerspelarläge","Багатокористувацький Режим","マルチユーザーモード","多用户模式"
TK_OFF,"Off","Off","Aus","Av","Вимк","オフ","关闭"
TK_STEAMUSR,"Steam Users","Utenti Steam","Steam Benutzer","Steam Användare","Користувачі Steam","Steamユーザー","Steam用户"
TK_CUSTOMUSR,"Custom Users","Utenti Personalizzati","Benutzerdefinierte Benutzer","Anpassade Användare","Кастомні Користувачі","カスタムユーザー","自定义用户"
TK_MUSIC,"Menu Music","Musica del Menu","Menu Hintergrundmusik","Meny Musik","Музика Меню","メニュー音楽","菜单音乐"
TK_ABOUTHEADER,"About RetroDECK","A Proposito di RetroDECK","Über RetroDECK","Om RetroDECK","Про RetroDECK","RetroDECKについて","关于RetroDECK"
TK_WEBSITE,"Website","Sito Web","Website","Hemsida","Веб-сайт","公式サイト","网站"
TK_CHANGELOG,"Version History","Storico Versioni","Versions History","Versionshistorik","Історія Версій","バージョン履歴","版本历史"
TK_WIKI,"Wiki","Wiki","Wiki","Wiki","Wiki","Wiki","维基"
TK_CREDITS,"Credits","Crediti","Credits","Tillskrivningar","Автори","クレジット","鸣谢"
TK_DONATE,"Donate","Donazione","Spenden","Donera","Пожертвувати","寄付","捐赠"
TK_CONTACTUS,"Reach Us","Contattaci","Kontakiere Uns","Kontakta Oss","Зв'язатися з Нами","連絡","联系我们"
TK_LICENSES,"Licenses","Licenze","Lizenzen","Licenser","Ліцензії","ライセンス","许可"
TK_ON,"On","On","An","På","Увімк","オン","开启"
1 keys en it de sv ua ja zh
2 TK_SYSTEM System Sistema System System Cистема システム 系统
3 TK_GAME_SETTINGS Game Settings Impostazioni di Gioco Spieleinstellungen Spelinställningar Ігрові Налаштування ゲーム設定 游戏设定
4 TK_QRESUME Quick Resume Quick Resume Schnellfortsetzung Snabb Återupptagning Швидкий Запуск クイックリジューム 快速恢复
5 TK_ADVANCED Advanced Avanzate Erweitert Avancerat Розширені アドバンスド 高级/进阶
6 TK_REWIND Rewind Riavvolgimento Zurückspulen Tillbakaspolning Перемотка 巻き戻し 倒带
7 TK_CONFIRMEXIT Quit Confirmation Conferma per Uscire Beenden Bestätigen Avlutningsbekräftelse Підтвердження Виходу 確認終了 退出确认
8 TK_CHEATS Cheats Trucchi Cheats Fusk Чіти チート 作弊
9 TK_SOON (coming soon) (in arrivo) (bald verfügbar) (kommer snart) (незабаром) (近日公開) (即将到来)
10 TK_GRAPHICS Graphics Grafica Grafik Grafik Графіка グラフィック 画质
11 TK_CONTROLS Controls Controlli Steuerung Kontroller Управління コントロール 控制
12 TK_TOOLS Tools Strumenti Werkzeuge Verktyg Інструменти ツール 工具
13 TK_NETWORK Network Rete Netzwerk Nätverk Мережа ネットワーク kai qi
14 TK_TROUBLESHOOT Troubleshoot Risoluzione Problemi Fehlerbehebung Felsökning Несправності トラブルシューティング 排错
15 TK_TROUBLESHOOTLBL Troubleshoot Risoluzione Problemi Fehlerbehebung Felsökning Усунення Несправностей トラブルシューティング 排错
16 TK_CONFIGURATOR Configurator Configurator Configurator Configurator Конфігуратор 確認 设置
17 TK_ABOUT About Informazioni Über Om Про Нас アバウト 关于
18 TK_DECORATIONS Decorations Decorazioni Dekorationen Dekorationer Декорації 装飾 装饰
19 TK_BORDERS Borders Bordi Ränder Ramar Фони ボーダー 边框
20 TK_WSCREEN Widescreen Widescreen Breitbild Bredbild Широкий Екран ワイドスクリーン 宽屏
21 TK_SHADERS Shaders Shader Shaders Shaders Шейдери シェーダ 着色器
22 TK_EXTRA Extra Extra Extra Extra Додатково エクストラ 额外
23 TK_MODS Mods Mod Mods Moddar Модифікації 改造 游戏模组
24 TK_TATE TATE Mode TATE Mode TATE-Mode TATE Läge Режим TATE 垂直スクリーンモード 垂屏模式
25 TK_STEAMCONTEMP Steam: Controller Templates Template dei Controller di Steam Steam: Controller-Vorlagen Steam: Kontroller Mallar Steam: Шаблони Контролерів Steam:コントローラーテンプレート Steam:控制器模板
26 TK_INSTALL Install Installa Installieren Installera Встановити インストール 安装
27 TK_BTNLAYOUT Button Layout Layout Pulsanti Tastenbelegung Knapp Layout Розташування Кнопок ボタンのレイアウト 按键布局
28 TK_BTNCLASSIC Classic Classico Klassik Klassisk Класичний クラッシク 经典
29 TK_BTNNINTENDO Nintendo Nintendo Nintendo Nintendo Nintendo ニンテンドー 任天堂
30 TK_HOTKEYSOUND Hotkey Activation Sound Suono su Attivazione Hotkey Hotkey Aktivierungssound Hotkey Aktiveringsljud Звук Гарячих Клавіш ホットキー起動音 热键激活音效
31 TK_SCAN Scan Scansiona Scan Skanna Сканувати スキャン 扫描
32 TK_PS3SCAN PlayStation 3 Games Giochi PlayStation 3 PlayStation 3 Spiele PlayStation 3 Spel Ігри для PlayStation 3 プレステ3ゲーム PlayStation3游戏
33 TK_SCUMMVMSCAN ScummVM Games Giochi ScummVM ScummVM Spiele ScummVM Spel Ігри ScummVM ScummVMゲーム ScummVM游戏
34 TK_MULTIFILE Multi-File Structure Struttura Multi-File Mehrfachdateistruktur Flerfilsstruktur Багатофайлова Структура マルチファイル構造 多文件结构
35 TK_3DSDECRYPT 3DS Game Decrypter Decrittatore Giochi 3DS 3DS Spielentcrypter 3DS Spelavkrypterare Дешифратор Ігор 3DS 3DS ゲームデクリプタ 3DS游戏解密
36 TK_BIOS BIOS BIOS BIOS BIOS BIOS BIOS BIOS
37 TK_GENTOOLS General Tools Strumenti Generali Allgemeine Werkzeuge Allmänt Загальні Інструменти 一般的なツール 一般工具
38 TK_EMUOPEN Open Emulator... Apri Emulatore... Öffne Emulator... Öppna Emulator... Відкрити Емулятор... エミュレータを開く... 打开模拟器...
39 TK_GRIDINSTALL Install RetroDECK Steam Grids Installa le Steam Grids di RetroDECK RetroDECK Steam Grids Installieren Installera RetroDECK Steam Grids Встановити RetroDECK Steam Grids RetroDECK Steam Gridsをインストール 安装RetroDECK Steam Grids
40 TK_PS3FWINSTALL Install PS3 Firmware Installa il Firmware PS3 Installiere PS3 Firmware Installera PS3 Firmware Встановити Прошивку PS3 PS3ファームウェアをインストール 安装PS3固件
41 TK_FAVSTEAM Show Favorites as Steam Games Mostra Giochi Preferiti su Steam Favoriten als Steam-Spiele anzeigen Visa Favoriter som Spel i Steam Показати Улюблені як Ігри в Steam お気に入りを Steam ゲームとして表示 显示收藏夹为Steam游戏
42 TK_FILETOOLS File Maniuplation Manipolazione File Datei Werkzeuge Filhantering Маніпуляції з Файлами ファイル操作 文件操作
43 TK_USBTOOL USB Transfer Tool Strumento di Trasferimento USB USB Transfer Tool USB Överföringsverktyg Інструмент для Передачі Даних USB USB転送ツール USB传输工具
44 TK_BACKUPBTN Backup User Data Backup Dati Utente Benutzerdaten Sichern Backup av Användardata Резервне Копіювання Даних Користувача ユーザデータバックアップ 备份用户数据
45 TK_COMPRESSGAMES Compress Games Comprimi Giochi Spiele Komprimieren Komprimera Spel Стиснути Ігри ゲームを圧縮 压缩游戏
46 TK_MOVEFILES Move User Files Sposta File Utente Benutzerdateien Verschieben Flytta Användarfiler Перемістити Файли Користувача ユーザーファイルを移動 移动用户文件
47 TK_CHEEVOS Retro Achievements Retro Achievements Retro Achievements Retro Achievements Retro Achievements レトロ実績 Retro成就
48 TK_CHEEVOSUNAME Username: Nome Utente: Benutzername: Användarnamn: Ім'я користувача: ユーザー名: 用户名:
49 TK_CHEEVOSPWD Password: Password: Passwort: Lösenord: Пароль: パスワード: 密码:
50 TK_CHEEVOSHARDCORE Hardcore Mode Modalità Hardcore Hardcore Modus Hardcore Läge Хардкорний Режим ハードコアモード 硬核模式
51 TK_CHEEVOSTROPHYBTN Show Throphies Mostra Trofei Trophäen Anzeigen Visa Troféer Показати Трофеї トロフィーを表示 显示奖杯
52 TK_LOGIN Login Login Login Logga In Увійти ログイン 登录
53 TK_NETPLAY Netplay Netplay Netplay Netplay Netplay ネットプレイ 网战
54 TK_NETPLAYID Netplay ID: ID Netplay: Netplay ID: Netplay ID: Netplay ID: ネットプレイID: 网战ID:
55 TK_NETPLAYADDRESS Address: Indirizzo: Adresse: Address: Адреса: アドレス: 地址:
56 TK_NETPLAYCONNECT Connect Connetti Verbinden Anslut Підключитися 接続 连接
57 TK_DATAMNG Data Management Gestione Dati Datenverwaltung Datahantering Управління Даними データ管理 数据管理
58 TK_SAVESSYNC Synchronize Saves Sincronizzazione Salvataggi Spielstände Synchronisieren Synkronisera Sparfiler Синхронізувати Збереження 保存データを同期 同步存档
59 TK_FTPBTN Start sFTP Server Avvia Server sFTP Starte sFTP Server Starta sFTP Server Запустити Сервер sFTP sFTPサーバーを起動 开启sFTP服务器
60 TK_CHECKCONN Check Connection Controllo Connessione Verbindung Überprüfen Kontrollera Anslutning Перевірити Підключення 接続を確認 检查连接
61 TK_LOGSBTN Show Logs Mostra Log Logs Anzeigen Visa Loggar Показати Логи ログを表示 显示日志
62 TK_RESET Reset Reset Reset Återställ Скинути リセット 重置
63 TK_RESETSINGLE Single Emulator... Emulatore Singolo... Einzelner Emulator... En Emulator... Один Емулятор... 単一エミュレータ... 单独模拟器...
64 TK_RESETALL All Emulators Tutti gli Emulatori Alle Emulatoren Alla Emulatorer Всі Емулятори 全エミュレータ 所有模拟器
65 TK_RESETFULL Full RetroDECK Reset Reset RetroDECK Completo Vollständiges Zurücksetzen von RetroDECK Återställ Hela RetroDECK Повне Скидання RetroDECK RetroDECKを完全リセット 完全重置RetroDECK
66 TK_UPDATENOTIF Update Notification Notifica gli Aggiornamenti Update-Benachrichtigung Uppdaterings-notifikation Сповіщення про Оновлення アップデート通知 更新通知
67 TK_EASTEREGGS Show Easter Eggs Mostra Easter Eggs Easter Eggs anzeigen Visa Easter Eggs Показувати Пасхальні Яйця イースターエッグを表示 显示彩蛋
68 TK_MULTIUSR Multi-User Mode Modalità Multi-Utente Multi-User Mode Flerspelarläge Багатокористувацький Режим マルチユーザーモード 多用户模式
69 TK_OFF Off Off Aus Av Вимк オフ 关闭
70 TK_STEAMUSR Steam Users Utenti Steam Steam Benutzer Steam Användare Користувачі Steam Steamユーザー Steam用户
71 TK_CUSTOMUSR Custom Users Utenti Personalizzati Benutzerdefinierte Benutzer Anpassade Användare Кастомні Користувачі カスタムユーザー 自定义用户
72 TK_MUSIC Menu Music Musica del Menu Menu Hintergrundmusik Meny Musik Музика Меню メニュー音楽 菜单音乐
73 TK_ABOUTHEADER About RetroDECK A Proposito di RetroDECK Über RetroDECK Om RetroDECK Про RetroDECK RetroDECKについて 关于RetroDECK
74 TK_WEBSITE Website Sito Web Website Hemsida Веб-сайт 公式サイト 网站
75 TK_CHANGELOG Version History Storico Versioni Versions History Versionshistorik Історія Версій バージョン履歴 版本历史
76 TK_WIKI Wiki Wiki Wiki Wiki Wiki Wiki 维基
77 TK_CREDITS Credits Crediti Credits Tillskrivningar Автори クレジット 鸣谢
78 TK_DONATE Donate Donazione Spenden Donera Пожертвувати 寄付 捐赠
79 TK_CONTACTUS Reach Us Contattaci Kontakiere Uns Kontakta Oss Зв'язатися з Нами 連絡 联系我们
80 TK_LICENSES Licenses Licenze Lizenzen Licenser Ліцензії ライセンス 许可
81 TK_ON On On An Увімк オン 开启

View file

@ -0,0 +1,17 @@
[remap]
importer="csv_translation"
type="Translation"
uid="uid://cwb782o5jh5lx"
[deps]
files=["res://locales/interface.en.translation", "res://locales/interface.it.translation", "res://locales/interface.de.translation", "res://locales/interface.sv.translation", "res://locales/interface.ua.translation", "res://locales/interface.ja.translation", "res://locales/interface.zh.translation"]
source_file="res://locales/interface.csv"
dest_files=["res://locales/interface.en.translation", "res://locales/interface.it.translation", "res://locales/interface.de.translation", "res://locales/interface.sv.translation", "res://locales/interface.ua.translation", "res://locales/interface.ja.translation", "res://locales/interface.zh.translation"]
[params]
compress=true
delimiter=0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,80 @@
extends Control
var bios_type:int
func _ready():
var children = findElements(self, "Control")
for n: Control in children: #iterate the children
if (n.focus_mode == FOCUS_ALL):
n.mouse_entered.connect(_on_control_mouse_entered.bind(n)) #grab focus on mouse hover
if (n.is_class("BaseButton") and n.disabled == true): #if button-like control and disabled
n.self_modulate.a = 0.5 #make it half transparent
combine_tkeys()
func _input(event):
if event.is_action_pressed("quit"):
_exit()
func findElements(node: Node, className: String, result: Array = []) -> Array:
if node.is_class(className):
result.push_back(node)
for child in node.get_children():
result = findElements(child, className, result)
return result
func _on_control_mouse_entered(control: Node):
control.grab_focus()
func load_popup(title:String, content_path:String):
var popup = load("res://components/popup.tscn").instantiate() as Control
popup.set_title(title)
popup.set_content(content_path)
$Background.add_child(popup)
func _on_quickresume_advanced_pressed():
load_popup("Quick Resume Advanced", "res://components/popups_content/popup_content_test.tscn")
func _on_bios_button_pressed():
bios_type = 0
load_popup("BIOS File Check", "res://components/bios_check/bios_popup_content.tscn")
func _on_bios_button_expert_pressed():
bios_type = 1
load_popup("BIOS File Check", "res://components/bios_check/bios_popup_content.tscn")
func _on_exit_button_pressed():
_exit()
func _exit():
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
get_tree().quit()
func _on_locale_selected(index):
match index:
0:
TranslationServer.set_locale("en")
1:
TranslationServer.set_locale("it")
2:
TranslationServer.set_locale("de")
3:
TranslationServer.set_locale("sv")
4:
TranslationServer.set_locale("ua")
5:
TranslationServer.set_locale("ja")
6:
TranslationServer.set_locale("zh")
combine_tkeys()
func combine_tkeys(): #More as a test
$Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer/cheats.text = tr("TK_CHEATS") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer/shaders.text = tr("TK_SHADERS") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container/GridContainer/tate_mode.text = tr("TK_TATE") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container/hotkey_sound.text = tr("TK_HOTKEYSOUND") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container/cheevos_hardcore.text = tr("TK_CHEEVOSHARDCORE") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/data_mng_container/saves_sync.text = tr("TK_SAVESSYNC") + " " + tr("TK_SOON")
$Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container/easter_eggs.text = tr("TK_EASTEREGGS") + " " + tr("TK_SOON")

View file

@ -0,0 +1,971 @@
[gd_scene load_steps=27 format=3 uid="uid://61f6m4r1mpan"]
[ext_resource type="Texture2D" uid="uid://bv6vh33cnfaw4" path="res://icon.svg" id="1_axfei"]
[ext_resource type="Script" path="res://main.gd" id="1_obpq7"]
[ext_resource type="Script" path="res://TabContainer.gd" id="3_id6l4"]
[ext_resource type="AudioStream" uid="uid://dig4pco500pyt" path="res://res/configurator.mp3" id="3_xivj6"]
[ext_resource type="Texture2D" uid="uid://dx0u5hiwxfgu5" path="res://res/pixel_ui_theme/8x8_ui_elements.png" id="4_2tuu4"]
[ext_resource type="Script" path="res://Rekku.gd" id="4_nqqx3"]
[ext_resource type="Texture2D" uid="uid://cxyml1owhi6de" path="res://res/pixel_ui_theme/8x8_ui_icons.png" id="4_v1scw"]
[ext_resource type="Script" path="res://helper_text.gd" id="5_cprkf"]
[ext_resource type="Texture2D" uid="uid://dxdhjp18rgmr4" path="res://res/flags/united_kingdom_32.png" id="5_exkn2"]
[ext_resource type="Texture2D" uid="uid://cru43y7hco6kh" path="res://res/flags/italy_32.png" id="6_fiylw"]
[ext_resource type="Texture2D" uid="uid://cti2vt14gxisl" path="res://res/flags/germany_32.png" id="7_qgxid"]
[ext_resource type="Texture2D" uid="uid://bns0ot5pbf03h" path="res://res/flags/sweden_32.png" id="8_lptln"]
[ext_resource type="Texture2D" uid="uid://cor8ep0fkqm08" path="res://res/Rekku/base.png" id="9_brsrf"]
[ext_resource type="Texture2D" uid="uid://dhsorn3kcfdcv" path="res://res/flags/ukraine_32.png" id="9_dp7oa"]
[ext_resource type="Texture2D" uid="uid://dtwjo7co226dw" path="res://res/flags/japan_32.png" id="10_e8mt0"]
[ext_resource type="Texture2D" uid="uid://cavtn1rljc5oe" path="res://res/Rekku/eyes-open.png" id="10_y6gkh"]
[ext_resource type="Texture2D" uid="uid://cv7nckloqhn5m" path="res://res/Rekku/blink1.png" id="11_6deod"]
[ext_resource type="Texture2D" uid="uid://cbwhpqip43aei" path="res://res/flags/china_32.png" id="11_ri2fv"]
[ext_resource type="Texture2D" uid="uid://by0oj188x350g" path="res://res/Rekku/blink2.png" id="12_ro20g"]
[ext_resource type="Texture2D" uid="uid://ciwghjy0ahxk6" path="res://res/Rekku/mouth-A.png" id="13_xj3b3"]
[ext_resource type="Texture2D" uid="uid://kx8eypf4ffvu" path="res://res/Rekku/mouth-base.png" id="14_lnkoa"]
[ext_resource type="Texture2D" uid="uid://b6gl8sltbak7v" path="res://res/Rekku/mouth-O.png" id="15_1sikj"]
[sub_resource type="AtlasTexture" id="AtlasTexture_st633"]
atlas = ExtResource("4_v1scw")
region = Rect2(72, 56, 8, 8)
margin = Rect2(1, 1, 1, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_rf0rc"]
texture = ExtResource("4_2tuu4")
texture_margin_left = 6.0
texture_margin_top = 6.0
texture_margin_right = 6.0
texture_margin_bottom = 6.0
region_rect = Rect2(0, 8, 16, 16)
modulate_color = Color(0.65098, 0.403922, 0.819608, 1)
[sub_resource type="SpriteFrames" id="SpriteFrames_trwmf"]
animations = [{
"frames": [{
"duration": 40.0,
"texture": ExtResource("10_y6gkh")
}, {
"duration": 0.15,
"texture": ExtResource("11_6deod")
}, {
"duration": 0.15,
"texture": ExtResource("12_ro20g")
}],
"loop": true,
"name": &"blink",
"speed": 5.0
}]
[sub_resource type="SpriteFrames" id="SpriteFrames_p8gbs"]
animations = [{
"frames": [{
"duration": 15.0,
"texture": ExtResource("14_lnkoa")
}, {
"duration": 1.0,
"texture": ExtResource("13_xj3b3")
}, {
"duration": 0.5,
"texture": ExtResource("14_lnkoa")
}, {
"duration": 1.0,
"texture": ExtResource("14_lnkoa")
}, {
"duration": 1.0,
"texture": ExtResource("15_1sikj")
}, {
"duration": 1.0,
"texture": ExtResource("13_xj3b3")
}, {
"duration": 1.0,
"texture": ExtResource("14_lnkoa")
}],
"loop": true,
"name": &"speech",
"speed": 5.0
}]
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_obpq7")
metadata/bios_type = 0
[node name="Background" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -500.0
offset_top = -350.0
offset_right = 500.0
offset_bottom = 200.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="Background"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TabContainer" type="TabContainer" parent="Background/MarginContainer"]
layout_mode = 2
tab_alignment = 1
current_tab = 3
script = ExtResource("3_id6l4")
[node name="TK_SYSTEM" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_SYSTEM"]
layout_mode = 2
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 64
[node name="game_control_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="game_control_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container"]
layout_mode = 2
text = "TK_GAME_SETTINGS"
[node name="game_control_label2" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container"]
layout_mode = 2
[node name="GridContainer" type="GridContainer" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container"]
layout_mode = 2
columns = 2
[node name="quick_resume" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
button_pressed = true
text = "TK_QRESUME"
metadata/description = "This is a test description set to this element"
[node name="quick_resume_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
text = "TK_ADVANCED"
[node name="rewind" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "TK_REWIND"
metadata/description = "This is another, very long and convoluted, description, that I put too much commas in to make in LONGER and more SOPHISTICATED. And I did it twice!!!This is another, very long and convoluted, description, that I put too much commas in to make in LONGER and more SOPHISTICATED."
[node name="rewind_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="quit_confirm" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
button_pressed = true
text = "TK_CONFIRMEXIT"
[node name="quit_confirm_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="cheats" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
disabled = true
text = "TK_CHEATS, TK_SOON"
[node name="cheats_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="TK_GRAPHICS" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS"]
layout_mode = 2
size_flags_vertical = 3
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 64
[node name="decorations_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="decorations_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container"]
layout_mode = 2
text = "TK_DECORATIONS"
[node name="decorations_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container"]
layout_mode = 2
[node name="GridContainer" type="GridContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container"]
layout_mode = 2
columns = 2
[node name="borders" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
button_pressed = true
text = "TK_BORDERS"
[node name="borders_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="wide_screen" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "TK_WSCREEN"
[node name="wide_screen_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="shaders" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
disabled = true
button_pressed = true
text = "TK_SHADERS"
[node name="shaders_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/decorations_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="extra_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="decorations_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container"]
layout_mode = 2
text = "TK_EXTRA"
[node name="decorations_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container"]
layout_mode = 2
[node name="GridContainer" type="GridContainer" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container"]
layout_mode = 2
columns = 2
[node name="wide_screen" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
disabled = true
button_pressed = true
text = "TK_MODS"
[node name="wide_screen_adv_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="tate_mode" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_GRAPHICS/ScrollContainer/VBoxContainer/extra_container/GridContainer"]
layout_mode = 2
disabled = true
text = "TK_TATE"
[node name="TK_CONTROLS" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_CONTROLS"]
layout_mode = 2
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="controls_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="controls_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container"]
layout_mode = 2
text = "TK_CONTROLS"
[node name="controls_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container"]
layout_mode = 2
[node name="controller_templates_container" type="HBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container"]
layout_mode = 2
[node name="controller_templates" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container/controller_templates_container"]
layout_mode = 2
size_flags_horizontal = 3
text = "TK_STEAMCONTEMP"
[node name="controller_templater_install_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container/controller_templates_container"]
layout_mode = 2
size_flags_horizontal = 10
size_flags_vertical = 4
text = "TK_INSTALL"
[node name="button_layout_container" type="HBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container"]
layout_mode = 2
[node name="button_layout" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container/button_layout_container"]
layout_mode = 2
size_flags_horizontal = 3
text = "TK_BTNLAYOUT"
[node name="button_layout_option" type="OptionButton" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container/button_layout_container"]
layout_mode = 2
size_flags_horizontal = 10
size_flags_vertical = 4
item_count = 2
selected = 0
popup/item_0/text = "TK_BTNCLASSIC"
popup/item_0/id = 0
popup/item_1/text = "TK_BTNNINTENDO"
popup/item_1/id = 1
[node name="hotkey_sound" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_CONTROLS/ScrollContainer/VBoxContainer/controls_container"]
layout_mode = 2
disabled = true
button_pressed = true
text = "TK_HOTKEYSOUND"
[node name="TK_TOOLS" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_TOOLS"]
layout_mode = 2
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 36
[node name="scan_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="scan_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
text = "TK_SCAN"
[node name="scan_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
[node name="ps3_scan" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
disabled = true
text = "TK_PS3SCAN"
[node name="scummvm_scan" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
disabled = true
text = "TK_SCUMMVMSCAN"
[node name="multifile_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
text = "TK_MULTIFILE"
[node name="3ds_decrypt_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
disabled = true
text = "TK_3DSDECRYPT"
[node name="bios_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
text = "TK_BIOS"
[node name="bios_button_expert" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container"]
layout_mode = 2
text = "TK_BIOS_EXPERT"
[node name="tools_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="tools_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
text = "TK_GENTOOLS"
[node name="tools_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
[node name="emu_open_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
text = "TK_EMUOPEN"
[node name="steamgrid_install_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
disabled = true
text = "TK_GRIDINSTALL"
[node name="ps3_fw_install_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
text = "TK_PS3FWINSTALL"
[node name="fav_steam" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/tools_container"]
layout_mode = 2
text = "TK_FAVSTEAM"
[node name="file_tools_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="file_tools_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
text = "TK_FILETOOLS"
[node name="file_tools_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
[node name="usb_tool_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
disabled = true
text = "TK_USBTOOL"
[node name="backup_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
disabled = true
text = "TK_BACKUPBTN"
[node name="compress_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
disabled = true
text = "TK_COMPRESSGAMES"
[node name="move_files_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/file_tools_container"]
layout_mode = 2
disabled = true
text = "TK_MOVEFILES"
[node name="TK_NETWORK" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK"]
layout_mode = 2
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 64
[node name="cheevos_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="cheevos" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container"]
layout_mode = 2
text = "TK_CHEEVOS"
[node name="cheevos_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container"]
layout_mode = 2
[node name="cheevos_login_container" type="GridContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container"]
layout_mode = 2
theme_override_constants/h_separation = 64
columns = 2
[node name="cheevos_username_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_login_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
text = "TK_CHEEVOSUNAME"
[node name="cheevos_username" type="LineEdit" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_login_container"]
custom_minimum_size = Vector2(256, 0)
layout_mode = 2
size_flags_horizontal = 3
text = "username"
placeholder_text = "username"
[node name="cheevos_pass_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_login_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "TK_CHEEVOSPWD"
[node name="cheevos_pass" type="LineEdit" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_login_container"]
layout_mode = 2
size_flags_horizontal = 3
text = "password"
placeholder_text = "password"
secret = true
secret_character = "*"
[node name="cheevos_advanced_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container"]
layout_mode = 2
[node name="cheevos_advanced_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container"]
layout_mode = 2
disabled = true
text = "TK_ADVANCED"
[node name="cheevos_hardcore" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container"]
layout_mode = 2
disabled = true
text = "TK_CHEEVOSHARDCORE"
[node name="cheevos_loginout_container" type="HBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container"]
layout_mode = 2
size_flags_horizontal = 8
theme_override_constants/separation = 10
[node name="cheevos_trophies_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container/cheevos_loginout_container"]
layout_mode = 2
disabled = true
text = "TK_CHEEVOSTROPHYBTN"
[node name="cheevos_loginout_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/cheevos_container/cheevos_advanced_container/cheevos_loginout_container"]
layout_mode = 2
text = "TK_LOGIN"
[node name="netplay_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="netplay" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container"]
layout_mode = 2
text = "TK_NETPLAY"
[node name="netplay_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container"]
layout_mode = 2
[node name="netplay_id_container" type="GridContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container"]
layout_mode = 2
theme_override_constants/h_separation = 64
columns = 2
[node name="netplay_id_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 5
text = "TK_NETPLAYID"
[node name="netplay_id" type="LineEdit" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
custom_minimum_size = Vector2(256, 0)
layout_mode = 2
size_flags_horizontal = 3
text = "RetroDECK"
placeholder_text = "RetroDECK"
[node name="netplay_address_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 5
text = "TK_NETPLAYADDRESS"
[node name="netplay_address" type="LineEdit" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
layout_mode = 2
size_flags_horizontal = 3
text = "127.0.0.1"
placeholder_text = "127.0.0.1"
[node name="blank_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 5
[node name="netplay_connect_disconnect_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/netplay_container/netplay_id_container"]
layout_mode = 2
text = "TK_NETPLAYCONNECT"
[node name="data_mng_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="data_mng_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/data_mng_container"]
layout_mode = 2
text = "TK_DATAMNG"
[node name="data_mng_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/data_mng_container"]
layout_mode = 2
[node name="saves_sync" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/data_mng_container"]
layout_mode = 2
size_flags_horizontal = 3
disabled = true
text = "TK_SAVESSYNC"
[node name="ftp_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_NETWORK/ScrollContainer/VBoxContainer/data_mng_container"]
layout_mode = 2
size_flags_horizontal = 3
disabled = true
text = "TK_FTPBTN"
[node name="TK_TROUBLESHOOT" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT"]
layout_mode = 2
theme_override_constants/separation = 64
[node name="troubleshoot_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer"]
layout_mode = 2
[node name="troubleshoot_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/troubleshoot_container"]
layout_mode = 2
text = "TK_TROUBLESHOOTLBL"
[node name="troubleshoot_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/troubleshoot_container"]
layout_mode = 2
[node name="check_conn_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/troubleshoot_container"]
layout_mode = 2
text = "TK_CHECKCONN"
[node name="logs_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/troubleshoot_container"]
layout_mode = 2
disabled = true
text = "TK_LOGSBTN"
[node name="reset_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer"]
layout_mode = 2
[node name="reset_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/reset_container"]
layout_mode = 2
text = "TK_RESET"
[node name="reset_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/reset_container"]
layout_mode = 2
[node name="reset_single_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/reset_container"]
layout_mode = 2
text = "TK_RESETSINGLE"
[node name="reset_all_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/reset_container"]
layout_mode = 2
text = "TK_RESETALL"
[node name="reset_full_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_TROUBLESHOOT/VBoxContainer/reset_container"]
layout_mode = 2
text = "TK_RESETFULL"
[node name="TK_CONFIGURATOR" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="ScrollContainer" type="ScrollContainer" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR"]
layout_mode = 2
follow_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/separation = 64
[node name="system_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="system_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
text = "TK_SYSTEM"
[node name="system_separator" type="HSeparator" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
[node name="update_notification" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
button_pressed = true
text = "TK_UPDATENOTIF"
[node name="easter_eggs" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
disabled = true
button_pressed = true
text = "TK_EASTEREGGS"
[node name="multi_user_container" type="HBoxContainer" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
[node name="multi_user_label" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container/multi_user_container"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
text = "TK_MULTIUSR"
[node name="multi_user_option" type="OptionButton" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container/multi_user_container"]
layout_mode = 2
size_flags_horizontal = 10
item_count = 3
selected = 0
popup/item_0/text = "TK_OFF"
popup/item_0/id = 0
popup/item_1/text = "TK_STEAMUSR"
popup/item_1/id = 1
popup/item_2/text = "TK_CUSTOMUSR"
popup/item_2/id = 2
[node name="menu_music" type="CheckButton" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
button_pressed = true
text = "TK_MUSIC"
[node name="fancy_audio_player_here_(please_no)" type="Label" parent="Background/MarginContainer/TabContainer/TK_CONFIGURATOR/ScrollContainer/VBoxContainer/system_container"]
layout_mode = 2
size_flags_vertical = 1
text = "|| ------( )--------"
[node name="TK_ABOUT" type="MarginContainer" parent="Background/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_right = 240
[node name="about_container" type="VBoxContainer" parent="Background/MarginContainer/TabContainer/TK_ABOUT"]
layout_mode = 2
[node name="about_header" type="RichTextLabel" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
size_flags_vertical = 3
theme_override_font_sizes/normal_font_size = 23
text = "TK_ABOUTHEADER"
scroll_active = false
[node name="logo" type="TextureRect" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
custom_minimum_size = Vector2(128, 128)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 0
texture = ExtResource("1_axfei")
expand_mode = 1
stretch_mode = 4
[node name="website_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_WEBSITE"
[node name="changelog_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_CHANGELOG"
[node name="wiki_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
disabled = true
text = "TK_WIKI"
[node name="credits_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_CREDITS"
[node name="donate_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_DONATE"
[node name="contactus_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_CONTACTUS"
[node name="licenses_button" type="Button" parent="Background/MarginContainer/TabContainer/TK_ABOUT/about_container"]
layout_mode = 2
text = "TK_LICENSES"
[node name="side_logo" type="Control" parent="Background"]
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -240.0
offset_top = -175.0
offset_bottom = 45.0
grow_horizontal = 0
grow_vertical = 2
[node name="logo" type="TextureRect" parent="Background/side_logo"]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -64.0
offset_right = 64.0
offset_bottom = 128.0
grow_horizontal = 2
texture = ExtResource("1_axfei")
expand_mode = 5
[node name="rd_title" type="RichTextLabel" parent="Background/side_logo"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -66.0
offset_top = -76.0
offset_right = 66.0
grow_horizontal = 2
grow_vertical = 0
text = "RetroDECK
v0.8.0b"
scroll_active = false
[node name="exit_button" type="Button" parent="Background"]
layout_mode = 1
anchors_preset = -1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -33.0
offset_top = 50.0
offset_right = -12.0
offset_bottom = 71.0
grow_horizontal = 0
icon = SubResource("AtlasTexture_st633")
[node name="locale_option" type="OptionButton" parent="Background"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -68.0
offset_top = -39.0
offset_right = -9.0
offset_bottom = -10.0
grow_horizontal = 0
grow_vertical = 0
item_count = 7
selected = 0
popup/item_0/text = ""
popup/item_0/icon = ExtResource("5_exkn2")
popup/item_0/id = 0
popup/item_1/text = ""
popup/item_1/icon = ExtResource("6_fiylw")
popup/item_1/id = 1
popup/item_2/text = ""
popup/item_2/icon = ExtResource("7_qgxid")
popup/item_2/id = 2
popup/item_3/text = ""
popup/item_3/icon = ExtResource("8_lptln")
popup/item_3/id = 3
popup/item_4/text = ""
popup/item_4/icon = ExtResource("9_dp7oa")
popup/item_4/id = 4
popup/item_5/text = ""
popup/item_5/icon = ExtResource("10_e8mt0")
popup/item_5/id = 5
popup/item_6/text = ""
popup/item_6/icon = ExtResource("11_ri2fv")
popup/item_6/id = 6
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_xivj6")
volume_db = -11.243
[node name="CanvasModulate" type="CanvasModulate" parent="."]
visible = false
position = Vector2(134, 151)
color = Color(0.858824, 0.890196, 1, 1)
[node name="coltroller_guide" type="PanelContainer" parent="."]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -38.0
grow_horizontal = 2
grow_vertical = 0
[node name="controller_guide_text" type="RichTextLabel" parent="coltroller_guide"]
layout_mode = 2
theme_override_colors/default_color = Color(1, 1, 1, 0.607843)
theme_override_font_sizes/normal_font_size = 23
text = "(A) Accept (B) Back (L/R) Tab Switch (Menu) Exit"
fit_content = true
scroll_active = false
[node name="rekku" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_top = 5.0
offset_bottom = 5.0
grow_horizontal = 2
grow_vertical = 0
mouse_filter = 1
mouse_default_cursor_shape = 8
script = ExtResource("4_nqqx3")
[node name="speach_bubble" type="Panel" parent="rekku"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -310.0
offset_top = -206.0
offset_right = 310.0
offset_bottom = -66.0
grow_horizontal = 2
grow_vertical = 0
theme_override_styles/panel = SubResource("StyleBoxTexture_rf0rc")
[node name="helper_text" type="RichTextLabel" parent="rekku/speach_bubble"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -300.0
offset_top = -60.0
offset_right = 300.0
offset_bottom = 60.0
grow_horizontal = 2
grow_vertical = 2
text = "Rekku:
When \"Quick Resume\" is enabled, a savestate is created upon quit and it will be loaded once the game is started.
This is mot working on the following systems: Switch, WiiU."
scroll_following = true
script = ExtResource("5_cprkf")
[node name="rekku_sprite" type="Sprite2D" parent="rekku"]
position = Vector2(490, -194)
scale = Vector2(0.292969, 0.292969)
texture = ExtResource("9_brsrf")
metadata/_edit_group_ = true
[node name="blink_anim" type="AnimatedSprite2D" parent="rekku/rekku_sprite"]
sprite_frames = SubResource("SpriteFrames_trwmf")
animation = &"blink"
autoplay = "blink"
frame_progress = 0.299789
[node name="speech_anim" type="AnimatedSprite2D" parent="rekku/rekku_sprite"]
sprite_frames = SubResource("SpriteFrames_p8gbs")
animation = &"speech"
frame_progress = 0.664627
[connection signal="pressed" from="Background/MarginContainer/TabContainer/TK_SYSTEM/ScrollContainer/VBoxContainer/game_control_container/GridContainer/quick_resume_adv_button" to="." method="_on_quickresume_advanced_pressed"]
[connection signal="pressed" from="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container/bios_button" to="." method="_on_bios_button_pressed"]
[connection signal="pressed" from="Background/MarginContainer/TabContainer/TK_TOOLS/ScrollContainer/VBoxContainer/scan_container/bios_button_expert" to="." method="_on_bios_button_expert_pressed"]
[connection signal="pressed" from="Background/exit_button" to="." method="_on_exit_button_pressed"]
[connection signal="item_selected" from="Background/locale_option" to="." method="_on_locale_selected"]

View file

@ -0,0 +1,15 @@
[gd_scene format=3 uid="uid://bihon3xtx45y7"]
[node name="PopupContentTest" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Button" type="Button" parent="."]
layout_mode = 1
offset_right = 12.0
offset_bottom = 8.0
text = "Test"

View file

@ -0,0 +1,15 @@
#!/bin/bash
progress_file="progress"
echo "0" > "$progress_file"
for ((i=1; i<=100; i++)); do
echo -ne "$i" > "$progress_file"
# echo $i
# sleep 0.1
sleep $((RANDOM / 30000))
done
sleep 1
rm "$progress_file"

View file

@ -0,0 +1,95 @@
; 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="RetroDECK Configurator"
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 0)
boot_splash/show_image=false
config/icon="res://icon.svg"
[display]
window/size/viewport_width=1280
window/size/viewport_height=800
window/size/borderless=true
window/size/transparent=true
window/per_pixel_transparency/allowed=true
[filesystem]
import/blender/enabled=false
[gui]
theme/custom="res://res/pixel_ui_theme/RetroDECKTheme.tres"
[input]
ui_accept={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
]
}
ui_select={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null)
]
}
ui_cancel={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
]
}
rekku_hide={
"deadzone": 0.5,
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":72,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
quit={
"deadzone": 0.5,
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
next_tab={
"deadzone": 0.5,
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
previous_tab={
"deadzone": 0.5,
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
[internationalization]
locale/translation_remaps={
"res://res/pixel_ui_theme/8x8_ui_elements.png": PackedStringArray("res://res/pixel_ui_theme/8x8_ui_elements_de.png:de", "res://res/pixel_ui_theme/8x8_ui_elements_sv.png:sv"),
"res://res/pixel_ui_theme/8x8_ui_elements2x.png": PackedStringArray("res://res/pixel_ui_theme/8x8_ui_elements2x_de.png:de", "res://res/pixel_ui_theme/8x8_ui_elements2x_sv.png:sv")
}
locale/translations=PackedStringArray("res://locales/interface.en.translation", "res://locales/interface.it.translation", "res://locales/interface.de.translation", "res://locales/interface.sv.translation", "res://locales/interface.ua.translation", "res://locales/interface.zh.translation", "res://locales/interface.ja.translation")
[rendering]
textures/canvas_textures/default_texture_filter=0
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
viewport/transparent_background=true

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d25k8xm78k7sg"
path="res://.godot/imported/Rekku-base.png-ec524e22fc84c361466241e4e6648c25.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/Rekku-base.png"
dest_files=["res://.godot/imported/Rekku-base.png-ec524e22fc84c361466241e4e6648c25.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

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dodf3rp1jsch0"
path="res://.godot/imported/Rekku-test.png-377c1078b888c6a899d74f4e1c0b30d6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/Rekku-test.png"
dest_files=["res://.godot/imported/Rekku-test.png-377c1078b888c6a899d74f4e1c0b30d6.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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cor8ep0fkqm08"
path="res://.godot/imported/base.png-fa04a04461c99132fb42530f9f422101.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/base.png"
dest_files=["res://.godot/imported/base.png-fa04a04461c99132fb42530f9f422101.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cv7nckloqhn5m"
path="res://.godot/imported/blink1.png-2ff53dd2db061012dbd5bd7f4ee9f7de.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/blink1.png"
dest_files=["res://.godot/imported/blink1.png-2ff53dd2db061012dbd5bd7f4ee9f7de.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://by0oj188x350g"
path="res://.godot/imported/blink2.png-acc625fdb199f690a4a62f9989660ae9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/blink2.png"
dest_files=["res://.godot/imported/blink2.png-acc625fdb199f690a4a62f9989660ae9.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cavtn1rljc5oe"
path="res://.godot/imported/eyes-open.png-66d49c486d52265b50e5d0fe3abb8fad.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/eyes-open.png"
dest_files=["res://.godot/imported/eyes-open.png-66d49c486d52265b50e5d0fe3abb8fad.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ciwghjy0ahxk6"
path="res://.godot/imported/mouth-A.png-f35914bd03120177c7c482df466645b8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/mouth-A.png"
dest_files=["res://.godot/imported/mouth-A.png-f35914bd03120177c7c482df466645b8.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6gl8sltbak7v"
path="res://.godot/imported/mouth-O.png-68905b4fc98491fe877be590173085e9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/mouth-O.png"
dest_files=["res://.godot/imported/mouth-O.png-68905b4fc98491fe877be590173085e9.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://kx8eypf4ffvu"
path="res://.godot/imported/mouth-base.png-bc1292aecbfbb8349d7c907692d65222.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/Rekku/mouth-base.png"
dest_files=["res://.godot/imported/mouth-base.png-bc1292aecbfbb8349d7c907692d65222.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

Binary file not shown.

View file

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dig4pco500pyt"
path="res://.godot/imported/configurator.mp3-bf5a215ea0dc180d97009d0d9ee0165c.mp3str"
[deps]
source_file="res://res/configurator.mp3"
dest_files=["res://.godot/imported/configurator.mp3-bf5a215ea0dc180d97009d0d9ee0165c.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://vux4rv0elpwg"
path="res://.godot/imported/afghanistan_32.png-58a84762f21db2c34f863ad3c34f5280.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/afghanistan_32.png"
dest_files=["res://.godot/imported/afghanistan_32.png-58a84762f21db2c34f863ad3c34f5280.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://srdppupxs06l"
path="res://.godot/imported/albania_32.png-51c07292d1f87d87637793dbbd792219.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/albania_32.png"
dest_files=["res://.godot/imported/albania_32.png-51c07292d1f87d87637793dbbd792219.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cda3dhanokt4h"
path="res://.godot/imported/algeria_32.png-e0ce42d5df4370d9beb6f875d3bc98f8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/algeria_32.png"
dest_files=["res://.godot/imported/algeria_32.png-e0ce42d5df4370d9beb6f875d3bc98f8.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dm8dqr3nu3y6x"
path="res://.godot/imported/andorra_32.png-72c1c6a031652b68670bf6f3e4ca589d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/andorra_32.png"
dest_files=["res://.godot/imported/andorra_32.png-72c1c6a031652b68670bf6f3e4ca589d.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bms561fenihwm"
path="res://.godot/imported/andorra_la_vella_32.png-24b4d5b2d6bb85841457235cb3062347.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/andorra_la_vella_32.png"
dest_files=["res://.godot/imported/andorra_la_vella_32.png-24b4d5b2d6bb85841457235cb3062347.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cs0xfn77783up"
path="res://.godot/imported/angola_32.png-e05b0b666b0014cb3ee05223811a6dea.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/angola_32.png"
dest_files=["res://.godot/imported/angola_32.png-e05b0b666b0014cb3ee05223811a6dea.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://vwvmbt22cgim"
path="res://.godot/imported/antarctica_32.png-c4db612ad30d285f80c7aa1ae8a44968.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/antarctica_32.png"
dest_files=["res://.godot/imported/antarctica_32.png-c4db612ad30d285f80c7aa1ae8a44968.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c0b74ndbkrt3i"
path="res://.godot/imported/antarctica_british_ensign_32.png-b3231df1aa65e9143ec208695aa1b7da.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/antarctica_british_ensign_32.png"
dest_files=["res://.godot/imported/antarctica_british_ensign_32.png-b3231df1aa65e9143ec208695aa1b7da.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cm3iic71mnrn"
path="res://.godot/imported/antarctica_magallanes_32.png-fd4122f33ef6d329580a3ecd467612ed.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/antarctica_magallanes_32.png"
dest_files=["res://.godot/imported/antarctica_magallanes_32.png-fd4122f33ef6d329580a3ecd467612ed.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0isqk6tfqonx"
path="res://.godot/imported/antarctica_treaty_32.png-eb203480f465c4e527c72624aaa29875.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/antarctica_treaty_32.png"
dest_files=["res://.godot/imported/antarctica_treaty_32.png-eb203480f465c4e527c72624aaa29875.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c350r3fn13y7m"
path="res://.godot/imported/armenia_32.png-f2d5c666abf6b0f64987e1310d869b82.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/armenia_32.png"
dest_files=["res://.godot/imported/armenia_32.png-f2d5c666abf6b0f64987e1310d869b82.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b5g0iv6xhtkva"
path="res://.godot/imported/australia_32.png-a4a534c161665b547de0cf0fae8eab58.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/australia_32.png"
dest_files=["res://.godot/imported/australia_32.png-a4a534c161665b547de0cf0fae8eab58.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://k6tnrwafidyu"
path="res://.godot/imported/australia_christmas_island_32.png-780ae3a1fb7585e974e6d649143f77b4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://res/flags/australia_christmas_island_32.png"
dest_files=["res://.godot/imported/australia_christmas_island_32.png-780ae3a1fb7585e974e6d649143f77b4.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Some files were not shown because too many files have changed in this diff Show more