blp res checker

Программы
Предназначение:
Работа с текстурами

blp res checker

BLP Resolution Checker
парсер и сортировщик разрешения у blp файлов
автор статьи: host_pi
автор программы: poisoNDealer
версия программы: v2
требования: Windows
описание:
программа, которая тестирует вашу папку с ресурсами и выводит список текстур, для которых требуется только высокое качество текстур в настройках варкрафта
тем самым избавляя вас от рутинных действий по выявлению проблемных blp файлов
установка: не требуется
как пользоваться: перетянуть мышкой папку с blp файлами на exe файл
видео

ченжлог:
v1 - первый релиз - вывод в окно - VirusTotal 3/72
v2 - добавлено формирование вывода в файл output.txt в папке с текстурами - VirusTotal 2/71

пример работы программы:

Total BLP files checked: 9
Valid BLP files: 5
Invalid BLP files: 4
Invalid Files:
C:\MyMap\File1.blp is a broken file. Resolution: 574 x 479
C:\MyMap\File2.blp is a broken file. Resolution: 202 x 95
C:\MyMap\File3.blp is a broken file. Resolution: 57 x 57
C:\MyMap\File4.blp is a broken file. Resolution: 40 x 40
Valid Files:
C:\MyMap\File5.blp is a valid file. Resolution: 256 x 256
C:\MyMap\File6.blp is a valid file. Resolution: 128 x 256
C:\MyMap\File7.blp is a valid file. Resolution: 1024 x 1024
C:\MyMap\File8.blp is a valid file. Resolution: 64 x 64
C:\MyMap\File9.blp is a valid file. Resolution: 256 x 128

описание проблемы с blp подробно:

в картах попадаются модели, которые работают только на высоком качестве текстур в настройках
по дефолту в варике выставлено среднее качество
и если обычный васёк с дефолтными средними текстурами зайдёт в такую карту - то:
а) у него тихо крашнется варик на стадии загрузки карты (если mdx объект ставится на карту в начале)
б) у него тихо крашнется варик в середине игры (если mdx объект ставится на карту только при активации игроком триггера)
тем самым подставив свою команду, потому что в лобби у него всё было норм и никаких ошибок не возникало
виноват в этом естественно не васёк, а картодел
War3 - Настройки - Изображение - Качество текстур - Среднее -> Высокое
War3 - Options - Video - Texture Quality - Medium -> High
[HKCU\Software\Blizzard Entertainment\Warcraft III\Video] - "texquality"=dword:00000001 -> 00000002
в этой ситуации есть 2 решения:
1 - выставить себе высокое качество текстур и смотреть как отлетают мимоходы
2 - исправить размер blp файлов, чтобы размер по X и Y был только равен степеням двойки --- 2 4 8 16 32 64 128 256 512 1024 2048 и т.д.
если действовать по 2 способу в своей карте, либо при исправлении чужих карт - то вы увеличите количество людей в своей карте и уменьшите количество крашей в этом мире
исходный код:
тык
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

namespace blp_res_checker
{
    internal class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("Please drag and drop the folder onto the exe file.");
                Console.ReadLine();
                return;
            }

            var directory = args[0];
            var files = Directory.GetFiles(directory, "*.blp", SearchOption.AllDirectories);

            List<string> validFiles = new List<string>();
            List<string> invalidFiles = new List<string>();

            foreach (var file in files)
            {
                using (var stream = File.OpenRead(file))
                {
                    var buffer = new byte[4];
                    stream.Read(buffer, 0, buffer.Length);
                    var magic = System.Text.Encoding.Default.GetString(buffer);
                    if (magic != "BLP1")
                    {
                        continue;
                    }

                    stream.Seek(8, SeekOrigin.Current);
                    buffer = new byte[8];
                    stream.Read(buffer, 0, buffer.Length);

                    var val1 = BitConverter.ToUInt32(buffer.Take(4).ToArray(), 0);
                    var val2 = BitConverter.ToUInt32(buffer.Skip(4).Take(4).ToArray(), 0);

                    if (!IsPowerOfTwo(val1) || !IsPowerOfTwo(val2))
                    {
                        invalidFiles.Add($"{file} is a broken file. Resolution: {val1} x {val2}");
                    }
                    else
                    {
                        validFiles.Add($"{file} is a valid file. Resolution: {val1} x {val2}");
                    }
                }
            }

            string outputFilePath = Path.Combine(directory, "output.txt");
            using (StreamWriter sw = new StreamWriter(outputFilePath))
            {
                WriteOutput(sw, $"Total BLP files checked: {files.Length}");
                WriteOutput(sw, $"Valid BLP files: {validFiles.Count}");
                WriteOutput(sw, $"Invalid BLP files: {invalidFiles.Count}");

                WriteOutput(sw, "\nInvalid Files:");
                foreach (var file in invalidFiles)
                {
                    WriteOutput(sw, file);
                }

                WriteOutput(sw, "\nValid Files:");
                foreach (var file in validFiles)
                {
                    WriteOutput(sw, file);
                }
            }

            Console.WriteLine($"\nThe results have been written to {outputFilePath}");
            Console.ReadLine();
        }

        static bool IsPowerOfTwo(uint x)
        {
            return (x != 0) && ((x & (x - 1)) == 0);
        }

        static void WriteOutput(StreamWriter sw, string output)
        {
            sw.WriteLine(output);
            Console.WriteLine(output);
        }
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
7 месяцев назад
0
poisoNDealer, как ты пал в моих глазах....
0
23
7 месяцев назад
0
poisoNDealer, как ты пал в моих глазах....
Что там? Вроде полезная штука
0
32
7 месяцев назад
0
Что там?
blp...
0
27
7 месяцев назад
0
Вау, поисон уже научился программы писать.. а я не умею

Берги, а разве модельки варкрафта в качестве текстур blp не юзают?
0
23
7 месяцев назад
0
blp...
Ну кто сидит на 1.26а будут пользоваться :D

(или используют модельки старого формата)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.