Crawl merge tool


If it doesn't fit anywhere else, it belongs here. Also, come here if you just need to get hammered.

User avatar

Blades Runner

Posts: 624

Joined: Saturday, 18th December 2010, 04:50

Post Monday, 24th June 2013, 14:36

Crawl merge tool

If you like to play the latest version of trunk offline like me, you've probably noticed how frequently trunk is updated. Moving over your saves, morgues, settings, and (if you have them) custom vaults can get annoying when you have to do it almost every time you want to play.

That's why I wrote this script to automate the process of moving player-generated data (morgues/saves/settings etc.) across versions. I figured I'd share it, in case it could be of help to someone else. If you saw my other thread entitled "/saves?", please know that I've fixed this and it copies save data correctly.

  Code:
@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
:main
set olversion=0.0
set oldebuild=0000
set neversion=0.0
set nedebuild=0000
set /p olversion= <cm_olversion.dat
set /p oldebuild= <cm_oldebuild.dat
set /p neversion= <cm_neversion.dat
set /p nedebuild= <cm_nedebuild.dat
:mainh
cls
echo Crawl merge tool - coded by Laraso
echo.
echo FROM: crawl_tiles-%olversion%-a0-%oldebuild%
echo   TO: crawl_tiles-%neversion%-a0-%nedebuild%
echo.
echo --------------------------
echo (a) Begin merge
echo.
echo (b) Edit FROM version
echo (c) Edit FROM build
echo.
echo (d) Edit TO version
echo (e) Edit TO build
echo --------------------------
goto commandline
:commandline
echo.
set /p command="Enter a command: "
goto commands
:commands
if %command%==/disableextensions (
   SETLOCAL DISABLEEXTENSIONS
   echo.
   echo Extensions disabled.
   goto commandline
)
if %command%==/disabledelayedexpansion (
   SETLOCAL DISABLEDELAYEDEXPANSION
   echo.
   echo Delayed expansion disabled.
   goto commandline
)
if %command%==/enableextensions (
   SETLOCAL ENABLEEXTENSIONS
   echo.
   echo Extensions enabled.
   goto commandline
)
if %command%==/enabledelayedexpansion (
   SETLOCAL ENABLEDELAYEDEXPANSION
   echo.
   echo Delayed expansion enabled.
   goto commandline
)
if %command%==/exit exit
if %command%==/close exit
if %command%==/cls (
   cls
   goto commandline
)
if %command%==/help goto help
if %command%==/about goto help
if %command%==/commands goto commands
if %command%==/command goto commands
if %command%==/list goto commands
if %command%==a goto merge
if %command%==b goto editolversion
if %command%==c goto editoldebuild
if %command%==d goto editneversion
if %command%==e goto editnedebuild
cls
echo ERROR: Command not recognized
echo.
pause
goto mainh
:editolversion
cls
echo Current FROM version is %olversion%
echo.
set /p olversion= "Change to: "
echo %olversion%> cm_olversion.dat
cls
echo FROM version changed to %olversion%
echo.
pause
goto main
:editoldebuild
cls
echo Current FROM build is %oldebuild%
echo.
set /p oldebuild= "Change to: "
echo %oldebuild%> cm_oldebuild.dat
cls
echo FROM build changed to %oldebuild%
echo.
pause
goto main
:editneversion
cls
echo Current TO version is %neversion%
echo.
set /p neversion= "Change to: "
echo %neversion%> cm_neversion.dat
cls
echo TO version changed to %neversion%
echo.
pause
goto main
:editnedebuild
cls
echo Current TO build is %nedebuild%
echo.
set /p nedebuild= "Change to: "
echo %nedebuild%> cm_nedebuild.dat
cls
echo TO build changed to %oldebuild%
echo.
pause
goto main
:merge
set trans=empty
cls
echo Progress:
echo.
echo = Transfer "\dolls.txt"
echo - Transfer "\settings\init.txt"
echo - Transfer "\morgue\"
echo - Transfer "\saves\"
echo - Transfer vaults
echo ----------------------------------------------
echo.
echo Transfer "\dolls.txt"? (y/n)
set /p trans= "> "
if %trans%==y (
   echo.
   xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\dolls.txt crawl_tiles-%neversion%-a0-%nedebuild%
   echo.
   echo * Transfer completed! Press any key to continue.
   pause > cm_temp.dat
   del cm_temp.dat
   goto merge2
)
if %trans%==n goto merge2
cls
echo ERROR: Command not recognized
echo.
pause
goto merge
:merge2
cls
set trans=empty
echo Progress:
echo.
echo * Transfer "\dolls.txt"
echo = Transfer "\settings\init.txt"
echo - Transfer "\morgue\"
echo - Transfer "\saves\"
echo - Transfer vaults
echo ----------------------------------------------
echo.
echo Transfer "\settings\init.txt"? (y/n)
set /p trans= "> "
if %trans%==y (
   echo.
   xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\settings\init.txt crawl_tiles-%neversion%-a0-%nedebuild%\settings\
   echo.
   echo * Transfer completed! Press any key to continue.
   pause > cm_temp.dat
   del cm_temp.dat
   goto merge3
)
if %trans%==n goto merge3
cls
echo ERROR: Command not recognized
echo.
pause
goto merge2
:merge3
cls
set trans=empty
echo Progress:
echo.
echo * Transfer "\dolls.txt"
echo * Transfer "\settings\init.txt"
echo = Transfer "\morgue\"
echo - Transfer "\saves\"
echo - Transfer vaults
echo ----------------------------------------------
echo.
echo Transfer "\morgue\"? (y/n)
set /p trans= "> "
if %trans%==y (
   echo.
   mkdir crawl_tiles-%neversion%-a0-%nedebuild%\morgue
   xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\morgue crawl_tiles-%neversion%-a0-%nedebuild%\morgue
   echo.
   echo * Transfer completed! Press any key to continue.
   pause > cm_temp.dat
   del cm_temp.dat
   goto merge4
)
if %trans%==n goto merge4
cls
echo ERROR: Command not recognized
echo.
pause
goto merge3
:merge4
cls
set trans=empty
echo Progress:
echo.
echo * Transfer "\dolls.txt"
echo * Transfer "\settings\init.txt"
echo * Transfer "\morgue\"
echo = Transfer "\saves\"
echo - Transfer vaults
echo ----------------------------------------------
echo.
echo Transfer "\saves\"? (y/n)
set /p trans= "> "
if %trans%==y (
   echo.
   mkdir crawl_tiles-%neversion%-a0-%nedebuild%\saves
   mkdir crawl_tiles-%neversion%-a0-%nedebuild%\saves\sprint
   mkdir crawl_tiles-%neversion%-a0-%nedebuild%\saves\zotdef
   xcopy /Y /K /R /H /F crawl_tiles-%olversion%-a0-%oldebuild%\saves crawl_tiles-%neversion%-a0-%nedebuild%\saves
   xcopy /Y /K /R /H /F crawl_tiles-%olversion%-a0-%oldebuild%\saves\sprint crawl_tiles-%neversion%-a0-%nedebuild%\saves\sprint
   xcopy /Y /K /R /H /F crawl_tiles-%olversion%-a0-%oldebuild%\saves\zotdef crawl_tiles-%neversion%-a0-%nedebuild%\saves\zotdef
   echo.
   echo * Transfer completed! Press any key to continue.
   pause > cm_temp.dat
   del cm_temp.dat
   goto merge5
)
if %trans%==n goto merge5
cls
echo ERROR: Command not recognized
echo.
pause
goto merge4
:merge5
cls
set trans=empty
echo Progress:
echo.
echo * Transfer "\dolls.txt"
echo * Transfer "\settings\init.txt"
echo * Transfer "\morgue\"
echo * Transfer "\saves\"
echo = Transfer vaults
echo ----------------------------------------------
echo.
echo Transfer all vaults? (y/n)
set /p trans= "> "
if %trans%==y (
   echo.
   xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\dat\des crawl_tiles-%neversion%-a0-%nedebuild%\dat\des
   xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\dat\dlua\loadmaps.lua crawl_tiles-%neversion%-a0-%nedebuild%\dat\dlua
   echo.
   echo * Transfer completed! Press any key to continue.
   pause > cm_temp.dat
   del cm_temp.dat
   goto main
)
if %trans%==n (
   set ftime=1
   goto mergevc
)
cls
echo ERROR: Command not recognized
echo.
pause
goto merge5
:mergevc
set trans=empty
cls
set trans=empty
echo Progress:
echo.
echo * Transfer "\dolls.txt"
echo * Transfer "\settings\init.txt"
echo * Transfer "\morgue\"
echo * Transfer "\saves\"
echo = Transfer vaults
echo ----------------------------------------------
echo.
if %ftime%==1 echo Transfer individual vaults? (y/n)
if %ftime%==0 echo Transfer additional vaults? (y/n)
set /p trans= "> "
if %trans%==y goto mergev
if %trans%==n goto main
cls
echo ERROR: Command not recognized
echo.
pause
goto mergevc
:mergev
cls
set ftime=0
set trans=empty
echo (a) altar
echo (b) branches
echo (c) builder
echo (d) entry
echo (e) portals
echo (f) serial
echo (g) sprint
echo (h) traps
echo (i) tutorial
echo (j) variable
echo (k) zotdef
echo ---------------
set /p vaultt= "Vault type: "
if %vaultt%==a (
   set vaultt=altar
   goto mergev2
)
if %vaultt%==b (
   set vaultt=branches
   goto mergev2
)
if %vaultt%==c (
   set vaultt=builder
   goto mergev2
)
if %vaultt%==d (
   set vaultt=entry
   goto mergev2
)
if %vaultt%==e (
   set vaultt=portals
   goto mergev2
)
if %vaultt%==f (
   set vaultt=serial
   goto mergev2
)
if %vaultt%==g (
   set vaultt=sprint
   goto mergev2
)
if %vaultt%==h (
   set vaultt=traps
   goto mergev2
)
if %vaultt%==i (
   set vaultt=tutorial
   goto mergev2
)
if %vaultt%==j (
   set vaultt=variable
   goto mergev2
)
if %vaultt%==k (
   set vaultt=zotdef
   goto mergev2
)
cls
echo ERROR: Command not recognized
echo.
pause
goto mergev2
:mergev2
echo.
set /p vaultn= "File name: "
echo.
xcopy /Y /K /R /H /F /E crawl_tiles-%olversion%-a0-%oldebuild%\dat\des\%vaultt%\%vaultn%.des crawl_tiles-%neversion%-a0-%nedebuild%\dat\des\%vaultt%
echo dgn.load_des_file('des/%vaultt%/%vaultn%.des') >> crawl_tiles-%neversion%-a0-%nedebuild%\dat\dlua\loadmaps.lua
echo.
echo * Transfer completed! Press any key to continue.
pause > cm_temp.dat
del cm_temp.dat
goto mergevc
:help
cls
echo About: Crawl Merger
echo.
echo * Crawl merger is a program designed to transfer player-generated data from an
echo   older version of devCrawl to a newer version.
echo.
echo * This program was written by Laraso.
echo.
echo * This program uses these data files to save settings.
echo       - cm_olversion.dat
echo       - cm_oldebuild.dat
echo       - cm_neversion.dat
echo       - cm_nedebuild.dat
echo.
echo * Version 1.0
echo.
pause
goto mainh
:commands
cls
echo About: Commands
echo.
echo             disableextensions = Disables extensions.
echo       disabledelayedexpansion = Disables delayed expansion.
echo              enableextensions = Enables extensions.
echo        enabledelayedexpansion = Enables delayed expansion.
echo.
echo                          exit = Closes the program.
echo                         close = Closes the program.
echo.
echo                           cls = Clears the screen.
echo.
echo                       command = Displays this command menu.
echo                      commands = Displays this command menu.
echo                          list = Displays this command menu.
echo.
echo                          help = Displays help menu.
echo                         about = Displays help menu.
echo.
pause
goto mainh


If you want to use it, copy the text from the code box above and paste it into notepad, and then save it as crawlmerge.bat. To use it, put this script and the two versions of Crawl you want to merge into an empty folder, and then run this script.

Dungeon Master

Posts: 1531

Joined: Saturday, 5th March 2011, 06:29

Post Monday, 24th June 2013, 14:50

Re: Crawl merge tool

You can just install into the same folder as last time. Or set the user directory to something outside of the crawl folder altogether.
User avatar

Blades Runner

Posts: 624

Joined: Saturday, 18th December 2010, 04:50

Post Monday, 24th June 2013, 15:11

Re: Crawl merge tool

mumra wrote:You can just install into the same folder as last time. Or set the user directory to something outside of the crawl folder altogether.


I've tried installing into the same folder, but it breaks the game whenever I do. Crashes on startup.

How do I change the user directory for crawl? I didn't know that was possible.

Dungeon Master

Posts: 1531

Joined: Saturday, 5th March 2011, 06:29

Post Monday, 24th June 2013, 17:40

Re: Crawl merge tool

Laraso wrote:I've tried installing into the same folder, but it breaks the game whenever I do. Crashes on startup.


- Are you using installer, or zip file version?

- Are you installing to a non-standard location? (i.e. not in Program Files)

There's a known problem on some versions of Windows where the game will crash on startup sometimes but it should eventually start if you try a few times, but this could be something different. Technically this should work fine.

Laraso wrote:How do I change the user directory for crawl? I didn't know that was possible.


Well you shouldn't need to change it if we can get the crashing fixed, but you can set morgue_dir and save_dir in your init.txt.

Vaults Vanquisher

Posts: 508

Joined: Sunday, 16th June 2013, 14:01

Post Friday, 28th June 2013, 15:55

Re: Crawl merge tool

I've been copying my old folder and pasting it into my new one freshly downloaded one, then merging folders and skipping any clashing files but only really to keep my high scores although it seems to work for saves, note that I use downloaded zip files.
User avatar

Blades Runner

Posts: 624

Joined: Saturday, 18th December 2010, 04:50

Post Friday, 28th June 2013, 16:02

Re: Crawl merge tool

1010011010 wrote:I've been copying my old folder and pasting it into my new one freshly downloaded one, then merging folders and skipping any clashing files but only really to keep my high scores although it seems to work for saves, note that I use downloaded zip files.


If all you want to do is keep your high scores, just copy the scores file located in the /saves directory. That's way simpler than copying the entire crawl folder.

I personally don't like doing things that way, which was why I made that script. (Although now that I think about it, it's closer to being a program than a simple script) It copies only what I specifically want to copy, in as little as five key presses. If I happen to have custom vaults, I just tell it the name of the vault and it automatically copies it and adds it to loadmaps.lua. I personally find that the simplest and most effective way of transferring data between versions.

Return to Crazy Yiuf's Corner

Who is online

Users browsing this forum: No registered users and 96 guests

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.