Furniture isn’t even a class.
Each instance is literally just a single ID.
As far as most features go, vehicles are just blobs of static objects with flags, parented to a single entity.
Flags, stats, tracked passenger ids, targets, contained items and configuration info.
Overall enough data to be stored in a separately addressed structure rather than a submap-sized square array.
change the "vehicle" entities so that they only handle movement and construction.
And per-vehicle cache calculations that can’t be expressed in terms of individual components, per-turn updates, charge counting, configuration of the whole vehicle, turrets, folding, scoops, rotations…
As an additional added bonus, with proper handling of static vehicles you will increase performance in cities if current vehicles are as resource-intensive as you lead me to believe.
The problem isn’t vehicles being expensive to process (they aren’t perfect, but aren’t bad), the problem is keeping the track of all of them.
The issue is mostly about caching. Could become about memory size if handled badly.
Current implementation of vehicles is that they are “floating” in space, their position described by coordinates. This means that before processing them, they all have to be checked. Advantage of that is that they can store a lot of data which can be “moved” just by changing the coordinate.
Furniture is a 3D block of IDs.
Changing the coord option to ID option would require dumbing down vehicles so much they wouldn’t be able to perform their functions. So the only option left is IDs to objects.
And changing ID blocks to objects would slow down all of:
[ul][li]Fire processing[/li]
[li]Movement calculations[/li]
[li]Mapgen, saving and loading (counting as one because it doesn’t happen per-turn)[/li]
[li]Cache regeneration on map shifting[/li]
[li]Pathfinding[/li][/ul]
And that is assuming they would either get a cache like vehicle one or share cache with the vehicle one.
The only real performance gain from merging furniture and vehicles would come from unified check of furniture_or_vehicle, which would most likely be quite minimal.