Dragon Quest Monsters: Joker/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
(Added info on enemy kind table)
m (→‎FPK Package Files: Add that map files are fpk files)
Line 10: Line 10:
==File Formats==
==File Formats==
===FPK Package Files===
===FPK Package Files===
The game stores some files together into one package file. These package files have a file extension of ".bin" and begin with the magic letters "FPK".
The game stores some files together into one package file. These package files have a file extension of ".bin" or ".map" and begin with the magic letters "FPK".


<syntaxhighlight lang="rust">
<syntaxhighlight lang="rust">

Revision as of 07:45, 1 October 2024

Chip tiny.png The following article is a ROM map for Dragon Quest Monsters: Joker.

Filesystem

  • data - Data files that the game reads information from (ex. images, tables, etc.).
  • overlay - Overlay binary files.
    • overlay_0000.bin - Overlay for the overworld.
    • overlay_0001.bin - Overlay for battles.
    • overlay_0002.bin - Overlay for currently unknown purpose.

File Formats

FPK Package Files

The game stores some files together into one package file. These package files have a file extension of ".bin" or ".map" and begin with the magic letters "FPK".

struct file {
    u8 name_info[0x20];
    u32 offset;
    u32 size;
    u8 data[size] @ offset;
};

struct fpk {
    u32 magic;
    u32 num_files;
    file files[num_files];  
};

fpk fpk @ 0x0;

d16 Image Files

The game stores cutscene image files in the binary "d16" file format. Values are stored as little endian.

u32 magic @ 0x00; // "D16 " (44 31 36 00)
u16 width @ 0x04;
u16 height @ 0x06;

u16 pixels[width * height] @ 0x08; // 16bit colors, 0b1BBBBBGGGGGRRRRR

Event Files

The game stores events as binary files in the custom ".evt" file format. Event files consist of a data portion and an instructions portion.

Instructions are executed one by one in order. Instruction 0x0A will initiate a new separate thread of execution, which runs concurrently, but not in parallel, with the main execution thread of the event.

#include "std/mem.pat"

u32 magic @ 0x00;
u8 data[0x1000] @ 0x04;

struct instruction {
    u32 type;
    u32 length;
    u8 arguments[length - 8];
};

// Instruction from end of data section to end of file
instruction instructions[while(!std::mem::eof())] @ 0x1004;

In the European release of the game, many event files are stored as FPK package files. The package files contain 5 event files, one for each language the game supports:

  • ".evD" - German
  • ".evE" - English
  • ".evF" - French
  • ".evI" - Italian
  • ".evS" - Spanish

Binary files

Dir Name File extension Category Description
./ arm7.bin bin Exectuable
./ arm9.bin bin Exectuable The exectuable with most of the game's code.
./ banner.bin bin
./ header.bin bin
./ y7.bin bin
./ y9.bin bin
overlay overlay_0000.bin bin Exectuable
overlay overlay_0001.bin bin Exectuable
overlay overlay_0002.bin bin Exectuable
data AI_ActionTBL.bin bin
data AI_CorrectTbl.bin bin
data AI_IntelTBL.bin bin
data AI_PatternTbl.bin bin
data AI_TargetSelectAllyTbl.bin bin
data AI_TargetSelectEnemyTbl.bin bin
data AI_TargetSelectItemTbl.bin bin
data AbilityTbl.bin bin Data table Table of stat increase per-level categories
data BtlChrTbl.bin bin
data BtlChrTimeTbl.bin bin
data BtlEfcTbl.bin bin
data BtlEfcTblWhip.bin bin
data BtlEnmyPrm.bin bin Data table Table of special encounter monsters (ex. bosses)
data BtlMstrPrm.bin bin
data ChgContentTbl.bin bin
data ChgMnstrTbl.bin bin
data DamageItemTbl.bin bin
data DamageTbl.bin bin
data DemoChrTbl.bin bin
data EnmyKindTbl.bin bin Data table Table of monster species
data EnmyPtnTbl.bin bin
data ExperienceTbl.bin bin
data FldChrTbl.bin bin
data FldEnmyPrm.bin bin
data FldMstrPrm.bin bin
data ItemTbl.bin bin Data table Table of items and equipment
data ModelTbl.bin bin
data MotionTbl.bin bin
data MstrPtnTbl.bin bin
data SkillPointTbl.bin bin
data SkillTbl.bin bin Data table Table of skill sets
data TokugiDataTbl.bin bin
data ViewChrTbl.bin bin
data btl_data.bin bin
data console_data.bin bin
data field_data.bin bin
data infomation_data.bin bin
data island_data.bin bin
data joker_00.bin bin
data keybord_data.bin bin
data omiaitbl.bin bin
data sd_data.bin bin
data shop_data.bin bin
data shop_vram.bin bin
data start_data.bin bin
data status_data.bin bin
data wall_bank.bin bin
data wall_base.bin bin
data wall_combi.bin bin
data wall_gpinfo.bin bin
data wall_itemshop.bin bin
data wall_keep.bin bin
data wall_skillpoint.bin bin

AbilityTbl.bin

The ability table stores level-up stat increase patterns, which determine how many stat points a monster will get when leveling up. Each pattern includes 99 unsigned integers which represent stat value increases for each level (1-99). There are 32 different patterns in total.

Each monster species is given 24 stat increase patterns. 6 groups corresponding to the different monster stats: max hp, max mp, attack, defense, agility, and wisdom. Each of the six groups has 4 patterns which apply to different level ranges: level 1 to 9, 10 to 39, 40 to 50, and 51 to 99.

struct ability {
    // One byte for each level
    u8 increase[99];
};

struct AbilityTbl {
    ability abilities[32];
};

AbilityTbl table @ 0x0;

EnmyKindTbl.bin

The enemy kind table stores information on the different monster species, such as default stats, stat limits, and stat increase pattern ids.

struct species {
    u32 unknown_a;
    
    u8 rank_and_family; // Lower 4 bits are the rank (0x0F), higher 4 bits are the family (0xF0)

    u8 unkown_b[3];
    u8 unknown_c[4];
    
    u32 weapon_compatibility_and_something_else;
    u8 traits[5];
    
    u8 unknown_d[3];
    u8 unknown_dde[4];
    
    u8 default_max_hp;
    u8 default_max_mp;
    u8 default_attack;
    u8 default_defense;
    u8 default_agility;
    u8 default_wisdom;
    
    u8 unknown_de[2];
    
    u16 max_hp_limit;
    u16 max_mp_limit;
    u16 attack_limit;
    u16 defense_limit;
    u16 agility_limit;
    u16 wisdom_limit;
    
    u8 max_hp_increase_indicies[4];
    u8 max_mp_increase_indicies[4];
    u8 attack_increase_indicies[4];
    u8 defense_increase_indicies[4];
    u8 agility_increase_indicies[4];
    u8 wisdom_increase_indicies[4];
    
    u8 skill_set;

    u8 unknown[75];
};

struct enmy_kind_tbl {
    u32 magic;
    u32 size;
    species species[size];
};

enmy_kind_tbl enmy_kind_tbl @ 0x0;