Object System
Contents
Description
SWG uses an Object System to store, manipulate and create game data and events.
The packets used are as follows:
SceneCreateObjectByCrc - Create an Instance of an Object.
BaselinesMessage - Initialize the Data.
SceneEndBaselines - Finish Initialization.
DeltasMessage - Update Data Members of the Object.
SceneDestroyObject - Destroy the Object.
ObjControllerMessage - Manipulate the Object.
Baselines
Baselines are used to initialize an Object with data.
For Objects not in control by the client, Baselines 3 and 6 are used.
Other baselines contain data specifically for that client and should not go to other clients.
Deltas
Deltas are updates to specific members of an Object. They have similar headers to baselines but the body contains a variable that references which member to update. This goes in order with the members of that baseline counting from 0 up.
So to change the first member use 0, for the 2nd member use 1, etc.
Some changes also have subtypes such as add and remove, they are noted in the structs.
Object Types
By referencing the /object/ folder on the Client, one can see templates for all game objects.
There are also base templates that are inherited into other objects. This can be seen inside the members
of an object.
Example
Resource Containers inherit Tangible Objects, and in the baseline, they are identical until the end where Resource Container specific members appear after the Tangible Members.
This is true for the entire inheritance system.
Here are a list of Object Base Types:
PACKET_TYPE | *.iff Filepath |
TANGIBLE | object/building/base/shared_base_building.iff |
INTANGIBLE | object/cell/base/shared_base_cell.iff |
CREATURE | object/creature/base/shared_base_creature.iff |
?? | object/draft_schematic/base/shared_base_draft_schematic.iff |
TANGIBLE | object/factory/base/shared_base_factory.iff |
GROUP | object/group/base/shared_base_group.iff |
GUILD | object/guild/base/shared_base_guild.iff |
INSTALLATION | object/installation/base/shared_installation_base.iff |
INTANGIBLE | object/intangible/base/shared_base_intangible.iff |
MANUFACTURE_SCHEMATIC | object/manufacture_schematic/base/shared_base_manufacture_schematic.iff |
MISSION | object/mission/base/shared_base_mission.iff |
?? | object/object/base/shared_base_object.iff |
TANGIBLE | object/path_waypoint/base/shared_path_waypoint_base.iff |
PLAYER | object/player/base/shared_base_player.iff |
RESOURCE_CONTAINER | object/resource_container/base/shared_base_resource_container.iff |
SHIP | object/ship/base/shared_ship_base.iff |
?? | object/soundobject/base/shared_soundobject_base.iff |
STATIC | object/static/base/shared_static_base.iff |
TANGIBLE | object/tangible/base/shared_tangible_base.iff |
WAYPOINT | object/waypoint/base/shared_base_waypoint.iff |
TANGIBLE | object/weapon/base/shared_base_weapon.iff |
*these seem to be deprecated.. as they would not create through packets* ?? object/construction_contract/base/shared_base_construction_contract.iff ?? object/counting/base/shared_base_counting.iff ?? object/universe/base/shared_base_universe.iff ?? object/token/base/shared_base_token.iff
Object Inheritance
As you can see, some types share the same packet structures. That is because while they inherit that object, they do not define more members. Following the same table of objects, these are the following inheritance maps for the currently used object types.
OBJECT_TYPE | PACKET_INHERITANCE | POST_INHERITANCE |
BASE_OBJECT | OBJECT | inherited into all other objects.. pretty much |
SOUNDOBJECT | OBJECT->SOUNDOBJECT | ?? |
STATIC | OBJECT->STATIC | static,non-interactive game objects |
UNIVERSE | OBJECT->UNIVERSE | inherited into systems that universally track data |
GROUP | OBJECT->UNIVERSE->GROUP | groups.. lol |
GUILD | OBJECT->UNIVERSE->GUILD | the guild list |
INTANGIBLE | OBJECT->INTANGIBLE | inherited in cells, datapads, and other intangible objects |
TOKEN | OBJECT->INTANGIBLE->TOKEN | unknown.. |
WAYPOINT | OBJECT->INTANGIBLE->WAYPOINT | waypoints |
DRAFT_SCHEMATIC | OBJECT->INTANGIBLE->DRAFT_SCHEMATIC | all draft schematics for crafting |
MANUFACTURE_SCHEMATIC | OBJECT->INTANGIBLE->MANUFACTURE_SCHEMATIC | used in the crafting process |
MISSION | OBJECT->INTANGIBLE->MISSION | used to store missions in terminals and datapad |
PLAYER | OBJECT->INTANGIBLE->PLAYER | stores player specific data |
CELL | OBJECT->INTANGIBLE->CELL | All Internal Room Cells |
CONSTRUCTION_CONTRACT | OBJECT->INTANGIBLE->CONSTRUCTION_CONTRACT | unknown.. |
TANGIBLE | OBJECT->TANGIBLE | all game items, also gets inherited into other objects |
BUILDING | OBJECT->TANGIBLE->BUILDING | Cities,Player Houses,Bases, All Buildings |
CREATURE | OBJECT->TANGIBLE->CREATURE | mobile, vehicles, NPCs, players, mobs |
FACTORY_CRATE | OBJECT->TANGIBLE->FACTORY_CRATE | factory crates and manufactured goods |
INSTALLATION | OBJECT->TANGIBLE->INSTALLATION | harvestors and factory structures |
PATH_WAYPOINT | OBJECT->TANGIBLE->PATH_WAYPOINT | used to do path markers |
RESOURCE_CONTAINER | OBJECT->TANGIBLE->RESOURCE_CONTAINER | resources |
SHIP | OBJECT->TANGIBLE->SHIP | ships |
WEAPON | OBJECT->TANGIBLE->WEAPON | all game weapon items |
COUNTING | OBJECT->TANGIBLE->COUNTING | unknown.. |
Object Packet Members ¶
Here is a table and links to individual Packet Structures for Objects that the server can send.
Notice: Objects that define no new members are not listed. Only specifically variating structs are listed. Parsing Types (Actual STRUCT Variation)