Home » Скомпилируйте, как будто это 1992 год.

Скомпилируйте, как будто это 1992 год.

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, чтобы создать каталог.

Read more:  Тело нашли в реке после того, как грязный автомобиль перевернулся во время вечеринки

Установка!

Компиляция

Запустите 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 файла.

Read more:  Wayfinder — закрытое бета-тестирование PS5 и ПК начинается 28 февраля, запуск раннего доступа — в мае.

  • 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
  


Наконец-то ЭТО РАБОТАЕТ!

Read more:  Следующий Бастер Поузи? Ангелы возлагают большие надежды на Логана О’Хоппа



Рекомендуемая литература






@

2024-02-26 11:18:13


1708950595
#Скомпилируйте #как #будто #это #год

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.