1 poin oleh GN⁺ 2024-02-26 | 1 komentar | Bagikan ke WhatsApp

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:
    1. Coprocessor copper berjalan paralel dengan CPU dan dapat diperintahkan untuk mengubah register hardware pada baris tertentu di layar.
    2. Memori layar dapat diubah ke lokasi mana pun di chip RAM dengan mengatur screen pointer di register hardware.

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

 
GN⁺ 2024-02-26
Komentar Hacker News
  • Ringkasan komentar tentang "Racing the beam":

    • Seorang pengguna mengingat bahwa mereka sangat memahami teknik 'beam racing' dan pernah menghitung waktu CPU per frame dengan menggunakan teknik ini.
    • Mereka menyebutkan bahwa mereka menggunakan alamat $dff180 untuk mengatur warna di tepi layar, dan mempelajari teknik ini dari mulut ke mulut, bukan dari internet.
    • Mereka bertanya-tanya apakah saat ini masih ada orang yang berusaha memaksimalkan chipset ini, serta mempertanyakan seperti apa profil orang-orang yang mengembangkan game untuk komputer Amiga.
    • Mereka mengungkapkan terima kasih karena telah berbagi ketertarikan terhadap Amiga.
  • Ringkasan komentar tentang konfigurasi memori Amiga 500:

    • Seorang pengguna menunjukkan bahwa Amiga 500 secara bawaan memiliki 512kB chip RAM, dan banyak pengguna menambahkan ekspansi fast RAM sebesar 512kB.
    • Mereka menjelaskan bahwa RAM tambahan ini tidak bisa diakses langsung oleh perangkat keras grafis, dan lebih lambat dibanding fast RAM yang sesungguhnya.
  • Ringkasan komentar tentang potensi game konsol bergaya Jepang di Amiga:

    • Seorang pengguna penasaran seperti apa tampilan game konsol bergaya Jepang di Amiga, dan mempertanyakan apakah Amiga memang kurang bertenaga atau mereka hanya tidak menyukai desain sebagian besar gamenya.
    • Mereka menyebut port game Bonk buatan Factor 5 sebagai contoh, sambil memuji mereka sebagai pengembang yang seperti penyihir.
  • Ringkasan komentar tentang daya tarik menulis kode dalam keterbatasan:

    • Seorang pengguna menyatakan bahwa menulis kode dalam berbagai keterbatasan terasa sangat menarik.
  • Ringkasan komentar tentang pengalaman pribadi dengan Amiga dan berbagi cara pembuatan animasi:

    • Seorang pengguna mengatakan bahwa Amiga yang mereka gunakan terasa berbeda dari pengalaman orang lain, dan menyebut bahwa mereka tidak terlalu bernostalgia jika dibandingkan dengan Nintendo NES.
    • Meski begitu, mereka mengakui bahwa sangat keren bisa melihat bagaimana animasi-animasi seperti ini dibuat.