patchimage/patchimage.sh

381 lines
8.3 KiB
Bash
Raw Normal View History

2013-06-13 20:12:19 +02:00
#!/bin/bash
#
2013-06-15 19:25:15 +02:00
# create wbfs image from riivolution patch
2013-06-13 20:12:19 +02:00
#
2014-05-16 20:39:01 +02:00
# Christopher Roy Bratusek <nano@jpberlin.de>
2013-06-13 20:12:19 +02:00
#
# License: GPL v3
basedir=$(readlink -m "${BASH_SOURCE[0]}")
basedir=$(dirname "${basedir}")
export PATCHIMAGE_DIR=${basedir}
if [[ -d ${basedir}/script.d ]]; then
export PATCHIMAGE_SCRIPT_DIR=${basedir}/script.d
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/script.d
export PATCHIMAGE_PATCH_DIR=/usr/share/patchimage/patches
export PATCHIMAGE_DATA_DIR=/usr/share/patchimage/data
export PATCHIMAGE_TOOLS_DIR=/usr/share/patchimage/tools
export PATCHIMAGE_OVERRIDE_DIR=/usr/share/patchimage/override
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}"
2013-10-12 10:37:29 +02:00
source "${PATCHIMAGE_SCRIPT_DIR}/common.sh"
optparse "${@}"
2013-10-12 10:37:29 +02:00
check_directories
setup_tools
2013-06-13 20:12:19 +02:00
2016-07-03 20:12:22 +02:00
[[ ! ${GAME} ]] && ask_game
2013-06-13 20:12:19 +02:00
2013-06-15 19:25:15 +02:00
case ${GAME} in
2013-06-13 20:12:19 +02:00
NSMB1 | NewerSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersmb.sh"
2013-06-15 19:25:15 +02:00
;;
2013-06-13 20:12:19 +02:00
2014-05-17 10:07:15 +02:00
NSMB2 | NewerSummerSun )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersummersun.sh"
;;
NSMB3 | AnotherSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/anothersmb.sh"
2013-06-20 21:03:40 +02:00
;;
NSMB4 | HolidaySpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerholiday.sh"
;;
NSMB5 | Cannon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/cannon.sh"
2013-07-03 17:30:30 +02:00
;;
2013-06-22 19:30:30 +02:00
NSMB6 | BowserWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/epicbowserworld.sh"
2013-07-02 20:20:20 +02:00
;;
NSMB7 | KoopaCountry )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/koopacountry.sh"
2013-07-03 16:44:26 +02:00
;;
NSMB8 | NewSuperMarioBros4 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw4.sh"
2013-07-07 09:42:41 +02:00
;;
NSMB9 | RetroRemix )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/retroremix.sh"
;;
NSMB10 | WinterMoon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/wintermoon.sh"
2013-08-06 09:17:05 +02:00
;;
NSMB11 | NSMBW3 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw3.sh"
;;
NSMB12 | Vacation )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/summervacation.sh"
;;
2014-05-17 10:07:15 +02:00
NSMB13 | ASLM | "Awesomer Super Luigi Mini" )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/awesomersuperluigi.sh"
2013-10-12 10:37:29 +02:00
;;
2014-05-17 10:07:15 +02:00
NSMB14 | Sykland )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/skyland.sh"
2014-05-17 10:07:15 +02:00
;;
NSMB15 | RVLution )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/rvlution.sh"
2014-05-17 10:07:15 +02:00
;;
2014-08-10 21:46:26 +02:00
NSMB16 | Midi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/midissupermariowii.sh"
2014-08-10 21:46:26 +02:00
;;
NSMB17 | DarkUmbra )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/darkumbrasmb.sh"
;;
2014-08-10 22:12:50 +02:00
NSMB18 | NewerApocalypse )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerapocalypse.sh"
2014-08-10 22:12:50 +02:00
;;
NSMB19 | LuigisSuperYoshiBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/luigissuperyoshibros.sh"
;;
2015-01-20 21:01:45 +01:00
NSMB20 | NewerFallingLeaf )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerfallingleaf.sh"
2015-01-20 21:01:45 +01:00
;;
NSMB21 | DevilMarioWinterSpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/devilmariowinterspecial.sh"
;;
NSMB22 | NewSMBWOtherWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newsmbwotherworld.sh"
;;
NSMB23 | TheLegendOfYoshi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/thelegendofyoshi.sh"
2016-05-16 17:21:53 +02:00
;;
NSMB24 | RemixedSuperMarioBrosWii )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/remixedsupermariobroswii.sh"
;;
NSMB25 | GhostlySuperGhostBoosWii )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/ghostlysuperghostbooswii.sh"
;;
NSMB26 | RevisedSuperMarioBrosWii )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/revisedsupermariobroswii.sh"
;;
NSMB99 | NSMBWCharacters )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw_characters.sh"
;;
2014-05-17 10:07:15 +02:00
MKW1 | Wiimmfi )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/wiimmfi.sh"
2014-05-11 19:26:58 +02:00
;;
2014-05-17 10:07:15 +02:00
MKW2 | Wiimmpatch )
source "${PATCHIMAGE_SCRIPT_DIR}/wiimmfi_generic.sh"
2014-05-13 17:49:00 +02:00
;;
2014-05-17 10:07:15 +02:00
MKW3 | Mkwiimm )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm.sh"
2014-05-14 20:38:48 +02:00
;;
2014-05-17 10:07:15 +02:00
MKW4 | MkwiimmItems )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_items.sh"
;;
2014-05-18 07:51:09 +02:00
MKW5 | MkwiimmFonts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_fonts.sh"
2014-05-18 07:51:09 +02:00
;;
2015-04-11 21:01:24 +02:00
MKW6 | MkwiimmKarts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_karts.sh"
2015-04-11 21:01:24 +02:00
;;
2014-05-17 10:07:15 +02:00
KAW1 | Kirby )
source "${PATCHIMAGE_SCRIPT_DIR}/kirbywii.sh"
;;
2016-07-03 20:12:22 +02:00
TMSFE | TokyoMirageSessions )
source "${PATCHIMAGE_SCRIPT_DIR}/tokyomiragesessionsfe.sh"
;;
2016-07-26 23:16:49 +02:00
PKMN1 | NeoX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneox.sh"
2016-07-26 23:16:49 +02:00
;;
PKMN2 | NeoY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneoy.sh"
2016-07-26 23:16:49 +02:00
;;
PKMN3 | RutileRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrutileruby.sh"
;;
PKMN4 | AlphaSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonstarsapphire.sh"
;;
PKMN5 | EternalX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemoneternalx.sh"
;;
PKMN6 | WiltingY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonwiltingy.sh"
;;
PKMN7 | RisingRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrisingruby.sh"
;;
PKMN8 | SinkingSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonsinkingsapphire.sh"
;;
BSECU | BravelySecondUncensored )
source "${PATCHIMAGE_SCRIPT_DIR}/bravelyseconduncensored.sh"
;;
ZEL1 | ParallelWorlds )
source "${PATCHIMAGE_SCRIPT_DIR}/parallelworlds.sh"
2013-06-22 19:02:37 +02:00
;;
2013-06-15 19:25:15 +02:00
* )
echo -e "specified Game ${GAME} not recognized"
2013-10-12 10:37:29 +02:00
exit 9
2013-06-15 19:25:15 +02:00
;;
2013-06-13 20:12:19 +02:00
2013-06-15 19:25:15 +02:00
esac
2013-06-13 20:12:19 +02:00
case ${GAME_TYPE} in
"RIIVOLUTION" )
show_notes
rm -rf "${WORKDIR}"
2014-05-11 21:57:19 +02:00
if [[ ${PATCHIMAGE_SOUNDTRACK_DOWNLOAD} == TRUE ]]; then
echo -e "\n*** A) download_soundtrack"
2013-10-12 10:37:29 +02:00
download_soundtrack
2014-05-11 21:57:19 +02:00
if [[ ${ONLY_SOUNDTRACK} == TRUE ]]; then
exit 0
fi
2013-10-12 10:37:29 +02:00
fi
2014-05-11 21:57:19 +02:00
2013-10-12 10:37:29 +02:00
echo -e "\n*** 1) check_input_image"
check_input_image
2013-10-12 10:37:29 +02:00
echo "*** 2) check_input_image_special"
check_input_image_special
2013-10-12 10:37:29 +02:00
echo "*** 3) check_riivolution_patch"
check_riivolution_patch
2013-10-12 10:37:29 +02:00
echo "*** 4) extract game"
${WIT} extract "${IMAGE}" "${WORKDIR}" --psel=DATA -q || exit 51
2013-10-12 10:37:29 +02:00
echo "*** 5) detect_game_version"
detect_game_version
rm -f "${GAMEID}".wbfs "${CUSTOMID}".wbfs
2013-10-12 10:37:29 +02:00
echo "*** 6) place_files"
place_files || exit 45
2013-07-01 22:36:09 +02:00
2013-10-12 10:37:29 +02:00
echo "*** 7) download_banner"
download_banner
2013-10-12 10:37:29 +02:00
echo "*** 8) apply_banner"
apply_banner
2013-10-12 10:37:29 +02:00
echo "*** 9) dolpatch"
2013-07-01 22:36:09 +02:00
dolpatch
if [[ ${CUSTOMID} ]]; then
GAMEID="${CUSTOMID}"
fi
if [[ ${PATCHIMAGE_SHARE_SAVE} == "TRUE" ]]; then
TMD_OPTS=""
else
TMD_OPTS="--tt-id=K"
fi
2014-05-16 19:34:12 +02:00
echo "*** 10) rebuild and store game"
"${WIT}" cp -o -q --disc-id="${GAMEID}" "${TMD_OPTS}" --name "${GAMENAME}" \
-B "${WORKDIR}" "${PATCHIMAGE_GAME_DIR}"/"${GAMEID}".wbfs || exit 51
2013-10-12 10:37:29 +02:00
echo "*** 12) remove workdir"
rm -rf "${WORKDIR}"
2013-10-12 10:37:29 +02:00
2014-05-16 19:34:12 +02:00
echo -e "\n >>> ${GAMENAME} saved as: ${PATCHIMAGE_GAME_DIR}/${GAMEID}.wbfs\n"
2014-05-11 21:57:19 +02:00
if [[ ${PATCHIMAGE_COVER_DOWNLOAD} == TRUE ]]; then
echo -e "*** Z) download_covers"
download_covers "${GAMEID}"
echo -e "\nCovers downloaded to ${PATCHIMAGE_COVER_DIR}"
2014-05-11 21:57:19 +02:00
fi
;;
2013-06-22 19:02:37 +02:00
2014-05-11 19:26:58 +02:00
"MKWIIMM")
show_notes
2014-05-11 21:57:19 +02:00
2014-05-11 19:26:58 +02:00
echo -e "\n*** 1) check_input_image"
check_input_image
echo -e "\n*** 2) download_wiimm"
2014-05-11 19:26:58 +02:00
download_wiimm
echo -e "\n*** 3) patch_wiimm"
2014-05-11 19:26:58 +02:00
patch_wiimm
;;
"WII_GENERIC")
show_notes
echo -e "\n*** 1) check_input_image"
check_input_image_special
echo -e "\n*** 2) pi_action"
pi_action
;;
2013-06-22 19:02:37 +02:00
"IPS" )
show_notes
check_input_rom
if [[ -f ${PATCH} ]]; then
ext="${ROM/*.}"
cp "${ROM}" "${GAMENAME}.${ext}"
"${IPS}" a "${PATCH}" "${GAMENAME}.${ext}" || exit 51
else
echo -e "error: patch (${PATCH}) could not be found"
2016-07-03 20:12:22 +02:00
exit 21
fi
2013-06-22 19:02:37 +02:00
;;
2014-05-19 21:54:00 +02:00
2016-07-26 23:16:49 +02:00
"HANS" )
show_notes
echo -e "\n*** 1) check_input_rom"
if [[ ${HANS_MULTI_SOURCE} ]]; then
check_input_rom_special
else check_input_rom
fi
2016-07-26 23:16:49 +02:00
rm -rf romfs/ romfs.bin "${ROMFS}"
2016-07-26 23:16:49 +02:00
echo -e "\n*** 2) check_hans_files"
check_hans_files
echo -e "\n*** 3) unpack_3dsrom"
unpack_3dsrom "${CXI}" || exit 51
echo -e "\n*** 4) unpack_3dsromfs"
unpack_3dsromfs romfs.bin || exit 51
echo -e "\n*** 5) patch_romfs"
patch_romfs
echo -e "\n*** 6) repack_romfs"
repack_3dsromfs romfs/ "${ROMFS}" || exit 51
2016-07-26 23:16:49 +02:00
mv "${ROMFS}" "${PATCHIMAGE_ROM_DIR}"
2016-07-26 23:16:49 +02:00
echo "
*** succesfully created new romfs as \"${PATCHIMAGE_ROM_DIR}/${ROMFS}\"
"
2016-07-26 23:16:49 +02:00
[[ ${DATA} ]] && echo \
">> for Hans Banners / Launchers, place all files from
2016-07-26 23:16:49 +02:00
$(readlink -m "${DATA}")
2016-07-26 23:16:49 +02:00
into the root of your sd card
"
;;
"DELTA" )
show_notes
echo -e "\n*** 1) menu"
2016-07-03 20:12:22 +02:00
menu || exit 9
echo -e "\n*** 2) patch"
2016-07-03 20:12:22 +02:00
patch || exit 51
;;
esac