Kompilowanie silnika X-Ray (SoC)

Siema. Ktoś się zastanawiał skąd w np. w Lost Alphie czy moim modzie jest gunbobbing lub więcej slotów na broń?

Postanowiłem Wam wyjaśnić jak skompilować patch 1.0007 dla naszego stalkera.

Wymagana podstawowa wiedza o silnikach gier, kompilatorach oraz językach C/C#/.

A więc zaczynamy…

Co będzie potrzebne?:

Zainstalowane Visual Studio 2010 (NIE EXPRESS) oraz KONIECZNIE Service Pack 1 dla tegoż kompilatora.
Paczka stąd: https://yadi.sk/d/6GDogIZbiVx8v
Pobrane repozytorium stąd: https://xp-dev.com/svn/xray oraz skopiowane do osobnego folderu
Sporo czasu, cierpliwości i nerwów ze stali

Ściągamy repozytorium o rewizji numer 189 (najnowsze 193 jest zbugowane).

Kopiujemy je w inny folder, potem kasujemy plik “mount.bat”.

Teraz musimy ściągnąć “Paczkę” z niezbędnymi SDK i dwoma plikami .bat. Gdy

ściągniemy paczkę wypakowujemy ją na pulpit. Otrzymujemy dwa foldery z SDK DirectX oraz

dwa niewielkie pliki potrzebne do zrobienia wirtualnego dysku dla Visual Studio.

Powracamy do naszego skopiowanego repozytorium z silnikiem i wrzucamy dwa pliki bat z paczki. Później

wchodzimy kolejno w foldery “trunk”, “3rd party”. Do folderu “3rd party” wrzucamy foldery z paczki.

Konfiguracja ogólna oraz definiowanie funkcji w silniku:

Mamy przygotowany kod źródłowy do kompilacji, teraz wchodzimy w folder z silnikiem (repozytorium).

Mamy dwa pliki, “mountDisks.bat” oraz “unmountDisks.bat”. Klikamy “mountDisks.bat” wnet powinien nam się

pojawić w komputerze wirtualny dysk. Nosi on nazwę “x:”. Wchodzimy w ten dysk teraz i widzimy nasze repozytorium

z silnikiem: http://scr.hu/1ib2/p8of3

Będąc nadal na dysku “X:” wchodzimy w folder “trunk”. Znajdujący się w nim plik “build_config_defines.h” otwieramy

najlepiej Notepadem++. Widzimy sporo funkcji do zdefiniowania. Po krótce omówię za co one odpowiadają.

#pragma once
// ==================================== Правки от alpet ======================================= 
#define HLAMP_AFFECT_IMMUNITIES            // rozmaite zmiany dla klasy lamp (CHangingLamp)
// #define LUAICP_COMPAT                // ?
#define SCRIPT_ICONS_CONTROL            // setup_game_icon w Lua
#define SCRIPT_EZI_CONTROL                // kontrola effectoru CEffectorZoomInertion \
#define SPAWN_ANTIFREEZE                // antifreez podczas spawnowania obiektow
#define ECO_RENDER                        // zmniejszenie FPS w menu
// #define MT_OPT                        // wielowatkowosc 
#define AF_SHOW_DYNAMIC_PARAMS            // ?
#define SCRIPT_VARS_STORAGE                // ?

// ==================================== Правки от K.D. =======================================
#define KD_DETAIL_RADIUS                // wieksze rysowanie trawy w polu widzenia
// ==================================== Правки от Real Wolf ======================================= 
//#define INV_RUCK_UNLIMITED_FIX        // teraz plecak nie jest nieskonczony
#define INV_NEW_SLOTS_SYSTEM            // nowy ekwipunek ze slotami
#define SUN_DIR_NOT_DEBUG                // slonce dziala poprawnie
//#define ARTEFACTS_FROM_RUCK            // artefakty uzywane z plecaka
#define KNIFE_SPRINT_FIX                // fix biegania dla noza
#define KNIFE_SPRINT_MOTION                // mozliwosc animacji sprintu dla noza
#define MISSILE_THREAT_FIX                // animacje sprintu dla pozostalych itemow
//#define GRENADE_FROM_BELT                // granaty z pasa
//#define LOCK_RELOAD_IN_SPRINT            // blokada przeladowywania broni w sprincie
#define HIDE_WEAPON_IN_CAR                // chowanie broni w aucie
//#define BM16_ANIMS_FIX                    // fix animacji dla bm16
#define INV_OUTFIT_FULL_ICON_HIDE        // ukrycie ikony gg w zbroi w ekwipunku
#define UI_LOCK_PDA_WITHOUT_PDA_IN_SLOT // zakaz uzycia pda gdy nie ma go w slocie
#define CAR_SAVE_FUEL                    // auta zapamietuja paliwo
#define R1_EXCLUDE                        // wyciecie rendera statycznego
// ==================================== Правки от Red Virus ======================================= 
#define INV_NO_ACTIVATE_APPARATUS_SLOT  // brak mozliwosci aktywacji niektorych slotow
#define INV_MOVE_ITM_INTO_QUICK_SLOTS    // jedzenie moze byc przeniesione do szybkich slotow
#define WPN_BOBBING                        // gunbobbing z lost alphy
//#define INV_COLORIZE_AMMO                // kolorowanie amunicji z lost alphy
// ==================================== Правки от Karlan ======================================= 
//#define AMMO_FROM_BELT                    // amunicja uzywana z pasa

Co to znaczy zakontować zmianę?

To znaczy dodać dwa ukośniki przed #. Oznacza to wyłączenie funkcji w silniku.

Dwie rady odemnie:

Nigdy niezakomentowywuj dalszego rysowania trawy oraz ECO_RENDER’a. Nigdy, bo będą później kłopoty przy kompilacji
Nie włączaj amunicji na pasie ponieważ NPC mogą powodować problemy (uciekanie gdyż nie mają amunicji)

Zmieniamy wedle uznania i zapisujemy plik.

Kompilacja bibliotek oraz silnika:

Wchodzimy kolejno w: dysk x\trunk\xray\xr_3da i szukamy pliku .sln o nazwie “XR_3DA_2007”. Klikamy na niego dwa razy i ukazuje nam się

Visual Studio. Musimy odczekać pare minut aż na pasku w Visualu pokaże się napis “Ready”

Wygląda to tak: http://scr.hu/1ib2/quk5n

Klikamy prawym przyciskiem myszy na zakładkę “3rd party”. Potem wybieramy “Build”.

Po tym powinno nam się sześć bibliotek pomyślnie skompilować. Poinformuje nas o tym log: http://scr.hu/1ib2/mizrm

Oczywiście można by te dwa SDK dać do folderu na dysku C:\Program Files (x86) przez co niemusielibyśmy ustalać ścieżek dla nich tylko

od razu kompilować ale tego nietestowałem. Można spróbować, a może ułatwi pracę?

Mamy teraz biblioteki potrzebne do kompilacji silnika, więc zabierzymy się za silnik teraz…

W każdym pliku ustawiamy ścieżki do SDK DirectX June 2010 w każdym pliku silnika analogicznie jak w pierwszej bibliotece.

To są Include Directories i Library Directories, musimy tam ustawić odpowiednią ścieżkę dla SDK DirectX.

I potem tylko klikamy prawym przyciskiem myszy na plik silnika, potem “Project only” i “Build only NAZWAPLIKU”.

Należy tylko pamiętać o kolejności kompilacji:

Biblioteki
xrD3D9-Null
Luabind oraz LuaJIT
xrCore
xrGameSpy
xrCDB
xrXMLParser
xrSound
xrNetServer
XR_3DA
xrCPU_Pipe
xrParticles
xrRender_r1
xrRender_r2

To tyle na dzisiaj. Testować, dawać relacje. Pytania mile widziane !(<base_url>/uploads/monthly_2015_05/smile.gif.53fa18b585c5ebbd636023ddd54e2863.gif)

1 polubienie