hippocamus Wrote:Это ведь выльется в несовместимость твоего мода с большинством остальных.
Да какая совместимость? Кодовая? Не было её и не будет никогда. Если два мода настолько глубоки по вносимым изменениям в геймплей, что могут по моральному праву называться модами – они уже несовместимы. Никто не соединит ХотУ и ВОГ 3.59, Феникс с Реквизитом, TPM с WT, MoP c ЧУ… А если совместит – выйдет нестабильная и дисбалансная безвкусица. Я уже не говорю о том, что даже моды, делающиеся под ВОГ, сами с ним частично несовместимы, а часть опций ВОГа несовместима с другими.
Файлово-папочная совместимость? О ней заботятся чуть больше – она хоть достижима. Её-то я и соблюдаю.
Всё, что делают люди, всегда определяется их характером, а характеры у всех разные. Жёсткие диски теперь вмещают терабайты. Так что будем, как и прежде, устанавливать всё в отдельные папки, запускать разные экзешники и играть то в одно, то в другое, нервно кусая пальцы в детском капризе желания собрать все яйца в одну корзину.
Berserker Wrote:1) Если у тебя есть лучший вариант, напиши, я исправлю.
Дело не в лучшести. Регенерацию я превращал в таблицу, а во втором случае просто сдвигал код.
Berserker Wrote:3) Нужен этот свой триггер.
У меня настолько всё индивидуально, что лучше в общих чертах.
4A2470 – тру-функция встречи героев. Параметры её вызова я описывал в Инженерном Анализе. Зная параметры, можно достать в ней номера героев.
Функция ветвится на несколько хвостов. Чтобы сделать универсальный пост-триггер, я закрутил все хвосты в один и поставил триггер на этот хвост. А как ты собираешься – твоё дело.
Berserker Wrote:4) Тут папка старая, ибо совместимость, а Angel.dll и Era.dll должны находиться в корне.
Вот я и изменил
Berserker Wrote:1 жёстко прошитый патч
Вместо корневого каталога – Data\MoP\LIB.
Berserker Wrote:не хотелось бы видеть МОР в будущем на старой версии
Скорее всего, так и будет. Ведь какая разница, сколько изменений будет вносить ERA в экзешник? Хуки ведь всё равно будет ставить. А у меня в том месте может быть даже не изменённый код, а вообще левая наработка или отсутствие кода.
По крайней мере, программка для бин-файлов подойдёт.
Berserker Wrote:Проще было раньше согласовать.
Как и с кем можно согласовать десятки тысяч изменений в экзешнике? Можешь заценить -
http://zalil.ru/31436918 Видите, я даже не боюсь утечек – ведь там никто, кроме меня, не разберётся. Естественная защита exe в виде невообразимой запутанности кода.
Я наплевал на совместимость, как на призрачное суеверие, коим она для меня до сих пор является. И это сразу развязало руки. Пожалел ли я об этом хоть раз? Нет, ибо не родилось пока чего-то такого очень мне нужного, но несовместимого с модом, а для многих вещей у меня альтернативная реализация. Есть разве что предчувствие недовольства людей, уже привыкших к HD-моду.
Просто идея
Единожды в моде я применил такое:
1. Накодил в Олли функцию. При этом все вызовы функций экзешника в ней написал относительно, как в длл (не call функция, а mov eax, адрес функции; call eax). Прыжки – если касаются этой же функции, то прямые, если в экзешник – тоже относительные. В общем, всё ясно.
2. Потом скопировал машинный код этой функции в файл и сохранил.
3. Загрузил файл в игре, получил адрес буфера, выполнил функцию по этому адресу, освободил буфер с файлом.
В чём смысл и польза? Даже длл, которая занимается всего лишь тем, что экспортирует одну маленькую процедуру, обычно весит несколько килобайт, ибо несёт в себе много системного барахла. Чтобы выполнить из неё процедуру, нужно узнать ID библиотеки, потом ID процедуры. А в таком вот файле – ни единого ненужного байта, это чисто файл-функция, и его ID – это и есть адрес процедуры.
Вот если бы такие файлы можно было создавать легко, без Олли, и так же легко править их исходники…