Gildor's Forums

Author Topic: Программирование под UT2004 ?  (Read 4858 times)
Alleras
Newbie
*
Posts: 31


View Profile
Программирование под UT2004 ?
« on: April 18, 2008, 12:31 »

Добрый день!
Программа работает на отлично.
Очень интересно, как Вам удалось получить информацию для декомпилляции моделей.
(Я точно помню, что Эпики утверждали на форумах, что это якобы невозможно в принципе).

Конечно, очень хотелось бы увидеть исходники (насколько я понимаю, наше Unreal-сообщество и особенно мэпперское сообщество находится сейчас в весьма плачевном состоянии, и большой активности на форумах можно не ждать)

но у меня вопрос шире - можно ли получить доступ к нативным функциям движка? Эпики скрывают всю С++ информацию, а unrealscript-а мне не хватает.....
Может быть Вы, как программер, что-нибудь сможете подсказать?

P.S. Я сам программирую в Unrealscript и С++, но с программированием под UT2004 в полном тупике, поскольку никакой информации о коде этой программы у меня нет.
« Last Edit: April 18, 2008, 12:34 by Alleras » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7972



View Profile WWW
Re: Программирование под UT2004 ?
« Reply #1 on: April 20, 2008, 13:13 »

Привет!
Спасибо за отзыв - я не был уверен, что люди разберутся, как пользоваться тулзой (а gui делать как-то лень)  Wink
Программа была написана тогда, когда мне по месту работы было необходимо реализовать скелетную анимацию - я решил за что-то зацепиться, и выбрал UT.
Для получения алгоритмов/форматов провёл неделю в IDA (interactive disassembler). Очень помогли публичные хидеры от UT1.
Для реализации, конечно, пришлось пере-реализовать часть движка unreal engine (самая сложная часть - формат package-файла).
Исходники обязательно выложу - но чуть позже. Хочу сначала немного доработать программу (в частности, сейчас планирую среверсить StaticMesh, когда время будет).
К нативным функциям вполне можно получить доступ (сам, правда, я этого не делал - не было нужды). Для этого надо реализовать native package - тут поможет unreal tournament public source. Эти исходники, скорее всего, придётся доработать - это зависит от того, какие классы понадобятся. ОЧЕНЬ много информации по этим классам (структуры данных) доступно в .uc файлах, которые также находятся в публичном доступе. Также у меня есть прототипы всех функций движка (втупую выдрал из дизассемблера).
Logged
Alleras
Newbie
*
Posts: 31


View Profile
Re: Программирование под UT2004 ?
« Reply #2 on: April 21, 2008, 09:40 »

дизассемблер - хорошо, но как из многомегабайтного кода создать компиллируемый пакет, или хотя бы разбить на функции?
Видимо, у меня не хватает на это опыта....

Спасибо за ответ - теперь хотя бы буду знать, в каком направлении двигаться.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7972



View Profile WWW
Re: Программирование под UT2004 ?
« Reply #3 on: April 21, 2008, 11:25 »

Дизассемблер нужен в основном для того, чтобы понять, как работает программа. Для того, чтобы получить какие-то внутренние интерфейсы он нужен по-минимуму. Пример.
1) нужны структуры данных - их в UT легко выдрать из скриптов (.uc) - за исключением всяких потоков, массивов и т.п. (классы, имена которых начинаются на "F" не дублируются в скриптах) - это нужно ковырять public headers и asm
2) таблицы виртуальных методов (если хочется такие вызывать) - их достаточно легко выдрать дизассемблером, основной труд - найти такую таблицу (используется в конструкторе)
3) прототипы невиртуальных методов - это можно получить более-менее продвинутым дамперов экспортов dll - нужно сдампить экспорты, раздекорировать имена (поможет UnDecorateSymbolName()), и собрать вместе в виде структуры.
Если не секрет - задачи какого рода вы планируете решать в UT2004 нативным кодом?
Logged
Alleras
Newbie
*
Posts: 31


View Profile
Re: Программирование под UT2004 ?
« Reply #4 on: April 22, 2008, 09:59 »

Для синглового мода.

1) Хочу включить эффекты динамического освещения (в эдиторе они работают, в игре нет - следовательно включить их возможно).

2) Хочу исправить один момент в проигрывании демок: если хотя бы один пакет изменен, демки перестают проигрываться. Для модмейкера это сущий ад, потому что в процессе создания мода пакеты меняются непрерывно, и запись демок становится совершенно бессмысленной.
Хотелось бы, чтобы игра всё-таки пыталась проигрывать демки с измененными пакетами.
По идее, достаточно изменить один флаг в Core или Engine, но, покапав дезассемблером и отладчиком, я его не нашел.

3) Хотел переделать сохранялку - в эпиковском коде она сделана криво, в частности, невозможно было считывать из меню заголовок и скриншот сохранялки, и удалять сохранялки из меню игры (собственно, этот вопрос уже решен мною путем редактирования DLL)

4) Опционально есть такая мечта: (я понимаю, что это пока невозможно)
достать исходники и включить в них бампмэппинг.
Движок продавался Эпиками с возможностью включения бампа, следовательно, это в принципе осуществимо.

5) Ах, да... забыл про зеркала, в которых не видно отражения игрока.
Сриптами это не исправляется.
(если верить комментариям эпиков, в dll есть функция, позволяющая это исправить, но по каким-то причинам она также отключена)
Короче, если бы были исходники, можно было бы менять в них всё что угодно.
А так приходиться довольствоваться тем что есть, или тем, что удается изменить в скриптах/DLL
« Last Edit: April 22, 2008, 10:39 by Alleras » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7972



View Profile WWW
Re: Программирование под UT2004 ?
« Reply #5 on: April 22, 2008, 11:37 »

2) В демку, скорее всего, записаны GUIDы всех package-ей. Сделано из соображений совместимости - ведь в демку записывается сетевой трафик, а он содержит вызовы процедур и т.п. - через GUID движок проверяет совместимость вызова функции. Если есть уверенность, что новый package полностью совместим - можно попробовать руками подправить его GUID (заменить на старый). Из native package это, скорее всего, не исправить - это код ядра движка.

3) Если это поправлено в dll (редактирование объектного кода, как я понял) - то есть вероятность, что это можно поправить своим package-ем. Но только если можно подменить класс, отвечающий за savegame своим, и весь изменённый функционал лежит в виртуальных методах.

4) Бамп есть в UE2 (есть поддержка hardware shaders), но его не включили в UT2004. Я сам помню сообщение на эпиковском форуме от Daniel Voguel (сейчас он в epic ведущий программист, а в те времена - рендером занимался). Так вот, он написал - "добавил в движок поддержку аппаратных шейдеров, но в UT решили это не добавлять". Моддингом такое не добавить, нужно рендер дорабатывать Sad Увы, epic никогда не выложит исходники даже 1го Unreal - у них его кодовая база до сих пор используется в движке (это вам не id software, которые несколько раз полностью переписывали движок из-за невозможности двигаться вперёд, ну и выкладывали ненужный более код в свободный доступ).

1) и 5) скорее всего можно исправить скриптами, просто ковыряться нужно дольше. Или вообще никак не исправить (ну, разве что опять бинарники править).

Увы, поковыряться в исходниках unreal engine можно только устроившись программистов в компанию, разрабарывающую какую-нибудь игру на этом движке - а таких в России мало (а у нас в Питере - вроде вообще нет).
Logged
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS