[Cina] Tutorial Game Bab 4: Ubah kata gambar menjadi kata sistem

Poster aslinya: Cry&Xiao Shang Tampilan: 2658 Balasan: 5 Diposting di: 2011-12-18 07:09:07
Ini adalah konten tambahan, tetapi juga sangat penting dan perlu dihafal dengan hati-hati -----
Karakter gambar untuk menggambar karakter pada gambar, sedangkan karakter sistem untuk memanggil font yang disertakan dengan telepon, yang pada dasarnya dapat dibedakan dari tampilannya. Setelah teks permainan semacam ini langsung diterjemahkan ke dalam bahasa Mandarin, semua permainan akan menampilkan "口口口口口口" (kosong). Untuk game yang menggunakan karakter gambarnya sendiri, metode penerjemahan bahasa Mandarin mencakup Chineseisasi matriks dan modifikasi karakter sistem. Lokalisasi dot matriks memiliki keterbatasan, seperti terlalu banyak teks, indeks dot matriks dalam file kelas, dll., dan hanya berlaku untuk beberapa game. Lebih banyak yang dimodifikasi menjadi kata-kata sistem. Modifikasi mengharuskan Anda memiliki pemahaman tertentu tentang bahasa Java, jadi sebelum membaca tutorial ini, jika Anda belum tahu Java, disarankan untuk mengunduh dan mempelajari JAVA Pemula untuk memahami JAVA (perlu didekompresi). Alat persiapan samping S40: MC, MobyExplorer,
Dekompilasi Mocha
JADILAH editor bytecode
jasmin(/ur l)
(url=http://down2.s60net.com:8118/res/201112/10/17938831/paojiao_94825.jar?) sebelumnya auditor ( /url)
(url=http://down2.s60net.com:8118/res/20118/15/89301505/paojiao_89300.jar?) Disass embler2Jasmin


Di antara game Java yang menggunakan font gambar, game dari produsen game DigitalChocolate adalah yang paling sederhana. Umumnya game DigitalChocolate ini dimodifikasi. Permainan Coklat merupakan pengantar pembelajaran. Cara modifikasi game pabrikan ini merupakan formula yang tetap dan tidak terlalu rumit. Ambil " My Pet Shop My Pet Store" dari DigitalChocolate sebagai contoh. Setelah mendekompresi game, gunakan dekompilasi Mocha untuk mendekompilasi file kelas di dalamnya, dan telusuri sebentar untuk menemukan metode berikut: publik? (Gambar gambar, DataInputStreamdatainputstream, Font font, int?, int?) {} Kami menemukan bahwa itu ada di i. Di kelas, secara umum, file metode ini berada di file kelas 3 hingga 4K. Oleh karena itu, prioritaskan untuk membuka file 3 hingga 4K untuk browsing, dan Anda akan menemukannya dengan cepat. publik i (Gambar gambar, DataInputStreamdataInputStream, Font font, inti1, int j1) {int k; ke dalam i2; ke dalam j2; karakter ch; if (image ! = null) (dihilangkan...) Yang harus kita lakukan adalah menambahkan image = null di atas if (image! = null). Jangan memikirkannya di i. Menambahkannya di Java tidak akan berhasil. Karena kebingungan atau alasan alat, pada dasarnya file java yang telah didekompilasi tidak dapat dikompilasi kembali menjadi file kelas. Tujuannya dapat dicapai dengan memodifikasi bytecode. Pertama buat folder baru "1" dan "2", dan masukkan i. Masukkan kelasnya, buka software Disassembler2Jasmin, dan ada dua kotak alamat. Isikan yang pertama, E:/1/i. Isi kolom kelas kedua, E:/2/Klik "Unshell" di soft key kiri, dan ubah i. Kelas didekompilasi menjadi bytecode, yang akan menghasilkan i. file j. Buka saya dengan editor teks. j, yang disebut bytecode, ditemukan di awal: invokespecial java/lang/Object/ () Vaload_1ifnull Label216 Yang harus kita lakukan adalah menambahkan aconst_null
astore_1 sebelum aload_1 dan terakhir: invokespecial java/lang/Object/() Vaconst_nullastore_1aload_1ifnull Label216 Oke, simpan perubahannya, sekarang masukkan i. j mengkompilasi kembali ke i. kelas, buka Jasmin, ada dua kotak alamat. Isikan yang pertama, E:/2/i. j Isikan yang kedua, E:/2/Klik "Compile" pada soft key kiri. Setelah kompilasi berhasil, maka akan dilakukan pra-audit. File kelas yang dikompilasi harus lolos verifikasi auditor sebelum dapat dikemas kembali ke dalam perangkat lunak untuk digunakan. Buka auditor Preverifier, isi kedua kotak jalur dengan E:/2/, dan mulai mengaudit. Mari kita periksa apakah telah ditambahkan dengan benar, menggunakan i yang dimodifikasi dan ditinjau di folder Mocha Reverse 2. kelas, lihat apakah image=null ditambahkan ke baris kode if (image ! = null)? Nah, kalau penambahannya berhasil tinggal ganti i yang asli. kelas, kemas ulang, instal dan jalankan game untuk melihat efeknya. Tampilan fontnya seperti ini sebelum dimodifikasi: Fontnya terlihat seperti ini setelah modifikasi: Lihat, fontnya sudah berubah dan sama dengan font sistem ponsel. Selain alat di atas, Anda juga dapat menggunakan editor bytecode BytecodeEditor untuk melakukan modifikasi tanpa dekompilasi, yang semakin cepat. Perangkat lunak yang dapat digunakan untuk melihat dan memodifikasi kumpulan konstan, bidang, metode, dll. suatu kelas dan secara langsung memodifikasi bytecode. Prosesnya adalah membuka perangkat lunak - temukan dan buka i. class--method-"init", apakah Anda melihat kode yang familier? invokespecial java/lang/Object/() Vaload_1ifnull Label216 Edit dan tambahkan aconst_null
astore_1 lalu simpan dan tinjau, yang jauh lebih nyaman. -------------Proses pengoperasian dasarnya seperti ini, mengapa perlu dimodifikasi seperti ini? Mari kita bahas prinsipnya di bawah ini. di saya. Kita melihat metode ini di java: public void a (Grafik grafis, String string, int i1, int j1, int k1) {if (a! = null) {... grafis. setClip(i5, j5, k5 - i5, i6 - j5); grafis. drawImage(a, i1 - (a[i4] & 255), j1 - a[i4] - b2, 20);}i1 += b1 + c;}grafik. setKlip(i2, k2, i3, j3); return;} Catatan: Banyak game menggunakan metode public void a (Graphics Graphics, String string, int i1, int j1, int k1...) untuk menggambar string. Di bagian if, kita melihat metode setClip untuk memotong gambar. Prinsip metode setClip adalah menampilkan hanya sebagian konten di layar sehingga konten gambar yang terletak tepat di bagian tersebut dapat ditampilkan. drawImage adalah metode yang digunakan untuk menggambar gambar tertentu. Sangat mudah untuk membayangkan bahwa metode in if digunakan untuk menampilkan kata-kata bergambar. grafis. setFont(a); int j2 = grafis. getColor();if (a){......grafis. setWarna(b); grafis. drawString(string, i1, j1 - 1, k1); grafis. drawString(string, i1 - 1, j1, k1); grafis. drawString(string, i1 + 1, j1, k1); grafis. drawString(string, i1, j1 + 1, k1);} grafik. setWarna(a); grafis. drawString(string, i1, j1, k1); grafis. setColor(j2);} Catatan: Bagian di bawah if adalah bagian kuncinya. Kita telah melihat metode drawString untuk menggambar string, jadi kita tahu apa yang harus kita lakukan adalah membuat metode ini tidak mengeksekusi bagian di dalam if, tetapi langsung menuju ke bagian kata sistem di bawah. (Tambahan: Jika pernyataan divergensi bersyarat diubah menjadi proses yang berbeda sesuai dengan kondisi yang berbeda. Kemudian lihat di awal jika (a! = null), kita melihat bahwa itu dinilai dengan menilai variabel a. Dan di mana variabel ini didefinisikan? Sebelumnya kita berbicara tentang metode publik c (Gambar gambar, DataInputStreamdatainputstream, Font font, int i, int j), sebaiknya kita potong dan lihat public i (Gambar gambar, DataInputStreamdataInputStream, Font font, int i1, int j1) {int k; int i2; int j2; if (gambar ! = null) {a = gambar;b = j1; a = j1! = -1; } Catatan: Anda dapat melihat bahwa metode ini melibatkan variabel a, dan tanggung jawab variabel ini adalah menentukan apakah kuantitas gambar adalah nol. Lalu saya melihat a = font di else; kalimat ini berarti menetapkan jumlah font ke a (variabel font), yang dapat dipahami sebagai menetapkan font sistem ke a. Jadi kami berharap untuk mencoba membuat metode ini selalu mengeksekusi yang lain, sehingga kami dapat menambahkan image = null sebelum if (image ! = null); Dengan cara ini, nilai image di awal adalah null, dan bagian di else akan dieksekusi. Dalam bytecode: aload_1ifnull Label216 sesuai dengan if (image! = null). (Karena alat ini, lebih sulit mengubah posisi di ponsel daripada di komputer.) aload_1 adalah memuat objek (1) pertama yang direferensikan oleh variabel lokal dan mendorongnya ke tumpukan. Variabel lokal pertama sesuai dengan gambar di posisi pertama nama metode. Tambahkan image=null di sini untuk membuat jumlah nol pada gambar. aconst_nullastore_1 Jika Anda ingin tahu lebih banyak tentang prinsipnya, Anda bisa melihat Java Bytecode Revealed. Perlu dicatat bahwa "1" di astore_1 didasarkan pada if sebelumnya (gambar! = null). Kita lihat baris ketiga adalah aload_1, ini dia 1, maka astore_1 juga harus 1. Sebaliknya, jika aload_2, maka harus astore_2 dan seterusnya. aconst_null
astore_1 Segmen kode ini relatif mekanis, sehingga Anda dapat mengingatnya. Game-game yang diproduksi oleh Digital Chocolate relatif tetap, dan setiap orang yang ingin melokalisasi game mereka harus memodifikasinya dengan cara ini. Modifikasi game DC pada dasarnya adalah dasar dari banyak modifikasi game. Oleh karena itu, disarankan agar setiap orang menguasainya secara menyeluruh. Game dari pabrikan lain tidak semudah itu, bahkan game dari pabrikan yang sama mungkin memiliki metode modifikasi yang berbeda. Yang dibutuhkan adalah belajar dan berlatih terus menerus, mengumpulkan pengalaman, dan memperdalam pemahaman tentang Jawa.

-------------------Versi Cina dari teks permainan Digital Chocolate. Setelah berhasil mengubah karakter gambar menjadi karakter sistem, Anda dapat langsung meng-Cina-kan teksnya. File bahasa pada dasarnya adalah l0_0, l0_1, l0_2 dan seterusnya. Di "Toko Hewan Peliharaan Saya", umumnya memilih bahasa Mandarin l0_0 (Bahasa Inggris). Gunakan plug-in di folder SUMEA di alat komputer Halo untuk membuka dan memodifikasinya secara langsung. Di ponsel, Anda perlu menggunakan heksadesimal. Buka l0_0 dalam heksadesimal. 00 00 3c 75 mewakili jumlah total byte 15477, 00 00 01 6c mewakili jumlah total byte awal 364, 00 00 05 b8, 00 00 05 c1... mewakili bidang byte awal. Apa byte awal bidangnya? Tombol lunak kiri - Edit - Buka alamat, masukkan alamat 0x5b8 atau desimal 1464. Setelah konfirmasi, Anda akan menemukan bahwa itu masuk ke nomor byte 00 06 bahasa Inggris. Kemudian masukkan 0x5c1 kedua untuk menuju ke 00 02 Ok di bawah. Setiap byte awal sesuai dengan bidang berikut secara bergantian. Terus terang, 5b8 adalah jumlah total byte sebelum 00 06. Jumlah byte akan berubah ketika kita melokalisasinya, dan ini perlu dimodifikasi, yang cukup rumit dan merepotkan.
membalas 🤍 0 📤 membagikan mengumpulkan
Terlalu mendalam!
Atas…………
Ini baru disebut sulit…………
Yang di atas bisa dibilang agak dipaksakan, ini benar-benar tidak mengerti.
Jika dibuka dengan BE, di dalamnya hanya ada invokespecial java/lang/Object/
— Semua balasan dimuat —

Tinggalkan Balasan