- Katılım
- 24 Tem 2024
- Konular
- 313
- Mesajlar
- 556
- Çözümler
- 4
- Skor
- 4,597
- Puanları
- 93
Oyun çevirisi ve Türkçe yama geliştirme süreçlerinde karşılaşılan en büyük teknik sorunlardan biri, metin uzunluklarının orijinal satır sınırlarını aşması ve buna bağlı olarak oyunun çökmesidir (crash hatası). Bu teknik rehberimizde, GitHub üzerinde açık kaynak olarak geliştirilen MH-Pointers-Tool aracını kullanarak, oyun dosyalarındaki pointer (işaretçi) hesaplama, offset tespiti ve string (metin) yeniden konumlandırma (re-location) işlemlerini adım adım inceleyeceğiz.
Tersine mühendislik (reverse engineering) ve ROM hacking ile uğraşan yerelleştirme geliştiricileri için hazırladığımız bu kapsamlı rehber sayesinde, karakter sınırı engeline takılmadan profesyonel yamalar hazırlayabileceksiniz.
İngilizce bir kelimeyi (örneğin 4 karakterli "Save") Türkçe karşılığıyla (4 karakterden uzun olan "Kaydet") değiştirdiğinizde, aradaki karakter farkı sonraki bellek adresini (offset) bozacağından oyun çöker. MH-Pointers-Tool, uzayan yeni metni dosyanın sonundaki boş alanlara (00 - Null Byte) taşır ve o metne işaret eden pointer adresini saniyeler içinde otomatik olarak yeniden hesaplar.
Tersine mühendislik (reverse engineering) ve ROM hacking ile uğraşan yerelleştirme geliştiricileri için hazırladığımız bu kapsamlı rehber sayesinde, karakter sınırı engeline takılmadan profesyonel yamalar hazırlayabileceksiniz.
MH-Pointers-Tool Nedir? Ne İşe Yarar?
MH-Pointers-Tool; sıkıştırılmamış binary dosyalarda (.bin, .dat, .exe, .eboot), metinlerin bellekteki adreslerini tutan pointer yapılarını otomatik olarak tarayan ve düzenleyen bir geliştirici aracıdır.İngilizce bir kelimeyi (örneğin 4 karakterli "Save") Türkçe karşılığıyla (4 karakterden uzun olan "Kaydet") değiştirdiğinizde, aradaki karakter farkı sonraki bellek adresini (offset) bozacağından oyun çöker. MH-Pointers-Tool, uzayan yeni metni dosyanın sonundaki boş alanlara (00 - Null Byte) taşır ve o metne işaret eden pointer adresini saniyeler içinde otomatik olarak yeniden hesaplar.
MH-Pointers-Tool ile Adım Adım Pointer Düzenleme (Nasıl Yapılır?)
İşleme başlamadan önce, üzerinde çalışacağınız orijinal oyun dosyasının yedeğini aldığınızdan ve sisteminizde güncel .NET Runtime paketinin kurulu olduğundan emin olun.
1. Dosya Yapısını Analiz Etme ve Şema Oluşturma
Her oyun motorunun bellekteki veri dizilimi farklıdır. Programın dosyayı doğru okuyabilmesi için veri yapısını tanımlamanız gerekir:- Programı çalıştırın ve File -> Open diyerek düzenlemek istediğiniz dosyayı içeri aktarın.
- Structure Settings (Yapı Ayarları) panelinden oyun motorunuza uygun pointer mimarisini seçin (16-Bit, 32-Bit veya 64-Bit Little Endian / Big Endian).
- Metinlerin şifrelenme türünü (ASCII, UTF-8 veya Unicode) doğru şekilde işaretleyin.
2. Pointer ve String Taraması (Scanning)
- Ayarları yaptıktan sonra Scan Pointers butonuna tıklayarak otomatik tarama işlemini başlatın.
- Araç, belirlediğiniz kurallara göre dosya içindeki tüm anlamlı metinleri (string) ve onlara referans veren işaretçileri (pointer) listeleyecektir.
- Sol panelde listelenen adreslerin (Offset) doğruluğunu bir Hex Editor (Örn: HxD veya ImHex) yardımıyla çapraz kontrol edin.
3. Türkçe Çeviri Girişi ve Otomatik Re-location
- Düzenlemek istediğiniz satırın üzerine gelin ve Target Text (Hedef Metin) alanına Türkçe çevirinizi yazın.
- Yazdığınız metin orijinal sınırları aştığı anda program durumu otomatik olarak "Re-located" (Yeniden Konumlandırıldı) şeklinde güncelleyecektir.
- Araç, dosyanın sonundaki kullanılmayan 00 (Null) byte alanlarını hesaplayarak Türkçe metni oraya yazar ve orijinal pointer adresini bu yeni konuma bağlar.
4. Kaydetme ve Dosya Bütünlüğü Testi
- Çeviri işlemi tamamlandıktan sonra File -> Save As diyerek dosyanızı farklı kaydedin.
- Düzenlenen dosyayı oyunun dizinine atarak test edin. Karakter taşmalarından kaynaklanan arayüz bozulmalarının ve çökmelerin tamamen giderildiğini göreceksiniz.
Geliştiriciler İçin Teknik İpuçları ve Sorun Giderme
- Oyun Siyah Ekranda Kalıyor veya Çöküyor: Bazı modern oyun motorları pointer adreslerini mutlak (Absolute) değil, bağıl (Relative) olarak hesaplar. Eğer oyununuz çöküyorsa, araç ayarlarından Relative Offset seçeneğini aktif hale getirmeli ve oyun motorunun taban adresini (Base Address) girmelisiniz.
- Metinlerin Sonu Kesiliyor: Dosyayı içe aktarırken veya elle düzenlerken string sonlandırıcı kodların (\0 veya hex tabanında 00) silinmediğinden emin olun. Bu kodlar silinirse oyun motoru sonraki satırları da tek bir metinmiş gibi okumaya çalışır.
MH-Pointers-Tool GitHub İndirme Bağlantıları
Geliştirici aracının en güncel kaynak kodlarına ve derlenmiş sürümlerine aşağıdaki resmi proje sayfası üzerinden ulaşabilirsiniz.-
Ziyaretçiler için gizlenmiş link,görmek için Giriş yap veya üye ol.
