Exemple #1
0
		public PakRecord(PakCollection collection, string filename, DateTime filetime)
		{
			mCollection = collection;
			mFileName = filename;
			mFileTime = filetime;
			mBuffer = null;
		}
Exemple #2
0
		public PakRecord(PakCollection collection)
		{
			mCollection = collection;
			mFileName = String.Empty;
			mFileTime = DateTime.MinValue;
			mBuffer = null;
		}
Exemple #3
0
		public static PakRecord FromFile(PakCollection collection, string filename)
		{
			PakRecord record = new PakRecord(collection);
			record.FileName = Path.GetFileName(filename);
			record.FileTime = File.GetLastWriteTime(filename);
			record.Buffer = File.ReadAllBytes(filename);
			return record;
		}
Exemple #4
0
        public PeggleNightsStoryExtractor(string path)
        {
            mPakCollection = new PakCollection();
            mPakCollection.Open(path);

            mPack = new LevelPack();

            AddLevels();
        }
		public PeggleNightsStoryExtractor(string path)
		{
			mPakCollection = new PakCollection();
			mPakCollection.Open(path);

			mPack = new LevelPack();

			AddLevels();
		}
Exemple #6
0
		public bool Open(string path)
		{
			bool successful = false;
			try {
				string pakFilename = Path.GetFileNameWithoutExtension(path);

				PakCollection pakFile = new PakCollection();
				pakFile.Open(path);

				PakRecord cfgRecord = GetCFGRecord(pakFilename, pakFile);
				if (cfgRecord == null) {
					throw new InvalidDataException("Unable to find a cfg file in the level pack.");
				}

				ParseCFG(UTF8Encoding.ASCII.GetString(cfgRecord.Buffer));

				//Load levels
				foreach (LevelInfo linfo in mLevelInfos) {
					byte[] buffer = pakFile.GetRecord("levels\\" + linfo.Filename + ".dat").Buffer;

					LevelReader levelReader = new LevelReader(buffer);
					Level level = levelReader.Read();
					levelReader.Dispose();

					if (level == null) {
						MessageBox.Show("Unable to open " + linfo.Name, "Open Level Pack" , MessageBoxButtons.OK, MessageBoxIcon.Error);
						continue;
					}

					mLevels.Add(level);
					level.Info = linfo;
					level.Background = GetBackground(pakFile, linfo.Filename);
				}

				//Load any images
				foreach (PakRecord record in pakFile) {
					if (record.FileName.StartsWith("levels\\"))
						continue;

					if (Path.GetExtension(record.FileName) == ".png") {
						mImages.Add(record.FileName, GetImageFromBuffer(record.Buffer));
					}
				}

				successful = true;
			} catch (Exception ex) {
				MessageBox.Show(ex.Message, "Open Level Pack", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}

			return successful;
		}
Exemple #7
0
        public static void ConvertAllFiles(PakCollection collection, ImageFormat format)
        {
            int convertsNeeded = 0;

            foreach (PakRecord record in collection.Records)
            {
                string ext = Path.GetExtension(record.FileName);
                if (ext == ".j2k" || ext == ".jp2" || ext == ".j2c")
                {
                    convertsNeeded++;
                }
            }

            ToolStripProgressBar pb = collection.ProgressBar;

            if (pb != null)
            {
                pb.Minimum = 0;
                pb.Maximum = convertsNeeded;
                pb.Value   = 0;
                pb.Visible = true;
            }

            foreach (PakRecord record in collection.Records)
            {
                string ext = Path.GetExtension(record.FileName);
                if (ext == ".j2k" || ext == ".jp2" || ext == ".j2c")
                {
                    byte[] newBuffer;
                    ConvertJPEG2(record, out newBuffer, format);

                    record.FileName = Path.ChangeExtension(record.FileName, ".png");
                    record.Buffer   = newBuffer;

                    if (pb != null)
                    {
                        pb.Value++;
                        Application.DoEvents();
                    }
                }
            }

            if (pb != null)
            {
                pb.Visible = false;
            }
        }
Exemple #8
0
		public static void ConvertAllFiles(PakCollection collection, ImageFormat format)
		{
			int convertsNeeded = 0;
			foreach (PakRecord record in collection.Records) {
				string ext = Path.GetExtension(record.FileName);
				if (ext == ".j2k" || ext == ".jp2" || ext == ".j2c") {
					convertsNeeded++;
				}
			}

			ToolStripProgressBar pb = collection.ProgressBar;
			if (pb != null) {
				pb.Minimum = 0;
				pb.Maximum = convertsNeeded;
				pb.Value = 0;
				pb.Visible = true;
			}

			foreach (PakRecord record in collection.Records) {
				string ext = Path.GetExtension(record.FileName);
				if (ext == ".j2k" || ext == ".jp2" || ext == ".j2c") {
					byte[] newBuffer;
					ConvertJPEG2(record, out newBuffer, format);

					record.FileName = Path.ChangeExtension(record.FileName, ".png");
					record.Buffer = newBuffer;

					if (pb != null) {
						pb.Value++;
						Application.DoEvents();
					}
				}
			}

			if (pb != null) {
				pb.Visible = false;
			}
		}
Exemple #9
0
		public bool Save(string path)
		{
			bool successful = false;
			try {

				string pakFilename = Path.GetFileNameWithoutExtension(path);

				PakCollection pakFile = new PakCollection();

				//CFG
				PakRecord cfgRecord = new PakRecord(pakFile, pakFilename + ".cfg", DateTime.Now);
				cfgRecord.Buffer = Encoding.UTF8.GetBytes(WriteCFG());
				pakFile.Records.Add(cfgRecord);

				//Levels
				foreach (Level lvl in mLevels) {
					PakRecord datRecord = new PakRecord(pakFile, String.Format("levels\\{0}.dat", lvl.Info.Filename), DateTime.Now);
					datRecord.Buffer = GetLevelData(lvl);

					if (lvl.Background != null) {
						PakRecord bgImageRecord = new PakRecord(pakFile, String.Format("levels\\{0}.png", lvl.Info.Filename), DateTime.Now);
						bgImageRecord.Buffer = GetImageData(lvl.Background);
						pakFile.Records.Add(bgImageRecord);
					}

					PakRecord tbRecord = new PakRecord(pakFile, String.Format("levels\\cached_thumbnails\\{0}.png", lvl.Info.Filename), DateTime.Now);
					tbRecord.Buffer = GetImageData(lvl.GetThumbnail());

					pakFile.Records.Add(datRecord);

					pakFile.Records.Add(tbRecord);
				}

				//Images
				foreach (string s in mImages.Keys) {
					PakRecord iRecord = new PakRecord(pakFile, s, DateTime.Now);
					iRecord.Buffer = GetImageData(mImages[s]);
					pakFile.Records.Add(iRecord);
				}

				pakFile.Save(path);

				successful = true;
			} catch (Exception ex) {
				MessageBox.Show(ex.Message, "Save Level Pack", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}

			return successful;
		}
Exemple #10
0
		private Image GetBackground(PakCollection collection, string levelFilename)
		{
			string filename = "levels\\" + levelFilename;
			string jp2 = Path.ChangeExtension(filename, ".jp2");
			string jpg = Path.ChangeExtension(filename, ".jpg");
			string png = Path.ChangeExtension(filename, ".png");

			PakRecord record;
			record = collection.GetRecord(jp2);
			if (record != null) {
				byte[] buffer;
				OpenJPEG.ConvertJPEG2(record, out buffer, ImageFormat.Jpeg);
				return Image.FromStream(new MemoryStream(buffer));
			} else {
				record = collection.GetRecord(jpg);
				if (record != null)
					return GetImageFromBuffer(record.Buffer);

				record = collection.GetRecord(png);
				if (record != null)
					return GetImageFromBuffer(record.Buffer);
			}

			return null;
		}
Exemple #11
0
		private PakRecord GetCFGRecord(string pakFilename, PakCollection pakFile)
		{
			PakRecord cfgRecord = pakFile.GetRecord(pakFilename + ".cfg");
			if (cfgRecord != null) {
				return cfgRecord;
			}

			//Missing cfg or named wrong
			PakRecord[] records = pakFile.GetRecords(String.Empty);
			foreach (PakRecord record in records) {
				if (Path.GetExtension(record.FileName) == ".cfg")
					return record;
			}

			return null;
		}