Code:
//****************************************тифоновская функция копирования памяти
procedure MemCopy;
asm
       mov ecx, [esp+0Ch]
       push esi
       mov esi, [esp+08h]
       push edi
       mov edi, [esp+10h]
       mov eax, ecx
       shr ecx, 02h
       rep movsd
       mov ecx, eax
       and ecx, 3
       rep movsb
       pop edi
       pop esi
end;
//*******************************************функция загрузки структуры монстров
procedure MakeMonList;
var i:integer; a:TRSByteArray; ps1:TRSParsedString;
begin
//загрузка тифоновских бинарников и текстовиков
  if not FileExists(AppPath + 'EraPlugins\MCrEdit\MonstersSetup.mop') then
  begin
    Showmessage('MonstersSetup.mop not found. Please, re-install ERA PLUS');
    exit;
  end;
  a:=RSLoadFile(AppPath + 'EraPlugins\MCrEdit\MonstersSetup.mop');
  if not FileExists(AppPath + 'EraPlugins\MCrEdit\rus\Monsters.txt') then
  begin
    Showmessage('Monsters.txt not found. Please, re-install ERA PLUS');
    exit;
  end;
  s_names1:= RSLoadTextFile(AppPath + 'EraPlugins\MCrEdit\rus\Monsters.txt');
  if not FileExists(AppPath + 'EraPlugins\MCrEdit\rus\Plural.txt') then
  begin
    Showmessage('Plural.txt not found. Please, re-install ERA PLUS');
    exit;
  end;
  s_names2:= RSLoadTextFile(AppPath + 'EraPlugins\MCrEdit\rus\Plural.txt');
  if not FileExists(AppPath + 'EraPlugins\MCrEdit\rus\Ability.txt') then
  begin
    Showmessage('Ability.txt not found. Please, re-install ERA PLUS');
    exit;
  end;
  s_opisanie:= RSLoadTextFile(AppPath + 'EraPlugins\MCrEdit\rus\Ability.txt');
  SetLength(MonList,MaxMon+1); //выделить память под таблицу монстров
  for i:=0 to 2 do  SetLength(MonstersTables[i],MaxMon+1); //выделить память под массив массивов текстов монстров
//переписать всё в таблицу монстров
  asm
    pushad
    mov edi, DWord(a) //получить адрес буфера
    mov ebx, DWord(MonList) //получить адрес таблицы монстров
    xor esi, esi // счётчик монстров
@Typhon2Editor:
//установить город
    movsx eax, byte [esi+edi+26000]
    mov [ebx], eax
//установить уровень
    movsx eax, byte [esi+edi+25000]
    mov [ebx+4], eax
//установить озвучку
    mov eax, esi
    sal eax, 2 // умножить на 4
    add eax, esi
    lea eax, [eax+edi+16000] //посчитаем адресок
    mov [ebx+8], eax  //запишем адресок
//установить деф
    mov eax, esi
    sal eax, 4 // умножить на 16
    lea eax, [eax+edi]
    mov [ebx+12], eax
//установить флаги
    push dword [esi*4+edi+21000]
    pop dword [ebx+16]
//копировать всё остальное
    push 84 // кол-во байт для копирования
    lea eax, [ebx+32]
    push eax // приёмник
    imul eax, esi, 84
    lea eax, [eax+edi+85000]
    push eax // источник
    call MemCopy
    add esp, 12
//условия цикла
    add ebx, 116
    inc esi
    cmp esi, MaxMon
    jl @Typhon2Editor
    popad
  end;
//установить названия монстров: ед. число
  ps1:=nil;
  ps1:=RSParseString(s_names1, [#13#10]);
  for i:=0 to MaxMon do
  begin
    PStr(@MonstersTables[0][i])^:= RSGetToken(ps1,i+1);
    MonList[i].Name:= MonstersTables[0][i];
  end;
//установить названия монстров: множ. число
  ps1:=nil;
  ps1:=RSParseString(s_names2, [#13#10]);
  for i:=0 to MaxMon do
  begin
    PStr(@MonstersTables[1][i])^:= RSGetToken(ps1,i);
    MonList[i].PluralName:= MonstersTables[1][i];
  end;
//установить описания монстров
  ps1:=nil;
  ps1:=RSParseString(s_opisanie, [#13#10]);
  for i:=0 to MaxMon do
  begin
    PStr(@MonstersTables[2][i])^:= RSGetToken(ps1,i);
    MonList[i].Features:= MonstersTables[2][i];
  end;
end;
 
Да простит меня Сергей Роженко.