| Reverse-Engineered: | |
|---|---|
| Difinalisasi: | |
| Kemandirian posisi: |
Periksa beranda untuk angka kemajuan dan informasi yang lebih terperinci tentang crowdfunding!
Proyek ini bertujuan untuk merekonstruksi kode sumber dari lima game proyek Touhou pertama oleh Zun Soft (sekarang Team Shanghai Alice ), yang awalnya dirilis secara eksklusif untuk sistem NEC PC-9801.
Game asli yang dimaksud adalah:
Karena kami hanya memiliki binari, kami jelas tidak dapat tahu bagaimana Zun menyebutkan variabel dan fungsi apa pun, dan komentar mana yang dikelilingi oleh kode asli. Sempurna karena itu berarti bahwa binari yang dikompilasi dari kode di repositori REC98 tidak dapat dibedakan dari bangunan asli Zun, sehingga tidak mungkin untuk menyangkal bahwa kode asli tidak terlihat seperti ini. Properti ini dipertahankan untuk setiap git yang berkomitmen di sepanjang jalan.
Selain dari sudut pelestarian dan wawasan mendalam yang dihasilkan ke dalam mekanika permainan, kode tersebut kemudian dapat berfungsi sebagai fondasi untuk semua jenis mod, atau port apa pun ke platform non-PC-98, yang dikembangkan oleh masyarakat. Ini juga mengapa REC98 menghargai kode yang dapat dibaca dan dimengerti atas dekompilasi murni.
Ada beberapa mengapa mencapai moddability melalui dekompilasi penuh tampaknya lebih bermanfaat untuk game PC-98, berbeda dengan reimplementasi kotak hitam bergaya Pytouhou:
Sejak crowdfunding telah membawa aliran dukungan yang berkelanjutan, kemajuan telah stabil. Dekompilasi TH01 sepenuhnya selesai pada Agustus 2022, dan permainan yang tersisa hanya masalah waktu.
Selama bertahun-tahun, proyek ini mengarah pada pemahaman yang mendalam tentang kompiler asli dan perangkat keras PC-98, ke titik di mana dekompilasi itu sendiri menjadi sangat mekanis. Untuk memastikan bahwa proyek ini tetap bermanfaat untuk mendukung dan menarik untuk dikerjakan, fokusnya telah bergeser lebih ke arah dokumentasi yang cermat dan tinjauan kode asli Zun. Blog proyek merinci semua temuan dengan cara yang lebih umum dan dapat dibilang menjadi daya tarik utama, dengan rekonstruksi kode sumber itu sendiri hampir berubah menjadi produk sampingan dari penelitian mendalam yang mendasarinya ke dalam game -game ini.
Proyek ini juga cukup layak. Selama pengembangan tambalan bahasa Inggris statis untuk game -game ini, kami mengidentifikasi dua perpustakaan utama yang digunakan di semua 5 game, dan bahkan menemukan kode sumbernya. Ini adalah:
ZUNSP.COM dari Th03 (dapat diakses melalui ZUN.COM -4 ) adalah versi rebranded dari Promisence Soft's SPRITE16.COM , driver display EGC PC-98 16-warna, versi 0,04, yang dibundel dengan sampel permainan Stormyspace . Master.lib dan runtime C/C ++ saja membuat jumlah kode yang cukup besar di semua yang dapat dieksekusi. Dalam Th05, misalnya, mereka berjumlah 74% dari semua kode di OP.EXE , dan 40% dari semua kode di MAIN.EXE . Itu sudah cukup banyak kode yang tidak harus kita tangani. Mengidentifikasi sisa kode yang dibagikan di seluruh game akan lebih jauh mengurangi beban kerja ke jumlah yang lebih dapat diterima.
Dengan Dosbox-X dan edisi debug Neko Project II, kami juga memiliki dua emulator PC-9821 open-source yang mampu menjalankan game. Ini telah membantu menjawab sebagian besar pertanyaan terkait perangkat keras, bersama dengan buku-buku lama tentang pengembangan PC-98 dan tes sesekali pada perangkat keras nyata.
zunsoft.com , op.exe , reiiden.exe , fuuin.exeongchk.comzuninit.com , zun_res.com , zunsoft.comop.exe , main.exe , maine.exeongchk.comzuninit.comzunsoft.comzunsp.com [-4], res_yume.com [-5]), op.exe , main.exe , mainl.exeongchk.comzuninit.com [-i], res_huma.com [-s], memchk.com [-m]), op.exe , main.exe , maine.exeongchk.comzuninit.com [-i], res_kso.com [-s], gjinit.com [-g], memchk.com [-m]), op.exe , main.exe , maine.exeFile crossed-out identik dengan versi mereka di game sebelumnya. Ongchk.com adalah bagian dari driver suara PMD oleh Kaja, dan karena itu tidak perlu dibongkar; Kita hanya perlu menjaga biner untuk memungkinkan pembangunan kembali bit-sempurna dari Zun.com.
Proyek ini tidak termasuk data aset apa pun dari rilis PC-98 asli. Menjalankan eksekutif yang dikompilasi masih membutuhkan salinan game asli yang ada.
▶ master : Kode asli Zun, tanpa mod atau perbaikan bug (Anda ada di sini!)
debloated : Versi ulang kode Zun yang lebih mudah dibaca dan dimodifikasi, dan membangun biner PC-98 yang lebih kecil dan lebih cepat. Hanya menghilangkan ranjau dan ranjau darat; Semua bug dan keanehan dari kode asli Zun dibiarkan di tempatnya. Port harus dimulai dari cabang itu , dan itu juga basis yang disarankan untuk mod yang tidak peduli tentang kesamaan dengan biner asli.
anniversary : Membutuhkan debloated dan juga memperbaiki bug, mencapai pengalaman gameplay yang lebih halus dan berkedip-kedip di platform PC-98 sambil tetap meninggalkan keanehan di tempatnya. Mungkin port awal yang lebih baik untuk mod dan port.
BossRush
th03_no_gdc_frequency_check : memungkinkan TH03 dijalankan dengan jam GDC diatur ke 5 MHz. Gim asli menegakkan 2,5 MHz, tetapi secara fungsional tidak memerlukannya, bahkan pada perangkat keras nyata.
xJeePx : Perubahan Kode untuk Patch Terjemahan Bahasa Inggris 2014 XJEEPX.
th01_critical_fixes : Memperbaiki dua bug kritis di Th01:
th01_end_pic_optimize : mempercepat gambar blitting di cutscene Th01 hingga 50% dari runtime asli. Terutama berfungsi sebagai contoh bagaimana mendekati kode blitting EGC yang optimal dari Turbo C ++ 4.0J tanpa menulis satu instruksi ASM; EGC jelas bukan alat terbaik untuk pekerjaan ini.
th01_orb_debug : Menampilkan informasi berikut dalam mode debug Th01:
th01_sariel_fixes : Memperbaiki tiga gangguan sprite dalam pertarungan Sariel Th01 yang dihasilkan dari kesalahan logika yang jelas dalam kode asli.
th03_real_hitbox : Membuat bitmap tabrakan Th03 ke kedua playfields. Sangat tidak bisa dimainkan.
Perbaikan untuk TH04 Tahap 5 Yuuka No-Em Crash:
th04_noems_crash_fix : Meningkatkan batas memori yang dipaksakan sendiri dari MAIN.EXE Th04 dengan jumlah yang tepat untuk memperbaiki satu crash itu.mem_assign_all : Menghapus batas memori yang dipaksakan sendiri di semua yang dapat dieksekusi Th02-TH05, juga memperbaiki potensi crash out-of-memory lainnya yang mungkin terjadi selama modding.Penanganan masalah untuk TH04 Kurumi Divide Error Crash:
th04_0_ring_ignoreth04_0_ring_as_single_bulletth04_0_ring_as_cap_bulletsth04_0_ring_as_gameoverPenanganan masalah untuk TH04 Tahap 4 Marisa Divide Error Crash:
th04_marisa4_crash_stillth04_marisa4_crash_moveth04_marisa4_crash_warp community_choice_fixes : Cabang kombinasi dari semua perbaikan bug "jelas" yang tidak mempengaruhi gameplay atau visual:
th01_critical_fixesth03_no_gdc_frequency_checkth04_noems_crash_fix Ditambah solusi berikut untuk bug Divide Error Th04, dipilih dengan suara komunitas:
th04_0_ring_as_single_bullet (hasil jajak pendapat)th04_marisa4_crash_still (hasil jajak pendapat) Borland Turbo C ++ 4.0J
Ini adalah kompiler yang awalnya digunakan Zun, jadi ini satu-satunya yang dapat secara deterministik mengkompilasi kode ini ke executable yang bit-sempurna untuk yang asli Zun. Borland tidak pernah membuat kompiler silang menargetkan DOS 16-bit yang berjalan pada jendela 32-bit, sehingga bagian C ++ harus dikompilasi menggunakan program DOS 16-bit.
REC98 juga menggunakan Turbo C ++ 4.0J untuk membangun alat kustom dalam pipa build -nya, seperti konverter untuk sprite hardcoded. Ini hanya harus berjalan secara asli sebagai bagian dari proses pembangunan, sehingga mungkin tampak kontra-produktif untuk menyusunnya menjadi program DOS 16-bit yang kemudian perlu ditiru pada sistem operasi 64-bit. Ini masih masuk akal karena beberapa alasan, meskipun:
Oleh karena itu, tidak masuk akal untuk menambahkan ketergantungan yang biasanya cukup berat pada kompiler C ++ asli.
Borland Turbo Assembler (TASM), versi 5.0 atau lebih baru, untuk jendela 32-bit ( TASM32.EXE )
REC98 tidak hanya membutuhkan assembler untuk kode permainan yang belum didekompilasi, tetapi juga untuk pustaka pihak ketiga PC-98 Touhou dan kode perakitan Zun yang ditulis tangan dan tidak dapat dikompilasi. Untungnya, assembler 32-bit Borland dapat digunakan untuk kode 16-bit dan berjalan secara asli pada jendela 64-bit dan 32-bit, mengungguli alat 16-bit TASM.EXE dan TASMX.EXE .
Sebagai manfaat sampingan, menggunakan alat Windows 32-bit asli juga memungkinkan bagian ASM untuk menggunakan nama file panjang secara bebas yang tidak perlu menyesuaikan diri dengan konvensi DOS 8.3.
Pemain MS-DOS (dibundel)
Emulator ringan untuk menjalankan alat baris perintah DOS pada subsistem Windows Console, secara otomatis digunakan saat membangun basis kode pada sistem operasi 64-bit. Terlepas dari sifatnya yang dilucuti, ia masih berjalan lebih lambat daripada Dosbox karena menggunakan Neko Project 21/W menafsirkan inti x86 daripada kompiler dinamis, tetapi integrasi konsol yang mulus lebih dari menebusnya.
Bangunan yang dibundel secara khusus dioptimalkan untuk membangun REC98, menjalankan inti x86 yang dikurangi yang hanya meniru 386 tanpa FPU, paging, atau penghitungan siklus. Dibandingkan dengan build hulu Takeda Toshiya, pembangunan ini mempercepat proses pembuatan REC98 sebesar ≈60% untuk pembangunan kembali lengkap, ≈80% untuk menyusun dan menghubungkan unit terjemahan terbesar dan biner terbesar, dan ≈70% untuk unit terjemahan berukuran rata-rata dan biner. Ini juga berisi perbaikan bug yang diperlukan untuk menjalankan Turbo C ++ 4.0J dalam konteks sistem build yang tidak tersedia di build hulu pada Juni 2024.
Lihat bin/README.md untuk lisensi dan membangun informasi.
Tup , untuk windows (dibundel)
Sistem pembuatan paralel yang waras, digunakan untuk memastikan pembangunan kembali minimal. Memberikan pelacakan ketergantungan yang sempurna melalui injeksi kode dan mengaitkan syscall pembukaan file kompiler, yang memungkinkannya untuk secara otomatis menambahkan semua file #include ke grafik dependensi build. Ini membuatnya lebih unggul dari kebanyakan make , yang tidak memiliki fitur vital ini, dan karenanya secara inheren tidak cocok untuk hampir semua bahasa pemrograman yang bisa dibayangkan. Tanpa abstraksi untuk kompiler tertentu, TUP juga sangat cocok dengan alat -alat Borland kuno yang diperlukan untuk proyek ini.
Windows build 64-bit yang dibundel mencakup perbaikan bug penting untuk menjalankan alat build berbasis DOS melalui pemain MS-DOS yang belum digabungkan ke dalam repositori hulu pada Juni 2024.
Lihat bin/README.md untuk lisensi dan membangun informasi.
Cukup jalankan build.bat di salah satu platform build yang didukung; Itu melakukan hal yang benar terlepas dari sistem operasi mana yang Anda jalankan. Proses ini akan dibatalkan dengan kesalahan jika salah satu alat yang diperlukan tidak dapat ditemukan di PATH Windows.
Eksekusi terakhir akan dimasukkan ke dalam binth0? , menggunakan nama yang sama dengan aslinya. Menjalankannya membutuhkan aset asli setiap game di direktori yang sama.
Pada 64-bit x86, proses pembangunan menggunakan TUP untuk pembangunan kembali paralel minimal, tetapi semua alat build berbasis DOS ditiru. Pada 32-bit x86, proses pembuatan kembali pada file batch berurutan yang selalu membangun seluruh basis kode, tetapi semua alat build dapat berjalan pada kinerja asli.
Tingkat 1 : Diuji secara teratur, dukungan terbaik dijamin.
Tingkat 2 : Seharusnya bekerja, layak untuk didukung, tetapi tidak diuji secara teratur. Bug kritis dalam proses pembangunan akan diperbaiki secara gratis.
Tingkat 3 : Seharusnya berhasil, tetapi beban untuk dipertahankan. Perbaikan untuk bug yang berhubungan dengan build akan membutuhkan pendanaan, tetapi PR bugfix cenderung diterima juga.
Tingkat 4 : Secara eksplisit tidak didukung dan tidak layak tanpa bermain -main dengan serius. Akan membutuhkan pendanaan atau garpu khusus, PR tidak mungkin diterima.
TLink gagal dengan Loader error (0000): Unrecognized Error pada jendela 32-bit ≥Vista
Dua penyebab yang diketahui:
Coba konfigurasi driver ntvdm dpmi untuk dimuat ke dalam memori konvensional daripada memori atas, dengan mengedit %WINDIR%System32autoexec.nt :
REM Install DPMI support
- LH %SystemRoot%system32dosx
+ %SystemRoot%system32dosxMembutuhkan reboot setelah pengeditan itu berlaku.
(Sumber)
Cobalah membangun cangkang cmd.exe biasa bukannya PowerShell atau Bash.
Lihat CONTRIBUTING.md .