This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Messages - tr1p1ea
16
« on: June 21, 2014, 09:09:38 pm »
Some people move quickly through calc land, calc84 is one of those people ... onto bigger and better things.
17
« on: June 18, 2014, 12:49:17 am »
Hhmm...
Ok then it must be because im trying to run it on an XP machine at work. Is this made with VS2012 by any chance?
18
« on: June 16, 2014, 10:10:21 pm »
I was wondering if there was a 32-bit build?
19
« on: June 09, 2014, 11:11:27 pm »
Yeah there isnt going to be anything here that will stop the TIOS from using Ans when assigning data to a string sadly. Though I will think about possible ways to do it - just with the timeline for 8.1 im not sure that anything will make it for this version.
EDIT This is what has been added/modified so far for DCSE8.1:
SETUPCOLOURMODE: (TIOS VALUES): ------------------------------- real(0,3,VALUE VALUE defines action to take: 0 = FULL colour 1 = 8COLOUR 2 = COLOURINVERT 3 = COLOURINVERTOFF (restore to normal) 4 = FILLSCREEN 5 = SETCOLOUROFFSET (DCSE8.1)
To invert the colours on the screen you would do:
real(0,3,2
To restore the colours back to normal you can do:
real(0,3,2
This is because inverting something twice will restore it back to nomral.
To restore the colours back to normal when you dont know the previous state of the screen:
real(0,3,3
To FILL the screen (active GRAM side only) with a colour from the standard xLIB 256 colour palette:
real(0,3,4,COLOUR,UPDATELCD
To set the COLOUR_OFFSET value which is used by sprite and shape routines (note that VALUE is between 0-255) This will change the colour values per pixel of sprites as they are drawn to the LCD. It can be used for special effects (magic animations for example):
real(0,3,5,VALUE
=================================================================================================================
GETKEY UP/DOWN/LEFT/RIGHT CHECKTILE LIST (DCSE8.1): --------------------------------------------------- real(2,5,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING,X0,Y0,X1,Y1 USERVAR_MAPWIDTH = width of tilemap in tiles (uservar 0-255) COLLISIONTILE = upper limit of walkable tiles (any tile less than this will be walkable) MAPSTRING = string variable holding tilemap data (0-10) X0 = left x coordinate of collision box Y0 = top y coordinate of collision box X1 = right x coordinate of collision box Y1 = bottom y coordinate of collision box
This function is the same as the above however it will return information regarding any keypresses and any collided tiles in a 'real list' contained in with the format:
{KEY_PRESS, NUM_COLLIDED_TILES, COLLIDED_TILES_LIST} where:
KEY_PRESS = -1,0,1,2,3 = NOARROW,UP,DOWN,LEFT,RIGHT NUM_COLLIDED_TILES = number of tiles collided against given the arguments in the call COLLIDED_TILES_LIST = list of tiles collided against given the arguments in the call
GETKEY UP/DOWN/LEFT/RIGHT/DIAGONAL CHECKTILE LIST (DCSE8.1): ------------------------------------------------------------ real(2,6,USERVAR_X,USERVAR_Y,VALUE_X,VALUE_Y,USERVAR_MAPWIDTH,COLLISIONTILE,MAPSTRING,X0,Y0,X1,Y1 refer to the above function, adds diagonal keypresses as well
=================================================================================================================
DRAWSPRITECHECKCOLLISIONA (TIOS VALUES, DCSE8.1): ------------------------------------------------- real(4,6,COUNT,X,Y,W,H,CX0,CY0,CW0,CH0....CXn,CYn,CWn,CHn COUNT = number of coordinates to check against X = master X to test list of coordinates against Y = master Y to test list of coordinates against W = master W to test list of coordinates against H = master H to test list of coordinates against CX0 = first X to test against master X CY0 = first Y to test against master Y CW0 = first W to test against master W CH0 = first H to test against master H CXn = nth X to test against master X CYn = nth Y to test against master Y CWn = nth W to test against master W CHn = nth H to test against master H
nth should be equal to COUNT
This function will test the rectangular coordinates specified by the 'master X,Y,W,H' against each iteration of rectangular coordinates from CX0,CY0,CW0,CH0 to CXn,CYn,CWn,CHn and will return
0 or 1 in Ans where 0 = no collision between the 'master set' and the list and 1 = a collision with at least 1 set isfound A list of collided coordinate indexes in the user-defined 'real list' "XL" in the format:
{TOTAL_COORDS_COLLIDED,INDEX0...INDEXn} Where: TOTAL_COORDS_COLLIDED = total number of rectangular indexes in the call that collide with the 'master set' INDEX0 = first index where 0 = the rectangular coordinates [CX0,CY0,CW0,CH0] and n would equal the [CX0,CY0,CW0,CH0]
Note that user-define list "XL" is overwritten if it already exists
For example
Rectangles at:
X = 10 Y = 10 W = 8 H = 8
Tested against others where:
X = 15 Y = 15 W = 8 H = 8
X = 48 Y = 32 W = 16 H = 16
X = 8 Y = 0 W = 64 H = 16
Like so:
The call would be: real(4,6,3,10,10,8,8,15,15,8,8,48,32,16,16,8,0,64,16
And the result would be: Ans = 1 XL = {1,2,0,2
Ans=1 = collision found {1 = collision found (would be 0 if no collisions occured) 2 = number of collisions found 0 = collision with index 0 2 = collision with index 2
Index 1 is the square for which there was no collision.
You can check if there is a collision by using:
If Ans If LXL(1)
Or by a similar method.
DRAWSPRITECHECKCOLLISIONB (USERVAR VALUES, DCSE8.1): ---------------------------------------------------- real(4,7,COUNT,X,Y,W,H,CX0,CY0,CW0,CH0....CXn,CYn,CWn,CHn COUNT = number of coordinates to check against X = master X to test list of coordinates against (uservar) Y = master Y to test list of coordinates against (uservar) W = master W to test list of coordinates against (uservar) H = master H to test list of coordinates against (uservar) CX0 = first X to test against master X (uservar) CY0 = first Y to test against master Y (uservar) CW0 = first W to test against master W (uservar) CH0 = first H to test against master H (uservar) CXn = nth X to test against master X (uservar) CYn = nth Y to test against master Y (uservar) CWn = nth W to test against master W (uservar) CHn = nth H to test against master H (uservar)
This function is the same as above however it takes references to USERVAR values as opposed to values directly.
DRAWSPRITESEQUENTIALLISTA (TIOS VALUES, DCSE8.1): ------------------------------------------------- real(4,8,X,Y,WIDTH,HEIGHT,XOFFSET,YOFFSET,TRANSINDEX,UPDATELCD,PICINDEXSTART,PICINDEX0 X = x value Y = y value WIDTH = width of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) HEIGHT = height of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) XOFFSET = offset for x value YOFFSET = offset for y value TRANSINDEX = transparent colour index, and colour in the sprite that matches this will be drawn transparent (0-255) UPDATELCD = 0/1 to update LCD after drawing PICINDEXSTART = pic index to start drawing from (in following list) PICINDEX0 = pic index in sprite data sheet
This function will draw a sprite that of any size as per the same fashion as DRAWSPRITEA with the only difference being that you DONT need to specify each PICINDEX for a largesprite, rather you only need to specify the FIRST PICINDEX. This means that your 8x8 sprite chunks will need to follow each other in your TILEPIC in SEQUENTIAL ORDER. The makeup of a large sprite is the same:
16x16 sprite list layout:
--------- | 1 | 3 | --------- | 2 | 4 | ---------
24x24 sprite list layout:
------------- | 1 | 4 | 7 | ------------- | 2 | 5 | 8 | ------------- | 3 | 6 | 9 | -------------
For both of the above you only need to specifiy the PICINDEX '1' (along with appropriate WIDTH/HEIGHT ETC) to draw.
The advantage is that you save space in BASIC code, speed of execution and you can maximise the space in your TILEPICS. The drawback is that the layout of sprites requires more work when creating your TILEPICS.
You can use the PICINDEXSTART argument to have largesprite 'frames' as each PICINDEX you supply will be the STARTING INDEX for each frame so having:
real(4,8,10,10,2,2,0,0,248,1,0,10,20
Will draw a 16x16 sprite with the 4 '8x8 chunks' starting at INDEX 10 (10,11,12,13). If you change the PICINDEXSTART argument to 1 then the 16x16 sprite will be made up of the 4 '8x8 chunks' starting at INDEX 20 (20,21,22,23).
DRAWSPRITESEQUENTIALLISTB (USERVAR VALUES, DCSE8.1): ---------------------------------------------------- real(4,9,USERVAR_X,USERVAR_Y,WIDTH,HEIGHT,XOFFSET,YOFFSET,TRANSINDEX,UPDATELCD,PICINDEXSTART,PICINDEX0 X = x value (uservar 0-255) Y = y value (uservar 0-255) WIDTH = width of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) HEIGHT = height of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) XOFFSET = offset for x value YOFFSET = offset for y value TRANSINDEX = transparent colour index, and colour in the sprite that matches this will be drawn transparent (0-255) UPDATELCD = 0/1 to update LCD after drawing PICINDEXSTART = pic index to start drawing from (in following list) PICINDEX0 = pic index in sprite data sheet
This function is the same as above however it takes references to internal USERVARS as opposed to values directly
DRAWSPRITETILEBGLISTA (TIOS VALUES, DCSE8.1): --------------------------------------------- real(4,10,LISTCOUNT,LISTWIDTH,HEIGHT,XOFFSET,YOFFSET,TRANSINDEX,UPDATELCD,MAPWIDTH,MAPSTRING,X0,Y0...Xn,Yn LISTCOUNT = number of tiles in list WIDTH = width of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) HEIGHT = height of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) XOFFSET = offset for x value YOFFSET = offset for y value TRANSINDEX = transparent colour index, and colour in the sprite that matches this will be drawn transparent (0-255) UPDATELCD = 0/1 to update LCD after drawing MAPWIDTH = width of tilemap MAPSTRING = string variable holding tilemap data (0-10) X0 = first X value to draw tile at Y0 = first Y value to draw tile at Xn = last X value to draw tile at Yn = last Y value to draw tile at
This function will draw the tiles for width*height at the sprite coordinate listed from X0,Y0 to Xn,Yn. The resultant tiles will be aligned to the map (it will only draw at intevals of 8-pixels). This is useful for restoring a tilemap background that has been overwritten by a list of sprites. As mentioned this function is the same as DRAWSPRITETILEBG just witha list.
DRAWSPRITETILEBGLISTB (USERVARS VALUES, DCSE8.1): ------------------------------------------------- real(4,10,LISTCOUNT,LISTWIDTH,HEIGHT,XOFFSET,YOFFSET,TRANSINDEX,UPDATELCD,MAPWIDTH,MAPSTRING,X0,Y0...Xn,Yn LISTCOUNT = number of tiles in list WIDTH = width of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) HEIGHT = height of sprite in 8x8 chunks (an 8x8 sprite is 1, 16x16 is 2, 12x12 is also 2 etc) XOFFSET = offset for x value YOFFSET = offset for y value TRANSINDEX = transparent colour index, and colour in the sprite that matches this will be drawn transparent (0-255) UPDATELCD = 0/1 to update LCD after drawing MAPWIDTH = width of tilemap (uservar 0-255) MAPSTRING = string variable holding tilemap data (0-10) X0 = first X value to draw tile at (uservar 0-255) Y0 = first Y value to draw tile at (uservar 0-255) Xn = last X value to draw tile at (uservar 0-255) Yn = last Y value to draw tile at (uservar 0-255)
This function is the same as above how it takes references to internal USERVARS as opposed to direct values in the call
=================================================================================================================
DISPLAYBGPIC32 (TIOS VALUES, DCSE8.1): -------------------------------------- :"APPVARNAME real(5,6,UPDATELCD UPDATELCD = 0/1 to update LCD after drawing
This function will display a custom 32 colour 160x120 image (scaled to fullscreen) appvar (name stored as a string in ANS).
To display a bgpic named "BGTEST": :"BG32TEST :real(5,6,1
=================================================================================================================
FILLRORTATECOLOURSRECTANGLE (TIOS VALUES, DCSE8.1): --------------------------------------------------- real(7,13,X0,Y0,WIDTH,HEIGHT,UPDATELCD X0 = left x value Y0 = top y value WIDTH = width of rectangle HEIGHT = height of rectangle UPDATELCD = 0/1 to update LCD after drawing
This function draws a filled rectangle starting at X0,Y0 for WIDTH,HEIGHT. Any pixles that it overlaps will be rotated according to the value of COLOUR_OFFSET (see SETUPCOLORMODE in the SETUP section)
20
« on: June 09, 2014, 11:08:14 pm »
Wow looks great!
How big can the worlds be?
21
« on: June 06, 2014, 04:41:53 am »
Good news, i fixed the Output( bug! Now xLIBC commands play nicely with the TIOS . Also i discovered that returning values into a List in Ans is SLOW. So slow that it halved the fps of the xLIBC DEMO :S. But the workaround is that I now create a user-defined list call "XL" that holds all the arguments needed. This is only for the Sprite Collision routines. But I probably should port it over to the getKey->List routine as well.
22
« on: June 04, 2014, 02:23:15 am »
Well you can still draw to both sides of GRAM without setting half-res mode, you just need to do it in 2 calls.
23
« on: June 02, 2014, 11:20:53 pm »
There is already sprite<->tilemap collisions but no facility for sprite<->sprite collisions.
24
« on: June 02, 2014, 07:13:54 pm »
Brief explanation of sprite collision function, it tests for collisions between rectangular coordinates so if you have say a sprite that is: X = 10 Y = 10 W = 8 H = 8 And you wanted to test if this 'rectangle' overlaps with an enemy sprite at: X = 15 Y = 15 W = 8 H = 8 Like so: Then you can use the function to check: real(4,6,1, 10,10,8,8, 15,15,8,8In which case they do collide so the result will be a list: {1,1,0 {1 = collision found 1 = number of collisions found 0 = index of collision passed with real( statement And since there was only 1 set of coordinates passed the first index that collided is 0 (the red square). Another case: Rectangles at: X = 10 Y = 10 W = 8 H = 8 Tested against others where: X = 15 Y = 15 W = 8 H = 8 X = 48 Y = 32 W = 16 H = 16 X = 8 Y = 0 W = 64 H = 16 Like so: The call would be: real(4,6,3, 10,10,8,8, 15,15,8,8, 48,32,16,16, 8,0,64,16And the result would be: {1,2,0,2 {1 = collision found (would be 0 if no collisions occured) 2 = number of collisions found (green and red) 0 = collision with index 0 (red) 2 = collision with index 2 (green) Index 1 is the orange square for which there was no collision.
25
« on: May 31, 2014, 11:40:23 pm »
Criticising a system because of its graphics .... on a calculator forum!?! .
26
« on: May 30, 2014, 05:35:56 am »
I have done a little more work on the enemy sprites, it can be quite challenging to get something recognizable at 8x8 and with only 2 frames for animation. See if you can recognise: snail, beetle, jellyfish, scorpion, rat, cat, snake, crab, bat, spider & butterfly. Still thinking up ideas to make the speed at little better (this is BASIC though).
27
« on: May 28, 2014, 08:54:20 pm »
Well i think the next testing phase for DCSE8 is early June, and new xLIBC commands will be included.
28
« on: May 28, 2014, 06:38:13 pm »
The animated tiles are a bi-product of having 2 GRAM areas, I take advantage of the 'replacetile' function so that i only need 1 tileset. Basically i do:
DRAWMAP GRAM1 REPLACE ANIMATED TILES DRAWMAP GRAM2 RESTORE ANIMATED TILES
Then everytime you do an UPDATELCD, you get animated tiles!
The trick is to come up with animations that work with only 2 frames.
29
« on: May 28, 2014, 09:09:57 am »
Nice! Im working on the example BASIC RPG which helps me come up with functions to speed up gameplay. One that im going to add is: DRAWTILEBGLIST, which will draw tiles as per a list of X/Y values. This will save time when drawing the backgrounds of onscreen sprites. Screenie, note that the sprites dont flicker in the emu or on calc:
30
« on: May 25, 2014, 08:53:03 pm »
Looks great! Ive been thinking about getting an OUYA ... but since i barely have time to play my Wii U ... . But it would be good to dev for and especially to check out your games as well ..
|