два вопроса:
  1. где в mdx blp посмотреть требование для высокого качества текстур ?
  2. как в mdx blp изменить требование для высокого качества текстур ?

в картах попадаются модели, которые работают только на высоком качестве текстур в настройках
по дефолту в варике выставлено среднее качество
и если обычный васёк с дефолтными средними текстурами зайдёт в такую карту - то:
а) у него тихо крашнется варик на стадии загрузки карты (если mdx объект ставится на карту в начале)
б) у него тихо крашнется варик в середине игры (если mdx объект ставится на карту только при активации игроком триггера)
тем самым подставив свою команду, потому что в лобби у него всё было норм и никаких ошибок не возникало
виноват в этом естественно не васёк, а картодел
War3 - Настройки - Изображение - Качество текстур - Среднее -> Высокое
War3 - Options - Video - Texture Quality - Medium -> High
[HKCU\Software\Blizzard Entertainment\Warcraft III\Video] - "texquality"=dword:00000001 -> 00000002
вот например маленькая моделька mdx (скачать тут xgm.guru/files/100/314739/MovePortal.zip )
она как раз работает только на высоких текстурах , а на средних она крашнет варик
как мне это узнать без краш-брутфорса всех моделей по одной, чтобы выявить проблемную?
и как потом изменить эту модель, чтобы она работала и на средних настройках тоже?

Принятый ответ

Для начала, нужно сделать нормальную текстуру, с длинами сторон равными степени двойки. Потом проверять в игре.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
23
9 месяцев назад
1
Для начала, нужно сделать нормальную текстуру, с длинами сторон равными степени двойки. Потом проверять в игре.
Загруженные файлы
Принятый ответ
0
32
9 месяцев назад
0
/Сейчас бы использовать низки или средние настройки для игры 2001 года
0
14
9 месяцев назад
Отредактирован host_pi
0
длинами сторон равными степени двойки
прекрасно
именно в этих местах у нас крашила игра пока мы не начали ставить высокие текстуры
после ресайза по двойке и скармливании назад - всё заработало даже на средних

Сейчас бы использовать низки или средние настройки для игры 2001 года
все бы были такие умные и рассказывали 100% точную причину каждого краша и каждого десинхрона, коих разновидностей в варике 100500
и предоставляли бы точное лечение к каждой карте через 2 минуты после обращения в онлаен чате и по номеру 8 800
но нет, таких умных как ты один - нету
и если у тебя крашит карта - ты просто перестаёшь в неё играть, если ты не остервенелый, который готов листфайлы вскрывать и ковырять чужие обфусцированные ресурсы 24/7
Загруженные файлы
1
23
9 месяцев назад
1
как мне это узнать без краш-брутфорса всех моделей по одной, чтобы выявить проблемную?
Ну такое решение можно запилить, спарсить разрешение всех блп из папки
А чинить уже ручками, так как скорее всего там и uv придётся подправлять после смены разрешения текстуры
0
14
9 месяцев назад
Отредактирован host_pi
0
спарсить разрешение всех блп из папки
та это уже дело техники и софта, главное знать причину
а вот этот вот blp_res_checker уже опубликован или это твой личный никомунидашный? (я тока через экспорт в png и парс png смогу)
уже 24 минуты простаивает без публикации !
Загруженные файлы
1
23
9 месяцев назад
1
а вот этот вот blp_res_checker уже опубликован или это твой личный никомунидашный?
Но он же прикреплён к комменту выше...
0
14
9 месяцев назад
Отредактирован host_pi
0
Но он же прикреплён к комменту выше...
обыграл как по нотам
ресурс будешь создавать? а то могу, добро пропадает
туда еще можно добавить экспорт в txt, потому что если файлов больше 300 (или если у них длинный путь), то окно забивается и скролится вниз, верхние пропадают
1
23
9 месяцев назад
1
туда еще можно добавить экспорт в txt, потому что если файлов больше 300 (или если у них длинный путь), то окно забивается и скролится вниз, верхние пропадают
Разумно.
ресурс будешь создавать? а то могу, добро пропадает
Таки не думаю, что это нужно в базе
Загруженные файлы
0
14
9 месяцев назад
Отредактирован host_pi
0
встречаем во всех картах страны в листфайле строку output.txt с телеметрией внутри карты
а если с перезаписью возможного дубля создавать output_[Foldername].txt рядом с blp_res_checker.exe то такого не произойдёт и будет идеально
1
23
9 месяцев назад
1
Короч вот сырец, развлекайтесь
тык
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);
        }
    }
}
Чтобы оставить комментарий, пожалуйста, войдите на сайт.