Subversion Repositories nw_plus

Rev

Rev 70 | Rev 73 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. @echo off
  2. color 0C
  3. setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
  4. pushd "%~dp0"
  5. set startdir=%cd%
  6.  
  7. :restart
  8. title Duke: Nuclear Winter Plus Launcher
  9. if "%editor%"=="1" title Duke: Nuclear Winter Plus Editor Launcher
  10.  
  11. set exedir=%startdir%
  12. set addondir=%startdir%
  13. set addonhrpdir=%startdir%
  14.  
  15. set exename=eduke32
  16. set exeproper=EDuke32
  17. set action=playing
  18.  
  19. if "%editor%"=="1" (
  20. set exename=mapster32
  21. set exeproper=Mapster32
  22. set action=editing
  23. )
  24.  
  25. set addonver=r005
  26.  
  27. :title
  28. echo                          ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  29. echo                          º Duke: Nuclear Winter Plus º
  30. echo                          ÈÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍͼ
  31. echo                               ³ By Hendricks266 ³
  32. echo                               ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  33. echo.
  34. echo You are %action% Simply Silly Software's Duke: Nuclear Winter with the various
  35. echo enhancements of Duke: Nuclear Winter Plus, maintained by Hendricks266.
  36. echo.
  37.  
  38.  
  39. if "%xxx%"=="1" echo Using XXX mode.
  40. if "%dp%"=="1" echo Using Duke Plus by DeeperThought.
  41. if "%debug%"=="1" echo Using debug mode.
  42.  
  43. if "%debug%"=="1" echo DEBUG: Command Line Input: %*
  44.  
  45. :recheck
  46. if not exist %exename%.exe goto execheck
  47. :execheck_done
  48. set exedir=%cd%
  49. if "%debug%"=="1" echo DEBUG: %exeproper% Directory: "%exedir%"
  50.  
  51. if not exist nw_plus\ goto nodir
  52. if not exist duke3d.grp echo Warning: You don't have Duke3D.grp in your directory.
  53.  
  54. if exist nwinter\ set addonhrpdir=%cd%
  55. :addondircheck
  56.  
  57. chdir nw_plus
  58. set addondir=%cd%
  59. if exist nwinter\ set addonhrpdir=%cd%
  60. if exist nw_plus\ goto addondircheck
  61. if "%debug%"=="1" echo DEBUG: NW+ Directory: "%addondir%".
  62. if "%debug%"=="1" echo DEBUG: NWHRP Directory: "%addonhrpdir%".
  63.  
  64. set kextract=%addondir%\utils\windows\win32\kextract.exe
  65. if "%debug%"=="1" set kextract=%addondir%\utils\windows\win32\kextract.debug.exe
  66. set bspatch=%addondir%\utils\windows\win32\bspatch.exe
  67. set sha1sum=%addondir%\utils\windows\win32\sha1sum.exe
  68.  
  69. if "%nwgrpname%"=="" set nwgrpname=nwinter.grp
  70. if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" if exist "%exedir%\nwinter_demo.grp" set nwgrpname=nwinter_demo.grp
  71. if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" if exist "%addondir%\nwinter_demo.grp" set nwgrpname=nwinter_demo.grp
  72. if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" goto nonwgrp
  73.  
  74. if exist nwinter.grp ren nwinter.grp nwinter.grp
  75. call :grpchecksum
  76. :nonwgrp_return
  77. if not "%version%"=="demo" (
  78. if not exist nwl1.map goto mapextract
  79. if not exist nwl2.map goto mapextract
  80. if not exist nwl3.map goto mapextract
  81. if not exist nwl4.map goto mapextract
  82. if not exist nwl5.map goto mapextract
  83. if not exist nwl6.map goto mapextract
  84. if not exist nwl7.map goto mapextract
  85. if not exist nwl8.map goto mapextract
  86. if not exist nwflag_%addonver%.h266 goto updateextract
  87. )
  88.  
  89.  
  90.  
  91.  
  92. chdir /d "%exedir%"
  93. echo.
  94. echo To switch your character, open the console (~) and type one of the following:
  95. echo Duke: "setvar skin 0".
  96. echo Santa: "setvar skin 1".
  97. echo.
  98. echo.
  99. echo.
  100. echo.
  101. echo.
  102. echo.
  103.  
  104. :init
  105. pause
  106. echo.
  107. goto check
  108.  
  109. :check
  110.  
  111. echo.
  112. echo Launching Duke Nukem 3D . . .
  113. echo Thanks for %action%!
  114. echo.
  115.  
  116. if "%editor%"=="1" (
  117. type "%exedir%\names.h" > "%exedir%\NWNames.h"
  118. echo. >> "%exedir%\NWNames.h"
  119. type "%addondir%\NWNames.def" >> "%exedir%\NWNames.h"
  120. )
  121.  
  122. :arguments
  123. set args=
  124. if exist "%exedir%\HRP\" set args=%args% -jHRP
  125. if exist "%exedir%\polymer_hrp\" set args=%args% -jpolymer_hrp
  126. if exist "%exedir%\duke3d_voxel.zip" set args=%args% -gduke3d_voxel.zip
  127. if exist "%exedir%\duke3d_hrp.zip" set args=%args% -gduke3d_hrp.zip
  128. if exist "%exedir%\hrp_update.zip" set args=%args% -ghrp_update.zip
  129. if exist "%exedir%\maphacks.zip" set args=%args% -gmaphacks.zip
  130. if exist "%exedir%\eduke32_mus.zip" set args=%args% -geduke32_mus.zip
  131. if exist "%addondir%" if not "%addondir%"=="%exedir%" set args=%args% -j"%addondir:\=/%"
  132. if exist "%addonhrpdir%" if not "%addonhrpdir%"=="%exedir%" if not "%addonhrpdir%"=="%addondir%" set args=%args% -j"%addonhrpdir:\=/%"
  133. set args=%args% -g%nwgrpname% -hnwinter.def -xNWEDuke.con
  134. if "%editor%"=="1" set args=%args% -namesfile NWNames.h
  135. if "%dp%"=="1" set args=%args% -hnw_dp.def -xNWDP.con
  136. if "%xxx%"=="1" if exist "%exedir%\xxx_lite.zip" set args=%args% -gxxx_lite.zip
  137. if "%xxx%"=="1" if exist "%exedir%\xxx_lite\" set args=%args% -jxxx_lite
  138. if "%xxx%"=="1" if exist "%exedir%\xxx_pack.zip" set args=%args% -gxxx_pack.zip
  139. if "%xxx%"=="1" if exist "%exedir%\xxx_pack\" set args=%args% -jxxx_pack
  140. if "%xxx%"=="1" set args=%args% -hnw_xxx.def
  141. if "%xxx%"=="1" if "%dp%"=="1" set args=%args% -hnw_dp_xxx.def -xNWDPXXX.con
  142. set args=%args% %*
  143. if "%dp%"=="1" set args=%args% -jDukePlus
  144.  
  145. set exe=%exename%
  146. if "%debug%"=="1" set exe=%exename%.debug
  147.  
  148. if exist %exe%.bat (
  149. if "%debug%"=="1" echo DEBUG: Final Command Line: call %exe%.bat %args%
  150. call %exe%.bat %args%
  151. ) else (
  152. if "%debug%"=="1" echo DEBUG: Final Command Line: start %exe%.exe %args%
  153. start %exe%.exe %args%
  154. )
  155.  
  156. set svnpath=0
  157. if "%svnpath%"=="0" if exist "%startdir%\svn\bin\svn.exe" set svnpath=%startdir%\svn\bin
  158. if "%svnpath%"=="0" if exist "%exedir%\svn\bin\svn.exe" set svnpath=%exedir%\svn\bin
  159. if "%svnpath%"=="0" if exist "%ProgramFiles%\SlikSvn\bin\svn.exe" set svnpath=%ProgramFiles%\SlikSvn\bin
  160. if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\SlikSvn\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\SlikSvn\bin
  161. if "%svnpath%"=="0" if exist "%ProgramFiles%\Subversion\bin\svn.exe" set svnpath=%ProgramFiles%\Subversion\bin
  162. if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\Subversion\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\Subversion\bin
  163. if "%svnpath%"=="0" if exist "%ProgramFiles%\TortoiseSVN\bin\svn.exe" set svnpath=%ProgramFiles%\TortoiseSVN\bin
  164. if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\TortoiseSVN\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\TortoiseSVN\bin
  165. if "%svnpath%"=="0" for %%S in (svn.exe) do if exist "%%~dp$PATH:S" set svnpath=%%~dp$PATH:S
  166.  
  167. chdir /d "%addondir%"
  168. if not "%svnpath%"=="0" call :svn_action
  169. chdir /d "%addonhrpdir%"
  170. if not "%svnpath%"=="0" call :svn_action
  171.  
  172. goto end
  173.  
  174. :svn_action
  175. set PATH=%PATH%;%svnpath%
  176. for /f "delims=" %%a in ('svnversion.exe .') do @set oldrev=%%a
  177. if "%oldrev%"=="exported" goto :eof
  178. if "%oldrev%"=="Unversioned directory" goto :eof
  179. "svn.exe" update
  180. for /f "delims=" %%a in ('svnversion.exe .') do @set rev=%%a
  181. set oldrev=%oldrev:M=%
  182. set oldrev=%oldrev:S=%
  183. set oldrev=%oldrev:P=%
  184. set rev=%rev:M=%
  185. set rev=%rev:S=%
  186. set rev=%rev:P=%
  187. if %rev% EQU %oldrev% goto :eof
  188. set /a oldrev=%oldrev% + 1
  189. echo.
  190. "svn.exe" log -r %oldrev%:%rev%
  191. echo.
  192. pause
  193. goto :eof
  194.  
  195. :nonwgrp
  196. set megaton=Steam\SteamApps\common\Duke Nukem 3D\gameroot\addons\nwinter.grp
  197. if exist "%ProgramFiles%\%megaton%" copy "%ProgramFiles%\%megaton%" .\ && call :conprotect && goto nonwgrp_done
  198. if exist "%ProgramFiles(x86)%\%megaton%" copy "%ProgramFiles(x86)%\%megaton%" .\ && call :conprotect && goto nonwgrp_done
  199. echo.
  200. echo Error: You don't have NWINTER.GRP in your directory.
  201.  
  202.  
  203. :retry
  204. echo.
  205. set cddrive=
  206. set /p cddrive=What is the drive letter that your Nuclear Winter CD is in?
  207. echo.
  208. if not '%cddrive%'=='' set cddrive=%cddrive:~0,1%
  209. if '%cddrive%'=='' goto cdno
  210. if not exist %cddrive%:\ goto cdno
  211. if not exist %cddrive%:\* goto cdno
  212. if exist %cddrive%:\GAMEDATA\NWINTER.GRP copy %cddrive%:\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
  213. if exist %cddrive%:\NWINTER\GAMEDATA\NWINTER.GRP copy %cddrive%:\NWINTER\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
  214. if exist %cddrive%:\NW\GAMEDATA\NWINTER.GRP copy %cddrive%:\NW\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
  215. goto cdwrong
  216.  
  217. :nonwgrp_done
  218. echo.
  219. if exist nwinter.grp (
  220. type NWINTRO.TXT
  221. echo.
  222. pause
  223. call :grpchecksum
  224. call :grpchecksum_results
  225. goto nonwgrp_return
  226. )
  227. if not exist nwinter.grp (
  228. echo Installation Error!
  229. echo Contact Hendricks266 for help.
  230. echo.
  231. pause
  232. goto end
  233. )
  234.  
  235. :grpchecksum
  236. if not exist "%sha1sum%" (
  237. echo "%sha1sum%" not found.
  238. goto :eof
  239. )
  240. pushd .
  241. if exist "%addondir%\%nwgrpname%" chdir /d %addondir%
  242. if exist "%exedir%\%nwgrpname%" chdir /d %exedir%
  243. echo a6728f621f121f9db02ee67c39efdbb5eea95711 *%nwgrpname% | "%sha1sum%" --status --check -
  244. if "%ERRORLEVEL%"=="0" set version=full && popd && goto :eof
  245. if "%ERRORLEVEL%"=="1" echo 1b33b2cbb7101b5b18b15855392f55575413ecc3 *%nwgrpname% | "%sha1sum%" --status --check -
  246. if "%ERRORLEVEL%"=="0" set version=demo && popd && goto :eof
  247. if "%ERRORLEVEL%"=="1" set version=unknown
  248. popd
  249. goto :eof
  250.  
  251. :grpchecksum_results
  252. if "%version%"=="full" echo NWINTER.GRP checksum verified.
  253. if "%version%"=="demo" echo NWINTER.GRP (demo version) checksum verified.
  254. if "%version%"=="unknown" echo NWINTER.GRP checksum does not match. You may have a bad copy.
  255. echo.
  256. goto :eof
  257.  
  258. :cdno
  259. echo '%cddrive%' is not valid.  Please try again.
  260. goto retry
  261.  
  262. :cdwrong
  263. echo '%cddrive%' is not the correct disc.  Please try again.
  264. goto retry
  265.  
  266. :mapextract
  267. echo Extracted maps not found or patched. Proceeding to installation.
  268. goto extract
  269.  
  270. :updateextract
  271. echo Map patch update required. Proceeding to installation.
  272. goto extract
  273.  
  274. :extract
  275. echo.
  276. echo                                ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  277. echo                                º Installation º
  278. echo                                ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  279. echo.
  280. call :grpchecksum
  281. call :grpchecksum_results
  282. if not exist nwl1.patch goto nopatch
  283. if not exist nwl2.patch goto nopatch
  284. if not exist nwl3.patch goto nopatch
  285. if not exist nwl4.patch goto nopatch
  286. if not exist nwl5.patch goto nopatch
  287. if not exist nwl6.patch goto nopatch
  288. if not exist nwl7.patch goto nopatch
  289. if not exist nwl8.patch goto nopatch
  290. mkdir nw_preserve
  291. if exist nwl*.map move /y nwl*.map nw_preserve\
  292. if exist "%exedir%\nwl*.map" move /y "%exedir%\nwl*.map" nw_preserve\
  293. :: TODO: eliminate the need for the if exist checks; tighten up path handling
  294. set grp=nwinter.grp
  295. if exist "%addondir%\%nwgrpname%" set grp=%addondir%\%nwgrpname%
  296. if exist "%exedir%\%nwgrpname%" set grp=%exedir%\%nwgrpname%
  297. "%kextract%" "%grp%" E2L*.MAP
  298. ren E2L1.MAP nwl1.map
  299. ren E2L2.MAP nwl2.map
  300. ren E2L3.MAP nwl3.map
  301. ren E2L4.MAP nwl4.map
  302. ren E2L5.MAP nwl5.map
  303. ren E2L6.MAP nwl6.map
  304. ren E2L7.MAP nwl7.map
  305. ren E2L8.MAP nwl8.map
  306. if exist nwpatch*.h266 del /f /q nwpatch*.h266
  307. if exist nwflag*.h266 del /f /q nwflag*.h266
  308. echo.
  309. echo Map patching will now begin.
  310. echo.
  311. pause
  312. echo
  313. "%bspatch%" nwl1.map nwl1.map nwl1.patch
  314. "%bspatch%" nwl2.map nwl2.map nwl2.patch
  315. "%bspatch%" nwl3.map nwl3.map nwl3.patch
  316. "%bspatch%" nwl4.map nwl4.map nwl4.patch
  317. "%bspatch%" nwl5.map nwl5.map nwl5.patch
  318. "%bspatch%" nwl6.map nwl6.map nwl6.patch
  319. "%bspatch%" nwl7.map nwl7.map nwl7.patch
  320. "%bspatch%" nwl8.map nwl8.map nwl8.patch
  321. if exist nwpatch*.h266 del /f /q nwpatch*.h266
  322. if exist nwflag*.h266 del /f /q nwflag*.h266
  323. echo Do not delete this file! You will be forced to reinstall NW+ and repatch the maps. >nwflag_%addonver%.h266
  324. attrib +r nwflag_%addonver%.h266
  325. echo.
  326. echo Patching complete!
  327. :scanning
  328. chdir "%exedir%"
  329. echo.
  330. echo Scanning directory for potential problems.
  331. if exist nwl1.mhk goto mhkfound
  332. if exist nwl1demo.mhk goto mhkfound
  333. if exist nwl2.mhk goto mhkfound
  334. if exist nwl3.mhk goto mhkfound
  335. if exist nwl4.mhk goto mhkfound
  336. if exist nwl5.mhk goto mhkfound
  337. if exist nwl6.mhk goto mhkfound
  338. if exist nwl7.mhk goto mhkfound
  339. if exist nwl8.mhk goto mhkfound
  340. if exist _nwzoo.mhk goto mhkfound
  341. :mhkfound_done
  342. if exist TILES005.ART goto artfound
  343. if exist TILES006.ART goto artfound
  344. if exist TILES007.ART goto artfound
  345. if exist TILES008.ART goto artfound
  346. if exist TILES009.ART goto artfound
  347. if exist TILES012.ART goto artfound
  348. if exist TILES013.ART goto artfound
  349. if exist TILES014.ART goto artfound
  350. if exist TILES015.ART goto artfound
  351. :artfound_done
  352. call :checksum c6b8ca33ea6a2ec46b8dfeca4f9a3d5e078d0789 NWACTOR.CON "NWINTER file detected and neutralized:"
  353. call :checksum fdb91aa2912f16232ed9020a7d8ec35834ef58c8 NWDEFS.CON "NWINTER file detected and neutralized:"
  354. call :checksum 2bb2ddc7319e0935569b724f3c67cb953fdb79d6 NWINTER.CON "NWINTER file detected and neutralized:"
  355. call :checksum 5ae347733be1f87f35d1930186de1ed764f4682f NWSNOW.CON "NWINTER file detected and neutralized:"
  356. call :checksum 5df8b3b4216dcfdb8bc0adf6241f8a893eacfd98 NWUSER.CON "NWINTER file detected and neutralized:"
  357. if exist NWinter.con goto confound
  358. if exist NWActor.con goto confound
  359. if exist NWDefs.con goto confound
  360. if exist NWDP.con goto confound
  361. if exist NWDPCode.con goto confound
  362. if exist NWDPXXX.con goto confound
  363. if exist NWEDuke.con goto confound
  364. if exist NWSnow.con goto confound
  365. if exist NWUser.con goto confound
  366. :confound_done
  367. call :conprotect
  368. chdir /d "%addondir%"
  369. echo.
  370. pause
  371. goto restart
  372.  
  373. :conprotect
  374. pushd "%exedir%"
  375. if not exist GAME.CON "%kextract%" DUKE3D.GRP GAME.CON
  376. if not exist DEFS.CON "%kextract%" DUKE3D.GRP DEFS.CON
  377. if not exist USER.CON "%kextract%" DUKE3D.GRP USER.CON
  378. popd
  379. goto :eof
  380.  
  381. :checksum
  382. if not exist "%sha1sum%" (
  383. echo "%sha1sum%" not found.
  384. goto :eof
  385. )
  386. if not exist "%~2" goto :eof
  387. echo %~1 *%~2 | "%sha1sum%" --status --check -
  388. if "%ERRORLEVEL%"=="0" (
  389. ren "%~2" "NWOld_%addonver%_%~nx2"
  390. echo %~3 %~nx2
  391. )
  392. goto :eof
  393.  
  394. :nopatch
  395. echo.
  396. echo Error: You don't have all the *.patch files in your directory.
  397. echo Aborting installation.
  398. echo Map patching is required for NW+ to function correctly.
  399. echo.
  400. pause
  401. goto end
  402.  
  403. :mhkfound
  404. echo.
  405. echo Problematic .mhk files have been found in your directory.
  406. echo Unless you have knowingly made a modification to NW's map hacks,
  407. echo the presence of these files in your %exeproper% directory will
  408. echo cause NW+ to function incorrectly.
  409. echo.
  410. echo nwl1.mhk
  411. echo nwl1demo.mhk
  412. echo nwl2.mhk
  413. echo nwl3.mhk
  414. echo nwl4.mhk
  415. echo nwl5.mhk
  416. echo nwl6.mhk
  417. echo nwl7.mhk
  418. echo nwl8.mhk
  419. echo _nwzoo.mhk
  420. goto mhkfound_done
  421.  
  422. :artfound
  423. echo.
  424. echo Problematic .art files have been found in your directory.
  425. echo Unless you have knowingly made a modification to NW's art,
  426. echo the presence of these files in your %exeproper% directory will
  427. echo cause NW+ to function incorrectly.
  428. echo.
  429. echo TILES005.ART
  430. echo TILES006.ART
  431. echo TILES007.ART
  432. echo TILES008.ART
  433. echo TILES009.ART
  434. echo TILES012.ART
  435. echo TILES013.ART
  436. echo TILES014.ART
  437. echo TILES015.ART
  438. goto artfound_done
  439.  
  440. :confound
  441. echo.
  442. echo Problematic .con files have been found in your directory.
  443. echo Unless you have knowingly made a modification to NW's programming,
  444. echo the presence of these files in your %exeproper% directory will
  445. echo cause NW+ to function incorrectly.
  446. echo.
  447. echo NWinter.con
  448. echo NWEDuke.con
  449. echo NWDefs.con
  450. echo NWUser.con
  451. echo NWDP.con
  452. echo NWDPCode.con
  453. echo NWDPXXX.con
  454. echo NWActor.con
  455. echo NWSnow.con
  456. echo.
  457. echo IF THESE ARE THE ORIGINAL NUCLEAR WINTER CON FILES, OR THEY COME FROM
  458. echo AN OUTDATED VERSION OF NW+, REMOVE THEM FROM YOUR %exeproper% DIRECTORY
  459. echo IMMEDIATELY!
  460. echo NW+ uses modified .con files to fix programming errors created by
  461. echo the original programmers. Due to improvements made to the levels,
  462. echo NW+ will have major errors if the included .con files are not used.
  463. goto confound_done
  464.  
  465. :execheck
  466. if exist %exename%.bat goto execheck_done
  467. if exist %exename%.exe goto recheck
  468. set prevdir=%cd%
  469. if not "%cd%"=="%cd:~0,3%" chdir ..
  470. if not "%cd%"=="%prevdir%" goto execheck
  471. echo Warning: You don't have %exeproper% in your directory.
  472. chdir /d "%startdir%"
  473. goto execheck_done
  474.  
  475. :nodir
  476. echo.
  477. echo Error: "nw_plus" data directory not found.
  478. echo Aborting launch.
  479. echo.
  480. pause
  481. goto end
  482.  
  483. :end
  484. if "%debug%"=="1" echo.
  485. if "%debug%"=="1" pause
  486. echo.
  487. popd
  488. endlocal
  489. title %ComSpec%
  490. color 07
  491.