#include <stdio.h>
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint;
typedef struct Tile {
union {
struct {
uint8 type:3;
uint8 amount:2;
uint8 counter:3;
uint8 fields:4;
uint8 hedge_se:3;
/* 1 unused bit */
uint8 hedge_sw:3;
/* 13 unused bits */
} clear;
struct {
uint8 type:2;
uint8 track_type:2;
uint8 ground:4;
union {
struct {
uint8 tracks:6;
/* 2 unused bits */
struct {
uint8 present:4;
uint8 state:4;
uint8 type:2;
uint8 semaphore:1;
/* 5 unused bits */
} signal;
} track;
struct {
uint8 dir:2;
/* 22 unused bits */
} depot;
struct {
uint8 dir:1;
/* 23 unused bits */
} checkpoint;
};
} railway;
struct {
uint8 type:2;
uint8 roadwork_counter:5;
uint8 snow_or_desert:1;
uint8 ground:3;
/* 5 unused bits */
union {
struct {
uint8 pieces:4;
/* 12 unused bits */
} road;
struct {
uint8 road_owner;
uint8 dir:1;
uint8 lights:1;
uint8 track_type:2;
/* 4 unused bits */
} crossing;
struct {
uint8 dir:2;
/* 12 unused bits */
} depot;
};
} street;
struct {
uint8 type;
uint8 stage:2;
uint8 counter:3;
/* 3 unused bits */
struct {
uint8 pos:7;
uint8 moving:1;
uint8 dest:6;
/* 2 unused bits */
} lift;
} town;
struct {
uint8 type;
uint8 ground:2;
uint8 ground_amount:2;
uint8 counter:4;
uint8 count:2;
uint8 growth:3;
uint8 hedge_sw:3;
uint8 hedge_se:3;
/* 5 unused bits */
} trees;
struct {
uint16 index;
uint16 part:7;
uint16 type:4;
uint16 track_type:2;
/* 3 unused bits */
} station;
struct {
uint8 type:3;
uint8 part:4;
/* 25 unused bits */
} water;
struct {
uint8 type;
uint8 index;
uint8 built:1;
uint8 stage:2;
uint8 counter:3;
/* 10 unused bits */
} industry;
struct {
uint8 transport:2;
uint8 dir:2;
uint8 track_type:2;
uint8 snow_or_desert:1;
/* 25 unused bits */
} tunnel;
struct {
uint8 owner;
uint8 type:4;
uint8 track_type:2;
uint8 transport:2;
uint8 dir:1;
uint8 end_num:1;
uint8 snow_or_desert:1;
uint8 is_middle_part:1;
/* 4 unused bits */
union {
struct {
uint8 under_is_transport:1;
uint8 under_track_type:2;
uint8 piece:3;
};
struct {
uint8 :6;
uint8 under_ground:2;
};
struct {
uint8 :6;
uint8 under_transport:2;
};
} middle;
} bridge;
struct {
uint8 type:7;
/* 1 unused bit */
uint8 part:4;
/* 20 unused bits */
} unmovable;
};
uint8 type:4; // MP_* constants
uint8 height:4;
uint8 slope;
uint8 owner:4;
/* 12 unused bits */
} Tile;
Tile tile;
int main(void)
{
printf("clear %2d\n", sizeof(tile.clear));
printf("railway %2d\n", sizeof(tile.railway));
printf("street %2d\n", sizeof(tile.street));
printf("town %2d\n", sizeof(tile.town));
printf("trees %2d\n", sizeof(tile.trees));
printf("station %2d\n", sizeof(tile.station));
printf("water %2d\n", sizeof(tile.water));
printf("industry %2d\n", sizeof(tile.industry));
printf("tunnel %2d\n", sizeof(tile.tunnel));
printf("bridge %2d\n", sizeof(tile.bridge));
printf("unmovable %2d\n", sizeof(tile.unmovable));
printf("Tile %2d\n", sizeof(tile));
return 0;
}