Skip to content

Instantly share code, notes, and snippets.

@jquast
Created November 9, 2012 00:09
Show Gist options
  • Save jquast/4042802 to your computer and use it in GitHub Desktop.
Save jquast/4042802 to your computer and use it in GitHub Desktop.
Dingo's Pixel Painter! (QuickBasic)
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