Saturday, March 29, 2014

Entering virtual environments

It's been awhile since I last wrote in this blog, and now I'd like to introduce what I've been working on during the last few years, after doing the one-week game project.

Shortly after that, in November 2010, I got back to work as a programmer for Blit Software, including mobile, web and desktop development. In all of these cases, I worked with applications that provided a web-based approach to retrieve data from a webservice. Then I worked with Unity3D on some augmented-reality game for mobile platforms: Drop Defender.

After a year, I moved on to worked at Digital Chocolate (Barcelona) as Lead Game Programmer, first in Galaxy Life: Pocket Adventures, then as Lead Tech Programmer in Battle of Heroes: Land of Immortals, an exciting project. In both, I got to work with a web-based online game that would perform a client simulation but would retrieve and update its progress with a remove server using web endpoints.

In both of these positions, I've had the opportunity to work with web services, which was a new kind of paradigm for me, even though these days it is a rather standard way of storing and accessing remote data. You build a front end that manages the user interaction and most of the logic, but then you get some significant data from a service, through an asynchronous HTTP connection.

Some time ago, while working at Tragnarion Studios, I got in touch with Squeak, an environment built on top of a Smalltalk virtual machine, an old project dating back to the 70s. I found this kind of environment enlightening, so wonderfully interactive, that I found it surprising that there was no other modern project with the same kind of interactive, edit-from-inside development environment. On top of Squeak, another team developer the Croquet Project (and then the Cobalt Project, now actively developed).

Finally, another project I got to work in Tragnarion Studios involved a multiplayer experience where multiple players would share a common experience across a distributed environment. That's when I learned how to work with replicated variables, remote procedure calls, and predicted, interpolated and remotely controlled behaviors. A deliciously interactive environment would replicate changes to its state across all players sharing the same simulation across a local, or global network. And that considering delays and all sorts of unpredictable network situations, is quite a feat.

Let me summarize these kinds of scenarios:

  • a client front end providing user interaction that will get its content from a server
  • a interactive environment for editing data and behavior
  • a distributed simulation shared among a number of player over a network

Now what I've started to think is: what if we took the interesting pieces of each of these approaches to a distributed interactive experience, and put them together with cutting edge technology, over multiple platforms? That's of course what I've been working on, and I'd like to share with you the interesting findings of this approach.

Of course the development of such an environment has been highly incremental, for basically each piece is built on top of the previous one. First we build (1) an interactive environment we can download from a website, then we add (2) some edition capabilities, then we (3) share it with multiple clients. It is this combination that brings us the full power of collaborative virtual environment.

(to be continued)

No comments: