Thornveil

Thornveil Devlog #8: Telefon, Reklamlar ve İlk Kapalı Test

Yedinci yazı dört bölümün bitişiyle kapanmıştı. Bu yazıda tek bir harita kurulmadı. Bunun yerine oyun bir telefona kuruldu, orada bulunan her şey düzeltildi, reklamlar eklendi ve Google Play'e ilk kapalı test sürümü yüklendi.

Thornveil'in ana menüsü bir telefon ekranında

Yedinci yazı dört bölümün bitişiyle kapanmıştı. Bu yazıda tek bir harita kurulmadı. Bunun yerine oyun bir telefona kuruldu, orada bulunan her şey düzeltildi, reklamlar eklendi ve Google Play'e ilk kapalı test sürümü yüklendi.

Bu yazı biraz da hata günlüğü. Bir oyunun masaüstünde kusursuz çalışıp telefonda çalışmaması, ve bunun sebebinin hiç beklenmedik yerlerde olması bu bölümün özeti.


46 · Telefonda

Thornveil'in ana menüsü bir telefon ekranında, yatay: THORNVEIL logosu, DİKEN PEÇESİ alt başlığı, Başla / Ayarlar / Çıkış düğmeleri, arkada yanan köy
Thornveil'in ana menüsü bir telefon ekranında

İlk kurulumda görülen ilk sorun, oyunun ekranı kaplamamasıydı. Telefon 1640x720, oyun ise 1473x648 çiziyordu — ekranın beşte biri siyah bant.

Sebep, tam sayı ölçeklemenin nasıl hesaplandığıydı. Oyun 384x216 piksellik bir tuvale çiziliyor ve motor önce kesirli ölçeği buluyor, sonra aşağı yuvarlıyor. 720 / 216 = 3.33, aşağı yuvarlanınca 3, artan her iki eksende siyah kalıyor.

Çözüm ölçeği değil tuvali değiştirmek oldu: ekranın tam bölebildiği en büyük tam sayı katı bulunup tuval ona göre veriliyor. 1640x720 için kat 3, tuval 546x240. Ölçek tam 3, her sanat pikseli 3x3 ekran pikseli, ekranda artan 2 piksel kalıyor.

Yüksekliği 216'nın katı olmayan bir telefon dünyadan biraz daha fazlasını görüyor, asla daha azını — haritalar hiçbir zaman kırpılmıyor. 1080p telefonlar ve masaüstü penceresi birebir aynı kaldı.

47 · Parmakla oynamak

Ormanda halat köprü geçişi, ekranın altında dokunmatik kontroller: solda iki yön oku, sağda kaçış, kalkan, zıplama ve kılıç diskleri
Ormanda halat köprü geçişi

Telefonda oynarken masaüstünde hiç fark edilmeyen üç şey çıktı, üçü de düzeltildi — ve üçü de yalnızca gerçek bir telefonda devreye giriyor:

  • "!" işareti iki kat büyük. 20 piksellik bir düşmanın üstündeki işaret kol mesafesinden okunmuyordu. Tam sayı kat kullanıldı, yani pikseller kare kaldı.
  • Darbe sonrası yanıp sönme 0.9 yerine 1.15 saniye. Parmağın diski yeniden bulması, elin zaten tuşların üstünde olmasından uzun sürüyor.
  • Titreşim. Darbe yenince, parry tutunca ve kılıç isabet edince kısa titreşim. Ayarlardan kapatılabiliyor.

Burada bir hata yapıldı ve kayda değer: bu üçü ilk denemede "dokunmatik kontroller açık mı" sorusuna bağlanmıştı. Ama projede fareyi dokunmatik gibi göstermek açık, yani o soru masaüstünde de "evet" cevabı veriyor — yani masaüstü dengesi sessizce değişmişti. Bir boss testi bunu yakaladı. Artık ayrı bir soru var: "bu gerçekten bir telefon mu?"

Sahibin telefonda bulduğu iki hata

Bazı kontrol noktaları karakteri zeminin içinde başlatıyordu. forest_03'te üç meşale iki karoluk bir bacanın dibinde duruyordu: zemin her yerde, iki yanda baş hizasında kaya. Orada doğan Arin yalnızca yukarı zıplayabiliyordu ve dokunmatik ekranda bu "zeminde sıkıştım" gibi okunuyor.

Artık hem yerleştirme betiği hem denetim betiği en az bir yanda iki karo açık baş boşluğu istiyor, ve bir test bunu motorun içinde 390 doğuş noktasının hepsi için kanıtlıyor.

Nadiren düşmanlar arenanın dışında çıkıyordu. Bir pusu dalgası, doğuş noktası oyuncunun üstüne gelecekse onu iki karo yana kaydırıyor. Bu kaydırma sadece tetikleyici alanın ortasından bir mesafeyle sınırlanıyordu, arenanın gerçek duvarlarıyla değil. Dar bir arenada bu, düşmanı kapının dışına çıkarabiliyordu. Artık duvarlar arenanın kendi kapılarından okunuyor ve kaydırma yalnızca bir tercih — kapıyı aşacaksa yapılmıyor.


48 · Reklamlar

Thornveil'in mağaza tanıtım görseli: yanan köyün üstünde THORNVEIL logosu ve altında "A pixel action platformer" yazısı
Thornveil'in mağaza tanıtım görseli

Oyun ücretsiz ve reklamla ayakta duracak. Kurallar baştan konuldu:

  • Ödüllü reklam dört yerde, hepsi tek bir panelden ve hepsi tamamen isteğe bağlı: haritadaki reklam tabelası (o harita için bir ekstra kalp), Faber'in atölyesinde ücretsiz bir kalp kabı, harita sonu kartında mücevher ve bir ölümden sonra düştüğün yerde canlanma. Reddetmek hiçbir şeye mal olmuyor.
  • Tam ekran reklam tek yerde: harita bittikten sonra "Devam"a basınca, siyahın arkasında. Oyunun ortasında, ölümde, diyalogda ya da bölüm sonunda asla.
  • Yüklenmemiş bir reklam anında atlanıyor, yani kart hiç beklemiyor.

Panelin kendisinde de kural var: ödül anlaşmadan önce söyleniyor, "İzle" ve "Vazgeç" aynı boyutta ve hiçbiri süslenmiyor.

Canlanma seçeneği bilerek dar tutuldu — sahip istedi, ben karşı çıktım çünkü "seni ateşe yalnızca ölüm döndürür" kuralını esnetiyor. Uzlaşma: harita başına bir kez, yarım can, kontrol noktası taşınmıyor, kayıt yazılmıyor ve ölüm kartta yine sayılıyor.

Reklamın kendisi ekranı kaplamıyordu

Telefonda canlı bir reklam açıldığında iki kenarda bant kalıyordu. Tahmin yürütmek yerine reklam ekrandayken ölçüldü: oyunun penceresi [0,0][1640,720], reklamın penceresi [72,0][1640,720]. Ekran görüntüsü piksel piksel okunduğunda soldaki 72 pikselde oyunun kendisi görünüyordu (çentik şeridi), sağdaki 96 pikselde ise gezinme çubuğu geri gelmişti.

Tema ile çözülmüyor: reklam ekranı kendi temasını dayatıyor ve uygulama geneline konan hiçbir şey ona ulaşmıyor. İlk denediğim düzeltme tam olarak bu yüzden hiçbir işe yaramamıştı — APK'nın kendi manifesti okunarak kanıtlandı. Çözüm çalışma zamanında: uygulama, Godot'unki dışındaki her ekrana Godot'un kendi penceresine verdiği ayarları veriyor.

Syoo Games yazısından sonra siyah ekran

Kapalı teste yüklendikten sonra çıkan hata bu yazının en öğretici kısmı.

Oyun açılıyor, stüdyo yazısı görünüyor, sonra ekran siyah kalıyor. Müzik çalıyor. Dokunmak hiçbir şey yapmıyor, ama geri tuşuna basınca menü açılıyor. Ve bu yalnızca ilk kurulumda oluyor.

İlk tahminim ekran doldurma koduydu: ilk açılışta uygulama telefonun o anki yönünde doğuyor olabilir ve pencere daha yataya dönmeden dikey ölçülerini bildiriyor olabilirdi. O zaman tuval yanlış hesaplanır, tam sayı ölçek sıfıra yuvarlanır ve hiçbir şey çizilmez. Mantıklıydı, düzeltildi, test yazıldı — ve ekran yine siyah kaldı.

Ölçüm asıl cevabı verdi: oyun arka planda saniyede 87 kare çiziyordu, yani motor gayet çalışıyordu, sadece çizdiği şey siyahtı. Üstte binmiş bir pencere de yoktu.

Sebep, ilk açılışta gösterilen "bu oyun reklam içerir" bildirimiymiş. İki şey aynı anda ters gidiyordu:

  1. Bildirim oyun ağacını duraklatıyor. Menünün siyahtan açılma animasyonu sıradan bir tween, yani duraklayınca tam siyahta donuyor. Onu çözecek olan şey, donmuş olan şeydi. 2. Bildirim paneli katman 0'a ekleniyordu, siyah perde ise katman 100'de. Yani duraklama olmasa bile panel siyahın altında kalıyordu, görünmüyordu.

Geri tuşu bildirimi kapatıp duraklatmayı kaldırıyor, animasyon kaldığı yerden devam ediyor ve menü geliyordu. İkinci açılışta bildirim bir daha çalışmadığı için hata da görünmüyordu.

Sahibin kararı bildirimi tamamen kaldırmak oldu: "hiçbir oyunda yazmıyor." Doğru — Google'ın şartı mağaza sayfasındaki "Reklam içerir" etiketi, uygulama içi bir pencere değil. Bildirim kaldırıldı ve yerine iki yapısal test yazıldı, çünkü buradaki asıl ders şuydu: açılış animasyonu sırasında hiçbir şey oyunu duraklatmamalı.

Mağaza tarafı

  • Sekiz ekran görüntüsü ve 1024x500 tanıtım görseli oyunun içinden çekiliyor. Yazılar oyunun kendi bitmap fontuyla, aynı piksel ızgarasında basılıyor; hiçbir görsel ölçeklenmiyor. Çekim listesi ve metinler tek bir dosyada, yani bir başlık değiştirmek için koda dokunmak gerekmiyor.
  • Ekran görüntülerinde dokunmatik diskler kapalı — ilk denemede açıktılar ve sanatı örtüyorlardı.
  • Gizlilik politikası TR + EN tek sayfa olarak hazırlandı, app-ads.txt ile birlikte.
  • Play paketi (AAB) sahibin kendi yükleme anahtarıyla imzalandı. İlk denemede Godot'un varsayılan anahtarıyla imzalanmıştı; Play hata ayıklama sertifikasıyla imzalanmış paketi kabul etmiyor.

Rakamlar

  • Sürüm 0.3.6, sürüm kodu 7. Bugüne kadar yedi derleme.
  • Beş yeni test paketi: ekran doldurma, dokunmatik his, reklam bağlantıları, doğuş noktaları (390 nokta), arena doğuşları (9142 kontrol).
  • Telefon testinde 89 fps sabit, kilitlenme yok, betik hatası yok.

Sırada ne var?

Kapalı test geri bildirimi. Bölüm 5 ve 6'ya ondan önce başlanmayacak: dövüşte çıkacak bir düzeltme 16 yeni haritayı birden elden geçirmeyi gerektirir. Bekleyen madde listesi docs/MOBIL_OYNANIS_PLANI.md ve docs/DEVAM_PLANI.md içinde.

Bir tanesi öne çıkıyor ve iki kez önerilip iki kez onaylanmadı: saldırı sırası. Bugün bir grubun dört üyesi de aynı anda savurabiliyor, telefonda bunu okumak imkânsız. Bir anda yalnız bir sıradan düşman saldırıya girebilse yoğunluk aynı kalır ama dövüş sıraya girerdi.


Emeği geçenler

Beşinci yazıdaki listeyle aynı. Tam liste: docs/CREDITS.md ve oyun içinde Ayarlar → Krediler.

Günlüklere dön

Neler oluyor, bak.

Tüm güncellemeler