Blog
New tool impressions: Monkey
February 6, 2012
Back in the day, when I was getting started with game making, I was very interested in BlitzMax. The language was very easy for me to understand, and it produced fast, fluid games that could run on Windows, Mac, and Linux. I very nearly chose it over Flash. However the ease of distribution with Flash (ie. you can just send people a link to your game) won me over, and I left Blitz alone. A few weeks ago though, for whatever reason, I decided to check in on Blitz to see where it was at these days. Long story short, I discovered that Blitz Labs had released an entirely new programming language called Monkey that seemed to combine many of the features that I liked about BlitzMax with the features that I like about Flash, and then some.
Monkey is similar to C#, Java, or Flash, in that it is conceptually a 'write once, deploy everywhere' type of language. However the big difference with Monkey is that there is no virtual machine or plugin required on the target platform. Instead, Monkey actually translates your code to the native langauge of your target platform. To me, this is big for a few reasons:
- It lets you leverage additional libraries of code or other APIs once you publish to your target. So for example if I publish my Monkey game to Actionscript, I can go ahead and intergrate the Kongregate API.
- Because you are running in the native language, you are going to get better performance, and can optimize your code for the target platform.
Currently Monkey supports output in several different platforms and languages: HTML5 (javascript), Flash (actionscript), iOS (objective-c), Android (java), XNA (c#), and GLFW (c++). You can check out the Monkey website for more details on what it is, and for a demo version that supports the HTML5/javascript target.
So, that all sounds pretty nice. Monkey combines the BlitzBasic style of development with an even higher level of deployability than Flash. Not only can I make Flash games with it, I can make all kinds of other stuff as well. Too good to be true? Well, the jury is still out on how well the multi-plat exporting works. So far, I have only worked with the HTML5 demo. However if that's anything to go by, and the comments of people in the Monkey forums are to be believed, then yes, it works. What follows is a short summary of my impressions of the language after working on a few small projects with it.
What I liked
- Monkey is a very simple, clean language. There are very few brackets or semicolons required, and overall the code is very readable. It is an object oriented language, with support for inheritance and interfaces. I'm not a super programmer software engineer type guy so I'll leave it at that. As a Flash developer I found it easy to pick up and use.
- It comes with a small module called Mojo, which has some simple APIs for 2d graphics, audio, and input. I found mojo pretty easy to use and understand, though the documentation wasn't all that great (I'll get to that in a second)
- It produces code that works. This might seem obvious, but until I saw my own code running in front of me, I was very sceptical. I was really surpised to see my work just magically appearing in Firefox, running smoothly. Really great stuff.
- A small but active community. There are some dedicated users of the language who are already building and sharing code, from small snippets, to full frameworks.
- Compared to some of it's competitors, it's quite cheap. $120 gets you a lifetime license and lets you publish to all platforms. Compare that to an iOS license for Unity and it looks pretty good.
What I didn't like
- It has a walled off community. This was big for me. To post on the official monkey forums, you need to buy the software ($120 USD). I get why they did this, and I think I will likely end up buying it so it may become a moot point, but as a new user trying to get up to speed, I had no way to ask questions or engage with more experienced users. You can't even search the forums (pro-tip: you can do a domain specific search on google by going site:monkeycoder.co.nz your search terms). Overall I think this is going to hurt the product more than help it. I guess on the plus side, everyone who is posting is a registered, dedicated user, so once you get in there you know you are only talking to people who are really into the software. Still, I think a public forum for demo users would go a long way towards welcoming new users to the language.
- The documentation is a little scattered and sparse. The basics are there, but it requires a little bit of effort to find things. The language is pretty new though and the BlitzBasic documentation is excellent, so I expect this to change over time.
- Debugging is a little weird and sparse. You can get by, but there isn't anything like you'll find in Visual Studio, or even Flash Develop.
What I liked and disliked at the same time in equal amounts
Monkey is a young language. While the community is putting out a lot of good stuff in terms of modules and code, the chances are that at some point you are going to want to do something fairly simple and find that there just isn't a way to do it, so you'll have to write up your own module from scratch. For example, there is no default GUI API or code. If you want a button, you have to build it from scratch. I actually kind of like this, because it gives me a complete understanding of the code I'm using, but at the same time, it is time consuming. Your mileage with this may definitely vary, depending on how much you like coding, and what kind of things you try to do with Monkey.
Overall I dug Monkey quite a bit, and am planning on getting a full license soon. Despite it's shortcomings, it feels more than adequate for the types of games I want to make, and will let me target many more platforms that I can with Flash. If you are into building 2d games and are looking for something that can bring your games to multiple platforms, then definitely check Monkey out.
Links of note
19451: A simple scrolling shooter I built in Monkey. Uses Ari Feldmans awesome SpriteLib graphics library
Goldbergboros: The game I worked on at the Vancouver Global Game Jam, built with Monkey. It is kind of unoptimized and slow to load (we didn't really have time to tweak it), so please be patient.
Jungle IDE: A great IDE for Monkey
Monkey Module Registry: It's kind of buried in the Monkey forums. Some good pre-built libraries of code here that you can use.
New tool impressions: Unity
January 31, 2012
I just finished up the Vancouver Global Game Jam, and after sleeping for almost an entire day, I am alive again! I think I coded for over 24 hours straight, which is definitely some kind of record for me. I am going to write up a post mortem on the experience soon, along with a link to the game our team developed, but in the mean time I wanted to write up my thoughts on some new tools I have been checking out, one of which we used at the Jam.
Over the past couple of weeks prior to the Jam, I had been evaluating some new tools that I could use to port some of my titles to mobile (iOS and Android specifically). I checked out quite a few, and narrowed down my search to two: Unity and Monkey.
Unity you may have heard of. It’s a high-end 3d engine that can publish your project to a variety of platforms, including iOS and Android. I’ve liked Unity since the first time I laid eyes on it. It came out of the gate doing everything that I wanted Adobe to do with Flash: supporting 3d and hardware acceleration in the browser, catering to game developers (Adobe was focused on Rich Internet Applications, or RIAs, for a very long time, and seemed content to ignore all of us folks making games with it), and they offered their tool for free, so you could get up to speed and experiment with it without laying down any cash. Not surprisingly, they have attracted a sizable, active community, and it continues to grow.
I played around with Unity quite a bit, putting together some simple prototypes, and running through a few different tutorials. I really like it. The Unity team seems to have really thought through the process of getting a game up and running quickly. In many ways it feels very drag and drop, but once you start digging into the scripting and looking at the coding APIs, you realize that you have an extraordinary amount of power in your hands.
So what’s not to like? Well, it wasn’t that I didn’t like Unity, it was that in a lot of ways it felt like overkill. There are so many options in it that are clearly geared towards high-end games with larger budgets, larger teams, and most importantly, 3d content, which I am currently not planning on working with. If you just want to get some small 2d graphics flying around the screen, using Unity is, as Mr. Tom Grochowiak puts it, “like trimming a bonsai tree with a chainsaw.” Too much power isn’t necessarily a bad thing, but there are so many options in Unity and things to wrap my head around that I felt like I was wading through technology I really didn’t need.
Unity is a very nice tool, and I think that in the future if I decide to start building with 3d (or just cave to the urge to start typing ‘eulerAngles’ and ‘spline’ over and over), I will definitely use it. However for the time being, I am leaning towards using a different tool. In my next blog post, I’ll take a look at Monkey, a new programming language that feels much more geared towards my immediate purposes, and the tool we used to build our game at the Vancouver Global Game Jam.
Braindump
January 13, 2012
One of my goals for the New Year is to maintain this site a little bit better. To start with, I am going to be finishing up my weeks with a braindump; a collection of links and thoughts on the stuff I've absorbed, worked on, read, played, whatever. Mostly just little stuff that I wouldn't write a full post on here, but deserving nonetheless. This week:
- Two nice articles on Gamasutra this week. First up: 7 things to know about HTML5. Good information for anyone who's looking at developing on this new standard. This article pretty much covers most of the big pros/cons, really missing only one (though several of the commenters caught it): You can't protect your source code or assets in HTML5. I'm undecided on how big a deal this is, but there's certainly some cases when you aren't going to want just anyone wandering in and taking all of your art and code and doing as they like with it. On the other hand, viewable code has worked really well for the web.
- Second: Choplifter: From 1982 to 2012. Gamasutra has been publishing a lot of these historical interviews lately (their Jordan Mechner one is also excellent). Reading about the good old days of Computer game development always makes me feel warm and fuzzy inside for some reason. I think it's mainly because they were just doing it for fun, because they could. The mega-business reality hadn't settled in. There's something pure about it that just feels good to read about.
- Monkey! I spent some time this week playing around with the Monkey programming language. Really fun stuff. Back when I was starting with Flash I also seriously considered going with BlitzBasic/BlitzMax instead. In the end, the ease of distribution with Flash won me over, but now it seems that Monkey has the best of both worlds (along with several others). I have a small demo I've built with it here. I intend to post a more thourough impression later on, along with some impressions of Unity, which I've also been tinkering with.
- 2d in Unity. It turns out there are now several 2d plugins for Unity that offer some pretty streamlined workflows for getting those little sprites moving around. Who knew? Well, I guess a lot of people. Still, news to me! I'm still experimenting with them, so we'll see where it goes. Also props to Tim Miller of Rocket5 studios for his great tutorial Make A 2D Game With Unity3D Using Only Free Tools.
Dolphin Olympics Fanart
January 13, 2012
Some great Dolphin Olympics Fanart, courtesy of Aidan McLaughlin.
New website design
December 9, 2011
After much humming and hawing and re-copy-pasting-erasing I have finally put up a new design. Well...kind of new. I couldn't give up the nice blue sky. This one should hopefully stick around a little bit longer, and make it easier for me to update and publish new games. It also gives a consistent style across the entire site, from the games section to the blog, which is something I've wanted to have for awhile.
If anything looks wonky or doesn't work right, I apologize. I am still tinkering with the design and it will be a work in progress for a week or two more. The styling also uses some CSS3 voodoo which I have yet to run through the Internet Explorer gauntlet of testing, so if you are still running IE6 this site might look like the apocalypse to you.


