Working user scripting

Oliver Brown
— This upcoming video may not be available to view yet.

The user scripting I mentioned before I went to Brussels is now basically done. The most amazing part is that I did most of it while I was in Brussels on a computer without PHP (amazing because apart from a few minor typos it actually worked).

The whole thing is actually simpler than I expected it to be and as such it can do stuff I didn’t plan. The first is maths expressions. This is something that may cause a problem however since it just just evals the code (after substituting variables and stripping possible harmful stuff).

The coolest feature I think though is handling aggregate data types. When you call a script you also pass it an array of variables. These variables can be of any type from integers or strings to arrays or objects (or even resources); it’s upto the functions you define to actually handle them. Now different elements of arrays and properties of objects can be accessed using a slghtly suspect-looking dot notation. So (from a working example I wrote) you could use something like $fleets.1.name which would access the name of the second element of the fleets array.

It’s worth pointing out that I decided to stick with numbering arrays from 0 since as a programmer that’s what I’m used to.

Anyway when I say that is accesses the name of the second element, it checks the type of the element and accessed it as an array ($fleets[1]['name']) or a property ($fleets[1]->name) as appropriate.

You can also do $fleets.$n.name to access the name of the nth element (although be warned that if n doesn’t reference a key of the fleets array then it won’t work obviously). Which brings me to biggest problem with it at the moment… everything fails silently if something isn’t right.

The way the scripting is called is also more flexible than I originally planned. The first way is:

$xgs->parseXGS('event', 'fleetentersector', $script, $vars);

$script is the a well formed XML script and $vars is an associative array of variables. Any script tags with an attributes of event equal to fleetentersector (<script event="fleetentersector">). This is was done mainly with Galaxia in mind so players could create different types of scripts other than ones designed to respond to events (i.e. use it just to create a batch command system).

The second far more flexible way to use it is:

$xgs->parseXPath($xpath, $script, $vars);

Where $xpath is an XPath expression selecting the root node of the script. Just to point out the first example actually just calls that with XPath expression "script[@$type='$att']" ($type is the attribute name and $att its value).

I’m not dead

Oliver Brown
— This upcoming video may not be available to view yet.

I’ve been in Brussels for two weeks and didn’t get internet access long enough to write anything.

But I’m back now.

User scripting in Galaxia Reborn

Oliver Brown
— This upcoming video may not be available to view yet.

Something I’ve wanted to put into Galaxia for a long time is user scripting. i.e. allowing users to attach scripts to objects that are triggered by certain events. Ultimately this could lead to interesting computer players (but that’s a long way off).

Well I’ve been playing around with it a little and the easiest complex data to parse seems to be XML. So the scripting engine will be XML based. The following is how a script will (hopefully) look:

<onFleetEnterSector>
  <IsEnemy target="$fleet">
    <ExectureOrder order="attack" target="$fleet" />
  </IsEnemy>
</onFleetEnterSector>

Just in case you can’t tell what it does, when a fleet enters the same sector as your own it checks to see if is an enemy and if is, attacks it.

Firstly a bunch of variables the script can read are passed to it. After that all the processing works using callbacks. When each tag is encountered, it just calls some specified function with the attributes passed as arguments (probably as an associative array to easily handle a variable number). If it’s a conditional (like “IsEnemy”) the function must return true or false. If it’s an action (like “ExecuteOrder”) then it returns nothing. There is also another type - one that returns an arbitrary value (i.e. a function - but I’ve used the word function too much already).

I’ll put the code up once it’s tested a bit more.

Dancing in Trafalgar Square

Oliver Brown
— This upcoming video may not be available to view yet.

As anyone who saw the local London BBC News yesterday (and possibly others) will know, there was a large open air tea-dance in Trafalgar Square yesterday! One possible highlight was setting the world record record for the most couples involved in a open air tea-dance - 195.

I also got sunburnt on an unluckily sunny day.

Google SiteMap

Oliver Brown
— This upcoming video may not be available to view yet.

If you don’t know about it already, checkout Google SiteMap.

Proof of the existence of Albinaaaaaaaghs

Oliver Brown
— This upcoming video may not be available to view yet.

For some reason we were talking about albinos and specifically whether albino polar bears exist. Imagine someone on expedition to look at polar bears. The only way you could tell it was albino would be to look at it’s eyes. And by that time it would be too late for you.

“So is it a polar bear?” “Actually I think it’s an albinaaaaaaagh!

Fun with XML

Oliver Brown
— This upcoming video may not be available to view yet.

Have a look at:

http://www.oliverbrown.me.uk/vocab/reading/en-fi-1.xml.

You will need a fairly new browser to see this properly.

Whether I can be bothered to make a whole website out of this, mirroring (and possible helping) my own attempt to learn Finnish, who knows…

Gary Lineker in bad taste?

Oliver Brown
— This upcoming video may not be available to view yet.

Firstly, I think the flurry of people reading this from XHTML Friends has calmed down so I’m more confident in posting complete crap now :)

I was watching They Think it’s All Over on UKGold last night when Gary Lineker of all people came up with a nasty joke, outdoing even Rory.

In the round they had to identify which of a series of grunts came from Monica Seles:

Guest: “Are these grunts from when they were playing tennis?” Rory “When else do women grunt?” Gary “Well, when they get stabbed…”

Just to bring the tone down even further, you keep wine in wine cellars, beer in beer cellars and knives in…

I apologise to Monica Seles for any offence cause and will remove the above post if she asks personally. :P

BBC gives new talent a chance…

Oliver Brown
— This upcoming video may not be available to view yet.

Anybody watching the BBC today will notice how they have decided to give all their up-and-coming talent a chance to shine today. From announcers to news reporters (and no doubt production crew too) the less experienced ruled the roost today.

The fact that the proper staff are on strike obviously has nothing to do with it.

Free stuff from Microsoft…

Oliver Brown
— This upcoming video may not be available to view yet.

Microsoft are now offering free versions off some of their Visual Studio products. And although they are slightly limited compared to the complete version they seem to allow commercial use (from the FAQ: “Create fun and interesting applications for their personal enjoyment or to share with their friends, or even commercially distribute your programs. “)

http://lab.msdn.microsoft.com/express/

They won’t stay completely free though. Once the products leave beta they will supposedly be available for $49 each. Which is still affordable for us students though :)