Okay, lets see some code.
struct tile { uint type; // Bridge, ground, support, tunnel, etc. union { struct bridge { uint bridgetype; // not sure this is needed }; struct ground { uint slope; uint grass_state; }; struct support { // What should go here? }; struct tunnel { //maybe we should have information about the direction here? }; }; }; struct content { uint type; // station, industry, rail, road, etc. union { struct station { }; struct industry { }; struct rail { }; // etc } } struct maptile { uint height; // z coordinate struct tile tile; struct content content; maptile* next; } _map[];