Aksiyon Roguelike | Nişancı | Çok Oyunculu | Unreal Engine 5 | C++
Stüdyo
Elyzio
Rolüm
Gameplay Programmer
Yıllar
2023 — 2025
Teknoloji
Unreal Engine 5, C++, Blueprints
Ekip
10–15 kişi
Platform
Steam (Windows)
Resmi Fragman
Proje Özeti
Warden's Will, Elyzio'da Unreal Engine 5 ve C++ ile geliştirilen çok oyunculu bir aksiyon roguelike nişancı oyunu. 2023-2025 yılları arasında projede gameplay programcısı olarak çalıştım ve Gameplay Ability System katmanının tüm temel sistemlerini kurdum: savaşı yönlendiren yetenekler, attribute'lar, silahlar ve augment'ler.
Yaptıklarım
Gameplay Ability System
Gameplay Ability System (GAS), Unreal Engine'in bir karakterin savaşta yapabileceği her şey için sunduğu altyapıdır. Saldırı, dash ya da özel bir hareket olsun, her yetenek ne kadara mal olduğunu, ne kadar sürede yenilendiğini ve hedefe ne yaptığını bilen kendi içinde bağımsız bir mantık parçasıdır. Can, enerji ve kalkan gibi değerler attribute set'lerde tutulur; gameplay effect'ler bu değerleri anlık hasardan zamanla işleyen buff ve durum efektlerine kadar tek ve ortak bir akış üzerinden değiştirir.
Warden's Will'de bu sistem oynanışın kalbi. Hasar, aktif yetenekler, pasif efektler ve diğer tüm oynanış özellikleri bunun üzerine kurulu; bu sayede yeni yetenekler özel durumlara gerek kalmadan sisteme eklenir.
Modüler Karakterler
Oynanabilir tüm karakterler, Epic'in Lyra altyapısı üzerine kurulan ve oyunun ihtiyaçlarına göre özelleştirilen aynı Gameplay Ability System ile çalışır. Her birini farklı kılan, hem hareket hem savaş tarafını kapsayan sahip olduğu yetenek seti: biri uçabiliyor, biri dash atıyor, biri güdümlü füzeler fırlatıyor, bir diğeri ise kılıç dansıyla savaşıyor. Her yetenek bağımsız bir modül olduğu için her karakter, sahip olduğu yeteneklerle tanımlanır. Karakterlerin kendisi bir ekip işiydi; altlarındaki Gameplay Ability System'in tüm temel sistemlerini ise ben kurdum.
Flyer, ulti yeteneği
Otomatik Hedefleme Ability Task'i
Flyer'ın ultisi, kilitlenen tüm hedeflere eşit dağılan bir güdümlü füze yağmuru fırlatır. Bunu yönetmek için hedef bulmayı tek ve yeniden kullanılabilir bir Blueprint node'una dönüştüren özel bir C++ ability task yazdım.
Task her yenilemede menzildeki düşman pawn'ları bir sphere overlap ile toplar ve takım arkadaşlarını Lyra'nın team subsystem'i üzerinden eler. Kalan adaylar arasından, ayarlanabilir bir görüş konisi içinde ekranın merkezine en yakın olana kilitlenir; bir line trace de hedefin siper arkasında olmadığını doğrular.
Her kilit, ekrandaki işaretiyle birlikte saklanır. Hedefleme benzersiz olabilir, böylece her kilit farklı bir düşmana düşer; ya da değiştirilebilir olur ve sınıra ulaşıldığında yeni hedef en eski kilidin yerini alır. İşaretler yalnızca yerel olarak kontrol edilen oyuncu için oluşturulup hedefin skeletal mesh'ine bağlanır; task, bir işaret oluşturulduğunda ya da güncellendiğinde delegate yayınlar, böylece yeteneğin Blueprint'i buna tepki verebilir.
Menzil, görüş açısı, yenileme sıklığı, collision kanalları ve hedef sayısının hepsi node girdisi; bu yüzden task tek bir yeteneğe bağlı değil. Flyer'ın ultisinde maksimum hedef sayısı doğrudan yeteneğin oluşturduğu roket sayısından gelir ve roketler kilitlenen hedefler arasında eşit olarak paylaştırılır.
Flyer'ın ulti yeteneği Blueprint'indeki Auto Targeting node'u
Hover'ın Ultisi
Hover'ın ultisi Ion Cannon, şarj olduktan sonra yolundaki her düşmanı biçen kesintisiz bir enerji ışını ateşler. Diğer tüm ultiler gibi, aynı ortak sistemler üzerinde çalışan sıradan bir gameplay ability'dir.
Hover, ulti yeteneği
Attribute'lar
Warden's Will'deki her değer bir Gameplay Ability System attribute set'inde tutulur ve oyunun tüm attribute katmanını ben kurdum. Lyra'nın health ve combat set'lerinden yola çıkarak değerleri amaca özel set'lere böldüm; her biri client'lara replike edilir ve attribute callback'lerinde sınırlandırılır:
Attribute Set
Attribute'lar
Nasıl çalışır
Health Set
Health, Max Health, Shield, Max Shield, Healing Multiplier, Clamp Health
Gelen hasar ve iyileşme meta attribute'lardır. Hasar önce kalkandan düşer, yalnızca kalan kısım cana ulaşır. Clamp Health boss'ların tek vuruşta ölmesini engeller; iyileşme çarpanı zorluğa göre değişir.
Combat Set
Base Damage, Base Heal, Critical Hit Chance, Critical Hit Damage, Outgoing Damage, Damage Reduction, Cooldown Reduction, Ultimate Charge, Max Ultimate Charge, Explosion Damage & Radius, Hero Landing Damage & Radius, Dodge Strength
Saldıran tarafından hasar execution'ını ve cooldown hesabını besler; hedef tarafında Damage Reduction gelen hasarı azaltır. Ulti şarjı, patlama, hero landing ve dodge değerleri kendi yeteneklerini ölçekler.
Energy Set
Energy, Max Energy, Movement Ability Cost Multiplier, Dodge Ability Cost Multiplier
Hareket ve dodge yetenekleri enerji maliyetlerini ayrı çarpanlar üzerinden öder.
Isı mekaniğini yönetir: her atışın ısı maliyeti, ısı üretim çarpanıyla ölçeklenir.
Movement Set
Max Walk Speed, Max Fly Speed
Değerler her değiştiğinde doğrudan karakterin movement component'ine aktarılır.
Attribute'lar İş Başında
Hasar, iki taraftan da attribute toplayacak şekilde genişlettiğim özel bir gameplay effect execution içinde hesaplanır: saldırandan temel hasar, kritik şansı, kritik hasar ve verilen hasar; hedeften ise hasar azaltma. Menzilli silah yeteneklerinde bunlara mesafe ve fiziksel materyal düşüşü de eklenir. Yalnızca "kritik olabilir" tag'i taşıyan efektler kritik vurabilir ve kritik vuruş, diğer sistemlerin tanıyabilmesi için efekte bir tag ekler.
Maliyetler ve cooldown'lar, attribute'ları çalışma anında okumak için yazdığım özel magnitude calculation'lar (MMC) ile yönetilir. Silah ısı maliyeti ısı üretim çarpanıyla, hareket ve dodge maliyetleri kendi enerji çarpanlarıyla, her yeteneğin cooldown'u ise cooldown azaltma ile ölçeklenir; bu değer bir cooldown'u asla sıfıra indiremez.
Hasar isabet ettiğinde health set, saldırana hasara yol açan yeteneğin tag'lerini taşıyan bir OnHit gameplay event'i gönderir. Augment'lerin dinlediği event budur ve taşıdığı tag'ler proc-chain filtresinin kontrol ettiği tag'lerdir. Augment'ler, silahlar ve karakterler bu değerlerin hepsini gameplay effect'ler üzerinden değiştirir; böylece her bonus aynı hesaplamalardan geçer.
Silah Mekanikleri
Warden's Will'deki silahlar bir ısı mekaniği üzerine kurulu. Birincil atış ısı biriktirir, ikincil atış ise biriken ısıyı harcar.
Bir silah kuşanıldığında karaktere kendine ait yetenek ve gameplay effect setini uygular. Silahın yaptığı her şey Gameplay Ability System'den geçtiği için silahlar modüler kalır ve oyunun ağ (network) gereksinimlerini karşılar.
Longinus: birincil atışı sürekli hasar veren bir lazer ışınıdır; ikincil atışı ise etrafındaki her şeye sürekli hasar veren hareketli bir enerji alanı gönderir. İkisi birbiriyle etkileşir: lazeri alana ateşlemek alanı besleyip büyütür, alan da düşmanları yavaşlatır.
Longinus
Star Forger: birincil atışı, etrafına düzenli aralıklarla hasar dalgası (pulse) yayan bir enerji topu fırlatır; ikincil atışı ise düşmanları, hatta kendi birincil toplarını bile içine çeken küçük bir kara delik gönderir.
Star Forger
Augment Sistemi
Augment'ler Gameplay Ability System üzerine kurulu pasif yeteneklerdir. Her biri on-hit gibi bir gameplay event'i dinler ve şartları sağlandığı anda, oyuncunun bir şey yapmasına gerek kalmadan kendiliğinden devreye girer.
Oyuncular bir run sırasında, bölümlere dağılmış augment sandıklarından yeni augment'ler toplar.
10'dan fazla tetikleyici türü ve 100'e yakın farklı augment ile bu, üzerinde çalıştığım en karmaşık sistemdi.
Augment sandığıRoket augment'i
Proc Chain'leri Kontrol Altına Almak
Uğraştığım en zor problem proc-chain mantığıydı: bir augment'in başka bir augment'i tetiklemesi. Örneğin Roket augment'iyle bir düşmana hasar vermek, hasarla tetiklenen Thunder Strike augment'ini çalıştırabilir. Ancak Thunder Strike'ın kendi hasarı Thunder Strike'ı asla yeniden tetiklememelidir.
Bunu çözmek için uygulanan gameplay effect'lerin içine gameplay tag'lerle yönetilen bir filtreleme katmanı kurdum. Uygulanan her hasar, uygulanacak gameplay effect'e iletilen tanımlı bir gameplay tag taşır. Efekt bu tag'lere göre filtreleme yapar; böylece bir augment asla kendini tetiklemez ve proc chain'ler kontrollü ve verimli kalır.
Yayın ve Ekip
Warden's Will Steam'de yayında ve Windows'ta oynanabiliyor. Oyun 10–15 kişilik bir ekip tarafından iki yılda geliştirildi; yeteneklerin, attribute'ların, silahların ve augment'lerin üzerinde çalıştığı Gameplay Ability System katmanından ben sorumluydum.