Zoom & Be - my new game


Hi guys, I’m Tim (Lampogolovii)

We’ve just released our game “Zoom & Be” on html5.

And I’d like to thank Defold-team and community! You all are breathtaking! (c, Keanu Reeves)
You helped me a lot!!!

Here you can find my thoughts about the engine and our plans about the game.

Our story
Previously we made several flash/unity3d games on different platforms. And now we decided to try html5. So, I’ve been looking for the engine, which can build to web (unity3d webgl isn’t allowed on portals nowadays). And, yeah – Defold has list with great html-5 games. So, we started to make a game with Defold.

The game
“Zoom & Be” is a puzzle platform game. You control two players at the same time. Play here

Yes, there are enemies/zombies on some levels:


Of course I had a lot of problems, while I was making the game.
Such as:

  • I can’t set the linear velocity to a physic body? How to make a proper jump in this case?
  • What? I can’t create physic shape on the fly? How to make solid tiled based level? (with no corners on each tile)
  • No RaycastAll methods, no runtime masks/groups changing e.t.c
  • So, there is no a lot of things, that I previously used to do…
    And yes – most of these things can be done by different approaches and tricks. Yay! Most of the problems are solvable! Thank this forum and the community!

There was a situation, like
Me: is there any way to pause a sound and then continue from the paused position?
Chat: hm… we’ll see… ok, done! Download the new Defold-engine – and now it is possible.
Me: whaa?! How does it work in your world? I shouldn’t wait till next year, when updated engine comes out?!

The future
Now we are working on the mobile version of the game.
Fit to all screen sizes, ads integration, virtual buttons and all this stuff. I’d like to praise the speed of the game loading on mobile. I barely see the splash-screen on iOS-platform. True magic! I hope to release the game in a month.
We have big plans on game updates. New levels, new graphics, new skills are coming.

Nintendo Switch
Also, I’m wondering – is it possible to build the game to Nintendo Switch platform?
We already have Nintendo Switch Dev Kit, and developer’s account.
So now what we need – possibility to make a build and polish the game in that way.
Is it in your roadmap or something?

A little bit more problems and my mistakes, that I experienced:

  • I made my own gui based on sprites – and run into limitation of 16 input listeners
  • You can’t use proxy sync-loading. Because of music interruptions and glitches while loading.
  • Rendering only z: -1 to 1 values. Wow! That was a surprise!
  • Limit on max count of sprites. Strange thing, that disabled sprites count too…
  • Can’t change position of physic body in one frame. I have to disable – change position – wait a frame – enable again.
  • Defold doesn’t have hotkeys editor. Can’t duplicate / delete lines, go to declaration and some other useful hotkeys.
  • Html5 build is still bigger, than I expected. Working on that.
  • After c# I used to type ; everywhere. I had a lot of problems with this in Defold/Lua.
  • go.prorerty(“”, “”);
    And local build works fine. But when I try to build to any target platform – and yes, build failed. From the error’s text it can’t be realized, that the problem is in ; at the end of the line.

Some of the Defold Great things:

  • Local build starts incredibly fast! Awesome work!
  • Mobile build is really small as possible! So now I have plenty of space to put extra resources to the game and I don’t worry about the size.
  • Time-scaled update. I implemented “pause”-button to the game in 5 minutes! Just one line with changing scale of time.
  • Easy to start! Month or two – and I could make working code and build my own game.
  • I really like the modular approach in Defold. I can cut off some libraries, that I don’t need. And I can add libraries, that I want (defos, analytics e.t.c)
  • …and a lot more!




Great! Please work with the Defold team to create a Nintendo Switch support, I think they all are very interested.
For physics - you can use my Box2D extension, which removes most of the limitations of the built-in physics.
Sprites and 16 input sources - you just have to have a single input manager and distribute all the inputs manually. I do it in my games with automatic z sorting so that clicks go to the top objects first.



Thank you so much for the amazing feedback and congratulation on a great new game!

Let’s talk! Send me an email: bjorn@defold.se

Edit: And please Get your game listed on www.defold.com!



Wow! Great! Where I can find the extension? Now I’m facing one of the most silly Box2D limitations - 16 groups/masks max. Is it possible to avoid this limitation somehow?

Yeah, I did something like that too… input manager, that sends messages to all listeners. I think such thing should be as a default extension :slight_smile:

Thank you for your advice! I will try to free up some time and submit the game. Thanks for your help!



You can find info on my Box2D extension in this thread - Box2D extension
It’s available via support on my Patreon page.

1 Like


That’s Box2D limitation, the same in my extension. However you can assign any values to the physics object’s table, for instance you can have a .custom_type field which would mark your collision groups and depending on these values you can disable happening collision events, resulting in objects not colliding.



In 1.2.170 Beta we have a fix for that (if I understand your request right):

Could you please take a look?



I’ve tested raycast with “all” flag.
Yes! It works correctly! Thanks for this feature!
Two minor things:

  1. When I use physics.raycast(st, en, groups, {all = false}); it returns list with raycasts anyway.
  2. As I tested, the list is sorted by fraction value all the time. (As I know Box2d does it in the same way by default algorithm). It should be documented, I think, because it’s very useful.

  1. Yes, if you pass a table, you’ll get the new return format, a list. (it’s mentioned in the documentation)
  2. Good idea, we’ll add it.


It’s not obvious for me from this explanation. It would be better as something like
“If options table isn’t nil, then result is a table too”.

Also: thank you!!! RaycastAll is very useful in many cases! You saved a lot of time for developers! Thanks!



I think the return value is pretty well explained:

result 	[table] It returns a list. If missed it returns nil. See ray_cast_response for details on the returned values.

Only thing missing is the comment about it being sorted w/respect to hit time.



but… it returns ray_cast_response if options == nil.
options == nil -> ray_cast_response
options ~= nil -> list of ray_cast_response
Am I right?



Your list is correct.
This is due to backwards compatibility.

That part is now deprecated. And it’s no longer part of the documentation.



oh! I see! I understand now! Thanks!