| 
 
				 (17.07.2020 16:51)XEPOMAHT Wrote:  Попросили выложить сюда и структуру стека - выкладываю.XEPOMAHT
 
 
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  /
 , а от кого исходники по WoG с дополнительными комментариями и описанием адресов/действий? от ShadowTheAge?
			 |