LIMBO is what every platformer should strive to be. Great story, eerie atmosphere, awesome animations and, above-all, mindboggling puzzles which when finally solved give you a great sense of achievement. My only grievance relates to a certain type of puzzles (not going to mention which so as not to spoil the game) but these are probably a matter of preference. Overall a nice little gem everyone should own. 10/10
Lately, due to work and personal interest I have been experimenting with Unity. It is a very nice and simple 3D engine with a lot to offer in terms of features and capabilities. I am hoping that in the following months I will be able to use it in order to perform a re-write of Space Generals. While Space Generals (version 0) met its requirements as one of my Master’s case-studies, it is in a dire need of a bottom-up overhaul. This will probably mean having to make do without a Haskell back-end and a Google Web Toolkit-based front-end. If Unity allows me to call external executables I might re-use the Haskell back-end as is and simply use Unity instead of GWT for the front-end. More on this as I make more progress…
In the meantime I am back to studying vectors and matrices with the hope that this allows me to refresh my memory and to better understand the various functions provided by the Unity API. In the end, while the API does a fantastic job to simplify and abstract, I feel that a basic knowledge of the underlying mathematics is a good plus. (Now I wish that my brain had conveniently kept its knowledge of this subject from pure maths classes, but apparently mathematics topics are like languages for me, they become rusty if not used from time to time.) The next step after this would be to go through various tutorials in order gain some experience and insight on how to best design and implement Space Generals using Unity. Finally, it will be my turn to get my hands dirty and give it a good shot.
Once more I am hoping that this blog will be a way for me to share what I have learned and to keep a journal of the game’s process.
Today I decided to try my hand at releasing a cabal package with the 4Blocks code. I finally managed: http://hackage.haskell.org/package/4Blocks-0.2. (I made a newbie mistake in 0.1 so please ignore that release).
Unfortunately the library can be compiled only with, as far as i know:
- GHC 6.8.3
- Gtk2hs 0.9.13
The reasons why are in the README file in the cabal package, copy/pasted here:
So yeah, fairly old now, but I thought, I’d share the code all the same as some people have requested it earlier. Hopefully I will release the code with my AI later on after my project is over and done with in summer and also a patch to make it work with newer versions of GHC and Gtk2hs.
I have to say I really enjoyed coding the game in Haskell and if you have any comments for me, regarding better ways to code stuff, silly things I did, or anything else please let me know by leaving a comment!
It’s been more than 4 months since my last post! I’ve been really busy lately creating a website for a game called Space Generals which we are going to use for our research in game AI. The game itself is actually a turn-based one much in the style of Risk with a little twist which will allow us to study hierarchical AI and domain-specific embedded scripting languages. The website’s front-end is developed in Java using the GWT framework while its back-end, which carries out turn-processing and game-logic, is developed in Haskell. Here are some screenshots of the game:
More information about the game and how to play can be found in the User Manual.
Feel free to register and play the game. You need at least one more friend to play a game and up to 5 players can play together. Also, if possible report any errors and provide suggestions using the game’s:
Also, it would be of great interest to us for you to share your game-playing strategies using the above methods as we shall be using them to create different AIs using the DSEL we are working on at the moment.
Thanks! We hope you enjoy the game!
P.S. Currently only Mozilla Firefox and Google Chrome are supported.
I’ve been wanting to write another blog post on the series on DSELs I’ve been planning, but I’ve been really swamped with work lately. So once more I’ll post a video or two on something I’ve been working on. It’s the 4blocks game again, this time playing on its own with an AI I’ve written for it. Here are the videos:
On the whole these were two good runs. I’ve had much better and much worse runs of course.
The AI is by no means perfect but it uses the DSEL techniques in Haskell. I have two languages acting here:
1. A Tetris DSEL
2. Haskell acting as a meta-language over the Tetris DSEL.
What is happening is that for every new brick the game state is queried by Haskell for certain information such as occupied blocks or number of lines. Using this information, by means of Haskell’s case statement I simply trigger one of a possible number of strategies. These strategies acquire certain information from the game state and generate a DSEL script. This script is then carried out by a DSEL script interpreter.
There are numerous problems with the AI and its mostly because I haven’t had time to write more strategies or a more intelligent way to select what according to the selected strategy is the best final brick destination.
That’s about it for now. Let me know what you think.
This week, instead of a post on DSELs, I’m going to show what I’ve been working on. It’s my first, real foray into Haskell: a game implementation. Some day soon I hope to make my implementation available on the Haskell libraries repository (Hackage).
Thanks goes to the folk at the Haskell irc channel #haskell who helped me when I got stuck. Special mention goes to Saizan for his everlasting patience.
Some more details:
The game is being played by me in single player mode. The other parts shown are WIP. The graphics library used if anyone is interested is Gtk2hs.
In light of a comment by one of the visitors of the blog (which was also a nagging worry of mine), and some searching on my side I decided to alter the game’s name and certain minor features to prevent copyright problems. I have uploaded a new video which reflects these changes.