add batch mode for generating more than one mod at once

This commit is contained in:
Christopher Roy Bratusek 2016-08-06 21:19:21 +02:00
parent cfd9eb47d2
commit 560c457efc
4 changed files with 279 additions and 273 deletions

View File

@ -16,6 +16,7 @@ v7.0.0:
- add --override-szs to override Wiims Mario Kart Fun wit and szs with
the ones supplied by patchimage. Use this if building Wiims Mario Kart Fun
fails due to incompatible library versions being installed.
- add batch mode for generating more than one mod at once
::bug fixes
- several minor bugfixes and improvements

View File

@ -1,6 +1,7 @@
*** 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
*** Wii game parameters ***

View File

@ -46,370 +46,373 @@ setup_tools
[[ ! ${GAME} ]] && ask_game
case ${GAME} in
for game in ${GAME[@]}; do
NSMB1 | NewerSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersmb.sh"
;;
case ${game} in
NSMB2 | NewerSummerSun )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersummersun.sh"
;;
NSMB1 | NewerSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersmb.sh"
;;
NSMB3 | AnotherSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/anothersmb.sh"
;;
NSMB2 | NewerSummerSun )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newersummersun.sh"
;;
NSMB4 | HolidaySpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerholiday.sh"
;;
NSMB3 | AnotherSMB )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/anothersmb.sh"
;;
NSMB5 | Cannon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/cannon.sh"
;;
NSMB4 | HolidaySpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerholiday.sh"
;;
NSMB6 | BowserWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/epicbowserworld.sh"
;;
NSMB5 | Cannon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/cannon.sh"
;;
NSMB7 | KoopaCountry )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/koopacountry.sh"
;;
NSMB6 | BowserWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/epicbowserworld.sh"
;;
NSMB8 | NewSuperMarioBros4 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw4.sh"
;;
NSMB7 | KoopaCountry )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/koopacountry.sh"
;;
NSMB9 | RetroRemix )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/retroremix.sh"
;;
NSMB8 | NewSuperMarioBros4 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw4.sh"
;;
NSMB10 | WinterMoon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/wintermoon.sh"
;;
NSMB9 | RetroRemix )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/retroremix.sh"
;;
NSMB11 | NSMBW3 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw3.sh"
;;
NSMB10 | WinterMoon )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/wintermoon.sh"
;;
NSMB12 | Vacation )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/summervacation.sh"
;;
NSMB11 | NSMBW3 )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw3.sh"
;;
NSMB13 | ASLM )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/awesomersuperluigi.sh"
;;
NSMB12 | Vacation )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/summervacation.sh"
;;
NSMB14 | Sykland )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/skyland.sh"
;;
NSMB13 | ASLM )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/awesomersuperluigi.sh"
;;
NSMB15 | RVLution )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/rvlution.sh"
;;
NSMB14 | Sykland )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/skyland.sh"
;;
NSMB16 | Midi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/midissupermariowii.sh"
;;
NSMB15 | RVLution )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/rvlution.sh"
;;
NSMB17 | DarkUmbra )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/darkumbrasmb.sh"
;;
NSMB16 | Midi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/midissupermariowii.sh"
;;
NSMB18 | NewerApocalypse )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerapocalypse.sh"
;;
NSMB17 | DarkUmbra )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/darkumbrasmb.sh"
;;
NSMB19 | LuigisSuperYoshiBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/luigissuperyoshibros.sh"
;;
NSMB18 | NewerApocalypse )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerapocalypse.sh"
;;
NSMB20 | NewerFallingLeaf )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerfallingleaf.sh"
;;
NSMB19 | LuigisSuperYoshiBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/luigissuperyoshibros.sh"
;;
NSMB21 | DevilMarioWinterSpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/devilmariowinterspecial.sh"
;;
NSMB20 | NewerFallingLeaf )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newerfallingleaf.sh"
;;
NSMB22 | NewSMBWOtherWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newsmbwotherworld.sh"
;;
NSMB21 | DevilMarioWinterSpecial )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/devilmariowinterspecial.sh"
;;
NSMB23 | TheLegendOfYoshi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/thelegendofyoshi.sh"
;;
NSMB22 | NewSMBWOtherWorld )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/newsmbwotherworld.sh"
;;
NSMB24 | RemixedSuperMarioBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/remixedsupermariobroswii.sh"
;;
NSMB23 | TheLegendOfYoshi )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/thelegendofyoshi.sh"
;;
NSMB25 | GhostlySuperGhostBoos )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/ghostlysuperghostbooswii.sh"
;;
NSMB24 | RemixedSuperMarioBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/remixedsupermariobroswii.sh"
;;
NSMB26 | RevisedSuperMarioBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/revisedsupermariobroswii.sh"
;;
NSMB25 | GhostlySuperGhostBoos )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/ghostlysuperghostbooswii.sh"
;;
NSMB99 | NSMBWCharacters )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw_characters.sh"
;;
NSMB26 | RevisedSuperMarioBros )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/revisedsupermariobroswii.sh"
;;
MKW1 | Wiimmfi )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/wiimmfi.sh"
;;
NSMB99 | NSMBWCharacters )
source "${PATCHIMAGE_SCRIPT_DIR}/nsmbw/nsmbw_characters.sh"
;;
MKW2 | Wiimmpatch )
source "${PATCHIMAGE_SCRIPT_DIR}/wiimmfi_generic.sh"
;;
MKW1 | Wiimmfi )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/wiimmfi.sh"
;;
MKW3 | Mkwiimm )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm.sh"
;;
MKW2 | Wiimmpatch )
source "${PATCHIMAGE_SCRIPT_DIR}/wiimmfi_generic.sh"
;;
MKW4 | MkwiimmItems )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_items.sh"
;;
MKW3 | Mkwiimm )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm.sh"
;;
MKW5 | MkwiimmFonts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_fonts.sh"
;;
MKW4 | MkwiimmItems )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_items.sh"
;;
MKW6 | MkwiimmKarts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_karts.sh"
;;
MKW5 | MkwiimmFonts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_fonts.sh"
;;
KAW1 | Kirby )
source "${PATCHIMAGE_SCRIPT_DIR}/kirbywii.sh"
;;
MKW6 | MkwiimmKarts )
source "${PATCHIMAGE_SCRIPT_DIR}/mkwii/mkwiimm_karts.sh"
;;
TMS1 | TokyoMirageSessions )
source "${PATCHIMAGE_SCRIPT_DIR}/tokyomiragesessionsfe.sh"
;;
KAW1 | Kirby )
source "${PATCHIMAGE_SCRIPT_DIR}/kirbywii.sh"
;;
PKMN1 | NeoX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneox.sh"
;;
TMS1 | TokyoMirageSessions )
source "${PATCHIMAGE_SCRIPT_DIR}/tokyomiragesessionsfe.sh"
;;
PKMN2 | NeoY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneoy.sh"
;;
PKMN1 | NeoX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneox.sh"
;;
PKMN3 | RutileRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrutileruby.sh"
;;
PKMN2 | NeoY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonneoy.sh"
;;
PKMN4 | AlphaSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonstarsapphire.sh"
;;
PKMN3 | RutileRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrutileruby.sh"
;;
PKMN5 | EternalX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemoneternalx.sh"
;;
PKMN4 | AlphaSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonstarsapphire.sh"
;;
PKMN6 | WiltingY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonwiltingy.sh"
;;
PKMN5 | EternalX )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemoneternalx.sh"
;;
PKMN7 | RisingRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrisingruby.sh"
;;
PKMN6 | WiltingY )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonwiltingy.sh"
;;
PKMN8 | SinkingSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonsinkingsapphire.sh"
;;
PKMN7 | RisingRuby )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonrisingruby.sh"
;;
BSECU | BravelySecondUncensored )
source "${PATCHIMAGE_SCRIPT_DIR}/bravelyseconduncensored.sh"
;;
PKMN8 | SinkingSapphire )
source "${PATCHIMAGE_SCRIPT_DIR}/pokemon/pokemonsinkingsapphire.sh"
;;
ZEL1 | ParallelWorlds )
source "${PATCHIMAGE_SCRIPT_DIR}/parallelworlds.sh"
;;
BSECU | BravelySecondUncensored )
source "${PATCHIMAGE_SCRIPT_DIR}/bravelyseconduncensored.sh"
;;
* )
echo -e "specified Game ${GAME} not recognized"
exit 9
;;
ZEL1 | ParallelWorlds )
source "${PATCHIMAGE_SCRIPT_DIR}/parallelworlds.sh"
;;
esac
* )
echo -e "specified Game ${game} not recognized"
exit 9
;;
patchimage_riivolution () {
esac
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
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
fi
echo -e "\n*** 1) check_input_image"
check_input_image
echo "*** 2) check_input_image_special"
check_input_image_special
echo "*** 3) check_riivolution_patch"
check_riivolution_patch
echo -e "\n*** 1) check_input_image"
check_input_image
echo "*** 2) check_input_image_special"
check_input_image_special
echo "*** 3) check_riivolution_patch"
check_riivolution_patch
echo "*** 4) extract game"
${WIT} extract "${IMAGE}" "${WORKDIR}" --psel=DATA -q || exit 51
echo "*** 4) extract game"
${WIT} extract "${IMAGE}" "${WORKDIR}" --psel=DATA -q || exit 51
echo "*** 5) detect_game_version"
detect_game_version
rm -f "${GAMEID}".wbfs "${CUSTOMID}".wbfs
echo "*** 6) place_files"
place_files || exit 45
echo "*** 5) detect_game_version"
detect_game_version
rm -f "${GAMEID}".wbfs "${CUSTOMID}".wbfs
echo "*** 6) place_files"
place_files || exit 45
echo "*** 7) download_banner"
download_banner
echo "*** 8) apply_banner"
apply_banner
echo "*** 7) download_banner"
download_banner
echo "*** 8) apply_banner"
apply_banner
echo "*** 9) dolpatch"
dolpatch
echo "*** 9) dolpatch"
dolpatch
if [[ ${CUSTOMID} ]]; then
GAMEID="${CUSTOMID}"
fi
if [[ ${CUSTOMID} ]]; then
GAMEID="${CUSTOMID}"
fi
if [[ ${PATCHIMAGE_SHARE_SAVE} == "TRUE" ]]; then
TMD_OPTS=""
else
TMD_OPTS="--tt-id=K"
fi
if [[ ${PATCHIMAGE_SHARE_SAVE} == "TRUE" ]]; then
TMD_OPTS=""
else
TMD_OPTS="--tt-id=K"
fi
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
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
echo "*** 12) remove workdir"
rm -rf "${WORKDIR}"
echo "*** 12) remove workdir"
rm -rf "${WORKDIR}"
echo -e "\n >>> ${GAMENAME} saved as: ${PATCHIMAGE_GAME_DIR}/${GAMEID}.wbfs\n"
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
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 () {
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
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 () {
patchimage_generic () {
show_notes
echo -e "\n*** 1) check_input_image"
check_input_image_special
echo -e "\n*** 2) pi_action"
pi_action
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
patchimage_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"
exit 21
fi
}
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"
exit 21
fi
}
patchimage_hans () {
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
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}"
rm -rf romfs/ romfs.bin "${ROMFS}"
echo -e "\n*** 2) check_hans_files"
check_hans_files
echo -e "\n*** 2) check_hans_files"
check_hans_files
echo -e "\n*** 3) unpack_3dsrom"
unpack_3dsrom "${ROM}" || exit 51
echo -e "\n*** 3) unpack_3dsrom"
unpack_3dsrom "${ROM}" || exit 51
echo -e "\n*** 4) unpack_3dsromfs"
unpack_3dsromfs romfs.bin || 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*** 5) patch_romfs"
patch_romfs
echo -e "\n*** 6) repack_romfs"
repack_3dsromfs romfs/ "${ROMFS}" || exit 51
echo -e "\n*** 6) repack_romfs"
repack_3dsromfs romfs/ "${ROMFS}" || exit 51
mv "${ROMFS}" "${PATCHIMAGE_ROM_DIR}"
mv "${ROMFS}" "${PATCHIMAGE_ROM_DIR}"
echo "
*** succesfully created new romfs as \"${PATCHIMAGE_ROM_DIR}/${ROMFS}\"
"
echo "
*** succesfully created new romfs as \"${PATCHIMAGE_ROM_DIR}/${ROMFS}\"
"
[[ ${DATA} ]] && echo \
">> for Hans Banners / Launchers, place all files from
[[ ${DATA} ]] && echo \
">> for Hans Banners / Launchers, place all files from
$(readlink -m "${DATA}")
$(readlink -m "${DATA}")
into the root of your sd card
"
into the root of your sd card
"
}
}
patchimage_delta () {
patchimage_delta () {
show_notes
echo -e "\n*** 1) menu"
menu || exit 9
show_notes
echo -e "\n*** 1) menu"
menu || exit 9
echo -e "\n*** 2) patch"
patch || exit 51
echo -e "\n*** 2) patch"
patch || exit 51
}
}
case ${GAME_TYPE} in
"RIIVOLUTION" )
patchimage_riivolution
;;
case ${GAME_TYPE} in
"RIIVOLUTION" )
patchimage_riivolution
;;
"MKWIIMM")
patchimage_mkwiimm
;;
"MKWIIMM")
patchimage_mkwiimm
;;
"GENERIC")
patchimage_generic
;;
"GENERIC")
patchimage_generic
;;
"IPS" )
patchimage_ips
;;
"IPS" )
patchimage_ips
;;
"HANS" )
patchimage_hans
;;
"HANS" )
patchimage_hans
;;
"DELTA" )
patchimage_delta
;;
"DELTA" )
patchimage_delta
;;
esac
esac
done

View File

@ -96,7 +96,7 @@ ask_game () {
echo -e \
"${SUPPORTED_GAMES}
Enter ID or Short Name for the Game you want to build:
Enter ID or Short Name for the Game you want to build (multiple separated by space):
"
read -r GAME
@ -622,6 +622,7 @@ while [[ $xcount -lt $pcount ]]; do
*** 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
*** Wii game parameters ***