示例#1
0
		public bool Read( string Filepath ) {
			if( File.Exists( Filepath ) == false )
				return false;

			mFilepath = Filepath;
			using( mReader = new BinaryReader( File.OpenRead( Filepath ) ) ) {
				char[] header = mReader.ReadChars( 2 );
				byte major = mReader.ReadByte();
				byte minor = mReader.ReadByte();
				ushort actionCount = mReader.ReadUInt16();
				mReader.BaseStream.Position += 10; // unknown [ushort, uint, uint]

				mActions = new List<RoActionPattern>();
				for( int i = 0; i < actionCount; i++ ) {
					RoActionPattern act = new RoActionPattern();
					act.Frames = new List<RoActionPatternFrame>();

					uint frameCount = mReader.ReadUInt32();
					for( int f = 0; f < frameCount; f++ ) {
						RoActionPatternFrame frame = new RoActionPatternFrame();
						frame.Sprites = new List<RoActionPatternFrameSprite>();

						frame.Palette1 = mReader.ReadUInt32();
						frame.Palette2 = mReader.ReadUInt32();
						mReader.BaseStream.Position += 24; // 12x ushort

						uint spriteCount = mReader.ReadUInt32();
						for( int s = 0; s < spriteCount; s++ ) {
							RoActionPatternFrameSprite sprite = new RoActionPatternFrameSprite();

							sprite.X = mReader.ReadUInt32();
							sprite.Y = mReader.ReadUInt32();
							int num = mReader.ReadInt32();
							// TODO: google this!
							// every/most/many frames seems to have first sprite -1
							if( num == -1 )
								continue;

							sprite.Number = (uint)num;

							sprite.Mirror = mReader.ReadUInt32();
							if( major > 2 ) {
								sprite.ColorR = mReader.ReadByte();
								sprite.ColorG = mReader.ReadByte();
								sprite.ColorB = mReader.ReadByte();
								sprite.ColorA = mReader.ReadByte();

								if( major <= 3 && minor <= 2 )
									sprite.ScaleXY = mReader.ReadSingle();
								else {
									sprite.ScaleX = mReader.ReadSingle();
									sprite.ScaleY = mReader.ReadSingle();
								}

								sprite.Rotation = mReader.ReadUInt32();
								sprite.Type = mReader.ReadUInt32();

								if( major >= 5 ) {
									sprite.Width = mReader.ReadUInt32();
									sprite.Height = mReader.ReadUInt32();
								}
							}

							frame.Sprites.Add( sprite );
						}

						frame.Audio = mReader.ReadInt32();
						frame.Numxxx = mReader.ReadInt32();
						if( frame.Numxxx == 1 ) {
							frame.Ext1 = mReader.ReadInt32();
							frame.ExtX = mReader.ReadInt32();
							frame.ExtY = mReader.ReadInt32();
							frame.Terminate = mReader.ReadInt32();
						}

						act.Frames.Add( frame );
					}

					mActions.Add( act );
				}


				mSounds = new List<string>();
				uint soundCount = mReader.ReadUInt32();
				for( int i = 0; i < soundCount; i++ ) {
					string name = "";
					char c = '\0';
					for( int n = 0; n < 40; n++ )
						if( ( c = mReader.ReadChar() ) != '\0' )
							name += c;
					mSounds.Add( name );
				}

			}

			return true;
		}
示例#2
0
        public bool Read(string Filepath)
        {
            if (File.Exists(Filepath) == false)
            {
                return(false);
            }

            mFilepath = Filepath;
            using (mReader = new BinaryReader(File.OpenRead(Filepath))) {
                char[] header      = mReader.ReadChars(2);
                byte   major       = mReader.ReadByte();
                byte   minor       = mReader.ReadByte();
                ushort actionCount = mReader.ReadUInt16();
                mReader.BaseStream.Position += 10;                 // unknown [ushort, uint, uint]

                mActions = new List <RoActionPattern>();
                for (int i = 0; i < actionCount; i++)
                {
                    RoActionPattern act = new RoActionPattern();
                    act.Frames = new List <RoActionPatternFrame>();

                    uint frameCount = mReader.ReadUInt32();
                    for (int f = 0; f < frameCount; f++)
                    {
                        RoActionPatternFrame frame = new RoActionPatternFrame();
                        frame.Sprites = new List <RoActionPatternFrameSprite>();

                        frame.Palette1 = mReader.ReadUInt32();
                        frame.Palette2 = mReader.ReadUInt32();
                        mReader.BaseStream.Position += 24;                         // 12x ushort

                        uint spriteCount = mReader.ReadUInt32();
                        for (int s = 0; s < spriteCount; s++)
                        {
                            RoActionPatternFrameSprite sprite = new RoActionPatternFrameSprite();

                            sprite.X = mReader.ReadUInt32();
                            sprite.Y = mReader.ReadUInt32();
                            int num = mReader.ReadInt32();
                            // TODO: google this!
                            // every/most/many frames seems to have first sprite -1
                            if (num == -1)
                            {
                                continue;
                            }

                            sprite.Number = (uint)num;

                            sprite.Mirror = mReader.ReadUInt32();
                            if (major > 2)
                            {
                                sprite.ColorR = mReader.ReadByte();
                                sprite.ColorG = mReader.ReadByte();
                                sprite.ColorB = mReader.ReadByte();
                                sprite.ColorA = mReader.ReadByte();

                                if (major <= 3 && minor <= 2)
                                {
                                    sprite.ScaleXY = mReader.ReadSingle();
                                }
                                else
                                {
                                    sprite.ScaleX = mReader.ReadSingle();
                                    sprite.ScaleY = mReader.ReadSingle();
                                }

                                sprite.Rotation = mReader.ReadUInt32();
                                sprite.Type     = mReader.ReadUInt32();

                                if (major >= 5)
                                {
                                    sprite.Width  = mReader.ReadUInt32();
                                    sprite.Height = mReader.ReadUInt32();
                                }
                            }

                            frame.Sprites.Add(sprite);
                        }

                        frame.Audio  = mReader.ReadInt32();
                        frame.Numxxx = mReader.ReadInt32();
                        if (frame.Numxxx == 1)
                        {
                            frame.Ext1      = mReader.ReadInt32();
                            frame.ExtX      = mReader.ReadInt32();
                            frame.ExtY      = mReader.ReadInt32();
                            frame.Terminate = mReader.ReadInt32();
                        }

                        act.Frames.Add(frame);
                    }

                    mActions.Add(act);
                }


                mSounds = new List <string>();
                uint soundCount = mReader.ReadUInt32();
                for (int i = 0; i < soundCount; i++)
                {
                    string name = "";
                    char   c    = '\0';
                    for (int n = 0; n < 40; n++)
                    {
                        if ((c = mReader.ReadChar()) != '\0')
                        {
                            name += c;
                        }
                    }
                    mSounds.Add(name);
                }
            }

            return(true);
        }