Racket Roguelike: Post-mortem

Almost four months ago, I started writing a series on how to write a roguelike in Racket. I believed then as I believe now that Racket is an excellent all around language and that I would like to see more done with it–particularly in games.

That being said, it’s about time to move on. It’s been harder and harder to come up with new things to do and the weight of the code base is beginning to weigh against me (see below). In moving on though, it’s time for one last last post detailing the good and the bad.

What went well:

• I learned a lot more about Racket–in particular its object system and GUI library
• I created a few libraries that may be useful in other projects (which I indend to convert to PLaneT 2 packages when it is released):
• ascii-canvas -- a direct translation of Trystan’s AsciiPanel for Java for creating simple ASCII displays
• noise -- generate Simplexor Perlin noise
• thing -- an alternative prototype-based object system

• The display looks pretty good for ASCII (much better than my original system for House on the Hill)
• Other than a break for getting married, I managed to keep up a weekly posting schedule
• What went less than well:

• It’s still not really a game; there’s no end game / no way to win
• I never did compile it for distribution other than source code (I’m still interested in getting general cross compiling working)
• The thing system is powerful, but really I probably should just have stuck with Racket objects
• I haven’t quite figured out how to organize Racket projects; the code base is messier than I like and getting harder to modify each week
• Performance isn’t particularly great; this is partially based on generating tiles on the fly and just a general lack of optimization (I could have done this better)

Overall, not too bad. I’d like to start another game in Racket soon; this time perhaps something actually intended for distribution. I’m thinking about going back to particle/sandbox based games. It’s been rather a while, but I still remember a good number of the optimizations. Plus, I’d like to see exactly how many other genres such techniques could be applied to. Puzzle games are obvious and have been done often enough before but what about top down or side view shooters? What about a platformer? Could be neat.

If you’d like to read from the beginning, have at it. Here are all of the posts:

As always, if you’d like to see all of the code for this project, you can do so on GitHub: - Racket Roguelike

If you’d like to try it yourself, you’ll need to have both Git and Racket and run the following series of commands:

git clone git://github.com/jpverkamp/racket-roguelike.git
cd racket-roguelike
git submodule init
git submodule update
racket main.rkt

Edit:

It seems that the submodules wondered off at some point. Instead, you can install the three libraries this uses directly using pkg , and then run the code:

raco pkg install github://github.com:jpverkamp/ascii-canvas/master
raco pkg install github://github.com:jpverkamp/noise/master
raco pkg install github://github.com:jpverkamp/thing/master
git clone git://github.com/jpverkamp/racket-roguelike.git
cd racket-roguelike
racket main.rkt

If anyone would like to take this code and develop it further, feel free. I just ask that you drop me a line and let me know what you’re doing. I’d love to see it.