|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки» |
|
|
YOYOMAN 71 EGP
Рейтинг канала: 2(21) Репутация: 1 Сообщения: 141 Откуда: Украина Зарегистрирован: 13.07.2010 |
|
CheckerTwo : |
Для версии 3.2 ассемблер еще не делал.
|
Уважаемый CheckerTwo! Сделайте пожалуйста компилятор под версию 3,2
_________________ Unreal Engine 4 |
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
YOYOMAN : |
Уважаемый CheckerTwo! Сделайте пожалуйста компилятор под версию 3,2
|
Чет ты так написал... Я себя седобровым атскакалом чувствую...
Подправил асм (в первом посте).
|
|
|
SeT aka SettleR 300 EGP
Рейтинг канала: 3(49) Репутация: 94 Сообщения: 1253 Откуда: Третья планета от Солнца Зарегистрирован: 27.05.2005 |
|
Не подскажете как можно увеличить трюмы станций (без изменения цен на товары), ТС и ДО?
Это ведь в обже зашито, да?
_________________ Ищу Белый Тезис
Последний раз редактировалось: SeT aka SettleR (17:06 25-01-2012), всего редактировалось 1 раз |
|
|
mistaqur
|
|
SeT aka SettleR : |
Не подскажете как можно увеличить трюмы станций (без изменения цен на товары), ТС и ДО?
Это ведь в обже зашито, да?
|
Конкретно для торговых доков и хаба есть строчки в types\globals.txt
Код: |
// 116
SG_DOCK_STORAGE_FACTOR;0; // Normal Docks Storage Multiplier
SG_HUB_STORAGE_FACTOR;6; // Terraformer Hub Storage Multiplier
|
Если сильно надо и у фабрик поменять, то можно изменить множитель в TSTATION.GetWareTypeMaxStore.
|
|
|
VASILICH 65 EGP
Рейтинг канала: 2(11) Репутация: 2 Сообщения: 152 Откуда: г.Калуга Зарегистрирован: 19.05.2006 |
|
Братцы, я понимаю что мой вопрос покажется вам неуместным иможет глупым, но я не бельмес не шарю в тех мудрённых выражениях и функциях всяуих,Но всё-же мне хочется узнать, к примеру нужно подправить у станции размер трюма под продукцию или время за которое она врабатывает партию груза.В какой из выпаковынныз файлов мне залесть и какой параметр ковырнуть. Вобщем где-то так.
_________________ Я как тот Герасим, на всю херню согласен. Мне что пулемёт, что водка, лишь бы с ног валило. |
|
|
wwk
|
|
А можно добавить команды в SE <RetVar> get station type array: maker race=<Var/Race> class=<Value>.
<RetVar> get array product <Var/Station Type>
<RetVar> get array resource <Var/Station Type>
<RetVar> get array sresource <Var/Station Type>
|
|
|
wwk
|
|
Какую задачу выполняет функция SHIP.SetPlayerControl(arg1, arg2); в x3story.obj мода ТОТТ.
|
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1185 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Приветствую! Разбирая обж версии 3.2 я наткнулся на следующую непонятку:
Чем отличаются выражения
call88 ASTEROID.SetKnown
от
get_object
call85 SetKnown
мне кажется, что это одно и тоже просто расписано по разному или нет?, и если
call84 - команда вызова глобальной функции
call85 - команда вызова виртуального метода классов
call86 - команда вызова статического метода классов
то call88, что за команда?
_________________ Очевидное-невероятное |
|
|
mistaqur
|
|
Процитирую сам себя.
mistaqur : |
call88 аналогичен call84, за исключением того, что если call84 вызывает глобальную функцию по её адресу, то call88 вызывает метод текущего объекта по её адресу (скорее всего ею заменили связки get_object + call85). С одной стороны это хорошо (быстрее будет работать), с другой переопределить эту функцию в классах-наследниках уже не получится.
|
Т.е. компилятор считает, что вызываемая функция не будет переопределена в классах-потомках (скорее всего аналогия модификатора функций final), и поскольку он знает иерархию классов в момент вызова функции, то он сразу вычисляет адрес нужной функции и подставляет его (а старый вариант каждый раз просматривал иерархию классов текущего объекта и искал по имени функции нужный адрес, что разумеется гораздо медленней нового варианта).
|
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1185 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
По ходу это и есть некоторая оптимизация производительности заявленная Egosoft'ом.
Cкрытый текст (кликните здесь для просмотра)
X3: Земной конфликт - Список изменений
------------------------------------------------------------------------------
3.2 - Январь 2012
------------------------------------------------------------------------------
Новые возможности и улучшения:
- Сила толкающего эффекта УИГ теперь зависит от расстояния
- Улучшена реализация дружественного ракетного огня
- Ракеты игрока стали неуязвимы к повреждениям от оружия на 2 секунды после запуска
- Добавлены новые расширения для оконного режима и поддержка res.dat файла
- Некоторая оптимизация производительности
|
_________________ Очевидное-невероятное |
|
|
Whiskas 137 EGP
Рейтинг канала: 3(36) Репутация: 5 Сообщения: 139
Зарегистрирован: 28.04.2011 |
|
mistaqur : |
он сразу вычисляет адрес нужной функции и подставляет его (а старый вариант каждый раз просматривал иерархию классов текущего объекта и искал по имени функции нужный адрес, что разумеется гораздо медленней нового варианта).
|
DNA78 : |
По ходу это и есть некоторая оптимизация производительности заявленная Egosoft'ом.
|
А насколько это увеличивает производительность в общем? Команды выполняются со скоростью света, неужели поиск по по иерархии в 2МБ файле занимал существенно продолжительно время?
Это я по кодингу, но серьезно.
Последний раз редактировалось: Whiskas (09:10 22-03-2012), всего редактировалось 1 раз |
|
|
mistaqur
|
|
mistaqur : |
В версии 3.1.1 вызовов call85 аж 23413 раз. Этот команда вызывает метод класса через его имя, т.е. каждый раз при его использовании идет просмотр таблицы методов класса, находящегося на вершине стека, что не очень хорошо сказывается на производительности. В версии 3.2 он используется 12007 раз, т.е. в два раза реже, зато call87 используется 779 раз, а call88 11150 раз.
|
И поиск по иерархии классов выполнялся каждый раз при вызове любой функции. А если бы команды выполнялись со скоростью света, мой не самый новый ноут не выдавал бы 2-5 FPS при 1000% SETA.
|
|
|
Whiskas 137 EGP
Рейтинг канала: 3(36) Репутация: 5 Сообщения: 139
Зарегистрирован: 28.04.2011 |
|
mistaqur : |
mistaqur : |
В версии 3.1.1 вызовов call85 аж 23413 раз. Этот команда вызывает метод класса через его имя, т.е. каждый раз при его использовании идет просмотр таблицы методов класса, находящегося на вершине стека, что не очень хорошо сказывается на производительности. В версии 3.2 он используется 12007 раз, т.е. в два раза реже, зато call87 используется 779 раз, а call88 11150 раз.
|
И поиск по иерархии классов выполнялся каждый раз при вызове любой функции. А если бы команды выполнялись со скоростью света, мой не самый новый ноут не выдавал бы 2-5 FPS при 1000% SETA.
|
Не знай, не знай... Тут наверное обилие уникальных объектов и скрипты убивают фпс. Ещё небось каждый экземпляр в игре запускает свой поток с кодом этой .dll в бесконечном цикле.Плюс все эти операции со строками pck, их конвертами и несчатными xml. Ниче хорошего.
Хотел спросить можно ли так, чтобы у объекта была какая-нибудь функция, которая подгружала бы мою dll и код функции брался бы из неё, так осенило: obj ведь даже не настоящий dll, он "странный", только экзешник понимает его. Но все же спрашиваю, можно? Смотрел в теме про патчи, мини-obj-файлы, а тут так нельзя
Как все намудрено
|
|
|
mistaqur
|
|
Whiskas T-Mech : |
Тут наверное обилие уникальных объектов и скрипты убивают фпс
|
Скорее всего скрипты (а их парсер вшит в obj файл).
Whiskas T-Mech : |
Ещё небось каждый экземпляр в игре запускает свой поток с кодом этой .dll в бесконечном цикле
|
О какой dll идет речь? Может имелся ввиду obj файл?
Виртуальная машина игры - многозадачная, есть бесконечные циклы - как раз таки применяются при обработки скриптов.
Whiskas T-Mech : |
Хотел спросить можно ли так, чтобы у объекта была какая-нибудь функция, которая подгружала бы мою dll и код функции брался бы из неё, так осенило: obj ведь даже не настоящий dll, он "странный", только экзешник понимает его. Но все же спрашиваю, можно?
|
Obj файл содержит байт-код, который выполняется виртуальной машиной игры. DLL же содержат машинный код, и выполняются процессором. Obj файл можно пропатчить, добавляя свой код в конец, меняя при необходимости адрес функции в таблице методов класса, и заменяя все вызовы функции по старому адресу на новый. (И дополнительно добавив информацию в таблицу патчей, чтобы можно было грузить старые сейвы).
|
|
|
Whiskas 137 EGP
Рейтинг канала: 3(36) Репутация: 5 Сообщения: 139
Зарегистрирован: 28.04.2011 |
|
mistaqur : |
О какой dll идет речь? Может имелся ввиду obj файл?
|
Да, именно он.
mistaqur : |
Obj файл содержит байт-код, который выполняется виртуальной машиной игры. DLL же содержат машинный код, и выполняются процессором. Obj файл можно пропатчить, добавляя свой код в конец, меняя при необходимости адрес функции в таблице методов класса, и заменяя все вызовы функции по старому адресу на новый. (И дополнительно добавив информацию в таблицу патчей, чтобы можно было грузить старые сейвы).
|
Да, но таблицу ведь никто не юзает. Да не обязательно именно её, итак же пачтиться. Я имел ввиду мини-патчи, в треде Reunion и X2 есть некие мелкие обжи, они идут отдельным файлом и их присутствие рядом с x3story автоматом им подхватывается. Хотя там же оговорились в x3tc так больше нельзя...
Cкрытый текст (кликните здесь для просмотра)
Вот че я хотел вообщем сначала:
Код: |
object = SHIP_M1 ; parent = SHIP;
;functions
....
LoadLibrary();
...
SHIP_M3.LoadLibrary();
get_strg 00XXXXX; 'minipatch.obj'
push 1
mov sp[0],sp[1]
mov ah,3e
lea dx,sp[1]
pop
и тут какой-то код для заполнения данной функции байтокодом из minipatch.obj |
Фантазирую, не? Ладно тогда) Надо начать учить ассемблер, интересная вещь
|
Последний раз редактировалось: Whiskas (17:20 23-03-2012), всего редактировалось 2 раз(а) |
|
|
mistaqur
|
|
Не играл в X2 и не знаю, как там был устроен движок игры, но в x3 так нельзя.
|
|
|
Clanfear 635 EGP
Репутация: 142 Сообщения: 4647 Откуда: Default City Зарегистрирован: 08.07.2006 |
|
форум ToTT'а какой то полуживой, спрошу тут, если что не так - прошу сильно не пинать
пытался все избавится от "анти-чит" скрипта самоуничтожения, в асме совершенно не разбираюсь, туториалов "для нубов" не нашел, по этому искал и правил чисто интуитивно
расковырял обж, нашел вроде бы нужный кусок SHIP.SetPlayerControl
Cкрытый текст (кликните здесь для просмотра)
SHIP.SetPlayerControl:
enter 2, 7
push SP[4] ; arg2
push SP[4] ; arg1
push SP[1] ; loc1
if SP[0]=0 then jump L0018E82E
push 1
get_strg S0001621F ; "all_objects_exist"
push 0
pushw 702d ; 02BEh
push 2
call84 global.GetPatchValue
get_from_array
get_from_array
if SP[0]<>0 then jump L0018E82E
read SHIP.var_2004_2 ; [12d ; 0Ch]
push 1
call84 global.TextRestrict
if SP[0]=0 then jump L0018E837
L0018E82E: push 2
callasm SA_SetPlayerControl
pop
get_object
ret
L0018E837: pop
pop
readvar global.var_51 ; [51d ; 33h]
push 1
add SP[0],SP[1]
writevar global.var_51 ; [51d ; 33h]
pop
begin_critical
if SP[0]<>0 then jump L0018E85D
pushw 5000d ; 1388h
push 1
callasm TI_Delay
pop
push 0
push 0
push 2
get_object
call85 SelfDestruct ; 00004929
pop
end_critical
L0018E85D: push 0
push SP[4] ; arg1
push 2
callasm SA_SetPlayerControl
pop
get_object
ret
|
насколько я понял глобальная TextRestrict отвечает за определение "читерного" корабля, ее трогать не стал, а просто закомментил весь кусок с самоуничтожением
Cкрытый текст (кликните здесь для просмотра)
begin_critical
if SP[0]<>0 then jump L0018E85D
pushw 5000d ; 1388h
push 1
callasm TI_Delay
pop
push 0
push 0
push 2
get_object
call85 SelfDestruct ; 00004929
pop
end_critical
|
с begin_critical по end_critical, закомментил строчку .loadobj "x3story.obj" в начале обжа, пересобрал, никаких ошибок не было
в итоге - игра вроде бы работает нормально, корабли не самоуничтожаются и вроде бы все прекрасно, но:
- x3story.obj стал весить после этих процедур на 150 кило меньше
- то ли я вообще правил (хоть и работает, но мало ли) и не убил ли я случайно что то еще?
собственно больше всего смущает сильно меньший размер обжа, нормально ли это и не будет ли каких проблем в будущем?
игра версии 3.2, мод 1.3, утилиты do4_14b и xa4_11b
_________________ TITS OR GTFO |
|
|
MaksOS023
|
|
Вопрос к пилотам. Скажите пожалуйста, какой файл и какую строчку в нём надо отредактировать, чтобы в главное орудие корабля и турели можно было ставить не 12 пушек а 16. И разумеется что бы они все стреляли.
Просьба: пожалуйста постарайтесь написать как можно подробней
Заранее спасибо.
|
|
|
DIMOSUS.X 995 EGP
Рейтинг канала: 8(921) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
Связываемся с разработчиками (EGOSOFT). Слезно просим их дать вам исходники движка. Находим в исходниках файл turret_logic.cpp, в нем переписываем участок отвечающий за привязку турелей к интерфейсу. Собираем движок из исходников. Profit.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
MaksOS023
|
|
DIMOSUS.X : |
Связываемся с разработчиками (EGOSOFT). Слезно просим их дать вам исходники движка. Находим в исходниках файл turret_logic.cpp, в нем переписываем участок отвечающий за привязку турелей к интерфейсу. Собираем движок из исходников. Profit.
|
Cпасибо конечно, но я слышал что можно как то через "x3story.obj", поэтому и написал в эту тему.
Cкрытый текст (кликните здесь для просмотра)
Цитата: |
www.des-studio.su
"DIMOSUS.X: Развивайтесь - это невероятно бесит окружающих."
|
Решил воспользоваться Вашим советом!
|
|
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки» |
|