Tuesday, 18 December 2007

Wasting Internet Space for the Good of Mankind

New Blog. Clean Slate.

This will be home to rather random blatherings, I'm afraid. I had thoughts of doing some kind of proper blog, with unique insights into design, and rants about various shit which fucks me off. Perhaps they'll come in time. For now though, prepare to be disappointed, and hopefully, bored.

I'm starting to get back on the horse after 6 months of depression, self pity, spiralling anxieties, 6 different kinds of antidepressant (none of which helped), and on-going psychotherapy. My mother isn't being too helpful about this. She's concerned that if I spend any time whatsoever with a computer that my obsessive streak will grow again, and in a couple of years time, I'll be back in burnouts' ville, contemplating quick roads to suicide. I don't think that's going to happen again. If I can grow some self confidence, and a willingness to be a bit more selfish (or "self-full" as my psychotherapist would say), I'll be able to muddle out a bit more of a balanced life style.

I've been looking at a way to get started on small games again. Recently, good ideas have been coming thick and fast - I'm finally rediscovering the creativity-driven endourphin rush which I used to crave so much. However, I was without any kind of easy platform to put these things into play. I tried a bit of Flash, but it was a little too alien to me. Other systems weren't quite empowering enough when it came to deeper manipulations of geometry, shaders etc.

I talked to my friend Haowan about this, and he reminded me of XNA. For a long time, I wanted to try it out, but just forgot that it existed for so long. We had a look at XNA for goo, but couldn't really use it because Goo required as much horsepower as possible for the processing of physics. We guessed that C# would be slightly less efficient than a C++ approach. During Goo, I got to use XACT - the sound tool which comes with the DirectX SDK. It was a real joy to use - very straightforward, but still extremely powerful. The assumptions it made were rational ones, which belayed my fears (middleware can so often make assumptions which cripple your expression) and XNA seems like it's the same way - lots of elements are wrapped up in neat packages, but very smart decisions have been made while doing so.

I've had a few teething problems just collecting the resources: my development machine isn't online, and it took a while to find the non web-based version of Visual Studio 2005 C# Express Edition. After ducking out of Christmas socialization at every opportunity (and there's a lot of opportunities when everyone's looking after their wailing babies), I was able to nurse my constantly disconnecting modem/satellite connection, and nabbed it in under a day - a christmas miracle!

So far, I've only put together some really basic "hello world" equivalent programs as I learn the XNA api. As I say, it's put together wonderfully, with things like interface access being very immediate and easy, graphics windows working out of the box, and lots of other lovely standardizations to look into (excellent documentation, too). I noticed that the equivalent for "deltaTime" (time since last frame) is actually a full class, which records elapsed game time and elapsed real time separately, so that messing with your game speed for bullet time effects becomes a no-brainer. Not only that, but you can get it to report the time in Hours, Minutes, Seconds, Milliseconds - formatting's right there for you, so that there's less confusion. I can't wait to have more time to study it.

I've got a couple of projects that I'm hoping to prototype. One is an Arc based zooming user interface - sort of a radial interface which you can "dive into"... like Dasher (cool parts of that video are at 25m and 40m), but bent into a circle. I was trying to do the same thing with Goo's menu. Unfortunately, I spent a long time thumping my head against a brick wall with it, mainly because the idea I could see in my mind's eye was kind of distorted, and didn't exactly fit reality. Here's a video of an early version of the old interface.

In that video, it's hard to see the problems we encountered (because I didn't dive very deep, exposing some obviousl flaws in portal placement and unwrapping), but, eh, trust me: It wasn't working. Tommy eventually had to abandon the menu. I don't blame him - it was a big risk area, and one which didn't work out... not in time, anyhow. We were stretched as it was, trying to make a pretty risky game design work. Having a novel menu on top was maybe a bridge too far.

Still, I believe the concept can work, and learned a lot from the failures. The problem, I think, was that I was trying to scale these individual portals up, but only with one metric - overall scale. What I really needed was something which could deform in two dimensions... in this case, it's arc breadth and arc thickness. I wanted to do it all in an indiscrete way, rather than just having you tween between prefab portals - just having a faked animation between each portal would have been easy, but I wanted to do it "for real"... so the hierachy distorted in real time, as you moved through it. Proved to be too tough to me, and probably a fundamentally flawed approach using circles. Sorry. Hard to explain

So, the new one is going to be rather different. Rather than plunging into expanding "holes", you'll just be diving into arc segments which grow and wrap around into an almost total circle as you approach them. Then, within each arc are more, smaller arcs, and so the growth occurs recursively until you hit a leaf in the option tree.

I don't know what I'll use it for yet. As well as typical right click menus, or simple game front-ends, it seems like it'd be useful for the exploration of deep and broad hierachical selection... creating a Toy Language interface might be a good way to go with it. It's been on my mind for ages. More about that another day.

The other thing I want to do is a pretty quick, simple music based shmup, which I'm calling "BeetRoot". It will only use two buttons (left and right, which also "fire"), but the game will generally encourage you to use these buttons to tap out a rhythm. Repeating the rhythm, or placing beats on the down-beat, or semi-beats results in stronger/more interesting attacks. Attack patterns coming at you will be defined by the rhythms you tap out, so it'll encourage you to keep a "chorus" going, and occasionally throw you a wobbly so that you can throw in a bit of a drum roll come down.

Yeah. I got lots of ideas for this, but for once, I'm not going to do too much planning up front. I'm going to give the Jon Blow approach a try, and just do whatever springs to mind, and see if it works. I think I'll be able to explore XNA a bit faster that way, through experimentation and practice.

3 comments:

Jean-Paul said...

Holy PINK!

Good to read design things from you again. Best of luck. I'll be around if you need anyone to bounce ideas off.

JC Barnett said...

It's bezzness, it's bezzness time. Bezzness hours are over, bay-beehhh!

Glad to see youre back in the saddle. Did I say saddle? I meant harnass.
I'll update my blogroll next time I can be arsed to.

Bez said...
This comment has been removed by the author.