Ben's blog
Software development, games, and all that jazz
Home
Archive
Posts
Pages
Search:
Edit Post
Title:
Body:
<p>So, I've done a lot of things since I last wrote here. Here's a waffly overview:</p> <p>I'm refactoring like a beast (a beast that's good at refactoring), and the code is now looking rather spiffy. It builds super-fast too. Though I haven't that much time available to work on the game, my time at work is helping me spot all sorts of new opportunities to clean things up, and increasing my C++ experience massively. I'm now at a point where I'm actually giving advice to others, and people come to me for my opinions and advice on coding matters. Yay!</p> <p>A few months back (I probably should have blogged this) I added in a few new input methods just for fun, since tapping an arrow key once per square was getting tedious. It's now continuous over a grid, which is nice. I tried continuous over a grid where the island spins with the left/right movement of the cursor too, but that just felt weird. I'd like to go back to that some time soon since it means you can use a much lower camera angle and expose more of the beautiful sky, rather than having ugly grey clouds in the background.</p> <p>I've also been getting rather geeky as of late; it all started when I bought a new PC (with the wads of cash I have lying around nowadays) and set up my old one with <a href="http://www.ubuntu.com/">Ubuntu</a> Linux to use as a server. I first set up <a href="http://subversion.tigris.org/">SVN</a>, served to the rest of my network via <a href="http://www.apache.org/">Apache</a>. That was pretty easy, and didn't really offer much more than I was getting already with a local SVN installation, so I added issue tracking in the form of <a href="http://trac.edgewall.org/">Trac</a> and <a href="http://retrospectiva.org/blog">Retrospectiva</a>. I'm mostly using Retrospectiva since it's a bit more simple and pretty, but the installation was a bitch and I'm finding Trac is more customisable to my needs. I'm definately regretting this now, since it seems that Retrospectiva->Trac migration is non-existant. Anyways, this has helped me properly document and catalogue ideas, tasks and so on, which is great. Instead of farting around for ages and ultimately implementing something completely unnecessarily, I can sort by priority and get on with whatever's most important. If I encounter something whilst coding, I can log it and carry on with what I was doing, rather than going off on a tangent and getting lost as usual.</p> <p>Next, since I could see where I was heading with all this, I decided to change the build process. I needed something cross-platform, fast, elegant, and able to support what I'm doing fully. I went through absolutely loads of possibilities, which all fell short for one reason or another - it seems that there's no clear winner when it comes to C++ build systems. <a href="http://www.gamesfromwithin.com/articles/0506/000092.html">Noel Llopis'</a> <a href="http://www.gamesfromwithin.com/articles/0509/000100.html">articles</a> were of great help in weeding out some otherwise tasty-looking options (<a href="http://www.scons.org/">SCons</a> for example - my team used this for a <a href="http://www.stereoshift.net/">university project</a>, but Noel's articles show it as painfully slow, which I'd agree with). I almost went with <a href="http://www.perforce.com/jam/jam.html">Jam</a>, but decided against it as the documentation is rather bad, and it's completely dead now so there's no hope of getting any support for it. In the end I chose <a href="http://ant.apache.org/">Apache Ant</a> with the <a href="http://ant-contrib.sourceforge.net/cc.html">cc</a> task from <a href="http://ant-contrib.sourceforge.net/">ant-contrib</a>, which is cross-platform thanks to Java, relatively fast despite this, has plenty of useful features and the possibility to add more via extensions, and has a nice (if very verbose) syntax - XML. I like the idea of using XML to specify the build declaratively, but I find that with a C++ project there are plenty of options that would be much better specified using a proper programming language. For example, the directories where external libraries can be found are different depending on the platform, and the names of those libraries are different depending on whether you're compiling in debug or release, which can result in a lot of conditional logic, something XML does in a very clunky manner. Anyway, the Ant buildscript is now working, and working well.</p> <p>The next thing I did was fix things to build CITS on Linux. This turned out to actually be quite straight-forward, even a little enjoyable. I found myself really getting to grips with the command line, so much so that in the end I was working remotely via <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a> rather than using <a href="http://www.gnome.org/">Gnome</a> on the server to do things. It's quite nice that if you discover you don't have some piece of software required for something that you can just use apt-get and have it in seconds, rather than loading Firefox, finding the project website, downloading it, extracting, installing, configuring and finally getting back to what you were doing beforehand. Also, ./configure, make and make install is more elegant than I'd assumed, and I like the idea of things installing to common locations such as /usr/local/include. Nice. So anyway, I made some minor changes to the code, fiddled around a little with building dependencies (<a href="http://www.ogre3d.org/">OGRE</a> was a bit of a pain, though building from scratch was *far* quicker than on Windows), and now CITS builds and runs on Linux!</p> <p><a href="http://www.flickr.com/photos/38367409@N02/3537978547/" title="2008-03-02 by b.hymers, on Flickr"><img src="http://farm3.static.flickr.com/2410/3537978547_92ca17d9a8.jpg" width="500" height="400" alt="2008-03-02" /></a></p> <p>So, what I'm doing now is setting up a continuous integration server in the form of <a href="http://www.zutubi.com/products/pulse/">Pulse</a> from <a href="http://www.zutubi.com/">Zutubi</a>. It looks to be a very simple, clean, yet fully-featured continuous integration environment, which provides exactly what I need and not a lot more, which is great. Once that's done the next system-ish thing I'll be doing is setting up <a href="http://en.wikipedia.org/wiki/Automated_testing">automated testing</a> (both unit and functional tests), hooked into the build and integration systems, and then I'll have pretty much my ideal setup!</p> <p>Now, you'll probably have noticed that this post has been one long geek-fest without any mention of real progress in terms of the game itself. Another thing work has made me realise is what a fool I've been so far - since I didn't have these systems set up to aid me I've only been able to see two feet in front of my nose and have been implementing all the unimportant things first. Really I should be tackling the high-risk, high business-value features first, to see whether the game is going to be any fun. As such, the next thing I do won't be to check out bloom again or add particle effects or revamp the state system, it'll be to get some people on the island. No more farting around :)</p>
Tags:
cities-in-the-sky
Body markup:
Plain Text
Textile
HTML
Markdown
ReStructuredText
Draft: