Storylets – nowe funkcje programu Twine

Mariusz Pisarski | 30.04.2023

Kolejne ciekawe zmiany przynoszą nowe wersje programu Twine. Ostatnio w silniku Harlowe pojawiły się nowe makra określane mianem storylets. Zainspirowane proceduralnymi dialogami z gry Façade, wykorzystywane w Fallen London i w innych grach Emily Short, a niedawno wprowadzone do popularnego silnika Harlowe w Twine, storylets obiecują projektowanie nieliniowych narracji w sposób atrakcyjniejszy i dla autora i dla czytelnika (gracza). Emily Short definiuje storylets jako “niewielkie kawałki treści narracyjnej (wydarzenia, fragmenty) posiadające warunki wstępne, które określają, kiedy dana treść jest "odtwarzana", oraz efekty końcowe, które następują po "odtwarzaniu" danej treści.

...

Dotychczasowe omówienia kategorii storylets, oraz sama dokumentacja Twine, nie mówią zbyt wiele o korzeniach tej figury, a szkoda. Na poziomie skryptu pojedynczego segmentu opowieści, „warunki wstępne” oraz ich efekty można odnaleźć już w najwcześniejszych grach tekstowych (jeśli masz klucz, otwierasz drzwi do następnej lokacji) oraz w pionierskich hipertekstach jak popołudnie. pewna historia (jeśli nie wiesz kim jest Lolly, nie przejdziesz do jej gabinetu). Na poziomie grupy segmentów i dynamicznie wytwarzanych relacyjnych sekwencji storylets wywieść można z narracji budowanych na zasadzie talii kart, gdzie poszczególne segmenty rozdawane są jak w grze karcianej, a rozdanie z grupy obwarowane jest jakąś regułą (logiczną, frekwencyjną). Metody talli kart, jako element tzw. hipertekstu rzeźbiarskiego (sculptural hypertext) są wbudowane w najnowszą edycję Storyspace 3 i ich sztandarową demonstracją pozostaje powieść Those Trojan Girls Marka Bernsteina. Storyspace i Twine, każdy program na swój sposób, oferują też rozbudowany arsenał wymogów, warunków i działań, jakie przypisać można do pojedynczego linku, segmentu, otagowanej sekwencji.

Na kursach sztuki pisania, groznawstwa czy mediów cyfrowych, kategoria storylets może okazać się przydatna w zilustrowaniu wariantywności, która zamiast linków budowana jest przez semantyczne reguły odnoszące się do stanu zaawansowania narracji, postępów bohaterów itp. Proces twórczy, w przypadku zastosowaniu storylets, może znacząco różnić się od standardowego rozrysowywania drzewek fabuły. Autorzy, którzy doskonale wiedzą, co chcą pisać mogą preferować storylets zamiast linków, każdą scenę mogą bowiem poprzedzić określeniem warunków na jakich przejście z niej do innych się odbywa. Twine pozwala na określenie warunków już na początku segmentu, następnie, po napisaniu jego treści, praca autora się w zasadzie kończy. Stworzone muszą być jednak segmenty, do których warunki się odnoszą. Jeśli treści jest wystarczająco dużo to przebieg lektury / rozgrywki sortuje się sam, tworząc w locie dozwolone połączenia między segmentami. W dokumentacji Harlowe widnieje taki przykład:

(storylet: when $season is "winter" and $married is false and visits is 0)

Jeśli powyższe makro zamieścimy na początku pasażu, to Twine, wykorzystując wbudowaną w storylet funkcję wyszukującą “lambda” pozwoli czytelnikowi przejść do kolejnego “otwartego”, a zatem spełniającego trzy powyższe warunki (jest zima, bohater nie jest w związku małżeńskim, a obecnego fragmentu jeszcze nie odwiedzono) segmentu oznaczonego jako storylet. Sortowanie takich segmentów, sprawdzanie, które są dostępne, a które nie, odbywa się w tle. Autor musi jedynie określić sposób w jaki sortowanie zostanie uruchomione (np. za pomocą makra “link-goto”). Użyte musi być też dodatkowe makro (open-storylets:):

(for: each _p, ...(open-storylets:)'s 1stTo5th)[(link-goto: _p's name) - ]

Powyższy kod iteruje po liście branych pod uwagę segmentów i wybiera z pierwszego, który jest dostępny (otwarty). Po dodaniu w tym samym pasażu tak uzbrojonego makra (open-storylets:) nasz oparty na storylets system zaczyna działać. Lektura w locie i dynamicznie dostosowuje się do wyborów czytelnika bądź do “zewnętrznej” sytuacji w świecie przedstawionym. Czy tego rodzaju system warunkowego wyświetlania się treści, oddalający się zarówno od struktur linkowych jak i prostych warunków opartych na makrach (if:) (else:), do którego potrzebne są lambdy, zagnieżdżone makra, iteracje po tablicach danych, może stanowić wiążącą alternatywę dla autorów? Czas pokaże.

Elektroblog