Beispiel #1
0
        /// <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
    }
Beispiel #2
0
        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
        }
Beispiel #3
0
        /// <summary>
        /// This method resolves the correct camera pointer and runs ReadAnimation(uint,ms,br) method
        /// and returns the final pointer
        /// </summary>
        /// <param name="animId">
        /// Animation Id as of binary mask (0bXXXXYYYY where XXXX= animationSet and YYYY=animationId)
        /// </param>
        /// <returns></returns>
        private uint ReadAnimationById(byte animId, BinaryReader br)
        {
            cam.animationId = animId;
            CameraSetAnimGRP tpGetter = GetCameraCollectionPointers(animId);

            BattleCameraSet[] battleCameraSetArray = battleCameraCollection.battleCameraSet;
            if (battleCameraSetArray.Length > tpGetter.Set && battleCameraSetArray[tpGetter.Set].animPointers.Length > tpGetter.Anim)
            {
                BattleCameraSet battleCameraSet = battleCameraSetArray[tpGetter.Set];
                uint            cameraAnimationGlobalPointer = battleCameraSet.animPointers[tpGetter.Anim];
                return(ReadAnimation(cameraAnimationGlobalPointer, br));
            }
            else
            {
                Memory.Log.WriteLine($"ReadAnimationById::{battleCameraSetArray.Length} < {tpGetter.Set}");

                if (battleCameraSetArray.Length > tpGetter.Set)
                {
                    Memory.Log.WriteLine($" or \n{battleCameraSetArray[tpGetter.Set].animPointers.Length} < {tpGetter.Anim}");
                }
            }
            return(0);
        }
Beispiel #4
0
        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
        }