Полная версия этой страницы:
Вопросы по модификации
feanor
18 Jul 2013, 10:20
..сказал автор BattleFigures)
Покажите пример txt'шника, подготовленного для конвертации в *.bin. И, может вопрос слишком глупый, но куда "binary.bat" сохранияет готовые bin'ы? Чето не похоже, чтобы сохраняла в свою папку...
feanor
14 Sep 2013, 22:18
Цитата(no_underground_at_underground.txt)
464044 EB
В свою, только что проверил.
У меня не сохраняет. Странно.
binary.bat
@echo off
BinMagic.exe ^
Cmd=ConvertPatch ^
SourcePatch=%1 ^
ResultPatch="%~n1.bin" ^
PatchFor=Memory ^
Optimize
Berserker
15 Sep 2013, 23:05
В ту же папку. Вы как батник запускаете?
создаю txt файл с кодом, сохраняю и перетаскиваю его на "binary.bat". cmd'шное окошко запускается на доли секунды, но без толку...
Список файлов в папке "BinMagic 1.0"
apply.bat
binary.bat
binmagic.exe
binmagichelp.txt
defaultaddrconverter.dll
diff.bat
file.bat
text.bat
всё на Win XP
пробовал на коде feanor'a
464044 EB
И на:
* установка преобразований существ в Skeleton Transformer
* код для ERM
!!UN:C8142696/4/154; Кровавый дракон не преобразуется в преобразователе скелетов
код txt для bin:
//иммунитет Кровавых драконов в преобразователе скелетов
7C3F68 9A
P.S. думал мое сообщение было удалено, а оно оказалось просто перенесено сюда
Iv, у меня с твоими файлами нормально поменялся деф. Может у тебя какой-то файл пересекается?
А на эксперте магии воды вызываются Архангелы. Так и должно? Хотя в скрипте так и есть.
P.S. спасибо
Iv, получилось. Вопрос закрыт
Цитата(igrik @ 14 Sep 2013, 22:15)

Покажите пример txt'шника, подготовленного для конвертации в *.bin.
https://dl.dropboxusercontent.com/u/5852703...M/startarmy.txtЛично я писал в командной строке Total commander'a binary.bat startarmy.txt и у меня получался нужны бинарник
Berserker
17 Sep 2013, 17:57
CTRL + Enter на binary.bat в командере автоматом добавляет имя программы в командную строку.
kostya76
18 Sep 2013, 19:09
Каким образом можно передать ход следующему стэку в битве? Нужно для таймера в бою между игроками.
Команда !!BG:A3 в триггере !?TL работает, но не при открытой книге магии. Хорошо бы было иметь возможность проверять открыта ли книга и закрывать принудительно.
Как заменить способности существа?
Какие именно способности? Уточняйте.
Хочу заменить Посланников,а для этого,надо очистить их способности.
Docent Picolan
20 Sep 2013, 14:26
Цитата
Вроде всё.
с таким уровнем подробностей описания это вряд ли можно назвать инструкцией)
человек вообще не знакомый с происходящим застопорится уже на втором пункте. а тот кто с происходящим знаком и так знает что делать
Цитата(Docent Picolan @ 20 Sep 2013, 15:26)

Цитата
Вроде всё.
с таким уровнем подробностей описания это вряд ли можно назвать инструкцией)
Где в моём сообщении слово "инструкция"?
Приведи пример лучше, если такой есть, то значит, задуманный гайд/статья по моддингу Героев будет не нужна.
Цитата(Docent Picolan @ 20 Sep 2013, 15:26)

человек вообще не знакомый с происходящим застопорится уже на втором пункте. а тот кто с происходящим знаком и так знает что делать
Значит,
Adept не знаком с моддингом.
Docent Picolan
20 Sep 2013, 14:51
Цитата
Где в моём сообщении слово "инструкция"?
нигде, и это не претензия.
просто, наверное, куда больший смысл есть в этакой универсальной статье для любой аудитории. чтоб давать сюда ссылку всем и не отвечать потом на гору сопутствующих вопросов.
feanor
20 Sep 2013, 14:55
Положительная обратная связь. В сцене мало народу -> некому писать мануалы -> новые люди не могут ни черта понять -> народу больше не становится -> мануалы писать по-прежнему некому..
Ну, еще дополнительные негативные факторы в виде закрытости этой самой сцены и печального состояния инструментария.
Цитата(Docent Picolan @ 20 Sep 2013, 15:51)

Цитата
Где в моём сообщении слово "инструкция"?
нигде, и это не претензия.
просто, наверное, куда больший смысл есть в этакой универсальной статье для любой аудитории. чтоб давать сюда ссылку всем и не отвечать потом на гору сопутствующих вопросов.
Разумеется. И я планирую по возможности обобщить накопленный опыт, написав такую статью. Вопрос во времени и мотивации))
Раз пошла такая пьянка - начал писать
гайд :-)
Минуточку,никто не ответит на мой вопрос?
feanor
20 Sep 2013, 16:39
Нет. Hero of Light, впрочем, опытным путем выяснил, что им можно выдать стрельбу и плясать от нее.
feanor
02 Oct 2013, 12:21
О ERM и реверсинге)
Цитата
"А Тимор настроил дисплей станции на крупный формат — наверное, Белль так легче было воспринимать, что он делает. Это были ненужные старания, потому что четверка свернулась на полу вокруг его стула, все глаза были закрыты. Но сейчас Тимор этого не замечал, он увлеченно размахивал руками. Это была не какая-то обычная игра, а что-то… куда более простое. Равна видела простые точечные маркеры, составляющие строки поперек плоскости. Внизу надписи вроде как на каком-то синтетическом машинном языке, трехбуквенные сокращения и числовые операнды.
— Похоже, что он написал какой-то двоичный счетчик, — тихо сказал Овин. — Печально. Недопустимо тратить силы человеческого разума на такие тривиальные задачи."
Intofire
05 Oct 2013, 09:57
скиньне плиз DefPreview или def viewer, а то все ссылки давно битые.
или как дефулом деф в картинки перегнать?
Скачай Эру, там папка Tools и там ты найдешь DefPreview
Цитата
дефулом деф в картинки перегнать
никак, он собирает из картинок дефы. Деф в картинки перегнатьсможешь через DefPreview
Docent Picolan
05 Oct 2013, 14:26
Цитата(Какой-нибудь ник @ 05 Oct 2013, 10:57)

скиньне плиз DefPreview или def viewer, а то все ссылки давно битые.
https://sites.google.com/site/sergroj/wog/D...?attredirects=0
Кто-нибудь пробовал менять озвучку монстрам, в частности, командирам?
totkotoriy
06 Oct 2013, 20:57
Цитата(Iv @ 05 Oct 2013, 20:04)

Кто-нибудь пробовал менять озвучку монстрам, в частности, командирам?
Да... менял в exe hex едитором.... можно наверное и патчем для ЭРА сделать
feanor
06 Oct 2013, 21:04
Дак и фрагмент кода под это дело есть.
Berserker
06 Oct 2013, 22:55
Я в Роще такой код использовал:
Код
; Change creature sounds
; Arguments: TargetMon
; z1 holds new 4-letter name
!?FU111112;
!!UN:C4697553/4/?y1; y1 - MonInfo Table
!!VRy2:S116*x1+y1+8; y2 - address of sound pointer
!!UN:Cy2/4/?y3;
!!SN:K4/?z1/y3/1;
...
!!VRz1:S^treb^; !!FU111112:P139;
...
Надеюсь, верно понял.
Цитата(Berserker @ 06 Oct 2013, 23:55)

Я в Роще такой код использовал:
[code]; Change creature sounds
; Arguments: TargetMon
; z1 holds new 4-letter name
!?FU111112;
!!UN:C4697553/4/?y1; y1 - MonInfo Table
!!VRy2:S116*x1+y1+8; y2 - address of sound pointer
!!UN:Cy2/4/?y3;
!!SN:K4/?z1/y3/1;
...
!!VRz1:S^treb^; !!FU111112:P139;
...[/code
Надеюсь, верно понял.
Спасибо, поэкспериментирую
Цитата(Berserker @ 06 Oct 2013, 23:55)

Надеюсь, верно понял.
Уточняю: я заменил модельку командира Замка - паладина на модель гиппогрифа, но он всё равно двигается с лязганьем, т.к. озвучка ему привязана - crus (крестоносец). Хочу поменять озвучку на rgrf (королевский грифон), или поставить свою
Berserker
07 Oct 2013, 13:07
Значит будет работать.
Кто-нибудь пробовал в SpTraits указать для баффов/дебаффов в поле Power значение, отличное от 0? Будет ли действовать SP героя на эффективность заклинания?
UPD не сработало, игра даже один раз вылетела
Berserker
13 Oct 2013, 00:28
Вряд ли.
Цитата(Berserker @ 07 Oct 2013, 14:07)

Значит будет работать.
Сделал такой скрипт
Нажмите для просмотра прикрепленного файлаПоложил в \Heroes III\Mods\Another heroes\Data\s\
Не сработало. Командир замка так и продолжал лязгать как мечник
feanor
14 Oct 2013, 21:15
Эм, а последнюю строку (!!FU111112:P174;) кто запускать-то будет?
Нужно что-то типа
!?PI;
!!FU111112:P174;
!!FU111112:P183;
!?GM0;
!!FU111112:P174;
!!FU111112:P183;
kostya76
14 Oct 2013, 22:14
Как сделать,чтобы при изменении типа почвы на воду с помощью ЕРМ появилась возможность высаживаться с лодки на берег? Установка второго бита восьмого параметра команды !!TR:T для клеток берега помогает лишь частично: высадиться можно только на клетку граничащую с убитой ранее охраной, да и то не всегда.
Еще хотелось бы узнать адрес структуры struct _MapItem_, в которой хранятся в том числе и установки доступа клеток карты. Из описания в в файле structs.txt сорцев Вога не смог разобраться с адресом.
feanor
14 Oct 2013, 22:45
Цитата
Как сделать,чтобы при изменении типа почвы на воду с помощью ЕРМ появилась возможность высаживаться с лодки на берег?
Полагаю, нужно поместить фантомные объекты типа 3 подтипа -1 на все клетки рядом с новой водой.
Цитата
Еще хотелось бы узнать адрес структуры struct _MapItem_, в которой хранятся в том числе и установки доступа клеток карты. Из описания в в файле structs.txt сорцев Вога не смог разобраться с адресом.
0x6992B8 - указатель на advManager
+92 от advManager - указатель на GameMap
+208 от GameMap - массив MapItemов
еще можно через функцию inline _MapItem_* GetItem(_int_ x, _int_ y, _int_ z)
{
return CALL_4(_MapItem_*, __thiscall, 0x4086D0, this, x, y, z);
}
её код, к слову
Код
int __thiscall GetMapItemPoByXY(int this, int a2, int a3, int a4)
{
[nbs][/nbs][nbs][/nbs]return *(_DWORD *)(this + 208) + 38 * (a2 + *(_DWORD *)(this + 212) * (a3 + a4 * *(_DWORD *)(this + 212)));
}
this - это GameMap
Iv, вот этот работает. Проверено
Код
; Arguments: TargetMon
; z1 holds new 4-letter name
!?PI; как писал feanor -при старте и загрузке карты
!!FU111112:P174;
!!FU111112:P183;
!?GM0;
!!FU111112:P174;
!!FU111112:P183;
!?FU111112;
!!UN:C4697553/4/?y1; y1 - MonInfo Table
!!VRy2:S116*x1+y1+8; y2 - address of sound pointer
!!UN:Cy2/4/?y3;
!!VRz1:S^RGRF^; тут нужно было сначала записать назавание в переменную
!!SN:K4/z1/y3/1;а только потом устанавливать звук
kostya76
15 Oct 2013, 00:25
Цитата(feanor @ 15 Oct 2013, 00:45)

Полагаю, нужно поместить фантомные объекты типа 3 подтипа -1 на все клетки рядом с новой водой.
Вылетает при помещении такого объекта. Хотя я раньше пробовал вроде помещать объект типа 3/0 - не помню, чтоб вылетало, но и эффекта не было.
Главное, что при помещении любого объекта на берег и последующем удалении якорь таки появляется. Это прорыв)) Как я сразу не допер.
Еще бы научиться героев с тюрем и таверн на воде в лодку сажать, и морской шаблон готов. MoP, помнится, выкладывал что-то похожее, но там на Эре с помощью !!SN:E сделано.
Цитата(igrik @ 14 Oct 2013, 23:48)

Iv, вот этот работает. Проверено
Код
; Arguments: TargetMon
; z1 holds new 4-letter name
!?PI; как писал feanor -при старте и загрузке карты
!!FU111112:P174;
!!FU111112:P183;
!?GM0;
!!FU111112:P174;
!!FU111112:P183;
!?FU111112;
!!UN:C4697553/4/?y1; y1 - MonInfo Table
!!VRy2:S116*x1+y1+8; y2 - address of sound pointer
!!UN:Cy2/4/?y3;
!!VRz1:S^RGRF^; тут нужно было сначала записать назавание в переменную
!!SN:K4/z1/y3/1;а только потом устанавливать звук
Спасибо, хотя я методом тыка уже самостоятельно смог заставить работать этот скрипт. Теперь чешу затылок на тему, как сделать замену для остальных 8 командиров. Получается, надо ещё 8 функций? Можно использовать одну и ту же z1?
2 Iv, я думаю, что можно через одну и ту же z1
Таким способом:
Код
!!VRz1|x1=174/x1=183:S^звук 1^;для командира замка
!!VRz1|x1=175/x1=184:S^звук 2^;для командира оплота
!!VRz1|x1=176/x1=185:S^звук 3^;для командира башни
и т.д.
2 kostya76,Цитата
Вылетает при помещении такого объекта.(тип 3 подтип -1)
Так в справке и написано, что:
Цитата
Эти объекты не будут работать корректно и могут вызвать нестабильность игры, вылет карты или другие проблемы при помещении:
.....
Якорь (тип = 3) - игра вылетит при попытке помещения объекта
.....
feanor
15 Oct 2013, 11:00
Цитата
Можно использовать одну и ту же z1?
Да, можно. А еще лучше - напиши список замен, я бинарник сделаю.
Цитата(feanor @ 15 Oct 2013, 12:00)

Цитата
Можно использовать одну и ту же z1?
Да, можно. А еще лучше - напиши список замен, я бинарник сделаю.
По результатам тестов состав может измениться.. Ну да ладно, пока для
текущего состава:
Замок (174/183 Гиппогриф) - rgrf
Оплот (175/184 Волшебный дракончик) - fdfl
Башня (176/185 Ледяной кот) - hgwr
Инферно (177/186 Кусака) - cerb
Некрополь (178/187 Кост. гончая) - sklw
Подземье (179/188 Дракончик) - scrp
Цитадель (180/189 Кабаноид) - boar
Крепость (181/190 Шершень) - fdfl
С заменой последнему пока не определился
dik X.B.
24 Oct 2013, 05:46
Цитата(Berserker @ 02 Oct 2013, 20:28)

Цитата
WinRar: Advanced SFX Options:
Path to extract: <Heroes3>
* Create in current folder
[+] Save and restore paths
Run after extraction: Tools\installmod.exe "MODNAME"
Цитата
Пользовательские наборы объектов для редактора карт не имеет смысла распространять с zeobjts.txt. Вместо это создайте Mods\[имя мода]\Objects\[уникальное имя].txt файл такого же формата, только с новыми объектами. Тогда Ваш набор объектов будет добавлен к наборам из других модов и базовому содержимому редактора.
У меня они появляются во вкладке сокровища и только как декоративные объекты, иначе исчезают из редактора. Это так и должно быть?
И еще вопрос. Пытался расположить объекты в zeobjts.txt по своему усмотрению (напр. все зимние в снежный ландшафт - не получилось, нахожу их где угодно, но не в нужной вкладке. Как это можно исправить?
Цитата(dik X.B. @ 24 Oct 2013, 06:46)

У меня они появляются во вкладке сокровища и только как декоративные объекты, иначе исчезают из редактора. Это так и должно быть?
И еще вопрос. Пытался расположить объекты в zeobjts.txt по своему усмотрению (напр. все зимние в снежный ландшафт - не получилось, нахожу их где угодно, но не в нужной вкладке. Как это можно исправить?
Не надо засорять FAQ частными вопросами
kostya76
19 Nov 2013, 09:38
Можно ли с помощью ЕРМ сэмулировать нажатие клавиши space? Нужно для посадки героя в лодку при освобождении из тюрьмы, найме в таверне на воде. Иначе таки придется делать вызов функции по аналогии с SN:E в Эре.
feanor
20 Nov 2013, 12:22
Цитата
Можно ли с помощью ЕРМ сэмулировать нажатие клавиши space? Нужно для посадки героя в лодку при освобождении из тюрьмы, найме в таверне на воде. Иначе таки придется делать вызов функции по аналогии с SN:E в Эре.
Без Эры? Пожалуй, нет.
..да и с Эрой у меня не получалось.
hippocamus
20 Nov 2013, 13:33
Ну, по идее это же системная функция винды должна быть, по управлению буфером клавы. В Дос такое делал, помню, через int 16h.
Хотя, если игра напрямую отлавливает нажатия клавы (а наверное так, т.к. мультимедийные неверно обрабатывает) - тогда нужно вызывать функцию внутреннего обработчика.
feanor
20 Nov 2013, 14:51
Ну у меня была какая-то проблема конкретно с пробелом. Возможно, проверю еще раз.
kostya76
20 Nov 2013, 19:20
Цитата(hippocamus @ 20 Nov 2013, 15:33)

Ну, по идее это же системная функция винды должна быть, по управлению буфером клавы. В Дос такое делал, помню, через int 16h.
Хотя, если игра напрямую отлавливает нажатия клавы (а наверное так, т.к. мультимедийные неверно обрабатывает) - тогда нужно вызывать функцию внутреннего обработчика.
Раз с этим такие сложности, проще действительно вызывать функцию, которая садит героя в лодку.
Вот, собственно, ЕРМ-код для Эры, который МоР предлагал:
Цитата(MasterOfPuppets)
Код
!?FU@FunctionNumber@;
; x1: 0 - посадить Гиппокамуса в лодку, другое значение - вытолкнуть его из лодки
; x2 - номер Гиппокамуса [см. паспортные данные]
; x3-x5 - координаты клетки, где стоит лодка [должна существовать хоть одна лодка на карте]. Для высадки координаты не требуются и герой появляется там же, где стояла лодка.
!!UN:C6918840/4/?y2; //получить адрес AdvManager
!!SN:E7411341/1/x2; //получить адрес структуры героя
!!VRy3:Sv1;
!!if&x1=0;
!!HEx2:Px3/x4/x5; //переместить героя в лодку, ибо когда он будет посажен, переместить его не выйдет
; Коммент: можно в любую точку, просто будет использована одна из существующих лодок, в которую и превратится герой
!!VRx5:*4; //умножить уровень на 4
!!UN:C10784129/1/0 C10784128/1/x3 C10784130/1/x4 C10784131/1/x5; //записать все данные побайтно в адрес y1
!!SN:E7410371/1/y1; //получить адрес структуры клетки
!!SN:E4852864/2/y2/y3/v1; //посадить героя в лодку [MP обнулятся]
!!el;
!!SN:E4842208/2/y2/y3/1;
!!en;
!!UN:R1; //обновить экран мира
Что-то типа этого. Не исключаю багов.
На Эре не проверял, но в отладчике бряк на этой функции sub_004A0C80
Код
void __thiscall sub_004A0C80(void *this, int a2, int a3)
{
int v3; // edx@1
int v4; // ebx@1
int v5; // edi@1
int v6; // esi@1
int v7; // edx@1
signed int v8; // eax@3
int v9; // eax@6
signed int v10; // [sp+14h] [bp+8h]@3
int v11; // [sp+18h] [bp+Ch]@3
v5 = (int)this;
v4 = Main_Structure->Boats + 40 * *(_DWORD *)a3;
HideHero(v4);
v6 = a2;
v7 = *(_DWORD *)(a2 + 261);
*(_DWORD *)(a2 + 274) = -1;
v3 = v7 | 0x40000;
*(_DWORD *)(a2 + 278) = -1;
*(_DWORD *)(a2 + 261) = v3;
if ( !(v3 & 0x1000000) )
{
if ( HeroHasArt((_Hero_ *)a2, 136) )
{
v10 = *(_DWORD *)(a2 + 73);
v11 = *(_DWORD *)(v6 + 77);
v8 = CalcHeroMovementPoints(v6, 1);
*(_DWORD *)(v6 + 73) = v8;
*(_DWORD *)(v6 + 77) = v11 * v8 / v10;
}
else
{
*(_DWORD *)(a2 + 77) = 0;
}
sub_00403560(*(void **)(v5 + 68), -1, 1, 1);
}
v9 = *(_DWORD *)(v6 + 26);
*(_BYTE *)(v4 + 36) = 1;
*(_DWORD *)(v4 + 32) = v9;
LOBYTE(v9) = *(_BYTE *)(v6 + 34);
*(_BYTE *)(v4 + 28) = v9;
if ( IsThisGamer((int)Main_Structure, v3, (char)v9) )
{
*(_DWORD *)(v5 + 496) = 8;
*(_DWORD *)(v5 + 500) = *(_BYTE *)(v4 + 27);
*(_DWORD *)(v5 + 504) = 0;
*(_DWORD *)(v5 + 508) = sub_004D93D0(v4);
*(_BYTE *)(v5 + 492) = 1;
Draw_Map2(v5, 0);
sub_0040F1D0((void *)v5, 0, 0);
}
}
действительно срабатывает при посадке героя в лодку.
Надо только найти, как хук на триггер !?ОВ поставить.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.