Знали бы вы, сколько я с этим намучился, заменяя Тюрьмы... В итоге выход был найден с помощью этого кода:
Code:
; Продолжается условие нулевого дня (то есть, старт карты, а не загрузка игры)
     rvnz edi, .Нет_Тюрем_на_карте, CalculateObjects, 62, 0
     mov byte [5087805], 235; убрать обновление экрана
     – [Search_X]
   .repeat
     FindObject 62, 0, addr Search_X
     GetMapItem [Search_X], [Search_Y], [Search_L]
     GetHeroStruc [eax + MapItem.контрольное_слово]; контрольное число = номер героя в Тюрьме
     push eax
     movsx ecx, [eax+_Hero_.Хозяин]
     push ecx
     mov byte [eax+22h], Player_Pink; передаём героя последнему игроку
     KillHero eax, 1, 0
     pop eax
     pop ecx
     test eax, eax
     jl .герой_не_был_стартовым
     mov [ecx+_Hero_.Хозяин], al; устанавливаем хозяина
     imul esi, [ecx+_Hero_.Номер],5Ch
     lea edx, [esi+679DF4h]
     movlps xmm0, [edx]
     movlps qword [ecx + _Hero_.Тип_существ_в_слоте_0], xmm0
     push dword [edx+8];
     pop [ecx + _Hero_.Тип_существ_в_слоте_2]
     add esi, 7C4504h
     m2m dword [esi],[ecx + _Hero_.Количество_существ_в_слоте_0]
     m2m dword [esi+8], [ecx + _Hero_.Количество_существ_в_слоте_1]
     m2m dword [esi+10h],[ecx + _Hero_.Количество_существ_в_слоте_2]
.герой_не_был_стартовым:
; установка БМ, если специалист:
     cmp [ecx + _Hero_.Номер], HERO_Вирсавия
     jnz @f
     mov [ecx+_Hero_.Артефакт_в_слоте_Катапульты], ART_Воздушный_Шар
     jmp .дать_знамя
      @@:
     imul eax, [ecx + _Hero_.Номер], Размер_структуры_специализации_героя
     add eax, Адрес_структуры_специализаций_героев
     cmp [eax+Структура_специализации_героя.Тип_специальности], 1
     jnz @f
     cmp [eax+Структура_специализации_героя.Подтип_специальности_1], CR_Баллиста
     jnz @f
     mov [ecx+_Hero_.Артефакт_в_слоте_Баллисты], ART_Баллиста
     jmp .дать_знамя
       @@:
    .if [eax+Структура_специализации_героя.Тип_специальности] = 0 & [eax+Структура_специализации_героя.Подтип_специальности_1] = SS_Первая_Помощь
     mov [ecx+_Hero_.Артефакт_в_слоте_Палатки], ART_Санитарная_Палатка
    .endif
.дать_знамя:
     push ecx
   .if Option_Stacks_Experience & ~[Таблица_запрета_артефактов + ART_Знамя_Полководца]
     GiveArtToHero ecx, Данные_Знамени_Полководца_при_раздаче_баннеров
   .endif
; Даём начальный опыт (по правилам SoD)
     RandomNumber 40, 90
     pop ecx
     mov [ecx+_Hero_.Опыт], eax
     DeleteObject [Search_X], [Search_Y], [Search_L]
     mov eax, [Search_X]
     inc eax
     PlaceObject eax, [Search_Y], [Search_L], 20, 2, -1
     dec edi
   .until ZERO?
     mov byte [5087805], 116; вернуть обновление экрана
.Нет_Тюрем_на_карте: