Esempio n. 1
0
        public void ParseAGOTextures(Reader reader)
        {
            if (!Load.exportTextures)
            {
                return;
            }
            Load.print("Num AGO Textures: " + num_ago_textures);

            UITexture[] textures = new UITexture[num_ago_textures];
            for (int i = 0; i < textures.Length; i++)
            {
                textures[i] = new UITexture();
            }
            for (int i = 0; i < textures.Length; i++)
            {
                textures[i].name = "Tex_" + i;
            }
            Pointer.DoAt(ref reader, off_ago_textures_pageInfo, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].pageInfo = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ago_textures_palette, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].palette = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ago_textures_xInPage, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].xInPage = reader.ReadByte();
                }
            });
            Pointer.DoAt(ref reader, off_ago_textures_yInPage, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].yInPage = reader.ReadByte();
                }
            });
            Pointer.DoAt(ref reader, off_ago_textures_globalX, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].globalX = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ago_textures_globalY, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].globalY = reader.ReadUInt16();
                }
            });
            if (Settings.s.game == Settings.Game.RRush)
            {
                Pointer.DoAt(ref reader, off_ago_textures_width, () => {
                    for (int i = 0; i < textures.Length; i++)
                    {
                        textures[i].width = reader.ReadUInt16();
                    }
                });
                Pointer.DoAt(ref reader, off_ago_textures_height, () => {
                    for (int i = 0; i < textures.Length; i++)
                    {
                        textures[i].height = reader.ReadUInt16();
                    }
                });
            }


            R2PS1Loader l    = Load as R2PS1Loader;
            PS1VRAM     vram = l.vram;

            for (int i = 0; i < textures.Length; i++)
            {
                UITexture t = textures[i];
                if (t.width != 0)
                {
                    //Load.print(t.name + " - " + t.width + " - " + t.height + " - " + t.xInPage + " - " + t.yInPage);
                    t.texture = vram.GetTexture(t.width, t.height, t.pageInfo, t.palette, t.xInPage, t.yInPage);
                    Util.ByteArrayToFile(l.gameDataBinFolder + "textures/ago/" + Load.lvlName + "/"
                                         + $"{t.name}.png", t.texture.EncodeToPNG());
                }
                else
                {
                    // Uncomment to extract AGO textures with hardcoded width & height

                    /*int tp = Util.ExtractBits(t.pageInfo, 2, 7); // 0: 4-bit, 1: 8-bit, 2: 15-bit direct
                     * int pageW = 64;
                     * if (tp == 1) {
                     *      pageW = 128;
                     * } else if (tp == 0) {
                     *      pageW = 256;
                     * }
                     * int maxW = pageW - t.xInPage;
                     * int maxH = 256 - t.yInPage;
                     * for (int x = 0; x < 5; x++) {
                     *      ushort w = (ushort)(0x10 << x);
                     *      if (w > maxW) continue;
                     *      for (int y = 0; y < 5; y++) {
                     *              ushort h = (ushort)(0x10 << y);
                     *              if (h > maxH) continue;
                     *              try {
                     *                      t.texture = vram.GetTexture(w, h, t.pageInfo, t.palette, t.xInPage, t.yInPage);
                     *                      Util.ByteArrayToFile(l.gameDataBinFolder + "textures/ago/" + Load.lvlName + "/"
                     + $"{t.name}_{w}x{h}.png", t.texture.EncodeToPNG());
                     +              } catch { }
                     +      }
                     + }*/
                }
            }
        }
Esempio n. 2
0
        public void ParseUITextures(Reader reader)
        {
            if (!Load.exportTextures)
            {
                return;
            }
            Load.print("Num UI Textures: " + num_ui_textures);

            UITexture[] textures = new UITexture[num_ui_textures];
            for (int i = 0; i < textures.Length; i++)
            {
                textures[i] = new UITexture();
            }
            Pointer.DoAt(ref reader, off_ui_textures_names, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    Pointer p = Pointer.Read(reader);
                    Pointer.DoAt(ref reader, p, () => {
                        textures[i].name = reader.ReadString(0x1C);
                    });
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_width, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].width = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_height, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].height = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_pageInfo, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].pageInfo = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_palette, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].palette = reader.ReadUInt16();
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_xInPage, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].xInPage = reader.ReadByte();
                }
            });
            Pointer.DoAt(ref reader, off_ui_textures_yInPage, () => {
                for (int i = 0; i < textures.Length; i++)
                {
                    textures[i].yInPage = reader.ReadByte();
                }
            });


            R2PS1Loader l    = Load as R2PS1Loader;
            PS1VRAM     vram = l.vram;

            for (int i = 0; i < textures.Length; i++)
            {
                UITexture t = textures[i];
                //Load.print(t.name + " - " + t.width + " - " + t.height + " - " + t.xInPage + " - " + t.yInPage);
                t.texture = vram.GetTexture(t.width, t.height, t.pageInfo, t.palette, t.xInPage, t.yInPage);
                Util.ByteArrayToFile(l.gameDataBinFolder + "textures/ui/" + t.name + ".png", t.texture.EncodeToPNG());
            }
        }