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 { } + } + }*/ } } }
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()); } }