Esempio n. 1
0
        private static void ReadData()
        {
            ArchiveWorker aw = new ArchiveWorker(Memory.Archives.A_BATTLE);

            string[] test = aw.GetListOfFiles();
            battlename       = test.First(x => x.ToLower().Contains(battlename));
            stageBuffer      = ArchiveWorker.GetBinaryFile(Memory.Archives.A_BATTLE, battlename);
            pbs              = new PseudoBufferedStream(stageBuffer);
            bs_cameraPointer = GetCameraPointer();
            pbs.Seek(bs_cameraPointer, 0);
            ReadCamera();
            uint sectionCounter = pbs.ReadUInt();

            if (sectionCounter != 6)
            {
                Console.WriteLine($"BS_PARSER_PRE_OBJECTSECTION: Main geometry section has no 6 pointers at: {pbs.Tell()}");
                battleModule++;
                return;
            }
            MainGeometrySection MainSection = ReadObjectGroupPointers();

            ObjectsGroup[] objectsGroups = new ObjectsGroup[4]
            {
                ReadObjectsGroup(MainSection.Group1Pointer),
                ReadObjectsGroup(MainSection.Group2Pointer),
                ReadObjectsGroup(MainSection.Group3Pointer),
                ReadObjectsGroup(MainSection.Group4Pointer)
            };

            modelGroups = new ModelGroup[4]
            {
                ReadModelGroup(objectsGroups[0].objectListPointer),
                ReadModelGroup(objectsGroups[1].objectListPointer),
                ReadModelGroup(objectsGroups[2].objectListPointer),
                ReadModelGroup(objectsGroups[3].objectListPointer)
            };

            ReadTexture(MainSection.TexturePointer);

            ReadCharacters();
            ReadMonster();

            //for frames indexes monsters are first, then after n monsters characters appear with weapons
            frame = new int[monstersData.Length + charactersData.Length * 2];

            battleModule++;
        }
Esempio n. 2
0
        private static ModelGroup ReadModelGroup(uint pointer)
        {
            pbs.Seek(pointer, System.IO.SeekOrigin.Begin);
            uint modelsCount = pbs.ReadUInt();

            Model[] models        = new Model[modelsCount];
            uint[]  modelPointers = new uint[modelsCount];
            for (int i = 0; i < modelsCount; i++)
            {
                modelPointers[i] = pointer + pbs.ReadUInt();
            }
            for (int i = 0; i < modelsCount; i++)
            {
                models[i] = ReadModel(modelPointers[i]);
            }
            return(new ModelGroup()
            {
                models = models
            });
        }
Esempio n. 3
0
 private void ReadParameters(byte _bpp)
 {
     pbs.Seek(3, System.IO.SeekOrigin.Current);
     if (_bpp == 4)
     {
         texture.clutSize     = pbs.ReadUInt() - 12;
         texture.PaletteX     = pbs.ReadUShort();
         texture.PaletteY     = pbs.ReadUShort();
         texture.NumOfColours = pbs.ReadUShort();
         texture.NumOfCluts   = pbs.ReadUShort();
         int bppMultiplier = 16;
         if (texture.NumOfColours != 16 || texture.clutSize != (texture.NumOfCluts * bppMultiplier)) //wmsetus uses 4BPP, but sets 256 colours, but actually is 16, but num of clut is 2* 256/16 WTF?
         {
             texture.NumOfCluts = (ushort)(texture.NumOfColours / 16 * texture.NumOfCluts);
             bppMultiplier      = 32;
         }
         byte[] buffer = new byte[texture.NumOfCluts * bppMultiplier];
         for (int i = 0; i != buffer.Length; i++)
         {
             buffer[i] = pbs.ReadByte();
         }
         texture.ClutData = buffer;
         pbs.Seek(4, System.IO.SeekOrigin.Current);
         texture.ImageOrgX  = pbs.ReadUShort();
         texture.ImageOrgY  = pbs.ReadUShort();
         texture.Width      = (ushort)(pbs.ReadUShort() * 4);
         texture.Height     = pbs.ReadUShort();
         textureDataPointer = (uint)pbs.Tell();
         return;
     }
     if (_bpp == 8)
     {
         pbs.Seek(4, System.IO.SeekOrigin.Current);
         texture.PaletteX = pbs.ReadUShort();
         texture.PaletteY = pbs.ReadUShort();
         pbs.Seek(2, System.IO.SeekOrigin.Current);
         texture.NumOfCluts = pbs.ReadUShort();
         byte[] buffer = new byte[texture.NumOfCluts * 512];
         for (int i = 0; i != buffer.Length; i++)
         {
             buffer[i] = pbs.ReadByte();
         }
         texture.ClutData = buffer;
         pbs.Seek(4, System.IO.SeekOrigin.Current);
         texture.ImageOrgX  = pbs.ReadUShort();
         texture.ImageOrgY  = pbs.ReadUShort();
         texture.Width      = (ushort)(pbs.ReadUShort() * 2);
         texture.Height     = pbs.ReadUShort();
         textureDataPointer = (uint)pbs.Tell();
         return;
     }
     if (_bpp == 16)
     {
         pbs.Seek(4, System.IO.SeekOrigin.Current);
         texture.ImageOrgX  = pbs.ReadUShort();
         texture.ImageOrgY  = pbs.ReadUShort();
         texture.Width      = pbs.ReadUShort();
         texture.Height     = pbs.ReadUShort();
         textureDataPointer = (uint)pbs.Tell();
         return;
     }
     if (_bpp != 24)
     {
         return;
     }
     pbs.Seek(4, System.IO.SeekOrigin.Current);
     texture.ImageOrgX  = pbs.ReadUShort();
     texture.ImageOrgY  = pbs.ReadUShort();
     texture.Width      = (ushort)(pbs.ReadUShort() / 1.5);
     texture.Height     = pbs.ReadUShort();
     textureDataPointer = (uint)pbs.Tell();
 }