Geliştirici Notları: Vampir Köylü
Giriş ve Mimari Yaklaşım
Paira Vampir Köylü, tarayıcı üzerinden sıfır kurulum ile çok oyunculu olarak oynanabilen, 3D görselleştirme katmanına sahip bir sosyal çıkarım (social deduction) oyunudur. Oyun, herhangi bir merkezi veritabanı (database) veya oyun durumunu yöneten kalıcı bir sunucu barındırmaz. Bunun yerine tamamen tarayıcı tabanlı WebRTC (Peer-to-Peer) teknolojisini kullanarak istemciler arası doğrudan veri transferi gerçekleştirir.
State (durum) yönetimi ve yetkilendirme, sunucusuz (serverless) mimarinin doğurduğu güvenlik ve senkronizasyon gereksinimlerini karşılamak amacıyla özel bir Host-Client koordinasyonu üzerinden yürütülür. Bu altyapı, arkadaş grupları ve Kick yayını izleyicileri için yüksek performanslı ve akıcı bir oyun deneyimi sunar.
P2P Ağ Topolojisi (Host-Client Mimarisi)
Oyun, katılımcılar arasında veri iletimini sağlamak üzere WebRTC protokolü üzerinde çalışan bir Host-Client ağ topolojisini benimser:
- Host (Oyun Kurucusu): Odayı ilk oluşturan oyuncu, oyunun mantıksal motorunu (Game Engine) kendi yerel tarayıcısında barındıran merkezi otorite (Host) haline gelir. Rol dağıtımı, gece/gündüz evrelerinin sürelerinin takibi, oyların sayılması ve elenme senaryolarının karara bağlanması Host'un sorumluluğundadır.
- Clients (Katılımcı Oyuncular): Odaya bağlanan diğer tüm eşler (peers), doğrudan Host ile birer
RTCDataChannelbağlantısı kurarlar. Katılımcıların kendi aralarında doğrudan veri kanalları açması gerekmez; tüm bilgi dağıtımı Host üzerinden "Star" (yıldız) topolojisine benzer şekilde gerçekleştirilir. - Sinyalleşme (Signaling): Oyuncuların birbirlerini internet üzerinde bulup IP ve port bilgilerini (ICE Adayları) değiş tokuş edebilmesi için bir WebRTC aracı sinyalleşme sunucusu (PeerJS altyapısı) kullanılır. Bağlantı kurulduktan sonra bu aracı sunucu veri aktarımında rol oynamaz.
Gerçek Zamanlı Veri Senkronizasyonu (Real-Time Data Sync)
Oyun içindeki rol dağıtımı, evre geçişleri, chat mesajları ve gizli oylamalar gibi tüm dinamik aksiyonlar, RTCDataChannel aracılığıyla gönderilen yapılandırılmış JSON paketleri ile senkronize edilir. Başlıca paket türleri şunlardır:
GAME_STATE: Host, oyun durumunu (hayatta olan oyuncular, aktif evre, oylama durumları) güncellediğinde bu paketi tüm istemcilere broadcast (yayın) eder.ACTION: Oyuncuların yaptığı eylemlerdir. Gündüz yapılan oylama seçimi ya da gece Doktor'un iyileştirme hedefi, Vampir'in saldırı seçimi veya Gözcü'nün rol bakma isteği bu paketle doğrudan Host'a gönderilir.PRIVATE_LOG: Sadece belirli bir oyuncuya gösterilmesi gereken özel bilgileri (örneğin Gözcü'nün sorguladığı kişinin rol sonucu veya Doktor'un kurtarma başarısı) iletmek için Host tarafından ilgili client'a özel olarak gönderilir.PLAY_ANIMATIONS&HANG_ANIMATION: Üç boyutlu sahnede (Three.js/Scene) karakterlerin hareketlerini, saldırılarını ve infaz sahnelerini (yürüme, öldürme vb.) senkronize şekilde oynatmak amacıyla tetikleyici animasyon dizilerini iletir.CHAT_MESSAGE&UPDATE_WILL: Sohbet mesajlarını ve elenen oyuncuların arkalarında bırakacakları son vasiyetnameleri (will) senkronize eder. Vampirler gece evresinde kendi aralarında özel chat paketleri ile iletişim kurarlar.
Oda Mantığı ve Oturum Yönetimi
Her oyun lobisi, PeerJS ağı üzerinden üretilen 6 karakterli benzersiz bir Oda Kodu ile temsil edilir. Oturum süreçleri şu adımları içerir:
- Oda Keşfi ve El Sıkışma: İstemciler oda kodunu girerek PeerJS üzerinden Host'a bağlantı teklifi (SDP Offer) gönderirler. ICE Candidate alışverişi tamamlandıktan sonra veri kanalı üzerinden veri transferi başlar.
- Güvenli Rol Dağıtımı (Roles Management): Oyun başladığında roller (Vampir, Köylü, Doktor, Gözcü, Zehirci, vb.) Host üzerinde karıştırılır ve her oyuncuya sadece kendi rolünü içeren hedeflenmiş veri paketi gönderilir. Böylece hiçbir oyuncu tarayıcısının hafızasını (memory) inceleyerek diğer oyuncuların rollerini önceden göremez.
- Bağlantı Kayıplarının Yönetimi: Bir oyuncu oyundan düştüğünde,
handlePlayerLeavetetiklenir. Host, oyun akışının tıkanmasını önlemek amacıyla ilgili oyuncuyu pasif/ölü durumuna çekebilir veya aktif bir eylem yapması bekleniyorsa tur süresini otomatik olarak sonlandırarak oyunu bir sonraki aşamaya taşır.
E-E-A-T ve Güvenlik Standartları
Paira Vampir Köylü, kullanıcı gizliliği ve veri güvenliğini ön planda tutan bir tasarım felsefesine sahiptir:
- Uçtan Uca Şifreleme (E2EE): WebRTC veri kanalları, endüstri standardı olan DTLS (Datagram Transport Layer Security) ile şifrelenir. Oyun içi yazışmalar ve ham oyun verileri aracı hiçbir sunucu tarafından okunamaz veya kaydedilemez.
- Host Yetki Kontrolü (Serverless Authority): İstemcilerin hile yapmasını veya geçersiz eylemler göndermesini engellemek için tüm aksiyon paketleri Host tarafında doğrulama süzgecinden geçirilir. Örneğin, bir köylü vampir eylemi gönderirse veya ölü bir oyuncu oy vermeye çalışırsa Host bu eylemi geçersiz sayarak reddeder.
Bu teknik dokümantasyon, P2P tabanlı web oyunu mimarileri ile ilgilenen geliştiriciler ve Paira topluluğu üyeleri için Ahmet Efe Yaşar tarafından hazırlanmıştır.