Playdate SDK Changelog
1.12.3
Aug 16th, 2022
Fixed
- Improved battery performance and energy percentage accuracy
- Improved button de-bouncing
1.12.2
July 12th, 2022
Fixed
- Fixed crash that occurs when playing ADPCM file at rate greater than 1
1.12.1
July 5th, 2022
Added
- Added wrapping pattern templates to Inside Playdate
Fixed
- Fixed "bad loadlen" warning, possible hang at the end of VBR mp3 playback
- Fixed a regression introduced in the SDK 1.12.0 release that would cause incorrect rects to be returned from
tilemap:getCollisionRects()
andsprite.addWallSprites()
sampleplayer:setOffset()
works correctly with ADPCM files. Again.- Animator start time delay is no longer doubled
- Changed README.md on macOS to tell users to get the Nova extension from the extension repository rather than from the SDK
- Looping sound sequences work again
- Fixed a case where RAM can fail to initialize after being in Disk Mode
1.12.0
June 15th, 2022
Added
- Added function arguments to the Nova Playdate extension autocomplete
- Added "__stub.lua" API reference file for improved autocomplete in 3rd party editors
- Added
animator:progress()
to CoreLibs/animator - Added
animator.reverses
flag to CoreLibs/animator to enable ping-ponging - Added
animator:reset([duration])
to CoreLibs/animator - Added
animator:valueAtTime(t)
to CoreLibs/animator - Added
pd->sound->signal
for custom PDSynthSignals - Added
gfx.font.getGlyph()
- Added
showhidden
flag to Luafile.listFiles()
and Cfile->listFiles()
- Added
sprite:setStencilPattern(row1, row2, ...)
variant to matchgfx.setStencilPattern
- pdc now reads green in a source image as transparent if the image doesn't already have transparent pixels
- C API: Added
pd->graphics->makeFontFromData()
to turn a data blob into a font - C API: added
LCDOpaquePattern()
macro - Simulator: Mac/Windows/Linux: support for drag and drop images to preview them on the device
- Simulator: Windows/Linux: Added button to send Console commands to the device
- Simulator: Mac: When Controlling device with the Simulator the Console prompt icon now indicates commands are going to the device
- Simulator: Mac/Windows/Linux: Added help menu item
- Simulator: Mac/Windows/Linux: Added content warning fields to meta data window
- Inside Playdate with C: added
PDSynthInstrument
to list ofSoundSource
subtypes - Added 2 second hold time after docking crank for recalibrating crank angle
Changed
pd->graphics->getBitmapData()
now returns full width and height, flattens padding if you're accessing the data- Changed "hasMask" arg in
pd->graphics->getBitmapData
to "mask", returning a pointer to the mask data (or NULL) instead of just a flag - Microphone recording LED is now orange and dimmer
- Removed old compatibility code from
playdate.graphics.animation.loop
pd->sound->channel->newChannel()
now adds the channel to the sound engine, to match the Lua equivalentsynth:playNote(0)
is now a synonym forsynth:noteOff()
, in case that's useful?- Renamed
luaL_Val
in pd_api_lua.h tolua_val
- Simulator: Mac/Windows/Linux: C API null argument error is now logged to the Console and stops game
- Simulator: Mac: When running a C game, the Memory button will now open Malloc Log
- Simulator: Mac: Malloc Log Group by Call Tree and Auto refresh are now off by default
- Simulator: Mac/Windows/Linux: Updated button artwork
- Simulator: Mac/Windows/Linux: button key equivalents are now under the buttons instead of inside of them
- Simulator: Mac/Windows/Linux: no longer pauses when C API update callback returns 0, to match the device and the docs
- Inside Playdate with C: Minor clarifications to building on Windows and other tweaks
Fixed
- Playdate sometimes gets stuck on boot logo after needing to plug in to boot
- Clock not updating or syncing after re-watching the Intro Animation
- Fixed inaccurate frame timing when Playdate has been on for several days
- Word clock now correctly rounds up to the next day (and potentially month) when the time is just before midnight
- Entry to low-power mode is now less susceptible to voltage spikes
- Fixes an issue that can cause
drawTextInRect()
to hang on unusually long words - Fixed an issue with the CoreLibs function
playdate.graphics.drawTextInRect()
that could cause text to be drawn outside of the bounds of the specified rect. - Fixed
gfx.setStencilPattern(alpha)
- High resolution timer is no longer truncated to nearest millisecond
- pdc: -m no longer complains about missing main.lua
- pdc: shouldn't give warning when copying pdv files
- pdc: Windows: fixed -k check for card-highlighted\animation.txt
- Added round end caps to drawn bounds in drawWideLine
playdate.graphics.sprite.getCollisionRects()
now correctly handles invalid tileIDs- Fixed possible crash calling
micinput.stopRecording()
when not recording pd->sound->synth->setGenerator()
now workspd->sound->lfo->setGlobal()
now works correctly, updates the lfo in the background whether it's in use or not- Adjusting the delay on an active
playdate.graphics.animation.loop
now works as expected - Fixed obscure graphics corruption bug
- Mac Installer now removes the quarantine bit during installation
- Microphone recording LED is turned off when locking the device
- Fixed a drawing problem on the Settings > Games game detail screen that could cause the version number to wrap to the next line
animator:ended()
no longer returns true during last loop of repeating animation- Device:
isDir()
value is now 1 or 0 - Bootloader doesn't update plug state quick enough, gets stuck on Playdate screen after low power
- Sprites now respect the setRedrawsOnImageChange flag
sequence:setLoops()
now uses the loop count argument instead of always looping endlessly- Fixed
getLength()
andgetOffset()
for mp3 fileplayers - Dynamically-built imagetables now work as expected :fingers_crossed:
- Fixed crash trying to play ADPCM files with negative rate
- Fixed a visual issue with the default game launch animation
- Fixed odd case where sprites leave trails
- Fixed precision issue in
file:seek()
for offsets > 16MB - Fixed problem with repeating tilemap ids when calling
playdate.graphics.tilemap:getCollisionRects()
orplaydate.graphics.sprite.addWallSprites()
- Fixed incorrect length on adpcm sampleplayers
- Simulator: Windows: Unicode filenames inside of a game now work correctly
- Simulator: Windows: Deleting folders recursively now works as expected
- Simulator: Windows: Fixed crash when attempting to delete a game
- Simulator: Linux:
listFiles()
no longer may incorrectly filter or show . and .. files - Simulator: Mac: 2x Display menu item has a checkmark when enabled
- Simulator: Windows/Linux: Improvements to Console log output formatting
- Simulator: Windows/Linux: Fixed possible crash when getting meta data
- Simulator: Linux/Windows: Fixed possible crash when using wifi API
- Simulator: Linux/Windows: Improved reliability of wifi calls
- Simulator: Windows/Linux: fixed
getTime().milliseconds
returning 0 - Simulator: Windows/Linux: fixed possible crash on quit
- Simulator: Mac/Windows/Linux: Fixed crash when debugDraw is called during a yielded
update()
with an active graphics context stack - Inside Playdate:
playdate.timer.allTimers()
should have a function icon - Inside Playdate:
lineSegment.fast_intersection
should have dot, not colon - Sample code: Fixed drawing glitch in Level 1-1 demo when player hits a ? box
- Sample code: C API 3D demo no longer throws float->double warnings
1.11.1
May 19th, 2022
Added
- Games can now optionally show content warnings the first time they are launched
- SDK: C API: now checks for NULL pointers and logs a warning message
- SDK: C API: now allows possible optional out arguments to be passed NULL pointers
- Inside Playdate: explain more about how we use custom file types inside the pdx
- Simulator: Windows/Mac: computer will no longer sleep the display when using the device as a controller
- Simulator: Windows/Linux: added a hot key for Upload Game to Device
- Device: Added a better error message when registering a device with an unrecognized serial number
Changed
- Inside Playdate: removed redundant
setClipRect()
call in A Basic Playdate Game in Lua
Fixed
- Stuck display after unlocking device
- Side-loaded games zipped using Windows zip may not install properly
- Crank alignment not being saved to disk correctly in some cases
- Bug that caused some screenshots to not be saved if a Screenshots folder was not present
- Issue that could cause games to become uninstalled if the system attempted to download an update while the game was open
- System menu callback crash if called during a
playdate.wait()
- Potential crash when adding and removing menu items to the system menu
- Potential heap corruption when using Scoreboards
- Simulator: Mac: fixed mic recording when using certain mic hardware
- SDK: Windows: CMake: script wouldn't open games in the Simulator with spaces correctly
- Simulator: Mac:
playdate.setDebugDrawColor()
is now reset before loading pdx, not after - Simulator: Windows: fixed deleting folders using the API
- Simulator: Windows: Fixed screenshot saving
playdate->system->getAccelerometer()
crashes when passed NULL for unneeded axes- Simulator: Mac: improved Wi-Fi check in Registration dialog
- Simulator: Linux: fixed crash when closing the main window when paused and in the background
1.11.0
May 9th, 2022
Added
- Added playdate.menu:getMenuItems()
- Simulator: Mac/Windows/Linux: Added the ability to lock thumb stick controller position
- Simulator: Mac/Windows/Linux: Added dock/undock crank controller button action
- Simulator: Windows/Linux: Improved error messages when attempting to load an invalid pdx
- Added "Reboot to Data Disk" to the Settings > System menu
- Launcher posts alert about old version of Casual Birder instead of launching it
Changed
- New Lua crash dialog: shows falling blocks UI; user needs to press B to see backtrace
- When leaving the Settings > Games screen while downloads are in progress the alert dialog now defaults to "Stay"
- New game unwrap animations are now shown even if the Reduce Flashing setting is turned on
- Simulator: Windows/Linux: Don't attempt to re-open apps across SDK releases
Fixed
- Simulator: Windows/Linux: better support for unicode throughout the app
- Simulator: Windows/Linux: Console log format now matches the Mac Sim and is less verbose
- Crank is now correctly mirrored in Upside Down mode
- Game screenshots work: now using game name instead of bundleID in screenshot filename, and truncating it if it's too long
- playdate.ui.crankIndicator now ignores the current draw offset
- Simulator: Mac/Linux: now puts screenshots in the SDK's /Disk/Screenshots folder instead of inside the pdx if it's running from outside /Disk/Games
- Simulator: Mac/Windows/Linux: fixed possible crash when registering Simulator
1.10.0
April 18, 2022
Added
- Device LED is now red when recording from mic
- Added a return value to fileplayer->loadIntoPlayer() indicating whether the given file exists
- Better management of battery charging to help increase battery longevity
- Added sprite:setRedrawsOnImageChange() to disable automatic redraw after calling sprite:setImage()
- IP and MAC addresses are now shown in the Device Info screen in Settings
- Simulator: added limit of 64 simultaneous open files to match the limit on the hardware
- The sample is now passed to the snd.micinput.recordToSample()
- pdc: added note when compiler copies unrecognized file to pdx, -k flag for skipping unrecognized files (and -q for turning off the notice)
- Datastore.writeImage() gif encoding now supports transparency
- Simulator: Windows/Linux: map mouse scroll wheel to crank
- Simulator: Windows/Linux: add update notification dialog
- Simulator: Windows/Linux: can now retry loading a game on a failed initial load
- Simulator: Windows/Linux: add Malloc Log tool
- Added implementations of _malloc_r etc. to setup.c so that libc functions that allocate heap magically work
- Added warnings to indicate System games cannot be run from outside the System folder
- The device intro animation can now be replayed from the Settings > System menu
- Runloop stall error screen now shows Lua stack trace, if it's available
- C API: added gfx->setStencilImage() and sprite->setStencilImage() with "tile" flag
- Added support for reverting to a factory/recovery firmware image
- Added playdate.getButtonState()
- Added pd->sound->lfo->setGlobal()
- Added pd->sound->track->getSignalForController()
Changed
- Removed unused, undocumented playdate.getFrameTime()
- Game's data folder isn't created until something will be written into it
- MenuItem:getTitle() returns the original title, not the lower-cased version
- Device should not be lockable while downloading a firmware update
- Use a smoothed battery voltage for low power modes
- More accurate battery measurements with disabled charge/usb power while reading
- Screenshots are now saved on the data disk in a root-level Screenshots folde
- Factory reset will only prompt to remove account if the device is registered
- Added serial number and device-specific QR code to the factory reset screen
- Simulator: Mac: controller configuration is now located in the Preferences window
- Replaced fisr() in C API 3D demo with sqrtf(), or vsqrt instruction on ARM
- GCC will now be used on linux on our Makefile
- Simulator: Mac/Linux/Windows: Accelerometer is no longer constrained to unit circle, in order to simulate shake events
- Lua docs no longer describe multiple return values as "tuples"
- Improved instructional text on Account Registration setup screen
- Floats that are converted to doubles now get a warning at build time
- Lua error screen timeout increased to 5 minutes
- We don't need to clean the DCache on every audio interrupt
- Don't allow new heap allocations when performing emergency GC
- Pressing B at the main menu in Settings now returns to the Launcher
- pd->sound->synth->setGenerator() still doesn't work, but no longer crashes
- Calling gfx:lockFocus(image) instead of gfx.lockFocus(image) now throws an error
Fixed
- Fix integer overflow on some SDK-internal data structure capacities
- Fixed slow number parsing in json decoder
- Simulator: Mac/Linux/Windows: Fixed accelerometer z value when using device as controller
- Menu button volume shortcuts button presses no longer leak through to games
- Simulator: Mac: Games opened in the Simulator will now be added to the Open Recent menu
- pd->lua->callFunction() no longer drops called function's return values
- Long Wi-Fi names now scroll in the Wi-Fi password entry screen
- Move high score caches out of the game's data directory
- Clarify "Wi-Fi not yet configured" message
- Arguments are no longer cast to ints in geom.point:offset(x,y), geom.polygon.new(x1,y1,x2,y2..), and the geom.distanceFromPointToPoint(x1,y1,x2,y2) functions
- The game list is now reset when a device is unregistered
- pdc: \n and \t are now properly translated in strings files
- pd->file->open() with kFileReadData (and not kFileRead) doesn't read files from Data folder
- Simulator: Mac: Device info status queries could stack up if device was temporarily unresponsive.
- Game download will retry if an invalid partial download is in place
- Simulator: Mac: Will no longer process input when the simulator is paused.
- If the menu is open, game audio shouldn't start after unlocking the device
- Menu glitch if button is pressed repeatedly
- SSL Connections shouldn't fail if device time is incorrectly set
- Simulator: Mac: No longer clear the registration fields when window is focused.
- C API: renamed confusing playdate->system->setAutoLock() argument
- Fixed scaling on PO synths so they're audible again, added synth.lua single file example back in
- Simulator: Mac: If Wi-Fi is not configured when attempting to register the Simulator, the error now explains why registration failed.
- Simulator: Windows: Fixed running from non-primary drive
- pdc can now handle multiple imports inside one statement (for example in a table constructor)
- pdc: U+xxxx sequences in fnt files are never marked as whitespace
- Inside Playdate: updated fnt section to note we support "U+xxxx" sequences and all Unicode up to U+3FFFF
- Docs: Fixed formatting in playdate->lua->indexMetatable()
- Added note that playNote() only queues one note, use playdate.sound.sequence for sequences
- Support timestamps in the filesystem
- Added explanation of bitmap data format in playdate->graphics->getBitmapData()
- The exit full screen prompt was drawn in the incorrect location when in full screen mode.
- Incorrect menu titles immediately after forgetting a Wi-Fi network
- Fixed duplicated setMaskImage/getMaskImage text
- CMakeFiles: fixed common.mk fix for
No rule to make target 'build/pdex.bin', needed by 'device'
- Docs: fixed description of fileplayer:getOffset()
- Heap overflow in gfx.getDisplayImage()
- Fixes an issue that could leave the device in a stuck state when pressing buttons rapidly while the system menu is closing.
- Fix a crash due to using Sound Channels and a File/SamplePlayer completing
- Fixed fileplayer looping (again)
- Documentation: updated tilemap:getCollisions() description to indicate return value is in tilemap coordinates
- Simulator: Mac: fixed double error message when load fails
- Fix FilePlayer when used with an MP3 Stream Source
- Simulator: Mac: Search function in Lua memory viewer now recurses through tables again
- Fix a pdc hang that can occur when we get file errors on read
- Fixed hang that could occur when playdate.graphics.drawTextInRect() was called with a very narrow width argument
- Fixed regression in mp3 playback breaking decoding for some files
- Fixed crash due to stack overflow if mp3 decoding fails
- Release internal references when removing sprites in bulk
- setBackgroundDrawingCallback() now properly returns the newly created sprite
- Fix a potential frame skip when using an inverted framebuffer
- Lua glue now correctly tracks references to multiple playing sound sequences
- Docs: fixed description of playMIDINote
- Fileplayer's getLength() function (both C and Lua) needs to open the file if it isn't already
- Docs: leftButtonDown should say "presses" instead of "releases"
- Docs: fixed typo in fileplayer->loadIntoPlayer()
- Removed hidden variation selector on double exclamation point character in Asheville Sans 14 Light fnt file
- Fixed case where markDirty() wasn't causing an uncovered sprite to redraw
- Fixed edge cases in polygon:containsPoint()
- pdc: Mac: -sdkpath is being side stepped
- Sprite:setStencilPattern() now tiles the stencil image to the entire screen
- Fixed crash in image:transformedImage() with specific image sizes
- Calling setImage() on a copied sprite now works as expected
- Simulator: Windows: improved window layout when using 150% scale factor
- clipped fillRect() can get bounds wrong
- Sprites with the same z index should be drawn in the order they were added
- Mac: the QuickLook icon thumbnail could be positioned off center.
- Simulator: Windows/Linux: improved simulating refresh rate 0
- Simulator: Windows: no longer drop frames when interacting with UI
- Simulator: Windows: C games failed to run out of the Games folder
- Simulator: Windows: README now mentions the x64 bit C++ runtime
- Simulator: Windows/Linux: improved WIFI check when registering the Simulator
1.9.3
March 18, 2022
Added
- Simulator: limit number of open file handles to match hardware
- CMakeLists files provided for all C examples
- Document performance considerations around floating point operations in Inside Playdate with C
Changed
fileplayer
now leaves file closed until data is needed
Fixed
- Launcher: Fixes a problem that would sometimes cause an new game to animate in over top of an existing game
- Launcher: Fixes an issue that could sometime cause an unwrap animation to be out of sync with the audio
- Launcher: Fixes a visual glitch that could occur when the A button was rapidly pressed as the Launcher was starting up
- Correct support info in Inside Playdate with C
1.9.2
March 16, 2022
Changed
- Added flag for tiling stencils in setStencilImage instead of always tiling images < screen size
Fixed
- Fixed missing text glitch while menu animates in
- Crash when exiting the game list during a game download
1.9.1
March 9, 2022
Added
- Better logging of firmware update failures
- Individual values can now be passed to playdate.geometry.polygon:containsPoint, playdate.geometry.rect:containsRect, and playdate.geometry.rect:containsPoint
- Added gfx.imagetable:setImage(pos, image)
- Simulator: Windows/Linux Register Simulator dialog now has link to the website
- Added SoundFormat and helper macros to Inside Playdate with C
Changed
- Unified keyboard shortcuts in all the Simulators
- Increase Autolock timeout to 3 minutes
- Inside Playdate: factored parameters out of list of easing functions
- If the toolchain fails to download it will be retried
- Removed error when using error-diffusing dither types in gfx.setDitherPattern()
Fixed
- Simulator: Mac: Command-right/left arrow no longer rotates the Simulator unexpectedly when in the Console.
- Fixed a bug where a text formatting character could appear in drawn text
- snd.getCurrentTime() no longer stops when Simulator volume is set to 0
- MacOS SDK installer no longer requires Rosetta
- Changed delay effect mix in Drum Machine example so you hear the notes at the right time
- Fixed Input Test error when the crank angle is exactly 345 degrees
- Fixed backward incompatibilities with older games
- eventHandler declaration in pd_api.h now includes Windows export tag
- Simulator: Mac: fixed some drawing and timing glitches in animated gif export
- Simulator: Windows: now correctly include the game controller map
- sprite:setScale() and :setRotation() now handle opaque images with padding
- sprite:setScale() and :setRotation() now copy image's invert flag
- Update FPU settings in CMake builds
- Simulator: Windows/Linux: Fixed a crash when using unmapped thumb sticks
- Simulator: Windows/Linux: Fixed an issue where Playdate settings would not be saved correctly
- Simulator: Linux: fixed compatiblity with libpng on certain distros which could lead to a crash
- Fixed bounds checking in imagetable:getImage(x,y)
- Fix game crashes if /Data doesn't exist
1.9.0
February 28, 2022
First public release!