RetroDECK/emu-configs/gzdoom/gzdoom.sh

111 lines
3.3 KiB
Bash
Raw Normal View History

2023-11-23 09:59:00 +00:00
#!/bin/bash
2024-01-04 16:34:02 +00:00
source /app/libexec/logger.sh
2023-12-19 11:43:08 +00:00
# Define the IWAD files list
2023-11-24 13:01:40 +00:00
IWAD_FILES=("DOOM1.WAD" "DOOM.WAD" "DOOM2.WAD" "DOOM2F.WAD" "DOOM64.WAD" "TNT.WAD"
"PLUTONIA.WAD" "HERETIC1.WAD" "HERETIC.WAD" "HEXEN.WAD" "HEXDD.WAD"
"STRIFE0.WAD" "STRIFE1.WAD" "VOICES.WAD" "CHEX.WAD"
2023-12-19 11:43:08 +00:00
"CHEX3.WAD" "HACX.WAD" "freedoom1.wad" "freedoom2.wad" "freedm.wad"
"doom_complete.pk3"
)
2023-11-23 09:59:00 +00:00
2023-12-19 11:43:08 +00:00
# Function to check if a file is an IWAD
is_iwad() {
local file="$1"
2023-12-19 12:56:53 +00:00
local lowercase_file="$(basename "${file,,}")"
2023-12-19 11:43:08 +00:00
for iwad in "${IWAD_FILES[@]}"; do
2023-12-19 12:56:53 +00:00
if [[ "${iwad,,}" == "$lowercase_file" ]]; then
2023-12-19 11:43:08 +00:00
echo "true"
return
fi
done
echo "false"
}
2023-12-19 11:43:08 +00:00
# Function to search for files recursively
search_file_recursive() {
local file="$1"
local directory="$2"
local found_file=""
# Check if the file exists in the current directory
if [[ -e "$directory/$file" ]]; then
found_file="$directory/$file"
else
# Search recursively
2023-12-19 12:56:53 +00:00
local lowercase_file="$(echo "$file" | tr '[:upper:]' '[:lower:]')"
found_file=$(find "$directory" -type f -iname "$lowercase_file" | head -n 1)
2023-12-19 11:43:08 +00:00
fi
echo "$found_file"
}
2023-11-30 08:37:26 +00:00
2023-12-19 11:43:08 +00:00
# Main script
2023-12-19 12:56:53 +00:00
log "[INFO] RetroDECK GZDOOM wrapper init"
2023-12-19 11:43:08 +00:00
# Check if $1 is not a .doom file
if [[ "${1##*.}" != "doom" ]]; then
# Check if the file is in the IWAD list
if [[ $(is_iwad "$1") == "true" ]]; then
command="gzdoom -config /var/config/gzdoom/gzdoom.ini -iwad $1"
2023-11-30 08:37:26 +00:00
else
2023-12-19 11:43:08 +00:00
command="gzdoom -config /var/config/gzdoom/gzdoom.ini -file $1"
2023-11-30 08:37:26 +00:00
fi
2023-12-19 11:43:08 +00:00
# Log the command
2024-01-04 16:34:02 +00:00
log i "Loading: \"$1\""
log i "Executing command \"$command\""
2023-12-19 11:43:08 +00:00
# Execute the command
eval "$command"
# Check if $1 is a .doom file
else
doom_file="$1"
2024-01-04 16:34:02 +00:00
log i "Found a doom file: \"$1\""
2023-12-19 11:43:08 +00:00
# Check if the .doom file exists
if [[ ! -e "$doom_file" ]]; then
2024-01-04 16:34:02 +00:00
log e "doom file not found in \"$doom_file\""
2023-12-19 11:48:44 +00:00
zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \
--text="File \"$doom_file\" not found. Quitting."
2023-12-19 11:43:08 +00:00
exit 1
fi
# Read the .doom file and compose the command
command="gzdoom -config /var/config/gzdoom/gzdoom.ini"
while IFS= read -r line; do
# Search for the file recursively
found_file=$(search_file_recursive "$line" "$(dirname "$doom_file")")
# If the file is not found, exit with an error
if [[ -z "$found_file" ]]; then
2023-12-19 12:56:53 +00:00
log "[ERROR] File not found in \"$line\""
2023-12-19 11:48:44 +00:00
zenity --error --no-wrap \
2023-12-19 12:56:53 +00:00
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \
--text="File \"$doom_file\" not found. Quitting."
2023-12-19 11:43:08 +00:00
exit 1
fi
# Check if the file is an IWAD
if [[ $(is_iwad "$found_file") == "true" ]]; then
command+=" -iwad $found_file"
2024-01-04 16:34:02 +00:00
log i "Appending the param \"-iwad $found_file\""
2023-12-19 11:43:08 +00:00
else
command+=" -file $found_file"
2024-01-04 16:34:02 +00:00
log i "Appending the param \"-file $found_file\""
2023-12-19 11:43:08 +00:00
fi
done < "$doom_file"
# Log the command
2024-01-04 16:34:02 +00:00
log i "Executing command \"$command\""
2023-12-19 11:43:08 +00:00
# Execute the command
eval "$command"
2023-11-24 23:13:07 +00:00
fi