Further improvements to prevent cursor jump when directly editing the game.json file
New vector intrinsic, XYZ_MAD_S_XYZ(srcxyz1, s2, srcxyz3, dstxyz)
Reduced the cost of ray_intersect_map() by 20%
2% performance boost for platforms without physical controllers
5% performance boost from changing the underlying API calls for frame rate management
Added unparse_hex_color() for unparsing color constants
Fix: workaround for cross-origin limitations when loading quadplay from a CDN
update87
1 year ago
New built-in game: “But...Skunks?!”
The “Print touch” debugger option now prints the screen color under the cursor as well
The color editor now shows the RGB hex value as well as the RGB or HSV percentages
Events now print with correct names in call stacks
Call stacks are now hyperlinked to source files and lines (except on Safari)
Fixed debug_print(∅)
Fixed touch events when afterglow is enabled
update86
1 year ago
New fonts novarese-10, novarese-bold-10, and deja-mono-8
Added optional char_min_width property to font.json files for creating monospace fonts
Added optional Font Weight and Vertical Scale to fontgen tool for bold and thin variations
Fixed open heart character in deja-8 font
Fixed cursor jumping/reloading during manual editing of JSON files
Fixed IDE GUI controls not updating after manual editing of .game.json
Fixed clipping region cutting off system controls menu
Fixed string literals appearing with incorrect quotes in the debugger
Fixed clipped circles drawing a horizontal line on the top or bottom
update85
1 year ago
Steam Deck support
Removed deprecated entity label properties (use entity text properties)
Large objects and arrays in debug_print() and debug_watch() output may now be explored hierarchically
Compile time and runtime error messages in the Output debug window are now hyperlinked to the file and line
debug_print() can now pretty-print consisely in the same format as debug_watch()
Moved Output debug window links to source code for debug_print() to be explicit on the edge of the window instead of implicit
debug_print() will now pretty print expressions with names that resemble percentages as percentages with fixed precision
Assets now debug_print() with a link back to editing the asset
Updated to latest Markdeep (1.15 in development)
Fix: acceleration in Spritestack example now follows new gamepad API
update84
1 year ago
debug_watch() pretty-prints xy(), xyz(), and xz() with low precision and as functons
debug_watch() pretty-prints rgb(), rgba(), hsv(), and hsva() as percentages with the color visualized
debug_watch() pretty-prints expressions with names that resemble angles in degrees with low precision
debug_watch() values now persist for multiple frames
New "fraction" format option for format_number()
remove_values() now returns true if any value was removed
Improved the layout of the font selection in the manual
New demo, Text Spheres title screen animation
Upgraded to ace.js 1.6.0
Reduced recommended max source statements from 8192 to 2048 to reflect recent exemptions that made counting more conservative
Changed arguments named random to rng to avoid confusion with the random() function
Fix: insert() now illegal on containers being used for iteration
Fix: Compiler now parses degree numbers with decimal places
update83
2 years ago
gamepad.a and all other button current values are now the number of frames for which the button has been held down to simplify implementing long-press input schemes (previously was 1 if held and 0 if not held)
gamepad.released_a and all other buttons releases are now the number of frames for which the button was held down before release to simplify implementing long-press input schemes (previously was 1 if released and 0 if not released that frame)
The child_table argument to make_entity() now allows overriding existing properties of the entity.
Added Nearest and premultiplied-alpha Average 50% scaling to the scalepix tool
Kiosk and IDE can now update without leaving fullscreen
Can now reload the page without leaving emulator mode
Better error message for illegal multiline strings in source code
Fixed random_within_region() for simple rectangles with no pos or shape property.
Fixed bots not being able to press buttons
Fixed kenney-1bit sprite incorrect gutter
Fixed pivots for rotated and flipped sprites from spritesheet
update82
2 years ago
New game: Gravity
New music loop by Abstraction: loop-someday_gone.sound.json
New sound shoot-13.sound.json
quantize tool now offers 1-bit and 4-bit alpha, and separate control over RGB and alpha dithering
Added make_bot_gamepad() and update_bot_gamepad() for optionally controlling AI players via virtual gamepads instead of direct logic
Added scripts/3D.pyxl generic 3D transform scripts
Added XY_DISTANCE(), XZ_DISTANCE(), and XYZ_DISTANCE() intrinsics
draw_poly() now performs 3D projection properly when used with a camera perspective zoom function
Changed internal browser session root data path from ~/my_quadplay to ~/quadplay_session when running as a native app to prevent spew
Aligned roman-8 font button prompts vertically
Incompatible changes to set_post_effects() arguments:
Renamed blend_mode ⇒ color_blend
Renamed opacity ⇒ 1 - motion_blur
Replaced background with a combination of burn_in for phosphor glow and border clamping of the frame for filling exposed background regions
Improved particle system performance 10%
Improved error checking for remove_key()
entity_simulate() now supports wrapping and clamping finite rectangular universes
iterate_pairs() for easy combinatorial iteration with proper handling of element removal
make_entity() now converts a number scale_in_parent value into an xy() value
Made frame rate scaler more aggressive when just missing 60 Hz and added a limit to stop thrashing per session between 60 Hz and 30 Hz. This helps with game feel on Raspberry Pi
Fixed NaN moment of inertia for disks
Fixed iterate() returning true when no items were removed
Fixed Debug Override checkbox placement for string constants in IDE
Fixed parsing of CSV files with strings that begin with digits
Fixed CSV files generating an empty final table row
update81
2 years ago
New game: “Morgan's Mini Mecha”
Autoupdater on Windows, Linux, and macOS for IDE. Supports both release installations and git clones
split(string, separator, max_splits) now accepts an optional number of splits to make
Improved handling of infinity for format_number()
Added Walnut wrap
Allowed auto-sleep to save power after 2 min in IDE as well as kiosk mode
Upgraded to ace.js 2022-01-26 build
Fixed syntax highlighting in IDE on Safari
update80
2 years ago
New Windows installer for quadplay
New cruise-14 font
Server now prints the installed quadplay version on launch
Unless --noupdatecheck or --kiosk is specified, quadplay now checks for available updates on launch
Spritesheets can now have animations specified by a 2D grid instead of being restricted to a row or column, and can ignore padding frames from the end
Open game dialog now allows launching a second window
split(string, n) that accepts a number of characters at which to split the string
resized() for simultaneous padding and trimming of strings
Added "♢" "♡" "☆" glyphs to font sheets
Added auto-generaton of ○◻△♢♡☆ glyphs in fonts
Added Windows installer script (linked from the website)
Made the Linux/macOS script work from double click
Uninitialized variable declarations no longer count against the code statement size
Tweaked deja-9 font symbols
load_local() with no arguments now returns an object specifying all key-value pairs saved
save_local() with no arguments now deletes all stored keys
save_local(object) now overwrites all stored keys
Modified find_move() to always choose a guaranteed single-move win if one is available
Modified find_move() to still try to win even from a losing position against an optimal player
Increased IDE debug_print() history display from 300 to 800 calls
Workaround for Windows Chromium bug where extra, unflagged, key repeat events are received on key release when multiple keys are held down. This fixes joy.xx and other values getting extra nonzero values in these situations when using a keyboard
Fixed “illegal symbol” error on variables beginning with underscores
Fixed < character in the cruise-7 font
Fixed system/pause menu when a camera transformation is active
Fixed make_move_finder() progress metadata
Fixed quaddepend and export scripts to handle raw text file constants
update79
2 years ago
New find_move() and make_move_finder() functions for discrete move AI players
New loop-alarm sound
New loop-helicopter sound
New loop-smooth_drops, loop-get_off_my_planet, and loop-all_you_can_yeet music tracks by Abstraction
Added SUM() and PROD() intrinsics for operating on arrays
Added make_array() helper function for creating multidimensional arrays
Added random_within_region()
Added an optional begin_callback to sequence() entries
Added Adobe Photoshop 2022 IDE support
draw_line() now applies separate 3D perspective at each endpoint for full wireframe rendering
Added bold syntax highlighting for mode and section dividers
Added bold syntax highlighting for function declarations
Updated error message reporting syntax for Safari 15
Renamed find_map_path() → map_find_path() [kept deprecated old version for backwards compatibility]
NaN z values in graphics commands are now an error to help with debugging
Factored internal runtime into separate AI, physics, CPU, and GPU files
Auto-math now replaces ... with … more aggressively
Forced Debug Override button to stay visible when checked in compact, all-constants view
Changed statement counter to not count else: without else if as a separate statement
Fixed rendering of diagonal lines with alpha
Fixed incorrect syntax coloring of “sgn” as if it was a function
Fixed random_gaussian3D and random_on_cube missing from syntax highlighting
Fixed emulator screen showing desktop instead of black when stopped on MacOS and Linux (workaround for Chromium bug)
Fixed overlaps() for corner rects
Fixed debug override of constants with 0 failing
Fixed url-based string constants being directly editable in the IDE