Cnass's picture
Upload 7 files
d02ad4f verified
|
Raw History Blame Contribute Delete
4.23 kB

Riaslink Port — Android Template

RPG Maker MV/MZ web dışa aktarımlarını (www/ klasörü) saran, minimal bir Android WebView port'u. Ludens projesinden yalnızca "port yeteneği" fikri esinlenmiştir; bu proje ayrı bir kod tabanıdır, Ludens'in koduna bağımlılığı yoktur (Apache 2.0 lisanslı Ludens'in kodu doğrudan kullanılmamıştır).

Mimari

Bu proje kasıtlı olarak küçük tutulmuştur:

  • Kotlin Multiplatform yok — sadece Android hedefleniyor.
  • Dependency injection framework yok — tek Activity, manuel wiring.
  • Üçüncü parti WebView kütüphanesi yok — android.webkit.WebView doğrudan kullanılıyor.
app/src/main/java/fun/riaslink/port/
├── RiaslinkApplication.kt      Application sınıfı (boş, kasıtlı)
├── GameActivity.kt             Tek Activity: immersive mod, back-press yönetimi
└── core/
    ├── GameWebView.kt          WebView kurulumu + WebViewAssetLoader
    └── RiaslinkJsBridge.kt     JS→native köprü (sadece titreşim + çıkış)

app/src/main/assets/www/ — buraya bir RPG Maker projesinin www/ klasörü kopyalanır. js/plugins/RIA_FPSCounter.js ve js/plugins/RIA_TavernMenu.js oyunun kendi eklenti sistemine (js/plugins.js üzerinden) kaydolan, saf JavaScript RPG Maker eklentileridir — native Kotlin koduyla hiçbir bağı yoktur, herhangi bir RPG Maker projesine (Android portu olmadan, tarayıcıda bile) tek başına kurulabilirler.

Native ↔ Web sözleşmesi

Native taraf ile menü arasındaki tek bağlantı noktaları:

  1. window.RiaslinkNative.vibrate(ms) / .exitApp() — menüden native'e.
  2. window.RIA_TavernMenu.handleBackPress() — native'den menüye. Android geri tuşuna basıldığında GameWebView.handleBackPress() bunu çağırır; menü açıksa kapatır, değilse taverna temalı bir çıkış onayı gösterir.

Bunların dışında native taraf menünün iç mantığına hiç karışmaz.

Yapılandırma (riaslink.build.properties)

applicationId, uygulama adı, versiyon gibi alanlar build.gradle.kts'e sabit yazılı değildir; proje kökündeki riaslink.build.properties dosyasından okunur. Bu dosya build'e özgüdür ve git'e eklenmez (.gitignore'a bakın). Manuel/lokal build için riaslink.build.properties.example dosyasını kopyalayıp doldurun:

cp riaslink.build.properties.example riaslink.build.properties
# değerleri düzenle

Manuel build

./gradlew assembleDebug    # imzasız, hemen kurulup test edilebilir
./gradlew assembleRelease  # R8 küçültme uygulanır, imzasızdır

APK çıktısı: app/build/outputs/apk/<debug|release>/

release build'i imzasız olduğu için cihaza doğrudan kurulamaz — kendi keystore'unla apksigner ile imzalaman gerekir.

Kendi oyununu elle yerleştirme

Hugging Face Space pipeline'ını kullanmadan, www/ klasörünü elle de yerleştirebilirsin:

  1. RPG Maker'da projeni web'e dışa aktar (Deploy Masterpiece).
  2. Oluşan www/ klasörünün içeriğini app/src/main/assets/www/ üzerine kopyala (mevcut placeholder içeriğin üzerine yaz).
  3. RIA_FPSCounter.js ve RIA_TavernMenu.js dosyalarını app/src/main/assets/www/js/plugins/ altına kopyala (zaten template'te mevcutlarsa atlayabilirsin).
  4. Kendi js/plugins.js dosyana şu girişleri ekle (RPG Maker editörünün Plugin Manager'ından da ekleyebilirsin):
$plugins.push(
    { "name": "RIA_FPSCounter", "status": true, "description": "", "parameters": { "defaultVisible": "false" } },
    { "name": "RIA_TavernMenu", "status": true, "description": "", "parameters": { "accentEmberHex": "#e8a343" } }
);

Menüyü genişletme

RIA_TavernMenu.js, gelecekteki eklentilerin kendi sekmelerini eklemesine izin veren bir registerSection() API'si sağlar:

window.RIA_TavernMenu.registerSection({
    id: 'cheats',
    label: 'Hileler',
    render: function(container) {
        // container'ı DOM elemanlarıyla doldur
    }
});

Bu sayede örneğin ileride bir "cheat menu" eklentisi, RIA_TavernMenu.js dosyasının kendisine hiç dokunmadan sidebar'a yeni bir sekme ekleyebilir.