In Development: Dusk 1.0

If you’re a fairly active Dusk user, you might have noticed that very little has been pushed to the Dusk repository lately. Though this seems like inactivity, the truth is that I’ve been hard at work on Dusk. Dusk has been around for quite a while, but (believe it or not!) it’s not even out of beta. I recently decided it was time to push for the 1.0 release. Thus, in my personal project, I completely overhauled Dusk for improved stability and usability. This version of Dusk, which has been several months in the making, is my first candidate for Dusk 1.0!

Dusk 1.0 is a completely remade version of Dusk which retains most of the current Dusk mechanisms but which isn’t completely backwards-compatible. That said, it’s definitely a big improvement and worth switching to when it’s released. It has a much smaller memory footprint, is cleaner for development, and will be the new base for all further advancement.

Dusk 1.0 isn’t ready for the public yet. Why am I posting about it, then? I need your input. I have a list of features and improvements I’ve seen multiple people ask for (API docs, anyone?), but if you have something you really want in Dusk, now is the time to ask for it. Dusk is used by a lot of people, but developed by only me. What fits really well in the engine for me may not fit the same for other people. If no one gives any suggestions, I’ll continue in the direction I’ve been going, but I’d really appreciate some user input. Any ideas?

Caleb

P.S. I just had to attach a screenshot of an upcoming demo for Dusk’s 1.0 branch…

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!

Hi everyone - I’m back! I had a great time in China and managed to do quite a bit of coding on Dusk 1.0.

First off, I have some fairly big news. When 1.0’s release date arrives, Dusk will become a pure-Lua Corona plugin. I have with CoronaLabs’ Brent been communicating about this [edit: sorry for the grammar there, still adjusting from China], and I think it’ll be a positive move for Dusk. It’ll also solve a big issue Dusk has had since its creation date: documentation. Dusk’s documentation will be hosted on CoronaLabs’ plugin documentation page, and will use Corona’s documentation platform. Awesome? Definitely.

Now, before everyone starts worrying: Dusk will remain open-source and will stay on GitHub. The code will be publicly available and about the only thing that’ll change will be how you include it in your project.

Secondly, something a bit unfortunate. Well, unfortunate or fortunate, depending on how you look at it. This new development and slightly less-than-expected time for programming while in China will push Dusk’s release date back a bit. In addition, I’d really like to get some beta testing in before releasing it. If you’d like to be a beta tester, let me know via PM or on this topic and I’ll get you the engine when it’s ready for testers. With an estimated 1 week for beta testing and a couple of days for conforming Dusk to Corona’s plugin format, the release date will probably end up near the 16th to 20th of April. I’m really sorry for this delay in publishing; please bear with me. Again, however, I’d like to remind you that the current version of Dusk is highly stable and will work excellently for your projects right now.

Thirdly, as for current changes to Dusk 1.0: the vision has changed a good deal since 1.0’s inception. Whereas before, it was a highly-polished rewrite of the current version of Dusk with better Lua practices and a couple of clarified methods, it’s now become a fairly different beast. Semantically, everything will feel the same and converting to 1.0 will probably be a simple find-and-replace, but the API has been more Corona-fied based on Brent’s suggestions. There are no longer convenience shorthand methods if there’s another clearer way to do something, and the total number of functions has dropped because many functions have been genericized. For example, here’s how layer iteration has changed:

-- In the old Dusk: for layer in map.tileLayers() do end for layer in map.objectLayers() do end for layer in map.layers() do end -- In the new Dusk: for layer in map:getLayers("tile") do end for layer in map:getLayers("object") do end for layer in map:getLayers() do end

As I said before, semantically, everything remains about the same. You’re still iterating layers of different types, but rather than having four functions, each of which iterates a different type of layer, you have one function whose behaviour changes based on what you pass to it.

Finally, thanks everyone for your support. As a single developer working on this engine, I really appreciate it.

  • Caleb

Hey Caleb,

I am really excited about Dusk 1.0! I have been using your CBE library and am very impressed. I am not actively working on a Tiled-based game but if you still need beta testers I can make myself available.

In regards to feature requests, I personally just want to see what you’ve done in the initial 1.0 release and then maybe I might want to make a feature request. That said, what I would really like to see are API docs, at least 3 demos/examples, and a tutorial. The tutorial is probably the biggest thing for me. Ideally, there would be two, one for a top-down game and another for a side-scroller.

I understand that my requests are quite significant and that you are doing this for free so I totally understand if you take a long time for this or even don’t do it at all.

Regardless, I think you do great work and I am looking forward to 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