Created
November 9, 2012 00:09
-
-
Save jquast/4042802 to your computer and use it in GitHub Desktop.
Dingo's Pixel Painter! (QuickBasic)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PRINT "loading dingo's pixel painter - dingo@efnet" | |
PRINT "."; | |
DIM ERRCODE(0 TO 76) AS STRING | |
ERRCODE(1) = "NEXT without FOR" | |
ERRCODE(2) = "Syntax error" | |
ERRCODE(3) = "RETURN without GOSUB" | |
ERRCODE(4) = "Out of DATA" | |
ERRCODE(5) = "Illegal function call" | |
ERRCODE(6) = "Overflow" | |
ERRCODE(7) = "Out of memory" | |
ERRCODE(8) = "Label not defined" | |
ERRCODE(9) = "Subscript out of range" | |
ERRCODE(10) = "Duplicate definition" | |
ERRCODE(11) = "Division by zero" | |
ERRCODE(12) = "Illegal in direct mode" | |
ERRCODE(13) = "Type mismatch" | |
ERRCODE(14) = "Out of string space" | |
ERRCODE(16) = "String formula too complex" | |
ERRCODE(17) = "Cannot continue" | |
ERRCODE(18) = "Function not defined" | |
ERRCODE(19) = "No RESUME" | |
ERRCODE(20) = "RESUME without error" | |
ERRCODE(24) = "Device timeout" | |
ERRCODE(25) = "Device fault" | |
ERRCODE(26) = "FOR without NEXT" | |
ERRCODE(27) = "Out of paper" | |
ERRCODE(29) = "WHILE without WEND" | |
ERRCODE(30) = "WEND without WHILE" | |
ERRCODE(33) = "Duplicate label" | |
ERRCODE(35) = "Subprogram not defined" | |
ERRCODE(37) = "Argument-count mismatch" | |
ERRCODE(38) = "Array not defined" | |
ERRCODE(40) = "Variable required" | |
ERRCODE(50) = "FIELD overflow" | |
ERRCODE(51) = "Internal error" | |
ERRCODE(52) = "Bad file name or number" | |
ERRCODE(53) = "File not found" | |
ERRCODE(54) = "Bad file mode" | |
ERRCODE(55) = "File already open" | |
ERRCODE(56) = "FIELD statement active" | |
ERRCODE(57) = "Device I/O error" | |
ERRCODE(58) = "File already exists" | |
ERRCODE(59) = "Bad record length" | |
ERRCODE(61) = "Disk full" | |
ERRCODE(62) = "Input past end of file" | |
ERRCODE(63) = "Bad record number" | |
ERRCODE(64) = "Bad file name" | |
ERRCODE(67) = "Too many files" | |
ERRCODE(68) = "Device unavailable" | |
ERRCODE(69) = "Communication-buffer overflow" | |
ERRCODE(70) = "Permission denied" | |
ERRCODE(71) = "Disk not ready" | |
ERRCODE(72) = "Disk-media error" | |
ERRCODE(73) = "Feature unavailable" | |
ERRCODE(74) = "Rename across disks" | |
ERRCODE(75) = "Path/File access error" | |
ERRCODE(76) = "Path not found" | |
' KEYS ' | |
CONST PLUS = 43 | |
CONST MINUS = 45 | |
CONST UP = 72 | |
CONST DOWN = 80 | |
CONST LEFT = 75 | |
CONST RIGHT = 77 | |
CONST CTRLC = 3 | |
CONST CTRLR = 18 | |
CONST CTRLA = 1 | |
'JN | |
CONST CTRLH = 8 | |
CONST CTRLN = 14 | |
CONST CTRLS = 19 | |
CONST CTRLQ = 17 | |
CONST CTRLL = 12 | |
CONST CTRLD = 4 | |
CONST CTRLV = 22 | |
PRINT "."; | |
CONST SPACEBAR = 32 | |
CONST ENTER = 13 | |
CONST F1 = 59 | |
CONST F2 = 60 | |
CONST F3 = 61 | |
CONST F4 = 62 | |
CONST F5 = 63 | |
CONST F6 = 64 | |
CONST F7 = 65 | |
CONST F8 = 66 | |
' order of these is very important | |
' Graph Starting point from the edge of the screen. | |
CONST GraphShiftX = 1 | |
CONST GraphShiftY = 7 | |
CONST GraphSizeX = 240 | |
CONST GraphSizeY = 140 | |
PRINT "."; | |
' Default Sprite Sizes | |
SpriteX = 16 | |
SpriteY = 16 | |
CurrentColor = 78 | |
'Graph Size used for calculating block size | |
BlockSizeX = INT((GraphSizeX / SpriteX)) | |
BlockSizeY = INT((GraphSizeY / SpriteY)) | |
GraphBottom = INT(GraphSizeY + GraphShiftY) | |
GraphRight = INT(GraphSizeX + GraphShiftX) | |
' Set cursor location | |
CursorX = GraphShiftX + 1 | |
CursorY = GraphShiftY + 1 | |
OldCursorY = CursorY | |
OldCursorX = CursorX | |
' Cheap Flag to Skip the 'waiting for input' section. | |
Firstrun = 1 | |
' Flags used to re-draw sections only when necessary | |
' everything is flagged to be drawn at the beginning. | |
RedrawGraph = 1 | |
'RedrawGraphContnets = 1 | |
RedrawCursor = 1 | |
RedrawBoard = 1 | |
RedrawPreset = 1 | |
'RedrawImage = 1 | |
RedrawAllStatus = 1 | |
' Default presets for the user | |
preset1 = 60 | |
preset2 = 64 | |
preset3 = 68 | |
preset4 = 72 | |
preset5 = 76 | |
preset6 = 82 | |
preset7 = 86 | |
preset8 = 92 | |
' Where to locate the Preset box | |
'These also defines where to plot other things on the right (sprites) | |
PresetTop = GraphBottom + 5 | |
PresetBottom = 180 | |
PresetLeft = GraphRight + 5 | |
PresetRight = 319 | |
PresetWidth = (PresetRight - PresetLeft) | |
PresetHeight = (PresetBottom - PresetTop) | |
' Board is the pallette used for colors | |
BoardTop = GraphBottom + 3 | |
CONST BoardColors = 255 | |
CONST Drawtop = GraphShiftY + 2 | |
DrawLeft = PresetLeft | |
Xscale = INT((315 - PresetLeft) / SpriteX) | |
Yscale = Xscale | |
drawwidth = (Xscale * SpriteX) | |
drawheight = (Yscale * SpriteY) | |
DIM SpriteColor(0 TO 64, 0 TO 64) | |
PRINT "."; | |
DIM ImgSwap(0 TO 64, 0 TO 64) | |
PRINT "."; | |
FOR y = 0 TO 64 | |
FOR x = 0 TO 64 | |
SpriteColor(x, y) = 256 | |
NEXT x | |
PRINT "."; | |
NEXT y | |
SCREEN 13 | |
DO | |
' Cheap hack. | |
IF Firstrun = 1 THEN K$ = "x": Firstrun = 0: GOTO ForgetAboutIt | |
' Wait for input | |
DO | |
K$ = INKEY$ | |
LOOP UNTIL K$ <> "" | |
ForgetAboutIt: | |
Ky = ASC(RIGHT$(K$, 1)) | |
IF Ky = PLUS THEN 'R O T A T E C O L O R + 1 | |
CurrentColor = CurrentColor + 1 | |
IF CurrentColor > 256 THEN CurrentColor = CurrentColor - 256 | |
RedrawBoard = 1 | |
RedrawShortStatus = 1 | |
END IF | |
IF Ky = MINUS THEN 'R O T A T E C O L O R - 1 | |
CurrentColor = CurrentColor - 1 | |
IF CurrentColor < 0 THEN CurrentColor = CurrentColor + 256 | |
RedrawBoard = 1 | |
RedrawShortStatus = 1 | |
END IF | |
IF Ky = ENTER THEN 'J U M P T O C O L O R | |
DO | |
'User inputs int 0 through 255 | |
LINE (3, BoardTop + 3)-(240, 185), 0, BF | |
LOCATE 22, 2: PRINT "Jump to Color:" | |
LOCATE 22, 15: INPUT c | |
LINE (3, BoardTop + 3)-(240, 185), 0, BF | |
OK = 1: IF c < 0 OR c > BoardColors THEN OK = 0 | |
LOOP WHILE OK = 0 | |
' Clear Board | |
'LINE (3, BoardTop + 3)-(240, 185), 0, BF | |
CurrentColor = c | |
RedrawBoard = 1 | |
RedrawShortStatus = 1 | |
END IF | |
IF Ky = DOWN THEN ' M O V E D O W N | |
OldCursorY = CursorY: OldCursorX = CursorX | |
IF ActualCursorY < SpriteY - 1 THEN | |
CursorY = CursorY + BlockSizeY | |
ActualCursorY = ActualCursorY + 1 | |
ELSE | |
CursorY = GraphShiftY + 1 | |
ActualCursorY = 0 | |
END IF | |
RedrawShortStatus = 1 | |
RedrawCursor = 1 | |
END IF | |
IF Ky = UP THEN ' M O V E U P | |
OldCursorY = CursorY: OldCursorX = CursorX | |
IF ActualCursorY > 0 THEN | |
CursorY = CursorY - BlockSizeY | |
ActualCursorY = ActualCursorY - 1 | |
ELSE | |
CursorY = GraphShiftY + (SpriteY * BlockSizeY) - BlockSizeY + 1 | |
ActualCursorY = SpriteY - 1 | |
END IF | |
RedrawShortStatus = 1 | |
RedrawCursor = 1 | |
END IF | |
IF Ky = LEFT THEN ' M O V E L E F T | |
OldCursorY = CursorY: OldCursorX = CursorX | |
IF ActualCursorX > 0 THEN | |
CursorX = CursorX - BlockSizeX | |
ActualCursorX = ActualCursorX - 1 | |
ELSE | |
CursorX = (SpriteX * BlockSizeX) - BlockSizeX + GraphShiftX + 1 | |
ActualCursorX = SpriteX - 1 | |
END IF | |
RedrawShortStatus = 1 | |
RedrawCursor = 1 | |
END IF | |
IF Ky = RIGHT THEN ' M O V E R I G H T | |
OldCursorY = CursorY: OldCursorX = CursorX | |
IF ActualCursorX < SpriteX - 1 THEN | |
CursorX = CursorX + BlockSizeX | |
ActualCursorX = ActualCursorX + 1 | |
ELSE | |
CursorX = GraphShiftX + 1 | |
ActualCursorX = 0 | |
END IF | |
RedrawShortStatus = 1 | |
RedrawCursor = 1 | |
END IF | |
IF Ky = SPACEBAR THEN ' P L O T C O L O R | |
SetBlock = 1 | |
RefreshImage = 1 | |
RedrawShortStatus = 1 | |
END IF | |
IF K$ = "Z" OR K$ = "z" THEN ' F L A S H C O L O R | |
'LINE (0, 0)-(319, 219), CurrentColor, BF | |
LINE (GraphShiftX + 2, GraphShiftY + 2)-(GraphShiftX + (BlockSizeX * SpriteX), GraphShiftY + (BlockSizeY * SpriteY)), CurrentColor, BF | |
DO | |
K$ = INKEY$ | |
LOOP UNTIL K$ <> "" | |
'LINE (GraphShiftX + 2, GraphShiftY + 2)-(GraphShiftX + (BlockSizeX * SpriteX), GraphShiftY + (BlockSizeY * SpriteY)), 0, BF | |
RedrawGraph = 1 | |
RedrawGraphContents = 1 | |
RedrawCursor = 1 | |
'RedrawBoard = 1 | |
'RedrawPreset = 1 | |
'RedrawImage = 1 | |
'RedrawAllStatus = 1 | |
END IF | |
IF Ky = CTRLC THEN theend = 1 ' Q U I T | |
IF Ky = CTRLR THEN ' R E S I Z E I M A G E | |
DO | |
'User inputs X and Y to resize to | |
LINE (0, BoardTop - 1)-(241, 199), 0, BF | |
LOCATE 22, 2: PRINT "Resize X [<64]:" | |
LOCATE 22, 17: INPUT x | |
LOCATE 22, 2: PRINT "Resize Y [<64]: " | |
LOCATE 22, 17: INPUT y | |
' 1x1 is stupid. 40x20 is about the most reasonable. | |
OK = 1: IF x < 2 OR x > 64 OR y < 2 OR y > 64 THEN OK = 0 | |
LOOP WHILE OK = 0 | |
SpriteX = x | |
SpriteY = y | |
' Clear board | |
LINE (0, BoardTop - 1)-(241, 199), 0, BF | |
LINE (GraphShiftX, GraphShiftY)-(245, BoardTop - 1), 0, BF | |
BlockSizeX = INT((GraphSizeX / SpriteX)) | |
BlockSizeY = INT((GraphSizeY / SpriteY)) | |
' Reset ActualCursor to upperleft | |
ActualCursorX = 0 | |
ActualCursorY = 0 | |
'Crappy Design causes old box to be written in the new scale. | |
'This is a workaround, the new cursor will draw over itself once. | |
CursorX = GraphShiftX + 1 | |
CursorY = GraphShiftY + 1 | |
OldCursorY = CursorY | |
OldCursorX = CursorX | |
RedrawGraph = 1 | |
RedrawGraphContents = 1 | |
RedrawBoard = 1 | |
RedrawCursor = 1 | |
RedrawImage = 1 | |
RedrawAllStatus = 1 | |
END IF | |
IF Ky = CTRLH THEN | |
SCREEN 0 | |
WIDTH 80 | |
COLOR 7 | |
PRINT "": PRINT "": PRINT "": PRINT "" | |
PRINT " Key Command Key Command": COLOR 7: PRINT " ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ": PRINT "" | |
PRINT " ARROWS Move Cursor ] Rotate Image 90 CW" | |
PRINT " + / - Change Color [ Rotate Image 90 CCW" | |
PRINT " SPACEBAR Plot selected color ; Flip Horizontally" | |
PRINT " ENTER Jump to Color ' Flip Verticaly" | |
PRINT " Z Flash current Color": PRINT "" | |
PRINT " ^N New Image 1 - 8 Plot Preset" | |
PRINT " ^L Load Image F1 - F8 Set Preset" | |
PRINT " ^S Save Image C Clear selected block " | |
PRINT " ^R Resize Image to color #256" | |
PRINT " ^H Help": PRINT "" | |
PRINT " ^C Quit" | |
PRINT "": LOCATE 22, 30: COLOR 10: PRINT "Press a Key"; | |
DO | |
K$ = INKEY$ | |
LOOP UNTIL K$ <> "" | |
K$ = "" | |
RedrawGraph = 1: RedrawGraphContents = 1: RedrawCursor = 1 | |
RedrawBoard = 1: RedrawPreset = 1: RedrawImage = 1: RedrawAllStatus = 1 | |
SCREEN 13 | |
END IF | |
IF Ky = F1 THEN preset1 = CurrentColor: RedrawPreset = 1 ' Sets presets 1 - 8 | |
IF Ky = F2 THEN preset2 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F3 THEN preset3 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F4 THEN preset4 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F5 THEN preset5 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F6 THEN preset6 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F7 THEN preset7 = CurrentColor: RedrawPreset = 1 | |
IF Ky = F8 THEN preset8 = CurrentColor: RedrawPreset = 1 | |
IF K$ = "c" THEN ClearBlock = 1 | |
IF K$ = "1" THEN | |
IF CurrentColor <> preset1 THEN | |
CurrentColor = preset1 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "2" THEN | |
IF CurrentColor <> preset2 THEN | |
CurrentColor = preset2 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "3" THEN | |
IF CurrentColor <> preset3 THEN | |
CurrentColor = preset3 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "4" THEN | |
IF CurrentColor <> preset4 THEN | |
CurrentColor = preset4 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "5" THEN | |
IF CurrentColor <> preset5 THEN | |
CurrentColor = preset5 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "6" THEN | |
IF CurrentColor <> preset6 THEN | |
CurrentColor = preset6 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "7" THEN | |
IF CurrentColor <> preset7 THEN | |
CurrentColor = preset7 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF K$ = "8" THEN | |
IF CurrentColor <> preset8 THEN | |
CurrentColor = preset8 | |
RedrawBoard = 1 | |
END IF | |
SetBlock = 1 | |
RefreshImage = 1 | |
END IF | |
IF Ky = CTRLN THEN ' N E W I M A G E | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
SpriteColor(x, y) = 256 | |
NEXT x | |
NEXT y | |
FileName$ = "" | |
RedrawImage = 1 | |
RedrawGraphContents = 1 | |
END IF | |
'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`' | |
' The following command keys were derived from ' | |
' Jordan Nelson's origional "Pixel Paint" program ' | |
' (c) 1998. I know him, and I don't think he would mind.' | |
'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`' | |
IF K$ = "]" THEN 'R O T A T E C L O C K W I S E | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
ImgSwap(SpriteX - y + 1, x) = SpriteColor(x, y) | |
NEXT x | |
NEXT y | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
SpriteColor(x, y) = ImgSwap(x, y) | |
NEXT x | |
NEXT y | |
RedrawImage = 1 | |
RedrawGraphContents = 1 | |
END IF | |
IF K$ = "[" THEN 'R O T A T E C O U N T E R C L O C K W I S E | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
ImgSwap(y, SpriteX - x + 1) = SpriteColor(x, y) | |
NEXT x | |
NEXT y | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
SpriteColor(x, y) = ImgSwap(x, y) | |
NEXT x | |
NEXT y | |
RedrawImage = 1 | |
RedrawGraphContents = 1 | |
END IF | |
IF K$ = ";" THEN 'F L I P H O R I Z O N T A L | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
ImgSwap(SpriteX - x + 1, y) = SpriteColor(x, y) | |
NEXT x | |
NEXT y | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
SpriteColor(x, y) = ImgSwap(x, y) | |
NEXT x | |
NEXT y | |
RedrawImage = 1 | |
RedrawGraphContents = 1 | |
END IF | |
IF K$ = "'" THEN 'F L I P V E R T I C A L | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
ImgSwap(x, SpriteY - y + 1) = SpriteColor(x, y) | |
NEXT x | |
NEXT y | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
SpriteColor(x, y) = ImgSwap(x, y) | |
NEXT x | |
NEXT y | |
RedrawImage = 1 | |
RedrawGraphContents = 1 | |
END IF | |
IF Ky = CTRLS THEN ' S A V E F I L E | |
COLOR 79: LOCATE 23, 2: PRINT "Save: "; | |
INPUT "", FileName$ | |
IF FileName$ <> "" THEN | |
OPEN FileName$ FOR OUTPUT AS #1 | |
Line$ = "DATA" + STR$(SpriteX) + "," + STR$(SpriteY) | |
PRINT #1, Line$ | |
Line$ = "DATA" | |
FOR TestY = 1 TO SpriteY | |
FOR TestX = 1 TO SpriteX | |
Line$ = Line$ + STR$(SpriteColor(TestX, TestY)) | |
IF TestX <> SpriteX THEN | |
Line$ = Line$ + "," | |
END IF | |
NEXT TestX | |
PRINT #1, Line$ | |
Line$ = "DATA" | |
NEXT TestY | |
CLOSE #1 | |
END IF | |
END IF | |
IF Ky = CTRLL THEN 'L O A D F I L E | |
LOCATE 22, 2: COLOR 79: PRINT "Load: "; | |
INPUT "", FileName$ | |
IF FileName$ <> "" THEN | |
DIM TmpDim(0 TO 2) AS STRING | |
OPEN FileName$ FOR INPUT AS #1 | |
LINE INPUT #1, DimTemp$ | |
ValueCount = 0 | |
FOR I = 5 TO LEN(DimTemp$) | |
Fragment$ = MID$(DimTemp$, I, 1) | |
IF Fragment$ <> "," THEN | |
IF Fragment$ <> " " THEN | |
TempVal$ = TempVal$ + Fragment$ | |
TmpDim(ValueCount) = TmpDim(ValueCount) + Fragment$ | |
END IF | |
ELSE | |
TempVal$ = "" | |
ValueCount = ValueCount + 1 | |
END IF | |
NEXT I | |
TempVal$ = "" | |
TmpWidth = VAL(TmpDim(0)) | |
TmpHeight = VAL(TmpDim(1)) | |
SpriteX = TmpWidth | |
SpriteY = TmpHeight | |
ValueCount = 0 | |
FOR TempY = 0 TO TmpHeight - 1 | |
LINE INPUT #1, DATA$ | |
FOR I = 5 TO LEN(DATA$) | |
Fragment$ = MID$(DATA$, I, 1) | |
IF Fragment$ <> "," THEN | |
IF Fragment$ <> " " THEN | |
TempVal$ = TempVal$ + Fragment$ | |
END IF | |
ELSE | |
SpriteColor(ValueCount + 1, TempY + 1) = VAL(TempVal$) | |
OldVal$ = TempVal$ | |
TempVal$ = "" | |
ValueCount = ValueCount + 1 | |
END IF | |
NEXT I | |
SpriteColor(ValueCount + 1, TempY + 1) = VAL(TempVal$) | |
TempVal$ = "" | |
ValueCount = 0 | |
NEXT TempY | |
CLOSE #1 | |
LINE (0, BoardTop - 1)-(240, 199), 0, BF | |
LINE (GraphShiftX, GraphShiftY)-(245, BoardTop - 1), 0, BF | |
LINE (PresetLeft - 1, Drawtop)-(319, PresetTop - 2), 0, B | |
BlockSizeX = INT((GraphSizeX / SpriteX)) | |
BlockSizeY = INT((GraphSizeY / SpriteY)) | |
ActualCursorX = 0: ActualCursorY = 0 | |
CursorX = GraphShiftX + 1: CursorY = GraphShiftY + 1 | |
OldCursorY = CursorY: OldCursorX = CursorX | |
RedrawGraph = 1: RedrawBoard = 1 | |
RedrawCursor = 1: RedrawImage = 1 | |
RedrawGraphContents = 1: RedrawAllStatus = 1 | |
END IF | |
END IF | |
'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'` | |
'`'`'`'`'`'`'`'REDRAW PROCEDURES`'`'`''` | |
'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'` | |
'`'`'`'`'`'`'`'`'`'`'`'`'`'`''`'`'`'`'`` | |
IF SetBlock = 1 THEN | |
LINE (CursorX + 1, CursorY + 1)-(CursorX + BlockSizeX - 1, CursorY + BlockSizeY - 1), CurrentColor, BF | |
x = ActualCursorX | |
y = ActualCursorY | |
SpriteColor(x + 1, y + 1) = CurrentColor | |
END IF | |
IF ClearBlock = 1 THEN | |
LINE (CursorX + 1, CursorY + 1)-(CursorX + BlockSizeX - 1, CursorY + BlockSizeY - 1), 0, BF | |
x = ActualCursorX | |
y = ActualCursorY | |
SpriteColor(x + 1, y + 1) = 0 | |
END IF | |
IF RedrawBoard = 1 THEN | |
' This draws the currentcolor - 12 and on in a 'pallette' | |
' or what I like to call the 'board' (in RL painting, I always | |
' apply colors to a board and pull them off a board) | |
Clr = CurrentColor - 12: y = BoardTop + 13: xs = 0 | |
FOR x = (3) TO (240) STEP 10 | |
IF x < (243 / 2) + xs THEN xs = xs + 1 | |
IF x > (243 / 2) - xs THEN xs = xs - 1 | |
LINE (x, y - xs)-(x + 8, y + xs), Clr, BF | |
Clr = Clr + 1 | |
NEXT x | |
' This draws the currently selected block in the middle | |
LINE (122, 149)-(133, 179), CurrentColor, BF | |
COLOR 79: LOCATE 17, 36: PRINT CurrentColor | |
END IF | |
IF RedrawGraphContents = 1 THEN | |
FOR y = 0 TO SpriteY - 1 | |
FOR x = 0 TO SpriteX - 1 | |
LINE ((x * BlockSizeX) + GraphShiftX + 2, (y * BlockSizeY) + GraphShiftY + 2)-((x * BlockSizeX) + GraphShiftX + BlockSizeX, (y * BlockSizeY) + GraphShiftY + BlockSizeY), SpriteColor(x + 1, y + 1), BF | |
NEXT x | |
NEXT y | |
END IF | |
IF RedrawGraph = 1 THEN | |
' This long process divies out the boxes on the graph | |
' and draws lines where needed to form the boxes. It | |
' works much more efficiently on slow machines. | |
FOR x = 0 TO SpriteX * BlockSizeX STEP BlockSizeX | |
LINE (x + GraphShiftX + 1, GraphShiftY + 1)-(x + GraphShiftX + 1, SpriteY * BlockSizeY + GraphShiftY + 1), 20 | |
NEXT x | |
FOR y = 0 TO SpriteY * BlockSizeY STEP BlockSizeY | |
LINE (GraphShiftX + 1, y + GraphShiftY + 1)-(GraphShiftX + SpriteX * BlockSizeX, y + GraphShiftY + 1), 20 | |
NEXT y | |
END IF | |
IF RedrawCursor = 1 THEN | |
'This draws a grey box at the old cursor location (same color as the grid) | |
'and then draws a bright white box at the new location (where the cursor is | |
'currently at) | |
LINE (OldCursorX, OldCursorY)-(OldCursorX + BlockSizeX, OldCursorY + BlockSizeY), 20, B | |
LINE (CursorX, CursorY)-(CursorX + BlockSizeX, CursorY + BlockSizeY), 31, B | |
END IF | |
IF RedrawPreset = 1 THEN | |
'This plots the blocks of the presets at the bottom-right corner. | |
LINE (PresetLeft + 1, PresetTop + 1)-(PresetLeft + (PresetWidth / 4) - 2, PresetTop + (PresetHeight / 2) - 1), preset1, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 1), PresetTop + 1)-(PresetLeft + ((PresetWidth / 4) * 2) - 2, PresetTop + (PresetHeight / 2) - 1), preset2, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 2), PresetTop + 1)-(PresetLeft + ((PresetWidth / 4) * 3) - 2, PresetTop + (PresetHeight / 2) - 1), preset3, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 3), PresetTop + 1)-(PresetLeft + ((PresetWidth / 4) * 4) - 1, PresetTop + (PresetHeight / 2) - 1), preset4, BF | |
LINE (PresetLeft + 1, PresetTop + (PresetHeight / 2) + 1)-(PresetLeft + (PresetWidth / 4) - 2, PresetTop + ((PresetHeight / 2) * 2) - 1), preset5, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 1), PresetTop + (PresetHeight / 2) + 1)-(PresetLeft + ((PresetWidth / 4) * 2) - 2, PresetTop + ((PresetHeight / 2) * 2) - 1), preset6, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 2), PresetTop + (PresetHeight / 2) + 1)-(PresetLeft + ((PresetWidth / 4) * 3) - 2, PresetTop + ((PresetHeight / 2) * 2) - 1), preset7, BF | |
LINE (PresetLeft + ((PresetWidth / 4) * 3), PresetTop + (PresetHeight / 2) + 1)-(PresetLeft + ((PresetWidth / 4) * 4) - 1, PresetTop + ((PresetHeight / 2) * 2) - 1), preset8, BF | |
RedrawPreset = 1 | |
END IF | |
IF RedrawImage = 1 THEN | |
' This redraws the entire sprite. Very slow on older machines | |
' So an alternative (RefreshImage) is used when only making | |
' one change at a time. | |
FOR y = 0 TO SpriteY | |
FOR x = 0 TO SpriteX | |
IF SpriteColor(x, y) <> 256 THEN PSET (x + PresetLeft, y + GraphShiftY), SpriteColor(x, y) | |
NEXT x | |
NEXT y | |
END IF | |
IF RefreshImage = 1 THEN | |
' This only plots the current color at the current cursor location | |
' This makes pixel drawing results much faster when drawing on the fly | |
PSET (ActualCursorX + PresetLeft + 1, ActualCursorY + GraphShiftY + 1), SpriteColor(ActualCursorX + 1, ActualCursorY + 1) | |
END IF | |
IF RedrawAllStatus = 1 THEN | |
COLOR 103 | |
LOCATE 23, 24: PRINT "Help ^H" | |
COLOR 124 | |
LOCATE 16, 32: PRINT "Color" | |
COLOR 100 | |
LOCATE 1, 6: PRINT "/"; SpriteX | |
LOCATE 1, 14: PRINT "/"; SpriteY | |
COLOR 7 | |
LOCATE 19, 33: PRINT "Presets" | |
COLOR 79: LOCATE 1, 10: PRINT ActualCursorY + 1 | |
COLOR 79: LOCATE 1, 2: PRINT ActualCursorX + 1 | |
END IF | |
IF RedrawShortStatus = 1 THEN | |
COLOR 77 | |
LOCATE 1, 7: PRINT SpriteX | |
LOCATE 1, 15: PRINT SpriteY | |
COLOR 7 | |
LOCATE 1, 2: PRINT ActualCursorX + 1 | |
LOCATE 1, 10: PRINT ActualCursorY + 1 | |
LOCATE 1, 23: PRINT SpriteColor(ActualCursorX + 1, ActualCursorY + 1); " " | |
END IF | |
RedrawGraph = 0 | |
RedrawGraphContents = 0 | |
RedrawCursor = 0 | |
RedrawBoard = 0 | |
RedrawPreset = 0 | |
RedrawImage = 0 | |
RefreshImage = 0 | |
RedrawAllStatus = 0 | |
RedrawShortStatus = 0 | |
ClearBlock = 0 | |
SetBlock = 0 | |
LOOP UNTIL theend = 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment