'** NOTES **
' Ideas to add
'
' if SL_EVENT_TRIGGER then 'check for event that was sent (add event triggers)
' - possible link sounds to events
' add gravity, attraction, repulsion SL_SET_PHYSICS
' add mass, elasticity (bounciness?) ^ ^ ^
' add arc calculator for things like a swinging vine or radar scope
' ability to link sprites, when one moves the other moves, break apart when collision happens SL_LINK_SPRITE
' give sprites path-following ability (bezier curves?) SL_FOLLOW_PATH
' divide work space into cells and detect when sprites enter/leave a cell
' stand-alone program to develop sprite sheets (inform) \
' stand-alone program to develop celled work spaces (inform) / combine these into one program?
' when sprite interact their mass, elascticity, etc. govern the way the move and fall
' - I will need help from a math major for this
' Planned additions
'
' Mouse routines
' - detect when mouse interacts with a sprite (hover, click, double click, right click, etc..) SL_MOUSE_STATUS
' ** DONE ** set a score value to a sprite for game score tracking, SL_SET_SCORE, SL_GET_SCORE ** DONE **
' get sprite width and height (both actual and collision box) SL_GET_ACTUAL_WIDTH, SL_GET_ACTUAL_HEIGHT, SL_GET_COLLISION_WIDTH, SL_GET_COLLISION_HEIGHT
' reverse x and y directions for auto/manual movement, SL_MOTION_REVERSEX, SL_MOTION_REVERSEY
' set Z depth of sprite for different planes/layers (possibly incorporate this into zoom?)
' hide/unhide sprites SL_HIDE_SPRITE, SL_SHOW_SPRITE
' collision detection routines (rectangle, round, ellipticle, pixel-perfect, n-space?, prediction?) SL_SET_COLLISION, SL_GET_COLLISION, SL_COLLIDED_WITH
' - need to figure out how to rotate collision box along with sprites, not too hard
' - this will require line segment intersection algorithms for collision detection, yikes! hard, probably need help
' - possibly link sounds to collisions SL_LINK_COLLIDE_SOUND
' Parallaxing layers SL_CREATE_PARALLAX, SL_UPDATE_PARALLAX
' Game font printing
' Sprite tiling, square for sure, isometric?
' Things to improve
'
' Naming convention of constants and their values
' ** DONE ** Remove all for/next loops and replace with do/loop or while/wend ** DONE **
' Use integers wherever possible
' allow SINGLE value rotation angles for accuracy but convert to integer before sprite rotation
' - using only integer now, may not be precise enough for future improvements
' Investigate
'
' Use of _MAPTRIANGLE for 3D rotation SL_ROTATE_3D
' _HARDWARE vs _HARDWARE1
' Remember
'
' Any code added that is OS dependant needs to detect the OS running first
' - try to create routines that are OS dependant for all OS'
'*
'* constant declarations
'*
' CONSTANT NAME DESCRIPTION FUNCTIONS / SUBROUTINES THAT MAY USE THIS CONSTANT
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
CONST SL_RESET
= -32767 ' reset a function or subroutine SL_ROTATE_SPRITE, SL_FLIP_SPRITE, SL_ZOOM_SPRITE, SL_SET_ZOOM, SL_CHANGE_AUTOROTATION, SL_CHANGE_AUTOMOTION, SL_CHANGE_ROTATION_SPEED CONST SL_NOFLIP
= 0 ' sprite will use no flipping SL_FLIP_SPRITE CONST SL_HORIZONTAL
= 1 ' sprite will be flipped horizontally SL_FLIP_SPRITE CONST SL_VERTICAL
= 2 ' sprite will be flipped vertically SL_FLIP_SPRITE CONST SL_FLIPBOTH
= 3 ' sprite will be flipped both direction SL_FLIP_SPRITE CONST SL_USESHEET
= -1 ' use sheet's transparency info (.PNG) SL_NEW_SHEET CONST SL_SET
= 0 ' manually set transparency SL_NEW_SHEET CONST SL_NONE
= 1 ' don't use transparency with sheet SL_NEW_SHEET CONST SL_NOSAVE
= 0 ' sprite will not save background SL_NEW_SPRITE, SL_SET_SOFTWARE CONST SL_SAVE
= -1 ' sprite will save background SL_NEW_SPRITE, SL_SET_SOFTWARE CONST SL_HARDWARE
= 0 ' sprite in hardware mode SL_NEW_SPRITE CONST SL_SOFTWARE
= -1 ' sprite in software mode SL_NEW_SPRITE CONST SL_START
= -1 ' enable auto motion / rotation SL_CHANGE_AUTOMOTION, SL_CHANGE_AUTOROTATION, SL_SET_AUTOANIMATION, SL_SET_ANIMATION, SL_SET_MOTION, SL_SET_ROTATION CONST SL_STOP
= 0 ' disable auto motion / rotation SL_CHANGE_AUTOMOTION, SL_CHANGE_AUTOROTATION, SL_SET_AUTOANIMATION, SL_SET_ANIMATION, SL_SET_MOTION, SL_SET_ROTATION, SL_CHANGE_ROTATION_SPEED CONST SL_FORWARD
= 0 ' animation cells proceed forward SL_SET_ANIMATION CONST SL_BACKWARD
= 1 ' animation cells proceed backwards SL_SET_ANIMATION CONST SL_BACKFORTH
= 2 ' animation cells toggle forward/backward SL_SET_ANIMATION CONST SL_CURRENTCELL
= -1 ' use current cell as starting cell SL_SET_ANIMATION, SL_CHANGE_ANIMATION_CELLS
'*
'* type declarations
'*
TYPE SL_SHEET
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ SPRITE SHEET DATABASE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ image
AS LONG ' software sprite image mask
AS LONG ' software mask image cell
AS INTEGER ' the animation cell of this sprite collx2
AS INTEGER ' collision box bottom right x colly2
AS INTEGER ' collision box bottom right y transparency
AS INTEGER ' -1 (TRUE) if sheet uses transparencyEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_XY
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ X,Y LOCATIONS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ real
AS SINGLE ' single values of sprite x,y center point actual
AS INTEGER ' integer values of sprite upper left x,y location back
AS INTEGER ' integer values of sprite's background image x,y location dir
AS SINGLE ' single values of sprite x,y motion vectorsEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_IMAGE
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ IMAGES ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ sprite
AS LONG ' hardware sprite image image
AS LONG ' software sprite image mask
AS LONG ' software sprite mask image back
AS LONG ' software sprite saved background imageEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_ANIM
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ANIMATION SETTINGS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ cellfrom
AS INTEGER ' starting animation cell mode
AS INTEGER ' animation mode (forward, backward, back/forth) framerate
AS INTEGER ' sprite animation frame rate skip
AS INTEGER ' how often to skip a frame to achieve framerateEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_MOTION
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ MOTION SETTINGS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ auto
AS INTEGER ' -1 (TRUE) if auto-motion turned on speed
AS SINGLE ' speed of sprite during motion angle
AS INTEGER ' direction of sprite during motion (0 - 359)END TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_ROTATION
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ROTATION SETTINGS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ auto
AS INTEGER ' -1 (TRUE) if auto-rotation turned on speed
AS INTEGER ' spin rate in degrees of sprite (0 - 359) angle
AS INTEGER ' current rotation angle of spriteEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_SPRITE
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ SPRITE DATABASE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ x
AS SL_XY
' x coordinate locations y
AS SL_XY
' y coordinate locations gfx
AS SL_IMAGE
' image graphics anim
AS SL_ANIM
' animation settings motion
AS SL_MOTION
' motion settings rotation
AS SL_ROTATION
' rotation settings column
AS INTEGER ' the column on the sheet the sprite resides row
AS INTEGER ' the row on the sheet the sprite resides collx2
AS INTEGER ' collision box bottom right x colly2
AS INTEGER ' collision box bottom right y flip
AS INTEGER ' flip horizontally, vertically, or both transparency
AS INTEGER ' -1 (TRUE) if sprite uses transparency zoom
AS INTEGER ' zoom level of sprite (1% - x%) software
AS INTEGER ' -1 (TRUE) if sprite is to be treated as software imageEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
TYPE SL_ROTATE
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ PRECALCULATED ROTATION TABLE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ rheight
AS INTEGER ' height of rotated sprite px0
AS INTEGER ' rectangular rotation coordinatesEND TYPE ' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'*
'* global dynamic array declarations
'*
REDIM SL_sheet
(1, 1, 1) AS SL_SHEET
' master sprite sheet array REDIM SL_sprite
(1) AS SL_SPRITE
' master working sprite array REDIM SL_rotate
(1, 359) AS SL_ROTATE
' precalculated rotation values
'*
'* global variable declarations
'*
'*
'* main code (for testing)
'*
SL_SET_FRAMERATE 30
kongsheet
= SL_NEW_SHEET
("dkong.png", 64, 64, SL_SET
, _RGB32(255, 0, 255))mysprite = SL_NEW_SPRITE(kongsheet, 1, 1, SL_HARDWARE, SL_NOSAVE)
'mysprite2 = SL_NEW_SPRITE(kongsheet, 1, 1, SL_SOFTWARE, SL_NOSAVE)
'SL_FLIP_SPRITE mysprite, SL_HORIZONTAL
'SL_SET_ZOOM mysprite, 125
'SL_SET_MOTION mysprite, 90, 3, SL_START
SL_SET_ROTATION mysprite, 0, 5, SL_START
'SL_SET_ROTATION mysprite2, 180, 10, SL_START
SL_SET_ANIMATION mysprite, 1, 3, SL_FORWARD, 10, SL_START
SL_PUT_SPRITE 128, 128, mysprite
'SL_PUT_SPRITE 128, 128, mysprite2
x = x + 1
'SL_CHANGE_MOTION_SPEED mysprite, SL_GET_MOTION_SPEED(mysprite) * 1.1
'SL_CHANGE_ROTATION_SPEED mysprite, SL_GET_ROTATION_SPEED(mysprite) + 1
x = 0
SL_UPDATE_AUTO_SPRITES
SL_FREE_SPRITE mysprite
'SL_FREE_SPRITE mysprite2
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== ANIMATION ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_SET_FRAMERATE
(framerate
AS INTEGER) ' SL_SET_FRAMERATE 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' declare local variables
DIM handle
AS INTEGER ' cycle counter through sprite handles
' perform error checks
IF framerate
< 1 THEN ' valid frame rate? SL_ERROR "SL_SET_FRAMERATE", 10, "" ' no, report error to programmer
' set local variables
SL_framerate = framerate ' set global frame rate
handle = 0 ' reset handle counter
DO ' update all available sprites handle = handle + 1 ' increment sprite pointer
IF SL_sprite
(handle
).inuse
THEN ' is this sprite in use? IF SL_sprite
(handle
).anim.framerate
THEN ' yes, does it contain an animation frame rate? IF SL_framerate
< SL_sprite
(handle
).anim.framerate
THEN ' is new global frame rate less than sprite's frame rate? SL_sprite(handle).anim.framerate = SL_framerate ' yes, set sprite's frame rate to global frame rate
IF SL_framerate
= SL_sprite
(handle
).anim.framerate
THEN ' animation and global frame rates the same? SL_sprite(handle).anim.skip = 0 ' yes, nothing needs to be done with frames
ELSEIF SL_sprite
(handle
).anim.framerate
>= SL_framerate \
2 THEN ' no, sprite frame rate 1/2 or less of master frame rate? SL_sprite(handle).anim.skip = SL_framerate \ (SL_framerate - SL_sprite(handle).anim.framerate) ' yes, calculate every frame to skip
ELSE ' no, sprite frame rate is greater than 1/2 of master frame rate SL_sprite(handle).anim.skip = SL_framerate \ SL_sprite(handle).anim.framerate ' calculate every frame to draw
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
FUNCTION SL_GET_FRAMERATE
() ' SL_GET_FRAMERATE 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SL_GET_FRAMERATE = SL_framerate ' return global frame rate
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_NEXT_ANIMATION_CELL
(handle
AS INTEGER) ' SL_NEXT_ANIMATION_CELL 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_NEXT_ANIMATION_CELL", 1, "" ' no, report error to programmer
IF NOT SL_sprite
(handle
).anim.cellfrom
THEN ' has animation been assigned to this sprite? SL_ERROR "SL_NEXT_ANIMATION_CELL", 15, "" ' no, report error to programmer
IF SL_sprite
(handle
).anim.auto
THEN ' is this sprite under auto animation control? SL_ERROR "SL_NETXT_ANIMATION_CELL", 18, "" ' yes, report error to programmer
SELECT CASE SL_sprite
(handle
).anim.mode
' which animation mode is this sprite using? CASE 0 ' (SL_FORWARD) move forward through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell + 1 ' increment animation cell
IF SL_sprite
(handle
).anim.cell
> SL_sprite
(handle
).anim.cellto
THEN ' passed the last cell? SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cellfrom ' yes, go back to first cell
CASE 1 ' (SL_BACKWARD) move backward through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell - 1 ' decrement animation cell
IF SL_sprite
(handle
).anim.cell
< SL_sprite
(handle
).anim.cellfrom
THEN ' passed the first cell? SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cellto ' yes, go back to last cell
CASE 2 ' (SL_BACKFORTH) ping-pong back and forth through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell + SL_sprite(handle).anim.dir ' increment/decrement animation cell
IF SL_sprite
(handle
).anim.cell
= SL_sprite
(handle
).anim.cellto
OR _
SL_sprite
(handle
).anim.cell
= SL_sprite
(handle
).anim.cellfrom
THEN ' is this the first or last cell? SL_sprite(handle).anim.dir = -SL_sprite(handle).anim.dir ' yes, reverse animation direction
SL_sprite(handle).column = SL_GET_COLUMN(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell column on sheet and save
SL_sprite(handle).row = SL_GET_ROW(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell row on sheet and save
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' change a sprite's animation sequence
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_ANIMATION_CELLS", 1, "" ' no, report error to programmer
IF NOT SL_sprite
(handle
).anim.cellfrom
THEN ' has animation been assigned to this sprite? SL_ERROR "SL_CHANGE_ANIMATION_CELLS", 15, "" ' no, report error to programmer
IF cellfrom
<> -1 THEN ' (SL_CURRENTCELL) is the current cell being requested for cellfrom? IF cellfrom
< 1 OR (NOT SL_VALID_CELL
(SL_sprite
(handle
).sheet
, cellfrom
)) THEN ' no, is this a valid cell request? SL_ERROR "SL_CHANGE_ANIMATION_CELLS", 13, "" ' no, report error to rpogrammer
IF cellto
< 1 OR (NOT SL_VALID_CELL
(SL_sprite
(handle
).sheet
, cellto
)) THEN ' is this valid cell request? SL_ERROR "SL_CHANGE_ANIMATION_CELLS", 13, "" ' no, report error to programmer
IF cellfrom
= -1 THEN ' (SL_CURRENTCELL) use current cell as start cell? SL_sprite(handle).anim.cellfrom = SL_sprite(handle).anim.cell ' yes, set first cell as current cell
SL_sprite(handle).anim.cellfrom = cellfrom ' set first cell in animation
SL_sprite(handle).anim.cellto = cellto ' set last cell in animation
SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cellfrom ' set current cell to first cell
IF SL_sprite
(handle
).anim.cellto
<= SL_sprite
(handle
).anim.cellfrom
THEN ' is cellto greater than cellfrom? SL_ERROR "SL_CHANGE_ANIMATION_CELLS", 19, "" ' no, report error to programmer
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_CHANGE_ANIMATION_FRAMERATE
(handle
AS INTEGER, framerate
AS INTEGER) ' SL_CHANGE_ANIMATION_FRAMERATE 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF framerate
< 1 OR framerate
> SL_framerate
THEN ' valid frame rate supplied? SL_ERROR "SL_CHANGE_ANIMATION_FRAMERATE", 11, "" ' no, report error to programmer
SL_sprite(handle).anim.framerate = framerate ' save sprite frame rate
IF SL_framerate
= framerate
THEN ' animation and global frame rates the same? SL_sprite(handle).anim.skip = 0 ' yes, nothing needs to be done with frames
ELSEIF framerate
>= SL_framerate \
2 THEN ' no, sprite frame rate 1/2 or less of master frame rate? SL_sprite(handle).anim.skip = SL_framerate \ (SL_framerate - framerate) ' yes, calculate every frame to skip
ELSE ' no, sprite frame rate is greater than 1/2 of master frame rate SL_sprite(handle).anim.skip = SL_framerate \ framerate ' calculate every frame to draw
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_AUTOANIMATION", 1, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' valid auto animation value? SL_ERROR "SL_CHANGE_ANIMATION", 14, "" ' no, report error to programmer
SL_sprite(handle).anim.auto = auto ' (SL_START & SL_STOP) set auto-animation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_ANIMATION", 1, "" ' no, report error to programmer
IF framerate
< 1 OR framerate
> SL_framerate
THEN ' valid frame rate supplied? SL_ERROR "SL_SET_ANIMATION", 11, "" ' no, report error to programmer
IF mode
< 0 OR mode
> 2 THEN ' valid animation mode supplied? SL_ERROR "SL_SET_ANIMATION", 12, "" ' no, report error to programmer
IF cellfrom
<> -1 THEN ' (SL_CURRENTCELL) is the current cell being requested for cellfrom? IF cellfrom
< 1 OR (NOT SL_VALID_CELL
(SL_sprite
(handle
).sheet
, cellfrom
)) THEN ' no, is this a valid cell request? SL_ERROR "SL_SET_ANIMATION", 13, "" ' no, report error to rpogrammer
IF cellto
< 1 OR (NOT SL_VALID_CELL
(SL_sprite
(handle
).sheet
, cellto
)) THEN ' is this valid cell request? SL_ERROR "SL_SET_ANIMATION", 13, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' valid auto animation value? SL_ERROR "SL_SET_ANIMATION", 14, "" ' no, report error to programmer
IF cellfrom
= -1 THEN ' (SL_CURRENTCELL) use current cell as start cell? SL_sprite(handle).anim.cellfrom = SL_sprite(handle).anim.cell ' yes, set first cell as current cell
SL_sprite(handle).anim.cell = cellfrom ' set starting cell
SL_sprite(handle).anim.cellfrom = cellfrom ' set first cell in animation
SL_sprite(handle).anim.cellto = cellto ' set last cell in animation
IF cellto
<= cellfrom
THEN ' is cellto greater than cellfrom? SL_ERROR "SL_SET_ANIMATION", 19, "" ' no, report error to programmer
SL_sprite(handle).column = SL_GET_COLUMN(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell column on sheet
SL_sprite(handle).row = SL_GET_ROW(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell row on sheet
SL_sprite(handle).anim.framerate = framerate ' save sprite frame rate
IF SL_framerate
= framerate
THEN ' animation and global frame rates the same? SL_sprite(handle).anim.skip = 0 ' yes, nothing needs to be done with frames
ELSEIF framerate
>= SL_framerate \
2 THEN ' no, sprite frame rate 1/2 or less of master frame rate? SL_sprite(handle).anim.skip = SL_framerate \ (SL_framerate - framerate) ' yes, calculate every frame to skip
ELSE ' no, sprite frame rate is greater than 1/2 of master frame rate SL_sprite(handle).anim.skip = SL_framerate \ framerate ' calculate every frame to draw
SL_sprite(handle).anim.frame = 0 ' reset skip frame counter
SL_sprite(handle).anim.mode = mode ' (SL_FORWARD & SL_BACKWARD & SL_BACKFORTH) set animation mode
IF mode
= 0 OR mode
= 2 THEN ' (SL_FORWARD or SL_BACKFORTH) forward or back and forth? SL_sprite(handle).anim.dir = 1 ' yes, set animation direction forward
ELSE ' (SL_BACKWARD) no, backward SL_sprite(handle).anim.dir = -1 ' set animation direction backward
SL_sprite(handle).anim.auto = auto ' (SL_START & SL_STOP) set auto-animation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array
' perform error checks
IF NOT SL_VALID_SHEET
(sheet
) THEN ' is this a valid sheet? SL_ERROR "SL_GET_ROW", 5, "" ' no, report error to programmer
IF NOT SL_VALID_CELL
(sheet
, cell
) THEN ' is this a valid cell? SL_ERROR "SL_GET_ROW", 13, "" ' no, report error to programmer
IF cell
MOD SL_sheet
(sheet
, 0, 0).swidth
= 0 THEN ' right-most column? SL_GET_ROW = cell \ SL_sheet(sheet, 0, 0).swidth ' yes, calculate and return row
ELSE ' no, in another column SL_GET_ROW = cell \ SL_sheet(sheet, 0, 0).swidth + 1 ' calculate and return row
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array
' declare local variables
' perform error checks
IF NOT SL_VALID_SHEET
(sheet
) THEN ' is this a valid sheet? SL_ERROR "SL_GET_COLUMN", 5, "" ' no, report error to programmer
IF NOT SL_VALID_CELL
(sheet
, cell
) THEN ' is this a valid cell? SL_ERROR "SL_GET_COLUMN", 13, "" ' no, report error to programmer
column
= cell
MOD SL_sheet
(sheet
, 0, 0).swidth
' get column sprite is in IF column
= 0 THEN ' right-most column? SL_GET_COLUMN = SL_sheet(sheet, 0, 0).swidth ' return right-most column value
ELSE ' no, in another column SL_GET_COLUMN = column ' return the column sprite is in
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_CELL", 1, "" ' no, report error to programmer
SL_GET_CELL = SL_sprite(handle).anim.cell ' return animation cell of this sprite
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array
IF NOT SL_VALID_SHEET
(sheet
) THEN ' is this a valid sheet? SL_ERROR "SL_VALID_CELL", 5, "" ' no, report error to programmer
IF (cell
> SL_sheet
(sheet
, 0, 0).swidth
* SL_sheet
(sheet
, 0, 0).sheight
) OR (cell
< 1) THEN ' does cell exceed total cells on sheet or less than one? SL_VALID_CELL = 0 ' (FALSE) yes, return false for invalid cell
ELSE ' no, within total cells SL_VALID_CELL = -1 ' (TRUE) return true for valid cell
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== MOTION ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_REVERSE_MOTIONX
(handle
AS INTEGER) ' SL_REVERSE_MOTIONX 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_REVERSE_MOTIONX", 1, "" ' no, report error to programmer
SL_sprite(handle).x.dir = -SL_sprite(handle).x.dir ' reverse x motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_REVERSE_MOTIONY
(handle
AS INTEGER) ' SL_REVERSE_MOTIONY 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_REVERSE_MOTIONY", 1, "" ' no, report error to programmer
SL_sprite(handle).y.dir = -SL_sprite(handle).y.dir ' reverse y motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_MOTIONX", 1, "" ' no, report error to programmer
SL_GET_MOTIONX = SL_sprite(handle).x.dir ' return x motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_MOTIONY", 1, "" ' no, report error to programmer
SL_GET_MOTIONY = SL_sprite(handle).y.dir ' return y motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_MOTIONX", 1, "" ' no, report error to programmer
SL_sprite(handle).x.dir = xdir ' set x motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_MOTIONY", 1, "" ' no, report error to programmer
SL_sprite(handle).y.dir = ydir ' set y motion direction
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_UPDATE_MOTION", 1, "" ' no, report error to programmer
IF SL_sprite
(handle
).motion.auto
THEN ' attempt to move sprite under automatic control? SL_ERROR "SL_UPDATE_MOTION", 16, "" ' yes, report error to programmer
SL_sprite(handle).x.real = SL_sprite(handle).x.real + SL_sprite(handle).x.dir ' update x location
SL_sprite(handle).y.real = SL_sprite(handle).y.real + SL_sprite(handle).y.dir ' update y location
SL_PUT_SPRITE SL_sprite(handle).x.real, SL_sprite(handle).y.real, handle ' update sprite location
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_DIRECTION", 1, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' (SL_START & SL_STOP) valid on/off switch supplied? SL_ERROR "SL_CHANGE_AUTOMOTION", 7, "" ' no, report error to programmer
SL_sprite(handle).motion.speed = speed ' set motion speed of sprite
SL_CHANGE_MOTION_DIRECTION handle, degrees ' set motion angle of sprite
SL_sprite(handle).motion.auto = auto ' (SL_START & SL_STOP) set auto-motion of sprite
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' delcare local variables
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_MOTION_DIRECTION", 1, "" ' no, report error to programmer
degree = SL_FIX_DEGREES(degrees) ' get degree angle passed in
SL_sprite(handle).motion.angle = degree ' set motion degree angle
SL_sprite
(handle
).x.dir
= SIN(degree
* .017453292) * SL_sprite
(handle
).motion.speed
' calculate x vector SL_sprite
(handle
).y.dir
= -COS(degree
* .017453292) * SL_sprite
(handle
).motion.speed
' calculate y vector
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_MOTION_DIRECTION", 1, "" ' no, report error to programmer
SL_GET_MOTION_DIRECTION = SL_sprite(handle).motion.angle ' return direction sprite currently set to
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_MOTION_SPEED", 1, "" ' no, report error to programmer
SL_sprite(handle).motion.speed = speed ' set sprite motion speed
SL_sprite
(handle
).x.dir
= SIN(SL_sprite
(handle
).motion.angle
* .017453292) * speed
' calculate x vector SL_sprite
(handle
).y.dir
= -COS(SL_sprite
(handle
).motion.angle
* .017453292) * speed
' calculate y vector
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_MOTION_SPEED", 1, "" ' no, report error to programmer
SL_GET_MOTION_SPEED = SL_sprite(handle).motion.speed ' return current sprite motion speed
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
IF auto
= -32767 THEN ' (SL_RESET) reset auto motion? SL_sprite(handle).motion.auto = 0 ' (FALSE) yes, turn auto motion off
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_AUTOMOTION", 1, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' (SL_START & SL_STOP) valid on/off switch supplied? SL_ERROR "SL_CHANGE_AUTOMOTION", 7, "" ' no, report error to programmer
SL_sprite(handle).motion.auto = auto ' (TRUE & FALSE) set auto motion status
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_AUTOMOTION", 1, "" ' no, report error to programmer
SL_GET_AUTOMOTION = SL_sprite(handle).motion.auto ' (TRUE & FALSE) return auto motion status
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== ROTATION ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_UPDATE_ROTATION
(handle
AS INTEGER) ' SL_UPDATE_ROTATION 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_UPDATE_ROTATION", 1, "" ' no, report error to programmer
IF SL_sprite
(handle
).rotation.auto
THEN ' attempt to rotate sprite under automatic control? SL_ERROR "SL_UPDATE_ROTATION", 17, "" ' yes, report error to programmer
SL_ROTATE_SPRITE handle, SL_sprite(handle).rotation.angle + SL_sprite(handle).rotation.speed ' rotate sprite to next degree angle
SL_PUT_SPRITE SL_sprite(handle).x.real, SL_sprite(handle).y.real, handle ' update sprite rotation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_ROTATION", 1, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' (SL_START & SL_STOP) valid on/off switch supplied? SL_ERROR "SL_SET_ROTATION", 8, "" ' no, report error to programmer
IF ABS(degrees
) > 359 THEN ' degree requested between -359 and 359? SL_ERROR "SL_SET_ROTATION", 9, "" ' no, report error to programmer
SL_sprite(handle).rotation.speed = speed ' set rotation speed
SL_ROTATE_SPRITE handle, degrees ' set start angle
SL_sprite(handle).rotation.auto = auto ' set auto-rotation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
IF auto
= -32767 THEN ' (SL_RESET) reset auto rotate? SL_sprite(handle).rotation.auto = 0 ' (FALSE) yes, turn auto rotation off
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_AUTOROTATION", 1, "" ' no, report error to programmer
IF auto
< -1 OR auto
> 0 THEN ' (SL_START & SL_STOP) valid on/off switch supplied? SL_ERROR "SL_CHANGE_AUTOROTATION", 8, "" ' no, report error to programmer
SL_sprite(handle).rotation.auto = auto ' (TRUE & FALSE) set auto rotation status
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_AUTOROTATION", 1, "" ' no, report error to programmer
SL_GET_AUTOROTATION = SL_sprite(handle).rotation.auto ' (TRUE & FALSE) return auto rotation status
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF degrees
= -32767 THEN ' (SL_RESET) reset requested? SL_sprite(handle).rotation.speed = 0 ' (SL_STOP) turn auto spin off
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_CHANGE_ROTATION_SPEED", 1, "" ' no, report error to programmer
IF ABS(degrees
) > 359 THEN ' degree requested between -359 and 359? SL_ERROR "SL_CHANGE_ROTATION_SPEED", 9, "" ' no, report error to programmer
SL_sprite(handle).rotation.speed = degrees ' set sprite spin rate
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_ROTATION_SPEED", 1, "" ' no, report error to programmer
SL_GET_ROTATION_SPEED = SL_sprite(handle).rotation.speed ' return current sprite spin rate
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_ROTATE_SPRITE", 1, "" ' no, report error to programmer
IF degrees
= -32767 THEN ' (SL_RESET) reset sprite rotation? SL_sprite(handle).rotation.angle = 0 ' reset rotation angle
SL_sprite(handle).rotation.angle = SL_FIX_DEGREES(degrees) ' set degree of rotation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' Credits: this function uses code contriibuted by codeguy
' https://www.qb64.org/forum/index.php?topic=537.15
'declare local variables
' set local variables
degree
= degrees
MOD 360 ' get -359 to 359 IF degree
< 0 THEN ' need to make positive? SL_FIX_DEGREES = degree + 360 ' yes, correct value and return degree angle
SL_FIX_DEGREES = degree ' no correction needed, return degree angle
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== LOCATION ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_REALX", 1, "" ' no, report error to programmer
SL_GET_REALX = SL_sprite(handle).x.real ' return real number center point x
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_REALY", 1, "" ' no, report error to programmer
SL_GET_REALY = SL_sprite(handle).y.real ' return real number center point y
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_INTX", 1, "" ' no, report error to programmer
SL_GET_INTX
= SL_sprite
(handle
).x.
int ' return integer number center point x
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_INTY", 1, "" ' no, report error to programmer
SL_GET_INTY
= SL_sprite
(handle
).y.
int ' return integer number center point x
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_ACTUALX", 1, "" ' no, report error to programmer
SL_GET_ACTUALX = SL_sprite(handle).x.actual ' return integer number upper left point x
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_ACTUALY", 1, "" ' no, report error to programmer
SL_GET_ACTUALY = SL_sprite(handle).y.actual ' return integer number upper left point y
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'declare local variables
'solve for c (hypotenuse)
a = x1 - x2 ' get length of side a
b = y1 = y2 ' get length of side b
SL_GET_DISTANCE_POINT_TO_POINT
= INT(SQR(a
* a
+ b
* b
)) ' return length of side c
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF (NOT SL_VALID_SPRITE
(handle1
)) OR (NOT SL_VALID_SPRITE
(handle2
)) THEN ' are these valid sprites? SL_ERROR "SL_GET_DISTANCE_TO_SPRITE", 1, "" ' no, report error to programmer
SL_GET_DISTANCE_TO_SPRITE
= SL_GET_DISTANCE_POINT_TO_POINT
(SL_sprite
(handle1
).x.
int, SL_sprite
(handle1
).y.
int, _
SL_sprite
(handle2
).x.
int, SL_sprite
(handle2
).y.
int) ' return distance to sprite 2
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_DISTANCE_TO_POINT", 1, "" ' no, report error to programmer
SL_GET_DISTANCE_TO_POINT
= SL_GET_DISTANCE_POINT_TO_POINT
(SL_sprite
(handle
).x.
int, SL_sprite
(handle
).y.
int, x
, y
) ' return distance to point
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'declare local variables
DIM angle
AS INTEGER ' angle from first x,y location to second x,y location
IF y1
= y2
THEN ' both y values same? IF x1
= x2
THEN ' yes, both x values same? IF x2
> x1
THEN ' is second x to the right of first x? SL_GET_ANGLE_POINT_TO_POINT = 90 ' yes, the angle must be 90 degrees
ELSE ' no, second x is to the left of first x SL_GET_ANGLE_POINT_TO_POINT = 270 ' the angle must be 270 degrees
IF x1
= x2
THEN ' both x values same? IF y2
> y1
THEN ' yes, is second y lower than first y? SL_GET_ANGLE_POINT_TO_POINT = 180 ' yes, the angle must be 180
EXIT FUNCTION ' leave function, angle computed (angle is 0 if no calculation done) angle
= ATN((x2
- x1
) / (y2
- y1
)) * -57.2957795131 ' calculate initial angle IF y2
< y1
THEN ' is second y higher than first y? IF x2
> x1
THEN ' yes, is second x to right of first x? SL_GET_ANGLE_POINT_TO_POINT = angle ' yes, angle needs no adjustment
ELSE ' no, second x is to left of first x SL_GET_ANGLE_POINT_TO_POINT = angle + 360 ' adjust angle accordingly
ELSE ' no, second y is lower than first y SL_GET_ANGLE_POINT_TO_POINT = angle + 180 ' adjust angle accordingly
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF (NOT SL_VALID_SPRITE
(handle1
)) OR (NOT SL_VALID_SPRITE
(handle2
)) THEN ' are these valid sprites? SL_ERROR "SL_GET_ANGLE_TO_SPRITE", 1, "" ' no, report error to programmer
SL_GET_ANGLE_TO_SPRITE
= SL_GET_ANGLE_POINT_TO_POINT
(SL_sprite
(handle1
).x.
int, SL_sprite
(handle1
).y.
int, _
SL_sprite
(handle2
).x.
int, SL_sprite
(handle2
).y.
int) ' return angle to sprite 2
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF (NOT SL_VALID_SPRITE
(handle1
)) OR (NOT SL_VALID_SPRITE
(handle2
)) THEN ' are these valid sprites? SL_ERROR "SL_GET_ANGLE_FROM_SPRITE", 1, "" ' no, report error to programmer
SL_GET_ANGLE_FROM_SPRITE
= SL_GET_ANGLE_POINT_TO_POINT
(SL_sprite
(handle2
).x.
int, SL_sprite
(handle2
).y.
int, _
SL_sprite
(handle1
).x.
int, SL_sprite
(handle1
).y.
int) ' return angle from sprite 2
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_ANGLE_TO_POINT", 1, "" ' no, report error to programmer
SL_GET_ANGLE_TO_POINT
= SL_GET_ANGLE_POINT_TO_POINT
(SL_sprite
(handle
).x.
int, SL_sprite
(handle
).y.
int, x
, y
) ' return angle to point x,y
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_ANGLE_FROM_POINT", 1, "" ' no, report error to programmer
SL_GET_ANGLE_FROM_POINT
= SL_GET_ANGLE_POINT_TO_POINT
(x
, y
, SL_sprite
(handle
).x.
int, SL_sprite
(handle
).y.
int) 'return angle from point x,y
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== SPRITE ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' declare local variables
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_COPY_SPRITE", 1, "" ' no, report error to programmer
newhandle = 0 ' initialize new handle counter
' increase sprite array's size if needed
DO ' look for next available handle newhandle = newhandle + 1 ' increment to next handle value
LOOP UNTIL (NOT SL_sprite
(newhandle
).inuse
) OR newhandle
= UBOUND(SL_sprite
) ' stop looking when valid handle found IF SL_sprite
(newhandle
).inuse
THEN ' is the last array element in use? newhandle = newhandle + 1 ' yes, increment to next handle value
REDIM _PRESERVE SL_sprite
(newhandle
) AS SL_SPRITE
' increase the size of the sprite array
' copy new sprite
SL_sprite(newhandle) = SL_sprite(handle) ' copy entire sprite contents
SL_sprite
(newhandle
).gfx.sprite
= _COPYIMAGE(SL_sprite
(handle
).gfx.sprite
, 33) ' create an actual copy of the hardware sprite SL_sprite
(newhandle
).gfx.image
= _COPYIMAGE(SL_sprite
(handle
).gfx.image
, 32) ' create an actual copy of the software image IF SL_sprite
(handle
).gfx.mask
THEN ' does the original contain a mask image? SL_sprite
(newhandle
).gfx.mask
= _COPYIMAGE(SL_sprite
(handle
).gfx.mask
, 32) ' yes, create an actual copy of the software mask image
SL_COPY_SPRITE = newhandle ' return new sprite's handle pointer
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' declare local variables
DIM tempsprite
AS LONG ' temporary sprite to stamp
' set local variables
degree = SL_FIX_DEGREES(degrees) ' get rotation degree passed in
' perform error checks
IF NOT SL_VALID_SHEET
(sheet
) THEN ' is this a valid sheet? SL_ERROR "SL_STAMP_SPRITE", 5, "" ' no, report error to programmer
IF column
> UBOUND(SL_sheet
, 2) OR row
> UBOUND(SL_sheet
, 3) OR row
< 1 OR column
< 1 THEN ' valid row and column requested? SL_ERROR "SL_STAMP_SPRITE", 6, "" ' no, report error to programmer
IF flip
< 0 OR flip
> 3 THEN ' valid flip behavior requested? SL_ERROR "SL_STAMP_SPRITE", 3, "" ' no, report error to programmer
IF zoom
< 1 THEN ' valid zoom level requested? SL_ERROR "SL_STAMP_SPRITE", 4, "" ' no, report error to programmer
tempsprite = SL_NEW_SPRITE(sheet, column, row, 0, 0) ' create new temporary sprite
SL_sprite(tempsprite).rotation.speed = degree ' set speed of rotation
SL_sprite(tempsprite).flip = flip ' set flipping behavior
SL_sprite(tempsprite).zoom = zoom ' set zoom level
SL_PUT_SPRITE x, y, tempsprite ' place sprite on current destination
SL_FREE_SPRITE tempsprite ' temporary sprite no longer needed
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SUB SL_UPDATE_AUTO_SPRITES
() ' SL_UPDATE_AUTO_SPRITES 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' declare local variables
DIM nextcell
AS SINGLE ' draw or skip next animation cell
' local variable setup
handle = 0 ' initialize handle counter
DO ' cycle through all sprite indexes handle = handle + 1 ' increment to next sprite handle
IF SL_sprite
(handle
).inuse
AND (SL_sprite
(handle
).motion.auto
OR _
SL_sprite
(handle
).rotation.auto
OR _
SL_sprite
(handle
).anim.auto
) THEN ' is this sprite being used and automagically controlled?
' auto motion
IF SL_sprite
(handle
).motion.auto
THEN ' yes, is auto motion enabled? SL_sprite(handle).x.real = SL_sprite(handle).x.real + SL_sprite(handle).x.dir ' yes, update x location
SL_sprite(handle).y.real = SL_sprite(handle).y.real + SL_sprite(handle).y.dir ' update y location
' auto rotation
IF SL_sprite
(handle
).rotation.auto
THEN ' is auto rotation enabled? SL_sprite(handle).rotation.angle = SL_FIX_DEGREES(SL_sprite(handle).rotation.angle_
+ SL_sprite(handle).rotation.speed) ' yes, rotate sprite to next degree angle
' auto animation
IF SL_sprite
(handle
).anim.auto
THEN ' is auto animation enabled? IF SL_sprite
(handle
).anim.skip
= 0 THEN ' yes, always go to next cell? nextcell = -1 ' (TRUE) yes, draw next cell
' decide to draw or skip next cell
SL_sprite(handle).anim.frame = SL_sprite(handle).anim.frame + 1 ' increment frame counter
IF SL_sprite
(handle
).anim.skip
= SL_sprite
(handle
).anim.frame
THEN ' time to skip or go to next cell? SL_sprite(handle).anim.frame = 0 ' yes, reset the frame counter
IF SL_sprite
(handle
).anim.framerate
>= SL_framerate \
2 THEN ' should this cell be skipped? nextcell = 0 ' (FALSE) yes, skip next cell
nextcell = -1 ' (TRUE) go to next cell
ELSEIF SL_sprite
(handle
).anim.framerate
>= SL_framerate \
2 THEN ' no, is sprite frame rate equal or greater than half global frame rate? nextcell = -1 ' yes, go to next cell
' draw next cell
IF nextcell
THEN ' update animation cell? SELECT CASE SL_sprite
(handle
).anim.mode
' which animation mode is this sprite using? CASE 0 ' (SL_FORWARD) move forward through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell + 1 ' increment animation cell
IF SL_sprite
(handle
).anim.cell
> SL_sprite
(handle
).anim.cellto
THEN ' passed the last cell? SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cellfrom ' yes, go back to first cell
CASE 1 ' (SL_BACKWARD) move backward through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell - 1 ' decrement animation cell
IF SL_sprite
(handle
).anim.cell
< SL_sprite
(handle
).anim.cellfrom
THEN ' passed the first cell? SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cellto ' yes, go back to last cell
CASE 2 ' (SL_BACKFORTH) ping-pong back and forth through the cells SL_sprite(handle).anim.cell = SL_sprite(handle).anim.cell + SL_sprite(handle).anim.dir ' increment/decrement animation cell
IF SL_sprite
(handle
).anim.cell
= SL_sprite
(handle
).anim.cellto
OR _
SL_sprite
(handle
).anim.cell
= SL_sprite
(handle
).anim.cellfrom
THEN ' is this the first or last cell? SL_sprite(handle).anim.dir = -SL_sprite(handle).anim.dir ' yes, reverse animation direction
SL_sprite(handle).column = SL_GET_COLUMN(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell column on sheet
SL_sprite(handle).row = SL_GET_ROW(SL_sprite(handle).sheet, SL_sprite(handle).anim.cell) ' get cell row on sheet
SL_PUT_SPRITE SL_sprite(handle).x.real, SL_sprite(handle).y.real, handle ' update sprite motion location, rotation, and animation
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_SOFTWARE", 1, "" ' no, report error to programmer
IF restores
< -1 OR restores
> 0 THEN ' valid background restoration behavior requested? SL_ERROR "SL_SET_SOFTWARE", 2, "" ' no, report error to programmer
SL_sprite(handle).software = -1 ' (SL_SOFTWARE) set sprite to software mode
SL_sprite
(handle
).
restore = restores
' (SL_SAVE & SL_NOSAVE) set background saving behavior
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
'perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_HARDWARE", 1, "" ' no, report error to programmer
SL_sprite(handle).software = 0 ' (SL_HARDWARE) set sprite to hardware mode
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
IF zoom
= -32767 THEN ' (SL_RESET) reset zoom level? SL_sprite(handle).zoom = 100 ' yes, reset level to normal
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_ZOOM", 1, "" ' no, report error to programmer
IF zoom
< 1 THEN ' valid zoom level requested? SL_ERROR "SL_SET_ZOOM", 4, "" ' no, report error to programmer
SL_sprite(handle).zoom = zoom ' set zoom level
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_FLIP_SPRITE", 1, "" ' no, report error to programmer
IF flip
< 0 OR flip
> 3 THEN ' valid flip behavior requested? SL_ERROR "SL_FLIP_SPRITE", 3, "" ' no, report error to programmer
IF flip
= -32767 THEN ' (SL_RESET) reset flipping behavior? SL_sprite(handle).flip = 0 ' (SL_NOFLIP) yes, reset flip value
SL_sprite(handle).flip = flip ' (SL_NOFLIP, SL_HORIZONTAL, SL_VERTICAL, SL_FLIPBOTH) set flipping behavior
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array SHARED SL_rotate
() AS SL_ROTATE
' precalculated rotation table
' declare local variables
DIM mask
AS LONG ' software sprite image mask
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_PUT_SPRITE", 1, "" ' no, report error to programmer
'local variable setup
SL_sprite(handle).x.real = x ' (SINGLE) save requested x center location
SL_sprite(handle).y.real = y ' (SINGLE) save requested y center location
SL_sprite
(handle
).x.
int = INT(x
) ' (INTEGER) save screen x center location SL_sprite
(handle
).y.
int = INT(y
) ' (INTEGER) save screen y center location image = SL_sheet(SL_sprite(handle).sheet, SL_sprite(handle).column, SL_sprite(handle).row).image ' get image from sprite sheet
mask = SL_sheet(SL_sprite(handle).sheet, SL_sprite(handle).column, SL_sprite(handle).row).mask ' get mask from sprite sheet
sw = SL_sheet(SL_sprite(handle).sheet, SL_sprite(handle).column, SL_sprite(handle).row).swidth ' get default sprite width from sprite sheet
sh = SL_sheet(SL_sprite(handle).sheet, SL_sprite(handle).column, SL_sprite(handle).row).sheight ' get default sprite height from sprite sheet
'free existing images
_FREEIMAGE SL_sprite
(handle
).gfx.sprite
' free hardware sprite image _FREEIMAGE SL_sprite
(handle
).gfx.image
' free software sprite image IF SL_sprite
(handle
).gfx.mask
THEN _FREEIMAGE SL_sprite
(handle
).gfx.mask
' free software mask image IF SL_sprite
(handle
).
restore THEN ' is sprite holding a background image? IF SL_sprite
(handle
).gfx.back
THEN ' yes, has a background image been saved yet? _PUTIMAGE (SL_sprite
(handle
).x.back
, SL_sprite
(handle
).y.back
), SL_sprite
(handle
).gfx.back
'yes, replace background with image _FREEIMAGE SL_sprite
(handle
).gfx.back
' free hardware background image IF NOT SL_sprite
(handle
).software
THEN ' was the sprite type changed? SL_sprite
(handle
).
restore = 0 ' (SL_NOSAVE) yes, stop saving background
'adjust sprite rotation if needed
IF SL_sprite
(handle
).rotation.angle
THEN ' rotate sprite? px0 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).px0 ' yes, get precalculated triangular coordinates
px1 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).px1
px2 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).px2
px3 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).px3
py0 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).py0
py1 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).py1
py2 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).py2
py3 = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).py3
rw = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).rwidth ' get precalculated rotated sprite width
rh = SL_rotate(SL_sprite(handle).sheet, SL_sprite(handle).rotation.angle).rheight ' get precalculated rotated sprite height
SL_sprite
(handle
).gfx.image
= _NEWIMAGE(rw
, rh
, 32) ' create image using precalculated width/height (px0, py0)-(px1, py1)-(px2, py2), SL_sprite(handle).gfx.image ' map rotated sprite onto image
(px0, py0)-(px3, py3)-(px2, py2), SL_sprite(handle).gfx.image
IF SL_sprite
(handle
).transparency
THEN ' does this sprite have a mask? SL_sprite
(handle
).gfx.mask
= _NEWIMAGE(rw
, rh
, 32) ' yes, create mask image (px0, py0)-(px1, py1)-(px2, py2), SL_sprite(handle).gfx.mask ' map rotated mask onto image
(px0, py0)-(px3, py3)-(px2, py2), SL_sprite(handle).gfx.mask
sw = rw ' save new sprite width
sh = rh ' save new sprite height
ELSE ' no rotation needed SL_sprite
(handle
).gfx.image
= _COPYIMAGE(image
, 32) ' copy software image from sprite sheet IF SL_sprite
(handle
).transparency
THEN ' does this sprite have a mask? SL_sprite
(handle
).gfx.mask
= _COPYIMAGE(mask
, 32) ' yes, copy software mask from sprite sheet
'create hardware sprite
SL_sprite
(handle
).gfx.sprite
= _COPYIMAGE(SL_sprite
(handle
).gfx.image
, 33) ' create hardware sprite of image
'adjust zoom level if needed
IF SL_sprite
(handle
).zoom
<> 100 THEN ' zoom sprite in/out? sw = sw * SL_sprite(handle).zoom \ 100 ' yes, calculate new zoom width
sh = sh * SL_sprite(handle).zoom \ 100 ' calculate new zoom height
'calculate actual sprite screen coordinates
xa
= SL_sprite
(handle
).x.
int - sw \
2 ' calculate actual screen x location from center ya
= SL_sprite
(handle
).y.
int - sh \
2 ' calculate actual screen y location from center SL_sprite(handle).x.actual = xa ' (INTEGER) save actual screen x location
SL_sprite(handle).y.actual = ya ' (INTEGER) save actual screen y location
'get background image before placing sprite if necessary
IF SL_sprite
(handle
).
restore THEN ' is this sprite storing background images? SL_sprite
(handle
).gfx.back
= _NEWIMAGE(sw
, sh
, 32) ' yes, create background image _PUTIMAGE , _DEST, SL_sprite
(handle
).gfx.back
, (xa
, ya
)-(xa
+ sw
- 1, ya
+ sh
- 1) ' get background area from current destination SL_sprite(handle).x.back = xa ' record background x location
SL_sprite(handle).y.back = ya ' record background y location
'use hardware or software image
IF SL_sprite
(handle
).software
THEN ' is this a software sprite? sprite = SL_sprite(handle).gfx.image ' yes, use the software image
sprite = SL_sprite(handle).gfx.sprite ' use the hardware image
' place sprite on the current destination with desired flip method
SELECT CASE SL_sprite
(handle
).flip
' which flipping style is selected? CASE 0 ' (SL_NOFLIP) normal, no flipping _PUTIMAGE (xa
, ya
)-(xa
+ sw
- 1, ya
+ sh
- 1), sprite
' draw normal sprite CASE 1 ' (SL_HORIZONTAL) flip horizontally _PUTIMAGE (xa
+ sw
- 1, ya
)-(xa
, ya
+ sh
- 1), sprite
' draw horizontally flipped sprite CASE 2 ' (SL_VERTICAL) flip vertically _PUTIMAGE (xa
, ya
+ sh
- 1)-(xa
+ sw
- 1, ya
), sprite
' draw vertically flipped sprite CASE 3 ' (SL_FLIPBOTH) flip vertically and horizontally _PUTIMAGE (xa
+ sw
- 1, ya
+ sh
- 1)-(xa
, ya
), sprite
' draw horizontally and vertically flipped sprite
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' declare local variables
DIM handle
AS INTEGER ' handle (pointer) number of new sprite
' perform error checks
IF NOT SL_VALID_SHEET
(sheet
) THEN ' is this a valid sprite sheet? SL_ERROR "SL_NEW_SPRITE", 5, "" ' no, report error to programmer
IF column
> UBOUND(SL_sheet
, 2) OR row
> UBOUND(SL_sheet
, 3) OR row
< 1 OR column
< 1 THEN ' valid row and column requested? SL_ERROR "SL_NEW_SPRITE", 6, "" ' no, report error to programmer
IF restores
< -1 OR restores
> 0 THEN ' valid background restoration behavior requested? SL_ERROR "SL_NEW_SPRITE", 2, "" ' no, report error to programmer
IF software
< -1 OR software
> 0 THEN ' valid hardware / software setting requested? SL_ERROR "SL_NEW_SPRITE", 112, "" ' no, report error to programmer
IF (NOT software
) AND restores
THEN ' hardware image that restores background? SL_ERROR "SL_NEW_SPRITE", 113, "" ' yes, report error to programmer
' local variable setup
handle = 0 ' initialize handle value
' increase sprite array's size if needed
DO ' look for next available handle handle = handle + 1 ' increment to next handle value
LOOP UNTIL (NOT SL_sprite
(handle
).inuse
) OR handle
= UBOUND(SL_sprite
) ' stop looking when valid handle found IF SL_sprite
(handle
).inuse
THEN ' is the last array element in use? handle = handle + 1 ' yes, increment to next handle value
REDIM _PRESERVE SL_sprite
(handle
) AS SL_SPRITE
' increase the size of the sprite array
' populate sprite array, general settings
SL_sprite(handle).inuse = -1 ' (TRUE) mark array index as in use
SL_sprite(handle).sheet = sheet ' point to sheet where sprite resides
SL_sprite(handle).column = column ' point to column on sheet where sprite located
SL_sprite(handle).row = row ' point to row on sheet where sprite located
SL_sprite(handle).software = software ' (SL_SOFTWARE & SL_HARDWARE) sprite treated as software or hardware image
SL_sprite
(handle
).
restore = restores
' (SL_SAVE & SL_NOSAVE) background restore behavior of sprite SL_sprite(handle).swidth = SL_sheet(sheet, column, row).swidth ' get width of sprite
SL_sprite(handle).sheight = SL_sheet(sheet, column, row).sheight ' get height of sprite
SL_sprite(handle).collx1 = SL_sheet(sheet, column, row).collx1 ' get sprite's collision box boundaries
SL_sprite(handle).colly1 = SL_sheet(sheet, column, row).colly1
SL_sprite(handle).collx2 = SL_sheet(sheet, column, row).collx2
SL_sprite(handle).colly2 = SL_sheet(sheet, column, row).colly2
SL_sprite(handle).flip = 0 ' no sprite flipping
SL_sprite(handle).zoom = 100 ' zoom normal at 100%
SL_sprite(handle).score = 0 ' no point score
' animation settings
SL_sprite(handle).anim.cell = SL_sheet(sheet, column, row).cell ' the animation cell this sprite is in
SL_sprite(handle).anim.cellfrom = 0 ' reset sprite beginning animation cell
SL_sprite(handle).anim.cellto = 0 ' reset sprite ending animation cell
SL_sprite(handle).anim.dir = 0 ' (SL_FORWARD, SL_BACKWARD & SLBACKFORTH) reset sprite animation direction
SL_sprite(handle).anim.mode = 0 ' reset sprite animation mode
SL_sprite(handle).anim.frame = 0 ' reset sprite animation frame counter
SL_sprite(handle).anim.skip = 0 ' reset sprite animation skip rate
SL_sprite(handle).anim.auto = 0 ' (FALSE) sprite has no auto animation
' x,y location settings
SL_sprite(handle).x.real = 0 ' reset x location of sprite (center x)
SL_sprite(handle).y.real = 0 ' reset y location of sprite (center y)
SL_sprite
(handle
).x.
int = 0 ' reset x location of sprite on screen INT(xreal) (center x) SL_sprite
(handle
).y.
int = 0 ' reset y location of sprite on screen INT(yreal) (center y) SL_sprite(handle).x.actual = 0 ' reset x location of sprite on screen (upper left x)
SL_sprite(handle).y.actual = 0 ' reset y location of sprite on screen (upper left y)
SL_sprite(handle).x.dir = 0 ' x direction during motion
SL_sprite(handle).y.dir = 0 ' y direction during motion
' graphics image settings
SL_sprite(handle).gfx.back = 0 ' no background image saved yet
SL_sprite
(handle
).gfx.sprite
= _COPYIMAGE(SL_sheet
(sheet
, column
, row
).image
, 33) ' create hardware sprite image SL_sprite
(handle
).gfx.image
= _COPYIMAGE(SL_sheet
(sheet
, column
, row
).image
, 32) ' copy software sprite image from sheet IF SL_sheet
(sheet
, column
, row
).transparency
THEN ' does this sprite use transparency? SL_sprite
(handle
).gfx.mask
= _COPYIMAGE(SL_sheet
(sheet
, column
, row
).mask
, 32) ' yes, copy software sprite mask image from sheet SL_sprite(handle).transparency = -1 ' (TRUE) remember this sprite has a transparency layer
SL_sprite(handle).gfx.mask = 0 ' no mask will be brought in
SL_sprite(handle).transparency = 0 ' (FALSE) remember this sprite has no transparency layer
' rotation settings
SL_sprite(handle).rotation.angle = 0 ' no sprite rotation angle
SL_sprite(handle).rotation.speed = 0 ' no spin rate
SL_sprite(handle).rotation.auto = 0 ' (FALSE) auto rotation disabled
' motion settings
SL_sprite(handle).motion.speed = 0 ' speed during motion
SL_sprite(handle).motion.angle = 0 ' direction during motion (0 - 359)
SL_sprite(handle).motion.auto = 0 ' (FALSE) auto motion disabled
SL_NEW_SPRITE = handle ' return pointer value of new sprite
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' check for errors
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_FREE_SPRITE", 1, "" ' no, report error to programmer
' restore background if this sprite saving background
IF SL_sprite
(handle
).
restore THEN ' is there a background image to restore? _PUTIMAGE (SL_sprite
(handle
).x.back
, SL_sprite
(handle
).y.back
), SL_sprite
(handle
).gfx.back
' yes, restore the image _FREEIMAGE SL_sprite
(handle
).gfx.back
' free background image
' free all image data associated with sprite
IF SL_sprite
(handle
).gfx.back
THEN _FREEIMAGE SL_sprite
(handle
).gfx.back
' free background image if present IF SL_sprite
(handle
).gfx.mask
THEN _FREEIMAGE SL_sprite
(handle
).gfx.mask
' free sprite mask image if present _FREEIMAGE SL_sprite
(handle
).gfx.sprite
' free hardware sprite image _FREEIMAGE SL_sprite
(handle
).gfx.image
' free software sprite image
IF (handle
= UBOUND(sl_sprite
)) AND (handle
<> 1) THEN ' is handle the last element in array? REDIM _PRESERVE SL_sprite
(handle
- 1) AS SL_SPRITE
' yes, remove index and resize array ELSE ' no, index somewhere else SL_sprite(handle).inuse = 0 ' (FALSE) mark index as usable later
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
IF (handle
> UBOUND(SL_SPRITE
)) OR (NOT SL_sprite
(handle
).inuse
) OR (handle
< 1) THEN ' is this a valid sprite handle? SL_VALID_SPRITE = 0 ' (FALSE) no, return 0
SL_VALID_SPRITE = -1 ' (TRUE) return -1
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_SET_SCORE", 1, "" ' no, report error to programmer
SL_sprite(handle).score = score ' set sprite score
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sprite
() AS SL_SPRITE
' master working sprite array
' perform error checks
IF NOT SL_VALID_SPRITE
(handle
) THEN ' is this a valid sprite? SL_ERROR "SL_GET_SCORE", 1, "" ' no, report error to programmer
SL_GET_SCORE = SL_sprite(handle).score ' return sprite score
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== SHEET ROUTINES ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array SHARED SL_rotate
() AS SL_ROTATE
' precalculated rotation table
' declare local variables
DIM handle
AS INTEGER ' handle (pointer) number of new sprite sheet DIM x
AS INTEGER ' generic counter to cycle through sheet sprite columns DIM y
AS INTEGER ' generic counter to cycle through sheet sprite rows DIM x1
AS INTEGER ' generic counter to cycle though sprite for collision boundaries and mask creation DIM y1
AS INTEGER ' generic ocunter to cycle though sprite for collision boundaries and mask creation DIM osource
AS LONG ' original source image before this function was called DIM odest
AS LONG ' original destination image before this function was called 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 DIM tempsprite
AS LONG ' temporary sprite for _CLEARCOLOR detection DIM px
(3) AS SINGLE ' polar x coordinates of maptriangle * DIM py
(3) AS SINGLE ' polar y coordinates of maptriangle * DIM sinr
AS SINGLE ' sin rotation calculation * could all of these DOUBLEs DIM cosr
AS SINGLE ' cosine rotation claculation * be changed to SINGLEs and <-------------------------------------- LOOK DIM bx1
AS SINGLE ' max boundaries of rotated sprite * still be accurate enough for
' perform error checks
SL_ERROR "SL_NEW_SHEET", 100, filename ' no, report error to programmer
IF ABS(transparency
) > 1 THEN ' valid transparency setting? SL_ERROR "SL_NEW_SHEET", 101, "" ' no, report error to programmer
IF swidth
< 1 OR sheight
< 1 THEN ' valid sprite width/height supplied? SL_ERROR "SL_NEW_SHEET", 102, "" ' no, report error to programmer
SL_ERROR
"SL_NEW_SHEET", 103, UCASE$(RIGHT$(filename
, 4)) ' yes, report error to programmer
' local variable setup
sheetimage
= _LOADIMAGE(filename
, 32) ' load sprite sheet file sheetwidth
= _WIDTH(sheetimage
) ' get width of sheet sheetheight
= _HEIGHT(sheetimage
) ' get height of sheet columns = sheetwidth \ swidth ' get number of whole columns of sprites
rows = sheetheight \ sheight ' get number of whole rows of sprites
IF columns
< 1 OR rows
< 1 THEN ' at least one sprite column and row on sheet? SL_ERROR "SL_NEW_SHEET", 104, "" ' no, report error to programmer
osource
= _SOURCE ' remember current source image odest
= _DEST ' remember current destination image handle = 0 ' initialize handle value
clearcolor = transcolor ' get background/transparent color passed in
' increase sheet array's 1st dimension 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_sheet
(handle
, 0, 0).image
) OR handle
= UBOUND(SL_sheet
) ' stop looking when valid handle value found IF SL_sheet
(handle
, 0, 0).image
= -1 THEN ' (TRUE) is the last array element in use? handle = handle + 1 ' yes, increment the handle value
' increase sheet array's 2nd and 3rd dimensions if needed to match number of rows and columns
IF columns
> UBOUND(SL_sheet
, 2) THEN ' more columns in this sheet than others? REDIM _PRESERVE SL_sheet
(handle
, columns
, UBOUND(SL_sheet
, 3)) AS SL_SHEET
' yes, increase the array's 2nd dimension to match IF rows
> UBOUND(SL_sheet
, 3) THEN ' more rows in this sheet than others? REDIM _PRESERVE SL_sheet
(handle
, UBOUND(SL_sheet
, 2), rows
) AS SL_SHEET
' yes, increase the array's 3rd dimension to match
' the variables in SL_sheet(x, 0, 0) will serve a dual purpose
' SL_sheet(x, 0, 0).image will contain either -1 (true) or 0 (false) to indicate the first dimension of the array is in use.
' SL_sheet(x, 0, 0).swidth will contain the number of columns contained in the sheet (the array's 2nd dimension)
' SL_sheet(x, 0, 0).sheight will contain the number of rows contained in the sheet (the array's 3rd dimension)
SL_sheet(handle, 0, 0).image = -1 ' (TRUE) mark as in use
SL_sheet(handle, 0, 0).swidth = columns ' remember number of columns in sheet
SL_sheet(handle, 0, 0).sheight = rows ' remember number of rows in sheet
' identify transparency of sprite sheet if requested
IF transparency
= -1 THEN ' (SL_USESHEET) 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? tempsprite
= _NEWIMAGE(1, 1, 32) ' yes, create a temporary image * why did I have to do _CLEARCOLOR pixel
, tempsprite
' set pixel found as transparent * this hack to get clearcolor
= _CLEARCOLOR(tempsprite
) ' get the transparent color from image * clearcolor to come out _FREEIMAGE tempsprite
' temporary image no longer needed * to the right value? ELSE ' no transparency found within sheet transparency = 1 ' set sheet to having no alpha channel
ELSEIF transparency
= 0 THEN ' (SL_SET) manually set alpha channel? _CLEARCOLOR clearcolor
, sheetimage
' yes, set color as transparent clearcolor
= _CLEARCOLOR(sheetimage
) ' get the transparent color ************* again, why this hack?
' load sprites from sheet and place into sprite array
x = 0 ' reset column counter
DO ' cycle through sheet's columns x = x + 1 ' increment column counter
y = 0 ' reset row counter
DO ' cycle through sheet's rows y = y + 1 ' increment row counter
SL_sheet(handle, x, y).cell = (y - 1) * columns + x ' record animation cell this sprite is in
SL_sheet
(handle
, x
, y
).image
= _NEWIMAGE(swidth
, sheight
, 32) ' create software sprite image IF transparency
< 1 THEN ' should a mask be created? SL_sheet
(handle
, x
, y
).mask
= _NEWIMAGE(swidth
, sheight
, 32) ' yes, create software sprite mask image _DEST SL_sheet
(handle
, x
, y
).mask
' write to the mask image SL_sheet(handle, x, y).transparency = 0 ' (FALSE) set sprite as having no transparency
_PUTIMAGE , sheetimage
, SL_sheet
(handle
, x
, y
).image
,_
((x - 1) * swidth, (y - 1) * sheight)-_
((x - 1) * swidth + swidth - 1, (y - 1) * sheight + sheight - 1) ' copy sprite from sheet and place in sprite image
' precalculate collision boundaries and update sprite mask if needed
_SOURCE SL_sheet
(handle
, x
, y
).image
' work from the software sprite image top = sheight - 1 ' set initial collision boundary markers
left = swidth - 1
bottom = 0
right = 0
x1 = 0 ' reset width counter
DO ' cycle through width of sprite y1 = 0 ' reset height counter
DO ' cycle through height of sprite IF POINT(x1
, y1
) <> clearcolor
THEN ' is this pixel a transparent/background 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 IF transparency
< 1 THEN ' update software sprite mask? IF POINT(x1
, y1
) = clearcolor
THEN ' yes, is this pixel a transparent/background color? PSET (x1
, y1
), _RGB32(255, 255, 255) ' yes, set as white on the mask image y1 = y1 + 1 ' increment height counter
LOOP UNTIL y1
= sheight
' leave when height of sprite reached (-1) x1 = x1 + 1 ' increment width counter
LOOP UNTIL x1
= swidth
' leave when width of sprite reached (-1) SL_sheet(handle, x, y).collx1 = left ' collision box top left x
SL_sheet(handle, x, y).colly1 = top ' collision box top left y
SL_sheet(handle, x, y).collx2 = right ' collision box bottom right x
SL_sheet(handle, x, y).colly2 = bottom ' collision box bottom right y
SL_sheet(handle, x, y).swidth = swidth ' remember sprite width
SL_sheet(handle, x, y).sheight = sheight ' remember sprite height
LOOP UNTIL y
= rows
' leave when all rows processed LOOP UNTIL x
= columns
' leave when all columns processed _FREEIMAGE sheetimage
' sprite sheet image no longer needed
' create precalculated rotation table for the sprite sheet (1 to 359 degrees)
x = 0 ' reset counter
DO ' cycle from 1 to 359 degrees x = x + 1 ' increment counter
'px(0) = (-swidth + 1) / 2 ' upper left x polar coordinate of sprite
'py(0) = (-sheight + 1) / 2 ' upper left y polar coordinate of sprite
px(0) = -swidth / 2 ' upper left x polar coordinate of sprite
py(0) = -sheight / 2 ' upper left y polar coordinate of sprite
px(1) = px(0) ' lower left x polar coordinate of sprite
'py(1) = (sheight -1) / 2 ' lower left y polar coordinate of sprite
'px(2) = (swidth - 1) / 2 ' lower right x polar coordinate of sprite
py(1) = sheight / 2 ' lower left y polar coordinate of sprite
px(2) = swidth / 2 ' lower right x polar coordinate of sprite
py(2) = py(1) ' lower right y polar coordinate of sprite
px(3) = px(2) ' upper right x polar coordinate of sprite
py(3) = py(0) ' upper right y polar coordinate of sprite
sinr
= SIN(-x
/ 57.2957795131) ' calculate the sin of rotation cosr
= COS(-x
/ 57.2957795131) ' calculate the cosine of rotation bx1 = 0 ' upper left x boundary of sprite
by1 = 0 ' upper left y boundary of sprite
bx2 = 0 ' lower right x boundary of sprite
by2 = 0 ' lower right y boundary of sprite
y = 0 ' reset counter
DO ' cycle through all four polar coordinates (0 to 3) x2 = (px(y) * cosr + sinr * py(y)) ' compute new polar coordinate location
y2 = (py(y) * cosr - px(y) * sinr) ' compute new polar coordinate location
px(y) = x2 ' save the new polar coordinate
py(y) = y2 ' save the new polar coordinate
IF px
(y
) < bx1
THEN bx1
= px
(y
) ' save lowest x value seen \ NOTE: use for IF px
(y
) > bx2
THEN bx2
= px
(y
) ' save highest x value seen \ background image <--------------------- LOOK IF py
(y
) < by1
THEN by1
= py
(y
) ' save lowest y value seen / rectangle coordinates IF py
(y
) > by2
THEN by2
= py
(y
) ' save highest y value seen / y = y + 1 ' increment counter
LOOP UNTIL y
= 4 ' leave when all coordinates calculated SL_rotate(handle, x).rwidth = bx2 - bx1 + 1 ' calculate width of rotated sprite
SL_rotate(handle, x).rheight = by2 - by1 + 1 ' calculate height of rotated sprite
x2 = SL_rotate(handle, x).rwidth \ 2 ' calculate x offset
y2 = SL_rotate(handle, x).rheight \ 2 ' calculate y offset
SL_rotate(handle, x).px0 = px(0) + x2 ' add offsets to coordinates
SL_rotate(handle, x).px1 = px(1) + x2
SL_rotate(handle, x).px2 = px(2) + x2
SL_rotate(handle, x).px3 = px(3) + x2
SL_rotate(handle, x).py0 = py(0) + y2
SL_rotate(handle, x).py1 = py(1) + y2
SL_rotate(handle, x).py2 = py(2) + y2
SL_rotate(handle, x).py3 = py(3) + y2
LOOP UNTIL x
= 359 ' leave when all degree angles calculated
_SOURCE osource
' return source to current _DEST odest
' return destination to current SL_NEW_SHEET = handle ' return the handle number pointing to this sheet
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' declare global variables
SHARED SL_sheet
() AS SL_SHEET
' master sprite sheet array
IF (sheet
> UBOUND(SL_sheet
)) OR (sheet
< 1) THEN ' is this a valid sheet? SL_VALID_SHEET = 0 ' (FALSE) no, return false
ELSEIF NOT SL_sheet
(sheet
, 0, 0).image
THEN ' is sprite sheet in use? SL_VALID_SHEET = 0 ' (FALSE) no, return false
ELSE ' everything checks out SL_VALID_SHEET = -1 ' (TRUE) return true
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ----------========== ==========----------
' ----------========== ERROR ROUTINE ==========----------
' ----------========== ==========----------
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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 " **************************************" PRINT " has reported error";
SELECT CASE errno
' which error number is being reported?
' general purpose errors for all subs/functions
PRINT "- the requested sprite does not exist" PRINT "- invalid background restore setting supplied - valid settings are" PRINT "- : -1 (constant SL_SAVE)" PRINT "- : 0 (constant SL_NOSAVE)" PRINT "- invalid flip setting supplied - valid settings are" PRINT "- : 0 (constant SL_NOFLIP)" PRINT "- : 1 (constant SL_HORIZONTAL)" PRINT "- : 2 (constant SL_VERTICAL)" PRINT "- : 3 (constant SL_FLIPBOTH)" PRINT "- invalid zoom level setting supplied" PRINT "- zoom level must be greater than zero (0)" PRINT "- the specified sprite sheet is not in use or does not exist" PRINT "- invalid row or column selected for specified sprite sheet" PRINT "- invalid auto motion behavior requested - valid settings are" PRINT "- : -1 (constant SL_START)" PRINT "- : 0 (constant SL_STOP)" PRINT "- invalid auto rotation behavior requested - valid settings are" PRINT "- : -1 (constant SL_START)" PRINT "- : 0 (constant SL_STOP)" PRINT "- rotation speed must be between -359 and 359 degrees" PRINT "- frame rate must be greater than zero (0)" PRINT "- frame rate must be greater than zero (0) and less than or equal" PRINT "- to the global frame rate" PRINT "- incorrect animation direction mode setting - valid settings are" PRINT "- : 0 (constant SL_FORWARD)" PRINT "- : 1 (constant SL_BACKWARD)" PRINT "- : 2 (constant CL_BACKFORTH" PRINT "- invalid cell value given - it must be greater than 0 and less" PRINT "- than or equal to the total number of animation cells on a sheet" PRINT "- invalid auto animation behavior requested - valid settings are" PRINT "- : -1 (constant SL_START)" PRINT "- : 0 (constant SL_STOP)" PRINT "- animation has not been assigned to this sprite - use" PRINT "- SL_SET_ANIMATION to assign animation to this sprite" PRINT "- this srpite is already under auto motion control" PRINT "- use SL_CHANGE_AUTOMOTION to disable auto motion control" PRINT "- this sprite is already under auto rotation control" PRINT "- use SL_CHANGE_AUTOROTATION to disable auto rotation control" PRINT "- this sprite is already under auto animation control" PRINT "- use SL_CHNAGE_AUTOANIMATION to disable auto animation control" PRINT "- the destination cell must be greater than the starting cell"
' errors belonging to SL_NEW_SHEET (100 - 109)
PRINT "- ";
CHR$(34); info;
CHR$(34);
" sprite sheet does not exist" PRINT "- check path or spelling" PRINT "- invalid transparency setting supplied - valid settings are" PRINT "- : -1 (constant SL_USESHEET)" PRINT "- : 0 (constant SL_SET)" PRINT "- : 1 (constant SL_NONE)" PRINT "- sprite width and/or height must be greater than zero" PRINT "- selecting to use a sheet's transparency only works with .PNG files" PRINT "- the function was passed a "; info;
" file." PRINT "- there must be at least one column and one row of sprites on sheet" PRINT "- the sheet being loaded does not meet these minimums"
'errors belonging to SL_NEW_SPRITE (110 - 119)
'CASE 110
' PRINT "- the specified sprite sheet is not in use or does not exist"
'CASE 111
' PRINT "- invalid row or column selected for specified sprite sheet"
PRINT "- invalid hardware / software setting supplied - valid settings are" PRINT "- : -1 (constant SL_SOFTWARE)" PRINT "- : 0 (constant SL_HARDWARE)" PRINT "- there is no need to restore the background with hardware sprites" PRINT "- change background restore setting to zero (0) (constant SL_NOSAVE)"
PRINT " See sprite library doumentation for further explanation."