package RemoteFortressReader; //Attempts to provide a complete framework for reading everything from a fortress needed for vizualization option optimize_for = LITE_RUNTIME; //We use shapes, etc, because the actual tiletypes may differ between DF versions. enum TiletypeShape { NO_SHAPE = -1; EMPTY = 0; FLOOR = 1; BOULDER = 2; PEBBLES = 3; WALL = 4; FORTIFICATION = 5; STAIR_UP = 6; STAIR_DOWN = 7; STAIR_UPDOWN = 8; RAMP = 9; RAMP_TOP = 10; BROOK_BED = 11; BROOK_TOP = 12; TREE_SHAPE = 13; SAPLING = 14; SHRUB = 15; ENDLESS_PIT = 16; BRANCH = 17; TRUNK_BRANCH = 18; TWIG = 19; } enum TiletypeSpecial { NO_SPECIAL = -1; NORMAL = 0; RIVER_SOURCE = 1; WATERFALL = 2; SMOOTH = 3; FURROWED = 4; WET = 5; DEAD = 6; WORN_1 = 7; WORN_2 = 8; WORN_3 = 9; TRACK = 10; SMOOTH_DEAD = 11; }; enum TiletypeMaterial { NO_MATERIAL = -1; AIR = 0; SOIL = 1; STONE = 2; FEATURE = 3; LAVA_STONE = 4; MINERAL = 5; FROZEN_LIQUID = 6; CONSTRUCTION = 7; GRASS_LIGHT = 8; GRASS_DARK = 9; GRASS_DRY = 10; GRASS_DEAD = 11; PLANT = 12; HFS = 13; CAMPFIRE = 14; FIRE = 15; ASHES = 16; MAGMA = 17; DRIFTWOOD = 18; POOL = 19; BROOK = 20; RIVER = 21; ROOT = 22; TREE_MATERIAL = 23; MUSHROOM = 24; UNDERWORLD_GATE = 25; } enum TiletypeVariant { NO_VARIANT = -1; VAR_1 = 0; VAR_2 = 1; VAR_3 = 2; VAR_4 = 3; }; enum WorldPoles { NO_POLES = 0; NORTH_POLE = 1; SOUTH_POLE = 2; BOTH_POLES = 3; } enum BuildingDirection { NORTH = 0; EAST = 1; SOUTH = 2; WEST = 3; } message Tiletype { required int32 id = 1; optional string name = 2; optional string caption = 3; optional TiletypeShape shape = 4; optional TiletypeSpecial special = 5; optional TiletypeMaterial material = 6; optional TiletypeVariant variant = 7; optional string direction = 8; }; message TiletypeList { repeated Tiletype tiletype_list = 1; } message BuildingExtents { required int32 pos_x = 1; required int32 pos_y = 2; required int32 width = 3; required int32 height = 4; repeated int32 extents = 5; } message BuildingInstance { required int32 index = 1; optional int32 pos_x_min = 2; optional int32 pos_y_min = 3; optional int32 pos_z_min = 4; optional int32 pos_x_max = 5; optional int32 pos_y_max = 6; optional int32 pos_z_max = 7; optional BuildingType building_type = 8; optional MatPair material = 9; optional uint32 building_flags = 10; optional bool is_room = 11; optional BuildingExtents room = 12; optional BuildingDirection direction = 13; //Doesn't mean anything for most buildings } message MapBlock { required int32 map_x = 1; required int32 map_y = 2; required int32 map_z = 3; repeated int32 tiles = 4; repeated MatPair materials = 5; repeated MatPair layer_materials = 6; repeated MatPair vein_materials = 7; repeated MatPair base_materials = 8; repeated int32 magma = 9; repeated int32 water = 10; repeated bool hidden = 11; repeated bool light = 12; repeated bool subterranean = 13; repeated bool outside = 14; repeated bool aquifer = 15; repeated bool water_stagnant = 16; repeated bool water_salt = 17; repeated MatPair construction_items = 18; repeated BuildingInstance buildings = 19; repeated int32 tree_percent = 20; repeated int32 tree_x = 21; repeated int32 tree_y = 22; repeated int32 tree_z = 23; } message MatPair { required int32 mat_type = 1; required int32 mat_index = 2; } message ColorDefinition { required int32 red = 1; required int32 green = 2; required int32 blue = 3; } message MaterialDefinition{ required MatPair mat_pair = 1; optional string id = 2; optional string name = 3; optional ColorDefinition state_color = 4; //Simplifying colors to assume room temperature. } message BuildingType { required int32 building_type = 1; required int32 building_subtype = 2; required int32 building_custom = 3; } message BuildingDefinition { required BuildingType building_type = 1; optional string id = 2; optional string name = 3; } message BuildingList { repeated BuildingDefinition building_list = 1; } message MaterialList{ repeated MaterialDefinition material_list = 1; } message BodySizeInfo { optional int32 size_cur = 1; optional int32 size_base = 2; optional int32 area_cur = 3; /*!< size_cur^0.666 */ optional int32 area_base = 4; /*!< size_base^0.666 */ optional int32 length_cur = 5; /*!< (size_cur*10000)^0.333 */ optional int32 length_base = 6; /*!< (size_base*10000)^0.333 */ } message UnitDefinition { required int32 id = 1; optional bool isValid = 2; optional int32 pos_x = 3; optional int32 pos_y = 4; optional int32 pos_z = 5; optional MatPair race = 6; optional ColorDefinition profession_color = 7; optional uint32 flags1 = 8; optional uint32 flags2 = 9; optional uint32 flags3 = 10; optional bool is_soldier = 11; optional BodySizeInfo size_info = 12; optional string name = 13; optional int32 blood_max = 14; optional int32 blood_count = 15; } message UnitList { repeated UnitDefinition creature_list = 1; } message BlockRequest { optional int32 blocks_needed = 1; optional int32 min_x = 2; optional int32 max_x = 3; optional int32 min_y = 4; optional int32 max_y = 5; optional int32 min_z = 6; optional int32 max_z = 7; } message BlockList { repeated MapBlock map_blocks = 1; optional int32 map_x = 2; optional int32 map_y = 3; } message PlantDef { required int32 pos_x = 1; required int32 pos_y = 2; required int32 pos_z = 3; required int32 index = 4; } message PlantList { repeated PlantDef plant_list = 1; } message ViewInfo { optional int32 view_pos_x = 1; optional int32 view_pos_y = 2; optional int32 view_pos_z = 3; optional int32 view_size_x = 4; optional int32 view_size_y = 5; optional int32 cursor_pos_x = 6; optional int32 cursor_pos_y = 7; optional int32 cursor_pos_z = 8; } message MapInfo { optional int32 block_size_x = 1; optional int32 block_size_y = 2; optional int32 block_size_z = 3; optional int32 block_pos_x = 4; optional int32 block_pos_y = 5; optional int32 block_pos_z = 6; optional string world_name = 7; optional string world_name_english = 8; optional string save_name = 9; } enum FrontType { FRONT_NONE = 0; FRONT_WARM = 1; FRONT_COLD = 2; FRONT_OCCLUDED = 3; } enum CumulusType { CUMULUS_NONE = 0; CUMULUS_MEDIUM = 1; CUMULUS_MULTI = 2; CUMULUS_NIMBUS = 3; } enum StratusType { STRATUS_NONE = 0; STRATUS_ALTO = 1; STRATUS_PROPER = 2; STRATUS_NIMBUS = 3; } enum FogType { FOG_NONE = 0; FOG_MIST = 1; FOG_NORMAL = 2; F0G_THICK = 3; } message Cloud { optional FrontType front = 1; optional CumulusType cumulus = 2; optional bool cirrus = 3; optional StratusType stratus = 4; optional FogType fog = 5; } message WorldMap { required int32 world_width = 1; required int32 world_height = 2; optional string name = 3; optional string name_english = 4; repeated int32 elevation = 5; repeated int32 rainfall = 6; repeated int32 vegetation = 7; repeated int32 temperature = 8; repeated int32 evilness = 9; repeated int32 drainage = 10; repeated int32 volcanism = 11; repeated int32 savagery = 12; repeated Cloud clouds = 13; repeated int32 salinity = 14; optional int32 map_x = 15; optional int32 map_y = 16; optional int32 center_x = 17; optional int32 center_y = 18; optional int32 center_z = 19; optional int32 cur_year = 20; optional int32 cur_year_tick = 21; } message RegionMaps { repeated WorldMap world_maps = 1; } message CasteRaw { optional int32 index = 1; optional string caste_id = 2; repeated string caste_name = 3; repeated string baby_name = 4; repeated string child_name = 5; optional int32 gender = 6; } message CreatureRaw { optional int32 index = 1; optional string creature_id = 2; repeated string name = 3; repeated string general_baby_name = 4; repeated string general_child_name = 5; optional int32 creature_tile = 6; optional int32 creature_soldier_tile = 7; optional ColorDefinition color = 8; optional int32 adultsize = 9; repeated CasteRaw caste = 10; } message CreatureRawList { repeated CreatureRaw creature_raws = 1; } message Army { optional int32 id = 1; optional int32 pos_x = 2; optional int32 pos_y = 3; optional int32 pos_z = 4; optional UnitDefinition leader = 5; repeated UnitDefinition members = 6; optional uint32 flags = 7; } message ArmyList { repeated Army armies = 1; } message GrowthPrint { optional int32 priority = 1; optional int32 color = 2; optional int32 timing_start = 3; optional int32 timing_end = 4; optional int32 tile = 5; } message TreeGrowth { optional int32 index = 1; optional string id = 2; optional string name = 3; optional MatPair mat = 4; repeated GrowthPrint prints = 5; optional int32 timing_start = 6; optional int32 timing_end = 7; optional bool twigs = 8; optional bool light_branches = 9; optional bool heavy_branches = 10; optional bool trunk = 11; optional bool roots = 12; optional bool cap = 13; optional bool sapling = 14; optional int32 trunk_height_start = 15; optional int32 trunk_height_end = 16; } message PlantRaw { optional int32 index = 1; optional string id = 2; optional string name = 3; repeated TreeGrowth growths = 4; optional int32 tile = 5; } message PlantRawList { repeated PlantRaw plant_raws = 1; }