private static Entity ReadSingleEntity(BitStream stream) { var buf = new byte[4]; stream.Read(buf, 32); var uid = Util.MakeI32(buf); Debug.Assert((uid & 0x80000000) == 0); //if ((something & 0x80000000) == 0) { stream.Read(buf, 6); var count = buf[0]; var chars = new char[64]; stream.ReadPackedText(chars, count); var name = new string(chars, 0, count); //} var entity = new Entity { Uid = uid, Kind = name }; entity.X = stream.ReadFloat(32, 8); entity.Y = stream.ReadFloat(32, 8); stream.Read(buf, 16); entity.Rotation = (float)(Util.MakeU16(buf) / 65536.0 * 2 * Math.PI); stream.Read(buf, 8); entity.Field28 = buf[0]; stream.Read(buf, 1); entity.FlipHorz = buf[0] != 0; // buf[0] != 0 ? 1 : -1 stream.Read(buf, 1); entity.FlipVert = buf[0] != 0; // buf[0] != 0 ? 1 : -1; stream.Read(buf, 1); entity.Field34 = buf[2] != 0; entity.Tags = Util.ReadKeyValueList(stream); Trace("entity {0} {1:N} {2:N} {3:X4} {4:X2} {5} {6} {7} {8}", name, entity.X, entity.Y, entity.Rotation, entity.Field28, entity.FlipHorz, entity.FlipVert, entity.Field34, Util.DumpKeyValueList(entity.Tags)); return entity; }
private static List<Prop> LoadProps(BitStream stream) { var ret = new List<Prop>(); var buf = new byte[4]; stream.Read(buf, 16); var count = Util.MakeU16(buf); for (var i = 0; i < count; ++i) { stream.Read(buf, 32); var something = Util.MakeI32(buf); if (something >= 0) { var prop = new Prop(); prop.Field4 = something; stream.Read(buf, 8); prop.LayerGroup = buf[0]; stream.Read(buf, 8); prop.LayerSub = buf[0]; prop.X = stream.ReadFloat(28, 4); prop.Y = stream.ReadFloat(28, 4); stream.Read(buf, 16); prop.Rotation = (float) (Util.MakeU16(buf) / 65536.0 * 2 * Math.PI); stream.Read(buf, 1); prop.FlipHorz = buf[0] == 0; // buf[0] != 0 ? 1 : -1; stream.Read(buf, 1); prop.FlipVert = buf[0] == 0; // buf[0] != 0 ? 1 : -1; stream.Read(buf, 8); prop.PropSet = buf[0]; stream.Read(buf, 12); prop.PropGroup = Util.MakeU16(buf); stream.Read(buf, 12); prop.PropIndex = Util.MakeU16(buf); stream.Read(buf, 8); prop.Palette = buf[0]; Trace("prop {0:N} {1:N} {2:N} {3:X8} {4:X8} {5:X2} {6:X4} {7:X4} {8:X2} {9:X2} {10:X2}", prop.X, prop.Y, prop.Rotation, prop.FlipHorz, prop.FlipVert, prop.PropSet, prop.PropGroup, prop.PropIndex, prop.Palette, prop.LayerGroup, prop.LayerSub); ret.Add(prop); } else throw new NotImplementedException(); } return ret; }