Advertisement
Guest User

DOS BATCH RAYCAST 0.5.3 by einstein1969

a guest
Apr 3rd, 2016
2,186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 17.57 KB | None | 0 0
  1. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. ::
  3. :: Dos Batch Raycast ver. 0.5.3 BETA  by Francesco Poscetti aka einstein1969
  4. ::
  5. ::--------------------------------------------------------------------------
  6. ::
  7. :: Ref: http://www.dostips.com/forum/viewtopic.php?f=3&t=5824
  8. ::
  9. :: Thanks to Aacini, foxidrive, dbenham, penpen, jeb, neorobin, Liviu, aGerman
  10. ::
  11. :: Tested on Windows 7
  12. ::
  13. :: Changelog
  14. ::
  15. :: ver. 0.5.3   2016-04-03 einstein1969
  16. ::  - Disabled parallel processing for a cuncurrent access problem see:
  17. ::    http://www.dostips.com/forum/viewtopic.php?f=3&t=7053
  18. ::
  19. :: ver. 0.5.2   2016-03-22 einstein1969
  20. ::  - Add new SIN(x) calculus using Aacini method. Improved speed (~20%)
  21. ::
  22. :: ver. 0.5.1   2015-10-17 einstein1969
  23. ::  - Add choice emulation. Now it should run on XP platform. Not tested.
  24. ::
  25. :: ver. 0.5.0   2015-10-16 einstein1969
  26. ::  - Implemented DDA algorithm. Improved speed (~40%)
  27. ::  - Moved output of execution time on title + Add FPS counter.
  28. ::  - "H" now display Help.
  29. ::  - "M" now toggle the view of the Map
  30. ::  - Improved speed by clear the environment + other optimization (~10-15% on reference system)
  31. ::  - Map more readable.
  32. ::  - revert "reduce CALLs and rearrange code to minimize CALL distance" for easy code develop. TODO later. See ver. 0.4.x
  33. ::  - revert fast 3D clipping
  34. ::
  35. :: ver. 0.4.1   2015-08-30  dbenham
  36. ::  - Limit number of processes to maximum of 8
  37. ::  - Move Transpose inside of :raycast
  38. ::  - Optionally use Aacini's CursorPos.exe to eliminate screen flicker
  39. ::    Implementation is the same as for SNAKE.BAT
  40. ::    Code is available at http://goo.gl/hr6Kkn
  41. ::
  42. :: ver. 0.4     2015-08-30  dbenham
  43. ::  - Many minor optimizations:
  44. ::      - consolidate and minimize SET /A statements
  45. ::      - main loop is now an endless FOR /L loop running in a child process
  46. ::      - reduce CALLs and rearrange code to minimize CALL distance
  47. ::      - remove dynamic title
  48. ::  - Nearly instantaneous drawing of 2D map
  49. ::  - Player character now indicates orientation
  50. ::  - Implemented parallel processing of ray cast partitions based on NUMBER_OF_PROCESSORS
  51. ::  - "Z" now toggles between Old and New rendering algorithm
  52. ::  - "Q" quits the program
  53. ::  - New (fast) rendering now 2-3 times faster on quad-core machine (4-5 frames per second)
  54. ::  - Old (slow) rendering now 4+ times faster on quad-core machine  (1-2 frames per second)
  55. ::
  56. :: ver. 0.3     jeb  2015-08-25
  57. ::  - Improved speed by inlining the Sinus calculation (~15% on reference system)
  58. ::  - Improved speed by direct calculating the next gridX/Y coordinates (~60%)
  59. ::
  60. :: ver. 0.2     20/08/2015
  61. ::  - Not clear the screen until next.
  62. ::  - Added moviment on left/ritgh and key "K" "L" for rotate.
  63. ::  - Fixed bug on calculate distance
  64. ::  - Added partial clipping on Z (Distance)
  65. ::
  66. :: ver. 0.1     04/07/2015
  67. ::  - New faster algorithm. Not optimizated for now.
  68. ::  - Use transpose trick of penpen
  69. ::  - Use new set of character for better visualize and fast antialiasing.
  70. ::  - Detect when a player slamming against the wall.
  71. ::  - You can use WASD for move!
  72. ::  - You can view the player in the MAP.
  73. ::  - You can modify the MAP more easily.
  74. ::
  75. :: Ver. 0.01b   10/08/2014
  76. ::  - Added temporary dir and use swapout mechanism for manage env.
  77. ::
  78. :: Ver. 0.01a   09/08/2014
  79. ::  - Initial version + some fixes
  80. ::
  81. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  82.  
  83. @echo off
  84. :: Multithread dispatcher
  85. if "%~1" neq "" goto %1
  86.  
  87. setlocal EnableDelayedExpansion
  88.  
  89. :: Initialize some stuff...
  90. call :Init
  91.  
  92. :: Load the Map grid. 1/2=wall ./0=empty 9=player position
  93.  
  94. Set /A MapsizeX=33, MapsizeY=10, y=1, MapWidth=MapsizeX+1, MapsizeX-=1
  95.  
  96. for %%D in (
  97. "1212121212...2121212121.........."
  98. "2........1...1........2..121....."
  99. "1........21212....121.1.2...2...."
  100. "2..................1..21.....1..."
  101. "1...9.........................2.."
  102. "2....1...12121................2.."
  103. "1....2...2...2.....1..11.....1..."
  104. "1....1...1...1....12..2.2...2...."
  105. "2....2...2...2........1..121....."
  106. "1212212121...1212121212.........."
  107. ) do (
  108.   set Map[!y!]=%%~D
  109.   for %%Y in (!y!) do for /L %%X in (0,1,!MapSizeX!) do (
  110.     if "!Map[%%Y]:~%%X,1!" equ "9" (
  111.       set /A nx=%%X+1
  112.       for %%Z in (!nx!) do set Map[!y!]=!Map[%%Y]:~0,%%X!.!Map[%%Y]:~%%Z!
  113.       set /A Playerx = %%X, Playery = !y!
  114.       set nx=
  115.     )
  116.   )
  117.   set /A y+=1
  118. )
  119. set y=
  120.  
  121. :: setting player position
  122. set /A Playerx*=MulPlayer, Playery*=MulPlayer, OldPlayerx=Playerx, OldPlayery=Playery
  123.  
  124. :: prepare map for draw
  125. call :prepareMap
  126.  
  127. :: Prepare for multithread engines
  128. call :InitEngines
  129.  
  130. "%COMSPEC%" /d /v:on /c "%~f0" :mainLoop
  131. exit /b
  132.  
  133. :mainLoop
  134. for /l %%. in () do (
  135.   set /a gridX=Playerx/MulPlayer, gridy=Playery/MulPlayer
  136.   for %%X in (!gridx!) do for %%Y in (!gridy!) do if "!Map[%%Y]:~%%X,1!" geq "1" (
  137.     set /A Playerx = OldPlayerx, Playery = OldPlayery
  138.     set /P ".=%BEL%"<nul
  139.   ) else (
  140.  
  141.     set /A "StepY=%SIN(x):x=!Angle! * PI / 180%, StepX=%SIN(x):x=PI_div_2-!Angle! * PI / 180%"
  142.  
  143.     call :raycast
  144.  
  145.     %= Draw Map =%
  146.     if "!SeeMap!" equ "1" (
  147.       set /a "pos=(PlayerY/MulPlayer-1)*mapWidth+PlayerX/MulPlayer, pos2=pos+1"
  148.       for /f "tokens=1-3" %%1 in ("!pos! !pos2! !Angle!") do echo !map:~0,%%1!!P%%3!!map:~%%2,-1!
  149.       set pos=&set pos2=
  150.     )
  151.  
  152.     echo PlayerX/Y:!Playerx!/!Playery! OldplayerX/Y:!oldplayerX!/!oldplayerY!%space%& rem FastRotate=!Fastrotate!
  153.     echo !method!: Angle:!Angle! GridX/Y:!gridx!/!gridy! StepX/Y=!StepX!/!StepY! wait=!wait!%space%
  154.  
  155.     set /A OldPlayerx = Playerx, OldPlayery = Playery
  156.  
  157.   )
  158.   call :choice wksladhmfzqu >nul
  159.  rem "%COMSPEC%\..\choice.exe" /N /C wksladhmfzqu >nul
  160.   if errorlevel 12 (
  161.     %= U - Redraw =%
  162.     (call )
  163.   ) else if errorlevel 11 (
  164.     %= Q - Quit =%
  165.     for /l %%N in (1 1 !childCnt!) do >"%base%%%N_job.bat.tmp" echo del "%%~f0"^&exit
  166.     ren "%base%*_job.bat.tmp" *.
  167.     for /l %%. in () do if not exist "%base%*_job.bat" del "%base%*.render"&exit
  168.   ) else if errorlevel 10 (
  169.     %= Z - Toggle oldSys =%
  170.     set /a "oldSys=^!oldSys"
  171.     if !oldSys!==0 (set "method=FAST") else set "method=SLOW"
  172.   ) else if errorlevel 9 (
  173.     %= F - Toggle Fastrotate =%
  174.     set /a "fastRotate=^!fastrotate"
  175.   ) else if errorlevel 8 (
  176.     %= M - Toggle Map =%
  177.     set /a "SeeMap=^!SeeMap"
  178.     if "!SeeMap!" equ "0" cls
  179.   ) else if errorlevel 7 (
  180.     %= H - Help =%
  181.     call :Help
  182.   ) else if errorlevel 6 (
  183.     %= D - Right =%
  184.     set /A "PlayerX-=StepY/2, PlayerY+=StepX/2"
  185.   ) else if errorlevel 5 (
  186.     %= A - Left =%
  187.     set /A "PlayerX+=StepY/2, PlayerY-=StepX/2"
  188.   ) else if errorlevel 4 (
  189.     %= L - Rotate Right =%
  190.     set /A "Angle=(Angle+15+360) %% 360" & set Rotate=Right
  191.   ) else if errorlevel 3 (
  192.     %= S - Down - Backward =%
  193.     set /A "PlayerX-=StepX/2, PlayerY-=StepY/2"
  194.   ) else if errorlevel 2 (
  195.     %= K - Rotate Left =%
  196.     set /A "Angle=(Angle-15+360) %% 360" & set Rotate=Left
  197.   ) else if errorlevel 1 (
  198.     %= W - Up - Forward =%
  199.     set /A "PlayerX+=StepX/1, PlayerY+=StepY/1"
  200.   )
  201. )
  202.  
  203.  
  204. :raycast
  205.  
  206.   :: Save start time
  207.   set "t1=!time: =0!"
  208.  
  209.   :: Create Jobs
  210.   set/A  from=Angle-32, to=Angle+32, chunk=65/proc, end=from+chunk-1
  211.   for /l %%N in (1 1 %childCnt%) do (
  212.     >"%base%%%N_job.bat.tmp" echo set /a "from=!from!, to=!end!, Angle=!Angle!, playerX=!playerX!, playerY=!playerY!"
  213.     set /a from+=chunk, end+=chunk
  214.     ren "%base%%%N_job.bat.tmp" *.
  215.   )
  216.  
  217.   :computeEngine
  218.   setlocal & ( %= For Empty Environment =%
  219.   %= Empty Environment =%
  220.   for %%v in (MaxIter1 MaxIter2 Mul1 MulPlayer base file files childCnt comspec
  221.     Angle MapSizeX MapSizeY MapWidth BEL OldPlayerX OldPlayerY TMP MM M10
  222.     cls Number_of_Processors pathext proc seemap space t1 turbo wait pathext end
  223.     formx formy grix gridy mul mulx muly chunk fastrotate dis files
  224.     P345 P0 P15 P30 P45 P60 P75 P90 P105 P120 P135 P150 P165 P180 P195 method
  225.     P210 P225 P240 P255 P270 P285 P300 P315 P330 PI PI32 PIx2 PI_div_2 SIN(x^) prompt
  226.     GridX GridY LF MAP StepX StepY oldSys
  227.   ) do set "%%v="
  228.    rem (set&pause)>con
  229.    
  230.   %computeEngineBegin%
  231.   >"%file%" (
  232.     for /L %%Z in (!from!,1,!to!) do (
  233.  
  234.       set /A "Z=%%Z, aStepY=%SIN(x):x=Z * 31416 / 180%"
  235.       set /A "aStepX=%SIN(x):x=15708-(Z * 31416 / 180)%"
  236.       set/A  "A=%Angle%, corr=%SIN(x):x=15708-(Z-A) * 31416 / 180%"
  237.  
  238.       if "%oldSys%"=="1" (
  239.  
  240.         set "BREAK="
  241.         set /A DistanceCount=%MaxIter1%, ax =PlayerX*%Mul1%, ay = PlayerY*%Mul1%
  242.  
  243.         %= Precompute how mulX/Y has to be computed =%
  244.         if !aStepX! equ 0 (
  245.           set "formX=set mul=%MaxIter1%"
  246.           set mulX=%MaxIter1%
  247.         ) else if !aStepX! GTR 0 (
  248.           set "formX=set /a mulX=(aStepX+%MM%-(ax %% %MM%))/aStepX, mul=mulX"
  249.         ) else if !aStepX! LSS 0 (
  250.           set "formX=set /a mulX=-(ax %% %MM%)/aStepX+1, mul=mulX"
  251.         )
  252.         if !aStepY! equ 0 (
  253.           set "formY="
  254.           set mulY=%MaxIter1%
  255.         ) else if !aStepY! GTR 0 (
  256.           set "formY=set /a mulY=(aStepY+%MM%-(ay %% %MM%))/aStepY"
  257.         ) else if !aStepY! LSS 0 (
  258.           set "formY=set /a mulY=-(ay %% %MM%)/aStepY+1"
  259.         )
  260.         set dis=0
  261.         for /L %%? in (1,1,20) do if not defined BREAK (
  262.           !formX!
  263.           !formY!            
  264.           if !mulX! GEQ !mulY! set /a mul=mulY
  265.           set /a ax+=aStepX*mul, ay+=aStepY*mul,dis+=mul, gridX=ax/%MM%, gridY=ay/%MM%
  266.           for /f "tokens=1,2" %%X in ("!gridX! !gridY!") do if "!Map[%%Y]:~%%X,1!" geq "1" set BREAK=true & set /a DistanceCount=dis
  267.         )
  268.      
  269.         %= Last Step =%
  270.         set "BREAK="
  271.         set /A "Zaccumul=DistanceCount*(10000/%Mul1%), ax=(ax-aStepX)*10, ay=(ay-aStepY)*10, DistanceCount=%MaxIter2%"
  272.         set dis=0
  273.         for /L %%? in (1,1,20) do if not defined BREAK (
  274.           if !aStepX! equ 0 (set mulX=90) ELSE if !aStepX! GTR 0 (
  275.             set /a "mulX=(aStepX+%M10%-(ax %% %MM%))/aStepX"
  276.           ) else (
  277.             set /a "mulX=((ax %% %M10%))/-aStepX+1"
  278.           )
  279.           if !aStepY! equ 0 (set mulY=90) ELSE if !aStepY! GTR 0 (
  280.             set /a "mulY=(aStepY+%M10%-(ay %% %M10%))/aStepY"
  281.           ) else (
  282.             set /a "mulY=((ay %% %M10%))/-aStepY+1"
  283.           )
  284.                
  285.           if !mulX! GEQ !mulY! (set /a mul=mulY) else set mul=!mulX!
  286.           set /a ax+=aStepX*mul, ay+=aStepY*mul, dis+=mul, gridX=ax/%M10%, gridY=ay/%M10%
  287.           for /f "tokens=1,2" %%X in ("!gridX! !gridY!") do if "!Map[%%Y]:~%%X,1!" geq "1" set BREAK=true & set /a DistanceCount=dis
  288.         )
  289.         for /f "tokens=1,2" %%X in ("!gridX! !gridY!") do set "C=!Map[%%Y]:~%%X,1!"
  290.         set /A "distance=350/((((DistanceCount+Zaccumul)*corr/%Mulplayer%+555)/1000)+1), len=distance*2, st=(50-len)/2"
  291.  
  292.       ) else (
  293.  
  294.         set /A $X=%PlayerX%/10000, $Y=%PlayerY%/10000
  295.  
  296.         if !aStepX! equ 0 (
  297.           set /A $tx=Dtx=100000000, $SX=0
  298.         ) else if !aStepX! lss 0 (
  299.                      set /A "$tx=($X*10000-PlayerX)*10000/aStepX, Dtx=-10000*10000/aStepX, $SX=-1"
  300.               ) else set /A "$tx=(($X+1)*10000-PlayerX)*10000/aStepX, Dtx=10000*10000/aStepX, $SX=1"
  301.         if !aStepY! equ 0 (
  302.           set /A $ty=Dty=100000000, $SY=0
  303.         ) else if !aStepY! lss 0 (
  304.                      set /A "$ty=($Y*10000-PlayerY)*10000/aStepY, Dty=-10000*10000/aStepY, $SY=-1"
  305.               ) else set /A "$ty=(($Y+1)*10000-PlayerY)*10000/aStepY, Dty=10000*10000/aStepY, $SY=1"
  306.  
  307.         set "$B=" & set /A "Distance=21*10000"
  308.  
  309.         for /L %%£ in (1,1,3) do if not defined $B for /L %%? in (1,1,7) do if not defined $B (
  310.           if !$tx! lss !$ty! (
  311.             set /A $tx+=Dtx, $X+=$SX
  312.             for /f "tokens=1,2" %%X in ("!$X! !$Y!") do if "!Map[%%Y]:~%%X,1!" geq "1" (
  313.               set /A Distance=$tx-Dtx, Side=0, $B=!Map[%%Y]:~%%X,1!
  314.             )
  315.           ) else (
  316.             set /A $ty+=Dty, $Y+=$SY
  317.             for /f "tokens=1,2" %%X in ("!$X! !$Y!") do if "!Map[%%Y]:~%%X,1!" geq "1" (
  318.               set /A Distance=$ty-Dty, Side=1, $B=!Map[%%Y]:~%%X,1!
  319.             )
  320.           )
  321.        )
  322.        if not defined $B set "$B=1"
  323.        set /A "distance=350/((((k=(Distance*corr))/%Mulplayer%+555)/1000)+1), len=distance*2, st=(50-len)/2"
  324.        set /A C=$B
  325.       )
  326.       %= 2D-clipping =%
  327.       if !st! lss 1 (set st=1) else if !st! gtr 50 set st=50
  328.       for /f "tokens=1,2" %%X in ("!st! !len!") do (
  329.         if !C! equ 1 (
  330.             echo -!S_:~0,%%X!°±²Û²±°!SS:~0,%%Y!°±²Û²±°!SP:~0,%%X!-
  331.         ) else (
  332.           echo -!S_:~0,%%X!°±²Û²±°!S2:~0,%%Y!°±²Û²±°!SP:~0,%%X!-
  333.         )
  334.       )
  335.       set C=&set Distance=&set len=&set st=&set ZAccumul=
  336.     )
  337.   )
  338.   %computeEngineEnd%
  339.   ) & endlocal %= For Empty Environment =%
  340.  
  341.   set /a wait=0
  342.   :waitForJobCompletion
  343.   if exist "%base%*_job.bat" (
  344.     set /a wait+=1
  345.     goto :waitForJobCompletion
  346.   )
  347.  
  348.   :: Transpose and display results
  349.   setlocal
  350.   set /A LineN=0
  351.   for /f usebackq^ delims^=^ eol^= %%A in (%files%) do (
  352.     set /A LineN+=1
  353.     set "N!LineN!=%%A"
  354.   )
  355.  
  356.   set "transposedLine="
  357.   for /L %%m in (1, 1, !LineN!) do set "transposedLine=!transposedLine!^!N%%m:~%%n,1^!"
  358.  
  359.   set/A MaxN=65
  360.   %cls%
  361.   echo(
  362.   for /L %%n in (0, 1, !LineN!) do echo( ^|%transposedLine%^|
  363.   endlocal
  364.  
  365.   :: Compute and display rendering time
  366.   for /F "tokens=1-8 delims=:.," %%a in ("!t1!:!time: =0!") do set /a "a=(((1%%e-1%%a)*60)+1%%f-1%%b)*6000+1%%g%%h-1%%c%%d, a+=(a>>31)&8640000, FPS=10000/a"
  367.   Title Raycast Dos Batch  -  Press H for help  -  Time Elapsed:!a!0ms - FPS: !FPS:~0,-2!.!FPS:~-2!
  368.   set a=&set t1=
  369. exit /b
  370.  
  371. :choice
  372. setlocal EnableDelayedExpansion
  373. set "c=" &set "e=" &set "map=%~1"
  374. if not defined map endlocal &exit /b 0
  375. for /f "delims=" %%i in ('2^>nul %COMSPEC%\..\xcopy /lw "%~f0" "%~f0"') do if not defined c set "c=%%i"
  376. set "c=%c:~-1%"
  377. if defined c (
  378.   For /L %%i in (0,1,127) do (
  379.     set "e=!map:~%%i,1!"
  380.     if not defined e endlocal &<nul set /p "=%BEL%" >CON&exit /b 0
  381.     if /i "!e!"=="!c!" (
  382.       echo(!c!
  383.       set /A n=%%i+1
  384.       for /f %%j in ("!n!") do endlocal &exit /b %%j
  385.     )
  386.   )
  387. )
  388. endlocal &<nul set /p "=%BEL%" >CON &goto choice
  389. exit /b
  390.  
  391. :prepareMap
  392. set ^"LF=^
  393.  
  394. ^" The above empty line is critical - DO NOT REMOVE
  395.   set "map="
  396.   for /L %%Y in (1,1,!MapsizeY!) do (
  397.     for /L %%X in (0,1,!MapsizeX!) do (
  398.       if "!Map[%%Y]:~%%X,1!" geq "1" (
  399.         set "map=!map!Û"
  400.       ) else (
  401.         set "map=!map! "
  402.       )
  403.     )
  404.     set "map=!map!!LF!"
  405.   )
  406. exit /b
  407.  
  408. :Help
  409.   cls
  410.   echo(
  411.   echo  For best view use raster font 8x8 or 16x8.
  412.   echo(
  413.   echo  Use keyboard:
  414.   echo(
  415.   echo   WASD for move
  416.   echo   KL   for turn/rotate.
  417.   echo   Z    for old rendering system.
  418.   echo   U    for redraw
  419.   echo   M    for view map ON/OFF
  420.   echo   F    for Fastrotate ON/OFF (Not implemented)
  421.   echo   Q    for quit
  422.   echo   H    for Help
  423.   echo(
  424.   pause
  425. exit /b
  426.  
  427.  
  428. :InitEngines
  429. :: Initialize and launch compute engines
  430.   set "base=%tmp%\%~nx0"
  431.   2>nul del "%base%*_job.bat"
  432.   set ^"computeEngineBegin=for /l %%. in () do if exist "^!job^!" ( call "^!job^!"^"
  433.   set ^"computeEngineEnd=del "^!job^!")^"
  434. rem disabling parallel processing :
  435. rem see http://www.dostips.com/forum/viewtopic.php?f=3&t=7053
  436. rem  set /a proc=NUMBER_OF_PROCESSORS, childCnt=proc-1
  437.   set /a proc=1, childCnt=proc-1
  438.   if %proc% gtr 8 set /a proc=8
  439.   for /l %%N in (1 1 !childCnt!) do (
  440.     set "file=%base%%%N.render"
  441.     set "job=%base%%%N_job.bat"
  442.     >nul 2>nul <nul start "" /b "%comspec%" /d /v:on /c "%~f0" :computeEngine
  443.   )
  444.   set "file=%base%!proc!.render"
  445.   set "files="
  446.   for /l %%N in (1 1 !proc!) do set files=!files! "%base%%%N.render"
  447.   set "computeEngineBegin="
  448.   set "computeEngineEnd="
  449. exit/b
  450.  
  451. :Init
  452.  
  453.   Title Raycast Dos Batch - Loading...
  454.   mode 69,80
  455.   color 0F
  456.   cls
  457.  
  458.   :: capture del BEL char
  459.   for /f %%i in ('forfiles /m "%~nx0" /c "cmd /c echo 0x07"') do set "BEL=%%i"
  460.  
  461.   :: empty environment
  462.   set "preserve= TMP BEL COMSPEC NUMBER_OF_PROCESSORS preserve "
  463.   for /f "delims==" %%v in ('set') do if "!preserve: %%v =!" equ "!preserve!" set "%%v="
  464.   set "preserve="
  465.  
  466.   :: Setting output char
  467.   set "SS=°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
  468.   set "S_=úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú"
  469.   set "S2=±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±"
  470.   set "SP=__________________________"
  471.   set "SC=///////////////////////////////////////////////////"
  472.  
  473.   :: Trigonometric variables
  474.   set /a "PI=(35500000/113+5)/10, PI_div_2=(35500000/113/2+5)/10, PIx2=2*PI, PI32=PI+PI_div_2"
  475.   set "SIN=(a - a*a/1920*a/312500 + a*a/1920*a/15625*a/15625*a/2560000 - a*a/1875*a/15360*a/15625*a/15625*a/16000*a/44800000)"
  476.   set "SIN(x)=(a=(x)%%62832, c=(a>>31|1)*a, a-=(((c-47125)>>31)+1)*((a>>31|1)*62832)  +  (-((c-47125)>>31))*( (((c-15709)>>31)+1)*(-(a>>31|1)*31416+2*a)  ), %SIN%)"
  477.   set SIN=
  478.  
  479.   :: Define player characters:
  480.   for %%# in (
  481.     "345   0  15  >"
  482.     " 30  45  60  \"
  483.     " 75  90 105  v"
  484.     "120 135 150  /"
  485.     "165 180 195  <"
  486.     "210 225 240  \"
  487.     "255 270 285  ^"
  488.     "300 315 330  /"
  489.   ) do for /f "tokens=1-4" %%A in (%%#) do (
  490.     set "P%%A=%%D"
  491.     set "P%%B=%%D"
  492.     set "P%%C=%%D"
  493.   )
  494.  
  495.   set /A MulPlayer=10000, Mul1=25, MaxIter1=500, MaxIter2=50, MM=MulPlayer*Mul1, M10=MM*10
  496.   set /A Angle=0, oldSys=0, FastRotate=0, SeeMap=1
  497.  
  498.   :: Define some screen management variables and macros
  499.   if exist "%~dp0CursorPos.exe" (
  500.     set "cls=CursorPos 0 0"
  501.   ) else (
  502.     set "cls=cls"
  503.   )
  504.   set "method=FAST"
  505.   set "space=            "  
  506.  
  507. exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement