diff --git a/script.d/common.sh b/script.d/common.sh index 4716572..e2a286e 100644 --- a/script.d/common.sh +++ b/script.d/common.sh @@ -250,7 +250,7 @@ check_input_image_mkwiimm () { } -show_nsmbw_db () { +show_nsmb_db () { ID=${1:0:6} gawk -F \: "/^${ID}/"'{print $2}' \ @@ -282,7 +282,7 @@ ask_input_image_mkwiimm () { } -ask_input_image_nsmbw () { +ask_input_image_nsmb () { echo "Choose New Super Mario Bros. Wii Image to modify @@ -290,7 +290,7 @@ ask_input_image_nsmbw () { for image in ${1}/MSN???.{iso,wbfs}; do if [[ -e ${image} ]]; then - echo " ${image##*/} $(show_nsmbw_db ${image##*/})" + echo " ${image##*/} $(show_nsmb_db ${image##*/})" fi done diff --git a/script.d/nsmbw_characters.sh b/script.d/nsmbw_characters.sh new file mode 100644 index 0000000..8bf9dad --- /dev/null +++ b/script.d/nsmbw_characters.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +GAME_TYPE="WII_GENERIC" +GAME_NAME="New Super Mario Bros. Wii" +ITEMS_BASE="http://riivolution.nanolx.org/nsmbw_characters" + +show_notes () { + +echo -e \ +"************************************************ +${GAME_NAME} + +Custom New Super Mario Bros. Wii + +Source: Various +Base Image: New Super Mario Bros. Wii (SMN?01) +Supported Versions: EUR, JAP, USA +************************************************" + +} + +check_input_image_special () { + + check_input_image_nsmb + ask_input_image_nsmb ${IMAGE%/*} + echo -e "type SMN???.wbfs:\n" + read ID + + if [[ ! -f ${IMAGE%/*}/${ID} ]]; then + echo "wrong id from user-input given." + exit 75 + fi + +} + +pi_action () { + + check_input_image_special + + if [[ -f ${HOME}/.patchimage.choice ]]; then + echo "Your choices from last time can be re-used." + echo "y (yes) or n (no)" + read choice + + if [[ ${choice} == y ]]; then + source ${HOME}/.patchimage.choice + fi + fi + + if [[ ${choosenplayers[@]} == "" ]]; then + echo -e "Choose a Player to add to the game\n" + + gawk -F \: '{print $1 "\t\t" $2 "\t\t" $3}' < ${PATCHIMAGE_SCRIPT_DIR}/nsmbw_characters.db + + echo -e "\ntype ???.arc (only one per slot (second column) possible, space separated)" + read PLAYERS + + for player in ${PLAYERS[@]}; do + if [[ ! -f ${PATCHIMAGE_RIIVOLUTION_DIR}/nsmbw_player_${player} ]]; then + wget -O ${PATCHIMAGE_RIIVOLUTION_DIR}/nsmbw_player_${player} \ + ${ITEMS_BASE}/${player} &>/dev/null \ + || (echo "download of ${player} failed." \ + && rm ${PATCHIMAGE_RIIVOLUTION_DIR}/${player} \ + && exit 57) + fi + slot=$(gawk -F \: "/^${player}/"'{print $2}' ${PATCHIMAGE_SCRIPT_DIR}/nsmbw_characters.db) + choosenplayers=( ${choosenplayers[@]} player:${slot} ) + done + + + echo ${choosenplayers[@]} + echo "choosenplayers=( ${choosenplayers[@]} )" > ${HOME}/.patchimage.choice + fi + + rm -rf workdir + + echo -e "\n*** 3) extracting image" + ${WIT} extract ${IMAGE%/*}/${ID} --psel=data -d workdir -q || exit 51 + + for backup in Mario.arc Luigi.arc Kinopio.arc koopa.arc; do + if [[ ! -f "${PATCHIMAGE_RIIVOLUTION_DIR}/${backup}" ]]; then + echo "*** 4) first run, backing up original: ${backup}" + cp workdir/files/Object/${backup} "${PATCHIMAGE_RIIVOLUTION_DIR}" + else + echo "*** 4) restoring original: ${backup}" + cp "${PATCHIMAGE_RIIVOLUTION_DIR}"/${backup} workdir/files/Object/ + fi + done + + echo "*** 5) replacing characters" + for player in ${choosenplayers[@]}; do + cp "${PATCHIMAGE_RIIVOLUTION_DIR}"/nsmbw_player_${player/:*} \ + workdir/files/Object/${player/*:} + done + + echo "*** 6) rebuilding game" + echo " (storing game in ${PATCHIMAGE_GAME_DIR}/${ID})" + ${WIT} cp -o -q -B workdir ${PATCHIMAGE_GAME_DIR}/${ID} || exit 51 + + rm -rf workdir +}