BoxBots

Actually, this game is slightly earlier than BattleShades. I was playing around with libgdx and Box2D physics engine and decided to make something “driving and shooting” style. I managed that and then I decided to restructure code a bit to make modular and stuff and ended up not reaching the previous functionality. Although you can nicely drive and at least spin up the miniguns on top of the awesomely drawn combat vehicle 😀

Controls are: Arrow keys for driving, Space for spining up weapons.

Unfortunately, for some unknown reason steering is not working from up start. Try to relaunch if it doesn’t. I might some time return to this thing to play around more…

Current binary is here.

BattleShades

Once upon a time, a small idea for a game popped into my head. One or two evenings later I have realized that it does not pan out as I was expecting (and imagining) in my head, but something was already produced.

Idea is rather simple: You start as a colored fighter (box yeah!). You fight against other colored fighters. But the fighting is technically “stealing”. You steal the color from another fighter. How much and what kind of color you steal depends from both fighters in clash.

Unfortunately, gameplay was not as dynamic as I was expecting 🙁 And the current state is a crude prototype, no gui, no menu, no nothing…

Controls: WASD for movement, mouse for aiming, space for shooting.

Binaries you can get here.

While source is available at my Bitbucket repo.

Spherical Harmonics and Tanks

Alas, the first year of my master program has ended and I have decided to share one additional project I have been working on the last half of the year.

Actually, the course that I want to talk is Advanced Computer Graphics, which was extending through out both Study Periods of this semester, thus I am posting about it just now, when it is finished.

The course was essentially about doing a project work in a field of computer graphics with a chosen topic. And I chose spherical harmonics, because I was fascinated after our teacher introduced it. How powerful and fast it could be to make nice effects, such as world-space ambient occlusion and inter-reflection. Thus I have been working ever since the first seminars of this course in the end of February.

I’ve decided to try to work with OpenGL wrapper for Java – LWJGL. Thus I was able to work quite seamlessly both on my Windows and Linux installation (which I switched quite often). To begin with, I’ve wrote some helper classes to hold the information about vertices, vertex array objects and so on. But then the first problem occurred – I couldn’t find a decent model file loader for Java. Thus, I wrote one myself. I’ve spent quite a lot of time, but I wrote an OBJ file loader including with materials and textures. It is not fully finished (e.g. doesn’t support smoothing groups and such), but it was and is working for my needs. Later on I’ve implemented the classical rendering (the switch between classical and spherical harmonics could be seen in first part of the demo). I did that because I wanted to have some kind of point of origin, with what I could compare results of spherical harmonics (SH) rendering. And I wanted to test my OBJ loader without delving deep into SH calculations. After I’ve completed the classical rendering and OBJ loader, I’ve continued to work with implementation of SH.

I am not going to explain all the mathematics behind the SH because even for the course mates it was boring 😀 Thus I will tell what I have done with SH implementation. First of all, I’ve implemented all the methods required to calculate and use SH, but then, with increasing complexity of models, calculation times were going over the top. To construct SH for simple model with <1000 triangles would take about a minute or so. Thus I proceeded with research and implementation of ray tracing acceleration structures. That is construction of SH heavily relies on ray tracing from each of the model’s vertices. Because I’ve already had a small class representing axis aligned bounding box (AABB), I’ve decided to go for hierarchical AABB acceleration structure. According to my research it is not the most efficient structure, but it was efficient enough for me. After I have completed that, super complex models with hundreds of thousands triangles would be ray traced in a matter of minutes, thus it was sufficient enough. But still, the result of ray tracing is more or less pre-processing of the model.

That is why I have implemented SH saving/loading. Very simple and plain text format (I was inspired by OBJ format, thus very similar) which stores all the coefficients for SH for a certain OBJ file. If SH file is not found or is not representing the OBJ file (hash check! 🙂 ), all the SH harmonics are recalculated and saved again. This literally reduced pre-processing time almost to zero. Because of some complex models and high amount of spherical harmonics data, sometimes files with SH coefficients exceeds hundreds of megabytes, thus it takes a bit of time to load them up.

So, after core technology was done, I headed for the implementation of somewhat of a game. Downloaded several freeware models, created some myself. Created some what system for having complex models with separate parts, implemented interface, AI for enemy tank and even added fog effect so that background would blend seamlessly. I was almost ready to go. Almost.

After the supervision it was suggested for me to make something more, thus I have additionally implemented a skybox. It was rather easy to implement, but actually I was impressed about how it changed the feeling of the game. Because the skybox changed the ambient color of the background, I had to change the color of the fog and tweak the fog itself, but it was worth it. Then I have continued with the most interesting suggestion for me – screen-space post-process pass for volumetric shadows. Technically  it is simple radial blur, but after some struggle with framebuffer objects I have implemented it and combined with the skybox it ended up to look super cool. At last, as a final touch I’ve added some textures to make it less plain and a small bar for displaying player’s health.

Below you can see the tech demo – a small video which I have compiled out of all small videos which I’ve taken through out the development.

And here you can download binaries:

ACG project binaries

And if you want to take a look at the source, it is here:

Drags’ ACG project @ Bitbucket

Steam Fortress 2

Study Period 2 is nearing to it’s end, thus I decided to post about what I’ve been doing. Well, I’ll post only half of the stuff what I have been doing, because the other half is still in progress as one of the courses I read this SP is going to span over the next SP, too.

So, what I was doing? Simulation Engines. Course where we were supposed to build a simulation engine. We were working in teams, quite large, I would say. My team was made out of 6 members. After initial discussions we decided to make a fun “build and shoot” game, where you have a cannon, which you shoot, a heart, which you protect, and a bunch of building blocks which you use to protect your heart. Oh, by the way, each member had to implement different part of the engine, and in our case, those parts were software engineering (gluing part), artificial intelligence (smart part), physics (realistic part), graphics (cool part), multimedia (sounds and GUI part) and networking (social part). And I was responsible for the social part, networking. My extension idea and purpose was to create seamless connection between players, so that there would be no hosting or joining, nor lobbies or master servers. But that’s enough of talking. Here are some screenshots. And, of course, download links are below.

EDIT: oh, I forgot the gameplay video 😀

Cannon Ball

aiss copy

ai shooting

ai miss ai build ai fire!

Downloads:

P.S. If you wonder how you can play with another player over network, just start two games on the same network. Second player will automatically connect and replace AI 🙂

Void of Hate

Several minutes ago Fuck This Jam has ended. And I have managed to create and submit something. That something is of course Void of Hate, which I’ve described several days ago. But this time, I’m showing not just screenshots. Like these…

 

Planet View

Title screen

Combat

Unfortunately, because of various reasons finally leading to me, this game is far away from finished. Turrets in planets are not shooting, research options are vague and AI is as I call “Brownian Motion AI”. Oh, and by the way, there is no resources (so everything is free!), some descriptions missing. Moreover, … ah, what a hell, download and check it out yourselves.

Download Void of Hate

Cities and Towns

I can’t remember the story of this game, how it came up to my mind. But it just happened. And several evening later, here you go.

Idea is very simple – you have town, some inhabitants and time. Working, building, growing and so far. Of course, user interface is not much of a master piece, but it works. Rules are quite simple, too:

  • Every single unoccupied inhabitant produces 1 food and 1 gold per day. (+1 food, +1 gold)
  • Every single worker produces 1 resource and eats 1 food per day. (+1 resource, -1 food)
  • Every single soldier eats 1 food and gets paid 1 gold per day.  (-1 gold, -1 food)
  • Training soldier costs 1 gold, wood, metal and stone.
  • You can retire (untrain) soldiers in order to conserve food/gold
  • Occasionally town will be attacked by foes. Have some soldiers.
  • Details about every building/technology can be viewed by clicking on it.

Download:

Cities and Towns 2

This game is a follow up from pervious game. Just we had a project in Visual Basic course and I wanted to remake this game. Easy and quite fast, not that advanced in gameplay mechanics, but “better” graphics and user interface 😀

Further more this version includes save and load functionality and if you start a new game, you get a random map each time. But only problem is that you have not much to do around the game 🙂 Pity, maybe some days later I will continue…

 

Cities and Towns 2 for Windows

 

Packer2D

Once I was trying to make something from plywood and I had to cut a lot of rectangular pieces. I didn’t want to go blind and draw all the pieces on the plywood randomly, thus I’ve created this small program to try to find not the best, but at least better solution to my problem. Because I wrote this “tool” for myself, no user interface or anything else. That’s why source is available, too 🙂

Packer2D
Packer2D source