Предлагаю вашему вниманию пакет, предназначенный для изменения некоторых параметров игры, связанных, в основном, с экраном города. В числе возможностей:
- Добавление зданий (незадействованных из диапазона номеров 0...43).
- Активация зданий (желтая окантовка)
- Задание координат и имен файлов для строений на экране города
Для WoG 3.58f (rapidshare, slil.ru)(h3wog.exe 3,440,640 байт 26.10.04 22:23,
если данные другие, можно скачать подходящий h3wog.exe)
Для TE 1.03q
А по подобнее плиииииз...
Demiurg
26 Oct 2007, 23:01
Можно сделать, чтобы с TE тоже работало?
Про использование написано в readme.txt. Если будет надо, напишу инструкцию... А пока чуть подробнее:
Программа модифицирует h3wog.exe и позволяет задать некоторые параметры для вида города:
- порядок и номера строений, отображаемых на экране города
- координаты, спрайты, окантовки и маски зданий в городе.
(при этом можно задействовать весь диапазон зданий - 0...43. Маска позволяет сделать здание активным - реагирующим на щелчки и движение мыши)
- существа в ордах - (зданиях, повышающих прирост существ) - не тестировано.
- включение/отключения взаимодействия орд с жилищами при постройке (по умолчанию из четверки жилище/улучшенное/жилище с ордой/улучшенная орда может быть построено только одно)
- строить ли домики при постройке Префектуры-Муниципалитета-Капитолия
Docent Picolan
26 Oct 2007, 23:20
спасибо за прогу!

думаю очень пригодится создателям городов.
Под TE патч не работает, и суть проблемы неясна. При этом даже непатченый h3te.exe не пашет под отладчиком (Visual Studio 8) - вылетает та же ошибка. Надо разбираться...
Чуть не забыл - благодарность за идею: Deo.
Demiurg
27 Oct 2007, 00:07
Наверное, дело в защите exe'шника.
Сомневаюсь... Если защита и была в SoD, Слава ее уже должен был снять. Я думаю, что скорее всего там какая-то специфическая для TE операция зависит от специфических факторов, типа взаимодействия потоков, адресов в куче или значений над вершиной стека. Впрочем, это догадки, я слабо представляю себе детали работы дебаггеров.
gamecreator
27 Oct 2007, 01:11
и как назло выложил на два худших сервера

но я все-же скачал. спасибо за прогу.
Действительно спасибо
NickLee
27 Oct 2007, 22:49
Полезная штука... Спасибо
Жалко не под ТЕ... И дель возможно действительно в защите... Но не от СоД, а от ZVS...
не просто жалко, а АРХИПЛОХО!!!

Надеюсь, что Irh сможет всё же обойти эту проблему...
izrukvruki
31 Oct 2007, 12:52
У меня такой вопрос. Вот смотрю файл bxtraits.txt
Код
No X Y Frm Spr Outline
8
22 -1 -1 -1 -1 -1
7 -1 -1 -1 -1 -1
8 -1 -1 -1 -1 -1
9 -1 -1 -1 -1 -1
36 -1 -1 -1 -1 -1
как я понял это изменение для Конфлюкса.
22 - это волшебный фонарь
7 - Кузница
8 - Рынок
9 - Хранилище ресурсов
36 - НЕ ИСПОЛЬЗУЕТСЯ
За что отвечает порядок строк?
Номер строения это что такое?? Я понял так, что вместо нулевого строения строится 22, вместо первого 7...
Газете...
Я не знаю, что тут за номера, но скорее всего номера брались из таблицы строений города (общая для всех)
Немного поясню насчёт строений Конфлюкса (благо это пришлось изучать):
Цитата
0 Гильдия магов уровня 1
1 Гильдия магов уровня 2
2 Гильдия магов уровня 3
3 Гильдия магов уровня 4
4 Гильдия магов уровня 5
5 Таверна
6 Верфь
7 Форт
8 Цитадель
9 Замок
10 Сельская управа
11 Префектура
12 Муниципалитет
13 Капитолий
14 Рынок
15 Хранилище ресурсов
16 Кузница
17 Торговцы
18 Строение орды для неулучшенных существ: Маленьких Фей
19 Строение орды для улучшенных существ: Феи
20 Корабль (если имеется Верфь)
21 Университет магии
22 не используется
23 не используется
24 Строение орды для неулучшенных существ: не используется
25 Строение орды для улучшенных существ: не используется
26 Грааль
27 Дополнительные дома для Префектуры
28 Дополнительные дома для Муниципалитета
29 Дополнительные дома для Капитолия
30 Жилище 1го уровня
31 Жилище 2го уровня
32 Жилище 3го уровня
33 Жилище 4го уровня
34 Жилище 5го уровня
35 Жилище 6го уровня
36 Жилище 7го уровня
37 Улучшенное жилище 1го уровня
38 Улучшенное жилище 2го уровня
39 Улучшенное жилище 3го уровня
40 Улучшенное жилище 4го уровня
41 Улучшенное жилище 5го уровня
42 Улучшенное жилище 6го уровня
43 Улучшенное жилище 7го уровня
Красным отмеченыте строения, которые в игре не используются.
К примеру, 22 нигде нету, но оно вроде как всё время построено (при любой постройке оно строится).
А 27-29 отстраиваются вместе с постройкой соответствующий им строений (11-13)
izrukvruki
31 Oct 2007, 15:14
Бес спасибо, но то что ты мне в личку написал - нифига не понял... и обяснять не нуно.
с номерами тогда понятно.
а их последовательность на что влияет? чем 22 7 8 9 36, отличается от 7 22 9 8 36???
Вопрос еще такой: получается что можно использовать для строений СВОИ дефы? т.е. не заменять старые дефы, а добавить свои и сделать несколько вариантов экзешника один для стандартной игры, а другой с новыми дефами
как я понял из вашего поста (#14) , там просто написано списком здания... это, имхо, не важно как их располагать в последовательности.
Цитата
Вопрос еще такой: получается что можно использовать для строений СВОИ дефы? т.е. не заменять старые дефы, а добавить свои и сделать несколько вариантов экзешника один для стандартной игры, а другой с новыми дефами
ну, если вы в своём новом ехе-шникесопоставите неиспользуемые здания с новыми именами дефов для них... то по идее такой вариант подойдёт.
Ведь для неиспользуемых зданий в оригинальном ехе-шнике имена дефов не прописаны, вроде.
gamecreator
31 Oct 2007, 15:51
Цитата(izrukvruki @ 31 Oct 2007, 15:14)
т.е. не заменять старые дефы, а добавить свои и сделать несколько вариантов экзешника один для стандартной игры, а другой с новыми дефами
думаю это будет возможно только при динамической подгрузке ресурсов
Цитата(Bes @ 31 Oct 2007, 14:29)
0 Гильдия магов уровня 1
...
Да - это формат CMI/CB, не U. А индекс в массиве с номерами зданий не связан.
Последовательность номеров - насколько я понял, просто последовательность отрисовки на экране, это важно, если здания перекрываются.
Номера в bxtraits.txt (это просто пример) я скопировал из ехе, чтобы сохранить существующий порядок зданий в Сопряжении.
Цитата(izrukvruki @ 31 Oct 2007 @ 16:14)
Вопрос еще такой: получается что можно использовать для строений СВОИ дефы? т.е. не заменять старые дефы, а добавить свои и сделать несколько вариантов экзешника один для стандартной игры, а другой с новыми дефами
Именно так. Просто заменить соответстующие строки в exe. Правда, много имен файлов придется менять... но это имхо стоит сделать. Несколько сложнее со зданиями, которые не присутствуют в списке, но тоже можно - изменить адреса строк в таблице и прописать новые имена файлов.
Надеюсь все же сделать вскоре новый патч для TE с ограниченной функциональностью - по крайней мере, с добавлением зданий принципиальных проблем нет.
gamecreator
31 Oct 2007, 22:22
Цитата(Irh @ 31 Oct 2007, 18:59)
Просто заменить соответстующие строки в exe.
может вынесешь тогда это в опцию в текстовик?
izrukvruki
01 Nov 2007, 10:12
т.е. порядок имеет значение если здания перекрываются?
например если здания 22 7 8 9 36 перекрываются, то 36 будет выше всех на экране, а 22 самая нижняя.
а вот в посте Беса, что за номера 24 и 25?
что будет если построить незадействованные постройки? их можно будет как-то настроить?
Цитата(gamecreator @ 31 Oct 2007, 23:22)
Цитата(Irh @ 31 Oct 2007, 18:59)
Просто заменить соответстующие строки в exe.
может вынесешь тогда это в опцию в текстовик?
В контексте идет речь о спрайтах зданий - это уже сделано, в bxtraits.txt можно прописать любое имя файла.
А в перспективе можно будет добавить и другие строки (иконки, имена текстовых файлов).
Цитата(izrukvruki @ 01 Nov 2007, 11:12)
т.е. порядок имеет значение если здания перекрываются?
например если здания 22 7 8 9 36 перекрываются, то 36 будет выше всех на экране, а 22 самая нижняя.
По-видимому, да. Костер и замок там на заднем плане...
Цитата
а вот в посте Беса, что за номера 24 и 25?
что будет если построить незадействованные постройки? их можно будет как-то настроить?
>24 Строение орды для неулучшенных существ: не используется
>25 Строение орды для улучшенных существ: не используется
Вторая орда (используется в Инферно и Оплоте) - единственные незанятые номера в Сопряжении, поэтому я их использовал в примере. Вроде работает, хотя с функциональностью орды уверенности нет.
Darkmoon
01 Nov 2007, 17:08
Спасибо!
Я надеюсь, что данное дополнение поможет нам в создании Кремля.
hippocamus
02 Nov 2007, 12:39
Цитата(izrukvruki @ 01 Nov 2007, 10:12)
что будет если построить незадействованные постройки? их можно будет как-то настроить?
Как-то строят ведь в аддоне QuickSilver. Там у них есть новые постройки. Имхо с незадействованными номерами. А вообще эти номера можно использовать как флаги.
Ну, видимо, аналогичным способом редактируют ехешник или память...
Berserker
05 Nov 2007, 20:49
Если Ирх сможет весь код патча сделать ввиде длл и экспортируемой процедуры, то патчить можно динамически.
В общем, можно не трогая Славин код пропатчить ехешник всего в одном месте, в геройской процедуре, но нужен ответ от ЕРМ, чтобы всё это происходило после того, как защита проверит данные.
Вот файл:
www.rebirth.nekislohost.com/FILES/HEROES/HeroesExe.zip
Нужен тестинг. В архив три файла, библиотеку и ехешник помещаем в корневой каталог, скрипт переименовываем в script98.erm и кидаем в Data\s. Ехешник запустится у тех, к кого стоит ТЕ или Феникс.
Меня интересует вот что, работает ли на вин2000 и вин98.
Начните любую карту, если вылетов не будет, значит всё ок.
hippocamus
07 Nov 2007, 02:44
Berserker, загрузил

Ну ты крут!за Феникс спасибо.
Цитата(Irh)
Вроде работает, хотя с функциональностью орды уверенности нет
Нет не работает (функциональность, в смысле), просто строятся "невидимые здания" и всё

(ресивер !!MA:R#/$ игнорируется)
Это касаемо Сопряжения... с др. городами не знаю.
Ясно, интересный факт... Но, наверное, отвязывать орду от жилища не имеет смысла, так что это не так уж плохо? Впрочем, если в одном из городов планируется вторая орда, имеет смысл исследовать этот вопрос подробнее.
Впрочем, орда имхо связана скорее с балансом, чем с концепцией, так что лучше иметь свободу маневра в этой области.
Berserker
07 Nov 2007, 20:28
Ехешник глючит, причины пока не выяснены. Просьба не качать пока...
Ну вот, вроде как удалось заставить работать патч под ТЕ. Посмотрим, что будет...
при посещении Замка (город тот, что слева) на карте для тестинга, вылетает такое...

После чего игра вылетает (попутно выкинув сообщение, типа ERM Lаtest Code... и т.п.)

Точно

. Сейчас исправим...
кстати, забыл указать вам, что скрипт в карте вы забыли задать на день >500... Поэтому при старте выскакивает событие с содержимым вашего скрипта

(не страшно вроде, но и не красиво как-то)
Цитата(Irh @ 26 Oct 2007, 23:44)
Ну вот, так вроде лучше. Теперь все замки работают, не только те, что прописаны в bxtraits.txt.
Кроме того, добавилась замена иконок зданий размером 58х64. Правда, не смог вспомнить, где они используются

.
Если кто уже модифицировал bxtraits.txt и не хочет заменять файл, нужно добавить справа столбец -1-чек - сделать это проще в Excel.Добавлено ([mergetime]1194546152[/mergetime]):
Цитата(Bes @ 08 Nov 2007, 21:10)
кстати, забыл указать вам, что скрипт в карте вы забыли задать на день >500... Поэтому при старте выскакивает событие с содержимым вашего скрипта

(не страшно вроде, но и не красиво как-то)
Я всегда так делаю, когда тестирую скрипты, чтобы иметь возможность лишний раз проверить, что я запускаю. А тут вместе со скриптом выводится его описание. Так что прошу отнестись к этому, как к фиче

.
Berserker
08 Nov 2007, 21:23
Great!
Слушай Ирх, не мог бы ты мне помочь, так как я с цифрами не в ладах и выставить координаты здания в текстовом файле мне слабо

. В общем я тебя попросил бы выставить координаты здания для людского города по картинке, которой я тебе брошу. Если сделаешь, буду признателен
можно попробовать... мыло в профиле.
Действительно - есть такая проблема, что если нужно не заменять полностью город, а просто поменять или вставить свое здание, то непонятно, откуда брать номера зданий. Вот текстовые файлы с настройками по умолчанию для всех городов.
http://woggrad.ru/ARCHIVE/index.php?action...MODS_AND_PACKS&
Berserker
25 Nov 2007, 20:49
Ирх, а где первый вариант проги со статическим патчем? Мне он нужен...
Griffit
27 Nov 2007, 02:20
Айяйяй хаспадын Бюрзеркер!!!Как никарашо!!!Ставить в подпись официально не спетую еще песню Епидемии!!Никарашо никарашо. Впрочем тоже не люблю зеленых птичек
Что значит статический? Для WoG который?
Добавлено ([mergetime]1196191205[/mergetime]):
Он в первом посте.
Berserker
28 Nov 2007, 20:42
Эпидемия уже выпустила альбом.
Добавлено ([mergetime]1196271749[/mergetime]):
Пропатчил я ехешник, он запускается, но ничего не происходит.
Berserker
28 Nov 2007, 21:16
Вот ехешник:
www.rebirth.nekislohost.com/PhoenixRetail.exe
Хм... Если возникает исключительная ситуация при инициализации (скажем, библиотека не загрузилась), то никаких сообщений не выдается. У Bisik'a та же проблема с WoG 358. Надо будет посмотреть...
Berserker
29 Nov 2007, 20:43
В общем некорректно патч прописывается (если смотреть в отладчике). Лучше патчить вообще без всяких hood.dll, статично.
Цитата(Berserker @ 28 Nov 2007, 22:16)
Вот ехешник:
www.rebirth.nekislohost.com/PhoenixRetail.exe
Ага, круто!

Надеюсь в ближайшее время подумать насчет патча под эту версию.
М-да... так и не сделал. Ну, а теперь, похоже, это уже и не актуально.
Компилируемые исходники уже не найти, расскажу пару технических моментов, авось пригодится.
По адресу 0x005BED30 начинается функция, которая строит в городе здание и при этом кое-что еще (добавляет юниты, разрушает другие здания). Город - this, номер здания - аргумент.
Код
MemWriteByte((VOID *)0x005BED30, 0x68); // push imm32
MemWriteDword((VOID *)0x005BED31, (DWORD)&Build);
MemWriteByte((VOID *)0x005BED35, 0xC3); // ret
Это я делаю прыжок из нее на мою функцию...
Код
// Вспомогательный класс, соответствует структуре геройского класса города
class CTown
{
public:
BYTE * Data() { return (BYTE *)this; }
BYTE & Type() { return Data()[4]; }
// WORD[14], 0-6 base, 7-13 upgraded
WORD * CreaturesOwned() { return (WORD *)(Data() + 0x16); }
typedef INT BUILDING;
typedef QWORD BUILDING_MASK;
BUILDING_MASK BuildingMask( BUILDING bu ) { return 1ULL << bu; }
QWORD & BuiltMask() { return (QWORD &)Data()[0x150]; }
BOOL IsBuilt( BUILDING bu ) { return IsBuiltMask(BuildingMask(bu)); }
VOID DoBuild( BUILDING bu ) { DoBuildMask(BuildingMask(bu)); }
VOID DoDestruct( BUILDING bu ) { DoDestructMask(BuildingMask(bu)); }
BOOL IsBuiltMask( BUILDING_MASK mask ) { return !!(BuiltMask() & mask); }
VOID DoBuildMask( BUILDING_MASK mask ) { BuiltMask() |= mask; }
VOID DoDestructMask( BUILDING_MASK mask ) { BuiltMask() &= ~mask; }
// Это, по сути, декомпилированный вручную код исходной функции с некоторыми изменениями, отмеченными + или *
BUILDING Build( BUILDING bu )
{
BUILDING buBuilt = bu;
DoBuild(bu);
// + if (...); else
if ((bu == g_aHordes[1] && !g_TownXTraits[Type()].bHorde1Horde) ||
(bu == g_aHordes[3] && !g_TownXTraits[Type()].bHorde2Horde))
;
else
DoDestructMask(g_aDestroyOnBuildMask[Type()][bu]);
// * for ( int h = 0; h < HORDES_NUM; h++)
for ( int h = g_TownXTraits[Type()].bHorde1Horde ? 0 : 2;
h < (g_TownXTraits[Type()].bHorde2Horde ? HORDES_NUM : 2); h++)
{
INT buHorde = g_aHordes[h];
WORD wLev = g_aHordeTraits[Type()][h].wLevel;
if (bu == buHorde)
{
DoDestruct(wLev + 30); // Dwelling
// Check if building base horde on upgraded dwelling
if (wLev < 7 && IsBuilt(wLev + 37))
{
DoDestruct(bu); // Dest base horde
DoDestruct(wLev + 37); // Dest upgraded dwelling
DoBuild(buBuilt = g_aHordes[h + 1]); // Build upgraded horde
}
} // if (bu == buHorde)
// Check if building corresponding dwelling on current horde
if (IsBuilt(buHorde) && bu == wLev + 25)
{
DoDestruct(bu); // Dwelling
DoDestruct(buHorde);
DoBuild(buBuilt = g_aHordes[h + 1]); // Upgraded horde
}
} // for(h)
// Set creatures number
if (bu >= 30 && bu <= 36)
{
DWORD dw = ((DWORD *)0x6747B4)[Type() * 14 + bu - 30];
dw = dw * 7 * 4 + dw;
BYTE *p = (BYTE *)*(DWORD *)0x6747B0;
WORD w = *(WORD *)(p + dw * 4 + 0x44);
CreaturesOwned()[bu - 30] = w;
}
if (bu >= 37 && bu <= 43)
{
CreaturesOwned()[bu - 30] = CreaturesOwned()[bu - 37];
CreaturesOwned()[bu - 37] = 0;
}
// * if (Type() == 1 || Type() == 4 || Type() == 8)
if (g_TownXTraits[Type()].bHouses)
{
switch (bu)
{
case 10:
Build(23);
break;
case 11:
Build(27);
break;
case 12:
Build(28);
break;
case 13:
Build(29);
break;
default:
;
} // switch (buNo)
} // if (type() == 1 || type() == 4 || type() == 8)
return buBuilt;
}
}; // class CTown
// Проверяем, перейти ли на нашу функцию, или на стандартную
// в зависимости от типа города
//extern "C"
void __declspec(naked) Build()
{
__asm pushad;
// Check if to use build hook
__asm
{
movsx eax,byte ptr [ecx+4]; // Type()
mov al, [eax + g_aBuildHook]; // aBuildHook[Type()]
cmp al, 0; // if (aBuildHook[Type()] == 0)
jnz l;
// go to default code
popad; // undo pushad
// 6 bytes from original fn
/* 005BED30 55 */ __asm push ebp
/* 005BED31 8B EC */ __asm mov ebp,esp
/* 005BED33 83 EC 0C */ __asm sub esp,0Ch
push 0x005BED30 + 6; // after 6 bytes of hook code
ret // as if there were no hook
l:
}
// Now call BUILDING CTown::Build( BUILDING bu )
// this (ecx) and bu(in stack) must be valid
__asm
{
popad; // undo pushad
push CTown::Build;
ret; // Just continue as if it were ordinary method
}
}
Пожалуй, все...
а можно добавить верфь рассам у которых ее нету
Можно. Просто добавить спрайт здания с соответствующим типом и построить здание скриптом. Только нельзя заранее сказать, будет ли это работать, надо проверять.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.