Current time: 25.11.2024, 11:21 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Kocmodecaht Offline

Posts: 18
Post: #106

Берсеркер будут ли новые города в ере? 1.9? и еще я тебя спросить хотел можно ли скачать с интернета вог 3.59 там написано на одном сайте то что он типо вышел скачивайте я подозреваю что там вирус вышел ли поправде вог 3.59?
15.07.2011 20:28
Find all posts by this user Quote this message in a reply
Kocmodecaht Offline

Posts: 18
Post: #107

Берсеркер дай ссыль на город кремль если он вышел или на город рощу если он тоже вышел

Заранее спасибо)
(This post was last modified: 15.07.2011 20:38 by Kocmodecaht.)
15.07.2011 20:37
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #108

Нет. Нет.

Плагин на С++
Code:
#include <windows.h>
#include "Era.cpp"
    
#define ADV_MAP   37
#define CTRL_LMB  4
#define LMB_PUSH  12
#define ERROR_SET 1

_stdcall void OnAdventureMapLeftMouseClick (PEvent Event)
{
  ExecErmCmd("CM:I?y1 F?y2 S?y3;");
  if ((y[1] == ADV_MAP) && (y[2] == CTRL_LMB) && (y[3] == LMB_PUSH))
  {
    ExecErmCmd("CM:R0 P?y1/?y2/?y3;");
    ExecErmCmd("UN:Ey1/y2/y3;");
    if (f[1])
    {
      ExecErmCmd("UN:Oy1/y2/y3/1;");
      ExecErmCmd("IF:L^{~red}Object was deleted!{~}^;");
    }
  }
}

extern "C" __declspec(dllexport) BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID lpReserved)
{
  if (reason == DLL_PROCESS_ATTACH)
  {
    DisableThreadLibraryCalls(hInst);
    ConnectEra();
    RegisterHandler(OnAdventureMapLeftMouseClick, "OnAdventureMapLeftMouseClick");
  }
  return TRUE;
};


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.07.2011 20:57
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #109

Глянул подгрузку лодов в Иде. Всё понятно. Своя таблица вместо отдельных адресов и замена xref на конкретные лоды смещениями в таблице. Просто и надёжно.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.07.2011 21:31
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #110

Почти все смещения можно изменить подменой адреса. Перехватчики не нужны там.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.07.2011 22:04
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 624
Post: #111

Вот есть функции, которые возвращают double (соответственно, не в eax, а в st0). Результат их выполнения через SN:E и v1 не получить ведь - можно это поправить?

Вариант правки - расширить второй параметр в SN:E (4 - pascal, возвращающий дабл, 5 - такой же stdcall ,..)
16.07.2011 01:52
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #112

Как оказалось, Сав несколько переусложнил задачу. К счастью, ЗВС уже внёс более 50 правок, корректирую смещения на новую таблицу архивов (размер: 100) и индексов (по типам лодов). Таким образом задача гораздо проще, чем кажется и основной код не связан с Героями. Завёл целый модуль, но набралось только 88 строк )
В общем со второго раза запустилась автозагрузка, тестирую.

Quote:Вот есть функции, которые возвращают double (соответственно, не в eax, а в st0). Результат их выполнения через SN:E и v1 не получить ведь - можно это поправить?
Вариант правки - расширить второй параметр в SN:E (4 - pascal, возвращающий дабл, 5 - такой же stdcall ,..)
Что ж это за функции? В Винапи есть примеры? Первый раз слышу о возврате через регистры сопроцессора. Может быть EAX:EDX?
Вариант приемлимый.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
16.07.2011 04:02
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #113

Всё хорошо. Добавил проверку на нормальное расширение файла и на его тип (нельзя загрузить каталог, будет ошибка менеджера ресурсов). Файлы сортируются по имени. Чтобы грузиться позже, нужно лишь иметь имя нужное. Ограничений на длину имён нет.

Саву и ZVS идёт +.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
16.07.2011 04:27
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 624
Post: #114

Quote:Что ж это за функции?
Да хотя бы героевские функции типа double __thiscall sub_4E3F40(int this, char a2) - определение процентовки некромантии.

Правда, как плавающую 64-битную точку через v1 возвращать? Только если писать в v1:v2 и предоставлять переходники типа "вернуть значение, умноженное на n и округленное до целого".

Quote:Первый раз слышу о возврате через регистры сопроцессора.
http://progclub.ru/?p=1596
(This post was last modified: 16.07.2011 08:53 by feanor.)
16.07.2011 07:30
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #115

Я могу возвращать её обрезанной до single в e1.
Либо в e1:e2. Ну и тут же вопрос, а как такие параметры типа double/extended/word/whatsoever использовать самому в командах?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
16.07.2011 14:52
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 624
Post: #116

Quote:Я могу возвращать её обрезанной до single
а как, кстати, отличать, когда возвращается сингл, а когда - дабл?
16.07.2011 15:02
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #117

Мне кажется, что в Героях используется исключительно 32-бит float. Просто не вижу причин для использования двойной точности.
Да и ERM работает, насколько я знаю, только с числами с плавающей точкой одинарной точности.

Пока не доказано обратное, можно считать, что сингл. Sm
(This post was last modified: 16.07.2011 17:43 by etoprostoya.)
16.07.2011 17:42
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #118

Да, ЕРМ с Single работает. Уже понял, что double значительно отличается от single, а значит авто-определения быть не может. Так что если кто точно скажет, с каким форматом работает игра, мне будет проще.

FLD [DWORD EBP-4]
Функция некромансии возвращает single.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
16.07.2011 18:02
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #119

Quote:в Героях используется исключительно 32-бит float
ничего опровергающего это утверждение в коде игры не встречал.
16.07.2011 18:24
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #120

Сопроцессор меняет float и double при вызове функции uint32 _control87(uint32 new, uint32 mask). Думаю, Ида её легко найдёт и вызовов этой функции будет мало - один, скорее всего.
Проверить можно с помощью uint32 _status87(void). Результат по маске _MCW_PC и сравнить с нужным битом (53 бита - double, 24 бита - float)
Code:
#define _MCW_PC         0x00030000              /* Precision Control */
#define _PC_64          0x00000000              /*    64 bits */
#define _PC_53          0x00010000              /*    53 bits */
#define _PC_24          0x00020000              /*    24 bits */
16.07.2011 18:37
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group