чем открыть wad файл
Неизвестное расширение файла может быть источником различных проблем. Однако выявление причин проблем с файлами WAD и их устранение не являются сложным процессом. Эта статья опишет 5 простых шагов, которые позволят вам решить проблемы с файлами WAD.
WAD расширение файла
Как открыть файл WAD?
Шаг 1. Найдите и скачайте и установите соответствующее программное обеспечение
Обычно для открытия файлов. WAD достаточно выполнить следующие простые шаги: найти, загрузить и установить соответствующее программное обеспечение. Затем, дважды щелкнув значок файла, откройте файл. Система должна автоматически связать WAD файл с соответствующим программным обеспечением. Ниже приведен список программ, необходимых для открытия файлов с расширением WAD:
Программы, поддерживающие WAD файлы
Шаг 2. Убедитесь, что файл WAD не заражен вредоносным ПО
Если данный файл с расширением WAD не заражен, возможно, антивирусная программа блокирует доступ к файлу. Пользователь должен принять необходимые меры предосторожности и выполнить действия, предложенные системой. После восстановления или удаления зараженного файла рекомендуется проверить всю систему на наличие вирусов. Вам нужно будет приобрести новую, чистую версию файла WAD.
Подсказка!
Имейте в виду, что вы всегда можете обратиться за помощью к ИТ-специалисту. Некоторые проблемы с файлами WAD могут быть трудно решить для менее опытных пользователей. Также вы можете обратиться за помощью к одному из разработчиков программного обеспечения, которое поддерживает файлы с расширением WAD. Для этого перейдите на подстраницу программного обеспечения и найдите адрес веб-сайта разработчика программного обеспечения.
Шаг 3. Убедитесь, что файлы WAD завершены, то есть были ли они загружены правильно
Если файл WAD не был загружен должным образом, программное обеспечение не сможет открыть такой файл. Проверьте размер файла в том месте, откуда вы скачали нужный файл. Если размер исходного файла отличается от размера загруженного файла WAD, вам придется загрузить файл снова.
Шаг 4. Убедитесь, что файлы WAD связаны с соответствующим программным обеспечением
Шаг 5. Убедитесь, что носитель, на котором хранятся файлы WAD, не поврежден или не поврежден
Возможно, что носитель, на котором находится файл, поврежден или поврежден. Попробуйте сканировать носитель на наличие ошибок.
Расширение файла WAD
Doom WAD Format
Что такое файл WAD?
Программы, которые поддерживают WAD расширение файла
Ниже приведена таблица со списком программ, которые поддерживают WAD файлы. WAD файлы можно встретить на всех системных платформах, включая мобильные, но нет гарантии, что каждый из них будет должным образом поддерживать такие файлы.
Программы, обслуживающие файл WAD
Как открыть файл WAD?
Проблемы с доступом к WAD могут быть вызваны разными причинами. Что важно, все распространенные проблемы, связанные с файлами с расширением WAD, могут решать сами пользователи. Процесс быстрый и не требует участия ИТ-специалиста. Ниже приведен список рекомендаций, которые помогут вам выявить и решить проблемы, связанные с файлами.
Шаг 1. Скачайте и установите Doom II
Основная и наиболее частая причина, препятствующая открытию пользователями файлов WAD, заключается в том, что в системе пользователя не установлена программа, которая может обрабатывать файлы WAD. Наиболее очевидным решением является загрузка и установка Doom II или одной из перечисленных программ: Doom Builder, WAD Editor, WadAuthor. Полный список программ, сгруппированных по операционным системам, можно найти выше. Если вы хотите загрузить установщик Doom II наиболее безопасным способом, мы рекомендуем вам посетить сайт id Software LLC и загрузить его из официальных репозиториев.
Шаг 2. Убедитесь, что у вас установлена последняя версия Doom II
Вы по-прежнему не можете получить доступ к файлам WAD, хотя Doom II установлен в вашей системе? Убедитесь, что программное обеспечение обновлено. Иногда разработчики программного обеспечения вводят новые форматы вместо уже поддерживаемых вместе с новыми версиями своих приложений. Если у вас установлена более старая версия Doom II, она может не поддерживать формат WAD. Самая последняя версия Doom II обратно совместима и может работать с форматами файлов, поддерживаемыми более старыми версиями программного обеспечения.
Шаг 3. Назначьте Doom II для WAD файлов
Если у вас установлена последняя версия Doom II и проблема сохраняется, выберите ее в качестве программы по умолчанию, которая будет использоваться для управления WAD на вашем устройстве. Следующий шаг не должен создавать проблем. Процедура проста и в значительной степени не зависит от системы
Процедура изменения программы по умолчанию в Windows
Процедура изменения программы по умолчанию в Mac OS
Шаг 4. Проверьте WAD на наличие ошибок
Если проблема по-прежнему возникает после выполнения шагов 1-3, проверьте, является ли файл WAD действительным. Вероятно, файл поврежден и, следовательно, недоступен.
Если WAD действительно заражен, возможно, вредоносное ПО блокирует его открытие. Сканируйте файл WAD и ваш компьютер на наличие вредоносных программ или вирусов. Если файл WAD действительно заражен, следуйте инструкциям ниже.
2. Проверьте, не поврежден ли файл
Если файл WAD был отправлен вам кем-то другим, попросите этого человека отправить вам файл. Возможно, файл был ошибочно скопирован, а данные потеряли целостность, что исключает доступ к файлу. Это может произойти, если процесс загрузки файла с расширением WAD был прерван и данные файла повреждены. Загрузите файл снова из того же источника.
3. Проверьте, есть ли у вашей учетной записи административные права
Иногда для доступа к файлам пользователю необходимы права администратора. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.
4. Убедитесь, что ваше устройство соответствует требованиям для возможности открытия Doom II
Если в системе недостаточно ресурсов для открытия файлов WAD, попробуйте закрыть все запущенные в данный момент приложения и повторите попытку.
5. Убедитесь, что ваша операционная система и драйверы обновлены
Последние версии программ и драйверов могут помочь вам решить проблемы с файлами Doom WAD Format и обеспечить безопасность вашего устройства и операционной системы. Возможно, что одно из доступных обновлений системы или драйверов может решить проблемы с файлами WAD, влияющими на более старые версии данного программного обеспечения.
Вы хотите помочь?
Если у Вас есть дополнительная информация о расширение файла WAD мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле WAD.
WAD Расширение файла.
Что такое файл WAD??
Файл данных игры, используемый Doom и Doom II, а также другими шутерами от первого лица, использующими оригинальный движок Doom; содержит такие данные, как спрайты (графика), информация об уровне и элементы; используется для хранения оригинального игрового контента, а также модификаций игры.
Из-за популярности Doom и возможности настройки файлов WAD формат WAD стал одним из наиболее широко известных и широко используемых форматов файлов игровых данных. Сообщество геймеров разработало тысячи модов, используя файлы WAD для Doom и других игр. Однако, поскольку Doom и Doom II были выпущены в 1990-х годах, этот формат используется не так часто, как когда-то.
Оригинальный формат WAD, называемый WAD1, превратился в последующие форматы, которые включают WAD2. и WAD3. Эти версии были уменьшены в объеме, чтобы включать только игровые текстуры, и использовались для Quake и Half-Life. Файлы текстур Quake WAD можно редактировать с помощью таких программ, как Wally.
Windows
id Software Doom |
id Software Doom 2 |
Doom Builder |
Slade |
eXtendable WAD Editor |
New WAD Tool |
WadAuthor |
Wally |
Тип файла 2 Файл данных игры Nintendo Wii.
Файл данных, используемый игровой консолью Nintendo Wii; содержит данные, необходимые для установки каналов Wii, системных меню или обновлений прошивки; часто используется для установки подлинных копий игр Virtual Console (VC).
ПРИМЕЧАНИЕ: файлы WAD также используются разработчиками Wii «Homebrew» для установки и игры.
Пишем клон движка Doom: чтение информации карт
Введение
Цель этого проекта — создание клона движка DOOM, использующего ресурсы, выпущенные вместе с Ultimate DOOM (версия со Steam).
Он будет представлен в виде туториала — я не хочу добиваться в коде максимальной производительности, а просто создам работающую версию, и позже начну её улучшать и оптимизировать.
У меня нет опыта создания игр или игровых движков, и мало опыта в написании статей, поэтому можете предлагать свои изменения или даже полностью переписать код.
Вот список ресурсов и ссылок.
Книга Game Engine Black Book: DOOM Фабьена Санглара. Одна из лучших книг по внутреннему устройству DOOM.
Требования
Необязательное
Мысли
Не знаю, смогу и я завершить этот проект, но приложу для этого все силы.
Моей целевой платформой будет Windows, но поскольку я использую SDL, будет просто заставить движок работать под любой другой платформой.
А пока установим Visual Studio!
Проект был переименован из Handmade DOOM в Do It Yourself Doom with SLD (DIY Doom), чтобы его не путали с другими проектами под названием «Handmade». В туториале есть несколько скриншотов, на которых он всё ещё называется Handmade DOOM.
Файлы WAD
Прежде чем приступать к кодингу, давайте поставим перед собой цели и продумаем, чего мы хотим достигнуть.
Для начала давайте проверим, сможем ли мы считывать файлы ресурсов DOOM. Все ресурсы DOOM находятся в файле WAD.
Что такое файл WAD?
«Where is All my Data»? («Где все мои данные»?) Они в WAD! WAD — это архив всех ресурсов DOOM (и игр на основе DOOM), находящийся в одном файле.
Разработчики Doom придумали этот формат, чтобы упростить создание модификаций игры.
Анатомия файла WAD
Файл WAD состоит из трёх основных частей: заголовка (header), «кусков» (lumps), и каталогов (directories).
Формат заголовка
Размер поля | Тип данных | Содержимое |
---|---|---|
0x00-0x03 | 4 символа ASCII | Строка ASCII (со значениями «IWAD» или «PWAD»). |
0x04-0x07 | unsigned int | Номер элемента каталогов. |
0x08-0x0b | unsigned int | Значение смещения на каталог в файле WAD. |
Формат каталогов
Размер поля | Тип данных | Содержимое |
---|---|---|
0x00-0x03 | unsigned int | Значение смещения на начало lump-данных в файле WAD. |
0x04-0x07 | unsigned int | Размер «куска» (lump) в байтах. |
0x08-0x0f | 8 символов ASCII | ASCII, содержащие название «куска». |
Архитектура
Примечание: такая архитектура может быть и неоптимальной, и при необходимости мы будем её изменять.
Приступаем к коду
Давайте добавим два новых класса: WADLoader и WADReader. Начнём с реализации WADLoader.
Реализовать конструктор будет просто: инициализируем указатель данных и храним копию передаваемого пути к файлу WAD.
Теперь давайте приступим к реализации вспомогательной функции загрузки OpenAndLoad : просто попробуем файл открыть как двоичный и в случае неудачи выведем ошибку.
Если всё будет хорошо, и мы сможем находить и открывать файл, то нам понадобится знать размер файла, чтобы выделить память для копирования в неё файла.
Теперь мы знаем, сколько места занимает полный WAD, и выделим нужное количество памяти.
Скопируем содержимое файла в эту память.
Давайте вкратце проверим код и убедимся, что всё работает. Но прежде нам нужно реализовать LoadWAD. Пока LoadWAD будет вызывать «OpenAndLoad»
И давайте добавим в функцию main код, создающий экземпляр класса и пытающийся загрузить WAD
Нужно будет ввести правильный путь к вашему файлу WAD. Давайте запустим!
Ой! Мы получили консольное окно, которое просто открывается на несколько секунд! Особо ничего полезного… работает ли программа? Идея! Давайте взглянем на память, и посмотрим, что в ней! Возможно, там мы найдём что-нибудь особенное! Для начала разместим точку останова, дважды щёлкнув слева от номера строки. Вы должны увидеть нечто подобное:
Я поместил точку останова сразу после чтения всех данных из файла, чтобы посмотреть на массив памяти и увидеть, что в него загружено. Теперь снова запустим код! В автоматическом окне я вижу несколько первых байтов. В первых 4 байтах написано «IWAD»! Отлично, работает! Никогда не думал, что этот день настанет! Так, ладно, нужно успокоиться, впереди ещё много работы!
Считывание заголовка
Общий размер заголовка составляет 12 байт (от 0x00 до 0x0b), эти 12 байт разделены на 3 группы. Первые 4 байта — это тип WAD, обычно «IWAD» или «PWAD». IWAD должен быть официальным WAD, выпущенным ID Software, «PWAD» должен использоваться для модов. Другими словами, это просто способ определить, является ли файл WAD официальным релизом, или выпущен моддерами. Заметьте, что строка не NULL terminated, поэтому внимательнее! Следующие 4 байта являются unsigned int, в котором содержится общее количество каталогов в конце файла. Следующие 4 байта обозначают смещение первого каталога.
Давайте добавим структуру, которая будет хранить информацию. Я добавлю новый файл заголовка и назову его «DataTypes.h». В нём мы будем описывать все нужные нам struct.
Теперь нам нужно реализовать класс WADReader, который будет считывать данные из загруженного массива байтов WAD. Ой! Тут есть хитрость — файлы WAD имеют формат big-endian, то есть нам нужно будет сдвинуть байты, чтобы сделать их little-endian (сегодня в большинстве систем используется little endian). Для этого мы добавим две функции, одну для обработки 2 байт (16 бит), другую — для обработки 4 байт (32 бит); если нам нужно считать только 1 байт, то делать ничего не надо.
Теперь мы готовы к считыванию заголовка: считаем первые четыре байта как char, а затем добавим к ним NULL, чтобы упростить себе работу. В случае с количеством каталогов и их смещением можно просто использовать вспомогательные функции для преобразования их в правильный формат.
Давайте соединим всё вместе, вызовем эти функции и выведем результаты
Запустим программу и посмотрим, всё ли работает!
Отлично! Строку IWAD хорошо заметно, но правильны ли другие два числа? Попробуем считать каталоги при помощи этих смещений и посмотрим, получится ли!
Нам нужно добавить новую struct для обработки каталога, соответствующего представленным выше параметрам.
Теперь давайте дополним функцию ReadDirectories: считаем смещение и выведем их!
В каждой итерации мы умножаем i * 16, чтобы перейти к инкременту смещения следующего каталога.
Запустим код и посмотрим, что получится. Ого! Большой список каталогов.
Судя по названию lump, можно предположить, что нам удалось правильно считать данные, но возможно есть способ получше, чтобы проверить это. Мы взглянем на записи WAD Directory при помощи Slade3.
Похоже, что название и размер lump соответствуют данным, полученным при помощи нашего кода. Сегодня мы проделали отличную работу!
Другие примечания
DOOMReboot: полностью несогласен. 15 МБ ОЗУ в наши дни — совершенная мелочь, и считывание из памяти будет значительно быстрее, чем объёмные fseek, которые придётся использовать после загрузки всего, необходимого для уровня. Это увеличит время загрузки не меньше, чем на одну-две секунды (у меня всё время загрузки занимает меньше 20 мс). fseek задействуют ОС. У которой файл скорее всего находится в кэше ОЗУ, но может быть и нет. Но даже если он там, это большая трата ресурсов и эти операции запутают множество считываний WAD с точки зрения кэша ЦП. Самое лучшее, что можно создать гибридные методы загрузки и хранить данные WAD для уровня, которые помещаются в кэш L3 современных процессоров, где экономия окажется потрясающей.
Исходный код
Базовые данные карт
Научившись считывать файл WAD, давайте попробуем использовать прочитанные данные. Будет здорово научиться считывать данные миссии (мира/уровня) и применять их. «Куски» данных миссий (Mission Lumps) должны быть чем-то сложным и хитрым. Поэтому нам нужно будет двигаться и нарабатывать знания постепенно. В качестве первого небольшого шага давайте создадим нечто наподобие функции автокарты (Automap): двухмерного плана карты с видом сверху. Для начала посмотрим, что находится внутри Mission Lump.
Анатомия карты
Начнём сначала: описание уровней DOOM очень похоже на 2D-чертёж, на котором стены обозначены линиями. Однако для получения 3D-координат каждая стена берёт высоты пола и потолка (XY — это плоскость, по которой мы движемся горизонтально, а Z — это высота, позволяющая двигаться вверх и вниз, например, поднимаясь на лифте или спрыгнув вниз с платформы. Эти три компоненты координаты используются для рендеринга миссии как 3D-мира. Однако для обеспечения хорошей производительности движок имеет определённые ограничения: на уровнях нет расположенных одна над другой комнат и игрок не может смотреть вверх-вниз. Ещё одна интересная особенность: снаряды игрока, например, ракеты, поднимаются по вертикали, чтобы попасть в цель, расположенную на более высокой платформе.
Эти любопытные особенности стали причиной бесконечных холиваров по поводу того, является ли DOOM 2D- или 3D-движком. Постепенно был достигнут дипломатический компромисс, спасший множество жизней: стороны сошлись на приемлемом для обеих обозначении «2.5D».
Чтобы упростить задачу и вернуться к теме, давайте просто попробуем считать эти 2D-данные и посмотреть, можно ли их как-то использовать. Позже мы попробуем отрендерить их в 3D, а пока нам нужно разобраться в том, как работают совместно отдельные части движка.
Проведя исследования, я выяснил, что каждая миссия составлена из набора «кусков». Эти «куски» (Lumps) всегда представлены в файле WAD игры DOOM в одинаковом порядке.
Показанная выше демо-карта имеет следующие характеристики:
Формат вершин
Как и можно ожидать, данные вершин очень просты — всего лишь x и y (точка) каких-то координат.
Размер поля | Тип данных | Содержимое |
---|---|---|
0x00-0x01 | Signed short | Позиция X |
0x02-0x03 | Signed short | Позиция Y |
Формат Linedef
В Linedef содержится больше информации, он описывает линию, соединяющую две вершины, и свойства этой линии (которая позже станет стеной).
Размер поля | Тип данных | Содержимое |
---|---|---|
0x00-0x01 | Unsigned short | Начальная вершина |
0x02-0x03 | Unsigned short | Конечная вершина |
0x04-0x05 | Unsigned short | Флаги (подробнее см. ниже) |
0x06-0x07 | Unsigned short | Тип линии/действие |
0x08-0x09 | Unsigned short | Метка сектора |
0x10-0x11 | Unsigned short | Передний sidedef (0xFFFF — стороны нет) |
0x12-0x13 | Unsigned short | Задний sidedef (0xFFFF — стороны нет) |
Значения флагов Linedef
Не все линии (стены) отрисовываются. Некоторые из них имеют особое поведение.
Бит | Описание |
---|---|
0 | Преграждает путь игрокам и монстрам |
1 | Преграждает путь монстрам |
2 | Двусторонняя |
3 | Верхняя текстура отключена (об этом мы поговорим позже) |
4 | Нижняя текстура отключена (об этом мы поговорим позже) |
5 | Секрет (на автокарте показывается как односторонняя стена) |
6 | Препятствует звуку |
7 | Никогда не показывается на автокарте |
8 | Всегда показывается на автокарте |
Архитектура
Для начала давайте создадим класс и назовём его map. В нём мы будем хранить все данные, связанные с картой.
Пока я планирую только хранить как вектор вершины и linedefs, чтобы применить их позже.
Также давайте дополним WADLoader и WADReader, чтобы мы могли считывать эти два новых элемента информации.
Кодинг
Код будет похож на на код чтения WAD, мы только добавим ещё несколько структур, а затем заполним их данными из WAD. Начнём с добавления нового класса и передачи названия карты.
Теперь добавим структуры, чтобы считывать эти новые поля. Поскольку мы уже несколько раз это делали, просто добавим их все сразу.
Далее нам понадобится функция для считывания их из WADReader, она будет близка к тому, что мы делали ранее.
Думаю, для вас здесь нет ничего нового. А теперь нам нужно вызвать эти функции из класса WADLoader. Позвольте изложить факты: здесь важна последовательность lumps, мы найдём название карты в lump каталога, за которым в заданном порядке будут следовать все lumps, связанные с картами. Чтобы упростить себе задачу и не отслеживать индексы lumps по отдельности, мы добавим перечисление, позволяющее избавиться от магических чисел.
Также я добавлю функцию для поиска карты по её названию в списке каталогов. Позже мы скорее всего повысим производительность этого шага, использовав структуру данных карт, потому что здесь присутствует значительное количество записей, и нам придётся довольно часто проходить по ним, особенно в начале загрузки таких ресурсов, как текстуры, спрайты, звуки и т.д.
Ого, мы почти закончили! Теперь давайте просто считаем VERTEXES! Повторюсь, мы уже делали такое раньше, теперь вы должны разбираться в этом.
Хм, похоже, что мы постоянно копипастим один и тот же код; возможно, в дальнейшем его придётся оптимизировать, но пока вы реализуете ReadMapLinedef самостоятельно (или посмотрите на исходный код по ссылке).
Финальные штрихи — нам нужно вызвать эту функцию и передать ей объект карты.
Теперь давайте изменим функцию main и посмотрим, всё ли будет работать. Я хочу загрузить карту «E1M1», которую передам в объект карты.
Теперь давайте всё это запустим. Ого, куча интересных чисел, но верны ли они? Давайте проверим!
Посмотрим, сможет ли slade помочь нам и в этом.
Мы можем найти карту в меню slade и посмотреть на подробности lumps. Давайте сравним числа.
А как насчёт Linedef?
Также я добавил это перечисление, которое мы попробуем использовать при отрисовке карты.
Другие примечания
В процессе написания кода я ошибочно считывал больше байтов, чем нужно, и получал неверные значения. Для отладки я начал смотреть на смещение WAD в памяти, чтобы понять, нахожусь ли я на нужном смещении. Это можно сделать при помощи окна памяти Visual Studio, которые оказываются очень полезным инструментом при отслеживании байтов или памяти (также в этом окне можно устанавливать точки останова).
Если вы не видите окно памяти, то перейдите в Debug > Memory > Memory.
Теперь мы видим значения в памяти в шестнадцатеричном виде. Эти значения можно сравнить с hex-отображением в slade, нажав правой клавишей на любой lump и отобразив его как hex.
Сравниваем их с адресом загруженного в память WAD.
И последнее на сегодня: мы увидели все эти значения вершин, но есть ли простой способ визуализировать их без написания кода? Я не хочу тратить время на это, просто чтобы выяснить, что мы движемся не в том направлении.
Наверняка уже кто-то создал графопостроитель. Я загуглил «draw points on a graph» и первым результатом оказался веб-сайт Plot Points — Desmos. На нём можно вставить числа из буфера обмена, и он нарисует их. Они должны быть в формате «(x, y)». Чтобы получить его, достаточно немного изменить функцию вывода на экран.
Ого! Это уже похоже на E1M1! Мы чего-то добились!
Если вам лениво это делать, то вот ссылка на заполненный точками график: Plot Vertex.
Но давайте сделаем ещё один шаг: немного потрудившись, мы можем соединить эти точки на основании linedefs.