3 poin oleh GN⁺ 2024-02-27 | 1 komentar | Bagikan ke WhatsApp
  • 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 jalur SIGNON.OBJ dan GAMEPAL.OBJ juga 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/c
    • system/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.zip
    • system/c: wolfsrc.zip, vgafiles.zip

Memasang compiler dan source di DosBox

  • Jalankan DosBox lalu mount folder lokal sebagai drive DOS
    • Mount ~/system/c sebagai C:
    • Mount ~/system/a sebagai A:
  • Jalankan install dari A:\BCPP31 untuk 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.PRJ dan atur direktori seperti berikut
    • Include Directories: C:\BORLANDC\INCLUDE
    • Library Directories: C:\BORLANDC\LIB
    • Output Directories: OBJ
    • Source Directories: C:\WOLFSRC
  • Pada build pertama akan muncul error Cannot find executable TASM
    • Keluar dari Borland C++ lalu set PATH=C:\BORLANDC\BIN dan jalankan kembali
  • Pada build berikutnya, di tahap link akan muncul error Unable to find OBJ file
    • SIGNON.OBJ dan GAMEPAL.OBJ di proyek salah diarahkan ke path C:\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 All dan 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 .EXE hasil 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.WL1 dan 2 file GRE.H, GRE.EQU
  • VGAHEAD.WL1 adalah indeks yang menunjuk posisi data di dalam VGAGRAPH.WL1
    • VGAGRAPH.WL1 menyimpan data yang dikompresi dengan Huffman
    • VGADICT.WL1 berisi kamus Huffman untuk dekompresi
  • GRE.H dan GRE.EQU adalah file yang memungkinkan engine mengakses aset berdasarkan nama
    • Misalnya, nama logis seperti L_GUYPIC dihubungkan ke nilai indeks sebenarnya
    • Engine dibuild dengan indeks gambar yang di-hardcode
  • 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 .H dan .EQU yang disertakan dalam source code
  • Jika memakai aset shareware, ubah ekstensi file dari .WL6 menjadi .WL1 saat menyalin
    • VGADICT.WL6VGADICT.WL1
    • VGAGRAPH.WL6VGAGRAPH.WL1
    • VGAHEAD.WL6VGAHEAD.WL1
  • Setelah penggantian, jalankan kembali WOLF3D.EXE dan 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=false menjadi aspect=true pada [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

 
GN⁺ 2024-02-27
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

    • Terima kasih atas rekomendasinya. Saya baru saja mengunduh PDF 431 halaman tentang game engine, bahkan ada kata pengantar dari John Carmack
    • Maksudnya buku ini? https://fabiensanglard.net/Game_Engine_Black_Book/index.php
      Sepertinya belum terbit, benar begitu?
    • Sangat setuju. Saya bahkan tidak tahu buku seperti ini ada, tetapi buku Wolfenstein 3D dan Doom sama-sama sangat menarik untuk dibaca. Sayang sekali ia tidak akan menulis buku Quake/i586
    • Sekuelnya, buku Doom, juga enak sekali dibaca
  • 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

    • Itu sepertinya lebih berlaku ketika manajemen paket Linux berantakan. Di ranah embedded komersial/Windows yang pernah saya lihat, dependensi biasanya di-vendor ke folder thirdparty/, dan toolchain yang dipakai juga dikunci, sehingga setup-nya selalu bisa direproduksi
    • Sekarang, sebagian besar yang diperlukan hanyalah memasang versi Unity atau Unreal yang tepat. Untuk era sebelum Unity, itu memang benar
    • Saya tidak tahu source code Uplink tersedia untuk umum. Game yang keren
  • Saya 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 xor pada bentuk yang sedikit berbeda juga sudah bisa membuat animasi
    Bersama 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 sekarang

    • Kalau mencari lingkungan agar anak-anak bisa memprogram bentuk sederhana, saya rasa yang seperti itu masih ada. Bedanya, “alat untuk profesional” dan “alat untuk anak-anak/pemula” sekarang jauh lebih terpisah, sedangkan Turbo C++ atau Turbo Pascal pada masa saya cukup dekat dengan keduanya
    • Saya agak iri pada orang yang saat kecil bisa mengakses Borland Turbo C++ dan materi belajarnya. Saya hanya bisa membaca ulasan di majalah komputer lokal, dan sekalipun mendapatkan salinannya, tanpa bahan bacaan saya tidak akan tahu harus melakukan apa. Dengan kemampuan bahasa Inggris saya waktu itu, entah seberapa banyak yang bisa saya pahami meski ada materinya
    • Grafis 2D modern bukan lagi soal menaruh piksel ke framebuffer; tekstur atau surface adalah elemen dasar sistem, dan komposisi ditangani sebagai tahap terpisah. Karena itu membuat “sprite sederhana” justru menjadi lebih mudah, dan surface yang sudah dikomposisi bisa dianggap sebagai bentuk yang lebih umum dari hardware sprite
    • Teringat conio.h zaman dulu yang indah dan BGI graphics.h dari Borland. Sekarang SDL kurang lebih mengisi peran itu, tetapi tidak sesederhana dulu
    • Borland Turbo C++ masih menjadi IDE favorit saya, jauh di peringkat pertama
  • Setelah 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

    • Romero baru-baru ini menerbitkan memoar Doom Guy; saya penasaran apakah ada yang sudah membacanya. Ingin tahu apakah bukunya bagus
  • Saya sangat merindukan UI berbasis teks di DOS. Teringat PS/2 andalan yang terus saya pakai sampai sekitar 1997

    • Di terminal, setidaknya masih bisa memakai Midnight Commander
  • 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

    • Pada 1992 saya punya hard disk 5,25 inci double-height sebesar 8,9MB, dan juga dua floppy drive 5,25 inci 360KB. Saya iri pada Mac teman saya yang punya drive disk 720KB dan hard disk 30MB, tetapi sistem itu mungkin sekitar 6 kali lebih mahal daripada PC saya
    • Ini 1992, bukan 1982
  • 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

    • Juga disertai manual cetak berisi tutorial C++. Dulu saya belajar C++ dari situ
    • OWL juga cukup bagus
    • Zortech jauh lebih baik
  • IDE MS-DOS dari Borland adalah kenangan manis

    • Kalau punya nostalgia seperti ini, Free Pascal layak dicoba. Itu klon Pascal/Delphi open source, dan juga menyertakan klon editor Turbo Pascal DOS berwarna biru, jadi bisa mendapatkan nuansa yang diinginkan
      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
    • RHIDE terakhir diperbarui 23 tahun lalu, tetapi source code-nya sepertinya masih ada. Masalah sebenarnya saat mengimplementasikan GUI mode terminal seperti ini adalah terminal Unix/Linux terikat pada standar terminal yang tidak menyediakan semua kemampuan program mode teks MS-DOS
      Khususnya, tidak bisa mengenali input tombol Alt saja, kombinasi Alt+huruf, serta Ctrl+Shift+tombol panah kiri/kanan
    • Saya masih menyimpan kotak berisi manual Turbo C di ruang rak buku lama
  • 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.zip muncul error End-of-central-directory signature not found, dan dikatakan mungkin itu bukan file zip atau merupakan bagian dari arsip yang terbagi ke beberapa disk