Цитата(Dead @ 05 Nov 2011, 02:55 (Сообщение отредактировал Dead - 05 Nov 2011, 03:02))
.data:00681FB2 конец тоблицы координатоф карты загадки , PuzTOWNxx.bmp, пишу адрес конца таблицы потому что неуверен нащёт начала, штота неочень там сходитса, лень проверять, порядок: например .data:00681EF4 здесь PuzEle00.bmp координаты х, 2 баита на координаты, перва идут координаты х всех рысунков , потом у ..
Цитата(Dead @ 07 Nov 2011, 02:58 (Сообщение отредактировал Dead - 07 Nov 2011, 03:02))
Miners' Guild
.data:00688810 db 10h 16 (Dwarf)
.data:00688811 db 0
.data:00688812 db 0
.data:00688813 db 0
.data:00688814 db 4 (количество)
.data:00688815 db 0
.data:00688816 db 0
.data:00688817 db 0
Dendroid Saplings
.data:00688820 db 16h 22 (Dendroid Guard)
.data:00688821 db 0
.data:00688822 db 0
.data:00688823 db 0
.data:00688824 db 2
.data:00688825 db 0
.data:00688826 db 0
.data:00688827 db 0
Sculptor's Wings
.data:00688830 db 1Eh 30 (Stone Gargoyle)
.data:00688831 db 0
.data:00688832 db 0
.data:00688833 db 0
.data:00688834 db 4 (количество)
.data:00688835 db 0
.data:00688836 db 0
.data:00688837 db 0
Birthing Pools
.data:00688850 db 2Ah 42 (Imp)
.data:00688851 db 0
.data:00688852 db 0
.data:00688853 db 0
.data:00688854 db 8 (количество)
.data:00688855 db 0
.data:00688856 db 0
.data:00688857 db 0
Cages
.data:00688860 db 2Eh 46 (Hell Hound)
.data:00688861 db 0
.data:00688862 db 0
.data:00688863 db 0
.data:00688864 db 3 (количество)
.data:00688865 db 0
.data:00688866 db 0
.data:00688867 db 0
Unearthed Graves
.data:00688870 db 38h 56 (Skeleton)
.data:00688871 db 0
.data:00688872 db 0
.data:00688873 db 0
.data:00688874 db 6 (количество)
.data:00688875 db 0
.data:00688876 db 0
.data:00688877 db 0
Mushroom Rings
.data:00688890 db 46h 70 (Troglodyte)
.data:00688891 db 0
.data:00688892 db 0
.data:00688893 db 0
.data:00688894 db 7 (количество)
.data:00688895 db 0
.data:00688896 db 0
.data:00688897 db 0
Mess Hall
.data:006888B0 db 54h 84 (Goblin)
.data:006888B1 db 0
.data:006888B2 db 0
.data:006888B3 db 0
.data:006888B4 db 8 (количество)
.data:006888B5 db 0
.data:006888B6 db 0
.data:006888B7 db 0
Captain's Quarters
.data:006888D0 db 62h 98 (Gnoll)
.data:006888D1 db 0
.data:006888D2 db 0
.data:006888D3 db 0
.data:006888D4 db 6 (количество)
.data:006888D5 db 0
.data:006888D6 db 0
.data:006888D7 db 0
Garden of Life
.data:006888F0 db 76h 118 (Pixie)
.data:006888F1 db 0
.data:006888F2 db 0
.data:006888F3 db 0
.data:006888F4 db 0Ah 10 (количество)
.data:006888F5 db 0
.data:006888F6 db 0
.data:006888F7 db 0
Цитата(feanor @ 24 Nov 2011, 19:03)
О выстрелах по стенам.
Код
CPU Disasm
Address Hex dump Command Comments
00445AA6 |> \8B7F 34 MOV EDI,DWORD PTR DS:[EDI+34] ;edi до этого момента - указатель на структуру стека, после - номер монстра
00445AA9 |. 8B0D 20946900 MOV ECX,DWORD PTR DS:[699420]
00445AAF |. 83EF 5E SUB EDI,5E ; Switch (cases 5E..91, 4 exits)
00445AB2 |. 74 1F JE SHORT 00445AD3
00445AB4 |. 4F DEC EDI
00445AB5 |. 74 15 JE SHORT 00445ACC
00445AB7 |. 83EF 32 SUB EDI,32
00445ABA |. 75 1E JNE SHORT 00445ADA
00445ABC |. 8B9481 CC5300 MOV EDX,DWORD PTR DS:[EAX*4+ECX+53CC] ; Case 91 of switch Era_1_6_exe_HD.445AAF - катапульта
00445AC3 |. 0FBE82 D30000 MOVSX EAX,BYTE PTR DS:[EDX+0D3];D3 - смещение баллистики в структуре героя
00445ACA |. EB 11 JMP SHORT 00445ADD
00445ACC |> B8 02000000 MOV EAX,2 ; Case 5F of switch Era_1_6_exe_HD.445AAF - циклопы
00445AD1 |. EB 0A JMP SHORT 00445ADD
00445AD3 |> B8 01000000 MOV EAX,1 ; Case 5E of switch Era_1_6_exe_HD.445AAF
00445AD8 |. EB 03 JMP SHORT 00445ADD
00445ADA |> 8B45 08 MOV EAX,DWORD PTR SS:[ARG.1] ; Default case of switch Era_1_6_exe_HD.445AAF
Тут добавлю немного. Если стреляющее по стене существо - не циклоп, король-циклоп, катапульта, т. е. попадает в Default case, то в качестве навыка "артиллерия" для него берётся номер атакуемого сооружения. По этому уровню навыка впоследствии, как по индексу, берётся структура параметров баллистического выстрела, которая содержит в себе количество выстрелов, шансы не промахнуться и шансы нанести урон. Если номер атакуемого сооружения > 3, то вместо всего этого будет взят мусор. Вылета это не вызовет, т. к., с одной стороны, номера атакуемых сооружений находятся в пределах двух десятков, а памяти после массива структур параметров баллистического выстрела выделено достаточно, а с другой стороны, структура параметров баллистического выстрела не содержит в себе указателей. Самое неприятное, что может случиться - большое количество выстрелов с нулевым шансом нанесения урона.
Цитата(Berserker @ 18 Dec 2011, 21:17 (Сообщение отредактировал Berserker - 18 Dec 2011, 21:04))
Обновим тень перемещения:
493350 - F (0, 1); THISCALL;
Код
!!UN:C6919200/4/?y2;
!!SN:E4797616/2/y2/0/1;
!!BU:R;
Теперь если поменять скриптом скорость монстра, можно и сеточку обновить...
Цитата
[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)
Последний параметр - расстояние, 0 - теоретически.
Цитата(Berserker @ 25 Dec 2011, 11:51)
IsTacticPhase: CombatManager($699420) -> $13D68
Battle stacks: CombatManager($699420) -> 21708 (1352 на отряд)
ZvsCursorLocked: $840E10
StackToStackDamageCalculation: $443C88
MM Damage trigger: $492409
Цитата(Berserker @ 07 Jan 2012, 18:26)
50b970 - чтение настроек из реестра
50b420 - настройки по умолчанию
50bfd0 - сохранить все настройки
Show Intro - 699410
Music Volume - 6987B0
Sound Volume - 6987B4
Last Music Volume - 6987B8
Last Sound Volume - 6987BC
Walk Speed - 6987AC
Computer Walk Speed - 6987A8
Show Route - 6987C4
Move Reminder - 6987C8
Quick Combat - 6987CC
Video Subtitles - 6987D0
Town Outlines - 6987D4
Animate SpellBook - 6987D8
Window Scroll Speed - 6987DC
Blackout Computer - 6987E0
First Time - 699574
Test Decomp - 699578
Test Read - 69957C
Test Blit - 699580
Bink Video - 6987F8
Unique System ID - 698838
Network Default Name - 698867
Autosave - 6987C0
Show Combat Grid - 69880C
Show Combat Mouse Hex - 698810
Combat Shade Level - 698814
Combat Army Info Level - 698818
Combat Auto Creatures - 6987E4
Combat Auto Spells - 6987E8
Combat Catapult - 6987EC
Combat Ballista - 6987F0
Combat First Aid Tent - 6987F4
Combat Speed - 69883C
Main Game Show Menu - 6987FC
Main Game X - 698800
Main Game Y - 698804
Main Game Full Screen - 698808
AppPath - 698614
CDDrive - 698888
Цитата(etoprostoya @ 07 Jan 2012, 19:10)
MoP вроде эти адреса уже указывал, по крайней мере, некоторые.
Цитата(Berserker @ 07 Jan 2012, 19:21 (Сообщение отредактировал Berserker - 07 Jan 2012, 19:39))
http://forum.df2.ru/index.php?showtopic=68...st&p=490895Не все и без оригинальных имён в реестре. Пока у меня не было инета, находил и пепепроверял вручную в рамках переноса настроек в heroes3.ini.
Код
[Settings]
Show Intro=1
AppPath="C:\h\"
Music Volume=0
Sound Volume=0
Last Music Volume=0
Last Sound Volume=0
Walk Speed=2
Computer Walk Speed=3
Show Route=0
Move Reminder=0
Quick Combat=0
Video Subtitles=0
Town Outlines=0
Animate SpellBook=0
Window Scroll Speed=0
Bink Video=0
Blackout Computer=0
First Time=0
Test Decomp=0
Test Read=0
Test Blit=0
Unique System ID="LOVE"
Network Default Name="Player"
Autosave=0
Show Combat Grid=0
Show Combat Mouse Hex=0
Combat Shade Level=0
Combat Army Info Level=0
Combat Auto Creatures=0
Combat Auto Spells=0
Combat Catapult=0
Combat Ballista=0
Combat First Aid Tent=0
Combat Speed=0
Main Game Show Menu=0
Main Game X=0
Main Game Y=0
Main Game Full Screen=0
CDDrive="C:"
WoG_Version="3.58f, 01 November 2004"
Era Version = "2.0"
Цитата(Berserker @ 09 Jan 2012, 03:07)
int 6911880d - индекс текущего выделенного слота в окне героя или -1.
int 6916756d - 0-1 - включён ли режим разделения существ? (кнопка такая)
Цитата(Berserker @ 09 Jan 2012, 17:27)
$06775888 - Heroes Meeting, selected side (0..1) or -1
$06775890 - Heroes Meeting, selected slot or -1
$0675254C - Visiting Hero, selected slot or -2
$067525CC - Town Garrison, selected slot or -2
Цитата(Sav @ 24 Jan 2012, 20:37 (Сообщение отредактировал Sav - 24 Jan 2012, 20:42))
Код
signed int __thiscall A0_Battle_Stack_get_Speed_sub_4489F0(struct_BattleStack *this)
{
signed int result; // eax@1
float Speed_v2; // ST00_4@4
result = this->Speed_dwordC4;
if ( this->Spells_Lengths_a198[54] ) // Если наложена Медлительность...
// (а иначе - просто возвращаем скорость)
{
if ( (this->Flags_dword84 >> 6) & 1 ) // Осадное орудие
{
result = 0;
}
else
{
Speed_v2 = (double)(signed int)this->Speed_dwordC4;
result = A0_to_signed_int_sub_617F94(Speed_v2 * this->SlowSpell_Modif_dword4C8);
if ( result <= 0 )
result = 1; // Минимальная скорость при медлительности - 1
}
}
return result;
}
Код
// Сравнение приоритета хода стеков (если у первого приоритетнее - возврат 1)
char __thiscall A0_Battle_CompareStacksTurnPriority_sub_464B30(int this, struct_BattleStack *Stack1, struct_BattleStack *Stack2)
{
int MoraleFlag1_v3; // eax@1
bool res; // eax@2
int Type2_v5; // edx@3
int Type1_v6; // ecx@3
signed int Speed1_v7; // ebx@5
signed int v8; // esi@7
signed int v9; // esi@8
int Owner1_v10; // eax@9
int this_v12; // [sp+Ch] [bp-4h]@1
this_v12 = this;
MoraleFlag1_v3 = Stack1->Flags_dword84 >> 24;
if ( ((_BYTE)MoraleFlag1_v3 ^ (unsigned __int8)(Stack2->Flags_dword84 >> 24)) & 1 )// В этом ходу одному и только одному из отрядов выпала мораль
{
LOBYTE(res) = MoraleFlag1_v3 & 1; // Если мораль выпала первому, возвращаем 1, иначе 0
}
else
{
Type1_v6 = Stack1->CreatureType_dword34;
Type2_v5 = Stack2->CreatureType_dword34;
res = Type1_v6 == 149; // Если первый - стрелковая башня, а второй - нет, возвращаем 1, наоборот - 0
if ( res == (Type2_v5 == 149) ) // Стрелковая башня
{
res = Type1_v6 == 145; // Аналогично с катапультой
if ( res == (Type2_v5 == 145) ) // Катапульта
{ // Одинаковы по выпавшей морали, явлении катапультой и стрелковой башней
Speed1_v7 = A0_Battle_Stack_get_Speed_sub_4489F0(Stack1);
if ( Speed1_v7 == A0_Battle_Stack_get_Speed_sub_4489F0(Stack2) )// Скорости равны
{
Owner1_v10 = Stack1->Owner_dwordF4;
if ( Owner1_v10 == Stack2->Owner_dwordF4 )
LOBYTE(res) = Stack1->StackNum_dwordF8 < Stack2->StackNum_dwordF8;// Если хозяева одинаковы, раньше ходит тот, у кого номер стека меньше
else
LOBYTE(res) = res != *(_DWORD *)(this_v12 + 78520);// res = Stack1->OwnerF4 != (this_v12 + 78520)
// Последнее - сторона последнего ходившего монстра (в особых же случаях устанавливается в 1)
// Т. е. больший приоритет имеет существо другого владельца, чем только что ходивший (в особых случаях - нападающего)
}
else
{
if ( *(_BYTE *)(this_v12 + 81380) ) // Фаза ожидания
{
v8 = A0_Battle_Stack_get_Speed_sub_4489F0(Stack1);
LOBYTE(res) = v8 < A0_Battle_Stack_get_Speed_sub_4489F0(Stack2);// У кого меньше, тот имеет преимущество
}
else // Не фаза ожидания
{
v9 = A0_Battle_Stack_get_Speed_sub_4489F0(Stack1);
LOBYTE(res) = v9 > A0_Battle_Stack_get_Speed_sub_4489F0(Stack2);// У кого больше, тот имеет преимущество
}
}
}
}
}
return res;
}
Цитата(tolich @ 24 Jan 2012, 20:53)
Вот поэтому охранники снеговика, будучи замедленными, начинают двигаться.
Цитата(etoprostoya @ 24 Jan 2012, 21:03)
Цитата(Sav @ 24 Jan 2012, 20:37)
Код
signed int __thiscall A0_Battle_Stack_get_Speed_sub_4489F0(struct_BattleStack *this)
{
this->Speed_dwordC4;
}
Для полноты кода нужно описать и структуру "this" (struct_BattleStack).
P.S. "this" кириллицей будет "ершы"!


Цитата(Sav @ 24 Jan 2012, 21:08 (Сообщение отредактировал Sav - 24 Jan 2012, 21:09))
Всё из BM:G с минимумом правок (не уверен, что всё верно, но многое точно). Кстати, в информации по BM:G (из справки Драколича), похоже, ошибка: флаги существ - это не -71, а -69.
Если поле обозначено массивом байтов с названием f, то что там находится, мне неизвестно.
Код
struct struct_BattleStack
{
_BYTE f0[8];
_DWORD Visiblity_dword8;
_BYTE fC[40];
_DWORD CreatureType_dword34;
_DWORD GexNum_dword38;
_DWORD AnimNum_dword3C;
_DWORD AnimFrameNum_dword40;
_BYTE f44[8];
_DWORD Count_dword4C;
_DWORD VisibleCount_dword50;
_DWORD LosesAfterBattle_dword54;
_DWORD HealthLoses_dword58;
_BYTE f5C[4];
_DWORD Count_At_BattleStart_dword60;
_BYTE f64[16];
_DWORD CreatureTown_dword74;
_BYTE f78[12];
_DWORD Flags_dword84;
_DWORD Creature_NameSingle_dword88;
_DWORD Creature_NameMulti_dword8C;
_DWORD Creature_Description_dword90;
_BYTE f94[44];
_DWORD Health_dwordC0;
_DWORD Speed_dwordC4;
_DWORD Attack_dwordC8;
_DWORD Defense_dwordCC;
_DWORD Damage_Min_dwordD0;
_DWORD Damage_Max_dwordD4;
_DWORD Ammo_dwordD8;
_BYTE fDC[24];
_DWORD Owner_dwordF4;
_DWORD StackNum_dwordF8;
_BYTE fFC[4];
_DWORD X_Shift_dword100;
_DWORD Y_Shift_dword104;
_BYTE f108[68];
_DWORD X_CountShowingRect_Shift_dword14C;
_BYTE f150[4];
_DWORD RandomAnim_Freq_dword154;
_BYTE f158[12];
_DWORD CreatureAnim_dword164;
_DWORD CreatureBulletAnim_dword168;
_BYTE f16C[4];
_DWORD Move_Sound_dword170;
_DWORD Attack_Sound_dword174;
_DWORD Damage_Sound_dword178;
_DWORD Shot_Sound_dword17C;
_DWORD Death_Sound_dword180;
_DWORD Defense_Sound_dword184;
_BYTE f188[12];
_DWORD ActiveSpells_CountForColor_dword194;
_DWORD Spells_Lengths_a198[80];
_BYTE f2D8[372];
_DWORD ActiveSpells_dword44C;
_BYTE f450[120];
float SlowSpell_Modif_dword4C8;
_BYTE f4CC[28];
_DWORD Morale_dword4E8;
_DWORD Luck_dword4EC;
_BYTE f4F0[88];
};
Цитата(tolich @ 24 Jan 2012, 21:20)
Есть подозрение, что, большей частью, все неизвестные поля на самом деле те же дворды. Больно уж у них размеры кратные 4.
Цитата(feanor @ 24 Jan 2012, 22:15)
Неа, там просто компилятор сделал округление. Кое-где именно char и short, ибо в старших байтах остатки от BAADF00D видны.
Цитата(Berserker @ 24 Jan 2012, 22:29)
А чем описание от ZVS не нравится?
Код
struct _CombatMon_{ // размер 0x548
// +00 db (1) когда отаковал уже(?)
// +01 db
// +02 db (0C) 44188C
// +03 db
// +08 dd = полное число стеков у игрока
// +10 dd =-1 после атаки и/или ответа(????)
// +1С dd = позиция на поле боя (куда бежать/стрелять)
// +20 db = огненный щит
// +28 dd = -1 (номер стэка клона этого)
// +30 db 43E33C
int Type; // +34 dd = тип монстра
int Pos; // +38 dd = позиция монстра на поле боя (куда атакует)
// +3C dd = заклинания
// +40 dd 43E236
// +44 dd (=1) сдвиг в сторону второй занятой клетки для монстра с двумя клетками
int MonNum; // +4C - число монстров
// +50 - число монстров до удара по ним в тек. атаку
int LostLastHP; // +58 - потери здоровья последнего монстра
// +5C - номер слота героя (0...6), -1 - будет удален после битвы
int MonNum0; // +60 - число монстров в начале битвы
// +6C - полное здоровье (исп. как база для лечения)
// +70 dd 44150F 441744
// +74 dd -1 для продвинутых элементалей
// +78 dd = уровень существа (0...6)
Dword Flags; // +84
// 00000001 - 0x00 DOUBLE_WIDE - занимает 2 клетки
// 00000002 - 0x01 летает
// 00000004 - 0x02 стреляет
// 00000008 - 0x03 расширенный радиус атаки (на две клетки)
// 00000010 - 0x04 живое существо (можно восстанавливаться вампиру)
// 00000020 - 0x05 CATAPULT - может разрушать стены
// 00000040 - 0x06 SIEGE_WEAPON - осадное оружие - не двигается (5508CB)
// 00000080 - 0x07 KING_1
// 00000100 - 0x08 KING_2
// 00000200 - 0x09 KING_3
// 00000400 - 0x0A ??? 00020000 + 40,41,83 - не чуствителен к псих атаке
// 00000800 - 0x0B нет описания (35,74,75)
// 00001000 - 0x0C в ближнем бою бьет как в дальнем
// 00002000 - 0x0D ----
// 00004000 - 0x0E ??? IMMUNE_TO_FIRE_SPELLS
// 00008000 - 0x0F стреляет дважды
// 00010000 - 0x10 атака без ответа
// 00020000 - 0x11 ... не подвержен низкой морали (?)
// 32,33,56-69,112-117,120,121,123,,125,127,129,141,145-149
// 00040000 - 0x12 нечисть
// 00080000 - 0x13 бьет всех врагов рядом
// 00100000 - 0x14 расширенный радиус стреляющих юнитов
// 00200000 - 0x15 стэк убит? 41E617 чародей,firebird - может еще кастовать?
// 00400000 - 0x16 421BDC,421FC4 (что-то с вызовом)
// 00800000 - 0x17 копия стэку - умирает сразу
// 01000000 - 0x18 гарпии-ведьмы
// 02000000 - 0x19 остался(уже) ждать СБРОСИТЬ - МОЖЕТ ЖДАТЬ СНОВА
// 04000000 - 0x1A уст. после атаки СБРОСИТЬ - ВНОВЬ МОЖЕТ ОТАКОВАТЬ
// 08000000 - 0x1B - выбрал защиту
// 10000000 - 0x1C - не может быть ресуректен ???
// 20000000 - 0x1D + 43DFAF
// 40000000 - 0x1E + 43E06F
// 80000000 - 0x1F дракон
// int FullHP; // +B0 dd = ???
int HitPoints; // +C0 dd = здоровье монстра
int Speed; // +С4 dd = скорость монстра
int Attack; // +C8 dd = атака с бонусами
int Defence; // +CC dd = защита с бонусами
// +D0 dd = мин. дамэдж
// +D4 dd = макс. дамэдж
// +D8 dd = количество выстрелов
// +DC dd = количество заклинаний 0=нет ДЛЯ ВОСКРЕШЕНИЯ УВЕЛИЧИТЬ
// +E8 db =
// +E9 db = 1, если умирал хоть один
// +EA db = 1, если был убит весь стэк
// +EC dd = номер заклинания существа в тек раунде 0x50 Acid breath
// +F0 db=1 перед атакой на него 441434
// +F4 dd (0,1) индекс игрока 0 или 1 4414AF 443D69
// +F8 dd = номер стэка у стороны на поле боя
// +FC dd = ? что-то с магией
// +100 dd 43DEA4
// +104 dd 43DEAD
// +108 dd
// +158 dd =?
// +164 dd -> ctroll.def (троль)
Byte *ShootDef; // +168 - загруж.деф. для стреляющих (иниц в 43DA8E)
// +16C
// +194 dd = количество уже наложенных заклинаний
// +198 dd*? (есть заклинание (длительность) или нет по номерам)
// +198 dd = Summon Boat
// +19C dd = Scuttle Boat
// +1A0 dd = Visions
// +1A4 dd = View Earth
// +1A8 dd = Disguise
// +1AC dd = View Air
// +1B0 dd = Fly
// +1B4 dd = Water Walk
// +1B8 dd = Dimension Door
// +1BC dd = Town Portal
// +1C0 dd = Quicksand
// +1C4 dd = Land Mine
// +1C8 dd = Force Field
// +1CC dd = Fire Wall
// +1D0 dd = Earthquake
// +1D4 dd = Magic Arrow
// +1D8 dd = Ice Bolt
// +1DC dd = Lightning Bolt
// +1E0 dd = Implosion
// +1E4 dd = Chain Lightning
// +1E8 dd = Frost Ring
// +1EC dd = Fireball
// +1F0 dd = Inferno
// +1F4 dd = Meteor Shower
// +1F8 dd = Death Ripple
// +1FC dd = Destroy Undead
// +200 dd = Armageddon
// +204 dd = Shield
// +208 dd = Air Shield
// +20C dd = fire Shield
// +210 dd = Protection from Air
// +214 dd = Protection from Fire
// +218 dd = Protection from Water
// +21C dd = Protection from Earth
// +220 dd = Anti-Magic
// +224 dd = Dispel
// +228 dd = Magic Mirror
// +22C dd = Cure
// +230 dd = Resurrection
// +234 dd = Animate Dead
// +238 dd = Sacrifice
// +23C dd = Bless
// +240 dd = Curse
// +244 dd = Bloodlust
// +248 dd = Precision
// +24C dd = Weakness
// +250 dd = Stone Skin
// +254 dd = Disrupting Ray
// +258 dd = Prayer
// +25C dd = Mirth
// +260 dd = Sorrow
// +264 dd = Fortune
// +268 dd = Misfortune
// +26C dd = Haste
// +270 dd = Slow
// +274 dd = Slayer
// +278 dd = Frenzy
// +27C dd = Titan's Lightning Bolt
// +280 dd = Counterstrike
// +284 dd = Berserk
// +288 dd = Hypnotize
// +28C dd = Forgetfulness
// +290 dd = Blind
// +294 dd = Teleport
// +298 dd = Remove Obstacle
// +29C dd = Clone
// +2A0 dd = Fire Elemental
// +2A4 dd = Earth Elemental
// +2A8 dd = Water Elemental
// +2AC dd = Air Elemental
// +2B0 dd = Stone 443D3A 43E0EB 441B0D (!= не отв. на атаку)
// +2B4 dd = Poison
// +2B8 dd = Bind
// +2BC dd = Desease
// +2C0 dd = Paralyze
// +2C4 dd = Aging
// +2C8 dd = Death Cloud
// +2CC dd = Thunderbolt
// +2D0 dd = Dispel
// +2D4 dd = Death Stare
// +2D8 dd = Acid Breath
// +2DC dd*? (сила действия заклинания)
// +2DC dd = Summon Boat
// +2E0 dd = Scuttle Boat
// +2E4 dd = Visions
// +2E8 dd = View Earth
// +2EC dd = Disguise
// +2F0 dd = View Air
// +2F4 dd = Fly
// +2F8 dd = Water Walk
// +2FC dd = Dimension Door
// +300 dd = Town Portal
// +304 dd = Quicksand
// +308 dd = Land Mine
// +30C dd = Force Field
// +310 dd = Fire Wall
// +314 dd = Earthquake
// +318 dd = Magic Arrow
// +31C dd = Ice Bolt
// +320 dd = Lightning Bolt
// +324 dd = Implosion
// +328 dd = Chain Lightning
// +32C dd = Frost Ring
// +330 dd = Fireball
// +334 dd = Inferno
// +338 dd = Meteor Shower
// +33C dd = Death Ripple
// +340 dd = Destroy Undead
// +344 dd = Armageddon
// +348 dd = Shield
// +34C dd = Air Shield
// +350 dd = fire Shield
// +354 dd = Protection from Air
// +358 dd = Protection from Fire
// +35C dd = Protection from Water
// +360 dd = Protection from Earth
// +364 dd = Anti-Magic
// +368 dd = Dispel
// +36C dd = Magic Mirror
// +370 dd = Cure
// +374 dd = Resurrection
// +378 dd = Animate Dead
// +37C dd = Sacrifice
// +380 dd = Bless
// +384 dd = Curse
// +388 dd = Bloodlust
// +38C dd = Precision
// +390 dd = Weakness
// +394 dd = Stone Skin
// +398 dd = Disrupting Ray
// +39C dd = Prayer
// +3A0 dd = Mirth
// +3A4 dd = Sorrow
// +3A8 dd = Fortune
// +3AC dd = Misfortune
// +3B0 dd = Haste
// +3B4 dd = Slow
// +3B8 dd = Slayer
// +3BC dd = Frenzy
// +3C0 dd = Titan's Lightning Bolt
// +3C4 dd = Counterstrike
// +3C8 dd = Berserk
// +3CC dd = Hypnotize
// +3D0 dd = Forgetfulness
// +3D4 dd = Blind
// +3D8 dd = Teleport
// +3DC dd = Remove Obstacle
// +3E0 dd = Clone
// +3E4 dd = Fire Elemental
// +3E8 dd = Earth Elemental
// +3EC dd = Water Elemental
// +3F0 dd = Air Elemental
// +3F4 dd = Stone 443D3A 43E0EB 441B0D (!= не отв. на атаку)
// +3F8 dd = Poison
// +3FC dd = Bind
// +400 dd = Desease
// +404 dd = Paralyze
// +408 dd = Aging
// +40C dd = Death Cloud
// +410 dd = Thunderbolt
// +414 dd = Dispel
// +418 dd = Death Stare
// +41C dd = Acid Breath
// +444 dd ->
// +448 dd (2)
// +44C dd
// +454 dd 441B17 (кол-во ответов на атаку 0= не отв. на атаку)
// настройка для грифонов 46D6A0
// КОЛИЧЕСТВО ОТВЕТОВ НВ АТАКУ
// +458 dd Bless добавка к Max. Damage
// +45C dd Curse убавка к Min. Damage
// +464 dd Bloodlast добавка к Атаке с бонусами
// +468 dd Precision добавка к Атаке с бонусами
// +48C dd KING_123 тип (1=KING_1,2=KING_2,3=KING_3)
// исп для расчета Slayer. Бонус 8 к Атаке: 0x4421D2
// +490 dd номер атакера по порядку??? уже атаковал??? (сбрасывается после первого удара)
// +494 dd кол. доп. ответов на атаку, добавленных Counerstrike заклом
// +4A4 dd
// +4C0 db Blinded - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
// +4C1 db Paralized - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
// +4C2 dd Forgetfulness - уровень (>2 - не может стрелять)
// +4DC dd = величина бонуса при выборе защиты
// +4E0 dd заклинание для сказ дракона
// +4EC dd 44152A
// +4F1 db 43DF88
// +514 dd
// +518 dd -> dd first \ adjusted stacks pointers
// +51C dd -> dd last /
// +524 dd
// +528 dd -> dd first \ adjusted to wich stacks pointers
// +52C dd -> dd last /
};
Цитата(tolich @ 24 Jan 2012, 22:34)
Это называется выравнивание данных, а не округление. Да, о нём не подумал, считал, что все нормальные программисты "#pragma pack(1)".

Цитата(Sav @ 24 Jan 2012, 22:36 (Сообщение отредактировал Sav - 24 Jan 2012, 22:37))
Цитата(Berserker)
А чем описание от ZVS не нравится?
Хм, я ведь даже смотрел его.

Но почему-то вовремя не вспомнилось. Ну, хотя бы что-то новое у меня есть: float SlowSpell_Modif_dword4C8.
