From 96b0a3a5d540ae620a36ce9a40d22ef457d69624 Mon Sep 17 00:00:00 2001 From: Christopher Roy Bratusek Date: Fri, 1 Jul 2016 20:07:53 +0200 Subject: [PATCH] add support for patching Tokyo Mirage Sessions #FE add properly working titledmper (Wii U/ddd) --- ChangeLog | 2 + patchimage.sh | 10 +++++ script.d/common.sh | 10 +++-- script.d/tokyomiragesessionsfe.sh | 65 ++++++++++++++++++++++++++++++ tools/titledumper.32 | Bin 0 -> 15256 bytes tools/titledumper.64 | Bin 0 -> 18944 bytes 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 script.d/tokyomiragesessionsfe.sh create mode 100755 tools/titledumper.32 create mode 100755 tools/titledumper.64 diff --git a/ChangeLog b/ChangeLog index 461081e..22ed78b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ v6.2.0: - code improvements for MKWiimm +- supply xdelta3 (32 and 64 bit versions) +- add support for Tokyo Mirage Sessions #FE US/EUR decensoring - use ${WIT} instead of wit when checking image region for MKWiimm and Kirbys Adventure Wii diff --git a/patchimage.sh b/patchimage.sh index 85169a2..d93abdd 100755 --- a/patchimage.sh +++ b/patchimage.sh @@ -171,6 +171,10 @@ case ${GAME} in source ${PATCHIMAGE_SCRIPT_DIR}/kirbywii.sh ;; + TMS1 | TokyoMirageSessions ) + source ${PATCHIMAGE_SCRIPT_DIR}/tokyomiragesessionsfe.sh + ;; + ZEL1 | ParallelWorlds | "The Legend of Zelda: Parallel Worlds" ) source ${PATCHIMAGE_SCRIPT_DIR}/parallelworlds.sh ;; @@ -279,4 +283,10 @@ case ${GAME_TYPE} in fi ;; + "DELTA" ) + show_notes + menu || exit 1 + patch || exit 1 + ;; + esac diff --git a/script.d/common.sh b/script.d/common.sh index 439a1f1..0fe171b 100644 --- a/script.d/common.sh +++ b/script.d/common.sh @@ -1,7 +1,7 @@ #!/bin/bash -PATCHIMAGE_VERSION=6.1.0 -PATCHIMAGE_RELEASE=2016-05-16 +PATCHIMAGE_VERSION=6.2.0 +PATCHIMAGE_RELEASE=2016-07-01 setup_tools () { @@ -16,6 +16,7 @@ setup_tools () { IPS=${PATCHIMAGE_TOOLS_DIR}/uips.${SUFFIX} UNP=${PATCHIMAGE_TOOLS_DIR}/unp SZS=${PATCHIMAGE_TOOLS_DIR}/wszst.${SUFFIX} + XD3=${PATCHIMAGE_TOOLS_DIR}/xdelta3.${SUFFIX} GDOWN=${PATCHIMAGE_TOOLS_DIR}/gdown.pl } @@ -68,6 +69,9 @@ MKW6 Custom Karts. Replace characters in the game <<<<<< Kirby's Adventure Wii >>>>>> KAW1 Change first player's character +<<<<<< Tokyo Mirage Sessions #FE >>>>>> +TMS1 Uncensor US/EUR version + <<<<<< ROMS >>>>>> ZEL1 The Legend of Zelda: Parallel Worlds @@ -537,7 +541,7 @@ while [[ $xcount -lt $pcount ]]; do --help | -h ) echo -e "patchimage ${PATCHIMAGE_VERSION} (${PATCHIMAGE_RELEASE}) - (c) 2013-2014 Christopher Roy Bratusek + (c) 2013-2016 Christopher Roy Bratusek patchimage creates wbfs images from riivolution patches. --game= | specify game you want to create diff --git a/script.d/tokyomiragesessionsfe.sh b/script.d/tokyomiragesessionsfe.sh new file mode 100644 index 0000000..93d45a3 --- /dev/null +++ b/script.d/tokyomiragesessionsfe.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +GAMENAME="Tokyo Mirage Sessions #FE Uncensored" +GAME_TYPE=DELTA + +PATCH_FILES=( 000_map 010_character 030_etc 031_message 050_movie 999_lua ) + +show_notes () { + +echo -e \ +"************************************************ +${GAMENAME} + +Source: https://gbatemp.net/threads/tokyo-mirage-sessions-fe-restoration.429651/ +Base Image: Tokyo Mirage Sessions #FE +Supported Versions: EUR, US +************************************************" + +} + +menu () { + + echo -e " + + Tokyo Mirage Sessions #FE restoration patcher + + Enter path to the directory containing the delta patches: + " + + read XDELTA_PATH + + echo -e " + Enter path to the directory containing the game files (cpk): + " + + read CPK_PATH + + if [[ ! -d ${XDELTA_PATH} ]]; then + echo "PATH \"${XDELTA_PATH}\" does not exist!" || exit 1 + elif [[ ! -f ${XDELTA_PATH}/patch_000_map.xdelta ]]; then + echo "PATH \"${XDELTA_PATH}\" does not contain the xdelta patches!" || exit 1 + elif [[ ! -d ${CPK_PATH} ]]; then + echo "PATH \"${CPK_PATH}\" does not exist!" || exit 1 + elif [[ ! -f ${CPK_PATH}/pack_000_map.cpk ]]; then + echo "PATH \"${CPK_PATH}\" does not contain the game files (cpk)!" || exit 1 + fi + +} + +patch () { + + echo -e "\n> Patching Files" + for patch in ${PATCH_FILES[@]}; do + echo ">> pack_${patch}.cpk" + ${XD3} -d -f -s ${CPK_PATH}/pack_${patch}.cpk \ + ${XDELTA_PATH}/patch_${patch}.xdelta \ + ${CPK_PATH}/pack_${patch}.cpk_new || exit 1 + + mv ${CPK_PATH}/pack_${patch}.cpk_new \ + ${CPK_PATH}/pack_${patch}.cpk + done + + echo -e "\n< Done!\n" + +} diff --git a/tools/titledumper.32 b/tools/titledumper.32 new file mode 100755 index 0000000000000000000000000000000000000000..117eae93712fea0d37e89633e6533a70ed1577d5 GIT binary patch literal 15256 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 literal 0 HcmV?d00001 diff --git a/tools/titledumper.64 b/tools/titledumper.64 new file mode 100755 index 0000000000000000000000000000000000000000..949ac58f16fcc1263ec04f27021ceff5af295d6b GIT binary patch literal 18944 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 literal 0 HcmV?d00001