Пример #1
0
        public static Teams ReadRom(string filePath, BlitzGame gameSystem)
        {
            Teams     teams           = new Teams();
            BlitzGame gameSystemClone = Clone.DeepClone <BlitzGame>(gameSystem);

            for (int x = 0; x < gameSystem.GameTeamCount; x++)
            {
                using (var fs = new FileStream(filePath,
                                               FileMode.Open,
                                               FileAccess.ReadWrite))
                {
                    //Get Team Name
                    byte        thisByte    = 01;
                    List <Byte> listOfBytes = new List <byte>();
                    fs.Position = gameSystemClone.TeamNameOffsetStart + x * gameSystemClone.TeamOffsetIncrement;
                    while (true)
                    {
                        thisByte = byte.Parse(fs.ReadByte().ToString());
                        if (thisByte == 00)
                        {
                            break;
                        }
                        listOfBytes.Add(thisByte);
                    }
                    Team team = new Team();
                    team.TeamName = System.Text.Encoding.ASCII.GetString(listOfBytes.ToArray());
                    teams.Add(team);
                }
            }
            return(teams);
        }
Пример #2
0
        private List <BlitzGameFile> ParseBlitzFileList(string romLocation, BlitzGame gameInfo)
        {
            List <BlitzGameFile> midwayDecFileList = new List <BlitzGameFile>();

            using (var fs = new FileStream(romLocation,
                                           FileMode.Open,
                                           FileAccess.ReadWrite))
            {
                int  fileTableEntrySize = gameInfo.maxFileNameLenght + gameInfo.filePositionLength + gameInfo.decompressedLenght + gameInfo.compressedLenght;
                int  fileCount          = BitsHelper.GetNumberFromBytes(BitsHelper.ReadBytesFromFileStream(fs, gameInfo.FileSystemOffset + 12, 4).ToArray());
                long currentOffset      = BitsHelper.GetNumberFromBytes(BitsHelper.ReadBytesFromFileStream(fs, gameInfo.FileSystemOffset + 8, 4).ToArray()) + gameInfo.FileSystemOffset;
                for (int x = 0; x < fileCount; x++)
                {
                    int readLocation = 0;

                    // read file table entry
                    List <Byte> fileTableEntry = BitsHelper.ReadBytesFromFileStream(fs, currentOffset, fileTableEntrySize);

                    //Get File Name
                    string fileName = System.Text.Encoding.ASCII.GetString(fileTableEntry.ToArray(), readLocation, gameInfo.maxFileNameLenght).Replace("\0", "");

                    /// Get decompressed file size
                    readLocation += gameInfo.maxFileNameLenght;
                    byte[] decompressedSizeBytes = fileTableEntry.GetRange(readLocation, gameInfo.decompressedLenght).ToArray();
                    Array.Reverse(decompressedSizeBytes);
                    int decompressedSize = BitConverter.ToInt32(decompressedSizeBytes, 0);

                    //File Position
                    readLocation += gameInfo.decompressedLenght;
                    byte[] filePositionBytes = fileTableEntry.GetRange(readLocation, gameInfo.filePositionLength).ToArray();
                    Array.Reverse(filePositionBytes);
                    long filePosition = BitConverter.ToInt32(filePositionBytes, 0) + gameInfo.FileSystemOffset;

                    /// Get decompressed file size
                    readLocation += gameInfo.filePositionLength;
                    byte[] compressedSizeBytes = fileTableEntry.GetRange(readLocation, gameInfo.compressedLenght).ToArray();
                    Array.Reverse(compressedSizeBytes);
                    int compressedSize = BitConverter.ToInt32(compressedSizeBytes, 0);

                    midwayDecFileList.Add(new BlitzGameFile()
                    {
                        fileName            = fileName,
                        decompressedSize    = decompressedSize,
                        fileOffset          = filePosition,
                        compressedSize      = compressedSize,
                        fileTableEntryStart = currentOffset
                    }
                                          );
                    currentOffset += fileTableEntrySize;
                }
            }
            return(midwayDecFileList);
        }
Пример #3
0
        public static void ReadTeamFiles(string filePath, BlitzGame gameSystem, ref Teams blitzTeams, List <BlitzGameFile> files)
        {
            using (var fs = new FileStream(filePath,
                                           FileMode.Open,
                                           FileAccess.ReadWrite))
            {
                for (int y = 0; y < gameSystem.GameTeamCount; y++)
                {
                    int fileIndex = 0;
                    blitzTeams[y].TeamFiles = new List <BlitzGameFile>();
                    // Load Uniform
                    for (int x = 0; x < gameSystem.TeamUniformLength; x++)
                    {
                        fs.Position = gameSystem.TeamUniformOffset + (gameSystem.TeamOffsetIncrement * y) + fileIndex;
                        long fileTableLocation;
                        long.TryParse(ByteArrayToString(new byte[] { (byte)fs.ReadByte(), (byte)fs.ReadByte() }), System.Globalization.NumberStyles.HexNumber, null, out fileTableLocation);
                        fileTableLocation -= 1;
                        blitzTeams[y].TeamFiles.Add(Clone.DeepClone(files[(int)fileTableLocation]));
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].fileDescription     = gameSystem.UniformFileNameList[x];
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].teamReferenceOffset = fs.Position - 2;
                        fileIndex += 2;
                    }
                    // Load Menu items
                    fileIndex = 0;
                    for (int x = 0; x < gameSystem.TeamMenuLength; x++)
                    {
                        fs.Position = gameSystem.TeamMenuOffset + (gameSystem.TeamOffsetIncrement * y) + fileIndex;
                        long fileTableLocation;
                        long.TryParse(ByteArrayToString(new byte[] { (byte)fs.ReadByte(), (byte)fs.ReadByte() }), System.Globalization.NumberStyles.HexNumber, null, out fileTableLocation);
                        fileTableLocation -= 1;
                        blitzTeams[y].TeamFiles.Add(Clone.DeepClone(files[(int)fileTableLocation]));
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].fileDescription     = gameSystem.MenuSelectFileNameList[x];
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].teamReferenceOffset = fs.Position - 2;
                        fileIndex += 2;
                    }

                    // Load in game team items (endzone, ect...)
                    fileIndex = 0;
                    for (int x = 0; x < gameSystem.TeamInGameLength; x++)
                    {
                        fs.Position = gameSystem.TeamInGameOffset + (gameSystem.TeamOffsetIncrement * y) + fileIndex;
                        long fileTableLocation;
                        long.TryParse(ByteArrayToString(new byte[] { (byte)fs.ReadByte(), (byte)fs.ReadByte() }), System.Globalization.NumberStyles.HexNumber, null, out fileTableLocation);
                        fileTableLocation -= 1;
                        blitzTeams[y].TeamFiles.Add(Clone.DeepClone(files[(int)fileTableLocation]));
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].fileDescription     = gameSystem.InGameFileNameList[x];
                        blitzTeams[y].TeamFiles[blitzTeams[y].TeamFiles.Count - 1].teamReferenceOffset = fs.Position - 2;
                        fileIndex += 2;
                    }
                }
            }
        }
Пример #4
0
 private void LoadRom(string romLocation)
 {
     gameInfo                = BlitzGame.GetBlitz2000Zoinkity();
     tbTeamCount.Text        = gameInfo.GameTeamCount.ToString();
     this.romLocation        = romLocation;
     BlitzTeams              = RomEditor.ReadRom(romLocation, gameInfo);
     gameFiles               = ParseBlitzFileList(romLocation, gameInfo);
     filesSortedByOffset     = Clone.DeepClone(gameFiles).OrderBy(x => x.fileOffset).ToList();
     lbGameFiles.ItemsSource = gameFiles;
     RomEditor.ReadTeamFiles(romLocation, gameInfo, ref blitzTeams, gameFiles);
     lbGameFiles.DisplayMemberPath = "fileName";
     NotifiyPropertyChanged("BlitzTeams");
 }