In Development: Dusk 1.0

I know, I know… It’s May 3rd and the engine still isn’t out. The engine is going very, very well, but I’ve had a couple of questions about the actual Corona-side plugin development and getting it to users for testing. As I mentioned, I’ve been in touch with Corona’s Brent, but the engineering side has yet to get back to me about the technical questions as of this post. I don’t want people to start feeling like this is vapourware - the coding is in excellent shape. I’m using it actively in my personal very-much-Dusk-intensive metroidvania, and it’s very stable so far. There have been a couple of delays in development since February when I announced this project, but overall it’s in good shape and is definitely getting released… at some point… I think.

Now for some cold hard facts about Dusk 1.0:

Firstly, as I think I’ve mentioned before, I actually rewrote the entire library nearly from scratch for better code practices, lower memory use, and better Lua OOP. This was actually a huge amount of work, but all the end user will see is: all the map and layer methods use colons. The overall result, however, is that the engine is lighter in memory footprint and maps load a tad faster.

Secondly, again as I’ve mentioned before, I’ve changed a lot of function names to line up more with Corona’s style. Most of these changes are either purely cosmetic (map:setTrackingLevel() -> map:setCameraTrackingLevel()), but a couple of them actually change the functionality a bit (the iterators, for example). Dusk’s core ideas and most semantics remain intact.

Thirdly, I’ve pushed quite a bit on being more “unobtrusively feature-filled”. Dusk now supports some more of Tiled’s minor features like the collision editor (alas, no animation editor yet) and now fully supports tile rotating and flipping. In addition to Tiled features, some of Dusk has been invisibly improved. For example, if you set a sprite tile’s (with “!isSprite!” property) frame to something, it will keep the frame you set when it’s erased and re-drawn rather than resetting to what Tiled originally displayed it as. There are a number of these minor features that I’ve implemented to improve Dusk’s general well-rounditude.

Lastly, documentation. Textual documentation is coming, but in the meantime I’m hard at work on a series of four- to five-minute-long screencasts demonstrating various features of Dusk and how to use them in your code. Examples of the topics I cover are the basics, Box2D physics and the collision editor, the camera system, general know-how like map structure and coordinate conversions, etc. If you have a topic you’d like me to add to this list, feel free to let me know and, if it feels like something everyone could benefit from, I’ll definitely do one on it.

Now that I’ve buttered everyone up with good news :D… let me add that I and my family are going to be on vacation until the 17th. We’ll be leaving on Friday. Hopefully this won’t be too big a deal for people. Again, the current version of Dusk is extremely stable and very feature-rich.

  • Caleb

Hey guys! Last call for beta testing! I have a number of people who’ve signed on, but I can always do with more. I’ll be releasing the first beta test version sometime next week for sure.

  • Caleb

Can I jump the beta boat?

Please add me to the beta if not too late, thanks.

I do look forward to test 1.0, but I am not sure why you decide to serve it as a plugin instead of putting it up at github, that way you can find as many testers as possible. 

@bitinn: I’m going the plugin route for several reasons. For one thing, plugins are easy to keep updated. Just require the plugin and you automatically get the most recent version. For another, I’ve been in contact with the Corona team, and we don’t know yet but Dusk may possibly get further integrated with Corona in the future. Turning Dusk into a plugin is the first step. Plugins are also very clean for developers. After you put your entry in the plugin registry, you don’t ever have to worry about the plugin again. The directory remains clean and you get your functionality invisibly, again along with automatic updates.

To clarify, Dusk  will remain on GitHub; nothing will change on that front (save the file structure). You’ll still technically be able to download the engine and use it that way. Also, bleeding-edge updates will be pushed to that front, so, if you want, you’ll be able to use the newest features by dropping the engine into your project. Each stable update will be pushed to the plugin version, thereby assuring anyone using the plugin that they’re using the most recent stable feature set.

I’m not doing an open beta with Dusk 1.0 because I’d rather be in personal contact with each tester. That way, I can get opinions on different features as well as bug reports directly and work through issues with people a scaled-down way. Publicly releasing Dusk 1.0 for beta as the comparatively untested engine that it currently is would have the potential to be overwhelming and could allow bugs or concerns to sneak by unknown.

@Everyone Else: Today or tomorrow will be the big day. For everyone who signed up for beta testing, start your testing engines! I’ll be sending a PM to each of you with a link to the engine, so watch your messenger.

  • Caleb

Hi @Caleb P

Just read info from blog, please count on me!

Hey all; this is just a quick update to let everyone know how testing is going. I sent the engine out to quite a few people, and they’ve been testing it for almost two weeks. There have been no real bugs yet; most of the issues people have had have been with transferring from previous versions to 1.0.

Textual documentation is still coming, but it may not be complete by the engine’s public release. I’ve been doing a serious code focus on my personal metroidvania and have made incredible progress in it, but that means other (icky) stuff like Dusk textual documentation hasn’t been developing quite as well (read: code is fun but docs are not). My video tutorial series is also in the works, though, and, though I don’t have a very good tutorial voice (There’s nothing like listening to a recording of yourself for building low self-esteem. Until I started this tutorial series, I didn’t even know I had a slight lisp or that I sound like I’m perpetually pursing my lips when I talk.), the series should be very helpful for beginning Dusk users.

  • Caleb

Wow, excellent news Caleb!!!

If you need any help to test or whatever, please count on me!

Please keep up your amazing job.

Best regards,

Erich.

Awesome Caleb!

I’m planning on using Dusk for a game I’m working on in my spare time.

Can’t wait to see what you have in store!

Sounds great, cant wait for this!

Since you ask, I would love for the support of isometric maps!

Cool stuffs, I have opened some feature requests on github.

https://github.com/GymbylCoding/Dusk-Engine/issues

PS: I am currently prototyping a few games with corona sdk and dusk :slight_smile:

We struggled a little bit with the object culling when we have animated tiles for example. So it would be great to have a good access to tile animations and the things happening to the sprites when they move outside of the screen and re-enter the screen. Normally it would make sense animations continue playing outside the visible screen area like in a real world.

What really would help is a good documentation with all possible things you can do in dusk :wink:

Tile rotation, just like in Tiled.

But I guess you already have that on the list for 1.0…


BTW in the FEATURES.md file you can read this:

Dusk Engine Feature List

- Flipped and rotated tiles

Even though rotated tiles are not currently supported

@runewinse:

Definitely on the list. Dusk has been through a number of iterations (some people here may even remember the two-person collaboration named CoronaTiled!), and in some of them rotated tiles were supported. Evidently they were accidentally left on the feature list. Sorry about that!

@Everyone Else:

I will be leaving for China tomorrow and will have very little (if any at all) forum and email access until I return in April. I won’t be able to answer any questions during that time, but Dusk will continue to be developed. Please bear with me here; it’s been pretty crazy lately. Thanks so much to everyone for your support!

  • Caleb

Caleb, do you have even the faintest idea about when Dusk 1.0 will be out?

Likely soon after I return from China, which would place it around the 10th of April or so. In the meantime, the current version of Dusk is very stable and has served many users well, so you can continue using it for now.

  • Caleb

Have a great time in China!

Some ideas for dusk:

  • It would be great to get some features regarding the “wrapping” of layers (maps). Like for example to do an endless runner, where the map is always repeated… BUT maybe with some input on the parts which are repeated, so it is not always the same returning sequence.

  • An we are using a lot of painted backgrounds in our game. We putting them in a background layer in TILED. And then using the parallax settings to move it with a foreground layer which is containing the tiles (32x32px). It would be great to have some “wrap” function for the background, so it isn’t “cut off” when moving to far. Right now we are fixing this in the code, but it would be great to have something in TILED to control how often a filled layer (with a big Background image) is repeated or something like that.

  • Some influence on the start frames of animated tiles would be great… like for example: you have two different sprite animations (animated tiles) and they should be in sync. Right now only each of them stays in sync with the same tile animations but not with a different one. This makes it impossible to create sprite animations which are in sync and span a bigger area than one tile.

  • Easy to build “Fog of war” tiles. This also needs Tiles (animated) which can “remember” their frame index when beeing culled, so when re-entering the screen they have the status as they left the screen.

  • Destroyable Tiles (sprites?). Like for example in “Shovel Knight”… Tiles which can be used to block the way, but can be destroyed. It can be done with objects, but having Tiles instead could be easier with map construction and physics. It would be nice to have something like this: player can hit a tile, then it gets damaged and with more hits more damaged, then finally it crumbles and is destroyed and not in the collision detection of this layers tiles anymore. AND this state is being remembered when the destroyed tile has left the screen is culled and re-enters the screen.

  • And of course ISO Tiles support :wink:

Thank you Caleb!

A warm welcome from a user based in China :slight_smile:

Thanks for fixing current 0.x build for my specific issue!

Hello, all! I’ll keep things short. You probably won’t believe it, but there’s a public version of Dusk 1.0 up on GitHub right now.

Full docs aren’t here yet, and the video tutorials aren’t complete by any means yet, but you’re welcome to get it and try it out. I’ve published it because I’ve kind of reached a plateau with 1.0’s development and my perfectionism (it’s gotta be completely perfect!) and I’m afraid 1.0 will never actually be published if I don’t publish it now.

The plugin format is coming soon; I’ve been in contact with Corona and it’s in the workings, I believe.

  • Caleb