December 2006 - Posts

Raphcasting and Areae

Everyone, but everyone, is (fn1) playing along with Raph Koster's teaser-ad campaign.  Genius.  Lum's "Raph Koster decloaks off the starboard bow" is the best of the post titles, but hardly anyone with an interest in virtual worlds has remained aloof.  And I am no different: I, too, wish to play at guessing what his product actually will be.

So my guess, influenced by what I'm doing with Multiverse, is that it will be a browser-based product that draws, for its inspiration, upon LambdaMoo (heavily so), The Sims (oh mention not The Sims Online), Habbo Hotel and a touch of those furry freak brothers, Second Life.  You'll be able to build your own private pocket dimension within the larger metaverse provided by Areae, who will provide easy-to-use content-creation tools (as opposed to Second Life's kludgy nonsense).  The Koreans and Japanese are already mad for this kind of mySpace meets my space type of thing, and they only have terrible, sprite-type graphics and single screen/"room" spaces.

I think that users will be able to do the Sims thing and design and sell objects - so microtransactions will be there for sure - and I think that money will be made by Areae by, amongst other things, selling items themselves.  They'll be able to do this despite a mushrooming market for third-party items by being able to supply functional objects: as the keepers of the code, they can make things do extra stuff, in the way EA can supply a pet instead of just a chair.  They will probably also supply third places: the public spaces where socialisation will occur.  In what will probably be a single world on the Eve model rather than sharded like MMOs (in a social world, barriers are the last thing you want) I don't envy them the task of load-managing as certain spaces become Corellia starport(fn2).

Pets: there's a point.  I'll bet those will sell well.  There's a DS-style minigame to begin with.  A sticky one, too,  Though I doubt if you'll be able to buy a Frenzied Graul, sadly.

If they're not doing all this, then they should be ;)  Maybe I should be!

This business model would not be a huge threat to middleware providers: if you want a highly customised, tailored world you need to code, and will do for some time.  But it would be a huge kick in the teeth to Second Life.  And done well, it would be a real threat other social networking spaces, too: Areae could well see their competitors as mySpace, the Sims, Yahoo and MSN.  I certainly don't think that World of Warcraft or Everquest II would be much more than a source of customers (in that many will be customers of both, since they share wider social networks that are exposed to to the Raphaelites). I've often said that Second Life should be looking to get bought by one of the big messenging clients.  Of course, that was before I understood just how incompetent their server architecture was...

PS I suggest that Raph should counterbalance the vowel-count by naming the product syzygy.  It's a word with spatial and locative meanings, and it deserves more of an outing.  It's obscurantist, pretentious and unpronounceable, but we've already seen that those are no barriers... nyuck nyuck.

-------------

1 - Hurt and upset at being relegated to the word "is", Amber is right to point out that her interview with Raph deserves so very, very much more... So here is a nice, long link instead.

2 - In virtual worlds with easy movement, the real-world tendency for certain popular spaces to become extremely well-frequented is exaggerated.  In Star Wars Galaxies, the central node of the travel network between worlds was just in front of Corellia startport, which would become horribly overloaded as people congregated there for trade, socialisation, gouping and the like.  It was, while very laggy, extremely vibrant: while technically a problem, it was, socially, a huge success.

Multiverse language options

My first couple of weeks or so with Multiverse were spent doing stuff.  This is the way I initially learn things: I jump in to actually doing them, preferably with some sort of reference manual with which to overcome stumbling blocks and obstacles.  However, this can lead to a somewhat idiosyncratic view of things, and I'd already begun to notice a few errors in the way I'd launched into stuff.  So over this weekend I started reading a bit more and doing a bit less, in order to provide a bit of context and order to what I'd learned.

One fun thing I picked up is that I'd missed a lot of the technologies that can be used to customise the product.  For instance, I knew that I could script various aspects of the game (for instance, the behaviour of mobs) with python in py files.  What I hadn't realised (even though I'd actually been doing it at times!) is that Javascript can be used here, too.  Considering that I can use js in my sleep (our current big project is loaded with server and client-side javascript, as well as being sprinkled liberally with AJAX), this was a mixed blessing: I'd been hoping to be forced to learn a bit more python in the process, but that will neeeeever happen now that I know there is an easier, faster way.

I knew about (and have been playing with) the ability to add new functionality with server-side plugins written in Java or Python.  For me, this is the really cool stuff: the ability to change the fundamental ways that the virtual world works and the rules that govern its operation.  The scripting element may let me say how much damage a zombie hits for, but the plug-ins let me decide that the result of my needless cadaver-focussed rage is measured in location-based damage as opposed to hit-points.

One technology that surprised me a very great deal was that the multiverse client can be customised with (amongst other things) C# code.  What an odd choice.  I mean, fine by me: I started learning C# before the compiler was even available, when the language was just in the specification stage (and this site, which I tinker with, is written in C#).  But I'm intrigued enough to want to take a look at this.  There is nothing obvious on the wiki (which breaks a bit when searching for "C#"), and the client installation page itself does not state a .net runtime requirement, but the use of C# would seem to then require the presence of the .net run-time environment, which is (a) substantial and (b) still very much windows-only (open source efforts notwithstanding).  Of course, the client is currently windows-only, and it's just another option that they seem to have made available, but the site says that other clients are planned, and it would certainly add complexity to any attempt at cross-platform compatibility when one wanted to look at *nix or Macs.

Then we will fight in the shade....

I'd not been aware that a movie based on the Spartans' stand at Thermopylae (in fact, based on artist Frank Miller's retelling) was due out in March, but I saw the link over at Tabula Rasa, and am extremely grateful that I did.  Now, it is true that you could stick Nine Inch Nails' music as the soundtrack to a trailer for Fried Green Tomatoes at the Whistlestop Cafe and I'd be tempted to see it*, but after seeing the promo (here, for the best version, or here and choose the top-left of the three, and select at least "alta" for resolution) I am looking forward to this more than any movie for years.

One useful thing about filming just about anything to do with the Spartans is that they write their own scripts.  The term "Laconic" - meaning a terse statement - comes from the Spartans' famous one-liners.  Thus, in the trailer, we hear a phrase uttered by Dienekes when told that Persian arrows were so numerous as to blot out the sun: "Good, then we can fight in the shade."  In another conflict, when Phillip II of Macedonia threatened the Spartans by saying "If I win this war, you will be slaves forever", the Spartan embassy returned with the response "If".  Another example from the Thermopylae battle was that Xerxes offered to let the Spartans live if they would surrender their weapons, only to receive the response molon labe: "come and get them."

It is interesting to see yet another historical movie about the conflict between East and West being made, following as it does recent films such as Troy, Kingdom of Heaven, Alexander and others.  This is reminiscent of the Godzilla movies of Japanese cold-war years (large, lumbering, uncontrollable, violent outsider who alternates between attacking and defending the Home Islands), or of the westerns and alien-invader movies of post-war United States, although modern audiences, raised with a more developed form of movie criticism (Mark Kermode, Roger Ebert and all) are probably more aware of the intended allegory.

Thermopylae, a stand by 300 Spartans (together with some almost-as-heroic Theban volunteers and some this-was-your-idea-you-only-had-to-do-one-thing-and-you-couldn't-even-get-that-right Phocians) against a huge army - almost certainly somewhere between eighty and two hundred thousand Persians and allies -  is one of the formative tales of the Brave Free West against the Threatening Despotic East.  It, together with the larger tale retold by Herodotus of the Persian wars, has shaped much of our politics, our culture and our language in the millenia since. Undoubtedly, the conquest even of Greece up to the Corinthian isthmus by the Persians would have had huge consequences: as it was, the Persians sacked Athens.  Had they held it, what would have happened to Socrates, Plato, Aristotle, Euripides, Aeschylus, Sophocles, Thucydides and the rest?  Modern philosophy, comedy, tragedy, history, medicine and more sprung from that remarkable century-and-a-half or so following the battles of Thermopylae, Salamis, Marathon and Plataea**.  The 300 could be said to have defended us all.

The Spartans held a pass which was at that time about 14 metres wide, and their fitness, training (they were raised to war from childhood) and drill (they sang in order to keep exact pace in their evolutions) were unmatched.  Their heavy armour and specialised weaponry (large shield for protection from blows and arrows, long spears which could be used in mutual support by well-trained men, and short swords for close work) meant that, so long as their rear was secure and their morale high, they were far the superior of their foes on the first day of the battle, both the Medes and the elite Persian Immortals.  As wave after wave of attackers was forced towards the Spartan lines, the process of clambering over a literal wall of dead comrades and facing an unbroken line of iron and spear-points must have been spirit-crushingly terrifying for the men involved, quite apart from the effect on their ability to maintain cohesion as units.

Frank Miller's adaptation is liberal in its adaptation of the historic version - Ephialtes the traitor, who betrayed the Greek cause, is portrayed as a hunchback, for instance - but it looks gorgeous.  Having been a bit disappointed by Troy, and bored out of my skull of Alexander the Great, I would like to be cautious, but even if the film is great I can just keep watching that gorgeous trailer: the scene of the Persian arrows in flight is stupendous.  Those who know me are aware that if I know a film has a sad ending I will avoid it.  But this one's is so glorious as so make me avoid that rule.

 

------------------

*Here, I use "true" in the sense of "not true"

** There might have been no Alexander the Great, but my own feeling is that the Romans would still have risen, and that the Persians would then have been over-extended and forced to retreat into Asia in any case.  But the cultures that followed would surely have been substantially different, not least that of Byzantium.

Multiverse - MARS, levels and more

Dragon asked if it is possible to pick and choose elements from Multiverse's MARS object library (a collection of classes which implement a basic graphical DIKU).

Each plug-in of the MARS library is loaded separately, so there is a degree of granularity there: you could replace the objects library (multiverse.mars.objects) with your own, if you so desired (big job, though!).  Similarly, the skills and abilities classes can be extended or replaced.

For instance, if you want to have a priest class who heals for 7 to 10 points per level, you could use the Mars.EffectManager to register an ability thus:

effect = new HealEffect("heal effect");
effect.setMinInstantHeal(7*iCharLevel);
effect.setMaxInstantHeal(10*iCharLevel);

[edit - on reflection, there are better places to do the scaling!]

But you could just as easily alter that code to make it flat-rate, by removing level in the calcs altogether.  That would be a hybrid.  Similarly, you could choose to extent the library with your own variation.  Or in the .py configuration file that loads the server plugins you could simply replace the skills and abilities library with your own version.  This file is pretty key to extending the functionality, and that's where I put my own "Hello World" plugin.

So yes, it seems pretty easy to swap functionality in and out, so long as you're happy messing around with Java.

Multiverse - Part 2

I've been playing around with Multiverse some more, specifically with the server plug-ins and configuration.

On further investigation, it turns out that I overstated the work required of a would-be game-developer in my last post.  While it is true that you have complete flexibility in the ruleset and background mechanics of your game, there is also an "easy-mode" option in the event that you're planning on using a diku-type setup.

Multiverse comes with a server plug-in called MARS (Multiverse Agnostic Rule System).  It comprises a bunch of Java packages (multiverse.mars.*) that implement a basic Diku model, with hit points, spawn generators, item and mob templates, down to the detailed level of providing, for instance, an inventory template of 5 bags with 16 slots each.

So here's an example of using Python, Multiverse and MARS to create a spawn-point where Rabid Rabbits, for instance, will appear.  I normally use kinda-hungarian notation, btw, but Multiverse coding practises seem different, and I'm sticking to them for now.

Beforehand, create your RabbitFactory class, which inherits from the ObjectFactory class.  This will spawn the little beggars.  Now, you use it to create the rabbitFactory instance, and then to create a SpawnGenerator instance which uses your rabbitFactory instance to churn out the evil rabid bunnies:

rabbitFactory = RabbitFactory("Rabbit")
rabbitSpawnGen = SpawnGenerator("rabbit generator")
rabbitSpawnGen.setObjectFactory(rabbitFactory)

Next, tell the spawn generator where it is going to pop the relevant members of the family leporidae into existence (you've already defined rabbitLoc's co-ordinates elewhere):

rabbitSpawnGen.setLoc(rabbitLoc)

Easy, innit?  Next, say how many you want to appear at a time (20.. they breed fast), how far from the spawn point they can appear, and a suitably fast respawn rate:

rabbitSpawnGen.setNumSpawns(20)
rabbitSpawnGen.setSpawnRadius(3000)
rabbitSpawnGen.setRespawnTime(10000)

And that's it, but for the all-important Robot Wars-style Activate:

rabbitSpawnGen.activate()

And that's it.  You're now over-straining your server resources by spawning rabbits at a fairly unholy rate.  If you wanted to play early-era Ultima Online-type ecology games, you could alter the RabbitFactory class fairly simply to, for instance, only spawn more rabbits if two or more rabbits are extant at the spawn-point.

Some tasks are trickier than others, of course, but even the more detailed templates, such as that for a mob, are still fairly straightforward to use.  There are just more properties to set: rabbit.setAttackable(true), for instance; or rabbit.setStrength(100), which would be an evil little bugger with pointy, pointy teeth:

Sweet.

And just imagine, you've just spawned 20 of them.  Hopefully in a newbie zone just outside the city gates.  Call them the Bunnies of Arugal.

Multiverse - Hands On

Multiverse build middleware for massively multiplayer online titles.  In other words, they don't build the games themselves, nor do they build the back-end database, opsys or the like.  They have (until now) concentrated on trying to build the tools that will let development houses actually develop their own games, while not having to worry about building the object modeling, mapping and other similar tools themselves.

Recently, they changed tack, and announced that they had acquired the rights from Fox to develop a Firefly MMO.  This is a biiig change of direction, a bit like a special effects company announcing that they were going to start making full-length movies themselves.  They have been in the business of making hammers, and are now going to sell cabinetry.  And it is important to note that nobody is currently selling cabinets made with their tools. That is, while a few companies are using the pre-release Multiverse toolset to develop games, none is even close to actually selling anything.

By coincidence, I've been playing around with the Multiverse software for a while now, and have got to the point where I have a server up and running, can log into it and move around, can lay out terrain and place creatures, buildings and the like, and am about to try building quests.  I am confident that others could log in as well, but I've not asked anyone to do so, since what I have is still pretty flawed.  That'll be the next step.

That's an amazing thing, though.  Multiverse has provided enough tools for me - an experienced programmer but not a games developer - to create and support an MMO for myself.  There are massive problematic areas as well, but we'll come to those later.

The software runs on Linux or Windows.  I'm running it on Windows, using Cygwin to run the server modules.  The database backend is MySQL, scripting of mob behaviour, quests and the like is done in Python, while server plug-ins are coded in Java.  Configuration, of course, is done in some pretty basic XML.  Since I'm happy with using all of those, I've been playing about with each area in turn.

It took me about four hours to get the servers set up on a clean install, with none of the components in place initially.  Then it took about 3 hours (including a lot of patching) to get the client set up.  Finally, it took a couple of hours of scanning forums and tailing log files to isolate the two problems that were stopping the client from connecting to the server.  I'd say that less than ten hours to get a pre-release MMO environment set up is pretty damn good going, especially as much of that time was taken up with downloading.

One poster on F13 suggested that the multiverse software is just for building diku worlds.  This is absolutely not the case.  That level of functionality is not there by default.  What you boot into (unless you choose otherwise) is a space with your avatar and some terrain.  No scripted behaviour beyond character animation.  No levels, no hit points, no loot, no mobs, no nothing.  While this means work to start with, it also means that you are not constrained by the diku model. The database doesn't hold any character stats until you add the fields.  Pretty much a blank slate.

A basic object repository is provided to show off the tech.  The avatar models look and behave curiously like those of Sims 2, so that should give an idea of the level of detail and the nature of the animations.  The detail-level is really surprisingly good. The pre-release, freebie, demo animations are less satisfying.  The one for running is jerky and missing some elements, and if you move from a higher surface to a lower one there is no jump animation (although I see that the event is firing): the character merely quantum-leaps immediately to the lower level.  But, of course, this just points to one of the entry-requirements: the example repository is limited because you are supposed to add your own models and animations.  Graphic design expertise will be needed.

There are oddities and bugs as one would expect of beta software.  If you set a small lighting radius to reflect a character holding a lantern at night, then scroll out to a more distant viewpoint, the lighting point follows the camera rather than the character, and you disappear.  These sort of things are annoying but hardly big issues at this point.

In all, I am amzed at the degree to which the Multiverse team has managed to commoditise something as complex as a virtual world client and server: it's really not a million miles away from early Second Life, and is immensely more flexible, albeit with a higher learning curve for scripting.  The bugs are far more sparse than I expected.  It doesn't look even vaguely like something that could be used for AAA titles (a bit of a red flag for their Firefly dream there) but it's extant, real and usable.  If you have an interest in virtual worlds and are happy with the skillsets I've mentioned, you really should give it a try.

Anyway, I'll post next about my experience in scripting some events and creating a Hello World server plug-in.