Engine progressing slowly but not-so-steadily..

Once again, I've been improving the platformer engine. I have done a lot of internal restructuring which isn't directly visible on the screen. Remember, this project started as a quick hack testing JBox2D, so the oldest parts of the code were a total mess. Cleaning it up, I implemented modules, that the engine keeps processing. These modules (e.g. GameModule, MenuModule, OptionsMenuModule) are basically separate states and can be ran separately of each other. They also support transitions, so a title screen could fade into the main menu, which could then roll off the screen presenting the actual game. Currently I have an initial loading screen that fades into the game. Yes, all this doesn't sound very exciting (and in reality it isn't), but it makes the code much more cleaner and modular. Hopefully, one my biggest pet peeves — which is writing the menus after the game is complete — will be a more pleasant experience with these module supports in place. 🙂 I still have some old physics related code there which needs some refactoring love, so there's still work to be done..

I also did the different rendering path thing I was talking about earlier. The best rendering path allows for some neat shader effects, I did initial tests with a distortion shader — it was nice but didn't work with the bloom effect, something I hadn't realised before. I guess I will need to implement somekind of a post processing subsystem, that does the bloom among other effects. Oh well. 🙂

Another thing I added is an ingame profiler. While extremely simple, it still presents some very useful data so I can see what part of the game takes most time at runtime. So far the slowest thing is the text rendering. Luckily that won't be a problem, since I don't plan having much text on screen in the game (apart from dialogue, but that can be prerendered into a texture). In the current demo I draw the yellow text with a nice shadowy border around it — that is a very brute force approach which just draws the same string a bunch of times. That's very slow. Also the text rendering could probably be optimized more, should the need arise.

I've been also improving the controller support (yes, the game will support game pads! That's the first time in my [released] games — better late than never, right! 😉). The basic support was actually added months ago, I just forgot to mention about it earlier. It's still pretty much unusable, since the buttons cannot be assigned: it just uses the first two buttons on the game pad. And that varies per model, a lot. On mine they're positioned logigally, but on another pad they were almost unusable.. So the game needs a controller configuration screen, where the player can assign the actions to the preferred controller buttons. But that's thinking way too much ahead, I need the game first! 😛

One more thing: I made a simple test release of the engine, so that I could collect some data on how it works on different machines. (I mainly test it on two computers, which isn't that much.) Head over to the JavaGaming.org forums and take it for a spin! Hopefully somebody confirms it works on Mac OS X as well.. 🙂 [Update: Yes it does!] By the way, I will probably take the thing down in some time, since it's still in very early stages and doesn't have any gameplay in it anyways..

That is all this time, stay tuned for more! EDIT: I just realised I had used this very same line to end the previous posting.. Am I really this unoriginal!? Apparently, yes. Yes I am.

Platformer progress

After a long break I've started working on the platformer engine again. I've added a material system, where every level shape (i.e. polygon) has a material assigned to them, which defines the texture and physical properties (friction, restitution and density) for the shape. Later on this could be used to trigger different sounds or other effects based on where the player walks, for example.

I improved the lighting system to support rotating lights and finally enabled them to be placed to the level in Inkscape (the lights were previously completely randomly generated). To test these new features, I abandoned the ugly mess of a test map I had been using from the start, and built my first "real" level. It's not too detailed yet (and yes, ugly in some points too!) but at least it's better than some random polygons. I do plan to expand it to test new features as they get implemented. Check out these screenshots to see the brand new level in action. 🙂 Disclaimer: All the textures etc. and even the whole style are temporary and not representative of the final game (if I manage to complete it some day), purely because I have not decided on the final style yet! I may opt for more stylished visuals, as in not using "realistic" (photograph based) textures, contrary to what you see in these images. But as I said, I'm not sure yet.

Speaking of new features, I added support for "floor shapes" – shapes that act as a floor but not as a ceiling. That means you can stand on them but jump through them only from below. You can also drop down when needed. These things are so common in platformers, so I had to have them in. Unfortunately I had to restrict them to be straight horizontal lines – "floor lines" like I call them in the code – due to technical difficulties with the Box2D physics. At first I tried doing this with Box2D sensors/contact listener but it seemed like a bad hack and would probably have not worked correctly in some cases, so I deemed it too much trouble and went for a simpler approach. My biggest gripe with Box2D is actually the contact listener, it's somewhat hard to use it nicely..

One of the things I'll start coding next is sprites, which will be used in several places: as normal level decoration, level decals, in the background and so forth. Currently everything you see is crafted from polygons, which is wasteful on the resources. In the current test level, at least the mailbox, arrow sign and mushrooms should be sprites.

That is all this time (got to run to the school soon.. 😐), stay tuned for more! 😉

On Fallout..

Last week I finished Fallout 3. I somewhat rushed it through, as the urge to start playing Fallout 2 had grown too strong! 😛 I probably continue playing FO3 from an earlier save later, since I had heaps of places I didn't get to visit and a good deal of unfinished quests as well.

So what do I think of the game? Well.. It's a great game – much better than Oblivion, for example – looks great and sounds great. I enjoyed my time on the wastes a great deal. But… how could I put this… It's not Fallout! 😐 While there are plenty of things done right (the VATS system works quite nicely!), it's still missing much of the good old Fallouty spirit.. The biggest problem is the dialogue: it's just not that good, especially when compared to FO/FO2. NPCs feel like answering or quest machines. Where's the humour? Not much of it left. The ending was not very good either, although not as bad as some people claim it to be.

Nevertheless, as I said, I enjoyed the game a lot, and will be playing it again. 🙂 Perhaps they should've called it Fallout: Something something something, though. I had a few problems with the game: three freezes (two of them while approaching Evergreen Mills) where I must restart PS3, one crash and several little (graphical / physics) bugs. Not too bad, I guess. Lots of PS3 players have complained about worse problems.

And after completing FO3, I've been playing FO2 again, after many years. As I mentioned in my last post, I never actually finished the game and have held FO1 as the better game. Let's see if the order changes after I finish the part two. It's very hard though (at least in the beginning), much harder than I remembered. I think I've hit a bug though (I'm using Killaps unofficial patch 1.02.25 – highly recommended, I've yet to try the Restoration Project), skip the following paragraph to avoid FO2 spoilers.

*SPOILERS* I cannot seem to be able to give Bishops holotape and the Raider account book to Lynette in Vault City. I wiped out Bishops in New Reno, found the holotape in the safe. On my way to Vault City, I cleaned out the Raiders cave. At Vault City, I can tell several people I've neutralized the raider threat, and they say I should tell the First Citizen, but I cannot give the account book to Lynette. Nor the holotape. I tried before doing the Gecko power plant quests and after – doesn't work. Oh well, I guess I cannot complete those quests then. *END SPOILERS*

Now I just need to plug GOG.com, the Good Old Games! The service is excellent, so far I've bought FO1, FO2 and Gothic. The games come prepatched and DRM free, it's great. 🙂 Good stuff, highly recommended.

Holidays and gaming

First post of 2009, yay. I've been taking a break from, well, almost everything: school, work, programming (yes, even that!) and instead spent time with family, playing games and being lazy in general. Isn't that just what holidays are about? 🙂

I have played lot of games lately on the PS3, mostly Little Big Planet and in these last few days Fallout 3. Little Big Planet is really fun, especially when played together with others (in my case that means my fiancée Annemari <3). The Little Dead Space level was brilliant.

As for Fallout 3 (got it for Christmas), I'm very enthusiastic about it so far. * Feels a lot like Oblivion in places, but that doesn't bother me since I like Oblivion. My current Oblivion save has almost 60 hours put into it, and the game isn't nearly finished (I'm currently on the Shivering Isles expansion). The main quest is a bit dull, I don't like cleaning the Oblivion gates (hence Shivering Isles).. Fallout 3 on the other hand seems much better and more interesting. Maybe that's because there are hundreds of games in the generic fantasy world but only a handful (I'm only aware of Wasteland and Fallout 1 & 2) in a post-nuclear environment. This time Bethesda even hired more than three voice actors, wow! The game looks and sounds great, obviously. I guess I'll comment it more after I've finished the game.

After I'm done with Fallout 3 (not too soon, I reckon), there's a lot of unfinished stuff to play: GTA IV, Oblivion, Lego Batman.. 🙂 In fact, I might even start Fallout 2 again, as I have never actually finished it(!). The original Fallout I've finished with at least three or four characters. Good times.

*) Yes, I'm aware the PS3 version is the worst of the bunch. However, it has trophies now and I haven't had any problems so far, apart from some minor bugs like a severed molerat head that just couldn't stop rolling around. The lack of anti-aliasing is a bit distracting, but nevertheless I can recommend the PS3 version… unless you got other options. I didn't (my PC is a bit too old).

Random things..

Before getting carried away with the platformer rambling, again, here's something about PolyAnim. Yesterday I added automatic polygon triangulation for concave polygons into PolyAnims LWJGL-renderer. This is mainly for convenience, since the triangulation is quite expensive – it remains to be seen if this is fast enough for more general use. At least with simpler scenes it might work alright. Convex polygons should still be preferred for speed reasons, but I admit it: they're major pain in the ass when animating. It's cumbersome to build and animate non-convex shapes from several convex pieces.. Hopefully somebody will contribute faster triangulation code at some point! 😉

What else.. I've been working a lot on the platformer engine. JBox2D got an update, so I ditched the old polygonal approach (which had a lot of problems, as Box2D is very picky about the shape of the collision polygons) and implemented the collision geometry using the new feature: edge chains. They work nicely and are just perfect for this kind of usage. I use triangulation with convex decomposition now only for the renderer, which luckily doesn't mind very thin triangles. I've added more eye candy as well, generation of level outlines and support for background/foreground polygons (which are not collidable, of course). I still need to implement other decoration elements, such as a stripe of grass blades running along top edge of things, for example. Parallax scrolling is something I want to have in too, I mean, if you're making a side scroller, why shouldn't there be parallax scrolling!? 😄

And finally I did bite the bullet and implemented those damn PBuffers (enjoy the picture there, that's them buffers giving me hard time!). They work okay when FBO is not available, but they're yucky to code. Luckily LWJGL makes it a bit less painful than it truly is. Looking back, in Funguloids things were almost too easy, as I had Ogre at my disposal! Along with PBuffers the thing now supports plain old frame buffer copying as well, though I couldn't be bothered to make bloom work with it (lighting does, though, which is more important anyway).

While fighting with PBuffers, I noticed I could make the bloom much faster and more importantly allow for more shader effects if I used RTT (render-to-texture) same size as the screen dimensions. I could then render the scene only once to the RTT (currently I have to render twice!), have bloom shaders use that and actually do the final additive composition in the fragment shader too. Having a screen sized RTT would allow some neat shader effects like screen distortions and shock waves. There's one problem, many cards don't support rectangular (non power-of-two) RTTs.. The solution: separate rendering paths. I would implement several render paths with varying amount of shader and RTT usage, then determine what the host system supports and have things running nice and solid. Sounds like bit of work to me, but I guess the end results would be worth the trouble. We shall see. 🙂

Oh, and I've finished my bachelor's thesis, like a month ago. Forgot to mention that earlier. 😛 Now I'd need to decide if I continue to write master's thesis on the same subject, or choose something completely different. If only I could think of a subject having to do with game programming, that would certainly help with the motivation..