Defold 1.10.3 BETA

Defold 1.10.3 BETA

Important notes

  • CHANGE TO SYS.SAVE() and SYS.LOAD() - When using sys.load() to read from a corrupt file or from a file which wasn’t created using sys.save() the engine would treat the file as using the legacy save file format from more than 11 years ago. This fallback to loading legacy format files would actually mostly result in engine crashes on corrupt files and cause more problems than it solved. The engine will now ignore such files and throw a Lua error.

Disclaimer

This is a BETA release, and it might have issues that could potentially be disruptive for you and your teams workflow. Use with caution. Use of source control for your projects is strongly recommended.

Access to the beta

Download the editor or bob.jar from GitHub: Release v1.10.3 - beta · defold/defold · GitHub

Summary

  • BREAKING CHANGE: (#10765) Fix crashes in sys.load() when trying to load corrupt files (by britzl)
  • NEW: (#10598) Make sure the viewport is scaled to fill the device display (by britzl)
  • NEW: (#10472) The textures that were set using go.set()/gui.set() for the GUI component are internally used as dynamic textures. (by AGulev)
  • NEW: (#7220) Added IsURL(), ToURL(), PushURL() and 2 variants of CheckURL() to dmsdk. (by Gert-Jan)
  • NEW: (#8304,#8304) Introduce code view context menu (by sprocketc)
  • NEW: (#10708) Adjusted default max time step of the engine to 1/30 of a second (by britzl)
  • FIX: (#10811) Make the browser performance timeline optional and default it to off (by smagnuso)
  • FIX: (#10671) Fix issue where profiler doesn’t work after reboot (by AGulev)
  • FIX: (#10691,#10690) Sanitize float values and escape strings for valid JSON output in scene graph dump (by deurell)
  • FIX: (#10174) Removed modifier from RTRIGGER on Linux (by britzl)
  • FIX: (#10796) Collision physics messages should be still sent when collision events are disabled in only one of the collision objects (by aglitchman)
  • FIX: (#10872) Fix false positive physics overflow warning logs when physics.max_collision/physics.max_contacts are set to 0 (by deurell)
  • FIX: (#10815) Fix sys.get_sys_info() returning junk system_version on web platform (by aglitchman)
  • FIX: (#7461) Fixed Android debug symbols for vanilla engine (by ekharkunov)
  • FIX: (#10650) Deduplicate resource data blobs in the ARCD archive. (by AGulev)
  • FIX: (#10846) Update GLFW gamepad functions for the latest version of Emscripten (by aglitchman)
  • FIX: (#10735) Improved gamepad detection on engine startup (by britzl)
  • FIX: (#10788) Moved GetCollectionByHash() to dmsdk. (by Gert-Jan)
  • FIX: (#10800) Moved PropertyContainerCreateFromLua() to dmsdk (by Gert-Jan)
  • FIX: (#10223) Fix crash in HTML5 build when using HTTP request with the progress flag ON (by AGulev)
  • FIX: (#10870) Fix example for resource.create_atlas() (by HalfstarDev)
  • FIX: (#10856) Improved gamepad connect handling (by britzl)
  • FIX: (#10832) Display tile attributes error on scene (by sprocketc)
  • FIX: (#10829) Fixed issue where drag handle interrupted the Tab key from moving to the next field (by AGulev)
  • FIX: (#10670) Fix issue where rebuilding the game from the Editor doesn’t keep the simulated resolution (by AGulev)
  • FIX: (#10770,#8815,#10595) Fix StackOverflow issue when pasting a too long string in the Editor (by AGulev)
  • FIX: (#10790) Edit GUI particlefx resources using editor scripts (by vlaaad)
  • FIX: (#10733) Edit collision shapes using editor scripts (by vlaaad)
  • FIX: (#10774) Edit GUI layers using editor scripts (by vlaaad)
  • FIX: (#10810) Edit GUI layouts using editor scripts (by vlaaad)
  • FIX: (#10801) Edit GUI fonts using editor scripts (by vlaaad)
  • FIX: (#10822) Add collections and game objects to root on drop (by sprocketc)
  • FIX: (#10858) Edit GUI nodes using editor scripts (by vlaaad)

Engine

BREAKING CHANGE: (#10765) ‘Fix crashes in sys.load() when trying to load corrupt files’ by britzl
When using sys.load() to read from a corrupt file or from a file which wasn’t created using sys.save() the engine would treat the file as using the legacy save file format from more than 11 years ago. This fallback to loading legacy format files would actually mostly result in engine crashes on corrupt files and cause more problems than it solved. The engine will now ignore such files and throw a Lua error.

NEW: (#10598) ‘Make sure the viewport is scaled to fill the device display’ by britzl
Added viewport-fit=cover to the viewport meta tag in index.html for web builds. This setting will make sure the viewport is scaled to fill the device display, even when the device has a camera notch or similar.

:warning: Keep in mind that not all device displays are rectangular. A display may have a notch, hole or rounded corners. Ensure that important content doesn’t end up outside the display.

NEW: (#10472) ‘The textures that were set using go.set()/gui.set() for the GUI component are internally used as dynamic textures.’ by AGulev
Now, all the textures that were set to a GUI component from outside are internally considered dynamic GUI textures in the engine.

:warning: Pay attention: if you set textures into the GUI this way, you may need to increase Max Dynamic Textures (default is 128) in the GUI component.

NEW: (#7220) ‘Added IsURL(), ToURL(), PushURL() and 2 variants of CheckURL() to dmsdk.’ by Gert-Jan
Allows native extensions to have better control over URLs in the lua state.

FIX: (#10811) ‘Make the browser performance timeline optional and default it to off’ by smagnuso
In game one can enable the performance timeline if desired

FIX: (#10671) ‘Fix issue where profiler doesn’t work after reboot’ by AGulev
Make sure that the profiler shows the correct scope and property names after the engine reboot.

FIX: (#10691,#10690) ‘Sanitize float values and escape strings for valid JSON output in scene graph dump’ by deurell
Fix for non-finite floats and unescaped strings generating invalid JSON output in scene graph dumps.

FIX: (#10174) ‘Removed modifier from RTRIGGER on Linux’ by britzl
Tentative fix for broken RTRIGGER mapping on Linux since upgrade to GLFW3. Removed GAMEPAD_MODIFIER_NEGATE.

FIX: (#10796) ‘Collision physics messages should be still sent when collision events are disabled in only one of the collision objects’ by aglitchman
Fixed a bug where disabling Generate Collision Events or Generate Contact Events in a collision object could cause collision physics messages to stop being sent in 3D physics for objects where this was not disabled.

FIX: (#10872) ‘Fix false positive physics overflow warning logs when physics.max_collision/physics.max_contacts are set to 0’ by deurell
Fix false positive physics overflow warning logs when physics.max_collision/physics.max_contacts are set to 0

FIX: (#10815) ‘Fix sys.get_sys_info() returning junk system_version on web platform’ by aglitchman
The sys.get_sys_info() function may have returned junk in the system_version field for the web platform because it used an uninitialised structure as a source of data.

FIX: (#7461) ‘Fixed Android debug symbols for vanilla engine’ by ekharkunov
Fixed vanilla engine symbols downloading for Android. Added linker flag to generate build uuid for Android

FIX: (#10650) ‘Deduplicate resource data blobs in the ARCD archive.’ by AGulev
Fixes issue where two identical resources would be written into the arcd archive because they have different paths in the project.
From now on, only one data blob will be written into the archive, and all duplicates will reference this single data blob from the manifest (and arci) file.

All the duplicates are still shown in the build report but with a size of 0.
Also, the compressed size in the build report now includes alignment paddings for each file, which makes the arcd archive size equal to the total bytes shown in the report.

FIX: (#10846) ‘Update GLFW gamepad functions for the latest version of Emscripten’ by aglitchman
The gamepad code has been updated in GLFW for web for the latest version of Emscripten.

FIX: (#10735) ‘Improved gamepad detection on engine startup’ by britzl
The engine may crash on startup on windows (possibly also Linux) when detecting connected gamepads.

FIX: (#10788) ‘Moved GetCollectionByHash() to dmsdk.’ by Gert-Jan
Moved GetCollectionByHash() to dmsdk to allow for URLs to be turned into HCollection/HInstance/HComponent.

FIX: (#10800) ‘Moved PropertyContainerCreateFromLua() to dmsdk’ by Gert-Jan
Added dmScript:: PropertyContainerCreateFromLua() to dmsdk/gameobject/script.h

FIX: (#10223) ‘Fix crash in HTML5 build when using HTTP request with the progress flag ON’ by AGulev
Fixed a crash that happened only in the HTML5 build when an HTTP request was used with { report_progress = true }.

FIX: (#10870) ‘Fix example for resource.create_atlas()’ by HalfstarDev

FIX: (#10856) ‘Improved gamepad connect handling’ by britzl
If the engine fails to get the name of a connected gamepad a default name will be used to avoid a crash on Windows.

Editor

NEW: (#8304,#8304) ‘Introduce code view context menu’ by sprocketc
Screenshot From 2025-06-02 18-49-18

NEW: (#10708) ‘Adjusted default max time step of the engine to 1/30 of a second’ by britzl
The default value for max time step was set to 0.5 seconds. Under normal use the engine will have a much lower time step and very rarely exceed 0.5 seconds, but when the game returns from an iconified state it is almost guaranteed to happen. The problem when this happens is that a value of 0.5 will be much too high and have a negative impact on physics simulations and other calculations where a lower time step is expected. This change sets the default value to 0.03333 seconds (ie 30 frames per second).

FIX: (#10832) ‘Display tile attributes error on scene’ by sprocketc
Display tile attributes error on the scene view, instead of throwing an exception.

FIX: (#10829) ‘Fixed issue where drag handle interrupted the Tab key from moving to the next field’ by AGulev

FIX: (#10670) ‘Fix issue where rebuilding the game from the Editor doesn’t keep the simulated resolution’ by AGulev
If the window resolution has been set in the Editor, it will be applied again when the engine is restarted from the Editor using Build To Target.

FIX: (#10770,#8815,#10595) ‘Fix StackOverflow issue when pasting a too long string in the Editor’ by AGulev

FIX: (#10790) ‘Edit GUI particlefx resources using editor scripts’ by vlaaad
Now it’s possible to edit particlefx resources in the GUI using editor scripts, e.g.:

editor.transact({
    editor.tx.add("/main.gui", "particlefxs", {
        particlefx = "/confetti.particlefx"
    })
})

FIX: (#10733) ‘Edit collision shapes using editor scripts’ by vlaaad
It is now possible to edit collision shapes using editor scripts! To support this, we added new "shapes" node list property to collision objects. For example, adding a new shape is done like this:

editor.transact({
    editor.tx.add("/hero.collisionobject", "shapes", {
        type = "shape-type-box" -- or "shape-type-sphere", "shape-type-capsule"
    })
})

To create a new collision shape, it is necessary to specify the type of the shape. The available types are:

  • shape-type-box - box shape with dimensions property
  • shape-type-sphere - sphere shape with diameter property
  • shape-type-capsule - capsule shape with diameter and height properties

FIX: (#10774) ‘Edit GUI layers using editor scripts’ by vlaaad
Now it’s possible to edit GUI layers using editor scripts, e.g.:

editor.transact({
    editor.tx.add("/main.gui", "layers", {name = "foreground"}),
    editor.tx.add("/main.gui", "layers", {name = "background"})
})

Additionally, it’s possible to reorder layers:

local fg, bg = table.unpack(editor.get("/main.gui", "layers"))
editor.transact({
    editor.tx.reorder("/main.gui", "layers", {bg, fg})
})

FIX: (#10810) ‘Edit GUI layouts using editor scripts’ by vlaaad
Now you can edit a list of GUI layouts using editor scripts, e.g.:

editor.transact({
    editor.tx.add("/main.gui", layouts, {name = "Landscape"}),
    editor.tx.add("/main.gui", layouts, {name = "Portrait"})
})

FIX: (#10801) ‘Edit GUI fonts using editor scripts’ by vlaaad
You can now edit GUI fonts using editor scripts, e.g.:

editor.transact({
    editor.tx.add("/main.gui", "fonts", {
        name = "font",
        font = "/main.font"
    })
})

FIX: (#10822) ‘Add collections and game objects to root on drop’ by sprocketc

FIX: (#10858) ‘Edit GUI nodes using editor scripts’ by vlaaad
Now you can edit GUI nodes using editor scripts, e.g.:

editor.transact({
    editor.tx.add("/main.gui", "nodes", {
        type = "gui-node-type-box",
        position = {20, 20, 20}
    }),
    editor.tx.add("/main.gui", "nodes", {
        type = "gui-node-type-template",
        template = "/button.gui"
    }),
})

If the GUI file defines layouts, you can get and set the values from layouts using layout:property syntax, e.g.:

local node = editor.get("/main.gui", "nodes")[1]

-- GET:
local position = editor.get(node, "position")
pprint(position) -- {20, 20, 20}
local landscape_position = editor.get(node, "Landscape:position")
pprint(landscape_position) -- {20, 20, 20}

-- SET:
editor.transact({
    editor.tx.set(node, "Landscape:position", {30, 30, 30})
})
pprint(editor.get(node, "Landscape:position")) -- {30, 30, 30}

Layout properties that were set can be reset to their default values using editor.tx.reset:

print(editor.can_reset(node, "Landscape:position")) -- true
editor.transact({
    editor.tx.reset(node, "Landscape:position")
})

Template nodes can be read, but not edited: you can only set the properties of the template node tree:

local template = editor.get("/main.gui", "nodes")[2]
print(editor.can_add(template, "nodes")) -- false
local node_in_template = editor.get(template, "nodes")[1]
editor.transact({
    editor.tx.set(node_in_template, "text", "Button text")
})
print(editor.can_reset(node_in_template, "text")) -- true (overrides a value in the template)
17 Likes


The error appeared on its own. It appears every time I try to write any character in the code. After restarting the engine, it disappeared. System: Mac OS.

This is my fault while messing with the annotations. I will look into a fix asap.

1 Like

There’s a new build on it’s way. Sorry about that!

2 Likes

Quick question: what max_time_step would you guys suggest for a fixed_update_frequency of 120, or perhaps even 240 or 360? Those are not high numbers in the context of some physics simulations.

I settled on 0.025 for 120 FPS, but haven’t tried anything with it because I’m writing a render script from scratch at the moment.

For a perfect simulation I guess 1/120 = 0.0083 would be the best number.

If it is 1/30 for 60FPS, maybe it should be 1/60 for 120FPS

To see how it works and why you don’t need to set it to 1/120 etc, set your external display to a frequency of 30 or 60 Hz, i.e. assume that this is what your audience will have, and play around with this setting. (Of course, your game should have some animation on the screen to see the difference.)

PS 1/30 is the best option, from my view.

If you want a stable dynamic physics simulation, it makes sense that the value matches your fixed update rate.

If the game is set to 60fps and your minimum time step is 1/30fps, for example, your risk tunneling when the physics simulation update frequency drops to 1/30. This would happen when the game is minimised and reactivated, for instance, leading to an unstable simulation (ie. the player falling through the floor).

1 Like

Okay, thanks to @totebo’s point I understand/remember how I should choose the value now.

But the original question mentions fixed_update_frequency, which means that a fixed time step is used for physics.
The max engine time step value does not affect fixed update at all.

1 Like

Neither max_fixed_timesteps nor max_time_step mean anything if use_fixed_timestep is true? I don’t remember seeing a hint of that in the docs.

Fixed just means fixed, so the engine slows down when the framerate gets low?

This makes sense, but in my game I don’t see this behaviour. I created a new post about it here!

3 Likes

I appreciate someone else taking a look into this, because this particular aspect of physics in gamedev is a bit confusing to me.