@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
:_START
MODE CON COLS=80 LINES=25
MEM/C | FIND /I "ANSI">NUL || ((
ECHO.DEVICE=%SystemRoot%\System32\ANSI.SYS /X
)>>%SystemRoot%\System32\CONFIG.NT
IF "%~1" NEQ "1" (
START "" %0 1 && EXIT/B 0
) ELSE ( EXIT/B 1))
:INI
Set Colors=X3Y3,X5Y3,X3Y5,X5Y5,^
X3Y7,X5Y7,X3Y9,X5Y9,^
X3Y11,X5Y11,X3Y13,X5Y13,^
X3Y15,X5Y15,X3Y17,X5Y17
Set Cursors=X69Y10,X71Y10,X73Y10,X75Y10,X77Y10
Set "Cursor_Icon=Û²±°R"
Set/A "CurCol=8","CurCap=0","BACK=0","LastColVal=8"
Set "CurColPos=X5Y9"
Set "CurCur=Û"
Set "LastCurVal=Û"
Set "LastCurPos=X69Y10"
Call:LOAD_SCR
:_MAIN
TITLE BatchPaint BETA [CRD: %MOUSE[XY]% - LYR: %CurCap% - COL: %CurCol%]
CALL:_MOUSE[GET]
CALL:_CMP
GOTO:_MAIN
:_CMP
::Comp. Extern Cordinates.
If "%MOUSE[XY]%" EQU "X76Y6" (
If %CurCap% LSS 9 Set/A "CurCap+=1"
Command/C Echo.[6;72H[0;34m!CurCap!
GoTo:EoF
)
If "%MOUSE[XY]%" EQU "X69Y6" (
If %CurCap% GTR 0 Set/A "CurCap-=1"
Command/C Echo.[6;72H[0;34m!CurCap!
GoTo:EoF
)
::Comp. Cursors table cordinates.
Set/A "CursorCount=0"
For %%b in (%Cursors%) do (
If "%MOUSE[XY]%" EQU "%%b" (
Call:__WRITE_COLOR %LastCurPos% %LastCurVal% 8
Call:__WRITE_COLOR %%b %%Cursor_Icon:~!CursorCount!,1%% 10
Call Set "CurCur=%%Cursor_Icon:~!CursorCount!,1%%"
Set "LastCurPos=%%b"
Call Set "LastCurVal=%%Cursor_Icon:~!CursorCount!,1%%"
GoTo:EoF
)
Set/A "CursorCount+=1"
)
::Comp. Colors table cordinates.
For /l %%x in (2,1,7) do (
For /l %%y in (2,1,19) do (
If "%MOUSE[XY]%" EQU "X%%xY%%y" (
Echo.%Colors%|Find/I "%MOUSE[XY]%">NUL && (
Set "CurCol=!%MOUSE[XY]%!"
Call:__WRITE_COLOR %CurColPos% Û %LastColVal%
Call:__WRITE_COLOR %MOUSE[XY]% ° !%MOUSE[XY]%!
Set "CurColPos=%MOUSE[XY]%"
Set "LastColVal=!%MOUSE[XY]%!"
)
GoTo:EoF
)))
::Comp. Limits.
For /F "Tokens=1,2 Delims=X,Y" %%x in ("%MOUSE[XY]%") do (
If %%x LEQ 2 GoTo:EoF
If %%x GEQ 67 GoTo:EoF
If %%y LEQ 2 GoTo:EoF
If %%y GEQ 24 GoTo:EoF
)
::Paint on coordinate
If "%CurCur%" EQU "R" (GoTo:_DltLYR) ELSE (GoTo:_PntLYR)
:_DltLYR
Set "%MOUSE[XY]%[%CurCap%]="
If %CurCap% EQU 0 CALL:__WRITE_COLOR %MOUSE[XY]% Û 1&GoTo:EoF
Set/A "Tmp_Lyr=%CurCap%-1"
For /l %%i in (%Tmp_Lyr%,-1,0) do (
Set "Nxt_LYR=%MOUSE[XY]%[%%i]"
Call Set "INxt_LYR=%%!Nxt_LYR!%%"
If "%%i" EQU "0" (If Not Defined INxt_LYR Set "INxt_LYR=Û$1")
If Defined INxt_LYR (
For /F "Tokens=1,2 Delims=$" %%p in ("!INxt_LYR!") do (
CALL:__WRITE_COLOR %MOUSE[XY]% %%p %%q
Set "!Nxt_LYR!=%%p$%%q"
GoTo:EoF
)))
:_PntLYR
CALL:__WRITE_COLOR %MOUSE[XY]% %CurCur% %CurCol%
Set "%MOUSE[XY]%[%CurCap%]=%CurCur%$%CurCol%"
GoTo:EoF
:LOAD_SCR
More/C<NUL
Echo. Batch Paint ^(C^)Binary_Death
Echo. ÉÍËÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍ»
Echo. º º º º º
Echo. ÌÍÎ͹ º Layers º
Echo. º º º ºÚÄ¿ÚÄÄ¿ÚÄ¿ º
Echo. ÌÍÎ͹ º³^<³³ ³³^>³ º
Echo. º º º ºÀÄÙÀÄÄÙÀÄÙ º
Echo. ÌÍÎ͹ ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. º º º º Cursors º
Echo. ÌÍÎ͹ º Û ² ± ° R º
Echo. º º º ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. ÌÍÎ͹ º º
Echo. º º º º º
Echo. ÌÍÎ͹ º º
Echo. º º º º º
Echo. ÌÍÎ͹ º º
Echo. º º º º º
Echo. ÌÍÊͼ º º
Echo. º º º
Echo. º º º
Echo. º º º
Echo. º º º
Echo. º º º
Echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍͼ
Command/C Echo.[6;72H[0;34m%CurCap%[10;69H[0;1;31m%CurCur%
CALL:LOAD_COLORS
GoTo:EoF
:LOAD_COLORS
Set/A "Count=1"
For %%f in (!Colors!) do (
Call:__WRITE_COLOR %%f Û !Count!
Set "%%f=!Count!"
Set/A "Count+=1"
)
GoTo:EoF
:__WRITE_COLOR
Set ColList=0;30$0;31$0;32$0;33$0;34$^
0;35$0;36$0;37$1;30$1;31$1;32$1;33$^
1;34$1;35$1;36$1;37
For /f "Tokens=%~3 Delims=$" %%c in ("%ColList%") do (
For /f "Tokens=1,2 Delims=X,Y" %%x in ("%~1") do (
Command/C Echo.[%%y;%%xH[%%cm%~2
))
GoTo:EoF
:_MOUSE[GET]
(echo.e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo.g116
echo.q)>%tmp%\mouse.dat
Debug<%tmp%\mouse.dat|Find /I "X">%tmp%\tmp.dat
for /f "tokens=2,3,4" %%x in (%tmp%\tmp.dat) do (
set "%%x"&set/a BX=0x!BX!
set "%%y"&set/a CX=0x!CX!+1
set "%%z"&set/a DX=0x!DX!+1
set "MOUSE[XY]=X!CX!Y!DX!"
)
GoTo:EoF
El picasso de la imagen es cortesía de 79137913, que en su día hizo arte en 8 bits con este script
PD: Se me olvidó mencionar que al igual que con el tetris es necesaria una primera ejecución con privilegios de administrador. Además, no funciona en windows de 64 bits.