[Release] OpenLieroX 0.59 beta10

2012-04-17 by albert

About the OLX 0.59 beta 10 release:

"1,306 changed files with 159,276 additions and 173,652 deletions"

* Windows
* MacOSX
* source code (sorry, no Ubuntu/Debian package for now… but as usual, building on Linux is easy)

It has been a long time. This was mostly that we have been inactive on OLX for quite some time. However, in the last 3 months, I got quite active again and made quite a lot of huge internal changes. These changes are some of the biggest internal changes since the first OLX release. Not all changes are directly visible to you, though.

* game object serialization system

This is mostly internal. But this is the biggest change. It means that all game objects are serializable. This basically means that you can access every object and every attribute from everywhere (i.e. right now from Lua scripts or from console).

This is also used now to sync the state over network. Most of the old network code has become obsolete now and isn't used anymore if you have only >=0.59b10 versions in a network game. Right now, the network sync implementation is quite simple but this whole design greatly allows for huge improvements in the future. The network engine was not really tested that well yet, esp not over laggy networks. If it turns out that the performance is too bad for playing, this can easily be improved later based on this work.

The possibilities for Lua are also huge. You can basically control the whole game. There is also a new global Lua instance which is always available, even when you are not running a game. You could script the game in any way you want it. (In the future, you might script your own clan ladder system based on that. Or LXA account integration. Or some extended GUI. Or your people banning system. Some server filtering. ...) And of course do also some more crazy stuff in maps/mods (whatever you can imagine -- you really have access to *everything*).

* Gusanos stabilization

There has been quite some work on the Gusanos code to make it more stable. It should basically just work now. Also the Gusanos network engine got cleaned up a bit. In earlier 0.59 releases, Gusanos over network was not really playable at all. My hope is that this has changed now.

* merge Gusanos/LX drawing

This has huge implications. Basically all Gusanos special effects such as lightning, shadows, distortion can be used in LX. Gusanos is drawn at high-res now. I.e. worms don't look pixelized anymore. Also the special effects are high-res.

Want to play around? Type `lua game.levelDarkMode = true` in console. Or test some of the countless Gusanos maps/mods.

For OLX, I also simplified the HUD. It is overlayed now and the game gets the full screen. I think this is a somewhat nicer gameplay.


Some more changes. Not complete (see below for more).

- weapon slots became dynamic. custom sizes possible. new option WeaponSlotsNum
- Teeworlds ( level support (mostly complete)
- new pixel flags types: no hook, damage area
- foreground level graphic support (put foreground.png in your (Gus) level dir)
- Gusanos high-res level support (double_res = 1 in config.cfg)
- draw arrow in race mode to the next check point
- console persistence history support
- level dark mode used in Hide&Seek
- Lua startup scripts (startup*.lua)
- console: `lua` - executes Lua code in the global Lua instance
- press jump to spawn worm support
- HUD feedback: "Waiting for respawn …" and others
- MaxRespawnTime option. If enabled (>=0) and if both this time and RespawnTime went by, the worm is automatically spawned
- termios console CLI support based on linenoise (for Unix/Linux/MacOSX)
- simplification of internal game state and game loop
- fixes in net channel bandwidth handling
- unified server/client code. shares same gamestate (map, mod, etc)
- many Gusanos cleanups and fixes
- single player game config structure simplified

For all more complete list of changes, see here or read doc/ChangeLog from the release. For even more details, this is the full Git change log.


Some drawbacks:

A lot of code has been rewritten and is completely new. This means that it might be buggy and it is also not that well optimized yet. In particular, this is for the graphics code, the main engine and the network engine. E.g., the graphics code is slower than earlier and you will notice this in lower FPS. Also, map/projectile shadows aren't implemented yet. And some other stuff might be missing too (please report). The network code is also not optimized yet.

The MacOSX release currently only supports MacOSX >=10.6 with 64bit Intel. It's quite annoying/complicated to have wider support. The OLX code itself should support just anything (ppc, ppc64, i386, x86_64, from MacOSX 10.1 on), however, it's somewhat complicated to get the libraries for each target arch. Anyway, I'm curious how important this is. If there are too much requests for earlier MacOSX versions or other archs, I'll probably add that support back. For now, if you happen to have such old MacOSX version, you might consider compiling OLX yourself which is not too complicated on OSX.


If you are interested, I send a mail some weeks ago to the OLX development mailing list where I described the changes in some more technical way. This is the mail, slightly updated for the release:

* New object system + network engine

This is probably the biggest change. Every object and every attribute is serializable now. For network, this is esp. used (for now) for CWorm, Game and Settings. Under Game, there are many new attributes, e.g. game.state (when connected, says lobby, preparing or playing), game.teamScores, etc.

This is all done via the ATTR macro. The memory overhead is minimal (wouldn't be needed at all but some extra flags like changed have been helpful here).

Each attrib has some meta attributes, e.g. like serverSide etc. By them, OLX decides who is authorized to make changes on an attrib etc. This check is done both serverside and clientside. On clientside, when you try to make changes on such an attrib, it is just ignored. This was helpful for much of the game code which is now just the same on the server and on the client (and depending on the role, the attribs are changed or not).

After each frame for each client (or also from client to server), a game update net package is sent with the diff.

* no separation between CClient/CServer

No matter if the code is server side or client side, you always operate on the same game objects / state / attributes. There is only a single global copy of the game. All information wether some client needs some update or not is handled via the object serialization system. Each CServerConnection has a copy of the full game state (or actually a diff to the current one) so that we know what updates to send. The local client will never ever need updates.

* main game loop and game state simplification

There aren't different variables anymore spread around the code describing the game state (earlier, CClient and CServer could have disagreed wether we were playing, preparing, in lobby or doing something else). There is just game.state which can be quit, inactive (menu), connecting (client-only), lobby, preparing or playing.

There is also a single main loop now which is run no matter in what state we are. Depending on the state, some sub-functions are called or not called. E.g. Menu_Frame is only called if game.state <= lobby. Also, the Gusanos code is now always called (ingame).

* more Gusanos / LX merging

Many more parts of LX and Gusanos have been merged. Esp. many CWorm attributes (angle, etc.), the ninja rope and much code. E.g. there is no Gus-specific spawn anymore, Gus-ninjarope also supports attaching to worms now, etc. This also goes into the other direction, e.g. you can configure that you don't immediately spawn after a timeout but that you press jump to spawn (after a timeout).

* Lua everywhere / global Lua instance

In addition to the ingame Lua instance, there is a new global Lua instance which is always present (and wont be reset after a game). This Lua instance gets all the same bindings as the ingame Lua instance.

There are many more Lua bindings now. Lua has full access to the object serialization system (but of course, if you change attribs you don't have access to, they will be ignored; this is nice because you can just use the same code for both server and client). Lua also gets bindings to all the CLI commands. There is almost nothing you cannot control via Lua now. However, for many things (e.g. all CLI commands, game settings write access), the access is restricted to the global Lua instance.

You can also have global Lua startup scripts which will be run at OLX startup.

Lua itself also can register some more callbacks as earlier, e.g. for serverStart, etc. Lua also can setup timers now.

You can also execute Lua commands via console via the lua command. They will be executed in the global Lua instance.

The plan was also to just base the whole console on Lua but with a different/simplified syntax (i.e. not the Lua syntax) so that it stays as simple as it currently is (e.g., for Lua, you would always need parentheses but that doesn't make much sense for the ingame console). (But this is not done yet...)

* simplified LX ingame HUD

The full screen surface is now used for gaming as in Gusanos. Information like health, weapon, etc. is shown somewhere at the bottom or the top.

The code right now may be temporary. I thought it would be nice to just provide the same interface as in Gusanos and the game theme defines the HUD. LX mods also could overwrite that, as Gus mods can.

* fixed 100 FPS for inner game loop

The inner game loop has a fixed 100 FPS. This is basically GameServer::SimulateGame and a few other things. And also the Gusanos code (which was already earlier at fixed 100 FPS). There is also the game.serverFrame variable which counts all the frames while game.state == playing and you can calculate the game time from that.

The LX physics code (which is run from within there) still has its own FPS handling and you still can configure it (as earlier), so that hasn't really changed.

* termios CLI

For Linux/Unix/Mac/all-non-Windows users: There is a nice termios CLI now for OLX. It doesn't use readline or libedit, it uses its own code (which is roughly based on liblinenoise). It supports autocompletion, history and other stuff. With all that, it is even more advanced than the ingame console.

* singlethreaded debug code

It is possible to compile OLX now that is uses the main thread for both drawing and the game logic. For some stupid debuggers, this might be useful.

* many fixes and other stuff

In the net code, quite a few fixes have been made. The CChannel specific bandwidth limitation was removed; it is not needed anymore since we do it for game updates. This greatly improves the network performance as the CChannel code was somewhat too restrictive (you saw that earlier as the bandwidth never really even nearly hit your maximum upload bandwidth). A few other basic but very serious fixes for the networking low level socket code has been made.

Some of the drawing/blitting functions have been fixed. They were still broken in specific cases. We now have optimized variants for all different possible cases of bpp, alpha-blending, etc.

Much of the Lua handling has been made secure so that it cannot really happen that you access an outdated LuaReference or so. This should have fixed some crashes. It is kind of bullet-proof now.

And many many other countless stuff has been fixed along the way of al the changes in the last 3 months. I think I cannot really count them all out of my head.

Of course, some of those transitions are not fully complete. You still find many old code, there are still the classes GameServer and CClient (which also still make sense to handle the server and the client socket) which still have some own state (e.g. it could be that the server is connected, the client is not, or so). Also, the new code might still be buggy (it is all new), although OLX seems to be quite stable so far.

Also, OLX is still compatible to the old network engine. In most of the net-engine Send* functions, when the other side is >=OLX0.59b10, it just ignores the send, otherwise it would work as earlier. As long as 0.59 is not stable and most people haven't switched yet, I don't want to remove that. However, once there is no real reason anymore not to switch to 0.59 and most people already did, we can drop all that old code. In the meanwhile, I think it is important for the transition.

source code and tracker moved to GitHub

2011-05-14 by albert


The main repository has been moved to GitHub:

All the old bug reports and feature requests also have been moved to GitHub:

The SourceForge trackers were disabled. The Git repository will also be disabled in a while to not confuse other people where to find the most recent source.

The openlierox-distrib repository (with all the distribution scripts) has been moved here:


What this means:

For users, it will make the bug reporting a bit different. Most people will probably agree that the GitHub issue tracker is much nicer to use. Though, right now, it means that you need a GitHub account. But we are working on possible solutions so that you can also report without a GitHub account. Otherwise, no real (direct) change for you.

For developers, it means to just change the Git origin URL in your local Git copy. And you can take advantage of all the nice GitHub Git features. And it will make a few other things easier in the future.

For other people interested in the source, it has the biggest impact: The project is on GitHub now! (People who like working on Open Source projects probably are familiar with what this means already.) Basically, it means that contributing to the source code is trivial now. It's just one click away.

Some further discussion about this can be read in the mailing list. After all, if you don't care about contributing to the source code, it doesn't really mean too much for you right now.

LXA as an OpenID provider

2010-07-14 by albert

OpenID is a way to login on many websites. You probably have seen it already somewhere.
OpenID itself is just the system. Famous examples of OpenID providers are Google, Yahoo and many more. And now also LXA. This means, on any other website with supports OpenID logins, you can use your LXA account now. Just use .

I tried to demonstrate this here for SourceForge:

Sorry, the video is a bit fast. What it shows is basically:
- I logged out of LXA (and am already logged out of SF).
- I go to the SF login page, select custom OpenID login, and enter the OpenID URL .
- That brings me to the LXA login.
- After entering that one (well, just press enter as it remembered my values), it returns to SF and says I am logged in to SF now.
- I go back to LXA. SF didn't just checked the LXA password, it actually has used the LXA login, i.e. I'm also logged in to LXA now.
- I log out on SF.
- Show that I am still logged in to LXA.
- I use the same OpenID login on SF again.
- This time, I don't have to enter the LXA user/pass again because I'm still logged in on LXA. This shows that SF actually only checks if you are logged in on LXA. SF doesn't really see your password at any time (all that is handled on the LXA side).

As I haven't seen any SMF plugin which provides that functionality, I have coded it myself:

The code is a bit experimental. Please report problems/bugs. Will post that also later in the SMF community, maybe it is useful.

This was a first step to have user logins in OpenLieroX. By choosing OpenID, it will be possible to use any OpenID login in OLX, i.e. you can use your LXA account, your Google account or whatever.

Why game development is a great learning playground

2010-05-16 by albert

Why game development is a great learning playground. All the topics you can learn about when developing a game.

Contribute to OpenLieroX

2010-05-09 by albert

OpenLieroX can use your help in many ways. If you are interested in contributing to OpenLieroX in some way, I have summarized the possibilities in a Wiki article here:

I have also written an article in case you want to learn coding. In that case, OpenLieroX is a good project to start with. But also otherwise, contributions on the source code are highly welcome. Read the full article here:

Dedicated server ranking

2010-04-09 by albert


As you may know, there are some dedicated servers running on our LXA host. Most of them also include some sort of ranking system. Usually, you can see the rank on the server by writing "!rank", "!rankall" or "!toprank" in the chat on such server.

For the Fast Mortars server (and others can easily be added), I have written a small script now which automatically pushes the rank list online and updates it every 5 minutes.

New: We also have simple clan ranking now!

New: Also for Rifles server:

PS: I still would be happy to see more/other dedicated servers online. If you don't have the hardware to do that, contact DarkCharlie and you probably can get an own access on the LXA host. You can also post/suggest some own configs/scripts if you want and I may use them.

PS2: For some reason, the rank list is slightly different from the rank you see when you type "!rank" on the server. I didn't wrote those scripts and I'm too lazy right now to find out why that is :) but feel free to look yourself at the Python code and post a patch.

[Release] OpenLieroX 0.59 beta

2010-01-21 by albert

Hey again,

There it is: The first 0.59 beta release. Please note that this time, "Beta" really means Beta. There are many crashes and there are huge memleaks. And who knows what other problems. But it's finally at a stage where I would say it is playable and you can try out all the fancy new things.

Well, the main new feature - you may have heard already about it - we have full Gusanos support now!

For those who don't know, Gusanos is another Liero clone, as old as LieroX (actually, I don't know - who was first, can somebody tell?), with much nicer physics, sound and gfx effects (well, physics may be subjective). The reason why (O)LX has become the favourit is because Gusanos was not really so intuitive to use (most of the life of this game, it didn't had a GUI) and it was restricted mostly to Windows only (Linux x86 was theoretically supported but it had dependencies to some comercial libs which were mostly not available on distributions). Checkout some videos on Youtube (or linked here on LXA) to get some impression about Gusanos. There are also a lot of really fancy mods and levels for Gusanos. Gusanos mods and levels are highly scripted. It is all based on Lua and you can do a lot of stuff - and I mean really a lot. There are levels with rain, jumppads, damaging elements and many dynamic elements here and there. There are also dynamic lights and you got a flashlight to see something.

All that is in OLX now. OLX is compatible to most Gusanos levels/mods out-of-the-box! (And those who don't work should be trivial to be fixed.)

This support goes very far: You can easily play some LX mod in a scripted Gusanos map. Check out the Gusanos Poo map. There is a jumppad on the bottom. :) That works also the other way around: You can play any LX map with Gusanos mods.

Despite this mixing, all OLX gamemodes (like CTF, race, Hide&Seek, etc) should also work with Gusanos. Esp. try out CTF and some of the Gusanos CTF maps. You will notice that there are fixed spawnpoints for each team and also the flag base is at a fixed place (those maps were esp. made for CTF). And most other OLX settings are also handled.

Warning: Set your loading time to 100 when you play some Gusanos mod. Some Gusanos mods may take up a lot of CPU and with too low loading time, they will easily make it unplayable.

Documentation about how to create your own Gusanos mods and maps are online, together with some more details about the merging and the Gusanos state in OpenLieroX:

Ok, so far to the Gusanos support.

Then, there are 3D sounds now. That was introduced mainly because of Gusanos (which always had 3D sounds). The overall quality of the sounds should also be improved. We use OpenAL now.

And we have some more sounds for some ingame announcements, like "3 frags left", timeouts and some more stuff, also for CTF. Just see yourself. Those sounds were taken from the very nice Open Source 3D shooter Nexuiz.

And we have single player support now. :) This is mainly thought to provide some nice introduction / tutorial for newcomers. But maybe some of you is interested in creating a whole game? In any way, I hope I can get some further tutorial levels from you. More information will come later but it's mostly straight forward to be used (checkout the games directory).

I think that was all important stuff. Try it out. :)

Download here:

In case you get an "application configuration error", do this:
Download and install vcredist_x86.exe from here:

For those who have problems with sound on Windows, try out this: Download&unpack&install this file:

[Release] OpenLieroX 0.58 rc

2010-01-21 by albert


I am proud to announce the first stable release of the 0.58 version.

For some more details about what has changed between 0.57 and 0.58, and also some details about the development process of 0.58 itself, take a look here:,12642.msg198750.html#msg198750

Here a rough overview about the changes of the latest beta (0.58 beta9) and the 0.58 rc2:

- many crashes fixed
- somewhat better performance
- tooltip in chat for userinfo disappears correctly
- possibility to disable weapon combos
- some new default settings (only for those who start OLX for the first time)

Download here:

Some news in development organisation

2009-10-05 by albert

As it has been planned for a long time, the development management has changed. This change solves the problem with a complicated work on multiple versions at the same time. Also release creation has been simplified a lot, which will lead to more frequent releases.

The project has migrated from SVN to Git. There are 3 main branches (versions) at the moment: 0.57, 0.58 and the master. The master is always the most up-to-date code, it's the code for the upcoming 0.59 version.

For an impression follow the link and look at the bottom of the page under heads:

New releases will be created far more often. Nightly builds have been abandoned and will not be released anymore. A new beta release will be created if there's something to test.

A beta release is, as the name says, a testing release. There are known issues and the version is not always stable.

For bigger changes, a whole new version will be created (e.g., last is 0.58 now, next will be 0.59). For versions which look more promising or which are very much liked by the community, there will probably be more beta releases.

If there is one version, where the last beta release has became stable enough, a release candidate (RC) version will be released. If the RC version is stable, it will be marked as a final stable version.

[Release] OpenLieroX 0.58 beta

2009-10-05 by albert

This is an interesting new release.

For the first time in OpenLieroX history, the version number was increased. This version is not 0.57 anymore, but 0.58.

This release contains basically everything new that was done since 0.57 beta8. And this is a lot.

A very short summary:
- uploadlimit check fixed + automatic measuring of speed
- more stable network (CChannel3)
- improved HTML viewer
- IRC support
- dedicated server becomes useable
- improved connect-during-game
- background music by Corentin Larsen
- damage reporting (shows how much you injured a worm)
- new game options dialog
- ingame console can be used everywhere, also in menu
- ingame console much more advanced, many new commands, better autocompletion
- new debug logging system
- Hide & Seek gamemode
- Capture The Flag gamemode
- Race / Team Race gamemodes
- air jumping as an optional feature
- extended physics engine / gamescript (still in development)
- high-resolution level support
- possibility to make maps infinite
- possibility to disable minimap
- support for Commander Keen 1-3 levels
- game size factor (you can make everything bigger or smaller)
- hit/damage yourself/teammembers can be enabled/disabled (aka friendly fire on/off)
- immediate start
- worm speed/damage/shield/friction factor
- projectile friction factor
- physics should be exactly like LX56 now
- select weapons ingame (chat command /weapons)

Noteable new things over the 0.58 subreleases:
- new crashhandler, based on breakpad
- some fixes here, some improvements there


All files (currently Windows, Windows patch, MacOSX, Debian/Ubuntu i386, Debian/Ubuntu amd64 and source code) can be downloaded here:

Remember, this is a beta release. Most things will work in this version and there are a lot of new and nice things to discover, but there are also some known issues.

Some of the issues are described here:

If you see any problems, please report them!