Coding layar animasi "woosh" di Amiga
(dansalva.to)Coding layar animasi "woosh" di Amiga
- Saat dirilis pada 1985, Amiga menghadirkan keajaiban grafis dan suara.
- Menampilkan gambar penuh warna di Amiga itu mudah, tetapi dalam konteks game engine ada banyak tantangan.
Tantangan 1: Kebutuhan RAM
- Amiga 500 pada umumnya memiliki 512KB "chip RAM" dan 512KB RAM ekspansi.
- Hanya chip RAM yang bisa dipakai untuk menampilkan grafis dan suara, sehingga nilainya lebih tinggi.
- Grafis karakter layar penuh (CG) berupa bitmap 320x240 dengan 32 warna, dan dalam keadaan tidak terkompresi memakan 48KB RAM.
- Untuk mendukung kompresi aset, format kompresi ZX0 ditambahkan, dan saat CG dikompresi ukurannya turun menjadi 8KB sehingga bisa diterima.
- Saat aset level dimuat, CG terkompresi dimuat ke RAM ekspansi, lalu didekompresi ke chip RAM tepat sebelum ditampilkan.
- Alih-alih mencari 48KB chip RAM, bagian lain dari memori layar digunakan kembali.
Tantangan 2: Efek "split screen"
- Awalnya dipertimbangkan vertical wipe untuk transisi layar.
- Namun, agar terlihat keren, dibutuhkan gradient wipe yang menyesuaikan palet warna di setiap scanline.
- Efek split screen lebih mudah diimplementasikan dan terlihat lebih keren bagi penonton umum.
- Dua fitur khusus Amiga bekerja sama untuk memungkinkan efek ini:
- Coprocessor
copperberjalan paralel dengan CPU dan dapat diperintahkan untuk mengubah register hardware pada baris tertentu di layar. - Memori layar dapat diubah ke lokasi mana pun di chip RAM dengan mengatur screen pointer di register hardware.
- Coprocessor
Tantangan 3: "motion line"
- Untuk menyelesaikan efek animasi, dibutuhkan garis yang melintas "woosh" di latar belakang.
- Menggunakan sprite untuk menggambar garis adalah pilihan yang baik karena bisa digambar dan dipindahkan secara independen dari memori layar.
- Sprite Amiga sangat terbatas dan rumit.
Warna sprite
- Sprite berbagi bitplane dan palet warna, jadi diusahakan menggunakan warna sesedikit mungkin.
- Sprite hanya memakai 3 warna, menyisakan 28 warna untuk CG dan 1 warna untuk latar belakang.
- Sprite yang berbeda menggunakan warna yang berbeda dari palet.
Menggunakan ulang grafis sprite
- 4 byte pertama dari grafis sprite adalah "control bits" yang memberi tahu posisi dan tinggi sprite.
- Ini menjadi masalah saat ingin menggambar grafis yang sama di beberapa posisi.
- Sebagai gantinya, dibuat 8 sprite palsu yang hanya berisi control bits, lalu pointer sprite diarahkan ke sprite palsu ini.
Sprite tidak digambar saat bitplane dimatikan
- Sebelum CG mencapai bagian atas layar, ada banyak ruang kosong antara bagian atas layar dan awal CG.
- Jika bitplane aktif selama waktu ini, data sampah akan tergambar di layar.
- Jika bitplane dinonaktifkan, sprite juga tidak akan tergambar.
- Solusinya adalah mengaktifkan hanya 1 bitplane dan mengatur screen pointer ke data kosong.
Kesimpulan
- Pada awalnya, ada keraguan apakah CG akan dimasukkan ke dalam game karena kebutuhan RAM.
- Implementasi kompresi data membuktikan bahwa overhead-nya sangat masuk akal.
- Memanfaatkan karakteristik unik hardware Amiga terasa sangat menarik.
GN⁺ berpendapat:
- Artikel ini menunjukkan dengan baik kemampuan pemrosesan grafis komputer Amiga dan teknik optimasi memori selama pengembangan game.
- Artikel ini menjelaskan cara mewujudkan efek yang keren dalam sumber daya terbatas dengan memanfaatkan kompresi data dan fitur khusus hardware.
- Memahami dan memanfaatkan hardware komputer klasik seperti Amiga adalah topik yang sangat menarik bagi pengembang game retro maupun mereka yang tertarik pada sejarah komputer.
1 komentar
Komentar Hacker News
Ringkasan komentar tentang "Racing the beam":
Ringkasan komentar tentang konfigurasi memori Amiga 500:
Ringkasan komentar tentang potensi game konsol bergaya Jepang di Amiga:
Ringkasan komentar tentang daya tarik menulis kode dalam keterbatasan:
Ringkasan komentar tentang pengalaman pribadi dengan Amiga dan berbagi cara pembuatan animasi: