version 4.0, see ChangeLog

This commit is contained in:
Christopher Roy Bratusek 2013-10-12 10:37:29 +02:00
parent 1c7163b5d0
commit 7efedef7ee
15 changed files with 386 additions and 175 deletions

View File

@ -1,3 +1,24 @@
v4.0:
- bugfix: fix looking for already downloaded riivolution files in
${PATCHIMAGE_RIIVOLUTION_DIR}
- bugfix: fix looking for original game iso in ${PATCHIMAGE_WBFS_DIR}
- bugfix: if the directories set in ${HOME}/.patchimage.rc don't exist
let the script create them
- bugfix: fix paths for NewerSMBW (seems they changed the way the latest
release is packaged slightly)
- bugfix: download files with __tmp suffix, so that faulty downloads cause
re-download the next time it is tried
- bugfix: make use of ${PATCHIMAGE_PATCH_DIR} when building Retro Remix,
fixing the openingTitle for PAL and US
- bugfix: fix applying openingTitle for PAL and US in NSMBW4
- bugfix: updated download link for NSMBW3 (downloading works again)
- bugfix: don't apply wiiStrap from NSMBW3 on PAL (black screen on start)
- added meaningfull exit codes to the script (see: EXIT_CODES for more info)
- annoy the user with messages (eases finding bugs, as you now see when the
script stopped working) and make wit quiet
- do all operation in ${PWD}/workdir (which removed on each start)
- support for Awesomer Super Luigi Mini (WIP)
v3.1:
- bugfix: for NSMBW3 on US games the language files weren't updated
- bugfix: for Super Mario: Mushroom Adventure PLUS - Winter Moon on US

58
README
View File

@ -12,62 +12,20 @@ script uses files as "unzip" creates them. No need to modify whatever.
own the original, you can't blame me. patchimage is 100% legal, as it
does not contain any propritary contents, nor is able to grab them.
Supported Games
* NSMBW3: The Final Levels (riivolution) [SLF?01]
* Newer SMBW (riivolution) [SMN?03]
* Cannon SMBW (riivolution) [SMN?04]
* Another SMBW (riivolution) [SMN?05]
* Newer Summer Sun (riivolution) [SMN?06]
* Newer Holiday Special (riivolution) [SMN?07]
* Epic Super Bower World (riivolution) [SMN?08]
* Koopa Country (riivolution) [SMN?10]
* New Super Mario Bros. 4 (riivolution) [SMN?11]
* Super Mario: Mushroom Adventure PLUS - Winter Moon (riivolution) [SMM?02]
* Super Mario Vacation (riivolution) [SMV?01]
* New Super Mario Bros. Wii Retro Remix [MRR?01]
* The Legend of Zelda: Parallel Worlds (ips)
More information:
* supported games: see file README.GAMEIDS
* supported commandline flags: see file README.CMD_OPTS
* configuration file example: see file README.RC
* status code while processing: see file README.STATUS_CODES
* exit codes (for debugging): see file README.EXIT_CODES
Default Searchpaths:
Default searchpaths:
ISO: BASE.iso / BASE.wbfs / GAMEID.iso / GAMEID.wbfs
Riivolution: Original name of the zip / unpacked folder
ROM: some mask matching the file (eg: "*[Ll]ink*[Pp]ast*smc" for Zelda: Parallel Worlds)
Parameters
--game={NewerSMB;NewerSummerSun;AnotherSMBW;HolidaySpecial;ParallelWorlds...}
specify game to create (if none is provided, the script will ask you)
--iso/--rom=/home/test/<Image>
specify path to the original ISO/ROM
--riivolution/--patch=<Patch>
specify path to Riivolution/Patch files
--version=EURv1,EURv2,USAv1,USAv2,JPNv1
specify your game version (for Wii games, if auto-detection fails)
--customdid=SMNP02
specify a custom ID to use for the game
--sharesave
let modified game share savegame with original game
--download
download riivolution/patchfiles
--soundtrack
download soundtrack (if available) and exit
--banner=<banner>
specify a custom banner to use
--download-banner
download a custom banner (if available)
--clean
cleanup working directory from anything (also riivolution patches)
Examples:
Example usage:
NewerSMBW:
$ patchimage --game=NewerSMBW --iso=/home/test/SMNP01.iso --download

33
README.CMD_OPTS Normal file
View File

@ -0,0 +1,33 @@
Parameters
--game={NewerSMB;NewerSummerSun;AnotherSMBW;HolidaySpecial;ParallelWorlds...}
specify game to create (if none is provided, the script will ask you)
--iso/--rom=/home/test/<Image>
specify path to the original ISO/ROM
--riivolution/--patch=<Patch>
specify path to Riivolution/Patch files
--version=EURv1,EURv2,USAv1,USAv2,JPNv1
specify your game version (for Wii games, if auto-detection fails)
--customdid=SMNP02
specify a custom ID to use for the game
--sharesave
let modified game share savegame with original game
--download
download riivolution/patchfiles
--soundtrack
download soundtrack (if available) and exit
--banner=<banner>
specify a custom banner to use
--download-banner
download a custom banner (if available)
--clean
cleanup working directory from anything (also riivolution patches)s

19
README.EXIT_CODES Normal file
View File

@ -0,0 +1,19 @@
If the script failed at some point issueing
echo $?
right after the failure will you show the following:
0 everything went right
1 general error (none of the following)
9 game specified is not known
15 ISO or ROM does not exist
21 Riivolution files/patch does not exist
27 NSMBW version is not recognized
33 custom banner specified from command line is not a .bnr file
39 custom game id specified from command line is not a 6 digit alphanumeric
45 error copying new game files
51 wit/ips/applyppf caught an error processing files
57 wget caught an error while downloading
63 unp caught an error while unpacking a file

View File

@ -13,6 +13,7 @@ SMN?08 Epic Super Bowser World
SMN?09 ?
SMN?10 Koopa Country
SMN?11 New Super Mario Bros. 4
SMN?12 Awesomer Super Luigi Mini
SMM?02 Super Mario: Mushroom Adventure PLUS - Winter Moon

19
README.STATUS_CODES Normal file
View File

@ -0,0 +1,19 @@
While the script executes you will see some status codes, below you will find the meaning:
phase code meaning
*** 1) 0 neither BASE.iso nor BASE.wbfs found
1 BASE.iso found in ${PWD}
2 BASE.wbfs found in ${PWD}
*** 2) 0 no <GAMEID>.iso/.wbfs found (or required if *** 1) exited with 1 or 2)
1 <GAMEID>.iso found in ${PWD}
2 <GAMEID>.wbfs found in ${PWD}
3 <GAMEID>.iso found in ${PATCHIMAGE_WBFS_DIR}
4 <GAMEID>.iso found in ${PATCHIMAGE_WBFS_DIR}
*** 3) 0 no riivolution files found unpacked in ${PWD}
1 riivolution files/archive not found in ${PWD}
2 riivolution archive found in ${PWD}
3 riivolution archive found in ${PATCHIMAGE_RIIVOLUTION_DIR}
4 patchimage was told to download riivolution archive, but no link is available
5 patchimage is downloading riivolution archive

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
patchimage (4.0-1nano) unstable; urgency=low
* new upstream stable release
-- Christopher Roy Bratusek <nano@tuxfamily.org> Sun, 12 Oct 2013 10:27:31 +0200
patchimage (3.1-1nano) unstable; urgency=low
* new upstream stable release

View File

@ -6,17 +6,35 @@
#
# License: GPL v3
if [[ ! -d ${PWD}/workdir ]]; then
mkdir ${PWD}/workdir
else
rm -rf ${PWD}/workdir/*
fi
if [[ -d ${PWD}/script.d ]]; then
PATCHIMAGE_SCRIPT_DIR=${PWD}/script.d
PATCHIMAGE_PATCH_DIR=${PWD}/patches
PATCHIMAGE_TOOLS_DIR=${PWD}/tools
PATCHIMAGE_SCRIPT_DIR=../script.d
PATCHIMAGE_PATCH_DIR=../patches
PATCHIMAGE_TOOLS_DIR=../tools
else
PATCHIMAGE_SCRIPT_DIR=/usr/share/patchimage/script.d
PATCHIMAGE_PATCH_DIR=/usr/share/patchimage/patches
PATCHIMAGE_TOOLS_DIR=/usr/share/patchimage/tools
fi
cd ${PWD}/workdir
PATCHIMAGE_RIIVOLUTION_DIR=${PWD}
PATCHIMAGE_WBFS_DIR=${PWD}
PATCHIMAGE_AUDIO_DIR=${PWD}
if [[ -e $HOME/.patchimage.rc ]]; then
source $HOME/.patchimage.rc
fi
source ${PATCHIMAGE_SCRIPT_DIR}/common.sh
check_directories
setup_tools
optparse "${@}"
@ -75,13 +93,17 @@ case ${GAME} in
source ${PATCHIMAGE_SCRIPT_DIR}/summervacation.sh
;;
m | M | ASLM | "Awesomer Super Luigi Mini" )
source ${PATCHIMAGE_SCRIPT_DIR}/awesomersuperluigi.sh
;;
1 | ParallelWorlds | "The Legend of Zelda: Parallel Worlds" )
source ${PATCHIMAGE_SCRIPT_DIR}/parallelworlds.sh
;;
* )
echo -e "specified Game ${GAME} not recognized"
exit 1
exit 9
;;
esac
@ -90,20 +112,33 @@ case ${GAME_TYPE} in
"RIIVOLUTION" )
show_notes
rm -rf ${WORKDIR}
download_soundtrack
if [[ ${DOWNLOAD_SOUNDTRACK} == TRUE ]]; then
echo "\n*** 1) download_soundtrack"
download_soundtrack
exit 0
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
${WIT} extract ${IMAGE} ${WORKDIR} --psel=DATA -vv || exit 1
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
place_files
echo "*** 6) place_files"
place_files || exit 45
echo "*** 7) download_banner"
download_banner
echo "*** 8) apply_banner"
apply_banner
echo "*** 9) dolpatch"
dolpatch
if [[ ${CUSTOMID} ]]; then
@ -116,13 +151,19 @@ case ${GAME_TYPE} in
TMD_OPTS="--tt-id=K"
fi
${WIT} cp -v -B ${WORKDIR} ${GAMEID}.wbfs -vv --disc-id=${GAMEID} ${TMD_OPTS} --name "${GAMENAME}" || exit 1
echo "*** 10) rebuild game"
${WIT} cp -q -B ${WORKDIR} ${GAMEID}.wbfs --disc-id=${GAMEID} ${TMD_OPTS} --name "${GAMENAME}" || exit 51
if [[ -d ${PATCHIMAGE_WBFS_DIR} && ${PATCHIMAGE_WBFS_DIR} != . ]]; then
if [[ -d ${PATCHIMAGE_WBFS_DIR} && ${PATCHIMAGE_WBFS_DIR} != ${PWD} ]]; then
echo "*** 11) store game"
mv ${GAMEID}.wbfs "${PATCHIMAGE_WBFS_DIR}"/
fi
echo -e "\n >>> ${GAMENAME} saved as:\n >>> ${PATCHIMAGE_WBFS_DIR}/${GAMEID}.wbfs"
echo "*** 12) remove workdir"
cd ..
rm -rf workdir
echo -e "\n >>> ${GAMENAME} saved as: ${PATCHIMAGE_WBFS_DIR}/${GAMEID}.wbfs\n"
;;
@ -133,7 +174,7 @@ case ${GAME_TYPE} in
if [[ -f ${PATCH} ]]; then
ext=${ROM/*.}
cp "${ROM}" "${GAMENAME}.${ext}"
${IPS} a "${PATCH}" "${GAMENAME}.${ext}"
${IPS} a "${PATCH}" "${GAMENAME}.${ext}" || exit 51
else
echo -e "error: patch (${PATCH}) could not be found"
fi

View File

@ -0,0 +1,92 @@
#!/bin/bash
WORKDIR=nsmb.d
DOL=${WORKDIR}/sys/main.dol
DOWNLOAD_LINK="https://www.dropbox.com/s/t3b3fvycm1ufu46/AwesomerSLM.zip"
RIIVOLUTION_ZIP="AwesomerSLM.zip"
RIIVOLUTION_DIR="AwesomerSLM"
GAMENAME="Awesomer Super Luigi Mini"
XML_SOURCE="${RIIVOLUTION_DIR}"/AwesomerSLM
XML_FILE="${RIIVOLUTION_DIR}"/riivolution/ASLMriivo.xml
GAME_TYPE=RIIVOLUTION
BANNER_LOCATION=${WORKDIR}/files/opening.bnr
show_notes () {
echo -e \
"************************************************
${GAMENAME}
1: Custom Levels for World 1
2: World 1's map will be world 4's
3: Joietyfull64's NSMBU tilesets
4: Custom logo.
Source: http://rvlution.net/forums/viewtopic.php?f=53&t=1851
Base Image: New Super Mario Bros. Wii (SMN?01)
Supported Versions: EURv1, EURv2, USAv1, USAv2, JPNv1
************************************************"
}
check_input_image_special () {
check_input_image_nsmb
}
detect_game_version () {
nsmbw_version
GAMEID=SMN${REG_LETTER}12
}
place_files () {
NEW_DIRS=( ${WORKDIR}/files/EU/NedEU/Message ${WORKDIR}/files/EU/PolEU/Message ${WORKDIR}/files/Sample/)
for dir in ${NEW_DIRS[@]}; do
mkdir -p ${dir}
done
case ${VERSION} in
EUR* )
LANGDIRS=( EngEU FraEU GerEU ItaEU SpaEU NedEU PolEU )
for dir in ${LANGDIRS[@]}; do
cp "${RIIVOLUTION_DIR}"/AwesomerSLM/MessageEN/Message/Message.arc ${WORKDIR}/files/EU/${dir}/Message/Message.arc
done
;;
USAv* )
LANGDIRS=( FraUS EngUS SpaUS )
for dir in ${LANGDIRS[@]}; do
cp "${RIIVOLUTION_DIR}"/AwesomerSLM/MessageEN/Message/Message.arc ${WORKDIR}/files/US/${dir}/Message/Message.arc
done
cp -r "${RIIVOLUTION_DIR}"/AwesomerSLM/OpeningUS/openingTitle/ ${WORKDIR}/files/US/Layout/
;;
JPNv1 )
cp "${RIIVOLUTION_DIR}"/AwesomerSLM/MessageEN/Message/Message.arc ${WORKDIR}/files/JP/
;;
esac
cp -r "${RIIVOLUTION_DIR}"/AwesomerSLM/Stages/* ${WORKDIR}/files/Stage/
cp "${RIIVOLUTION_DIR}"/AwesomerSLM/Sound/*.brstm ${WORKDIR}/files/Sound/stream/
cp "${RIIVOLUTION_DIR}"/AwesomerSLM/Sound/BRSAR/* ${WORKDIR}/files/Sound/
cp -r "${RIIVOLUTION_DIR}"/AwesomerSLM/Object/ ${WORKDIR}/files/Object/
#cp -r "${RIIVOLUTION_DIR}"/AwesomerSLM/Layout/ ${WORKDIR}/files/
}
dolpatch () {
${WIT} dolpatch ${DOL} \
"802F148C=53756D6D53756E#7769696D6A3264" \
"802F118C=53756D6D53756E#7769696D6A3264" \
"802F0F8C=53756D6D53756E#7769696D6A3264" \
xml="${PATCHIMAGE_PATCH_DIR}/NSMBW_AP.xml" -q
}

View File

@ -1,18 +1,5 @@
#!/bin/bash
TMP_FILES=(Another nsmb.d XmasNewer NewerFiles "Newer*Summer*Sun" \
ZPW_1.1.ips Epic_Super_Bowser_World_v1.00 Riivolution Koopa \
Cannon_Super_Mario_Bros._Wii_v1.1 riivolution "Readme*" "*.txt" "*.rtf" \
"*.dol" "*.elf" nsmb "Retro Remix" WinterMoon WMManual.rtf NSMBW3 )
PATCHIMAGE_RIIVOLUTION_DIR="."
PATCHIMAGE_WBFS_DIR="."
PATCHIMAGE_AUDIO_DIR="."
if [[ -e $HOME/.patchimage.rc ]]; then
source $HOME/.patchimage.rc
fi
setup_tools () {
if [[ $(uname -m) == "x86_64" ]]; then
@ -47,12 +34,6 @@ setup_tools () {
}
cleanup () {
rm -rf ${TMP_FILES[@]} *.wbfs *.bnr
}
ask_game () {
echo -e \
@ -72,6 +53,7 @@ I New Super Mario Bros. Wii Retro Remix
J Super Mario: Mushroom Adventure PLUS - Winter Moon
K NSMBW3: The Final Levels
L Super Mario Vacation
M Awesomer Super Luigi Mini
1 The Legend of Zelda: Parallel Worlds
"
@ -84,12 +66,10 @@ download_soundtrack () {
if [[ ${SOUNDTRACK} ]]; then
if [[ ${SOUNDTRACK_LINK} ]]; then
wget --no-check-certificate "${PATCHIMAGE_AUDIO_DIR}"/"${SOUNDTRACK_LINK}" -O "${PATCHIMAGE_RIIVOLUTION_DIR}"/${SOUNDTRACK_ZIP}
wget --no-check-certificate "${PATCHIMAGE_AUDIO_DIR}"/"${SOUNDTRACK_LINK}" -O "${PATCHIMAGE_RIIVOLUTION_DIR}"/${SOUNDTRACK_ZIP} || exit 57
echo -e "\n >>> soundtrack saved to\n >>> ${PATCHIMAGE_AUDIO_DIR}/${SOUNDTRACK_ZIP}"
exit 0
else
echo -e "no soundtrack for ${GAME} available."
exit 1
fi
fi
@ -100,11 +80,12 @@ download_banner () {
if [[ ${PATCHIMAGE_BANNER_DOWNLOAD} == "TRUE" ]]; then
if [[ ${CUSTOM_BANNER} ]]; then
if [[ ! -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr ]]; then
wget --no-check-certificate "${CUSTOM_BANNER}" -O "${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr
wget --no-check-certificate "${CUSTOM_BANNER}" -O "${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr__tmp || exit 57
mv "${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr__tmp "${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr
fi
BANNER="${PATCHIMAGE_RIIVOLUTION_DIR}"/${GAMEID}-custom-banner.bnr
else
echo "no custom banner for ${GAMENAME} available, not modifying"
echo "*** >> no custom banner available"
fi
fi
@ -129,9 +110,9 @@ nsmbw_version () {
REG_LETTER=J
elif [[ ! ${VERSION} ]]; then
echo -e "please specify your games version using --version={EURv1,EURv2,USAv1,USAv2,JPNv1}"
exit 1
exit 27
fi
echo "*** >> status: ${VERSION}"
}
apply_banner () {
@ -146,57 +127,102 @@ apply_banner () {
}
check_directories () {
if [[ ! -d ${PATCHIMAGE_RIIVOLUTION_DIR} ]]; then
mkdir -p ${PATCHIMAGE_RIIVOLUTION_DIR}
fi
if [[ ! -d ${PATCHIMAGE_WBFS_DIR} ]]; then
mkdir -p ${PATCHIMAGE_WBFS_DIR}
fi
if [[ ! -d ${PATCHIMAGE_GAME_DIR} ]]; then
mkdir -p ${PATCHIMAGE_GAME_DIR}
fi
if [[ ! -d ${PATCHIMAGE_AUDIO_DIR} ]]; then
mkdir -p ${PATCHIMAGE_AUDIO_DIR}
fi
}
check_input_image () {
x=0
if [[ ! ${IMAGE} ]]; then
if [[ -f BASE.wbfs ]]; then
x=1
IMAGE=BASE.wbfs
elif [[ -f BASE.iso ]]; then
x=1
IMAGE=BASE.iso
fi
fi
echo "*** >> status: ${x}"
}
check_input_image_nsmb () {
x=0
if [[ ! ${IMAGE} ]]; then
if test -f SMN?01.wbfs; then
x=1
IMAGE=SMN?01.wbfs
elif test -f SMN?01.iso; then
x=2
IMAGE=SMN?01.iso
elif test -f ${PATCHIMAGE_WBFS_DIR}/SMN?01.iso; then
x=3
IMAGE=${PATCHIMAGE_WBFS_DIR}/SMN?01.iso
elif test -f ${PATCHIMAGE_WBFS_DIR}/SMN?01.wbfs; then
x=4
IMAGE=${PATCHIMAGE_WBFS_DIR}/SMN?01.wbfs
else
echo -e "please specify image to use with --iso=<path>"
exit 1
exit 15
fi
fi
echo "*** >> status: ${x}"
}
check_riivolution_patch () {
x=0
if [[ ! -d ${RIIVOLUTION_DIR} ]]; then
if [[ -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${RIIVOLUTION_ZIP}" ]]; then
${UNP} "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${RIIVOLUTION_ZIP}" >/dev/null
x=1
if [[ -f "${PWD}/${RIIVOLUTION_DIR}" ]]; then
echo "*** >> unpacking"
x=2
${UNP} "${PWD}/${RIIVOLUTION_ZIP}" >/dev/null || exit 63
elif [[ -f "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}" ]]; then
echo "*** >> unpacking"
x=3
${UNP} "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}" >/dev/null || exit 63
elif [[ ${PATCHIMAGE_RIIVOLUTION_DOWNLOAD} == "TRUE" ]]; then
x=4
if [[ ${DOWNLOAD_LINK} ]]; then
if [[ ! -f "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${RIIVOLUTION_ZIP}" ]]; then
wget --no-check-certificate ${DOWNLOAD_LINK} -O "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${RIIVOLUTION_ZIP}"
${UNP} "${PATCHIMAGE_RIIVOLUTION_DIR}"/"${RIIVOLUTION_ZIP}" >/dev/null
if [[ ! -f "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}" ]]; then
x=5
echo "*** >> downloading"
wget --no-check-certificate ${DOWNLOAD_LINK} -O "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp >/dev/null || exit 57
mv "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"__tmp "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}"
echo "*** >> unpacking"
${UNP} "${PATCHIMAGE_RIIVOLUTION_DIR}/${RIIVOLUTION_ZIP}" >/dev/null || exit 63
fi
else
echo "no download link for ${GAMENAME} available."
exit 1
exit 21
fi
else
echo -e "please specify zip/rar to use with --riivolution=<path>"
exit 1
exit 21
fi
fi
echo "*** >> status: ${x}"
}
@ -217,7 +243,7 @@ while [[ $xcount -lt $pcount ]]; do
IMAGE=BASE.${ISO_EXT}
else
echo -e "ISO not found"
exit 1
exit 15
fi
;;
@ -230,7 +256,7 @@ while [[ $xcount -lt $pcount ]]; do
IMAGE=BASE.${ROM_EXT}
else
echo -e "ROM not found"
exit 1
exit 15
fi
;;
@ -240,7 +266,7 @@ while [[ $xcount -lt $pcount ]]; do
${UNP} "${RIIVOLUTION}" >/dev/null
else
echo -e "Riivolution patch ${RIIVOLUTION} not found."
exit 1
exit 21
fi
;;
@ -250,7 +276,7 @@ while [[ $xcount -lt $pcount ]]; do
${UNP} "${PATCH}" >/dev/null
else
echo -e "PATCH patch ${PATCH} not found."
exit 1
exit 21
fi
;;
@ -258,7 +284,7 @@ while [[ $xcount -lt $pcount ]]; do
CUSTOMID=${1/*=}
if [[ ${#CUSTOMID} != 6 ]]; then
echo -e "CustomID ${CUSTOMID} needs to have 6 digits"
exit 1
exit 39
fi
;;
@ -267,7 +293,7 @@ while [[ $xcount -lt $pcount ]]; do
;;
--soundtrack )
SOUNDTRACK=TRUE
DOWNLOAD_SOUNDTRACK=TRUE
;;
--version=* )
@ -295,7 +321,7 @@ while [[ $xcount -lt $pcount ]]; do
* )
echo -e "unrecognized game version: ${VERSION}"
exit 1
exit 27
;;
esac
;;
@ -308,17 +334,12 @@ while [[ $xcount -lt $pcount ]]; do
GAME=${1/*=}
;;
--clean )
cleanup
exit $?
;;
--banner=* )
BANNER=${1/*=}
BANNER_EXT=${BANNER//*./}
if [[ ${BANNER_EXT} != "bnr" ]]; then
echo "given banner (${BANNER}) is not a .bnr file!"
exit 1
exit 33
fi
;;
@ -327,17 +348,17 @@ while [[ $xcount -lt $pcount ]]; do
;;
"" | --help )
echo -e "create wbfs images from riivolution patches.\n
***** using this script is only allowed, if you own an original copy of the game.
***** if you don't, no one can be blamed but you. Shame on you.\n
--game={NewerSMB;NewerSummerSun;AnotherSMB;HolidaySpecial;ParallelWorlds...}
| specify game you want to create
echo -e "patchimage 4.0 (2013-10-11)
(c) 2013 Christopher Roy Bratusek <nano@tuxfamily.org>
patchimage creates wbfs images from riivolution patches.
--game=<gamename/gameletter> | specify game you want to create
--iso/--rom=/home/test/<Image> | specify which ISO/ROM to use for building
--riivolution/--patch=<Patch> | specify path to Riivolution/Patch files
--version=EURv1,EURv2,USAv1,USAv2,JPNv1 | specify your game version
--customdid=SMNP02 | specify a custom ID to use for the game
--sharesave | let modified game share savegame with original game
--clean | cleanup the build-directory
--download | download riivolution patchfiles
--soundtrack | download soundtrack (if available) and exit
--banner=<banner.bnr> | use a custom banner (riivolution games)

View File

@ -6,10 +6,10 @@ DOWNLOAD_LINK="http://newerteam.com/getNewerFile.php"
SOUNDTRACK_LINK="http://dirbaio.net/newer/NewerSoundtrack.zip"
SOUNDTRACK_ZIP="NewerSoundtrack.zip"
RIIVOLUTION_ZIP="NewerSMBW.zip"
RIIVOLUTION_DIR="NewerFiles"
RIIVOLUTION_DIR="NewerSMBW"
GAMENAME="Newer SMB"
XML_SOURCE="${RIIVOLUTION_DIR}"/NewerSMBW/
XML_FILE="${RIIVOLUTION_DIR}"/riivolution/NewerSMBW.xml
XML_SOURCE="${RIIVOLUTION_DIR}"
XML_FILE="${RIIVOLUTION_DIR}"/../riivolution/NewerSMBW.xml
GAME_TYPE=RIIVOLUTION
BANNER_LOCATION=${WORKDIR}/files/opening.bnr
@ -56,67 +56,67 @@ place_files () {
EUR* )
LANGDIRS=( EngEU FraEU GerEU ItaEU SpaEU NedEU )
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/NewerSMBW/{Font,Message}/ ${WORKDIR}/files/EU/${dir}/
cp -r "${RIIVOLUTION_DIR}"/{Font,Message}/ ${WORKDIR}/files/EU/${dir}/
done
cp "${RIIVOLUTION_DIR}"/NewerSMBW/OthersP/* ${WORKDIR}/files/EU/Layout/openingTitle/
cp "${RIIVOLUTION_DIR}"/OthersP/* ${WORKDIR}/files/EU/Layout/openingTitle/
;;
USAv* )
LANGDIRS=( FraUS EngUS SpaUS )
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/NewerSMBW/{Font,Message}/ ${WORKDIR}/files/US/${dir}/
cp -r "${RIIVOLUTION_DIR}"/{Font,Message}/ ${WORKDIR}/files/US/${dir}/
done
cp "${RIIVOLUTION_DIR}"/NewerSMBW/OthersE/* ${WORKDIR}/files/US/Layout/openingTitle/
cp "${RIIVOLUTION_DIR}"/OthersE/* ${WORKDIR}/files/US/Layout/openingTitle/
;;
JPNv1 )
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Font/* ${WORKDIR}/files/JP/Font/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Message/* ${WORKDIR}/files/JP/Message/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/OthersJ/* ${WORKDIR}/files/JP/Layout/openingTitle/
cp "${RIIVOLUTION_DIR}"/Font/* ${WORKDIR}/files/JP/Font/
cp "${RIIVOLUTION_DIR}"/Message/* ${WORKDIR}/files/JP/Message/
cp "${RIIVOLUTION_DIR}"/OthersJ/* ${WORKDIR}/files/JP/Layout/openingTitle/
;;
esac
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Tilesets/* ${WORKDIR}/files/Stage/Texture/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/TitleReplay/* ${WORKDIR}/files/Replay/title/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/BGs/* ${WORKDIR}/files/Object/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/SpriteTex/* ${WORKDIR}/files/Object/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Layouts/* ${WORKDIR}/files/Layout/
cp -r "${RIIVOLUTION_DIR}"/NewerSMBW/Music/*.er ${WORKDIR}/files/Sound/new/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Music/sfx/* ${WORKDIR}/files/Sound/new/sfx/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Music/stream/* ${WORKDIR}/files/Sound/stream/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Music/rsar/* ${WORKDIR}/files/Sound/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/NewerRes/* ${WORKDIR}/files/NewerRes/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/LevelSamples/* ${WORKDIR}/files/LevelSamples/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/charaChangeSelectContents.arc ${WORKDIR}/files/Layout/charaChangeSelectContents/charaChangeSelectContents.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/characterChange.arc ${WORKDIR}/files/Layout/characterChange/characterChange.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/continue.arc ${WORKDIR}/files/Layout/continue/continue.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/controllerInformation.arc ${WORKDIR}/files/Layout/controllerInformation/controllerInformation.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/corseSelectMenu.arc ${WORKDIR}/files/Layout/corseSelectMenu/corseSelectMenu.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/corseSelectUIGuide.arc ${WORKDIR}/files/Layout/corseSelectUIGuide/corseSelectUIGuide.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/dateFile.arc ${WORKDIR}/files/Layout/dateFile/dateFile.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/dateFile_OLD.arc ${WORKDIR}/files/Layout/dateFile/dateFile_OLD.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/easyPairing.arc ${WORKDIR}/files/Layout/easyPairing/easyPairing.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/extensionControllerNunchuk.arc ${WORKDIR}/files/Layout/extensionControllerNunchuk/extensionControllerNunchuk.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/extensionControllerYokomochi.arc ${WORKDIR}/files/Layout/extensionControllerYokomochi/extensionControllerYokomochi.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/fileSelectBase.arc ${WORKDIR}/files/Layout/fileSelectBase/fileSelectBase.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/fileSelectBase_OLD.arc ${WORKDIR}/files/Layout/fileSelectBase/fileSelectBase_OLD.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/fileSelectPlayer.arc ${WORKDIR}/files/Layout/fileSelectPlayer/fileSelectPlayer.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/gameScene.arc ${WORKDIR}/files/Layout/gameScene/gameScene.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/infoWindow.arc ${WORKDIR}/files/Layout/infoWindow/infoWindow.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/miniGameCannon.arc ${WORKDIR}/files/Layout/miniGameCannon/miniGameCannon.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/miniGameWire.arc ${WORKDIR}/files/Layout/miniGameWire/miniGameWire.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/pauseMenu.arc ${WORKDIR}/files/Layout/pauseMenu/pauseMenu.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/pointResultDateFile.arc ${WORKDIR}/files/Layout/pointResultDateFile/pointResultDateFile.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/pointResultDateFileFree.arc ${WORKDIR}/files/Layout/pointResultDateFileFree/pointResultDateFileFree.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/preGame.arc ${WORKDIR}/files/Layout/preGame/preGame.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/select_cursor.arc ${WORKDIR}/files/Layout/select_cursor/select_cursor.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/sequenceBG.arc ${WORKDIR}/files/Layout/sequenceBG/sequenceBG.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/staffCredit.arc ${WORKDIR}/files/Layout/staffCredit/staffCredit.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/stockItem.arc ${WORKDIR}/files/Layout/stockItem/stockItem.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/stockItemShadow.arc ${WORKDIR}/files/Layout/stockItemShadow/stockItemShadow.arc
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Others/yesnoWindow.arc ${WORKDIR}/files/Layout/yesnoWindow/yesnoWindow.arc
cp -r "${RIIVOLUTION_DIR}"/NewerSMBW/Maps/* ${WORKDIR}/files/Maps/
cp "${RIIVOLUTION_DIR}"/NewerSMBW/Stages/* ${WORKDIR}/files/Stage/
cp "${RIIVOLUTION_DIR}"/Tilesets/* ${WORKDIR}/files/Stage/Texture/
cp "${RIIVOLUTION_DIR}"/TitleReplay/* ${WORKDIR}/files/Replay/title/
cp "${RIIVOLUTION_DIR}"/BGs/* ${WORKDIR}/files/Object/
cp "${RIIVOLUTION_DIR}"/SpriteTex/* ${WORKDIR}/files/Object/
cp "${RIIVOLUTION_DIR}"/Layouts/* ${WORKDIR}/files/Layout/
cp -r "${RIIVOLUTION_DIR}"/Music/*.er ${WORKDIR}/files/Sound/new/
cp "${RIIVOLUTION_DIR}"/Music/sfx/* ${WORKDIR}/files/Sound/new/sfx/
cp "${RIIVOLUTION_DIR}"/Music/stream/* ${WORKDIR}/files/Sound/stream/
cp "${RIIVOLUTION_DIR}"/Music/rsar/* ${WORKDIR}/files/Sound/
cp "${RIIVOLUTION_DIR}"/NewerRes/* ${WORKDIR}/files/NewerRes/
cp "${RIIVOLUTION_DIR}"/LevelSamples/* ${WORKDIR}/files/LevelSamples/
cp "${RIIVOLUTION_DIR}"/Others/charaChangeSelectContents.arc ${WORKDIR}/files/Layout/charaChangeSelectContents/charaChangeSelectContents.arc
cp "${RIIVOLUTION_DIR}"/Others/characterChange.arc ${WORKDIR}/files/Layout/characterChange/characterChange.arc
cp "${RIIVOLUTION_DIR}"/Others/continue.arc ${WORKDIR}/files/Layout/continue/continue.arc
cp "${RIIVOLUTION_DIR}"/Others/controllerInformation.arc ${WORKDIR}/files/Layout/controllerInformation/controllerInformation.arc
cp "${RIIVOLUTION_DIR}"/Others/corseSelectMenu.arc ${WORKDIR}/files/Layout/corseSelectMenu/corseSelectMenu.arc
cp "${RIIVOLUTION_DIR}"/Others/corseSelectUIGuide.arc ${WORKDIR}/files/Layout/corseSelectUIGuide/corseSelectUIGuide.arc
cp "${RIIVOLUTION_DIR}"/Others/dateFile.arc ${WORKDIR}/files/Layout/dateFile/dateFile.arc
cp "${RIIVOLUTION_DIR}"/Others/dateFile_OLD.arc ${WORKDIR}/files/Layout/dateFile/dateFile_OLD.arc
cp "${RIIVOLUTION_DIR}"/Others/easyPairing.arc ${WORKDIR}/files/Layout/easyPairing/easyPairing.arc
cp "${RIIVOLUTION_DIR}"/Others/extensionControllerNunchuk.arc ${WORKDIR}/files/Layout/extensionControllerNunchuk/extensionControllerNunchuk.arc
cp "${RIIVOLUTION_DIR}"/Others/extensionControllerYokomochi.arc ${WORKDIR}/files/Layout/extensionControllerYokomochi/extensionControllerYokomochi.arc
cp "${RIIVOLUTION_DIR}"/Others/fileSelectBase.arc ${WORKDIR}/files/Layout/fileSelectBase/fileSelectBase.arc
cp "${RIIVOLUTION_DIR}"/Others/fileSelectBase_OLD.arc ${WORKDIR}/files/Layout/fileSelectBase/fileSelectBase_OLD.arc
cp "${RIIVOLUTION_DIR}"/Others/fileSelectPlayer.arc ${WORKDIR}/files/Layout/fileSelectPlayer/fileSelectPlayer.arc
cp "${RIIVOLUTION_DIR}"/Others/gameScene.arc ${WORKDIR}/files/Layout/gameScene/gameScene.arc
cp "${RIIVOLUTION_DIR}"/Others/infoWindow.arc ${WORKDIR}/files/Layout/infoWindow/infoWindow.arc
cp "${RIIVOLUTION_DIR}"/Others/miniGameCannon.arc ${WORKDIR}/files/Layout/miniGameCannon/miniGameCannon.arc
cp "${RIIVOLUTION_DIR}"/Others/miniGameWire.arc ${WORKDIR}/files/Layout/miniGameWire/miniGameWire.arc
cp "${RIIVOLUTION_DIR}"/Others/pauseMenu.arc ${WORKDIR}/files/Layout/pauseMenu/pauseMenu.arc
cp "${RIIVOLUTION_DIR}"/Others/pointResultDateFile.arc ${WORKDIR}/files/Layout/pointResultDateFile/pointResultDateFile.arc
cp "${RIIVOLUTION_DIR}"/Others/pointResultDateFileFree.arc ${WORKDIR}/files/Layout/pointResultDateFileFree/pointResultDateFileFree.arc
cp "${RIIVOLUTION_DIR}"/Others/preGame.arc ${WORKDIR}/files/Layout/preGame/preGame.arc
cp "${RIIVOLUTION_DIR}"/Others/select_cursor.arc ${WORKDIR}/files/Layout/select_cursor/select_cursor.arc
cp "${RIIVOLUTION_DIR}"/Others/sequenceBG.arc ${WORKDIR}/files/Layout/sequenceBG/sequenceBG.arc
cp "${RIIVOLUTION_DIR}"/Others/staffCredit.arc ${WORKDIR}/files/Layout/staffCredit/staffCredit.arc
cp "${RIIVOLUTION_DIR}"/Others/stockItem.arc ${WORKDIR}/files/Layout/stockItem/stockItem.arc
cp "${RIIVOLUTION_DIR}"/Others/stockItemShadow.arc ${WORKDIR}/files/Layout/stockItemShadow/stockItemShadow.arc
cp "${RIIVOLUTION_DIR}"/Others/yesnoWindow.arc ${WORKDIR}/files/Layout/yesnoWindow/yesnoWindow.arc
cp -r "${RIIVOLUTION_DIR}"/Maps/* ${WORKDIR}/files/Maps/
cp "${RIIVOLUTION_DIR}"/Stages/* ${WORKDIR}/files/Stage/
}

View File

@ -2,7 +2,7 @@
WORKDIR=nsmb.d
DOL=${WORKDIR}/sys/main.dol
DOWNLOAD_LINK="https://www.dropbox.com/s/rvuwd8ztl44g18y/NSMBW3_The%20final%20levels.zip"
DOWNLOAD_LINK="https://www.dropbox.com/s/f7x8evfrc07bcbw/NSMBW%203%20The%20Final%20Levels.zip"
RIIVOLUTION_ZIP="NSMBW3_The final levels.zip"
RIIVOLUTION_DIR="NSMBW3"
GAMENAME="NSMBW3: The Final Levels"
@ -54,7 +54,7 @@ place_files () {
EUR* )
LANGDIRS=( EngEU FraEU GerEU ItaEU SpaEU NedEU )
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/{Message,Layout} ${WORKDIR}/files/EU/${dir}/
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/Message ${WORKDIR}/files/EU/${dir}/
done
cp "${RIIVOLUTION_DIR}"/EU/Layout/openingtitle/* ${WORKDIR}/files/EU/Layout/openingTitle/openingTitle.arc
;;
@ -62,12 +62,12 @@ place_files () {
USAv* )
LANGDIRS=( FraUS EngUS SpaUS )
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/{Message,Layout} ${WORKDIR}/files/US/${dir}/
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/Message ${WORKDIR}/files/US/${dir}/
done
;;
JPNv1 )
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/{Message,Layout} ${WORKDIR}/files/JP/
cp -r "${RIIVOLUTION_DIR}"/EU/EngEU/Message ${WORKDIR}/files/JP/
;;
esac

View File

@ -43,11 +43,11 @@ place_files () {
case ${VERSION} in
EURv* )
${PATCHIMAGE_PATCH_DIR}/openingTitle_nsmbw4.arc ${WORKDIR}/files/EU/Layout/openingTitle/openingTitle.arc
cp ${PATCHIMAGE_PATCH_DIR}/openingTitle_nsmbw4.arc ${WORKDIR}/files/EU/Layout/openingTitle/openingTitle.arc
;;
USAv* )
${PATCHIMAGE_PATCH_DIR}/openingTitle_nsmbw4.arc ${WORKDIR}/files/US/Layout/openingTitle/openingTitle.arc
cp ${PATCHIMAGE_PATCH_DIR}/openingTitle_nsmbw4.arc ${WORKDIR}/files/US/Layout/openingTitle/openingTitle.arc
;;
# JPNv* )

View File

@ -29,7 +29,7 @@ check_input_rom () {
ROM=$(find . -name ${ROM_MASK} | sed -e 's,./,,')
if [[ ${ROM} == "" ]]; then
echo -e "error: could not find suitable ROM, specify using --rom"
exit 1
exit 15
fi
fi

View File

@ -49,7 +49,7 @@ place_files () {
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/US/EngUS/Message/ ${WORKDIR}/files/EU/${dir}/
done
cp patches/openingTitle_retromix.arc ${WORKDIR}/files/EU/Layout/openingTitle/openingTitle.arc
cp ${PATCHIMAGE_PATCH_DIR}/openingTitle_retromix.arc ${WORKDIR}/files/EU/Layout/openingTitle/openingTitle.arc
;;
USAv* )
@ -57,7 +57,7 @@ place_files () {
for dir in ${LANGDIRS[@]}; do
cp -r "${RIIVOLUTION_DIR}"/US/EngUS/Message/ ${WORKDIR}/files/US/${dir}/
done
cp patches/openingTitle_retromix.arc ${WORKDIR}/files/US/Layout/openingTitle/openingTitle.arc
cp ${PATCHIMAGE_PATCH_DIR}/openingTitle_retromix.arc ${WORKDIR}/files/US/Layout/openingTitle/openingTitle.arc
;;
JPNv* )
@ -74,6 +74,6 @@ place_files () {
dolpatch () {
echo
echo -n
}