Bot Object Buildings
I don't intend on giving a thorough tutorial on constructing and placing buildings but placing a building using a bot object is fairly simple. You can look at how this is accomplished by referencing the guard tower.
- Create your shape and ensure that it is in the media database (e.g. W:\database\Stuff...)
- Clone the object_watch_tower.creature sheet and change the shape used.
- Execute the build_gamedata pipeline to export the .shape file and update packed sheets.
- Add a new NPC bot using the new creature sheet. Place appropriately.
I can illustrate these steps in a future post or tutorial but this is the essence of how to do this.
Pros: Quickly and easily place inanimate objects on the landscape. Provides a dynamic means for modifying and moving these objects without needing to patch the client.
Cons: Consume an entity slot and must be directly tracked as an entity on the server side. All lighting and effects are performed dynamically. No complex scene objects such as instance groups are supported - meaning no portal/cluster support and no PACS triggers for teleportation, elevators or doors.
![]() |
| NPCs standing in front of the bot object guard tower in Ryzom Core. |
Bot Objects are very useful if you want to quickly (and dramatically) alter terrain and the layout with minimal effort and little or no patching required on the client. You can use them to quickly alter an area for an event, for example, and then revert the changes back assuming all of the relevant media is already distributed to the client.
Static Buildings
Static buildings are the best way to build large areas of inanimate objects such as a city or town. Because all of the data necessary to display these on a landscape zone are already on the client the client has a much greater ability to display and cull the geometry. When using the bot object method you may notice a "popping" of buildings - this is because the server has to make decisions based on priority, number of entities visible and entity view distance to determine whether or not to inform the client of the existence of the bot object. If you wander around Silan on the official Ryzom game servers you will know what I'm talking about. Using a static building leaves all of these decisions up to the 3D engine and removes the server as a component.
Pros: Advanced functionality and no reliance on the server for visibility. No "popping" due to priority or viewing distance.
Cons: Hard coded to the landscape and requires a full regeneration through the build pipeline. Cannot be dynamically manipulated. Substantial setup required within the 3D modelling package, in the build pipeline and in World Editor.
![]() |
| A custom placed static building on a development shard. |
Unlike the bot objects which just use the pipeline to run an export and simple shape optimization a static building will require the landscape for the continent to be completely regenerated. The pipeline will place the instance group representing the building onto its target zone and then run it through a series of lighting and shading passing and ultimately ends up "baking" the building onto the landscape.
Since bot objects tend to be simple objects the engine will just "snap" them to the landscape when it spawns them using the same technique that it uses to snap characters to the landscape. Static buildings tend to be more complex and have more reliance on the shape and position relative to the landscape in order to provide walk-able collision areas for things like doors. This means that process is more substantial:
- Assemble your building in a tool such as 3DSMAX.
- Import the building into a landscape brick using the building xref tools.
- Deform the landscape to accommodate the building.
- Use the pipeline to export the landscape brick and zone information.
- Copy the brick data generated above to the corresponding World Editor continent so that it is available.
- In landscape mode place (or replace) the zone.
- Run build_gamedata and update locations accordingly (e.g. data_shard, patch, client install, etc)


No comments:
Post a Comment