The full changelog is massive, easily the biggest in LÖVE’s history (when counting by number of individual changes listed). It can be viewed down below as well as in the Wiki. Here are some of the more noteworthy items:
LuaJIT is now being used by LÖVE by default. Depending on what’s bottlenecking your game’s performance right now, your framerate could skyrocket just by updating to 0.9.0!
ENet: real-time networking in games is a complicated topic. Thankfully, people have created libraries to help deal with some of the lower-level nuts and bolts. One such library is ENet. LÖVE 0.9.0 includes the lua-enet wrapper for the ENet library (alongside the existing general-purpose LuaSocket library), so you can easily use ENet’s features in your games with require("enet").
love.joystick: previous versions of LÖVE had support for joysticks and gamepads, but the love.joystick module was lacking in some key areas.
Version 0.9.0’s joystick module has been completely revamped – Joysticks are now actual LÖVE objects, they can be hot-plugged and removed at will (with event callbacks to match), gamepad motor vibration is now supported, and issues with differences in gamepad buttons and axes across operating systems and gamepad models is now much easier to deal with thanks to the new abstracted Gamepad API.
Windows (not the Microsoft variety): functions for dealing with LÖVE’s window have been split from love.graphics into the brand-new love.window module. The new module also includes new functionality (and better handling of the window in general, thanks to SDL 2): it’s now possible to use resizable, borderless, and “fullscreen-desktop” / “fullscreen-windowed” windows, as well as to choose which monitor the window will use.
love.graphics: Along with some general house-cleaning of this module and performance improvements to love.graphics.print, ParticleSystems, and SpriteBatches, lots of new graphics functionality has been added. Arbitrarily textured and colored polygons can be created thanks to Mesh objects. Shader objects (renamed from PixelEffects) can now be vertex shaders as well as pixel shaders. Mipmapping support has been added to images, compressed texture formats can be used now, and that’s only a handful of the new features in love.graphics.
love.math: Another new module! This one includes mathematical functionality relevant to games: a PRNG (and random number generator objects), polygon triangulation, Bézier curve objects, a Simplex noise generator, and more goodies.
love.thread: The thread module has an entirely new way to communicate between threads: Channel objects. It's much more flexible than the old API.
There are many more new features, but reading paragraphs about them can get tedious. Check them out on the wiki!
LÖVE 0.9.0 breaks compatibility with nearly every 0.8.0 game.
Several functions have been renamed (and some functionality has been changed or removed) in order to provide a more consistent and clean API experience. Often this will mean simply renaming some functions your game uses, but it will be rare for a game to work completely in both 0.8.0 and 0.9.0 unless it is written to do so.
Check the wiki! It will tell you what the new name of a renamed function is.
0.9.0’s Mac OS X system requirements are higher than 0.8.0’s: it now requires Mac OS 10.6+ and at least an Intel Core 2 CPU (~september 2006 or newer).
Here is the full changelog (or browse the formatted version on the Wiki). My paragraphs above are just a small portion of the full list:
Code: Select all
* Added better multiplayer networking support via ENet.
* Added --fused command line argument, to simulate fusing.
* Added liblove.
* Added the ability to have exit values.
* Added exit value of 1 in case of error by default.
* Added basic support for the file:// uri scheme.
* Added love.filesystem.isFused.
* Added love.filesystem.getIdentity.
* Added love.filesystem.append.
* Added love.filesystem.getSize.
* Added love.filesystem.mount and love.filesystem.unmount.
* Added optional file search order parameter to love.filesystem.setIdentity.
* Added File:isOpen and File:getMode.
* Added Fie:setBuffer, File:getBuffer, and File:flush.
* Added textinput event for unicode text input.
* Added love.keyboard.setTextInput and love.keyboard.hasTextInput.
* Added previously internal Rasterizer and GlyphData object methods.
* Added support for UTF-8 ImageFonts.
* Added Font:getAscent/getDescent/getBaseline.
* Added Font:setFilter/getFilter.
* Added Font:hasGlyphs.
* Added angle, scale, and shear parameters to love.graphics.printf.
* Added HDR canvas support.
* Added mipmapping support (has isSupported test).
* Added vertex shader support.
* Added boolean support to Shader:send.
* Added Canvas:getPixel.
* Added blend mode "replace".
* Added line join modes.
* Added Mesh objects, allowing for arbitrary textured polygons.
* Added multiple render target support to love.graphics.setCanvas.
* Added love.graphics.setColorMask.
* Added love.graphics.origin.
* Added love.graphics.getRendererInfo.
* Added love.graphics.getMaxImageSize.
* Added SpriteBatch:getCount and SpriteBatch:getBufferSize.
* Added SpriteBatch:getColor.
* Added ParticleSystem:emit.
* Added ParticleSystem:setInsertMode and ParticleSystem:getInsertMode.
* Added many ParticleSystem getter methods.
* Added DXT compressed texture support via love.image.newCompressedData.
* Added love.image.isCompressed and Image:isCompressed.
* Added Image/Canvas/ImageData:getDimensions.
* Added anisotropic filtering support for Images, Canvases, and Fonts.
* Added Image:refresh.
* Added Image:getData.
* Added SoundData:getDuration and SoundData:getSampleCount.
* Added Source:isPlaying.
* Added Source:setRelative and Source:isRelative.
* Added Source:setCone and Source:getCone.
* Added Source:getChannels.
* Added new Channels API for love.thread.
* Added limited table support to Channel:push.
* Added Thread:getError.
* Added Thread:isRunning.
* Added threaderror event.
* Added love.math module.
* Added a platform-independent (good) random implementation to love.math.
* Added RandomGenerator objects.
* Added BezierCurve objects.
* Added love.math.triangulate and love.math.isConvex.
* Added love.math.noise.
* Added love.timer.getAverageDelta.
* Added Data:getString.
* Added Contact:getChildren.
* Added love.system module.
* Added love.system.getClipboardText and love.system.setClipboardText.
* Added love.system.getOS and love.system.getProcessorCount.
* Added love.window module.
* Added love.window.isVisible.
* Added flags to love.window.setMode.
* Added monitor choosing support to love.window.setMode.
* Added support for resizable, borderless, and non-centered windows.
* Added support for "fullscreen-desktop" mode.
* Added window resize and visible events.
* Added love.window.getDimensions.
* Added love.window.getIcon.
* Added t.window.icon to love.conf.
* Added love.mousefocus and love.window.hasMouseFocus.
* Added custom hardware cursors via love.mouse.newCursor.
* Added love.mouse.setX/setY.
* Added Joystick objects.
* Added love.joystick.getJoystick.
* Added joystick connect and disconnect events.
* Added joystickaxis and joystickhat events.
* Added unified Gamepad API for joysticks which have a similar layout to the Xbox controller.
* Added joystick vibration support, works with most common gamepads.
* OPTIONAL: Added support for Game Music Emu.
* Fixed fused mode in OS X.
* Fixed printing to the console in Windows before love.load is called.
* Fixed the default love.run to not include the time taken by love.load in the first frame's dt.
* Fixed the error screen not always appearing until the next input event.
* Fixed love.event.clear.
* Fixed love.mouse.setPosition when called in love.load.
* Fixed scaling in several love.physics functions.
* Fixed Box2D exception in World:update.
* Fixed many uncaught Box2D / love.physics exceptions for Bodies and Joints.
* Fixed ChainShape:getPoints running out of Lua stack space and crashing.
* Fixed File:read reading past end of file.
* Fixed love.filesystem.setIdentity not removing read access from old directories.
* Fixed possible memory leak in utf-8 decoder.
* Fixed spacing for the last character in an ImageFont.
* Fixed line wrapping in love.graphics.printf.
* Fixed love.graphics.printf to error if the wrap limit is negative.
* Fixed love.graphics.print truncating strings with embedded zeros.
* Fixed crashes with font drawing on some ATI cards.
* Fixed artifacts when drawing lines at huge scale.
* Fixed Fonts and Canvases ignoring default image filter.
* Fixed scissor boxes when a canvas is set after love.graphics.setScissor is called.
* Fixed love.graphics.getLineWidth returning incorrect values.
* Fixed love.graphics.getColor on some Windows systems.
* Fixed alpha blend mode.
* Fixed multiplicative blend mode.
* Fixed love.graphics.getPointStyle.
* Fixed line numbers in shader errors.
* Fixed Shader:send with Images and Canvases failing sometimes.
* Fixed Shader:send to keep a reference to sent Images and Canvases.
* Fixed crash when binding SpriteBatches multiple times.
* Fixed SpriteBatches with more than 16,384 sprites.
* Fixed particle draw order for ParticleSystems.
* Fixed ParticleSystem:setSizes resetting the size variation.
* Fixed the graphics viewport not matching the window size when using an unsupported fullscreen mode.
* Fixed getMode and friends returning wrong values when using desktop size.
* Fixed keyrepeat settings being lost after (indirect) setMode.
* Fixed the icon being reset after setMode.
* Fixed memory leak in the mp3 decoder.
* Fixed sound issues with some versions of OpenAL soft, by enabling direct channels.
* Fixed 'random' hangs in audio.
* Fixed love.sound.newDecoder not accepting FileData.
* Fixed case (in)sensitivity of sound file extension parsing.
* Fixed looping support in tracker music formats.
* Fixed skipping/looping issues when playing streaming audio Sources.
* Fixed race condition in Source:play.
* Fixed WAVE sound playback.
* Moved love's startup to modules/love.
* Moved window-related functions from love.graphics to love.window.
* Renamed love's boot script to 'love.boot', which can be required.
* Renamed love.filesystem.mkdir to love.filesystem.createDirectory.
* Renamed love.filesystem.enumerate to love.filesystem.getDirectoryItems.
* Renamed World:setAllowSleeping to World:setSleepingAllowed.
* Renamed ChainShape:setPrevVertex to ChainShape:setPreviousVertex.
* Renamed Joint:enableMotor to Joint:setMotorEnabled.
* Renamed Joint:enableLimit and Joint:isLimitEnabled to Joint:setLimitsEnabled and Joint:hasLimitsEnabled.
* Renamed t.screen to t.window in love.conf.
* Renamed love.graphics.setCaption to love.window.setTitle.
* Renamed PixelEffect to Shader (but now with vertex shaders).
* Renamed love.graphics.setDefaultImageFilter to love.graphics.setDefaultFilter.
* Renamed ParticleSystem:setSprite to ParticleSystem:setImage.
* Renamed ParticleSystem:setGravity to ParticleSystem:setLinearAcceleration.
* Renamed ParticleSystem:setLifetime/setParticleLife to setEmitter/ParticleLifetime.
* Renamed ParticleSystem:count and all getNum* functions to get*Count.
* Renamed Source:setDistance to Source:setAttenuationDistances.
* Renamed SoundData:getBits and Decoder:getBits to SoundData:getBitDepth and Decoder:getBitDepth.
* Renamed love.mouse.setGrab to love.mouse.setGrabbed.
* Removed release mode.
* Removed love.keyboard.getKeyRepeat (see love.keyboard.hasKeyRepeat).
* Removed the unicode argument from love.keypressed (see love.textinput).
* Removed love.graphics.drawTest.
* Removed love.graphics.quad/triangle.
* Removed love.graphics.setColorMode.
* Removed love.graphics.newStencil.
* Removed love.graphics.setLine/setPoint.
* Removed love.graphics.drawq (functionality is merged into love.graphics.draw).
* Removed SpriteBatch:addq/setq (functionality is merged into SpriteBatch:add/set).
* Removed Quad:flip.
* Removed ParticleSystem:isFull/isEmpty.
* Removed ParticleSystem:getX/getY.
* Removed love.graphics.checkMode.
* Removed love.joystick.open and friends.
* Removed love.joystick module functions which operated on individual joysticks (see Joystick objects).
* Removed joystick ball support.
* Removed thread names.
* Removed old thread messaging API (see Channels).
* Removed love.timer.getMicroTime.
* Updated functions which return love objects to re-use the Lua-side object instead of always recreating it.
* Updated the windows console, it now tries to re-use an active one first.
* Updated error handling, error handlers now get resolved when the error occurs.
* Updated order of sleep/present in love.run (now draws, *then* sleeps).
* Updated love.filesystem to try to create the appdata directory if it doesn't exist yet.
* Updated the default filesystem identity to omit file extension.
* Updated love.filesystem.newFile to optionally open the file.
* Updated most love.filesystem functions to return nil, error on internal failure.
* Updated love.keyboard.setKeyRepeat to take a boolean argument instead of numbers.
* Updated love.keypressed's second argument to be a boolean indicating key repeat.
* Updated keyboard key constants for some more modern keyboard keys.
* Updated window code to use adaptive vsync when available, if vsync is enabled.
* updated love.graphics.print's x and y arguments to default to 0.
* Updated the setFilter and setWrap methods, the second argument is now optional.
* Updated Font and ParticleSystem rendering code, now more performant.
* Updated SpriteBatch code, now more performant when adding/setting and (un)binding.
* Updated Canvas code to support more systems.
* Updated Canvas:getImageData and love.graphics.newScreenshot to be more efficient.
* Updated love.graphics.newScreenshot to create a fully opaque image by default.
* Updated error messages when sending bad values to Shaders.
* Updated love.graphics.newParticleSystem to have a default buffer size of 1000.
* Updated ImageData:setPixel to accept a table and default to 255 alpha.
* Updated ImageData:mapPixel, is now more efficient and accepts optional x,y,w,h arguments.
* Updated love.image memory handling, improves errors and thread-safety.
* Updated all love object constructors to optionally accept FileData if they accept a filename.
* Updated allocation for SoundData, it's more efficient and less wasteful.
* Updated SoundData:set/getSample to error for invalid samples.
* Updated Source:set* functions to default z to 0.
* Updated Source:seek to error for negative offsets.
* Updated Thread:start to accept arguments which get passed to the thread.
* Updated love.timer.getFPS to be microsecond-accurate.
* Updated love.timer.getTime to be microsecond-accurate and monotonic.
* Updated Box2D to version 2.3.0.
Downloads - also available on the home page.
- Windows installer: 32-bit, 64-bit
- Windows zip: 32-bit, 64-bit
- Mac OS X (10.6+): 64-bit
- Ubuntu 12.04+ PPA
- Linux source tarball
As usual, report any bugs you find (or feature requests) on the issue tracker on Bitbucket!