⇠ More posts

Defold release 1.3.5

By Björn Ritzl on Jul 19, 2022

Tagged as: Release notes


NEW: (#5265) Added option to instantly clear spawned particles when stopping particlefx When particlefx.stop() is called all emitters immediately stop spawning new particles but already spawned particles will continue to live until they reach their end of life. Clearing/removing already spawned particles is only possible by either unloading the collection the particles belong to or by setting the tint alpha in the particlefx material to 0.0.

To give developers a better alternative to clearing spawned particles It is now possible to specify this when the particle effect is stopped:

particlefx.stop(url, { clear = true })
gui.stop_particlefx(node, { clear = true })

NEW: (#3232) New properties for nodes : enabled and visible New properties for GUI nodes: enabled and visible.

enabled is a property that toggles a node tree. This value was available in the runtime using gui.is_enabled() and gui.set_enabled() and now it’s avaliable from the editor as well.

visible is a property that toggles rendering for a node. This option may be useful when a node should be used for anchoring or as a click zone, but shouldn’t affect rendering at all. New methods added for work with the property: gui.get_visible() and gui.set_visible().

NEW: (#6628) Add support for drawing to multiple render targets Many graphical effects (e.g Many-light pipelines / deferred rendering, ssao, temporal antialiasing) operate on several components of a frame such as position, normals and albedo color. These are usually generated by drawing the scene once into several render targets that can be used in other parts of the rendering pipeline.

MRT is available from OpenGL 3 / ES3 / WebGL2 (and baseline vulkan) and support is now available in the Defold render.* API when creating a new render target:

function init(self)
    -- render target buffer parameters
    local color_params_rgba = { format = render.FORMAT_RGBA,
                                width = render.get_window_width(),
                                height = render.get_window_height(),
                                min_filter = render.FILTER_LINEAR,
                                mag_filter = render.FILTER_LINEAR,
                                u_wrap = render.WRAP_CLAMP_TO_EDGE,
                                v_wrap = render.WRAP_CLAMP_TO_EDGE }
    local color_params_float = { format = render.FORMAT_RG32F,
                           width = render.get_window_width(),
                           height = render.get_window_height(),
                           min_filter = render.FILTER_LINEAR,
                           mag_filter = render.FILTER_LINEAR,
                           u_wrap = render.WRAP_CLAMP_TO_EDGE,
                           v_wrap = render.WRAP_CLAMP_TO_EDGE }

    -- Create a render target with three color attachments
    -- Note: No depth buffer is attached here
    self.my_render_target = render.render_target({
           [render.BUFFER_COLOR0_BIT] = color_params_rgba,
           [render.BUFFER_COLOR1_BIT] = color_params_rgba,
           [render.BUFFER_COLOR2_BIT] = color_params_float, })

function update(self, dt)
    -- enable target so all drawing is done to it
    -- draw a predicate to the render target

NEW: (#6488) Sign iOS app extensions while preserving entitlements An App Extension lets you extend custom functionality and content beyond your app and make it available to users while they’re interacting with other apps or the system. Examples are app specific stickers in iMessage or extensions to the sharing dialog.

App Extensions must be included in the PlugIns folder and they must be signed. It is easy to include extensions in a PlugIns folder by adding the PlugIns folder as a bundle resource to be included in the application bundle.

This change automatically signs any files in PlugIns with the .appex file extension when the application is bundled while at the same time preserving the app extension entitlements.

FIX: (#6767) Updated to LZ4 1.9.4 (63df16d) Updated internal LZ4 compression to 1.9.4. The update LZ4 implementation results in faster decompression compare to old versions.

FIX: (#5454) Migrate build system to python3 The Defold build system has been migrated from Python 2 to Python 3.

FIX: (#6757) Added collectionproxy.get_resources() Returns a list of all the resources that the collection proxy is dependent on:

   local resources = collectionproxy.get_resources(proxy_url)
   for _, v in ipairs(resources) do
       print("Resource: " .. v)

This functionality will later be used for removing old live update content from disk.

FIX: (#6766) Make sure game.arcd isn’t compressed in apk/aab Keep the main resource archive game.arcd in the Android bundle uncompressed to prevent unnecessary memory allocations in runtime.

FIX: (#6742) Exclude unnecessary information from html build report. Exclude game.project information and build options related to authorisation from the generated build report.

FIX: #6788 GUI text doesn’t render if render script has previously early-outed This fixes an issue with text not always rendering when skipping a frame, for instance during an early out in the render script.

FIX: #6816 Fix issue when engine can’t play more than 32 sounds simultaneously Use sound.max_sound_instances as maximum count of simultaneously played sounds.


NEW: (#6269) Read authentication token for dependencies from system environment When using project dependencies hosted in private repositories on GitHub or behind basic authentication on a private server the authentication token has to be part of the userinfo portion of the URL:


This is not recommended as it may result in developers accidentally leaking their access token when sharing a list of their dependencies in a support ticket or in the Defold forum.

To avoid this it is now also possible to store the authentication token in a system environment variable and let Defold read this when resolving dependencies. Defold will inspect the dependency URLs and replace any userinfo password field starting and ending with __ (two underscore characters) with the value from the system variable specified by the string enclosed within the __ prefix and suffix:


In the above URL the __MY_GITHUB_TOKEN__ will be replaced by the value of the system variable MY_GITHUB_TOKEN.

FIX: (#6666) Ignore empty lines in .defignore

FIX: (#6400) Report defignored files as non-existent Additionally, this changeset makes the editor sync resources after save if .defignore file was modified.

FIX: (#6753) Improve editor behavior with legacy Spine projects

  • Prevent legacy Spine projects from corrupting Gui scenes with Spine data unless extension-spine has been added as a dependency.
  • Improve error message if a Collection, Game Object, or Gui contains embedded data that is not understood by the editor. The message now includes a common-cause solution (e.g. “Could the project be missing a required extension?”).

FIX: (#6732) [DEFEDIT] Safeguard against IOExceptions when generating convex hulls

  • IOExceptions were not being caught correctly for image reads associated with .atlas and .tilesource files.
  • Removed unnecessary image reads when Sprite Trimming is disabled.

CHANGE: (#6760) Redesign game.project form #6760 This changeset alters the UI of forms that requested navigation (currently only game.project form) in a following way:

  • the form shows sections UI organized in groups;
  • the form shows at most one section at a time.