Skip to content

Instantly share code, notes, and snippets.

@Bijman
Last active February 16, 2025 19:26
Show Gist options
  • Save Bijman/a0d79e1977ec81b4d6ec311eda80b608 to your computer and use it in GitHub Desktop.
Save Bijman/a0d79e1977ec81b4d6ec311eda80b608 to your computer and use it in GitHub Desktop.
SRB2 - Shadow+ patch script (Linux)
#!/bin/sh
set -e
# Shellscript written in POSIX sh by Bijman. Put this script to extracted CL_ShadowPlus Patcher folder and run it from there.
# Check for required commands in relative paths
check_command() {
if [ -z "$(command -v "$1")" ]; then
echo "Error: Required command '$1' not found or not executable." >&2
exit 1
fi
}
check_command "7z"
check_command "zip"
WORKDIR=$(mktemp -d)
ROOT="$PWD"
VERSION="$(curl -sL https://srb2workshop.org/resources/shadow-the-hedgehog-plus.135/history | awk -F'<td class="dataList-cell">|</td>' '/<td class="dataList-cell">/ {print $2}' | sort -ruV | head -n1)"
FILENAME="CL_ShadowPlus-V$VERSION-P"
# Download original addon
curl -L https://mb.srb2.org/addons/shadow-the-hedgehog.517/version/9742/download?file=90751 -o "$WORKDIR/cl_Shadow-v1.3.pk3"
# Extract initial PK3 file
7z x -y "$WORKDIR/cl_Shadow-v1.3.pk3" -o"$WORKDIR/temp/1/"
# Set flips command to be executable
chmod +x flips/flips-linux
# Apply patches
flips/flips-linux --apply bps/init.bps "$WORKDIR/temp/1/init.lua" "$WORKDIR/temp/1/init.lua"
flips/flips-linux --apply bps/SHADOW-BATTLE.bps "$WORKDIR/temp/1/Lua/SHADOW-BATTLE.lua" "$WORKDIR/temp/1/Lua/SHADOW-BATTLE.lua"
flips/flips-linux --apply bps/SHADOW-MAIN.bps "$WORKDIR/temp/1/Lua/SHADOW-MAIN.lua" "$WORKDIR/temp/1/Lua/SHADOW-MAIN.lua"
# Copy additional Lua file
mkdir -p "$WORKDIR/temp/1/lua"
cp lua/SHADOW-COOLMENU.lua "$WORKDIR/temp/1/lua/"
# Create directory structure and move skins
mkdir -p "$WORKDIR/temp/2"
mv -f "$WORKDIR/temp/1/Skins" "$WORKDIR/temp/2/"
mkdir -p "$WORKDIR/temp/3/Skins"
mv -f "$WORKDIR/temp/2/Skins/Shadow" "$WORKDIR/temp/3/Skins/"
mkdir -p "$WORKDIR/temp/4/Skins/Shadow"
mv -f "$WORKDIR/temp/3/Skins/Shadow/Super" "$WORKDIR/temp/4/Skins/Shadow/"
mkdir -p "$WORKDIR/temp/5/Skins/Shadow/Super"
mv -f "$WORKDIR/temp/4/Skins/Shadow/Super/Shadow" "$WORKDIR/temp/5/Skins/Shadow/Super/"
# Package directories into pk3 using zip
cd "$WORKDIR/temp/1"
zip -r -0 "$WORKDIR/$FILENAME.pk3" "."
cd "$WORKDIR/temp/2"
zip -r -0 "$WORKDIR/$FILENAME.pk3" "."
cd "$WORKDIR/temp/3"
zip -r -0 "$WORKDIR/$FILENAME.pk3" "."
cd "$WORKDIR/temp/4"
zip -r -0 "$WORKDIR/$FILENAME.pk3" "."
cd "$WORKDIR/temp/5"
zip -r -0 "$WORKDIR/$FILENAME.pk3" "."
cd "$ROOT"
# Finalize package
mv -f "$WORKDIR/$FILENAME.pk3" "$FILENAME.pk3"
# Cleanup
rm -rf "$WORKDIR"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment