@ECHO OFF
SETLOCAL EnableDelayedExpansion
CD /D %~pd0&SET prog=NSMBW Mod ISO Builder&SET ver=1.07&SET modExt=PLG&set baseExt=BASE
CLS&ECHO.
ECHO 奼迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋芼&ECHO ? %prog% v%ver% ?ECHO 闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡譯&ECHO ? Builder by damysteryman/Team DARK ?ECHO ? Powered by WIT by Wiimm ?ECHO ? More info in README.txt ?ECHO 迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋迋芞
ECHO.&ECHO Checking for new version...
support\wget https://www.dropbox.com/s/o8yfwge27r6o5mx/version -O version --no-check-certificate 2>nul
TITLE %prog% %ver%&FOR /F %%a IN (version) DO (DEL version&IF 0%%a GTR 0%ver% (ECHO Version %%a available.&SET /P Input=Would you like to update?&IF /I "!Input:~0,1!"=="Y" (SET Input=&GOTO :autoUpdate)))
GOTO :start
:autoUpdate
ECHO Writing autoupdate script
ECHO @ECHO OFF>autoupdate.cmd
ECHO ECHO Downloading update...>>autoupdate.cmd
ECHO support\wget https://www.dropbox.com/s/5likqbyyrp0czld/NSMBW_Mod_ISO_Builder.zip -O NSMBW_Mod_ISO_Builder.zip --no-check-certificate 2^>nul>>autoupdate.cmd
ECHO ECHO Extracting update...>>autoupdate.cmd
ECHO support\7za x -y NSMBW_Mod_ISO_Builder.zip ^>nul>>autoupdate.cmd
ECHO DEL NSMBW_Mod_ISO_Builder.zip>>autoupdate.cmd
ECHO DEL autoupdate.cmd^&Build_ISO>>autoupdate.cmd
ENDLOCAL
autoupdate
GOTO :ENDLOCAL
:checkBaseImages
FOR /F "tokens=3 delims=/" %%a IN ('support\wit F -s ././ -n SMN.01 . -F +COPYDATE_LAST_* --scan-progress --ignore-fst') DO IF NOT %%~na==%%~a (SET baseImageFile=%%a) ELSE FOR /F "tokens=2,* delims=_" %%b IN ("%%a") DO (IF EXIST "plugins\%%c.%baseExt%" (FOR /F "tokens=1" %%d IN (plugins\%%c.BASE) DO (SET bases=!bases!,%%d&SET /A bases.count=!bases.count!+1&SET base.!bases.count!.fileName=!baseImageFile!&SET base.!bases.count!.code=%%c&SET base.!bases.count!=%%d&SET base.%%d.count=0)) ELSE (SET DATE=%%c&ECHO !DATE!&SET DATE=!DATE:-=/!&SET DATE=!DATE:~0,10! !DATE:~11,2!:!DATE:~13,2!:!DATE:~15,2!&ECHO You have a base image that is unknown by autodetect. >&2&ECHO date/time stamp is: >&2&ECHO YYYY/MM/DD HH:NN:SS >&2&ECHO !DATE! >&2&SET DATE=&ECHO. >&2&ECHO The filename is: !baseImageFile!>&2&PAUSE))
IF DEFINED bases (CALL :stripComma bases) ELSE (SET EXIT=1&ECHO No supported base images found, exiting... >&2)
GOTO :EOF
:continue
SETLOCAL
ECHO Extracting original game files...
CALL :fetchAllValues %mod.selected%
rem FOR /F "tokens=3,* delims=.=" %%a in ('set mod.%mod.selected%.') do SET %%a=%%b
IF EXIST "!base.%base.selected%!" RD /Q /S "!base.%base.selected%!"
SET copyFiles=!mod.%mod.selected%.copyFiles!
SET copyFiles=%copyFiles:`=^!%
SET lang=!mod.%mod.selected%.lang!
SET XML=!mod.%mod.selected%.XML!
IF DEFINED XML SET XML=%XML:`=^!%
support\wit X "!base.%base.selected%.fileName!" "!base.%base.selected%!" --psel=DATA -q -o
ECHO Adding !mod.%mod.selected%.modName! Files to %ext%...
ECHO Copying files, please be patient...
FOR %%a IN (%lang:;=,%) DO FOR /F "tokens=1,2 delims=:" %%b IN ("%%a") DO CALL :copyLang "%%~b" "%%~c"
ECHO f>f
FOR %%a IN (%copyFiles:;=,%) DO FOR /F "tokens=1,2 delims=:" %%b IN ("%%a") DO CALL :copyFiles "%%~b" "%%~c"
IF EXIST f DEL f
CALL :patch
ECHO Building %ext% file...
CALL :rebuild
ENDLOCAL
GOTO :EOF
:copyFiles
SETLOCAL
CALL SET src=!mod.%mod.selected%.folder!\%~1
CALL SET dest=!base.%base.selected%!\files\%~2
SET lastsrc=%src:~-1%
SET lastdest=%dest:~-1%
IF "%lastsrc%"=="\" CALL SET src=%src%*.*
IF "%lastdest%"=="\" CALL SET dest=%dest%*.*
CALL xcopy "%src%" "%dest%" /y <f >nul
ENDLOCAL
GOTO :EOF
:copyLang
SETLOCAL
SET FULLEng=ENGLISH
SET FULLFra=FRENCH
SET FULLGer=GERMAN
SET FULLIta=ITALIAN
SET FULLSpa=SPANISH
SET FULLTwn=TAIWANESE
SET FULLKor=Korean
SET FULLJpn=URA-JAPANESE
IF "%R%"=="E" SET Lan=Eng,Fra,Spa
IF "%R%"=="J" SET Lan=Jpn
IF "%R%"=="P" SET Lan=Eng,Fra,Ger,Ita,Spa
IF "%R%"=="W" SET Lan=Twn
IF "%R%"=="K" SET Lan=Kor
FOR %%a IN (%Lan%) DO CALL :parseLang "%~1" "%~2" "%%a"
ENDLOCAL&SET copyFiles=%copyFiles%
GOTO :EOF
:doReplace
SETLOCAL
SET INPUT=%*
SET OUTPUT=%INPUT:80001800=803482C0%
FOR /f "tokens=* delims=" %%g in ('ECHO %OUTPUT%') do ECHO %%~g>>!base.%base.selected%!\%XML%-mod.xml
ENDLOCAL
GOTO :EOF
:fixNewerLW
SETLOCAL
SET "INPUT=%Paper Luigi (Please Read Luigi.txt)"
SET "OUTPUT=%Paper Luigi"
SET "lwxml=riivolution\NewerLW.xml"
SET "newlwxml=riivolution\NewerLW-mod.xml"
(FOR /f "delims=" %%i in (%lwxml%) do (
SET "line=%%i"
SET "line=!line:%INPUT%=%OUTPUT%!"
ECHO !line!
ENDLOCAL
))>"%newlwxml%"
ENDLOCAL
GOTO :EOF
:fixAnotherSMBWPath
SETLOCAL
SET "INPUT=%/Another/Loader.bin"
SET "OUTPUT=%Loader.bin"
SET "anotherxml=riivolution\Another.xml"
SET "newanotherxml=riivolution\Another-mod.xml"
(FOR /f "delims=" %%i in (%anotherxml%) do (
SET "line=%%i"
SET "line=!line:%INPUT%=%OUTPUT%!"
ECHO !line!
ENDLOCAL
))>"%newAnotherxml%"
ENDLOCAL
GOTO :EOF
:fixPranksterComets
SETLOCAL
SET "INPUT=%/PranksterComets/Loader.bin"
SET "OUTPUT=%Loader.bin"
SET "pcxml=riivolution\PranksterComets.xml"
SET "newpcxml=!base.%base.selected%!\PranksterComets-mod.xml"
(FOR /f "delims=" %%i in (%pcxml%) do (
SET "line=%%i"
SET "line=!line:%INPUT%=%OUTPUT%!"
ECHO !line!
ENDLOCAL
))>"%newpcxml%"
ENDLOCAL
GOTO :EOF
:drawBannerMenu
ECHO =============================Banner Options Select=============================
ECHO.
IF "%bannerDl%"=="1" (ECHO 1. Toggle - Download Custom Banner: Yes) ELSE ECHO 1. Toggle - Download Custom Banner: No
IF "%bannerUse%"=="1" (ECHO 2. Toggle - Use Banner: Custom) ELSE ECHO 2. Toggle - Use Banner: Default
ECHO 3. Done
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =========================Enter the Number corresponding========================
ECHO ===============================to option to change=============================
GOTO :EOF
:drawBaseMenu
ECHO ============================Base ISO Version Select============================
ECHO.
CALL :parseBaseMenu
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =========================Enter the Number corresponding========================
ECHO ==============================to the base you want=============================
GOTO :EOF
:drawExtMenu
ECHO ===============================ISO Format Select===============================
ECHO.
ECHO 1. WBFS
ECHO 2. ISO
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =========================Enter the Number corresponding========================
ECHO ============================to the filetype you want===========================
GOTO :EOF
:drawMainMenu
IF "!base.%base.selected%:~0,3!"=="EUR" (SET R=P)
IF "!base.%base.selected%:~0,3!"=="JPN" (SET R=J)
IF "!base.%base.selected%:~0,3!"=="USA" (SET R=E)
IF "!base.%base.selected%:~0,3!"=="TWN" (SET R=W)
IF "!base.%base.selected%:~0,3!"=="KOR" (SET R=K)
IF "!R!"=="E" SET CC=US
IF "!R!"=="J" SET CC=JP
IF "!R!"=="P" SET CC=EU
IF "!R!"=="W" SET CC=TW
IF "!R!"=="K" SET CC=KR
ECHO ================================Review Settings================================
ECHO Selected NSMBW Mod: !mod.%mod.selected%.modName!
ECHO Selected Base Version: !base.%base.selected%! ^(!base.%base.selected%.fileName!^)
ECHO Selected Output filetype: !ext!
IF NOT "%saveType%"=="3" CALL :selectSlot %saveType%
ECHO Selected Save Slot ^(ID6^): !ID6:~0,3!!R!!ID6:~4,2!
IF "%bannerDl%"=="1" (ECHO Download Custom Banner: Yes) ELSE ECHO Download Custom Banner: No
IF "%bannerUse%"=="1" (ECHO Use Banner: Custom) ELSE ECHO Use Banner: Default
ECHO ===============================================================================
ECHO 1. Yes, continue
ECHO -- No, change settings --
ECHO 2. Change Mod
ECHO 3. Change Base
ECHO 4. Change Filetype
ECHO 5. Change ID6
ECHO 6. Change Banner Options
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =============================Is this selection okay?===========================
GOTO :EOF
:drawModMenu
ECHO ================================NSMBW Mod Select===============================
ECHO.
CALL :parseModMenu
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =========================Enter the Number corresponding========================
ECHO ==============================to the Mod you want==============================
GOTO :EOF
:drawSlotMenu
IF "!base.%base.selected%:~0,3!"=="EUR" (SET R=P)
IF "!base.%base.selected%:~0,3!"=="JPN" (SET R=J)
IF "!base.%base.selected%:~0,3!"=="USA" (SET R=E)
IF "!base.%base.selected%:~0,3!"=="TWN" (SET R=W)
IF "!base.%base.selected%:~0,3!"=="KOR" (SET R=K)
IF "!R!"=="E" SET CC=US
IF "!R!"=="J" SET CC=JP
IF "!R!"=="P" SET CC=EU
IF "!R!"=="W" SET CC=TW
IF "!R!"=="K" SET CC=KR
ECHO ================================Save Slot Select===============================
ECHO.
ECHO 1. Default Save Slot ^(!mod.%mod.selected%.gameID:.=%R%!^)
ECHO 2. Custom Save Slot ^(K!mod.%mod.selected%.gameID:~1,2!!R!!mod.%mod.selected%.gameID:~4,2!^)
ECHO 3. Manual Save Slot ^( Typed^)
IF DEFINED mod.%mod.selected%.altID ECHO 4. Alternate Save Slot ^(!mod.%mod.selected%.altID:.=%R%!^)
ECHO X. Exit %prog% %ver%
ECHO.
ECHO =========================Enter the Number corresponding========================
ECHO ==============================to the Slot you want=============================
GOTO :EOF
:ENDLOCAL
ENDLOCAL
PAUSE
GOTO :EOF
:fetchAllValues
FOR /F "tokens=1,* delims==" %%b IN (plugins\!mod.%~1.fileName!.%modExt%) DO SET mod.%1.%%b=%%~c
GOTO :EOF
:fetchValue
SETLOCAL
FOR /F "tokens=1,* delims==" %%b IN (plugins\!mod.%~1.fileName!.%modExt%) DO IF /I "%%b"=="%~2" SET P=%%~c
ENDLOCAL&SET mod.%~1.%~2=%P%
GOTO :EOF
:installMod
SETLOCAL
CALL :fetchValue %1 ZIP&CALL :fetchValue %1 ZIPFolder
IF NOT EXIST "!mod.%1.ZIP!" ECHO Downloading !mod.%1.ZIP!, please wait...&support\wget !mod.%1.URL! -O "!mod.%1.ZIP!" --no-check-certificate 2>nul
TITLE %prog% %ver%&ECHO Extracting !mod.%1.ZIP!&FOR /F "tokens=*" %%a IN ("!mod.%1.ZIP!") DO if "%%~xa"==".rar" ( support\unrar x -y "%%a" >nul ) ELSE ( support\7za x -y "%%a" >nul )
IF EXIST "!mod.%1.ZIPFolder!" (ECHO Putting the files where they go...&XCOPY "!mod.%1.ZIPFolder!riivolution\*.*" "riivolution\" /S/Y/Q >nul&XCOPY "!mod.%1.ZIPFolder!!mod.%1.folder!\*.*" "!mod.%1.folder!\" /S/Y/Q >nul&RD /S/Y "!mod.%1.ZIPFolder!")
IF EXIST "!mod.%1.ZIP!" SET /P Input=Would you like to delete !mod.%1.ZIP!?&IF /I "!Input:~0,1!"=="Y" DEL "!mod.%1.ZIP!"
IF EXIST "riivolution\NewerLW.xml" FOR /F "tokens=* delims=" %%f IN ('type riivolution\NewerLW.xml') do CALL :fixNewerLW "%%f"
IF EXIST "riivolution\NewerLW-mod.xml" del riivolution\NewerLW.xml&ren riivolution\NewerLW-mod.xml NewerLW.xml
IF EXIST "riivolution\Another.xml" FOR /F "tokens=* delims=" %%f IN ('type riivolution\Another.xml') do CALL :fixAnotherSMBWPath "%%f"
IF EXIST "riivolution\Another-mod.xml" del riivolution\Another.xml&ren riivolution\Another-mod.xml Another.xml
IF EXIST "riivolution\Another.xml" ren Another\Lang\KOREAN.arc KRKOREAN.arc &ren Another\Lang\TAIWANESE.arc TWTAIWANESE.arc &ren Another\Lang\URA-JAPANESE.arc JPJAPANESE.arc
ENDLOCAL
GOTO :EOF
:loopMenu
CALL :showMenu %1 %2
IF DEFINED EXIT GOTO :EOF
IF DEFINED %~3 GOTO :EOF
GOTO :loopMenu
:parseBaseMenu
SETLOCAL
FOR %%a IN (!mod.%mod.selected%.bases!) DO (FOR /L %%b IN (1,1,%bases.count%) DO (IF "%%a"=="!base.%%b!" SET /A n=!n!+1&ECHO !n!. %%a ^(!base.%%b.fileName!^)))
ENDLOCAL
GOTO :EOF
:parseModMenu
SETLOCAL
FOR /L %%a IN (1,1,%mods.count%) DO (SET P2=%%a&SET folder=!mod.%%a.folder!&SET URL=!mod.%%a.URL!&SET modName=!mod.%%a.modName!&SET supports=(!mod.%%a.bases:,=, !^)&(IF EXIST "!folder!" (IF %%a LSS 10 (ECHO %%a. Select - !modName! !supports!) ELSE (ECHO %%a. Select - !modName! !supports!)) ELSE (IF %%a LSS 10 (ECHO %%a. Install - !modName! !supports!) ELSE (ECHO %%a. Install - !modName! !supports!)))&ECHO !URL!&ECHO.)
ENDLOCAL
GOTO :EOF
:parseLang
SETLOCAL
SET CCLanCC=%CC%\%~3%CC%
SET FULLLan=!FULL%~3!
IF "%CC%"=="JP" SET CCLanCC=%CC%
IF "%CC%"=="TW" SET CCLanCC=%CC%
IF "%CC%"=="KR" SET CCLanCC=%CC%
SET P1=%~1
SET P2=%~2
SET P1=%P1:`=^!%
SET P2=%P2:`=^!%
SET copyFiles=!copyFiles!;!P1!:!CCLanCC!\!P2!
ENDLOCAL&SET copyFiles=%copyFiles%
GOTO :EOF
:parsePreload
FOR /F "tokens=1,* delims==" %%b IN (%~1) DO (
SET /A mods.count1=!mods.count!+1&IF "%%~c"=="" (SET mod=%%b&SET mods=!mods!,%%b&SET mod.!mods.count1!.fileName=%~n1) ELSE (
IF /I "%%b"=="folder" SET mod.!mods.count1!.%%b=%%~c
IF /I "%%b"=="modName" SET mod.!mods.count1!.%%b=%%~c
IF /I "%%b"=="supports" (
IF DEFINED mods.count1 SET mod.!mods.count1!.supports=%%c&SET mod.!mods.count1!.active=
FOR %%d IN (%%~c) DO IF DEFINED base.%%d.count CALL :parseSupports %%d
IF DEFINED mod.!mods.count1!.bases SET /A mods.count=!mods.count!+1&SET mods.active=!mods.active!,!mod!&CALL :stripComma mod.!mods.count!.bases
)
IF /I "%%b"=="URL" SET mod.!mods.count!.%%b=%%~c
)
)
SET mods.count1=&SET mod=
GOTO :EOF
:parseSupports
IF DEFINED base.%~1.count (SET /A mod.%mods.count1%.bases.count=!mod.%mods.count1%.bases.count!+1&SET /A base.%~1.count=!base.%~1.count!+1&SET mod.%mods.count1%.%~1=1&SET mod.!mods.count1!.bases=!mod.%mods.count1%.bases!,%~1) ELSE (SET mod.!mods.count1!.%~1=)
GOTO :EOF
:patch
SETLOCAL
IF DEFINED mod.%mod.selected%.patch SET patchFiles=xml=../patch/!mod.%mod.selected%.patch!.xml !patchFiles!
IF DEFINED XML (
FOR /F "tokens=* delims=" %%f IN ('type riivolution\%XML%.xml') do CALL :doReplace "%%f"
IF EXIST "riivolution\PranksterComets.xml" FOR /F "tokens=* delims=" %%f IN ('type riivolution\PranksterComets.xml') do CALL :fixPranksterComets "%%f"
IF EXIST "USAv1\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\JP" & RD /Q /S "!base.%base.selected%!\files\EU"
IF EXIST "USAv2\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\JP" & RD /Q /S "!base.%base.selected%!\files\EU"
IF EXIST "EURv1\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\JP" & RD /Q /S "!base.%base.selected%!\files\EU"
IF EXIST "EURv2\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\JP" & RD /Q /S "!base.%base.selected%!\files\EU"
IF EXIST "JPNv1\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\US" & RD /Q /S "!base.%base.selected%!\files\EU"
IF EXIST "JPNv2\PranksterComets-mod.xml" RD /Q /S "!base.%base.selected%!\files\US" & RD /Q /S "!base.%base.selected%!\files\EU"
SET patchFiles=xml=../!base.%base.selected%!/%XML%-mod.xml -s ../!mod.%mod.selected%.folder!/ !patchFiles!
)
IF DEFINED mod.%mod.selected%.savePatch SET patchFiles=!patchFiles! 802F148C=!mod.%mod.selected%.savePatch! 802F118C=!mod.%mod.selected%.savePatch! 802F0FAC=!mod.%mod.selected%.savePatch! 802F17CC=!mod.%mod.selected%.savePatch!
IF DEFINED base.%base.selected% support\wit dolpatch !base.%base.selected%!/sys/main.dol -q %patchFiles%
ENDLOCAL
GOTO :EOF
:preloadMods
FOR %%a IN (plugins\*.%modExt%) DO CALL :parsePreload %%a
IF NOT DEFINED mods SET EXIT=1&ECHO No mod plugins found, exiting...>&2&GOTO :EOF
IF NOT DEFINED mods.active SET EXIT=1&ECHO Couldn't find any mods compatible with your base image(s), exiting...>&2&GOTO :EOF
CALL :stripComma mods&CALL :stripComma mods.active
GOTO :EOF
:rebuild
SETLOCAL
SET mod.%mod.selected%.gameID=!mod.%mod.selected%.gameID:.=%R%!
SET ID6=!ID6:.=%R%!
SET base=!base.%base.selected%!
::Custom .bnr download, repository provided by AbdallahTerro
IF "%bannerDl%"=="1" ECHO Downloading custom banner...&support\wget http://dl.dropboxusercontent.com/u/101209384/!mod.%mod.selected%.gameID:.=%R%!.bnr -O banners/!mod.%mod.selected%.gameID!.bnr>nul 2>&1
IF "%bannerUse%"=="1" (
ECHO Searching for and copying custom banner over original...
IF EXIST banners\!mod.%mod.selected%.gameID!.bnr (
ECHO Custom banner found.
ECHO.
ECHO Checking banner file for empty 0 byte file corruption made by wget 404 error...
for %%x in ("banners\!mod.%mod.selected%.gameID!.bnr") do IF %%~zx equ 0 (
ECHO.
ECHO Banner !mod.%mod.selected%.gameID!.bnr is empty 0 byte file, deleting...
ECHO Original game's banner will be used instead.
del banners\!mod.%mod.selected%.gameID!.bnr
) ELSE (
ECHO Does not seem to be an empty 0 byte file, continuing...
copy banners\!mod.%mod.selected%.gameID!.bnr !base.%base.selected%!\files\opening.bnr >nul
)
) ELSE (
ECHO Custom Banner not found, using original game's banner instead...
)
)
IF NOT EXIST "%ext%\" MD "%ext%"
IF /I "%ext%"=="ISO" (
CALL SET DESTPATH=!mod.%mod.selected%.modName! !mod.%mod.selected%.gameID! %base% [%ID6%].%ext%
)
IF /I "%ext%"=="WBFS" (
CALL SET DESTPATH=!mod.%mod.selected%.modName! [!mod.%mod.selected%.gameID!]/!mod.%mod.selected%.gameID!.%ext%
IF NOT EXIST "%ext%\!mod.%mod.selected%.modName! [!mod.%mod.selected%.gameID!]" MD "%ext%\!mod.%mod.selected%.modName! [!mod.%mod.selected%.gameID!]"
)
IF EXIST "%ext%\%DESTPATH:/=\%" SET /P YN=%ext% file already exists. Would you like to overwrite?
SET YN=%YN:~0,1%
IF /I "!YN!"=="Y" DEL "%ext%\%DESTPATH:/=\%"
IF EXIST "%ext%\%DESTPATH:/=\%" (ECHO Cancelling build...&GOTO :rebuildSkip)
ECHO.
ECHO Rebuilding NSMBW Mod [!mod.%mod.selected%.modName!] as %ext%...
support\wit Copy "!base.%base.selected%!" "%ext%/%DESTPATH%" -q --id=!mod.%mod.selected%.gameID! --tt-id=%ID6:~0,3% --name "!mod.%mod.selected%.modName!" --io %io% --trunc --common-key 0
:: clean up working directory
ECHO.
:rebuildSkip
RD /S /Q "!base.%base.selected%!"
ECHO.
ECHO =========
ECHO All done^^!
ECHO =========
ECHO.
:: wait to make errors visible
ECHO Press a key to return to menu.
PAUSE >nul
GOTO :EOF
:selectBanner
SETLOCAL
IF %1==1 SET option=bannerDl
IF %1==2 SET option=bannerUse
IF %1==3 SET option=bannerDone
IF "!%option%!"=="1" (SET n=0) ELSE SET n=1
ENDLOCAL&SET %option%=%n%
GOTO :EOF
:selectBase
SETLOCAL
FOR %%a in (!mod.%mod.selected%.bases!) DO (SET /A n=!n!+1&SET mod.%mod.selected%.base.!n!=%%a)
FOR /L %%a in (1,1,%bases.count%) DO (IF "!mod.%mod.selected%.base.%1!"=="!base.%%a!" SET n=%%a)
ENDLOCAL&SET base.selected=%n%
GOTO :EOF
:selectExt
IF %1==1 SET ext=WBFS&SET io=%1
IF %1==2 SET ext=ISO&SET io=%1
GOTO :EOF
:selectMain
IF %1==1 CALL :continue
IF %1==2 SET mod.selected=&CALL :loopMenu "Mod" "%mods.count%" "mod.selected"
IF %1==3 SET base.selected=&IF 0!mod.%mod.selected%.bases.count!==01 (CALL :selectBase 1) ELSE (CALL :loopMenu "Base" "!mod.%mod.selected%.bases.count!" "base.selected")
IF %1==4 SET ext=&CALL :loopMenu "Ext" "2" "ext"
IF %1==5 SET ID6=&IF DEFINED mod.%mod.selected%.altID (CALL :loopMenu "Slot" "4" "saveType") ELSE (CALL :loopMenu "Slot" "3" "saveType")
IF %1==6 SET bannerDone=&CALL :loopMenu "Banner" "3" "bannerDone"
GOTO :EOF
:selectMod
IF DEFINED mod.%mod.selected%.altID SET mod.%mod.selected%.altID=
IF DEFINED mod.%mod.selected%.gameID SET mod.%mod.selected%.gameID=
SETLOCAL
IF NOT EXIST "!mod.%1.folder!" CALL :installMod %1
IF EXIST "!mod.%1.folder!" SET n=%1
ENDLOCAL&SET mod.selected=%n%
IF DEFINED mod.selected IF EXIST "!mod.%mod.selected%.folder!" CALL :fetchValue %mod.selected% altID&CALL :fetchValue %mod.selected% gameID&IF "!mod.%mod.selected%.bases.count!"=="1" (CALL :selectBase 1&GOTO :EOF) ELSE (FOR %%a IN (!mod.%mod.selected%.bases!) DO IF "%%a"=="!base.%base.selected%!" GOTO :EOF)
IF DEFINED mod.selected IF EXIST "!mod.%mod.selected%.folder!" CALL :loopMenu "Base" "!mod.%mod.selected%.bases.count!" "base.selected"
GOTO :EOF
:selectSlot
SETLOCAL
IF %1==1 SET ID6=!mod.%mod.selected%.gameID!
IF %1==2 SET ID6=K!mod.%mod.selected%.gameID:~1,5!
IF %1==3 SET /P ID6=What is your selection?
IF %1==4 SET ID6=!mod.%mod.selected%.altID!
SET ID6=!ID6:~0,3!.!ID6:~4,2!
ENDLOCAL&SET ID6=%ID6%&SET saveType=%1
GOTO :EOF
:showMenu
CLS&CALL :draw%~1Menu
SET Input=&SET /P Input=Enter Number and press Enter:
IF "%Input%"=="" GOTO :showMenu
IF /I "%Input%"=="X" SET Input=&SET EXIT=1&GOTO :EOF
IF %Input% LEQ 0 GOTO :showMenu
IF %Input% GTR %~2 GOTO :showMenu
SET Input=&CALL :select%~1 %Input%
GOTO :EOF
:start
CALL :checkBaseImages
IF DEFINED EXIT GOTO :ENDLOCAL
CALL :preloadMods
IF DEFINED EXIT GOTO :ENDLOCAL
CALL :loopMenu "Mod" "%mods.count%" "mod.selected"
IF DEFINED EXIT GOTO :ENDLOCAL
CALL :loopMenu "Ext" "2" "ext"
IF DEFINED EXIT GOTO :ENDLOCAL
IF DEFINED mod.%mod.selected%.altID (CALL :loopMenu "Slot" "4" "saveType") ELSE (CALL :loopMenu "Slot" "3" "saveType")
IF DEFINED EXIT GOTO :ENDLOCAL
CALL :loopMenu "Banner" "3" "bannerDone"
IF DEFINED EXIT GOTO :ENDLOCAL
CALL :loopMenu "Main" "6" "EXIT"
IF DEFINED EXIT GOTO :ENDLOCAL
GOTO :ENDLOCAL
:stripComma
SETLOCAL
SET P=!%1!&IF "!P:~0,1!"=="," SET P=!P:~1!
ENDLOCAL&SET %1=%P%
GOTO :EOF