mirror of
https://gitlab.com/Nanolx/patchimage.git
synced 2024-11-30 21:14:24 +01:00
ac1416761a
automatic downloading is not possible from SendSpace, update downloader function to inform user to manually download from there fixed that the script did try to automatically download from mediafire instead of informing user to manually download update PKMN_ALL and NSMB_ALL batch-build shortcuts for new games
352 lines
7.4 KiB
Bash
Executable File
352 lines
7.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# create wbfs image from riivolution patch
|
|
#
|
|
# Christopher Roy Bratusek <nano@jpberlin.de>
|
|
#
|
|
# License: GPL v3
|
|
|
|
basedir=$(readlink -m "${BASH_SOURCE[0]}")
|
|
basedir=$(dirname "${basedir}")
|
|
|
|
export PATCHIMAGE_DIR=${basedir}
|
|
|
|
if [[ -d ${basedir}/scripts ]]; then
|
|
export PATCHIMAGE_SCRIPT_DIR=${basedir}/scripts
|
|
export PATCHIMAGE_PATCH_DIR=${basedir}/patches
|
|
export PATCHIMAGE_DATA_DIR=${basedir}/data
|
|
export PATCHIMAGE_TOOLS_DIR=${basedir}/tools
|
|
export PATCHIMAGE_OVERRIDE_DIR=${basedir}/override
|
|
export PATCHIMAGE_DATABASE_DIR=${basedir}/database
|
|
else
|
|
export PATCHIMAGE_SCRIPT_DIR=/usr/share/patchimage/scripts
|
|
export PATCHIMAGE_PATCH_DIR=/usr/share/patchimage/patches
|
|
export PATCHIMAGE_DATA_DIR=/usr/share/patchimage/data
|
|
if [[ $(uname -m) == "x86_64" ]]; then
|
|
export PATCHIMAGE_TOOLS_DIR=/usr/lib/x86_64-linux-gnu/patchimage/tools
|
|
export PATCHIMAGE_OVERRIDE_DIR=/usr/lib/x86_64-linux-gnu/patchimage/override
|
|
else
|
|
export PATCHIMAGE_TOOLS_DIR=/usr/lib/i386-linux-gnu/patchimage/tools
|
|
export PATCHIMAGE_OVERRIDE_DIR=/usr/lib/i386-linux-gnu/patchimage/override
|
|
fi
|
|
export PATCHIMAGE_DATABASE_DIR=/usr/share/patchimage/database
|
|
fi
|
|
|
|
export PATCHIMAGE_RIIVOLUTION_DIR="${basedir}"
|
|
export PATCHIMAGE_WBFS_DIR="${basedir}"
|
|
export PATCHIMAGE_AUDIO_DIR="${basedir}"
|
|
export PATCHIMAGE_GAME_DIR="${basedir}"
|
|
export PATCHIMAGE_COVER_DIR="${basedir}"
|
|
|
|
source "${PATCHIMAGE_SCRIPT_DIR}/common.sh"
|
|
source "${PATCHIMAGE_SCRIPT_DIR}/messages.sh"
|
|
optparse "${@}"
|
|
|
|
check_directories
|
|
setup_tools
|
|
|
|
patchimage_riivolution () {
|
|
|
|
show_notes
|
|
rm -rf "${WORKDIR}"
|
|
if [[ ${PATCHIMAGE_SOUNDTRACK_DOWNLOAD} == TRUE ]]; then
|
|
echo -e "\n*** A) download_soundtrack"
|
|
download_soundtrack
|
|
if [[ ${ONLY_SOUNDTRACK} == TRUE ]]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
echo -e "\n*** 1) check_input_image"
|
|
check_input_image
|
|
echo "*** 2) check_riivolution_patch"
|
|
check_riivolution_patch
|
|
|
|
echo "*** 3) extract game"
|
|
${WIT} extract "${IMAGE}" "${WORKDIR}" --psel=DATA -q || exit 51
|
|
|
|
echo "*** 4) detect_game_version"
|
|
detect_game_version
|
|
rm -f "${GAMEID}".wbfs "${CUSTOMID}".wbfs
|
|
echo "*** 5) place_files"
|
|
place_files || exit 45
|
|
|
|
echo "*** 6) download_banner"
|
|
download_banner
|
|
echo "*** 7) apply_banner"
|
|
apply_banner
|
|
|
|
echo "*** 8) dolpatch"
|
|
dolpatch
|
|
|
|
if [[ ${CUSTOMID} ]]; then
|
|
GAMEID="${CUSTOMID}"
|
|
fi
|
|
|
|
if [[ ${PATCHIMAGE_SHARE_SAVE} == "TRUE" ]]; then
|
|
TMD_OPTS=""
|
|
else
|
|
TMD_OPTS="--tt-id=K"
|
|
fi
|
|
|
|
echo "*** 9) rebuild and store game"
|
|
"${WIT}" cp -o -q --disc-id="${GAMEID}" "${TMD_OPTS}" --name "${GAMENAME}" \
|
|
-B "${WORKDIR}" "${PATCHIMAGE_GAME_DIR}"/"${GAMEID}".wbfs || exit 51
|
|
|
|
echo "*** 10) remove workdir"
|
|
rm -rf "${WORKDIR}"
|
|
|
|
echo -e "\n >>> ${GAMENAME} saved as: ${PATCHIMAGE_GAME_DIR}/${GAMEID}.wbfs\n"
|
|
|
|
if [[ ${PATCHIMAGE_COVER_DOWNLOAD} == TRUE ]]; then
|
|
echo -e "*** Z) download_covers"
|
|
download_covers "${GAMEID}"
|
|
echo -e "\nCovers downloaded to ${PATCHIMAGE_COVER_DIR}"
|
|
fi
|
|
|
|
}
|
|
|
|
patchimage_mkwiimm () {
|
|
|
|
show_notes
|
|
echo -e "\n*** 1) check_input_image"
|
|
check_input_image
|
|
echo -e "\n*** 2) download_wiimm"
|
|
download_wiimm
|
|
echo -e "\n*** 3) patch_wiimm"
|
|
patch_wiimm
|
|
|
|
}
|
|
|
|
patchimage_generic () {
|
|
|
|
show_notes
|
|
echo -e "\n*** 1) check_input_image"
|
|
check_input_image_special
|
|
echo -e "\n*** 2) pi_action"
|
|
pi_action
|
|
|
|
}
|
|
|
|
patchimage_ips () {
|
|
show_notes
|
|
check_input_rom
|
|
check_riivolution_patch --nofail
|
|
|
|
if [[ -f ${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${IPS}" a "${PATCH}" "${GAMENAME}.${ext}" || exit 51
|
|
elif [[ -f ${PATCHIMAGE_RIIVOLUTION_DIR}/${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${IPS}" a "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${PATCH}" \
|
|
"${GAMENAME}.${ext}" || exit 51
|
|
else
|
|
echo -e "error: patch (${PATCH}) could not be found"
|
|
exit 21
|
|
fi
|
|
}
|
|
|
|
patchimage_bps () {
|
|
show_notes
|
|
check_input_rom
|
|
check_riivolution_patch --nofail
|
|
|
|
if [[ -f ${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${BPS}" -decode -t "${GAMENAME}.${ext}" "${PATCH}" || exit 51
|
|
elif [[ -f ${PATCHIMAGE_RIIVOLUTION_DIR}/${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${BPS}" -decode -t "${GAMENAME}.${ext}" \
|
|
"${PATCHIMAGE_RIIVOLUTION_DIR}"/"${PATCH}" || exit 51
|
|
else
|
|
echo -e "error: patch (${PATCH}) could not be found"
|
|
exit 21
|
|
fi
|
|
}
|
|
|
|
patchimage_ppf () {
|
|
show_notes
|
|
check_input_rom
|
|
check_riivolution_patch --nofail
|
|
|
|
if [[ -f ${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${PPF}" a "${PATCH}" "${GAMENAME}.${ext}" || exit 51
|
|
elif [[ -f ${PATCHIMAGE_RIIVOLUTION_DIR}/${PATCH} ]]; then
|
|
ext="${ROM/*.}"
|
|
cp "${ROM}" "${GAMENAME}.${ext}"
|
|
"${PPF}" a "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${PATCH}" \
|
|
"${GAMENAME}.${ext}" || exit 51
|
|
else
|
|
echo -e "error: patch (${PATCH}) could not be found"
|
|
exit 21
|
|
fi
|
|
}
|
|
|
|
patchimage_hans () {
|
|
|
|
show_notes
|
|
echo -e "\n*** 1) check_input_rom"
|
|
if [[ ${HANS_MULTI_SOURCE} ]]; then
|
|
check_input_rom_special
|
|
else check_input_rom
|
|
fi
|
|
|
|
rm -rf romfs/ romfs.bin "${ROMFS}"
|
|
|
|
echo "*** 2) check_hans_files"
|
|
check_hans_files
|
|
|
|
echo "*** 3) unpack_3dsrom"
|
|
unpack_3dsrom "${ROM}" || exit 51
|
|
|
|
if [[ ${HANS_DELTA} ]]; then
|
|
echo "*** 4) apply_delta"
|
|
|
|
if [[ -f ${PATCH} ]]; then
|
|
"${XD3}" -d -f -s romfs.bin \
|
|
"${PATCH}" "${ROMFS}" || exit 51
|
|
elif [[ -f ${PATCHIMAGE_RIIVOLUTION_DIR}/${PATCH} ]]; then
|
|
"${XD3}" -d -f -s romfs.bin \
|
|
"${PATCHIMAGE_RIIVOLUTION_DIR}"/"${PATCH}" \
|
|
"${ROMFS}" || exit 51
|
|
else
|
|
echo -e "error: patch (${PATCH}) could not be found"
|
|
exit 21
|
|
fi
|
|
|
|
echo "*** 5) storing game"
|
|
else
|
|
echo "*** 4) unpack_3dsromfs"
|
|
unpack_3dsromfs romfs.bin || exit 51
|
|
|
|
echo "*** 5) patch_romfs"
|
|
patch_romfs
|
|
|
|
echo "*** 6) repack_romfs"
|
|
repack_3dsromfs romfs/ "${ROMFS}" || exit 51
|
|
|
|
echo "*** 7) storing game"
|
|
fi
|
|
|
|
mv "${ROMFS}" "${PATCHIMAGE_ROM_DIR}"
|
|
|
|
echo "
|
|
*** succesfully created new romfs as \"${PATCHIMAGE_ROM_DIR}/${ROMFS}\"
|
|
"
|
|
|
|
[[ ${DATA} ]] && echo \
|
|
" >> for Hans Banners / Launchers, place all files from
|
|
|
|
$(readlink -m "${DATA}")
|
|
|
|
into the root of your sd card
|
|
"
|
|
|
|
if [[ ${HANS_DELTA} ]]; then
|
|
echo "*** 6) remove workdir"
|
|
else echo "*** 8) remove workdir"
|
|
fi
|
|
|
|
rm -rf romfs/ romfs.bin
|
|
|
|
}
|
|
|
|
patchimage_delta () {
|
|
|
|
show_notes
|
|
echo -e "\n*** 1) menu"
|
|
menu || exit 9
|
|
|
|
echo -e "\n*** 2) patch"
|
|
patch || exit 51
|
|
|
|
}
|
|
|
|
[[ ! ${GAME} ]] && ask_game
|
|
|
|
for game in ${GAME[@]}; do
|
|
case ${game} in
|
|
NSMB_ALL )
|
|
NEW_GAME=(${NEW_GAME[@]} NSMB{1..12} NSMB{14..29})
|
|
;;
|
|
|
|
PKMN_ALL )
|
|
NEW_GAME=(${NEW_GAME[@]} PKMN{1..10})
|
|
;;
|
|
|
|
PKMN_Y )
|
|
NEW_GAME=(${NEW_GAME[@]} PKMN2 PKMN6)
|
|
;;
|
|
|
|
PKMN_X )
|
|
NEW_GAME=(${NEW_GAME[@]} PKMN1 PKMN5)
|
|
;;
|
|
|
|
PKMN_OR )
|
|
NEW_GAME=(${NEW_GAME[@]} PKMN3 PKMN7 PKMN10)
|
|
;;
|
|
|
|
PKMN_AS )
|
|
NEW_GAME=(${NEW_GAME[@]} PKMN4 PKMN8 PKMN9)
|
|
;;
|
|
esac
|
|
|
|
[[ ${NEW_GAME} ]] && GAME=(${NEW_GAME[@]})
|
|
done
|
|
|
|
for game in ${GAME[@]}; do
|
|
|
|
script=$(gawk -F : "/\<${game}\>/"'{print $3}' ${PATCHIMAGE_DATABASE_DIR}/scripts.db)
|
|
if [[ -f ${PATCHIMAGE_SCRIPT_DIR}/${script} ]]; then
|
|
source ${PATCHIMAGE_SCRIPT_DIR}/${script}
|
|
else echo -e "specified Game ${game} not recognized"
|
|
continue
|
|
fi
|
|
|
|
if [[ ${PATCHIMAGE_SHOW_DOWNLOAD} ]]; then
|
|
echo -e "\nDownloadlink for required files of Game ${GAMENAME} (${game}):\n\t${DOWNLOAD_LINK}\n"
|
|
continue
|
|
fi
|
|
|
|
case ${GAME_TYPE} in
|
|
"RIIVOLUTION" )
|
|
patchimage_riivolution
|
|
;;
|
|
|
|
"MKWIIMM")
|
|
patchimage_mkwiimm
|
|
;;
|
|
|
|
"GENERIC")
|
|
patchimage_generic
|
|
;;
|
|
|
|
"IPS" )
|
|
patchimage_ips
|
|
;;
|
|
|
|
"BPS" )
|
|
patchimage_bps
|
|
;;
|
|
|
|
"PPF" )
|
|
patchimage_ppf
|
|
;;
|
|
|
|
"HANS" )
|
|
patchimage_hans
|
|
;;
|
|
|
|
"DELTA" )
|
|
patchimage_delta
|
|
;;
|
|
|
|
esac
|
|
done
|