Я в хд для эры заменил способ выхода из битвы на другой (разработан он был давно).
Без низкоуровневой магии с регистрами и джампами.
Для каждого окна (опции битвы, битва, окно приключений) оконная процедура (процедура менеджера в случае битвы и приключений) возвращает стандартный код завершения,
так же как это происходит в оригинале.
Опции битвы:
Code:
msg->type = 512;
msg->item_id = 10;
msg->subtype = 10;
o_WndMgr->result_dlg_item_id = 30722;
return 2;
Битва:
Code:
msg->type = 0x4000;
msg->subtype = 1;
return 2;
Приключения:
Code:
msg->type = 0x4000;
msg->subtype = 1;
o_WndMgr->result_dlg_item_id = 0x66 или 0x6c или 0x6b;
DwordAt(0x697728) = 0x66 или 0x6c или 0x6b;
return 2;
То есть, после закрытия битвы, выход из окна приключений происходит в точности так, как это происходит при выходе через системные опции окна приключений.
Забыл написать об этом изменении. Но если эра при этом все-равно не узнаёт о выходе. Значит она узнаёт о выходе неправильно.
Мне добвавить вызов FireEvent('$OnGameLeave', nil, 0);
не проблема. Но я думал, что изменение способа выхода из битвы сделает это не нужным.