Files
RMG/Source/Script/GenerateCheatFiles.sh
T
2022-12-02 21:01:56 +01:00

66 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
script_dir="$(dirname "$0")"
toplvl_dir="$(realpath "$script_dir/../../")"
tmp_dir="$toplvl_dir/Build/project64"
source_cheat_dir="$tmp_dir/Config/Cheats"
target_cheat_dir="$toplvl_dir/Data/Cheats/Generated"
# remove generated cheats & tmp dir
rm -rf "$tmp_dir" "$target_cheat_dir"/*.cht
git clone https://github.com/project64/project64 "$tmp_dir"
cd "$tmp_dir"
# latest commit of cheats change
git checkout e60f7ec6489e22c8b1988931f8ce3ca46edae91c -f
for file in "$source_cheat_dir"/*.cht
do
target_file_name=""
# read file line by line
while read -r line
do
if [[ $line = "["* ]] && [[ $line = *"]" ]]
then
target_file_name="$(echo "$line" | sed 's|\[||g' | sed 's|\]||g' | sed 's|C:||g').cht"
target_file_name="$target_cheat_dir/$target_file_name"
# if file already exists,
# just write to /dev/null
# to prevent failures due to i.e https://github.com/project64/project64/pull/2312
if [ -f "$target_file_name" ]
then
target_file_name=""
fi
# also account for invalid headers,
# some cheat files have only 1 number
# in the country code, and there are exactly
# the same cheat files with the correct length
# so just skip them
# i.e [A3A044B5-6DB1BF5E-C:0] and [A3A044B5-6DB1BF5E-C:00]
if [[ "${#line}" != "24" ]]
then
target_file_name=""
fi
if [[ "x$target_file_name" != "x" ]]
then
echo "-> Generating $target_file_name"
fi
fi
# sanity check
if [[ "x$target_file_name" = "x" ]]
then
continue
fi
# write line to file
echo "$line" >> "$target_file_name"
done < "$file"
done
rm -rf "$tmp_dir"