Я в хд для эры заменил способ выхода из битвы на другой (разработан он был давно).
Без низкоуровневой магии с регистрами и джампами.
Для каждого окна (опции битвы, битва, окно приключений) оконная процедура (процедура менеджера в случае битвы и приключений) возвращает стандартный код завершения,
так же как это происходит в оригинале.
Опции битвы:
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);
не проблема. Но я думал, что изменение способа выхода из битвы сделает это не нужным.