10 августа 2014 г.
Я возился с ванильным исходным кодом Wolfenstein 3D 1992 года. Несмотря на то, что ему более 20 лет и он непригоден для современных систем, его все равно можно скомпилировать, если воссоздать окружение. Все что тебе нужно это :
- Исходный код Wolfenstein 3D.
- ДосБокс.
- Компилятор Borland C++ 3.1.
- Условно-бесплатная версия Wolfenstein 3D (за активы).
Настройка файловой системы
Откройте командную строку и создайте две папки, по одной для каждого необходимого диска DOS:
cd ~ mkdir system cd system mkdir c mkdir a cd ~
Скачать
- Загрузите Borland 3.1 на
system/a
. - Загрузите исходный код Wolfenstein 3D на
system/c
- Загрузите файлы VGA в
system/c
(их назначение объяснено внизу этой страницы.
cd system/a curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/BCPP31.zip cd ../c curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/vgafiles.zip
Теперь у нас есть все файлы в файловой системе. Просто чтобы проверить, введите:
cd .. find ~/system
У вас должно быть следующее:
/Users/fabiensanglard/system /Users/fabiensanglard/system/a /Users/fabiensanglard/system/a/BCPP31.zip /Users/fabiensanglard/system/c /Users/fabiensanglard/system/c/vgafiles.zip /Users/fabiensanglard/system/c/wolfsrc.zip
Распаковать все
cd ~/system/a unzip BCPP31.zip cd ~/system/c unzip vgafiles.zip unzip wolfsrc.zip
ДосБокс
Загрузите и начните ДосБокс:
Устанавливать
Смонтируйте файловую систему, по одной папке на каждый диск:
Z:/> mount c ~/system/c Z:/> mount a ~/system/a
Установите компилятор
Теперь пришло время установить Borland C++ 3.1:
Z:> a: A:> cd BCPP31 A:> install
Нажмите Enter, когда выберете исходный диск (это уже должен быть диск A)
Оставьте все настройки по умолчанию и выберите «Начать установку»:
Предупреждения сообщат вам, что папку Microsoft Windows не удалось найти, но она все равно не нужна, просто нажмите Enter.
Установите исходный код Wolfenstein 3D.
У нас есть работающая система и компилятор: пришло время (снова) распаковать исходный код.
A:> c: C:> cd C:> install
Тип «С»
Сохраните путь по умолчанию: WOLFSRC
Y, чтобы создать каталог.
Установка!
Компиляция
Запустите Borland C++ 3.1:
C:> cd C:> cd borlandc C:> cd bin C:> bc.exe
После нажатия ОК используйте мышь или ярлыки Project -> Open Project. ....WOLFSRCWOLF3D.PRJ
:
Выберите «Параметры» -> «Каталоги» и измените значение следующим образом:
Include Directories: C:BORLANDCINCLUDE Library Directories: C:BORLANDCLIB Ouptput Directories: OBJ Source Directories: C:WOLFSRC
Попробуем скомпилировать: Компилировать -> Собрать все.
Получаем ошибку: «Невозможно найти исполняемый файл TASM»
Выходим из Borland C++, нам нужно установить PATH:
C:> CD .. C:> PATH=C:BORLANDCBIN C:> BC.EXE
Попробуйте скомпилировать еще раз (Компилировать -> Собрать все):
Компиляция сработала, но связывание не удалось: «Невозможно найти файл OBJ», поскольку путь к SIGNON.OBJ и GAMEPAL.OBJ в проекте неправильный: они отмечены в C:SOURCEWOLF
:
Удалите их из проекта (Выберите и пункт Проект -> Удалить). Добавьте их снова через ПРОЕКТ -> Добавить элемент…. Добавлять WOLFSRCOBJSIGNON.OBJ
и WOLFSRCOBJGAMEPAL.OBJ
Попробуйте скомпилировать еще раз через (Компилировать -> Собрать все).
ЭТО СРАБОТАЛО ! Но запустится ли оно?
Получение активов
Загрузите условно-бесплатную версию или, что еще лучше: купите полную версию Wolfenstein 3D.
cd ~/system/c curl -O http://fabiensanglard.net/Compile_Like_Its_1992/tools/1wolf14.zip unzip 1wolf14.zip
Вернитесь в DosBox и установите игру на C:WOLF3D
.
C:> c: C:> cd C:> cd 1wolf14 C:1WOLF14> install
После установки игры скопируйте только что скомпилированный .EXE в папку с игрой.
C:> c: C:> cd wolf3d C:WOLF3D> copy WOLF3D.EXE WOLF3D.OLD C:WOLF3D> copy ../WOLRSRC/WOLF.EXE .
Запуск игры
Попробуйте запустить его:
C:> cd wolf3d C:WOLF3D> copy WOLF3D.EXE WOLF3D.OLD C:WOLF3D> copy ../WOLRSRC/OBJ/WOLF3D.EXE . C:WOLF3D> WOLF3D.EXE
Хм, это выглядит странно…..
Эм-м-м…
Что ?
такого я не запомнила….
Хорошо, что-то здесь, должно быть, не так!!
Что случилось ?
Это связано с конвейером производственного доступа и с тем, как он используется движком. Когда Адриан Кармак и Кевин Клауд закончили работу над всеми графическими файлами, они использовали инструмент (IGRABed), чтобы упаковать их вместе. На выходе было 3+2 файла.
- VGAHEAD.WL1
- ВГАГРАФ.WL1
- ВГАДИКТ.WL1
Файл VGAHEAD представляет собой индекс, содержащий указатели на VGAGRAPH, где данные хранятся в сжатом виде Хаффмана. VGADICT содержит словари Хаффмана для распаковки данных.
Два других файла:
Компилируются в движок, как показано на следующем рисунке:
Какие .H
и .EQU
файлы нужны для? Короче говоря, разрешить доступ по имени. Когда IGRABed собирает все файлы, он также создает перечисление с соответствующими индексами:
ГРЕ.Х
enum{ H_WOLFLOGOPIC GETPSYCHEDPIC L_GUYPIC . . } graphicnums
GRE.EQU
H_WOLFLOGOPIC = 0 GETPSYCHEDPIC = 1 L_GUYPIC = 2
Таким образом, когда движок запрашивал конкретный актив, он мог использовать логическое имя (L_GUYPIC) вместо «магического числа» (2).
Это означает, что движок поставляется с жестко закодированными индексами изображений в файлах VGA. Поскольку ресурсы и кодовая база изменились после выпуска условно-бесплатной программы wolf3D (вместе с Spears of Destiny), вновь скомпилированные индексы игры не соответствуют местоположению в исходных файлах ресурсов.
Запуск игры (снова)
К счастью, есть простое решение этой проблемы: кто-то регенерировал ресурсы VGA, чтобы они соответствовали индексам в файлах .H и .EQU, выпущенных вместе с исходным кодом. Просто скопируйте эти файлы (если вы используете условно-бесплатные ресурсы, вам придется изменить расширение файла с .WL6 на .WL1).
C:> copy C:vgafilesVGADICT.WL6 C:WOLF3DVGADICT.WL1 C:> copy C:vgafilesVGAGRAPH.WL6 C:WOLF3DVGAGRAPH.WL1 C:> copy C:vgafilesVGAHEAD.WL6 C:WOLF3DVGAHEAD.WL1
Давай еще раз попробуем:
C:WOLF3D> WOLF3D.EXE
Оно работает !!
Но мы еще не закончили!
Кадровый буфер VGA и соотношение сторон экрана
Это может быть неочевидно для людей, которые никогда не видели оригинальную игру, но изображение DosBox выше — это не то, что люди видели в 1992 году. Кадровый буфер VGA был 320×200, но ЭЛТ-мониторы имели соотношение сторон 4:3. Это означает, что фреймбуфер растягивался вертикально при отправке на монитор. У DosBox есть возможность компенсировать это:
vi ~/Library/Preferences/DOSBox 0.74 Preferences [render] # frameskip: How many frames DOSBox skips before drawing one. # aspect: Do aspect correction, if your output method doesn't support scaling this can slow things down!. # scaler: Scaler used to enlarge/enhance low resolution modes. # If 'forced' is appended, then the scaler will be used even if the result might not be desired. # Possible values: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, ... frameskip=0 aspect=false scaler=normal2x
Измените этот аспект на истинный:
Попробуйте еще раз :
C:WOLF3D> WOLF3D.EXE
Наконец-то ЭТО РАБОТАЕТ!
Рекомендуемая литература
@
2024-02-26 11:18:13
1708950595
#Скомпилируйте #как #будто #это #год