Isometric tilemap plugin

A few people here expressed interest in our isometric tilemap engine some time ago during early development and I feel it’s much closer to release-ready now, so have begun to put together the documentation. There’s still some work to be done, both functionally and to this documentation, but due to the earlier interest I figured I’d post a website link here. I hope this is ok?

https://qiso.qweb.co.uk

The documentation should, hopefully, show how easy this plugin is to use. What isn’t yet clear from these pages is that the engine will also handle character placement and movement with built-in A* pathfinding algorithms, individual tile manipulation (for picking/dropping items, for example), a point-and-click menu system, and off-screen tile culling to prevent excessive memory usage. Also hoping to add audio ‘tiles’ with distance-from-camera based volume control, so as panning the camera around brings different sounds in to play.

If interested, please do sign up to the mailing list so that we can notify when released.

Edi: Qiso is now released! https://marketplace.coronalabs.com/corona-plugins/qiso-isometric-tilemap-engine/

Character handling and path finding is now complete, and the documentation has been updated.

Android users, check out the new demo. Drag to look around, pinch to zoom, and tap to walk the character around: https://qiso.qweb.co.uk/downloads/qiso-demo.apk

The code to produce this demo is basically the same as the moveCharacter() example code: https://qiso.qweb.co.uk/documentation/data/character-handling/functions/movecharacter

And now a video demo: https://youtu.be/IU-AzaRrjRA

I wonder if you support objects bigger than a simple iso tile and if depth sorting works while they’re moving around the map.

Richard,

That looks great.  Looking forward to seeing this develop into a very useful/helpful engine for devs.

Bob

Thanks =).

Tiles can be any size and the sprites used to populate them can be any height, but must all be the same at the moment just because that’s how spritesheets in Corona work. Support for mixed dimensions would be handy though, and the way depth sorting is handled should make this a possible addition.

In a nutshell, layers created in Tiled are maintained as per-tile layers, and those can be manipulated in real-time. So for example if you need a character to pick up or drop items, it’s just a case of adding/removing a layer from a tile. Additionally, tile layers naturally sit behind characters but can be set to always show above them, so that for example southern facing walls don’t end up behind characters that walk over the tile they’re on.

Emphasis on this being per-tile layering, so layers that are kept above characters of course still fall behind them when the character is actually on a tile further in front, because the individual tiles are also ordered from the back.

Hi Richard, 

thanks for the additional information.

What I meant was, f.i. creatures wandering around which may consume 2 or 3 tiles as ther “ground” area … like a horse, dragon etc. and also maybe other objects like a big bush/tree etc.?

I don’t understand what you meant about the spritesheets, as far as I use spritesheets each frame has it’s own dimension (maybe I just misunderstood what you meant?)

Ah, characters don’t need to be the same size as map tiles, they can be any size you like as they use their own sheets. Positioning is based on their horizontal midpoint so placement within the world should just work fine.

But if you had a character that was wider than a single tile, you’d obviously then need to make sure it can’t walk too closely to wall tiles etc, to prevent them from poking through the other side of the wall. This would just be a case of having two types of grass tile and setting one type to be inaccessible to the path-finding system, which is just a single code line, and then using that type to edge all of your walls in the world design.

Thinking about it… the ability to set tiles as inaccessible only for certain characters would be a great addition, allowing smaller characters to enter parts of the world that larger characters cannot… I’ll add that to the ToDo list - would be very handy for all sorts of games!

Latest video and Android demo file. Rendering is smoother, path finding is more intelligent, layers can now be replaced on tile entry/exit (that’s how the door works), and both enforced foreground layering and path-finding blocks can now be set up within Tiled custom properties which simplifies set-up immensely.

https://www.youtube.com/watch?v=QEpYetLfDvI

https://qiso.qweb.co.uk/downloads/qiso-demo.apk

Documentation will be updated shortly and release is now just around the corner!

New video demonstrating improved movement rendering. Masks are now created on-the-fly to prevent ground tiles from overlapping characters as they move around. Also finally replaced the cruddy test character with a higher quality wizard, designed for one of our upcoming games =).

https://www.youtube.com/watch?v=U8FHFjWzp2U

Documentation isn’t updated yet but there are a few new functions too. Subject to the results our performance testing comes up with, this should be pretty much release-ready now!

Latest demo build if anybody wants to try this out on their device. I’d appreciate any performance notes or general feedback you might have if so please.

https://qiso.qweb.co.uk/downloads/qiso-demo.apk

Documentation is now updated, and the sample code for the above video demo is available here: https://qiso.qweb.co.uk/samples

Richard,

It is looking really good.  I got the apk and will try it later today on my Android moto G5 phone. I will give you some feedback then.

Bob

Thanks Bob, much appreciated.

Richard,

It function very well on my phone.  I did not have any issues.  I think the wizard seems to move quicker along diagonal. Other then that it (of course I am sure you are working on this) it would be nice to have that see-thru effect when the character is behind the back wall, so you can see the ‘ghost’ image of the character thru that back wall or the wall turns transparent so you can see the character when it gets behind that wall.  But, I am sure that is something you are already planning on.

I did seem to have a minute or so when character was in back top right corner of the map, where I tapped several times left of there to turn and move the character left, and did not seem to register the touch … but it may have been user error.  I tried to replicate that little snag a few times, but was unable… so likely just user error.

Bob

Thanks Bob. What device is that on please?

I’ve actually thought up a better way to do the masking that should perform faster, and would fix a couple of limitations that the current method imposes, so will be replacing that before we release now.

You’re right about the wizard movement, but that’s just something we have to put up with in isometric unfortunately. Basically when you move a character, you tell Qiso how fast you want it to traverse the tiles and the engine is then built to make sure it takes a set time to move from each tile to an adjacent, whether that’s diagonal or on a straight. However because of how isometric layouts work, tiles that are horizontally adjacent are separated by more pixels than tiles that are diagonally adjacent, so the character has to literally move quicker to cover more pixels in the same timespan. It has to work this way though, otherwise it would be quicker to navigate the world by zigzagging than to just walk in a straight line, which would make less sense especially if you think about the world from a top-down perspective.

We’ll be adding transparency to walls, yes. You’ll be able to define an opacity for any type of tile layer, and when the character is on a tile that contains an instance of that layer, either just the one tile layer will switch to that opacity, or all matching tile layers will. This way when behind a wall, the wall of just that tile can turn slightly transparent, and when inside a building the entire roof area can turn completely transparent.

There weren’t any plans for a character-outline type of visibility though… I quite like that idea actually. I remember the original Fallout games doing this and it allowed for items, or even NPC’s, to be hidden from the player until your character literally stumbled into them… This would be an excellent addition indeed, I’ll add to the todo list!

Not sure what could have been happening with your map corner issue. Tapping outside of the mapped area would be ignored, and tapping somewhere that can’t be navigated to would also be ignored, although the demo map doesn’t have any areas like that. Perhaps you had your other finger on the screen somewhere? Taps are ignored if more than one touch event is happening, because the engine then assumes you’re trying to zoom. Taps are also ignored if you move your finger because otherwise every time you pan the camera, your character would try to move.

Android - Moto G5 phone.  I agree, the corner issue was almost certainly my error … could have had been touching with my other hand or such.  You certainly have put a lot of thought and time into this engine, and it shows.  Great job.

Thanks - glad you like it =). We’re primarily a web agency really. Games are a new venture for us so all feedback is appreciated.

Masking is now reworked and performs much, much faster. Also means multiple characters can pass over the same tiles and the masking will keep everything layered properly, despite Corona’s inability to apply multiple masks to an object. The performance gain additionally means we’re no longer having to decrease the quality of the generated masks, which fixes the pixelation you might have seen as characters walked in the previous demo.

Latest video showing this and also demonstrating both how NPC characters can be controlled and how layer replacement can be optionally delayed until all characters have left the tile (allowing doors to not be closed prematurely when multiple characters are on scene):

https://www.youtube.com/watch?v=YCFuaz68mHM

All documentation is updated, and I’m excited to say we’re about to submit to the Corona marketplace!

Lots of features still to add, including dynamic lighting, positioned sounds, and layer visibility/semi-transparency as discussed above, but I really hope this engine is useful enough already to some of you.

Qiso is now live in the marketplace! https://marketplace.coronalabs.com/corona-plugins/qiso-isometric-tilemap-engine/

Thanks for all of your interest and support to date. As per the above thread, this is still a work in progress and we’ll be adding more features in the coming weeks, but if the engine already does what you need it to, please do consider it for your next game.

Well, that’s odd… When I try to visit the link you shared for your plugin, I get a page with “Whoops, looks like something went wrong” instead… Anything I’m missing here?