Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обсуждение инженерного анализа
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
hippocamus
А ерм здесь не поможет. Может ты можешь выделить эти свойства в формат опыта существ? И добавить в ерм-команду.
major
Зависимость от опыта не хочу ставить. Регенерацию и контратаку организовать не сложно с помощью ЕРМ (уже делал), а вот с облаком смерти точно не поможет. Плюс еще кое-какие абилки добавить.

2sergroj
А где находится конец секции кода? Самый простой вариант - открыл h3wog, перешел в самый конец, изменил, загрузил, - сразу вылет в бою при выстреле (что-то типа не может записать в недопустимую область памяти).
hippocamus
Цитата(major @ 07 Jul 2008, 19:44)
Зависимость от опыта не хочу ставить.


Можно поставить линию опыта, которая с самого начала имеет 100%
Я это говорю для того, чтобы подобные линии можно было давать и другим существам. Регенерация и ответки действительно есть, а вот облако... Неплохо бы сделать. И давать на высшем уровне каким-нибудь Злобоглазам..
FakerNeo
Цитата(major @ 07 Jul 2008, 19:44)
изменил, загрузил, - сразу вылет в бою при выстреле (что-то типа не может записать в недопустимую область памяти).

Видать так изменил...
major
Цитата(FakerNeo @ 08 Jul 2008, 20:40)
Видать так изменил...

Вот оригинальный код
Код
002FF990   83F8 40          CMP EAX,40
002FF993   74 12            JE SHORT 002FF9A7
002FF995   83F8 41          CMP EAX,41
002FF998   74 0D            JE SHORT 002FF9A7
002FF99A   3D C4000000      CMP EAX,0C4
002FF99F   74 06            JE SHORT 002FF9A7
002FF9A1   B8 00000000      MOV EAX,0
002FF9A6   C3               RETN

Вот так работает (но появляется баг с подземельем)
Код
002FF990   E9 13AD0100      JMP 0031A6A8
002FF995   83F8 41          CMP EAX,41
002FF998   74 0D            JE SHORT 002FF9A7
002FF99A   3D C4000000      CMP EAX,0C4
002FF99F   74 06            JE SHORT 002FF9A7
002FF9A1   B8 00000000      MOV EAX,0
002FF9A6   C3               RETN
002FF9A7   B8 41000000      MOV EAX,41
002FF9AC   C3               RETN
...
0031A6A8   83F8 08          CMP EAX,8
0031A6AB  ^0F84 F652FEFF    JE 002FF9A7
0031A6B1   83F8 09          CMP EAX,9
0031A6B4  ^0F84 ED52FEFF    JE 002FF9A7
0031A6BA   3D A9000000      CMP EAX,0A9
0031A6BF  ^0F84 E252FEFF    JE 002FF9A7
0031A6C5   83F8 40          CMP EAX,40
0031A6C8  ^0F84 D952FEFF    JE 002FF9A7
0031A6CE  ^E9 C252FEFF      JMP 002FF995

А вот гарантирован вылет
Код
002FF990   E9 DB850400      JMP 00347F70
002FF995   83F8 41          CMP EAX,41
002FF998   74 0D            JE SHORT 002FF9A7
002FF99A   3D C4000000      CMP EAX,0C4
002FF99F   74 06            JE SHORT 002FF9A7
002FF9A1   B8 00000000      MOV EAX,0
002FF9A6   C3               RETN
...
00347F70   83F8 08          CMP EAX,8
00347F73  ^0F84 2E7AFBFF    JE 002FF9A7
00347F79   83F8 09          CMP EAX,9
00347F7C  ^0F84 257AFBFF    JE 002FF9A7
00347F82   83F8 40          CMP EAX,40
00347F85  ^0F84 1C7AFBFF    JE 002FF9A7
00347F8B  ^E9 057AFBFF      JMP 002FF995

с сообщением вот такого содержания
Код
EIP = 0x007ACF70, Access Violation. Attempt to [B]read[/B] the inaccessible data at 0x00000092
FakerNeo
Ну тут нет никаких загадок. 0x007ACF70 - это твой джамп JMP 00347F70 на вроде как прописанный код. Но игра данный адрес использует для своих целей и заносит туда данные. На моей машине там dd 32 , а это равнозначно команде

007ACF70 3200 XOR AL,BYTE PTR [EAX]

где в eax у тебя хранится номер монстра стреляющего. В твоем случае - это 92, т.е. балиста. естественно обращение по этому адресу запрещено.

Короче игра затирает твой код... smile.gif
FakerNeo
Похожий случай и с подземельем
CrackedMind
уж лучше добавить еще одну секцию кода, и джамп делать ту да smile.gif
sergroj
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.
major
Цитата(sergroj @ 12 Jul 2008, 17:47)
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.

А можно делать jump в эту часть кода? Попробовал, все равно вылетает с той же ошибкой. Куда можно джампнуть? Мне и 500 байт хватило бы.
sergroj
дело не в том, куда, а в том, откуда
major
Ниче не помогает. banghead.gif

Цитата(sergroj @ 12 Jul 2008, 17:47)
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.
А что насчет диапазона 77F366 (31A366) - 780000 (31B000). Мне кажется там структура так же идет, т.е. код заканчивается на 77F366, а с 780000 идут данные. Или это мне только кажется?
sergroj
Да, скорее всего, верно. (лень проверять) Только это место находится в ВоГовской части .exe'шника и в других версиях оно по другим адресам.
major
yahoo.gif Подземелья работают!
Почему-то оказалось, что вместо

Код
000CDBA4   83F9 67          CMP ECX,67

у меня написано

Код
000CDBA4   83F9 66          CMP ECX,66

Отсюда и баг.
Все равно всем спасибо за помощь!
hippocamus
А что это? Можно также третий уровень добавить?
major
Вряд ли, просто так не работают туннели, которые связывают верхний мир с подземкой.
major
Может кто-нибудь знает, где в коде находятся проверки на тип существа при выкачивании 2 очков маны (привидения), атаку смертельным взглядом и кастование различных заклинаний, а еще на проверку иммунитета к заклам (троглодиты, элементалы). Очень, очень нужно. Никак не могу найти.
hippocamus
Ну и пусть туннели не работают. Сделать их порталами.
Я выкладывал где-то карту с 4 уровнями.

Добавлено ([mergetime]1217483315[/mergetime]):
Но при загрузке возникает ошибка.
Могу перевыложить.
FakerNeo
Цитата(major @ 31 Jul 2008, 08:03)
Может кто-нибудь знает, где в коде находятся проверки на тип существа при выкачивании 2 очков маны (привидения), атаку смертельным взглядом и кастование различных заклинаний, а еще на проверку иммунитета к заклам (троглодиты, элементалы). Очень, очень нужно. Никак не могу найти.

Есть две таблицы, которые отвечают за некоторые св-ва (а может и за все, до конца так и не проверил) св-ва монстров при атаке и при защите. 9 св-в при атаке и 9 при защите.
major
А не можешь подсказать, где они находятся? Ну или хотя бы намекнуть, как они выглядят...

2hippocamus
Т.е. карта не работает? Третий уровень прикольно, хотя и XL с подземкой за глаза хватает. Можешь выложить.
FakerNeo
Домой приду кину адреса...
FakerNeo
атака 44065C - таблица для монстров начиная с 16h монстра
защита 4412D8 - начиная с 3Fh монстра.

Но я расширял таблицу на всех монстров
major
КЛЕВО!!!
Только в 44065C находятся наложения заклинаний на монстров, а в 4412D8 - уникальные способности, как я понял.
По аналогии нашел таблицу, включающую WOG существ.
mem332AD8 - наложение заклов
mem332A4C - способности
FakerNeo
Я думал туда и Вог входят sad.gif
major
Еще нашел
mem332СС4 - таблица сопротивляемости магии существ начинается с гнома 10h
магические способности существ начинается с Архангела 0Dh почему то по трем адресам 332990, 3328D4 и 332818.
major
Осталось найти кавалерийский бонус, отсос 2 очков маны, магический канал, смертельный удар, подавление магии, ну и атаку тремя головами.
А кстати, FakerNeo, не подскажешь, как расширить таблицу существ?
hippocamus
А снижение стоимости заклов? Ауру сопротивления?
FakerNeo
Удар тремя головами - я где-то писал скрипт. Я находил данный флаг в структуре стека на поле боя. На счет таблицы не знаю. Но можно посмотреть какая часть кода выставляет данный флаг. Где скрипт - не помню.

Расширить таблицу существ - элементарно. Прописываешь свою таблицу, например в файле. Убираешь ограничение на кол-во монстров. Т.е. там где вычитается кол-во монстров (например add eax, -10h) ставишь 0.
Потом подгружаешь длл, віделяешь память для файла и копируешь в выделенный диапазон файл. Ну и из длл меняешь указатели существующие на свои (т.е. указатель на выделенную память). Меняешь во всех местах где встречаются старые указатели (в этом тебе артмани поможет, очень удобно искать). Все.
hippocamus
Эх, так убери ограничение на количество заклов, почв, уровней карты smile.gif
FakerNeo
Вот люди наивные smile.gif
hippocamus
А что? Уже сделал? wink.gif
Или слабо?
major
А как выглядят указатели, ну например, на таблицу 4412D8?
И может посмотришь про церберов с их атакой?
FakerNeo
00440914 MOV CL,BYTE PTR [EAX+4412D8]

по адресу 00440916 находится значение 4412D8 (только отображается как D81244)

Т.е. по адресу 00440916 размером dword нужно поставить свой указатель на таблицу.

Возможно указатель не один поэтому в артмани ищешь 4412D8h только в десятиричном виде и она тебе выдаст все места в памяти которые нужно заменить на свои.
major
Спасибо, очень помог! Вот еще бы помог найти, где находится смертельный удар и аура магического сопротивления...
FakerNeo
Цитата(major @ 03 Aug 2008, 12:47)
Спасибо, очень помог! Вот еще бы помог найти, где находится смертельный удар и аура магического сопротивления...

Чего не знаю, того не знаю. Смертельный удар попробуй найти через анимацию, а вот аура - посложнее будет, хотя если очень захотеть lupa.gif
major
скажите следующие два кода одинаковы или есть принципиальные отличия?

Код
002F2983   837D 08 1A       CMP DWORD PTR SS:[EBP+8],1A
002F2987   75 02            JNZ SHORT 002F298B
002F2989   EB 3D            JMP SHORT 002F29C8
002F298B   837D 08 1B       CMP DWORD PTR SS:[EBP+8],1B
...
002F29C8   B8 01000000      MOV EAX,1
002F29CD   5D               POP EBP
002F29CE   C3               RETN


Код
002F2983   837D 08 1A       CMP DWORD PTR SS:[EBP+8],1A
002F2987   74 3F            JE SHORT 002F29C8
002F2989   837D 08 1B       CMP DWORD PTR SS:[EBP+8],1B
...
002F29C8   B8 01000000      MOV EAX,1
002F29CD   5D               POP EBP
002F29CE   C3               RETN
hippocamus
Одинаковы.
JNZ и JNE это вообще одно и то же, ну а в 1-м просто перепрыгивается безусловный.
major
Ну я так и думал...

Почему любое изменение в ТЕ-шном exe ведет к такой ошибке?
Код
EIP = 0x00774678,  Access Violation. Attempt to write the inaccessible data at 0x00000001


Это типа защита что ли? Как можно это исправить?

И еще как можно поменять зависимость очередности построек в городе? Ну например, чтоб улучш. Чудища строились при наличии Цитадели? Или улучш. волчий загон не требовал улучш. казарм гоблинов?
hippocamus
Да. А ты не знал? Он защищён. Используй экзешник от Феникс-мода. Это тот же ТЕ, но с него Берсеркер снял защиту.

Добавлено ([mergetime]1221391219[/mergetime]):
major, всё это сделано уже, но не распространяется, т.к. приберегается для релизов HotA и Wog3.59 smile.gif (про очерёдность построек)
хотя, если хочешь - напиши FakerNeo, может он чем-то поможет.
Чёртос-2 (Chortos-2)
Убедительная просьба ко всем, кто владеет хоть какой-нибудь информацией, скидывать её в тему «Инженерный анализ». smile.gif
hippocamus
А что нужно сделать, чтобы добавить в окно найма существ 8-й слот?
Без Портала, в другом городе? Это возможно, или там идёт чистая проверка на город №5 и постройку №19?
Хмм..
А зачем тебе 8-й слот?
Docent Picolan
мм.. не знаю зачем он ему, но у меня появилась идея что при желании можно разместить туда того же Хранителя в HotA - будет достаточно удобно, хоть и нанимать его приходится не так часто
Хмм..
Если и можно (вероятнее всего что можно), то:
1. Что делать с порталом вызова у Данжеона
2. Разберется ли с этим AI. Иначе придется прописывать и его действия
major
как перевести дробное число 2.5 из десятичной системы в шестнадцатеричную?
Хмм..
вроде целая часть и дробная переводится отдельно

http://www.lyceum95.ru/inform/ss_drob.htm
hippocamus
Мне 8-й слот именно для того, для чего предложил Доцент. А из Портала можно нанять вручную, не надорвутся smile.gif
И это будет красивее, т.к. в портале существа часто бывают чужие, а тут все родные.

Хмм! А какая для АИ разница, сколько слотов для покупки будет в диалоговом окне??? А скупку Хранителя можно им дать автоматом.
Tamerlan
а зачем ваще ио?и как его ис?

Добавлено ([mergetime]1224496563[/mergetime]):
Цитата
Мне 8-й слот именно для того, для чего предложил Доцент. А из Портала можно нанять вручную, не надорвутся
И это будет красивее, т.к. в портале существа часто бывают чужие, а тут все родные.

Хмм! А какая для АИ разница, сколько слотов для покупки будет в диалоговом окне??? А скупку Хранителя можно им дать автоматом.

80% шанс взять родного
15% другого?
5% содовой?
major
Цитата(major @ 18 Oct 2008, 23:06)
как перевести дробное число 2.5 из десятичной системы в шестнадцатеричную?

Цитата(Хмм.. @ 18 Oct 2008, 23:40)

вроде целая часть и дробная переводится отдельно

http://www.lyceum95.ru/inform/ss_drob.htm


Точнее меня интересует, как это делается в героях.
За 3F800000 принимается единица, а как идет расчет исходя из этого?
sergroj
А, дак это в каком-нибудь языке программирования можно посмотреть - присвой single'у это значение и потом приведи указатель на число к указателю на DWORD и выведи число.
Для 2.5 будет 40200000.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.