👥 SELECT CHARACTER / เลือกตัวละครจริง (RBO Roster)
Select any game texture (.IMG) or sound effect (.WAV) to preview.
🛠️ รายงานการ Reverse Engineering: Ragnarok Battle Offline (French-Bread)
โปรเจกต์นี้เป็นการแกะโครงสร้างภายใน (Reverse Engineering) ของตัวเกม Ragnarok Battle Offline (RBO EX 1-3) ที่พัฒนาโดยค่าย French-Bread (Watanabe Seisakujo) ในปี 2004–2006 และแปลงโครงสร้างทั้งหมดให้สามารถรันบนเว็บเบราว์เซอร์สมัยใหม่ได้ทันที
1. โครงสร้างไฟล์บีบอัด (.PAC Archive)
ไฟล์ทรัพยากรหลักทั้งหมดถูกรวมไว้ในแพ็กเกจ .PAC (เช่น DATA01.PAC, BG01.PAC, SE.PAC)
จากการวิเคราะห์ Binary rbo.exe ที่ออฟเซต 0x00022a10 - 0x00022ad0 พบขั้นตอนการถอดรหัสและโครงสร้างดังนี้:
| ออฟเซต (Offset) | ขนาด | คำอธิบาย |
|---|---|---|
0x00 - 0x03 | 4 Bytes | Version Header (ค่าคงที่ 0x00000001) |
0x04 - 0x07 | 4 Bytes | จำนวนไฟล์ในแพ็ก (XOR Key: 0xE3DF59AC) |
0x08 - ... | FileCount * 68 Bytes | ตารางสารบัญไฟล์ (File Allocation Table) ขนาดแถวละ 68 Bytes |
สูตรการถอดรหัสชื่อไฟล์ (Rotating Stream Cipher):
// สำหรับไฟล์ลำดับที่ i และตัวอักษรตำแหน่งที่ c (0..58):
const key = ((i * c * 3) + 0x3d) & 0xff;
const decryptedChar = entryBytes[c] ^ key;
สูตรการถอดรหัสขนาดและตำแหน่งไฟล์:
const fileOffset = entry.readUInt32LE(0x3c);
const fileSize = entry.readUInt32LE(0x40) ^ 0xe3df59ac;
2. โครงสร้างไฟล์รูปภาพและฉาก (.IMG)
ไฟล์ .IMG เก็บภาพพื้นหลัง (Background) และ UI ในรูปแบบ Raw 32-bit BGRA Surface (DirectDraw 7 Surface)
โดยมี Header ขนาด 20 Bytes:
| ฟิลด์ | ชนิดข้อมูล | คำอธิบาย |
|---|---|---|
Header[0..2] | 3x uint32 | Format descriptor & Channel flags (0, 7, 2) |
Width | uint32 (Offset 12) | ความกว้างของภาพ (เช่น 512, 1024, 2048) |
Height | uint32 (Offset 16) | ความสูงของภาพ (เช่น 512, 1024) |
Pixels | Width * Height * 4 Bytes | Pixel Data เรียงแบบ B, G, R, A ทีละไบต์ |
3. โครงสร้างตัวละครและแอนิเมชัน (.DAT / HAN2RBO)
ข้อมูลตัวละครใน DATA02.PAC (เช่น SWORDMAN_M.DAT, ACOLYTE_F.DAT) เป็นโครงสร้าง Hantei 2 (HAN2)
ซึ่งแบ่งออกเป็น 5 ส่วนหลัก:
- 0x40 - 0x4B868: Pattern & Hitbox Definition (กล่องชน, กล่องรับดาเมจ, ระยะโจมตี)
- 0x4B8A8 - ...: Frame Sequence Timeline (ลำดับเฟรมและเวลาแสดงผล)
- BMP Cutter3 Section: สารบัญพิกัดตัดสไปรต์ (Sprite Slicing Coordinates) พร้อม 16 Color Palettes (โดยสีแรกคือ
0x00FF00หรือ Green Key เพื่อทำ Transparency) - 8-bit Paletted Texture Sheets: แผ่นสไปรต์ขนาด 512x512 พิกเซล เก็บเป็น Index 0-255 โดยแปลงผ่าน Palette 256 สี
- Shift-JIS Animation States: ตารางชื่อท่าโจมตีและการเคลื่อนไหวภาษาญี่ปุ่น เช่น
立ち(ยืน),前進(เดินหน้า),立ち弱攻撃(ฟันเบา),立ち中攻撃(ฟันกลาง),立ち強攻撃(ฟันหนัก)
4. การพอร์ตสู่เว็บบราวเซอร์ (Web Port Architecture)
ตัวเกมเวอร์ชันเว็บทำงานผ่าน HTML5 Canvas 2D + Web Audio API + Gamepad API
โดยนำไฟล์ Background จาก BG01.PAC, เสียงจาก SE.PAC, ดนตรีจาก BGM.PAC
และสไปรต์ตัวละครมาประกอบเป็น Beat 'em up Game Engine ที่รันที่ 60 FPS บนทุกอุปกรณ์ (Desktop, Mobile, Tablet, Gamepad)!