Working on LU
This page is meant to be a little FAQ/Guideline that tries to explain what you need to know and use to actively develop a server for LEGO Universe. It will include some general statements as well as some specifics concerning existing projects, since it’s basically worthless to start from scartch right now if you don’t have any experience with LU servers.
Feel free to link this page anywhere where people want to get into programming, as it’s extremely annoying and unproductive if those who know about it answer these questions many times on different webpages or in private conversations. Additionally, I could always update this page, if I’ve missed something important.
I wont go into much detail here, it will just be a briefing on what is public already. There are other sources out there which are still being worked on.
LU Client
Since the original servers have closed down, the only piece of software from LU that is still public, is the client. Luckily, there have been people who downloaded the full client while the game was live, so we have access to at least one full english client of the latest LU version (the BlastClient).
This makes it possible to recreate the game by creating a server that is able to make use of this client. As we’ll see this imposes some limitations on any development, but the alternative would be a full recreation of the game in an engine like Unity, which can not use the games resources we have access to fully, since some formats are proprietary, and some are a original creation of the LU devs and not or just partly understood right now.
There have been projects to recreate the game in another engine, though they are much further away from recreating the original content of the game than any serious project based on the original client.
This also means, that it is very unlikely at this point, that any additional content will be added to the game any time soon. This is very low priority and does not work well with the fact that the original client is used. It is true that many people request that and will continue to do so, it’s just really out of scope.
LU Engine
As was visible on the original LEGO Universe page on universe.lego.com, LU used the Gamebryo engine as a base for the game. Furthermore, it used (at least) the following middlewares:
- Havok (Physics & AI)
- Scaleform (UI)
- Bink (Cinematics)
- RakNet (Network)
This means, that a server requires some of these systems too, or an appropriate replacement for them. Specifically RakNet is important on the server side, since all client-server communication is done using version 3.25 of that library.
When using RakNet 3.25, this introduces some limitations to the server. Firstly, the only official version is written in C++ and requires a Microsoft Windows operating system to run, due to the way it handles networking. This also means that a server using this has to be written in C++, though it is apparently possible to create a wrapper for it to make it work with C#. Additionally, some developers have worked on a Python version of RakNet, though this is not public as far as I know.
LU Network
We are extremely lucky, that pwjones has captured some packets while the game was still live. These are binary files containing the client-server communication. A major part of making a server is to understand what data those packets contain, and to find out how to create them dynamically based on a large variety of systems that the client requires the server to have.
One example that has already been solved is multiplayer, where the server needs to send information about all other players to a player, a functionality, which could never work using just precaptured packets.
The other major aspect are those systems I mentioned a moment ago. The server needs to take care of managing objects, handling chat, character creation, mail, AI, teams, friends, missions, inventory, weapons and much more. Basically all of what you can see in the client in terms of UI, animation, graphics, etc. is still there, but the server needs to bring those “to life” and activate them at the right time.
LU Development
Current LU server development uses Visual Studio as a development environment and a MySQL server as a database to store game data. Additionally, any advanced setup requires some of the original game files, though usually not as-is, but converted into formats that can be used with libraries that are available to the public.
For example, some data form the client was distributed by some developers working to recreate LU (humanoid & lcdr) as objects.xml, though most systems use a sqlite database for that now.
It is unlikely, that you’ll get much help from experienced developers on how to set up public versions of existing source code as:
- Public codebases are mostly a dump of unfinished code, and were never really cleaned up to make the easy to install.
- They are not actively maintained, so you might run into issues that have since been solved or nobody knows the answer to or has a running copy of the code to investigate.
- They are not maintained for a reason, mainly because “community-friendly” individuals keep copying source-code, with complete disrespect of the authors and genrally leaving their audience uninformed on the origin of the software, because they don’t know or care about it.
- This results in a situation where people running a community do not have the expertise to help anybody set up for development, and some idealistic self-imposed moderators only make things worse with their complete lack of knowledge.
- Most of us are around our finals, at college or working, and this is a hobby, so we do not have time to explain much to you.
Nevertheless, I do encourage you to have a look into the source and work on it. It’s a great opportunity to learn more about reverse engineering, networking, programming in general and C++ which still is a major industry standard.
LU Contributions
Many people want to know what kind of skills are useful in LU developement, or if their personal skills apply here. Let me outline some skill areas and why they are or aren’t needed:
(+) Software Developer: The main task is writing an implementation of a server in C++. If you do have advanced programming experience, this is for you. You don’t necessarily have to have experience with C++ though it helps a ton. If you are experienced with Java, C# or similar languages, you can get into C++ pretty quickly. Just be careful, C++ is very low-level, it’s easy to mess stuff up.
(+) Web Developer (MySQL): There is some amount of database usage in the server, so it might be very useful to know your SQL. It’s not needed much, but i’ve seen some nasty code in the old codebase for this.
(+) Community Moderator: There are some LU communities out there, and they are pretty uninformed. If you are good at understanding situations, distributing accurate information, writing tutorails or documentation, feel free to aid those communities on the right track. And have a look for people that can get stuff done and don’t just pretend.
(-) Graphics Designer: A lot of you offered to create content for the game, expanding worlds, adding new ones. As described earlier, this is not really possible right now, so these skills are almost useless. Feel free to create awesome fan art though.
LU Resources
I hope this page can guide you well in any endeavours working on LU. I’ll sign off by giving you some links to existing resources, that’ll actually help you get stuff done:
- LUNI Repos
- LUNI FAQ: luniserver.com/info/faq/
- LU Docs: https://docs.google.com/document/d/1v9GB1gNwO0C81Rhd4imbaLN7z-R0zpK5sYJMbxPP3Kc
- On this Blog
- LU Overview: https://xiphosia.wordpress.com/lego-universe/
- Note for Creators: https://xiphosia.wordpress.com/luni/
- LUNI History: https://xiphosia.wordpress.com/2015/12/07/a-bit-of-backstory/