Jeśli nie jesteś zbyt leniwy i masz trochę czasu dzięki temu poradnikowi możesz zrobić całkiem dobrego moda.
Postaram się krok po kroku w sposób łatwy i klarowny przedstawić sposób na edycję pliku all.spawn, za pomocą ACDC - edytora dzięki któremu uzyskasz stabilną grę i jednocześnie satysfakcję z własnego "dzieła".
Tak więc zaczynajmy...
Na początek zapoznajemy się z
TYM tematem.
1.Pobieramy
ACDC (pod swoją wersję gry) i wypakowujemy zawartość.
2.Pobieramy i instalujemy
active perl.
3.Zmieniamy nazwę wypakowanego pliku (np. dla wersji 1.0004\1.0005 acdc11oct.pl - nazwa zależy od wersji) z rozszerzeniem .pl na acdc.pl lub pozostawiamy bez zmian jeśli wypakuje nam plik acdc.pl
4.Kopiujemy plik all.spawn z gamedata\spawns do folderu w którym mamy acdc.pl
UWAGA! plik all.spawn musi być w tej samej wersji co pobrany program, ponadto nie powinien być modyfikowany xrSpawnerem!
5.Tworzymy plik .txt w folderze z acdc.pl, otwieramy i kopiujemy do niego ten fragment
perl acdc.pl -d all.spawn a następnie zapisujemy zmiany.
Zmieniamy następnie nazwę tego pliku z .txt na
decompile.bat (automatycznie zmieni się ikona pliku).
6.Tworzymy drugi plik .txt w tym samym folderze a następnie wklejamy tam ten fragment
perl acdc.pl -c all.ltx -o new.spawn a następnie zapisujemy zmiany, po których zmieniamy nazwę pliku z .txt na
compile.bat7.Klikamy na decompile.bat i rozpoczyna się wypakowywanie plików .ltx z all.spawn
8.Chcąc na nowo „wpakować” edytowane pliki klikamy na compile.bat wówczas utworzy się nam plik new.spawn – będzie to zmodyfikowany plik spawn’a który wrzucamy do gamedata/spawns zmieniając nazwę na all.spawn.
Tu poradnik w screenach :
Screen 01 i
Screen02Po wypakowaniu mamy pliki z rozszerzeniem .ltx, są dwa rodzaje tych plików:
- alife_
- way_
Nas będą interesowały tylko pliki alife_
Oto ich lista:
- Kod: Zaznacz wszystko
- alife_l01_escape.ltx
- alife_l02_garbage.ltx
- alife_l03_agroprom.ltx
- alife_l03u_agr_undergronud.ltx
- alife_l04_darkvalley.ltx
- alife_l04u_labx18.ltx
- alife_l05_bar.ltx
- alife_l06_rostok.ltx
- alife_l07_military.ltx
- alife_l08_yantar.ltx
- alife_l08u_brainlab.ltx
- alife_l10_radar.ltx
- alife_l10u_bunker.ltx
- alife_l11_pripyat.ltx
- alife_l12_stancia.ltx
- alife_l12_stancia_2.ltx
- alife_l12u_control_monolith.ltx
- alife_l12u_sarcofag.ltx
Każdy z tych plików jest przypisany do konkretnej lokacji, z kolei w każdym pliku .ltx figuruje numer każdego dodanego obiektu i tak np. w pliku alife_l01_escape.ltx pierwszy obiekt ma numer [0], zaś ostatni [869], natomiast ostatni z obiektów w pliku alife_l10u_bunker.ltx ma numer [8640] – po co to pisze?, po to że dodając nowy obiekt, nie ważne czy to NPC, mutant czy pojazd, musimy mu nadać numer wyższy niż ostatniego pliku, czyli zaczynamy numerację dodawanych obiektów od numeru np.8641
Zasadnicza praca z ACDC polega na komendzie kopiuj/wklej i jak się przekonacie jest łatwa do opanowania.
Wybieramy z powyższej listy - któryś z plików .ltx, otwieramy notatnikiem i na samym końcu dodajemy całą sekcję, tak jak podaje poniższy przykład a następnie zapisujemy zmiany.
Przykładowy spawn mutanta (będzie to kot) wygląda następująco:
- Kod: Zaznacz wszystko
[8662]
; cse_abstract properties
section_name = cat_weak
name = esc_cat_weak_0001
position = -29.77,-16.61,-185.69
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 0
distance = 23.1000003814697
level_vertex_id = 190749
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
none = true
END
; cse_visual properties
visual_name = monsters\cat\cat
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0x2d2d2d2d
upd:creature_flags = 0x2d
upd:position = -29.77,-16.61,-185.69
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
; cse_alife_monster_abstract properties
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
; cse_ph_skeleton properties
; cse_alife_monster_base properties
; se_monster properties
Gdzie:[8662] – kolejny numer spawnowanego obiektu (nie może się powtórzyć).
section_name = rodzaj dodawanego mutanta np. cat_weak, burer_weak itp.
name = nazwa dodanego mutanta np. esc_cat_weak_0001 gdzie: esc – kordon, cat_weak – kot, 0001 – numer mutanta
position = wpisujemy tutaj współrzędne w które chcielibyśmy dodać mutanta.
direction = ustawienie mutanta w określonym kierunku (parametr mało istotny) – wpisać 0,0,0
game_vertex_id = pozostaw wartość domyślnie*
distance = prawdopodobnie odległość z jakiej dostrzeże nas mutant, ustaw wartość na 23.1000003814697
level_vertex_id = wartość którą zostawiamy domyślnie **
object_flags = pozostaw wartość domyślnie***
[smart_terrains]
none = true
END
Powyższy wpis oznacza że mutant nie ma smart terrain’a co oznacza że pobiegnie za wami jeżeli się zbliżycie, nawet na skraj planszy, nie trzyma się terenu w którym go dodamy.
Tego wpisu nie możemy pominąć. Rozwiązaniem tego problemu jest właściwy smart terrain (ale to już temat na inny tutorial).
visual_name = ścieżka do pliku .ogf z danym mutantem (lokalizacja: meshes\monsters).
g_team = 0
g_squad = 0
g_group = 0
health = tu wpisujemy wartość zdrowia dla naszego mutanta; domyślnie 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = ustaw tak samo jak poprzednią wartość zdrowia
upd:timestamp = 0x2d2d2d2d
upd:creature_flags = 0x2d
upd:position = tu wpisujemy dokładnie te same wartości co w "position" czyli współrzędne obiektu.
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
Właściwości których nie opisałem pozostaw domyślnie (czytaj weź z moda S.T.A.L.K.E.R. Director's Cut **).
* - game_vertex_id = dla każdej lokacji wartość ta jest inna, przypisując ją określonemu obiektowi (mutant, pojazd) np. w kordonie znajdujemy w odpowiednim pliku .ltx wpis pierwszego obiektu z listy; "cse_alife_object properties" czyli:
- Kod: Zaznacz wszystko
[0]
; cse_abstract properties
section_name = breakable_object
name = meshes\brkbl#0.ogf
position = -79.4930877685547,-3.16186141967773,-76.9341430664063
direction = 0.581841766834259,-1.45571649074554,-0.267672836780548
; cse_alife_object properties
game_vertex_id = 0 ---> To jest wartość którą będziemy barć dla każdego nowo dodanego mutanta czy obiektu z kordonu
distance = 0
level_vertex_id = 594270
object_flags = 0xffffffba
; cse_visual properties
visual_name = meshes\brkbl#0
; cse_alife_object_breakable properties
health = 1
dla przykładu wartość dla obiektu w agropromie:
otwieramy alife_l03_agroprom.ltx, w pierwszym na liście obiekcie znajdujemy "; cse_alife_object properties"
- Kod: Zaznacz wszystko
[1376]
; cse_abstract properties
section_name = breakable_object
name = meshes\brkbl#0.ogf
position = 79.2811889648438,2.75250244140625,-105.307876586914
direction = 0.250774204730988,0.0453699752688408,-0.132588282227516
; cse_alife_object properties
game_vertex_id = 416 ---> To jest wartość którą będziemy barć dla każdego nowo dodanego mutanta czy obiektu z agropromu
distance = 0
level_vertex_id = 425955
object_flags = 0xffffffba
; cse_visual properties
visual_name = meshes\brkbl#0
; cse_alife_object_breakable properties
health = 1
**-level_vertex_id = nie będę udawał że wiem co tu wpisać, wzorowałem się na spawnie z moda S.T.A.L.K.E.R. director's cut pod wersję 1.0004 i parametry nie opisane brałem właśnie z niego, więc spawnując cokolwiek z ACDC pobierz tego moda i wypakuj pliki .ltx - tu znajdziesz wartości dla nie opisanych współczynników.
***-object_flags = patrz **
Lista mutantów (w nazewnictwie dodajemy _weak po nazwie mutanta):
- Kod: Zaznacz wszystko
_flesh (mięsacz)
_chimera (chimera)
_bloodsucker (pijawka)
_dog (pies)
_boar (dzik)
_pseudodog (nibypies)
_burer (kopacz)
_giant (nibyolbrzym)
_controller (kontroler)
_poltergeist (poltergeist)
_zombie (zombie)
_fracture (izolm)
_snork (snork)
_cat (kot)
_crow (kruk)
_tushkano (rodent)
Przykładowy spawn samochodu poniżej.
- Kod: Zaznacz wszystko
[8662]
; cse_abstract properties
section_name = m_car
name = ven_niva_00
position = -246.02,-17.94,-126.27
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 594270
object_flags = 0xfffffffa
; cse_visual properties
visual_name = physics\vehicles\niva\veh_niva_u_01
visual_flags = 0x1
; cse_ph_skeleton properties
; cse_alife_car properties
health = 1
Lista pojazdów (niepełna):
- Kod: Zaznacz wszystko
- niva
- zaz
- btr
- uaz
- tr13
- kamaz
Co do poszczególnych współczynników określających dany pojazd nie będę się rozpisywał. Najistotniejsze są:
section_name = rodzaj obiektu ; w przypadku pojazdów zawsze m_car
name = nazwa, zawsze inna niż poprzednia (zachować nomenklaturę wzorcową tj. podaje to schemat)
position = czyli podajemy współrzędne w których chcemy mieć dodany obiekt.
visual_name = jest to ścieżka do modelu pojazdu (meshes\physics\vehicles).
direction = ustawienie pojazdu względem nas, (ustawiamy 0,0,0).
game_vertex_id = ustawiamy analogicznie jak w przykładzie mutanta (patrz * powyżej)
Pozostałe parametry spisać z wymienianego powyżej moda.
Uwaga! Spawnowanie samochodów lub też obiektów nie będących w ruchu powoduje pewien błąd, mianowicie dodany obiekt wisi w powietrzu co przedstawia
TEN screen.
Wystarczy lekko dotknąć samochodu by ten powrócił na ziemię ale psuje to rozgrywkę i od was zależy czy chcecie dodawać "wiszące" pojazdy".
Teraz przechodzimy do spawnowania NPC
Wybieramy odpowiedni plik .ltx w zależności od tego gdzie chcemy dodać naszą postać, na początek weźmy kordon czyli plik alife_l01_escape.ltx, edytujemy podobnie jak w przypadku mutanta dodając całą sekcję na końcu i zapisując zmiany.
Poniżej przykład.
- Kod: Zaznacz wszystko
[8641]
; cse_abstract properties
section_name = stalker
name = esc_rambo
position = -23.65,-16.27,-180.26
direction = 0,0,0
; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_rambo
; cse_alife_object properties
game_vertex_id = 61
distance = 9.80000019073486
level_vertex_id = 43968
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
none = true
END
; cse_visual properties
visual_name = actors\soldier\soldier_bandana_3
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 5
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0x617a6b75
upd:creature_flags = 0x6b
upd:position = -23.65,-16.27,-180.26
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 5
; cse_alife_monster_abstract properties
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
; cse_alife_human_abstract properties
predicate5 = 2,2,0,1,1
predicate4 = 0,2,0,2
; cse_ph_skeleton properties
upd:start_dialog =
; se_stalker properties
Gdzie:[8641] kolejny numer dodawanego obiektu (tak jak w przypadku mutanta).
section_name = wpisujemy stalker bo naszym obiektem jest NPC (nie ma tu znaczenia frakcja).
name = tu wpisujemy wymyśloną przez siebie nazwę (będziemy się jej trzymać w dalszej modyfikacji).
position = tu podajemy współrzędne X,Y,Z
direction = mało istotny parametr określający ustawienie względem nas NPC lecz nie na tyle by go pominąć - wpisujemy 0,0,0
money = czyli hajs stalkera (ta wartość pojawi się również w pliku "character_desc_xxxxx.xml", więc trzymamy się jednej).
character_profile = czyli w dowolnym tłumaczeniu profil naszego NPC, ustawiamy jak nazwę, pamiętając, że profil ten będziemy edytować w pliku character_desc_xxxxx.xml (config\gameplay).
game_vertex_id = 61
distance = 9.80000019073486
level_vertex_id = 43968
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
none = true
END
Podane powyżej współczynniki weź z podanego przykładu, jeśli zechcesz je zmienić to na własne ryzyko.
Co się tyczy [smart_terrains] - nasz NPC będzie przemierzał obszar na którym się znajduje w dowolnym kierunku.
visual_name = to ścieżka do modelu .ogf naszego stalkera (wygląd postaci), możemy ustawić np. trepa albo bandit master'a (trzymamy się jednej ścieżki .ogf później musimy ją umieścić w odpowiednim wpisie w pliku character_desc_xxxxx.xml)
g_team = 0
g_squad = 1
g_group = 5
health = 1 --->wartość zdrowia NPC; max wartość = 2
dynamic_out_restrictions =
dynamic_in_restrictions =
Zmieniamy tylko health, pozostałe parametry przepisujemy.
upd:health = 1 --->wartość ta sama co poprzednio
upd:timestamp = 0x617a6b75
upd:creature_flags = 0x6b
upd:position = -23.65,-16.27,-180.26 ---->wpisujemy te same koordynaty X,Y,Z co w position
upd:o_model = 0
upd:o_torso = 0,0,0 --->tu wpisuj 0,0,0
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 5
Pozostałe współczynniki skopiuj z przykładu.
Na tym naszej modyfikacji nie koniec. Aby nasz NPC pojawił się w grze musimy edytować jeszcze kilka plików, co podawałem opisując współczynniki.
Teraz znajdujemy plik character_desc_xxxxx.xml, na potrzeby tego przykładu będzie to character_desc_escape.xml (dla Kordonu).
Otwieramy notatnikiem i na końcu dodajemy wpis (pod sekcją "provodnik") - przykład:
- Kod: Zaznacz wszystko
<!-------------------------------------esc_rambo-------------------------------------------------------->
<specific_character id=" esc_rambo" team_default = "1">
<name>esc_rambo_name</name>
<icon>ui_npc_u_soldier_bandana</icon>
<bio>esc_rambo_bio</bio>
<class>esc_rambo</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>5000</rank>
<reputation>999</reputation>
<money min="5000" max="10000" infinitive="0"/>
<snd_config>characters_voice\human_01\military\</snd_config>
<crouch_type>0</crouch_type>
<visual>actors\soldier\soldier_bandana_3</visual>
<supplies>
[spawn] \n
wpn_usp \n
ammo_11.43x23_hydro = 1 \n
wpn_groza \n
ammo_9x39_ap \n
device_torch \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_3.xml"
<start_dialog>hello_dialog</start_dialog>
#include "gameplay\character_dialogs.xml"
</specific_character>
</xml>
Gdzie:---esc_rambo-- zwracamy uwagę na właściwą nazwę, generalnie trzymamy się wcześniejszej nomenklatury
<specific_character id=" esc_rambo" team_default = "1"> ---> "esc_rambo" - tak jak wyżej-
<name>esc_rambo_name</name> ---> nazwa naszego NPC
<icon>ui_npc_u_soldier_bandana</icon> ---> wyświetlana podczas rozmowy ikona NPC
<bio>esc_rambo_bio</bio> ---> nazwa właściwa i jednocześnie powiązanie jej z właściwym plikiem "stable_bio_name" (config\text\pol) - ten plik też będziemy edytować
<class>esc_rambo</class> ---> to rodzaj naszego NPC, nie znajdziemy go gdyż jest unikatowy, będziemy musieli go dodać do pliku "m_stalker.ltx" (config\creatures).
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> ---> czyli przynależność do danej frakcji, taką samą ustawiamy w "m_stalker.ltx"
<rank>5000</rank> ---> czyli pozycja naszego NPC w rankingu. Patrz
TEN scereen.
<reputation>999</reputation> ---> określa reputację
<money min="5000" max="10000" infinitive="0"/> ---> hajs naszego NPC, w poprzednim pliku zwracałem uwagę na wartość, powinna być w zadanym przedziale.
<snd_config>characters_voice\human_01\military\</snd_config> --->ścieżka dźwiękowa dla naszego NPC
<crouch_type>0</crouch_type> ---> nie wiem za co odpowiada ten parametr, możesz sprawdzić pliki i dać inny.
<visual>actors\soldier\soldier_bandana_3</visual> ---> Tak jak w pliku "alife_l01_escape" trzymamy się tego samego modelu .ogf (wygląd NPC)
<supplies> ---> odpowiada za ogólny ekwipunek naszego NPC
[spawn] \n
wpn_usp \n ---> broń dodatkowa
ammo_11.43x23_hydro = 1 \n ---> amunicja do broni dodatkowej
wpn_groza \n ---> broń główna
ammo_9x39_ap \n ---> amunicja do broni głównej
device_torch \n
#include "gameplay\character_items.xml" \n ---> ekwipnuek NPC określony plikiem "character_items.xml"
#include "gameplay\character_food.xml" ---> odpowiada za rodzaj prowiantu
</supplies>
<start_dialog>hello_dialog</start_dialog> ---> gadka z NPC
</xml> ---> nie zapomnijmy na końcu dodać ten wpis
Tak jak już wspominałem musimy teraz edytować plik "m_stalker.ltx" (config\creatures)
Otwieramy go notatnikiem dodając poniższy wpis na samym dole pliku i zapisując zmiany.
- Kod: Zaznacz wszystko
[esc_rambo]:stalker
$spawn = "respawn\esc_rambo"
character_profile = esc_rambo
spec_rank = master
community = stalker
Gdzie: esc_rambo ---> nazwa naszego NPC, trzymamy się cały czas tych samych oznaczeń w plikach
character_profile = wpisujemy to samo co w pliku .ltx w którym dodawaliśmy stalkera (w tym przypadku jest to "alife_l01_escape.ltx")
spec_rank = oznacza rangę
community = ten wpis określa nam przynależność do danej frakcji
Nie koniec na tym, teraz edytujemy plik "npc_profile.xml" (config\gameplay) dodając mały wpis
- Kod: Zaznacz wszystko
<character id="esc_rambo">
<class>esc_rambo</class>
</character>
Umieszczamy go np. pod sekcją WILKA
Na koniec, aby nasza postać była w pełni "dopicowana" edytujemy jeszcze jej opis
Bierzemy plik "stable_bio_name" (config\text\pol) i na samym końcu dodajemy ten wpis.
- Kod: Zaznacz wszystko
<string id="esc_rambo_name">
<text>Rambo</text>
</string>
<string id="esc_rambo_bio">
<text>Weteran z Wietnamu</text>
</string>
Oczywiście wpisujemy tu nazwę naszego NPC i dajemy dowolny opis.
Jeżeli wszystko robiliśmy zgodnie z zaleceniami, powinniśmy zobaczyć
Screen03,
Screen04 oraz
Screen05Należy nadmienić iż w przypadku mutantów i pojazdów nie podałem pełnej listy wymaganych plików z powodu obszernego już tutorialu, sam all.spawn nie czyni jeszcze z tego modyfikacji i bez odpowiednich plików mogą pojawić się błędy.
UPDATEŻeby nie było wątpliwości jak powinny wyglądać edytowane pliki, poniżej zamieszczam screen'y dla przykładu:
alife_l01_escape.ltxcharacter_desc_escape.xmlnpc_profile.xmlm_stalker.ltxstable_bio_name.xml Poradnik stworzony specjalnie dla
STALKER.PLZabrania się kopiowania zawartości jak również udostępniania tego poradnika w jakikolwiek sposób na innych forach internetowych o tematyce gry S.T.A.L.K.E.R.
Źródło:
http://sdk.stalker-game.com/en/index.ph ... _all.spawn oraz odrobina własnej inwencji.
Poradnik jest obszerny i można się pogubić na początku, w razie pytań piszcie - spróbuje pomóc.
Autor: Freeman
Od cudownej ekipy forum:Przydatny mod do szybkiego określania współrzędnych:
viewtopic.php?f=68&t=5965&start=48#p206163