patchimage/scripts/common.sh

907 lines
23 KiB
Bash
Raw Normal View History

2013-06-15 19:33:43 +02:00
#!/bin/bash
2016-08-17 21:26:08 +02:00
PATCHIMAGE_VERSION=7.2.0-devel
PATCHIMAGE_RELEASE=2016/08/17+
2016-05-16 14:53:30 +02:00
2016-08-05 20:52:12 +02:00
[[ -e ${HOME}/.patchimage.rc ]] && source "${HOME}"/.patchimage.rc
2013-06-15 19:33:43 +02:00
setup_tools () {
if [[ $(uname -m) == "x86_64" ]]; then
SUFFIX=64
else SUFFIX=32
fi
2016-08-05 20:52:12 +02:00
export WIT="${PATCHIMAGE_TOOLS_DIR}"/wit."${SUFFIX}"
export PPF="${PATCHIMAGE_TOOLS_DIR}"/applyppf3."${SUFFIX}"
export IPS="${PATCHIMAGE_TOOLS_DIR}"/uips."${SUFFIX}"
export UNP="${PATCHIMAGE_TOOLS_DIR}"/unp
export SZS="${PATCHIMAGE_TOOLS_DIR}"/wszst."${SUFFIX}"
export XD3="${PATCHIMAGE_TOOLS_DIR}"/xdelta3."${SUFFIX}"
export GDOWN="${PATCHIMAGE_TOOLS_DIR}"/gdown.pl
export CTRTOOL="${PATCHIMAGE_TOOLS_DIR}"/ctrtool."${SUFFIX}"
export FDSTOOL="${PATCHIMAGE_TOOLS_DIR}"/3dstool."${SUFFIX}"
2013-06-15 19:33:43 +02:00
}
2016-08-17 21:41:44 +02:00
ALL_NSMB=(NSMB{1..12} NSMB{13..27})
ALL_PKMN=(PKMN{1..9})
SUPPORTED_GAMES="************************************************
2016-05-16 14:53:30 +02:00
patchimage v${PATCHIMAGE_VERSION}
2014-05-17 10:07:15 +02:00
ID Short Name Full Name
2014-05-17 10:07:15 +02:00
<<<<<< New Super Mario Bros. Wii >>>>>>
NSMB1 NewerSMB NewerSMB
NSMB2 NewerSummerSun Newer Summer Sun
NSMB3 AnotherSMB AnotherSMB
NSMB4 HolidaySpecial Newer: Holiday Special
NSMB5 Cannon Cannon Super Mario Bros.
NSMB6 BowserWorld Epic Super Bowser World
NSMB7 KoopaCountry Koopa Country
NSMB8 NewSuperMarioBros4 New Super Mario Bros. 4
NSMB9 RetroRemix New Super Mario Bros. Wii Retro Remix
NSMB10 WinterMoon Super Mario: Mushroom Adventure PLUS - Winter Moon
NSMB11 NSMBW3 NSMBW3: The Final Levels
NSMB12 Vacation Super Mario Vacation
NSMB13 ASLM Awesomer Super Luigi Mini
NSMB14 Sykland Super Mario Skyland
NSMB15 RVLution RVLution Wii (NewSMB Mod)
NSMB16 Midi Midi's Super Mario Wii (Just A Little Adventure)
NSMB17 DarkUmbra DarkUmbra SMB Anniversary Edition
NSMB18 NewerApocalypse Newer Apocalypse
NSMB19 LuigisSuperYoshiBros Luigi's Super Yoshi Bros.
NSMB20 NewerFallingLeaf Newer: Falling Leaf
NSMB21 DevilMarioWinterSpecial Devil Mario Winter Special
NSMB22 NewSMBWOtherWorld New Super Mario Bros. Wii - Other World
NSMB23 TheLegendOfYoshi The Legend of Yoshi
NSMB24 RemixedSuperMarioBros Remixed Super Mario Bros. Wii
NSMB25 GhostlySuperGhostBoos Ghostly Super Ghost Boos. Wii
NSMB26 RevisedSuperMarioBros Revised Super Mario Bros. Wii
NSMB27 MLGSuperLuigi MLG Super Luigi Bros. Wii
NSMB99 NSMBWCharacters Customize Characters
2016-08-17 21:41:44 +02:00
NSMB_ALL All Mods of New Super Mario Bros. Wii
<<<<<< Mario Kart Wii / Wiimmfi >>>>>>
MKW1 Wiimmfi Wiimfi Patcher. Patch Mario Kart to use Wiimm's server
MKW2 Wiimmpatch Wiimfi Patcher. Patch WFC games to use Wiimm's server (exp)
MKW3 Mkwiimm Mario Kart Wiimm. Custom Mario Kart Distribution
MKW4 MkwiimmItems Custom Items. Replace items in the game
MKW5 MkwiimmFonts Custom Font. Replace font in the game
MKW6 MkwiimmKarts Custom Karts. Replace characters in the game
2014-05-17 10:07:15 +02:00
<<<<<< Kirby's Adventure Wii >>>>>>
KAW1 Kirby Change first player's character
2014-05-17 10:07:15 +02:00
<<<<<< Tokyo Mirage Sessions #FE >>>>>>
TMS1 TokyoMirageSessions Uncensor US/EUR version
<<<<<< Pokemon >>>>>>
PKMN1 NeoX Pokemon Neo X
PKMN2 NeoY Pokemon Neo Y
PKMN3 RutileRuby Pokemon Rutile Ruby
PKMN4 StarSapphire Pokemon Star Sapphire
PKMN5 EternalX Pokemon Eternal X
PKMN6 WiltingY Pokemon Wilting Y
PKMN7 RisingRuby Pokemon Rising Ruby
PKMN8 SinkingSapphire Pokemon Sinking Sapphire
PKMN9 DeltaEmeraldAS Pokemon Delta Emerald (Alpha Sapphire)
2016-07-26 23:16:49 +02:00
2016-08-17 21:41:44 +02:00
PKMN_ALL All Mods of Pokemon X, Y, Omega Ruy, Alpha Sapphire
PKMN_X All Mods of Pokemon X
PKMN_Y All Mods of Pokemon Y
PKMN_OR All Mods of Pokemon Omega Ruby
PKMN_AS All Mods of Pokemon Alpha Sapphire
<<<<<< 3DS ROMS >>>>>>
BSECU BravelySecondUncensored Bravely Second Uncensored
2014-05-17 10:07:15 +02:00
<<<<<< ROMS >>>>>>
ZEL1 ParallelWorlds The Legend of Zelda: Parallel Worlds
2016-05-16 17:25:17 +02:00
ID Short Name Full Name
"
REQUIRED_FILES="************************************************
patchimage v${PATCHIMAGE_VERSION}
<<<<<< New Super Mario Bros. Wii >>>>>>
Required Image:
SMN[+]01.iso or SMN[+]01.wbfs
where [+] is:
E for US version
P for EU/Ozeania version
J for JP version
NSMB1 NewerSMB Newer_Mario_Wii.zip
NSMB2 NewerSummerSun Newer_Summer_Sun.zip
NSMB3 AnotherSMB Another_Super_Mario_Brothers_Wii_2.0.zip
NSMB4 HolidaySpecial Newer_Super_Mario_Bros._Wii_HS.zip
NSMB5 Cannon Cannon_Super_Mario_Bros._Wii_v1.1.zip
NSMB6 BowserWorld Epic_Super_Bowser_World_v1.00.zip
NSMB7 KoopaCountry Koopa country.rar
NSMB8 NewSuperMarioBros4 New Super Mario Bros. Wii 4 made by Orange-Yoshi3.3.zip
NSMB9 RetroRemix Retro Remix.rar
NSMB10 WinterMoon WinterMoon.rar
NSMB11 NSMBW3 NSMBW3_The final levels.zip
NSMB12 Vacation Super_Mario_Vacation_v1.00.zip
NSMB13 ASLM AwesomerSLM.zip
NSMB14 Sykland Skyland.zip
NSMB15 RVLution RVLution Wii.zip
NSMB16 Midi MSMBWii.zip
NSMB17 DarkUmbra DUSMBAE Riivo Release Pack rev1.rar
NSMB18 NewerApocalypse NewerApocalypse 1.0.zip
NSMB19 LuigisSuperYoshiBros Luigis Super Yoshi Bros.
NSMB20 NewerFallingLeaf Newer_FALLING_LEAF.zip
NSMB21 DevilMarioWinterSpecial Devil Mario Winter Special collabo Frozen.zip
NSMB22 NewSMBWOtherWorld New Super Mario Bros. Wii - Other World
NSMB23 TheLegendOfYoshi The Legend of Zelda.zip [yes, really!]
NSMB24 RemixedSuperMarioBros Remixed v1.5.zi
NSMB25 GhostlySuperGhostBoos GSGBW v1.0.2.zip
NSMB26 RevisedSuperMarioBros RSMBW Version 1.0.zip
NSMB27 MLGSuperLuigi MLGLuigiWii.zip
NSMB99 NSMBWCharacters Alternative Character Files are supplied
<<<<<< Mario Kart Wii / Wiimmfi >>>>>>
Required Image:
RMC[+]01.iso or RMC[+]01.wbfs
where [+] is:
E for US version
P for EU/Ozeania version
J for JP version
MKW1 Wiimmfi Any iso or wbfs image of a Nintendo WFC game
MKW2 Wiimmpatch Any iso or wbfs image of Wiimm's Mario Kart Wii
MKW3 Mkwiimm Any Wiimm's Mario Kart Wii Distribution archive
MKW4 MkwiimmItems Alternative Item Files are supplied
MKW5 MkwiimmFonts Alternative Font Files are supplied
MKW6 MkwiimmKarts Alternative Kart Files are supplied
<<<<<< Tokyo Mirage Sessions #FE >>>>>>
Required files dumped with ddd in subfolder
<dumpfolder>/vol/content/Pack :
- pack_000_map.cpk
- pack_010_character.cpk
- pack_030_etc.cpk
- pack_031_message.cpk
- pack_050_movie.cpk
- pack_999_etc_om.cpk
- pack_999_lua.cpk
Required patch files:
- patch_000_map.xdelta
- patch_010_character.xdelta
- patch_030_etc.xdelta
- patch_031_message.xdelta
- patch_050_movie.xdelta
- patch_999_etc_om.xdelta
- patch_999_lua.xdelta
<<<<<< Kirby's Adventure Wii >>>>>>
KAW1 Kirby
<<<<<< Pokemon X >>>>>>
required cxi ROM:
0004000000055DD00.cxi
PKMN1 NeoX Neo X and Y Files.rar
PKMN5 EternalX Eternal X V1.3.zip
<<<<<< Pokemon Y >>>>>>
required cxi ROM:
0004000000055EE00.cxi
PKMN2 NeoY Neo X and Y Files.rar
PKMN6 WiltingY Wilting Y V1.3.zip
<<<<<< Pokemon Omega Ruby >>>>>>
required cxi ROM:
000400000011CC400.cxi
PKMN3 RutileRuby Rutile Ruby 2.1 - Distribution.zip
PKMN7 RisingRuby RRSSFiles 18-11-2015.zip
<<<<<< Pokemon Alpha Sapphire >>>>>>
required cxi ROM:
000400000011CC500.cxi
PKMN4 StarSapphire Star Sapphire 2.1 - Distribution.zip
PKMN8 SinkingSapphire RRSSFiles 18-11-2015.zip
PKMN9 DeltaEmeraldAS Pokemon Delta Emerald.zip
<<<<<< 3DS ROMs >>>>>>
required cxi ROM:
000400000017BA00.cxi US Version
000400000017BB00.cxi EU Version
BSECU BravelySecondUncensored
US Version: Bravely_Second_Uncensored_USA_MINI_Asia81.rar
EU Version: Bravely_Second_Uncensored_EUR_MINI_Asia81.rar
<<<<<< ROMS >>>>>>
required smc ROM:
The Legend of Zelda - A Link to the Past.smc US Version
ZEL1 ParallelWorlds lozpw110.rar
ID Short Name Full Name
Download Links can be obtained using:
patchimage --game=\"<ID1> <ID2> ...\" --show-download
Files not hosted on Mediafire, Mega or the like can be
auto-downloaded for the build using:
patchimage --game=\"<ID1> <ID2> ...\" --download
if the file can not automatically be downloaded the link will
be shown and you'll be told to download on your own.
"
ask_game () {
echo -e \
"${SUPPORTED_GAMES}
Enter ID or Short Name for the Game you want to build (multiple separated by space):
2013-06-20 21:03:40 +02:00
"
2013-06-15 19:33:43 +02:00
2016-08-05 20:52:12 +02:00
read -r GAME
2013-06-15 19:33:43 +02:00
}
download_soundtrack () {
2016-08-05 20:52:12 +02:00
if [[ ${SOUNDTRACK_LINK} && ! -f ${PATCHIMAGE_AUDIO_DIR}/${SOUNDTRACK_ZIP} ]]; then
wget -q --no-check-certificate "${SOUNDTRACK_LINK}" \
2016-08-05 20:52:12 +02:00
-O "${PATCHIMAGE_AUDIO_DIR}"/"${SOUNDTRACK_ZIP}" || exit 57
2014-05-11 21:57:19 +02:00
echo -e "\n >>> soundtrack saved to\n >>> ${PATCHIMAGE_AUDIO_DIR}/${SOUNDTRACK_ZIP}"
else
2014-05-16 20:30:36 +02:00
echo -e "no soundtrack for ${GAMENAME} available."
fi
}
download_banner () {
if [[ ${PATCHIMAGE_BANNER_DOWNLOAD} == "TRUE" ]]; then
if [[ ${CUSTOM_BANNER} ]]; then
2016-08-05 20:52:12 +02:00
if [[ ! -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr ]]; then
wget -q --no-check-certificate "${CUSTOM_BANNER}" \
2016-08-06 21:36:50 +02:00
-O "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr__tmp || \
rm -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr__tmp
fi
2016-08-06 21:36:50 +02:00
if [[ -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr__tmp ]]; then
2016-08-05 20:52:12 +02:00
mv "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr__tmp \
"${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr
BANNER="${PATCHIMAGE_RIIVOLUTION_DIR}"/"${GAMEID}"-custom-banner.bnr
2016-08-06 21:37:42 +02:00
else echo "*** >> could not download custom banner"
fi
else
2013-10-12 10:37:29 +02:00
echo "*** >> no custom banner available"
fi
fi
}
nsmbw_version () {
if [[ -f ${WORKDIR}/files/COPYDATE_LAST_2009-10-03_232911 ]]; then
VERSION=EURv1
2016-08-05 20:52:12 +02:00
export REG_LETTER=P
elif [[ -f ${WORKDIR}/files/COPYDATE_LAST_2010-01-05_152101 ]]; then
VERSION=EURv2
2016-08-05 20:52:12 +02:00
export REG_LETTER=P
elif [[ -f ${WORKDIR}/files/COPYDATE_LAST_2009-10-03_232303 ]]; then
VERSION=USAv1
2016-08-05 20:52:12 +02:00
export REG_LETTER=E
elif [[ -f ${WORKDIR}/files/COPYDATE_LAST_2010-01-05_143554 ]]; then
VERSION=USAv2
2016-08-05 20:52:12 +02:00
export REG_LETTER=E
elif [[ -f ${WORKDIR}/files/COPYDATE_LAST_2009-10-03_231655 ]]; then
VERSION=JPNv1
2016-08-05 20:52:12 +02:00
export REG_LETTER=J
elif [[ ! ${VERSION} ]]; then
echo -e "please specify your games version using --version={EURv1,EURv2,USAv1,USAv2,JPNv1}"
2013-10-12 10:37:29 +02:00
exit 27
fi
2013-10-12 10:37:29 +02:00
echo "*** >> status: ${VERSION}"
}
apply_banner () {
if [[ ${BANNER} != "" ]]; then
if [[ -e ${BANNER} ]]; then
cp "${BANNER}" "${BANNER_LOCATION}"
else
echo "specified banner ${BANNER} does not exist, not modifying"
fi
fi
}
2013-10-12 10:37:29 +02:00
check_directories () {
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_RIIVOLUTION_DIR} && -w $(dirname "${PATCHIMAGE_RIIVOLUTION_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_RIIVOLUTION_DIR}" || PATCHIMAGE_RIIVOLUTION_DIR="${HOME}"
fi
2013-10-12 10:37:29 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_RIIVOLUTION_DIR} ]] && PATCHIMAGE_RIIVOLUTION_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_WBFS_DIR} && -w $(dirname "${PATCHIMAGE_WBFS_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_WBFS_DIR}" || PATCHIMAGE_WBFS_DIR="${HOME}"
fi
2013-10-12 10:37:29 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w "${PATCHIMAGE_WBFS_DIR}" ]] && PATCHIMAGE_WBFS_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_GAME_DIR} && -w $(dirname "${PATCHIMAGE_GAME_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_GAME_DIR}" || PATCHIMAGE_GAME_DIR="${HOME}"
fi
2013-10-12 10:37:29 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_GAME_DIR} ]] && PATCHIMAGE_GAME_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_3DS_DIR} && -w $(dirname "${PATCHIMAGE_3DS_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_3DS_DIR}" || PATCHIMAGE_3DS_DIR="${HOME}"
fi
2013-10-12 10:37:29 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_3DS_DIR} ]] && PATCHIMAGE_3DS_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_ROM_DIR} && -w $(dirname "${PATCHIMAGE_ROM_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_ROM_DIR}" || PATCHIMAGE_ROM_DIR="${HOME}"
fi
2014-05-13 17:49:00 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_ROM_DIR} ]] && PATCHIMAGE_ROM_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_AUDIO_DIR} && -w $(dirname "${PATCHIMAGE_AUDIO_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_AUDIO_DIR}" || PATCHIMAGE_AUDIO_DIR="${HOME}"
fi
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_AUDIO_DIR} ]] && PATCHIMAGE_AUDIO_DIR="${HOME}"
2016-08-05 20:52:12 +02:00
if [[ ! -d ${PATCHIMAGE_COVER_DIR} && -w $(dirname "${PATCHIMAGE_COVER_DIR}") ]]; then
mkdir -p "${PATCHIMAGE_COVER_DIR}" || PATCHIMAGE_COVER_DIR="${HOME}"
fi
2013-10-12 10:37:29 +02:00
2016-08-05 20:52:12 +02:00
[[ ! -w ${PATCHIMAGE_COVER_DIR} ]] && PATCHIMAGE_COVER_DIR="${HOME}"
}
2013-10-12 10:37:29 +02:00
check_input_image () {
2014-05-11 19:26:58 +02:00
x=0
if [[ ! ${IMAGE} ]]; then
WBFS0=$(find . -maxdepth 1 -name "${WBFS_MASK}".wbfs)
WBFS1=$(find "${PATCHIMAGE_WBFS_DIR}" -name "${WBFS_MASK}".wbfs)
ISO0=$(find . -maxdepth 1 -name "${WBFS_MASK}".iso)
ISO1=$(find "${PATCHIMAGE_WBFS_DIR}" -name "${WBFS_MASK}".iso)
if [[ -f ${WBFS0} ]]; then
2014-05-11 19:26:58 +02:00
x=1
IMAGE=${WBFS0}
elif [[ -f ${ISO0} ]]; then
2014-05-11 19:26:58 +02:00
x=2
IMAGE=${ISO0}
elif [[ -f ${WBFS1} ]]; then
2014-05-11 19:26:58 +02:00
x=3
IMAGE=${WBFS1}
elif [[ -f ${ISO1} ]]; then
2014-05-11 19:26:58 +02:00
x=4
IMAGE=${ISO1}
2014-05-11 19:26:58 +02:00
else
echo -e "please specify image to use with --iso=<path>"
exit 15
fi
fi
echo "*** >> status: ${x}"
IMAGE=$(readlink -m "${IMAGE}")
2014-05-11 19:26:58 +02:00
}
check_input_rom () {
x=5
if [[ ! ${ROM} ]]; then
ROM0=$(find . -maxdepth 1 -name "${ROM_MASK}")
ROM1=$(find "${PATCHIMAGE_3DS_DIR}" -name "${ROM_MASK}")
if [[ -f ${ROM0} ]]; then
x=6
ROM=${ROM0}
elif [[ -f ${ROM1} ]]; then
x=7
ROM=${ROM1}
else
if [[ ! ${HANS_MULTI_SOURCE} ]]; then
echo -e "error: could not find suitable ROM, specify using --rom"
exit 15
fi
fi
fi
echo "*** >> status: ${x}"
ROM=$(readlink -m "${ROM}")
}
show_nsmb_db () {
2015-07-12 19:59:08 +02:00
ID1=${1:0:3}
ID2=${1:4:2}
2016-08-05 20:52:12 +02:00
gawk -F : "/^${ID1}\*${ID2}/"'{print $2}' \
< "${PATCHIMAGE_DATABASE_DIR}"/nsmbw.db || echo "** Unknown **"
}
2014-05-11 21:57:19 +02:00
show_mkwiimm_db () {
ID=${1:4:2}
2016-08-05 20:52:12 +02:00
[[ ${ID} == [0-9][0-9] ]] && \
gawk -F : "/^${ID}/"'{print $2}' \
< "${PATCHIMAGE_DATABASE_DIR}"/mkwiimm.db \
|| echo "** Unknown **"
2014-05-11 21:57:19 +02:00
}
ask_input_image_mkwiimm () {
2015-04-11 21:11:59 +02:00
echo "Choose Mario Kart Wii Image to modify
2014-05-11 21:57:19 +02:00
ALL patch all images"
2016-08-05 20:52:12 +02:00
for image in "${PWD}"/RMC???.{iso,wbfs} "${PATCHIMAGE_WBFS_DIR}"/RMC???.{iso,wbfs}; do
[[ -f ${image} ]] && echo " ${image##*/} $(show_mkwiimm_db "${image##*/}")"
2014-05-11 21:57:19 +02:00
done
echo ""
}
ask_input_image_nsmb () {
echo "Choose New Super Mario Bros. Wii Image to modify
ALL patch all images"
2016-08-05 20:52:12 +02:00
for image in "${PWD}"/SMN???.{iso,wbfs} \
"${PWD}"/SLF???.{iso,wbfs} \
2016-08-07 21:26:23 +02:00
"${PWD}"/SLB???.{iso,wbfs} \
2016-08-05 20:52:12 +02:00
"${PWD}"/SMM???.{iso,wbfs} \
"${PWD}"/SMV???.{iso,wbfs} \
"${PWD}"/MRR???.{iso,wbfs} \
"${PATCHIMAGE_WBFS_DIR}"/SMN???.{iso,wbfs} \
"${PATCHIMAGE_WBFS_DIR}"/SLF???.{iso,wbfs} \
2016-08-07 21:26:23 +02:00
"${PATCHIMAGE_WBFS_DIR}"/SLB???.{iso,wbfs} \
2016-08-05 20:52:12 +02:00
"${PATCHIMAGE_WBFS_DIR}"/SMM???.{iso,wbfs} \
"${PATCHIMAGE_WBFS_DIR}"/SMV???.{iso,wbfs} \
"${PATCHIMAGE_WBFS_DIR}"/MRR???.{iso,wbfs}; do
[[ -f ${image} ]] && echo " ${image##*/} $(show_nsmb_db "${image##*/}")"
done
echo ""
}
show_titles_db () {
ID=${1/.*}
2016-08-05 20:52:12 +02:00
gawk -F : "/^${ID}/"'{print $2}' \
< "${PATCHIMAGE_DATABASE_DIR}"/titles.db \
|| echo "** Unknown **"
}
check_wfc () {
ID=${1/.*}
2016-08-05 20:52:12 +02:00
if grep -q "${ID}" "${PATCHIMAGE_DATABASE_DIR}"/wfc.db; then
echo TRUE
else
echo FALSE
fi
}
2014-05-13 17:49:00 +02:00
ask_input_image_wiimmfi () {
echo "Choose Wii Game Image to wiimmfi"
2016-08-05 20:52:12 +02:00
for image in "${PWD}"/*.{iso,wbfs} \
"${PATCHIMAGE_WBFS_DIR}"/*.{iso,wbfs}; do
if [[ -e ${image} && ! ${image} == "*/RMC*" && $(check_wfc "${image##*/}") == TRUE ]]; then
echo " ${image##*/} $(show_titles_db "${image##*/}")"
2014-05-13 17:49:00 +02:00
fi
done
echo ""
}
unpack () {
if [[ ${UNP_EXTRA_ARGS} ]]; then
${UNP} "${1}" -- ${UNP_EXTRA_ARGS} >/dev/null || exit 63
else ${UNP} "${1}" >/dev/null || exit 63
fi
}
2016-08-07 19:17:31 +02:00
download_riivolution_patch () {
x=4
case ${DOWNLOAD_LINK} in
*docs.google* | *drive.google* )
x=5
echo "*** >> downloading"
${GDOWN} "${DOWNLOAD_LINK}" \
2016-08-07 20:46:31 +02:00
"${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp >/dev/null || \
( echo -e "\nDownload failed!" && exit 57 )
2016-08-07 19:17:31 +02:00
mv "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp \
"${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
echo "*** >> unpacking"
unpack "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
;;
*mega.nz* )
x=6
echo "can not download from Mega, download manually from:
${DOWNLOAD_LINK}
"
2016-08-07 19:34:47 +02:00
exit 21
2016-08-07 19:17:31 +02:00
;;
*medafire* )
x=6
echo "can not download from Mediafire, download manually from:
${DOWNLOAD_LINK}
"
2016-08-07 19:34:47 +02:00
exit 21
2016-08-07 19:17:31 +02:00
;;
*romhacking* )
x=6
echo "can not download from Romhacking, download manually from:
${DOWNLOAD_LINK}
"
2016-08-07 19:34:47 +02:00
exit 21
2016-08-07 19:17:31 +02:00
;;
"" )
echo "no download link for ${GAMENAME} available."
exit 21
;;
* )
x=5
echo "*** >> downloading"
wget -q --no-check-certificate "${DOWNLOAD_LINK}" \
2016-08-07 20:46:31 +02:00
-O "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp || \
( echo -e "\nDownload failed!" && exit 57 )
2016-08-07 19:17:31 +02:00
mv "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp \
"${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
echo "*** >> unpacking"
unpack "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
;;
2016-08-07 19:18:06 +02:00
esac
2016-08-07 19:17:31 +02:00
}
2013-06-15 19:33:43 +02:00
check_riivolution_patch () {
2013-10-12 10:37:29 +02:00
x=0
if [[ ! -d ${RIIVOLUTION_DIR} ]]; then
2013-10-12 10:37:29 +02:00
x=1
if [[ -f "${PWD}/${RIIVOLUTION_ZIP}" ]]; then
2013-10-12 10:37:29 +02:00
echo "*** >> unpacking"
x=2
unpack "${PWD}/${RIIVOLUTION_ZIP}"
2013-10-12 10:37:29 +02:00
elif [[ -f "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}" ]]; then
echo "*** >> unpacking"
x=3
unpack "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
elif [[ ${PATCHIMAGE_RIIVOLUTION_DOWNLOAD} == "TRUE" ]]; then
2016-08-07 19:17:31 +02:00
download_riivolution_patch
else
if [[ ${1} == --nofail ]]; then
echo -e "no zip archive found. Skipping to bare patch file detection"
else
echo -e "please specify zip/rar to use with --riivolution=<path>"
exit 21
fi
fi
2013-06-15 19:33:43 +02:00
fi
2013-10-12 10:37:29 +02:00
echo "*** >> status: ${x}"
2013-06-15 19:33:43 +02:00
}
2014-05-11 20:43:49 +02:00
download_covers () {
2016-08-05 20:52:12 +02:00
alt=$(echo "${1}" | sed s/./E/4)
2014-05-11 20:43:49 +02:00
for path in cover cover3D coverfull disc disccustom; do
2016-08-05 20:52:12 +02:00
if [[ ! -f "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png ]]; then
wget -q -O "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png \
http://art.gametdb.com/wii/"${path}"/EN/"${1}".png \
2016-08-05 20:52:12 +02:00
|| rm "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png
if [[ ! -f "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png ]]; then
wget -q -O "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png \
http://art.gametdb.com/wii/"${path}"/US/"${alt}".png \
2016-08-05 20:52:12 +02:00
|| rm "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png
fi
2016-08-05 20:52:12 +02:00
[[ ! -f "${PATCHIMAGE_COVER_DIR}"/"${1}"_"${path}".png ]] && \
echo "Cover (${path}) does not exist for gameid ${1}."
fi
2014-05-11 20:43:49 +02:00
done
}
2016-07-26 23:16:49 +02:00
unpack_3dsrom () {
${CTRTOOL} -p --romfs=romfs.bin "${1}" &>/dev/null
}
unpack_3dsromfs () {
${CTRTOOL} -t romfs --romfsdir=romfs "${1}" &>/dev/null
}
repack_3dsromfs () {
${FDSTOOL} -ctf romfs "${2}" --romfs-dir "${1}" &>/dev/null
}
2013-06-15 19:33:43 +02:00
optparse () {
xcount=0
pcount=$#
while [[ $xcount -lt $pcount ]]; do
2016-07-26 23:16:49 +02:00
case ${1} in
2013-06-15 19:33:43 +02:00
2016-08-05 20:52:12 +02:00
--iso=* )
ISO_PATH="${1/*=}"
2013-06-15 19:33:43 +02:00
if [[ -f "${ISO_PATH}" ]]; then
IMAGE="${ISO_PATH}"
2013-06-15 19:33:43 +02:00
else
echo -e "ISO not found"
2013-10-12 10:37:29 +02:00
exit 15
2013-06-15 19:33:43 +02:00
fi
;;
2016-08-05 20:52:12 +02:00
--rom=* )
ROM_PATH="${1/*=}"
if [[ -f "${ROM_PATH}" ]]; then
ROM="${ROM_PATH}"
else
echo -e "ROM not found"
2013-10-12 10:37:29 +02:00
exit 15
fi
;;
2016-08-05 20:52:12 +02:00
--riivolution=* )
RIIVOLUTION="${1/*=}"
2016-08-07 11:25:49 +02:00
if [[ -f "${RIIVOLUTION}" ]]; then
2016-08-05 20:52:12 +02:00
"${UNP}" "${RIIVOLUTION}" >/dev/null
2013-06-15 19:33:43 +02:00
else
echo -e "Riivolution patch ${RIIVOLUTION} not found."
2013-10-12 10:37:29 +02:00
exit 21
2013-06-15 19:33:43 +02:00
fi
;;
2016-08-05 20:52:12 +02:00
--patch=* )
PATCH="${1/*=}"
2016-08-07 11:25:49 +02:00
if [[ -f "${PATCH}" ]]; then
PATCH="${PATCH}"
else
2016-08-07 11:25:49 +02:00
echo -e "IPS/PPF patch ${PATCH} not found."
2013-10-12 10:37:29 +02:00
exit 21
fi
;;
2016-08-05 20:52:12 +02:00
--customid=* )
2013-06-15 19:33:43 +02:00
CUSTOMID=${1/*=}
if [[ ${#CUSTOMID} != 6 ]]; then
echo -e "CustomID ${CUSTOMID} needs to have 6 digits"
2013-10-12 10:37:29 +02:00
exit 39
2013-06-15 19:33:43 +02:00
fi
;;
--download )
2016-08-05 20:52:12 +02:00
export PATCHIMAGE_RIIVOLUTION_DOWNLOAD=TRUE
;;
--show-downloadlink )
export PATCHIMAGE_SHOW_DOWNLOAD=TRUE
;;
--soundtrack )
2016-08-05 20:52:12 +02:00
export PATCHIMAGE_SOUNDTRACK_DOWNLOAD=TRUE
2014-05-11 21:57:19 +02:00
;;
--only-soundtrack )
2016-08-05 20:52:12 +02:00
export PATCHIMAGE_SOUNDTRACK_DOWNLOAD=TRUE
export ONLY_SOUNDTRACK=TRUE
;;
2016-08-06 20:30:04 +02:00
--override-szs )
export MKWIIMM_OVERRIDE_SZS=TRUE
;;
2013-06-15 19:33:43 +02:00
--version=* )
2016-08-05 20:52:12 +02:00
VERSION="${1/*=}"
2013-06-15 19:33:43 +02:00
case ${VERSION} in
EURv1 )
2016-08-05 20:52:12 +02:00
export REG_LETTER=P
2013-06-15 19:33:43 +02:00
;;
EURv2 )
2016-08-05 20:52:12 +02:00
export REG_LETTER=P
2013-06-15 19:33:43 +02:00
;;
USAv1 )
2016-08-05 20:52:12 +02:00
export REG_LETTER=E
2013-06-15 19:33:43 +02:00
;;
USAv2 )
2016-08-05 20:52:12 +02:00
export REG_LETTER=E
2013-06-15 19:33:43 +02:00
;;
JPNv1 )
2016-08-05 20:52:12 +02:00
export REG_LETTER=J
2013-06-15 19:33:43 +02:00
;;
* )
echo -e "unrecognized game version: ${VERSION}"
2013-10-12 10:37:29 +02:00
exit 27
2013-06-15 19:33:43 +02:00
;;
esac
;;
--sharesave )
2016-08-05 20:52:12 +02:00
export PATCHIMAGE_SHARE_SAVE=TRUE
2013-06-15 19:33:43 +02:00
;;
2016-08-05 20:52:12 +02:00
--game=* )
export GAME="${1/*=}"
2013-06-15 19:33:43 +02:00
;;
--list-games )
echo "${SUPPORTED_GAMES}"
exit 0
;;
--list-requirements )
echo "${REQUIRED_FILES}"
exit 0
;;
2016-08-05 20:52:12 +02:00
--covers )
export PATCHIMAGE_COVER_DOWNLOAD=TRUE
2014-05-11 21:57:19 +02:00
;;
2016-08-05 20:52:12 +02:00
--only-covers=* )
export PATCHIMAGE_COVER_DOWNLOAD=TRUE
download_covers "${1/*=}"
2014-05-11 21:57:19 +02:00
exit 0
;;
--banner=* )
2016-08-05 20:52:12 +02:00
BANNER="${1/*=}"
BANNER_EXT="${BANNER//*./}"
if [[ ${BANNER_EXT} != "bnr" ]]; then
echo "given banner (${BANNER}) is not a .bnr file!"
2013-10-12 10:37:29 +02:00
exit 33
fi
;;
--download-banner )
2016-08-05 20:52:12 +02:00
export PATCHIMAGE_BANNER_DOWNLOAD=TRUE
;;
--xdelta=* )
2016-08-05 20:52:12 +02:00
export XDELTA_PATH="${1/*=}"
;;
--cpk=* )
2016-08-05 20:52:12 +02:00
export CPK_PATH="${1/*=}"
;;
2014-05-16 20:36:08 +02:00
--help | -h )
2016-05-16 17:21:53 +02:00
echo -e "patchimage ${PATCHIMAGE_VERSION} (${PATCHIMAGE_RELEASE})
2013-10-12 10:37:29 +02:00
(c) 2013-2016 Christopher Roy Bratusek <nano@jpberlin.de>
2013-10-12 10:37:29 +02:00
patchimage creates wbfs images from riivolution patches.
*** General parameters ***
--help | show this message
--game=<ID/Short Name> | specify game you want to create
--game=\"<ID1/Short Name1> <ID2/Short Name2>\" | specify multiple games you want to create
--list-games | show possible options for --game
--show-download | only show download link for required files
--list-requirements | show required image and patch files
*** Wii game parameters ***
--iso=/home/test/RMCP01.iso | specify path to Wii iso or wbfs image to use
--riivolution=/home/test/MyMod.zip | specify path to Wii Riivolution archive
--version=EURv1,EURv2,USAv1,USAv2,JPNv1 | specify your game version (New Super Mario Bros. Wii)
--customdid=SMNP02 | specify a custom ID to use for the modified Wii game
--sharesave | let modified Wii games share savegame with the original game
--download | download Riivolution or HANS patch archives (if possible)
--soundtrack | download soundtrack (if available)
--only-soundtrack | download soundtrack only (if available) and exit
--covers | download covers (if available)
--only-covers=SMNP02 | download covers only (if available)
--banner=<banner.bnr> | use a custom banner (Riivolution games)
--download-banner | download a custom banner (if available)
2016-08-06 20:30:04 +02:00
--override-szs | override wit and szs in Wiimms Mario Kart Fun distributions
| [use this if the originals fail due to incompatible library versions]
*** 3DS game parameters ***
--rom=/home/test/0004000000055e00.cxi | specify path to 3DS ROM to use for building
--hans=/home/test/MyModdedGame.zip | specify path to 3DS HANS archive
*** Wii U game parameters ***
--xdelta=/home/test/xdelta | specify path to Tokyo Mirage Sessions #FE xdelta patches
--cpk=/home/test/cpk | specify path to original Tokyo Mirage Mirage Sessions #FE files
*** Other game parameters ***
--rom=/home/test/MyGame.rom | specify path to ROM to use for building
--patch=/home/test/MyModdedGame.ips | specify path to IPS Patch file
2016-08-17 21:41:44 +02:00
*** Batch-Building shortcuts ***
--game=NSMB_ALL | build all mods of New Super Mario Bros. Wii
--game=PKMN_ALL | build all mods of Pokemon X, Y, Omega Ruby, Alpha Sapphire
--game=PKMN_X | build all mods of Pokemon X
--game=PKMN_Y | build all mods of Pokemon Y
--game=PKMN_OR | build all mods of Pokemon Omega Ruby
--game=PKMN_AS | build all mods of Pokemon Alpha Sapphire
"
2013-06-15 19:33:43 +02:00
exit 0
;;
esac
shift
2016-08-05 20:52:12 +02:00
xcount=$((xcount+1))
2013-06-15 19:33:43 +02:00
done
}