RAGNAROK BATTLE OFFLINE WEB

EX 1-3 Engine
WARNING
⚠️ DANGER! BOSS APPROACHING ⚠️
STAGE CLEAR!
S
Final Score 0
Max Combo 0 HITS
Player Level Lv.1
Boss Defeated BAPHOMET (MVP)
1P: WASD + J Light | K Mid | I Heavy | Space Skill  |  2P: Arrows + Num 1 Light | Num 2 Mid | Num 3 Jump
⚔️
Swordman (นักดาบ)
Bash / Magnum Break Combo
✨
Acolyte (นักบวช)
Holy Light / Heal / Angelus
    Select a file from the left to inspect and preview.
    🔍

    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 - 0x034 BytesVersion Header (ค่าคงที่ 0x00000001)
    0x04 - 0x074 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 uint32Format descriptor & Channel flags (0, 7, 2)
    Widthuint32 (Offset 12)ความกว้างของภาพ (เช่น 512, 1024, 2048)
    Heightuint32 (Offset 16)ความสูงของภาพ (เช่น 512, 1024)
    PixelsWidth * Height * 4 BytesPixel 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)!