- Ini adalah proyek homage pribadi yang mengimplementasikan VM, blitter, dan rasterizer dari Another World / Out of This World dalam perangkat keras FPGA tanpa CPU standar
- Desain intinya terdiri dari VM yang dibuat sebagai prosesor kustom nyata, blitter yang menangani penyalinan dan pengisian antar-framebuffer, rasterizer yang menggambar poligon, serta SOC yang menggabungkan pembaruan tampilan
- SPRAM 128KB pada Lattice UP5K cocok untuk 4 framebuffer 4-bit 320x200, dengan tata letak memori di mana setiap blok SPRAM 32KB berkorespondensi dengan satu framebuffer
- Data game tidak disertakan dalam repositori;
BANK01hinggaBANK0DdanMEMLIST.BINharus disalin ke folderGAMEDATAagar paket data dan bitstream dapat digunakan - Cara menjalankannya menargetkan baik simulasi maupun board nyata
- Untuk simulasi, setelah memasang Silice, intro dapat dijalankan dengan
make simul1 - Untuk perangkat keras, didukung icebreaker + VGA PMOD, mch2022 badge, dan ULX3S HDMI
- Bitstream yang sudah dibangun sebelumnya disertakan, tetapi data game tetap diperlukan secara terpisah
- Untuk simulasi, setelah memasang Silice, intro dapat dijalankan dengan
- Eksekusi VM mengambil instruksi dan operand dari memori SPI, dan untuk mengurangi latensi, terlebih dahulu membaca 64 byte ke cache BRAM kecil
- Jalur grafis menggunakan 4 framebuffer, double buffering, pembatasan akses selama periode
vblank, serta arbitrase akses framebuffer antara blitter dan rasterizer - Rasterizer menggambar poligon cembung Another World sebagai span horizontal, dan untuk efek transparansi dapat membaca lalu memodifikasi nilai piksel yang ada atau menyalin piksel dari framebuffer sumber lain
- Rendering teks dan sebagian latar part 6 ditangani dengan menyimpan buffer piksel yang sudah dipra-render ke ROM karena sisa anggaran LUT, lalu menyalinnya melalui jalur
op_drawString - Batasan dan pekerjaan tersisa yang disebutkan mencakup belum adanya suara dan musik, kebutuhan bitstream serta paket data terpisah untuk tiap part, verifikasi gameplay penuh yang belum selesai, penyesuaian timing yang lebih cepat daripada versi asli, serta eksplorasi cara menyambungkan antar-part
- Lisensinya adalah MIT License untuk desain Silice, CC BY-NC-SA 4.0 untuk dokumen, port C++ yang dimodifikasi tetap mengikuti GPL yang sudah ada, dan data game berada dalam cakupan hak cipta
1 komentar
Komentar Hacker News
Itu pertama kalinya saya melihat cutscene animasi penuh seperti itu di Sega, dan benar-benar luar biasa. Tentu saja grafis kemudian menjadi lebih baik, tetapi Another World masih terasa tetap kuat secara artistik sampai sekarang. Gayanya sangat khas, dan saat saya memainkannya lagi sekitar setahun lalu, game itu masih tetap mengesankan
Banyak puzzle-nya terasa seperti trial and error dan game-nya juga sangat pendek, tetapi tetap saja tidak ada yang ingin saya ubah. Jika Anda penggemar Another World, saya juga merekomendasikan Flashback: The Quest for Identity. Suasananya sinematik dengan nuansa yang mirip, dan meskipun awalnya saya kurang suka, dalam 10 tahun terakhir saya justru makin menyukainya
Tapi Another World itu sebuah karya seni. Poster game-nya terlihat seperti lukisan cat minyak dan benar-benar indah [1]
[1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
Reverse engineering dan port JavaScript Infernal Runner untuk Amstrad CPC oleh cyxx. Ini adalah karya dari pembuat Another World, dan keduanya memanfaatkan arsitektur mesin virtual: https://github.com/cyxx/infernal_js
Presentasi The Virtual Machine Architecture of Infernal Runner oleh Norbert Kehrer. Presentasinya berbahasa Jerman dengan slide berbahasa Inggris: https://media.ccc.de/v/vcfb20_-146-en-202010111400-_th...
The Story of Another World on the Amiga | MVG: https://www.youtube.com/watch?v=0iz9PJbs5rE
Port Another World untuk Nintendo 64: https://github.com/jnmartin84/aw64
Port Another World untuk PlayStation 1: https://github.com/fgsfdsfgs/rawpsx
Tersedia compiler yang mengompilasinya ke Verilog, dan hasilnya bisa dimasukkan ke alur desain yang sudah ada
Dari aksi pertama saja kita sudah harus berenang untuk melarikan diri, lalu kabur dari makhluk mirip singa, dan itu adalah salah satu pengalaman game paling brutal sepanjang masa. Main game ini satu menit saja sudah cukup untuk membuatnya terkenang seumur hidup
Untuk standar saat itu, efek kamera dramatis di game ini benar-benar terasa seperti dunia lain, sesuai judulnya
Ilustrasi sampulnya juga luar biasa
konanaka beetzai! motsuubo! /wave
https://www.youtube.com/watch?v=JFaOYYSxSEA
Kalau saya ingat benar, ia juga memperlihatkan sebagian alat pengembangannya, termasuk cara mengedit animasi langsung per baris dalam bytecode mesin virtual dan menjalankannya langkah demi langkah
Saat ini jumlah platform lebih sedikit dibanding masa ledakan pertumbuhan pada 80-an. Bahkan sekarang, sebagian besar “perangkat lunak” bisa dibilang adalah JavaScript yang ditafsirkan oleh web browser. Masalah portabilitas juga sudah ada pada 80-an, dan justru lebih sulit saat itu karena harus membuat interpreter sendiri
Banyak, mungkin bahkan sebagian besar, video game tampaknya ditulis menggunakan mesin virtual sebelum era Doom atau grafis 3D berperforma tinggi. Game konsol kemungkinan besar memakai C atau assembly karena tuntutan performa
Pada masa itu, game “komputer” masih sebelum IBM PC menjadi standar, atau setidaknya sebelum PC menang dan Microsoft mendominasi. Dalam situasi ketika belum jelas apakah yang akan menang itu Amiga, PC-98, IBM PC, Mac, dan lain-lain, membuat mesin virtual adalah pilihan yang masuk akal, dan SCUMM langsung terlintas
Portabilitas memang penting, tetapi pada masa ketika Hukum Moore melaju dengan kecepatan penuh dan umur platform terasa sesingkat lalat sehari, mesin virtual juga memberi efek kompresi. Biner yang dikompilasi penuh bisa memakan terlalu banyak ruang disk atau kaset, serta RAM
Sebaliknya, mesin virtual yang sangat kecil bisa memakai bahasa kustom untuk diinterpretasikan secara langsung, dan sangat menghemat ruang dalam situasi ketika setiap kilobyte harus dihemat. Cukup bayangkan perbedaan ukuran antara
print "Hello world!"dan biner hasil kompilasi dasar. Secepat apa pun text adventure, kalau tidak muat dalam X KB, itu tidak ada gunanyaAda banyak teks dan aset grafis, sementara komputasinya relatif sederhana. Batasan kepengarangan hanya terhubung dengan perangkat keras dari sisi I/O dan kompresi data, dan kode yang dijalankan interpreter biasanya hanyalah “inisialisasi adegan” yang dijalankan sekali serta sedikit timer animasi
Gagasan di sisi sebaliknya lebih terlihat pada game arcade, dan kemudian pada hal-hal seperti Doom dan Quake. Apa yang disimulasikan game jauh lebih terkait erat dengan perangkat keras, dan definisi adegannya menjadi lebih mirip data peta daripada logika skrip, seperti “taruh monster di sini dan item kesehatan di sana”
Tentu saja, dua yang belakangan tetap memakai sebagian operasi primitif grafis native
Dengan memakai bitplane, tidak perlu membaca ulang memori video. Cukup anggap bit paling atas dikhususkan untuk efek transparansi dan semprotkan span apa adanya
Dua kelebihan lainnya adalah bahwa plane-plane itu bisa digerakkan relatif satu sama lain untuk menciptakan efek moire yang keren, dan bahwa untuk kedalaman warna yang serba tanggung dan tidak pas ke byte atau nibble, seperti 8 warna (3 bit per piksel) atau 32 warna (5 bit per piksel), efisiensi memori dan bandwidth bus menjadi baik