Wednesday, November 25, 2009

Per-Client Variables

By default state variables are synchronized between all clients: changes to data are reflected everywhere. This is simple and appropriate for most FPS games. However, some information should only be sent to some clients, like say the inventory in an RPG game. Library 1.3 now allows such state variables, which are called clientPrivate.

A clientPrivate state variable is only sent to the client whose avatar that is. In other words, clientPrivate variables on a player entity are only updated to that player - other clients will not see a value for that variable on that entity. (Note that clientPrivate has no effect on non-player entities.) Of course, the server sees all of the values (and when it updates one, the update is only sent to that player).

Here is an example of how to add such a variable to a logic entity class:
  • secretItem: new StateString({ clientPrivate: true }),

Library 1.3

library/1_2 has been forked into library/1_3. The goal is to keep 1_2 as it is, so all the older games still work, while development moves on to 1_3 (which may include API changes, etc.). So, for new games, 1_3 should be used, especially if you will need new library features, as those will be added to library/1_3.

To migrate a map to 1_3, currently the following is necessary:
  • Remove the map asset dependency on library/1_2 and add one for library/1_3.

  • The map script should include the following line before any other Library.include commands:


  • Imports of 1_2 libraries should be changed as follows:


    should become

    Library.include('library/' + Global.LIBRARY_VERSION + '/Projectiles');

    (this way of doing things will help make future library migrations much easier).

After doing those, the map should work exactly as it did with library/1_2.

Thursday, November 19, 2009

New Game: Racing

A new game is ready, you can get to it from the lobby and play it right now. Here are some screenshots and videos:

As you can see, this is a racing game. We wanted to do something different than the current games (first/third person shooters, etc.), to show the flexibility of the engine, so this is that. Another difference is that this game can be played in both single player or multiplayer, so you can have fun even if people aren't online at the same time (but it's even more fun with them).

Tuesday, November 17, 2009

IRC Plugin + Integration

A server plugin for IRC has been written, and is now used in the main servers - the lobby and the three games it has portals to.

This basically integrates text chat in the game servers with #syntensity on FreeNode, so that:
  • All text messages sent in the game servers are shown on #syntensity
  • Messages sent to the server bots (syntensity0 to syntensity3) in #syntensity will relay the message to people on that game server
This should be useful in several ways. Perhaps mainly in that it lets people on a game server, that have questions, be heard on IRC. So we can give technical support very quickly from there.

The implementation was fairly simple: A plugin in Python that integrates python-irclib. We can probably write similar plugins for other instant messaging systems, if it makes sense.

Thanks to TheAncientGoat for the idea.

Sunday, November 15, 2009

1.1 Release

Revision 1190 is tagged as version 1.1. Binaries for Windows and Ubuntu 9.10 are on the Syntensity Mod DB downloads page. I'll link to them from the main website's download page after a little more testing (if you test them yourself, please say how it went, here, on IRC, or in the forum - thanks!).

The new version has many changes, but most won't be noticeable until maps use the new features. The improvements include:
  • Enable maps to customize move, strafe and jump
  • Support for cutscenes
  • WoW-like mouse movement in Mouselook mode - cursor at borders will rotate the view
  • Allow client and server to (naively) share their home dirs, and do this by default when the server does not specify a home dir explicitly. This makes it much easier to set up a local server.
  • ZeroG module, allowing maps to have zero gravity, custom gravity effects, etc.
  • Vehicles module, to let entities move like simple vehicles (pitch based on floor, thrust for movement, etc.)
  • World.getSurfaceNormal, which allows doing bouncing physics entirely in scripts, + Grenade example
  • WorldSequences module - lets you track players progression through areas
  • WorldSignals module - lets you emit and listen for signals that are relevant to areas in space
  • New Steering module for bot movement control
  • Add absolute x,y to clientClick, allowing maps to have menus
  • Allow scripts on the server to intercept and handle text messages (e.g. can be used as a simple way to let people issue commands to the server, etc.)

Thursday, November 12, 2009

Community Update

Since we launched Syntensity a month and a half ago, we posted on some online forums to let people know about this project, but we have been very low-key about it. The reason is that we are trying to do things gradually: Both with building the technology, and with spreading the word. The idea is to get feedback from people about Syntensity, and then to improve it, after which it makes sense to show it to more people, get even more feedback, and so forth.

This approach is appropriate for us, with our open source development model. It is very different from what people do with closed source development, which is usually to build something behind closed doors for a long time, and then release it in a big public launch, at which point they hope to get a large amount of users as fast as possible.

With that background, I'm happy to report that Syntensity has now reached over 500 registered accounts. So, even though we've been low-key about spreading the word, things are heating up. Another sign of increasing activity can be seen on our forum. This is therefore an appropriate time to make a 'Community Update' post on this blog, to take a look at a few of the neat things people in the Syntensity community have been doing. From time to time I'll make more of these posts.

Psycho v1.0 by Psychosilocybin is an interesting work-in-progress map with an attacker-defender gameplay: Only one team has an object to protect. That team gets points for keeping it safe, the other team gets points for stealing it. Accordingly, the map has an asymmetrical structure, unlike typical CTF maps (that are usually very symmetrical). Here are some screenshots:

Realm Arena is a mod of Map2 by adrix89, which adds some movement capabilities, like double tapping to move in order to 'dash' in that direction ('dash' means to move quickly for a brief time). I think it makes for very interesting gameplay, with much more control of your character.

(Note that currently this requires that you edit your autoexec.cfg, as the map says to do. This will not be necessary with the upcoming release, which makes customizing movement easier.)

(The two things mentioned in this blog post are by no means a complete list - I hope I am not offending anybody by leaving them out. These are just two things that happened to recently impress me.)

Sunday, November 8, 2009

4-Weapon CTF Update

The 4-Weapon CTF game, also known as 'Map 2', has been updated to Map 2.1. When you enter that game from the lobby you will be playing the new version.

The changes are mainly bugfixes and minor improvements, in response to feedback we've been getting. They include:
  • Headshot notifications are now shown to everyone, not just the shooter (so you will know if a headshot was done to you, or to anyone else).
  • The sound for scoring a point now always plays when points are scored (before it was done unreliably).
  • Fixed an annoying bug where fragged characters could, in some cases, change their animation and not look fragged (even though they were).
  • Rockets now do twice as much damage as before (making it possible to frag people with a single direct hit).

More updates and new games are coming soon.