IPB

Здравствуйте, гость ( Вход | Регистрация )

8 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Инженерный анализ, Reverse Engineering
feanor
сообщение 29 Jul 2010, 21:14 (Сообщение отредактировал feanor - 29 Jul 2010, 21:16)
Сообщение #61

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




Данные, как обычно, почти непроверенные и вообще извлеченные под перегревом и агрофитнессом.

49D040 - функция затемнения участка поверхности.
int __thiscall sub_49D040(void *this, int x, int y, int level, int player, int radius);
//====================================================
Текущий герой:
[69CCFC]+4
a
[69CCFC]+8
[69CCFC]+12
[69CCFC]+16
..
список героев на панели. 7 DWORD'ов.

[69CCFC]+1 - количество героев в списке.
Если поставить больше, чем есть, а в список вытянуть левого героя, он появится, но кликать на него не стоит.
Если поставить меньше, чем есть - лишние будут некликабельны.

[69CCFC]+E2 - возможно, флаг на определение, ИИ или человек сейчас ходит.
//====================================================
sub_553C40(..)
печать в внутриигровой чат. Функция напоминает printf.

ввод в чат можно хукнуть на 402450 или 4022E0.
//====================================================
void *__thiscall sub_5C8590(void *this, char amount)

Показать гильдию воров. amount - количество информации
//====================================================
Смещения в структурах героев:

476h - атака-защита-спеллпавер-знание
12Dh - слоты артов. Первый - шлем и далее по 4байта
1С5h - записи о блокированных слотах? странный формат. 11 байт
после них - рюкзак героя
51h - опыт
55h - уровень

35h,39h - точки назначения для героя 4байта
00h 02h 04h - ворд координаты
4Dh - мувпойнты

430h - таблица заклинаний
//====================================================
51BD60 - заглушка, поставленная вместо функции мультиплеерного лога. Надо вернуть её на место и почитать - интересссно. По формату сходна с ?printf, но первым параметром идет имя файла.
//====================================================
0х69844C - ID недели. Если неделя существа - там лежит номер существа. Если неделя белки, ежа и прочего - там лежит номер названия.
Как отличить - пока хз.
//====================================================
Текущий день - [840CE0]. Два байта - день, два байта - месяц, два байта - год.
//====================================================
Переход хода - функция 4СС490.
//====================================================
5CEC30 - вызов окна гарнизона.
1 параметр - указатель на структуру героя,
2 параметр - цвет флага
3 параметр - указатель на структуру войск гарнизона (7 DWORDов для типов, 7 DWORDов для количества (или наоборот (= ) и 8 байт непонятного назначения)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 30 Jul 2010, 11:49 (Сообщение отредактировал feanor - 30 Jul 2010, 12:35)
Сообщение #62

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




Проверка на Доспехи Проклятого и Альянс Ангелов - в куске кода от 464F10.

Много вкусных и питательных плюшек можно найти, если проследить вызовы функции 4D9460 - проверка на наличие артефакта на герое.

В частности:
0044A26F - свитч на выдачу артам иммуна к заклинаниям.
005A86F3 - дополнительная проверка на Клинок Армагеддона
004E663A - плюшки к скорости на поле боя
004E66CC - плюшки к хитпойнтам
005BFE32 - проверки на части Статуи Легиона
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 30 Jul 2010, 16:42
Сообщение #63

В миру GrayFace
Сообщений: 2 529
Спасибо сказали: 819 раз




Вот покопал тип, подтип недели и месяца:

69844C WeekSubtype:
Номер монстра или зверька (кролик и т.п.)
6977A0 WeekType:
2 - inferno imps
1 - growth +5
0 - none (if it's the frst week of month, see MonthType, else it's neutral week)

Probability:
2 - 0
1 - 1/4
0 - 3/4

697798 MonthSubType.
Номер монстра или зверька (кролик и т.п.)
698884 MonthType:
2 - plague
1 - monster *2
0 - nothing

Probability:
2 - 1/10
1 - 4/10
0 - 5/10

63E678 - 12 monsters that can double their population


--------------------
ДНК банана на 50% состоит из человека.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 14 Aug 2010, 19:55 (Сообщение отредактировал sergroj - 15 Aug 2010, 16:22)
Сообщение #64

В миру GrayFace
Сообщений: 2 529
Спасибо сказали: 819 раз




AI
Вычисляет ценность объекта для AI:
.text:00528520 ; int __fastcall AICalculateMapPosWeight(_Hero_ *hp, signed int *moveDist, int packedmapitem)
moveDist - расстояние до объекта,
packedmapitem - координаты объекта,
hp - герой.

AI решает, применить ли заклинание монстра:
.text:00421400 ; char __thiscall CombatMan_00421400_MonsterAITrySpecial(_CombatMan_ *this, _CombatMonster_ *mon, int *weight, int a4)
weight - ценность наилучшего действия, выбранного до этого.

Возвращает функцию, вычисляющую ценность заклинания:
.text:0043B2E0 combatMan_GetSpellWeightAIProc

[edit]
Вычисляет ценность удара по монстру:
.text:004357E0 ; int __thiscall CombatUnk_004357E0_AI_GetRawWeightOfMonAttack(int this, _CombatMonster_ *MonStr, int monHealth, _CombatMonster_ *enemy, int enemyHealth, signed int canShoot, signed int NotRealDamage)

AI для стрелков, у которых есть выстрелы и они не заблокированы:
.text:0041F1E0 ; char __thiscall CombatMan_0041F1E0_ShootingCreatureAI(_CombatMan_ *this, _CombatMonster_ *mon, char a3, int side)

AI для стрелков, у которых есть выстрелы и они не заблокированы:
.text:0041F1E0 ; char __thiscall CombatMan_0041F1E0_ShootingCreatureAI(_CombatMan_ *this, _CombatMonster_ *mon, char a3, int side)

Рукопашный AI для остальных:
.text:00422100 ; int __thiscall CombatMan_00422100_MeleeCreatureAI(_CombatMan_ *this, _CombatMonster_ *a2, char a3, char a4, int side)


--------------------
ДНК банана на 50% состоит из человека.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 15 Aug 2010, 01:29
Сообщение #65

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




Структуры классов героя.
Адрес - 67В86С. Ссылки - в 4A6A23 (код), 67DCEC, 78BFC0.
Описание:
struct
{
char* name;
float agression;
char start_prim_param[4];
char prim_param_percentage[4];
char prim_param_percentage2[4]; //10+
char second_param_chances[28];
char town_tavern_chances[9];
char foo[7];
}

Названия, впрочем чаще берутся из массива указателей по [698B78].
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 15 Aug 2010, 16:53 (Сообщение отредактировал sergroj - 15 Aug 2010, 17:04)
Сообщение #66

В миру GrayFace
Сообщений: 2 529
Спасибо сказали: 819 раз




что-то у тебя непонятное. Адрес где-то в середине структуры, у ссылок тоже левые адреса.

.data:0067D868 ; _HeroType_ HeroTypesTable[18] (ссылка - 67DCEC)

00000000 _HeroType_ struc ; (sizeof=0x40)
00000000 Belong2Town dd ?
00000004 TypeName dd ? ; offset (00000000)
00000008 Agression dd ?
0000000C PSkillStart db 4 dup(?)
00000010 ProbPSkillToLvl9 db 4 dup(?)
00000014 ProbPSkillAfterLvl10 db 4 dup(?)
00000018 ProbSSkill db 28 dup(?)
00000034 ProbInTown db 9 dup(?)
0000003D field_3D db 3 dup(?)
00000040 _HeroType_ ends

.data:00679DD0 ; _HeroInfo_ HeroInfo[163] (ссылка - 67DCE8)

00000000 _HeroInfo_ struc ; (sizeof=0x5C)
00000000 Female dd ?
00000004 _u1 dd 8 dup(?)
00000024 ArmyType dd 3 dup(?)
00000030 HPSName dd ? ; offset (00000000)
00000034 HPLName dd ? ; offset (00000000)
00000038 _u2 db 8 dup(?)
00000040 Name dd ? ; offset (00000000)
00000044 ArmyNum dd 6 dup(?)
0000005C _HeroInfo_ ends

P.S. дополнил пост про AI


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 18 Aug 2010, 11:30 (Сообщение отредактировал feanor - 18 Aug 2010, 11:30)
Сообщение #67

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




ага, напортачил при поиске ссылок. Никогда больше не буду постить полученную в три ночи инфу, не проверив её утром. biggrin.gif

За описание структуры - спасибо.

Вообще, надо бы мне все выложенное проверить, а то то там куча ошибок sad.gif
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 04 Sep 2010, 05:48
Сообщение #68

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2378 раз




Тоже немного об ИИ.
Довольно часто (я насчитал 46 вызовов) в коде вызывается простенькая функция SUB_L0044A950. Вычисляет она не что иное, как общую FightValue войск героя. В ecx кладётся указатель на структуру героя (со смещением до первого слота существ), в eax возвращается результат.
Два вызова этой функции приходятся на SUB_L004AC270, которая срабатывает в момент нападения ИИ на бродячего монстра и, видимо, управляет логикой этой битвы.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 25 Dec 2010, 18:50 (Сообщение отредактировал feanor - 25 Dec 2010, 18:56)
Сообщение #69

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




006747B4 - таблица обитателей жилищ в городах. По DWORD'у на рыло, порядок - негрейды Замка, грейды Замка, негрейды Оплота etc


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 08 Jan 2011, 16:41
Сообщение #70

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




Еще об артефактах, точнее, о расчете их (и не только их) бонусов.

004E3ED0 - функция, возвращающая тип поднимаемого в результате некромантии существа.
004E3F40 - функция, определяющая процент поднятых существ
004E42E0 - функция, определяющая радиус обзора.
004E43D0 - функция, определяющая проценты бонуса Archery
004E4690 - ..Eagle Eye
004E4950 - ..Resistance
004E4C00 - расчет мувпойнтов.
004E5020 - бонус к длительности заклятий
004E59D0 - бонусы к школам магии.
004E5D10 - бонусы к скорости в бою
004E5DF0 - к хитпойнтам

Go to the top of the pageAdd Nick
 
+Quote Post
Haart of the Aby...
сообщение 09 Jan 2011, 16:25 (Сообщение отредактировал Лорд Хаарт - 09 Jan 2011, 16:36)
Сообщение #71

Рыцарь в лесу.
Сообщений: 4 494
Спасибо сказали: 6286 раз




Цитата
004E3ED0 - функция, возвращающая тип поднимаемого в результате некромантии существа.
Ня, жезл переработки трупов в огненных элементалей! И прочие милые артефакты на тему некромантии по-кригански и по-варлочьи.


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 19 Jan 2011, 22:47 (Сообщение отредактировал feanor - 20 Jan 2011, 00:17)
Сообщение #72

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




sub_757045 - проверки на прямые атаки воговских существ: душепийство Привидений и миролюбивость Эмиссаров.
sub_75E762 - заклинания, лежащие на воговских существах.
sub_7673AD - в начале функции дни полнолуния для Оборотней
sub_75C695 - хук на опыт башен, на палатку помощи, на Эмиссаров, на Колдуний и Пожаров.

sub_5BFA00 - количество денег, зарабатываемое городом


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 23 Jan 2011, 22:52 (Сообщение отредактировал feanor - 23 Jan 2011, 23:08)
Сообщение #73

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




688f04 - таблица ресурсов, приносимых хранилищем. 7*4 байт для каждого города.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 20 Feb 2011, 15:07 (Сообщение отредактировал MasterOfPuppets - 24 Mar 2011, 15:15)
Сообщение #74

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2378 раз




63E510h – таблица процентных модификаторов затрат очков хода при передвижении по разным почвам. Массив integer-ов, по 4 значения в зависимости от уровня развития Поиска Пути. По порядку:
00 Dirt
01 Sand
02 Grass
03 Snow
04 Swamp
05 Rough
06 Underground
07 Lava
08 Water
09 Rock/No road
10 Dirt
11 Gravel
12 Cobblestone
Следующие за таблицей четыре значения используются для доступа к модификаторам дорог.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 28 Feb 2011, 15:15 (Сообщение отредактировал MasterOfPuppets - 24 Mar 2011, 15:16)
Сообщение #75

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2378 раз




Настройки игры

Все адреса в порядке возрастания. Все значения байтовые, но растянуты до двордов. Если опция не комментируется, то статус для неё: 1 - да, 0 - нет

6987A8 - скорость врага (2-5)
6987AC - скорость героя (1-4)

6987B0h - громкость mp3 (0-9)
6987B4h, 6987BCh - громкость wav-звуков (0-9). Почему-то дублируется, хотя на громкость влияет только 6987B4h.

6987C4h - показ маршрута
6987C8h - запрос об окончании хода
6987CCh - быстрая битва
6987D0h - видеосубтитры
6987D4h - контуры гор. зданий
6987D8h - анимация Книги Заклинаний
6987DCh - скорость прокрутки карты (0-2)

<<< Настройки автобоя
6987E4h - существа
6987E8h - заклинания
6987ECh - катапульта
6987F0h - баллиста
6987F4h - сан. палатка
/ >>>

6987F8 - качество видео (0 - низкое, 1 - высокое)

<<< Опции битвы
69880Ch - показать сетку?
698810h - тень курсора
698814h - Тень перемещения
698818h - информация об отряде (0 - нет, 1 - вся статистика, 2 - только заклинания)
69883Ch - скорость боевой анимации (0-2)
/ >>>


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 02 Mar 2011, 23:56
Сообщение #76

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20610 раз




Генератор случайного монстра
sub_4C8F80(void *this, int level_from, int level_start);

Используется для беженцев и для замены случайных монстров на карте.

this = [699538]


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 13 Mar 2011, 14:41 (Сообщение отредактировал Дьяк - 13 Mar 2011, 14:42)
Сообщение #77

Member
Сообщений: 97
Спасибо сказали: 80 раз




Правка генератора случайных монстров при старте карты. Позволяет генерировать новых и воговских монстров на карте без вогификации. Выдрал из наработок по WoG 359

// врезка Fix генератора
{0x54110F, 0x0, DP(Hook54110F)}, // Diakon

// настройка генератора карт (генерируем новых и ВоГовских монстров)
//MGENERATOR mGenerator [MONNUM];

int gmon;
int nMon;
int NotCheck = 0x541137;
int Check = 0x541116;

__declspec (naked) void Hook54110F(){
__asm pushad;
__asm mov gmon, ebx;
__asm mov eax, dword ptr [edi];
__asm mov nMon, eax;

if (nMon == -1){
__asm popad;
__asm jmp NotCheck;
}

__asm popad;
__asm lea eax, dword ptr [esi + esi*4];
__asm jmp Check;

}

// врезка FixGeneratora
{(Byte*)&JMP, (Byte*)0x54110F, 1}, //Diakon
{(Byte*)&PSUB, (Byte*)(0x541013+2), 4}, //Diakon
{(Byte*)&MSUB, (Byte*)(0x54106B+2), 4}, //Diakon
{(Byte*)&MSUB, (Byte*)(0x54109C+3), 4}, //Diakon
{(Byte*)&MSUB, (Byte*)(0x5410E1+3), 4}, //Diakon
{(Byte*)&MSUB, (Byte*)(0x541174+3), 4}, //Diakon
{(Byte*)&GENMONNUM, (Byte*)(0x541063+1), 4}, //Diakon
{(Byte*)&GENMONNUM, (Byte*)(0x5410B3+1), 4}, //Diakon
{(Byte*)&GENMON, (Byte*)(0x541159+1), 4}, //Diakon

int JMP = 0xE9; //Diakon
int PSUB = 0x324; //Diakon
int MSUB = -804; // Diakon
int GENMONNUM = 0xC5; - изменяется в зависимости от кол-ва монстров. негенерируемых монстров не прописываем в текстовике. Не помню текстовик для рандомной карты. Если кто не знает - напишу. Лень копаться.
int GENMON = GENMONNUM -1;


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 05 Apr 2011, 14:21
Сообщение #78

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2378 раз




6436A8h - родные почвы городов.
63D0A8h - таблица позиций, по которым расставляются существа в обычном бою.
63D0E0h - таблица позиций, по которым расставляются существа при грабеже банка.
ERM:
!!UN:C4600476/2/37008; - любая битва будет происходить как в банке
!!UN:C4600637/4/95721; - дополнительно к этому, уберёт с поля боя машины
!!UN:C4600476/2/5236 C4600637/4/24413455; - восстановит стандартный код


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
Чёртос-2 (Chorto...
сообщение 01 May 2011, 00:34
Сообщение #79

The Unicode Man
Сообщений: 993
Спасибо сказали: 6 раз




Цитата(feanor @ 15 Feb 2011, 06:35) *
Товарищи! Ниже есть тема по обсуждению инженерного анализа!
Блин, теперь стали сам инженерный анализ в ту тему писать. Я сначала хотел покопировать куски оттуда сюда, но, добравшись до последней страницы, понял, что лучше просто отослать читателя к той теме куда-то в районе 120-го поста и позже.


--------------------
© 2005–2011 Чёртос-2
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 07 May 2011, 13:34
Сообщение #80

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2378 раз




sub_617F94 - возможно, самая частовстречающаяся функция (451 вызов). Округляет float ST0 в меньшую сторону и возвращает результат в виде integer.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post

8 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14 April 2026 - 14:09
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика