perfectstorm is a real time strategy game study written in common lisp using OpenGL for graphics display and cairo for texture generation. It is in active development with many of the basic features still unimplemented, but i decided the effort put into it justifies some public documentation.
I started perfectstorm because i was annoyed with the Artificial Intelligence offered in most commercial RTS games. Although significant academic research is going on, it seldom finds its way into released games due to publishers’ wishes for absolute stability of the “gameplay experience” and the notion of AI as just being responsible for pathfinding plus something. Naturally, AI development can only begin late in the development cycle when the deadline is nearing. The most pressing feature the single “AI guy” most teams employ has to do is implementing pathfinding, which is not even part of AI if you want to see it that way. After that, only a poor makeshift enemy AI can be implemented before the product is shipped. Aside from that, writing good AI is hard. Or so i heard.
Most of the academic AI research going on seems to be tested on ORTS , which seems to be decent and alive. Since i wanted to learn about general game coding and graphics development i decided not to use ORTS and write my own. And of course, i wanted to use lisp since i had not done a serious project with lisp and wanted to test its capability (and mine) to cope with heavy library interaction and larger real-world projects. The name “perfect storm” is a metaphor used to denote the interaction of several different parts to maximum overall effect, something i want both my RTS units and my code to perform :)
For graphics, i first tested SDL, the 2D part of which turned out not to be hardware-acceleratable under X11. OpenGL was the only alternative and — thanks to the excellent cl-opengl bindings — is very easy and fun to use. Now i needed textures and decided i wanted a defcon-like slick minimalist-but-pleasing look. No complex models or realism was needed, so i figured drawing nice antialiased primitives and gradients would be enough and settled for cairo. While cairo is certainly not fast enough for drawing life animations, it produces very nice output and is reasonably easy to use, although the cl-cairo bindings are a pain (i hear that with cl-cairo2 and cl-cairo-cffi two alternatives have emerged). After spending quite some time setting everything up and finally successfully extracting pixel data from cairo i started defining first units and implementing dummy game mechanics and graphics.
Since then, the game has grown and, with the developer count rapidly soaring up to two, includes the following features:
- User-definable units and weapons that can be plugged together
- Object-oriented very open design
- Some 20 different textures, with the possibility to add more very easily
- Fragment shaders for nice glows and flickering laser beams
- In-game developer console (aka REPL)
In the near future, i’d like to see the following things:
- Steering behaviours for units (currently work in progress)
- A first easily replaceable resource scheme
- More verbose GUI
- Dummy ai for first playtesting
You are welcome to try it and play around if you like, or even contribute something.
Currently, the svn version is not guaranteed to be in any usable state or even to compile. Since we are more or less concentrating on one feature at the time, it is likely you will see some debug output concering the current development focus when just starting it. Dependencies are listed in the README file. You can check it out from svn://erleuchtet.org/perfectstorm. You will need both the cairo and OpenGL bindings from the same svn repo since i added some features that are needed by perfectstorm.
But beware! the current state is not that presentable: you’ll just see pathfinding debug output at the moment. When a first dummy is playable and the code is cleaned up a bit we’ll make a project page.