Warlords: Battlecry ARM

From XentaxWiki
Jump to: navigation, search

ARM

  • Game : Warlords: Battlecry 3
  • Format Type : Misc
  • Endian Order : Little Endian


Format Specifications

// Warlords: Battlecry 3
// ARM file format

// little endian

4 bytes (char) - unit ID // "ATHX", "AHHX", "AHBX" etc.
1 byte (uint8) - reserved // always "1"
1 byte (uint8) - unit movement type //  0=Grounded 
                                    //  1=Flyer 
                                    //  2=Boat 
                                    //  3=Floater (crosses water)

20 bytes (char) - unit name         //  e.g. "Peasant" or "Human Hero"
2 bytes (uint16) - unknown
2 bytes (uint16) - unit production time (in seconds)
2 bytes (uint16) - combat
2 bytes (uint16) - speed
2 bytes (uint16) - resistance
2 bytes (uint16) - HP
2 bytes (uint16) - View
2 bytes (uint16) - Armor
2 bytes (uint16) - Strong vs. // 0=Piercing 
                              // 1=Frost 
                              // 2=Electric 
                              // 3=Fire 
                              // 4=Magic 
                              // 5=Crushing 
                              // 6=Slashing 
                              // 7=All Psychical 
                              // 8=Piercing and Slashing 
                              // 9=All Elemental 
                              // 10=All damage 
                              // E=Fire 
                              // FFFF=none

2 bytes (uint16) - Weak vs.   // as above


x bytes - other unit data  //TODO

Full ARM file format is available here.

MultiEx BMS Script

Not written yet.

Notes and Comments

  • ARM files are encrypted with custom algorithm (substitution cipher). Special 256-bytes key is needed for decryption. Key starts with string "mr8".

Decryption algorithm

Below is Python implementation of decryption algorithm:

arm_size = os.path.getsize(in_file_path)
    
for i in range(arm_size):
    arm_byte = struct.unpack("B", arm_file.read(1))[0]
    key_file.seek(arm_byte)
    out_byte = key_file.read(1)
    out_file.write(out_byte)

Compatible Programs