ZXDunny
Deep avatar
- Joined
- Oct 12, 2010
- Messages
- 2,585
Up on the Repo RIGHT NOW: http://repo.openpandora.org/?page=detail&app=pandabas.zxdunny.2994
Enjoy - lots of changes to this version, not least of which is a massive speed improvement due to a new rendering system
Here's the changelog for those that like that sort of thing:
As usual, the manual is inside the PND, and is available in your Documentation section of the XFCE menu.
PC windows/Linux and Raspberry PI versions to come later.
D.
Enjoy - lots of changes to this version, not least of which is a massive speed improvement due to a new rendering system
Here's the changelog for those that like that sort of thing:
Have fun, and feedback here or on the official forum: http://www.zxspectrum4.net/forum/viewforum.php?f=6v0.0.0.826
==========
Added:
UNDIM array() will remove an array from memory - can be quite slow, so avoid using it in tight loops!
CLEAR [array()[,value/value$]] will fill an array with a value or string depending on type
IVAL takes a string and extracts as much of an integer as it can - "128|678" will return "128" for example - does not perform evaluation as for VAL
POS has a new (optional) parameter - POS(substr,string[,start]) begins searching "string" for "substr" at position "start"
CHANGE: UDGs have been changed, and no longer require the CHR$ 1 prefix in a string. As a result, there's only 128 of them in a font
SPRITE NEW id COPY id - to copy from one already existing sprite to another. Use COLLIDE and WRAP after COPY to override behaviour
SCREEN$ - as from Sinclair BASIC, identifies characters at an x and y coordinate. Only for mono fonts, matches current INK and PAPER
REPLACE$ function does a text "search and replace" with three parameters: string to search, text to replace, text to replace with
CURVE now optionally takes three coordinates (as opposed to just two) - x1,y1 TO x2,y2 TO x3,y3 which ignores previous plotted position
TIME$ takes similar parameters to DATE$ and works on time (hours, minutes, seconds)
DATE$ takes a time (TIME function for example) and a string to format, ie "dd/mm/yyyy"
Direct expressions and their results are now added to the command history for quick recall
SPRITE COLLIDE CLEAR now takes an optional sprite ID to only clear the collision flag of that sprite
The HEX function works like BIN - returns a decimal version of the hexadecimal argument. As with BIN, there's no need for prefixes
DO can now take an optional numeric argument - DO 35: PRINT "X": LOOP will loop 35 times without needing a variable to keep count
Sorting arrays can now be performed in both ascending and descending order by adding the INVERSE switch
All commands which output graphics primitives (CIRCLE, PRINT etc) can now use alpha channel information and render to a 32bit window
32bit font support - each character's pixel is a 4byte value (ARGB) format
RGBtoHSV and HSVtoRGB now accept either a single integer argument or three separate arguments
32bit display target, in preparation for 32bit graphic support. This means quite a slow down in some situations on single-core machines
Subdivided rectangles are now used in the renderer to prevent overdraw - very large speed increase on single-core machines
Further optimisations - expression re-ordering, so the optimiser can be more efficient
You can now use the ":" character as a tab-character to indent your FOR..NEXT loops if you really want
OVER 10 - multiplies two pixels together
OVER 8 and OVER 9 - Maximum and minimum respectively - performs a pixel-by-pixel compare
Optimised the stack-machine which has gained a significant speed increase
Numeric array accesses are now much faster
ARSIZE a$() returns the number of items in any array, including dynamic arrays
LBOUND(a$(),i) returns the lower bounds of the i'th subscript of a non-dynamic array
UBOUND(a$(),i) returns the upper bounds of the i'th subscript of a non-dynamic array
TRANSPARENT 1/0 inlined into PRINT commands now works for mono fonts too
JOIN$ function takes a string array and a separator - LET b$=JOIN$(a$()," ") will compile all of a$() into one string, each separated by a space.
String splitting: DIM a$(SPLIT "my|test|string", NOT "|") will split the string into an array of three strings, excluding the "|" - NOT is optional if you want to keep it in
ON EVERY events don't now take a condition if you don't want them to - it's optional
ON... Events no longer need an explicit RETURN after their handler statements
PRINT USING mask$;item;item;item etc - similar to a regular USING formatting string
USING$ function - identical to PRINT USING() but returns a formatted string
Specifying a default fill no longer requires an emptry string for the texture - CIRCLE x,y,r FILL will suffice
PACKAGE truncation and consolidation - optimised package size on close
DECIMAL(val$,base) function converts from a base to decimal
Arbitrary base numbers can now be inlined. Eg: 10 PRINT A10QP\36 (note the backslash) denotes a base-36 number
RECTANGLE can now take coordinates as x,y,w,h as well as x1,y1 TO x2,y2
MATCH(regexp$,text$) returns the position of the first match using a regular expression against the supplied text
Fixed:
CAT shows the wildcard match string correctly
The wildcard "*" when used with CAT now matches at least no characters instead of one
Error messages (including 0:OK) would halt all sound when displayed - now sound is stopped when the error is cleared
The IN operator now has a lower priority than functions and inequalities, but higher than AND/OR/NOT
A small bug in string slice assigns that caused a crash in multistatement lines
Expressions that start with a decimal point no longer fail to parse on the command line
Collision bugs where many sprites collide at once
Fixed a small bug in package handling that caused overwriting and CAT to fail
Omitting a loop-control variable in FOR EACH caused the editor to hang
Small rounding errors in the turtle graphics routines
The new, faster render loop caused out of bounds errors for SDL under linux when drawing to offscreen surfaces
FOR .. NEXT loops that have lost their destination are flagged as such in LIST VAR now
All RGB (and ARGB) colours use the same format now
RED, GREEN, BLUE didn't retrieve the correct values due to the 32bit update changes to the palette system
HEX$ and BIN$ didn't work with some larger numbers
RENUMBER sets lines that jump out of the program (past the last line) to a line greater than the last line
Structure member assignment failed due to an error in LET
ON EVERY <x> didn't insert the correct keyword handler after the frame counter
INCLUDE with an invalid filename crashed SpecBAS
INCLUDE with multiple files (or multiple INCLUDEs on one line) failed to add procs or crashed
Accessing an array using an array as an index works now
Possible fix for keyboards that use Alt-Gr for some characters (such as Portuguese)
Sprite collisions were a tad sticky, even after clearing the collision flag
Base notation didn't work for any base that was a multiple of 10
Base notation can now be used as a direct expression
A long-standing bug where GOSUB statements were ignored by the RENUMBER command
The IN operator was too high a priority, rendering 2+1 IN [0 TO 3] as 3, rather than 1
Clicking and dragging the mouse off SpecBAS's window whilst in the editor caused a crash
CASE...WHEN IN... statements caused a hang
Single-line CASE...WHEN...END CASE constructs, although insane, now work properly
Auto-DIMmed arrays set their values in the wrong arrays at times
SPRITE ANIM PLAY ignore the OPTION parameter if start and end were left unspecified
DIM SPLIT arrays created empty arrays in some circumstances
Array keys (associative arrays) now follow the values properly when sorted
SPRITE ANIM PLAY got frame indices mixed up - Again
ELSE was treated as a statement in itself, which screwed up things like RETURN after an ELSE GOSUB
IIF and IIF$ would cause a crash if they evaluated to FALSE more than once in a loop
INPUT now uses the current scaling for the initial position of the INPUT prompt
DELETE past the end of the program caused a crash
FOR EACH with a string var and a range of characters stupidly appended an extra "$" to the varname, rendering it unusable
Sprites wrap correctly when overlapping other sprites
Sprites no longer stutter when they collide (if their collision flag is disabled)
Editor windows were transparent - not that you'd notice, but they render faster now
Zones return their correct ID numbers when other zones are deleted
DIV now does a proper integer divide...
Runs of arithmetic operators weren't always correctly merged
PALETTE HSV now accepts HUE values in the correct range of 0 to 360
INKEY$ now picks up other keys that may be pressed when a key goes up
WAIT (all versions) cleared the keybuffer inappropriately, causing INKEY$ to lose keys
In the Win32 version, some keys weren't recognised correctly at times, turned out to be a Unicode issue
DEF PROC, when executed, didn't jump past the end of the procedure properly
END PROC didn't exit cleanly after a loop
EXIT didn't clean the stack properly and so caused issues with END PROC
Timed events (ON <condition> EVERY <framecount>) now trigger after the correct time interval
ON ERROR (and other ON events) didn't return properly after they had been handled
Adding an extra index to a string array reference wasn't parsed as a slicer
String multiplication was occasionally incorrectly parsed
As usual, the manual is inside the PND, and is available in your Documentation section of the XFCE menu.
PC windows/Linux and Raspberry PI versions to come later.
D.
Last edited by a moderator: