Difference between revisions of "Warlords: Battlecry ARM"

From XentaxWiki
Jump to: navigation, search
(Notes and Comments)
(Format Specifications)
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== ARM ==  
 
== ARM ==  
* ''' Game ''':    Warlords: Battlecry <br>  
+
* ''' Game ''':    Warlords: Battlecry 3<br>  
 
* ''' Format Type ''':    Misc <br>  
 
* ''' Format Type ''':    Misc <br>  
 
* ''' [http://en.wikipedia.org/wiki/Endianness Endian Order] ''': Little Endian <br>
 
* ''' [http://en.wikipedia.org/wiki/Endianness Endian Order] ''': Little Endian <br>
Line 9: Line 9:
 
<div class="toccolours mw-collapsible" id="mw-customcollapsible-myDivision" style="width:800px; overflow:auto;">
 
<div class="toccolours mw-collapsible" id="mw-customcollapsible-myDivision" style="width:800px; overflow:auto;">
 
<pre>
 
<pre>
//header
+
// Warlords: Battlecry 3
 +
// ARM file format
  
// TODO
+
// 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
 
</pre>
 
</pre>
 
</div>
 
</div>
 +
 +
Full ARM file format is available [http://www.infinite-interactive.com/forum/showthread.php?481-Unit-Editor-MFC-tool&p=3348&viewfull=1#post3348 here].
  
 
=== MultiEx BMS Script ===  
 
=== MultiEx BMS Script ===  
Line 21: Line 59:
 
=== Notes and Comments ===  
 
=== Notes and Comments ===  
  
* ARM files are encrypted with custom algorithm. Special 256-bytes key is needed for decryption. Key starts with string "mr8".
+
* ARM files are encrypted with custom algorithm (substitution cipher). Special 256-bytes key is needed for decryption. Key starts with string "mr8".
  
 
=== Decryption algorithm ===  
 
=== Decryption algorithm ===  
Line 53: Line 91:
 
[[Category:File Format]]
 
[[Category:File Format]]
 
[[Category:Custom encryption]]
 
[[Category:Custom encryption]]
 +
[[Category:Substitution cipher]]

Latest revision as of 16:19, 18 December 2020

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