Wake of Gods Forum | Форум Во Имя Богов

Full Version: ERA II
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
(14.07.2011 23:22)Berserker Wrote: [ -> ]   если там не много рутины, можно будет сделать автоподгрузку всех лодов из папки.
лучше тогда сделать ещё один вариант этого плагина - как кому нравится.
потому что я как раз хотел держать все лоды в Data а грузить по мере необходимости. Так я могу одним батником грузить русскую версию, другим - турнирную, третим - с новыми объектами, а четвёртым - даже без паззлов кампании, для большей скорости и экономии памяти.
Что ж их, каждый раз переименовывать?
Да, но переименовывать батником. То же самое с плагинами и патчами. Сменить расширение = включить/отключить.
Подгрузить все lod'ы из папки Data можно легко, надо просто вместо анализа параметров анализировать имена файлов этой папки (даже ничего ассемблерного редактировать не надо). А насчёт других папок - не знаю, мой плагин не оперирует путём к lod'у, только его именем. Игра сама ищет эти lod'ы, только ли в Data или нет - не знаю.
По идее в Data и в ..\Data
По крайней мере так делают Хроники.
Внезапно сейчас у меня оказалось немного свободного времени и я исправил баг. Он, естественно, оказался идиотским: я закомментировал PUSH в одном месте и забыл об этом.

Ссылка удалена. Далее в теме действительно рабочая версия.

В общем, если запустить игру без параметров, подгрузятся только H3bitmap.lod и H3sprite.lod. H3ab_spr.lod, H3ab_bmp.lod, H3psprit.lod, H3pbitma.lod, H3pab_bm.lod, H3pab_sp.lod, H3wog.lod и H3custom.lod не подгружаются! Чтобы подгрузить их, их нужно указать в параметрах командной строки.

Параметр должен начинаться знаком "/" (который, естественно, не входит в имя lod`а). Иначе сами Герои будут ругаться: дескать, есть параметр "/S0" - отключение звука, параметр "/I0" - отключение интро, а что вы там понаписали, я не знаю и вырубаюсь нафиг.

Параметры нечувствительны к регистру. Если параметр не кончается на .lod или является "/.lod", он игнорируется. Параметр должен быть не длиннее 255 символов. Если параметр указывает на "H3bitmap.lod", "H3sprite.lod" или на тот же lod, на который указывал один из предыдущих параметров, он (этот, а не предыдущий Sm) игнорируется. Если уже не проигнорировано 62 параметра, все остальные игнорируются (т. е. всего можно подгрузить 64 lod`а, но за вычетом двух обязательных - 62). lod`ы подгружаются в таком порядке: "H3bitmap.lod", "H3sprite.lod", дополнительные lod`ы в порядке указывающих на них параметров. Указанные в параметрах lod`ы могут не существовать, всё будет работать нормально. Ну и, естественно, нет ограничения снизу на количество параметров, их можно не указывать совсем.

Ну, вроде, всё расписал. Могу уезжать с чистой совестью. Sm

UPD: Ах, да ещё плагин нельзя переименовывать, т. к. в его коде используется его имя. В принципе, ничего страшного не должно случиться, но всё равно не стоит.
Спасибо, Сав! Всё по высшему разряду!
ЧТо уже вышла эра 1.9?
Ещё нет, но уже вышел плагин под неё. Sm
Молодец! Всё, обязательно нужно сделать сервис спасибо.
Вы отлично выпускаете эру я думаю она будет замечательной)))
Благодарю.
Sav, ты не против, если я покопаю в сторону автоподгрузки лодов в Эре? Чтобы авторы смело свои лоды распространяли. Вдобавок, тут ещё очерёдность загрузки и некоторые нюансы, которые неплохо бы стандартизировать.
Не против.
Если что, мой плагин работает так:

Сначала происходит анализ параметров, имена подгружаемых lod'ов записываются в спец. отведённую область памяти.

Потом выполняется воговский код, отвечающий за инициализацию h3wog.lod и h3custom.lod (точно не знаю, что там, но без неё lod'ы не подгружаются как следует, напр. если в h3ab_spr.lod запихать что-нибудь, оно не подгрузится просто так), только вместо них инициализируются все lod'ы из параметров.

Потом выполняется код, в котором ссылки на имена lod'ов записываются в определённую область памяти размером в 400 байт на lod (точно знаю, что туда же потом запишется путь к lod'у и ещё какая-то информация). Соответственно, с плагином вместо стандартных lod'ов записываются два обязательных + все из командной строки, а область памяти выделена в виде переменной в плагине и ссылки на неё перенаправлены на переменную в плагине.

Ну и во всех остальных местах (всего штук 40) опять же ссылки на эту область памяти перенаправлены на переменную плагина.

Вообще многие вещи найдены экспериментальным путём, поэтому я не могу с уверенностью говорить о том, что происходит в применяемых к именам lod'ов функциям.
У меня есть возможность сравнить с реализацией от ZVS, но он перехватывает пару основных функций, а ты фактически таблицу переносишь. Нужно будет убедиться, что все обращения к ней учтены.
Ещё раз спасибо за работу!
С очерёдностью как раз проще - в каком порядке они перечисляются, в таком и подгрузятся.
А вот если делать загрузку всех из Data - там возможны конфликты, да. В таком случае лучше делать ini, если ты считаешь, что перечислять - напряжно.
Reference URL's