Build maps together with other people in multiplayer
Story of the development About 2 years ago (in 2009) I had the idea to make it possible that players can build together a city in the Crysis Wars Multiplayer. I achieved this idea and the BuildMod was born. I made it better and better, more stability, more flexibility, more functionality and improved the performance. At the begin, only static objects could be placed, but after a while I added interactive objects support. So I often deleted the mod and made it new (for a better code structure). When Crysis 2 came out, I had implement it in this game. But I noticed that there were a lot of barriers (can't add new console commands, can't use actionmaps in multiplayer, can't set key bindings, upload limit by the server, cheatprotection kicked players everytime, ...). So I decided to implement this mod in the CryENGINE 3 Free SDK. There I have much more possibilities for this mod and it works fine.
What is it exactly? With this mod you can build some stuff together with other people in realtime. You can place doors, lights, elevators, ventilators, physical objects, animated objects, particle effects, switches, teleporter, sound spots, forbidden areas, timer, trigger and static objects. Each object can be exactly configurated. Only the owner of an object can modify it. I made a efficient system to manage over 50.000 objects without any network or local performance issue. In Crysis Wars were a lot of memory leaks and so the memory usage rises while runtime, but now, with the CryEngine 3, there are fewer problems and better performance.
How to build? It is quite simple: First you have to select a object what you want to place. You can find objects in the object gallery of the map. Shoot at an object to select it. Then there will be a text at the position of the selected object, which describes the object (owner, objectTyp, scale, parameters, ...). If the selected object is yours, you can modify it (move, rotate, scale or set object parameters about console commands). If you want to place the selected object, you have to go to an position where you want and press the place key ("return" for example). Then the object (a copy of the selected object) will be placed.
But if you want to import an object from Sandbox, you can do this on this way: Select the object in the Sandbox Editor and copy the geometry filename of it. After that, go back to the game, open the console and type in: "- create <press CTRL+V to paste>". Then your object should be there.
There are much more commands to modify objects. Here are some console commands:
- door user:me = Setup the object as a door and only the owner of this object can use the door - light user:me red:1.0 green:0.0 blue:0.0 strength:3.0 = Setup the object as a red light with a strength of 3 - effect user:me source:explosions.flare.night_time = Setup the object as a particle effect - anim user:me source:idle01_loop = Setup the object as a animation - sound user:me source:music01.mp3 volume:0.5 radius:10 = Setup the object as a sound - physic mass:50 density:1000 = Physicalize the object
But you don't have to set always all parameters, because they are optional. So you can write
- light - set user:me - set strength:3 - set red:1 ...
Here a small example to make a light with a switch:
1. Select the object which should be the door. 2. Type in console: - door user:me targetname:myDoor 3. Select the object which should be the switch. 4. Type in console: - switch user:me target:myDoor
How does it work? All objects get saved on the current server every minute. I think this is enough, so there will be no data lost. If the server crashes, it will restart and loads the last saved map automatical. All objects are synchronous with the players and server. That means if a player turns on a light, all other players will see that at the same time, or if a player turn on music, the other players will hear it, too. So all objects are full synchronous. With switches you can call many objects at the same time. You can turn on all street lights of the city by pressing one switch for example. Or you can turn on the music, a ventilator and a particle effect by pressing a switch. This is possible by giving objects targetnames and tell the switch, which objects it should call.
I found out that the CryEngine 3 have a better memory handling than the CryEngine 2. The memory is still down at 560 MB with 2000 different objects. Without objects it is at 530 MB. So I am excited how much memory will the map need if there are much more than 50.000 objects. The BuildMod System compress and stores objects, which are not in the viewdistance, and delete them from the entity system. This will save memory and performance. And if the object is in the viewdistance again, it will be add in the enity system by the compressed data. The problem in Crysis Wars was, that every object which was deleted from the entity system, left unused memory in the RAM, which never gets deleted. And so the memory usage increased while the runtime.
Perhaps the mod gets a HUD for a better control. Everything is working about console commands, so the HUD will execute this commands to modify objects. But the main structure of the mod is working.