The Space Object Factory: One File To Rule Them All | EVE Online

The Space Object Factory: One File To Rule Them All

2014-09-24 - CCP Mankiller

Greetings, Capsuleers! 

CCP Mankiller (never convicted) here to tell you a little bit about how we save the data for our spaceships. Now, by “data” I mean visual data only; no gameplay stats, number of high slots, drone bay volume, etc. I am strictly talking about the things you can see while in space: the materials, the lights, the decals.

I know, I know! Most of you care more about your Dominix’s speed and armor than the color or orientation of that small Gallente decal there at the back by the boosters. Graphics are nice, sure, but EVE is about spreadsheets so I’ll make this as short as possible! ;)

How it used to be – red files

EVE has many spaceships. Some are very different from one another (e.g. Moros and Incursus), and others not so much (Scorpion and Rattlesnake). No matter the degree of difference between any two ships, we used to save every single ship in a single unique file known as a “red file”:

  • Moros: model/ship/gallente/dreadnought/GDn1/GDn1_T1.red
  • Incursus: model/ship/gallente/Frigate/GF4/GF4_T1.red
  • Scorpion: model/ship/caldari/BattleShip/CB2/CB2_T1.red
  • Rattlesnake: model/ship/caldari/BattleShip/CB2/Guristas/CB2_T1_Guristas.red

The problem here is that the actual content of CB2_T1 and CB2_T1_Guristas is almost identical! Even when you compare GDn1_T1 and GF4_T1 you’ll find some similarities; the decal setup, for example, since both are Gallente ships.

Maintaining this kind of redundant data is bad practice and leads to inconsistencies between our ships. Plus it is a nightmare to work with. If we wanted to change the colored tint of the Sarum glow lights for example we would have to open, edit, save and QA the red files for every Sarum ship!

On top of all this: how would this red file system work with ship customization? The answer is simple: it wouldn’t!  And we know from years of Fanfests and trial blueprint offerings just how much our pilots want ship customization. “Spreadsheets” be damned we say! So we had to come up with something new…

The Space Object Factory

The Space Object Factory (SOF) is a single software module reading in all ship data and producing each and every ship identified by a minimum of strings. For example, the SOF describes the above mentioned ships are all uniquely described by:

Moros: gdn1_t1:gallentebase:gallente

Incursus: gf4_t1:gallentebase:gallente

Scorpion: cb2_t1:caldaribase:caldari

Rattlesnake: cb2_t1:guristas:caldari

For every standard ship in EVE we can boil it down to the hull name (“gdn1_t1”, “gf4_t1”, …), the faction (“gallentebase”, “guristas”, …) and the race (“gallente”, “caldari”, …). Each name points to unique set of data for hull, faction and race and combines those results into a spaceship that is loaded into the client.

In theory any combination is possible and supported by the SOF, but how much sense does a ship with a Moros hull with Guristas material and Sansha boosters really make? That question is rhetorical.  Please do not ask for a Sanistaros.  Please.

What does this new system change for players?

Visually? Nothing right now actually. The ships generated by the SOF are visually identical to the ships generated by manually edited red file system.  Loading these new ship name strings, though, is a bit faster due to the more efficient storage of data. There should be less delay between when the client calls for a ship and when it appears in space.

That said, we have taken the opportunity to retweak some of the red files that have gradually evolved over the years of manual faction and race adjustments.  We finally tended to the Gallente CreoDron ships, for one. They are now back to the greenish look they used to have when New Eden was young.

What is going to change for tool developers?

Potentially? A lot. If your tool relies on individual ship files in the stuff package, then you have a problem. We will keep those files around initially, but the next step in the process is removing unused red files altogether. You can refactor your tools to use the single SOF database file here:

dx9/model/SpaceObjectFactory/data.red

I hope this helps to explain this fundamental (though hopefully invisible) change to our ship data as we march towards ship customization options in the future.  As always, I invite you ask questions and contribute to the discussion in the comments below.


(Click to enlarge. Quite a bit)

CCP Mankiller, over und aus!