*******************************************************************************
* WarCraft III Replay ʽ                                            *
*                                                                             *
* ĵ汾        : 0.98                                                      *
* ĵ        : 2004-07-28                                                *
* ĵ        : blue, nagger, soar(0.98 & )                           *
*                                                                             *
* w3gļʽϢ, :                                              *
*   http://warcraft.kliegman.com                                              *
* ۵̳:                                                           *
*   http://shadowflare.gameproc.com                                           *
* ʼϵ:                                                               *
*   mailto:w3g_format@nagger.net                                              *
*                                                                             *
*******************************************************************************

===============================================================================
Ŀ¼
===============================================================================
  1.0 
      1.1 APM 淶
  2.0  ID 
  3.0 ܱ־
  4.0 λ ID
      4.1 ַ ID
      4.2  ID
  5.0 Ϸ
  6.0 
  7.0 ۺϲ˵
  8.0 ϰ汾˵
  9.0 л
 10.0 ĵʷ


===============================================================================
 (Ķ ...)
===============================================================================

ĵеϢͨоreplayļͲ²һЩݵ˼õ. 
֪ʶĶնǻϷеľ. ûʹκη, Ҳû޸κ
Ȩļ. ȷֹĵеϢκηǷΪ, Hack, ׻
. лBlizzardΰϷԼֱ׶Warcraft III replayļʽ ;-)

Ĺǰ, ޳ʹñĵṩϢ
Ըһڲ޸ĵǰ¸Ʊĵ(뽫ӵʼ -
 ϣԱּи)
ϣõĵṩϢܰǷcredits, Ƿһ
ʼ, Ϊ֪ĵŬļֵ ;-)


===============================================================================
1.0 
===============================================================================

ĵ replay ʱ( 'w3g_format.txt'  5 )Ķʽ :

0x1F       - ʱ (Ϊ 0x1E)
  1 word   - n = ֽ
  1 word   - ʱ (λ: )
               battle.net ϷԼ 250 
              ھ͵ϷԼ 100 
  n-2 byte - / ( n = 2 򲻴)

ʱŹжÿйҶٴһ.

ʽ:
  1 byte  - ұ
  1 word  - С
  n byte  -  (ܰ)

:
  1 byte  - ID ( 2.0)
  n byte  -  ( 2.0)

˵:
  o ÿĶֻͨĳõ.
  o 'ʱ'  fastest ٶ¼.
  o ۼǰе 'ʱ' õǰʱ.

TODO:  /ͨ ٶµʱ


===============================================================================
1.1 APM 淶
===============================================================================

òֶ Actions-Per-Minute(APM, ÿӶ) Ĺ淶.
ϣͨʹڻԺ Replay ߷ APM . 
ʹñ淶 :D

ҪΪһȽʵֵ㷨.  Replay ߵļ㽫.

:
 o ֻϷеĶ (СͼϷͱ־  Ϣ).
 o ÿӦñĶÿζֻһ.
 o ˳ȥκҵĶ.
 o APM = Ҷ / Ϸʱ䳤(λ: )

2.0 жıⶼ·űʶ:
 [APM+] = ҪĶ.
 [APM?] = ⶯, Ķö APM ˵ (0x16, 0x19).
 [APM-] = ҪĶ.

ע ͣ/ ȷϷʱ:
 ͣϷ ( 0x01):
   o ֹͣʱ䵱(ж).
   o ͣϷ.
   o ͣʱĶȻҪ(Ȼ APM 淶).
 Ϸ ( 0x02):
   o ʱ䵱(ж)
   o Ϸ.

淶²֮:
 o  ESC ȡеĵλ/ᱻ 2 
   ( 0x61 +  0x10 : λID=0x08000D00).
 o СͼźŶ. Сͼź APM ֵ.
 o  1.14b Ժ 'Tab' лӷĶ¼.
   (1.14b ֮ǰĹӷһ.)

ʵЩϸ΢Ķ APM Ӱ첻, ÿӽһĶ, Ҳֻ
ǽ APM  1.

˵:
 o 㿪Լ APM ϵͳ(˵һЩ), 벻Ҫ֮Ϊ APM, 
    TrueAPM, RealAPM, myAPM, UserAPM .


===============================================================================
2.0  ID 
===============================================================================

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x01 - ͣϷ                                               [ 1 byte ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o  lag ܻжͣͼϷĶ, ǲ. һ
    Ϸ, ǰжٸͣϷĶ.

  o ͣͼϷĶܻ֮(緢СͼϢԼͣϷ
    ǰеĵӳٵͣϷĶ)

  o replay ĳ(ʱ)ͣϷڼ侭ʱ

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x02 - Ϸ                                               [ 1 byte ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ͣϷĲ˵


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x03 - ϷϷٶ(ͨѡ˵)                   [ 2 byte ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - Ϸٶ:
            0x00 - 
            0x01 - ͨ
            0x02 - 

 ˵:
  o ʱ ( 1.0) ֻٶΪʱŻȷ.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x04 - ϷϷٶ(Num+)                           [ 1 byte ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ʱ ( 1.0) ֻٶΪʱŻȷ.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x05 - ϷнϷٶ(Num-)                           [ 1 byte ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ʱ ( 1.0) ֻٶΪʱŻȷ.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x06 - Ϸ                                              [ n bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 n bytes - Ϸ (nullβַ)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x07 - Ϸ                                          [ 5 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪ ( 0x00000001)

 ҼΪϷ, һڶ 0x06 .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x10 - λ/ (޸Ӳ)                           [ 15 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 word  - ܱ־ ( 3 ) (汾С < 1.13ʱΪ 'byte')

 1 dword - ID ( 4 )

 1 dword - δ֪A (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)
 1 dword - δ֪B (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)

 ˵:
  o 汾 1.07 ǰ replay ¼ֻ 6 bytes.
  o 汾 1.13 ǰ replay ܱ־ֻһֽ˸ö¼ֻ 14 bytes.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x11 - λ/ (Ŀ)                       [ 23 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 word  - ܱ־ ( 3 ) (汾С < 1.13ʱΪ 'byte')

 1 dword - ID ( 4 )

 1 dword - δ֪A (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)
 1 dword - δ֪B (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)

 1 dword - Ŀ X
 1 dword - Ŀ Y

 ˵:
  o 汾 1.07 ǰ replay ¼ֻ 14 bytes.
  o 汾 1.13 ǰ replay ܱ־ֻһֽ˸ö¼ֻ 22 bytes.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x12 - λ/ (ĿĿID)               [ 31 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 word  - ܱ־ ( 3 ) (汾С < 1.13ʱΪ 'byte')

 1 dword - ID ( 4 )

 1 dword - δ֪A (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)
 1 dword - δ֪B (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)

 1 dword - Ŀ X
 1 dword - Ŀ Y

 1 dword - 1
 1 dword - 2

 1 == 2 == FF FF FF FF ʾĿ (罫·ڵĳ)

 ˵:
  o 汾 1.07 ǰ replay ¼ֻ 22 bytes.
  o 汾 1.13 ǰ replay ܱ־ֻһֽ˸ö¼ֻ 30 bytes.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x13 - Ʒ/Ʒ(Ŀ2ĿID)         [ 39 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 word  - ܱ־ ( 3 ) (汾С < 1.13ʱΪ 'byte')

 1 dword - ID ( 4 )

 1 dword - δ֪A (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)
 1 dword - δ֪B (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)

 1 dword - Ŀ X
 1 dword - Ŀ Y

 1 dword - 1
 1 dword - 2

 1 dword - ƷID1
 1 dword - ƷID2

 ˵:
  o 汾 1.07 ǰ replay ¼ֻ 30 bytes.
  o 汾 1.13 ǰ replay ܱ־ֻһֽ˸ö¼ֻ 38 bytes.
  o ǶڵĿID 1  2  0xFFFFFFFF

 : һѪƿڵ
   13
   40 00
   21 00 0D 00
   FF FF FF FF
   FF FF FF FF
   5B 10 58 C3
   97 CE 1B 44
   FF FF FF FF
   FF FF FF FF
   11 2D 00 00
   D3 96 00 00


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x14 - λ/ (2Ŀ2ID)             [ 44 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 word  - ܱ־ ( 3 ) (汾С < 1.13ʱΪ 'byte')

 1 dword - ID A ( 4 )

 1 dword - δ֪A (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)
 1 dword - δ֪B (0xFFFFFFFF) (ֻڰ汾 >= 1.07Ϸг)

 1 dword - ĿA X
 1 dword - ĿA Y

 1 dword - ID B ( 4 )

 9 byte  - δ֪

 1 dword - ĿB X
 1 dword - ĿB Y

 ˵:
  o 汾 1.07 ǰ replay ¼ֻ 35 bytes.
  o 汾 1.13 ǰ replay ܱ־ֻһֽ˸ö¼ֻ 43 bytes.

 (汾 1.06):

  (human Ҽһ (ֱӿѡ))
   Felwood:
   14 00 03000D00 000024C5 0000B844 72745443 40 00100100 000000FF 000024C5 0000B844
    .  .  . . . .  . . $ .  . . . D  r t T C  @  . . . .  . . . .  . . $ .  . . . D

   Lordaeron Summer:
   14 00 03000D00 0000D8C4 00005044 746C544C 40 00100100 000000FF 0000D8C4 00005044
    .  .  . . . .  . . . .  . . P D  t l T L  @  . . . .  . . . .  . . . .  . . P D

   Village-Autumn:
   14 00 03000D00 000070C4 00007044 77745446 40 00100100 000000FF 000070C4 00007044
    .  .  . . . .  . . p .  . . p D  w t T F  @  . . . .  . . . .  . . p .  . . p D

   Dungeon:
   14 00 03000D00 0000A0C3 00009844 68735444 40 00100100 000000FF 0000A0C3 00009844
    .  .  . . . .  . . . .  . . . D  h s T D  @  . . . .  . . . .  . . . .  . . . D

  (Ҽ)[==]
   14 00 03000D00 0000D845 000000C6 6C6F676E 08 00A05500 0000000F 0000D845 000000C6
    .  .  . . . .  . . . E  . . . .  l o g n  .  . . U .  . . . .  . . . E  . . . .

   14 00 03000D00 0000C0C4 00001BC6 77745442 40 00100100 000000FF 0000C0C4 00001BC6
    .  .  . . . .  . . . .  . . . .  w t T B  @  . . . .  . . . .  . . . .  . . . .

   14 00 03000D00 00008845 0000BE45 746C544C 40 00100100 000000FF 00008845 0000BE45
    .  .  . . . .  . . . E  . . . E  t l T L  @  . . . .  . . . .  . . . E  . . . E

   14 00 03000D00 00004AC5 0000C3C5 65746165 08 00905908 00000001 00004AC5 0000C3C5
    .  .  . . . .  . . J .  . . . .  e t a e  .  . . Y .  . . . .  . . J .  . . . .

   14 00 03000D00 000080C4 0000D845 6C6F6775 08 0090590A 00000001 000080C4 0000D845
    .  .  . . . .  . . . .  . . . E  l o g u  .  . . Y .  . . . .  . . . .  . . . E

  ()[!=]
   14 18 0F000D00 BA387FC3 2C6F6FC5 746C544C 40 00100100 000000FF 0000A0C3 000074C5
    .  .  . . . .  . 8  .  , o o .  t l T L  @  . . . .  . . . .  . . . .  . . t .

  (undead ɿ)[==]
   14 04 6C6F6775 0000F044 00002C45 6C6F676E 08 00A05500 0000000F 0000F044 00002C45
    .  .  l o g u  . . . D  . . , E  l o g n  .  . . U .  . . . .  . . . D  . . , E"


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x16 - ı䵱ǰѡλ (λ, , )               [ 4+n*8 bytes ] [APM?]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ѡģʽ:
            0x01 - ӵǰѡ      (ѡ)
            0x02 - ӵǰѡƳ      (Ƴ)
 1 word  - λ/ (n)

 ظ n :
   1 dword - 1
   1 dword - 2

  (1 == 2, Ϊʼ ?)

 ˵:
  o ѡһЩµĵλ, ô replay ¼Ϊ 'Ƴλ' (16 02) Ƴ
    ԭѡĵλ, Ȼ 'ӵλ' (16 01) ѡĵλ.

 APM ˵:
  o ÿö ('ѡ'  'Ƴ') Ϊ [APM+], :
  o ͬһеĽ 'Ƴ'  'ѡ' .
    ɺܼ, Ĳ˵, ѡµĵλ¼Ϊ 2 , Ҫֻ
    Ϊһ.
  o α㷨:

      FOREACH TimeSlot-block DO
        ...

        FOREACH CommandData-block DO
          id = ReadPlayerID()
          LastActionWasDeselect = FALSE;
          ...

          FOREACH Action-block DO
            actionid = ReadActionID()
            ...
            IF (actionid == 0x16) THEN
              IF (selectMode == deselect) THEN
                countThisActionAsAPM()
                LastActionWasDeselect = TRUE;
              ELSE
                IF (!LastActionWasDeselect) THEN countThisActionAsAPM()
                LastActionWasDeselect = FALSE;
              ENDIF
            ELSE
              LastActionWasDeselect = FALSE;
            ENDIF
            ...
          ENDFOREACH
          ...
        ENDFOREACH
        ...
      ENDFOREACH


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x17 -                                               [ 4+n*8 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ӱ (0-9)
              0 - 9 Ӧϵļ '1', '2', ...., '9', '0'
 1 word  - ĵλ

 ظ n :
   1 dword - λID1
   1 dword - λID2

 ˵:
  o shift-[1..0]ӵλʱ, Ȼñϲıӵλб
    .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x18 - ѡ                                              [ 3 bytes ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ӱ (0-9)
              0 - 9 Ӧϵļ '1', '2', ...., '9', '0'
 1 byte  - δ֪  ( 0x03)

 ˵:
  o ѡһµıǰû 'Ƴ' (0x16 02) Ƴǰѡĵλ.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x19 - ѡӷ (ֻڰ汾 < 1.14bϷ)             [ 2 bytes ] [APM?]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ӷ (0-11, 0xFF)

 ˵:
  o ֻڰ汾 < 1.14bϷ (֮İ汾˶ 0x1A).

  o һѡӷĶ: 0x19 0xFF
    һԶɵĲ, ˼"ӷ" (, ٻĵλʧ
    еλ̬仯).

  o  'ѡӷ 0' Ķ (0x19 00) Զɵ (, ѡһЩ
    λʱԶѡһӷ).

  o 1.13/1.14a  replay  'ѡӷ' Զɵ. Ŀǰ޷ȷ
    ,  1.13/1.14a  (TODO: ԭ?)

 APM ˵:
  o ֻӷŲΪ 0x00  0xFF ĸö.

  o ͬһеĽ 'ӷ'(0x19 FF) ĸö.
    (μ 0x16 α㷨.)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1A - ѡӷ (汾 >= 1.14b)                       [ 2 / 14 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ־ ( 01-12, 22, 25, 26, 34)

 ־ == 25 (0x19):
   1 dword - λID ( 4 )
   1 dword - 1 ( 5 )
   1 dword - 2

 ˵:
  o ־Ϊ 25 (0x19) ôΪ 14 bytes , ֻ 2 bytes .

  o λID   ѡӷĵһλ
    ڽλID   Ӧ!

  o еĸöԶɵ.

 TODO:
  o ҳ־ĺ.
  o Ϊʲôֳ?
  o ҵжϸöǷԶɵ㷨.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1B - δ֪                                                 [ 10 bytes ] [APM-]
0x1A 汾 < 1.14b
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - δ֪ ( 0x01)
 1 dword - δ֪ (1?)
 1 dword - δ֪ (2?)

 ˵:
  o ֻг, ҲһЩ Trigger ص


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1C - ѡϵƷ                                       [ 10 bytes ] [APM+]
0x1B 汾 < 1.14b
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - δ֪ (־?  0x04)
 1 dword - 1
 1 dword - 2

 ˵:
  o ʾһϵƷ (ѡ֮).

  o 汾 < 1.14b ʱ, ǰһ'Ƴ' (0x16 02) 'ӷ'(0x19 FF)
    .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1D - ȡӢ۸                                          [ 9 bytes ] [APM+]
0x1C 汾 < 1.14b
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - 1 (һӢ)
 1 dword - 2 (һӢ)

 ˵:
  o ֻھ/Ϸг.

  o öÿȡӢ۸ʱ - ǲڶӢ.

  o 汾 < 1.14b ʱ, ǰһ'Ƴ' (0x16 02) 'ӷ'(0x19 FF)
    .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1E - ӽƳλ                                    [ 6 bytes ] [APM+]
0x1D 汾 < 1.14b
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  -  (0 = ǰĵλ,
                     1 = һλ,
                     2 = ڶλ,
                     ...
                     6 = һλ)
 1 dword - λID (ȡĵλID)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x21 - δ֪                                                  [ 9 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪ [A] (0x000064F0)
 1 dword - δ֪ [B] (0x000064F0)

 ˵:
  o ǳǳټ.
  o  1.04/1.05  replay з.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x20, 0x22-0x32 - Ϸ                               [ * bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    |    | Ӧ               | 
 -------+--------+--------------------------+-------------------------------
  0x20  | 1 Byte | TheDudeAbides            | ٹ
  0x22  | 1 Byte | SomebodySetUpUsTheBomb   | ֱʧ
  0x23  | 1 Byte | WarpTen                  | ٽ
  0x24  | 1 Byte | IocainePowder            | ٵ
  0x25  | 1 Byte | PointBreak               | ˿
  0x26  | 1 Byte | WhosYourDaddy            | ģʽ
  0x27  | 6 Byte | KeyserSoze [amount]      | õ X ƽ
  0x28  | 6 Byte | LeafitToMe [amount]      | õ X ľ
  0x29  | 1 Byte | ThereIsNoSpoon           | ޷
  0x2A  | 1 Byte | StrengthAndHonor         | ʧ
  0x2B  | 1 Byte | itvexesme                | ֹʤ
  0x2C  | 1 Byte | WhoIsJohnGalt            | пƼ
  0x2D  | 6 Byte | GreedIsGood [amount]     | õ X ƽľ
  0x2E  | 5 Byte | DayLightSavings [time]   | 趨Ϸеǰʱ
  0x2F  | 1 Byte | ISeeDeadPeople           | Ƶս
  0x30  | 1 Byte | Synergy                  | ȡƼҪ
  0x31  | 1 Byte | SharpAndShiny            | о
  0x32  | 1 Byte | AllYourBaseAreBelongToUs | ֱʤ
        |        |                          |
  ?     |        | Motherland [race][level] | ָ

 Ӳ:
  o  0x27,0x28,0x2D:  Դ
     1 byte  - δ֪ ( 0xFF)
     1 dword - (з) Դ

  o  0x2E: 趨Ϸеǰʱ
     1 float - ʱ (IEEE ȸ, 4 Bytes)

 ˵:
  o  0x21  (һ).
  o  "TenthLevelTaurenChieftain" (ı䱳)  replay ﲻ¼.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x50 - ıѡ                                          [ 6 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - ͨ (0-11)(ԿƵ)
 1 dword - λ־
             λ 0-4 - ȫΪ 1 (0x1F)
             λ 5   - ҰΪ 1 (0x20)
             λ 6   - λΪ 1 (0x40)
             λ 10  - ѡ"ʤ"Ϊ 1 (0x0400)
                      (ڰ汾 >= 1.07, μ˵)

 ˵:
  o ûгλʹ (0).

  o Ĳӳ˽ѡ״̬.

  o ÿıѡҶһö.

  o ı "ʤ" ѡ¶ÿһθö(Ƿ).

  o 汾 <= 1.06Ϸ "ʤ" ѡ λ 9 (0x0200) .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x51 - Դ                                             [ 10 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - Ŀͨ (0-11)(ԿƵ)
 1 dword - Ļƽ
 1 dword - ľ

 ˵:
  o Դҵ¶ÿĿҶһö.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x60 - ͼ trigger Ϣ (?)                                 [ n bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪A
 1 dword - δ֪B
 n bytes - null βַ (Ϣݻ trigger )

 ˵:
  o  δ֪A == δ֪B


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x61 -  ESC                                             [ 1 byte ] [APM+]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ͨȡ/ѵǰ( ESC ȡ).

  o ʱöҲ(簴 ESC 뿪Ӣ۵ 'ѡ' ˵).


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x62 -  Trigger                                         [ 13 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪ [A]
 1 dword - δ֪ [B]
 1 dword - δ֪ () (ֻڰ汾 >= 1.07Ϸ)

 ˵:
  o  A == B.

  o ҲԶͼtimer triggerͬ.

  o ڹٷͼazure towerе dword ֵÿ 1.

  o ֵڰ汾 <= 1.06Ϸв

  o 1.07 ǰ replay ֻ 9 bytes.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x66 - ѡӢۼܲ˵                                   [ 1 byte ] [APM+]
0x65 汾 <= 1.06
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ѡһӢ۲ 'ѡ' ˵ǽиö. ۸ӢǷм
    ɹ.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x67 - 뽨˵                                           [ 1 byte ] [APM+]
0x66 汾 <= 1.06
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ޸

 ˵:
  o ѡһũ񲢽 'ѡ' ˵ǽиö. ǷĽһ
    .

  o ͨŽ춯 (0x11)  ESC  (0x61).


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x68 - СͼϢ (ping)                                [ 13 bytes ] [APM-]
0x67 汾 <= 1.06
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - λ X
 1 dword - λ Y
 1 dword - δ֪ (00 00 A0 40)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x69 - Ϸ (B)                                       [ 17 bytes ] [APM-]
0x68 汾 <= 1.06
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪ [C]
 1 dword - δ֪ [D]
 1 dword - δ֪ [A]
 1 dword - δ֪ [B]

 ˵:
  o ʤһѡϷʱǽиö.

  o Ǻ 0x6A һ ().


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x6A - Ϸ (A)                                       [ 17 bytes ] [APM-]
0x69 汾 <= 1.06
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 dword - δ֪ [A]
 1 dword - δ֪ [B]
 1 dword - δ֪ [C]
 1 dword - δ֪ [D]

 ˵:
  o ʤһѡϷʱǽиö.

  o ֻ¼ replay ߵĸö, ¼Ϊ '뿪Ϸ' .

  o ǸŶ 0x69, Ϊ [C][D][A][B].

  o  [A][B] ȥͶ 0x62 .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x75 - δ֪                                                 [ 2 bytes ] [APM-]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 1 byte  - δ֪

 ˵:
  o ֻг, Ҳһ Trigger ص


===============================================================================
3.0 ܱ־
===============================================================================

ܱ־ʾһĸ.
: λ 0 Ϊ 1 ʾö(ס shift еĲ).

ȻϷԶһЩλΪ 1, ʹҲûаؼ(ӷ־).

ñ־ 1.12 ֮ǰǵֽ(BYTE). 1.13 Ϊ˫ֽ(WORD).
־λֵ

  0x0001 -  (ס shift)
  0x0002 - ? (ӷĵλ ?)
  0x0004 - ? (Ч ?)
  0x0008 -  (еǰѡĵλ)
  0x0010 - ƶ (رλס alt )
  0x0020 - ?
  0x0040 - ס ctrl  (ӷ)
         ʱԶ
         ( ѡеһũҼȥɿ)

 1.13 :
  0x0100 - /رԶͷ


:
  0x42 - ҼƷһƷ
  0x44 - ʹü (, ʩħȵ)
  0x48 - ס ctrl ָһ鵥λ

  0x44 - СԱ (Ч ?)
  0x4C - ʹ÷Ȩ (ЧƷ ?)
  0x00 - / (Stop, Hold, uproot, Mirror Image ȵ)
  0x40 - ѵλ/оƼ/
  0x42 - ʹ⼼ (ı˵λ״̬ ???)
         (Ӣۼ, HUMAN: call to arms)
  0x44 - ٻ (ٻλѵӢ)

TODO: о֤


===============================================================================
4.0 λ ID
===============================================================================

ֵλ ID - ַͺ
 o Ͷ 4 ֽڳ.
 o ַ ID  4 Ӣĸ.
 o  ID Ϊʽ: ?? ?? 0D 00 (DWORDΪ0x0D????)


===============================================================================
4.1 ַ ID
===============================================================================

ַ ID :
 o 콨
 o  (ص2, 3, )
 o ѵλ/Ӣ
 o Ӣѧϰ
 o о/Ƽ
 o Ʒ/Ӷ/Ӣ

ַ ID  4 Ӣĸ, һһ λ/Ӣ/Ʒ/ д.

Blizzard  ID һЩԼ:
λĸ(ڴһĸ, little endianַǵһĸ)ĺ:
     'A' - Ӣۼ

     'e' - Night Elf λ
     'E' - Night Elf Ӣ

     'h' - Human λ
     'H' - Human Ӣ

     'o' - Orc λ
     'O' - Orc Ӣ

     'R' - /Ƽ

     'u' - Undead λ
     'U' - Undead Ӣ

Ӣۼ ('A') һĸӦ (E=elf,H=human,O=orc,U=undead,N=neutral/others).
Ƽ ('R') һĸӦ (e=elf,h=human,o=orc,u=undead,n=neutral/others).

̵Ʒ͹ӶԼ.

ַ ID ļҵ
  "war3.mpq/Scripts/common.ai"    (λ & )
  "war3.mpq/Units/*Strings.txt"   (λ, , /Ƽ, Ʒ)

Ϣ (Ǯĵ) ļ "war3.mpq/Units/*.slk".

һЩַ ID ľ:

             ewsp - Elf Wisp
             esen - Elf Huntress (Sentinel?)
             etoa - Elf tree of ages (tier2)
             Resm - Research Elf Melee Attack+1
             opeo - Orc peon
             ostr - Orc stronghold (tier2)
             uaco - UD acolyte
             AOsf - Ability Orc: shadow wolves
             AOmi - Ability Orc: mirror image
             Obla - Orc Blademaster
             Ofar - Orc Farseer
             Otch - Orc Tauren Chieftain
             wneg - wand of negation (WON)
             gemt - gem of true seeing
             edob - Elf huntress hall
             emow - Elf moon well
             oalt - Orc altar
             otrb - Orc burrow
             usep - UD crypt
             uzig - UD ziggurat


===============================================================================
4.2  ID
===============================================================================

 ID ֻڼ/ħʹ.
( Ӣħ, λħ, Զͷſ/)

 o  ID Ϊʽ: ?? ?? 0D 00 (DWORDΪ0x0D????)
 o  ID Ӧһָ(order), ͨһ/ħӦһָ, ÿ
   ħӦָڵͼ༭༭ͼʱǿ޸ĵ, ͼ༭ĵλ
   

ǲ ID Ӧָ(order)б:

            03 00 0D 00 - smart (Ҽ)
            04 00 0D 00 - stop

            08 00 0D 00 - cancel (ȡ, ѵ, о)

            0C 00 0D 00 - setrally (·)

            0F 00 0D 00 - attack
            10 00 0D 00 - attackground ( Orc Catapult)                     [11-40-ID-ClickX/Y]

            12 00 0D 00 - move

            16 00 0D 00 - patrol

            19 00 0D 00 - holdposition

            - - - - - -
            21 00 0D 00 - Ʒ (һλڵ)    [13-40-ID-ClickX/Y-UnitID-ItemID]
            - - - - - -
            22 00 0D 00 - Ʒλ 7
            23 00 0D 00 - Ʒλ 8
            24 00 0D 00 - Ʒλ 4
            25 00 0D 00 - Ʒλ 5
            26 00 0D 00 - Ʒλ 1
            27 00 0D 00 - Ʒλ 2
            - - - - - -
            28 00 0D 00 - ʹƷλ 7
            29 00 0D 00 - ʹƷλ 8
            2A 00 0D 00 - ʹƷλ 4
            2B 00 0D 00 - ʹƷλ 5
            2C 00 0D 00 - ʹƷλ 1
            2D 00 0D 00 - ʹƷλ 2
            - - - - - -
            * 21 - 2D ָΪ, 

            38 00 0D 00 - repair              (HU peasant, Orc peon)           [12-40-ID-ClickX/Y-UnitID]
            39 00 0D 00 - repairon            (HU peasant, Orc peon)           [10-42-ID]
            3A 00 0D 00 - repairoff           (HU peasant, Orc peon)           [10-42-ID]
            - - - - - -
            3B 00 0D 00 - revive hero (first  of 1 or more dead heros)         [12-44-ID-ClickX/Y-UnitID]
            3C 00 0D 00 - revive hero (second of 2 or more dead heros)         [12-44-ID-ClickX/Y-UnitID]
            3D 00 0D 00 - revive hero (third  of 3 or more dead heros)         [12-44-ID-ClickX/Y-UnitID]
            3E 00 0D 00 - revive hero (fourth of 4 or more dead heros)         [12-44-ID-ClickX/Y-UnitID]
            3F 00 0D 00 - revive hero (fifth  of 5 dead heros)                 [12-44-ID-ClickX/Y-UnitID]
            - - - - - -
            * 3B - 3F ָΪ, 
            ......
            ָо...


===============================================================================
5.0 Ϸ
===============================================================================

ÿϷгֹ (λ, Ӣ, Ʒ, , ٻ, ) һ
, Ϸ. ڱʾѡĵλͼͷŵĿ굥λ.
Ϸ ( replay) ʱԶµ.

Ű 2  DWORD . ʱȵ(ǶӦϷʼʱʹ
ڵ).

˵:
 o ϷŻһδо.
   (ԶҲ޷ȷ. 1.14b  0x1A ṩһЩϢ)


===============================================================================
6.0 
===============================================================================

 궼Ǳ׼ IEEE ȸ(4 bytes, ждΪ dword)
 Ӧͼ༭༭ͼʱλ.

 ˵:
  o ͼΪԭ(0, 0), X/Y᷽ͬƽֱϵ.

  o 귶ΧȡڵͼĴСͱ༭ͼʱ趨.

  o ΧΪ -16384.000  16384.000 (256x256 ĵͼ).

  o ͼĸӷ. ͼÿӴСΪ 64 * 64.


===============================================================================
7.0 ۺϲ˵
===============================================================================
 o 1.07 Ƭ, ܿ 1.10 ԭƬͳһΪͬһϷ
   (Ҳͬ replay ʽ).

 o replay ֻҵĶ, ûеԵĶ, ûѵ/Ķ, ûս
   Ķ(˺), ûϢ...

 o ܶදҼ. ЩҼϷԶҪ, 
   replay ʼΪ smart ָ.

 o ûн, ʹħ, ѵĵ. ǶǸݲĲͬ 0x10 - 0x14
   5, ǸҪͨλ ID ж.

 o Դ޷Ķ¼!

 o 1Ϳס2ཨѵλĶȫһ. ޷жм
   ˱, ȡԴ˿Ƿ㹻.

 o һڿʼһ֮ǰָı䶯Ļ, иǶ֪ͨ, ֱ
   ӳµĶ.  0x11 - 0x14 Щһһʵʩ.

 o ıɫĶ¼.

 o ѡѱѡĵλһ!

 o /ҹĸ治¼.

 o Ӿϵĸı䶯¼( ƶĻ, ո, Ctrl-Cȵ).

 o 汾 <= 1.06Ϸֻмĵͼ trigger Ϣű¼ ( 0x60).


===============================================================================
8.0 ϰ汾˵
===============================================================================
汾 1.14b ֮ǰ replay:
 o  0x1A ıӦΪ 0x19 .
 o  0x1B - 0x1E ıűȥһ (0x1A - 0x1D).

汾 1.13 ֮ǰ replay:
 o ܱ־ ( 0x10-0x14) ֻ 1 ֽ,  2 ֽ(word).
 o  0x10 - 0x14 Ҫ 1 ֽ.

汾 1.07 ֮ǰ replay:
 o ݲ¼
 o  0x10 - 0x14 ٶ 8 ֽ.
 o  0x62 Ҫ 4 ֽ.
 o һ 0x63  0x65 ֮(ûҵ). ĶŶһ.

汾 1.03 ֮ǰ replay:
 o (TODO)

Beta  replay:
 o ()


===============================================================================
9.0 л
===============================================================================

ҪлԱ replay ķṩİ(ĸ˳):

 o Jca
    -  bwchart  w3chart Ϊṩ

 o Julas
    -  1.13 ıṩİ

 o JemHadar
    - 1.13 мܱ־Сĸı

 o Kliegs
    - ṩĵCVS

 o Mike
    - ҵ 0x1C ĺ
    - ҵ 1.14b  0x1B - 0x1E ŵĸı
    - 1.14b µĶ 0x1A ˵

 o Pr1v for
    -  0x1A  0x75 ˵

 o ShadowFlare for
    - WinMPQ
    - ṩ̳

 o Soar
    -  0x62 ĸ dword ʾ

 o Ziutek for
    - Total Commander MPQ 

ҪлԱƶ APM ׼İ(Ȼĸ˳):

 o kackn00b
 o LeoLeal
 o Mike
 o MrO
 o Pr1v
 o Soar

˭, . Ҳ, © :D

===============================================================================
10.0 ĵʷ (òûмݹʲ)
===============================================================================

 o general notes
 + information added
 - information changed


 version 0.98 (2004-07-28)
 -------------------------
 2004-07-13: - changed numeric ID description from abilities to orders
 2004-07-27: - fixed size of some actions
 2004-07-28: - some tweaks


 version 0.97 (2004-01-18)
 -------------------------
 2004-01-28: - some minor additions and corrections.
 2004-01-17: + added notes on patch 1.14b in section 8
 2004-01-17: - changed action 0x1B-0x1E for patch 1.14b
 2004-01-17: + added new action 0x1A (SelectSubgroup) for patch 1.14b


 version 0.96 (2004-01-02)
 -------------------------
 2004-01-02: o release candidate 5
 2004-01-01: - changed APM algorithm for action 0x19 (SelectSubgroup)
 2004-01-01: + added patch 1.13 related note in action 0x19 (SelectSubgroup)
 2003-12-27: + added actions 0x1A and 0x75
 2003-12-25: + added notes on patch 1.13 in section 8
 2003-12-20: + added some more credits
 2003-12-18: + added more information on changed AbilityFlags value.
 2003-12-18: + added new (1.13) action 0x1C
 2003-12-17: - changed Abilityflags from 'byte' to 'word' for patch 1.13+
 2003-12-15: - fixed developer forum URL in header


 version 0.95 (2003-12-14)
 -------------------------
 2003-12-14: o release candidate 4
 2003-12-14: - various minor tweaks
 2003-12-06: - replaced term 'command' with term 'action' in many places.
 2003-12-06: - more differentiated use of the term 'select' in various places.
 2003-12-06: - renamed action 0x16 from 'Select' to 'Change Selection'.
 2003-12-06: - fixed various minor typos and grammar mistakes.
 2003-12-05: - changed APM algorithm for action 0x16


 version 0.94 (2003-12-02)
 -------------------------
 2003-12-02: o release candidate 3
 2003-12-02: - killed a lot of trailing spaces
 2003-11-11: - fixed typos and grammar at various places
 2003-10-30: + added section and notes about standardized APM
 2003-09-27: - changed note on Pause action
 2003-09-27: - changed note on ContinueGame action


 version 0.93 (2003-09-20)
 -------------------------
  o release candidate 2
  o various layout improvements
  + added coordinate information
  + added ObjectID information
  + added ItemID for 'abort divine shield'
  + added ItemID for manual use of 'Spell Steal'
  + added ItemID for 'reveal (Human arcane tower)'
  + added continue game block description
  - fixed parameter of action 0x3E (cheat 'daylightsavings')
  - fixed some errors in description of action 0x50 (ally options)
  - changed section 1 - Introduction
  - changed section 5 - ItemID
  - various minor fixes and updates


 version 0.92 (2003-07-22)
 -------------------------
  o release candidate 1
  + added actions for single player cheats
  + added data dword for action 0x62 (thx Soar)
  + added some additional notes to disclaimer
  + added many/most TFT unitIDs
  - fixed typo with size of action 0x11
  - fixed size of action 0x62 (changed in 1.07)
  - renamed mostly all 'patch 1.10' to 'patch 1.07',
    because first TFT release was 1.07 and the replays had the same structure
    as in 1.10
  o some minor layout changes


 version 0.91 (2003-07-14)
 -------------------------
  o fixed size bug of action 0x11 (thx to A. Chaschev)


 version 0.90 (2003-06-29)
 -------------------------
  o internal beta for release version


===============================================================================
Test this !
===============================================================================

Following are some internal notes for further research (partly german - sorry).

 - more menu options
 - 'CTRL' key option in game options menu
 - 0x14 command - double rightclick ?
 - AbilityFlags weiter untersuchen

Add this:
 - APM testsuite + logo

===============================================================================
End of File
===============================================================================

