1 puan yazan GN⁺ 2024-02-26 | 1 yorum | WhatsApp'ta paylaş

Amiga'da animasyonlu "woosh" ekranını kodlamak

  • Amiga, 1985'te piyasaya çıktığında grafik ve ses alanında adeta bir mucize sunuyordu.
  • Amiga'da renkli görüntüler göstermek kolaydır, ancak oyun motoru bağlamında birçok zorluk vardır.

Zorluk 1: RAM gereksinimleri

  • Tipik bir Amiga 500'de 512KB "chip RAM" ve 512KB genişletme RAM'i bulunur.
  • Yalnızca chip RAM grafik ve sesi göstermek için kullanılabildiğinden daha değerlidir.
  • Tam ekran character graphic (CG), 32 renk kullanan 320x240 bitmap'tir ve sıkıştırılmamış halde 48KB RAM kaplar.
  • Varlık sıkıştırmasını desteklemek için ZX0 sıkıştırma formatı eklendi; CG sıkıştırıldığında 8KB'ye düşerek kabul edilebilir hale geldi.
  • Seviye varlıkları yüklenirken sıkıştırılmış CG genişletme RAM'ine yüklenir ve gösterilmeden hemen önce chip RAM'e açılır.
  • 48KB chip RAM bulmak yerine ekran belleğinin başka bölümleri yeniden kullanılır.

Zorluk 2: "ekran bölünmesi" efekti

  • İlk başta ekran geçişi için dikey bir wipe düşünülüyordu.
  • Ancak bunun iyi görünmesi için her scanline'da renk paletini ayarlayan bir gradyan wipe gerekiyordu.
  • Ekran bölünmesi efekti daha kolay uygulanabilir ve ortalama izleyiciye daha havalı görünür.
  • Amiga'nın iki özel özelliği birlikte çalışarak bu efekti mümkün kılar:
    1. Eş işlemci copper, CPU ile paralel çalışır ve ekrandaki belirli satırlarda donanım register'larını değiştirmesi için komutlandırılabilir.
    2. Ekran belleği, donanım register'larında screen pointer ayarlanarak chip RAM'in herhangi bir yerine yönlendirilebilir.

Zorluk 3: "hareket çizgileri"

  • Animasyon efektini tamamlamak için arka planda "woosh" yapan çizgilere ihtiyaç vardır.
  • Çizgileri çizmek için sprite kullanmak iyi bir seçimdir; çünkü screen memory'den bağımsız olarak çizilip hareket ettirilebilirler.
  • Amiga sprite'ları oldukça kısıtlı ve karmaşıktır.

Sprite renkleri

  • Sprite'lar bitplane'leri ve renk paletini paylaştığından mümkün olduğunca az renk kullanmak istenir.
  • Sprite'lar yalnızca 3 renk kullanır; böylece CG için 28 renk ve arka plan için 1 renk kalır.
  • Farklı sprite'lar palette farklı renkler kullanır.

Sprite grafiklerini yeniden kullanma

  • Sprite grafiğinin ilk 4 baytı, sprite'ın konumunu ve yüksekliğini belirten "kontrol bitleri"dir.
  • Aynı grafiği birden fazla konumda çizmek istediğinizde bu bir sorun haline gelir.
  • Bunun yerine yalnızca kontrol bitlerini içeren 8 sahte sprite oluşturulup sprite pointer'ları bu sahte sprite'lara ayarlanır.

Bitplane'ler kapalıyken sprite'lar çizilmez

  • CG ekranın üst kısmına ulaşmadan önce, ekranın üstü ile CG'nin başladığı yer arasında çok fazla boş alan vardır.
  • Bu süre boyunca bitplane'ler etkinse ekrana çöp veri çizilir.
  • Bitplane'ler devre dışı bırakılırsa sprite'lar da çizilmez.
  • Çözüm, yalnızca 1 bitplane'i etkin bırakıp screen pointer'ı boş veriye ayarlamaktır.

Sonuç

  • Başlangıçta RAM gereksinimleri nedeniyle oyuna CG eklenip eklenmeyeceğinden emin değildi.
  • Veri sıkıştırmasının uygulanması, ek yükün oldukça makul olduğunu kanıtladı.
  • Amiga donanımının benzersiz özelliklerinden yararlanmak özellikle ilgi çekici.

GN⁺ görüşü:

  • Bu yazı, Amiga bilgisayarının grafik işleme yeteneğini ve oyun geliştirme sırasında bellek optimizasyon tekniklerini çok iyi gösteriyor.
  • Veri sıkıştırması ve donanımın özel özellikleri kullanılarak sınırlı kaynaklar içinde etkileyici efektlerin nasıl üretilebildiğini anlatıyor.
  • Amiga gibi klasik bilgisayarların donanımını anlamak ve kullanmak, retro oyun geliştiricileri veya bilgisayar tarihiyle ilgilenenler için oldukça ilgi çekici bir konu.

1 yorum

 
GN⁺ 2024-02-26
Hacker News yorumları
  • "Racing the beam" hakkındaki yorum özeti:

    • Bir kullanıcı, 'beam racing' tekniğini iyi bildiğini ve bu tekniği kullanarak kare başına CPU süresini hesapladığını hatırlıyor.
    • Ekran kenarında renk ayarlamak için $dff180 adresini kullandığını ve bu tekniği internetten değil kulaktan kulağa öğrendiğini belirtiyor.
    • Hâlâ bu yonga setini sonuna kadar kullanmaya çalışan insanlar olup olmadığını merak ediyor ve Amiga bilgisayarlar için oyun geliştiren kişilerin profili hakkında soru işaretleri dile getiriyor.
    • Amiga'ya olan ilgiyi paylaştıkları için teşekkür ediyor.
  • Amiga 500'ün bellek yapılandırması hakkındaki yorum özeti:

    • Bir kullanıcı, Amiga 500'ün varsayılan olarak 512kB chip RAM'e sahip olduğunu ve birçok kullanıcının buna ek 512kB fast RAM genişlettiğini belirtiyor.
    • Bu genişletilmiş RAM'in grafik donanımına doğrudan erişemediğini ve gerçek fast RAM'den daha yavaş olduğunu açıklıyor.
  • Amiga'da Japon tarzı konsol oyunlarının potansiyeli hakkındaki yorum özeti:

    • Bir kullanıcı, Amiga'da Japon tarzı konsol oyunlarının nasıl görüneceğini merak ediyor; Amiga'nın performans açısından yetersiz olup olmadığını yoksa sadece çoğu oyun tasarımını sevmediğini mi sorguluyor.
    • Factor 5'in yaptığı Bonk portunu örnek vererek onların adeta büyücü gibi geliştiriciler olduğunu övüyor.
  • Kısıtlar içinde kod yazmanın çekiciliği hakkındaki yorum özeti:

    • Bir kullanıcı, kısıtlar içinde kod yazmanın çok çekici olduğunu düşündüğünü ifade ediyor.
  • Amiga ile kişisel deneyim ve animasyonların nasıl yapıldığının paylaşılması hakkındaki yorum özeti:

    • Bir kullanıcı, kullandığı Amiga'nın başkalarının deneyimlediğinden farklı hissettirdiğini ve Nintendo NES ile kıyaslayarak çok da nostalji hissetmediğini söylüyor.
    • Buna rağmen, bu tür animasyonların nasıl yapıldığını göstermenin çok havalı olduğunu kabul ediyor.