Defold 1.3.7 has been released

Defold 1.3.7

Breaking change

The .animationset file format now requires you to select a skeleton.
This allows us to keep all our internal bone indices optimized.

:warning: Note that if you save your files with this editor version, it won’t open in an older editor. It is a single line change in the format though, so it’s easy to revert any changed files.

More details are found below.

Release notes

Summary

  • NEW: (#3380) Speed up Lua debugger
  • NEW: (#3855) Track recent files and allow opening them
  • NEW: (#6408) Improve build progress reporting
  • FIX: (#7025) Fix issue when bundling for iOS without any native extensions
  • FIX: (#6996) Add support for setting / getting mouse lock state
  • FIX: (#6928) Slice9 support for sprites
  • FIX: (#6859) Added support for glTF models+animations
  • FIX: (#6967) Added SteamDeck controller config
  • FIX: (#6999) Frustum culling for labels
  • FIX: (#7011) Json encode API function
  • FIX: (#6201) Fix issue with mouse wheel events in HTML5 builds
  • FIX: (#7001) Add interaction listener to html5 namespace
  • FIX: (#7005) Fix json parsing load times for large files
  • FIX: (#6960) Cursor locked to corner of window for high-dpi screens
  • FIX: (#6942) Added spin lock to LogInternal for securing the custom log hook
  • FIX: (#6749) Remove dependency on MS Visual C++ Redistributable Packages for oggz-validate tool
  • FIX: (#6968) Reset state from renderobject
  • FIX: (#6696) Don’t suggest images already in the atlas
  • FIX: (#6689) Bind Shift+Enter to find prev term in console

Engine

FIX: (#7025) Fix issue when bundling for iOS without any native extensions

Details

A recent improvement to the Info.plist merge process for native extensions had the unfortunate side-effect that builds without any native extensions failed to install due to strict checks of the Info.plist. This fix solves this issue by removing the merge attribute definition from the Inof.plist file if it still exists when bundling (which it does if bundling without native extensions).


FIX: (#6996) Add support for setting / getting mouse lock state

Details

Added mouse locking functionality on desktop and web platforms. This is done by using two new API functions:

-- set the mouse locking state
window.set_mouse_lock(true|false)
-- get the currently set mouse locking state
local mouse_lock = window.get_mouse_lock()

Note that for web platforms, you cannot request mouse lock outside of “user interactions”, so to get that to work you can use the html5.set_interaction_listener(callback) function to request the mouse lock for web platforms.


FIX: (#6928) Slice9 support for sprites

Details

Added slice-9 support for sprites. Slice-9 splits up the area of the sprite in at most 9 separate regions to proportionally scale an image (see Slice-9 for an example).

Three new fields has been added:

  • Size mode - auto or manual. “Auto” will use the size from the current animation to produce vertices, “Manual” will use the “size” property to set the size of the sprite. This can be set from scripts as usual by using go.set.
  • size - vec3 with size properties
  • slice 9 - vec4 with Left, Top, Right, Bottom offsets for the slices. Units in pixels

FIX: (#6859) Added support for glTF models+animations

Details

In this update, we’ve added support for glTF format.

Notes:

  • We support both .glb and .gltf formats.
  • We currently only export max one skeleton per file
  • It supports skinning and animating meshes.
  • It now supports multiple meshes per model
  • Currently still uses one material for all meshes in a model
  • Currently still only support world space vertices for skinned models
  • Each file should still only contain one animation
  • Added support for tangent space uv’s

We don’t support:

  • multifile glTF files (i.e. no external buffers!)
  • embedded textures (we have our own way of handling textures)

Breaking change :warning:

The .animationset file format now requires you to select a skeleton.
This allows us to keep all our internal bone indices optimized.

:warning: Note that if you save your files with this editor version, it won’t open in an older editor. It is a single line change in the format though, so it’s easy to revert any changed files.


FIX: (#6967) Added SteamDeck controller config

Details

FIX: (#6999) Frustum culling for labels

Details

Adds support for frustum culling for label components.


FIX: (#7011) Json encode API function

Details

Added a new function to the json namespace json.encode(tbl) that can be used to generate a json formatted string from a lua table:

local json_str = json.encode({"test", test_tbl = { 1, 2, 3}})
pprint(json_str) -- prints {"1":"test","test_tbl":[1,2,3]}

FIX: (#6201) Fix issue with mouse wheel events in HTML5 builds

Details

Capturing mouse wheel events in HTML5 builds generated errors in the browser console. This fix ensures that mouse wheel events no longer generate errors.


FIX: (#7001) Add interaction listener to html5 namespace

Details

Added a new function for setting an interaction listener on web platforms:

html5.set_interaction_listener(callback)

If the callback is set, the callback will be invoked when a user clicks, touches or types in the browser.


FIX: (#7005) Fix json parsing load times for large files

Details

This fixes loading of large json files. A file that previously would take minutes now takes a second.


FIX: (#6960) Cursor locked to corner of window for high-dpi screens

Details

This fixes an issue when using mouse lock on a high dpi screen. The pointer became locked to the top right corner of the screen which made mouse movement unreliable.


FIX: (#6942) Added spin lock to LogInternal for securing the custom log hook

Details

FIX: (#6749) Remove dependency on MS Visual C++ Redistributable Packages for oggz-validate tool

Details

This fix replaces oggz.dll with dependency on MS Visual C++ Redistributable Packages with dll without such a dependency.


FIX: (#6968) Reset state from renderobject

Details

Design: Render state tracking - Google Docs

This PR adds:

  • All graphics adapters use the pipeline struct representing the current draw state
  • Render lists reset their state based on previous set values in the graphics module
  • Engine tests

Editor

NEW: (#3380) Speed up Lua debugger

Details

Speed up the Lua debugger in places where developer doesn’t have any breakpoints.


NEW: (#3855) Track recent files and allow opening them

Details

User-facing changes:

User now can press Cmd+Shift+T (macOS) / Ctrl+Shift+T (Windows and Linux) to reopen previously closed tabs. File menu now has a new submenu — Recent Files — that allows selecting a recently accessed file to open/focus on. Also, editor now has Recent Files dialog that allows searching from a larger list of recent files, available using Ctrl+R (macOS) / Alt+R (Windows and Linux) shortcuts.


NEW: (#6408) Improve build progress reporting

Details

User-facing changes:

  1. All build engine errors are now shown in the Build Errors view. Previously, some exceptions that occurred during engine build process were silently ignored.
  2. Files with invalid content are properly displayed in the Build Errors view. Previously, invalid files were displayed as “Unknown source” instead of a file path.
  3. Verbose bob log is now shown when bundling in the console view.

FIX: (#6696) Don’t suggest images already in the atlas

Details

User-facing changes:
When adding images to atlas, images that are already there are no longer suggested since it’s an error to add duplicate images to atlas (but not to an animation).


FIX: (#6689) Bind Shift+Enter to find prev term in console

Details
30 Likes

Slice9 - groovy!

7 Likes

Super!

4 Likes

:fire::fire::fire::fire::fire:

:crown:

4 Likes

After update from 1.3.6 to 1.3.7

ERROR:GAMESYS: 'game_scene:/player/model#model' has no animation named 'model1_idle'

After set skeleton in animation set, all worked.

We need to set same skeleton in 2 places?
1)In model?
2)In animation set?


1 Like

Setting it in the animation set ansures we use the same bone indives at run time.

As we already set the skeleton in the model, I didn’t remove it since it will make sense to set it per model later on when we support animation targeting.

4 Likes

Hello, that update looks neat but I have a big problem with the Rive native extension.

This happens when I bundle


I tried to uncheck the armv7 box but it doesn’t do anything, the engine still wants to bundle one.

So when I went to the Rive extension Github I understood it was a version problem given the name of this commit below, but at the same time why is it “1.3.8” ?


Re-downloaded everything and the problem persists.

Unfortunately I cannot rollback anymore because I saved my project under 1.3.7.
So I’m a little blocked right now I don’t see any way I can bundle my app

1 Like

Not sure. Let’s check with @Mathias_Westerdahl

2 Likes

Yes, I updated the main branch of that extension in anticipation of our nextr Defold release.

This is a good example of why we recommend our users to specify a specific version of any extension. (The developers need the freedom to move the main code base forward).

Try this version instead:

2 Likes

Alright everything works fine now! Thank you for linking me the right version, I initially went too far back in time :sweat_smile:

1 Like

Get error when try make bundle.
With bob or with editor.

bob.jar version: 1.3.7  sha1: f0ad06a2f1fbf0e9cbddbf96162a75bc006d84bb  built: 2022-10-17 15:10:26

Buiild from editor worked.

C:\Users\user\defold\defold-jam-2022>java -jar bob/bob.jar --settings bob/settings/dev_game.project_settings --archive  --texture-compression true --with-symbols --variant debug --platform=js-web --bo bob/releases/dev/web -brhtml bob/releases/dev/web/report.html clean resolve build bundle
Download archive(s)Downloading 4 archive(s)
 0: Downloading https://github.com/AGulev/jstodef/archive/1.4.0.zip
 0: Status 304: Already cached
 2147483647% 1: Downloading https://github.com/DanEngelbrecht/LuaScriptInstance/archive/master.zip
 1: Status 304: Already cached
 2: Downloading https://github.com/britzl/defold-lfs/archive/master.zip
 2: Status 304: Already cached
 3: Downloading https://github.com/britzl/ludobits/archive/refs/tags/7.1.0.zip
 3: Status 304: Already cached
Working...Reading classes... 1% ...done!
Cleaning... ...done!
Build Remote Engine...
Building engine... ...done!
2147483647% ...done!
Building... 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99%
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:400)
        at com.dynamo.bob.pipeline.GameProjectBuilder.build(GameProjectBuilder.java:538)
        at com.dynamo.bob.Project.runTasks(Project.java:1428)
        at com.dynamo.bob.Project.doBuild(Project.java:1215)
        at com.dynamo.bob.Project.build(Project.java:634)
        at com.dynamo.bob.Bob.mainInternal(Bob.java:810)
        at com.dynamo.bob.Bob.main(Bob.java:876)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:260)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 7 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:260)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 10 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 13 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:260)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 15 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:260)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 18 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 21 more
Caused by: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:304)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:266)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:300)
        ... 23 more
Caused by: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id
        at com.google.protobuf.AbstractMessage$Builder.newUninitializedMessageException(AbstractMessage.java:475)
        at com.dynamo.rig.proto.Rig$MeshSet$Builder.build(Unknown Source)
        at com.dynamo.rig.proto.Rig$MeshSet$Builder.build(Unknown Source)
        at com.dynamo.bob.pipeline.GameProjectBuilder.findResources(GameProjectBuilder.java:299)
        ... 25 more
 ...done!
 100% ...done!

The build failed for the following reasons:
ERROR game.project:0 java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id

Warning: Failed to clean up temp directory 'C:\Users\user\AppData\Local\Temp\589442445922314760'

1 Like

I’m guessing there’s a file that isn’t working as expected.
Would it be possible to share the project with me?

I get the same error when trying to build a build in the editor:

/game.project
      java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.google.protobuf.UninitializedMessageException: Message missing required fields: models[0].local, models[0].id, models[1].local, models[1].id, models[2].local, models[2].id

How to reproduce = use 1.3.7 + DAE files with animations.

2 Likes

if build html 5 then i get in console

Initialising resource cache with local cache dir 'null' and remote 'null'

Engine build took 1.055000 s
PluginScanner searching com.dynamo.bob.pipeline for base class class com.dynamo.bob.pipeline.LuaBuilderPlugin
Compiling asset/robot/top_weapon/1.tilesource using profile Default
Compiling asset/robot/body/8.tilesource using profile Default`Preformatted text`

it wasn’t like this before

Those are debug messages, that are enabled when you are using “-v” with bob.jar.

@ainonovo is the build not working for you or are you only concerned about the verbose logging?

For the bundling issue, I’ve created a ticket here, and a fix is coming.

any build work normal

no i run from menu in win 7

i clean install, before i work my project in 1.3.4 engine

Initialising resource cache with local cache dir 'null' and remote 'null'

Engine build took 1.055000 s
PluginScanner searching com.dynamo.bob.pipeline for base class class com.dynamo.bob.pipeline.LuaBuilderPlugin
Compiling asset/robot/top_weapon/1.tilesource using profile Default
Compiling asset/robot/body/8.tilesource using profile Default
Compiling asset/robot/module/5.tilesource using profile Default
Compiling asset/robot/module/3.tilesource using profile Default
Compiling asset/robot/body/6.tilesource using profile Default
Compiling asset/robot/special/4.tilesource using profile Default
Compiling asset/robot/top_weapon/3.tilesource using profile Default
Compiling asset/robot/body/1.tilesource using profile Default
Compiling asset/robot/bottom_weapon/1.tilesource using profile Default
Compiling asset/robot/body/4.tilesource using profile Default
Compiling asset/robot/module/2.tilesource using profile Default
Compiling workshop/asset/tilesource_bottom_weapon.tilesource using profile Default
Compiling asset/robot/special/3.tilesource using profile Default
Compiling asset/robot/top_weapon/5.tilesource using profile Default
Compiling asset/robot/body/9.tilesource using profile Default
Compiling asset/robot/special/1.tilesource using profile Default
Compiling workshop/asset/tilesource_body.tilesource using profile Default
Compiling workshop/asset/tilesource_top_weapon.tilesource using profile Default
Compiling builtins/graphics/particle_blob.tilesource using profile Default
Compiling workshop/asset/tilesource_special.tilesource using profile Default
Compiling asset/robot/bottom_weapon/2.tilesource using profile Default
Compiling asset/robot/top_weapon/2.tilesource using profile Default
Compiling battle/menu/control/asset/control.tilesource using profile Default
Compiling asset/robot/body/2.tilesource using profile Default
Compiling asset/robot/module/4.tilesource using profile Default
Compiling asset/robot/body/7.tilesource using profile Default
Compiling dirtylarry/dirtylarry.atlas using profile Default
Compiling workshop/asset/tilesource_module.tilesource using profile Default
Compiling asset/robot/module/1.tilesource using profile Default
Compiling asset/robot/top_weapon/4.tilesource using profile Default
Compiling asset/robot/special/2.tilesource using profile Default
Compiling asset/robot/body/5.tilesource using profile Default
Compiling asset/robot/body/3.tilesource using profile Default
Compiling asset/robot/bottom_weapon/3.tilesource using profile Default
Compiling workshop/asset/workshop_default.tilesource using profile Default
Compiling asset/robot/top_weapon/6.tilesource using profile Default
Compiling asset/robot/module/6.tilesource using profile Default
GameProjectBuilder.createArchive
PluginScanner searching com.dynamo.bob.archive for base class class com.dynamo.bob.archive.ResourceEncryptionPlugin
GameProjectBuilder.createArchive took 5.831000
buildManifestData begin
ManifestBuilder.buildManifestData took 0.046000

i do not change any settings