/// <summary> /// Parses camera data into BattleCamera struct. Main purpouse of this function is to /// actually read all the offsets and pointers to human readable form of struct. This /// function later calls ReadAnimation(n) where n is animation Id (i.e. 9 is camCollection=1 /// and cameraAnim=0) /// </summary> public static Camera Read(BinaryReader br) { Camera c = new Camera(); br.BaseStream.Seek(c.bs_cameraPointer, 0); uint cCameraHeaderSector = br.ReadUInt16(); uint pCameraSetting = br.ReadUInt16(); uint pCameraAnimationCollection = br.ReadUInt16(); uint sCameraDataSize = br.ReadUInt16(); //Camera settings parsing? BattleCameraSettings bcs = new BattleCameraSettings() { unk = br.ReadBytes(24) }; //end of camera settings parsing br.BaseStream.Seek(pCameraAnimationCollection + c.bs_cameraPointer, SeekOrigin.Begin); BattleCameraCollection bcc = new BattleCameraCollection { cAnimCollectionCount = br.ReadUInt16() }; BattleCameraSet[] bcset = new BattleCameraSet[bcc.cAnimCollectionCount]; bcc.battleCameraSet = bcset; for (int i = 0; i < bcc.cAnimCollectionCount; i++) { bcset[i] = new BattleCameraSet() { globalSetPointer = (uint)(br.BaseStream.Position + br.ReadUInt16() - i * 2 - 2) } } ; bcc.pCameraEOF = br.ReadUInt16(); for (int i = 0; i < bcc.cAnimCollectionCount; i++) { br.BaseStream.Seek(bcc.battleCameraSet[i].globalSetPointer, 0); bcc.battleCameraSet[i].animPointers = new uint[8]; for (int n = 0; n < bcc.battleCameraSet[i].animPointers.Length; n++) { bcc.battleCameraSet[i].animPointers[n] = (uint)(br.BaseStream.Position + br.ReadUInt16() * 2 - n * 2); } } CameraStruct cam = Extended.ByteArrayToStructure <CameraStruct>(new byte[Marshal.SizeOf(typeof(CameraStruct))]); //what about this kind of trick to initialize struct with a lot amount of fixed sizes in arrays? c.battleCameraCollection = bcc; c.battleCameraSettings = bcs; c.cam = cam; c.ReadAnimationById(c.GetRandomCameraN(Memory.Encounters.Current), br); c.EndOffset = c.bs_cameraPointer + sCameraDataSize; //br.BaseStream.Seek(c.EndOffset, 0); //step out return(c); } #endregion Methods }
private Camera(BinaryReader br) : this() { br.BaseStream.Seek(_bsCameraPointer + 4, 0); //uint cCameraHeaderSector = br.ReadUInt16(); //uint pCameraSetting = br.ReadUInt16(); uint pCameraAnimationCollection = br.ReadUInt16(); uint sCameraDataSize = br.ReadUInt16(); //Camera settings parsing? //var battleCameraSettings = new BattleCameraSettings { unk = br.ReadBytes(24) }; //end of camera settings parsing br.BaseStream.Seek(pCameraAnimationCollection + _bsCameraPointer, SeekOrigin.Begin); _battleCameraCollection = new BattleCameraCollection { cAnimCollectionCount = br.ReadUInt16() }; var battleCameraSet = new BattleCameraSet[_battleCameraCollection.cAnimCollectionCount]; _battleCameraCollection.battleCameraSet = battleCameraSet; for (var i = 0; i < _battleCameraCollection.cAnimCollectionCount; i++) { battleCameraSet[i] = new BattleCameraSet { globalSetPointer = (uint)(br.BaseStream.Position + br.ReadUInt16() - i * 2 - 2) } } ; _battleCameraCollection.pCameraEOF = br.ReadUInt16(); for (var i = 0; i < _battleCameraCollection.cAnimCollectionCount; i++) { br.BaseStream.Seek(_battleCameraCollection.battleCameraSet[i].globalSetPointer, 0); _battleCameraCollection.battleCameraSet[i].animPointers = new uint[8]; for (var n = 0; n < _battleCameraCollection.battleCameraSet[i].animPointers.Length; n++) { _battleCameraCollection.battleCameraSet[i].animPointers[n] = (uint)(br.BaseStream.Position + br.ReadUInt16() * 2 - n * 2); } } Cam = Extended.ByteArrayToStructure <CameraStruct>(new byte[Marshal.SizeOf(typeof(CameraStruct))]); //what about this kind of trick to initialize struct with a lot amount of fixed sizes in arrays? ReadAnimationById(GetRandomCameraN(Memory.Encounters.Current), br); EndOffset = _bsCameraPointer + sCameraDataSize; //br.BaseStream.Seek(c.EndOffset, 0); //step out }
private static void ReadCamera() { Memory.BS_CameraStruct = new Memory.VIII_cameraMemoryStruct(); uint cCameraHeaderSector = pbs.ReadUShort(); //if (cCameraHeaderSector != 0x2) // ; //error handler? uint pCameraSetting = pbs.ReadUShort(); uint pCameraAnimationCollection = pbs.ReadUShort(); uint sCameraDataSize = pbs.ReadUShort(); //Camera settings parsing? BattleCameraSettings bcs = new BattleCameraSettings() { unk = pbs.ReadBytes(24) }; //end of camera settings parsing pbs.Seek(bs_cameraPointer, 0); pbs.Seek(pCameraAnimationCollection, System.IO.SeekOrigin.Current); BattleCameraCollection bcc = new BattleCameraCollection { cAnimCollectionCount = pbs.ReadUShort() }; BattleCameraSet[] bcset = new BattleCameraSet[bcc.cAnimCollectionCount]; bcc.battleCameraSet = bcset; for (int i = 0; i < bcc.cAnimCollectionCount; i++) { bcset[i] = new BattleCameraSet() { globalSetPointer = (uint)(pbs.Tell() + pbs.ReadUShort() - i * 2 - 2) } } ; bcc.pCameraEOF = pbs.ReadUShort(); for (int i = 0; i < bcc.cAnimCollectionCount; i++) { pbs.Seek(bcc.battleCameraSet[i].globalSetPointer, 0); bcc.battleCameraSet[i].animPointers = new uint[8]; for (int n = 0; n < bcc.battleCameraSet[i].animPointers.Length; n++) { bcc.battleCameraSet[i].animPointers[n] = (uint)(pbs.Tell() + pbs.ReadUShort() * 2 - n * 2); } bcc.battleCameraSet[i].cameraAnimation = new CameraAnimation[bcc.battleCameraSet[i].animPointers.Length]; for (int n = 0; n < bcc.battleCameraSet[i].animPointers.Length; n++) { pbs.Seek(bcc.battleCameraSet[i].animPointers[n], 0); bcc.battleCameraSet[i].cameraAnimation[n] = new CameraAnimation() { header = pbs.ReadUShort() }; } } battleCamera = new BattleCamera() { battleCameraCollection = bcc, battleCameraSettings = bcs }; //DEBUG DELETE ME ReadAnimation(7); //END OF DEBUG pbs.Seek(bs_cameraPointer + sCameraDataSize, 0); //debug out }