Skip to content

Releases: morgan3d/quadplay

Beta update 56

04 Dec 23:36
Compare
Choose a tag to compare

New “gridmove” sample of PAC-MAN style movement and maps
Eliminated most lag in online multiplayer by working around various browser bugs
Added xy_to_angle() and angle_to_xy()
Added rgb(array), rgba(array), hsv(array), and hsva(array)
Improved error messages for xy() constructor
Added clipping region support for Warlock3D raycast.pyxl routines
15% speedup for Warlock3D demo through clipping, reduced floor quality, and micro-optimizations
Added map.size_pixels
Added variable quality option for draw_map_span()
Darkened and saturated the player 3 yellow and player 4 lime colors to better match the brightness P1 and P2
Fixed map.z_offset being ignored by get_map_sprite_by_ws_coord()
Fixed diagonal flipped sprites in TMX maps
Fixed new doc create not working
Fixed crash in physics example from contact.point1 being {} instead of nil

Beta update 55

23 Nov 02:41
Compare
Choose a tag to compare

Tuned Friendly Fishing to spawn only small fish at the start of the game to ease players in, and then guarantee larger fish later
Added credits and links sections to the game.json files
Added remote play infrastructure in the Online tab of the launcher and bundled PeerJS for connecting
Changed the quadplay script --host argument to --serve to disambiguate from remote play hosting
Added quadplay --offline to disable new online multiplayer features
When running outside of the IDE (with or without kiosk mode), quadplay will now sleep after two minutes of no activity to conserve power
Launcher now shows diagnostic system data
Added Kiosk Mode to the IDE Console menu to avoid requiring URL editing
Kiosk mode now allows access to the “my_quadplay” folder
quadplay --kiosk at the command line now launches in fullscreen mode directly on macOS and Windows when using Edge or Chromium. On other platforms it requires a click to enter fullscreen.
Disabled caching of quadplay internal OS code to ensure that platform upgrades do not require a hard reload from users
Added PeerJS to the distribution
Fixed slice() on strings to implement end index as specified
Fixed draw_text() markup with both {br} (or double newline) and format specifiers dropping content after the line break
Fixed Auto-Pause state not being stored between sessions
Fixed CSV loading for constants (was broken by debug.json layer in the previous release)

Beta update 54

07 Nov 18:53
Compare
Choose a tag to compare

New Friendly Fishing built-in game
add_frame_hook(), delay(), sequence(), and remove_frame_hook() are now safe to execute from within another hook
Controller order remapping now available from the in-game pause menu
.sound.json files can now specify a base pitch, pan, rate, and volume adjustment
Added lightning to shapes-32x32.sprite.json
Added local_time().absolute_milliseconds
Added trim_spaces()
unparse() now takes an optional terse argument to eliminate spaces after separators
save_local() now uses terse unparsing
Changed save_local() limitation to 4096 characters for 64 keys
Any player can now select the built-in game in the launcher
Fixed stopwatch/oldstopwatch negative time formatting in format_number()

Beta update 53

31 Oct 18:07
Compare
Choose a tag to compare

Added gamepad_array[i].color
Added splash-01.sound.json, splash-02.sound.json, splash-03.sound.json, splash-04.sound.json, splash-05.sound.json, splash-06.sound.json, splash-07.sound.json, splash-08.sound.json, splash-09.sound.json
Added attack-00.sound.json
Added loop-departure.sound.json
Added loop-winch.sound.json and loop-spin.sound.json
Added music-royal.sound.json and music-sonata.sound.json
play_sound() now takes optional rate and stopped arguments
set_pan() can now take an xy() for the pan position
Import Existing Asset dialog now supports keyword filtering
Improved sound preview in IDE with full pause, volume, and scrub controls

Beta 52

18 Oct 23:27
Compare
Choose a tag to compare
Beta 52 Pre-release
Pre-release

New cursor-9x9.sprite.json spritesheet
New weaver-7.font.json font
Reference constants may now point to named sprites
Added IDE GUI editor for reference constants
Added device_control("set_mouse_cursor", name)
Added “Import existing script” dialog
Added “Import existing mode” dialog
Added “Import existing doc” dialog
Fixed false boolean constants not appearing in the GUI for the debug layer
Fixed mouse and touch movement deltas to work correctly on high framerate displays

Beta 51

09 Oct 04:55
Compare
Choose a tag to compare
Beta 51 Pre-release
Pre-release

New Input example program
New Weaver-10 font
Added Russian Cyrillic character "в" to fonts
Improved credits scrolling speed and fonts
Improved pixel sharpness on Chrome Windows and macOS at certain pixel ratios. All browser and OS combinations are now pixel-perfect at all scales.

Beta 50

02 Oct 10:28
Compare
Choose a tag to compare
Beta 50 Pre-release
Pre-release

Added sprite.base pointer
Added sorted() functional sort
Added a .gitignore to new projects by default
Fully implemented debug.json files and IDE support for Debug Override
Fixed z_dir not being properly set or read by the argument object versions of set_transform() and get_transform()
Fixed system pause menu at 64×64 not restoring clip and transform

Beta 49

27 Sep 12:53
Compare
Choose a tag to compare
Beta 49 Pre-release
Pre-release

New Kart example of a perspective ground plane
New Warlock 3D example of a first person viewpoint
New Blasphemer tile set
New Freedoom tile set
New Minecraft Pixel Perfection tile set
New footsteps sound loops
Added ray_intersect_map() collision detection routine
Added curved_arrow and corner_arrow to shapes-32x32.sprite.json
Added subpixel precision support for mouse.dxy on device_control("get_mouse_state")
Added device_control("set_mouse_lock")
Added .data.json files for large assets in arbitrary formats
Added set_playback_rate() for audio
Added draw_map_span()
Added IDE context menu option to remove a mode from the game
Added IDE context menu option to remove a document from the game
Allowed leading underscores on variable and member names
Improved frame rate scaling for low end processors
Tuned built-in Controls pixel layout for every resolution
Fixed mouse.dy on device_control("get_mouse_state") returning incorrect values
Fixed swapped sprite.rotated_90 and sprite.rotated_270
Fixed missing transparency for sprite.rotated_90 and sprite.rotated_270
Fixed missing edge on outlined polygons, triangles, and rotated rectangles
Fixed physical controller overriding keyboard D-pad if activated
Fixed polygons, triangles, and rectangles rotating the wrong way under camera transforms when the Y-axis is up
Fixed get_map_pixel_color() on tiling maps
Incompatible change: ray.origin ⟶ ray.pos, ray.direction ⟶ ray.dir

Beta update 48

12 Sep 22:13
Compare
Choose a tag to compare
Beta update 48 Pre-release
Pre-release

New game, Doubles de Pon
Added sprite.rotated_90, sprite.rotated_180, and sprite.rotated_270
Added robot to shapes-32x32x.sprite.json
Added correct sprite size to beast-soldier-32x32.sprite.json
Added invert_sprite_y optional argument to get_map_pixel_color()
TMX maps now support rotation as well as flips
Disk, circle, text, and rectangle centering are now all aligned for subpixel offsets
IDE now shows the current filename at the top of the code editor
Context menu now keeps IDE rollout project view visible in debug layout
Optimized the performance of rgba() colors for draw_point() about 20%
Fixed draw_text() not returning a value in skipped frames
Fixed noise() for the 3D case
Fixed HSV color preview
get_map_pixel_color() now accepts an output value to avoid memory allocation
Fixed wrapping draw_map() under simultaneous transform scale and camera rotation transformations

Incompatible changes:

  • get_map_pixel_color() now accepts a range of layers and composites all values read across them

Known bugs:

  • HSV color preview not 100% accurate
  • get_map_pixel_color() uses wrong coordinates outside of primary bounds for wrapping maps
  • draw_map() not visible outside of central 3×3 repetitions for wrapping maps

Beta update 47

04 Sep 12:12
Compare
Choose a tag to compare
Beta update 47 Pre-release
Pre-release

New built-in game “Beyond Control”
New example “Planet Generator” for 2.5D procedural content
New example “Clouds” of per-pixel graphics
New example “Entity” of different entity features
New scoreboard-5 font
New splash-00 sound
New sparks-00 through sparks-04 sounds
New explode-10 sound
New powerup-11 sound
New shoot-11 sound
New shoot-12 sound
New loop-prometheus sound
New loop-forest sound
New loop-escalator sound
New loop-beat sound
New loop-wind sound
New beast-soldier-32x32 spritesheet
New shapes-32x32 spritesheet
New dots, stripes, wood, and carbon console vinyl wraps
Added gamepad.prompt["##"] for a replacement string for the player number
Added .debug.game layer (see the Debug JSON section)
debug_watch() now allows multiple identical expressions at different locations
debug_watch() and debug_print() output are now hyperlinks to the source location that produced them
Added 320×180 support for targeting Switch, PiBoy, 720p, 1080p, and 1440p
Added support for TileKit
Added optional stick index argument to device_control("get_analog_axes", ...)
Added font.spacing and font.glyph_size
Packed suchet-12 font characters more tightly to conserve memory
Optimized rendering of successive rectangles using the same z value
Optimized the 2D noise() function variant (now runs in 3/4 the time)
Incompatible changes:
Made the order of arguments for draw_tri() consistent with other drawing functions
local_time().daySecond ⟶ local_time().day_second
xz_to_xyz() now swizzles z → y
Games must now opt in with a game.json dual_dpad setting for the P1 right stick to override the P2 D-pad for dual digital stick input in single-player games
The entity.pivot now affects rendering as well as collision detection, overriding the sprite's pivot (it defaults to the sprite's pivot)
The start mode is now specified with start_mode in the game JSON file instead of an asterisk
sequence() now accepts bare numbers indicating frames to skip
sequence() now supports an end_callback
Made the default radius for random_truncated_gaussian() 2.5 standard deviations
Changed the region of a sprite JSON file to take "corner" instead of "pos" (the old version is accepted as a synonym for backwards compatibility at the moment)
The sprite viewer in the IDE now autoscales for tall sprites
stop_audio() now allows the argument to be nil
Added SOURCE_LOCATION zero-argument operator
set_random_seed() now defaults to a random seed based on the time
random_value(), shuffle(), and shuffled() now take an optional random number generator argument
IDE can now create new sound assets
IDE can now change the order of execution of scripts
IDE can now remove scripts (removed scripts are not deleted on disk)
IDE can now rename scripts
IDE project window now rolls out on hover in debug mode
gamepad_array[] elements now print as their name instead of properties
Increased the contrast of the text in ghost mode
Reordered quick links on the top of the manual
Rewrote the Project File section of the manual to clarify the asset vs. constant distinction
Increased the contrast on the sprite editor info data
The Import Asset dialog will now automatically default to a useful variable name
The Import Asset dialog can now import raw PNG, TMX, and MP3 files
Sprite JSON files now default to assuming a single sprite that is the size of the spritesheet if none is specified
Fonts now only count as 1/2 pixels towards the sprite pixel limit because they are compressed
Internally renamed variables and files for easier refactoring and future PyxlScript features
The fullscreen layout button now returns to full screen if tapped when already selected
IDE code editor now highlights compile-time error lines in red
Editor divider pane layout now persists over reload
Added Dualshock4 controller to the officially tested list
Added support for the 8bitdo M30 SEGA Genesis style controller
Added support for the Raphnet adapter and SEGA Genesis and Mega Drive retro bit controllers
Added device_control() "load" and "save" commands for JSON files
Added touch.screen_x, touch.screen_y, touch.screen_xy, touch.screen_dx, touch.screen_dy, and touch.screen_dxy accessors for screen-space (instead of camera-space) positions
Added rgba(rgb, a), rgba(hsv, a), xyz(xy, z), xyz(xz, y), hsva(hsv, a), hsva(rgb, a)
Added transform_ws_to_ss() and transform_ss_to_ws()
Added {br} line break markup
Added ABS() intrinsic
Added sprite.animation property
Added Sega Genesis and Mega Drive controller support
Added ⑤ ⑥ ⓩ characters to font mapping and all fonts
Added design document template for New Doc menu
Added named argument version of draw_corner_rect()
Added table constants that use external CSV files
Added "multiply" blend mode for draw_sprite(), useful for colored lighting
Added support for transposed spritesheets in the IDE sprite viewer
Added support for regions in the IDE sprite viewer
Added a global volume control on the Console menu
Added buttons to copy stats summaries from the Stats pane
Added X_Arcade controller icon and mapping for the X-Arcade USB controller
Added PiBoy controller icon and mapping for the PiBoy DMG
Added device_control("console.dir", ...) for web browser console access
Fixed new game filename shortener to keep the beginning instead of the end of names
Fixed iterator container-mutation check when changing modes
Fixed draw_sprite() API links in the manual
Fixed touch.xy coordinates under translation transformations
Fixed recursive push_mode() and pop_mode() not preserving draw_previous_mode() state
Fixed export.py script to set read file permissions on the contents of the zipfile
Fixed constant editor vector vertical nudge value to default sign based on y_up setting
Fixed analog axis snapping when near 8-direction points
Fixed sprite editor not updating after JSON edits
Fixed gutters on sprites
Fixed initial entity.size to be based on scale for rectangular shaped entities that have initial sprites
Fixed broken images in Markdeep design documents after edits
Fixed incorrect image scaling when embedded in itch.io at 1080p
Fixed a bug that prevented debug_watch() on values containing string literals
Fixed IDE edits to asset JSON files not persisting after load
Fixed incorrect line numbers when using default expressions
Fixed 3-space indenting in .game.json files
Fixed internal assertion failure for make_spline() with negative time values
clone() and deep_clone() on constants now clones the value and makes it mutable, while on assets (other than maps) and built-in objects returns the original object.