Mari mengompilasi seperti tahun 1992 (2014)
(fabiensanglard.net)- Kode sumber asli Wolfenstein 3D tahun 1992 tidak langsung cocok dengan sistem modern, tetapi dapat dikompilasi lagi dengan merekonstruksi lingkungan DosBox dan Borland C++ 3.1
- Komponen yang dibutuhkan diringkas menjadi kode sumber Wolfenstein 3D, DosBox, Borland C++ 3.1, dan aset shareware untuk menjalankannya
- Dalam proses build, selain pengaturan proyek Borland C++,
PATH, serta jalurSIGNON.OBJdanGAMEPAL.OBJjuga harus diperbaiki secara manual - Alasan grafis rusak saat pertama dijalankan adalah karena indeks grafis yang dikompilasi ke dalam engine tidak selaras dengan posisi di dalam file aset
- Dengan menyalin aset VGA yang dibuat ulang dan menyalakan aspect correction di DosBox, game dapat dijalankan dengan tampilan yang mendekati rasio layar CRT tahun 1992
Merekonstruksi lingkungan build tahun 1992
- Kode sumber asli Wolfenstein 3D tahun 1992 sulit dipakai apa adanya di sistem modern setelah lebih dari 20 tahun berlalu, tetapi masih bisa dikompilasi jika alat dan lingkungan eksekusinya disesuaikan seperti saat itu
- Empat komponen yang dibutuhkan adalah sebagai berikut
- Kode sumber Wolfenstein 3D
- DosBox
- Borland C++ 3.1
- Aset shareware Wolfenstein 3D
Menyiapkan direktori yang akan dipakai seperti drive DOS
- Buat 2 direktori lokal yang akan dipakai seperti drive DOS
system/csystem/a
- Unduh arsip Borland C++ 3.1 ke
system/a - Unduh kode sumber Wolfenstein 3D dan file VGA ke
system/c - Setelah diekstrak, susunan file menjadi seperti berikut
system/a:BCPP31.zipsystem/c:wolfsrc.zip,vgafiles.zip
Memasang compiler dan source di DosBox
- Jalankan DosBox lalu mount folder lokal sebagai drive DOS
- Mount
~/system/csebagaiC: - Mount
~/system/asebagaiA:
- Mount
- Jalankan
installdariA:\BCPP31untuk memasang Borland C++ 3.1- Biarkan pengaturan default dan mulai instalasi
- Peringatan bahwa folder Microsoft Windows tidak dapat ditemukan tidak diperlukan, jadi lanjutkan dengan Enter
- Dari
C:\, jalankan program instalasi source Wolfenstein 3D dan gunakan path default\WOLFSRC
Build proyek Borland C++
- Jalankan Borland C++ 3.1 dengan
C:\BORLANDC\BIN\BC.EXE - Buka proyek
..\..\WOLFSRC\WOLF3D.PRJdan atur direktori seperti berikutInclude Directories: C:\BORLANDC\INCLUDELibrary Directories: C:\BORLANDC\LIBOutput Directories: OBJSource Directories: C:\WOLFSRC
- Pada build pertama akan muncul error
Cannot find executable TASM- Keluar dari Borland C++ lalu set
PATH=C:\BORLANDC\BINdan jalankan kembali
- Keluar dari Borland C++ lalu set
- Pada build berikutnya, di tahap link akan muncul error
Unable to find OBJ fileSIGNON.OBJdanGAMEPAL.OBJdi proyek salah diarahkan ke pathC:\SOURCE\WOLF\- Hapus kedua entri itu dari proyek lalu tambahkan lagi sebagai
WOLFSRC\OBJ\SIGNON.OBJ,WOLFSRC\OBJ\GAMEPAL.OBJ
- Setelah itu jalankan
Compile -> Build Alldan build akan berhasil
Aset runtime dan penyebab grafis rusak
- Untuk menjalankan file executable hasil kompilasi, dibutuhkan aset Wolfenstein 3D versi shareware atau versi penuh
- Setelah memasang shareware, jika
.EXEhasil kompilasi disalin ke folder game lalu dijalankan, tampilan layar akan terlihat aneh - Penyebabnya ada pada pipeline pembuatan file grafis dan cara engine mengakses aset
- Adrian Carmack dan Kevin Cloud membuat file grafis lalu membundelnya dengan alat IGRABed
- Hasilnya terdiri dari 3 file
VGAHEAD.WL1,VGAGRAPH.WL1,VGADICT.WL1dan 2 fileGRE.H,GRE.EQU
VGAHEAD.WL1adalah indeks yang menunjuk posisi data di dalamVGAGRAPH.WL1VGAGRAPH.WL1menyimpan data yang dikompresi dengan HuffmanVGADICT.WL1berisi kamus Huffman untuk dekompresi
GRE.HdanGRE.EQUadalah file yang memungkinkan engine mengakses aset berdasarkan nama- Misalnya, nama logis seperti
L_GUYPICdihubungkan ke nilai indeks sebenarnya - Engine dibuild dengan indeks gambar yang di-hardcode
- Misalnya, nama logis seperti
- Setelah rilis shareware Wolfenstein 3D, aset dan codebase berubah bersama Spears of Destiny, sehingga indeks game yang baru dikompilasi tidak lagi cocok dengan posisi di file aset lama
Mengganti aset VGA dan koreksi rasio layar
- Solusinya adalah menyalin aset VGA yang dibuat ulang ke folder game agar cocok dengan indeks
.Hdan.EQUyang disertakan dalam source code - Jika memakai aset shareware, ubah ekstensi file dari
.WL6menjadi.WL1saat menyalinVGADICT.WL6→VGADICT.WL1VGAGRAPH.WL6→VGAGRAPH.WL1VGAHEAD.WL6→VGAHEAD.WL1
- Setelah penggantian, jalankan kembali
WOLF3D.EXEdan game akan bekerja normal - Tampilan default DosBox berbeda dari layar asli yang dilihat orang pada tahun 1992
- Framebuffer VGA adalah 320x200
- Monitor CRT memiliki rasio 4:3, sehingga output terlihat teregang secara vertikal
- Di pengaturan DosBox, ubah
aspect=falsemenjadiaspect=truepada[render]untuk menerapkan koreksi rasio layar - Setelah koreksi rasio diterapkan, Wolfenstein 3D akan berjalan dengan tampilan yang lebih mendekati cara CRT menampilkannya saat itu
1 komentar
Opini Hacker News
Sangat merekomendasikan buku Wolfenstein 3D yang disebut di akhir tulisan. Isinya teknis, tetapi tidak kaku atau membosankan, dan banyak membahas optimisasi gaya lama seperti 64 fungsi yang di-unroll untuk scaling tekstur dinding, cara menyimpan sprite “menyamping”, menangani kartu grafis yang aneh, serta mengakali mode grafis agar sejak awal terlihat seperti game
Sepertinya belum terbit, benar begitu?
Hal bagus dari sistem retro adalah, begitu alatnya terkumpul, kita bisa membangunnya lagi. Baru-baru ini, sekadar iseng, saya mengompilasi ulang game lama Uplink; yang dibutuhkan hanya Visual Studio 6.0, dan arsip pengembangannya sudah berisi semua dependensi yang diperlukan untuk build
Butuh sekitar satu jam untuk menyesuaikan dependensi, tetapi akhirnya berhasil dan gamenya berjalan baik. Saya juga memperbaiki beberapa cacat kecil dan menambahkan sedikit perbaikan di sana-sini. Membayangkan melakukan ini pada software zaman sekarang benar-benar terasa gila
thirdparty/, dan toolchain yang dipakai juga dikunci, sehingga setup-nya selalu bisa direproduksiSaya belajar pemrograman dengan Borland Turbo C++. Salah satu hal yang membuat saya merindukan masa itu adalah betapa mudahnya melakukan hal-hal yang tampak rumit. Cukup memanggil fungsi geometri, gambar langsung muncul di layar; setelah menggambar bentuk, memanggil fungsi
xorpada bentuk yang sedikit berbeda juga sudah bisa membuat animasiBersama teman-teman, dengan teknik seperti ini kami membuat game mirip Final Fantasy, lengkap dengan sprite buatan tangan, peta per layar, dunia yang berpindah ke peta sebelah saat mencapai tepi, dan sistem masuk pertarungan ketika angka asli 1 muncul pada setiap langkah. Memang merepotkan, tetapi sangat menyenangkan bagi anak SMA, dan yang besar artinya adalah kami cukup memanggil
circle, bukan harus belajar SFML, ActiveX, atau OpenGL sejak awal seperti sekarangconio.hzaman dulu yang indah dan BGIgraphics.hdari Borland. Sekarang SDL kurang lebih mengisi peran itu, tetapi tidak sesederhana duluSetelah melihatnya disebut beberapa kali di sini selama bertahun-tahun, beberapa bulan lalu saya akhirnya membaca Masters of Doom, dan itu buku yang sangat bagus. Game yang mereka buat saat itu memang luar biasa menarik untuk dimainkan, tetapi jika melihat ke belakang, yang lebih menginspirasi adalah apa yang bisa dibuat oleh beberapa developer muda dengan sumber daya yang sedikit
Saya sangat merindukan UI berbasis teks di DOS. Teringat PS/2 andalan yang terus saya pakai sampai sekitar 1997
Diinstal di drive C? Itu kemewahan! Karena tidak punya hard disk, saya terus menukar floppy di antara drive A dan B, dan kompiler terus meminta bagian yang diganti. Tapi kami menikmatinya. Anak-anak zaman sekarang tidak akan percaya meski kita ceritakan panjang lebar
Borland C++ benar-benar luar biasa. IDE dengan kompiler C++, standard library, dan debugger muat dalam sekitar 5MB, lengkap dengan palet warna Borland yang nyaman: teks kuning di atas latar biru
IDE MS-DOS dari Borland adalah kenangan manis
Saya memakainya untuk beberapa hari Advent of Code tahun ini, tetapi nostalgianya cepat hilang. Setelah terbiasa dengan lingkungan modern, keterbatasan IDE dan verbosity Pascal tidak terasa “menyenangkan” untuk dipakai setiap hari. Meski begitu, kenangannya memang manis
Khususnya, tidak bisa mengenali input tombol Alt saja, kombinasi Alt+huruf, serta Ctrl+Shift+tombol panah kiri/kanan
Tulisan terkait: Let’s compile like it’s 1992 (2014) - https://news.ycombinator.com/item?id=13750097 - Februari 2017, 80 komentar
Saya mengalami masalah saat membuka arsip. Dari
wolfsrc.zipmuncul error End-of-central-directory signature not found, dan dikatakan mungkin itu bukan file zip atau merupakan bagian dari arsip yang terbagi ke beberapa diskcurl -O [http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsr...](<http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip>), yang terunduh adalah file HTMLHasil
$ file wolfsrc.zipjugawolfsrc.zip: HTML document text, ASCII text. Sebaliknya,wgetmengunduh file dengan benar dan bisa diekstrak tanpa masalah