New DAME game
Congratulations on Player Three for yet another game made with DAME. This time it’s Nom Nation and is a side scrolling platform game where eating food is the big mechanic. What you eat changes what you can do, and it’s an award winner on the PSN store as well.
Also, I just discovered that Anodyne, the Zelda like adventure game made with DAME, is now available on Steam, having successfully passed their Greenlight program. Since there’s a Steam sale going on now would probably be a good time to buy!
DAME 3.1.3 out
It’s been a while since I’ve been updating DAME so frequently but with the fixes/features in this things should be improved vastly for some users.
Firstly, DAME used to have a limit on the size of paths. Now this has finally been removed and paths can be any size you like.
Secondly, paths can now be filled in with a colour, which means they can pretty much be used like shapes now.
Finally, tilemaps that are extremely large will now render correctly. There used to be some clipping issues that were cutting out part of the tilemap from the display.
DAME 3.1.2 released
A few fixes and features in the latest version of DAME.
- Fix DAME crashing when you try to move tiles pasted in another group than the one they were copied from.
- Fix tilemap border being draw incorrectly when the map is zoomed out far in tile matrix mode.
- Option to force snapping of tilemap positions to units.
- Added help menu option to open settings file.
- Added Tool menu option to reset to default settings.
- Fix for crash when ignore map edges is ticked on a tile matrix with special connections.
DAME 3.1.1 released
Here’s the list of fixes/features added in the new version of DAME:
- Duplicated sprite entries now copy all relevant data.
- Fix bug where loading a file with layer templates added duplicate entries.
- Added more options to control what can go in the settings file.
- Save sprites separately option has been moved to the Tools->Options window.
- Prevent the map height options from showing up on new map layers.
- Options will be reset upon loading a project saved before versions 3.1.0 and 3.1.1
- Can now add layer group templates.
What this essentially boils down to is that I’m trying to allow for the greater separation of level specific data (ie the placement of all objects in a level) and general level settings (what sprites/tilemaps/settings are used).
Previously the .dsf files were only used to save sprite entries, but now this has been expanded to include more data. Instead of being a dame sprite file it’s now a dame settings file. Fortunately, I didn’t need to change the acronym!
DAME 3.1.0 released
This version of DAME adds some new features designed to be more restrictive and make it easier for end users to edit maps and not make mistakes.
First up I’ve added the concept of layer templates. For now this is just for map layers. You can create a template from a map layer in the layers tab and then whenever you want to add a new map layer you can pick from the list of templates, instead of having to mess around with setting up tilesets.
I’ve also added some options in the Tools->Options menu to force users to only add maps from templates, and to disallow them from modifying the template list.
Another option I’ve added is to prevent editing sprite entries. Again, this is designed so that if you have a framework you can just give it to end users and not worry about them accidentally changing something. (Though, they can still change the option in Tools->Options if they need, but it’s a bit more hidden away).
In sprite entries I’ve added 2 options. One to force rotations to always be in 90 degree angles. There already was a keyboard shortcut to do this with 45 degree angles, but this is for those sprites that you only ever want placed in the simplest way. A second option I added prevents editing of tileset frames. Most people never use this feature so it prevents accidental breakage.
By default DAME should work exactly as it always did, so you’ll need to turn these features on, but hopefully it should help things a bit.
Carnage and Adventure
I’ve got 2 new games that were made using DAME to tell you about today.
First up is Dukes and Dirigibles, made by Backward Pies, which is best described as a game of carnage in the Victorian skies. It’s got blimps, lots of shooting and simple gameplay that keeps you playing.
Secondly, is Anodyne by Analgesic Productions. Technically, this game hasn’t released yet. But the playable demo is out and it’s looking pretty fine. It’s an adventure game in the spirit of classic Zelda games and while it’s still early days yet, I found myself caught up in the spirit of the game.
Three more games made with DAME
It’s been a while but I’ve been informed of 3 more games made using DAME and so I’ve decided to bundle them all up in 1 post of mini reviews.
First up is Rot Gut, which is a really stylized film noir game with shooting and jumping and quite a bit of blood! This one is quite challenging but a lot of fun to play. I dealt with the developers a little bit and some of the new look UI for DAME 3 was contributed by the artist Behzad Rahimi. Here’s hoping we see more from these guys!
Secondly, it’s a real pleasure to know that DAME has helped make a Doctor Who game - Dalek Supremacy! Ok, You don’t actually play as Doctor Who but Daleks instead, but as a fan of the show in my childhood it makes me smile. Of course, I can’t help but wish you played as the Sea Devils instead…
Finally, is another top down game by the same developer - Truth Specs. Actually, I recall debugging a bug with the map a long time ago early on in DAME’s lifecycle and thinking it was a really nice and complex map, worthy of any metroidvania fan. So it’s good to see the finished product with finished art.
You can find all the games made with DAME (I know of!) here
If you’ve made a game that isn’t listed please let me know!
DAME goes open source + Post Mortem
It’s been requested many many times and I’ve finally done it and made DAME open source. This is mainly due to the fact that I feel that I’ve done as much for DAME as I originally intended and it’s time to let others have a go.
Firstly, here is the link:
Now that’s out of the way, I thought I’d provide a little post mortem, not that DAME is in any way dead, but more on the development side. So here goes:
THE POST MORTEM!
Firstly, why did I make DAME? Well, it began because I wanted to make a simple 2d game and I was playing around with Adom Atomic’s wonderful Flixel framework at the time. I had tried a few other free editors and none of them did what I wanted or were as customizable/easy to use as I wanted them to be. So I thought ‘why not use Flixel to make the editor since half the work is already done? It shouldn’t take too long…’
I would come to regret those words.
I created my initial list of features for what I wanted in a map editor:
- To be able to paint down all the edge tiles automatically.
- To be able to draw directly on tiles and create new tiles where I draw.
- To be able to place down trigger areas and paths.
- To be able to place down sprites and freely scale/rotate them.
- To modify the sprite animations.
- To not be tied to any specific language/framework/or style of implementation.
Flixel was really good at the start. In fact, I believe that for the entirety of version 1 of DAME I didn’t need to modify the Flixel codebase at all. The only time I began modifying any of the Flixel code was when I introduced crazier stuff like isometric tilemaps. Overally, Flixel was pretty scalable as a framework for building a 2d editor on.
The Tile Matrix was one of the initial features I did and I haven’t needed to touch it much since it was first implemented. It’s customisability proved to be highly useful.
Lua. It took me a while to figure out which form of scripting I would use for the exporters. I considered people loading swf plugins or a completely closed system but those seemed to go against making DAME a generic tool for any language/framework. In the end, Lua did have some limitations, mainly because bridging between it and Action Script is slow, so I had to write an intermediate language. However, I’ve used this for many different types of exporters and it’s very efficient and flexible.
The Flixel community. Flixel users provided a lot of feedback and DAME was quickly adopted by the Flixel community. Also, being friendly with the community helps a lot. At the very least, people are more willing to communicate with you when you respond with a smiley :) You can find the DAME thread in the flixel forums here if you’re interested: http://forums.flixel.org/index.php/topic,2333.0.html
Going multi-platform. Always a fan favourite, this! However, I didn’t have a Mac or Linux, which meant relying on others to debug problems. But actually this turned out to be a Pro for me and taught me how to better figure out solutions to problems when I can’t reproduce them myself.
Making it free. I could put this as a con, since I didn’t really make that much in donations from DAME. But I received enough to encourage me to keep the website going.
Feature creep. I got a lot of requests and a lot of bugs during the first 2 versions of DAME, so I spent a lot of my free time working on them.
Not going open source early enough. This one is speculative, but if I had gone open source sooner it’s possible I could have had more people adding features and improving it… or not.
Not promoting DAME enough. As far as I know, DAME hasn’t really been used outside of Flixel, which is a shame since I built it to work with any 2d framework you want.
Not creating an xml exporter soon enough. This goes with the above point, but making an xml exporter promotes its use in other frameworks.
Lack of documentation/videos - sigh.
Adobe Air. This one is controversial, but in the end, I think had I have made DAME with another framework I might have had fewer problems. Adobe Air proved to have a lot of small limitations that increased my development time. Action Script is also pretty inefficient and especially so in the hands of someone who doesn’t know all the tricks. DAME projects tend to be pretty bulky, so this becomes pretty important.
Lack of planning and knowledge of Action Script. I’ve learnt a lot over the last 2 years and can now consider myself fairly knowledgeable in AS3, but when I started DAME I had only spent about 2 weeks working with it.
I’d love for DAME to continue to evolve and improve, but going open source is me finally accepting that I’ve done as much as I can alone and giving up the reigns. If anyone wishes to help then please get in touch as I’m sure there are still plenty of things we could add. Here’s my wishlist:
- Improve the UI.
- Make it more efficient.
- Port it to something more reliable than Adobe Air.
- Allow for larger paths and more flexible shapes.
I hope you all enjoyed DAME over the last 2 years. If you have never tried it then please do. It shall always be entirely free and I’d like to see it reach a version 4 or 5 one day.
And thanks to all those who contributed in some way over the long and winding road to this point.
Before I forget…
Did I ever make the game I intended to make?
I got carried away making DAME instead. But watch this space. I still intend to make something with it. In fact, quite a few things…
The Cone Zero Strategies - a short story
It’s funny what you sometimes forget about.
What follows is a short story I wrote in 2008. It made the shortlist for a collection of stories based around a theme, but sadly failed to make the final list. And bizarrely, having got further than before with my attempts at becoming a writer I decided to abandon that particular avenue.
I had completely forgotten about it until now, and found myself amused while reading the story again. I’d even forgotten what happened in the story! In truth, I had no idea what the story was while I was writing it either… and it probably shows!
So here it is, for better or worse:
'Congratulations. Cone Zero is a triumphant success.'
'So what happens next?' one of the analysts asked innocently.
'We can all start with Cone One…'
'And then if that succeeds we move onto Cone Two, followed by Three and so on. Simple really.'
The diminutive analyst who asked the question was not alone in her dissent. In fact, almost the entire floor of scientists, researchers, data inputters, quantifiers and analysts were beginning to mumble amongst themselves, spreading this verbal virus around.
'Look,' said the supervisor, 'I know you probably thought this was just going to be a quick task. “We'll finish Cone Zero and then we can all go home.” Am I right? Well, it is because of your dedication to the project that my superiors have asked me to extend the project. So I may as well tell you that the goal is now Cone Infinity.'
That didn’t go down as well as expected. People were shouting now.
'Excuse me,' roared the four foot high analyst who was now apparently the ring leader of the group. 'Did you just say Cone Infinity?'
'Er… yes. Or rather Cone Zero to the the power of infinity.'
'But isn't Cone Infinity, by its very definition, an impossibility? Wouldn't we have to work an infinite number of hours in order to achieve it?'
'Ah, I'm glad you raised that point.' He wasn't. 'You see, I'm sure you're aware of the quantum theories surrounding the Cone project, and as we all know there are an infinite number of realities I want your dopplegangers within each of those realities to simultaneously generate a different Cone field.'
That appeared to have calmed things down a bit, at least long enough for them to figure out exactly what he meant. The supervisor watched eagerly as everyone gathered below him no longer looked angry. Instead they looked quite confused.
'How do we do that?' asked the ringleader.
'I haven't the faintest idea.' The supervisor was rather pleased with himself, and couldn't help reveal the smile on his face.
'But nobody's ever attempted that before. The whole thing could collapse.'
'She's right, you know.' It was someone else who had spoken. That threw the supervisor a bit. He looked around for the new rogue element and finally spotted him. He was sitting on one of the expensive swivel chairs he had paid for half the team to have only to realise that those with them were doing less work and spinning around instead. He was a good-for-nothing physicist. Well, some kind of scientist anyway. It didn't matter to the supervisor. They were all the same.
'You see,' the scientist continued in his scientific tone that implied he was right and knew everything about everything. 'It's all about the point of total collapse within the Cone Field. One Cone within a quantum reality is manageable, as are two and three. Even if we were to utilise the entire human race on the task of creating Cones for the rest of our existance we would still only manage, say, four million Cones. the universe could cope with that.'
'So what's your problem, Mister..?' Nobody knew anybody's name here; not even the supervisor knew them. It was just the way the supervisor liked it as it prevented things from getting messy.
'My name is unimportant. The problem is that if you start meddling with alternate realities to create a multi-dimensionally parallel array of infinite Cones you would end up with a every cone expending energy within the same point within multidimensional space. The whole thing would collapse in on itself.'
'I still don't see your point.' He didn't understand science, and especially not quantum physics.
The scientist stood up in defience. ‘Well, quite frankly it’s immoral.’
Ah, ethics! That old spectre.
'Now I hardly think you're the kind of person to talk about morality.'
'You don't even know my name, so how could you possibly say that about me?'
'I didn't want to raise this, but you've forced my hand. You see, my statisticians have told me that exactly fifty percent of the scientists selected had been involved in highly dubious and blatently unethical practices.'
'And how would you know which fifty percent I belong to?'
'As for the other fifty, when our headhunters chose them they were trailed by our investigators non-stop for two months prior to the moment they were approached. What we discovered was quite shocking.'
The supervisor decided to wait before going on. He was afraid of the fall out from this but it was to be expected. The screening programme was designed to choose people who would be easily manipulated and so this situation had been completely anticipated. He watched as some of the scientists begin to look quite uneasy. Many of them were probably innocent and had no idea what the supervisor was about to say, but he believed the majority would be quite accurate in their assumptions. The rogue scientist, however, revealed nothing.
'They were — and it upsets me to the core to say this — murderers, thieves, politicians — the list goes on. Now which one are you?'
The scientist sat down silently with a glum look upon hearing this revelation. He could have been in either division. It didn’t matter. The headhunters had done their job.
The supervisor looked at the analyst and what followed was a silent battle of wills between them. Both of them analysed each other’s facial expressions for the mere hint of a lapse in confidence. Did the supervisor know something about her? Did the analyst have a guilty secret and if so, which one? Neither one of the pair appeared to budge and the onlookers were just as transfixed by the spectacle of this face-off as the security cameras analysing every wrinkle in her face and passing back information to the supervisor so that he could gain the upper hand.
The staring contest might have continued as indefinitely as the project were it not for the alarms suddenly screaching.
'It appears that we have a Code Four and regretfully I will have to continue this discussion later.'
'You will,' the analyst muttered before she returned to her work.
The supervisor returned to his bland office and observed the commotion downstairs. It had been wise of him to install an override to Cone Zero so that he could trigger a Code Four if ever he was in trouble.
The supervisor had himself been selected for his talents in predicting implausible outcomes and choosing appropriate gambits to pre-empt them. Few people knew it but he was behind half of the major war victories over the past decade. He had never failed and his strategies ensured that he never would.
He sat down at a table and continued one of the five games of chess he had been playing against himself. All five had now lasted almost a year over tens of thousands of moves each, and this was the longest he had lasted without a stalemate or a victory. It was an amazing achievement as he was able to separate his game into two distinct personalities, each as clever as the other and capable of second guessing the other’s moves without cheating.
His strategic genius was without question.
So it was a shame that it had been that genius that had led him to a career position he didn’t want due to unseen moves he had failed to predict. He had been blackmailed into taking this job after his initial refusal, and they had only done so because he had become such a master strategist. Had he perhaps failed on one or two occasions they might have chosen someone else but now he was a pawn in an increasingly complex game.
The phone rang.
'Hello. I'm afraid we're rather busy here with a Code Four so if it can wait…'
'This can't wait,' the voice said on the speaker. It was the director, angrier than usual apparently.
'How can I help you then?'
'I hear you have had trouble getting cooperation on the Cone Infinity project.'
'News travels fast, director. Well, I can assure you that the matter is nearly settled. One rogue element has been silenced and the other will be nullified very soon.'
'They had better be. This project is too serious to fail now.'
'If I may ask, sir…'
'I may need to relay further information back to the team and it would help to be able to explain why we need to continue beyond Cone Zero when the initial aims of the project have been completed.'
'You do, do you?'
'Yes. The slightest information will help, sir. It's for the good of the team.'
'The team, huh? I can give you two explanations. One is true and the other is false.'
'Of course, I'll need both.'
'Are you sure? I know I can trust you given the power I hold over you, but really, wouldn't it be easier on your conscience if you just knew the lie? After all, that's all you need to provide them with.'
'How funny that you are concerned with my conscience. Come now, I think it's blatently obvious that you still don't trust me entirely. By knowing the truth I will always be one step ahead of the group, as you are with me. I will provide them with explanations built around the lie that will steer them away from the truth. Surely, you are clever enough to realise this?'
'Of course! So be it.' The director's proud streak was always his biggest vulnerability. 'The lie is that Cone Infinity will provide a sustanable energy source. An infinite well of power and knowledge that will beam directly to every home —'
'No doubt so that the whole of humankind will be forever indebt to you and your organisation. Limitless power!'
'I never said that!.. How silly of me. This is the lie after all. But still, why do you jump to that conclusion?'
'I don't. Of course it's the lie, but the important thing is that the team will inevitably believe that your organisation has a malevolent intent, after all, we are talking about kidnap and blackmail here. If the worst I can give them is that then they will be easily appeased.'
'I see your point. You always explore every angle. I was right to hire you.'
'Now for the truth,' the supervisor said.
'Yes, the truth. Well, that is we want to destry the majority of the human population.' This was better than the supervisor could have possibly imagined. 'An Infinite array of Cones will, if triggered in the correct way, cause an extinction event on a never before seen scale. In fact, the entire universe will be dredged of life as though it had never existed save for the few thousand people and anything else living inside the small residual field of the Cone.'
'I think I see where you are going with this.'
'You do? Perhaps I misjudged you. It seems you do understand.'
'With a clean slate you'll be able to colonise the universe unhindered. Every living thing under your command and nothing to stop you —'
'And perhaps you as the supervisor, huh? Ha ha!'
'Perhaps. Such a proposition is not unattractive to me.'
'Well, you are correct. An entire universe. The Cones will see to that.'
'I see why you felt the need to kidnap and blackmail us all into working for you.'
'Indeed! Though, perhaps let's use friendlier words between friends. I prefer the terms borrow and persuade.'
The director had never been so happy. He was laughing between every other sentence, presumably because he had finally found a fellow conspirator.
'There is just one thing, director.'
It was now or never.
'It's been exactly a year since I was… influenced into coming here now —'
'Ha. Already thinking like me!'
'Yes. Well, I feel that there is something that I must… get off my chest before we continue.'
'Anything, of course.'
'I knew you would blackmail me a week before you did.'
The director was silent for a moment.
'Just a week?' he asked.
'Yes. But that was long enough to investigate you and store all the information I had discovered about you in two separate locations under the instructions that if I am not there to open them within one year and one day they are to release the information in public, and I must do the same once a month for the rest of my life. That's tomorrow, I believe.'
'Nonsense! You have nothing on me.' He was furious again, though more so than the supervisor had ever known him to be.
'But I do. Director Bosun is what you're called outside, I believe. I know about everything your organisation had done within the last seven years. There is enough there to have you arrested for corruption, embezzlement, fraud. Why, the Boston incident alone would…'
'Ok. I get the picture. But even if you do, I could send you away for just as long. Stalemate I believe. I will release you and track your every move. Once you have ensured the information is kept hidden I will kidnap you again, or kill you.'
'I believe you should be using friendlier words than those. If you do either of those things then you will neither complete your project nor guarantee your safety. Check!'
'What do you mean?'
'Firstly, one of the team was planted by me to gather information. I will not reveal which one and in fact, like every one else I don't even know their identity. Suffice to say, I ensured their safety by tying information about you to their release.'
'Then I shall torture you for that knowledge or release them all for a short time. You can't win!'
'But I can. You won't torture me because we both have to retrieve the information at the same time and I don't think you are capable of doing that within the space of a day, and as I said I know nothing about the plant, not to mention that you may torture me so much that you risk my death and then you will be exposed anyway. I'm afraid your only option is to release me and everyone here.'
'Even so, it doesn't matter. Another team can be constructed to continue where you left off. And eventually I will achieve my goals.'
'Ah, yes. Where we left off… I'm afraid to tell you that Cone Zero is, and always has been, a complete failure.'
'But I've seen the results. They indicate a clear quantative stream of —'
'Results can be faked. I made sure that every body I chose was the worst of their kind. There are data inputters who will enter anything to get a bonus, analysts who see what they want to see and scientists so fraudulent they will stop at nothing to get the results they want, even if it means faking them. I'm sure if you tried to replicate Cone Zero you would find nothing but flashing lights.'
'Then I'll start from the beginning —'
'I'm afraid you won't.'
'Because I now know what to expect from a Cone Zero experiment. I'll be keeping a close eye on you and your organisation, and the moment I see any indication that you have resumed the experiments, which is quite easy to spot once you know what you're looking for, I will bring you down to hell. Because, you can guarantee that I do not want to be party to a mass extinction, one, I might add, that would see my own death. Check and mate, I believe.'
The director said nothing. The other end of the phone was eerily silent, but the supervisor was already putting his coat on.
'I expect nobody to prevent me from walking out of this building right now, director. I'm sure you understand.'
'Y-yes.' The director sounded forlorn, as if his entire universe had collapsed in an impossible cone.
'Then, this will be goodbye. Oh, do finish those games of chess I've left for you. I think you can find a check-mate within two moves for each one. That is, if you think you're up to the task.'
The supervisor didn’t bother hanging up the phone. He wanted to hear the sound of the broken man as he walked out. It was satisfying, and he knew that sound would last the rest of his very long life back outside.
Animated Tiles in DAME
I’ve just updated the DAME Samples here: dambots.com/dame-samples with an often requested example - animated tilemaps.
As with many features in DAME it’s confusing to use at first, but really powerful and useful once you’ve learnt the ropes.
Assuming you’ve already got your set of animating tiles, the first thing is to make DAME recognise them. To do that all you have to do is right click on the map layer and edit it. Then in the layer properties window go to the animations tab and add a new Anim. From there you can drag tiles into empty frames, adding new frames if necessary. You can also specify the frame rate. By default, unless in drawing mode, animating tiles will animate but the option is on the View Menu, under “Play Anims”.
The next thing to do is set up the exporter. There isn’t actually much you need to add. Here’s a snippet from the exporter provided in the samples:
tileAnimsString = “%%if tileanim%%”..tab3..”tileAnims[%tileid%]=new TileAnim("%name%",%fps%,[%tileframes%]);\n%%endif tileanim%%”
tileData = as3.tolua(DAME.CreateTileDataText( layer, tileAnimsString, “%tileid%%separator%”, “,”))
The key function here is DAME.CreateTileDataText. The tileAnimsString is called for each tile in the spritesheet ( a similar thing is done in other exporters for tile properties and you can even combine the two ), and if this tile id is the first frame in an animation (the %%if tileanim%% keyword) then it will output the string.
You can find more info on this in the help pages on exporting provided with DAME.