Jump to navigation Jump to search
This article is about the OHRRPGCE FMF project, which is an alternate implementation of the OHRRPGCE for Java mobile phones. Technical implementation details discussed here should not be confused with those of the RPG format

636 bytes per hero seemed a bit excessive, so this lump was compressed. The first byte now contained the number of heroes, and the second byte contained some scaling factors, used to stuff stat caps into a byte apiece. This technically will affect the accuracy of hero stats, but except for artistic reasons (e.g., a demon with exactly 666 mp) players should not notice any difference.

The Header[edit]

Data Meaning
BYTE Number of heroes in this file
BYTE(AABBCCDD) Scaling factors, all -1
A=mp_multiplier (low)
B=mp_multiplier (high)
C=stat_multiplier (low)
D=stat_multiplier (high)

Following the header are a number of variable-length records

Hero Record Format[edit]

Data' Meaning
STR Hero name. If the first byte of this string is hex-value FF, this hero is null. No more bytes are read; the next hero record begins immediately.
BYTE Hero Sprite
BYTE Hero Palette
BYTE Walkabout Sprite
BYTE Walkabout Palette
BYTE Default Level (0xFF = "Party Average")
BYTE Default Weapon
INT HP Level 0
INT HP Level 99
BYTE MP Level 0 / mp_multiplier(low)
BYTE MP Level 99 / mp_multiplier(high)
BYTE Strength Level 0 / stat_multiplier(low)
BYTE Strength Level 99 / stat_multiplier(high)
BYTE Accuracy Level 0 / stat_multiplier(low)
BYTE Accuracy Level 99 / stat_multiplier(high)
BYTE Defense Level 0 / stat_multiplier(low)
BYTE Defense Level 99 / stat_multiplier(high)
BYTE Dodge % Level 0 / stat_multiplier(low)
BYTE Dodge % Level 99 / stat_multiplier(high)
BYTE Magic Level 0 / stat_multiplier(low)
BYTE Magic Level 99 / stat_multiplier(high)
BYTE Will Level 0 / stat_multiplier(low)
BYTE Will Level 99 / stat_multiplier(high)
BYTE Speed Level 0 / stat_multiplier(low)
BYTE Speed Level 99 / stat_multiplier(high)
BYTE Counter Level 0 / stat_multiplier(low)
BYTE Counter Level 99 / stat_multiplier(high)
BYTE Focus Level 0 / stat_multiplier(low)
BYTE Focus Level 99 / stat_multiplier(high)
BYTE Extra hits Level 0 / stat_multiplier(low)
BYTE Extra hits Level 99 / stat_multiplier(high)
3 BYTES(XXXXAAAA ABBBBBCC CCCDDDDD) Number of spells in each list
A = List 1
B = List 2
C = List 3
D = List 4
X = unused
2 BYTES * X List 1's spells. First byte is Attack number; second byte is level learnt + 1 (if zero, it's taught by an item)
2 BYTES * X List 2's spells. Same format as above.
2 BYTES * X List 3's spells. Same format as above.
2 BYTES * X List 4's spells. Same format as above.
BIT * 8 Weak against elements 1-8
BIT * 8 Strong against elements 1-8
BIT * 8 Absorbs elements 1-8
BYTE(ABXXXXXX) A = Show rename prompt when added to the party.
B = Allow renaming from the status menu.
X = undefined
STR Spell List 1's name
STR Spell List 2's name
STR Spell List 3's name
STR Spell List 4's name
4 BYTES Spell List 1 to 4's type:
0 = MP based
1 = FF1-style Level MP based
2 = Random
3 = reserved for item-consuming spells?
BYTE Have hero tag
BYTE Hero is alive tag
BYTE Hero is leader tag
BYTE Hero is in active party tag
BYTE Max length of hero name when renaming (0=default, 16?)
INT "Attack A" Hand X-coordinate
INT "Attack A" Hand Y-coordinate
INT "Attack B" Hand X-coordinate
INT "Attack B" Hand Y-coordinate

'Note: All "STR" variables in .HRO are null-terminated Strings.

Some people have expressed concern that this format is too confining, and will crash if, say, the "Hero is leader" tag is 300. To them, "patience!" The XRPG format can always be changed (I can think of two easy fixes now...)

List of Lumps specific to the XRPG format. Other lumps comply with existing .RPG lump specifications.

HEADER.LMP . _FNT.png . .PT4_# . .PT6_# . .HERO_#.png . SEZ . EFX . BFF . FOE . _TIL_#.png . _MXS_#.png . ###.MAP . HRO . ATK . SCRIPTS_#.HF . SCRIPTS.LST