(17.07.2020 16:51)XEPOMAHT Wrote: Попросили выложить сюда и структуру стека - выкладываю.
Code:
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 /
};
Code:
bm+54CC Монстры (42 штуки) (см. _CombatMon_)
размер 548h
+00 db (1) когда отаковал уже(?)
+01 db
+02 db (0C) 44188C
+03 db
+08 dd = полное число стеков у игрока
+08 db = Видимость существа (4 - виден, 8 - не виден)
Комментарий DracoLich'а: Отряды теряют невидимость при любом действии на поле боя. Но ее межно восстановить в триггере !?BG1 - ShadowTheAge
// +10 dd =-1 после атаки и/или ответа(????)
// +1С dd = позиция на поле боя (куда бежать/стрелять)
// +20 db = огненный щит
+10 dd = ? (-1 когда существо может атаковать стены замка и курсор над стеной, когда курсор над клеткой)
+14 dd = ? (255 когда существо может атаковать стены замка и курсор над стеной)
+20 db = Анимация закла показывается на этом монстре
+21 db = В движении??
+24 dd = ?
+28 dd = Номер стека-клона
+2C dd = ?
// +30 db 43E33C
+30 dd? = Есть ли цифры количества существ? 0-есть, 1-нет.
Комментарий DracoLich'а: отряд не имеет обозначения кол-ва существ, пока не походит. При этом на него можно колдовать магию и бить. Кол-во показывается при щелчке правой кнопки в нижнем правом углу картинки (где обычно, в общем). Аналогичное возражение - ShadowTheAge
+34 dd = Тип существа
Комментарий DracoLich'а: параметры отряда становятся как у существа, номер которого поставлен, но сразу же снижаются до стандартных параметров сущ-ва, которое меняют. имя отряда в меню при щелчке правой кнопкой по существу меняется; когда его бьют - имя остается измененным. когда битва окончена - на картинке будет показан настроенный отряд, а не старый. Если изменить тип существа, битву становится невозможно выиграть (вроде как комп требует убить того, на кого нападал, и изменения типа существ = вызову изменнного существа). Действительно проблема, делающая параметр почти бесполезным - ShadowTheAge
+38 dd = Позиция существа (если сменить, на старом месте останется стоять копия. Копия не может ходить и быть атакованой, занимает место)
+3C dd = Номер анимации
Комментарий DracoLich'а: при значение 2,6,9... (много еще где) игра выдает черный экран; кадры берутся в том порядке, как и при создании (надо бы найти хелп по дефмейкеру, где описан каждый шаг, и выдрать оттуда). Не сталкивался почему-то... - ShadowTheAge
+40 dd = Номер кадра в анимации
Анимация возвращается к нормальной, если навести мышкой
// +44 dd (=1) сторона сдвига второй занятой клетки для монстра с двумя клетками
+48 dd = ?
+4C dd = Количество существ
+50 dd = Число монстров до удара по ним в тек. атаку. Количество существ для отображения (может не совпадать с количеством. В этом случае написано будет одно, а реально другое). По умолчанию -1 - значит "полностью совпадает с реальным".
Комментарий DracoLich'а: после того, как любое сущ-во попадет под атаку, данному значению станет равно количество реальное; в итогах битвы показывается реальное количество убитых; при атаке измененного существа фантомные монстры не учитываются (т.е. если изменить 10 монстров на 100 этой командой, то урон будет нанесен именно этим 10). Поступаем как и с невидимостью - ShadowTheAge
+54 dd = безвозвратные потери. Количество существ после выигранной битвы (или после откупа) равно "текущее количество существ" минус "безвозвратные потери". Потери могут быть записаны в безвозвратные при использовании, например, после воскрешения на уровне none или basic. - by Demiurg
+58 dd = Разница между текущим здоровьем и полным. Если 0 значит стек здоров.
+5C dd = номер слота героя (0...6), -1 - будет удален после битвы
+60 dd = Количество существ в начале боя
+64 dd = ?
+68 dd = ?
+6C dd = полное здоровье (исп. как база для лечения)
+70 dd = выпала удача
+74 dd = Город-владелец
+78 dd = Уровень существа
+7C dd = У ShadowTheAge тут флаги существа
+80 dd = ?
+84 dd = Флаги существа (BM:F)
+88 dd = Название существа
+8C dd = Название существа (множественное число)
+90 dd = Строка состояния (например "Нет штрафа рукопашной")
+C0 dd = Здоровье (полное)
+C4 dd = Скорость
+C8 dd = Атака
+CC dd = Защита
+D0 dd = Мин. урон
+D4 dd = Макс. урон
+D8 dd = Боезапас
+DC dd = Casts left
+E0 dd = ?
+E4 dd = ?
+E8 dd = ? монстра нужно ударить Fire Shield'ом
+E9 db = 1, если хоть раз монстра били
+EA db = 1, если умирал хоть один
+EB db = ? (возможно, 1, если был убит весь стэк)
// +EC dd = номер заклинания существа в тек раунде 0x50 Acid breath
// +F0 db=1 перед атакой на него 441434, 44016F
+F4 dd = Сторона (BM:I)
+F8 dd = Номер стэка у стороны на поле боя
// +FC dd = ? что-то с магией
+100 dd = Смещение существа по Y
+104 dd = Смещение существа по X
От того места где должен быть. В пикселях
+14C dd = Смещение по оси OX прямоугольника с количеством существ.
+150 dd = ?
+154 dd = Частота проигрывания случайной анимации.
Чем меньше тем чаще. Поставьте 200, будет без перерыва
+158 dd = ?
+15C dd = ?
+160 dd = ?
+164 dd = Анимация существа (загруженный def?)
+168 dd = Анимация снаряда (загруженный def?)
+16C dd = ?
+170 dd = Звук перемещения (загруженный wav?)
+174 dd = Звук атаки (загруженный wav?)
+178 dd = Звук урона (загруженный wav?)
+17C dd = Звук выстрела (загруженный wav?)
+180 dd = Звук смерти (загруженный wav?)
+184 dd = Звук защиты (загруженный wav?)
+188 dd = ?
+18C dd = ?
+190 dd = ?
+194 dd = Кол-во активных заклинаний (для отображения цвета кол-ва существ)
+198 dd*51h = Spells duration (81 spell)
+2DC dd*51h = Spells level (81 spell)
+420 dd = ?
+44C dd = Кол-во активных заклинаний (Для отображения при щелчке правой кнопкой)
+454 dd = Number of retaliations
+458 dd Bless добавка к Max. Damage
+45C dd Curse убавка к Min. Damage
+460 dd AntiMagicEffect
+464 dd Bloodlust добавка к Атаке с бонусами
+468 dd Precision добавка к Атаке с бонусами
+46C dd WeaknessAddedEffect
+470 dd StoneSkinAddedBonus
+478 dd PrayerAddedBonus
+47C dd MirthEffect
+480 dd SorrowEffect
+484 dd FortuneEffect
+488 dd MisfortuneEffect
+48C dd KING_123 тип (1=KING_1, 2=KING_2, 3=KING_3) исп для расчета Slayer. Бонус 8 к Атаке: 0x4421D2
+490 dd Кол-во пройденных клеток до удара
+494 dd кол. доп. ответов на атаку, добавленных Counerstrike заклом
+49C float = BlindCounterattackDamageMul
+4A0 float = Fire Shield multiplier
+4A8 float = ProtAirMul
+4AC float = ProtFireMul
+4B0 float = ProtWaterMul
+4B4 float = ProtEarthMul
+4B8 float = ShieldMul
+4BC float = AirShieldMul
+4C0 db Blinded - снизить дамаг удара при оживании (сбросить после?) при атаке на него (уст. перед ударом)
+4C1 db Paralized - снизить дамаг удара при оживании (сбросить после?) при атаке на него (уст. перед ударом)
+4C4 dd = forgetfulness level (>2 - не может стрелять)
+4C8 float = slow multiplier
+4CC dd = HasteAddedBonus (вычитается из скорости при снятии)
+4D0 dd = DeseaseAddedEffect_Defence
+4D4 dd = DeseaseAddedEffect_Attack
// +4DC dd = величина бонуса при выборе защиты
// +4E0 dd заклинание для сказ дракона
+4E4 dd = MagicMirrorEffect
+4E8 dd = Мораль существа
+4EC dd = Удача существа (44152A)
Комментарий Demiurg'а: Мораль и удача пересчитывается при передаче хода другому существу. Поэтому полезно только для получения или проверки. Если очень нужно менять то можно делать это или перед атакой, или каждый ход - ShadowTheAge
// +4F1 db 43DF88
+508 dd = используется при снятии корней Дендроидов
+50C dd = используется при снятии корней Дендроидов
// +514 dd
// +518 dd -> dd first \ adjusted stacks pointers
// +51C dd -> dd last /
// +524 dd
// +528 dd -> dd first \ adjusted to wich stacks pointers (used when Hypnotize is removed)
// +52C dd -> dd last /
XEPOMAHT, а от кого исходники по WoG с дополнительными комментариями и описанием адресов/действий? от ShadowTheAge?
|