package RemoteFortressReader; //Attempts to provide a complete framework for reading everything from a fortress needed for vizualization option optimize_for = LITE_RUNTIME; // Plugin: RemoteFortressReader import "ItemdefInstrument.proto"; // RPC GetMaterialList : EmptyMessage -> MaterialList // RPC GetGrowthList : EmptyMessage -> MaterialList // RPC GetBlockList : BlockRequest -> BlockList // RPC CheckHashes : EmptyMessage -> EmptyMessage // RPC GetTiletypeList : EmptyMessage -> TiletypeList // RPC GetPlantList : BlockRequest -> PlantList // RPC GetUnitList : EmptyMessage -> UnitList // RPC GetUnitListInside : BlockRequest -> UnitList // RPC GetViewInfo : EmptyMessage -> ViewInfo // RPC GetMapInfo : EmptyMessage -> MapInfo // RPC ResetMapHashes : EmptyMessage -> EmptyMessage // RPC GetItemList : EmptyMessage -> MaterialList // RPC GetBuildingDefList : EmptyMessage -> BuildingList // RPC GetWorldMap : EmptyMessage -> WorldMap // RPC GetWorldMapNew : EmptyMessage -> WorldMap // RPC GetRegionMaps : EmptyMessage -> RegionMaps // RPC GetRegionMapsNew : EmptyMessage -> RegionMaps // RPC GetCreatureRaws : EmptyMessage -> CreatureRawList // RPC GetPartialCreatureRaws : ListRequest -> CreatureRawList // RPC GetWorldMapCenter : EmptyMessage -> WorldMap // RPC GetPlantRaws : EmptyMessage -> PlantRawList // RPC GetPartialPlantRaws : ListRequest -> PlantRawList // RPC CopyScreen : EmptyMessage -> ScreenCapture // RPC PassKeyboardEvent : KeyboardEvent -> EmptyMessage // RPC SendDigCommand : DigCommand -> EmptyMessage // RPC SetPauseState : SingleBool -> EmptyMessage // RPC GetPauseState : EmptyMessage -> SingleBool // RPC GetVersionInfo : EmptyMessage -> VersionInfo // RPC GetReports : EmptyMessage -> Status // RPC MoveCommand : MoveCommandParams -> EmptyMessage // RPC JumpCommand : MoveCommandParams -> EmptyMessage // RPC MenuQuery : EmptyMessage -> MenuContents // RPC MovementSelectCommand : IntMessage -> EmptyMessage // RPC MiscMoveCommand : MiscMoveParams -> EmptyMessage // RPC GetLanguage : EmptyMessage -> Language //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; NONE = 4; } enum TileDigDesignation { /** * no designation */ NO_DIG = 0; /** * dig walls, remove stairs and ramps, gather plants, fell trees */ DEFAULT_DIG = 1; UP_DOWN_STAIR_DIG = 2; CHANNEL_DIG = 3; RAMP_DIG = 4; DOWN_STAIR_DIG = 5; UP_STAIR_DIG = 6; } enum HairStyle { UNKEMPT = -1; NEATLY_COMBED = 0; BRAIDED = 1; DOUBLE_BRAID = 2; PONY_TAILS = 3; CLEAN_SHAVEN = 4; } enum InventoryMode { Hauled = 0; /** * also shield, crutch */ Weapon = 1; /** * quiver */ Worn = 2; Piercing = 3; /** * attached to clothing */ Flask = 4; /** * e.g. bandage */ WrappedAround = 5; StuckIn = 6; /** * string descr like Worn */ InMouth = 7; /** * Left shoulder, right shoulder, or head, selected randomly using pet_seed */ Pet = 8; SewnInto = 9; Strapped = 10; } message Coord { optional int32 x = 1; optional int32 y = 2; optional int32 z = 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 BuildingItem { optional Item item = 1; optional int32 mode = 2; } 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 repeated BuildingItem items = 14; optional int32 active = 15; } message RiverEdge { optional int32 min_pos = 1; optional int32 max_pos = 2; optional int32 active = 3; optional int32 elevation = 4; } message RiverTile { optional RiverEdge north = 1; optional RiverEdge south = 2; optional RiverEdge east = 3; optional RiverEdge west = 4; } enum MatterState { Solid = 0; Liquid = 1; Gas = 2; Powder = 3; Paste = 4; Pressed = 5; } message Spatter { optional MatPair material = 1; optional int32 amount = 2; optional MatterState state = 3; optional MatPair item = 4; } message SpatterPile { repeated Spatter spatters = 1; } message Item { optional int32 id = 1; optional Coord pos = 2; optional uint32 flags1 = 3; optional uint32 flags2 = 4; optional MatPair type = 5; optional MatPair material = 6; optional ColorDefinition dye = 7; optional int32 stack_size = 8; optional float subpos_x = 9; optional float subpos_y = 10; optional float subpos_z = 11; optional bool projectile = 12; optional float velocity_x = 13; optional float velocity_y = 14; optional float velocity_z = 15; optional int32 volume = 16; repeated ItemImprovement improvements = 17; optional ArtImage image = 18; } 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; repeated TileDigDesignation tile_dig_designation = 24; repeated SpatterPile spatterPile = 25; repeated Item items = 26; repeated bool tile_dig_designation_marker = 27; repeated bool tile_dig_designation_auto = 28; repeated int32 grass_percent = 29; repeated FlowInfo flows = 30; } 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. optional ItemdefInstrument.InstrumentDef instrument = 5; } 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 Hair { optional int32 length = 1; optional HairStyle style = 2; } 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 UnitAppearance { repeated int32 body_modifiers = 1; repeated int32 bp_modifiers = 2; optional int32 size_modifier = 3; repeated int32 colors = 4; optional Hair hair = 5; optional Hair beard = 6; optional Hair moustache = 7; optional Hair sideburns = 8; } message InventoryItem { optional InventoryMode mode = 1; optional Item item = 2; optional int32 body_part_id = 3; } 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; optional UnitAppearance appearance = 16; optional int32 profession_id = 17; repeated string noble_positions = 18; optional int32 rider_id = 19; repeated InventoryItem inventory = 20; optional float subpos_x = 21; optional float subpos_y = 22; optional float subpos_z = 23; optional Coord facing = 24; } 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; repeated Engraving engravings = 4; repeated Wave ocean_waves = 5; } 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; optional int32 follow_unit_id = 9 [default = -1]; optional int32 follow_item_id = 10 [default = -1]; } 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; optional WorldPoles world_poles = 22; repeated RiverTile river_tiles = 23; repeated int32 water_elevation = 24; repeated RegionTile region_tiles = 25; } enum SiteRealizationBuildingType { cottage_plot = 0; castle_wall = 1; castle_tower = 2; castle_courtyard = 3; house = 4; temple = 5; tomb = 6; shop_house = 7; warehouse = 8; market_square = 9; pasture = 10; waste = 11; courtyard = 12; well = 13; vault = 14; great_tower = 15; trenches = 16; tree_house = 17; hillock_house = 18; mead_hall = 19; fortress_entrance = 20; library = 21; tavern = 22; } message SiteRealizationBuildingWall { optional int32 start_x = 1; optional int32 start_y = 2; optional int32 start_z = 3; optional int32 end_x = 4; optional int32 end_y = 5; optional int32 end_z = 6; } message SiteRealizationBuildingTower { optional int32 roof_z = 1; optional bool round = 2; optional bool goblin = 3; } message TrenchSpoke { optional int32 mound_start = 1; optional int32 trench_start = 2; optional int32 trench_end = 3; optional int32 mound_end = 4; } message SiteRealizationBuildingTrenches { repeated TrenchSpoke spokes = 1; } message SiteRealizationBuilding { optional int32 id = 1; optional SiteRealizationBuildingType type = 2; optional int32 min_x = 3; optional int32 min_y = 4; optional int32 max_x = 5; optional int32 max_y = 6; optional MatPair material = 7; optional SiteRealizationBuildingWall wall_info = 8; optional SiteRealizationBuildingTower tower_info = 9; optional SiteRealizationBuildingTrenches trench_info = 10; } message RegionTile { optional int32 elevation = 1; optional int32 rainfall = 2; optional int32 vegetation = 3; optional int32 temperature = 4; optional int32 evilness = 5; optional int32 drainage = 6; optional int32 volcanism = 7; optional int32 savagery = 8; optional int32 salinity = 9; optional RiverTile river_tiles = 10; optional int32 water_elevation = 11; optional MatPair surface_material = 12; repeated MatPair plant_materials = 13; repeated SiteRealizationBuilding buildings = 14; repeated MatPair stone_materials = 15; repeated MatPair tree_materials = 16; optional int32 snow = 17; } message RegionMap { optional int32 map_x = 1; optional int32 map_y = 2; optional string name = 3; optional string name_english = 4; repeated RegionTile tiles = 5; } message RegionMaps { repeated WorldMap world_maps = 1; repeated RegionMap region_maps = 2; } enum PatternType { MONOTONE = 0; STRIPES = 1; IRIS_EYE = 2; SPOTS = 3; PUPIL_EYE = 4; MOTTLED = 5; } message PatternDescriptor { optional string id = 1; repeated ColorDefinition colors = 2; optional PatternType pattern = 3; } message ColorModifierRaw { repeated PatternDescriptor patterns = 1; repeated int32 body_part_id = 2; repeated int32 tissue_layer_id = 3; optional int32 start_date = 4; optional int32 end_date = 5; optional string part = 6; } message BodyPartLayerRaw { optional string layer_name = 1; optional int32 tissue_id = 2; optional int32 layer_depth = 3; repeated int32 bp_modifiers = 4; } message BodyPartRaw { optional string token = 1; optional string category = 2; optional int32 parent = 3; repeated bool flags = 4; repeated BodyPartLayerRaw layers = 5; optional int32 relsize = 6; } message BpAppearanceModifier { optional string type = 1; optional int32 mod_min = 2; optional int32 mod_max = 3; } message TissueRaw { optional string id = 1; optional string name = 2; optional MatPair material = 3; optional string subordinate_to_tissue = 4; } 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; repeated BodyPartRaw body_parts = 7; optional int32 total_relsize = 8; repeated BpAppearanceModifier modifiers = 9; repeated int32 modifier_idx = 10; repeated int32 part_idx = 11; repeated int32 layer_idx = 12; repeated BpAppearanceModifier body_appearance_modifiers = 13; repeated ColorModifierRaw color_modifiers = 14; optional string description = 15; optional int32 adult_size = 16; } 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; repeated TissueRaw tissues = 11; repeated bool flags = 12; } 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; } message ScreenTile { optional uint32 character = 1; optional uint32 foreground = 2; optional uint32 background = 3; } message ScreenCapture { optional uint32 width = 1; optional uint32 height = 2; repeated ScreenTile tiles = 3; } message KeyboardEvent { optional uint32 type = 1; optional uint32 which = 2; optional uint32 state = 3; optional uint32 scancode = 4; optional uint32 sym = 5; optional uint32 mod = 6; optional uint32 unicode = 7; } message DigCommand { optional TileDigDesignation designation = 1; repeated Coord locations = 2; } message SingleBool { optional bool Value = 1; } message VersionInfo { optional string dwarf_fortress_version = 1; optional string dfhack_version = 2; optional string remote_fortress_reader_version = 3; } message ListRequest { optional int32 list_start = 1; optional int32 list_end = 2; } message Report { optional int32 type = 1; optional string text = 2; optional ColorDefinition color = 3; optional int32 duration = 4; optional bool continuation = 5; optional bool unconscious = 6; optional bool announcement = 7; optional int32 repeat_count = 8; optional Coord pos = 9; optional int32 id = 10; optional int32 year = 11; optional int32 time = 12; } message Status { repeated Report reports = 1; } message ShapeDescriptior { optional string id = 1; optional int32 tile = 2; } message Language { repeated ShapeDescriptior shapes = 1; } enum ImprovementType { ART_IMAGE = 0; COVERED = 1; RINGS_HANGING = 2; BANDS = 3; SPIKES = 4; ITEMSPECIFIC = 5; THREAD = 6; CLOTH = 7; SEWN_IMAGE = 8; PAGES = 9; ILLUSTRATION = 10; INSTRUMENT_PIECE = 11; WRITING = 12; } message ItemImprovement { optional MatPair material = 1; optional ImprovementType type = 2; optional int32 shape = 3; optional int32 specific_type= 4; optional ArtImage image = 5; } enum ArtImageElementType { IMAGE_CREATURE = 0; IMAGE_PLANT = 1; IMAGE_TREE = 2; IMAGE_SHAPE = 3; IMAGE_ITEM = 4; } message ArtImageElement { optional int32 count = 1; optional ArtImageElementType type = 2; optional MatPair creature_item = 3; optional MatPair material = 5; optional int32 id = 6; } enum ArtImagePropertyType { TRANSITIVE_VERB = 0; INTRANSITIVE_VERB = 1; } message ArtImageProperty { optional int32 subject = 1; optional int32 object = 2; optional ArtImageVerb verb = 3; optional ArtImagePropertyType type = 4; } message ArtImage { repeated ArtImageElement elements = 1; optional MatPair id = 2; repeated ArtImageProperty properties = 3; } message Engraving { optional Coord pos = 1; optional int32 quality = 2; optional int32 tile = 3; optional ArtImage image = 4; optional bool floor = 5; optional bool west = 6; optional bool east = 7; optional bool north = 8; optional bool south = 9; optional bool hidden = 10; optional bool northwest = 11; optional bool northeast = 12; optional bool southwest = 13; optional bool southeast = 14; } enum ArtImageVerb { VERB_WITHERING = 0; VERB_SURROUNDEDBY = 1; VERB_MASSACRING = 2; VERB_FIGHTING = 3; VERB_LABORING = 4; VERB_GREETING = 5; VERB_REFUSING = 6; VERB_SPEAKING = 7; VERB_EMBRACING = 8; VERB_STRIKINGDOWN = 9; VERB_MENACINGPOSE = 10; VERB_TRAVELING = 11; VERB_RAISING = 12; VERB_HIDING = 13; VERB_LOOKINGCONFUSED = 14; VERB_LOOKINGTERRIFIED = 15; VERB_DEVOURING = 16; VERB_ADMIRING = 17; VERB_BURNING = 18; VERB_WEEPING = 19; VERB_LOOKINGDEJECTED = 20; VERB_CRINGING = 21; VERB_SCREAMING = 22; VERB_SUBMISSIVEGESTURE = 23; VERB_FETALPOSITION = 24; VERB_SMEAREDINTOSPIRAL = 25; VERB_FALLING = 26; VERB_DEAD = 27; VERB_LAUGHING = 28; VERB_LOOKINGOFFENDED = 29; VERB_BEINGSHOT = 30; VERB_PLAINTIVEGESTURE = 31; VERB_MELTING = 32; VERB_SHOOTING = 33; VERB_TORTURING = 34; VERB_COMMITTINGDEPRAVEDACT = 35; VERB_PRAYING = 36; VERB_CONTEMPLATING = 37; VERB_COOKING = 38; VERB_ENGRAVING = 39; VERB_PROSTRATING = 40; VERB_SUFFERING = 41; VERB_BEINGIMPALED = 42; VERB_BEINGCONTORTED = 43; VERB_BEINGFLAYED = 44; VERB_HANGINGFROM = 45; VERB_BEINGMUTILATED = 46; VERB_TRIUMPHANTPOSE = 47; } enum FlowType { Miasma = 0; Steam = 1; Mist = 2; MaterialDust = 3; MagmaMist = 4; Smoke = 5; Dragonfire = 6; Fire = 7; Web = 8; MaterialGas = 9; MaterialVapor = 10; OceanWave = 11; SeaFoam = 12; ItemCloud = 13; CampFire = -1; } message FlowInfo { optional int32 index = 1; optional FlowType type = 2; optional int32 density = 3; optional Coord pos = 4; optional Coord dest = 5; optional bool expanding = 6; optional bool reuse = 7; optional int32 guide_id = 8; optional MatPair material = 9; optional MatPair item = 10; } message Wave { optional Coord dest = 1; optional Coord pos = 2; }