Skocz do zawartości

Diegtiariow

Zasłużony
  • Postów

    4879
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    381

Odpowiedzi opublikowane przez Diegtiariow

  1. NAZWA: Stare utwory by tsimba17
    TWÓRCA: tsimba17

     

    OPIS:

    Spoiler

    Od twórcy utworów:

    Jakieś 15 lat temu napisałem muzykę do moda do Half-Life 2, ale jak zwykle wszystko ucichło. Nawiasem mówiąc, ja sam wcześniej nie robiłem muzyki i ogólnie nigdy nie otrzymałem specjalnych kwalifikacji. Po prostu dobrze się bawiłem, jak zwykle w dzieciństwie.

    Ostatnio przypadkowo wykopałem kilka utworów i wydawało mi się, że wróciłem do momentu sprzed 15 lat temu. Wybrałem takie, które teoretycznie można wykorzystać: małe ambienty i krótkie instrumentale. Jest nawet jeden utwór, który zrobiłem do głównego menu. Może się komuś przyda, zremiksuje ambienty lub ustawi je gdzieś w laboratoriach. Czemu ma to przepaść?

     

    LINKI:

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/4447-moi-starye-treki/

    • Dodatnia 1
  2. NAZWA: Wyświetlenie zegara na HUD'zie [CoP]
    AUTOR: Steelrat

     

    POTRZEBNE PLIKI:

    Spoiler
    • gamedata\configs\ui\ui_custom_msgs.xml
    • gamedata\scripts\bind_stalker.script

     

    ZMIANY W PLIKACH:

    Spoiler

    1. WASZA_NAZWA_SKRYPTU.SCRIPT W FOLDERZE GAMEDATA\SCRIPTS:

    Spoiler

    Piszemy w pliku:

    function show_time()
    local hud = get_hud()
    local cs = hud:GetCustomStatic("hud_show_time")
    if cs == nil then
    hud:AddCustomStatic("hud_time_static", true)
    hud:AddCustomStatic("hud_show_time", true)
    cs = hud:GetCustomStatic("hud_show_time")
    end[/color]
    
    [color=green]local time_h = level.get_time_hours()
    local time_m = level.get_time_minutes()
    local msg
    if time_m >= 10 then
    msg = string.format(" %02d:%02d\n", time_h, time_m)
    else
    msg = string.format(" %02d:%02d\n", time_h, time_m)
    end
    
    if cs ~= nil then cs:wnd():SetText(msg) end
    end

     

     

    2. UI_CUSTOM_MSGS.XML:

    Spoiler

    Piszemy w pliku:

    <hud_time_static x="852" y="17" width="156" height="52">
    <text complex_mode="0" x="65" y="0" font="letterica16" r="255" g="255" b="255" a="130">Time</text>
    <texture>ui_hud_frame_clock</texture>
    </hud_time_static>
    <hud_show_time x="862" y="38" width="156" height="52">
    <text x="0" y="0" font="graffiti19" r="255" g="255" b="255" a="140" align="c"/>
    </hud_show_time>

     

     

    3. BIND_STALKER.SCRIPT:

    Spoiler

    Po tym:

    function actor_binder:update(delta)
    object_binder.update(self, delta)
    local time = time_global()
    game_stats.update (delta, self.object)

    piszemy linijkę:

    wasza_nazwa_skryptu.show_time()

     

     

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1584-cop-vyvodim-chasy-na-hud/

    • Ważne 1
  3. NAZWA: Nowa ranga - Legenda [CoP]

     

    Adaptacja tutorialu na Cień Czarnobyla do Zewu Prypeci.

     

    POTRZEBNE PLIKI:

    Spoiler
    • gamedata\configs\creatures\game_relations.ltx
    • gamedata\configs\text\rus\ lub gamedata\configs\text\pol\

     

    ZMIANY W PLIKACH:

    Spoiler

    1. GAME_RELATIONS.LTX:

    Spoiler

    Szukamy:

    ;rzeczywisty podział na grupy reputacji w skalach
    rating = novice, 300, experienced, 600, veteran, 900, master

    zmieniamy na:

    rating = novice, 300, experienced, 600, veteran, 900, master, 1200, legend

     

    Szukamy:

    ;oceny, reputacje w interfejsie
    rating_names = novice, 30, experienced, 60, veteran, 90, master

    zmieniamy na:

    rating_names = novice, 30, experienced, 60, veteran, 90, master, 120, legend

     

    Szukamy:

    [rank_relations]
    ; novice, experienced, veteran, master
    ;================================================================
    novice = 0, 0, 0, 0
    experienced = 0, 0, 0, 0
    veteran = 0, 0, 0, 0
    master = 0, 0, 0, 0

    zmieniamy na:

    [rank_relations]
    ; novice, experienced, veteran, master, legend
    ;================================================================
    novice = 0, 0, 0, 0, 0
    experienced = 0, 0, 0, 0, 0
    veteran = 0, 0, 0, 0, 0
    master = 0, 0, 0, 0, 0
    legend = 0, 0, 0, 0, 0

     

    Szukamy:

    ;punkty rankingowe otrzymane za zabicie postaci
    ;o określonej randze
    [rank_kill_points]
    novice = 0
    experienced = 0
    veteran = 0
    master = 0

    zmieniamy na:

    [rank_kill_points]
    novice = 0
    experienced = 0
    veteran = 0
    master = 0
    legend = 0

     

     

    2. DOWOLNY PLIK W GAMEDATA\CONFIGS\TEXT\ RUS LUB POL\:

    Spoiler

    Dodajemy do dowolnego pliku:

    <string id="legend">
    <text>Legenda Zony</text>
    </string>

     

    Można teraz dopisywać dowolnej postaci w linijce <rank>...</rank> w gamedata\configs\gameplay\...

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1579-cop-novyy-rang-legenda/

  4. NAZWA: Świecenie artefaktów
    AUTOR: AMK + dodatki od Nikitos817

     

    Aby artefakty świeciły jaśniej, trzeba zrobić następujące manipulacje. Potrzebny jest plik artefacts.ltx, który znajduje się w gamedata\config\misc\.

     

    ZMIANY W PLIKU ARTEFACTS.LTX:

    Spoiler

    Plik znajduje się w gamedata\config\misc\artefacts.ltx.

    Szukamy artefaktu i zmieniamy parametry (jeśli nie, to dodajemy).

    ;podświetlenie artefaktu
    lights_enabled = true(false) (włączono(wyłączono))
    trail_light_color = х, х, х (R,G,B.)
    trail_light_range = х (promień świecenia)

    Krótkie wyjaśnienie o co chodzi:
    1. trail_light_color = x, x, x (R, G, B.) to kolor. RGB to Red Green Blue (czerwony, zielony, niebieski). Maksymalna wartość to 1.0.
    Jeśli trail_light_color = 1.0, 0.0, 0.0, artefakt będzie świecił jasnoczerwonym światłem.
    2. trail_light_range = x - promień świecenia. Maksymalny promień wynosi około 9.9 (9 metrów, 99 centymetrów).

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1197-delaem-svechenie-u-artefaktov/

    • Ważne 1
  5. NAZWA: Jak zrobić samorozpakowywującą się rzecz?
    AUTOR: timyrzazaza

     

    LISTA PLIKÓW DO EDYCJI:

    Spoiler

    Pliki, które utworzymy:

    • use_item.script

    SCRIPTS:

    • bind_stalker.script

     

    ZMIANY W PLIKACH:

    Spoiler

    1. USE_ITEM.SCRIPT:

    Spoiler

    Tworzymy nowy plik o nazwie use_item.script. Dopisujemy do niego to co chcemy, to co poniżej:

    function medkit(obj)
        if obj ~= nil then
            if obj:section() == "medkit" then
            alife():create("promedol",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
            alife():create("taren",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
            alife():create("iod",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
            alife():create("promedol",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
            end
        end
    end

     

     

    2. BIND_STALKER.SCRIPT:

    Spoiler

    Dopisujemy do funkcji actor_binder:on_item_drop (obj) :

            use_item.medkit(obj)

     

     

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/4415-kak-sdelat-raspakovyvayushtiysya-vesht/

  6. Przed tobą - metodyka pisania fabuły gry. Prosta i liniowa sekwencja działań, których realizacja pozwoli uzyskać działającą fabułę dla gry. Nie jest to genialne arcydzieło, ale materiał fabularny, pozbawiony najbardziej podstawowych błędów i niedociągnięć, który w pełni spełnia stawiane mu wymagania.

    Praca z tą metodyką nie wymaga specjalnego doświadczenia, umiejętności, wiedzy. Została stworzona specjalnie z myślą, że będzie używana przez osobę, która nigdy wcześniej nie pracowała jako scenopisarz - programista, projektant, grafik czy manager.

    Aby po prostu zapoznać się z metodyką, przeczytaj krótką wersję. Pojawia się zaraz po tej części wprowadzającej. Dla jasności poniżej znajduje się schemat blokowy, który systematycznie przedstawia wszystkie kroki metodyki.

    Już w trakcie pracy nad tą metodyką, szczegółowy opis każdego kroku może Ci się przydać. Pojawia się zaraz po schemacie blokowym. W przypadku jakichkolwiek zakłopotań, polecane jest zapoznanie się z podanymi tam wyjaśnieniami i ilustrującymi przykładami.

    Za każdym razem, gdy masz ochotę pominąć lub nie ukończyć któregoś z kroków metodyki, możesz sobie na to pozwolić. Żadna metodyka nie może zastąpić twojej osobowości, duszy, jeśli chcesz, którąś manifestować w tym fabularnym materiale. Pamiętaj tylko, że ta metodyka pojawiła się po to, aby pomóc uniknąć wielu systematycznych błędów i sądząc po recenzjach, z powodzeniem poradziła sobie z tym zadaniem.

    Mam nadzieję, że Tobie też się przyda.

     

    SCHEMAT BLOKOWY:

    Spoiler

    blok.png

     

    KRÓTKI OPIS METODYKI:

    Spoiler

    KROK 1. ZBIERAMY INFORMACJĘ DLA FABUŁY:

    Spoiler

    Przejście pierwszego kroku metodyki jest ściśle związane z danymi wejściowymi (gatunek gry, styl literacki i artystyczny, docelowa społeczność, itp.) i składa się z trzech kroków:

    1. Badanie danych wejściowych;
    2. Identyfikacja typowych cech tych danych;
    3. Utworzenie własnej listę powiązań, związanych z danymi wejściowymi.

    W wyniku pomyślnego wykonania tych trzech czynności otrzymasz zestaw elementów do budowy swojej fabuły. Zidentyfikowane cechy danych wejściowych przez was, jak również osobiste powiązania z nimi, są zebrane w jedną listę i tworzą ten zestaw.

    Aby zidentyfikować typowe cechy danych wejściowych, polegaj zarówno na własnej wiedzy, jak i na tym, co można łatwo i pożytecznie znaleźć w sieci:

    Jeśli po ukończeniu tego kroku metodyki otrzymałeś pewną liczbę elementów (słów, fraz, zdań), a każdy element jest typową cechą danych wejściowych lub Twoim osobistym skojarzeniem z nimi, to wszystko zrobiłeś dobrze.

    Zdecydowanie zalecane jest przejrzenie listy kontrolnej dla kroku 1 i szczegółowego przykładu kroku 1, aby dokładnie się sprawdzić.

     

    KROK 2. FORMUŁUJEMY/OPISUJEMY FABULARNY ŁAŃCUCH:

    Spoiler

    Najważniejszą rzeczą, jaką uzyskasz, wykonując drugi krok, jest struktura Twojej historii.

    Jeśli masz kluczowy zamysł fabuły pośród danych wejściowych, użyj go. Jeśli nie, musisz sam stworzyć ten mały tekst.

    Po co to jest? Tak, abyś miał pewność, że w 1 zdaniu zmieścisz kwintesencję swojej fabuły. Jeśli nie potrafisz ułożyć takiego zdania, to znaczy, że nadal nie wiesz/nie rozumiesz, o czym będzie Twoja fabuła1), a to z kolei oznacza, że nie jesteś jeszcze gotowy do napisania pełnej fabuły.

    Jeśli wśród danych wejściowych jest kluczowy pomysł, wykorzystaj ten atut – stwórz na jego podstawie strukturę całej fabuły, bo już wiesz, jak to się wszystko zaczęło, co się w ogóle dzieje i kto jest tu głównym bohaterem.

    Jeśli nie ma kluczowego pomysłu, jest to również swego rodzaju zaleta: masz prawo do stworzenia fabuły całkowicie niezależnie. Użyj elementów, które otrzymałeś na koniec kroku 1.

    Jeśli czujesz się teraz trochę zdezorientowany, możesz wrócić do kroku 1 i przejść przez to jeszcze raz. Dlatego, że dalsza praca dotyczy materiału, który tworzysz, przechodząc przez krok 1.

    Masz do dyspozycji zestaw elementów. Mogło ich być 10, 12, 27, 44, 18 i tak dalej. Wszystko zależy od tego, ile typowych cech i skojarzeń z danymi wejściowymi zidentyfikowałeś i wypisałeś. Gigantyczna fabuła gry z ogromną ilością zróżnicowanej zawartości na wiele dziesiątek godzin rozgrywki będzie wymagała więcej elementów. Mała działka na mały projekt, odpowiednio - mniej.

    Przeczytaj ponownie swoje elementy. Pogrupuj je, połącz je, wypróbuj różnych kombinacji. Te kombinacje popchną cię do części twojej przyszłej fabuły, zobaczysz i poczujesz wydarzenia, które będą miały miejsce w twojej fabule. Ale nadal nie widzisz całej historii. Kontynuuj układanie, zbieranie elementów w różne grupy, aż będziesz miał w głowie tyle wydarzeń, że będziesz gotów położyć temu kres i powiedzieć: "Teraz wiem, o co chodzi w mojej fabule. Co się w nim dzieje, kto jest tu głównym bohaterem".

    Więc masz kluczowy pomysł. Pamiętaj, aby to zapisać.

    W tym momencie masz już złożone elementy, masz część wydarzeń własnej fabuły, masz ogólną wizję fabuły. Została wykonana ogromna praca.

    Teraz, w zależności od wielu czynników, z których najważniejszym jest rozmiar przyszłej gry (potrzeba 1 godziny gry, 8 godzin, 24 godzin?), musisz stworzyć strukturę swojej historii.

    Im większa ma być fabuła, tym z większej liczby części będzie się składać. W przypadku krótkiej fabuły małej gry odpowiednia jest prosta struktura - jedna lub dwie części na otwarcie/zalążek, główną akcję, punkt kulminacyjny i rozwiązanie akcji. Ta opcja sprawdza się np. w przypadku gry NES Adventures in the Magic Kingdom.

    Projekt taki jak Warcraft III: Reign of Chaos wymagałby bardziej złożonej kompozycji - tutaj historia jest z kilkoma dużymi głównymi gałęziami akcji - musisz dokładnie przemyśleć, ile oddzielnych części poświęcisz każdemu segmentowi struktury. A łączna liczba tych części może być bardzo duża. Np. 2 części na ekspozycję, 1 na otwarcie/zalążek, 18 na główną akcję, itd., więc suma wynosi 20, a nawet więcej.

    Postępując zgodnie z powyższą logiką, podziel strukturę historii na określoną liczbę części. W kroku 3 spróbuj trzymać się tej struktury.

    W przypadku autotestu sprawdź listę kontrolną/checklistę dla kroku 2 i szczegółowy przykład kroku 2.

     

    KROK 3. SZCZEGÓŁOWO OPISUJEMY FABUŁĘ:

    Spoiler

    Na początku kroku 3 musisz mieć do dyspozycji:

    • Zestaw elementów wybranych w kroku 1;
    • Kluczowy zamysł i struktura twojej historii (wynik kroku 2).

    Istnieje również szansa, że niektóre fragmenty twojej fabuły zostały już rozpisane. Jeśli tak, świetnie. Jeśli nie, to bardzo dobrze, ponieważ planowanie, uszczegółowianie wszystkich części struktury fabuły to praca dla kroku 3.

    Gotowa fabuła jest tym, co otrzymujesz po ukończeniu kroku 3. W rzeczywistości prawie cała praca została już wykonana do kroku 3.

    Na tym etapie prawdopodobnie znasz już odpowiedzi na następujące pytania:

    • Z ilu części składa się twoja fabuła?
    • Ile części poświęcono każdemu elementowi struktury fabuły? (ile poświęcono otwarciu, głównej akcji, kulminacji, rozwiązaniu akcji?)
    • O czym jest twoja fabuła? (to właśnie znajduje odzwierciedlenie w kluczowym zamyśle)
    • A jednym z najważniejszych pytań jest to, które kombinacje elementów uzyskane w kroku 1 odpowiadają poszczególnym częściom fabuły?

    Kiedy łączysz elementy w kroku 2, aby stworzyć kluczowy zamysł i/lub zdecydować o ogólnej strukturze fabuły, możesz od razu zapisywać niektóre części swojej fabuły (być może tylko w myślach). Teraz nadszedł czas, aby zrobić to celowo i koniecznie to zapisać.

    Te części opowieści, które przyjdą ci do głowy, gdy połączysz elementy, prawdopodobnie będą pasować do części struktury opowieści, którą ustaliłeś pod koniec kroku 2.

    Dopisz je.

    Sprawdź, czy masz części fabuły, dla których nie masz kombinacji elementów. Jeśli nadal nie wiesz, co dokładnie chcesz napisać w takich częściach fabuły, spróbuj połączyć elementy, które logicznie pasują do tych części. To najprawdopodobniej doprowadzi cię do właściwej treści historii i wypełnisz te luki.

    Jeśli jednak zrozumiesz, że nie masz odpowiednich zestawów elementów do wypełnienia niektórych części fabuły i jednocześnie nie potrzebujesz tych zestawów (już widzisz i wiesz, jak chcesz napisać te części fabuły), wtedy nie ma potrzeby wykonywania dodatkowej pracy. Po prostu zapisz te części.

    Zobacz, z ilu części składa się struktura twojej fabuły. Zobacz, ile części napisałeś. Jeśli - wszystkie części (jednocześnie nie miałeś chęci/potrzeby rozszerzania lub skracania struktury fabuły), to pozostaje ostatni i być może najprzyjemniejszy krok - uważne przeczytanie fabuły i uczciwa ocena co do jakości wykonania.

    Jeśli w trakcie pracy z metodyką naprawdę próbowałeś, najprawdopodobniej masz dobrą, logiczną fabułę, która w pełni odpowiada danym wejściowym.

    Teraz najważniejsze jest wykorzenienie wszelkich logicznych niespójności (które prawdopodobnie zauważysz czytając otrzymaną fabułę od początku do końca) i upewnienie się, że wykres dokładnie pasuje do danych wejściowych. Zwłaszcza gatunkowi gry2), stylowi literackiemu i artystycznym, tematyce i docelowej społeczności.

    Pomyślnym wynikiem wykonania tej procedury jest działająca fabuła gry napisana przez ciebie.

    Sprawdź się ponownie, patrząc na listę kontrolną/checklistę dla kroku 3 i szczegółowy przykład kroku 3.

     

     

    SZCZEGÓŁOWY OPIS METODYKI:

    Spoiler

    Metodyka składa się z kilku kroków. Do wykonania każdego z nich potrzebne będą określone dane wejściowe, i aby krok można było uznać za zakończony, należy wykonać wszystkie prace wymienione na liście kontrolnej/checkliście3) tego kroku.

     

    KROK 1. ZBIERAMY INFORMACJĘ DLA FABUŁY:

    Spoiler

    Aby stworzyć fabułę, z pewnością potrzebujesz danych wejściowych, na których możesz się oprzeć podczas jej rozwijania. Dane te mogą opisywać różne aspekty przyszłej fabuły, poczynając od charakterystyki głównego bohatera i kończąc na podsumowaniu.

    Ale są aspekty, bez których tworzenie fabuły gry w ogóle nie ma sensu. Obejmują one gatunek gry4) (platformówka, zadanie tekstowe, itp.),
    styl literacki i artystyczny5) (komedia, detektywistyczny itp.),
    grupa docelowa (18+, kobiety powyżej pięćdziesiątego roku życia, itp.)
    i ogólny temat/sceneria6) (apokalipsa zombie, bitwy w kosmosie, itp.).

    Każdy z nich ma swoje unikalne, charakterystyczne cechy, które odróżniają go od innych w tej kategorii.

    Przykład:

    • typowymi cechami literackiego i artystycznego stylu "fantasy" będą: wykorzystywanie motywów mitologicznych lub baśniowych; fikcyjny świat zbliżony do prawdziwego średniowiecza; nadprzyrodzone zjawiska lub istoty, itp.
    • typowymi cechami gatunku gier platformowych byłyby: ruchome platformy; pokonywanie przeszkód za pomocą skoków, itp.

    Ważne jest, aby przy opracowywaniu fabuły, żadna jej część nie zaprzeczała takim typowym cechom. Aby się tego dowiedzieć, możesz skorzystać z zewnętrznych źródeł:

    Nawet mając dane wejściowe i ich rozszyfrowywanie w postaci obszernej listy typowych cech, nie możemy twierdzić, że zebraliśmy wszystkie niezbędne informacje o przyszłej fabule.

    Ważnym uzupełnieniem zestawienia będą własne skojarzenia autora związane z wejściowymi informacjami. To właśnie indywidualne skojarzenia sprawiają, że fabuła jest wyjątkowa, niepowtarzalna, autorska.

    Przykład:

    • Załóżmy, że informacja o ogólnym temacie fabuły zawarta jest w słowie: "Włochy". Różni autorzy będą mieli zupełnie inny zestaw skojarzeń związanych z Włochami. Dla jednego mogą to być pizze i makarony, dla innego Rzym, dla trzeciego fabryki obuwia i wyrobów skórzanych, a dla czwartego Pinokio.

    Lista skojarzeń to potężne narzędzie do tworzenia fabuły. Ale używając go, pamiętaj, że skojarzenia nie powinny kolidować z wybranym gatunkiem; literackim i artystycznym stylem fabuły ani ograniczeniami wiekowymi docelowej publiczności. Tak więc w przypadku poważnej strzelanki z perspektywy pierwszej osoby skojarzenie związane z latającymi różowymi kucykami raczej nie pasuje.

    Tak więc, pracując z wejściowymi informacjami, otrzymasz całą listę typowych cech i własnych skojarzeń. Już teraz możesz pokusić się o podzielenie ich na dwie grupy - te, które będą pojawiać się w fabule niemal stale, oraz te, które będą pojawiać się sporadycznie. Do grupy stałej zaliczamy te, które składają się na otoczenie i ogólny klimat przyszłej fabuły, do grupy epizodycznej - te, z których można ułożyć ciąg zdarzeń fabuły (same przypadki i incydenty, które będą miały miejsce w jej trakcie).

    Przykład dla detektywa-łamigłówki typu zamkniętego:

    • stałe: stara angielska rezydencja, śledztwo w sprawie morderstwa, tajemnicze napisy na ścianach (oznacza to, że przez całą fabułę akcja toczyć się będzie wyłącznie w obrębie murów rezydencji, wydarzenia toczyć się będą wokół śledztwa w sprawie morderstwa, a mury pokoje będą pokryte tajemniczymi napisami - czyli napis pojawi się nie raz i nie kilka razy w trakcie fabuły, ale będzie jej stałym elementem).
    • epizodyczny: portier, kucharz, eliksiry i trucizny (oznacza to, że portier i kucharz nie pojawią się we wszystkich częściach fabuły, ale będą z nimi związane pewne osobne wydarzenia – np. kucharz może włożyć truciznę do jedzenie portierowi i tym samym pozbyć się świadka).

    Po utworzeniu tabeli cech i skojarzeń oraz podziale na części stałe i epizodyczne pierwszy krok metodyki można uznać za zakończony.

     

    Checklista kroku 1:

    Spoiler
    1. Od klienta otrzymano maksymalne wymagania dotyczące przyszłej fabuły.
    2. Wśród wymagań dotyczących przyszłej historii znajdują się informacje o gatunku gry, stylu literackim i artystycznym, grupie docelowej oraz ogólnym temacie przyszłej fabuły.
    3. Typowe cechy i właściwości można znaleźć dla każdego komponentu w informacjach wejściowych.
    4. Utworzono listę powiązań z danymi wejściowymi.
    5. Ani jedno skojarzenie nie jest sprzeczne z wcześniej zidentyfikowanymi typowymi cechami.
    6. Ogólny wykaz cech typowych i skojarzeń własnych dzieli się na dwie grupy: stałe i epizodyczne.

     

     

    KROK 2. FORMUŁUJEMY/OPISUJEMY FABULARNY ŁAŃCUCH:

    Spoiler

    Celem drugiego kroku metodyki jest utworzenie fabularnego łańcucha, czyli z grubsza zrozumienie i ustalenie ogólnej sekwencji wydarzeń w historii. Utworzona wcześniej tabela cech i skojarzeń, zamysł7) fabuły, a także elementarna wiedza z zakresu kompozycji fabuły pomogą ci w tym: zrozumieniu, czym jest fabuła, kulminacja, rozwiązanie akcji, itp. Jeśli jesteś słabo zorientowany w elementach kompozycji fabuły, odwołaj się do źródeł zewnętrznych.

    Kluczowy zamysł fabuły lub jej krótki opis może już być zawarty we wcześniej otrzymanych informacjach wejściowych (lub możesz sam go wymyślić w trakcie pracy nad cechami i skojarzeniami). Jeśli tak, to tworzenie fabularnego łańcucha będzie łatwiejsze. W tym celu warto wziąć tę kluczową ideę za podstawę i rozbudować, pogłębić jej treść, uzupełnić o charakterystykę z części stałej tablicy oraz wydarzenia z jej części epizodycznej.

    Jeśli w rezultacie udało Ci się stworzyć wspólny łańcuch powiązanych ze sobą zdarzeń, uznaj, że połowa pracy drugiego kroku została wykonana.

    Jednak drugą, nie mniej ważną połową jest stworzenie szkieletu, struktury tego łańcucha zdarzeń.

    Po pierwsze, powinieneś jasno określić, z ilu i jakiego rodzaju segmentów będzie się składać twoja fabuła. Aby to zrozumieć, musisz zrozumieć rozmiar i format projektu, dla którego tworzysz fabułę. Dla porównania porównaj na przykład fabułę klasycznej gry Darkwing Duck (tylko 7 lokacji, bardzo mały zestaw postaci i wydarzeń) oraz fabułę Dragon Age: Inkwizycja (ogromny świat, wiele różnych NPC i zadań).

    Odtworzenie struktury fabuły Darkwing Duck nie jest trudne. Mówiąc wprost, jest to prymitywna fabuła. Zalążek składa się tylko z jednego bloku, który gracz dostrzega w początkowej cut-scenie. Dalej - 7 lokacji - to główna akcja, do której potrzebnych jest odpowiednio 7 różnych bloków. I jeszcze jeden blok - dla rozwiązania akcji, zakończenia fabuły, które ponownie serwuje graczowi jedna cut-scenka, ostatnia.

    Odtworzenie fabuły Dragon Age: Inkwizycja w ten sposób jest znacznie trudniejszym zadaniem. I będzie to wymagało napisania dużej ilości tekstu. Dość powiedzieć, że kompozycję trzeba będzie również podzielić na większą liczbę segmentów, a do wypełnienia każdego segmentu potrzeba będzie więcej bloków semantycznych9). Ich łączna liczba dla projektu tej klasy może osiągnąć 50 lub więcej.

    Opiera się więc na zrozumieniu specyfiki projektu, do którego piszesz fabułę, biorąc pod uwagę przewidywaną liczbę godzin rozgrywki, gatunek gry i tym podobne czynniki, oraz musisz popracować nad strukturą fabuły.

    Czy wystarczy tylko jeden blok semantyczny, aby odsłonięcia zalążka, jak przystało na Darkwing Duck? A może początkowy odcinek Twojego projektu będzie podobny do tego z Siphon Filter (duża ilość wydarzeń rozgrywających się jednocześnie w lokacji, kilka frakcji na raz w tej samej lokacji, wiele postaci o różnym znaczeniu dla całej gry na samym początku, itp.)? I dlatego na pewno konieczne jest przydzielenie większej liczby bloków, może nawet 5-6?

    Nawiasem mówiąc, gdyby nagle okazało się, że nie wiesz, jak długa ma być fabuła, nie powinieneś machać ręką i marnować swoich zasobów twórczych na wielotomową książkę. Stwórz jak najkrótszą historię – jeśli pomysł okaże się wartościowy, to w przyszłości będzie można go rozbudować i pogłębić.

    Mając to wszystko na uwadze, podziel swój łańcuch opowieści na osobne bloki semantyczne i wskaż, który z nich przypiszesz ekspozycji, a który początkowi, rozwinięciu akcji, kulminacji, itp.

    Jeśli w danych wejściowych nie ma kluczowej idei i nadal masz o niej niewielkie pojęcie, możesz trochę inaczej popracować nad fabułą.

    Wystarczy spojrzeć na utworzoną wcześniej tabelę i wyobrazić sobie, jak poszczególne cechy i skojarzenia można ze sobą łączyć. Jakie ciekawe zdarzenia mogą wynikać z grup cech, jak można je ze sobą połączyć.

    Przykład detektywa-łamigłówki typu zamkniętego:

    • takie cechy i powiązania, jak np. portier, morderstwo, trucizna, szafa, kucharz i klucz, można łączyć na bardzo różne sposoby:
    • 1. (portier, morderstwo, trucizna) - portier został otruty; (szafa, kucharz, klucz, trucizna) - klucz do szafki, w której przechowywana była trucizna, znaleziono u kucharza.
    • 2. (portier, morderstwo, kucharz) - portier zabił kucharza; (szafka, klucz, trucizna, tragarz) - portier otworzył kluczem szafę, w której przechowywana była trucizna i otruł się.
    • 3. (portier, kucharz, morderstwo) - kucharz zabił portiera; (szafka, klucz, trucizna, kucharz, portier) - kucharz otworzył kluczem szafę, wyjął truciznę i włożył do rąk portiera, aby wszyscy myśleli, że to samobójstwo.
    • 4. (portier, szafa, kucharz, morderstwo) - portier znalazł w szafie zamordowanego kucharza; (trucizna, klucz do szafy, portier, kucharz) - portier wziął znalezioną truciznę w ręce kucharza i zamknął go w szafie, nie mówiąc nikomu o tym, co się stało
    • itp.

    Mieszaj, grupuj, zamieniaj cechy i powiązania. Symuluj różne sekwencje zdarzeń i wybieraj najciekawsze. A kiedy wybierzesz najbardziej udany, Twoim zdaniem, łańcuch fabularny, podziel go na bloki semantyczne i określ, do której części kompozycji fabuły (początek, punkt kulminacyjny, postpozycja itp.) będzie się odnosić ten lub inny blok.

    Następnie spróbuj w jak najkrótszy sposób (jedno lub dwa zdania) zapisać myśl przewodnią swojej fabuły, która odpowie na trzy główne pytania: kim jest główny bohater, do czego dąży i co mu przeszkadza.

    Kiedy masz kluczową zamysł fabuły, kiedy sam łańcuch fabularny jest tworzony z listy cech i skojarzeń, kiedy wydarzenia łańcucha są rozłożone na kompozycję fabuły (w przybliżeniu jasne jest, co się stanie w etapie fabuły, punkcie kulminacyjnym, itp.), możemy uznać drugi krok za zakończony.

    Ważne! Jeżeli zamierzasz stworzyć rozgałęzioną fabułę z różnymi zakończeniami lub w inny sposób odbiegającą od typowego modelu liniowego, powinieneś stworzyć zrozumiały schemat graficzny takiej fabuły.

    0022.jpg

     

    Checklista kroku 2:

    Spoiler

    Ważne! Kolejność prac przy realizacji drugiego kroku może różnić się od poniższej.

    1. Cechy i skojarzenia są pogrupowane w bloki semantyczne;
    2. Bloki semantyczne są połączone w spójną fabułę.
    3. Wydarzenia w fabule nie są sprzeczne z danymi wejściowymi.
    4. Wydarzenia fabularnego łańcucha nie są sprzeczne z typowymi cechami i skojarzeniami, znajdującymi się w grupie stałych.
    5. Bloki semantyczne są rozmieszczone w częściach fabularnej kompozycji.
    6. Istotę każdego bloku semantycznego można ująć w jednym zdaniu.
    7. Sekwencja bloków semantycznych jest logicznie uzasadniona - związek między nimi jest wyraźnie prześledzony.
    8. Kluczowa idea fabuły jest zapisana w dwóch lub trzech zdaniach.
    9. Schemat graficzny został stworzony dla nieliniowej fabuły.

     

     

    KROK 3. SZCZEGÓŁOWO OPISUJEMY FABUŁĘ:

    Spoiler

    W ramach tego kroku należy odsłonić szczegółową zawartość wcześniej przygotowanego fabularnego łańcucha, każdego z jego bloków semantycznych – tak naprawdę napisać opowieść w takiej formie, w jakiej może zostać odebrana przez zewnętrznego słuchacza/czytelnika.

    W razie potrzeby zawsze możesz wrócić do poprzednich kroków metodyki - dopracować lub zmienić fabularny łańcuch, dodać nowe skojarzenia do ogólnej listy, a następnie ponownie wrócić do szczegółowego opisu.

    Tworząc historię, należy pamiętać, że tworzy się ją na potrzeby gry, co oznacza, że musi być zgodna z określonymi zasadami dyktowanymi przez branżę gier. Dlatego w fabule gry wysoce niepożądane jest stosowanie następujących technik:

    • To było na próżno!

    Przykład: gracz prowadził swoją postać przez długi czas po odgałęzieniu głównej ścieżki, pokonując wiele przeszkód, aż na końcu znalazł... ślepy zaułek bez żadnej nagrody za swoje wysiłki.

    Stosowanie takiej techniki daje graczowi poczucie bezsensowności wszelkich jego działań i prowadzi do frustracji. Dobrym przykładem jest klasyczna "księżniczka z innego zamku".

    • Przegrałeś!

    Przykład: Gra kończy się cut-scenką z zakończeniem fabularnym, w którym główny bohater zostaje niespodziewanie zabity.

    Jeśli gra zakończy się przegraną gracza bez możliwości wpłynięcia na wynik, gracz najprawdopodobniej nie powtórzy gry i będzie o niej mówił negatywnie. Dobrym przykładem jest zakończenie Mass Effect III.

    • To wcale tak nie jest!

    Przykład: pilnie strzeżony wychowanek przez całą grę nagle okazuje się posłańcem diabła i zabija całą rodzinę bohatera.

    Nie wolno niszczyć pełnego obrazu postrzegania świata gry: szablon gracza nie powinien zostać rozdarty.

    • Iluzja wyboru.

    Przykład: w trakcie gry gracz ma do wyboru opcje działania, wydaje się, że rozwój fabuły zależy od podjętej przez niego decyzji. Kiedy próbujesz zagrać ponownie, aby wypróbować inne scenariusze, okazuje się, że tak naprawdę wybór gracza jest wyimaginowany i na nic nie wpływa.

    Jeśli fabuła nie pozwala graczowi na dokonanie sensownego wyboru, stworzenie iluzji takiego wyboru odbywa się wyłącznie na własny strach i ryzyko.

    Należy również pamiętać, że trzeba stworzyć historię, a nie scenariusz czy opis mechaniki gry10) i samej rozgrywki.

    Przykład:

    - nie wolno: "...pokonując przeszkody skacząc z platformy na platformę, a także wykorzystując umiejętność wspinania się po pnączach, rzucili się na niego”;

    - można: "...narażając się na upadek w przepaść, rzucili się na niego";

    - można: "Po przeszukaniu całego jachtu pasażerowie nie znaleźli członków załogi i zauważyli, że wszystkie łodzie zniknęły, a silnik w maszynowni był zepsuty";

    - nie wolno: "Pokrywa pobliskiego włazu kanalizacyjnego szybko się odsłania, Pastor wyskakuje z cuchnącej otchłani z granatem w dłoni, Raiser krzyczy: "Nie strzelaj!". Pastor chwyta go od tyłu za szyję, rzuca granat w strzelców z dystansu i przykłada pistolet do głowy przywódcy: "Nie strzelać!"

    Fabuła nie powinna zawierać zbędnych szczegółów. Możesz to sprawdzić, próbując przedstawić każdy semantyczny blok fabuły w jednym prostym zdaniu. Jeśli to nie zadziała, to jest w nim dużo "wody" i trzeba to poprawić lub podzielić na dwa lub więcej bloków.

    Idealnie fabuła powinna dawać wyobrażenie o ogólnej sekwencji wydarzeń i ich przyczynach, w spójny i zrozumiały sposób.

     

    Checklista dla kroku 3:

    Spoiler
    1. Każdy blok semantyczny jest szczegółowo opisany.
    2. Ogólny opis fabuły nie przeczy początkowym wymaganiom.
    3. W fabule nie ma błędów logicznych:
      • wszystkie cechy i skojarzenia są używane w sposób rozsądny;
      • wszystkie bloki semantyczne są ze sobą logicznie powiązane i mają związek przyczynowy-skutkowy;
      • bloki semantyczne nie są ze sobą sprzeczne i mają cel, który nie jest sprzeczny z ogólnym celem narracji11);
      • każde zdarzenie ma swój powód, który jest zrozumiały i ujawniony w fabule.
    4. W opisie fabuły zachowana jest jedność skali przedstawienia – fabuła nie przechodzi w scenariusz (nadmierne uszczegółowienie) ani w opis jego kluczowej myśli (niewystarczające szczegóły).
    5. Do opisu fabuły dodano jej wizualny schemat graficzny.
    6. W fabule nie ma opisu mechanik gry
    7. Główny cel, który motywuje postać do wykonania akcji fabularnych, jest zachowany i śledzony w całej historii;
    8. Istotę, główną ideę każdego bloku semantycznego można przedstawić w jednym zdaniu.
    9. W fabule nie ma zakazanych sztuczek lub ich użycie jest uzasadnione.

     

     

    ZAKOŃCZENIE:

    Spoiler

    Jeśli w trakcie czytania tego dokumentu stworzyłeś równolegle własną fabułę, to najprawdopodobniej masz ją już gotową.

    Z pewnością można to teraz potraktować jako podstawę do jakiejś gry. Być może stanie się to dopiero po serii ulepszeń i uzupełnień, a może pójdzie do szuflady, by czekać na swoją kolej.

    Jego los nie został jeszcze przesądzony i najprawdopodobniej nie ty, ale klient ma o tym zadecydować. W każdym razie do zaimplementowania fabuły w grze jest jeszcze długa droga: rozwinięcie postaci głównego bohatera i antagonisty, opisanie postaci drugoplanowych, praca nad jednością treści i formy – określenie sposobów powiązania fabuły do rozgrywki, określając elementy narracyjne12), za pomocą których będzie realizowana fabuła, i wiele, wiele więcej.

    Ta praca jest nie mniej ważna niż samo opracowanie fabuły – od tego w dużej mierze zależy powodzenie jej realizacji. I dlatego należy to opisać nie tutaj w pigułce, ale szczegółowo w osobnej metodyce, której stworzenie dopiero nadejdzie.

     

     

    SZCZEGÓŁOWY PRZYKŁAD TWORZENIA FABUŁY:

    Spoiler

    DANE WEJŚCIOWE:

    Spoiler

    1) z obowiązkowo podanych przez zleceniodawcę:

    • styl literacki i artystyczny - fantastyka społeczna;
    • gatunek gry - symulator przetrwania;
    • docelowa społeczność — 18–24 lata;
    • settingowa informacja lub ogólny tematyka gry – nasze czasy, typowe poradzieckie milionowe miasto, jedno z jego dzielnic mieszkaniowych; próba oddania emocjonalnego tła okolicy.

    2) z opcjonalnie/nieobowiązkowo dostarczonych przez zleceniodawcę:

    • cechy postaci - nie jest stworzeniem humanoidalnym.

     

    KROK 1. ZBIERAMY INFORMACJĘ DLA FABUŁY:

    Spoiler

    FANTASTYKA SPOŁECZNO-FILOZOFICZNA:

    Spoiler

    Typowe charakterystyki:

    • założenie fantastyczne (jako formalny symbol przynależności do fantastyki naukowej);
    • wpływ tego założenia na ludzkie społeczeństwo i/lub jednostkę;
    • wydarzenia i zjawiska mają nie mistyczne, a naukowe wyjaśnienie;
    • przypadkowy lub celowy eksperyment społeczny;
    • opis relacji między ludźmi w społeczeństwie;
    • problematyka globalna i humanistyczna;
    • ostrzeżenie przed niebezpiecznymi tendencjami społecznymi.

    Powiązania:

    • kontakt z nieludzkim umysłem;
    • człowiek jako nieświadomy agresor;
    • ksenofobia;
    • nie ma jasnego i jednoznacznego sposobu rozwiązania problemu.

     

    SYMULATOR PRZETRWANIA:

    Spoiler

    Typowe charakterystyki:

    • bohater nie może lub może atakować tylko w ograniczonym zakresie;
    • wokół jest wielu niebezpiecznych wrogów;
    • przetrwanie postaci w odosobnionych warunkach/w warunkach ograniczenia;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu13);
    • głównym sposobem na przetrwanie jest unikanie.

    Powiązania:

    • wprowadzenie postaci w nietypowe dla niego warunki;
    • poszukiwanie bezpiecznej drogi;
    • widok z boku - porady od współtowarzyszy za pośrednictwem nadajnika;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu.

     

    TYPOWA DZIELNICA MIESZKANIOWA WSPÓŁCZESNEGO MILIONOWEGO MIASTA:

    Spoiler

    Typowe charakterystyki:

    • mieszkańcy są zmuszeni codziennie dojeżdżać do pracy do centrum biznesowego lub przemysłowej części miasta i wracać do domu na nocleg;
    • oddalenie od centrum miasta, brak obiektów o znaczeniu ogólnomiejskim;
    • budynek szablonowy z typowymi wielokondygnacyjnymi domami panelowymi;
    • minimalna infrastruktura do utrzymania życia na odpowiednim poziomie (sklepy, szkoły, przedszkola, zakłady opieki zdrowotnej, obiekty rekreacyjne);
    • rozwinięty system transportu publicznego.

    Powiązania:

    • plac zabaw/dziedziniec otoczony "studnią" domów;
    • garaże za domem;
    • miejsce na pojemniki na śmieci, porozrzucane śmieci;
    • całodobowe stragany, kioski;
    • bezdomne psy/koty;
    • "dresy" i pijacy;
    • monotonia emocjonalna, niepokój;
    • połamane ławki.

     

    ANTY-ANTROPOMORFICZNA POSTAĆ:

    Spoiler

    Typowe charakterystyki:

    • nieposiadający cech fizycznych i/lub moralnych typowych dla osoby.

    Powiązania:

    • brak oddzielnych funkcjonalnych części ciała;
    • inne wrażenia dotykowe w kontakcie (na przykład lepkość, zanurzenie);
    • czuje, gdy ktoś się boi, podczas gdy ta postać spowalnia ruch i traci witalność;
    • inne właściwości fizyczne - wchłania pokarm powierzchnią ciała; żywi się wyłącznie naturalną tkaniną, wełną, futrem, sierścią; stopniowo maleje, traci części ciała i traci zdrowie po kontakcie z wodą, jest rozrywana ludzkim krzykiem (części zrastają się);
    • niezrozumiałe dla człowieka mechanizmy lotu i teleportacji, które opierają się na emocjach.

     

    WYNIK KROKU 1: LISTA CECH I POWIĄZAŃ Z PODZIAŁEM NA STAŁE I EPIZODYCZNE:

    Spoiler

    STAŁE:

    Spoiler
    • wydarzenia i zjawiska mają nie mistyczne, a naukowe wyjaśnienie;
    • problematyka globalna i humanistyczna;
    • bohater nie może lub ma ograniczone możliwości ataku;
    • przetrwanie postaci w odosobnionych warunkach/w warunkach ograniczenia;
    • wprowadzenie postaci w nietypowe dla niego warunki;
    • widok z boku - porady od współtowarzyszy za pośrednictwem nadajnika;
    • oddalenie od centrum miasta, brak obiektów o znaczeniu ogólnomiejskim;
    • budynek szablonowy z wielokondygnacyjnymi domami panelowymi;
    • bezdomne, bezpańskie psy/koty;
    • postać nie posiada cech fizycznych i/lub moralnych typowych dla osoby;
    • postać ma różne właściwości fizyczne;
    • przypadkowy lub celowy eksperyment społeczny;
    • ostrzeżenie przed niebezpiecznymi tendencjami społecznymi;
    • minimalna infrastruktura do utrzymania życia na odpowiednim poziomie (sklepy, szkoły, przedszkola, zakłady opieki zdrowotnej, obiekty rekreacyjne);
    • nie ma jasnej i jednoznacznej możliwości rozwiązania problemu;
    • wpływ tego założenia na ludzkie społeczeństwo i/lub jednostkę;

     

    EPIZODYCZNE:

    Spoiler
    • założenie fantastyczne (jako formalny symbol przynależności do fantastyki);
    • opis relacji między ludźmi w społeczeństwie;
    • kontakt z nieludzkim umysłem;
    • człowiek jako nieświadomy agresor;
    • ksenofobia;
    • wokół jest wielu niebezpiecznych wrogów;
    • głównym sposobem na przetrwanie jest unikanie;
    • poszukiwanie bezpiecznej drogi;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • mieszkańcy dzielnicy są zmuszeni codziennie dojeżdżać do pracy do centrum biznesowego lub przemysłowej części miasta i wracać do domu na nocleg;
    • plac zabaw/dziedziniec otoczony "studnią" domów;
    • garaże za domem;
    • kosze na śmieci, porozrzucane śmieci;
    • całodobowe stragany, kioski14);
    • rozwinięty system transportu publicznego;
    • monotonia emocjonalna, niepokój;
    • "dresy" i pijacy;
    • połamane ławki.
    • postać charakteryzuje się brakiem funkcjonalnych części ciała;
    • postać wchłania pokarm powierzchnią ciała;
    • postać żywi się wyłącznie naturalną tkaniną, wełną, futrem, sierścią;
    • postać stopniowo maleje, twardnieje i traci zdrowie po kontakcie z wodą;
    • postać czuje, gdy ktoś się boi, podczas gdy ona sama spowalnia i traci witalność;
    • postać może być rozdarta przez ludzki krzyk (części zrastają się).

     

     

     

    KROK 2. FORMUŁUJEMY/OPISUJEMY FABULARNY ŁAŃCUCH:

    Spoiler

    POWSTANIE KLUCZOWEGO ZAMYSŁU FABUŁY15):

    Spoiler

    Zdezorientowany turysta (przedstawiciel innej cywilizacji) w wyniku awarii technicznej teleportu spada na ziemię do dzielnicy mieszkaniowej postradzieckiego milionowego miasta, gdzie w obliczu przejawów typowego społeczeństwa ludzkiego, zmuszony jest walczyć o swoje życie i szukać sposobów ratunku.

     

    GRUPOWANIE ELEMENTÓW WEDŁUG BLOKÓW SEMANTYCZNYCH16):

    Spoiler

    Połączenie logicznie lub asocjacyjnie powiązanych elementów z listy w bloki semantyczne.

    Blok (obcy na placu zabaw, w piaskownicy)

    • plac zabaw/dziedziniec otoczony wokoło domami;
    • opis relacji między ludźmi w społeczeństwie;
    • kontakt z nieludzkim umysłem;
    • człowiek jako nieświadomy agresor;
    • wokół jest wielu niebezpiecznych wrogów;
    • głównym sposobem na przetrwanie jest unikanie;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • możliwość wykorzystania informacji, które usprawiedliwiają niepoprawne zachowanie;
    • rozrzucone śmieci;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).

    Blok (teleport obcej cywilizacji psuje się w obliczu emocjonalnych impulsów ludzkiej cywilizacji)

    • założenie fantastyczne (jako formalny symbol przynależności do fantastyki naukowej);
    • monotonia emocjonalna, poczucie niepokoju.

    Blok (obcy w śmietnikach)

    • ksenofobia;
    • plac zabaw/dziedziniec otoczony wokoło domami;
    • wokół jest wielu niebezpiecznych wrogów;
    • głównym sposobem na przetrwanie jest unikanie;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • używanie nieprzyzwoitych wyrażeń;
    • wykorzystanie informacji uzasadniających lub usprawiedliwiających używanie przemocy;
    • rozrzucone śmieci;
    • postać wchłania pokarm powierzchnią ciała;
    • bohater czuje, gdy ktoś się boi, podczas gdy on sam zwalnia i traci witalność;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).

    Blok (droga z kałużami po deszczu + samochody)

    • znalezienie bezpiecznej drogi;
    • rozrzucone śmieci;
    • postać stopniowo spowalnia, traci zdrowie i części ciała po kontakcie z wodą;
    • nie ma jasnego i jednoznacznego sposobu rozwiązania problemu.

    Blok (pojedynek między dresami, obcy jest nieświadomym uczestnikiem)

    • możliwość wykorzystania informacji wywołujących zniecierpliwienie niektórych obywateli;
    • możliwość używania nieprzyzwoitych wyrażeń;
    • garaże za domem;
    • monotonia emocjonalna, niepokój;
    • rozrzucone śmieci;
    • dresy i pijacy;
    • postać wchłania pokarm powierzchnią ciała;
    • bohater czuje, gdy ktoś się boi, on sam przy tym zatrzymuje się i traci witalność;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).

    Blok (coś z transportem)

    • mieszkańcy dzielnicy są zmuszeni codziennie dojeżdżać do pracy do centrum biznesowego lub przemysłowej części miasta i wracać do domu, żeby się wyspać;
    • rozwinięty system transportu publicznego;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).

    Blokada (tło emocjonalne utrudnia rozwiązanie problemu, obcy musi podjąć decyzję)

    • nie ma jasnej i jednoznacznej możliwości rozwiązania problemu;
    • monotonia emocjonalna, poczucie niepokoju.

     

    TWORZENIE SPÓJNEGO ŁAŃCUCHA BLOKÓW SEMANTYCZNYCH; OKREŚLENIE GŁÓWNEJ IDEI DLA KAŻDEGO BLOKU17):

    Spoiler

    Części kompozycji    Temat/nazwa bloków
    Zalążek                       Tragiczna pomyłka z teleportem (pojawienie się kosmity na Ziemi)
    Rozwinięcie 1              Miejsce upadku - podwórko z kałużami (paniczna ucieczka)
    Rozwinięcie 2              Zabójcza piłka nożna (spotkanie z miejscowym dzieciakiem)
    Rozwinięcie 3              Niebezpieczna droga (samochody)
    Rozwinięcie 4              Dzieci, matki i ksenofobia (piaskownica)
    Rozwinięcie 5              Życie w koszu na śmieci (zabawa w chowanego w koszach na śmieci)
    Kulminacja                  Garaże, dresy i beznadziejność (poza życiem)
    Rozwiązanie                Niejednoznaczne zakończenie (sen o nadziei)

     

    OGÓLNY EFEKT WYKONANIA KROKU 2:

    Spoiler

    Kluczowy zamysł: zdezorientowany turysta (przedstawiciel innej cywilizacji) w wyniku awarii technicznej teleportu spada na ziemię do dzielnicy mieszkaniowej postradzieckiego milionowego miasta, gdzie w obliczu przejawów typowego społeczeństwa ludzkiego, zmuszony jest walczyć o swoje życie i szukać sposobów ratunku.

    Części kompozycji Temat/nazwa bloków Elementy do bloków
    Zalążek Tragiczna pomyłka z teleportem (pojawienie się kosmity na Ziemi).
    • założenie fantastyczne (jako formalny symbol przynależności do fantastyki naukowej);
    • monotonia emocjonalna, poczucie niepokoju.
    Rozwinięcie 1 Miejsce upadku - podwórko z kałużami (paniczna ucieczka)
    • znalezienie bezpiecznej drogi;
    • postać stopniowo zmniejsza się, twardnieje i traci zdrowie po kontakcie z wodą;
    • nie ma jasnej i jednoznacznej możliwości rozwiązania problemu;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • rozrzucone śmieci;
    Rozwinięcie 2 Zabójcza piłka nożna (spotkanie z miejscowym dzieciakiem)
    • plac zabaw/dziedziniec otoczony wokoło domami;
    • opis relacji między ludźmi w społeczeństwie;
    • kontakt z nieludzkim umysłem;
    • człowiek jako nieświadomy agresor;
    • wokół jest wielu niebezpiecznych wrogów;
    • głównym sposobem na przetrwanie jest unikanie;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • możliwość wykorzystania informacji, które usprawiedliwiają niepoprawne zachowanie
    • rozrzucone śmieci;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).
    Rozwinięcie 3 Niebezpieczna droga (dziwy samochodowe)
    • mieszkańcy dzielnicy są zmuszeni codziennie dojeżdżać do pracy do centrum biznesowego lub przemysłowej części miasta i wracać do domu spać;
    • rozwinięty system transportu publicznego;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).
    Rozwinięcie 4 Dzieci, matki i ksenofobia (piaskownica)
    • ksenofobia;
    • plac zabaw/dziedziniec otoczony wokoło domami;
    • wokół jest wielu niebezpiecznych wrogów;
    • głównym sposobem na przetrwanie jest unikanie;
    • jednym ze sposobów przetrwania jest nawiązanie kontaktu;
    • możliwość używania nieprzyzwoitych wyrażeń;
    • możliwość wykorzystania informacji uzasadniających lub usprawiedliwiających użycie przemocy;
    • rozrzucone śmieci;
    • postać wchłania pokarm powierzchnią ciała;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).
    Rozwinięcie 5 Życie w koszu na śmieci (chowanie się w koszach na śmieci)
    • kosze na śmieci;
    • rozrzucone śmieci;
    • postać charakteryzuje się brakiem funkcjonalnych części ciała;
    • postać wchłania pokarm powierzchnią ciała.
    Kulminacja Garaże, dresy i beznadzieja (poza życiem)
    • możliwość wykorzystania informacji wywołujących zniecierpliwienie niektórych obywateli;
    • możliwość używania nieprzyzwoitych wyrażeń;
    • garaże za domem;
    • rozrzucone śmieci;
    • dresy i pijacy;
    • postać wchłania pokarm powierzchnią ciała;
    • ciało bohatera zostaje rozdarte przez ludzki krzyk (części zrastają się).
    Rozwiązanie Niejednoznaczne zakończenie (sen o nadziei)
    • nie ma jasnego i jednoznacznego sposobu rozwiązania problemu.

     

     

     

    KROK 3. SZCZEGÓŁOWO OPISUJEMY FABUŁĘ:

    Spoiler

    BLOK 1. ZALĄŻEK. TRAGICZNY BŁĄD Z TELEPORTEM (POJAWIENIE SIĘ KOSMITY NA ZIEMI):

    Spoiler

    Obcy turysta wpada w emocjonalny wir i utraciwszy kontrolę nad emo-teleportem, którego główne ustawienia związane są z falami emocjonalnymi, spada na Ziemię. Fizjologia przedstawiciela innej cywilizacji pozwala mu spaść z dużej wysokości bez obrażeń - cios pozbawia go znacznej części energii życiowej i tonizuje wszystkie komórki, zmuszając go do przybrania postaci elastycznej kuli, nie zabijając go. Jedynym połączeniem z współtowarzyszami jest nadajnik telepatyczny, za pośrednictwem którego przekazują oni zaocznie swoje wskazówki dotyczące przetrwania, dopóki nie zostanie ustawiony emo-teleport. Problem polega na tym, że główne tło emocjonalne miejsca, do którego dotarł turysta, wiąże się z niepokojem, strachem, co negatywnie wpływa nie tylko na stan ustawień emo-teleportu, ale także na stan samego turysty.

     

    BLOK 2. ROZWINIĘCIE. DOKĄD UCIEKAĆ? LUB ZIEMIA WITA MOKRYMI UŚCISKAMI (PANICZNA UCIECZKA):

    Spoiler

    Na miejscu katastrofy pechowego turysty czyha pułapka - tam, gdzie upadł, była niedawno ulewa, a dla obcego kontakt z wodą jest śmiertelnym niebezpieczeństwem, przez co traci siły, i kawałki jego ciała zaczynają odpadać. Oczywiście konieczne jest rozwiązanie problemu za pomocą emo-teleportu, ale jak dotąd najważniejszym i najpilniejszym zadaniem jest manewrowanie między licznymi kałużami, wydostanie się w suche miejsce i uzyskanie standardowego kształtu.

     

    BLOK 3. ROZWINIĘCIE. NIEBEZPIECZNA DROGA (DZIWY SAMOCHODOWE):

    Spoiler

    Próbując uciec przed działaniem wody, obcy wyskakuje na jezdnię. Ogłusza go dźwięk samochodów, pierwszy samochód potrąca go z hukiem, turysta leci do drugiego, z niego do trzeciego, do czwartego... Ból przeszywa i ogarnia pechowego turystę. Każdy cios pozbawia go części witalności, a dźwięk silników i sygnalizatorów samochodowych dosłownie rozdziera jego trzęsące się ciało... Czy naprawdę nie jest w stanie uciec przed potwornymi i obojętnymi kreaturami z plastiku i metalu? Oto one - pędzą na niego z przerażającą szybkością, gotowe zmiażdżyć, rozerwać, połknąć!... Nie! Musisz zebrać wszystkie siły...18)

    Próbując uciec przed działaniem wody, obcy wyskakuje na jezdnię, gdzie czeka go nowe zadanie – nie tylko manewrowanie przez kałuże i ucieczka przed wodą, ale także unikanie samochodowych potworów, które grożą mu zmiażdżeniem.

     

    BLOK 4. ROZWINIĘCIE. ZABÓJCZA PIŁKA NOŻNA (SPOTKANIE Z MIEJSCOWYM DZIECIAKIEM):

    Spoiler

    Znajdując się w końcu na miękkiej zielonej trawie, obcy turysta jest przez chwilę bezpieczny, ale potrzeba przywrócenia energii zmusza go do wyruszenia w poszukiwaniu pożywienia. Nagle widzi przed sobą dziwne, nieznane mu stworzenia - ludzi, od których słychać słaby zapach jedzenia. Uczucie głodu i rady z telepatycznego nadajnika sprawiają, że zapominasz o niebezpieczeństwie i ruszasz w stronę stworów. Jednak nie będzie mógł się posilić – ludzie chcą pograć w piłkę. Tracąc już przytomność od ciosów, obcy jest rozdzierany przez krzyki grających z nim w piłkę nastolatków. Kiedy nastolatkowie zauważają, że bawią się czymś innym, otrząsają się ze strachem, trując kosmitę i rzucają w niego kamieniami.

     

    BLOK 5. ROZWINIĘCIE. DZIECI, MAMY I KSENOFOBIA (PIASKOWNICA):

    Spoiler

    Turysta ucieka – siły mu się kończą, głód wpływa na dokładność ruchów. Złapawszy kuszący zapach jedzenia, obcy udaje się do potężnego źródła atrakcyjnego aromatu. Nie wiedząc o tym, pojawia się obok dzieci bawiących się w piaskownicy. Nie mogąc znieść głodu, rzuca się do źródła zapachu (którym okazuje się być ubranie, tkanina, włosy) i zaczyna jeść. Dzieci się nie boją, ale ich matki panikują, siejąc jad strachu. Depczą go pod stopami, krzyczą, strach matek przenosi się na dzieci. Turyście pozostaje tylko ucieczka, jednak matki nie zamierzają go wiecznie deptać, a jeśli się nie wycofa, zgarną go do worka i wyślą do śmietnika19).

     

    BLOK 6. ROZWINIĘCIE. ŻYCIE NA ŚMIETNIKU (CHOWANIE SIĘ PO KOSZACH NA ŚMIECI):

    Spoiler

    Obcy zaczyna się dusić wśród pojawiających się odpadów. Turysta jest prawie wyczerpany brakiem pożywienia, zmuszony jest wchłaniać tkaninę, która od czasu do czasu pojawia się w śmietniku. Jeśli obcy nie może wydostać się z kosza na śmieci, udusi się w śmieciach. Może zostać wyłowiony przez bezdomnego i być wyniesiony z resztą "dobytku” za garaże, albo sam się wydostanie. W każdym razie ścieżka turysty przebiega przez garaże, o ile oczywiście nie chce on ponownie spróbować szczęścia na drodze, przy piaskownicy lub na boisku piłkarskim.

     

    BLOK 7. KULMINACJA. GARAŻE, DRESY I BEZNADZIEJA (POZA ŻYCIEM):

    Spoiler

    Za garażami bezdomni dzielą swój „majątek”, biją się i krzyczą20). Pojawiające się dresy rozpraszają bezdomnych i urządzają własne walki, w których nieświadomym uczestnikiem staje się kosmita wykorzystywany jako knebel. Rozprzestrzeniające się uczucie strachu spowalnia ruchy obcego, a ślina wypełniająca usta ofiary powoduje rozpad ciała nieszczęsnego turysty, przez co ofiara dresów dusi się. Przedśmiertelny horror ofiary zatruwa kosmitę i pozbawia go prawie całej energii życiowej.

     

    BLOK 8. ROZWIĄZANIE. NIEJEDNOZNACZNE ZAKOŃCZENIE (SEN O NADZIEI):

    Spoiler

    Wpółmartwy turysta czeka na pomoc współtowarzyszy, ale jedyną radą, jaką można mu dać na tak niebezpiecznej i przerażającej planecie, jest znalezienie najcichszego, suchego i spokojnego miejsca i hibernacja21).

    Dopóki nie zmieni się tło emocjonalne planety, dopóki nie będzie mniej strachu i bólu, dopóki jej mieszkańców nie przestanie opanowywać przerażenie – wtedy zostanie ustawiony teleport, a obcy zostanie ocalony.

    Typowe elementy charakterystyczne dla społeczno-filozoficznego stylu science fiction są słabo reprezentowane w tej fabule. Aby naprawić ten błąd, należy poświęcić im więcej uwagi w blokach narracyjnych, położyć na nie nacisk22).

     

     

     

    PRZYPISY:

    Spoiler

    Przypisy

    1. ↑ Fabuła to jednolita seria logicznie powiązanych ze sobą wydarzeń, które ujawniają główną treść narracji i uwzględniają specyficzne wymagania gry. Trzeba rozróżniać fabułę i scenariusz. Oba rodzaje prezentacji narracyjnej opowiadają o tym samym, ale w innej skali.

    2, 4 ↑ Gatunek gier to kategoria gier zdefiniowana przez zestaw typowych cech rozgrywki, które dominują w grze (platformówka, symulator przetrwania, RTS, itp.).

    3. ↑ Lista kontrolna/Checklista – lista pozycji do samodzielnego sprawdzenia kompletności i poprawności kroków metodyki.

    5. ↑ Styl literacki i artystyczny - wskazanie stylu literackiego, w jakim ma być przedstawiona fabuła (detektyw, dramat, komedia, farsa, itp.), możliwe jest również wskazanie, w jakim stylu wizualnym zostanie przedstawiona gra - mangi, komiksy, itp.

    6. ↑ Setting – środowisko, w którym toczy się akcja gry, fikcyjne lub odtworzone uniwersum gry, środowisko gry (np. Średniowieczna Anglia, Magiczny Loch Krasnoludów, Ludzkie Ciało od środka).

    7. ↑ Idea przewodnia - istota fabuły przedstawiona w jak najkrótszej formie (20-25 słów), która w idealnym przypadku powinna zawierać informacje o bohaterze, jego celach i przeszkodach na drodze do ich osiągnięcia.

    8. ↑ Kompozycja fabuły to ogólna struktura fabuły, na którą składają się następujące elementy: ekspozycja, zalążek, rozwinięcie akcji, kulminacja, rozwiązanie akcji, postpozycja.

    9. ↑ Blok semantyczny – część/kawałek narracji, składający się z jednej lub więcej scen, połączonych wspólnym celem narracyjnym (np. zapoznanie gracza z towarzyszem postaci, zagłębienie w postać gracza) i wyczerpujących ją.

    10. ↑ Mechanika gry - każda z osobna mechanika to zasada i/lub ograniczenie interakcji gracza z jednym lub kilkoma elementami gry, pomagające lub utrudniające graczowi osiągnięcie jego celów w grze. Ogólnie rzecz biorąc, ogólna mechanika gry to zestaw reguł gry, w ramach których ona (gra) funkcjonuje.

    11. ↑ Narracja - linearna prezentacja sekwencji wydarzeń fabuły gry z wykorzystaniem różnych sposobów przedstawiania informacji narracyjnych właściwych dla określonego typu treści.

    12. ↑ Elementy narracyjne - te środki i postawy, ta treść, dzięki której gracz otrzymuje historię i informacje o świecie gry.

    13. ↑ Nietypowa cecha symulatora przetrwania - raczej własne powiązanie autora.

    14. ↑ Nie jest konieczne wykorzystywanie absolutnie wszystkich wybranych elementów w blokach narracyjnych – jeśli niektóre z nich nie pasują do wymyślonej fabuły, wskazane jest ich pominięcie lub pozostawienie jako rezerwowe.

    15. ↑ Pomysł na fabułę nie został podany początkowo, ale w trakcie realizacji pierwszego kroku pewne cechy i powiązania doprowadziły do właśnie tego pomysłu.

    16. ↑ Ponieważ pojawiły się trudności z ułożeniem łańcucha fabularnego, postanowiono najpierw pogrupować między sobą cechy i powiązania z tabeli, spróbować zmienić ich układ i kolejność - i wybrać opcje, podobające się warianty.
    Na tym etapie bloki semantyczne są jeszcze bardzo przybliżone - jak pierwsze szkice artysty.

    17. ↑ Po eksperymentach z sekwencją bloków semantycznych wybieramy łańcuch historii, który wydaje się najciekawszy.
    Zdecydowano o przeznaczeniu aż pięciu bloków pod zabudowę.

    18. ↑ Przejaw naruszenia skali prezentacji, nadmiernej szczegółowości, opisu emocji, itp. Poniższa opcja pokazuje sposób skalowania.

    19. ↑ To oznaka naruszenia logicznego związku między tym a następnym blokiem narracyjnym: wskazano, że turysta może uciec, ale następny blok narracyjny zaczyna się od tego, że kosmita znajduje się w śmietniku, gdzie był zostawiony przez zaniepokojone matki. Aby przywrócić połączenie, logiczne byłoby tutaj zaznaczenie, że np. jeśli turysta ucieknie, to jego droga będzie przebiegać przez boisko piłkarskie/drogę, skąd kopniak od nastolatka lub potrącenie przez samochód i tak spowoduje jego powrót do kosza na śmieci.

    20. ↑ Znak użycia elementu tylko dlatego, że został wcześniej zadeklarowany przy grupowaniu elementów w bloku narracyjnym – nie ma takiej potrzeby i można go bezpiecznie wykluczyć.

    21. ↑ Oznaka braku związku przyczynowego - z fabuły nie wynika jasno, dlaczego padła ta konkretna rada. Opcja poniżej byłaby lepsza.

    22. ↑ Poważna wada tej fabuły

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1053-metodika-napisaniya-igrovogo-syuzheta/

    http://aushestov.ru/

    • Ważne 1
  7. NAZWA: Przetestowane mapy MP dla Cienia Czarnobyla
    TWÓRCY: Сообщество Независимых Картоделов (СНК), kompozycja dodatkowych map by Hamul

     

    DO FOLDERU MODS:

    Spoiler

    Artefact match/wszyscy przeciwko wszystkim/zespół vs zespół:

     

    ------------------------------------

    Mapa treningowa (wszyscy przeciwko wszystkim):

     

    DO FOLDERU GAMEDATA:

    Spoiler

    W celu instalacji kopiujemy do folderu z grą (Przykład E:\Program Files\GSC World Publishing\S.T.A.L.K.E.R).
    Uwaga! Ta paczka nie działa na innych serwerach, to znaczy przy próbie przyłączenia się, będzie was wyrzucać do menu lub do głównej listy!!!!
    Dla gry na innych serwerach, nazwę folderu gamedata trzeba zmienić (Przykład - gamedata55)!

    Paczka zawiera takie mapy jak:

    • Darkvalley. Original.
    • Escape 1154
    • Кладбище техники. ВОЗРОЖДЕНИЕ.
    • РЛС Дуга-1. ВОЗРОЖДЕНИЕ.
    • Станция в горах. ВОЗРОЖДЕНИЕ.
    • Свалка
    • Припять
    • Стадион "Авангард"
    • Лаборатория
    • Припять. Автовокзал. ВОЗРОЖДЕНИЕ

    Oprócz tego kompozycja dodatkowych map od Hamul:

    • kpp_by_antigamer
    • escape_1154 (nie działają schody)
    • Террасы
    • Подземелье
    • aim_headshot_v1.1
    • pool_day
    • de_dust2

     

    LINK: https://disk.yandex.ru/d/n3OeWixcPFAg8

    ---------------------------------------------------------

    Ulepszenie pijawki patcha 1.8 dla patchu 1.6 (przeniesienie map do patcha 1.6/idea Hamul) - instrukcja wewnątrz archiwum

    LINK:

    https://disk.yandex.ru/d/BqfMkPaaVSqzY

     

    ORIENTACJA NA MAPIE MP AGROPROM:

    Spoiler

    1. Brak nazwy/umownie Daleki kąt/Dalniak/Kret daleki
    2. Dach kret (jeśli na dachu), budynek kret (jeśli wewnątrz)
    3. Korpus posterunku (Корпус КПП)
    4. Posterunek (КПП)
    5. Pociąg
    6. Podwórko
    7. Brak nazwy/Umownie Kotłownia/Pod rurą z bramą/
    8. Rura
    9. centrum dachu, centrum korpus
    10. Wagony
    11. Przejście (wewnątrz przejścia), dach przejście (na dachu przejścia)
    12. dach luka, korpus luka
    13. Transformator
    14. Beczki

     

    ŹRÓDŁO:

    https://stalker-gamers.ru/forum/15-65-1

  8. NAZWA: Tworzenie profilu postaci
    TWÓRCA: Болотный Доктор

     

    Aby stworzyć postać, musisz utworzyć jej profil, opis i sekcję spawnu.

    Aby utworzyć profil postaci, musisz dodać następujące linie do pliku «gamedata\configs\gameplay\npc_profile.xml»:

    <character id="<id_profilu>">
    <class><id_klasy></class>
    </character>

    Identyfikator profilu ma postać <przedrostek_poziomu>_<id_sceny>_<frakcja_postaci>_<nazwa_opisowa>, na przykład zat_b7_stalker_raider_leader. Aby uniknąć nieporozumień, klasa postaci jest taka sama jak identyfikator profilu. Klasa postaci służy do łączenia profilu i opisu postaci.

     

    TWORZENIE OPISU POSTACI:

    Spoiler

    Z jednym profilem postaci można skojarzyć wiele opisów postaci.
    To pozwala, dodając do gry kilka postaci o tym samym profilu, na uzyskanie w rezultacie postaci o innym zestawie rzeczy, innym wyglądzie (visual), itp.

    Aby utworzyć opis postaci, musisz do pliku "gamedata\configs\gameplay\character_desc_<nazwa_poziomu>.xml" dodaj następującą konstrukcję:

    <specific_character id="<id_opisu>" team_default = "1">
    <name><id_linii_nazwy></name>
    <icon><id_tekstury_ikonki></icon>
    <map_icon x="1" y="0"></map_icon>
    <bio><id_linii_biografii></bio>
    <class><id_klasy></class>
    <community><frakcja_postaci></community> <terrain_sect>stalker_terrain</terrain_sect>
    <rank><ranga></rank>
    <reputation><reputacja></reputation>
    <money min="<minimum_pieniędzy>" max="<maksimum_pieniędzy>" infinitive="<uzupełnialność>"/>
    <visual><wygląd></visual>
    <snd_config><folder_ze_ścieżką_dźwiękową></snd_config>
    <supplies>
    [spawn] \n
    <przedmiot>\n
    <przedmiot>\n
    #include "gameplay\character_items.xml"
    #include "gameplay\character_food.xml"
    #include "gameplay\character_drugs.xml"
    </supplies>
    #include "gameplay\character_criticals_4.xml"
    <start_dialog><id_startowego_dialogu></start_dialog>
    <actor_dialog><id_dialogu_aktora></actor_dialog>
    <actor_dialog><id_dialogu_aktora></actor_dialog>
    #include "gameplay\character_dialogs.xml"
    </specific_character>

     

     

    OPIS ELEMENTÓW KONSTRUKCJI:

    Spoiler

    Aby uniknąć nieporozumień, identyfikator opisu:
    a) jest podobny do identyfikatorów klasy i profilu w przypadku, gdy z profilem powiązany jest tylko jeden opis;
    b) ma postać - <identyfikator_profilu>__default_<liczba> (zaczynając od zera), jeśli z profilem powiązanych jest wiele opisów.

    <id_linii_nazwy> - Id linii nazwy ma postać, jak <id_opisu>_name

    Linia nazwy postaci jest dodawana do pliku "gamedata\configs\text\<lokalizacja>\st_characters.xml" za pomocą konstrukcji:

    <string id="<id_linii_nazwy>">
    <text><tekst_nazwy></text>
    </string>

    Nazwę można również wygenerować umieszczając w opisie postaci zamiast identyfikatora linii nazwy konstrukcję - GENERATE_NAME_<nazwa_frakcji>.

    <id_tekstury_ikonki> - Id tekstury ikony jest wczytywany z pliku "gamedata\configs\ui\textures_descr\ui_npc_unique.xml". Ta ikonka jest widoczna podczas dialogu z postacią.

    <id_linii_biografii> - aktualnie nieużywane w grze, więc to pole można pozostawić puste.

    <id_klasy> - Id klasy, które łączy opis postaci z odpowiednim profilem postaci.

    <frakcja_postaci> - nazwa frakcji, do której należy ta postać.

    <ranga> - liczba określająca względne "bycie cool" postaci:

    • 0 - 300 – nowicjusz (novice)
    • 301 - 600 – doświadczony (experienced)
    • 601 - 900 – weteran (veteran)
    • 901 - 999 – mistrz (master)

    <reputacja> - aktualnie nieużywane w grze, więc to pole może pozostać puste.

    <minimalne_pieniądze>
    <maksymalne_pieniądze>
    <uzupełnialność>

    Ilość pieniędzy jaką posiada postać będzie losowo wybierana od określonego minimum do określonego maksimum. Uzupełnialność może przyjmować wartości 0 lub 1. W tym drugim przypadku ilość pieniędzy, którymi dysponuje postać, będzie uzupełniana po każdej transakcji, ale każda pojedyncza transakcja będzie ograniczona ilością pieniędzy posiadanych przez postać.

    <wygląd> - ścieżka do pliku "*.ogf" z folderu "gamedata\meshes", zawierającego wygląd (visual) postaci. Określone bez początkowego "odwrotnego ukośnika” ("\"), bez kropki i bez rozszerzenia pliku. Pancerz postaci zależy od wyglądu.

    <folder_ze_ścieżką_dźwiękową> - ścieżka do folderu uniwersalnego ze ścieżką dźwiękową postaci z folderu "gamedata\sounds". Ma postać: characters_voice\human_<numer>\<frakcja>\. W tej konstrukcji <numer> może wynosić 01 lub 02 (zwykłe głosy) lub 03 (głos stłumiony przez maskę do oddychania, maskę przeciwgazową lub kopułę).

    <przedmiot> \n
    <przedmiot> \n

    Za pomocą konstrukcji <przedmiot> określa się listę przedmiotów, które dana postać powinna posiadać. Struktury wyglądają tak: <id_przedmiotu>< = ilość><, dodatek>
    Jednak < = ilość> i <, dodatek> są opcjonalne. Parametr dodatek ma znaczenie tylko dla broni i może przyjmować następujące wartości:

    • scope (celownik optyczny)
    • silencer (tłumik)
    • launcher (granatnik podlufowy)

    Możesz dodać wiele konstrukcji <, dodatek>, ale wszystkie muszą wystąpić po konstrukcji < = ilość>. Na końcu całej opisanej powyżej konstrukcji muszą znajdować się symbole \n (podziały linii/końce linii). Przykład:

    wpn_abakan = 1, scope, launcher

    #include "gameplay\character_items.xml" — ta i wszystkie pozostałe linie #include muszą znajdować się na początku linii (bez wcięcia przed nią). Dodaje lornetkę, latarkę, detektor i najprawdopodobniej gitarę do listy przedmiotów postaci.

    #include "gameplay\character_food.xml" - ta linia dodaje chleb, kiełbasę i wódkę do listy przedmiotów postaci.

    #include „gameplay\character_drugs.xml” — ta linia prawdopodobnie dodaje do listy przedmiotów postaci, bandaże i apteczki pierwszej pomocy.

    <id_startowego_dialogu> - Id dialogu, który jest początkowym dialogiem dla postaci. Jeśli ten parametr (wraz ze znacznikami <start_dialog></start_dialog> nie zostanie określony, zostanie użyty standardowy startowy dialog.

    <id_dialogu_aktora> — Id dialogu aktora. Możesz określić wiele okien dialogowych aktora - w tagach <actor_dialog></actor_dialog>
    #include "gameplay\character_dialogs.xml".

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1181-sozdanie-profilya-personazha/

    • Ważne 1
  9. NAZWA: Tworzenie mechanika [CoP]
    TWÓRCA: Аристократ

     

    LISTA PLIKÓW DO EDYCJI:

    Spoiler

    CONFIGS:

    • gamedata\configs\creatures\spawn_sections_zaton.ltx
    • gamedata\configs\gameplay\character_desc_general.xml
    • gamedata\configs\gameplay\character_desc_zaton.xml
    • gamedata\configs\gameplay\dialogs_zaton.xml
    • gamedata\configs\gameplay\info_zaton.xml
    • gamedata\configs\gameplay\npc_profile.xml
    • gamedata\configs\misc\stalkers_upgrade_info.ltx
    • gamedata\configs\misc\tm_zaton.ltx
    • gamedata\configs\text\rus\st_dialogs_zaton.xml
    • gamedata\configs\text\rus\st_quests_zaton.xml

    Pliki, które utworzymy:

    • gamedata\configs\scripts\pr_meh.ltx

    SCRIPTS:

    • dialogs_zaton.script

    SPAWNS:

    • alife_zaton.ltx

     

    TWORZENIE NPC:

    Spoiler

    1. Dopisujemy informacje do pliku spawn_sections_zaton.ltx:

    ;---------------------------------Mechanik--------------------------------------
    [pr_meh]:stalker
    $spawn = "respawn\pr_meh"
    character_profile = pr_meh
    spec_rank = veteran
    community = stalker
    story_id = pr_meh

     

    2. Dopisujemy informacje do pliku character_desc_zaton.ltx:

    <specific_character id="pr_meh" team_default="1">
    <name>Mechanik</name>
    <icon>ui_inGame2_neutral_1</icon>
    <map_icon x="1" y="0">
    </map_icon>
    <bio>Doświadczony stalker. Brak szczegółowej informacji.</bio>
    <class>pr_meh</class>
    <mechanic_mode>1</mechanic_mode> ;- robimy z naszego NPC mechanika
    <community>stalker</community>
    <terrain_sect>stalker_terrain</terrain_sect>
    <snd_config>characters_voice\human_02\stalker\</snd_config>
    <rank>40</rank>
    <money min="3500" max="3500" infinitive="0" />
    <reputation>0</reputation>
    <snd_config>characters_voice\human_02\stalker\</snd_config>
    <crouch_type>-1</crouch_type>
    <visual>actors\stalker_neutral\stalker_neutral_2</visual>
    <supplies>
    
    [spawn] \n
    device_torch \n
    wpn_ak74u \n
    ammo_5.45x39_fmj = 1 \n
    wpn_pm \n
    ammo_9x18_fmj = 1 \n
    detector_elite \n
    wpn_binoc \n
    #include "gameplay\character_items.xml"
    #include "gameplay\character_food.xml"
    #include "gameplay\character_drugs.xml"
    </supplies>
    #include "gameplay\character_criticals_4.xml"
    
    <start_dialog>hello_dialog</start_dialog>
    <actor_dialog>pr_toolkit_dialog_1</actor_dialog>
    <actor_dialog>pr_toolkit_dialog_1_done</actor_dialog>
    <actor_dialog>pr_toolkit_dialog_2</actor_dialog>
    <actor_dialog>pr_toolkit_dialog_2_done</actor_dialog>
    <actor_dialog>pr_toolkit_dialog_3</actor_dialog>
    <actor_dialog>pr_toolkit_dialog_3_done</actor_dialog>
    <actor_dialog>actor_break_dialog</actor_dialog>
    </specific_character>

     

    3. Dopisujemy informacje do pliku npc_profile.xml:

    <character id="pr_meh">
    <class>pr_meh</class>
    <specific_character>pr_meh</specific_character>
    </character>

     

    4. Dopisujemy informacje do pliku alife_zaton.ltx:

    [1866]
    ; cse_abstract properties
    section_name = stalker
    name = pr_meh
    position = -25.115728378296,-4.3516597747803,329.95211791992
    direction = 0,0,0
    
    ; cse_alife_trader_abstract properties
    money = 5000
    character_profile = pr_meh
    
    ; cse_alife_object properties
    game_vertex_id = 1053
    distance = 0
    level_vertex_id = 904335
    object_flags = 0xffffffbf
    custom_data = <<END
    
    [logic]
    cfg = scripts\pr_meh.ltx
    
    ; cse
    [smart_terrains]
    none = true
    END
    
    ; cse_visual properties
    visual_name = actors\stalker_neutral\stalker_balon_2.ogf
    
    ; cse_alife_creature_abstract properties
    g_team = 0
    g_squad = 1
    g_group = 2
    health = 1
    dynamic_out_restrictions =
    dynamic_in_restrictions =
    
    upd:health = 1
    upd:timestamp = 0
    upd:creature_flags = 0
    upd:position = -25.115728378296,-4.3516597747803,329.95211791992
    upd:o_model = 0
    upd:o_torso = 0.0280130300670862,0,0.999607563018799
    upd:g_team = 0
    upd:g_squad = 1
    upd:g_group = 2
    
    ; 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 = 1,2,2,1,2
    predicate4 = 0,1,1,1
    
    ; cse_ph_skeleton properties
    
    upd:start_dialog =
    
    ; se_stalker properties

    Myślę, że z numerowaniem sekcji nie wystąpi błąd.

     

    5. Dopisujemy informacje do pliku pr_meh.ltx:

    Tworzymy plik logiki naszego NPC, aby nie spacerował po mapie.

    [smart_terrains]
    none = true
    
    [logic]
    active = remark
    combat_ignore = combat_ignore
    
    [combat_ignore]
    
    [remark]
    anim = ward
    combat_ignore_cond = always
    invulnerable = true
    level_spot = mechanic
    target = story | actor
    meet = meet@1
    
    [meet@1]
    close_anim = nil
    close_victim = nil
    far_anim = nil
    far_victim = nil
    close_distance = 0
    far_distance = 0
    close_snd_distance = 3
    abuse = false
    use = {=actor_enemy} true
    allow_break = true
    meet_on_talking = true

    Teraz nasz NPC będzie stał w miejscu i nigdzie nie odejdzie.

     

    Mechanik został stworzony. Umie naprawiać bronie, ale nie umie ulepszać broni. Spróbujmy nauczyć go robić ulepszenia, ale po znalezieniu odpowiednich narzędzi.

     

    DODANIE MOŻLIWOŚCI ULEPSZENIA DLA NASZEGO NPC:

    Spoiler

    Zacznijmy więc od ulepszeń. Otwieramy plik stalkers_upgrade_info.ltx i na samym dole piszemy to, co poniżej:

    ;************************************************
    ;****************** Механик *********************
    ;************************************************
    
    [pr_meh]
    wpn_pm
    wpn_pb
    wpn_fort
    
    wpn_hpsa
    wpn_beretta
    wpn_walther
    wpn_colt1911
    
    wpn_usp
    wpn_sig220
    wpn_desert_eagle
    
    wpn_bm16
    wpn_toz34
    wpn_wincheaster1300
    wpn_spas12
    wpn_protecta
    
    wpn_mp5
    
    wpn_ak74u
    wpn_ak74
    wpn_abakan
    
    wpn_l85
    wpn_lr300
    wpn_sig550
    wpn_fn2000
    wpn_g36
    
    wpn_val
    wpn_vintorez
    wpn_groza
    
    wpn_svd
    wpn_svu
    
    wpn_pkm
    
    wpn_rg-6
    wpn_rpg7
    wpn_gauss
    
    novice_outfit
    cs_heavy_outfit
    stalker_outfit
    
    wpn_pm_actor
    wpn_sig550_luckygun
    wpn_pkm_zulus
    wpn_desert_eagle_nimble
    wpn_groza_nimble
    wpn_mp5_nimble
    wpn_sig220_nimble
    wpn_spas12_nimble
    wpn_svd_nimble
    wpn_svu_nimble
    wpn_usp_nimble
    wpn_vintorez_nimble
    wpn_wincheaster1300_trapper
    wpn_g36_nimble
    wpn_fn2000_nimble
    wpn_protecta_nimble
    wpn_ak74u_snag
    wpn_fort_snag
    
    specops_outfit
    military_outfit
    stalker_outfit
    scientific_outfit
    exo_outfit
    svoboda_light_outfit
    svoboda_heavy_outfit
    cs_heavy_outfit
    dolg_outfit
    dolg_heavy_outfit
    
    helm_battle
    helm_hardhat
    helm_protective
    helm_respirator
    helm_tactic
    
    stalker_outfit_barge
    helm_respirator_joker
    helm_hardhat_snag
    
    [pr_meh_upgr]

     

     

    LISTA ULEPSZEŃ DLA BRONI:

    Spoiler
    up_sect_firsta_ak74u = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_ak74u = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_ak74u = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_ak74u = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_ak74u = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_ak74u = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_ak74u = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_ak74u = true
    up_sect_fourtc_ak74u = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_ak74u = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_ak74u = true
    
    up_sect_firsta_mp5 = true
    up_sect_firstc_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_mp5 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_mp5 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_mp5 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_mp5 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_mp5 = true
    up_sect_fifthc_mp5 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_firsta_sig550 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_sig550 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_sig550 = true
    up_sect_thirdc_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_sig550 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_sig550 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_sig550 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_sig550 = true
    
    up_sect_firsta_groza = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_groza = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_seconf_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_groza = true
    up_sect_thirdc_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_groza = true
    up_sect_fourtc_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_groza = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourtf_groza = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_groza = true
    
    up_sect_firsta_l85 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_l85 = true
    up_sect_seconc_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_l85 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_l85 = true
    up_sect_fourtc_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_l85 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_l85 = true
    up_sect_fifthc_l85 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_firsta_abakan = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_abakan = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_abakan = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_abakan = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_abakan = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_abakan = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_abakan = true
    
    up_sect_firsta_g36 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_g36 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_g36 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_g36 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_g36 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_g36 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_g36 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_g36 = true
    up_sect_fourtc_g36 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_g36 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_vintorez = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_vintorez = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_vintorez = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_vintorez = true
    up_sect_fourtc_vintorez = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_vintorez = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_ak74 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_ak74 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_ak74 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_ak74 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_ak74 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_ak74 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_ak74 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_ak74 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_ak74 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_ak74 = true
    up_sect_fifthc_ak74 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_firsta_lr300 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_lr300 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_lr300 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_lr300 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_lr300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_lr300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_lr300 = true
    
    up_sect_firsta_val = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_val = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_val = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_val = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_val = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_val = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_val = true
    
    up_sect_firsta_fn2000 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_fn2000 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_fn2000 = true
    up_sect_thirdc_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_fn2000 = true
    up_sect_fourtc_fn2000 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_fn2000 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_pkm = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_pkm = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_pkm = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_pkm = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_pkm = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_pkm = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_pkm = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_pkm = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_pkm = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_pkm = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_pkm = true
    
    up_sect_firsta_svd = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_svd = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_svd = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_svd = true
    up_sect_fourtc_svd = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_svd = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_svu = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_firstc_svu = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_svu = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_seconc_svu = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_svu = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_seconf_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_svu = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_svu = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_fourta_svu = true
    up_sect_fourtc_svu = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_fourte_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_fourtf_svu = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fiftha_svu = true
    
    up_sect_firsta_bm16 = true
    up_sect_firstc_bm16 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_secona_bm16 = true
    up_sect_seconc_bm16 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_bm16 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_thirda_bm16 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_bm16 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_firsta_toz34 = true
    up_sect_firstc_toz34 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_toz34 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_toz34 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_toz34 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_toz34 = true
    up_sect_seconc_toz34 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_toz34 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_thirda_toz34 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_toz34 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_toz34 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_toz34 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_wincheaster1300 = true
    up_sect_firstc_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_wincheaster1300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_wincheaster1300 = true
    up_sect_seconc_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_secone_wincheaster1300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_thirda_wincheaster1300 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_wincheaster1300 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_wincheaster1300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_wincheaster1300 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_spas12 = true
    up_sect_firstc_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_spas12 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_spas12 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_spas12 = true
    up_sect_seconc_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_thirda_spas12 = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_spas12 = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_spas12 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_thirdf_spas12 = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_firsta_protecta = true
    up_sect_firstc_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firstd_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_firste_protecta = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    up_sect_firstf_protecta = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_secona_protecta = true
    up_sect_seconc_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_second_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    
    up_sect_thirda_protecta = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_thirdc_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirdd_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%
    up_sect_thirde_protecta = {+pr_meh_instrument_3_brought}, false %=upgrade_hint(st_upgr_toolkit_3)%
    
    up_sect_fourta_protecta = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%
    up_sect_fourtc_protecta = {+pr_meh_instrument_2_brought}, false %=upgrade_hint(st_upgr_toolkit_2)%

     

     

    WYJAŚNIENIE:

    Spoiler
    up_sect_firsta_ak74u = {+pr_meh_instrument_1_brought}, false %=upgrade_hint(st_upgr_toolkit_1)%

    Warunek, według którego NPC może wykonać to ulepszenie (w tym przypadku, gdy NPC otrzyma narzędzia do podstawowej pracy, bez nich ulepszenie nie zostanie wykonane, a w grze na ulepszeniu zostanie napisane: "potrzebne narzędzia do podstawowej pracy"

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1278-cop-sozdanie-mehanika/

    • Dodatnia 1
    • Ważne 1
  10. NAZWA: Dodanie znaczników w PDA do mapy dodanej lokacji [CoP]
    TWÓRCA: Nukila

     

    Dodaliśmy lokację do Zewu Prypeci, umieściliśmy mapę w PDA i rozpoczęliśmy zagospodarowywanie. I wtedy pojawia się pytanie - jak dodać oznaczenia do PDA (w ZP, np. Anomaly Bitumin, Pazur, itp.)? Na przykład: Anomalia Wysypisko na dołączonej Prypeci (na stadionie).

     

    POTRZEBNE PLIKI:

    Spoiler

    Potrzebne pliki (w tym przypadku dla Prypeci):

    • alife_l11_pripyat.ltx
    • pda.script
    • gamedata\configs\text\rus\dowolny_plik.xml

     

    OPERACJE W PLIKACH:

    Spoiler

    1. ALIFE_L11_PRIPYAT.LTX:

    Spoiler
    [137]
    ; cse_abstract properties
    section_name = space_restrictor
    name = zero_b1_spot----dowolna unikalna nazwa
    position = 5.76249980926514,2.64950323104858,341.929992675781---środek okręgu, po najechaniu na niego kursorem pojawi się napis
    direction = 0,0,0
    
    ; cse_alife_object properties
    game_vertex_id = 934-------game vertex poziomu
    distance = 0
    level_vertex_id = 214948-----level vertex poziomu
    object_flags = 0xffffff3e
    custom_data = <<END
    [story_object]
    story_id = zero_b1_spot
    END
    
    ; cse_shape properties
    shapes = shape0
    shape0:type = sphere
    shape0:offset = 0,0,0
    shape0:radius = 1
    
    ; cse_alife_space_restrictor properties
    restrictor_type = 3

     

    Następnie zbieramy do kupy all.spawn (trzeba będzie go jeszcze umieścić w folderze).

     

    2. PDA.SCRIPT:

    Spoiler

    Znajdujemy linijkę:

    {target="jup_a9_spot", hint="st_jup_a9_name"},

    i po niej dodajemy:

    {target="zero_b1_spot", hint="st_zero_b1_name"},

    Zamykamy i zapisujemy zmiany. 

     

    3. GAMEDATA\CONFIGS\TEXT\RUS\DOWOLNY_PLIK.XML:

    Spoiler
    <string id=" st_zero_b1_name "> 
    <text>Piszemy to, co chcemy widzieć po najechaniu</text> 
    </string>

    Zapisujemy.

     

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1179-cop-dobavlenie-otmetok-v-pda-na-kartu-podklyuchennyy-lokacii/

    • Ważne 1
  11. NAZWA: Generowanie przedmiotów w trupach
    TWÓRCA: Костя.н.ы.ч

     

    POTRZEBNE PLIKI:

    Spoiler

    4 pliki są odpowiedzialne za spawn przedmiotów w folderze "config\misc":

    • death_generic.ltx
    • death_items_by_communities.ltx
    • death_items_by_levels.ltx
    • death_items_count.ltx

     

    ANALIZA STRUKTURY PLIKÓW:

    Spoiler

    1. death_generic.ltx:

    Spoiler

    Jest to główny plik z include'ami pozostałych. W nim są opisane zależności pojawiania się amunicji przy warunku obecności określonej broni (to znaczy, jeśli NPC ma TOZ-34, to spawnowana amunicja powinna być dla niego, a nie np. dla SVD), sekcja: [item_dependence]

    Lista unikalnych przedmiotów questowych, których nie należy usuwać, jeśli NPC je posiada, sekcja: [keep_items]

    Oraz przedmioty związane z amunicją (muszą zostać spawnowane inną metodą), sekcja: [ammo_sections]

     

    2. death_items_by_communities.ltx:

    Spoiler

    Wskazuje prawdopodobieństwo pojawienia się lub braku jakiegokolwiek przedmiotu w procentach, na przykład:

    af_medusa = 0.015
    af_cristall_flower = 0.01
    af_night_star = 0.005

    Oznacza to, że Meduza pojawi się z szansą 1,5%, Kryształowy kolec z szansą 1%, a Nocna Gwiazda z szansą 0,5%. Jeśli jest 1, przedmiot pojawi się ze 100% prawdopodobieństwem. We wszystkich innych sekcjach napisane jest dopasowanie dla tej konkretnej sekcji, na przykład:

    [bandit]:stalker

    Oznacza to, że wszyscy członkowie frakcji "Bandyci" mają to samo generowanie przedmiotów, co stalkerzy. Jeśli konieczne jest ustawienie innej szansy na spawn, po prostu zapisywana jest linia z nową wartością, na przykład spawn chleba, kiełbasy, wódki jest wyłączony dla najemników, ale zwiększa się szansa na wygenerowanie napoju energetycznego:

    [killer]:stalker
    ;jedzenie
    bread = 0
    kolbasa = 0
    vodka = 0
    energy_drink = 0.3

    Warto dodatkowo omówić, że brane są pod uwagę tylko części setne, czyli pisanie poniżej 0,01 nie ma sensu, gdyż w tym przypadku liczba zostanie zaokrąglona do zera. Innymi słowy, szansa w grze nie może być mniejsza niż 1%.

     

    3. death_items_by_levels.ltx:

    Spoiler

    Generowanie przedmiotów dla różnych poziomów (lokacji). Ponownie, główna sekcja to:

    [default]

    A we wszystkich innych dopasowanie jest do niego pisane. W tym pliku jest ustawiana wartość, czy spawnować przedmiot na poziomie:

    af_medusa = 1
    af_cristall_flower = 0

    Jeśli jest 1 to spawnujemy, jeśli 0 to nie spawnujemy.

     

    4. death_items_by_count.ltx:

    Spoiler

    Ilościowy stosunek zaspawnowanych przedmiotów dla różnych poziomów trudności podczas przechodzenia gry.

    [item_count_0] - nowicjusz
    [item_count_1] – doświadczony
    [item_count_2] – weteran
    [item_count_3] - mistrz

    Jak widać, z każdym poziomem trudności spawn przedmiotów maleje. Główną, jak zawsze, jest pierwsza sekcja (nowicjusz). Charakterystyczną cechą opisu są dwie cyfry. Pierwsza liczba - minimalna liczbę spawnowanych przedmiotów, druga - maksymalna. Jeśli jest jedna wartość, to zawsze pojawia się w określonej ilości. Przykład:

    bandage = 2
    medkit = 1, 2

    Więc zawsze będzie generować 2 bandaże i 1 lub 2 apteczki.

     

     

    DODANIE NOWEGO PRZEDMIOTU DO WYGENEROWANIA W ZWŁOKACH:

    Spoiler

    Na przykład przeanalizujmy dodanie napoju energetycznego "S.T.A.L.K.E.R." (patch 5, brak napoju). Nie będziemy analizować tworzenia własnego obiektu, po prostu napiszemy jego config:

    [energy_drink_stalker]:vodka
    $spawn = "food and drugs\energy_drink_stalker"
    inv_name = energy_drink_stalker_name
    inv_name_short = energy_drink_stalker_short_name
    visual = equipments\drink_stalker.ogf
    description = enc_equipment_energydrink_stalker
    cost = 75
    
    inv_grid_width = 1
    inv_grid_height = 1
    inv_grid_x = 11
    inv_grid_y = 0
    inv_weight = 0.3
    inv_name = drink_stalker
    eat_health = 0
    eat_satiety = 0
    eat_power = 1.0
    eat_alcohol = 0
    eat_radiation = 0
    wounds_heal_perc = 0
    eat_portions_num = 1
    eat_max_power = 0.2
    
    attach_angle_offset = 0.000000, 0.000000, 0.000000
    attach_position_offset = 0.087266, -0.078540, 0.052360
    attach_bone_name = bip01_r_hand
    auto_attach = false

    Oczywiście dodajemy opis... Uprośćmy generowanie, czyli dla wszystkich: frakcji, poziomów trudności, lokacji, będzie to samo... W tym celu dodajemy nasz napój energetyczny do wszystkich głównych sekcji:

    Plik: - death_items_by_communities.ltx
    
    [stalker]
    energy_drink_stalker =0.2
    af_medusa = 0.015
    
    Plik: - death_items_by_levels.ltx
    
    [default]
    energy_drink_stalker = 1
    af_medusa = 1
    
    Plik: - death_items_count.ltx
    
    [item_count_0]
    energy_drink_stalker = 1
    af_medusa = 1

    Możesz wpisać spawn przedmiotu w dowolnym miejscu w tych sekcjach pomiędzy innymi przedmiotami, ignorując wpisy twórców (jedzenie, lekarstwa, itp.), ponieważ są one tworzone tylko dla wygody, gra nie bierze tego pod uwagę. I to na tyle, nowy przedmiot został dodany do gry, pojawi się z 20% prawdopodobieństwem w ilości 1 szt.

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/675-generirovanie-predmetov-v-trupah/

    • Ważne 1
  12. NAZWA: Zona-17 [SoC]
    PLATFORMA: Cień Czarnobyla
    TWÓRCY: ScaarjScout, Сообщество Независимых Картоделов, D1mon.

     

    OPIS:

    Spoiler

    Lokacja "Zona-17", skompilowana za pomocą 64-bitowego kompilatora do Cienia Czarnobyla. Składa się z najlepszych map SNK (Сообщества Независимых Картоделов). Gamedata jest instalowana na Lost Alphę. Nie ma AI-siatki. lokacja, jest wypełniona małymi dekoracjami w budynkach.

    Dodatkowe informacje:

    • Map size X x Z: [1396 x 1293]
    • Max static vertex per m^2: 11570
    • Total static vertices: 2852094
    • Max mu vertex per m^2: 431
    • Total mu vertices: 4199199

     

    SCREENY:

    Spoiler

    BVBOnhF.jpgHwXSuyP.jpgbKlUKk1.jpgwPUj1pr.jpgbTVrQI3.jpgBVBOnhF.jpgdLVPR7Q.jpgSkKhJmP.jpgUHdKqqf.jpgWSoqd1B.jpgCjswH3T.jpg

     

    LINKI:

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/484-lokaciya-zona-17/

    https://synthira.ru/load/s_t_a_l_k_e_r/karty_stalker/lokacija_zona_17/23-1-0-3067

  13. NAZWA: S.T.A.L.K.E.R "MP Map Pack 2" 
    TWÓRCY: Сообщество Независимых Картоделов (СНК)

     

    OPIS:

    Spoiler

    Paczka map STALKERMAPS w wersji 2.0.

    Mapy:

    1) Cmentarz pojazdów
    2) Miasto duchów
    3) Prypeć. Dworzec kolejowy
    4) Radar Duga-1 (РЛС Дуга-1)
    5) Stacja w górach
    6) Tarasy (Террасы)

    Cechy:

    - Teraz można zamieniać mapy poprzez głosowanie. A to oznacza, że nie trzeba restartować serwera, męczyć się i tracić nerwy. Wszystko jest proste i łatwe - głosujemy i zmieniamy.
    - Różne przyjemne drobiazgi - bardzo ładne obrazy w podglądzie (niestety nie każdemu wyświetlają się poprawnie - zależy od ustawień)
    - Teraz dzień jest trochę dłuższy. To oznacza, że nie jest już konieczne organizowanie wyczerpujących głosowań w sprawie zmiany pogody.
    - Ulepszona optymalizacja. Małe opóźnienia. Łatwiej jest grać.

     

    LINKI:

     

    ŹRÓDŁO:

    https://www.playground.ru/stalker_shadow_of_chernobyl/file/s_t_a_l_k_e_r_mp_map_pack_2-860568

  14. 701a2f45b7b652b72.jpg

    NAZWA: Zadania | Zabicie mutanta "Press F To Win" [CoP]
    TWÓRCA: FantomICW, użyto prac z NPŚ
    POZIOM TRUDNOŚCI: ŚREDNI

     

    Stosunkowo niedawno użytkownik ap-pro Telnov1996 zadał jedno pytanie:

    Cytat

    Czy możliwe jest zorganizowanie oskryptowanych scen walki z mutantami 'Press "F" to win'?

    Do dyskusji włączył się drogi Dorian23Grey, i właściwie ja. Sytuacja wygląda następująco:
    1. Po pierwsze, na X-Ray sceny z animacjami w stylu CoD, Metro itp. nie są zbyt wygodne do zrobienia.
    2. Wymagana jest doskonała umiejętność animacji obiektów.
    3. Musisz ustawić interakcję logiki z timerami i animacjami.
    W tej chwili bardzo mało kto to zrobił. Jednak wariant, gdy GG zbliża się do mutanta i zostaje uruchamiony samouczek, po którym następuje wykonanie zabójstwa, jest całkowicie wykonalną funkcją.
    Załóżmy, że na Zatonie w obrębie Północnego jeziora osiedlił się wyjątkowy bagienny pseudo-olbrzym, którego nie biorą kule stalkerów. Jedynym szybkim sposobem na pozbycie się go, jest aktywacja artefaktu grawitacyjnego. Gdy GG podejdzie do mutanta z artefaktem, rozpocznie się samouczek z napisem "Aktywuj artefakt". Po wciśnięciu F, uruchomi się funkcja, która stworzy na miejscu mutanta cząsteczkę rozerwania od anomalii grawitacyjnej.

     

    PRZYGOTOWANIE DO DZIAŁANIA:

    Spoiler

    NARZĘDZIA:

    Spoiler

    - Notepad++

    - Paint.NET, Adobe Photoshop lub inny edytor tekstur (jeśli ktoś zechce tworzyć unikalną teksturę)

     

    TEKSTURA:

    Spoiler

    Jeszcze raz, jeśli chcesz stworzyć unikalną teksturę dla swojego mutanta to proszę. Warto zrobić nowy model lub teksturę, bo super fajny pseudo-gigant powinien się jakoś wyróżniać na tle swoich krewnych. Twórca lekcji zrobił słowną "reteksturę" (w cudzysłowie, bo żeby wymazać trochę krwi i "zazielenieć" teksturę - nie można tego nazwać reteksturą) potwora do bagna:

    9e02cdbcb63faa35.png

    Jeśli ktoś potrzebuje tekstury, to bierzcie (dołączony jest standardowy bump).

     

    CZĄSTECZKI/PARTICLES:

    Spoiler

    Dla dobrego efektu rozerwania ciała w anomalię, warto użyć cząsteczek od AMK:

    amk\\blow_body
    amk\\zomb_explode

    Kto je ma (lub ma zamiennik) - super, dobrze. Dla tych, którzy ich nie mają, nie martwcie się, trochę później zostaną wrzucone gotowe particles.xr, ale na razie zostaną dołączone dwie wersje tabeli cząsteczek dla obu przypadków.

     

    KOORDYNATY/WSPÓŁRZĘDNE:

    Spoiler

    Jeśli pracujecie nie w SDK, ale z ACDC, to będziecie musieli wziąć współrzędne miejsca, w którym będzie znajdował się mutant. Miejsce akcji (w przybliżeniu) zaznaczono na mapie:

    1.jpg

    Twórca pochodził trochę do przodu do wody i odczytał współrzędne:

    d7f5e24623.jpg

    -19.00901222229,-7.0012526512146,526.37811279297,907875,47

     

     

     

    PRAKTYKA:

    Spoiler

    CZĘŚĆ I - KONFIGI DIALOGÓW:

    Spoiler

    1. W configs/gameplay/dialogs_zaton.xml dodajemy dwa nowe dialogi:

    <dialog id="zat_super_psevdogig_take_task_dialog"> <!--Wzięcie zadania-->
                    <dont_has_info>psevdogig_task_dialog_done</dont_has_info>
                    <phrase_list>
                        <phrase id="0">
                            <text>zat_super_psevdogig_take_task_dialog_0</text>
                            <next>1</next>
                        </phrase>
                        <phrase id="1">
                            <text>zat_super_psevdogig_take_task_dialog_1</text>
                <next>2</next>
                        </phrase>
               <phrase id="2">
                            <text>zat_super_psevdogig_take_task_dialog_2</text>
                <next>3</next>
                        </phrase>
               <phrase id="3">
                            <text>zat_super_psevdogig_take_task_dialog_3</text>
                <next>4</next>
                        </phrase>
               <phrase id="4">
                            <text>zat_super_psevdogig_take_task_dialog_4</text>
                <next>5</next>
                        </phrase>
               <phrase id="5">
                            <text>zat_super_psevdogig_take_task_dialog_5</text>
                <give_info>psevdogig_task_dialog_done</give_info>
                <action>dialogs_zaton.give_super_psevdogig_task</action> <!--Wydajemy GG zadanie i artefakt-->
                        </phrase>
                    </phrase_list>
                </dialog>
             <dialog id="zat_super_psevdogig_task_end_dialog">
                 <has_info>zat_super_psevdogig_af_activation</has_info>
                    <dont_has_info>psevdogig_task_finished</dont_has_info>
                    <phrase_list>
                        <phrase id="0">
                            <text>zat_super_psevdogig_task_end_dialog_0</text>
                            <next>1</next>
                        </phrase>
               <phrase id="1">
                            <text>zat_super_psevdogig_task_end_dialog_1</text>
                <give_info>psevdogig_task_finished</give_info>
                <action>dialogs_zaton.give_super_psevdogig_task_reward</action> <!--Wydajemy nagrodę-->
                        </phrase>
                    </phrase_list>
                </dialog>

    2. Dopisujemy je Brodaczowi (sekcja zat_a2_stalker_barmen, plik character_desc_zaton.xml)

    <actor_dialog>zat_super_psevdogig_take_task_dialog</actor_dialog>
              <actor_dialog>zat_super_psevdogig_task_end_dialog</actor_dialog>

    3. W configs/text/rus/st_dialogs_zaton.xml umieszczamy tekst dialogów:

    <string id="zat_super_psevdogig_take_task_dialog_0">
              <text>Co słychać, Broda? Jest coś nowego?</text>
             </string>
             <string id="zat_super_psevdogig_take_task_dialog_1">
              <text>Cześć. Nic ciekawego nie ma z wyjątkiem tego, że na Północnym jeziorze pojawił się uber-pseudogigant, który nie daje stalkerom (i pseudomięsaczom też, co tu dużo mówić) spokoju... Stwór jest nie do zabicia.. Po naradzie z Gontą, postanowiliśmy spróbować usunąć go za pomocą artefaktu (mówię o pseudogigancie). Odpowiedni artefakt mam, brakuje tylko ochotnika dla tego zadania...</text>
             </string>
             <string id="zat_super_psevdogig_take_task_dialog_2">
              <text>Wiesz.. mógłbym wam pomóc.</text>
             </string>
             <string id="zat_super_psevdogig_take_task_dialog_3">
              <text>Spadłeś z Cementowni? Ta cholera może ciebie w trymiga położyć... Kto później będzie mi arty przynosił? Na kim Pilot będzie zarabiał? Krótko mówiąc, jesteś pewien, że chcesz pomóc?</text>
             </string>
             <string id="zat_super_psevdogig_take_task_dialog_4">
              <text>Tak. Nudzę się, po prostu)00)).</text>
             </string>
             <string id="zat_super_psevdogig_take_task_dialog_5">
              <text>A, okej, powodzenia. Trzymaj "Grawi" dla aktywacji. Bądź ostrożnyБудь аккуратен.</text>
             </string>
             <string id="zat_super_psevdogig_task_end_dialog_0">
              <text>Możesz spać spokojnie, staruszku. Nie ma więcej twojego uber-pseudogigabajta.</text>
             </string>
             <string id="zat_super_psevdogig_task_end_dialog_1">
              <text>Wow, słuchaj, co za spoko gość! Weź sobie ciastko.</text>
             </string>

    I to wszystko, jeśli chodzi o dialogi. Tutaj wszystko jest proste, więc twórca uznał, aby się szczegółowo o nich nie rozpisywać. Jeśli ta część wydawała ci się trudna, sorry, ale ta lekcja nie jest dla twojego poziomu wiedzy.

     

    CZĘŚĆ II - KONFIG ZADANIA:

    Spoiler

    1. W configs/misc/tm_zaton.ltx dodajemy sekcję zadania:

    [zat_super_psevdogig_task]
    icon = ui_inGame2_Logovo_krovososov
    prior = 10
    storyline = false
    title = {+zat_super_psevdogig_af_activation} zat_super_psevdogig_task_2, zat_super_psevdogig_task_1
    descr = {+zat_super_psevdogig_af_activation} zat_super_psevdogig_task_2_text, at_super_psevdogig_task_1_text
    target = {+zat_super_psevdogig_af_activation} zat_a2_stalker_barmen, zat_super_psevdogig_squad
    condlist_0 = {+psevdogig_task_finished} complete

    Trochę analizy:
    - ikonka jest z zadania na usunięcie legowiska pijawek
    - zadanie ma dwie fazy: część na likwidację mutanta i część, która wymaga rozmowy z Brodaczem (na tą część, aktualizacja następuje po otrzymaniu infoportion zat_super_psevdogig_af_activation, wrócimy do niej później)
    - w pierwszej części, znaczek zadania pada na oddział/squad/obóz mutanta (jego story_id - zat_super_psevdogig_squad), w drugiej - na Brodacza
    - zadanie kończy się po otrzymaniu informacji psevdogig_task_finished, która jest wydawana w już stworzonym przez nas dialogu
    Jak widzicie, struktura zadania jest bardzo prosta.

    2. Dopisujemy do configs/text/rus/st_quests_zaton.xml jego tekstową część:

     <string id="zat_super_psevdogig_task_1">
            <text>Pomoc leworękim: zlikwidować uber-pseudogiganta</text>
           </string>
           <string id="zat_super_psevdogig_task_1_text">
            <text>Miałem rację: wszyscy stalkerzy na Zatonie to krzyworękie bałwany. Muszę za nich usunąć bardzo silnego mutanta na Północnym jeziorze na Zatonie.</text>
           </string>
           <string id="zat_super_psevdogig_task_2">
            <text>Pomoc leworękim: złamać Brodzie nos</text>
           </string>
           <string id="zat_super_psevdogig_task_2_text">
            <text>Chcę powiedzieć kilka słów Brodaczowi. Czemu do jasnej cholery, ten grubas w egzoszkielecie nie powiedział, że na jeziorze czeka na mnie nie uber-pseudogigant, a Zatonowska Hydra?</text>
           </string>

    Przechodzimy do konfigów mutanta.

     

    CZĘŚĆ III - KONFIGI MUTANTA:

    Spoiler

    1. Plik configs/creatures/m_giant.ltx. Robimy sekcję naszego unikalnego pseudogiganta. Będzie ona praktycznie podobna do zwykłego pseudogiganta:

    [super_psevdogig]:m_gigant_e
    $spawn    = "monsters\gigants\super_psevdogig"
    visual    = monsters\psevdogigant\psevdogigant_uber   ;To nowy model
    corpse_visual      = monsters\psevdogigant\psevdogigant_uber_dead   ;To też
    rank    = 50  ;Zwiększamy rangę
    spec_rank   = strong   ;Pseudogigant Strong!
    radiation_pp_effector_name    =  postprocess_acidic   ;Dodajemy kwaśny/chemiczny postprocess
    attack_params   = super_psevdogig_attack_params  ;Nowa sekcja parametrów ataku
    
    [super_psevdogig_attack_params]  ;Zwiększony impuls
    ;--------------------------------------------------------------------------------------------------------------------------------------------    -
    ;    anim   | time[0..1] | hit_power | impulse | impulse_dir (x,y,z)   |    Field of hit_test  (left,right, top, bottom) |    Test Dist
    ;--------------------------------------------------------------------------------------------------------------------------------------------    -
    ;Bite
    stand_attack_0 =    0.25,  0.9,     200,        0.5, 1.0, 0.5,   -0.8, 0.8, -1.8, 1.8,       2.6
    ;Left leg Strike
    stand_attack_1 =    0.40,  0.9,     150,        5.0, 2.5, 4.0,   -0.6, 0.6, -1.8, 1.8,       3.2
    ;Bite2
    stand_attack_2 =    0.25,  0.9,     200,        0.5, 1.0, 5.0,   -0.8, 0.8, -1.8, 1.8,       2.6
    stand_attack_run_0=     0.5,  0.9,     600,        0.5, 1.0, 5.0,   -0.6, 1.3, -1.8, 1.8,       3.3
    jump_attack_1    =  0.1,  2.00,  1600,       0.5, 1.0, 5.0,   -1.0, 1.3, -1.6, 1.6,       5.5

    2. Następnie trzeba stworzyć oddział/obóz mutantowi w configs/misc/squad_descr_zaton.xml:

    [zat_super_psevdogig_squad]:online_offline_group
    faction = monster_special     
    npc = super_psevdogig  ;NPC w oddziale - nasz pseudogigant
    target_smart = zat_sim_2  ;Docelowy smart - wysepka na Północnym jeziorze
    spawn_point = zat_sim_2_giant_home  ;Spawn point - punkt "legowiska" dla mutanta
    story_id = zat_super_psevdogig_squad  ;Sid zbiega się z nazwą sekcji (wasz Кэп)
    

     

     

    CZĘŚĆ IV - LOGIKA MUTANTA:

    Spoiler

    1. Przede wszystkim otwórz plik logiki smartu wysepki - configs/scripts/zaton/smart/zat_sim_2.ltx, a na dole dodaj sekcję exclusive z linkiem do ekskluzywnej logiki giganta:

    [exclusive]
    giant = zaton\zat_sim_2_super_psevdogig.ltx

    W związku z tym, logika naszego mutanta nazywa się giant.

    2. Przechodzimy do samej logiki. Tworzymy plik zaton\zat_sim_2_super_psevdogig.ltx. Dopełniamy go:

    [logic@giant] ;Nazwa logiki - giant (patrzymy wyżej)
    suitable = {=target_squad_name(zat_super_psevdogig_squad)} true ;Logika jest dostępna tylko dla potwora z naszego squada/obozu/oddziału
    monster_job = true
    prior = 200
    active = mob_home@giant
    
    [mob_home@giant]
    on_info = %=restore_health% ;Zdrowie mutanta ciągle się zwiększa
    ;Jeśli dystans do GG jest mniejszy niż 7 metrów i GG ma kwestowy artefakt, a aktywnego tutorialu nie ma, to uruchamia się tutorial rozwalenia pseudogiganta:
    on_info2 = {=dist_to_actor_le(7) =actor_has_item(super_psevdogig_af_gravi) !has_active_tutorial} %=run_tutorial(zat_super_psevdogig_af_tutor)%    
    ;Jeśli dystans do GG jest większy niż 7 metrów i GG ma kwestowy artefakt, a tutorial został uruchomiony, to włącza się tutorial likwidacji pseudogiganta:
    on_info3 = {=dist_to_actor_ge(7) =actor_has_item(super_psevdogig_af_gravi) =has_active_tutorial} %=stop_tutorial%    
    ;Po otrzymaniu informacji "zat_super_psevdogig_af_activation", zabijamy NPC funkcji "kill_npc" z xr_effects.script:
    on_info4 = {+zat_super_psevdogig_af_activation} %=kill_npc%
    ;Po otrzymaniu informacji "zat_super_psevdogig_af_activation_begin", usuwamy NPC wogóle i uruchamiamy cząsteczki anomalii/rozerwania za pomocą nowej funkcji   
    on_info5 = {+zat_super_psevdogig_af_activation_begin} %=zat_super_psevdogig_explode_2%
    path_home = giant_home ;W way_zaton.ltx to - zat_sim_2_giant_home ("legowisko")
    ;Ustawienia ochrony "legowiska":
    home_min_radius = 20
    home_max_radius = 50
    aggressive = true

    3. Nadszedł czas użycia wcześniej uzyskanych koordynatów/współrzędnych. Rozpakowujemy all.spawn z pomocą ACDC lub używamy SDK Level Editor, aby stworzyć punkt dla potwora w way_zaton.ltx:

    [zat_sim_2_giant_home]
    points = p0
    p0:name = wp00
    p0:flags = 0x1
    p0:position = -19.00901222229,-7.0012526512146,526.37811279297
    p0:game_vertex_id = 47
    p0:level_vertex_id = 907875

    Zbieramy do kupy spawn.

     

    CZĘŚĆ V - KONFIG KWESTOWEGO ARTEFAKTU I TUTORIALU:

    Spoiler

    1. W logice wspomnieliśmy już o przedmiocie super_psevdogig_af_gravi. To jest sekcja kwestowego artefaktu, który będziemy aktywować. Otwieramy configs/misc/quest_items.ltx i dodaj go tam:

    [super_psevdogig_af_gravi]:device_pda
    visual    = dynamics\artefacts\af_gravi.ogf
    description   = st_af_gravi_descr
    inv_name   = st_af_gravi_name
    inv_name_short  = st_af_gravi_name
    inv_weight   = 0.5
    inv_grid_x   = 15
    inv_grid_y   = 0
    cost    = 12000
    can_trade   = false ;Nie wolno sprzedać
    quest_item          = true ;Nie wolno wyrzucić
    story_id            = super_psevdogig_af_gravi

    Standardowa sekcja kwestowego przedmiotu z "rodzicem" device_pda.

    2. Również w logice ogłosiliśmy uruchomienie tutorialu:

    %=run_tutorial(zat_super_psevdogig_af_tutor)%

    Wszystkie tutoriale gry znajdują się w pliku configs/ui/game_tutorials.xml. Jest całkiem możliwe, że poniższa sekcja może wydawać się dziwna. W rzeczywistości wszystko jest proste, ale warto lepiej przeanalizować to w osobnych lekcjach odnośnie HUD'a i GUI, więc teraz nie musisz się tym martwić. Najważniejsze parametry:

    <zat_super_psevdogig_af_tutor> <!--Nazwa-->
              <global_wnd/>      
                 <item>      
                     <disabled_key>quit</disabled_key>      
                     <length_sec/>      
                 
            <!--Po naciśnięciu F, jest uruchamia się funkcja xr_effects.zat_super_psevdogig_explode_1-->
                     <action id="use" finalize="1">xr_effects.zat_super_psevdogig_explode_1</action>      
                     <guard_key>use</guard_key>
            <!----Niżej są już inne parametry-->
                     <grab_input>0</grab_input>      
                         <main_wnd>
                         <!--Różne parametry tekstu. Ustawiono czcionkę na 32 i czerwony kolor (RGB). Sekcja tekstu - st_tutor_af_activation-->         
                         <auto_static start_time="0" length_sec="5000" x="512" y="660" width="300" height="60" alignment="c" stretch="1"la_cyclic="1" la_texture="1" la_alpha="1">      
                         <text font="graffiti32" r="225" g="36" b="36" a="255" align="c">st_tutor_af_activation</text>      
                         </auto_static>      
                         </main_wnd>      
                 </item>      
             </zat_super_psevdogig_af_tutor> <!--Tutaj sekcja tutorialu kończy się-->

    3. Następnie dodajemy sekcję tekstową st_tutor_af_activation, na przykład do pliku ui_st_screen.xml:

    <string id="st_tutor_af_activation">        
           <text>Aktywować artefakt ($$ACTION_USE$$)</text>
          </string>

    $$ACTION_USE$$ oznacza klawisz "Użyj". Jest to domyślnie klawisz F.

     

    CZĘŚĆ VI - SKRYPTY WSZYSTKIEGO:

    Spoiler

    1. Zacznijmy od dialogów. W każdym z dwóch uruchamiamy po jednej funkcji. Obie funkcje są w dialogs_zaton.script. Pierwsza:

    function give_super_psevdogig_task(first_speaker, second_speaker)
            dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "super_psevdogig_af_gravi") --Wydajemy "Grawi"
            task_manager.get_task_manager():give_task("zat_super_psevdogig_task") --Wydajemy zadanie
         xr_effects.create_squad(nil, nil, {"zat_super_psevdogig_squad", "zat_sim_2"}) --Spawnujemy squad/obóz/oddział potwora na smart'cie "zat_sim_2"
    end

    W drugiej będziemy wydawać nagrodę:

    function give_super_psevdogig_task_reward(first_speaker, second_speaker)
         local items_pack = {
             {item = "energy_drink", amount = 2},
             {item = "medkit_army",  amount = 3},
             {item = "antirad",      amount = 2},
             {item = "vodka",        amount = 1},
             {item = "conserva",     amount = 3},
         }
             
         for k,v in pairs(items_pack) do
             dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, v.item, v.amount)
         end
             
            dialogs.relocate_money_to_actor(first_speaker, second_speaker, 3000)
    end

    Używamy słownie złożonej tablicy items_pack. Każdy jej element składa się z dwóch punktów:
    item - sekcja przedmiotu
    amount - ilość, którą trzeba wydać
    Później jest cykl w postaci standardowego
    for k,v in pairs(nazwaTablicy) do
    To oznacza, że funkcja niżej może zostać wykonana dla każdego elementu tablicy (v). U nas jest to:

    dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, v.item, v.amount)

    Zwróćcie uwagę na v.item i v.amount.
    Cóż, nie widać nic skomplikowanego w wydawaniu pieniędzy dla GG.

    2. Ostatnią rzeczą, którą musimy zrobić, są dwie funkcje: jedna jest wydawana podczas korzystania z tutoriala, a druga z logiki. Dodajemy pierwszą funkcję do xr_effects.script:

    function zat_super_psevdogig_explode_1(actor, npc)
         db.actor:give_info_portion("zat_super_psevdogig_af_activation_begin")  --Wydajemy informację
         remove_item(actor, npc, {"super_psevdogig_af_gravi"})  --Zabieramy GG artefakt (zostaje aktywowany)
    end

    Znowu nic skomplikowanego. Dwie proste akcje. Warto zauważyć, że remove_item jest również funkcją z xr_effects.script. Teraz dodajemy drugą:

    function zat_super_psevdogig_explode_2(actor, npc)
            local fx_table_1 = {
             [1] = {particle = particles_object("anomaly2\\gravity_blast_final00")},
          [2] = {particle = particles_object("anomaly2\\gravity_blast_03")},
          [3] = {particle = particles_object("anomaly2\\gravity_blast_05")},
         }     
                 
            local npc_position = npc:position()
             
         for i = 1,3 do
                fx_table_1[i].particle:play_at_pos(npc_position)
         end     
             
         db.actor:give_info_portion("zat_super_psevdogig_af_activation")
         remove_squad(nil, nil, {"zat_super_psevdogig_squad"})
             
         local fx_table_2 = {
             [1] = {particle = particles_object("anomaly2\\body_tear_00")},
          [2] = {particle = particles_object("amk\\blow_body")},
          [3] = {particle = particles_object("amk\\zomb_explode")},
         }
             
         for i = 1,3 do
                fx_table_2[i].particle:play_at_pos(npc_position)
         end
    end

    Mamy dwie tablicy. Każda ma trzy cząsteczki (każda cząsteczka w poniższych funkcjach jest zadeklarowana jako: tablica.particle). Po co trzeba było dzielić ją na dwie tablice? Po prostu lepiej, żeby cząsteczki anomalii grawitacyjnej zostały odtworzone trochę wcześniej, niż cząsteczki ciała rozerwania ciała. Cykl tutaj jest zdefiniowany trochę inaczej:

    for i = 1,3 do
    

    Spójrz na ponumerowane elementy tablic, a wszystko stanie się jasne w tym cyklu.
    Należy również zauważyć, że skoro funkcja jest wywoływana bezpośrednio z logiki NPC, możemy ustawić wygodną zmienną lokalną, aby zadeklarować pozycję tego NPC w czasie rzeczywistym:

    local npc_position = npc:position()

    To jest npc, po którym dwukropek to pseudo-gigant (w zasadzie pozycja pseudogiganta). Spójrzcie na argumenty funkcji:
    (actor, npc)
    Używamy więc zmiennej lokalnej do wykonania funkcji z pętlą/tablicą:

    fx_table_1[i].particle:play_at_pos(npc_position)

    Przypisano wykonanie silnikowej funkcji play_at_pos przeznaczonej konkretnie dla cząsteczek. Jeśli nie masz cząsteczek AMK, zmieniamy drugą tablicę:

    local fx_table_2 = {
          [1] = {particle = particles_object("anomaly2\\body_tear_00")},
       [2] = {particle = particles_object("anomaly2\\body_tear_01")},
       [3] = {particle = particles_object("anomaly2\\body_tear_02")},
      }

    Poradziliśmy sobie ze wszystkim. Zobaczmy efekty pracy.

     

    EFEKT:

    Spoiler

     

     

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1031-cop-kvesty-ubiystvo-mutanta-press-f-to-win/

    • Ważne 2
  15. NAZWA: O scenarzystach i tworzeniu fabuły
    TWÓRCA: Gurich

     

    Kim jest "dobry scenarzysta"? Jakie cechy mogą definiować osobę jako scenarzystę i jakich cech scenarzysta nie powinien mieć? Jaka jest jego rola w zespole? Czy nieokiełznana fantazja wyobraźni scenarzysty jest dopuszczalna na pewnych etapach rozwoju fabuły? Jakie błędy są typowe dla nieprzemyślanych scenariuszy? Jakie są ukryte możliwości fabuły dla scenarzysty? Odpowiedzi na te i inne pytania znajdują się w poniższym artykule.

     

    Cytat

    „...W naszych czasach nie można ufać nikomu, czasem nawet sobie. Ja mogę sobie ufać”.

    (c) „Siedemnaście mgnień wiosny”

     

    CZĘŚĆ 1. PRZESZKODY DLA SCENARZYSTY:

    Spoiler
    1. Do potencjalnych scenarzystów. Będziesz kroczył granicą między profesjonalną obojętnością a dręczącym cię fanatyzmem. Pamiętaj: scenarzysta jest najbardziej nieszczęśliwą osobą wśród graczy. Nie, dawanie upustu kreatywności to rozkosz. Ale poza tym pomyślcie sami: on wie, o co w tym wszystkim chodzi – nawet wtedy, gdy gra nawet nie została przetestowana. Zdecydowanie będziesz czuł rozkosz i patos, gdy wyjdzie mod/gra, ale nie będziesz miał odrobiny przyjemności z pierwszego przejścia w pełni działającego produktu. Uwierzcie, że te ziarnka nowości z wprowadzonych nowatorskich pomysłów i uczucie "wszystkiego dowiem się wcześniej niż wszyscy", charakterystyczne dla niecierpliwych, zostaną dosłownie wciągnięte do końca przez bagno testów, lagów, wątpliwości i krytykę współpracowników. Do tego scenarzysta jest orędownikiem pomysłów odrzucanych przez kolegów. Wielkość twojej wyobraźni zostanie bezlitośnie ograniczona przez zasady i możliwości. Tak, i czasami to jest po prostu szkodliwe. Z tego powodu odporność na stres jest twoim mentalnym "ja". Dopóki nowy pomysł na świat zewnętrzny nie wejdzie do moda - do tego czasu będzie to dla ciebie przeciwwietrzny kawałek krwawiącego mięsa duszy, ugryziony przez kolegów. Horror, prawda? Nie oznacza to, że scenarzystów należy żałować, czy coś w tym rodzaju. Nieprawdopodobne! To tylko stwierdzenie i prawo do miejsca w całym procesie twórczym. A potem próba odstraszenia tych, którzy mają co do siebie wątpliwości, co przeciągnie ten proces do końca. To jest na długi czas, to jest wielka i ponura praca, przynajmniej miesiącami. Jeśli chcesz uznania wcześniej - nie bierz się za scenariusz i pisz fanowskie opowiadania na fora czy dla książek. Jeśli chcesz zagrać, będziesz musiał zamknąć się na długi czas.
    2. Wśród "techników" – mapperów, skrypterów, modelarzy – zaniedbuje się scenariusz, a także scenarzystów. Właśnie tam ludzie sami wiedzą, jak coś zrobić, ale każdy może wymyślać. Jeden problem: gdy już do tego dojdzie, okazuje się, że techniczna uporczywość i systematyczne myślenie, właściwe dla techników, są nie do pogodzenia z czystą fantazją. Pewnie są wyjątki, ale nie spotkano ich. Może dlatego większość zadań NS jest tego samego typu? Po prostu wyglądają jak to, co już było, a jest ich dużo, a są to zazwyczaj odnieś-przynieś-podaj. Dlaczego tak się dzieje? A dlatego, że technicy zajmujący się modowaniem wykonują swoją część pracy w oparciu o znany już materiał – warunki gry, komponenty programu, na działanie znanych już procesów, na znane już łańcuchy kolejnych dogmatycznych fabularnych wydarzeń, w tym oryginalnej fabuły. Do zdarzenia. Tylko jeden przykład: w AMK2 postanowiono stworzyć swoją fabułę od początku. Nawet z nową logiką NPC. I tak, tam gdzie początkowo był tylko Kordon, rozważano cztery razy - pierwsze dyskusje na temat NOWEJ fabuły wyglądały mniej więcej tak: "Żwawy, co z nim?", "Fabuła przed ATP", itp. Poważnie: wyobraźcie sobie, że przerabiacie całą lokację, przecinacie tunel przejściowy do Bagien, zmieniacie geometrię, sadzicie nowe rośliny, dodajecie nowe budynki, zamierzacie całkowicie utworzyć spawn NPC z nową logiką! A na fabułę - znowu Tolik, Żwawy, jeszcze bardziej ranny Lis, bandyci w ATP... Dlaczego? Tak, ponieważ dogmatyczne wydarzenia powinny już zachodzić wokół przedmiotów. A nie, kiedy pracujesz z oryginałem - grzebać w lokacji... 
      Ważne, abyście WY to powiedzieli. Jeśli oczywiście, naprawdę tego potrzebujesz, co musisz postanowić i zrobić.
    3. Innym częstym błędem jest wybieganie naprzód. Ogólny scenariusz z trzema do pięciu arkuszy z błędem +/- lokacja wystarczy, aby nakreślić listę lokacji i wydarzeń na nich. Nie spiesz się z pracą nad szczegółowym scenariuszem, dopóki prace nad lokacjami nie zostaną zakończone. O ile oczywiście zespół bezpośrednio nie tworzy lokacji pod scenariusz. Ale jeśli tylko modyfikujecie - poczekajcie na buildy lokacji. W przeciwnym razie fabuła może zostać "planem", do których nie będzie realnych dekoracji, scenariusz zamieni się w sen, a scenarzysta będzie w zasadzie zabawiał fabułami swoich towarzyszy w bitwie, kosztem czasu, który mógłby przeznaczyć na np. pomysły, dialogi i zadania . Zadaniem scenarzysty jest ulepszenie wykonanej podstawy, a nie bajki na dobranoc.

     

    CZĘŚĆ 2. WYBÓR:

    Spoiler

    Ta część tekstu jest dla tych, którzy zdali sobie sprawę, że sami nie są w stanie opanować fabuły i zadają pytania. Pomińmy okres samoumartwień "potrzebnych czy nie", załóżmy, że ekipa zdecydowała: potrzebny jest scenarzysta. Załóżmy, że ma kandydatów. Czyż mało jest fanów...

    1. Znalezienie specjalisty do projektu jest jak szukanie muzyka do zespołu. Są płatni zawodowcy oraz tacy, którzy "żyją teraźniejszością", itd. Następnie rozważamy opcję bezrobotnego, ponieważ przy pracy za pieniądze wszystko i tak jest jasne. Najpierw dowiedz się, czego kandydat oczekuje od procesu. Osobiście, jeśli uznamy go za autora. To świetny sprawdzian na perspektywy. On chce się jakoś realizować (a nie zespół) i to jest ważne. Czy jest gotów zainwestować w to największą wartość na świecie - swój czas. Czy jego ostateczny cel jest połączony z wynikiem zespołu. Jeśli to nie pasuje, to i tak rozstaniecie się. Na przykład dobre motywacje: dana osoba może chcieć wziąć to w swoje ręce, poćwiczyć prozę, dialogi, wydać zbiór opowiadań, wdrożyć je w grę/z grą, itp.
    2. Poproś kandydata o napisanie testowego scenariusza lub historii w oparciu o Twoje dane wejściowe: lokację, obecność NPC, konkretną nadzwyczajną sytuację. Na przykład w Strefie znaleziono ropę.)) Nie dostarczać mu gotowców, a mianowicie budować od zera. Jeśli będzie żałował dla przyszłego zespołu 50 tysięcy znaków - po co ci taki leń? Nadal będzie leniem. Oczywiście zespół musi najpierw pokazać przykład zaniedbania - zademonstrować swoje możliwości i ewentualny przyszły projekt. To wielki bodziec i przesłanie do wzbudzenia entuzjazmu. A jeśli zespół nie może sam czegoś pokazać - to czego do cholery może chcieć?
    3. Nie organizujcie konkursów eszelonowych, trzydziestu trzech rund, jeśli nie macie trzystu trzydziestu trzech kandydatów. Nie staraj się wyglądać super formalnie, obficie sypiąc komunikatami prasowymi, jeśli w rzeczywistości jesteście grupą entuzjastów. Mądra osoba zobaczy patos i kłamstwa i to go odrzuci. Czy potrzebny jest wam głupi scenarzysta? Nie dręcz osoby niepewnością i brakiem odpowiedzi, udając szefostwo. Oczekiwania są najgorszym wrogiem entuzjazmu. Albo nad tym pracujesz, albo przygotowujesz pieniądze, w każdym innym przypadku okaże się to ciężarem.
    4. Co najważniejsze – scenarzysta musi być generatorem nowych pomysłów. Jeśli napisał poprawne wypracowanie, w 100% zgodne z twoimi danymi wstępnymi, ma problemy z fantazją. Normalna równowaga "twojego" wypracowania wynosi 50-70%. Mniej niż "twój" – da ci bukiet romantycznych, ale niemożliwych do zrealizowania lub niezgodnych z pierwotną koncepcją pomysłów. Więcej niż "twój" - najprawdopodobniej wymyślisz dla niego coś nowego.

     

    CZĘŚĆ 3. SCENARZYSTA W ZESPOLE:

    Spoiler

    W tej części domyślnie zakłada się, że w zespole, scenariuszem zajmuje się kilka osób. Ktoś pisze dialogi "o pogodzie", ktoś wymyśla zadania, ktoś zbiera wydarzenia do głównej linii i prowadzi głównego bohatera.

    1. Zdecyduj się na hierarchię. Czasem w przypływie demokratycznego złudzenia, że "trzy głowy to nie jedna", każdemu daje się "równe prawa". Nie powinno być więcej niż jednego głównego scenarzysty, w przeciwnym razie pomysły konkurentów będą na siebie nachodzić i proces/rezultat zdecydowanie zmarnieje. Sytuacje anarchistycznej rekrutacji dodatkowych pisarzy, które po odrzuceniu im osobiście w odwecie po prostu ograniczą twoje inicjatywy tylko dlatego, że są twoje. Właśnie dlatego potrzebujemy seniora, redaktora, który poprowadzi główną linię.
    2. Daj każdemu oddzielne zadanie. Osobie od dialogów - niech pisze dialogi. Osobie od zadań - niech tworzy zadania. Redaktorowi - uzgodnić ogólną linię, dopracować ją do ogólnej fabuły. I oczekujcie wyników w określonym czasie. Jeśli są dialogi, a ich generator jest pełen innych pomysłów - wziąłeś nie tego, on jest balastem.
    3. Opracuj politykę dialogu postaci. Jeśli twój GG jest pełen żartów w lokacji Zaton, ale suchy jak drewno opałowe w lokacji Bagna, nie ma wątpliwości, że oddałeś postać na łaskę dwóch bardzo różnych ludzi. W większości sytuacji dialogi są potrzebne do działania, ale w przypadku Sidorowicza, Sacharowa, Doktora czy Naznaczonego lepiej oddać postać jednej osobie. Nazwijmy to dubbingiem. Niech osoba odpowiedzialna za postać po prostu stylistycznie zredaguje ostateczny tekst "swoich" replik, to wystarczy i nikt się nie obrazi. Oczywiście postacie nie powinny mówić tym samym językiem, gdy słownictwo wszystkich jest takie samo.
    4. Staraj się unikać całkowitego oddawania lokacji do pracy przez poszczególnych scenarzystów, gdyż w tym przypadku ryzykujesz zepsuciem dynamiki: Wietnamczycy i Niemcy dopiero co byli na Agropromie, a potem w Dolinie Mroku - dużo rozmowy z melancholijnym strzelaniem. A nawet bez strzelania.

     

    CZĘŚĆ 4. INNE RZECZY. COŚ W RODZAJU WSKAZÓWEK:

    Spoiler

    Tylko kilka obserwacji. Ponieważ scenarzysta zajmuje się prawie wszystkim - o wszystkim po trochu.

    1. Zadania. Wszyscy byli bombardowani zadaniami takimi jak: 1) znajdź mi to, 2) przynieś mi tamto, 3) przynieś mi to w zamian za tamto, 4) znajdź kogoś, z kim możesz porozmawiać o tym, gdzie to zdobyć i co przynieść w zamian. Oznacza to, że wszyscy normalni ludzie stoją jak filary w Strefie, a pośrodku biega poparzony Naznaczony, z którego wszyscy się śmieją. Co robić? Pisz zadania jako pełnoprawne historie, pisz super zadania. Super zadanie to zadanie modułowe, które po ukończeniu odsłania nie tylko dodatkowe informacje, ale pełnoprawną historię, wieloetapową przygodę, całkowicie niezależną od głównego wątku fabularnego. Fabuła całej gry jest oczywiście trudna do napisania, jest to proces kolegialny, ale sama przygoda na kilka dni grania nie jest takim problemem i jest w zasięgu jednej osoby z wyobraźnią. Zawsze zaczyna się od zagadki. Na przykład: odkryto niezniszczony dom bez lokatorów, znaleziono ciężarówkę z nieoszlifowanymi diamentami, Bill Gates zniknął w Strefie, Leśnik wyhodował rzadką odmianę berberysu, na krzakach którego wyrosły lecznicze jagody… Jeśli potrafisz wymyśleć początek, to wymyślisz kontynuację. GG nie powinien szukać przedmiotu nr 22054, ale może poznać nowe informacje o fabule. Oczywiście będzie to nieco dłuższe niż "przynieś-podaj-zabij", ale będzie wyglądać lepiej. Wymyśl nowe okoliczności dla powtarzających się zadań. Na przykład: żeton-śmiertelnik, który jest u każdego NPC. Powoduje to a) poszukiwanie osób, b) poszukiwanie schowków z trupów, c) poszukiwanie zabójców stalkera lub świadków morderstwa.
    2. Prawie każde zadanie w taki czy inny sposób opiera się na wykonaniu jakiejś czynności. Weź/oddaj przedmiot, otwórz dialog, zabij stwora. Ale jednocześnie nic nie stoi na przeszkodzie, aby pięknie ją ułożyć, rzucając sobie kurz w oczy. Koszmarem gry jest dosłowność zadań pośrednich. "Weź artefakt od Siwego", "Powiedz Leśnikowi" - do czego służą te rzeczy? "Wróć do Sidorowicza" jest generalnie czymś nieprzyzwoicie nudnym. "Idź do Doliny Mroku" - "zapytaj stalkerów" - "porozmawiaj z Turystą" - "znajdź mutanta" - "uratuj Garika" - "Wróć do Turysty" - "porozmawiaj z Garikiem" - "znajdź część mutanta ciała" - "wróć do Turysty-2" - "powiedz Sidorowi". Czy naprawdę nie można w jakiś sposób użyć bardziej ogólnych słów, na przykład: „Wyjaśnij, dlaczego ludzie znikają w Dolinie Mroku”. Niech zamiast wszystkich nudnych rzeczy, gracz lepiej czyta historię w częściach! Te wszystkie kopniaki z amebowymi akcjami i komendami przy każdym kichnięciu są po prostu okropne. W AMK2 w sporach argument typu "nierozgarnięty gracz" wybrzmiewał niemal bez przerwy. Stąd były polecenia typu "schowaj broń", "podążaj za Ponurym", "zbadaj lokację" (i tak byłeś na niej, mądralo, nie zgadniesz, tak...). Cóż, gracz nie zgadnie, od kogo potrzebuje nagrody, trzeba mu wysłać telegram. Więcej niż wystarczające powiadomienie "zadanie wykonane, nagroda czeka". Ogólnie możesz sobie poradzić z ikoną "gotowe" w PDA. Co do reszty, dlaczego nie zrobić solidnych łamigłówek i zagadek? To gra, a nie proces.
    3. Ekonomia w grze nie istnieje. Dla materiałów części questów jest to po prostu archaiczne. Nagrody w oryginale są śmieszne, nikt się nimi nie zachwyca. To oczywisty fakt. Gospodarka nie tylko jest wypaczona, ona po prostu nie działa. GG nie ma potrzeb, łupy są wszędzie. Nie trzeba wycinać łupów i podnosić cen, to tylko zatrzyma gospodarkę. Konieczne jest - stworzenie aktywnych potrzeb GG. Zwiększ obroty. Pozwól kupcom kupować artefakty w zestawach lub w ilościach handlowych, aby nie można było ich znaleźć w ciągu 3 dni. Niech identyfikacji artefaktów towarzyszy poszukiwanie informacji na ten temat (i ach, jak głęboko jest ona ukryta). Niech wydobycie z anomalnych pól wymaga specjalnego przeszkolenia. Naznaczony pójdzie do handlarzy. Właśnie. Tego wymagano. A ceny dwa razy wyższe od nominalnej będą wystarczające, GG zacznie kupować. Spraw, aby nie można było znaleźć amunicji przeciwpancernej, i przebijała ona pancerz. GG zacznie kupować. Spraw, aby GG był spragniony co 4 godziny, a butelki z wodą nie walały się pod Twoimi nogami. Gdzie pójdzie po wodę? Jeśli jedzenie zepsuje się w jeden dzień w schowku, a po dwóch - zniknie - gdzie pójdzie po żarcie? Zrób tak, aby ulepszone bronie stały się powszechne w Strefie i w większości były gorszej jakości niż nieulepszone. GG zacznie kupować zwykłe AKS'y. Niech ich naprawa stanie się prerogatywą tylko dla wojska, a on będzie się z nimi komunikował. Wszystko to w ten czy inny sposób rozwinie się w zadania, czyli w jedzenie i pracę scenarzysty. Handel, artefakty, obieg broni, a co najważniejsze - uzasadnienie, legenda dla tego wszystkiego - powinny być zawarte w ogólnej koncepcji. Nawet skrajna niesprawiedliwość (jeśli gra tego wymaga) zostanie bez wątpienia zaakceptowana przez graczy, jeśli jej okrutna potrzeba jest wpisana w życie Strefy, a jest to dzieło wyjątkowo dobrze zawieszonego języka. To znaczy scenarzysty.
    4. Staraj się unikać dzielenia na "poprawnych" i "niepoprawnych". Nędzni bandyci, hype'owana "Powinność", paląca "Wolność", popieprzeni wojskowi-naukowcy… W Strefie albo jest się silnym, albo martwym, prawda? A czy jest się dobrym czy złym to drugie pytanie. GG to generalnie lider szabrowników, ile on już trupów przeszukał! Niech poszczególni przedstawiciele grup działają w sposób, którego nikt się nie spodziewa. Niech naukowcy chcą pieniędzy, niech Powinność zabija człowieka na rozkaz służb specjalnych, niech bandyci was ratują! Cóż, chociaż z raz. Będzie to bardziej interesujące niż strzelanie do każdego, kto jest zły.
    5. Więcej mistycyzmu! Nie magików w niebieskich helikopterach, które czasami pojawiają się znikąd, by kupić groszowe łupy, których nie starcza na zużytą naftę, ale mistyczne myśli w bohaterach! Nie są oni profesorami nauk ścisłych. Niech GG zostanie wysłany, aby złapać wiedźmę, zabić goblina lub utopić wodniaka! Inną kwestią jest to, co on tam znajdzie. To jest bardziej interesujące niż "przynieś mi 134-ty niebieski pendrive". Tworząc zagadkę, wskazówki nadal nie są technicznie tak interesujące w większości. Stalkerzy są przesądni jak nikt inny, więc dawaj plotki, wierz, akceptuj - nawet te najbardziej idiotyczne! Każde przekonanie jest potencjalnym poszukiwaniem, a jego ciekawość zależy bezpośrednio od idei tego obskurantyzmu.
    6. Niech każdy wykonuje swoją pracę, tylko swoją i na czas. Scenarzysta nie powinien wymyślać nowej siatki artefaktów, mapper nie powinien modelować kwestowych przedmiotów, ekonomista/skrypter nie powinien pisać dialogów. Przy najbardziej udanych okolicznościach opracowanie od podstaw fabuły moda na lokację zajmie Ci miesiąc. Policz, ile będzie lokacji. Dlatego nie należy odkładać do jutra tego, co należało zrobić wczoraj. W AMK2 był jeden mapper, który przez cały okres pobytu w teamie brał się za dwie lokacje, wymyślił jeszcze dwie i też wziął się za nie, i ostatecznie nie zrobił ani jednej. Za to jest wiele pomysłów, tak.
    7. Nasyć wydarzeniami tereny, które główny wątek fabularny opuścił. Opuszczone lokacje są szalenie nudne. Tylko nie ganiaj gracza na siłę do Kordonu, a potem do Prypeci, tylko po to, żeby biegł i było trudniej. To nie jest trudne, to jest nudne. Znacznie lepiej jest korzystać z lokalnych super zadań. Jeśli nie ma już tajemniczych przedmiotów, wprowadź tajemnicze postacie, nowe anomalie, po prostu idiotyczne sytuacje. Nieoczekiwana komisja wojskowa, przemytnicy przeciągnęli kabel i zorganizowali anomalną elektrownię, w okolicy widziano gadającą pijawkę, stalkerzy opowiadają o upiornym spotkaniu graczy w borze - w końcu można to pchnąć w dowolne miejsce w Strefie.
    8. Nie mieszaj polityki do gry. Po ludzku wypacza się od dziwactw w stylu "skoro to jest Ukraina, to powinno być po ukraińsku/walutą powinna być hrywna/SBU”. Jest to szkodliwe po prostu klimatycznie: przeciętny Rosjanin raczej nie ma pojęcia o mentalności ukraińskich urzędników, są ludzie, którzy Karpat nie widzieli i mają to gdzieś, a przeciętny mieszkaniec Mińska raczej nie zrozumie sensu moskiewskich dowcipów o "nowych Rosjanach". Każdy z nas ma w sobie piękno lokalizowania przestrzeni życiowej. Wszystko jest prostsze: albo gramy, albo nie gramy. Albo wszystko jest poważne, ale potem jest w innej piaskownicy.
    9. Scenarzysta obowiązkowo musi być testerem. Byłoby wstrętne, gdyby ktoś eksperymentował z fantazją na innych. Cóż, szybko poznasz dynamikę gry, jej możliwości i brak możliwości.

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1025-o-scenaristah-i-sozdanii-syuzheta/

    • Dodatnia 2
  16. image.jpg

    NAZWA: Tworzenie typowych zadań [SoC]

     

    Na PDA Naznaczonego pojawiło się kolejne zadanie - znalezienie i likwidacja wilka-pustelnika w głuchym gąszczu. Mroczny, ciemny las. Dzwoniąca cisza. Brak widocznych oznak życia. Nagle Naznaczony widzi na skraju dom, wchodzi do środka i spotyka się z właścicielem, który opowiada głównemu bohaterowi o wszystkich horrorach, jakie dzieją się w tych miejscach.

    Nie, to nie jest fabuła kontynuacji "Stalkera", a tylko jedna dodatkowa misja. Dzisiaj pójdziemy dalej - zajmiemy się pisaniem prostych standardowych zadań do gry.

    Szybki start:

    Ponieważ oficjalny edytor nie pozwala na edytowanie poziomów w trybie dla pojedynczego gracza, a co za tym idzie, edytowanie plików skryptów, ścieżek chodzenia NPC i innych zasobów, zadania będziemy pisać w… zwykłym Notatniku. Takie podejście ma tylko jedną wadę, która odstrasza większość twórców modów - brak wygodnej powłoki, po prostu nie ma edytora do przeglądania zawartości plików. Ale jest znacznie więcej plusów: możliwość edycji dowolnych parametrów, kody źródłowe otwarte do edycji i wiele więcej. Gra jest warta świeczki.

    Od czego zacząć? Przede wszystkim poćwiczmy tworzenie prostych, typowych zadań typu "zabij stalkera", "rozwal oddział stalkerów", "znajdź cenny artefakt".

     

    TWORZENIE ZADANIA:

    Spoiler

    Uruchom Notatnik i wczytaj plik task_manager.ltx z katalogu gamedata\config\misc z rozpakowanej grą (jeśli masz zainstalowaną niedawno wersję Stalkera, rozpakuj dane gry za pomocą narzędzia S.T.A.L.K.E.R. Data Unpacker). Plik zawiera informacje o najprostszych zadaniach w grze. Jego struktura jest następująca.

    W pierwszej części pliku - od operatora do słowa kluczowego sar_monolith - ogłaszane są specjalne etykiety odpowiedzialne za przyłączenie nowych zadań do gry. Przykładem jednej z takich konstrukcji jest kombinacja liter tm_kill_stalker_5, jest to nazwa typowej misji. W drugiej części pliku - po słowie kluczowym sar_monolith - umieszczane są teksty zadań: cele, zadania, linki do dialogów. Przeanalizujmy strukturę jednego z zadań, zaczynając od specjalnej etykiety [tm_kill_stalker_3] (zwróć uwagę, że deklarując zadanie w pierwszej części pliku, nie musisz stawiać nawiasów kwadratowych):

    [tm_kill_stalker_3]
    type = kill_stalker
    community = actor
    text = tm_kill_stalker_3_text
    description = tm_kill_stalker_3_descr
    parent = trader
    target = sim_stalker_novice
    ;reward_money = 1000
    reward_reputation = -5
    reward_rank = 2
    reward_item = af_blood
    time = 86400
    prior = 2

    Rozważmy główne parametry. Pierwszy - type - odpowiada za rodzaj zadania, w tym przypadku - zabicie stalkera (kill_stalker). Gra udostępnia kilka rodzajów standardowych zadań:

    • zniszczenie/ochrona obozu (parametr eliminate_lager/defend_lager),
    • zabójstwo stalkera (kill_stalker),
    • szukanie artefaktu/części ciała mutanta potwora/przedmiotu (artifact/monster_part/find_item).

    Ponieważ nie ma specjalnych edytorów i narzędzi do zmiany Stalkera, musisz edytować skrypty w Notatniku, a teksty gry w edytorze arkuszy kalkulacyjnych Excel. Niezbyt wygodne, ale po prostu nie ma alternatywy.

    Parametr community określa frakcję, do której należy główny bohater. Domyślnie we wszystkich misjach słowo kluczowe actor (postać) jest używane jako wartość tej cechy.

    text - nazwa wpisu w pliku stable_task_manager.xml zawierającego tekst zadania. Tekst jest wyświetlany w oknach dialogowych.
    description - jest wpisem w pliku stable_task_manager.xml. Jest to tekst misji wyświetlany w PDA Naznaczonego.

    Kolejne ustawienie - atrybut parent - określa nazwę zleceniodawcy, w tym przypadku trader (handlarz Sidorowicz).
    target - cel misji, w bieżącym zadaniu - zabicie jednego ze stalkerów - novice (sim_stalker_novice).
    reward_money - nagroda, którą gracz otrzyma po ukończeniu zadania.
    reward_reputation - liczba punktów reputacji dodawanych graczowi po wykonaniu zadania. Możesz obniżyć reputację Naznaczonemu za ukończenie zadania, ustawiając dowolną ujemną wartość całkowitą jako wartość atrybutu.
    reward_rank - liczba rangowych punktów za ukończenie misji.
    reward_item - bonusowe przedmioty przyznawane głównemu bohaterowi za wykonanie zadania.
    time - czas (w sekundach), w którym gracz musi wykonać misję.
    prior - priorytet tego zadania. Numer 1 jest ustawiony, jeśli zadanie jest niezwykle ważne.

    Czas poćwiczyć i zmodyfikować niektóre oryginalne zadania z gry. Odszukujemy linię [tm_kill_stalker_5] (aby wywołać menu wyszukiwania w Notatniku użyj skrótu klawiszowego Ctrl+F) i modyfikujemy parametry tej misji.

    Na przykład możesz po prostu podnieść/zmniejszyć poziom trudności gry, zwiększając lub zmniejszając czas przydzielany graczowi na wykonanie zadania (parametr time), usunąć ikonę blokady linii (symbol ?, reward_money (nagroda pieniężna) lub, powiedzmy, ustawić parametr reward_reputation na 0, aby Naznaczony nie tracił reputacji w Strefie.

    Chaos tekstowy

    Opracowaliśmy edycję kodu źródłowego misji. Przejdźmy dalej i zacznijmy modyfikować teksty gry. Zaglądamy do katalogu gamedata\config\text\rus lub gamedata\config\text\pol zainstalowanej gry, szukamy w nim pliku stable_task_manager.xml i otwieramy go za pomocą edytora arkuszy kalkulacyjnych Microsoft Excel.

    Po uruchomieniu programu zobaczysz, że wszystkie informacje z pliku XML zostaną rozłożone na dwie kolumny - A i B, które odpowiadają nazwom id (numer identyfikacyjny) i text (tekst). Jeśli zejdziesz płynnie w dół kolumny id, to łatwo ustalić tzw. regularność. Linie 3, 6, 9, itd. zawierają tytuł typowej misji. Linie 4, 7, 10, 13, 16 z końcówką _descr - krótki opis (cel zadania) wyświetlany na PDA głównego bohatera. A linie 5, 8, 11, 14 i dalej, kończące się na _text, zawierają tekst wyświetlany podczas dialogu z postacią, od której otrzymałeś zadanie. Dlatego, aby zmienić teksty jednego lub drugiego zadania jednopoziomowego, określonego w pliku task_manager.ltx, musisz wykonać następujące proste manipulacje. Przede wszystkim skopiuj do Notatnika nazwę konkretnej misji z task_manager.ltx (bez nawiasów kwadratowych), jej opis do wyjścia na PDA (parametr description) oraz tekst dialogu (text). Następnie po kolei wyszukaj zapisane słowa kluczowe w pliku stable_task_manager.xml i zmodyfikuj tekst każdego z wpisów. Po zakończeniu edytowania zadania zapisz zmiany i przetestuj zadanie w grze.

    Drobnostki dot. tworzenia zadań

    Aby zostawić swój autorski ślad w pliku task_manager.ltx, a właściwie w dowolnym pliku konfiguracyjnym Stalkera, wystarczy w odpowiednim miejscu (po kodzie lub z nowej linii) postawić symbol średnika i po nim wstawić komentarz, na przykład: tm_eliminate_camp_4 ;komentarz do gry, nie usuwać

    Nie wszystkie zadania napisane przez twórców znalazły się w oryginalnej grze. Co, nigdy o tym nie słyszałeś? Następnie należy pamiętać, że na przykład plik task_manager.ltx zawiera wiele skomentowanych, ale całkiem funkcjonalnych zadań, których celem jest zabijanie stalkerów i wyszukiwanie przydatnych rzeczy. Po dokładnym przeszukaniu dokumentu pod kątem obecności tego rodzaju zadań znaleziono następujące zablokowane zadania:

    ;--[barmen_eliminate_camp_3]
    ;--[barmen_find_item_1]
    ;--[barmen_find_item_2]
    ;--[barmen_find_item_3]

    Aby odmienić rozgrywkę S.T.A.L.K.E.R. wystarczy skorygować zaledwie kilka parametrów każdej typowej misji w pliku task_manager.ltx. Alternatywnie możesz znacznie skrócić czas przeznaczony na ukończenie każdego zadania, obniżyć punkty reputacji za ukończenie danej misji, ale jednocześnie kilkakrotnie zwiększyć liczbę bonusów i gotówki.

    Tworzenie zadań

    Teraz, gdy poznałeś już podstawy edytowania tego samego typu zadań w grze, możesz spróbować swoich sił w napisaniu własnego zadania - stworzyć niezbędne wpisy w menedżerze zadań (plik task_manager.ltx), a także opatrzyć zadanie opisami tekstowymi.

    Uruchom Notatnik i wczytaj plik task_manager.ltx z katalogu gamedata\config\misc. Znajdź słowo kluczowe sar_monolith i dodaj po nim następującą konstrukcję w nowym wierszu:

    ; Wasz autorski komentarz
    [mission_name]

    Tutaj [mission_name] to dowolna nazwa zadania, na przykład tm_kill_stalker_7.

    Aby zmienić balans gry, musisz edytować kody typowych zadań.

    Następnie skopiuj do schowka jakieś typowe zadanie, na przykład [tm_kill_stalker_2] i umieść duplikat na samym końcu dokumentu. Zmień nazwę sklonowanej misji, ujętej w nawiasy kwadratowe, na nazwę misji, którą zadeklarowałeś na liście zadań. Zmodyfikuj parametry oryginalnej misji, jeśli to konieczne, dodaj dodatkowe komendy do kodu misji. Co najważniejsze, nie zapomnij poprawić wartości parametrów tekstu i opisu, które odpowiadają nazwom tekstowych rekordów w plikach gamedata\config\gameplay\storyline_info_taskmanager.xml i gamedata\config\text\rus\stable_task_manager.xml. Następnie otwórz plik storyline_info_taskmanager.xml z katalogu gamedata\config\gameplay za pomocą Notatnika i dodaj następujący blok na końcu pliku:

    [descr]
    

    W tym fragmencie kodu [descr] jest wartością parametru description w ciele misji (w naszym przypadku tm_kill_stalker_7_descr). Pozostaje dokonać zmian w pliku stable_task_manager.xml, który zawiera teksty zadań w języku rosyjskim. Przejdź do katalogu gamedata\config\text\rus i użyj dowolnego edytora arkuszy kalkulacyjnych, na przykład programu Excel, aby otworzyć plik stable_task_manager.xml. Przesuń suwak po prawej stronie programu na dół dokumentu. W komórce na przecięciu 391 linii i pierwszej kolumny wpisz słowo kluczowe odpowiadające nazwie Twojego zadania w pliku task_manager.ltx. Następnie w polu obok (komórka B-391) wpisz nazwę przyszłego zadania.

    W polu A-392 (A to nazwa kolumny, 392 to numer porządkowy wiersza) wpisz nazwę podaną jako parametr description Twojej misji, a w polu B-392, tekst wiadomości, która zostanie wysłane do PDA głównego bohatera. W komórce A-393 wpisz wartość charakterystycznego text dla Twojej misji, a w polu obok wpisz treść zadania, które ma się wyświetlać podczas rozmowy pomiędzy Naznaczonym a zleceniodawcą. Zapisz zmiany i zamknij edytor arkusza kalkulacyjnego.

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1050-soc-sozdanie-tipovyh-kvestov/

    • Dodatnia 1
    • Ważne 1
  17. NAZWA: Rola wydarzeń w offline w tworzeniu fabuły
    TWÓRCA: Murarius

     

    "Często twórcy modów wskazują na obecność "zupełnie nowej fabuły" jako cechy nowego, mniej lub bardziej rozbudowanego moda. Tak powszechnie, że nowy mod bez nowej fabuły nie jest już klasyfikowany jako "nowy mod". W tym krótkim artykule pozwolę sobie rozwinąć myśl: tworzenie nowej fabuły od podstaw jest całkowicie opcjonalne i znacznie bardziej pracochłonne niż ponowne przemyślenie jakiejkolwiek istniejącej fabuły, ponieważ każda fabuła zawiera już prawie nieograniczone możliwości samorealizacji autora, a te możliwości tkwią w wydarzeniach offline lub w wydarzeniach, które nie są w żaden sposób wyjaśnione w toku fabuły."

     

    PRZYKŁAD Z ASORTYMENTEM HANDLARZY:

    Spoiler

    Na początek warto zignorować fakt, że każda wizja Strefy jest inna. Jest to zrozumiałe, ale lepiej po prostu przez to przejść, bo inaczej argumenty na temat "poprawności" lub "niepoprawności" fabuły tracą sens. Ale nie sposób nie stwierdzić, że nogi "smutnej" rozgrywki często wyrastają z mizernej fabuły, a raczej - z nieuważnie realizowanej. Osobiście widać jeden (choć oczywiście nie jedyny) ważny powód, dla którego "staje się jasne: nie, to nie to" – zbyt duża część fabuły jest przenoszona do offline lub pozostaje offline, zbyt wiele "domyślam się, co się stało", chociaż wszystko to można również wdrożyć online lub przynajmniej wyjaśnić.

    Typowym przykładem jest asortyment kupców. Weźmy cierpliwego Sidorowicza: wiele realizacji jego asortymentu, od stałej dostępności po losowe. Co decyduje o wyborze konkretnego schematu? Wizja autora, chęć wyrównania. Świetnie. Jest to realizowane w następujący sposób:

    oto przykład implementacji, prosty lub złożony, darmowy lub hardcore

    tutaj przykład realizacji, prosty lub złożony, darmowy lub hardkorowy

    I to wszystko. Nic więcej nie jest wyjaśnione. Konkluzja: Sidorowicz ma taki lub inny asortyment i ma go offline. Ale jak on to dostaje? To jest ten moment, który został pominięty.

    Jeśli weźmiesz pod uwagę oryginalną mapę, na przykład od CCz, stanie się jasne, że Sidor ma tylko dwie opcje zdobycia czegoś:
    1) z posterunku na południu;
    2) od stalkerów (bandytów, wojskowych, cokolwiek) z wnętrza Strefy.
    No dobrze, trzy: mogą zrzucić coś z helikoptera.

    Tak więc, moment fabularny i zasady uzyskiwania nie są nigdzie realizowane. W najlepszym wypadku prześlizgnie się zadanie typu "oczyść teren z mutantów", co teoretycznie może wpłynąć na nieprzerwane uzupełnianie asortymentu. Ale pole jest bogate do zbioru fabularnego urodzaju. Jeśli wybierzemy opcję posterunku, to jest schemat dostaw (kalendarz, pora dnia), jest logistyka (asortyment dostarczany jest ręcznie lub transportem, drogą lub polami), jest ekonomia (nic nie przejdzie przez posterunek ot tak), jest relacja frakcji (dostawa wiąże się z ryzykiem utraty części ładunku, przychodzi z ochroną lub bez). Pewnie coś innego, do czego wystarczy wyobraźnia speca od fabuły. Tak, tak, już słyszę, jak ci, którzy to czytają, zaczynają mówić "ale jeszcze możesz…". Tak, możesz, oczywiście. Jest jeden fakt offline – uzupełnianie asortymentu – nieoczekiwanie naśladuje dość duży rozdział fabuły. I czy trzeba tłumaczyć, że fabuła ciągnie też za sobą realizację, równie ciekawą, na ile realizatorom wystarczy wyobraźnia i umiejętności (skrypty, pogoda, modele, itp.)? I to tylko według Sidorowicza. Skąd się bierze asortyment Barmana – pytanie jeszcze szersze, a na pierwszy rzut oka pytanie ślepe. Wiadomo, że zaopatrzenie najprawdopodobniej pochodzi od "Powinności", ale skąd jest ono u nich? Wielu zadawało to pytanie w ten czy inny sposób, ale ponieważ trudno jest przemyśleć dobry schemat, autorzy albo po prostu nie zwracają uwagi na ten moment, albo znajdują proste wyjście: wycinają ten asortyment, który, choć wygląda to logicznie, pokazuje, że autor był po prostu zbyt leniwy, żeby o tym pomyśleć.

     

    PRZYKŁAD Z ROZKŁADEM SIŁ FRAKCJI/SPAWNEM NA LOKACJI:

    Spoiler

    Wysypisko porzuconego sprzętu, o które toczą się walki między mutantami, stalkerami, wojskowymi i bandytami. Co decyduje o obecności tej lub innej grupy w tym lub innym momencie? Wiemy, jak autor to definiuje (twardo lub losowo), ale dlaczego dokładnie twardo lub dokładnie losowo? W niektórych modach autorzy, jeśli uznają to za stosowne, wyjaśniają to (na przykład w dialogach), a w niektórych nie. Wydawałoby się, że moment jest nieistotny: cóż za różnica, kto tam jest teraz i dlaczego, skoro nie jest to w żaden sposób powiązane z fabułą? To tylko szczegół, który wynika z potrzeby zapełnienia przez kogoś pustego miejsca. I nie obchodzi nas, kto tam jest teraz, w momencie naszego wejścia tam, jedyna różnica polega na tym, że będziemy walczyć (jeśli obecni tam są wrogowie GG) lub nie będziemy walczyć, jeśli są przyjaciele lub jeśli tylko przejdziemy obok. Teren ten żyje własnym życiem, niezależnie od tego, czy się tam udamy, czy nie, i jeśli autor nie powiąże w żaden sposób wydarzeń na nim z fabułą, co zdarza się często, to de facto dostajemy część Strefy (i nie pustą, z własnymi obiektami, spawnem i jakimś wstępem!), całkowicie pominiętą w fabule. O tę część Strefy można zadać niewiarygodną liczbę pytań, a odpowiedzi na nie otwierają kolejne żyzne pole dla twórcy fabuły.

     

    PRZYKŁAD Z ROZPRZESTRZENIENIEM INFORMACJI O CZYMŚ:

    Spoiler

    Weźmy modyfikację artefaktów. Wiemy, że informacje o tym, jak i co zmodyfikować, otrzymujemy z notatek mistrza od zleceniodawcy jako nagrodę za wykonanie zadania. Otóż np. realizacja pozyskania tych informacji też może być inna. Skąd on to wiedział? Jeśli istnieją informacje (i metodologia), że rzadki i cenny artefakt można zmodyfikować w jeszcze rzadszy i bardziej wartościowy, to w jaki sposób zdobyli go ci, którzy go rozpowszechniają? Jeśli ten stalker, który miał umowną "Nocną Gwiazdę", rzadką i kosztowną, to czy poszedł i rzucił nią we wszystkie anomalie z rzędu w nadziei, że może zajdzie transmutacja? Tak, istnieją historie o tym, jak artefakt przypadkowo wpadł w anomalię, przypadkowo pojawiła się modyfikacja i tak dalej. Ale czy takie informacje można umieścić w systemowy strumień? To najrzadszy przypadek. Są też naukowcy. Którzy eksperymentują (jak? w jakim celu? w jakich warunkach? jaką metodą? jakimi zasobami?) na artefaktach i otrzymują modyfikaty. Informacje o procesie i efektach docierają do nas w formie faktu i to często z ręki dziesiątej. Umowny Tolik na Kordonie za umowną kurtkę mówi nam, że "jak coś rzucisz, to otrzymasz to. Info od okularników!" W jaki sposób ta informacja rozprzestrzenia się od jajogłowych? Po co mieliby rozpowszechniać te informacje? W nagrodę za przysługę wykonaną przez jakąś postać. Jeśli przekażą te informacje bezpośrednio GG za zadanie, wszystko jest jasne. W innych przypadkach traci się historię. Wiemy tylko, że jakaś informacja dotarła od naukowców do Tolika. Przez dziesiątą rękę? Z pewnością. Przez jakie? Nie obchodzi nas to. A może bezpośrednio? Tak, to też nie ma znaczenia, informacje po prostu są, mamy ich dość i wykorzystujemy je do własnych celów… Ale stop! Tu znowu jest luka, znowu coś całkiem ciekawego z punktu widzenia fabuły wydarzyło się offline.

     

    PRZYKŁAD Z URZĄDZENIEM STREFY:

    Spoiler

    W oryginalnym CCz anomalie były naprawiane. Następnie uczyniono je dynamicznymi. Potem nauczono się trochę je kontrolować (za pomocą artefaktów, dobrego słowa i pistoletu, itp.). I to wszystko? Maksimum, które można wycisnąć z fabuły, to to, że "Rubinowa bateryjka" eliminuje anomalię? Ale dlaczego jest likwidowana? Jak powstają anomalie? Dlaczego Striełok, który rozwiązał samą zagadkę Strefy, jest zupełnie nieświadomy, dlaczego pojawiają się anomalie i dlaczego tak funkcjonują? On wie, że "Elektra" jest razi prądem, a karuzela kręci i rozrywa. Wie. Z własnego doświadczenia lub z PDA. I to wszystko. Jak pojawiły się anomalie? Strefa ich stworzyła? Dlaczego Striełok jest taki pewien? Sacharow mu tak powiedział? A może to Sacharow steruje anomaliami z bunkra? Może historia "Świadomości" to kolejna bajka, ale tak naprawdę to kujony z Jantaru stoją za wszystkim? Może nie ma "Świadomości"?.. Może...

     

    WNIOSKI:

    Spoiler

    Jak widać, jest to bardzo łatwe do rozwinięcia, a chodzi tu o wiele sposobów - w wyobraźni konkretnego autora. Najważniejsze w tym podejściu jest to, aby nie brać wydarzeń offline za coś obowiązkowego, niepodlegającego rozpatrzeniu, a to natychmiast tworzy łańcuch "Ogólna fabuła" -> "Linie fabularne" -> "Zadania". Ale łatwo jest "rozpłynąć się" w fantazjach. Fabuła zbudowana na takim podejściu musi być oczywiście przemyślana i ściśle przestrzegana w realizacji, w każdym razie do momentu napisania konkretnych questów i oczywiście w miarę możliwości, gdyż realizacja fabuły może być trudna przy dostępnych środkach gry, więc polot fantazji trzeba w pewnym stopniu trzymać w ryzach i po prostu wrócić do tego, że nawet w oryginalnej historii wiele rzeczy jest w offline, a to może być używane nawet bez szczególnego zamiłowania do jednej rzeczy.

    Kończąc i podsumowując, wróćmy do Sidorowicza (ale on jest tu tylko przykładem – no cóż, z kogoś trzeba brać przykład!). Rozważyłem trzy opcje uzupełnienia jego asortymentu: posterunek, wewnątrz, zrzut z helikoptera. Ale biada tej osobie od fabuły, która zdecydował się rozwinąć ten moment w fabule i jednocześnie zgodziła się ze mną co do liczby opcji uzupełnienia asortymentu. Nie dałem kilku dodatkowych opcji i nie mam zamiaru ich dawać - aby było jasne, że nie ma takich wydarzeń offline, które byłyby ograniczone dowolną liczbą opcji rozwoju. Fabuła, którą piszesz, jest twoją fabułą i tylko ty możesz wymyślić i określić jej rozwój w ogóle lub w częściach.

     

    NA ZAKOŃCZENIE:

    Spoiler

    Celowo wzięto trzy lokacje z początku gry z oryginalnego Cienia Czarnobyla. Faktem jest, że wydarzenia offline w lokalizacjach blisko centrum Strefy są znacznie ważniejsze. A proste, powierzchowne przykłady na Kordonie, Wysypisku i Barze powinny tylko dać do zrozumienia, że bogactwo potencjalnej fabuły można zapewnić już na początkowym etapie gry. Oczywiście trudno spierać się z faktem, że prędzej czy później, bez wyjątku, wszelkie wydarzenia – czy to offline, czy online – sprowadzą się do zadania typu "znajdź-przynieś-zabij". Myślę, że nie powinieneś być tym rozczarowany, bo raczej nie da się od tego uciec. Ten fakt należy zaakceptować i skupić się na najważniejszej rzeczy: opracowanie zupełnie nowej fabuły (co może ogólnie utrudnić budowanie moda, zarówno na początkowym etapie, jak i późniejszych, gdy realizacja jest w toku) nie jest konieczne, ponieważ może wystarczyć tylko rozwinięcie offline momentów już istniejącej fabuły. Przy pewnej dozie fantazji, każde (!) pytanie z tego artykułu pociągnie za sobą gałąź fabularną, a nawet kilka, plus kilka zadań wieńczących fabułę, a to właśnie generuje i w dużej mierze determinuje samą rozgrywkę, aż do ciekawości i nieprzewidywalności, do której wielu aspiruje.

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1032-rol-offlayn-sobytiy-v-sozdanii-syuzheta/

    • Ważne 1
  18. NAZWA: Tworzenie żywego świata gry
    TWÓRCA: Холод

     

    "Nierozłączną częścią scenariusza gry jest świat, w którym rozgrywają się wydarzenia ze scenariusza, a także jego wypełnienia NPC'ami, ponieważ ono może przenieść go do nowych akcji i wydarzeń.
    Mówiąc o świecie stalkera, z pewnością od razu czujemy jakąś dynamikę i żywotność tego świata. Ale, co zaskakujące, tego często brakuje w amatorskich modyfikacjach.
    Jak więc stworzyć żywy świat? Porozmawiajmy o tym."

     

     

    RUTYNOWE ZADANIA W KAŻDEJ FRAKCJI:

    Spoiler

    Po pierwsze, w grze, którą wszyscy kochamy, zawsze można szukać artefaktów, polować na mutanty, a może nawet na ludzi. W tym miejscu pojawia się pierwszy błąd niektórych twórców modów. Często ta część pozostaje niedopracowana lub nawet nietknięta, dlatego robienie tego staje się nudne. Rozwiązanie tego problemu jest w teorii dość proste. Wystarczy dodać dobrze zaprojektowane zadania do tych aktywności. Przykładem jest poszukiwanie artefaktu w Zewie Prypeci i zadania Brodacza lub zadaniach Sidorowicza w Cieniu Czarnobyla. Robiąc zadanie z tym celem, nie zapomnij zadać sobie pytania. Dlaczego należy to zrobić? Co jest celem? Warto zadbać także o dynamikę wydarzeń (ulubiona przez wszystkich symulacja życia i alife, przykład to Anomaly + living zone).

     

    WYDARZENIA W OFFLINE:

    Spoiler

    Dlatego zachęcono gracza do robienia rzeczy, które są znane wszystkim stalkerom. I wtedy uświadamiamy sobie, że zapomnieliśmy o jeszcze jednej ważnej rzeczy, a mianowicie o badaniu/eksploracji świata. Wszyscy uwielbiamy wędrować po lokacjach, nawet jeśli widzieliśmy je już 100 razy w oryginale lub innych modach. Oto kolejne odkrycie wielu twórców modów. Często świat, w którym się znajdujemy jest pusty i w ogóle nie zachęca graczy do poszukiwań, jeśli lokacja jest stara, to po prostu dalej robimy inne rzeczy, a jeśli jest nowa, ręcznie i od nowa stworzona, to doznajemy pewnego rozczarowania i pustki. Co z tym zrobić?

    Jako przykład inspiracji można nawet posłużyć się grą spoza naszego środowiska, na przykład dobrze znanym Skyrim'em. Świetny przykład świata do eksploracji. Za każdym razem, gdy wyjdziemy poza miasto, możemy być świadkami różnych wydarzeń lub znaleźć coś, czego wcześniej nie widzieliśmy. Na przykład spotkana postać może zlecić nam cały łańcuch ekscytujących zadań lub po prostu opowiedzieć ciekawą historię, a może nawet znajdziemy kamienie, które dodadzą naszej postaci buff'a. Pomysł z postaciami można po prostu wziąć i wykorzystać w Stalkerze, ale znajdowanie różnych przedmiotów uosabia odkrycie czyjegoś schowka z cennym łupem, jednakże to nie koniec naszych fantazji, prawda? Na przykład można dodać trochę mistycyzmu. Dodatkowo możemy natknąć się na miejsca, w których ewidentnie miały miejsce jakieś wydarzenia, czy to okradziony wóz, martwa osoba pod drzewem, spalona farma czy jaskinia, w której ponownie znajdziemy łańcuch zadań. Odzwierciedlamy to w naszym settingu i otrzymujemy ograbienie karawanów (czy to pracowników dla kupców, naukowców, lub grup wroga), oskryptowane wydarzenia i wszystkie te same generacje zadań po przybyciu do jakiegoś miejsca (dalej to już wizja wg twojej wyobraźni). A może dodamy jeszcze do naszego świata notatki, PDA, dokumenty, które mogą zawierać różne informacje. Wskazówki dotyczące schowków, wyjaśnienie lore'a gry, lub po prostu bezużyteczne informacje z pewnymi rozmowami. Robiono to już w modyfikacjach i nikt nie zabrania robienia tego dalej w innych modach. Najważniejsze żeby nie przesadzić, bo podawanie większej ilości historii za pomocą notatek i innych rzeczy to kiepski pomysł. Wypełnianie naszego świata najróżniejszymi rzeczami, krzyczenie graczowi do ucha i szturchanie go w oko, że coś się stało, dzieje się i będzie się działo, to świetny trik, który sprawia, że zostanie w modzie na kolejne kilka godzin. Ale nie śpieszmy się do skrajności i rzeźbienia kolejnej solijanki. Starajmy się robić wszystko zgodnie z ogólnym planem i fabułą, od czasu do czasu wychodząc poza granice, wprowadzając coś niezwykłego i nieoczekiwanego dla gracza.

    Aby stworzyć coś takiego, można skorzystać z metody projektowania narracji (narrative design), której istotą jest przedstawienie historii nie tylko za pomocą dialogów i notatek, ale także muzyki z oprawą wizualną. Aby dać krótki przykład, można wziąć postać, wyposażyć ją w różne charakterystyczne dla niej przedmioty, wyposażyć w odpowiedni sprzęt i pozwolić w każdy możliwy sposób graczowi zrozumieć, jakim jest człowiekiem (lub nie jest) poprzez wizualizację, nie skupiając się tylko na jego wyglądzie.

    Dlatego, aby świat nie wyglądał jak dekoracja z kartonu, musimy go w całości wypełnić. Jeśli gracz ma w końcu okazję gdzieś pojechać i coś zobaczyć, to pójdzie, popatrzy, dotknie, a nawet spróbuje się zepsuć, przejść czy przeskoczyć.

    Dlatego te gry, które przestrzegają tej prostej zasady, wydają się najbardziej żywe. Dla jasności wyobraźmy sobie dwie sytuacje:

    1. Na zlecenie, gracz musi zakraść się do magazynu zwykłej firmy handlowej, aby podążać za jedną z postaci. Skrada się w cieniu między pudłami ze zwykłymi towarami, bo to zwykła firma. Dowiedziawszy się wszystkiego, co było potrzebne, gracz odchodzi.
    2. Gracz robi to samo, ale wśród towarów znajduje skrzynie ze specjalną substancją. Nie jest to w żaden sposób podkreślane, to tylko przypadkowa obserwacja gracza.

    W drugim przypadku do gry dodawane są kolejne szczegóły, po raz kolejny przekonujemy się, że postacie, podobnie jak prawdziwi ludzie, ulegają nałogom i chciwości. Oni mogą wykonywać swoją brudną robotę, podczas gdy ty wykonujesz swoją.

     

    INNY PRZYKŁAD:

    Spoiler

    Jak inaczej sprawić, by gracz doświadczał pozytywnych emocji podczas przechodzenia gry? Sprawmy, by poczuł się mądry. Nagradzajmy go za eksplorację, określony styl gry i uwagę. Ale nie ukrywajmy treści za bardzo, chyba że mamy pewność, że ci sami ludzie będą grać w naszego moda jeszcze kilka lat.

     

    NA ZAKOŃCZENIE:

    Spoiler

    Nie zapomniajmy o ogólnej harmonii wypełnienia świata gry, wszystko powinno być zgodne ze wspólną ideą i planem.

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/2177-sozdanie-zhivogo-igrovogo-mira/

    • Ważne 1
  19. NAZWA: Tworzenie miejsca snu [CoP]
    TWÓRCA: Nuklia

     

    JAKIE PLIKI SIĘ PRZYDADZĄ:

    Spoiler
    • all.spawn
    • PDA.script
    • xr_effects.script

     

    OD CZEGO ZACZĄĆ:

    Spoiler

    1. all.spawn:

    Spoiler

    Rozmieszczenie sekcji space-restryktora w all.spawnie, przywiązanie nazwy do określonego smart-terrain'u (esc_b1) nie jest obowiązkowa, ale wymagana dla jasności.

    [15001]
    ; cse_abstract properties
    section_name = space_restrictor
    name = esc_b1_sr_sleep
    position = -16.1344470977783,0.959998846054077,259.680816650391
    direction = 0,0,0
    version = 0x7c
    script_version = 8
    
    ; cse_alife_object properties
    game_vertex_id = 934
    distance = 0
    level_vertex_id = 3366
    object_flags = 0xffffff3e
    custom_data = <<END
    [story_object]
    story_id = esc_b1_sr_sleep_id
    
    [logic]
    cfg = scripts\sr_sleep.ltx
    END
    
    ; cse_shape properties
    shapes = shape0
    shape0:type = box
    shape0:axis_x = 5.02119588851929,0,0
    shape0:axis_y = 0,5.0482006072998,0
    shape0:axis_z = 0,0,2.23479747772217
    shape0:offset = 0,0,0
    
    ; cse_alife_space_restrictor properties
    restrictor_type = 3
    

     

     

    Rejestrujemy nasze łóżko w skryptach.

    2. PDA.script:

    Spoiler
    ;linia.-288
    local sleep_zones_tbl =
    {
    {target = "zat_a2_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
    {target = "jup_a6_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
    {target = "pri_a16_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
    {target = "esc_b1_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
    }

     

     

    3. xr_effects.script:

    Spoiler
    ;linia.-2846
    function sleep(actor, npc)
    local sleep_zones = {
    "zat_a2_sr_sleep",
    "jup_a6_sr_sleep",
    "pri_a16_sr_sleep",
    "esc_b1_sr_sleep",
    "actor_surge_hide_2"
    }

     

     

     

    ŹRÓDŁO:

    https://ap-pro.ru/forums/topic/1178-cop-sozdanie-mesta-sna/

    • Ważne 1
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.