domingo, 8 de julho de 2012

Bitz in Time - Time manipulation gameplay

Before we begin, a little video to introduce the post:

"Bitz in Time" is a demo created to demonstrate the application of data structures in a time manipulation system. It was initially made as a college task for my Algorythms and Data Structures class, but it was challenging, fun and educational enough to make me want to keep developing it, adding Bitz to my list of personal projects. :D

So, what's on the video besides the awesome music?

The video demonstrates some of the applications of time manipulation in games and the sketch of a level design where the feature may be applied.
It's a relatively simple implementation and there is a ton of games that use it, so the immersion in the theme is deep and well directed. I ended up deciding to explore the path that seems to be the most common: combine platform, puzzle and time manipulation.
To craft the system, the implementation was more focused on the following elements:
  • Return the character's position and rotation: the base of the whole time shifting idea is to be able to undo your actions as you wish and that, obviously, includes the character's position and rotation. The level design showed on the video itself forces the player to use that property, since he needs to jump into a hole too deep to get to out to get a password and progress.
  • Return of the counters' values (life, gold, ammo, etc): "omg, I got hit by 15483548 enemies n Im almost dead, wut do I do?!!1!11!one!" You go back in time, the damage is undone and you play again, this time dodging the enemies and reaching the goal. It's like dying and having to start over, but you don't die and only do it if you want it. All the variables are returned (including the good ones like gold and ammo, to keep the balance), returning the player to a previous state of his choice.
  • Reinstatiation of the colected itens: as variables return, the itens that triggered their change must also return, reappearing in the position they were before collected. It was an MacGyver interesting implementation to write and was made in such a way that if I need to insert new itens in the game I have total flexibility to do it.
  • Return of the projectiles shot and the selected "weapon": I implemented as bonus a first person shooter system (probably a side effect of playing TimeShift) and as the variables and itens, the projectiles shot and the selected "weapon" return in time.

Those are the essential elements the form the gameplay. To polish the demo the following resources were also implemented: 
  • Return of the camera's position and rotation: because of the possibility to switch between third and first person freely, I thought it was important that the camera's position also returned, without that it was possible to move the camera during the time shifting, causing a really weird effect. In one of the games I used for immersion, Rose and Time, made in a mini Game Jam that resulted in the Indie Buskers Bundle, the camera system, although only in third person view, allowed the player to move the camera during the time manipulation. It wans't bad, but again, it wasn't in first person view.
  • Frame precision on the character's animation when time shifting: in an early stage of development I thought I would have some problems with the character's animation and I was partly correct. During the time manipulation Bitz should replay the exact movement he had done before, but now backwards. That involvendo manipulating the WrapMode, Time and Name of the animation. It took me sometime, but the system was prettier and more plausible.
The logic of the time manipulation resource is rather simple: record all the data you're gonna need in a list and, when you're gonna go back in time, just match the current data with the recorded one. Bitz records about 20 variables 24 time per second (20 times 24 = 480 variables per second), which made run into a possible limitation problem.

My biggest inspiration to create Bitz in Time is Braid, an indie game that combines platform, puzzle and time manipulation, but unlike other time manipulation games, Braid doesn't draw a limit to the player, you can go back in time as much as you want until the beggining of the level. Leave the game unpaused for two hours and than go back in time. As much as you want.
My ideal was to create a game in that model, giving the player the freedom to explore and experiment with time the way he wanted. But the freedom Braid gives players is based on the simplicity of the game, while my system records 480 variables per second, Braind records the character's position (in a 2D space), his current sprite, the current position of enemies and moving elements and their current sprite. Considerably less data to record and considerably less space to be occupied.

My solution was the logic one, re-think the level dsign models to make a game that, although limited the player, aloowed that he explored and experimented as much as he wanted.

The time bar above represents how much the player can go back in time. When full the character may return the equivalent to 10 seconds in time (number that will be expandable during the game through a store system, gears for itens! :D).

And last, but not least: the context.

B.I.T.Z or, in portuguese, Interdimensional Time Bot Z is part of a robot series whose origin is unknown (mystery, PAMPAMPAM) to insure the balance of the multiverse's timelines. That means he and the other Time Bots patrol different moments in history detecting and correcting paradoxos that could destroy or change drastically the existence.
B.I.T.Z was the last of the series to be created and was programmed to be responsible by the less significant sector of the galaxy. Sector Z. Which includes our solar system.
The insignificance of sector Z allowed Bitz to have a few centuries of peaceful existence in the dimensional lab Z (a fortress far from the reach of time and space), until mysterious events in his sector force him to go in an adventure through human history. That means Bitz will have to go through different ages of our existence, correcting paradoxes and preventing our extinction.
The level shown in the video is a tutorial/selection level. In it the player will learn about the resources he can use and will have to apply them to unlock the elevator that takes him to the time portals. Each portal shows how Bitz will look like on the time he will be sent to (in the video that would be the wild west and a space level).

That's it then, from time to time I'll post updates and ideas to the project and when I have something more substancial to show I'll post a video or a playable link. Any doubt, critic or sugestion, please, contact me. :)

2 comentários:

  1. otimo sistema.... fez no unity? javascript?

    1. Olá!

      Sim, como muito do que eu faço, o sistema foi feito em Unity. Mas a linguagem utilizada foi o C#, não o Javascript.