Пример #1
0
 public ShopDefinition(System.IO.Stream stream, EndianUtils.Endianness endian, BitUtils.Bitness bits)
 {
     InGameID    = stream.ReadUInt32().FromEndian(endian);
     StringDicID = stream.ReadUInt32().FromEndian(endian);
     stream.ReadUInt32().FromEndian(endian);               // second instance of string dic id?
     stream.ReadUInt32().FromEndian(endian);               // always empty?
     OnTrigger    = stream.ReadUInt32().FromEndian(endian);
     ChangeToShop = stream.ReadUInt32().FromEndian(endian);
     stream.DiscardBytes(4 + bits.NumberOfBytes());               // always empty?
 }
Пример #2
0
 public Unknown0x20byteAreaB(System.IO.Stream stream, uint refStringStart, Util.Endianness endian)
 {
     UnknownFloats = new float[4];
     for (int i = 0; i < UnknownFloats.Length; ++i)
     {
         UnknownFloats[i] = stream.ReadUInt32().FromEndian(endian).UIntToFloat();
     }
     UnknownByte = (byte)stream.ReadByte();
     stream.DiscardBytes(0x0F);
 }
Пример #3
0
        public Title(System.IO.Stream stream)
        {
            ID = stream.ReadUInt32().SwapEndian();
            NameStringDicID = stream.ReadUInt32().SwapEndian();
            DescStringDicID = stream.ReadUInt32().SwapEndian();
            Character       = stream.ReadUInt32().SwapEndian();

            CostumeString = stream.ReadAscii(0x10).TrimNull();

            BunnyGuildPointsMaybe = stream.ReadUInt32().SwapEndian();
            stream.DiscardBytes(0xC);
        }
Пример #4
0
        public SynopsisEntry(System.IO.Stream stream, EndianUtils.Endianness endian)
        {
            ID              = stream.ReadUInt32().FromEndian(endian);
            StoryIdMin      = stream.ReadUInt32().FromEndian(endian);
            StoryIdMax      = stream.ReadUInt32().FromEndian(endian);
            NameStringDicId = stream.ReadUInt32().FromEndian(endian);
            TextStringDicId = stream.ReadUInt32().FromEndian(endian);
            stream.DiscardBytes(0xC);

            long pos = stream.Position;

            RefString1      = stream.ReadAsciiNullterm();
            stream.Position = pos + 0x10;
            RefString2      = stream.ReadAsciiNullterm();
            stream.Position = pos + 0x20;
        }
Пример #5
0
        public static bool VerifySave(out uint saveNumber, System.IO.Stream file, int position)
        {
            saveNumber = 0;
            uint saveValidPage = 0;

            for (int i = 0; i < 0xE; ++i)
            {
                int sectorpos = position + 0x1000 * i;
                file.Position = sectorpos + 0xFF4;
                int saveLogicalPage = file.ReadByte();
                file.DiscardBytes(1);
                ushort readChecksum  = file.ReadUInt16();
                uint   magic         = file.ReadUInt32();
                uint   saveNumberTmp = file.ReadUInt32();

                // verify magic number
                if (magic != 0x08012025)
                {
                    Console.WriteLine("Magic number of sector at 0x" + sectorpos.ToString("X") + " is wrong.");
                    continue;
                }

                // check if logical page is in valid range
                if (saveLogicalPage > 0xD)
                {
                    Console.WriteLine("Logical page of sector at 0x" + sectorpos.ToString("X") + " is outside of valid range.");
                    continue;
                }

                // verify checksum
                file.Position = sectorpos;
                ushort calculatedChecksum = Checksum.CalculateSaveChecksum(file, 0xF80);
                if (readChecksum != calculatedChecksum)
                {
                    Console.WriteLine("Checksum of sector at 0x" + sectorpos.ToString("X") + " is wrong.");
                    continue;
                }

                // all checks passed, page is valid, remember that
                saveNumber     = saveNumberTmp;
                saveValidPage |= (1u << saveLogicalPage);
            }

            return(saveValidPage == 0x3FFF);
        }
Пример #6
0
        public FloorInfo(System.IO.Stream stream, uint refStringStart, Util.Endianness endian, Util.Bitness bits)
        {
            uint atLeastBytes = (0x10 + 2 * (bits.NumberOfBytes()));

            EntrySize = stream.ReadUInt32().FromEndian(endian);
            if (EntrySize < atLeastBytes)
            {
                throw new Exception("This file confuses me.");
            }

            uint  unknown2 = stream.ReadUInt32().FromEndian(endian);
            uint  unknown3 = stream.ReadUInt32().FromEndian(endian);
            ulong unknown4 = stream.ReadUInt(bits, endian);
            uint  unknown5 = stream.ReadUInt32().FromEndian(endian);
            ulong unknown6 = stream.ReadUInt(bits, endian);

            if (EntrySize > atLeastBytes)
            {
                stream.DiscardBytes(EntrySize - atLeastBytes);
            }

            RefString1 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + unknown4));
            RefString2 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + unknown6));
        }
Пример #7
0
        // 14 is always zero
        // 16 is zero except on the new giganto monsters and spiral draco
        // 76 is on PS3 only, StringDicID for the dummy description

        public Enemy(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            long pos = stream.Position;

            uint entryLength = stream.ReadUInt32().FromEndian(endian);                // 0

            ID = stream.ReadUInt32().FromEndian(endian);                              // 1
            NameStringDicID = stream.ReadUInt32().FromEndian(endian);                 // 2
            ulong ref3 = stream.ReadUInt(bits, endian);                               // 3
            ulong ref4 = stream.ReadUInt(bits, endian);                               // 4

            InGameID = stream.ReadUInt32().FromEndian(endian);                        // 5
            ulong ref6 = stream.ReadUInt(bits, endian);                               // 6

            Level = stream.ReadUInt32().FromEndian(endian);                           // 7
            HP    = stream.ReadUInt32().FromEndian(endian);                           // 8
            TP    = stream.ReadUInt32().FromEndian(endian);                           // 9
            PATK  = stream.ReadUInt32().FromEndian(endian);                           // 10
            PDEF  = stream.ReadUInt32().FromEndian(endian);                           // 11
            MATK  = stream.ReadUInt32().FromEndian(endian);                           // 12
            MDEF  = stream.ReadUInt32().FromEndian(endian);                           // 13
            stream.ReadUInt32().FromEndian(endian);                                   // 14
            AGL = stream.ReadUInt32().FromEndian(endian);                             // 15
            stream.ReadUInt32().FromEndian(endian);                                   // 16

            FatalBlue         = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 17
            FatalRed          = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 18
            FatalGreen        = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 19
            FatalBlueRelated  = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 20
            FatalRedRelated   = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 21
            FatalGreenRelated = stream.ReadUInt32().FromEndian(endian).UIntToFloat(); // 22

            stream.ReadUInt32().FromEndian(endian);                                   // 23

            Category = stream.ReadUInt32().FromEndian(endian);                        // 24

            stream.ReadUInt32().FromEndian(endian);                                   // 25

            // > 100 weak, < 100 resist, 0 nullify, negative absorb
            // effectively a damage multiplier in percent
            Attributes    = new int[7];
            Attributes[0] = (int)stream.ReadUInt32().FromEndian(endian); // 26
            Attributes[1] = (int)stream.ReadUInt32().FromEndian(endian); // 27
            Attributes[2] = (int)stream.ReadUInt32().FromEndian(endian); // 28
            Attributes[3] = (int)stream.ReadUInt32().FromEndian(endian); // 29
            Attributes[4] = (int)stream.ReadUInt32().FromEndian(endian); // 30
            Attributes[5] = (int)stream.ReadUInt32().FromEndian(endian); // 31
            Attributes[6] = (int)stream.ReadUInt32().FromEndian(endian); // 32

            EXP  = stream.ReadUInt32().FromEndian(endian);               // 33
            Gald = stream.ReadUInt32().FromEndian(endian);               // 34
            LP   = stream.ReadUInt32().FromEndian(endian);               // 35

            DropItems      = new uint[4];
            DropItems[0]   = stream.ReadUInt32().FromEndian(endian);          // 36
            DropItems[1]   = stream.ReadUInt32().FromEndian(endian);          // 37
            DropItems[2]   = stream.ReadUInt32().FromEndian(endian);          // 38
            DropItems[3]   = stream.ReadUInt32().FromEndian(endian);          // 39
            DropChances    = new uint[4];
            DropChances[0] = stream.ReadUInt32().FromEndian(endian);          // 40
            DropChances[1] = stream.ReadUInt32().FromEndian(endian);          // 41
            DropChances[2] = stream.ReadUInt32().FromEndian(endian);          // 42
            DropChances[3] = stream.ReadUInt32().FromEndian(endian);          // 43
            StealItem      = stream.ReadUInt32().FromEndian(endian);          // 44
            StealChance    = stream.ReadUInt32().FromEndian(endian);          // 45

            FatalTypeExp    = stream.ReadUInt32().FromEndian(endian);         // 46
            EXPModifier     = stream.ReadUInt32().FromEndian(endian);         // 47
            FatalTypeLP     = stream.ReadUInt32().FromEndian(endian);         // 48
            LPModifier      = stream.ReadUInt32().FromEndian(endian);         // 49
            FatalTypeDrop   = stream.ReadUInt32().FromEndian(endian);         // 50
            DropModifier    = new uint[4];
            DropModifier[0] = stream.ReadUInt32().FromEndian(endian);         // 51
            DropModifier[1] = stream.ReadUInt32().FromEndian(endian);         // 52
            DropModifier[2] = stream.ReadUInt32().FromEndian(endian);         // 53
            DropModifier[3] = stream.ReadUInt32().FromEndian(endian);         // 54

            ulong ref55 = stream.ReadUInt(bits, endian);                      // 55

            KillableWithFS = stream.ReadUInt32().FromEndian(endian);          // 56

            IconID = stream.ReadUInt32().FromEndian(endian);                  // 57

            ulong ref58 = stream.ReadUInt(bits, endian);                      // 58

            InMonsterBook = stream.ReadUInt32().FromEndian(endian);           // 59
            Location      = stream.ReadUInt32().FromEndian(endian);           // 60
            // -1: None shown, 0: Sun, 1: Rain, 2: Snow, 3: Windy, 4: Night, 5: Cloudy
            LocationWeather = (int)stream.ReadUInt32().FromEndian(endian);    // 61

            stream.ReadUInt32().FromEndian(endian);                           // 62
            stream.ReadUInt32().FromEndian(endian);                           // 63
            stream.ReadUInt32().FromEndian(endian);                           // 64
            stream.ReadUInt32().FromEndian(endian);                           // 65
            stream.ReadUInt32().FromEndian(endian);                           // 66
            stream.ReadUInt32().FromEndian(endian);                           // 67

            SecretMissionDrop       = stream.ReadUInt32().FromEndian(endian); // 68
            SecretMissionDropChance = stream.ReadUInt32().FromEndian(endian); // 69

            long bytesleft = (pos + entryLength) - stream.Position;

            if (bytesleft > 0)
            {
                stream.DiscardBytes((uint)bytesleft);
            }

            RefString  = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + ref6));
            RefString2 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + ref3));
            RefString3 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + ref4));
            RefString4 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + ref55));
            RefString5 = stream.ReadAsciiNulltermFromLocationAndReset((long)(refStringStart + ref58));
        }