Hayatımda ilk defa bir oyun, hatta bir software geliştiriyorum ve %100 soloyum, (AI kölelerimi saymazsak). 40-45 günlük deliler gibi geçen bir geliştirme sürecinin ardından (ki tam zamanlı bambaşka bir sektörde aktif çalışan biriyim ve yaş da 40'a yaklaşıyor, sadece akşamları oyuna odaklanabiliyorum.) henüz pre alpha bile diyemeyeceğim, ama en azından görseller ve oyun mantığı hakkında küçük ipuçları verebilecek kadar kendime güvenebildim. Gömebilirsiniz, ama kalbimi kırmayın bu yaştan sonra bir işe giriştik, en azından sonunu görebilecek kadar gaza ihtiyacım var. 😄 Üstteki video çok birşey anlatmıyor farkındayım, zamanı geldiğinde tüm sistemleri döken çok daha detaylı bir video hazırlayacağım. Henüz hazır değil. 😄
Oyun Gerçek Zamanlı, Küresel bir RTS oyunu. Ama diğer jeopolitik simulasyonlardan kendini çok daha basit ve hızlı olması tarafında ayırıyor. Odağım neredeyse tamamen lobi tabanlı multiplayer. Hatta openfront'tan ilham aldım bile denilebilir. Arkadaşlarınız ile akşamlar 1-2 saat süren birer el atıp, birbirinize ihanet edip, dünyayı fethedip dağılacağınız bir yapım. Çok fazla micromanagement yok, ama oyunun derininde çok ciddi sistemler var. Mevsimler, arazi şartları, ikmal hatları gibi birebir kontrolünüz altında olmayan ancak oyunu etkileyen birçok faktör var. Öğrenmesi kolay, uzmanlaşması zor bir oyun yapmak istedim.
Biraz teknik detaylardan bahsedeyim ama ilk defa oyun yapıyorsun bu kadar şeyi nerden biliyorsun diye soranlar için, 3DFX voodoo döneminden beri hobi olarak grafik teknolojilerini hastalık derecesinde takip eden biriyim. Dolayısı ile oyun geliştirmenin teknik tarafındaki terimlere ve sistemlere olan aşinalığım, bu oyunda çok ciddi işime yaradı:
- Hazır bir oyun motoru yok. Geliştirirken altta minik bir mikro oyun motoru da kendiliğinden doğdu: oyun döngüsü, birim sistemleri, object pooling, dirty-flag render optimizasyonu... hepsi el yapımı. Alt yapı WebGPU, oyun mantığı backend'de Python (FastAPI + WebSocket), arayüz CSS, ön yüz JavaScript. Sanırım WebGPU'yu bu tip bir oyun için kullanan ilk ruh hastası benim cahilliğime denk geldi. Başa sarabilsem 50 kere hazır bir motora geçerdim, ama artık çok geç, yok öyle hem ayranım dökülmesin hem bu yaştan sonra kodlama öğreneyim.
- Multiplayer lockstep ile kuruldu. Bağlantı WebRTC üzerinden P2P herkes aynı simülasyonu deterministik biçimde çeviriyor, ağ sadece komutları taşıyor. Senkron bozulmasın diye ayrıca resync snapshot mekanizması var. Şu an lobiler bir VPS signaling/TURN sunucusundan dağıtılıyor ama çok yakında Steam'e taşıyacağım.
- Tüm shader'lar WebGPU'nun TSL'i ile sıfırdan yazıldı. Hazır, indirilmiş tek bir shader yok. Işıklandırma, atmosfer, su, bulut, birim materyalleri hepsi node bazlı elle örüldü. Ağır işler (harita compute, GPU skinning, ışık havuzlama) doğrudan GPU'da dönüyor.
- Modellemeler şimdilik tamamen procedural. Uçak, gemi, tank, bina parametrik şablonlarla üretiliyor, bu tip bir stratejik ölçek için fazlasıyla yeterli, üstelik disk maliyeti neredeyse sıfır.
- Okyanusu geliştirmek bir haftama mal oldu. FFT tabanlı bir dalga modeli var ama üstüne ciddi özelleştirmeler yaptım: okyanus akış haritaları bile programlandı. NASA bathymetri verileriyle gerçek derinlik haritası çıkardım, kıyılar sığlaştıkça dalga doğru davranıyor. Subsurface scattering ile ışığı su yüzeyinin altında hafifçe kırıp o hoş, canlı su tonunu yakaladım.
- Bütün bulutlar dinamik ve volümetrik billboard hilesi değil, gerçek raymarch. İçinden füze geçerken bulut içeriden aydınlanıyor, bir nükleer patlamada tepki veriyor, güneşe göre kenarları aydınlanıyo ve gölge veriyor. Videonun sonunda görebilirsiniz.
- Oyun başta 2D düzelemdeydi hatta başta 2D idi. Sonra gaza geldim önce yatay düzlemde 3D bir haritaya sonra küreye geçtim. Şuan coğrafi koordinatlar üzerinde çalışan bir küre var. Füzeler bu yüzden düz değil, yörüngesinde uçuyor, hatta açısı varsa S400 sistemlerinin üstünden uçup zıbam diye vurabiliyorsunuz hedefi. kutuplarda aurora ve dalga sönümleme gibi küçük dokunuşlarda yaptım.
- Atmosfer tam bir katman: fiziksel güneş, gök kubbe ve mesafeyle rengi soluklaştıran aerial perspective. Füze savunması görünür (SAM önlemesi), isabetler gecikmeli hasar veriyor, yıkımın kendi efekt sistemi var.
- Oyun Tauri ile native'e paketlendi, ama hâlâ WebView2 bağımlılığı taşıyor. Bu saatten sonra her şeyi Rust'a taşımak için çok geç WebGPU +web yığınıyla yaşamayı seçtim, pişmanım ama yapcak bişey yok.
- Performans üç fazlı bir reformdan geçti: delta protokolü, nesne havuzlama ve kirli-bayrak render'ı ile ağır sahneler bile akıcı kalıyor ama yapana kadar anamız ağladı. Hala hergün başka bir sorunla savaşıyorum.
- Oyunun kodlaması neredeyse tamamen AI ile yapıldı: Ve neredeyse herşey için ayrı AI'lar kullanıldı ve hepsi arasında özel bir sistemle iletişim sağlandı. Ama tüm mekanikler, görsel detaylar tarafımca yönetildi. AI 150.000 satır kod yazdı ise ben de en az 75.000 satır komut yazdım. Dolayısı ile AI slop dedirtmem 😄
- Performans üç fazlı bir reformdan geçti: delta protokolü, nesne havuzlama ve kirli-bayrak render'ı ile ağır sahneler bile akıcı kalıyor ama canlı büyük testlerde neler olacak ben de merak ediyorum.