diff --git a/clients/unity/.gitignore b/clients/unity/.gitignore
new file mode 100644
index 000000000..d784f4250
--- /dev/null
+++ b/clients/unity/.gitignore
@@ -0,0 +1,11 @@
+[Oo]bj
+[Bb]in
+*.user
+*.suo
+*.[Cc]ache
+*.bak
+*.ncb
+*.log
+*.DS_Store
+[Tt]humbs.db
+Ankh.NoLoad
diff --git a/clients/unity/simple_sample/Assembly-CSharp-Editor-vs.csproj b/clients/unity/simple_sample/Assembly-CSharp-Editor-vs.csproj
new file mode 100644
index 000000000..c22a3b8ce
--- /dev/null
+++ b/clients/unity/simple_sample/Assembly-CSharp-Editor-vs.csproj
@@ -0,0 +1,69 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}
+ Library
+ Properties
+
+ Assembly-CSharp-Editor
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ Temp\bin\Debug\
+ DEBUG;TRACE;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_IMAGEEFFECTS;ENABLE_WEBCAM;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_NETWORK;ENABLE_MONO;ENABLE_PHYSICS;ENABLE_TERRAIN;ENABLE_CACHING;ENABLE_SUBSTANCE;ENABLE_GENERICS;ENABLE_CLOTH;ENABLE_MOVIES;ENABLE_AUDIO;ENABLE_WWW;ENABLE_SHADOWS;ENABLE_DUCK_TYPING;UNITY_4_1_5;UNITY_4_1;ENABLE_PROFILER;UNITY_EDITOR
+ prompt
+ 4
+ 0169
+
+
+ pdbonly
+ true
+ Temp\bin\Release\
+ TRACE
+ prompt
+ 4
+ 0169
+
+
+
+
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEngine.dll
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEditor.dll
+
+
+
+
+
+
+ Assets\protobuf-net.dll
+
+
+ C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.Graphs.dll
+
+
+
+
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6} Assembly-CSharp-vs
+
+
+
+
+
diff --git a/clients/unity/simple_sample/Assembly-CSharp-Editor.csproj b/clients/unity/simple_sample/Assembly-CSharp-Editor.csproj
new file mode 100644
index 000000000..0545b4be8
--- /dev/null
+++ b/clients/unity/simple_sample/Assembly-CSharp-Editor.csproj
@@ -0,0 +1,69 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}
+ Library
+ Properties
+
+ Assembly-CSharp-Editor
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ Temp\bin\Debug\
+ DEBUG;TRACE;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_IMAGEEFFECTS;ENABLE_WEBCAM;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_NETWORK;ENABLE_MONO;ENABLE_PHYSICS;ENABLE_TERRAIN;ENABLE_CACHING;ENABLE_SUBSTANCE;ENABLE_GENERICS;ENABLE_CLOTH;ENABLE_MOVIES;ENABLE_AUDIO;ENABLE_WWW;ENABLE_SHADOWS;ENABLE_DUCK_TYPING;UNITY_4_1_5;UNITY_4_1;ENABLE_PROFILER;UNITY_EDITOR
+ prompt
+ 4
+ 0169
+
+
+ pdbonly
+ true
+ Temp\bin\Release\
+ TRACE
+ prompt
+ 4
+ 0169
+
+
+
+
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEngine.dll
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEditor.dll
+
+
+
+
+
+
+ Assets\protobuf-net.dll
+
+
+ C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.Graphs.dll
+
+
+
+
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6} Assembly-CSharp
+
+
+
+
+
diff --git a/clients/unity/simple_sample/Assembly-CSharp-Editor.pidb b/clients/unity/simple_sample/Assembly-CSharp-Editor.pidb
new file mode 100644
index 000000000..7aee5c8f3
Binary files /dev/null and b/clients/unity/simple_sample/Assembly-CSharp-Editor.pidb differ
diff --git a/clients/unity/simple_sample/Assembly-CSharp-vs.csproj b/clients/unity/simple_sample/Assembly-CSharp-vs.csproj
new file mode 100644
index 000000000..0ad90a354
--- /dev/null
+++ b/clients/unity/simple_sample/Assembly-CSharp-vs.csproj
@@ -0,0 +1,73 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}
+ Library
+ Properties
+
+ Assembly-CSharp
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ Temp\bin\Debug\
+ DEBUG;TRACE;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_IMAGEEFFECTS;ENABLE_WEBCAM;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_NETWORK;ENABLE_MONO;ENABLE_PHYSICS;ENABLE_TERRAIN;ENABLE_CACHING;ENABLE_SUBSTANCE;ENABLE_GENERICS;ENABLE_CLOTH;ENABLE_MOVIES;ENABLE_AUDIO;ENABLE_WWW;ENABLE_SHADOWS;ENABLE_DUCK_TYPING;UNITY_4_1_5;UNITY_4_1;ENABLE_PROFILER;UNITY_EDITOR
+ prompt
+ 4
+ 0169
+
+
+ pdbonly
+ true
+ Temp\bin\Release\
+ TRACE
+ prompt
+ 4
+ 0169
+
+
+
+
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEngine.dll
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEditor.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets\protobuf-net.dll
+
+
+
+
+
+
diff --git a/clients/unity/simple_sample/Assembly-CSharp.csproj b/clients/unity/simple_sample/Assembly-CSharp.csproj
new file mode 100644
index 000000000..0ad90a354
--- /dev/null
+++ b/clients/unity/simple_sample/Assembly-CSharp.csproj
@@ -0,0 +1,73 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}
+ Library
+ Properties
+
+ Assembly-CSharp
+ v3.5
+ 512
+
+
+ true
+ full
+ false
+ Temp\bin\Debug\
+ DEBUG;TRACE;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_IMAGEEFFECTS;ENABLE_WEBCAM;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_NETWORK;ENABLE_MONO;ENABLE_PHYSICS;ENABLE_TERRAIN;ENABLE_CACHING;ENABLE_SUBSTANCE;ENABLE_GENERICS;ENABLE_CLOTH;ENABLE_MOVIES;ENABLE_AUDIO;ENABLE_WWW;ENABLE_SHADOWS;ENABLE_DUCK_TYPING;UNITY_4_1_5;UNITY_4_1;ENABLE_PROFILER;UNITY_EDITOR
+ prompt
+ 4
+ 0169
+
+
+ pdbonly
+ true
+ Temp\bin\Release\
+ TRACE
+ prompt
+ 4
+ 0169
+
+
+
+
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEngine.dll
+
+
+ C:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEditor.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets\protobuf-net.dll
+
+
+
+
+
+
diff --git a/clients/unity/simple_sample/Assembly-CSharp.pidb b/clients/unity/simple_sample/Assembly-CSharp.pidb
new file mode 100644
index 000000000..b50da3cb0
Binary files /dev/null and b/clients/unity/simple_sample/Assembly-CSharp.pidb differ
diff --git a/clients/unity/simple_sample/Assets/ArenaMode.png b/clients/unity/simple_sample/Assets/ArenaMode.png
new file mode 100644
index 000000000..57f5651c2
Binary files /dev/null and b/clients/unity/simple_sample/Assets/ArenaMode.png differ
diff --git a/clients/unity/simple_sample/Assets/Bad.mat b/clients/unity/simple_sample/Assets/Bad.mat
new file mode 100644
index 000000000..2a2164176
Binary files /dev/null and b/clients/unity/simple_sample/Assets/Bad.mat differ
diff --git a/clients/unity/simple_sample/Assets/DFHack/isoworldremote.pb.cs b/clients/unity/simple_sample/Assets/DFHack/isoworldremote.pb.cs
new file mode 100644
index 000000000..46c85e370
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/DFHack/isoworldremote.pb.cs
@@ -0,0 +1,312 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+// Generated from: isoworldremote.proto
+namespace isoworldremote
+{
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"EmbarkTileLayer")]
+ public partial class EmbarkTileLayer : global::ProtoBuf.IExtensible
+ {
+ public EmbarkTileLayer() {}
+
+ private readonly global::System.Collections.Generic.List _mat_type_table = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(4, Name=@"mat_type_table", DataFormat = global::ProtoBuf.DataFormat.TwosComplement, Options = global::ProtoBuf.MemberSerializationOptions.Packed)]
+ public global::System.Collections.Generic.List mat_type_table
+ {
+ get { return _mat_type_table; }
+ }
+
+ private readonly global::System.Collections.Generic.List _mat_subtype_table = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(5, Name=@"mat_subtype_table", DataFormat = global::ProtoBuf.DataFormat.TwosComplement, Options = global::ProtoBuf.MemberSerializationOptions.Packed)]
+ public global::System.Collections.Generic.List mat_subtype_table
+ {
+ get { return _mat_subtype_table; }
+ }
+
+ private readonly global::System.Collections.Generic.List _tile_shape_table = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(6, Name=@"tile_shape_table", DataFormat = global::ProtoBuf.DataFormat.TwosComplement, Options = global::ProtoBuf.MemberSerializationOptions.Packed)]
+ public global::System.Collections.Generic.List tile_shape_table
+ {
+ get { return _tile_shape_table; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"EmbarkTile")]
+ public partial class EmbarkTile : global::ProtoBuf.IExtensible
+ {
+ public EmbarkTile() {}
+
+ private int _world_x;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"world_x", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ public int world_x
+ {
+ get { return _world_x; }
+ set { _world_x = value; }
+ }
+ private int _world_y;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"world_y", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ public int world_y
+ {
+ get { return _world_y; }
+ set { _world_y = value; }
+ }
+ private int _world_z;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"world_z", DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
+ public int world_z
+ {
+ get { return _world_z; }
+ set { _world_z = value; }
+ }
+ private readonly global::System.Collections.Generic.List _tile_layer = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(4, Name=@"tile_layer", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List tile_layer
+ {
+ get { return _tile_layer; }
+ }
+
+
+ private int _current_year = default(int);
+ [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"current_year", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int current_year
+ {
+ get { return _current_year; }
+ set { _current_year = value; }
+ }
+
+ private int _current_season = default(int);
+ [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"current_season", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int current_season
+ {
+ get { return _current_season; }
+ set { _current_season = value; }
+ }
+
+ private bool _is_valid = default(bool);
+ [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"is_valid", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(default(bool))]
+ public bool is_valid
+ {
+ get { return _is_valid; }
+ set { _is_valid = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"TileRequest")]
+ public partial class TileRequest : global::ProtoBuf.IExtensible
+ {
+ public TileRequest() {}
+
+
+ private int _want_x = default(int);
+ [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"want_x", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int want_x
+ {
+ get { return _want_x; }
+ set { _want_x = value; }
+ }
+
+ private int _want_y = default(int);
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"want_y", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int want_y
+ {
+ get { return _want_y; }
+ set { _want_y = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"MapRequest")]
+ public partial class MapRequest : global::ProtoBuf.IExtensible
+ {
+ public MapRequest() {}
+
+
+ private string _save_folder = "";
+ [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"save_folder", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string save_folder
+ {
+ get { return _save_folder; }
+ set { _save_folder = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"MapReply")]
+ public partial class MapReply : global::ProtoBuf.IExtensible
+ {
+ public MapReply() {}
+
+ private bool _available;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"available", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool available
+ {
+ get { return _available; }
+ set { _available = value; }
+ }
+
+ private int _region_x = default(int);
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"region_x", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int region_x
+ {
+ get { return _region_x; }
+ set { _region_x = value; }
+ }
+
+ private int _region_y = default(int);
+ [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"region_y", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int region_y
+ {
+ get { return _region_y; }
+ set { _region_y = value; }
+ }
+
+ private int _region_size_x = default(int);
+ [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"region_size_x", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int region_size_x
+ {
+ get { return _region_size_x; }
+ set { _region_size_x = value; }
+ }
+
+ private int _region_size_y = default(int);
+ [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"region_size_y", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int region_size_y
+ {
+ get { return _region_size_y; }
+ set { _region_size_y = value; }
+ }
+
+ private int _current_year = default(int);
+ [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"current_year", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int current_year
+ {
+ get { return _current_year; }
+ set { _current_year = value; }
+ }
+
+ private int _current_season = default(int);
+ [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"current_season", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int current_season
+ {
+ get { return _current_season; }
+ set { _current_season = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"RawNames")]
+ public partial class RawNames : global::ProtoBuf.IExtensible
+ {
+ public RawNames() {}
+
+ private bool _available;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"available", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool available
+ {
+ get { return _available; }
+ set { _available = value; }
+ }
+ private readonly global::System.Collections.Generic.List _inorganic = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(2, Name=@"inorganic", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List inorganic
+ {
+ get { return _inorganic; }
+ }
+
+ private readonly global::System.Collections.Generic.List _organic = new global::System.Collections.Generic.List();
+ [global::ProtoBuf.ProtoMember(3, Name=@"organic", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List organic
+ {
+ get { return _organic; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::ProtoBuf.ProtoContract(Name=@"BasicMaterial")]
+ public enum BasicMaterial
+ {
+
+ [global::ProtoBuf.ProtoEnum(Name=@"AIR", Value=0)]
+ AIR = 0,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"OTHER", Value=1)]
+ OTHER = 1,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"INORGANIC", Value=2)]
+ INORGANIC = 2,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"LIQUID", Value=3)]
+ LIQUID = 3,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"PLANT", Value=4)]
+ PLANT = 4,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"WOOD", Value=5)]
+ WOOD = 5
+ }
+
+ [global::ProtoBuf.ProtoContract(Name=@"LiquidType")]
+ public enum LiquidType
+ {
+
+ [global::ProtoBuf.ProtoEnum(Name=@"ICE", Value=0)]
+ ICE = 0,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"WATER", Value=1)]
+ WATER = 1,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"MAGMA", Value=2)]
+ MAGMA = 2
+ }
+
+ [global::ProtoBuf.ProtoContract(Name=@"BasicShape")]
+ public enum BasicShape
+ {
+
+ [global::ProtoBuf.ProtoEnum(Name=@"NONE", Value=0)]
+ NONE = 0,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"OPEN", Value=1)]
+ OPEN = 1,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"WALL", Value=3)]
+ WALL = 3,
+
+ [global::ProtoBuf.ProtoEnum(Name=@"FLOOR", Value=4)]
+ FLOOR = 4
+ }
+
+}
\ No newline at end of file
diff --git a/clients/unity/simple_sample/Assets/Editor/MapBlockEditor.cs b/clients/unity/simple_sample/Assets/Editor/MapBlockEditor.cs
new file mode 100644
index 000000000..c4d5c6a1a
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/Editor/MapBlockEditor.cs
@@ -0,0 +1,104 @@
+using isoworldremote;
+using UnityEditor;
+using UnityEngine;
+using System;
+
+[CustomEditor(typeof(MapBlock))]
+[CanEditMultipleObjects]
+public class MapBlockEditor : Editor
+{
+ static Color32 selectedColor = Color.white;
+ static BasicShape selectedShape = BasicShape.WALL;
+
+ public override void OnInspectorGUI()
+ {
+ MapBlock[] targetBlocks = Array.ConvertAll(targets, element => (MapBlock)element);
+ if(targets.Length == 1)
+ EditorGUILayout.LabelField(targets.Length + " Map Block selected.");
+ else
+ EditorGUILayout.LabelField(targets.Length + " Map Blocks selected.");
+
+ selectedColor = EditorGUILayout.ColorField("Material Color", selectedColor);
+ selectedShape = (BasicShape)EditorGUILayout.EnumPopup("Terrain Shape ", selectedShape);
+ EditorGUILayout.BeginVertical();
+ DFHack.DFCoord2d tempCoord = new DFHack.DFCoord2d();
+ for (int i = 0; i < 16; i++)
+ {
+ EditorGUILayout.BeginHorizontal();
+ for (int j = 0; j < 16; j++)
+ {
+ tempCoord.x = j;
+ tempCoord.y = i;
+ Color currentColor = targetBlocks[0].GetColor(tempCoord);
+ for (int index = 1; index < targetBlocks.Length; index++)
+ {
+ if (currentColor != targetBlocks[index].GetColor(tempCoord))
+ {
+ currentColor = Color.white;
+ break;
+ }
+ }
+ currentColor.a = 1.0f;
+ GUI.color = currentColor;
+ string buttonIcon = "\u00A0";
+ BasicShape tile = targetBlocks[0].GetSingleTile(tempCoord);
+ for (int index = 1; index < targetBlocks.Length; index++)
+ {
+ if (tile != targetBlocks[index].GetSingleTile(tempCoord))
+ {
+ tile = BasicShape.NONE;
+ break;
+ }
+
+ }
+ switch (tile)
+ {
+ case BasicShape.WALL:
+ buttonIcon = "▓";
+ break;
+ case BasicShape.FLOOR:
+ buttonIcon = "+";
+ break;
+ case BasicShape.NONE:
+ buttonIcon = "?";
+ break;
+ case BasicShape.OPEN:
+ buttonIcon = "\u00A0";
+ break;
+ default:
+ buttonIcon = "?";
+ break;
+ }
+ if (GUILayout.Button(buttonIcon))
+ {
+ for (int index = 0; index < targetBlocks.Length; index++)
+ {
+ targetBlocks[index].SetSingleTile(tempCoord, selectedShape);
+ targetBlocks[index].SetColor(tempCoord, selectedColor);
+ targetBlocks[index].Regenerate();
+ EditorUtility.SetDirty(targetBlocks[index]);
+ }
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ EditorGUILayout.EndVertical();
+ GUI.color = Color.white;
+ if (GUILayout.Button("Fill"))
+ {
+ for (int index = 0; index < targetBlocks.Length; index++)
+ {
+ for (int i = 0; i < 16; i++)
+ for (int j = 0; j < 16; j++)
+ {
+ DFHack.DFCoord2d here = new DFHack.DFCoord2d(j, i);
+ targetBlocks[index].SetSingleTile(here, selectedShape);
+ targetBlocks[index].SetColor(here, selectedColor);
+
+ }
+ targetBlocks[index].Regenerate();
+ EditorUtility.SetDirty(targetBlocks[index]);
+ }
+ }
+ }
+}
diff --git a/clients/unity/simple_sample/Assets/GameWindow.cs b/clients/unity/simple_sample/Assets/GameWindow.cs
new file mode 100644
index 000000000..1760ca4de
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/GameWindow.cs
@@ -0,0 +1,57 @@
+using UnityEngine;
+using System.Collections;
+
+public class GameWindow : MonoBehaviour
+{
+ public int viewPortWidth = 80;
+ public int viewPortHeight = 25;
+ public float verticalShift;
+ public float viewDistance = 5;
+ float n, f, r, l, t, b;
+ Matrix4x4 mat = new Matrix4x4();
+ // Use this for initialization
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+ float screenAspect = (float)Screen.width / (float)Screen.height;
+ float viewportAspect = (float)viewPortWidth / (float)viewPortHeight;
+
+ float fraction = screenAspect / viewportAspect;
+
+ float height = (viewPortHeight / 2.0f) / Mathf.Sin((camera.fov / 2) * Mathf.Deg2Rad);
+ transform.localPosition = new Vector3(0, height, -verticalShift);
+
+ camera.nearClipPlane = height - 1.0001f;
+ camera.farClipPlane = height + viewDistance;
+ RenderSettings.fogStartDistance = camera.nearClipPlane;
+ RenderSettings.fogEndDistance = camera.farClipPlane;
+ if (fraction > 1.0f) //If the screen is wider than the DF Viewport
+ {
+ camera.rect = new Rect(0.5f - ((1.0f / fraction) / 2.0f), 0.0f, 1.0f / fraction, 1.0f);
+ }
+ else //If the DF Viewport is wider.
+ {
+ camera.rect = new Rect(0.0f, 0.5f - (fraction / 2.0f), 1.0f, fraction);
+ }
+ //make a custom camera matrix, rather than use the inbuilt one.
+ n = camera.nearClipPlane;
+ f = camera.farClipPlane;
+ r = viewPortWidth / 2.0f;
+ l = -viewPortWidth / 2.0f;
+ t = verticalShift + (viewPortHeight / 2.0f);
+ b = verticalShift - (viewPortHeight / 2.0f);
+
+
+ mat[0, 0] = 2 * n / (r - l); mat[1, 0] = 0; mat[2, 0] = 0; mat[3, 0] = 0;
+ mat[0, 1] = 0; mat[1, 1] = 2 * n / (t - b); mat[2, 1] = 0; mat[3, 1] = 0;
+ mat[0, 2] = (r + l) / (r - l); mat[1, 2] = (t + b) / (t - b); mat[2, 2] = -(f + n) / (f - n); mat[3, 2] = -1;
+ mat[0, 3] = 0; mat[1, 3] = 0; mat[2, 3] = -2 * f * n / (f - n); ; mat[3, 3] = 0;
+
+ camera.projectionMatrix = mat;
+ }
+}
diff --git a/clients/unity/simple_sample/Assets/HUDFPS.cs b/clients/unity/simple_sample/Assets/HUDFPS.cs
new file mode 100644
index 000000000..88fdd3755
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/HUDFPS.cs
@@ -0,0 +1,79 @@
+using UnityEngine;
+using System.Collections;
+
+[AddComponentMenu("Utilities/HUDFPS")]
+public class HUDFPS : MonoBehaviour
+{
+ // Attach this to any object to make a frames/second indicator.
+ //
+ // It calculates frames/second over each updateInterval,
+ // so the display does not keep changing wildly.
+ //
+ // It is also fairly accurate at very low FPS counts (<10).
+ // We do this not by simply counting frames per interval, but
+ // by accumulating FPS for each frame. This way we end up with
+ // corstartRect overall FPS even if the interval renders something like
+ // 5.5 frames.
+
+ public Rect startRect = new Rect(10, 10, 75, 50); // The rect the window is initially displayed at.
+ public bool updateColor = true; // Do you want the color to change if the FPS gets low
+ public bool allowDrag = true; // Do you want to allow the dragging of the FPS window
+ public float frequency = 0.5F; // The update frequency of the fps
+ public int nbDecimal = 1; // How many decimal do you want to display
+
+ private float accum = 0f; // FPS accumulated over the interval
+ private int frames = 0; // Frames drawn over the interval
+ private Color color = Color.white; // The color of the GUI, depending of the FPS ( R < 10, Y < 30, G >= 30 )
+ private string sFPS = ""; // The fps formatted into a string.
+ private GUIStyle style; // The style the text will be displayed at, based en defaultSkin.label.
+
+ void Start()
+ {
+ StartCoroutine(FPS());
+ }
+
+ void Update()
+ {
+ accum += Time.timeScale / Time.deltaTime;
+ ++frames;
+ }
+
+ IEnumerator FPS()
+ {
+ // Infinite loop executed every "frenquency" secondes.
+ while (true)
+ {
+ // Update the FPS
+ float fps = accum / frames;
+ sFPS = fps.ToString("f" + Mathf.Clamp(nbDecimal, 0, 10));
+
+ //Update the color
+ color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.red : Color.yellow);
+
+ accum = 0.0F;
+ frames = 0;
+
+ yield return new WaitForSeconds(frequency);
+ }
+ }
+
+ void OnGUI()
+ {
+ // Copy the default label skin, change the color and the alignement
+ if (style == null)
+ {
+ style = new GUIStyle(GUI.skin.label);
+ style.normal.textColor = Color.white;
+ style.alignment = TextAnchor.MiddleCenter;
+ }
+
+ GUI.color = updateColor ? color : Color.white;
+ startRect = GUI.Window(0, startRect, DoMyWindow, "");
+ }
+
+ void DoMyWindow(int windowID)
+ {
+ GUI.Label(new Rect(0, 0, startRect.width, startRect.height), sFPS + " FPS", style);
+ if (allowDrag) GUI.DragWindow(new Rect(0, 0, Screen.width, Screen.height));
+ }
+}
\ No newline at end of file
diff --git a/clients/unity/simple_sample/Assets/MapGen/GameMap.cs b/clients/unity/simple_sample/Assets/MapGen/GameMap.cs
new file mode 100644
index 000000000..8f7bc1ffc
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/MapGen/GameMap.cs
@@ -0,0 +1,15 @@
+using UnityEngine;
+using System.Collections;
+
+public class GameMap : MonoBehaviour {
+
+ // Use this for initialization
+ void Start () {
+
+ }
+
+ // Update is called once per frame
+ void Update () {
+
+ }
+}
diff --git a/clients/unity/simple_sample/Assets/MapGen/MapBlock.cs b/clients/unity/simple_sample/Assets/MapGen/MapBlock.cs
new file mode 100644
index 000000000..6d8f7014a
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/MapGen/MapBlock.cs
@@ -0,0 +1,262 @@
+using DFHack;
+using System.Collections.Generic;
+using UnityEngine;
+using isoworldremote;
+
+public class MapBlock : MonoBehaviour
+{
+ public static float floorHeight = 0.1f;
+ DFCoord coordinates;
+ GameMap parent;
+
+ [SerializeField]
+ BasicShape[] terrain = new BasicShape[256];
+ [SerializeField]
+ Color32[] colors = new Color32[256];
+
+ List finalVertices = new List();
+ List finalFaces = new List();
+ List finalVertexColors = new List();
+ List finalUVs = new List();
+
+ public enum Openness
+ {
+ air,
+ mixed,
+ stone
+ }
+ Openness openness;
+
+ public void SetOpenness()
+ {
+ int air = 0;
+ int solid = 0;
+ for (int x = 0; x < 16; x++)
+ for (int y = 0; y < 16; y++)
+ {
+ if (terrain[y * 16 + x] == BasicShape.OPEN || terrain[y * 16 + x] == BasicShape.NONE)
+ air++;
+ else if (terrain[y * 16 + x] == BasicShape.WALL)
+ solid++;
+ }
+ if (air == 256)
+ openness = Openness.air;
+ else if (solid == 256)
+ openness = Openness.stone;
+ else openness = Openness.mixed;
+ }
+
+ public Openness GetOpenness()
+ {
+ return openness;
+ }
+
+ public Color32 GetColor(DFCoord2d position)
+ {
+ return colors[position.x + position.y * 16];
+ }
+
+ public void SetColor(DFCoord2d position, Color32 input)
+ {
+ colors[position.x + position.y * 16] = input;
+ }
+
+ public void SetSingleTile(DFCoord2d position, BasicShape tile)
+ {
+ terrain[position.x + position.y * 16] = tile;
+ SetOpenness();
+ }
+
+ public BasicShape GetSingleTile(DFCoord2d position)
+ {
+ if (position.x >= 0 && position.x < 16 && position.y >= 0 && position.y < 16)
+ return terrain[position.x + position.y * 16];
+ else
+ return BasicShape.NONE;
+ }
+
+ public void Regenerate()
+ {
+ finalVertices.Clear();
+ finalFaces.Clear();
+ finalVertexColors.Clear();
+ finalUVs.Clear();
+
+ if (openness == Openness.air)
+ {
+ }
+ else
+ {
+ for (int i = 0; i < 16; i++)
+ for (int j = 0; j < 16; j++)
+ {
+ DFCoord2d here = new DFCoord2d(i, j);
+ switch (GetSingleTile(here))
+ {
+ case BasicShape.WALL:
+ AddTopFace(here, 1.0f);
+ break;
+ case BasicShape.FLOOR:
+ AddTopFace(here, floorHeight);
+ break;
+ }
+ AddSideFace(here, FaceDirection.North);
+ AddSideFace(here, FaceDirection.South);
+ AddSideFace(here, FaceDirection.East);
+ AddSideFace(here, FaceDirection.West);
+ }
+ }
+ MeshFilter mf = GetComponent();
+ Mesh mesh = new Mesh();
+ mf.mesh = mesh;
+ mesh.vertices = finalVertices.ToArray();
+ mesh.uv = finalUVs.ToArray();
+ mesh.colors32 = finalVertexColors.ToArray();
+ mesh.triangles = finalFaces.ToArray();
+ mesh.RecalculateBounds();
+ mesh.RecalculateNormals();
+ }
+
+ enum FaceDirection
+ {
+ Up,
+ Down,
+ North,
+ South,
+ East,
+ West
+ }
+
+ BasicShape GetRelativeTile(DFCoord2d position, FaceDirection direction)
+ {
+ DFCoord2d relativePosition = new DFCoord2d(position.x, position.y);
+ switch (direction)
+ {
+ case FaceDirection.North:
+ relativePosition.y--;
+ break;
+ case FaceDirection.South:
+ relativePosition.y++;
+ break;
+ case FaceDirection.East:
+ relativePosition.x++;
+ break;
+ case FaceDirection.West:
+ relativePosition.x--;
+ break;
+ }
+ return GetSingleTile(relativePosition);
+ }
+
+ void AddSideFace(DFCoord2d position, FaceDirection direction)
+ {
+ float currentFloorHeight = -0.5f;
+ float adjacentFloorHeight = -0.5f;
+ switch (GetSingleTile(position))
+ {
+ case BasicShape.WALL:
+ currentFloorHeight = 0.5f;
+ break;
+ case BasicShape.FLOOR:
+ currentFloorHeight = floorHeight - 0.5f;
+ break;
+ default:
+ break;
+ }
+ switch (GetRelativeTile(position, direction))
+ {
+ case BasicShape.WALL:
+ adjacentFloorHeight = 0.5f;
+ break;
+ case BasicShape.FLOOR:
+ adjacentFloorHeight = floorHeight - 0.5f;
+ break;
+ default:
+ break;
+ }
+ if (currentFloorHeight <= adjacentFloorHeight)
+ return;
+ int startindex = finalVertices.Count;
+ int uvPos = 0;
+ switch (direction)
+ {
+ case FaceDirection.North:
+ finalVertices.Add(new Vector3(position.x + 0.5f, currentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, currentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, adjacentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, adjacentFloorHeight, -(position.y - 0.5f)));
+ uvPos = position.x;
+ break;
+ case FaceDirection.South:
+ finalVertices.Add(new Vector3(position.x - 0.5f, currentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, currentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, adjacentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, adjacentFloorHeight, -(position.y + 0.5f)));
+ uvPos = 16 - position.x;
+ break;
+ case FaceDirection.East:
+ finalVertices.Add(new Vector3(position.x + 0.5f, currentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, currentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, adjacentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, adjacentFloorHeight, -(position.y - 0.5f)));
+ uvPos = position.y;
+ break;
+ case FaceDirection.West:
+ finalVertices.Add(new Vector3(position.x - 0.5f, currentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, currentFloorHeight, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, adjacentFloorHeight, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, adjacentFloorHeight, -(position.y + 0.5f)));
+ uvPos = 16 - position.y;
+ break;
+ default:
+ break;
+ }
+ finalUVs.Add(new Vector2(-(float)(uvPos + 1) / 16.0f, -(float)(0) / 16.0f));
+ finalUVs.Add(new Vector2(-(float)(uvPos) / 16.0f, -(float)(0) / 16.0f));
+ finalUVs.Add(new Vector2(-(float)(uvPos + 1) / 16.0f, -(float)(0 + 1) / 16.0f));
+ finalUVs.Add(new Vector2(-(float)(uvPos) / 16.0f, -(float)(0 + 1) / 16.0f));
+
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+
+ finalFaces.Add(startindex);
+ finalFaces.Add(startindex + 1);
+ finalFaces.Add(startindex + 2);
+
+ finalFaces.Add(startindex + 1);
+ finalFaces.Add(startindex + 3);
+ finalFaces.Add(startindex + 2);
+ }
+
+ void AddTopFace(DFCoord2d position, float height)
+ {
+ height -= 0.5f;
+ //Todo: Weld vertices that should be welded
+ //On second though, not with vertex colors there.
+ int startindex = finalVertices.Count;
+ finalVertices.Add(new Vector3(position.x - 0.5f, height, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, height, -(position.y - 0.5f)));
+ finalVertices.Add(new Vector3(position.x - 0.5f, height, -(position.y + 0.5f)));
+ finalVertices.Add(new Vector3(position.x + 0.5f, height, -(position.y + 0.5f)));
+
+ finalUVs.Add(new Vector2((float)(position.x) / 16.0f, -(float)(position.y) / 16.0f));
+ finalUVs.Add(new Vector2((float)(position.x + 1) / 16.0f, -(float)(position.y) / 16.0f));
+ finalUVs.Add(new Vector2((float)(position.x) / 16.0f, -(float)(position.y + 1) / 16.0f));
+ finalUVs.Add(new Vector2((float)(position.x + 1) / 16.0f, -(float)(position.y + 1) / 16.0f));
+
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+ finalVertexColors.Add(GetColor(position));
+
+ finalFaces.Add(startindex);
+ finalFaces.Add(startindex + 1);
+ finalFaces.Add(startindex + 2);
+
+ finalFaces.Add(startindex + 1);
+ finalFaces.Add(startindex + 3);
+ finalFaces.Add(startindex + 2);
+ }
+}
diff --git a/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs b/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs
index f23faa761..dd315310f 100644
--- a/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs
+++ b/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs
@@ -58,8 +58,8 @@ namespace DFHack
class RPCHandshakeHeader
{
- public string magic;
- public int version;
+ //public string magic;
+ //public int version;
public static string REQUEST_MAGIC = "DFHack?\n";
public static string RESPONSE_MAGIC = "DFHack!\n";
@@ -93,6 +93,136 @@ namespace DFHack
}
}
+ // simple function to store
+ struct DFCoord
+ {
+ public int x, y, z;
+ //convert
+ UnityEngine.Vector3 ToVector3()
+ {
+ return new UnityEngine.Vector3(x + 0.5f, z + 0.5f, -y - 0.5f);
+ }
+ static DFCoord FromVector3(UnityEngine.Vector3 input)
+ {
+ DFCoord output = new DFCoord((int)input.x, (int)(-input.z), (int)input.y);
+ return output;
+ }
+
+ DFCoord(int inx, int iny, int inz)
+ {
+ x = inx;
+ y = iny;
+ z = inz;
+ }
+
+ public bool isValid()
+ {
+ return x != -30000;
+ }
+ public void clear()
+ {
+ x = y = z = -30000;
+ }
+
+ public static bool operator <(DFCoord a, DFCoord b)
+ {
+ if (a.x != b.x) return (a.x < b.x);
+ if (a.y != b.y) return (a.y < b.y);
+ return a.z < b.z;
+ }
+ public static bool operator >(DFCoord a, DFCoord b)
+ {
+ if (a.x != b.x) return (a.x > b.x);
+ if (a.y != b.y) return (a.y > b.y);
+ return a.z > b.z;
+ }
+ public static DFCoord operator +(DFCoord a, DFCoord b)
+ {
+ return new DFCoord(a.x + b.x, a.y + b.y, a.z + b.z);
+ }
+ public static DFCoord operator -(DFCoord a, DFCoord b)
+ {
+ return new DFCoord(a.x - b.x, a.y - b.y, a.z - b.z);
+ }
+ public static DFCoord operator /(DFCoord a, int number)
+ {
+ return new DFCoord((a.x < 0 ? a.x - number : a.x) / number, (a.y < 0 ? a.y - number : a.y) / number, a.z);
+ }
+ public static DFCoord operator *(DFCoord a, int number)
+ {
+ return new DFCoord(a.x * number, a.y * number, a.z);
+ }
+ public static DFCoord operator %(DFCoord a, int number)
+ {
+ return new DFCoord((a.x + number) % number, (a.y + number) % number, a.z);
+ }
+ public static DFCoord operator -(DFCoord a, int number)
+ {
+ return new DFCoord(a.x, a.y, a.z - number);
+ }
+ public static DFCoord operator +(DFCoord a, int number)
+ {
+ return new DFCoord(a.x, a.y, a.z + number);
+ }
+ }
+ public struct DFCoord2d
+ {
+ public int x;
+ public int y;
+
+ public DFCoord2d(int _x, int _y)
+ {
+ x = _x;
+ y = _y;
+ }
+
+ public bool isValid()
+ {
+ return x != -30000;
+ }
+ public void clear()
+ {
+ x = y = -30000;
+ }
+
+ public static bool operator <(DFCoord2d a, DFCoord2d b)
+ {
+ if (a.x != b.x) return (a.x < b.x);
+ return a.y < b.y;
+ }
+ public static bool operator >(DFCoord2d a, DFCoord2d b)
+ {
+ if (a.x != b.x) return (a.x > b.x);
+ return a.y > b.y;
+ }
+
+ public static DFCoord2d operator +(DFCoord2d a, DFCoord2d b)
+ {
+ return new DFCoord2d(a.x + b.x, a.y + b.y);
+ }
+ public static DFCoord2d operator -(DFCoord2d a, DFCoord2d b)
+ {
+ return new DFCoord2d(a.x - b.x, a.y - b.y);
+ }
+
+
+ public static DFCoord2d operator /(DFCoord2d a, int number)
+ {
+ return new DFCoord2d((a.x < 0 ? a.x - number : a.x) / number, (a.y < 0 ? a.y - number : a.y) / number);
+ }
+ public static DFCoord2d operator *(DFCoord2d a, int number)
+ {
+ return new DFCoord2d(a.x * number, a.y * number);
+ }
+ public static DFCoord2d operator %(DFCoord2d a, int number)
+ {
+ return new DFCoord2d((a.x + number) % number, (a.y + number) % number);
+ }
+ public static DFCoord2d operator &(DFCoord2d a, int number)
+ {
+ return new DFCoord2d(a.x & number, a.y & number);
+ }
+ }
/* Protocol description:
*
* 1. Handshake
@@ -323,7 +453,7 @@ namespace DFHack
this.proto, this.name, header.size);
return command_result.CR_LINK_FAILURE;
}
-
+
byte[] buf = new byte[header.size];
if (!RemoteClient.readFullBuffer(p_client.socket, buf, header.size))
@@ -361,7 +491,6 @@ namespace DFHack
break;
}
}
- return command_result.CR_OK;
}
@@ -671,7 +800,6 @@ namespace DFHack
if (!suspend_ready)
{
suspend_ready = true;
-
suspend_call.bind(this, "CoreSuspend");
resume_call.bind(this, "CoreResume");
}
@@ -701,7 +829,8 @@ namespace DFHack
RemoteFunction runcmd_call;
bool suspend_ready;
- RemoteFunction suspend_call, resume_call;
+ RemoteFunction suspend_call = new RemoteFunction();
+ RemoteFunction resume_call = new RemoteFunction();
}
class RemoteSuspender
diff --git a/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs b/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs
index bc16a1221..d39110ba9 100644
--- a/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs
+++ b/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs
@@ -468,7 +468,7 @@ namespace AT.MIN
#endregion
#region s - string
case 's': // string
- string t = "{0" + ( fieldLength != int.MinValue ? "," + ( flagLeft2Right ? "-" : String.Empty ) + fieldLength.ToString() : String.Empty ) + ":s}";
+ //string t = "{0" + ( fieldLength != int.MinValue ? "," + ( flagLeft2Right ? "-" : String.Empty ) + fieldLength.ToString() : String.Empty ) + ":s}";
w = o.ToString();
if ( fieldPrecision >= 0 )
w = w.Substring( 0, fieldPrecision );
diff --git a/clients/unity/simple_sample/Assets/Start.unity b/clients/unity/simple_sample/Assets/Start.unity
index b115f6ec5..71c631052 100644
Binary files a/clients/unity/simple_sample/Assets/Start.unity and b/clients/unity/simple_sample/Assets/Start.unity differ
diff --git a/clients/unity/simple_sample/Assets/TestScript.cs b/clients/unity/simple_sample/Assets/TestScript.cs
index 27b7186ee..f6568c93d 100644
--- a/clients/unity/simple_sample/Assets/TestScript.cs
+++ b/clients/unity/simple_sample/Assets/TestScript.cs
@@ -6,12 +6,12 @@ public class TestScript : MonoBehaviour {
RemoteClient remoteClient = new RemoteClient();
// Use this for initialization
void Start () {
- if (!remoteClient.connect())
- Debug.LogError("Could not connect");
- else
- {
- remoteClient.run_command("ls", new List());
- }
+ if (!remoteClient.connect())
+ Debug.LogError("Could not connect");
+ else
+ {
+ remoteClient.run_command("ls", new List());
+ }
}
// Update is called once per frame
diff --git a/clients/unity/simple_sample/Assets/UV Test.mat b/clients/unity/simple_sample/Assets/UV Test.mat
new file mode 100644
index 000000000..4dd4bad68
Binary files /dev/null and b/clients/unity/simple_sample/Assets/UV Test.mat differ
diff --git a/clients/unity/simple_sample/Assets/UVTest.png b/clients/unity/simple_sample/Assets/UVTest.png
new file mode 100644
index 000000000..2401acdd7
Binary files /dev/null and b/clients/unity/simple_sample/Assets/UVTest.png differ
diff --git a/clients/unity/simple_sample/Assets/VertexColor.shader b/clients/unity/simple_sample/Assets/VertexColor.shader
new file mode 100644
index 000000000..84ecf2413
--- /dev/null
+++ b/clients/unity/simple_sample/Assets/VertexColor.shader
@@ -0,0 +1,33 @@
+// Upgrade NOTE: replaced 'SeperateSpecular' with 'SeparateSpecular'
+
+Shader " Vertex Colored" {
+Properties {
+ _Color ("Main Color", Color) = (1,1,1,1)
+ _SpecColor ("Spec Color", Color) = (1,1,1,1)
+ _Emission ("Emmisive Color", Color) = (0,0,0,0)
+ _Shininess ("Shininess", Range (0.01, 1)) = 0.7
+ _MainTex ("Base (RGB)", 2D) = "white" {}
+}
+
+SubShader {
+ Pass {
+ Material {
+ Shininess [_Shininess]
+ Specular [_SpecColor]
+ Emission [_Emission]
+ }
+ ColorMaterial AmbientAndDiffuse
+ Lighting On
+ SeparateSpecular On
+ SetTexture [_MainTex] {
+ Combine texture * primary, texture * primary
+ }
+ SetTexture [_MainTex] {
+ constantColor [_Color]
+ Combine previous * constant DOUBLE, previous * constant
+ }
+ }
+}
+
+Fallback " VertexLit", 1
+}
\ No newline at end of file
diff --git a/clients/unity/simple_sample/Assets/grid.png b/clients/unity/simple_sample/Assets/grid.png
new file mode 100644
index 000000000..4fa59d48d
Binary files /dev/null and b/clients/unity/simple_sample/Assets/grid.png differ
diff --git a/clients/unity/simple_sample/Library/AnnotationManager b/clients/unity/simple_sample/Library/AnnotationManager
index 2d1e3612d..15eabbb4e 100644
Binary files a/clients/unity/simple_sample/Library/AnnotationManager and b/clients/unity/simple_sample/Library/AnnotationManager differ
diff --git a/clients/unity/simple_sample/Library/AssetVersioning.db b/clients/unity/simple_sample/Library/AssetVersioning.db
new file mode 100644
index 000000000..7c4c8d349
Binary files /dev/null and b/clients/unity/simple_sample/Library/AssetVersioning.db differ
diff --git a/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset b/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset
index 199deaca3..c7036fef2 100644
Binary files a/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset and b/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset differ
diff --git a/clients/unity/simple_sample/Library/InspectorExpandedItems.asset b/clients/unity/simple_sample/Library/InspectorExpandedItems.asset
index 668a1f364..bd6ab109c 100644
Binary files a/clients/unity/simple_sample/Library/InspectorExpandedItems.asset and b/clients/unity/simple_sample/Library/InspectorExpandedItems.asset differ
diff --git a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll
new file mode 100644
index 000000000..00da08664
Binary files /dev/null and b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll differ
diff --git a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb
new file mode 100644
index 000000000..6efbc8d17
Binary files /dev/null and b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb differ
diff --git a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll
index 6f0a04c80..9a5761e46 100644
Binary files a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll and b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll differ
diff --git a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb
index e4e9c13c8..2c961426f 100644
Binary files a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb and b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb differ
diff --git a/clients/unity/simple_sample/Library/ScriptMapper b/clients/unity/simple_sample/Library/ScriptMapper
index 50ec33bfc..6ed5d0dae 100644
Binary files a/clients/unity/simple_sample/Library/ScriptMapper and b/clients/unity/simple_sample/Library/ScriptMapper differ
diff --git a/clients/unity/simple_sample/Library/assetDatabase3 b/clients/unity/simple_sample/Library/assetDatabase3
index 36cc0c23a..79a8b56cc 100644
Binary files a/clients/unity/simple_sample/Library/assetDatabase3 and b/clients/unity/simple_sample/Library/assetDatabase3 differ
diff --git a/clients/unity/simple_sample/Library/guidmapper b/clients/unity/simple_sample/Library/guidmapper
index ba300d255..65671f8fe 100644
Binary files a/clients/unity/simple_sample/Library/guidmapper and b/clients/unity/simple_sample/Library/guidmapper differ
diff --git a/clients/unity/simple_sample/Library/metadata/2f/2fb12edbd5d56cb4c99ccf773df52492 b/clients/unity/simple_sample/Library/metadata/2f/2fb12edbd5d56cb4c99ccf773df52492
new file mode 100644
index 000000000..2641a4ccb
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/2f/2fb12edbd5d56cb4c99ccf773df52492 differ
diff --git a/clients/unity/simple_sample/Library/metadata/36/364a32494f42e934bae30ff47badc45a b/clients/unity/simple_sample/Library/metadata/36/364a32494f42e934bae30ff47badc45a
index c3fc1fc87..cf4a6fba4 100644
Binary files a/clients/unity/simple_sample/Library/metadata/36/364a32494f42e934bae30ff47badc45a and b/clients/unity/simple_sample/Library/metadata/36/364a32494f42e934bae30ff47badc45a differ
diff --git a/clients/unity/simple_sample/Library/metadata/49/49176d7675a998345966feca21555311 b/clients/unity/simple_sample/Library/metadata/49/49176d7675a998345966feca21555311
new file mode 100644
index 000000000..35b1bc928
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/49/49176d7675a998345966feca21555311 differ
diff --git a/clients/unity/simple_sample/Library/metadata/6e/6e1305e96d61f204f8229e0a0cb7f8c1 b/clients/unity/simple_sample/Library/metadata/6e/6e1305e96d61f204f8229e0a0cb7f8c1
new file mode 100644
index 000000000..a5f934d8f
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/6e/6e1305e96d61f204f8229e0a0cb7f8c1 differ
diff --git a/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 b/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484
index 201f2fb77..b2c18736e 100644
Binary files a/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 and b/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 differ
diff --git a/clients/unity/simple_sample/Library/metadata/89/89b0f8fea628a544a9855c108fbe35dc b/clients/unity/simple_sample/Library/metadata/89/89b0f8fea628a544a9855c108fbe35dc
new file mode 100644
index 000000000..27246cfcd
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/89/89b0f8fea628a544a9855c108fbe35dc differ
diff --git a/clients/unity/simple_sample/Library/metadata/8d/8d11b6dacbf85e24ead2e95cafce40fd b/clients/unity/simple_sample/Library/metadata/8d/8d11b6dacbf85e24ead2e95cafce40fd
new file mode 100644
index 000000000..e5cccaf31
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/8d/8d11b6dacbf85e24ead2e95cafce40fd differ
diff --git a/clients/unity/simple_sample/Library/metadata/9f/9fd804cbd377fd445805d7e5eea47877 b/clients/unity/simple_sample/Library/metadata/9f/9fd804cbd377fd445805d7e5eea47877
new file mode 100644
index 000000000..99a3a6de7
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/9f/9fd804cbd377fd445805d7e5eea47877 differ
diff --git a/clients/unity/simple_sample/Library/metadata/aa/aa92a0e1eefe93b40bec1e868142e050 b/clients/unity/simple_sample/Library/metadata/aa/aa92a0e1eefe93b40bec1e868142e050
new file mode 100644
index 000000000..f8e09bbdf
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/aa/aa92a0e1eefe93b40bec1e868142e050 differ
diff --git a/clients/unity/simple_sample/Library/metadata/b5/b54fa8be8a38a9f4e8f53b4399135e30 b/clients/unity/simple_sample/Library/metadata/b5/b54fa8be8a38a9f4e8f53b4399135e30
new file mode 100644
index 000000000..e286f442f
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/b5/b54fa8be8a38a9f4e8f53b4399135e30 differ
diff --git a/clients/unity/simple_sample/Library/metadata/c7/c7e34aa4b4a41d1478337506ce720e18 b/clients/unity/simple_sample/Library/metadata/c7/c7e34aa4b4a41d1478337506ce720e18
new file mode 100644
index 000000000..8f8109e77
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/c7/c7e34aa4b4a41d1478337506ce720e18 differ
diff --git a/clients/unity/simple_sample/Library/metadata/d4/d420514133a0fbd4990025b3e1dac764 b/clients/unity/simple_sample/Library/metadata/d4/d420514133a0fbd4990025b3e1dac764
new file mode 100644
index 000000000..da99172e2
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/d4/d420514133a0fbd4990025b3e1dac764 differ
diff --git a/clients/unity/simple_sample/Library/metadata/e8/e85d437f881938247992e492006de2df b/clients/unity/simple_sample/Library/metadata/e8/e85d437f881938247992e492006de2df
index ffcd58bc3..5790d0184 100644
Binary files a/clients/unity/simple_sample/Library/metadata/e8/e85d437f881938247992e492006de2df and b/clients/unity/simple_sample/Library/metadata/e8/e85d437f881938247992e492006de2df differ
diff --git a/clients/unity/simple_sample/Library/metadata/f9/f9efc5e870ab48243b2f508f00b7a740 b/clients/unity/simple_sample/Library/metadata/f9/f9efc5e870ab48243b2f508f00b7a740
new file mode 100644
index 000000000..341b7bf6a
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/f9/f9efc5e870ab48243b2f508f00b7a740 differ
diff --git a/clients/unity/simple_sample/Library/metadata/fc/fcc33854b846d0e4aa14f8afb74e173b b/clients/unity/simple_sample/Library/metadata/fc/fcc33854b846d0e4aa14f8afb74e173b
new file mode 100644
index 000000000..df99f8b56
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/fc/fcc33854b846d0e4aa14f8afb74e173b differ
diff --git a/clients/unity/simple_sample/Library/metadata/fd/fd22bd16464e8784cbd88809cdc697a3 b/clients/unity/simple_sample/Library/metadata/fd/fd22bd16464e8784cbd88809cdc697a3
new file mode 100644
index 000000000..8a2545887
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/fd/fd22bd16464e8784cbd88809cdc697a3 differ
diff --git a/clients/unity/simple_sample/Library/metadata/ff/ff990239cc3bc4a45a362f932463d378 b/clients/unity/simple_sample/Library/metadata/ff/ff990239cc3bc4a45a362f932463d378
new file mode 100644
index 000000000..2a13f55f7
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/ff/ff990239cc3bc4a45a362f932463d378 differ
diff --git a/clients/unity/simple_sample/Library/metadata/ff/ffba25341839373409b0cd511e9b1761 b/clients/unity/simple_sample/Library/metadata/ff/ffba25341839373409b0cd511e9b1761
new file mode 100644
index 000000000..cdd44b727
Binary files /dev/null and b/clients/unity/simple_sample/Library/metadata/ff/ffba25341839373409b0cd511e9b1761 differ
diff --git a/clients/unity/simple_sample/simple_sample-csharp.sln b/clients/unity/simple_sample/simple_sample-csharp.sln
new file mode 100644
index 000000000..e72b09594
--- /dev/null
+++ b/clients/unity/simple_sample/simple_sample-csharp.sln
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2008
+
+Project("{277888DF-B633-98F9-AF58-18CFF25BE876}") = "simple_sample", "Assembly-CSharp-vs.csproj", "{AE3AFC6C-A022-3549-CF6C-7716EC410CE6}"
+EndProject
+Project("{277888DF-B633-98F9-AF58-18CFF25BE876}") = "simple_sample", "Assembly-CSharp-Editor-vs.csproj", "{AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Assembly-CSharp.csproj
+ Policies = $0
+ $0.TextStylePolicy = $1
+ $1.inheritsSet = null
+ $1.scope = text/x-csharp
+ $0.CSharpFormattingPolicy = $2
+ $2.inheritsSet = Mono
+ $2.inheritsScope = text/x-csharp
+ $2.scope = text/x-csharp
+ $0.TextStylePolicy = $3
+ $3.FileWidth = 120
+ $3.TabWidth = 4
+ $3.EolMarker = Unix
+ $3.inheritsSet = Mono
+ $3.inheritsScope = text/plain
+ $3.scope = text/plain
+ EndGlobalSection
+
+EndGlobal
diff --git a/clients/unity/simple_sample/simple_sample.sln b/clients/unity/simple_sample/simple_sample.sln
new file mode 100644
index 000000000..98aaf602e
--- /dev/null
+++ b/clients/unity/simple_sample/simple_sample.sln
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2008
+
+Project("{277888DF-B633-98F9-AF58-18CFF25BE876}") = "simple_sample", "Assembly-CSharp.csproj", "{AE3AFC6C-A022-3549-CF6C-7716EC410CE6}"
+EndProject
+Project("{277888DF-B633-98F9-AF58-18CFF25BE876}") = "simple_sample", "Assembly-CSharp-Editor.csproj", "{AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AE3AFC6C-A022-3549-CF6C-7716EC410CE6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AEF4C46B-71B7-6E0B-EF7E-154F411C7DF8}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Assembly-CSharp.csproj
+ Policies = $0
+ $0.TextStylePolicy = $1
+ $1.inheritsSet = null
+ $1.scope = text/x-csharp
+ $0.CSharpFormattingPolicy = $2
+ $2.inheritsSet = Mono
+ $2.inheritsScope = text/x-csharp
+ $2.scope = text/x-csharp
+ $0.TextStylePolicy = $3
+ $3.FileWidth = 120
+ $3.TabWidth = 4
+ $3.EolMarker = Unix
+ $3.inheritsSet = Mono
+ $3.inheritsScope = text/plain
+ $3.scope = text/plain
+ EndGlobalSection
+
+EndGlobal
diff --git a/clients/unity/simple_sample/simple_sample.userprefs b/clients/unity/simple_sample/simple_sample.userprefs
new file mode 100644
index 000000000..8a063dbf7
--- /dev/null
+++ b/clients/unity/simple_sample/simple_sample.userprefs
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/proto/isoworldremote.proto b/plugins/proto/isoworldremote.proto
index 68a3b24b5..295cd03f1 100644
--- a/plugins/proto/isoworldremote.proto
+++ b/plugins/proto/isoworldremote.proto
@@ -18,9 +18,26 @@ enum LiquidType {
MAGMA = 2;
}
+enum BasicShape {
+ NONE = 0;
+ OPEN = 1;
+ WALL = 3;
+ FLOOR = 4;
+ RAMP_UP = 5;
+ RAMP_DOWN = 6;
+}
+
+message ColorDefinition {
+ required int32 red = 1;
+ required int32 green = 2;
+ required int32 blue = 3;
+}
+
message EmbarkTileLayer {
repeated BasicMaterial mat_type_table = 4 [packed=true];
repeated int32 mat_subtype_table = 5 [packed=true];
+ repeated BasicShape tile_shape_table = 6 [packed=true];
+ repeated ColorDefinition tile_color_table = 7 [packed=true];
}
message EmbarkTile {
diff --git a/plugins/stonesense b/plugins/stonesense
index dbcc80ff3..25eae7ef6 160000
--- a/plugins/stonesense
+++ b/plugins/stonesense
@@ -1 +1 @@
-Subproject commit dbcc80ff364978e9e5fec13e425b0af84c403f10
+Subproject commit 25eae7ef6f19a24b7fc7e0d72ed45cbef7ebe092