Xaya 3D Adventure Game Editor & Engine

Objective

I am not a gamer. At least that's what I thought - until I encountered Myst back in 1995. I was completely struck by the beauty of the virtual landscapes and architecture, the enchanting music and other acoustic effects, and the underlying idea in general. I really embraced the idea of a game in which you could just take your time to spend as many thoughts on a problem as you required to solve it and wouldn't loose life after life if you didn't react within miliseconds on computer-generated threats.

I also played (always together with a couple of friends, 'cause it's much more fun not to spend a nights in front of the screen alone. Furthermore, I suppose none of us would have been able to come up with solutions to all puzzles by him-/herself...) Riven, Exile, Zork Nemesis and Schizm - but unfortunately games of this kind seem not to get released too frequently (although currently I am facing the Uru and Schizm II challange...). So I set out to develop my own "Myst Generator" to be able to create my own virtual worlds.

Basic Concept

After spending several days (well, not whole days, of course - besides programming, I also have a job and some other interests...) in deep contemplation, I came to the conclusion that playing a 3D adventure game is not so much different from navigating a typical graphical user interface. You have certain gadgets which react on different kinds of mouse events, and depending on the states these gadgets are in (button pressed or not, position of scroll bar etc.), different things happen - an image is changed, a short video is shown, some sound gets played, or the player moves to a different location within the virtual world. Which gadgets are available depends on the player's position and viewing direction - and which gadgets are really active and which effects are shown is finally determined by some kind of "world model" or "world formula" (like the physicists' "Theory Of Everything" - alternatively, some theological associations might come to mind... ;-) which connects in a specific way the gadget input vector to an effect output vector.

According to this paradigm, creating a virtual world with Xaya includes the following steps:

Implementation

I started working on the Xaya code in, hm, I think it was like August 2002. I went for Java as implementation language for the sake of cross-plattform compatibility, because no real number crunching seemed necessary for this project, and because I wanted to gain some experience in doing larger projects in Java.

As for the 3D stuff, I've had a look at the Java 3D API - but to me it seemed to cumbersome for creating really stunning images with all kinds of optical goodies, like shadows, reflections, refraction, caustics, and haze. Hence I decided to follow the common practice of using pre-rendered images rather than creating views of the virtual world in real-time, allowing for the use of arbitrary external renderers, e.g. PovRay or Blender. Initially I tried to make use of the Java 3D API for displaying pannable panorama views based on pre-rendered cubic environment maps, but J3D turned out to be so buggy (memory leaks over and over!) that I completely discarded it from the project and implemented a pure-Java cube mapper. It's performance is not really stunning, but it has to suffice for now. And maybe Java 3D will improve again and become worth to be re-introduced in futere - now that it has become open source...

Currently the code is in a state one might call beta - most functionality (all the above mentioned items) is there, and I am currently using Xaya to create a proof-of-concept game. However, in spite of all the time I spent on considering various aspects of software design, the code is still a bit messy and desperatly awaits documentation. Yet I've already released something for donwload - but be warned not to expect too much at this stage... Alternatively, you might want to have a look at some screenshots.

Xaya? How the heck did you come up with that weired name?!

Well, the original idea was to call the whole thing "Xenia" - which was supposed to be reminescent of "Gaia" (meaning something like "world" or "earth" in greek mythology), being prepended with the greek prefix "Xen-", meaning "forreign", "unknown". When looking for free xenia dot something domains I unfortunately learned that all of them (well, at least all the ones I was interested in, i.e. .de, .org, .net) were occupied already. Same with xenya - in particular, I saw little chance for me to grab the respective .de domain... ;-) xaia also was unavailable, only the .org and .net versions of xaya were still unused. "Very well", I thought, "Computer games anyway need to have names with as many X's and Y's as possible - so why not Xaya?"

SourceForge.net Logo Since I intended from the beginning to release the code as open source, SourceForge came to my mind - and this is where you finally stumbled over this page. Since SourceForge also provides webspace for all hosted projects, accessible at "yourproject.sourceforge.net" (which is, I dare say, as honorable as having your own domain ;-), I could have stayed with "Xenia" after all - but this I unfortunately realized only after registration.

And who are you?

Just visit my private homepage (curently under heavy reconstruction)!