Thursday, 21 February 2013

Lighting and teleports

Hey Internet, so here is my second update after a week worth of progress. I've done a couple of things. First of all I wanted to make some sort of lighting so you can see if you are in the shadows or not. I thought it would be really neat to do this with shaders and set out do so. So what I made was a shader that calculates the distance to each light source and takes the minimum. The effect was ok, but diamond shaped rather than square like the grid. You can see the effect in the Figure below.

Lighting with shaders
So I wasn't really pleased, since the performance seemed to be quite bad, however that it something attribute to my sloppy code. I have had no experience with shaders and while slow and not what I wanted, I did learn quite a bit. So next up I tried another solution: an overlay. This was quite a bit faster and a lot easier to make. I simply take the bounding box of a map and draw tiles with an alpha value based on the minimum distance to a light source. The result of this can be seen in the figure below.

Lighting with an overlay
Hmm, we now have it aligned with the grid of the tiles but the effect is not as pronounced as before. This was because with the shader we can acutely make things brighter than they are. Now we can only make them darker. However, too dark and you cannot see the player, so it's a bit more difficult to really get those layers. But this is good enough for now.

As you might have noticed, I'm on a map which is on the inside of a building. And you are correct. I made the option to load a new map when you hit a certain spot. That way you can move in and out of buildings and so forth. I call it a teleport, which is sort of a remnant of how it was called in RPGMaker and how I still think about it, and most of all, it describes what it does, right? So if you move to the door on the bottom (where the light is coming from) you 'teleport' outside to the original map.

Outside of the room, with global lighting
As you can see, it is light outside so we don't need to shadow layer. I can just set the maximum about of shadow per map in the editor (I added a slider). Speaking of the editor, in order to place lights and teleports, I extended the editor to support this too. You can now drag a square with the light tool to create light areas. Another is the teleport tool which, when used, lets you select a map file and position from it with a special pop-up window.

Lights tool
Teleport tool
So far my progress this week. Furthermore, I decided to make this a one-month project where I get as much stuff done in about a month. I think I sort of rushed into this idea without too much thought (as usual) and seeing things blow up a bit before I actually have a finished game. Nonetheless, I plan to make it at least playable. So what I will be adding is at least some gunplay where you can shoot some of the lights and maybe some NPCs. I was also thinking of implementing path finding using the A* algorithm for some basic NPC movement since this is something I will need at some point and it's a good learning point. But that is something for future blogposts. See you then, internet.

Wednesday, 13 February 2013

The beginning, the game (Part 2)

If you haven’t read the first part, I recommend doing so. It contains some background information about me. Or if you are just curious about what I’m making; Read on!

What I’m planning on making is a stealth game where being detected is usually punished. So the main features will be hiding in shadows and finding alternative routes to a target. To goal is infiltrate some area, assassinate a target and make a clean escape. You might picked up on it, but the main inspiration comes from Assassins Creed, but with more planning and less attack power. I really enjoyed to bits of gameplay where I carefully planned my attack by seeing patterns in guard behaviours and the schedule of my target. This is what I want to recreate on a much smaller scale. I want to give the player the ability to blend in with crowds to get a bit closer to the target and navigate terrain by sneaking around, either via air ducts, sewers, secrete passages or simply the roof. Furthermore, I was planning on different ways to eliminate targets. Simply close range with a dart or with poison. Maybe explosions under a room or sniping from a vista. In all cases, different tactics apply but one feature is present in all, stealth. In order to get close you need to either get rid of guards or not rouse any suspicion as to your motivations. When sniping, you need to scout for vantage points and see when to where to place and ideal shot. So with all this, I distilled a list of features that I think would realize this gameplay:
  • Stealth movement, so visibility with respect to how far away you are from a light source.
  • Stealth takedowns, so you can get rid of guards or your target.
  • Move bodies, so other guards don’t notice somebody is missing
  • Escalating AI, so when you mess up the AI will react more aggressive or stressed out
  • Shooting lights, remove a light source like in splinter cell
  • Simple shooting, very limited. Maybe pick-a-target-and-shoot simple. This also goes for snipers
  • Open terrain, so you pick how you get there. There should be multiple ways into a building. (Front door, roof, basement, air ducts)
You might think this is starting to become quite a big project, something I want to avoid. And I agree that this is becoming ambitious, I don’t want to make a simple platformer or puzzle game. As I said, I want to make something I like to play, which happens to be involve adventure and actions. However, I have a plan to make it a bit more manageable.

I am planning on making this in a 2D retro game like Chrono Trigger, Final Fantasy 6 or even the Pokemon games. This severely cuts back to work in assets and animation as well as how much work goes into actually moving about and such. Using a tile based environments will reduce complexity even further. ‘Lighting’ can be done by simply overlaying an alpha texture and ‘real’ light sources will be very few, which makes it easier to compute your visibility. So while it might not be the next Assassins Creed visally, I think this is just enough to get the gameplay across and still be fun to play.

So at the moment of writing I’m nearly 5 days in this project and already have some noteworthy progress. First, I decided upon using libGDX as a graphical framework to use, mainly because it also provides a nice 2D scene model which should eliminate some of the OpenGL headache when dealing with 2D graphics. libGDX also is a JAVA framework, which is what I have most experience with, which I can actually make a game with.

Secondly, I’ve started working on basic movement, collisions and sprite animation, which will be the basis upon I will make this game.

Thirdly, I’ve made some assets which, to me at least, look good enough to give a reflection of the mood of the game. I like to keep it dark tones at night, which will be my first prototype. Maybe I’ll add other stuff later on, but for now I will stick with this. Maybe when I progressed further I will redo these or even get somebody to do it. But that is something for later.

And finally, I have made a tile editor to create some maps. I know what you are thinking, “What about Tiled?”. I am aware that this is neat little map editor, but I have little experience with it and I want to make sure that the map editor can produce the data I need. One of the things I need is a collision map which also includes some notion of high, since I want to include basic jumping and climbing. While it might be possible with either special layers or plugins, I decided it was not worth the time to dive into this and was better spend making my own. On top of that, I had previous experience with making applications and even map editors (yay for failed projects). So after 2 days I had a decent map editor which suits my needs, including a low overhead map format for storing data.

So all in all, good bit of progress which I hope to keep up until the end of the week. Afterwards, it is back to work on my graduation and no longer have a vacation. Well that is it for me, I will have news soon and will keep you posted!

My self made tiles

The current editor, the green is the collision map

And the game using the map made in the editor

The beginning, the developer (Part 1)

Ehm, hey there. Welcome to my little game development blog. Here I will be documenting the development of a game I’m making and will hope to give some insight into the things that go into making this game.

So first, before I’ll explain what game I’m making, some information about me. I’m Yannick, age 24 and a student at the university of Eindhoven in the Netherlands. I’m currently in the process of wrapping up my graduation and will (hopefully) have my Master of Computer Science and Engineering degree by the end of March this year. I started making games in my early teens with a wonderful tool called RPGMaker 2000 and later with its successor RPGMaker 2003. This was my first experience with making games and it was my first encounter with game creating and especially scripting, which got rather good at to a point where I was replacing some of the build in systems with my own custom ones. But as knowledge grows, you seem to hit the limits of this tool. This became even more apparent when I started studying for my bachelors I acquired real programming skills and started to fiddle around with languages like Java, Action Script 3 (Flash/Flex) and Python. I would make small prototypes which were horribly slow and clunky, but these helped me progress. In the years I was messing around, I was usually starting projects and putting them away again, but I was learning some important things. First, make something you actually want to play; Breakout clones are not fun to make after a first time. And secondly, don’t make huge games (obvious right?). Too many projects (even with a team) failed because the intended end product was just to large of a scale. When the sparkle of a new project wears off, you still need to conquer this massive amount features and then the motivation begins to decline and eventually drops to zero. Which at that point the project is put on “hold” as most say, most of the time never picked up again.

However, when a project fails at least I learned something and each time I started I knew more than the last time and actually got further each time. So here I am again, stronger and better prepared than every other time and willing to see it through the end. So here is the plan, a small game with not to complicated art and a small set of features. I don’t want to spend too much time on the basis, I just want to make something playable.

Hmm, this is getting longer than expected. I’ll make two posts, so this can be archived better. Which means: The beginning, the game (Part 2).