The XL Engine is and will remain free, donations are purely optional but greatly appreciated.

Recent Comments

Archive for September 2011


I’ve been working on the networking model – basically client/server with “co-simulation” but ultimately server authoritative.

Basically it means that the client immediately reacts to inputs and actions and sends key presses, mouse movements and other input up to the server with timestamps. The server performs the exact same simulation, re-winding player positions and such when using certain types of weapons and then sends the client what it’s state should be. If the client and server state become out of sync then the client state is corrected using interpolation to smooth it out (unless it is severe – popping may occur in this case).

The idea is to make the game feel latency free (as much as possible) but still correcting as needed. Since the game update/physics time step is fixed, replaying a command stream will generate deterministic results – meaning the server and client will come up with the same answer most of the time.

So you get twitch gameplay, accurate weapons and still be cheat resistant due to server authoritative simulation.

As a side note, even though game updates and physics run at a fixed timestep rendering does not. In-between states are generated by interpolating gamestate and physics.


Level Interactivity

I’ve been moving over the INF system from DarkXL and making it more general to support BloodXL, OutlawsXL and DaggerXL. INF is essentially a system for controlling the interactive elements of levels, such as doors, elevators, dynamic sector lighting, scrolling textures, switches and so on. The result is a system where these elements can be built in code or script.

The DarkXL functionality will basically just transfer over. In BloodXL most of the level interactivity necessary for the first level (and much for the following levels as well) is now complete. Things like sliding doors, rotating doors, elevators, flickering lights, opening gates and more are working as you’ll see in the video below.

OutlawsXL interactivity should work pretty quickly, since the system will already be in place and working.

The interactivity in DaggerXL is comparatively simple, so switching it over to the new system won’t take very long. However this means that modders will get much greater support for interactive elements and puzzles in the dungeons using the scripting system.


I’m getting very close to holding the first multiplayer tests and then getting the merger build finally released!


BloodXL – A First Look

I’ve decided to post a video showing the current state of BloodXL. The game is running in “Bloodbath” mode, which basically means that all the Bloodbath weapons and items show up but that enemies are not represented. Note that this is still early work in progress and there are still numerous issues that need to be ironed out. However, hopefully you’ll agree, that BloodXL is progressing well and is nearly ready for the release.

This will be just a small update, but OutlawsXL now supports objects. It parses the Item definitions (.ITM files) and sprite files (NWX).


Next I will fix various texture alignment issues, properly parse vertical adjoins – which the engine already supports as seen from previous BloodXL posts and make some final Outlaws rendering tweaking.

Once that is complete I’ll start on level interactivity and get the multiplayer going.





Outlaws stuff is also coming along now as well:

Before the dual-adjoin support was added. Note though that is shows basic level geometry, textures, sky and slopes.

After dual adjoins were added.



I’ve recently added masked wall support and all the levels can be loaded. Next up is to get the sprite data converted and rendered – objects are being loaded but are current ignored except for the player start. Once that is done I’ll finish up the rendering for OutlawsXL and then start getting the gameplay and initial multiplayer pass in for the release.

Here you can see masked walls (used for windows):

This game uses dual-adjoins a lot in order to create 3D geometry from sectors, as you can see from the images below. Unlike Dark Forces, 3D models and secondary sector heights aren’t used. Instead even things like 3D staircase railings and fences are made out of sectors.


The XL Engine is and will remain free, donations are purely optional but greatly appreciated.