private TilesConfig(Reader reader, bool compressed) { if (reader.ReadBytes(4).SequenceEqual(MAGIC)) { compressed = true; } else { reader.Seek(-4, SeekOrigin.Current); } if (compressed) { using (Reader creader = reader.GetCompressedStream()) { for (int i = 0; i < TILES_COUNT; ++i) { CollisionPath1[i] = new TileConfig(creader); } for (int i = 0; i < TILES_COUNT; ++i) { CollisionPath2[i] = new TileConfig(creader); } } } else { for (int i = 0; i < TILES_COUNT; ++i) { CollisionPath1[i] = new TileConfig(reader); } for (int i = 0; i < TILES_COUNT; ++i) { CollisionPath2[i] = new TileConfig(reader); } } reader.Close(); }
public Replay(Reader reader) { Reader creader = reader.GetCompressedStreamRaw(); //creader.BaseStream.Position = 0x84; int[] data = new int[creader.BaseStream.Length / 4]; creader.BaseStream.Position = 0; for (int i = 0; i < creader.BaseStream.Length / 4; i++) { data[i] = creader.ReadInt32(); } creader.Seek(0, SeekOrigin.Begin); for (int i = 0; i < 14; i++) { Header[i] = creader.ReadInt32(); } for (int i = 0; i < Header[4]; i++) { ReplayEntry entry = new ReplayEntry(); entry.Data[0] = creader.ReadInt32(); //Inputs entry.Data[1] = creader.ReadInt32(); //Flags entry.Data[2] = creader.ReadInt32(); //Fuckery entry.Data[3] = creader.ReadInt32(); } //"CurrentEntity->ObjectID" is actually "Scene.Mode" //data[0]: Header //data[1]: ??? //data[2]: Packed Flag //data[3]: ActiveBuffer //data[4]: EntryCount //data[5]: FrameCount //data[6]: ZoneID (MenuParam[92]) //data[7]: ActID (MenuParam[93]) //data[8]: PlayerID (MenuParam[91]) //data[9]: PlusLayout //data[10]: Oscillation //data[11]: ??? //data[12]: ??? //data[13]: ??? //Entries Start: 14/0xE //Entry Size: 28 (bytes) (7 ints) //Entry[2]: Inputs //Input & 0x01 = ??? (Up) //Input & 0x02 = ??? (Down) //Input & 0x04 = ??? (Left) //Input & 0x08 = ??? (Right) //Input & 0x10 = ??? (JumpPress) //Input & 0x20 = ??? (JumpHold) creader.Close(); //Writer writer = new Writer("Replay.bin"); //writer.Write(data); //writer.Close(); }