Advertisement
SmartGenius

Prisoner Of Dark (Batch Game)

Jul 6th, 2012
1,444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.22 KB | None | 0 0
  1. ::Prisioner Of Dark
  2. ::Date: 27/11/2010
  3. ::Author: Germaniac
  4. ::Graphic.exe and Kbd.exe files are part of the utilities Adbat 1.1 by Carlitos
  5.  
  6. @echo off
  7. setlocal enableextensions enabledelayedexpansion
  8. if "%~1"=="/i" (goto :init) else (
  9. start "Prisioner Of Dark" /high "%comspec%" /q /d /c "%~0" /i
  10. exit /b 0
  11. )
  12.  
  13. :init
  14. chcp 1252 >nul
  15. set "gpc=%~dps0graphic.exe"
  16. set "kbd=%~dps0kbd.exe"
  17. for %%i in (gpc kbd) do if not exist !%%i! (
  18. echo.Need Graphic.exe and Kbd.exe files in the current folder for play.
  19. set /p "=Press any key to exit . . . " <nul
  20. pause >nul
  21. goto :eof
  22. )
  23. %gpc% hidecursor
  24.  
  25. :reset
  26. cls
  27. color 0c
  28. set "time="
  29. set "errorlevel="
  30. set "clr.1=b"
  31. set "up="
  32. set "down="
  33. set "left="
  34. set /a "clr.2=clr.3=lives=3,select=next=world=1,score=0,worlds=5"
  35. set "file=%tmp%\%random%.tmp"
  36. copy nul + nul "%file%" >nul 2>nul
  37. for /f %%i in (%file%) do set "right=%%i"
  38. del "%file%" >nul 2>nul
  39. set "key=^!errorlevel^!"
  40. set "opt.1=%right%"
  41. set "opt.2= "
  42. set "opt.3= "
  43. echo.
  44. echo. ÛÛÛÜ ÜÛÛÜ ÛÛÛÜ
  45. echo. Û Û ÛÜÜÜ ß ÜÛÛÜ ß ÜÛÛÜ ÛÜÜÜ ÜÛÛÜ ÛÜÜÜ Û Û ÛÜÜÜ Û Û ßßßßÛ ÛÜÜÜ Û Û
  46. echo. ÛÛÛß Û ß Û ÛÜÜ Û Û Û Û Û Û Û Û ß Û Û ÛÜÜ Û Û ÛßßßÛ Û ß Û Û
  47. echo. Û Û Û ßßÛ Û Û Û Û Û Ûßßß Û Û Û Û Û Û Û Û Û ÛßßÛ
  48. echo. Û Û Û ßÛÛß Û ßÛÛß Û Û ßÛÛß Û ßÛÛß Û ÛÛÛß ßßßßÛ Û Û Û
  49. echo.
  50. call :main 1 7 "Play " Exit
  51. if %select% equ 1 goto :start
  52. if %select% equ 2 call :info
  53. if %select% equ 3 goto :eof
  54. goto :reset
  55.  
  56. :main
  57. %gpc% locate %~1 %~2
  58. %gpc% printcolor c "ÉÍ"
  59. %gpc% printcolor f "Menu"
  60. %gpc% /r printcolor c "ÍÍÍÍÍÍÍÍ»\10\ º º\10\ º "
  61. %gpc% printcolor %clr.1% "%opt.1% %~3"
  62. %gpc% /r printcolor c " º\10\ º "
  63. %gpc% printcolor %clr.2% "%opt.2% Controls"
  64. %gpc% /r printcolor c " º\10\ º "
  65. %gpc% printcolor %clr.3% "%opt.3% %~4"
  66. %gpc% /r printcolornl c " º\10\ ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ"
  67. %kbd%
  68. if %key% equ 13 goto :eof
  69. if %key% equ 72 set /a "next=(select-1%%3)"
  70. if %key% equ 80 set /a "next=(select%%3)+1"
  71. if %next% equ 0 set "next=3"
  72. set "opt.%select%= "
  73. set "opt.%next%=%right%"
  74. set "clr.%select%=3"
  75. set "clr.%next%=b"
  76. set "select=%next%"
  77. goto :main
  78.  
  79. :info
  80. cls
  81. color 07
  82. echo.
  83. %gpc% printcolornl b " Action: Arrow Keys:"
  84. echo.
  85. echo. Move player to left %left%
  86. echo. Move player to right %right%
  87. echo. Jump to left %up% %left%
  88. echo. Jump to right %up% %right%
  89. echo. Long jump to left %up% %up% %left%
  90. echo. Long jump to right %up% %up% %right%
  91. echo. Decrease jump height %down%
  92. echo. Pause game Enter/Esc
  93. echo.
  94. set /p "=ÿPress any key to return . . . " <nul
  95. pause >nul
  96. goto :eof
  97.  
  98. :start
  99. color 07
  100. call :load || goto :reset
  101. call :graphic
  102.  
  103. :play
  104. call :timeCnt
  105. call :gravity player
  106. call :enemies
  107. if !finish! gtr 0 goto :finish
  108. %kbd% 1
  109. if %key% equ 72 call :jump
  110. if %key% equ 75 call :move -
  111. if %key% equ 77 call :move +
  112. if %key% equ 13 goto :pause
  113. if %key% equ 27 goto :pause
  114. goto :play
  115.  
  116. :gravity
  117. if !finish! gtr 0 goto :eof
  118. call :getXY %1.pos
  119. set /a "n=l+1"
  120. if !n! gtr !map.row! goto :eof
  121. call :moveChk %n% %c% %1 gravity || goto :eof
  122. call :graphic
  123. call :gravity %1
  124. goto :eof
  125.  
  126. :move
  127. if !finish! gtr 0 goto :eof
  128. call :getXY player.pos
  129. set /a "n=c%11,i=map.col-view.max-view.min,j=view.max/2,k=n-(map.col-(view.max-j))"
  130. if !n! gtr !map.col! goto :eof
  131. if !n! lss 1 goto :eof
  132. call :moveChk %l% %n% player || goto :eof
  133. if !n! gtr !j! (
  134. if !i! gtr 0 (
  135. set /a "view.min%1=1"
  136. ) else if !k! lss 1 if !view.min! gtr 0 set /a "view.min-=1"
  137. ) else if !view.min! gtr 0 set /a "view.min-=1"
  138. call :graphic
  139. goto :eof
  140.  
  141. :jump
  142. set "course="
  143. set /a "jump=1,count=0,height=3"
  144. set /p "=ÿJump : %up%"<nul
  145.  
  146. :jumpCnt
  147. %kbd% 1
  148. if %key% equ 72 set /a "jump+=1" & set /p "=%up%" <nul
  149. if %key% equ 75 set "course=-" & set /p "=%left%" <nul
  150. if %key% equ 77 set "course=+" & set /p "=%right%" <nul
  151. if %key% equ 80 set /a "height-=1" & set /p "=%down%" <nul
  152. if %key% equ 0 set /a "count+=1"
  153. if %count% equ 35 cd.|more & exit /b 0
  154. if !jump! leq 2 if not defined course goto :jumpCnt
  155. cd.|more
  156. for /l %%i in (1,1,!height!) do (
  157. if !finish! gtr 0 goto :eof
  158. call :getXY player.pos
  159. set /a "n=l-1"
  160. if !n! geq 1 call :moveChk !n! !c! player && call :graphic
  161. )
  162. if defined course for /l %%i in (1,1,%jump%) do call :move !course!
  163. goto :eof
  164.  
  165. :enemies
  166. if not defined enemies.pos goto :eof
  167. set "enemies="
  168. set /a "view.pos=view.max+view.min+1"
  169. for %%i in (%enemies.pos%) do (
  170. if !finish! gtr 0 goto :eof
  171. set "enemy.pos=%%i"
  172. call :getXY enemy.pos
  173. call :gravity enemy
  174. if !c! geq !view.min! if !c! leq !view.pos! (
  175. set /a "rnd=!random!%%3"
  176. if !rnd! equ 0 set /a "n=c-1"
  177. if !rnd! equ 1 set /a "n=c+1"
  178. if !rnd! equ 2 (
  179. set /a "rnd=!random!%%2"
  180. for /l %%i in (0,1,!rnd!) do (
  181. call :getXY enemy.pos
  182. set /a "n=l-1"
  183. if !n! geq 1 call :moveChk !n! !c! enemy && call :graphic
  184. )
  185. set /a "rnd=!random!%%3"
  186. call :getXY enemy.pos
  187. if !rnd! equ 0 set /a "n=c-1"
  188. if !rnd! equ 1 set /a "n=c+1"
  189. )
  190. if !n! leq !map.col! if !n! geq 1 if !rnd! lss 2 call :moveChk !l! !n! enemy && call :graphic
  191. call :gravity enemy
  192. )
  193. set "enemies=!enemies!,!enemy.pos!"
  194. )
  195. set "enemies.pos=%enemies%,"
  196. goto :eof
  197.  
  198. :moveChk
  199. set /a "col=%2-1"
  200. set "chr=!m[%1]:~%col%,1!"
  201. if "!chr!"=="!border!" exit /b 1
  202. if "%3"=="player" (
  203. if "!chr!"=="!coin!" set /a "score+=1" & set "chr=!ground!"
  204. if "!chr!"=="!live!" set /a "lives+=1" & set "chr=!ground!"
  205. if "!chr!"=="!exit!" set "finish=1"
  206. if "!chr!"=="!pick!" if !lives! gtr 0 (set /a "lives-=1,finish=3") else set "finish=2"
  207. if "!chr!"=="!enemy!" if "%4"=="gravity" (
  208. set /a "score+=5"
  209. set "enemies.pos=!enemies.pos:,%1.%2,=,!"
  210. set "chr=!ground!"
  211. ) else if !lives! gtr 0 (set /a "lives-=1,finish=3") else set "finish=2"
  212. )
  213. if "%3"=="enemy" (
  214. if "!chr!"=="!player!" if !lives! gtr 0 (set /a "lives-=1,finish=3") else set "finish=2"
  215. if "!chr!"=="!enemy!" exit /b 1
  216. if "!chr!"=="!pick!" exit /b 1
  217. if "!chr!"=="!exit!" exit /b 1
  218. )
  219. call :chrRplc %l% %c% last[!%3.pos!]
  220. set "last[%1.%2]=!chr!"
  221. call :chrRplc %1 %2 %3
  222. set "%3.pos=%1.%2"
  223. exit /b 0
  224.  
  225. :finish
  226. %kbd% 1
  227. if %key% neq 0 goto :finish
  228. set "return=start"
  229. echo.
  230. if !finish! equ 1 %gpc% printcolor b " World completed." & set /a "world+=1"
  231. if !finish! equ 2 %gpc% printcolor b " Game over." & set "return=reset"
  232. if !finish! equ 3 %gpc% printcolor b " World is over."
  233. if !finish! equ 4 %gpc% printcolor b " Time is over."
  234. if %world% gtr %worlds% %gpc% /r printcolor c "\10\10\ Game Over"
  235. echo.
  236. echo.
  237. set /p "=ÿPress enter to continue . . . " <nul
  238.  
  239. :enter
  240. %kbd%
  241. if %key% neq 13 goto :enter
  242. goto :%return%
  243.  
  244. :graphic
  245. %gpc% locate 0 0
  246. echo.
  247. for /l %%i in (1,1,%map.row%) do echo. !m[%%i]:~%view.min%,%view.max%!
  248. echo.
  249. echo. World : %world%
  250. echo. Lives : %lives%
  251. echo. Score : %score%
  252. echo. Time : %time.sec%
  253. goto :eof
  254.  
  255. :pause
  256. color 08
  257. call :main 1 1 Continue Quit
  258. if %select% equ 2 call :info
  259. if %select% equ 3 goto :reset
  260. call :equTime "%time.end%" "%time%" sec
  261. set /a "secons+=sec%%86400"
  262. cls
  263. color 07
  264. call :graphic
  265. goto :play
  266.  
  267. :load
  268. cls
  269. set /p "=Loading" <nul
  270. set "border=Û"
  271. set "ground= "
  272. set "player="
  273. set "enemy="
  274. set "coin=›"
  275. set "exit=°"
  276. set "live="
  277. set "pick="
  278. set /a "map.col=map.row=view.max=view.min=finish=0,secons=100"
  279. for /f "delims==" %%i in ('"set m[ 2>nul|findstr /r "m\[[0-9]*\]=""') do set "%%i="
  280. set /p "=." <nul
  281. if %world% lss 1 set /a "world=1"
  282. call :world_%world% 2>nul || exit /b 1
  283. for /f %%i in ('"set m[ 2>nul|findstr /r "m\[[0-9]*\]=""') do set /a "map.row+=1"
  284. set /p "=." <nul
  285. if %map.row% equ 0 exit /b 1
  286. call :strLen m[1] map.col
  287. if !view.max! lss 1 set /a "view.max=map.col"
  288. if !view.max! gtr %map.col% set /a "view.max=map.col"
  289. set /p "=." <nul
  290. call :getPstn player player.pos
  291. call :getPstn enemy enemies.pos
  292. call :strLen secons secons.len
  293. set "time.ini=%time%"
  294. call :time
  295. cls
  296. exit /b 0
  297.  
  298. :strLen
  299. set "str=!%~1!"
  300. set "%~2=0"
  301. :strLen.loop
  302. if not defined str goto :eof
  303. set /a "%~2+=1"
  304. set "str=!str:~1!"
  305. goto :strLen.loop
  306.  
  307. :getPstn
  308. set "%2="
  309. for /f "tokens=2 delims=[]" %%i in ('"set m[ 2>nul|findstr /r "m\[[0-9]*\]="|find "!%1!""') do (
  310. for %%j in (%%i) do for /l %%k in (0,1,%map.col%) do if "!m[%%j]:~%%k,1!"=="!%1!" (
  311. set /a "col=%%k+1"
  312. set "%2=!%2!,%%j.!col!"
  313. set "last[%%j.!col!]=!ground!"
  314. )
  315. )
  316. if defined %2 set "%2=!%2:~1!"
  317. goto :eof
  318.  
  319. :getXY
  320. for /f "tokens=1,2 delims=." %%x in ("!%1!") do set /a "l=%%x,c=%%y"
  321. goto :eof
  322.  
  323. :chrRplc
  324. set /a "col=%2-1"
  325. set "m[%1]=!m[%1]:~0,%col%!!%3!!m[%1]:~%2!"
  326. goto :eof
  327.  
  328. :timeCnt
  329. call :time
  330. call :strLen time.sec time.len
  331. set /a "time.len+=1"
  332. set /a "time.pst=map.row+5"
  333. %gpc% locate 9 %time.pst%
  334. for /l %%i in (%time.len%,1,%secons.len%) do set "time.sec=0!time.sec!"
  335. echo.%time.sec%
  336. goto :eof
  337.  
  338. :time
  339. set "time.end=%time%"
  340. call :equTime "%time.ini%" "%time.end%" sec
  341. set /a "time.sec=secons-(sec%%86400)"
  342. if !time.sec! lss 1 if !lives! gtr 0 (set /a "lives-=1,finish=4") else set "finish=2"
  343. goto :eof
  344.  
  345. :equTime
  346. setlocal enableextensions
  347. for /f "tokens=1-3 delims=;,:. " %%i in ("%~1") do (
  348. for /f "tokens=1-3 delims=;,:. " %%l in ("%~2") do (
  349. set /a "h1=%%i,m1=1%%j-100,s1=1%%k-100,h2=%%l,m2=1%%m-100,s2=1%%n-100"))
  350. if %h2% gtr %h1% (set /a "h=h2-h1") else set /a "h=24-h1+h2"
  351. if %m2% gtr %m1% (set /a "m=m2-m1") else set /a "h-=1,m=60-m1+m2"
  352. if %s2% geq %s1% (set /a "s=s2-s1") else set /a "m-=1,s=60-s1+s2"
  353. endlocal & set /a "%~3=(%h%*3600)+(%m%*60)+%s%"
  354. goto :eof
  355.  
  356. :world_1
  357. set "m[1]= ú ú ú ú ú"
  358. set "m[2]= ú ú "
  359. set "m[3]= ú ú ú ú"
  360. set "m[4]= ››› ›› "
  361. set "m[5]= ›› ÛÛ "
  362. set "m[6]= ÛÛÛÛÛ "
  363. set "m[7]= ÛÛ ÛÛÛ "
  364. set "m[8]= ÛÛ Û °"
  365. set "m[9]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
  366. set /a "view.max=10"
  367. exit /b 0
  368.  
  369. :world_2
  370. set "m[1]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
  371. set "m[2]=Û Û"
  372. set "m[3]=Û ›› ››› ›› Û"
  373. set "m[4]=Û ÛÛ ÛÛ  °"
  374. set "m[5]=Û ÛÛÛÛßÛÛÛÛ ÛÛÛÛÛÛÛ"
  375. set "m[6]=Û ÛÛ Û ›› Û Û"
  376. set "m[7]=Û ÛÛ ÛÛ ÛÛÛÛÛÛ ÛßÛ"
  377. set "m[8]=Û    ÛÛ"
  378. set "m[9]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
  379. set /a "view.max=10"
  380. exit /b 0
  381.  
  382. :world_3
  383. set "m[1]= › › › "
  384. set "m[2]= › ›  "
  385. set "m[3]= ÛÛÛÛÛÛÛ ÛÛ ÛÛÛÛ  Û °"
  386. set "m[4]= Û ÛÛÛÛÛ Û ÛßÛÛ"
  387. set "m[5]= ÛßÛßÛßÛ Û  ››  Û Û Û Û Û Û "
  388. set "m[6]=  Û ÛÛÛÛÛÛÛ Û Û›Û › "
  389. set "m[7]= Û Û Û›Û Û  › "
  390. set "m[8]= Û ›››Û ÛÛÛ › "
  391. set "m[9]= Û ÛÛÛÛÛ "
  392. set "m[10]=     "
  393. set "m[11]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
  394. set /a "secons=150,view.max=15"
  395. exit /b 0
  396.  
  397. :world_4
  398. set "m[1]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ú ú ú ú "
  399. set "m[2]=Û  ÛÛ Û Û "
  400. set "m[3]=Û ÛÛÛÛ ÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛ Û Û Û Û ú ú "
  401. set "m[4]=Û ÛÛ Û Û Û Û Û ú ú"
  402. set "m[5]=ÛÛÛÛ Û ÛÛÛÛ Û Û Û Û › › ÛÛÛÛÛÛÛÛÛÛ ú °° ú "
  403. set "m[6]=Û Û Û ÛÛ Û › › › Û  °° "
  404. set "m[7]=Û ÛÛ ÛÛ ÛÛ  Û ÛÛÛÛÛÛÛÛÛÛÛ Û ›› ÛÛÛÛ ››"
  405. set "m[8]=Û ››› ÛÛÛÛÛÛÛÛÛ › › › Û Û Û "
  406. set "m[9]=Û › › › ÛÛ Û Û "
  407. set "m[10]=Û         ÛÛÛ "
  408. set "m[11]=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
  409. set /a "secons=200,view.max=10"
  410. exit /b 0
  411.  
  412. :world_5
  413. set "border=Í"
  414. set "ground=²"
  415. set "m[1]=ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
  416. set "m[2]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  417. set "m[3]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  418. set "m[4]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  419. set "m[5]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  420. set "m[6]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  421. set "m[7]=²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²"
  422. set "m[8]=²²²²²²²²²²²²²²²²²²²²²²°"
  423. set "m[9]=ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
  424. set /a "view.max=10"
  425. exit /b 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement