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)