'*
'* constants used with SL_LoadSpriteSheet function
'*
CONST SL_SHEETTRANSPARENCY
= -1 ' use sheet's transparency info (.PNG) CONST SL_SETTRANSPARENCY
= 0 ' manually set transparency CONST SL_NOTRANSPARENCY
= 1 ' don't use transparency with sheet
'*
'* type declarations
'*
inuse
AS INTEGER ' sheet is in use (true / false) sheetimage
AS LONG ' image handle of sheet spritewidth
AS INTEGER ' width of each sprite spriteheight
AS INTEGER ' height of each sprite transparency
AS INTEGER ' sheet transparency type columns
AS INTEGER ' number of sprite columns
sprite
AS LONG ' hardware image image
AS LONG ' software image mask
AS LONG ' software mask image
'*
'* defined arrays
'*
REDIM SL_sheet
(1) AS SL_SHEET
' sprite sheet list REDIM SL_sprites
(1, 1, 1) AS SL_SPRITES
' master sprite array '*
'* main code (for testing)
'*
tr3bsheet
= SL_LoadSpriteSheet
("tr3bsheet266x266.png", 266, 266, SL_SETTRANSPARENCY
, _RGB32(255, 0, 255))
PRINT SL_sprites
(tr3bsheet
, 0, 0).sprite
PRINT SL_sprites
(tr3bsheet
, 0, 0).spritewidth
PRINT SL_sprites
(tr3bsheet
, 0, 0).spriteheight
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
'³ °°°±±±²²²ÛÛÛ COMMAND DESCRIPTION AND USAGE ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ NOTES ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ Loads a sprite sheet's sprites into memory and stores them in the sprite sheet array. Three ³ - The software image mask will only be created if the sprite sheet contains a transparency ³
'³ sprite images are created for each sprite; a hardware image for displaying, a software image ³ layer (alpha channel) either built-in or user defined. ³
'³ for manipulating, and a software mask image for pixel collision detection. ³ - Three constants have been created for use with this function: ³
'³ ³ : SL_SHEETTRANSPARENCY (-1) to have the function use built-in sprite sheet's alpha layer. ³
'³ mysheet% = SL_LoadSpriteSheet("sprites.png", 64, 96, SL_SETTRANSPARENCY, _RGB32(255, 0, 255)) ³ : SL_SETTRANSPARENCY ( 0) to have the function use the programmer supplied alpha value. ³
'³ ³ : SL_NOTRANSPARENCY ( 1) to have the function ignore alpha channel completely. ³
'³ Input: filename - the name of the sprite sheet image file to load in. ³ - The function will report an error on the following conditions: ³
'³ spritewidth - the width of every sprite contained on the sprite sheet. ³ : A filename is supplied that does not exist. ³
'³ spriteheight - the height of every sprite contained on the sprite sheet. ³ : A sprite width or height that is less than one (1). ³
'³ transparency - the type of transparency to apply to the sprite sheet and sprites: ³ : An invalid transparency type value. Valid types are from negative one (-1) to one (1). ³
'³ : -1 - use the sprite sheet's built-in alpha channel (PNG files). ³ - The programmer supplied alpha channel value will be ignored if transparency is not set to a ³
'³ : 0 - use the programmer assigned alpha channel value. ³ value of zero (0). ³
'³ : 1 - this sheet does not have any transparency included. ³ ³
'³ transcolor - programmer assigned alpha channel value for the sprite sheet. ³ ³
'³ ³ ³
'³ Output: An integer value greater than zero (0) that acts as a handle pointing to the sheet ³ ³
'³ that contains the sprites. ³ ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ KNOWN ISSUES ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ CREDITS ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ None ³ None ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ THEORY OF OPERATION ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ Once the sprite sheet is loaded it is scanned for an alpha channel if the programmer requests to use the sheet's transparency layer. The width and height of the sheet are retrieved and then ³
'³ divided by the sprite dimensions provided by the programmer to determine how many columns and rows of sprites exist. Each sprite is then brought in one at a time and trimmed down so only the ³
'³ image itself is left. This cuts away any extra background/transparency areas so as to make the sprite as small as possible. An x and y offset are then calculated so when the sprite is placed ³
'³ on the screen it matches the other sprites and they align correclty. A sheet entry is created in a three dimensional array where the first dimension is the sheet number (the handle), the ³
'³ second and third dimensions are then related to the sprite column and row locations on the sheet. So, for instance if three sheets are loaded, and I want to access the sprite located on ³
'³ sheet 2 in the 4th column and 5th row it can be found at SL_sprites(2, 4, 5). Each array location holds a hardware sprite image, a software sprite image, a software mask image, and any info ³
'³ related to the sprite that is important, such as it's width, height, and location on screen. ³
'³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ HISTORY ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ Date: 09/09/18 by Terry Ritchie ³
'³ : Initial writing of code. ³
'³ ³
'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
' declare global variables
' declare local variables
DIM handle
AS INTEGER ' handle (pointer) number of new sprite sheet DIM odest
AS LONG ' original destination image DIM tempsprite
AS LONG ' temporary sprite image holder DIM sheetimage
AS LONG ' sprite sheet file image DIM sheetheight
AS INTEGER ' height of sprite sheet in pixels DIM rows
AS INTEGER ' number of sprite rows contained on sheet DIM columns
AS INTEGER ' number of sprite columns contained on sheet
' perform error checks
SL_SpriteError "SL_LoadSpriteSheet", 106, filename ' no, report error to programmer
IF ABS(transparency
) > 1 THEN ' valid transparency setting? SL_SpriteError "SL_LoadSpriteSheet", 108, "" ' no, report error to programmer
IF spritewidth
< 1 OR spriteheight
< 1 THEN ' valid sprite width/height supplied? SL_SpriteError "SL_LoadSpriteSheet", 109, "" ' no, report error to programmer
' local variable setup
osource
= _SOURCE ' remember current source image odest
= _DEST ' remember current destination image handle = 0 ' initialize handle value
sheetimage
= _LOADIMAGE(filename
, 32) ' load sprite sheet file sheetwidth
= _WIDTH(sheetimage
) ' get width of sheet sheetheight
= _HEIGHT(sheetimage
) ' get height of sheet columns = sheetwidth \ spritewidth ' get number of whole columns of sprites
rows = sheetheight \ spriteheight ' get number of whole rows of sprites
' increase sprite array's 1st dimensions if needed to create a new sprite sheet
DO ' look for the next available handle handle = handle + 1 ' increment the handle value
LOOP UNTIL (NOT SL_sprites
(handle
, 0, 0).sprite
) OR handle
= UBOUND(SL_sprites
) ' stop looking when valid handle value found IF SL_sprites
(handle
, 0, 0).sprite
= -1 THEN ' is the last array element in use? handle = handle + 1 ' yes, increment the handle value
' increase sprite array's 2nd and 3rd dimensions if needed to match number of rows and columns
IF columns
> UBOUND(SL_sprites
, 2) THEN ' more columns in this sheet than others? REDIM _PRESERVE SL_sprites
(handle
, columns
, UBOUND(SL_sprites
, 3)) AS SL_SPRITES
' yes, increase the array's 2nd dimension to match IF rows%
> UBOUND(SL_sprites
, 3) THEN ' more rows in this sheet than others? REDIM _PRESERVE SL_sprites
(handle
, UBOUND(SL_sprites
, 2), rows
) AS SL_SPRITES
' yes, increase the array's 3rd dimension to match
' the variables in SL_sprites(x, 0, 0) will serve a dual purpose
' SL_sprites(x, 0, 0).sprite will contain either -1 (true) or 0 (false) to indicate the first dimension of the array is in use.
' SL_sprites(x, 0, 0).spritewidth will contain the number of columns contained in the sheet (the array's 2nd dimension)
' SL_sprites(x, 0, 0).spriteheight will contain the number of rows contained in the sheet (the array's 3rd dimension)
SL_sprites(handle%, 0, 0).sprite = -1 ' mark as in use
SL_sprites(handle%, 0, 0).spritewidth = columns ' remember number of columns in sheet
SL_sprites(handle%, 0, 0).spriteheight = rows ' remember number of rows in sheet
' identify transparency of sprite sheet if requested
IF transparency
= -1 THEN ' (constant SL_SHEETTRANSPARENCY) sheet have alpha channel? x = 0 ' yes, start at upper left x of sheet
y = 0 ' start at upper left y of sheet
alpha = 255 ' assume no alpha channel
_SOURCE sheetimage
' set sprite sheet image as source image DO ' start looping through the sheet's pixels pixel
= POINT(x
, y
) ' get the pixel's color attributes alpha
= _ALPHA32(pixel
) ' get the alpha level (0 - 255) IF alpha
= 0 THEN EXIT DO ' if it is transparent then leave the loop x = x + 1 ' move right one pixel
IF x
> sheetwidth
THEN ' have we gone off the sheet? x = 0 ' yes, reset back to the left beginning
y = y + 1 ' move down one pixel
LOOP UNTIL y
> sheetheight
' don't stop until the entire sheet has been checked IF alpha
= 0 THEN ' did we find a transparent pixel? transcolor = pixel ' yes, set the sheet's transparency to this color
ELSE ' no transparency found within sheet transparency = 1 ' set sheet to having no alpha channel
ELSEIF transparency
= 0 THEN ' (constant SL_SETTRANSPARENCY) manually set alpha channel? _CLEARCOLOR transcolor
, sheetimage
' yes, apply alpha setting to sheet
' load sprites from sheet and place into sprite array
tempsprite
= _NEWIMAGE(spritewidth
, spriteheight
, 32) ' create a temporary sprite holder FOR x
= 1 TO columns
' cycle through the sheet's columns FOR y
= 1 TO rows
' cycle through the sheet's rows
' get sprite from sheet and place in temporary image
_PUTIMAGE , sheetimage
, tempsprite
, ((x
- 1) * spritewidth
, (y
- 1) * spriteheight
)-_
((x - 1) * spritewidth + spritewidth - 1, (y - 1) * spriteheight + spriteheight - 1) ' get sprite from sheet and place in temp image
' identify image boundaries
_SOURCE tempsprite
' work from the temporary sprite image top = spriteheight ' seed the boundary marker variables
left = spritewidth
bottom = 0
right = 0
FOR x1
= 0 TO spritewidth
- 1 ' cycle through the width of temp sprite FOR y1
= 0 TO spriteheight
- 1 ' cycle through the height of temp sprite IF POINT(x1
, y1
) <> transcolor
THEN ' is this pixel a transparent color? IF x1
< left
THEN left
= x1
' no, save position if left-most pixel IF y1
< top
THEN top
= y1
' save position if top-most pixel IF x1
> right
THEN right
= x1
' save position if right-most pixel IF y1
> bottom
THEN bottom
= y1
' save position if bbottom-most pixel
' cut software image from temporary sprite and save
SL_sprites
(handle
, x
, y
).image
= _NEWIMAGE(right
- left
, bottom
- top
, 32) ' create software image holder with computed boundaries _PUTIMAGE , tempsprite
, SL_sprites
(handle
, x
, y
).image
, (left
, top
)-(right
, bottom
) ' cut sprite from temp and place in software image SL_sprites(handle, x, y).xoffset = spritewidth \ 2 - left ' remember x offset from center
SL_sprites(handle, x, y).yoffset = spriteheight \ 2 - top ' remember y offset from center
SL_sprites(handle, x, y).spritewidth = right - left ' remember sprite width *********** (note to self: may want to remember ) *
SL_sprites(handle, x, y).spriteheight = bottom - top ' remember sprite height *********** (sprite width/height from sheet as well?) *
' generate software image mask and save
IF transparency
< 1 THEN ' is there a transparency layer? SL_sprites
(handle
, x
, y
).mask
= _NEWIMAGE(right
- left
, bottom
- top
, 32) ' yes, create a software image to hold a sprite mask _SOURCE SL_sprites
(handle
, x
, y
).image
' work from the saved sprite image _DEST SL_sprites
(handle
, x
, y
).mask
' write to the newly created mask image FOR x1
= 0 TO SL_sprites
(handle
, x
, y
).spritewidth
' cycle through the width of the sprite FOR y1
= 0 TO SL_sprites
(handle
, x
, y
).spriteheight
' cycle through the height of the sprite IF POINT(x1
, y1
) = transcolor
THEN ' is this pixel a transparent color? PSET (x1
, y1
), _RGB32(255, 255, 255) ' yes, set as white on the mask image
' generate hardware sprite
SL_sprites
(handle
, x
, y
).sprite
= _COPYIMAGE(SL_sprites
(handle
, x
, y
).image
, 33) ' create a hardware image of sprite to use for displaying _FREEIMAGE tempsprite
' temporary sprite image no longer needed _FREEIMAGE sheetimage
' sprite sheet image no longer needed _SOURCE osource
' return source to current _DEST odest
' return destination to current SL_LoadSpriteSheet = handle ' return the handle number pointing to this sheet
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
'³ °°°±±±²²²ÛÛÛ COMMAND DESCRIPTION AND USAGE ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ NOTES ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ Reports a Sprite Library error to the programmer. Used internally only. ³ - A copy of this library has been provided that has all of the error checks removed. Once ³
'³ ³ you are sure no errors exist you would then include that library for your final ³
'³ Input : routine - the function/subroutine the error occurred in ³ compilation. The error checking routines do take some processing away from your code so ³
'³ ³ performance will improve by removing them. ³
'³ Input : errno - the error number associated with the error ³ ³
'³ 100 - sprite does not exist ³ ³
'³ 101 - sprite is not in use ³ ³
'³ 102 - sprite can't be hidden ³ ³
'³ 103 - invalid zoom value ³ ³
'³ 104 - invalid rotation angle ³ ³
'³ 105 - invalid flipping behavior ³ ³
'³ 106 - sheet does not exist ³ ³
'³ 107 - sheet is not in use ³ ³
'³ 108 - invalid transparency setting ³ ³
'³ 109 - invalid sprite width/height ³ ³
'³ ³ ³
'³ info - any information that need to be conveyed with the error ³ ³
'³ such as a file name ³ ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ KNOWN ISSUES ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ CREDITS ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ none ³ This routine was created in response to a request from QB64 member pitt ³
'³ ³ http://www.[abandoned, outdated and now likely malicious qb64 dot net website - don’t go there]/forum/index.php?topic=7281.0 (link no longer works) ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ THEORY OF OPERATION ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ A pure text screen is shown, the font reset to default, and _AUTODISPLAY enabled. This forces the code out of any graphics screen it may currently be in. The error is then displayed to the ³
'³ programmer based on the values passed in. The program is then forced to terminate. ³
'³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ HISTORY ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ Date: 09/09/18 by Terry Ritchie ³
'³ : Initial writing of code. ³
'³ ³
'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SCREEN 0, 0, 0, 0 ' go to a pure text screen _FONT 16 ' set the standard screen 0 font PRINT "**" ' print error header PRINT "** Sprite Library error encountered" PRINT routine;
" has reported the following error:" ' print sub/function reporting the error SELECT CASE errno
' which error number is being reported? PRINT "- the specified sprite does not exist" PRINT "- it was either never created or removed with SPRITEFREE" PRINT "- the specified sprite is not in use" PRINT "- it was probably removed with SPRITEFREE" PRINT "- the specified sprite can't be hidden" PRINT "- change the sprite's behavior in SPRITENEW to save background" PRINT "- the zoom value specified must be greater than zero" PRINT "- the angle specified must be 0 to 360" PRINT "- invalid flipping behavior specified - valid settings are" PRINT "- : 0 = no flipping (constant SL_NONE)" PRINT "- : 1 = flip horizontal (constant SL_HORIZONTAL)" PRINT "- : 2 = flip vertical (constant SL_VERTICAL)" PRINT "- : 3 = flip both (constant SL_BOTH)" PRINT "- ";
CHR$(34); info;
CHR$(34);
" sprite sheet does not exist" PRINT "- check path or spelling" PRINT "- the specified sprite sheet is not in use" PRINT "- invalid transparency setting supplied - valid settings are" PRINT "- : -1 (constant SL_SHEETTRANSPARENCY)" PRINT "- : 0 (constant SL_SETTRANSPARENCY)" PRINT "- : 1 (constant SL_NOTRANSPARENCY)" PRINT "- sprite width and height must be greater than zero"
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
'³ °°°±±±²²²ÛÛÛ COMMAND DESCRIPTION AND USAGE ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ NOTES ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ ³ ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ KNOWN ISSUES ÛÛÛ²²²±±±°°° ³ °°°±±±²²²ÛÛÛ CREDITS ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ ³ ³
'³ ³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ THEORY OF OPERATION ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ ³
'³ ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ °°°±±±²²²ÛÛÛ HISTORY ÛÛÛ²²²±±±°°° ³
'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
'³ ³
'³ ³
'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ