Elite Games - Свобода среди звезд!
.
  » Модификация обжей и модульные патчи для всех | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 1
 
Поиск в этой теме:
Канал X2: The Threat: «Модификация обжей и модульные патчи для всех»
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
 Самостоятельное получение исходника в xc   (кликните здесь для просмотра)
Для удобства прикладываю архив со всеми необходимыми программами для работы с обжем. Спасибо DF, Blueboar, Shaddie, CheckerTwo, Darth Revan за фантастическую работу.
В архиве программы расположены в одном каталоге, внутри есть переименованные readme для каждой программы.

Рекомендую перенести их в каталог с коротким адресом и добавить адрес в переменную PATH в Windows.
Это позволит держать программы в одном месте, а код в другом и экономить тонну времени в процессе написания команд.
К примеру, открыть командную строку в каталоге с обжем и начать писать так:
Код:
dobj x2story.obj

Вместо чего-то вроде:
Код:
X:\Papka\Eshe-papka\Snova\dobj.exe x2story.obj


Чтобы добавить каталог временно для текущей открытой командной строки, можно написать такую пару команд:
Код:
setlocal
PATH=%PATH%;C:\ВашПуть\К\Каталогу




Транслируем обж X2 в xc (C-подобный код)

Берем оригинальный обж от X2, натравливаем на него dobj:
Код:
dobj x2story.obj

В этом же каталоге натравливаем на это имя xa2c:
Код:
xa2c x2story

Транслятор прочтет x2story.out и x2story.asm и выдаст транслированный обж, для сборки которого обратно понадобятся x2story.cpp и x2story.h.



Подготовка исходника в xc, который будет нормально собираться

Откроем x2story.cpp и между строками
Код:
.radix     10d
>>>Вот здесь<<<
.extern    B3D_CameraAddToScene, B3D_CameraAlloc, B3D_CameraDeleteFromScene

Вставим
Код:
.macro unknown a1, a2
           .word 005Ch
           .long a1, a2
.endm

.extern    Cmd_EscortObject_T, SetLatency, SetLeader, SetRelativePos
.extern    GetQtyLogRecords, GetLogRecord, SetTurretLaserMask, DisableAnswer

.extern нужны, т.к. в обже есть вызовы функций, которых в нем нет. Чтобы обж собирался без ошибок - они должны быть помечены как внешние.

Теперь найдем две __unknown операции с фиксированной запятой и поправим их код так, чтобы макрос с ними взаимодейстововал, преобразовывая в рабочий код.

Задаем в поиск "__unknown", находим первую строку:
Код:
__unknown(1.00000000E-03));

Меняем операцию с __unknown на такую:
Код:
__unknown(03F50624Dh, 0D2F1A9FCh));


Находим вторую строку:
Код:
switch(locate(arg1,423,107,__unknown(5.28000000E+02),

Меняем операцию с __unknown на такую:
Код:
switch(locate(arg1,423,107,__unknown(040808000h, 000000000h),


Теперь обж может легко собираться двумя командами без дальнейшей правки, но в этом нет необходимости до тех пор, пока не захотите добавить новые переменные в существующие классы. Для сборки необходимы x2story.cpp и x2story.h
Код:
xc x2story.cpp
xa_asm x2story.inc

Если все сделали правильно, то через некоторое время получим рабочий x2story.cod, который отличается от x2story.obj только этим .cod


x2_obj_guide.7z
 Описание:
О добавлении скрипт команд и обжековырянии в целом. Содержит удобную среду с примерами для создания своих патчей. Версия 3 от 7 января 2018.
 Имя файла:  x2_obj_guide.7z
 Размер файла:  544.02 KB
 Скачано:  87 раз(а)
ObjWorkers.7z
 Описание:
dobj, xa_asm от CheckerTwo и xa2c, xc от Darth Revan
 Имя файла:  ObjWorkers.7z
 Размер файла:  239.82 KB
 Скачано:  128 раз(а)


Последний раз редактировалось: Non (16:15 07-01-2018), всего редактировалось 15 раз(а)
    Добавлено: 23:58 24-12-2016   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Убив два дня странным подходом к ковырянию разобрался как выборочно добавлять команды в скрипт редактор. На xc этого сделать у меня так и не получилось, поэтому долгое и вдумчивое вникание в патч с новыми командами от Shaddie дало плоды.

Мне это было нужно, чтобы добавить боевку из патча Darth Revan во вполне обычную X2, дабы можно было стабильно поиграть в почти тоже самое, но посложней. Улыбка Ее обж-код запускается как раз скриптовой командой.

Заодно понял, как ассемблер патчит функции. Он просто добавляет переход из старой функции на новую, а новую пишет в конец.
Поидее ошибок быть не должно. Из недостатков только толстый обж и мертвый код старой функции внутри.

Плохо, что при каждой пересборке всего кода целиком из xc в случае добавления новых переменных в классы или чтобы подчистить - опять бегать по x2story.out и менять адреса в своем патче с командами на новые. Расстроен

Правка поверх - муторное занятие, но результативное.

Прикладываю мод, в нем:
- обж с новой боевкой и скрипт который ее запускает в папке mods
- карта test.xml, на которой две волны Ксенонов по 10 кораблей М4.
- скрипт galaxy.test.initplayership.xml, который дает на этой карте оборудованную Нову

Если пульки в TBullets ускорить, то становится очень тяжело выжить. Подмигиваю

Как установить боевку на обычную X2
1. Копируем все из приложенного архива в папку с игрой.
2. При запуске игры заходим в "Выберете интересующий мод" и выбираем 01.
3А. Тестируем боевку на Нове так: "Новая игра" - "Новая игра в текущей галактике" - "test".
3Б. Играем в обычный сюжет / безсюжетку.

Из других желаний улучшить жизнь в X2:
- убрать халяву в миссии с Ксенонами
- убрать BBS-пустышки (новости)
- поправить захват (убрать на начальном этапе до достижения какого-то ранга, или убрать вовсе)

Если есть еще идеи - предлагайте. Улыбка

Если кому интересна конкретика о том, как сделать патч с командами - пишите.

Darth Revan Fight.7z
 Описание:
 Имя файла:  Darth Revan Fight.7z
 Размер файла:  305.68 KB
 Скачано:  105 раз(а)


Последний раз редактировалось: Non (16:06 19-01-2017), всего редактировалось 3 раз(а)
    Добавлено: 22:15 03-01-2017   
aL144
 306 EGP


Рейтинг канала: 2(24)
Репутация: 25
Сообщения: 359
Откуда: Город непуганных идиотов
Зарегистрирован: 07.05.2014
Здесь кто нибудь живет? Я выжал из старушки ХТ свой максимум. Теперь перебираюсь на новые рельсы: Х2. Тут в стотысяч раз больше возможностей, но сперва хотелось бы знать обитает ли тут еще кто-либо.
_________________
Там где я был - смерти никогда не было, там где я есть - ее никогда не будет...
    Добавлено: 08:17 02-05-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Да. По возможностям согласен. Я пока в наковырявшемся состоянии.

У меня есть наработки поверх мода ностальгия от Murka.
Скорость производства увеличена в 3 раза.
Отключено повреждение оборудования при столкновении.
Отключён захват (можно вернуть). Мне лично в кайф перестать трястись за то, что оно может сдаться и палить со всех стволов. Да.
Сильный боевой AI от Darth Revan'а. Перекручивает игрока, не даёт сесть на хвост.
Турбо двигатель для шаттла на кнопке V, разгоняющий и трясущий шаттл с постепенной потерей щита (как в XBTF).
Ребаланс пушек на манер XBTF + скорость снарядов, модели снарядов из XBTF.
Новые эффекты попаданий, взрывов (не все доделаны, как хотел) и хвосты движков.
Даже пытался замутить скайбоксы из XBTF.
Картинка 1
Картинка 2

Из проблем:
- бесполезность ракет против вражеских истребителей (т.к. в ностальгии у всех вражин есть по задней турели), транспортов и капшипов. Усугубляет эту ситуацию огромный хитбокс ракеты. Уменьшил кстати их боди в 10 раз вроде, стало получше..
- неэффективность постройки своих станций перед обычной торговлей на шаттле (даже учитывая что я опустил цены на станции до 144, 296 и 640 тысяч по классам) - я хотел сделать эффективность производства как в XBTF (лёгкая/читерская), только чтобы было зачем - вражины прут и тд.

Из особенностей - пиратики обычным отрядом из пары баянов и пиратских кораблей могут вынести в мирном секторе базу. Улыбка
До хааков не доживал.

Хотел сделать усложнённый вариант старта XBTF. Шаттл, рандомная точка на карте (желательно новой) и торговля с опаской.

Была идея замутить красивые астероидные поля, пример - Homeworld'овские карты (первый HW). Получил некоторый опыт на python и теперь думаю, что можно не прибегать к скрипт-редактору в игре, а сгенерировать код карты самостоятельно (это же xml).
http://fulcrum4.tripod.com/homeworld/index2.html - как выглядит то что я имею ввиду.
А сделать координаты наверное можно в blender'е, или другом 3д редакторе.

По твоей теме: миллион секторов, вроде была в патче Ревана такая функциональность. И её скорее всего даже можно отдельно перенести в обычный Х2 обж.
Но шансы большие, что это приведёт к супертормозам.

Важная проблема Х2 в целом: нельзя будет сделать мод широкоформатных мониторов. Т.к. Х2 самостоятельно растягивает 4:3 картинку в 16:9 с тошнотворной потерей геометрии. Расстроен

Последний раз редактировалось: Non (13:44 02-05-2017), всего редактировалось 1 раз
    Добавлено: 13:37 02-05-2017   
P@SHA
 480 EGP


Рейтинг канала: 4(93)
Репутация: 61
Сообщения: 3001
Откуда: г.п. Антополь, Беларусь
Зарегистрирован: 24.11.2006
Non :
Шаттл, рандомная точка на карте (желательно новой)

Хотелось бы такого, а то старт в Аргон Прайм очень быстро уже способствует обогащению, а я люблю, чтобы за каждую кредитку трястись нужно было Улыбка

|P.S. Но, как всегда, чтобы можно было установить лишь то, что хочется, а не все сразу.

Последний раз редактировалось: P@SHA (22:52 02-05-2017), всего редактировалось 1 раз
    Добавлено: 22:36 02-05-2017   
TechCat
 90 EGP

Репутация: 25
Сообщения: 310

Зарегистрирован: 20.02.2006
Главное что в ксен секторе не заспавнило на открывашке в стоке Хы...
_________________
CMDR TechCat, Виконт Империи
    Добавлено: 16:47 03-05-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Подумал, что полезным в модострое было бы иметь отдельный патч с турбо-двигателем шаттла для уже патченых прогой от CheckerTwo на предмет кораблей обжей, а также патченых оригинальных обжей asm-патчем со скрипт-командами от Shaddie.

По всей видимости (тестировал не долго, глюков не нашёл) хорошо себя ведёт со сделанными на оригинальном обже сохранёнками.

Требует ассемблера от CheckerTwo.

Важно, чтобы обж был оригинальный, либо патченый прогой от CheckerTwo по увеличению количества кораблей / патчем со скрипт командами от Shaddie / любой корректной патчилкой обжа, которая не трогает функцию TCLIENT.Input.

Инструкция внутри. Улыбка

x2_shuttle_turbo.7z
 Описание:
 Имя файла:  x2_shuttle_turbo.7z
 Размер файла:  27.46 KB
 Скачано:  58 раз(а)


Последний раз редактировалось: Non (08:26 16-12-2017), всего редактировалось 1 раз
    Добавлено: 08:23 16-12-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Всё раскопанное и проверенное в применимом виде приложено в архиве внизу. Выключаем не нужное в файле patch.asm

Раскопал где отключить бесполезные новости на станциях.

Весь мусор находится в классе TQUEST_194.

Пока требуется начало новой игры. Не удалось успешно костыльно подменить кусок кода выполняемой функции по обновлению этих объявлений, чтобы снести с ними массив. То игра падает, то результата нет.. может позже получится.

Код:
TQUEST_194.Set:
           setmem     1
           push       0
           ret


Код:
TSHIP.MakeDamage:
           setmem     1
           push       0
           ret


А это для отключения случайного повреждения оборудования при уроне по корпусу или таране.

Кладём рядом свой обж и запускаем ассемблер
Код:
xa_asm.exe patch.asm

Переименовываем patch.cod в x2story.obj и пользуемся.

Чуть позже оформлю более изящно чем никак. Улыбка

Есть ещё вариант пропатчить функцию _Init и добавить туда свой языковой файл. Тогда его содержимое перезапишет имеющийся **.001.xml, что может быть очень полезно.

Но пока не разобрался, как сделать это с минимумом дополнительного кода.

Поидее как учил Shaddie должно работать:
Код:
           .section   code, abs

$ = 00003F38h
           jump       InitAddon
InitAddonRet:

           .section   code, con

InitAddon:
           pop
           push       201d
           push       1d
           push       2d
           call59     TINIT.LoadText
           pop
           jump       InitAddonRet


Но на практике серый экран при попытке поиграть в игру.. Т.е. _Init ломается.

Можно конечно заменить функцию целиком и не парится.. Вот её оригинал на xc.
 _Init   (кликните здесь для просмотра)
Код:
function _Init()
 {
 global.gs_DebugDump=-2147483648;
 global.gs_DebugInit=-2147483648;
 global.gs_DebugInput=-2147483648;
 global.gs_DebugLogic=-2147483648;
 global.gs_DebugHTML=-2147483648;
 global.gs_DebugLogbook=-2147483648;
 global.gs_DebugComp=-2147483648;
 global.gs_DebugTrade=-2147483648;
 global.gs_DebugCreateObject=-2147483648;
 global.gs_DebugKilled=-2147483648;
 global.gs_DebugHangarStart=-2147483648;
 global.gs_DebugDialog=-2147483648;
 global.gs_DebugMenu=-2147483648;
 global.gs_DebugAudio=-2147483648;
 global.gs_DebugQuests=0;
 global.gs_DebugScene=-2147483648;
 global.gs_DebugCutscenes=-2147483648;
 global.gs_DumpFileHandle=0;
 TINIT.Set();
 TINIT.LoadText(201); // <------------------------ Вот куда-нибудь сюда
 TX_AUDIO.Set();
 TPATCH.Set();
 TPLAY_CUTSCENE.Init();
 TMENU_BACKGROUND.Init();
 global.StartInfiniteLoop();
 global.ga_PatchTable=SE_TableAlloc();
 global.ga_ShipTypeMap=array(0,array(0,1,-1,2,3,77,5,6,-1,43,
    -1,76,79),array(29,30,-1,31,32,89,90,35,-1,43,-1,88,91),array(
    15,86,-1,17,18,19,20,85,-1,43,-1,84,87),array(22,23,-1,24,25,
    26,93,28,-1,43,-1,92,95),array(36,37,-1,38,39,40,81,82,-1,43,
    -1,80,83),array(7,8,9,10,11,12,13,14,-1,43,-1,-1,-1),array(-1,
    -1,-1,74,75,71,72,73,-1,-1,-1,-1,-1),array(-1,43,-1,-1,-1,61,
    62,63,-1,43,-1,-1,-1));
 global.ga_IllegalWares=array(0,array2(1048581,0,1048582,0,917506,
    0,917514,0,1048584,0,786449,0,786451,0,786452,0,786453,0),array2(
    1048581,0,1048582,0,917506,0,917514,0,1048584,0,786449,0,786451,
    0,786452,0,786453,0),array2(917506,0,917514,0,786449,0,786452,
    0,786453,0),array2(1048581,0,1048582,0,917506,0,917514,0,786449,
    0,786451,0,786452,0,786453,0),array2(1048581,0,1048582,0,917506,
    0,786449,0,786451,0,786452,0,786453,0),0,0,0,0,0);
 global.ga_FixedValueFactors=array(0,0,0,0,0,1063713,1063713,
    1063713,459984,459984,459984,65536,65536,86016,198912,86016,459984);
  {
  var loc1=SA_GetNumSubTypes(16);
  global.ga_WareEquipmentFlags=SE_ArrayAlloc(loc1);
  while((loc1=loc1-1)>=0)
   {
   var loc2=0;
   switch(loc1+-10)
    {
    case 1:
    case 21:
     {
     loc2=5;
     break;
     }
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
     {
     loc2=7;
     break;
     }
    case 6:
    case 7:
    case 8:
     {
     loc2=1;
     break;
     }
    case 2:
    case 3:
    case 4:
    case 9:
    case 10:
    case 12:
    case 13:
    case 14:
    case 15:
    case 22:
    case 23:
    case 24:
    case 25:
    case 29:
    case 30:
    case 31:
    case 35:
    case 36:
    case 39:
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    case 48:
     {
     loc2=3;
     break;
     }
    }
   if(loc1>=59&&loc1<=78)
    {
    loc2=3;
    }
   global.ga_WareEquipmentFlags[loc1]=loc2;
   }
  }
 global.ga_BestMissileForObject=array2(2012,4,2004,0,2073,4,2033,
    4,2021,4,2022,4,2026,4,2034,1,2023,3,2024,2,2025,1,2032,4,2031,
    4,2030,4,2035,4,2039,2,2016,4);
 global.ga_ShipSubTypeToGalObjMap=array(2032,2031,2021,2022,2023,
    2024,2025,2032,2031,0,2021,2022,2023,2024,2025,2032,2031,2021,
    2022,2023,2024,2025,2032,2031,2021,2022,2023,2024,2025,2032,2031,
    2021,2022,2023,2024,2025,2032,2031,2021,2022,2023,2024,2025,2035,
    0,0,0,0,0,2023,2064,0,2039,0,0,0,0,0,0,0,0,2023,2024,2025,2065,
    2066,2067,2011,2068,2023,2070,2023,2024,2025,2021,2022,2026,2023,
    2031,2030,2026,2024,2025,2030,2026,2025,2031,2030,2026,2023,2024,
    2030,2026,2024,2025,2030,0,0,0,2025,2080,0,0,2131,2131,2131,2131,
    2060,0,0,0,0,0,0);
 global.ga_ShipDefaultFormation=array(0,3,3,0,0,2,1,4,2,1,0);
 global.ga_NotorietyValues=array(100000,10000,1000,100,10,-10,
    -100,-1000,-10000,-100000,-1000000);
 global.ga_TradeRankingValues=array(0,2,5,10,20,30,40,80,100,
    150,200,400,800,1200,2000,3000,6000,11000,18000,30000,50000,70000,
    90000,150000,300000,500000,1000000,1500000,2000000,5000000,10000000);
 global.ga_FightRankingValues=array(0,2,5,10,20,50,70,90,130,
    150,250,450,700,900,1000,1400,2000,2500,6000,9000,16000,25000,
    44000,60000,85000,140000,280000,420000,500000,700000,1000000);
 global.ga_instationfog=array2(4417,array(0,0,0,5000,250000));
 global.ga_UnknownTypes=array2(327696,9021,458863,9011,458864,
    9001,458826,9011,458827,9011,458823,9011,458824,9011,458825,9011,
    458855,9011,458856,9011,458857,9011,458858,9011,524301,9001,524302,
    9001,524303,9001,655365,9001,655366,9001,655367,9001,458853,9031,
    458820,9001);
 TMENU_PLAYEROWNED.SetOptions(-386);
 return(0);
 }


Кстати отключение повреждения оборудования должно и для XT канать. Подмигиваю

x2_modular_obj_patch.7z
 Описание:
 Имя файла:  x2_modular_obj_patch.7z
 Размер файла:  2.33 KB
 Скачано:  43 раз(а)
    Добавлено: 22:38 18-12-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Эхх.. хотел оформить в виде скрипт-библиотеки полученный пытливостью и самописным кодогенератором на python код для заполнения фабрик в игре соответствующими продуктами, первичными и вторичными ресурсами (вариант для фабрик не игрока).. А хотел в виде скрипт-библиотеки, чтобы можно было использовать на любой версии игры, как и другие мои недавние наработки..

Дичь. Улыбка

 Кодом сгенерированный код для ScE   (кликните здесь для просмотра)
Код:
skip if (! ($subtype == 5 OR $subtype == 10 OR $subtype == 15 OR $subtype == 20 OR $subtype == 25))
  $factory -> add product to factory or dock: {Warheads}


skip if (! (($subtype >= 50 AND $subtype <= 74) OR ($subtype >= 164 AND $subtype <= 173)))
  $factory -> add second resource to factory: {Warheads}


skip if (! (($subtype >= 130 AND $subtype <= 134) OR $subtype == 157))
  $factory -> add product to factory or dock: {Energy Cells}


skip if ( (($subtype >= 130 AND $subtype <= 134) OR $subtype == 157))
  $factory -> add primary resource to factory: {Energy Cells}


skip if (! ($subtype == 146))
  $factory -> add product to factory or dock: {Cloth Rimes}


skip if (! ($subtype == 5 OR $subtype == 10 OR $subtype == 15 OR $subtype == 20 OR $subtype == 25))
  $factory -> add primary resource to factory: {Cloth Rimes}


skip if (! (($subtype >= 50 AND $subtype <= 74) OR ($subtype >= 164 AND $subtype <= 173)))
  $factory -> add second resource to factory: {Cloth Rimes}


skip if (! (($subtype >= 120 AND $subtype <= 124)))
  $factory -> add product to factory or dock: {Ore}


skip if (! ($subtype == 5 OR $subtype == 7 OR ($subtype >= 9 AND $subtype <= 10) OR $subtype == 12 OR ($subtype >= 14 AND $subtype <= 15) OR $subtype == 17 OR ($subtype >= 19 AND $subtype <= 20) OR $subtype == 22 OR ($subtype >= 24 AND $subtype <= 25) OR $subtype == 27 OR ($subtype >= 29 AND $subtype <= 46) OR ($subtype >= 50 AND $subtype <= 119) OR ($subtype >= 164 AND $subtype <= 173) OR ($subtype >= 184 AND $subtype <= 233)))
  $factory -> add primary resource to factory: {Ore}


skip if (! ($subtype == 138 OR $subtype == 144))
  $factory -> add second resource to factory: {Ore}


skip if (! ($subtype == 6 OR $subtype == 11 OR $subtype == 16 OR $subtype == 21 OR $subtype == 26))
  $factory -> add product to factory or dock: {Crystals}


skip if (! (($subtype >= 75 AND $subtype <= 77) OR ($subtype >= 81 AND $subtype <= 88) OR ($subtype >= 90 AND $subtype <= 95) OR ($subtype >= 99 AND $subtype <= 104) OR ($subtype >= 108 AND $subtype <= 119) OR ($subtype >= 130 AND $subtype <= 134) OR ($subtype >= 184 AND $subtype <= 213) OR ($subtype >= 219 AND $subtype <= 228)))
  $factory -> add second resource to factory: {Crystals}


skip if (! (($subtype >= 125 AND $subtype <= 129)))
  $factory -> add product to factory or dock: {Silicon Wafers}


skip if ( ($subtype == 5 OR $subtype == 10 OR $subtype == 15 OR $subtype == 20 OR $subtype == 25 OR ($subtype >= 30 AND $subtype <= 46) OR ($subtype >= 75 AND $subtype <= 157) OR ($subtype >= 164 AND $subtype <= 173) OR ($subtype >= 184 AND $subtype <= 233)))
  $factory -> add primary resource to factory: {Silicon Wafers}


skip if (! ($subtype == 147))
  $factory -> add product to factory or dock: {Meatsteak Cahoonas}


skip if (! (($subtype >= 6 AND $subtype <= 9) OR ($subtype >= 30 AND $subtype <= 33) OR ($subtype >= 50 AND $subtype <= 54) OR ($subtype >= 75 AND $subtype <= 83) OR $subtype == 159 OR $subtype == 164 OR $subtype == 169 OR $subtype == 174 OR ($subtype >= 184 AND $subtype <= 186) OR ($subtype >= 199 AND $subtype <= 201) OR $subtype == 214 OR $subtype == 219 OR $subtype == 224 OR $subtype == 229 OR $subtype == 234))
  $factory -> add primary resource to factory: {Meatsteak Cahoonas}


skip if (! ($subtype == 7 OR $subtype == 12 OR $subtype == 17 OR $subtype == 22 OR $subtype == 27))
  $factory -> add product to factory or dock: {Quantum Tubes}


skip if (! ($subtype == 9 OR $subtype == 14 OR $subtype == 19 OR $subtype == 24 OR ($subtype >= 29 AND $subtype <= 49) OR ($subtype >= 53 AND $subtype <= 54) OR ($subtype >= 57 AND $subtype <= 59) OR ($subtype >= 67 AND $subtype <= 69) OR ($subtype >= 73 AND $subtype <= 74) OR ($subtype >= 78 AND $subtype <= 80) OR $subtype == 89 OR ($subtype >= 96 AND $subtype <= 98) OR ($subtype >= 105 AND $subtype <= 107) OR ($subtype >= 159 AND $subtype <= 163) OR ($subtype >= 174 AND $subtype <= 178)))
  $factory -> add second resource to factory: {Quantum Tubes}


skip if (! ($subtype == 8 OR $subtype == 13 OR $subtype == 18 OR $subtype == 23 OR $subtype == 28))
  $factory -> add product to factory or dock: {Microchips}


skip if (! ($subtype == 9 OR $subtype == 14 OR $subtype == 19 OR $subtype == 24 OR $subtype == 29 OR ($subtype >= 159 AND $subtype <= 163)))
  $factory -> add second resource to factory: {Microchips}


skip if (! ($subtype == 9 OR $subtype == 14 OR $subtype == 19 OR $subtype == 24 OR $subtype == 29))
  $factory -> add product to factory or dock: {Computer Components}


skip if (! (($subtype >= 174 AND $subtype <= 178) OR ($subtype >= 234 AND $subtype <= 236)))
  $factory -> add second resource to factory: {Computer Components}


skip if (! ($subtype == 152))
  $factory -> add product to factory or dock: {Rastar Oil}


skip if (! (($subtype >= 10 AND $subtype <= 14) OR ($subtype >= 34 AND $subtype <= 37) OR ($subtype >= 55 AND $subtype <= 59) OR ($subtype >= 84 AND $subtype <= 92) OR $subtype == 160 OR $subtype == 165 OR $subtype == 170 OR ($subtype >= 187 AND $subtype <= 189) OR ($subtype >= 202 AND $subtype <= 204) OR $subtype == 215 OR $subtype == 220 OR $subtype == 225 OR $subtype == 230 OR $subtype == 235))
  $factory -> add primary resource to factory: {Rastar Oil}


skip if (! ($subtype == 153))
  $factory -> add second resource to factory: {Rastar Oil}


skip if (! ($subtype == 154))
  $factory -> add product to factory or dock: {Soja Husk}


skip if (! (($subtype >= 15 AND $subtype <= 19) OR ($subtype >= 38 AND $subtype <= 41) OR ($subtype >= 60 AND $subtype <= 64) OR ($subtype >= 93 AND $subtype <= 101) OR $subtype == 161 OR $subtype == 166 OR $subtype == 171 OR $subtype == 176 OR ($subtype >= 190 AND $subtype <= 192) OR ($subtype >= 205 AND $subtype <= 207) OR $subtype == 216 OR $subtype == 221 OR $subtype == 226 OR $subtype == 231 OR $subtype == 236))
  $factory -> add primary resource to factory: {Soja Husk}


skip if (! ($subtype == 140 OR ($subtype >= 149 AND $subtype <= 151)))
  $factory -> add second resource to factory: {Soja Husk}


skip if (! ($subtype == 150))
  $factory -> add product to factory or dock: {BoFu}


skip if (! (($subtype >= 20 AND $subtype <= 24) OR ($subtype >= 42 AND $subtype <= 45) OR ($subtype >= 65 AND $subtype <= 69) OR ($subtype >= 102 AND $subtype <= 110) OR $subtype == 162 OR $subtype == 167 OR $subtype == 172 OR $subtype == 177 OR ($subtype >= 193 AND $subtype <= 195) OR ($subtype >= 208 AND $subtype <= 210) OR $subtype == 217 OR $subtype == 222 OR $subtype == 227 OR $subtype == 232))
  $factory -> add primary resource to factory: {BoFu}


skip if (! ($subtype == 155))
  $factory -> add product to factory or dock: {Nostrop Oil}


skip if (! (($subtype >= 25 AND $subtype <= 29) OR ($subtype >= 46 AND $subtype <= 49) OR ($subtype >= 70 AND $subtype <= 74) OR ($subtype >= 111 AND $subtype <= 119) OR $subtype == 163 OR $subtype == 168 OR $subtype == 173 OR $subtype == 178 OR ($subtype >= 196 AND $subtype <= 198) OR ($subtype >= 211 AND $subtype <= 213) OR $subtype == 218 OR $subtype == 223 OR $subtype == 228 OR $subtype == 233))
  $factory -> add primary resource to factory: {Nostrop Oil}


skip if (! (($subtype >= 139 AND $subtype <= 142) OR ($subtype >= 151 AND $subtype <= 152) OR $subtype == 154))
  $factory -> add second resource to factory: {Nostrop Oil}


skip if (! ($subtype == 30 OR $subtype == 34 OR $subtype == 38 OR $subtype == 42 OR $subtype == 46))
  $factory -> add product to factory or dock: {1 MW Shield}


skip if (! ($subtype == 31 OR $subtype == 35 OR $subtype == 39 OR $subtype == 43 OR $subtype == 47))
  $factory -> add product to factory or dock: {5 MW Shield}


skip if (! ($subtype == 32 OR $subtype == 36 OR $subtype == 40 OR $subtype == 44 OR $subtype == 48))
  $factory -> add product to factory or dock: {25 MW Shield}


skip if (! ($subtype == 33 OR $subtype == 37 OR $subtype == 41 OR $subtype == 45 OR $subtype == 49))
  $factory -> add product to factory or dock: {125 MW Shield}


skip if (! ($subtype == 50 OR $subtype == 55 OR $subtype == 60 OR $subtype == 65 OR $subtype == 70))
  $factory -> add product to factory or dock: {Mosquito Missile}


skip if (! ($subtype == 51 OR $subtype == 56 OR $subtype == 61 OR $subtype == 66 OR $subtype == 71))
  $factory -> add product to factory or dock: {Wasp Missile}


skip if (! ($subtype == 52 OR $subtype == 57 OR $subtype == 62 OR $subtype == 67 OR $subtype == 72))
  $factory -> add product to factory or dock: {Dragonfly Missile}


skip if (! ($subtype == 53 OR $subtype == 58 OR $subtype == 63 OR $subtype == 68 OR $subtype == 73))
  $factory -> add product to factory or dock: {Silkworm Missile}


skip if (! ($subtype == 54 OR $subtype == 59 OR $subtype == 64 OR $subtype == 69 OR $subtype == 74))
  $factory -> add product to factory or dock: {Hornet Missile}


skip if (! ($subtype == 75 OR $subtype == 84 OR $subtype == 93 OR $subtype == 102 OR $subtype == 111))
  $factory -> add product to factory or dock: {Alpha Impulse Ray Emitter}


skip if (! ($subtype == 76 OR $subtype == 85 OR $subtype == 94 OR $subtype == 103 OR $subtype == 112))
  $factory -> add product to factory or dock: {Beta Impulse Ray Emitter}


skip if (! ($subtype == 77 OR $subtype == 86 OR $subtype == 95 OR $subtype == 104 OR $subtype == 113))
  $factory -> add product to factory or dock: {Gamma Impulse Ray Emitter}


skip if (! ($subtype == 78 OR $subtype == 87 OR $subtype == 96 OR $subtype == 105 OR $subtype == 114))
  $factory -> add product to factory or dock: {Alpha Particle Accelerator Cannon}


skip if (! ($subtype == 79 OR $subtype == 88 OR $subtype == 97 OR $subtype == 106 OR $subtype == 115))
  $factory -> add product to factory or dock: {Beta Particle Accelerator Cannon}


skip if (! ($subtype == 80 OR $subtype == 89 OR $subtype == 98 OR $subtype == 107 OR $subtype == 116))
  $factory -> add product to factory or dock: {Gamma Particle Accelerator Cannon}


skip if (! ($subtype == 81 OR $subtype == 90 OR $subtype == 99 OR $subtype == 108 OR $subtype == 117))
  $factory -> add product to factory or dock: {Alpha High Energy Plasma Thrower}


skip if (! ($subtype == 82 OR $subtype == 91 OR $subtype == 100 OR $subtype == 109 OR $subtype == 118))
  $factory -> add product to factory or dock: {Beta High Energy Plasma Thrower}


skip if (! ($subtype == 83 OR $subtype == 92 OR $subtype == 101 OR $subtype == 110 OR $subtype == 119))
  $factory -> add product to factory or dock: {Gamma High Energy Plasma Thrower}


skip if (! ($subtype == 135))
  $factory -> add product to factory or dock: {Delexian Wheat}


skip if (! (($subtype >= 146 AND $subtype <= 148)))
  $factory -> add primary resource to factory: {Delexian Wheat}


skip if (! ($subtype == 137 OR $subtype == 149))
  $factory -> add second resource to factory: {Delexian Wheat}


skip if (! ($subtype == 138))
  $factory -> add product to factory or dock: {BoGas}


skip if (! ($subtype == 150))
  $factory -> add primary resource to factory: {BoGas}


skip if (! ($subtype == 135 OR ($subtype >= 141 AND $subtype <= 143) OR $subtype == 145 OR $subtype == 153))
  $factory -> add second resource to factory: {BoGas}


skip if (! ($subtype == 136))
  $factory -> add product to factory or dock: {Argnu beef}


skip if (! ($subtype == 147))
  $factory -> add primary resource to factory: {Argnu beef}


skip if (! ($subtype == 139))
  $factory -> add product to factory or dock: {Scruffin Fruits}


skip if (! ($subtype == 151))
  $factory -> add primary resource to factory: {Scruffin Fruits}


skip if (! ($subtype == 136))
  $factory -> add second resource to factory: {Scruffin Fruits}


skip if (! ($subtype == 137))
  $factory -> add product to factory or dock: {Plankton}


skip if (! ($subtype == 149))
  $factory -> add primary resource to factory: {Plankton}


skip if (! ($subtype == 136 OR $subtype == 150))
  $factory -> add second resource to factory: {Plankton}


skip if (! ($subtype == 144))
  $factory -> add product to factory or dock: {Teladianium}


skip if (! (($subtype >= 138 AND $subtype <= 143) OR $subtype == 145 OR ($subtype >= 229 AND $subtype <= 233)))
  $factory -> add second resource to factory: {Teladianium}


skip if (! (($subtype >= 139 AND $subtype <= 140) OR ($subtype >= 151 AND $subtype <= 152)))
  $factory -> add second resource to factory: {Spaceflies}


skip if (! ($subtype == 140))
  $factory -> add product to factory or dock: {Chelts Meat}


skip if (! ($subtype == 152))
  $factory -> add primary resource to factory: {Chelts Meat}


skip if (! ($subtype == 141))
  $factory -> add product to factory or dock: {Soja Beans}


skip if (! ($subtype == 154))
  $factory -> add primary resource to factory: {Soja Beans}


skip if (! ($subtype == 142))
  $factory -> add product to factory or dock: {Maja Snails}


skip if (! ($subtype == 153))
  $factory -> add primary resource to factory: {Maja Snails}


skip if (! ($subtype == 143))
  $factory -> add product to factory or dock: {Sunrise Flowers}


skip if (! ($subtype == 155))
  $factory -> add primary resource to factory: {Sunrise Flowers}


skip if (! ($subtype == 145))
  $factory -> add product to factory or dock: {Swamp Plant}


skip if (! ($subtype == 156))
  $factory -> add primary resource to factory: {Swamp Plant}


skip if (! ($subtype == 155))
  $factory -> add second resource to factory: {Swamp Plant}


skip if (! ($subtype == 149))
  $factory -> add product to factory or dock: {Stott Spices}


skip if (! (($subtype >= 147 AND $subtype <= 148) OR ($subtype >= 154 AND $subtype <= 156)))
  $factory -> add second resource to factory: {Stott Spices}


skip if (! ($subtype == 148))
  $factory -> add product to factory or dock: {Space Fuel}


skip if (! ($subtype == 151))
  $factory -> add product to factory or dock: {Massom powder}


skip if (! (($subtype >= 174 AND $subtype <= 178)))
  $factory -> add primary resource to factory: {Massom powder}


skip if (! ($subtype == 153))
  $factory -> add product to factory or dock: {Majaglit}


skip if (! (($subtype >= 159 AND $subtype <= 163) OR ($subtype >= 234 AND $subtype <= 236)))
  $factory -> add primary resource to factory: {Majaglit}


skip if (! ($subtype == 156))
  $factory -> add product to factory or dock: {Space weed}


skip if (! (($subtype >= 159 AND $subtype <= 163)))
  $factory -> add product to factory or dock: {Navigation Relay Satellite 3893}


skip if (! (($subtype >= 164 AND $subtype <= 168)))
  $factory -> add product to factory or dock: {SQUASH Mine 3913}


skip if (! (($subtype >= 169 AND $subtype <= 173)))
  $factory -> add product to factory or dock: {Lasertower 3923}


skip if (! (($subtype >= 174 AND $subtype <= 178)))
  $factory -> add product to factory or dock: {Fighter Drone}


skip if (! ($subtype == 184 OR $subtype == 187 OR $subtype == 190 OR $subtype == 193 OR $subtype == 196))
  $factory -> add product to factory or dock: {Alpha Photon Pulse Cannon}


skip if (! ($subtype == 185 OR $subtype == 188 OR $subtype == 191 OR $subtype == 194 OR $subtype == 197))
  $factory -> add product to factory or dock: {Beta Photon Pulse Cannon}


skip if (! ($subtype == 186 OR $subtype == 189 OR $subtype == 192 OR $subtype == 195 OR $subtype == 198))
  $factory -> add product to factory or dock: {Gamma Photon Pulse Cannon}


skip if (! ($subtype == 199 OR $subtype == 202 OR $subtype == 205 OR $subtype == 208 OR $subtype == 211))
  $factory -> add product to factory or dock: {Alpha Phased Shockwave Generator}


skip if (! ($subtype == 200 OR $subtype == 203 OR $subtype == 206 OR $subtype == 209 OR $subtype == 212))
  $factory -> add product to factory or dock: {Beta Phased Shockwave Generator}


skip if (! ($subtype == 201 OR $subtype == 204 OR $subtype == 207 OR $subtype == 210 OR $subtype == 213))
  $factory -> add product to factory or dock: {Gamma Phased Shockwave Generator}


skip if (! (($subtype >= 214 AND $subtype <= 218)))
  $factory -> add product to factory or dock: {Mass Driver}


skip if (! (($subtype >= 219 AND $subtype <= 223)))
  $factory -> add product to factory or dock: {Ion Disruptor}


skip if (! (($subtype >= 224 AND $subtype <= 228)))
  $factory -> add product to factory or dock: {Mobile Drilling System}


skip if (! (($subtype >= 229 AND $subtype <= 233)))
  $factory -> add product to factory or dock: {Mass Driver Ammunition}


skip if (! (($subtype >= 234 AND $subtype <= 236)))
  $factory -> add product to factory or dock: {Advanced Satellite 4813}


Забавно, что задача, от которой умирает встроенный в игру скрипт редактор выполняется мгновенно в обже..

Верно Darth Revan сделал, запихнув свой боевой код в обж. Там получается куда быстрее выполнять кучу проверок без потери производительности.

Прикладываю патч для оригинального обжа и для любопытных - кодогенератор с полученными им из стандартной карты данными о продуктах, первичных и вторичных ресурсах (+ мои дополнения по образу и подобию).


Если будет проявлен интерес, опишу пошагово добавление команды в скрипт редактор. Методом закинь содержимое всех переменных в текстовый файл при выполнении кода и проанализируй их был получен рабочий и удобный метод. Подмигиваю

x2_scecmd_492.7z
 Описание:
 Имя файла:  x2_scecmd_492.7z
 Размер файла:  22.63 KB
 Скачано:  57 раз(а)


Последний раз редактировалось: Non (18:31 25-12-2017), всего редактировалось 2 раз(а)
    Добавлено: 03:01 25-12-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
А вот и гайд на добавление скрипт команд и немного в целом по обжековырянию. Улыбка

Замечания, пожелания и эточётакоеянипонил приветствуются. Да.


Начал разбирать составные команды от Darth Revan'a. Думаю можно оформить очень много полезных команд для оригинального обжа. Вроде таких:
- расширение склада отдельно для конкретной станции
- установка длительности цикла производства
- получение длительности цикла производства в переменную
- запустить эффект, например джампа, на создаваемом корабле
- запустить сцену прямо на камеру игрока
- включить/отключить управление игроку

Также в процессе разбора составных команд по запуску своих функций в обже.

Обж код в миллионы раз быстрее скриптов. Можно делать циклы с задержкой в один кадр и при этом ничего не будет тупить. На моём мониторе 75 герц, 1000мс делить на 75 = 13 мс.

Так что если скриптовый код опрашивает очень много всего за короткий промежуток времени и ещё хуже - запущен на вагоне кораблей - имеет смысл подумать о переносе его в обж.

Плюс составных команд ещё в том, что можно создать один скрипт, который будет получать все аргументы для составной команды и его вызывать в коде своих скриптов.

Это позволит сохранить совместимость с Extscriptor'ом или другим внешним редактором скриптов и получить дополнительные возможности, которых иногда очень не хватает.

А в случае добавления скриптовых команд в обычном варианте - либо 50 скриптов-обёрток, либо досохранение скриптов в игре с добавлением новых команд из комментариев.

И самый главный плюс - при добавлении своего кода в составную команду как одну короткую команду, или как целый вагон быстрого обж кода - скорее всего будет совместимость с сохранёнками. При условии, что обж патчится и изменяемые функции не запущены в данный момент.

Такие дела.

Последний раз редактировалось: Non (11:23 01-01-2018), всего редактировалось 3 раз(а)
    Добавлено: 19:08 30-12-2017   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Обновление 1 января для гайда по обжековырянию

Добавил генерацию строк include в core.xc и patch.xc батником refresh_includes.cmd. Теперь можно добавлять новые файлы *.inc (XASM) и *.xc в inc_patch и запускать refresh_includes.cmd.

Раскомментировал в батнике компиляцию обжа из x2story.cpp Гы-гы

Добавил немного информации по замене функций обжа на свои.

Добавил обсуждаемый paramdef.inc

Эхх.. тяжело там с уровнями дотошности. Некоторые места будут непонятны совсем новичкам, а тем кто уже имел дело - черезчур понятные другие некоторые места. Совсем запутался...

Приложения будут теперь в первом посте.

Последний раз редактировалось: Non (08:45 02-01-2018), всего редактировалось 2 раз(а)
    Добавлено: 11:24 01-01-2018   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Ещё одно обновление гайда по обжековырянию.

На этот раз гораздо лучше разобрал обработку аргументов, передаваемых скрипт редактором в коде скрипт команды, плюс разобрал сложную команду в качестве примера. Должно стать сильно понятнее. Да.

Скоро разберу составные команды..
    Добавлено: 10:31 03-01-2018   
Non
 790 EGP


Модератор
Рейтинг канала: 6(353)
Репутация: 237
Сообщения: 793

Зарегистрирован: 27.06.2006
Обновление гайда по обжековырянию. Улыбка

Постарался максимально упростить понимание самого удобного способа создания составной команды - комбинирование XASM и XC кода. За основу, как и во многом другом, - взят код Darth Revan'a, за что ему очень благодарен. Да.

Подробное описание процесса и примеры в самом гайде.

Пока мотивация немного упала, но надеюсь в обозримом будущем интегрирую максимум полезных команд в эту составную команду.
А её сделаю доступной модулем для полных обже-переделок и в качестве патча для обычного обжа X2, чтобы накатить скрипт команду на обж с добавленными кораблями, например. Подмигиваю
    Добавлено: 16:18 07-01-2018   
Shaddie
 550 EGP


Рейтинг канала: 4(60)
Репутация: 118
Сообщения: 259
Откуда: Томск
Зарегистрирован: 09.09.2004
Non :

Код:
           .section   code, abs

$ = 00003F38h
           jump       InitAddon
InitAddonRet:

           .section   code, con

InitAddon:
           pop
           push       201d
           push       1d
           push       2d
           call59     TINIT.LoadText
           pop
           jump       InitAddonRet


Но на практике серый экран при попытке поиграть в игру.. Т.е. _Init ломается.

Код:
00003F34: 0029 000D              |    1            writevar   global.gs_DebugHangarStart ; [13d ; 0Dh]
00003F38: 002C                   |    1            pop
00003F3A: 0002 80000000          |    0            push       -2147483648d ; 80000000h
00003F40: 0029 000E              |    1            writevar   global.gs_DebugDialog ; [14d ; 0Eh]

Попробуй так
Код:

           .section   code, abs

$ = 00003F3Ah
           jump       InitAddon
InitAddonRet:

           .section   code, con

InitAddon:
           push       201d
           push       1d
           push       2d
           call59     TINIT.LoadText
           pop
           push       -2147483648d ; 80000000h
           jump       InitAddonRet

_________________
Быстро едешь, тихо понесут...
    Добавлено: 21:35 14-01-2018   
Канал X2: The Threat: «Модификация обжей и модульные патчи для всех»
 
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: У меня рефлекс: как тока начинается тяпница - заканчиваецца ффсё остальное... Потом заканчиваецца пиффо, потом заканчиваюсь я... (Leshik)

  » Модификация обжей и модульные патчи для всех | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18